From f5a20ea3e5aef6c1f2be83697d99e65aa863eef8 Mon Sep 17 00:00:00 2001 From: prih Date: Fri, 11 Dec 2020 01:20:39 +0200 Subject: [PATCH 1/8] fix: parse result, prebuild clean, remove GEO type --- lib/data-types.js | 115 ------------------------------ lib/dialects/sqlite/data-types.js | 1 - lib/dialects/sqlite/query.js | 2 +- package.json | 5 +- 4 files changed, 3 insertions(+), 120 deletions(-) diff --git a/lib/data-types.js b/lib/data-types.js index 68272ed..f29c3bd 100644 --- a/lib/data-types.js +++ b/lib/data-types.js @@ -2,7 +2,6 @@ const util = require('util'); const _ = require('lodash'); -const wkx = require('wkx'); const sequelizeErrors = require('./errors'); const Validator = require('./utils/validator-extras').validator; const momentTz = require('moment-timezone'); @@ -778,118 +777,6 @@ class ARRAY extends ABSTRACT { } } -/** - * A column storing Geometry information. - * It is only available in PostgreSQL (with PostGIS), MariaDB or MySQL. - * - * GeoJSON is accepted as input and returned as output. - * - * In PostGIS, the GeoJSON is parsed using the PostGIS function `ST_GeomFromGeoJSON`. - * In MySQL it is parsed using the function `GeomFromText`. - * - * Therefore, one can just follow the [GeoJSON spec](http://geojson.org/geojson-spec.html) for handling geometry objects. See the following examples: - * - * @example Defining a Geometry type attribute - * DataTypes.GEOMETRY - * DataTypes.GEOMETRY('POINT') - * DataTypes.GEOMETRY('POINT', 4326) - * - * @example Create a new point - * const point = { type: 'Point', coordinates: [39.807222,-76.984722]}; - * - * User.create({username: 'username', geometry: point }); - * - * @example Create a new linestring - * const line = { type: 'LineString', 'coordinates': [ [100.0, 0.0], [101.0, 1.0] ] }; - * - * User.create({username: 'username', geometry: line }); - * - * @example Create a new polygon - * const polygon = { type: 'Polygon', coordinates: [ - * [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], - * [100.0, 1.0], [100.0, 0.0] ] - * ]}; - * - * User.create({username: 'username', geometry: polygon }); - * - * @example Create a new point with a custom SRID - * const point = { - * type: 'Point', - * coordinates: [39.807222,-76.984722], - * crs: { type: 'name', properties: { name: 'EPSG:4326'} } - * }; - * - * User.create({username: 'username', geometry: point }) - * - * - * @see {@link DataTypes.GEOGRAPHY} - */ -class GEOMETRY extends ABSTRACT { - /** - * @param {string} [type] Type of geometry data - * @param {string} [srid] SRID of type - */ - constructor(type, srid) { - super(); - const options = _.isPlainObject(type) ? type : { type, srid }; - this.options = options; - this.type = options.type; - this.srid = options.srid; - } - _stringify(value, options) { - return `GeomFromText(${options.escape(wkx.Geometry.parseGeoJSON(value).toWkt())})`; - } - _bindParam(value, options) { - return `GeomFromText(${options.bindParam(wkx.Geometry.parseGeoJSON(value).toWkt())})`; - } -} - -GEOMETRY.prototype.escape = false; - -/** - * A geography datatype represents two dimensional spacial objects in an elliptic coord system. - * - * __The difference from geometry and geography type:__ - * - * PostGIS 1.5 introduced a new spatial type called geography, which uses geodetic measurement instead of Cartesian measurement. - * Coordinate points in the geography type are always represented in WGS 84 lon lat degrees (SRID 4326), - * but measurement functions and relationships ST_Distance, ST_DWithin, ST_Length, and ST_Area always return answers in meters or assume inputs in meters. - * - * __What is best to use? It depends:__ - * - * When choosing between the geometry and geography type for data storage, you should consider what you’ll be using it for. - * If all you do are simple measurements and relationship checks on your data, and your data covers a fairly large area, then most likely you’ll be better off storing your data using the new geography type. - * Although the new geography data type can cover the globe, the geometry type is far from obsolete. - * The geometry type has a much richer set of functions than geography, relationship checks are generally faster, and it has wider support currently across desktop and web-mapping tools - * - * @example Defining a Geography type attribute - * DataTypes.GEOGRAPHY - * DataTypes.GEOGRAPHY('POINT') - * DataTypes.GEOGRAPHY('POINT', 4326) - */ -class GEOGRAPHY extends ABSTRACT { - /** - * @param {string} [type] Type of geography data - * @param {string} [srid] SRID of type - */ - constructor(type, srid) { - super(); - const options = _.isPlainObject(type) ? type : { type, srid }; - this.options = options; - this.type = options.type; - this.srid = options.srid; - } - _stringify(value, options) { - return `GeomFromText(${options.escape(wkx.Geometry.parseGeoJSON(value).toWkt())})`; - } - _bindParam(value, options) { - return `GeomFromText(${options.bindParam(wkx.Geometry.parseGeoJSON(value).toWkt())})`; - } -} - - -GEOGRAPHY.prototype.escape = false; - /** * The cidr type holds an IPv4 or IPv6 network specification. Takes 7 or 19 bytes. * @@ -1011,8 +898,6 @@ const DataTypes = module.exports = { REAL, 'DOUBLE PRECISION': DOUBLE, DOUBLE, - GEOMETRY, - GEOGRAPHY, CIDR, INET, MACADDR, diff --git a/lib/dialects/sqlite/data-types.js b/lib/dialects/sqlite/data-types.js index d3a9ff3..eabb0a5 100644 --- a/lib/dialects/sqlite/data-types.js +++ b/lib/dialects/sqlite/data-types.js @@ -45,7 +45,6 @@ module.exports = BaseTypes => { BaseTypes.ENUM.types.sqlite = false; BaseTypes.REAL.types.sqlite = ["REAL"]; BaseTypes.DOUBLE.types.sqlite = ["DOUBLE PRECISION"]; - BaseTypes.GEOMETRY.types.sqlite = false; BaseTypes.JSON.types.sqlite = ["JSON", "JSONB"]; class JSONTYPE extends BaseTypes.JSON { diff --git a/lib/dialects/sqlite/query.js b/lib/dialects/sqlite/query.js index ca9030b..2b2fe3f 100644 --- a/lib/dialects/sqlite/query.js +++ b/lib/dialects/sqlite/query.js @@ -355,7 +355,7 @@ class Query extends AbstractQuery { return null; }; - if (method === "all" && typeof conn.exec === "function") { + if (method === "all") { let tableNames = []; if (this.options && this.options.tableNames) { tableNames = this.options.tableNames; diff --git a/package.json b/package.json index 31d5ae2..c17d4ed 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ ], "scripts": { "build": "babel lib --out-dir dist --copy-files --source-maps inline", - "prebuild": "if exist dist RMDIR /Q/S dist 2>nul", + "prebuild": "rm -rf dist && mkdir dist", "publish": "npm publish --access public" }, "bugs": { @@ -45,8 +45,7 @@ "toposort-class": "^1.0.1", "util": "^0.12.1", "uuid": "^3.3.3", - "validator": "^10.11.0", - "wkx": "^0.4.8" + "validator": "^10.11.0" }, "devDependencies": { "@babel/cli": "^7.7.4", From 3dcd7349a7d6b74cec36542b399eb34b905715e1 Mon Sep 17 00:00:00 2001 From: prih Date: Fri, 11 Dec 2020 01:21:24 +0200 Subject: [PATCH 2/8] build --- dist/associations/base.js | 6 +- dist/associations/belongs-to-many.js | 22 +- dist/associations/belongs-to.js | 22 +- dist/associations/has-many.js | 22 +- dist/associations/has-one.js | 22 +- dist/associations/helpers.js | 2 +- dist/associations/index.js | 2 +- dist/associations/mixin.js | 2 +- dist/data-types.js | 455 ++++++------------ dist/deferrable.js | 58 +-- dist/dialects/abstract/connection-manager.js | 6 +- dist/dialects/abstract/index.js | 2 +- dist/dialects/abstract/query-generator.js | 8 +- .../abstract/query-generator/helpers/quote.js | 2 +- .../abstract/query-generator/operators.js | 2 +- .../abstract/query-generator/transaction.js | 2 +- dist/dialects/abstract/query.js | 6 +- dist/dialects/mysql/query-generator.js | 26 +- dist/dialects/parserStore.js | 2 +- dist/dialects/sqlite/connection-manager.js | 26 +- dist/dialects/sqlite/data-types.js | 153 +++--- dist/dialects/sqlite/index.js | 22 +- dist/dialects/sqlite/query-generator.js | 26 +- dist/dialects/sqlite/query-interface.js | 2 +- dist/dialects/sqlite/query.js | 29 +- dist/errors/association-error.js | 22 +- dist/errors/base-error.js | 22 +- dist/errors/bulk-record-error.js | 22 +- dist/errors/connection-error.js | 22 +- dist/errors/connection/access-denied-error.js | 22 +- .../connection-acquire-timeout-error.js | 22 +- .../connection/connection-refused-error.js | 22 +- .../connection/connection-timed-out-error.js | 22 +- .../errors/connection/host-not-found-error.js | 22 +- .../connection/host-not-reachable-error.js | 22 +- .../connection/invalid-connection-error.js | 22 +- dist/errors/database-error.js | 22 +- .../database/exclusion-constraint-error.js | 22 +- .../database/foreign-key-constraint-error.js | 22 +- dist/errors/database/timeout-error.js | 22 +- .../database/unknown-constraint-error.js | 22 +- dist/errors/eager-loading-error.js | 22 +- dist/errors/empty-result-error.js | 22 +- dist/errors/index.js | 2 +- dist/errors/instance-error.js | 22 +- dist/errors/optimistic-lock-error.js | 22 +- dist/errors/query-error.js | 22 +- dist/errors/sequelize-scope-error.js | 22 +- dist/errors/validation-error.js | 26 +- .../validation/unique-constraint-error.js | 22 +- dist/hooks.js | 2 +- dist/index-hints.js | 2 +- dist/instance-validator.js | 6 +- dist/model-manager.js | 6 +- dist/model.js | 38 +- dist/operators.js | 2 +- dist/promise.js | 2 +- dist/query-interface.js | 6 +- dist/query-types.js | 2 +- dist/sequelize.js | 26 +- dist/sql-string.js | 2 +- dist/table-hints.js | 2 +- dist/transaction.js | 6 +- dist/utils.js | 62 +-- dist/utils/classToInvokable.js | 2 +- dist/utils/deprecations.js | 2 +- dist/utils/logger.js | 6 +- dist/utils/validator-extras.js | 2 +- 68 files changed, 805 insertions(+), 832 deletions(-) diff --git a/dist/associations/base.js b/dist/associations/base.js index 0511d92..b06125b 100644 --- a/dist/associations/base.js +++ b/dist/associations/base.js @@ -88,9 +88,7 @@ const { */ -let Association = -/*#__PURE__*/ -function () { +let Association = /*#__PURE__*/function () { function Association(source, target, options = {}) { _classCallCheck(this, Association); @@ -160,4 +158,4 @@ function () { }(); module.exports = Association; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvYmFzZS5qcyJdLCJuYW1lcyI6WyJBc3NvY2lhdGlvbkVycm9yIiwicmVxdWlyZSIsIkFzc29jaWF0aW9uIiwic291cmNlIiwidGFyZ2V0Iiwib3B0aW9ucyIsInNjb3BlIiwiaXNTZWxmQXNzb2NpYXRpb24iLCJhcyIsImFzc29jaWF0aW9uVHlwZSIsImhhc0FsaWFzIiwiaW5wdXQiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJlbGVtZW50IiwidG1wSW5zdGFuY2UiLCJwcmltYXJ5S2V5QXR0cmlidXRlIiwiYnVpbGQiLCJpc05ld1JlY29yZCIsIlN5bWJvbCIsImZvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUF1QkMsT0FBTyxDQUFDLGFBQUQsQ0FBcEM7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTZFTUMsVzs7O0FBQ0osdUJBQVlDLE1BQVosRUFBb0JDLE1BQXBCLEVBQTRCQyxPQUFPLEdBQUcsRUFBdEMsRUFBMEM7QUFBQTs7QUFDeEM7OztBQUdBLFNBQUtGLE1BQUwsR0FBY0EsTUFBZDtBQUVBOzs7O0FBR0EsU0FBS0MsTUFBTCxHQUFjQSxNQUFkO0FBRUEsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsS0FBTCxHQUFhRCxPQUFPLENBQUNDLEtBQXJCO0FBQ0EsU0FBS0MsaUJBQUwsR0FBeUIsS0FBS0osTUFBTCxLQUFnQixLQUFLQyxNQUE5QztBQUNBLFNBQUtJLEVBQUwsR0FBVUgsT0FBTyxDQUFDRyxFQUFsQjtBQUVBOzs7OztBQUlBLFNBQUtDLGVBQUwsR0FBdUIsRUFBdkI7O0FBRUEsUUFBSU4sTUFBTSxDQUFDTyxRQUFQLENBQWdCTCxPQUFPLENBQUNHLEVBQXhCLENBQUosRUFBaUM7QUFDL0IsWUFBTSxJQUFJUixnQkFBSixDQUFzQiwyQkFBMEJLLE9BQU8sQ0FBQ0csRUFBRyxpQ0FBdEMsR0FDM0IsZ0RBRE0sQ0FBTjtBQUdEO0FBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7O29DQVFnQkcsSyxFQUFPO0FBQ3JCLFVBQUksQ0FBQ0MsS0FBSyxDQUFDQyxPQUFOLENBQWNGLEtBQWQsQ0FBTCxFQUEyQjtBQUN6QkEsUUFBQUEsS0FBSyxHQUFHLENBQUNBLEtBQUQsQ0FBUjtBQUNEOztBQUVELGFBQU9BLEtBQUssQ0FBQ0csR0FBTixDQUFVQyxPQUFPLElBQUk7QUFDMUIsWUFBSUEsT0FBTyxZQUFZLEtBQUtYLE1BQTVCLEVBQW9DLE9BQU9XLE9BQVA7QUFFcEMsY0FBTUMsV0FBVyxHQUFHLEVBQXBCO0FBQ0FBLFFBQUFBLFdBQVcsQ0FBQyxLQUFLWixNQUFMLENBQVlhLG1CQUFiLENBQVgsR0FBK0NGLE9BQS9DO0FBRUEsZUFBTyxLQUFLWCxNQUFMLENBQVljLEtBQVosQ0FBa0JGLFdBQWxCLEVBQStCO0FBQUVHLFVBQUFBLFdBQVcsRUFBRTtBQUFmLFNBQS9CLENBQVA7QUFDRCxPQVBNLENBQVA7QUFRRDs7U0FFQUMsTUFBTSxDQUFDQyxHQUFQLENBQVcsNEJBQVgsQzt1QkFBNEM7QUFDM0MsYUFBTyxLQUFLYixFQUFaO0FBQ0Q7Ozs4QkFFUztBQUNSLGFBQU8sS0FBS0EsRUFBWjtBQUNEOzs7Ozs7QUFHSGMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCckIsV0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCB7IEFzc29jaWF0aW9uRXJyb3IgfSA9IHJlcXVpcmUoJy4vLi4vZXJyb3JzJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRpbmcgYXNzb2NpYXRpb25zIGluIHNlcXVlbGl6ZSBpcyBkb25lIGJ5IGNhbGxpbmcgb25lIG9mIHRoZSBiZWxvbmdzVG8gLyBoYXNPbmUgLyBoYXNNYW55IC8gYmVsb25nc1RvTWFueSBmdW5jdGlvbnMgb24gYSBtb2RlbCAodGhlIHNvdXJjZSksIGFuZCBwcm92aWRpbmcgYW5vdGhlciBtb2RlbCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uICh0aGUgdGFyZ2V0KS5cclxuICpcclxuICogKiBoYXNPbmUgLSBhZGRzIGEgZm9yZWlnbiBrZXkgdG8gdGhlIHRhcmdldCBhbmQgc2luZ3VsYXIgYXNzb2NpYXRpb24gbWl4aW5zIHRvIHRoZSBzb3VyY2UuXHJcbiAqICogYmVsb25nc1RvIC0gYWRkIGEgZm9yZWlnbiBrZXkgYW5kIHNpbmd1bGFyIGFzc29jaWF0aW9uIG1peGlucyB0byB0aGUgc291cmNlLlxyXG4gKiAqIGhhc01hbnkgLSBhZGRzIGEgZm9yZWlnbiBrZXkgdG8gdGFyZ2V0IGFuZCBwbHVyYWwgYXNzb2NpYXRpb24gbWl4aW5zIHRvIHRoZSBzb3VyY2UuXHJcbiAqICogYmVsb25nc1RvTWFueSAtIGNyZWF0ZXMgYW4gTjpNIGFzc29jaWF0aW9uIHdpdGggYSBqb2luIHRhYmxlIGFuZCBhZGRzIHBsdXJhbCBhc3NvY2lhdGlvbiBtaXhpbnMgdG8gdGhlIHNvdXJjZS4gVGhlIGp1bmN0aW9uIHRhYmxlIGlzIGNyZWF0ZWQgd2l0aCBzb3VyY2VJZCBhbmQgdGFyZ2V0SWQuXHJcbiAqXHJcbiAqIENyZWF0aW5nIGFuIGFzc29jaWF0aW9uIHdpbGwgYWRkIGEgZm9yZWlnbiBrZXkgY29uc3RyYWludCB0byB0aGUgYXR0cmlidXRlcy4gQWxsIGFzc29jaWF0aW9ucyB1c2UgYENBU0NBREVgIG9uIHVwZGF0ZSBhbmQgYFNFVCBOVUxMYCBvbiBkZWxldGUsIGV4Y2VwdCBmb3IgbjptLCB3aGljaCBhbHNvIHVzZXMgYENBU0NBREVgIG9uIGRlbGV0ZS5cclxuICpcclxuICogV2hlbiBjcmVhdGluZyBhc3NvY2lhdGlvbnMsIHlvdSBjYW4gcHJvdmlkZSBhbiBhbGlhcywgdmlhIHRoZSBgYXNgIG9wdGlvbi4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHNhbWUgbW9kZWwgaXMgYXNzb2NpYXRlZCB0d2ljZSwgb3IgeW91IHdhbnQgeW91ciBhc3NvY2lhdGlvbiB0byBiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBtb2RlbC5cclxuICpcclxuICogQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIGNhc2Ugd2hlcmUgdXNlcnMgaGF2ZSBtYW55IHBpY3R1cmVzLCBvbmUgb2Ygd2hpY2ggaXMgdGhlaXIgcHJvZmlsZSBwaWN0dXJlLiBBbGwgcGljdHVyZXMgaGF2ZSBhIGB1c2VySWRgLCBidXQgaW4gYWRkaXRpb24gdGhlIHVzZXIgbW9kZWwgYWxzbyBoYXMgYSBgcHJvZmlsZVBpY3R1cmVJZGAsIHRvIGJlIGFibGUgdG8gZWFzaWx5IGxvYWQgdGhlIHVzZXIncyBwcm9maWxlIHBpY3R1cmUuXHJcbiAqXHJcbiAqIGBgYGpzXHJcbiAqIFVzZXIuaGFzTWFueShQaWN0dXJlKVxyXG4gKiBVc2VyLmJlbG9uZ3NUbyhQaWN0dXJlLCB7IGFzOiAnUHJvZmlsZVBpY3R1cmUnLCBjb25zdHJhaW50czogZmFsc2UgfSlcclxuICpcclxuICogdXNlci5nZXRQaWN0dXJlcygpIC8vIGdldHMgeW91IGFsbCBwaWN0dXJlc1xyXG4gKiB1c2VyLmdldFByb2ZpbGVQaWN0dXJlKCkgLy8gZ2V0cyB5b3Ugb25seSB0aGUgcHJvZmlsZSBwaWN0dXJlXHJcbiAqXHJcbiAqIFVzZXIuZmluZEFsbCh7XHJcbiAqICAgd2hlcmU6IC4uLixcclxuICogICBpbmNsdWRlOiBbXHJcbiAqICAgICB7IG1vZGVsOiBQaWN0dXJlIH0sIC8vIGxvYWQgYWxsIHBpY3R1cmVzXHJcbiAqICAgICB7IG1vZGVsOiBQaWN0dXJlLCBhczogJ1Byb2ZpbGVQaWN0dXJlJyB9LCAvLyBsb2FkIHRoZSBwcm9maWxlIHBpY3R1cmUuXHJcbiAqICAgICAvLyBOb3RpY2UgdGhhdCB0aGUgc3BlbGxpbmcgbXVzdCBiZSB0aGUgZXhhY3Qgc2FtZSBhcyB0aGUgb25lIGluIHRoZSBhc3NvY2lhdGlvblxyXG4gKiAgIF1cclxuICogfSlcclxuICogYGBgXHJcbiAqIFRvIGdldCBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgZm9yZWlnbiBrZXkgY29sdW1uIGFkZGVkIGJ5IHNlcXVlbGl6ZSwgeW91IGNhbiB1c2UgdGhlIGBmb3JlaWduS2V5YCBvcHRpb24uIEl0IGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcsIHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lLCBvciBhbmQgb2JqZWN0IHR5cGUgZGVmaW5pdGlvbixcclxuICogZXF1aXZhbGVudCB0byB0aG9zZSBwYXNzZWQgdG8gYHNlcXVlbGl6ZS5kZWZpbmVgLlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiBVc2VyLmhhc01hbnkoUGljdHVyZSwgeyBmb3JlaWduS2V5OiAndWlkJyB9KVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGZvcmVpZ24ga2V5IGNvbHVtbiBpbiBQaWN0dXJlIHdpbGwgbm93IGJlIGNhbGxlZCBgdWlkYCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGB1c2VySWRgLlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiBVc2VyLmhhc01hbnkoUGljdHVyZSwge1xyXG4gKiAgIGZvcmVpZ25LZXk6IHtcclxuICogICAgIG5hbWU6ICd1aWQnLFxyXG4gKiAgICAgYWxsb3dOdWxsOiBmYWxzZVxyXG4gKiAgIH1cclxuICogfSlcclxuICogYGBgXHJcbiAqXHJcbiAqIFRoaXMgc3BlY2lmaWVzIHRoYXQgdGhlIGB1aWRgIGNvbHVtbiBjYW5ub3QgYmUgbnVsbC4gSW4gbW9zdCBjYXNlcyB0aGlzIHdpbGwgYWxyZWFkeSBiZSBjb3ZlcmVkIGJ5IHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50cywgd2hpY2ggc2VxdWVsaXplIGNyZWF0ZXMgYXV0b21hdGljYWxseSwgYnV0IGNhbiBiZSB1c2VmdWwgaW4gY2FzZSB3aGVyZSB0aGUgZm9yZWlnbiBrZXlzIGFyZSBkaXNhYmxlZCwgZS5nLiBkdWUgdG8gY2lyY3VsYXIgcmVmZXJlbmNlcyAoc2VlIGBjb25zdHJhaW50czogZmFsc2VgIGJlbG93KS5cclxuICpcclxuICogV2hlbiBmZXRjaGluZyBhc3NvY2lhdGVkIG1vZGVscywgeW91IGNhbiBsaW1pdCB5b3VyIHF1ZXJ5IHRvIG9ubHkgbG9hZCBzb21lIG1vZGVscy4gVGhlc2UgcXVlcmllcyBhcmUgd3JpdHRlbiBpbiB0aGUgc2FtZSB3YXkgYXMgcXVlcmllcyB0byBgZmluZGAvYGZpbmRBbGxgLiBUbyBvbmx5IGdldCBwaWN0dXJlcyBpbiBKUEcsIHlvdSBjYW4gZG86XHJcbiAqXHJcbiAqIGBgYGpzXHJcbiAqIHVzZXIuZ2V0UGljdHVyZXMoe1xyXG4gKiAgIHdoZXJlOiB7XHJcbiAqICAgICBmb3JtYXQ6ICdqcGcnXHJcbiAqICAgfVxyXG4gKiB9KVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byB1cGRhdGUgYW5kIGFkZCBuZXcgYXNzb2NpYXRpb25zLiBDb250aW51aW5nIHdpdGggb3VyIGV4YW1wbGUgb2YgdXNlcnMgYW5kIHBpY3R1cmVzOlxyXG4gKiBgYGBqc1xyXG4gKiB1c2VyLmFkZFBpY3R1cmUocCkgLy8gQWRkIGEgc2luZ2xlIHBpY3R1cmVcclxuICogdXNlci5zZXRQaWN0dXJlcyhbcDEsIHAyXSkgLy8gQXNzb2NpYXRlIHVzZXIgd2l0aCBPTkxZIHRoZXNlIHR3byBwaWN0dXJlLCBhbGwgb3RoZXIgYXNzb2NpYXRpb25zIHdpbGwgYmUgZGVsZXRlZFxyXG4gKiB1c2VyLmFkZFBpY3R1cmVzKFtwMSwgcDJdKSAvLyBBc3NvY2lhdGUgdXNlciB3aXRoIHRoZXNlIHR3byBwaWN0dXJlcywgYnV0IGRvbid0IHRvdWNoIGFueSBjdXJyZW50IGFzc29jaWF0aW9uc1xyXG4gKiBgYGBcclxuICpcclxuICogWW91IGRvbid0IGhhdmUgdG8gcGFzcyBpbiBhIGNvbXBsZXRlIG9iamVjdCB0byB0aGUgYXNzb2NpYXRpb24gZnVuY3Rpb25zLCBpZiB5b3VyIGFzc29jaWF0ZWQgbW9kZWwgaGFzIGEgc2luZ2xlIHByaW1hcnkga2V5OlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiB1c2VyLmFkZFBpY3R1cmUocmVxLnF1ZXJ5LnBpZCkgLy8gSGVyZSBwaWQgaXMganVzdCBhbiBpbnRlZ2VyLCByZXByZXNlbnRpbmcgdGhlIHByaW1hcnkga2V5IG9mIHRoZSBwaWN0dXJlXHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBJbiB0aGUgZXhhbXBsZSBhYm92ZSB3ZSBoYXZlIHNwZWNpZmllZCB0aGF0IGEgdXNlciBiZWxvbmdzIHRvIGhpcyBwcm9maWxlIHBpY3R1cmUuIENvbmNlcHR1YWxseSwgdGhpcyBtaWdodCBub3QgbWFrZSBzZW5zZSwgYnV0IHNpbmNlIHdlIHdhbnQgdG8gYWRkIHRoZSBmb3JlaWduIGtleSB0byB0aGUgdXNlciBtb2RlbCB0aGlzIGlzIHRoZSB3YXkgdG8gZG8gaXQuXHJcbiAqXHJcbiAqIE5vdGUgaG93IHdlIGFsc28gc3BlY2lmaWVkIGBjb25zdHJhaW50czogZmFsc2VgIGZvciBwcm9maWxlIHBpY3R1cmUuIFRoaXMgaXMgYmVjYXVzZSB3ZSBhZGQgYSBmb3JlaWduIGtleSBmcm9tIHVzZXIgdG8gcGljdHVyZSAocHJvZmlsZVBpY3R1cmVJZCksIGFuZCBmcm9tIHBpY3R1cmUgdG8gdXNlciAodXNlcklkKS4gSWYgd2Ugd2VyZSB0byBhZGQgZm9yZWlnbiBrZXlzIHRvIGJvdGgsIGl0IHdvdWxkIGNyZWF0ZSBhIGN5Y2xpYyBkZXBlbmRlbmN5LCBhbmQgc2VxdWVsaXplIHdvdWxkIG5vdCBrbm93IHdoaWNoIHRhYmxlIHRvIGNyZWF0ZSBmaXJzdCwgc2luY2UgdXNlciBkZXBlbmRzIG9uIHBpY3R1cmUsIGFuZCBwaWN0dXJlIGRlcGVuZHMgb24gdXNlci4gVGhlc2Uga2luZHMgb2YgcHJvYmxlbXMgYXJlIGRldGVjdGVkIGJ5IHNlcXVlbGl6ZSBiZWZvcmUgdGhlIG1vZGVscyBhcmUgc3luY2VkIHRvIHRoZSBkYXRhYmFzZSwgYW5kIHlvdSB3aWxsIGdldCBhbiBlcnJvciBhbG9uZyB0aGUgbGluZXMgb2YgYEVycm9yOiBDeWNsaWMgZGVwZW5kZW5jeSBmb3VuZC4gJ3VzZXJzJyBpcyBkZXBlbmRlbnQgb2YgaXRzZWxmYC4gSWYgeW91IGVuY291bnRlciB0aGlzLCB5b3Ugc2hvdWxkIGVpdGhlciBkaXNhYmxlIHNvbWUgY29uc3RyYWludHMsIG9yIHJldGhpbmsgeW91ciBhc3NvY2lhdGlvbnMgY29tcGxldGVseS5cclxuICovXHJcbmNsYXNzIEFzc29jaWF0aW9uIHtcclxuICBjb25zdHJ1Y3Rvcihzb3VyY2UsIHRhcmdldCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtNb2RlbH1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7TW9kZWx9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG5cclxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICB0aGlzLnNjb3BlID0gb3B0aW9ucy5zY29wZTtcclxuICAgIHRoaXMuaXNTZWxmQXNzb2NpYXRpb24gPSB0aGlzLnNvdXJjZSA9PT0gdGhpcy50YXJnZXQ7XHJcbiAgICB0aGlzLmFzID0gb3B0aW9ucy5hcztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBhc3NvY2lhdGlvbi4gT25lIG9mIGBIYXNNYW55YCwgYEJlbG9uZ3NUb2AsIGBIYXNPbmVgLCBgQmVsb25nc1RvTWFueWBcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXNzb2NpYXRpb25UeXBlID0gJyc7XHJcblxyXG4gICAgaWYgKHNvdXJjZS5oYXNBbGlhcyhvcHRpb25zLmFzKSkge1xyXG4gICAgICB0aHJvdyBuZXcgQXNzb2NpYXRpb25FcnJvcihgWW91IGhhdmUgdXNlZCB0aGUgYWxpYXMgJHtvcHRpb25zLmFzfSBpbiB0d28gc2VwYXJhdGUgYXNzb2NpYXRpb25zLiBgICtcclxuICAgICAgJ0FsaWFzZWQgYXNzb2NpYXRpb25zIG11c3QgaGF2ZSB1bmlxdWUgYWxpYXNlcy4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOb3JtYWxpemUgaW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBpbnB1dCBpdCBtYXkgYmUgYXJyYXkgb3Igc2luZ2xlIG9iaiwgaW5zdGFuY2Ugb3IgcHJpbWFyeSBrZXlcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHJldHVybnMge0FycmF5fSBidWlsdCBvYmplY3RzXHJcbiAgICovXHJcbiAgdG9JbnN0YW5jZUFycmF5KGlucHV0KSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XHJcbiAgICAgIGlucHV0ID0gW2lucHV0XTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW5wdXQubWFwKGVsZW1lbnQgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIHRoaXMudGFyZ2V0KSByZXR1cm4gZWxlbWVudDtcclxuXHJcbiAgICAgIGNvbnN0IHRtcEluc3RhbmNlID0ge307XHJcbiAgICAgIHRtcEluc3RhbmNlW3RoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGVdID0gZWxlbWVudDtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnRhcmdldC5idWlsZCh0bXBJbnN0YW5jZSwgeyBpc05ld1JlY29yZDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSgpIHtcclxuICAgIHJldHVybiB0aGlzLmFzO1xyXG4gIH1cclxuXHJcbiAgaW5zcGVjdCgpIHtcclxuICAgIHJldHVybiB0aGlzLmFzO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBc3NvY2lhdGlvbjtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvYmFzZS5qcyJdLCJuYW1lcyI6WyJBc3NvY2lhdGlvbkVycm9yIiwicmVxdWlyZSIsIkFzc29jaWF0aW9uIiwic291cmNlIiwidGFyZ2V0Iiwib3B0aW9ucyIsInNjb3BlIiwiaXNTZWxmQXNzb2NpYXRpb24iLCJhcyIsImFzc29jaWF0aW9uVHlwZSIsImhhc0FsaWFzIiwiaW5wdXQiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJlbGVtZW50IiwidG1wSW5zdGFuY2UiLCJwcmltYXJ5S2V5QXR0cmlidXRlIiwiYnVpbGQiLCJpc05ld1JlY29yZCIsIlN5bWJvbCIsImZvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUF1QkMsT0FBTyxDQUFDLGFBQUQsQ0FBcEM7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7SUFDTUMsVztBQUNKLHVCQUFZQyxNQUFaLEVBQW9CQyxNQUFwQixFQUE0QkMsT0FBTyxHQUFHLEVBQXRDLEVBQTBDO0FBQUE7O0FBQ3hDO0FBQ0o7QUFDQTtBQUNJLFNBQUtGLE1BQUwsR0FBY0EsTUFBZDtBQUVBO0FBQ0o7QUFDQTs7QUFDSSxTQUFLQyxNQUFMLEdBQWNBLE1BQWQ7QUFFQSxTQUFLQyxPQUFMLEdBQWVBLE9BQWY7QUFDQSxTQUFLQyxLQUFMLEdBQWFELE9BQU8sQ0FBQ0MsS0FBckI7QUFDQSxTQUFLQyxpQkFBTCxHQUF5QixLQUFLSixNQUFMLEtBQWdCLEtBQUtDLE1BQTlDO0FBQ0EsU0FBS0ksRUFBTCxHQUFVSCxPQUFPLENBQUNHLEVBQWxCO0FBRUE7QUFDSjtBQUNBO0FBQ0E7O0FBQ0ksU0FBS0MsZUFBTCxHQUF1QixFQUF2Qjs7QUFFQSxRQUFJTixNQUFNLENBQUNPLFFBQVAsQ0FBZ0JMLE9BQU8sQ0FBQ0csRUFBeEIsQ0FBSixFQUFpQztBQUMvQixZQUFNLElBQUlSLGdCQUFKLENBQXNCLDJCQUEwQkssT0FBTyxDQUFDRyxFQUFHLGlDQUF0QyxHQUMzQixnREFETSxDQUFOO0FBR0Q7QUFDRjtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O29DQUNrQkcsSyxFQUFPO0FBQ3JCLFVBQUksQ0FBQ0MsS0FBSyxDQUFDQyxPQUFOLENBQWNGLEtBQWQsQ0FBTCxFQUEyQjtBQUN6QkEsUUFBQUEsS0FBSyxHQUFHLENBQUNBLEtBQUQsQ0FBUjtBQUNEOztBQUVELGFBQU9BLEtBQUssQ0FBQ0csR0FBTixDQUFVQyxPQUFPLElBQUk7QUFDMUIsWUFBSUEsT0FBTyxZQUFZLEtBQUtYLE1BQTVCLEVBQW9DLE9BQU9XLE9BQVA7QUFFcEMsY0FBTUMsV0FBVyxHQUFHLEVBQXBCO0FBQ0FBLFFBQUFBLFdBQVcsQ0FBQyxLQUFLWixNQUFMLENBQVlhLG1CQUFiLENBQVgsR0FBK0NGLE9BQS9DO0FBRUEsZUFBTyxLQUFLWCxNQUFMLENBQVljLEtBQVosQ0FBa0JGLFdBQWxCLEVBQStCO0FBQUVHLFVBQUFBLFdBQVcsRUFBRTtBQUFmLFNBQS9CLENBQVA7QUFDRCxPQVBNLENBQVA7QUFRRDs7U0FFQUMsTUFBTSxDQUFDQyxHQUFQLENBQVcsNEJBQVgsQzt1QkFBNEM7QUFDM0MsYUFBTyxLQUFLYixFQUFaO0FBQ0Q7Ozs4QkFFUztBQUNSLGFBQU8sS0FBS0EsRUFBWjtBQUNEOzs7Ozs7QUFHSGMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCckIsV0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgQXNzb2NpYXRpb25FcnJvciB9ID0gcmVxdWlyZSgnLi8uLi9lcnJvcnMnKTtcblxuLyoqXG4gKiBDcmVhdGluZyBhc3NvY2lhdGlvbnMgaW4gc2VxdWVsaXplIGlzIGRvbmUgYnkgY2FsbGluZyBvbmUgb2YgdGhlIGJlbG9uZ3NUbyAvIGhhc09uZSAvIGhhc01hbnkgLyBiZWxvbmdzVG9NYW55IGZ1bmN0aW9ucyBvbiBhIG1vZGVsICh0aGUgc291cmNlKSwgYW5kIHByb3ZpZGluZyBhbm90aGVyIG1vZGVsIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24gKHRoZSB0YXJnZXQpLlxuICpcbiAqICogaGFzT25lIC0gYWRkcyBhIGZvcmVpZ24ga2V5IHRvIHRoZSB0YXJnZXQgYW5kIHNpbmd1bGFyIGFzc29jaWF0aW9uIG1peGlucyB0byB0aGUgc291cmNlLlxuICogKiBiZWxvbmdzVG8gLSBhZGQgYSBmb3JlaWduIGtleSBhbmQgc2luZ3VsYXIgYXNzb2NpYXRpb24gbWl4aW5zIHRvIHRoZSBzb3VyY2UuXG4gKiAqIGhhc01hbnkgLSBhZGRzIGEgZm9yZWlnbiBrZXkgdG8gdGFyZ2V0IGFuZCBwbHVyYWwgYXNzb2NpYXRpb24gbWl4aW5zIHRvIHRoZSBzb3VyY2UuXG4gKiAqIGJlbG9uZ3NUb01hbnkgLSBjcmVhdGVzIGFuIE46TSBhc3NvY2lhdGlvbiB3aXRoIGEgam9pbiB0YWJsZSBhbmQgYWRkcyBwbHVyYWwgYXNzb2NpYXRpb24gbWl4aW5zIHRvIHRoZSBzb3VyY2UuIFRoZSBqdW5jdGlvbiB0YWJsZSBpcyBjcmVhdGVkIHdpdGggc291cmNlSWQgYW5kIHRhcmdldElkLlxuICpcbiAqIENyZWF0aW5nIGFuIGFzc29jaWF0aW9uIHdpbGwgYWRkIGEgZm9yZWlnbiBrZXkgY29uc3RyYWludCB0byB0aGUgYXR0cmlidXRlcy4gQWxsIGFzc29jaWF0aW9ucyB1c2UgYENBU0NBREVgIG9uIHVwZGF0ZSBhbmQgYFNFVCBOVUxMYCBvbiBkZWxldGUsIGV4Y2VwdCBmb3IgbjptLCB3aGljaCBhbHNvIHVzZXMgYENBU0NBREVgIG9uIGRlbGV0ZS5cbiAqXG4gKiBXaGVuIGNyZWF0aW5nIGFzc29jaWF0aW9ucywgeW91IGNhbiBwcm92aWRlIGFuIGFsaWFzLCB2aWEgdGhlIGBhc2Agb3B0aW9uLiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgc2FtZSBtb2RlbCBpcyBhc3NvY2lhdGVkIHR3aWNlLCBvciB5b3Ugd2FudCB5b3VyIGFzc29jaWF0aW9uIHRvIGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IG1vZGVsLlxuICpcbiAqIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIHVzZXJzIGhhdmUgbWFueSBwaWN0dXJlcywgb25lIG9mIHdoaWNoIGlzIHRoZWlyIHByb2ZpbGUgcGljdHVyZS4gQWxsIHBpY3R1cmVzIGhhdmUgYSBgdXNlcklkYCwgYnV0IGluIGFkZGl0aW9uIHRoZSB1c2VyIG1vZGVsIGFsc28gaGFzIGEgYHByb2ZpbGVQaWN0dXJlSWRgLCB0byBiZSBhYmxlIHRvIGVhc2lseSBsb2FkIHRoZSB1c2VyJ3MgcHJvZmlsZSBwaWN0dXJlLlxuICpcbiAqIGBgYGpzXG4gKiBVc2VyLmhhc01hbnkoUGljdHVyZSlcbiAqIFVzZXIuYmVsb25nc1RvKFBpY3R1cmUsIHsgYXM6ICdQcm9maWxlUGljdHVyZScsIGNvbnN0cmFpbnRzOiBmYWxzZSB9KVxuICpcbiAqIHVzZXIuZ2V0UGljdHVyZXMoKSAvLyBnZXRzIHlvdSBhbGwgcGljdHVyZXNcbiAqIHVzZXIuZ2V0UHJvZmlsZVBpY3R1cmUoKSAvLyBnZXRzIHlvdSBvbmx5IHRoZSBwcm9maWxlIHBpY3R1cmVcbiAqXG4gKiBVc2VyLmZpbmRBbGwoe1xuICogICB3aGVyZTogLi4uLFxuICogICBpbmNsdWRlOiBbXG4gKiAgICAgeyBtb2RlbDogUGljdHVyZSB9LCAvLyBsb2FkIGFsbCBwaWN0dXJlc1xuICogICAgIHsgbW9kZWw6IFBpY3R1cmUsIGFzOiAnUHJvZmlsZVBpY3R1cmUnIH0sIC8vIGxvYWQgdGhlIHByb2ZpbGUgcGljdHVyZS5cbiAqICAgICAvLyBOb3RpY2UgdGhhdCB0aGUgc3BlbGxpbmcgbXVzdCBiZSB0aGUgZXhhY3Qgc2FtZSBhcyB0aGUgb25lIGluIHRoZSBhc3NvY2lhdGlvblxuICogICBdXG4gKiB9KVxuICogYGBgXG4gKiBUbyBnZXQgZnVsbCBjb250cm9sIG92ZXIgdGhlIGZvcmVpZ24ga2V5IGNvbHVtbiBhZGRlZCBieSBzZXF1ZWxpemUsIHlvdSBjYW4gdXNlIHRoZSBgZm9yZWlnbktleWAgb3B0aW9uLiBJdCBjYW4gZWl0aGVyIGJlIGEgc3RyaW5nLCB0aGF0IHNwZWNpZmllcyB0aGUgbmFtZSwgb3IgYW5kIG9iamVjdCB0eXBlIGRlZmluaXRpb24sXG4gKiBlcXVpdmFsZW50IHRvIHRob3NlIHBhc3NlZCB0byBgc2VxdWVsaXplLmRlZmluZWAuXG4gKlxuICogYGBganNcbiAqIFVzZXIuaGFzTWFueShQaWN0dXJlLCB7IGZvcmVpZ25LZXk6ICd1aWQnIH0pXG4gKiBgYGBcbiAqXG4gKiBUaGUgZm9yZWlnbiBrZXkgY29sdW1uIGluIFBpY3R1cmUgd2lsbCBub3cgYmUgY2FsbGVkIGB1aWRgIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYHVzZXJJZGAuXG4gKlxuICogYGBganNcbiAqIFVzZXIuaGFzTWFueShQaWN0dXJlLCB7XG4gKiAgIGZvcmVpZ25LZXk6IHtcbiAqICAgICBuYW1lOiAndWlkJyxcbiAqICAgICBhbGxvd051bGw6IGZhbHNlXG4gKiAgIH1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBUaGlzIHNwZWNpZmllcyB0aGF0IHRoZSBgdWlkYCBjb2x1bW4gY2Fubm90IGJlIG51bGwuIEluIG1vc3QgY2FzZXMgdGhpcyB3aWxsIGFscmVhZHkgYmUgY292ZXJlZCBieSB0aGUgZm9yZWlnbiBrZXkgY29uc3RyYWludHMsIHdoaWNoIHNlcXVlbGl6ZSBjcmVhdGVzIGF1dG9tYXRpY2FsbHksIGJ1dCBjYW4gYmUgdXNlZnVsIGluIGNhc2Ugd2hlcmUgdGhlIGZvcmVpZ24ga2V5cyBhcmUgZGlzYWJsZWQsIGUuZy4gZHVlIHRvIGNpcmN1bGFyIHJlZmVyZW5jZXMgKHNlZSBgY29uc3RyYWludHM6IGZhbHNlYCBiZWxvdykuXG4gKlxuICogV2hlbiBmZXRjaGluZyBhc3NvY2lhdGVkIG1vZGVscywgeW91IGNhbiBsaW1pdCB5b3VyIHF1ZXJ5IHRvIG9ubHkgbG9hZCBzb21lIG1vZGVscy4gVGhlc2UgcXVlcmllcyBhcmUgd3JpdHRlbiBpbiB0aGUgc2FtZSB3YXkgYXMgcXVlcmllcyB0byBgZmluZGAvYGZpbmRBbGxgLiBUbyBvbmx5IGdldCBwaWN0dXJlcyBpbiBKUEcsIHlvdSBjYW4gZG86XG4gKlxuICogYGBganNcbiAqIHVzZXIuZ2V0UGljdHVyZXMoe1xuICogICB3aGVyZToge1xuICogICAgIGZvcm1hdDogJ2pwZydcbiAqICAgfVxuICogfSlcbiAqIGBgYFxuICpcbiAqIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gdXBkYXRlIGFuZCBhZGQgbmV3IGFzc29jaWF0aW9ucy4gQ29udGludWluZyB3aXRoIG91ciBleGFtcGxlIG9mIHVzZXJzIGFuZCBwaWN0dXJlczpcbiAqIGBgYGpzXG4gKiB1c2VyLmFkZFBpY3R1cmUocCkgLy8gQWRkIGEgc2luZ2xlIHBpY3R1cmVcbiAqIHVzZXIuc2V0UGljdHVyZXMoW3AxLCBwMl0pIC8vIEFzc29jaWF0ZSB1c2VyIHdpdGggT05MWSB0aGVzZSB0d28gcGljdHVyZSwgYWxsIG90aGVyIGFzc29jaWF0aW9ucyB3aWxsIGJlIGRlbGV0ZWRcbiAqIHVzZXIuYWRkUGljdHVyZXMoW3AxLCBwMl0pIC8vIEFzc29jaWF0ZSB1c2VyIHdpdGggdGhlc2UgdHdvIHBpY3R1cmVzLCBidXQgZG9uJ3QgdG91Y2ggYW55IGN1cnJlbnQgYXNzb2NpYXRpb25zXG4gKiBgYGBcbiAqXG4gKiBZb3UgZG9uJ3QgaGF2ZSB0byBwYXNzIGluIGEgY29tcGxldGUgb2JqZWN0IHRvIHRoZSBhc3NvY2lhdGlvbiBmdW5jdGlvbnMsIGlmIHlvdXIgYXNzb2NpYXRlZCBtb2RlbCBoYXMgYSBzaW5nbGUgcHJpbWFyeSBrZXk6XG4gKlxuICogYGBganNcbiAqIHVzZXIuYWRkUGljdHVyZShyZXEucXVlcnkucGlkKSAvLyBIZXJlIHBpZCBpcyBqdXN0IGFuIGludGVnZXIsIHJlcHJlc2VudGluZyB0aGUgcHJpbWFyeSBrZXkgb2YgdGhlIHBpY3R1cmVcbiAqIGBgYFxuICpcbiAqIEluIHRoZSBleGFtcGxlIGFib3ZlIHdlIGhhdmUgc3BlY2lmaWVkIHRoYXQgYSB1c2VyIGJlbG9uZ3MgdG8gaGlzIHByb2ZpbGUgcGljdHVyZS4gQ29uY2VwdHVhbGx5LCB0aGlzIG1pZ2h0IG5vdCBtYWtlIHNlbnNlLCBidXQgc2luY2Ugd2Ugd2FudCB0byBhZGQgdGhlIGZvcmVpZ24ga2V5IHRvIHRoZSB1c2VyIG1vZGVsIHRoaXMgaXMgdGhlIHdheSB0byBkbyBpdC5cbiAqXG4gKiBOb3RlIGhvdyB3ZSBhbHNvIHNwZWNpZmllZCBgY29uc3RyYWludHM6IGZhbHNlYCBmb3IgcHJvZmlsZSBwaWN0dXJlLiBUaGlzIGlzIGJlY2F1c2Ugd2UgYWRkIGEgZm9yZWlnbiBrZXkgZnJvbSB1c2VyIHRvIHBpY3R1cmUgKHByb2ZpbGVQaWN0dXJlSWQpLCBhbmQgZnJvbSBwaWN0dXJlIHRvIHVzZXIgKHVzZXJJZCkuIElmIHdlIHdlcmUgdG8gYWRkIGZvcmVpZ24ga2V5cyB0byBib3RoLCBpdCB3b3VsZCBjcmVhdGUgYSBjeWNsaWMgZGVwZW5kZW5jeSwgYW5kIHNlcXVlbGl6ZSB3b3VsZCBub3Qga25vdyB3aGljaCB0YWJsZSB0byBjcmVhdGUgZmlyc3QsIHNpbmNlIHVzZXIgZGVwZW5kcyBvbiBwaWN0dXJlLCBhbmQgcGljdHVyZSBkZXBlbmRzIG9uIHVzZXIuIFRoZXNlIGtpbmRzIG9mIHByb2JsZW1zIGFyZSBkZXRlY3RlZCBieSBzZXF1ZWxpemUgYmVmb3JlIHRoZSBtb2RlbHMgYXJlIHN5bmNlZCB0byB0aGUgZGF0YWJhc2UsIGFuZCB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgYWxvbmcgdGhlIGxpbmVzIG9mIGBFcnJvcjogQ3ljbGljIGRlcGVuZGVuY3kgZm91bmQuICd1c2VycycgaXMgZGVwZW5kZW50IG9mIGl0c2VsZmAuIElmIHlvdSBlbmNvdW50ZXIgdGhpcywgeW91IHNob3VsZCBlaXRoZXIgZGlzYWJsZSBzb21lIGNvbnN0cmFpbnRzLCBvciByZXRoaW5rIHlvdXIgYXNzb2NpYXRpb25zIGNvbXBsZXRlbHkuXG4gKi9cbmNsYXNzIEFzc29jaWF0aW9uIHtcbiAgY29uc3RydWN0b3Ioc291cmNlLCB0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtNb2RlbH1cbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtNb2RlbH1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zY29wZSA9IG9wdGlvbnMuc2NvcGU7XG4gICAgdGhpcy5pc1NlbGZBc3NvY2lhdGlvbiA9IHRoaXMuc291cmNlID09PSB0aGlzLnRhcmdldDtcbiAgICB0aGlzLmFzID0gb3B0aW9ucy5hcztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBhc3NvY2lhdGlvbi4gT25lIG9mIGBIYXNNYW55YCwgYEJlbG9uZ3NUb2AsIGBIYXNPbmVgLCBgQmVsb25nc1RvTWFueWBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYXNzb2NpYXRpb25UeXBlID0gJyc7XG5cbiAgICBpZiAoc291cmNlLmhhc0FsaWFzKG9wdGlvbnMuYXMpKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzb2NpYXRpb25FcnJvcihgWW91IGhhdmUgdXNlZCB0aGUgYWxpYXMgJHtvcHRpb25zLmFzfSBpbiB0d28gc2VwYXJhdGUgYXNzb2NpYXRpb25zLiBgICtcbiAgICAgICdBbGlhc2VkIGFzc29jaWF0aW9ucyBtdXN0IGhhdmUgdW5pcXVlIGFsaWFzZXMuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIGlucHV0XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBpbnB1dCBpdCBtYXkgYmUgYXJyYXkgb3Igc2luZ2xlIG9iaiwgaW5zdGFuY2Ugb3IgcHJpbWFyeSBrZXlcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge0FycmF5fSBidWlsdCBvYmplY3RzXG4gICAqL1xuICB0b0luc3RhbmNlQXJyYXkoaW5wdXQpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICBpbnB1dCA9IFtpbnB1dF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0Lm1hcChlbGVtZW50ID0+IHtcbiAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgdGhpcy50YXJnZXQpIHJldHVybiBlbGVtZW50O1xuXG4gICAgICBjb25zdCB0bXBJbnN0YW5jZSA9IHt9O1xuICAgICAgdG1wSW5zdGFuY2VbdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZV0gPSBlbGVtZW50O1xuXG4gICAgICByZXR1cm4gdGhpcy50YXJnZXQuYnVpbGQodG1wSW5zdGFuY2UsIHsgaXNOZXdSZWNvcmQ6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldKCkge1xuICAgIHJldHVybiB0aGlzLmFzO1xuICB9XG5cbiAgaW5zcGVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5hcztcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFzc29jaWF0aW9uO1xuIl19 \ No newline at end of file diff --git a/dist/associations/belongs-to-many.js b/dist/associations/belongs-to-many.js index 49effa6..be7d9e1 100644 --- a/dist/associations/belongs-to-many.js +++ b/dist/associations/belongs-to-many.js @@ -6,15 +6,19 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const Utils = require('./../utils'); @@ -82,17 +86,17 @@ const Op = require('../operators'); */ -let BelongsToMany = -/*#__PURE__*/ -function (_Association) { +let BelongsToMany = /*#__PURE__*/function (_Association) { _inherits(BelongsToMany, _Association); + var _super = _createSuper(BelongsToMany); + function BelongsToMany(source, target, options) { var _this; _classCallCheck(this, BelongsToMany); - _this = _possibleConstructorReturn(this, _getPrototypeOf(BelongsToMany).call(this, source, target, options)); + _this = _super.call(this, source, target, options); if (_this.options.through === undefined || _this.options.through === true || _this.options.through === null) { throw new AssociationError(`${source.name}.belongsToMany(${target.name}) requires through option, pass either a string or a model`); @@ -838,4 +842,4 @@ function (_Association) { module.exports = BelongsToMany; module.exports.BelongsToMany = BelongsToMany; module.exports.default = BelongsToMany; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvYmVsb25ncy10by1tYW55LmpzIl0sIm5hbWVzIjpbIlV0aWxzIiwicmVxdWlyZSIsIkhlbHBlcnMiLCJfIiwiQXNzb2NpYXRpb24iLCJCZWxvbmdzVG8iLCJIYXNNYW55IiwiSGFzT25lIiwiQXNzb2NpYXRpb25FcnJvciIsIkVtcHR5UmVzdWx0RXJyb3IiLCJPcCIsIkJlbG9uZ3NUb01hbnkiLCJzb3VyY2UiLCJ0YXJnZXQiLCJvcHRpb25zIiwidGhyb3VnaCIsInVuZGVmaW5lZCIsIm5hbWUiLCJtb2RlbCIsImFzc29jaWF0aW9uVHlwZSIsInRhcmdldEFzc29jaWF0aW9uIiwic2VxdWVsaXplIiwiT2JqZWN0IiwiYXNzaWduIiwiaXNNdWx0aUFzc29jaWF0aW9uIiwiZG91YmxlTGlua2VkIiwiYXMiLCJpc1NlbGZBc3NvY2lhdGlvbiIsImlzQWxpYXNlZCIsImlzUGxhaW5PYmplY3QiLCJwbHVyYWwiLCJzaW5ndWxhciIsInNpbmd1bGFyaXplIiwiY29tYmluZWRUYWJsZU5hbWUiLCJjb21iaW5lVGFibGVOYW1lcyIsInRhYmxlTmFtZSIsImVhY2giLCJhc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbiIsInBhaXJlZCIsInNvdXJjZUtleSIsInByaW1hcnlLZXlBdHRyaWJ1dGUiLCJzb3VyY2VLZXlGaWVsZCIsInJhd0F0dHJpYnV0ZXMiLCJmaWVsZCIsInRhcmdldEtleSIsInRhcmdldEtleUZpZWxkIiwidGFyZ2V0S2V5RGVmYXVsdCIsIl9jcmVhdGVGb3JlaWduQW5kT3RoZXJLZXlzIiwiaXNEZWZpbmVkIiwiZGVmaW5lIiwiaW5kZXhlcyIsInBhcmFub2lkIiwidmFsaWRhdGUiLCJwaWNrIiwibmVlZEluamVjdFBhaXJlZCIsIm90aGVyS2V5Iiwib3RoZXJLZXlEZWZhdWx0IiwiZm9yZWlnbktleSIsIl9pbmplY3RBdHRyaWJ1dGVzIiwidGhyb3VnaE1vZGVsIiwiY29tYmluZWROYW1lIiwiYXNzb2NpYXRpb25BY2Nlc3NvciIsInVwcGVyRmlyc3QiLCJhY2Nlc3NvcnMiLCJnZXQiLCJzZXQiLCJhZGRNdWx0aXBsZSIsImFkZCIsImNyZWF0ZSIsInJlbW92ZSIsInJlbW92ZU11bHRpcGxlIiwiaGFzU2luZ2xlIiwiaGFzQWxsIiwiY291bnQiLCJpc09iamVjdCIsImZvcmVpZ25LZXlBdHRyaWJ1dGUiLCJmaWVsZE5hbWUiLCJjYW1lbGl6ZSIsImpvaW4iLCJvdGhlcktleUF0dHJpYnV0ZSIsImlkZW50aWZpZXIiLCJmb3JlaWduSWRlbnRpZmllciIsImF0dHJpYnV0ZSIsImF0dHJpYnV0ZU5hbWUiLCJwcmltYXJ5S2V5IiwiX2F1dG9HZW5lcmF0ZWQiLCJwcmltYXJ5S2V5RGVsZXRlZCIsInNvdXJjZUtleVR5cGUiLCJ0eXBlIiwidGFyZ2V0S2V5VHlwZSIsInNvdXJjZUF0dHJpYnV0ZSIsImRlZmF1bHRzIiwidGFyZ2V0QXR0cmlidXRlIiwidW5pcXVlIiwidW5pcXVlS2V5IiwiY29uc3RyYWludHMiLCJyZWZlcmVuY2VzIiwiZ2V0VGFibGVOYW1lIiwia2V5Iiwib25EZWxldGUiLCJvblVwZGF0ZSIsInJlZnJlc2hBdHRyaWJ1dGVzIiwiaWRlbnRpZmllckZpZWxkIiwiZm9yZWlnbklkZW50aWZpZXJGaWVsZCIsInRvU291cmNlIiwibWFueUZyb21Tb3VyY2UiLCJvbmVGcm9tU291cmNlIiwidG9UYXJnZXQiLCJtYW55RnJvbVRhcmdldCIsIm9uZUZyb21UYXJnZXQiLCJjaGVja05hbWluZ0NvbGxpc2lvbiIsIm9iaiIsIm1ldGhvZHMiLCJhbGlhc2VzIiwibWl4aW5NZXRob2RzIiwiaW5zdGFuY2UiLCJjbG9uZURlZXAiLCJzY29wZVdoZXJlIiwidGhyb3VnaFdoZXJlIiwic2NvcGUiLCJjbG9uZSIsIndoZXJlIiwiYW5kIiwiaW5jbHVkZSIsInB1c2giLCJhdHRyaWJ1dGVzIiwiam9pblRhYmxlQXR0cmlidXRlcyIsInJlcXVpcmVkIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidW5zY29wZWQiLCJzY2hlbWEiLCJzY2hlbWFEZWxpbWl0ZXIiLCJmaW5kQWxsIiwiZm4iLCJjb2wiLCJyYXciLCJwbGFpbiIsInRoZW4iLCJyZXN1bHQiLCJwYXJzZUludCIsInNvdXJjZUluc3RhbmNlIiwiaW5zdGFuY2VzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5zdGFuY2VQcmltYXJ5S2V5cyIsIm1hcCIsIm9yIiwiYXNzb2NpYXRlZE9iamVjdHMiLCJkaWZmZXJlbmNlV2l0aCIsImEiLCJiIiwiaXNFcXVhbCIsImxlbmd0aCIsIm5ld0Fzc29jaWF0ZWRPYmplY3RzIiwidG9JbnN0YW5jZUFycmF5IiwidXBkYXRlQXNzb2NpYXRpb25zIiwiY3VycmVudFJvd3MiLCJvYnNvbGV0ZUFzc29jaWF0aW9ucyIsInByb21pc2VzIiwiZGVmYXVsdEF0dHJpYnV0ZXMiLCJ1bmFzc29jaWF0ZWRPYmplY3RzIiwiZmlsdGVyIiwic29tZSIsImN1cnJlbnRSb3ciLCJuZXdPYmoiLCJmaW5kIiwidGhyb3VnaEF0dHJpYnV0ZXMiLCJrZXlzIiwidXBkYXRlIiwib2Jzb2xldGVBc3NvY2lhdGlvbiIsImRlc3Ryb3kiLCJidWxrIiwidW5hc3NvY2lhdGVkT2JqZWN0IiwiYnVsa0NyZWF0ZSIsIlByb21pc2UiLCJhbGwiLCJjYXRjaCIsImVycm9yIiwibmV3SW5zdGFuY2VzIiwicmVzb2x2ZSIsIm5ld0luc3RhbmNlIiwiY2hhbmdlZEFzc29jaWF0aW9ucyIsImV4aXN0aW5nQXNzb2NpYXRpb24iLCJjdXJyZW50IiwiYXNzb2MiLCJvbGRBc3NvY2lhdGVkT2JqZWN0cyIsInZhbHVlcyIsImZpZWxkcyIsImNvbmNhdCIsIm5ld0Fzc29jaWF0ZWRPYmplY3QiLCJvbWl0IiwicmV0dXJuIiwiYWxpYXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQUQsQ0FBckI7O0FBQ0EsTUFBTUMsT0FB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QSxLQUFQLEtBQWlCLFFBQXJCLEVBQStCO0FBQzdCLGVBQU8sS0FBS3pLLEVBQUwsS0FBWXlLLEtBQW5CO0FBQ0Q7O0FBRUQsVUFBSUEsS0FBSyxJQUFJQSxLQUFLLENBQUNySyxNQUFuQixFQUEyQjtBQUN6QixlQUFPLEtBQUtKLEVBQUwsS0FBWXlLLEtBQUssQ0FBQ3JLLE1BQXpCO0FBQ0Q7O0FBRUQsYUFBTyxDQUFDLEtBQUtGLFNBQWI7QUFDRDs7OztFQW52QnlCeEIsVzs7QUFzdkI1QmdNLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjFMLGFBQWpCO0FBQ0F5TCxNQUFNLENBQUNDLE9BQVAsQ0FBZTFMLGFBQWYsR0FBK0JBLGFBQS9CO0FBQ0F5TCxNQUFNLENBQUNDLE9BQVAsQ0FBZUMsT0FBZixHQUF5QjNMLGFBQXpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XHJcbmNvbnN0IEhlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBBc3NvY2lhdGlvbiA9IHJlcXVpcmUoJy4vYmFzZScpO1xyXG5jb25zdCBCZWxvbmdzVG8gPSByZXF1aXJlKCcuL2JlbG9uZ3MtdG8nKTtcclxuY29uc3QgSGFzTWFueSA9IHJlcXVpcmUoJy4vaGFzLW1hbnknKTtcclxuY29uc3QgSGFzT25lID0gcmVxdWlyZSgnLi9oYXMtb25lJyk7XHJcbmNvbnN0IEFzc29jaWF0aW9uRXJyb3IgPSByZXF1aXJlKCcuLi9lcnJvcnMnKS5Bc3NvY2lhdGlvbkVycm9yO1xyXG5jb25zdCBFbXB0eVJlc3VsdEVycm9yID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuRW1wdHlSZXN1bHRFcnJvcjtcclxuY29uc3QgT3AgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMnKTtcclxuXHJcbi8qKlxyXG4gKiBNYW55LXRvLW1hbnkgYXNzb2NpYXRpb24gd2l0aCBhIGpvaW4gdGFibGUuXHJcbiAqXHJcbiAqIFdoZW4gdGhlIGpvaW4gdGFibGUgaGFzIGFkZGl0aW9uYWwgYXR0cmlidXRlcywgdGhlc2UgY2FuIGJlIHBhc3NlZCBpbiB0aGUgb3B0aW9ucyBvYmplY3Q6XHJcbiAqXHJcbiAqIGBgYGpzXHJcbiAqIFVzZXJQcm9qZWN0ID0gc2VxdWVsaXplLmRlZmluZSgndXNlcl9wcm9qZWN0Jywge1xyXG4gKiAgIHJvbGU6IFNlcXVlbGl6ZS5TVFJJTkdcclxuICogfSk7XHJcbiAqIFVzZXIuYmVsb25nc1RvTWFueShQcm9qZWN0LCB7IHRocm91Z2g6IFVzZXJQcm9qZWN0IH0pO1xyXG4gKiBQcm9qZWN0LmJlbG9uZ3NUb01hbnkoVXNlciwgeyB0aHJvdWdoOiBVc2VyUHJvamVjdCB9KTtcclxuICogLy8gdGhyb3VnaCBpcyByZXF1aXJlZCFcclxuICpcclxuICogdXNlci5hZGRQcm9qZWN0KHByb2plY3QsIHsgdGhyb3VnaDogeyByb2xlOiAnbWFuYWdlcicgfX0pO1xyXG4gKiBgYGBcclxuICpcclxuICogQWxsIG1ldGhvZHMgYWxsb3cgeW91IHRvIHBhc3MgZWl0aGVyIGEgcGVyc2lzdGVkIGluc3RhbmNlLCBpdHMgcHJpbWFyeSBrZXksIG9yIGEgbWl4dHVyZTpcclxuICpcclxuICogYGBganNcclxuICogUHJvamVjdC5jcmVhdGUoeyBpZDogMTEgfSkudGhlbihwcm9qZWN0ID0+IHtcclxuICogICB1c2VyLmFkZFByb2plY3RzKFtwcm9qZWN0LCAxMl0pO1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSB3YW50IHRvIHNldCBzZXZlcmFsIHRhcmdldCBpbnN0YW5jZXMsIGJ1dCB3aXRoIGRpZmZlcmVudCBhdHRyaWJ1dGVzIHlvdSBoYXZlIHRvIHNldCB0aGUgYXR0cmlidXRlcyBvbiB0aGUgaW5zdGFuY2UsIHVzaW5nIGEgcHJvcGVydHkgd2l0aCB0aGUgbmFtZSBvZiB0aGUgdGhyb3VnaCBtb2RlbDpcclxuICpcclxuICogYGBganNcclxuICogcDEuVXNlclByb2plY3RzID0ge1xyXG4gKiAgIHN0YXJ0ZWQ6IHRydWVcclxuICogfVxyXG4gKiB1c2VyLnNldFByb2plY3RzKFtwMSwgcDJdLCB7IHRocm91Z2g6IHsgc3RhcnRlZDogZmFsc2UgfX0pIC8vIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLCBidXQgcDEgb3ZlcnJpZGVzIHRoYXQuXHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTaW1pbGFybHksIHdoZW4gZmV0Y2hpbmcgdGhyb3VnaCBhIGpvaW4gdGFibGUgd2l0aCBjdXN0b20gYXR0cmlidXRlcywgdGhlc2UgYXR0cmlidXRlcyB3aWxsIGJlIGF2YWlsYWJsZSBhcyBhbiBvYmplY3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgdGhyb3VnaCBtb2RlbC5cclxuICogYGBganNcclxuICogdXNlci5nZXRQcm9qZWN0cygpLnRoZW4ocHJvamVjdHMgPT4ge1xyXG4gICAqICAgbGV0IHAxID0gcHJvamVjdHNbMF1cclxuICAgKiAgIHAxLlVzZXJQcm9qZWN0cy5zdGFydGVkIC8vIElzIHRoaXMgcHJvamVjdCBzdGFydGVkIHlldD9cclxuICAgKiB9KVxyXG4gKiBgYGBcclxuICpcclxuICogSW4gdGhlIEFQSSByZWZlcmVuY2UgYmVsb3csIGFkZCB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRpb24gdG8gdGhlIG1ldGhvZCwgZS5nLiBmb3IgYFVzZXIuYmVsb25nc1RvTWFueShQcm9qZWN0KWAgdGhlIGdldHRlciB3aWxsIGJlIGB1c2VyLmdldFByb2plY3RzKClgLlxyXG4gKlxyXG4gKiBAc2VlIHtAbGluayBNb2RlbC5iZWxvbmdzVG9NYW55fVxyXG4gKi9cclxuY2xhc3MgQmVsb25nc1RvTWFueSBleHRlbmRzIEFzc29jaWF0aW9uIHtcclxuICBjb25zdHJ1Y3Rvcihzb3VyY2UsIHRhcmdldCwgb3B0aW9ucykge1xyXG4gICAgc3VwZXIoc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMudGhyb3VnaCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMub3B0aW9ucy50aHJvdWdoID09PSB0cnVlIHx8IHRoaXMub3B0aW9ucy50aHJvdWdoID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBBc3NvY2lhdGlvbkVycm9yKGAke3NvdXJjZS5uYW1lfS5iZWxvbmdzVG9NYW55KCR7dGFyZ2V0Lm5hbWV9KSByZXF1aXJlcyB0aHJvdWdoIG9wdGlvbiwgcGFzcyBlaXRoZXIgYSBzdHJpbmcgb3IgYSBtb2RlbGApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLnRocm91Z2gubW9kZWwpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnRocm91Z2ggPSB7XHJcbiAgICAgICAgbW9kZWw6IG9wdGlvbnMudGhyb3VnaFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXNzb2NpYXRpb25UeXBlID0gJ0JlbG9uZ3NUb01hbnknO1xyXG4gICAgdGhpcy50YXJnZXRBc3NvY2lhdGlvbiA9IG51bGw7XHJcbiAgICB0aGlzLnNlcXVlbGl6ZSA9IHNvdXJjZS5zZXF1ZWxpemU7XHJcbiAgICB0aGlzLnRocm91Z2ggPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdGlvbnMudGhyb3VnaCk7XHJcbiAgICB0aGlzLmlzTXVsdGlBc3NvY2lhdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLmRvdWJsZUxpbmtlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghdGhpcy5hcyAmJiB0aGlzLmlzU2VsZkFzc29jaWF0aW9uKSB7XHJcbiAgICAgIHRocm93IG5ldyBBc3NvY2lhdGlvbkVycm9yKCdcXCdhc1xcJyBtdXN0IGJlIGRlZmluZWQgZm9yIG1hbnktdG8tbWFueSBzZWxmLWFzc29jaWF0aW9ucycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFzKSB7XHJcbiAgICAgIHRoaXMuaXNBbGlhc2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QodGhpcy5hcykpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMubmFtZSA9IHRoaXMuYXM7XHJcbiAgICAgICAgdGhpcy5hcyA9IHRoaXMuYXMucGx1cmFsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5uYW1lID0ge1xyXG4gICAgICAgICAgcGx1cmFsOiB0aGlzLmFzLFxyXG4gICAgICAgICAgc2luZ3VsYXI6IFV0aWxzLnNpbmd1bGFyaXplKHRoaXMuYXMpXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hcyA9IHRoaXMudGFyZ2V0Lm9wdGlvbnMubmFtZS5wbHVyYWw7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5uYW1lID0gdGhpcy50YXJnZXQub3B0aW9ucy5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29tYmluZWRUYWJsZU5hbWUgPSBVdGlscy5jb21iaW5lVGFibGVOYW1lcyhcclxuICAgICAgdGhpcy5zb3VyY2UudGFibGVOYW1lLFxyXG4gICAgICB0aGlzLmlzU2VsZkFzc29jaWF0aW9uID8gdGhpcy5hcyB8fCB0aGlzLnRhcmdldC50YWJsZU5hbWUgOiB0aGlzLnRhcmdldC50YWJsZU5hbWVcclxuICAgICk7XHJcblxyXG4gICAgLypcclxuICAgICogSWYgc2VsZiBhc3NvY2lhdGlvbiwgdGhpcyBpcyB0aGUgdGFyZ2V0IGFzc29jaWF0aW9uIC0gVW5sZXNzIHdlIGZpbmQgYSBwYWlyaW5nIGFzc29jaWF0aW9uXHJcbiAgICAqL1xyXG4gICAgaWYgKHRoaXMuaXNTZWxmQXNzb2NpYXRpb24pIHtcclxuICAgICAgdGhpcy50YXJnZXRBc3NvY2lhdGlvbiA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICogRmluZCBwYWlyZWQgYXNzb2NpYXRpb24gKGlmIGV4aXN0cylcclxuICAgICovXHJcbiAgICBfLmVhY2godGhpcy50YXJnZXQuYXNzb2NpYXRpb25zLCBhc3NvY2lhdGlvbiA9PiB7XHJcbiAgICAgIGlmIChhc3NvY2lhdGlvbi5hc3NvY2lhdGlvblR5cGUgIT09ICdCZWxvbmdzVG9NYW55JykgcmV0dXJuO1xyXG4gICAgICBpZiAoYXNzb2NpYXRpb24udGFyZ2V0ICE9PSB0aGlzLnNvdXJjZSkgcmV0dXJuO1xyXG5cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy50aHJvdWdoLm1vZGVsID09PSBhc3NvY2lhdGlvbi5vcHRpb25zLnRocm91Z2gubW9kZWwpIHtcclxuICAgICAgICB0aGlzLnBhaXJlZCA9IGFzc29jaWF0aW9uO1xyXG4gICAgICAgIGFzc29jaWF0aW9uLnBhaXJlZCA9IHRoaXM7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qXHJcbiAgICAqIERlZmF1bHQvZ2VuZXJhdGVkIHNvdXJjZS90YXJnZXQga2V5c1xyXG4gICAgKi9cclxuICAgIHRoaXMuc291cmNlS2V5ID0gdGhpcy5vcHRpb25zLnNvdXJjZUtleSB8fCB0aGlzLnNvdXJjZS5wcmltYXJ5S2V5QXR0cmlidXRlO1xyXG4gICAgdGhpcy5zb3VyY2VLZXlGaWVsZCA9IHRoaXMuc291cmNlLnJhd0F0dHJpYnV0ZXNbdGhpcy5zb3VyY2VLZXldLmZpZWxkIHx8IHRoaXMuc291cmNlS2V5O1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0S2V5KSB7XHJcbiAgICAgIHRoaXMudGFyZ2V0S2V5ID0gdGhpcy5vcHRpb25zLnRhcmdldEtleTtcclxuICAgICAgdGhpcy50YXJnZXRLZXlGaWVsZCA9IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy50YXJnZXRLZXldLmZpZWxkIHx8IHRoaXMudGFyZ2V0S2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50YXJnZXRLZXlEZWZhdWx0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy50YXJnZXRLZXkgPSB0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlO1xyXG4gICAgICB0aGlzLnRhcmdldEtleUZpZWxkID0gdGhpcy50YXJnZXQucmF3QXR0cmlidXRlc1t0aGlzLnRhcmdldEtleV0uZmllbGQgfHwgdGhpcy50YXJnZXRLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY3JlYXRlRm9yZWlnbkFuZE90aGVyS2V5cygpO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy50aHJvdWdoLm1vZGVsID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpZiAoIXRoaXMuc2VxdWVsaXplLmlzRGVmaW5lZCh0aGlzLnRocm91Z2gubW9kZWwpKSB7XHJcbiAgICAgICAgdGhpcy50aHJvdWdoLm1vZGVsID0gdGhpcy5zZXF1ZWxpemUuZGVmaW5lKHRoaXMudGhyb3VnaC5tb2RlbCwge30sIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB7XHJcbiAgICAgICAgICB0YWJsZU5hbWU6IHRoaXMudGhyb3VnaC5tb2RlbCxcclxuICAgICAgICAgIGluZGV4ZXM6IFtdLCAvL3dlIGRvbid0IHdhbnQgaW5kZXhlcyBoZXJlIChhcyByZWZlcmVuY2VkIGluICMyNDE2KVxyXG4gICAgICAgICAgcGFyYW5vaWQ6IGZhbHNlLCAvLyBBIHBhcmFub2lkIGpvaW4gdGFibGUgZG9lcyBub3QgbWFrZSBzZW5zZVxyXG4gICAgICAgICAgdmFsaWRhdGU6IHt9IC8vIERvbid0IHByb3BhZ2F0ZSBtb2RlbC1sZXZlbCB2YWxpZGF0aW9uc1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRocm91Z2gubW9kZWwgPSB0aGlzLnNlcXVlbGl6ZS5tb2RlbCh0aGlzLnRocm91Z2gubW9kZWwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIF8ucGljayh0aGlzLnRocm91Z2gubW9kZWwub3B0aW9ucywgW1xyXG4gICAgICAndGltZXN0YW1wcycsICdjcmVhdGVkQXQnLCAndXBkYXRlZEF0JywgJ2RlbGV0ZWRBdCcsICdwYXJhbm9pZCdcclxuICAgIF0pKTtcclxuXHJcbiAgICBpZiAodGhpcy5wYWlyZWQpIHtcclxuICAgICAgbGV0IG5lZWRJbmplY3RQYWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnRhcmdldEtleURlZmF1bHQpIHtcclxuICAgICAgICB0aGlzLnRhcmdldEtleSA9IHRoaXMucGFpcmVkLnNvdXJjZUtleTtcclxuICAgICAgICB0aGlzLnRhcmdldEtleUZpZWxkID0gdGhpcy5wYWlyZWQuc291cmNlS2V5RmllbGQ7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRm9yZWlnbkFuZE90aGVyS2V5cygpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnBhaXJlZC50YXJnZXRLZXlEZWZhdWx0KSB7XHJcbiAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHBhaXJlZC5vdGhlcktleSBkZXBlbmRzIG9uIHBhaXJlZC50YXJnZXRLZXksXHJcbiAgICAgICAgLy8gc28gY2xlYW51cCBwcmV2aW91c2x5IHdyb25nIGdlbmVyYXRlZCBvdGhlcktleVxyXG4gICAgICAgIGlmICh0aGlzLnBhaXJlZC50YXJnZXRLZXkgIT09IHRoaXMuc291cmNlS2V5KSB7XHJcbiAgICAgICAgICBkZWxldGUgdGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5wYWlyZWQub3RoZXJLZXldO1xyXG4gICAgICAgICAgdGhpcy5wYWlyZWQudGFyZ2V0S2V5ID0gdGhpcy5zb3VyY2VLZXk7XHJcbiAgICAgICAgICB0aGlzLnBhaXJlZC50YXJnZXRLZXlGaWVsZCA9IHRoaXMuc291cmNlS2V5RmllbGQ7XHJcbiAgICAgICAgICB0aGlzLnBhaXJlZC5fY3JlYXRlRm9yZWlnbkFuZE90aGVyS2V5cygpO1xyXG4gICAgICAgICAgbmVlZEluamVjdFBhaXJlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5vdGhlcktleURlZmF1bHQpIHtcclxuICAgICAgICB0aGlzLm90aGVyS2V5ID0gdGhpcy5wYWlyZWQuZm9yZWlnbktleTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5wYWlyZWQub3RoZXJLZXlEZWZhdWx0KSB7XHJcbiAgICAgICAgLy8gSWYgcGFpcmVkIG90aGVyS2V5IHdhcyBpbmZlcnJlZCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRvIGNsZWFuIGl0IHVwXHJcbiAgICAgICAgLy8gYmVmb3JlIGFkZGluZyBhIG5ldyBvbmUgdGhhdCBtYXRjaGVzIHRoZSBmb3JlaWduS2V5XHJcbiAgICAgICAgaWYgKHRoaXMucGFpcmVkLm90aGVyS2V5ICE9PSB0aGlzLmZvcmVpZ25LZXkpIHtcclxuICAgICAgICAgIGRlbGV0ZSB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLnBhaXJlZC5vdGhlcktleV07XHJcbiAgICAgICAgICB0aGlzLnBhaXJlZC5vdGhlcktleSA9IHRoaXMuZm9yZWlnbktleTtcclxuICAgICAgICAgIG5lZWRJbmplY3RQYWlyZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5lZWRJbmplY3RQYWlyZWQpIHtcclxuICAgICAgICB0aGlzLnBhaXJlZC5faW5qZWN0QXR0cmlidXRlcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudGhyb3VnaCkge1xyXG4gICAgICB0aGlzLnRocm91Z2hNb2RlbCA9IHRoaXMudGhyb3VnaC5tb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9wdGlvbnMudGFibGVOYW1lID0gdGhpcy5jb21iaW5lZE5hbWUgPSB0aGlzLnRocm91Z2gubW9kZWwgPT09IE9iamVjdCh0aGlzLnRocm91Z2gubW9kZWwpID8gdGhpcy50aHJvdWdoLm1vZGVsLnRhYmxlTmFtZSA6IHRoaXMudGhyb3VnaC5tb2RlbDtcclxuXHJcbiAgICB0aGlzLmFzc29jaWF0aW9uQWNjZXNzb3IgPSB0aGlzLmFzO1xyXG5cclxuICAgIC8vIEdldCBzaW5ndWxhciBhbmQgcGx1cmFsIG5hbWVzLCB0cnlpbmcgdG8gdXBwZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXIsIHVubGVzcyB0aGUgbW9kZWwgZm9yYmlkcyBpdFxyXG4gICAgY29uc3QgcGx1cmFsID0gXy51cHBlckZpcnN0KHRoaXMub3B0aW9ucy5uYW1lLnBsdXJhbCk7XHJcbiAgICBjb25zdCBzaW5ndWxhciA9IF8udXBwZXJGaXJzdCh0aGlzLm9wdGlvbnMubmFtZS5zaW5ndWxhcik7XHJcblxyXG4gICAgdGhpcy5hY2Nlc3NvcnMgPSB7XHJcbiAgICAgIGdldDogYGdldCR7cGx1cmFsfWAsXHJcbiAgICAgIHNldDogYHNldCR7cGx1cmFsfWAsXHJcbiAgICAgIGFkZE11bHRpcGxlOiBgYWRkJHtwbHVyYWx9YCxcclxuICAgICAgYWRkOiBgYWRkJHtzaW5ndWxhcn1gLFxyXG4gICAgICBjcmVhdGU6IGBjcmVhdGUke3Npbmd1bGFyfWAsXHJcbiAgICAgIHJlbW92ZTogYHJlbW92ZSR7c2luZ3VsYXJ9YCxcclxuICAgICAgcmVtb3ZlTXVsdGlwbGU6IGByZW1vdmUke3BsdXJhbH1gLFxyXG4gICAgICBoYXNTaW5nbGU6IGBoYXMke3Npbmd1bGFyfWAsXHJcbiAgICAgIGhhc0FsbDogYGhhcyR7cGx1cmFsfWAsXHJcbiAgICAgIGNvdW50OiBgY291bnQke3BsdXJhbH1gXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgX2NyZWF0ZUZvcmVpZ25BbmRPdGhlcktleXMoKSB7XHJcbiAgICAvKlxyXG4gICAgKiBEZWZhdWx0L2dlbmVyYXRlZCBmb3JlaWduL290aGVyIGtleXNcclxuICAgICovXHJcbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLm9wdGlvbnMuZm9yZWlnbktleSkpIHtcclxuICAgICAgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlID0gdGhpcy5vcHRpb25zLmZvcmVpZ25LZXk7XHJcbiAgICAgIHRoaXMuZm9yZWlnbktleSA9IHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZS5uYW1lIHx8IHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZS5maWVsZE5hbWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUgPSB7fTtcclxuICAgICAgdGhpcy5mb3JlaWduS2V5ID0gdGhpcy5vcHRpb25zLmZvcmVpZ25LZXkgfHwgVXRpbHMuY2FtZWxpemUoXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgdGhpcy5zb3VyY2Uub3B0aW9ucy5uYW1lLnNpbmd1bGFyLFxyXG4gICAgICAgICAgdGhpcy5zb3VyY2VLZXlcclxuICAgICAgICBdLmpvaW4oJ18nKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMub3B0aW9ucy5vdGhlcktleSkpIHtcclxuICAgICAgdGhpcy5vdGhlcktleUF0dHJpYnV0ZSA9IHRoaXMub3B0aW9ucy5vdGhlcktleTtcclxuICAgICAgdGhpcy5vdGhlcktleSA9IHRoaXMub3RoZXJLZXlBdHRyaWJ1dGUubmFtZSB8fCB0aGlzLm90aGVyS2V5QXR0cmlidXRlLmZpZWxkTmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLm90aGVyS2V5KSB7XHJcbiAgICAgICAgdGhpcy5vdGhlcktleURlZmF1bHQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLm90aGVyS2V5QXR0cmlidXRlID0ge307XHJcbiAgICAgIHRoaXMub3RoZXJLZXkgPSB0aGlzLm9wdGlvbnMub3RoZXJLZXkgfHwgVXRpbHMuY2FtZWxpemUoXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgdGhpcy5pc1NlbGZBc3NvY2lhdGlvbiA/IFV0aWxzLnNpbmd1bGFyaXplKHRoaXMuYXMpIDogdGhpcy50YXJnZXQub3B0aW9ucy5uYW1lLnNpbmd1bGFyLFxyXG4gICAgICAgICAgdGhpcy50YXJnZXRLZXlcclxuICAgICAgICBdLmpvaW4oJ18nKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gdGhlIGlkIGlzIGluIHRoZSB0YXJnZXQgdGFibGVcclxuICAvLyBvciBpbiBhbiBleHRyYSB0YWJsZSB3aGljaCBjb25uZWN0cyB0d28gdGFibGVzXHJcbiAgX2luamVjdEF0dHJpYnV0ZXMoKSB7XHJcbiAgICB0aGlzLmlkZW50aWZpZXIgPSB0aGlzLmZvcmVpZ25LZXk7XHJcbiAgICB0aGlzLmZvcmVpZ25JZGVudGlmaWVyID0gdGhpcy5vdGhlcktleTtcclxuXHJcbiAgICAvLyByZW1vdmUgYW55IFBLcyBwcmV2aW91c2x5IGRlZmluZWQgYnkgc2VxdWVsaXplXHJcbiAgICAvLyBidXQgaWdub3JlIGFueSBrZXlzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBhc3NvY2lhdGlvbiAoIzU4NjUpXHJcbiAgICBfLmVhY2godGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXMsIChhdHRyaWJ1dGUsIGF0dHJpYnV0ZU5hbWUpID0+IHtcclxuICAgICAgaWYgKGF0dHJpYnV0ZS5wcmltYXJ5S2V5ID09PSB0cnVlICYmIGF0dHJpYnV0ZS5fYXV0b0dlbmVyYXRlZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09PSB0aGlzLmZvcmVpZ25LZXkgfHwgYXR0cmlidXRlTmFtZSA9PT0gdGhpcy5vdGhlcktleSkge1xyXG4gICAgICAgICAgLy8gdGhpcyBrZXkgaXMgc3RpbGwgbmVlZGVkIGFzIGl0J3MgcGFydCBvZiB0aGUgYXNzb2NpYXRpb25cclxuICAgICAgICAgIC8vIHNvIGp1c3Qgc2V0IHByaW1hcnlLZXkgdG8gZmFsc2VcclxuICAgICAgICAgIGF0dHJpYnV0ZS5wcmltYXJ5S2V5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZGVsZXRlIHRoaXMudGhyb3VnaC5tb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByaW1hcnlLZXlEZWxldGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc291cmNlS2V5ID0gdGhpcy5zb3VyY2UucmF3QXR0cmlidXRlc1t0aGlzLnNvdXJjZUtleV07XHJcbiAgICBjb25zdCBzb3VyY2VLZXlUeXBlID0gc291cmNlS2V5LnR5cGU7XHJcbiAgICBjb25zdCBzb3VyY2VLZXlGaWVsZCA9IHRoaXMuc291cmNlS2V5RmllbGQ7XHJcbiAgICBjb25zdCB0YXJnZXRLZXkgPSB0aGlzLnRhcmdldC5yYXdBdHRyaWJ1dGVzW3RoaXMudGFyZ2V0S2V5XTtcclxuICAgIGNvbnN0IHRhcmdldEtleVR5cGUgPSB0YXJnZXRLZXkudHlwZTtcclxuICAgIGNvbnN0IHRhcmdldEtleUZpZWxkID0gdGhpcy50YXJnZXRLZXlGaWVsZDtcclxuICAgIGNvbnN0IHNvdXJjZUF0dHJpYnV0ZSA9IF8uZGVmYXVsdHMoe30sIHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZSwgeyB0eXBlOiBzb3VyY2VLZXlUeXBlIH0pO1xyXG4gICAgY29uc3QgdGFyZ2V0QXR0cmlidXRlID0gXy5kZWZhdWx0cyh7fSwgdGhpcy5vdGhlcktleUF0dHJpYnV0ZSwgeyB0eXBlOiB0YXJnZXRLZXlUeXBlIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnByaW1hcnlLZXlEZWxldGVkID09PSB0cnVlKSB7XHJcbiAgICAgIHRhcmdldEF0dHJpYnV0ZS5wcmltYXJ5S2V5ID0gc291cmNlQXR0cmlidXRlLnByaW1hcnlLZXkgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnRocm91Z2gudW5pcXVlICE9PSBmYWxzZSkge1xyXG4gICAgICBsZXQgdW5pcXVlS2V5O1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy51bmlxdWVLZXkgPT09ICdzdHJpbmcnICYmIHRoaXMub3B0aW9ucy51bmlxdWVLZXkgIT09ICcnKSB7XHJcbiAgICAgICAgdW5pcXVlS2V5ID0gdGhpcy5vcHRpb25zLnVuaXF1ZUtleTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB1bmlxdWVLZXkgPSBbdGhpcy50aHJvdWdoLm1vZGVsLnRhYmxlTmFtZSwgdGhpcy5mb3JlaWduS2V5LCB0aGlzLm90aGVyS2V5LCAndW5pcXVlJ10uam9pbignXycpO1xyXG4gICAgICB9XHJcbiAgICAgIHRhcmdldEF0dHJpYnV0ZS51bmlxdWUgPSBzb3VyY2VBdHRyaWJ1dGUudW5pcXVlID0gdW5pcXVlS2V5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XSkge1xyXG4gICAgICB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldID0ge1xyXG4gICAgICAgIF9hdXRvR2VuZXJhdGVkOiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLm90aGVyS2V5XSkge1xyXG4gICAgICB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLm90aGVyS2V5XSA9IHtcclxuICAgICAgICBfYXV0b0dlbmVyYXRlZDogdHJ1ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29uc3RyYWludHMgIT09IGZhbHNlKSB7XHJcbiAgICAgIHNvdXJjZUF0dHJpYnV0ZS5yZWZlcmVuY2VzID0ge1xyXG4gICAgICAgIG1vZGVsOiB0aGlzLnNvdXJjZS5nZXRUYWJsZU5hbWUoKSxcclxuICAgICAgICBrZXk6IHNvdXJjZUtleUZpZWxkXHJcbiAgICAgIH07XHJcbiAgICAgIC8vIEZvciB0aGUgc291cmNlIGF0dHJpYnV0ZSB0aGUgcGFzc2VkIG9wdGlvbiBpcyB0aGUgcHJpb3JpdHlcclxuICAgICAgc291cmNlQXR0cmlidXRlLm9uRGVsZXRlID0gdGhpcy5vcHRpb25zLm9uRGVsZXRlIHx8IHRoaXMudGhyb3VnaC5tb2RlbC5yYXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0ub25EZWxldGU7XHJcbiAgICAgIHNvdXJjZUF0dHJpYnV0ZS5vblVwZGF0ZSA9IHRoaXMub3B0aW9ucy5vblVwZGF0ZSB8fCB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldLm9uVXBkYXRlO1xyXG5cclxuICAgICAgaWYgKCFzb3VyY2VBdHRyaWJ1dGUub25EZWxldGUpIHNvdXJjZUF0dHJpYnV0ZS5vbkRlbGV0ZSA9ICdDQVNDQURFJztcclxuICAgICAgaWYgKCFzb3VyY2VBdHRyaWJ1dGUub25VcGRhdGUpIHNvdXJjZUF0dHJpYnV0ZS5vblVwZGF0ZSA9ICdDQVNDQURFJztcclxuXHJcbiAgICAgIHRhcmdldEF0dHJpYnV0ZS5yZWZlcmVuY2VzID0ge1xyXG4gICAgICAgIG1vZGVsOiB0aGlzLnRhcmdldC5nZXRUYWJsZU5hbWUoKSxcclxuICAgICAgICBrZXk6IHRhcmdldEtleUZpZWxkXHJcbiAgICAgIH07XHJcbiAgICAgIC8vIEJ1dCB0aGUgZm9yIHRhcmdldCBhdHRyaWJ1dGUgdGhlIHByZXZpb3VzbHkgZGVmaW5lZCBvcHRpb24gaXMgdGhlIHByaW9yaXR5IChzaW5jZSBpdCBjb3VsZCd2ZSBiZWVuIHNldCBieSBhbm90aGVyIGJlbG9uZ3NUb01hbnkgY2FsbClcclxuICAgICAgdGFyZ2V0QXR0cmlidXRlLm9uRGVsZXRlID0gdGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5vdGhlcktleV0ub25EZWxldGUgfHwgdGhpcy5vcHRpb25zLm9uRGVsZXRlO1xyXG4gICAgICB0YXJnZXRBdHRyaWJ1dGUub25VcGRhdGUgPSB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLm90aGVyS2V5XS5vblVwZGF0ZSB8fCB0aGlzLm9wdGlvbnMub25VcGRhdGU7XHJcblxyXG4gICAgICBpZiAoIXRhcmdldEF0dHJpYnV0ZS5vbkRlbGV0ZSkgdGFyZ2V0QXR0cmlidXRlLm9uRGVsZXRlID0gJ0NBU0NBREUnO1xyXG4gICAgICBpZiAoIXRhcmdldEF0dHJpYnV0ZS5vblVwZGF0ZSkgdGFyZ2V0QXR0cmlidXRlLm9uVXBkYXRlID0gJ0NBU0NBREUnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGhyb3VnaC5tb2RlbC5yYXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0gPSBPYmplY3QuYXNzaWduKHRoaXMudGhyb3VnaC5tb2RlbC5yYXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0sIHNvdXJjZUF0dHJpYnV0ZSk7XHJcbiAgICB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLm90aGVyS2V5XSA9IE9iamVjdC5hc3NpZ24odGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5vdGhlcktleV0sIHRhcmdldEF0dHJpYnV0ZSk7XHJcblxyXG4gICAgdGhpcy50aHJvdWdoLm1vZGVsLnJlZnJlc2hBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgdGhpcy5pZGVudGlmaWVyRmllbGQgPSB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldLmZpZWxkIHx8IHRoaXMuZm9yZWlnbktleTtcclxuICAgIHRoaXMuZm9yZWlnbklkZW50aWZpZXJGaWVsZCA9IHRoaXMudGhyb3VnaC5tb2RlbC5yYXdBdHRyaWJ1dGVzW3RoaXMub3RoZXJLZXldLmZpZWxkIHx8IHRoaXMub3RoZXJLZXk7XHJcblxyXG4gICAgaWYgKHRoaXMucGFpcmVkICYmICF0aGlzLnBhaXJlZC5mb3JlaWduSWRlbnRpZmllckZpZWxkKSB7XHJcbiAgICAgIHRoaXMucGFpcmVkLmZvcmVpZ25JZGVudGlmaWVyRmllbGQgPSB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLnBhaXJlZC5vdGhlcktleV0uZmllbGQgfHwgdGhpcy5wYWlyZWQub3RoZXJLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b1NvdXJjZSA9IG5ldyBCZWxvbmdzVG8odGhpcy50aHJvdWdoLm1vZGVsLCB0aGlzLnNvdXJjZSwge1xyXG4gICAgICBmb3JlaWduS2V5OiB0aGlzLmZvcmVpZ25LZXlcclxuICAgIH0pO1xyXG4gICAgdGhpcy5tYW55RnJvbVNvdXJjZSA9IG5ldyBIYXNNYW55KHRoaXMuc291cmNlLCB0aGlzLnRocm91Z2gubW9kZWwsIHtcclxuICAgICAgZm9yZWlnbktleTogdGhpcy5mb3JlaWduS2V5XHJcbiAgICB9KTtcclxuICAgIHRoaXMub25lRnJvbVNvdXJjZSA9IG5ldyBIYXNPbmUodGhpcy5zb3VyY2UsIHRoaXMudGhyb3VnaC5tb2RlbCwge1xyXG4gICAgICBmb3JlaWduS2V5OiB0aGlzLmZvcmVpZ25LZXksXHJcbiAgICAgIGFzOiB0aGlzLnRocm91Z2gubW9kZWwubmFtZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy50b1RhcmdldCA9IG5ldyBCZWxvbmdzVG8odGhpcy50aHJvdWdoLm1vZGVsLCB0aGlzLnRhcmdldCwge1xyXG4gICAgICBmb3JlaWduS2V5OiB0aGlzLm90aGVyS2V5XHJcbiAgICB9KTtcclxuICAgIHRoaXMubWFueUZyb21UYXJnZXQgPSBuZXcgSGFzTWFueSh0aGlzLnRhcmdldCwgdGhpcy50aHJvdWdoLm1vZGVsLCB7XHJcbiAgICAgIGZvcmVpZ25LZXk6IHRoaXMub3RoZXJLZXlcclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbmVGcm9tVGFyZ2V0ID0gbmV3IEhhc09uZSh0aGlzLnRhcmdldCwgdGhpcy50aHJvdWdoLm1vZGVsLCB7XHJcbiAgICAgIGZvcmVpZ25LZXk6IHRoaXMub3RoZXJLZXksXHJcbiAgICAgIGFzOiB0aGlzLnRocm91Z2gubW9kZWwubmFtZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMucGFpcmVkICYmIHRoaXMucGFpcmVkLm90aGVyS2V5RGVmYXVsdCkge1xyXG4gICAgICB0aGlzLnBhaXJlZC50b1RhcmdldCA9IG5ldyBCZWxvbmdzVG8odGhpcy5wYWlyZWQudGhyb3VnaC5tb2RlbCwgdGhpcy5wYWlyZWQudGFyZ2V0LCB7XHJcbiAgICAgICAgZm9yZWlnbktleTogdGhpcy5wYWlyZWQub3RoZXJLZXlcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnBhaXJlZC5vbmVGcm9tVGFyZ2V0ID0gbmV3IEhhc09uZSh0aGlzLnBhaXJlZC50YXJnZXQsIHRoaXMucGFpcmVkLnRocm91Z2gubW9kZWwsIHtcclxuICAgICAgICBmb3JlaWduS2V5OiB0aGlzLnBhaXJlZC5vdGhlcktleSxcclxuICAgICAgICBhczogdGhpcy5wYWlyZWQudGhyb3VnaC5tb2RlbC5uYW1lXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEhlbHBlcnMuY2hlY2tOYW1pbmdDb2xsaXNpb24odGhpcyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBtaXhpbihvYmopIHtcclxuICAgIGNvbnN0IG1ldGhvZHMgPSBbJ2dldCcsICdjb3VudCcsICdoYXNTaW5nbGUnLCAnaGFzQWxsJywgJ3NldCcsICdhZGQnLCAnYWRkTXVsdGlwbGUnLCAncmVtb3ZlJywgJ3JlbW92ZU11bHRpcGxlJywgJ2NyZWF0ZSddO1xyXG4gICAgY29uc3QgYWxpYXNlcyA9IHtcclxuICAgICAgaGFzU2luZ2xlOiAnaGFzJyxcclxuICAgICAgaGFzQWxsOiAnaGFzJyxcclxuICAgICAgYWRkTXVsdGlwbGU6ICdhZGQnLFxyXG4gICAgICByZW1vdmVNdWx0aXBsZTogJ3JlbW92ZSdcclxuICAgIH07XHJcblxyXG4gICAgSGVscGVycy5taXhpbk1ldGhvZHModGhpcywgb2JqLCBtZXRob2RzLCBhbGlhc2VzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBldmVyeXRoaW5nIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhpcywgdXNpbmcgYW4gb3B0aW9uYWwgd2hlcmUgY2xhdXNlLlxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbH0gZm9yIGEgZnVsbCBleHBsYW5hdGlvbiBvZiBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfSBpbnN0YW5jZSBpbnN0YW5jZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gZmluZCBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLndoZXJlXSBBbiBvcHRpb25hbCB3aGVyZSBjbGF1c2UgdG8gbGltaXQgdGhlIGFzc29jaWF0ZWQgbW9kZWxzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gW29wdGlvbnMuc2NvcGVdIEFwcGx5IGEgc2NvcGUgb24gdGhlIHJlbGF0ZWQgbW9kZWwsIG9yIHJlbW92ZSBpdHMgZGVmYXVsdCBzY29wZSBieSBwYXNzaW5nIGZhbHNlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNjaGVtYV0gQXBwbHkgYSBzY2hlbWEgb24gdGhlIHJlbGF0ZWQgbW9kZWxcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PE1vZGVsPj59XHJcbiAgICovXHJcbiAgZ2V0KGluc3RhbmNlLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IHRocm91Z2ggPSB0aGlzLnRocm91Z2g7XHJcbiAgICBsZXQgc2NvcGVXaGVyZTtcclxuICAgIGxldCB0aHJvdWdoV2hlcmU7XHJcblxyXG4gICAgaWYgKHRoaXMuc2NvcGUpIHtcclxuICAgICAgc2NvcGVXaGVyZSA9IF8uY2xvbmUodGhpcy5zY29wZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucy53aGVyZSA9IHtcclxuICAgICAgW09wLmFuZF06IFtcclxuICAgICAgICBzY29wZVdoZXJlLFxyXG4gICAgICAgIG9wdGlvbnMud2hlcmVcclxuICAgICAgXVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoT2JqZWN0KHRocm91Z2gubW9kZWwpID09PSB0aHJvdWdoLm1vZGVsKSB7XHJcbiAgICAgIHRocm91Z2hXaGVyZSA9IHt9O1xyXG4gICAgICB0aHJvdWdoV2hlcmVbdGhpcy5mb3JlaWduS2V5XSA9IGluc3RhbmNlLmdldCh0aGlzLnNvdXJjZUtleSk7XHJcblxyXG4gICAgICBpZiAodGhyb3VnaC5zY29wZSkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhyb3VnaFdoZXJlLCB0aHJvdWdoLnNjb3BlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9JZiBhIHVzZXIgcGFzcyBhIHdoZXJlIG9uIHRoZSBvcHRpb25zIHRocm91Z2ggb3B0aW9ucywgbWFrZSBhbiBcImFuZFwiIHdpdGggdGhlIGN1cnJlbnQgdGhyb3VnaFdoZXJlXHJcbiAgICAgIGlmIChvcHRpb25zLnRocm91Z2ggJiYgb3B0aW9ucy50aHJvdWdoLndoZXJlKSB7XHJcbiAgICAgICAgdGhyb3VnaFdoZXJlID0ge1xyXG4gICAgICAgICAgW09wLmFuZF06IFt0aHJvdWdoV2hlcmUsIG9wdGlvbnMudGhyb3VnaC53aGVyZV1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBvcHRpb25zLmluY2x1ZGUgPSBvcHRpb25zLmluY2x1ZGUgfHwgW107XHJcbiAgICAgIG9wdGlvbnMuaW5jbHVkZS5wdXNoKHtcclxuICAgICAgICBhc3NvY2lhdGlvbjogdGhpcy5vbmVGcm9tVGFyZ2V0LFxyXG4gICAgICAgIGF0dHJpYnV0ZXM6IG9wdGlvbnMuam9pblRhYmxlQXR0cmlidXRlcyxcclxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICB3aGVyZTogdGhyb3VnaFdoZXJlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtb2RlbCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc2NvcGUnKSkge1xyXG4gICAgICBpZiAoIW9wdGlvbnMuc2NvcGUpIHtcclxuICAgICAgICBtb2RlbCA9IG1vZGVsLnVuc2NvcGVkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbW9kZWwgPSBtb2RlbC5zY29wZShvcHRpb25zLnNjb3BlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NjaGVtYScpKSB7XHJcbiAgICAgIG1vZGVsID0gbW9kZWwuc2NoZW1hKG9wdGlvbnMuc2NoZW1hLCBvcHRpb25zLnNjaGVtYURlbGltaXRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1vZGVsLmZpbmRBbGwob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb3VudCBldmVyeXRoaW5nIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhpcywgdXNpbmcgYW4gb3B0aW9uYWwgd2hlcmUgY2xhdXNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb2RlbH0gaW5zdGFuY2UgaW5zdGFuY2VcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIGZpbmQgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy53aGVyZV0gQW4gb3B0aW9uYWwgd2hlcmUgY2xhdXNlIHRvIGxpbWl0IHRoZSBhc3NvY2lhdGVkIG1vZGVsc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IFtvcHRpb25zLnNjb3BlXSBBcHBseSBhIHNjb3BlIG9uIHRoZSByZWxhdGVkIG1vZGVsLCBvciByZW1vdmUgaXRzIGRlZmF1bHQgc2NvcGUgYnkgcGFzc2luZyBmYWxzZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn1cclxuICAgKi9cclxuICBjb3VudChpbnN0YW5jZSwgb3B0aW9ucykge1xyXG4gICAgY29uc3Qgc2VxdWVsaXplID0gdGhpcy50YXJnZXQuc2VxdWVsaXplO1xyXG5cclxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XHJcbiAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBbXHJcbiAgICAgIFtzZXF1ZWxpemUuZm4oJ0NPVU5UJywgc2VxdWVsaXplLmNvbChbdGhpcy50YXJnZXQubmFtZSwgdGhpcy50YXJnZXRLZXlGaWVsZF0uam9pbignLicpKSksICdjb3VudCddXHJcbiAgICBdO1xyXG4gICAgb3B0aW9ucy5qb2luVGFibGVBdHRyaWJ1dGVzID0gW107XHJcbiAgICBvcHRpb25zLnJhdyA9IHRydWU7XHJcbiAgICBvcHRpb25zLnBsYWluID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5nZXQoaW5zdGFuY2UsIG9wdGlvbnMpLnRoZW4ocmVzdWx0ID0+IHBhcnNlSW50KHJlc3VsdC5jb3VudCwgMTApKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIG9uZSBvciBtb3JlIGluc3RhbmNlKHMpIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcy4gSWYgYSBsaXN0IG9mIGluc3RhbmNlcyBpcyBwYXNzZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgX2FsbF8gaW5zdGFuY2VzIGFyZSBhc3NvY2lhdGVkXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfSBzb3VyY2VJbnN0YW5jZSBzb3VyY2UgaW5zdGFuY2UgdG8gY2hlY2sgZm9yIGFuIGFzc29jaWF0aW9uIHdpdGhcclxuICAgKiBAcGFyYW0ge01vZGVsfE1vZGVsW118c3RyaW5nW118c3RyaW5nfG51bWJlcltdfG51bWJlcn0gW2luc3RhbmNlc10gQ2FuIGJlIGFuIGFycmF5IG9mIGluc3RhbmNlcyBvciB0aGVpciBwcmltYXJ5IGtleXNcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgcGFzc2VkIHRvIGdldEFzc29jaWF0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XHJcbiAgICovXHJcbiAgaGFzKHNvdXJjZUluc3RhbmNlLCBpbnN0YW5jZXMsIG9wdGlvbnMpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShpbnN0YW5jZXMpKSB7XHJcbiAgICAgIGluc3RhbmNlcyA9IFtpbnN0YW5jZXNdO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcclxuICAgICAgcmF3OiB0cnVlXHJcbiAgICB9LCBvcHRpb25zLCB7XHJcbiAgICAgIHNjb3BlOiBmYWxzZSxcclxuICAgICAgYXR0cmlidXRlczogW3RoaXMudGFyZ2V0S2V5XSxcclxuICAgICAgam9pblRhYmxlQXR0cmlidXRlczogW11cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGluc3RhbmNlUHJpbWFyeUtleXMgPSBpbnN0YW5jZXMubWFwKGluc3RhbmNlID0+IHtcclxuICAgICAgaWYgKGluc3RhbmNlIGluc3RhbmNlb2YgdGhpcy50YXJnZXQpIHtcclxuICAgICAgICByZXR1cm4gaW5zdGFuY2Uud2hlcmUoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIFt0aGlzLnRhcmdldEtleV06IGluc3RhbmNlXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICBvcHRpb25zLndoZXJlID0ge1xyXG4gICAgICBbT3AuYW5kXTogW1xyXG4gICAgICAgIHsgW09wLm9yXTogaW5zdGFuY2VQcmltYXJ5S2V5cyB9LFxyXG4gICAgICAgIG9wdGlvbnMud2hlcmVcclxuICAgICAgXVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5nZXQoc291cmNlSW5zdGFuY2UsIG9wdGlvbnMpLnRoZW4oYXNzb2NpYXRlZE9iamVjdHMgPT5cclxuICAgICAgXy5kaWZmZXJlbmNlV2l0aChpbnN0YW5jZVByaW1hcnlLZXlzLCBhc3NvY2lhdGVkT2JqZWN0cyxcclxuICAgICAgICAoYSwgYikgPT4gXy5pc0VxdWFsKGFbdGhpcy50YXJnZXRLZXldLCBiW3RoaXMudGFyZ2V0S2V5XSkpLmxlbmd0aCA9PT0gMFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgYXNzb2NpYXRlZCBtb2RlbHMgYnkgcGFzc2luZyBhbiBhcnJheSBvZiBpbnN0YW5jZXMgb3IgdGhlaXIgcHJpbWFyeSBrZXlzLlxyXG4gICAqIEV2ZXJ5dGhpbmcgdGhhdCBpdCBub3QgaW4gdGhlIHBhc3NlZCBhcnJheSB3aWxsIGJlIHVuLWFzc29jaWF0ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfSBzb3VyY2VJbnN0YW5jZSBzb3VyY2UgaW5zdGFuY2UgdG8gYXNzb2NpYXRlIG5ldyBpbnN0YW5jZXMgd2l0aFxyXG4gICAqIEBwYXJhbSB7TW9kZWx8TW9kZWxbXXxzdHJpbmdbXXxzdHJpbmd8bnVtYmVyW118bnVtYmVyfSBbbmV3QXNzb2NpYXRlZE9iamVjdHNdIEEgc2luZ2xlIGluc3RhbmNlIG9yIHByaW1hcnkga2V5LCBvciBhIG1peGVkIGFycmF5IG9mIHBlcnNpc3RlZCBpbnN0YW5jZXMgb3IgcHJpbWFyeSBrZXlzXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHBhc3NlZCB0byBgdGhyb3VnaC5maW5kQWxsYCwgYGJ1bGtDcmVhdGVgLCBgdXBkYXRlYCBhbmQgYGRlc3Ryb3lgXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnZhbGlkYXRlXSBSdW4gdmFsaWRhdGlvbiBmb3IgdGhlIGpvaW4gbW9kZWxcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMudGhyb3VnaF0gQWRkaXRpb25hbCBhdHRyaWJ1dGVzIGZvciB0aGUgam9pbiB0YWJsZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIHNldChzb3VyY2VJbnN0YW5jZSwgbmV3QXNzb2NpYXRlZE9iamVjdHMsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZUtleSA9IHRoaXMuc291cmNlS2V5O1xyXG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gdGhpcy50YXJnZXRLZXk7XHJcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5pZGVudGlmaWVyO1xyXG4gICAgY29uc3QgZm9yZWlnbklkZW50aWZpZXIgPSB0aGlzLmZvcmVpZ25JZGVudGlmaWVyO1xyXG4gICAgbGV0IHdoZXJlID0ge307XHJcblxyXG4gICAgaWYgKG5ld0Fzc29jaWF0ZWRPYmplY3RzID09PSBudWxsKSB7XHJcbiAgICAgIG5ld0Fzc29jaWF0ZWRPYmplY3RzID0gW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdBc3NvY2lhdGVkT2JqZWN0cyA9IHRoaXMudG9JbnN0YW5jZUFycmF5KG5ld0Fzc29jaWF0ZWRPYmplY3RzKTtcclxuICAgIH1cclxuXHJcbiAgICB3aGVyZVtpZGVudGlmaWVyXSA9IHNvdXJjZUluc3RhbmNlLmdldChzb3VyY2VLZXkpO1xyXG4gICAgd2hlcmUgPSBPYmplY3QuYXNzaWduKHdoZXJlLCB0aGlzLnRocm91Z2guc2NvcGUpO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZUFzc29jaWF0aW9ucyA9IGN1cnJlbnRSb3dzID0+IHtcclxuICAgICAgY29uc3Qgb2Jzb2xldGVBc3NvY2lhdGlvbnMgPSBbXTtcclxuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgY29uc3QgZGVmYXVsdEF0dHJpYnV0ZXMgPSBvcHRpb25zLnRocm91Z2ggfHwge307XHJcblxyXG4gICAgICBjb25zdCB1bmFzc29jaWF0ZWRPYmplY3RzID0gbmV3QXNzb2NpYXRlZE9iamVjdHMuZmlsdGVyKG9iaiA9PlxyXG4gICAgICAgICFjdXJyZW50Um93cy5zb21lKGN1cnJlbnRSb3cgPT4gY3VycmVudFJvd1tmb3JlaWduSWRlbnRpZmllcl0gPT09IG9iai5nZXQodGFyZ2V0S2V5KSlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgY3VycmVudFJvdyBvZiBjdXJyZW50Um93cykge1xyXG4gICAgICAgIGNvbnN0IG5ld09iaiA9IG5ld0Fzc29jaWF0ZWRPYmplY3RzLmZpbmQob2JqID0+IGN1cnJlbnRSb3dbZm9yZWlnbklkZW50aWZpZXJdID09PSBvYmouZ2V0KHRhcmdldEtleSkpO1xyXG5cclxuICAgICAgICBpZiAoIW5ld09iaikge1xyXG4gICAgICAgICAgb2Jzb2xldGVBc3NvY2lhdGlvbnMucHVzaChjdXJyZW50Um93KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHRocm91Z2hBdHRyaWJ1dGVzID0gbmV3T2JqW3RoaXMudGhyb3VnaC5tb2RlbC5uYW1lXTtcclxuICAgICAgICAgIC8vIFF1aWNrLWZpeCBmb3Igc3VidGxlIGJ1ZyB3aGVuIHVzaW5nIGV4aXN0aW5nIG9iamVjdHMgdGhhdCBtaWdodCBoYXZlIHRoZSB0aHJvdWdoIG1vZGVsIGF0dGFjaGVkIChub3QgYXMgYW4gYXR0cmlidXRlIG9iamVjdClcclxuICAgICAgICAgIGlmICh0aHJvdWdoQXR0cmlidXRlcyBpbnN0YW5jZW9mIHRoaXMudGhyb3VnaC5tb2RlbCkge1xyXG4gICAgICAgICAgICB0aHJvdWdoQXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBfLmRlZmF1bHRzKHt9LCB0aHJvdWdoQXR0cmlidXRlcywgZGVmYXVsdEF0dHJpYnV0ZXMpO1xyXG5cclxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLnRocm91Z2gubW9kZWwudXBkYXRlKGF0dHJpYnV0ZXMsIE9iamVjdC5hc3NpZ24ob3B0aW9ucywge1xyXG4gICAgICAgICAgICAgICAgd2hlcmU6IHtcclxuICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdOiBzb3VyY2VJbnN0YW5jZS5nZXQoc291cmNlS2V5KSxcclxuICAgICAgICAgICAgICAgICAgW2ZvcmVpZ25JZGVudGlmaWVyXTogbmV3T2JqLmdldCh0YXJnZXRLZXkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob2Jzb2xldGVBc3NvY2lhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHdoZXJlID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICBbaWRlbnRpZmllcl06IHNvdXJjZUluc3RhbmNlLmdldChzb3VyY2VLZXkpLFxyXG4gICAgICAgICAgW2ZvcmVpZ25JZGVudGlmaWVyXTogb2Jzb2xldGVBc3NvY2lhdGlvbnMubWFwKG9ic29sZXRlQXNzb2NpYXRpb24gPT4gb2Jzb2xldGVBc3NvY2lhdGlvbltmb3JlaWduSWRlbnRpZmllcl0pXHJcbiAgICAgICAgfSwgdGhpcy50aHJvdWdoLnNjb3BlKTtcclxuICAgICAgICBwcm9taXNlcy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy50aHJvdWdoLm1vZGVsLmRlc3Ryb3koXy5kZWZhdWx0cyh7XHJcbiAgICAgICAgICAgIHdoZXJlXHJcbiAgICAgICAgICB9LCBvcHRpb25zKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodW5hc3NvY2lhdGVkT2JqZWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgYnVsayA9IHVuYXNzb2NpYXRlZE9iamVjdHMubWFwKHVuYXNzb2NpYXRlZE9iamVjdCA9PiB7XHJcbiAgICAgICAgICBsZXQgYXR0cmlidXRlcyA9IHt9O1xyXG5cclxuICAgICAgICAgIGF0dHJpYnV0ZXNbaWRlbnRpZmllcl0gPSBzb3VyY2VJbnN0YW5jZS5nZXQoc291cmNlS2V5KTtcclxuICAgICAgICAgIGF0dHJpYnV0ZXNbZm9yZWlnbklkZW50aWZpZXJdID0gdW5hc3NvY2lhdGVkT2JqZWN0LmdldCh0YXJnZXRLZXkpO1xyXG5cclxuICAgICAgICAgIGF0dHJpYnV0ZXMgPSBfLmRlZmF1bHRzKGF0dHJpYnV0ZXMsIHVuYXNzb2NpYXRlZE9iamVjdFt0aGlzLnRocm91Z2gubW9kZWwubmFtZV0sIGRlZmF1bHRBdHRyaWJ1dGVzKTtcclxuXHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGF0dHJpYnV0ZXMsIHRoaXMudGhyb3VnaC5zY29wZSk7XHJcbiAgICAgICAgICBhdHRyaWJ1dGVzID0gT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCB0aGlzLnRocm91Z2guc2NvcGUpO1xyXG5cclxuICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMudGhyb3VnaC5tb2RlbC5idWxrQ3JlYXRlKGJ1bGssIE9iamVjdC5hc3NpZ24oeyB2YWxpZGF0ZTogdHJ1ZSB9LCBvcHRpb25zKSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gVXRpbHMuUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy50aHJvdWdoLm1vZGVsLmZpbmRBbGwoXy5kZWZhdWx0cyh7IHdoZXJlLCByYXc6IHRydWUgfSwgb3B0aW9ucykpXHJcbiAgICAgIC50aGVuKGN1cnJlbnRSb3dzID0+IHVwZGF0ZUFzc29jaWF0aW9ucyhjdXJyZW50Um93cykpXHJcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRW1wdHlSZXN1bHRFcnJvcikgcmV0dXJuIHVwZGF0ZUFzc29jaWF0aW9ucyhbXSk7XHJcbiAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXNzb2NpYXRlIG9uZSBvciBzZXZlcmFsIHJvd3Mgd2l0aCBzb3VyY2UgaW5zdGFuY2UuIEl0IHdpbGwgbm90IHVuLWFzc29jaWF0ZSBhbnkgYWxyZWFkeSBhc3NvY2lhdGVkIGluc3RhbmNlXHJcbiAgICogdGhhdCBtYXkgYmUgbWlzc2luZyBmcm9tIGBuZXdJbnN0YW5jZXNgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2Ugc291cmNlIGluc3RhbmNlIHRvIGFzc29jaWF0ZSBuZXcgaW5zdGFuY2VzIHdpdGhcclxuICAgKiBAcGFyYW0ge01vZGVsfE1vZGVsW118c3RyaW5nW118c3RyaW5nfG51bWJlcltdfG51bWJlcn0gW25ld0luc3RhbmNlc10gQSBzaW5nbGUgaW5zdGFuY2Ugb3IgcHJpbWFyeSBrZXksIG9yIGEgbWl4ZWQgYXJyYXkgb2YgcGVyc2lzdGVkIGluc3RhbmNlcyBvciBwcmltYXJ5IGtleXNcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgcGFzc2VkIHRvIGB0aHJvdWdoLmZpbmRBbGxgLCBgYnVsa0NyZWF0ZWAgYW5kIGB1cGRhdGVgXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnZhbGlkYXRlXSBSdW4gdmFsaWRhdGlvbiBmb3IgdGhlIGpvaW4gbW9kZWwuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnRocm91Z2hdIEFkZGl0aW9uYWwgYXR0cmlidXRlcyBmb3IgdGhlIGpvaW4gdGFibGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBhZGQoc291cmNlSW5zdGFuY2UsIG5ld0luc3RhbmNlcywgb3B0aW9ucykge1xyXG4gICAgLy8gSWYgbmV3SW5zdGFuY2VzIGlzIG51bGwgb3IgdW5kZWZpbmVkLCBuby1vcFxyXG4gICAgaWYgKCFuZXdJbnN0YW5jZXMpIHJldHVybiBVdGlscy5Qcm9taXNlLnJlc29sdmUoKTtcclxuXHJcbiAgICBvcHRpb25zID0gXy5jbG9uZShvcHRpb25zKSB8fCB7fTtcclxuXHJcbiAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXM7XHJcbiAgICBjb25zdCBzb3VyY2VLZXkgPSBhc3NvY2lhdGlvbi5zb3VyY2VLZXk7XHJcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBhc3NvY2lhdGlvbi50YXJnZXRLZXk7XHJcbiAgICBjb25zdCBpZGVudGlmaWVyID0gYXNzb2NpYXRpb24uaWRlbnRpZmllcjtcclxuICAgIGNvbnN0IGZvcmVpZ25JZGVudGlmaWVyID0gYXNzb2NpYXRpb24uZm9yZWlnbklkZW50aWZpZXI7XHJcbiAgICBjb25zdCBkZWZhdWx0QXR0cmlidXRlcyA9IG9wdGlvbnMudGhyb3VnaCB8fCB7fTtcclxuXHJcbiAgICBuZXdJbnN0YW5jZXMgPSBhc3NvY2lhdGlvbi50b0luc3RhbmNlQXJyYXkobmV3SW5zdGFuY2VzKTtcclxuXHJcbiAgICBjb25zdCB3aGVyZSA9IHtcclxuICAgICAgW2lkZW50aWZpZXJdOiBzb3VyY2VJbnN0YW5jZS5nZXQoc291cmNlS2V5KSxcclxuICAgICAgW2ZvcmVpZ25JZGVudGlmaWVyXTogbmV3SW5zdGFuY2VzLm1hcChuZXdJbnN0YW5jZSA9PiBuZXdJbnN0YW5jZS5nZXQodGFyZ2V0S2V5KSlcclxuICAgIH07XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbih3aGVyZSwgYXNzb2NpYXRpb24udGhyb3VnaC5zY29wZSk7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlQXNzb2NpYXRpb25zID0gY3VycmVudFJvd3MgPT4ge1xyXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xyXG4gICAgICBjb25zdCB1bmFzc29jaWF0ZWRPYmplY3RzID0gW107XHJcbiAgICAgIGNvbnN0IGNoYW5nZWRBc3NvY2lhdGlvbnMgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBvYmogb2YgbmV3SW5zdGFuY2VzKSB7XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdBc3NvY2lhdGlvbiA9IGN1cnJlbnRSb3dzICYmIGN1cnJlbnRSb3dzLmZpbmQoY3VycmVudCA9PiBjdXJyZW50W2ZvcmVpZ25JZGVudGlmaWVyXSA9PT0gb2JqLmdldCh0YXJnZXRLZXkpKTtcclxuXHJcbiAgICAgICAgaWYgKCFleGlzdGluZ0Fzc29jaWF0aW9uKSB7XHJcbiAgICAgICAgICB1bmFzc29jaWF0ZWRPYmplY3RzLnB1c2gob2JqKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgdGhyb3VnaEF0dHJpYnV0ZXMgPSBvYmpbYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbC5uYW1lXTtcclxuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBfLmRlZmF1bHRzKHt9LCB0aHJvdWdoQXR0cmlidXRlcywgZGVmYXVsdEF0dHJpYnV0ZXMpO1xyXG5cclxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5zb21lKGF0dHJpYnV0ZSA9PiBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gIT09IGV4aXN0aW5nQXNzb2NpYXRpb25bYXR0cmlidXRlXSkpIHtcclxuICAgICAgICAgICAgY2hhbmdlZEFzc29jaWF0aW9ucy5wdXNoKG9iaik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodW5hc3NvY2lhdGVkT2JqZWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgYnVsayA9IHVuYXNzb2NpYXRlZE9iamVjdHMubWFwKHVuYXNzb2NpYXRlZE9iamVjdCA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0aHJvdWdoQXR0cmlidXRlcyA9IHVuYXNzb2NpYXRlZE9iamVjdFthc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLm5hbWVdO1xyXG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IF8uZGVmYXVsdHMoe30sIHRocm91Z2hBdHRyaWJ1dGVzLCBkZWZhdWx0QXR0cmlidXRlcyk7XHJcblxyXG4gICAgICAgICAgYXR0cmlidXRlc1tpZGVudGlmaWVyXSA9IHNvdXJjZUluc3RhbmNlLmdldChzb3VyY2VLZXkpO1xyXG4gICAgICAgICAgYXR0cmlidXRlc1tmb3JlaWduSWRlbnRpZmllcl0gPSB1bmFzc29jaWF0ZWRPYmplY3QuZ2V0KHRhcmdldEtleSk7XHJcblxyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCBhc3NvY2lhdGlvbi50aHJvdWdoLnNjb3BlKTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcHJvbWlzZXMucHVzaChhc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLmJ1bGtDcmVhdGUoYnVsaywgT2JqZWN0LmFzc2lnbih7IHZhbGlkYXRlOiB0cnVlIH0sIG9wdGlvbnMpKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoY29uc3QgYXNzb2Mgb2YgY2hhbmdlZEFzc29jaWF0aW9ucykge1xyXG4gICAgICAgIGxldCB0aHJvdWdoQXR0cmlidXRlcyA9IGFzc29jW2Fzc29jaWF0aW9uLnRocm91Z2gubW9kZWwubmFtZV07XHJcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IF8uZGVmYXVsdHMoe30sIHRocm91Z2hBdHRyaWJ1dGVzLCBkZWZhdWx0QXR0cmlidXRlcyk7XHJcbiAgICAgICAgLy8gUXVpY2stZml4IGZvciBzdWJ0bGUgYnVnIHdoZW4gdXNpbmcgZXhpc3Rpbmcgb2JqZWN0cyB0aGF0IG1pZ2h0IGhhdmUgdGhlIHRocm91Z2ggbW9kZWwgYXR0YWNoZWQgKG5vdCBhcyBhbiBhdHRyaWJ1dGUgb2JqZWN0KVxyXG4gICAgICAgIGlmICh0aHJvdWdoQXR0cmlidXRlcyBpbnN0YW5jZW9mIGFzc29jaWF0aW9uLnRocm91Z2gubW9kZWwpIHtcclxuICAgICAgICAgIHRocm91Z2hBdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdoZXJlID0ge1xyXG4gICAgICAgICAgW2lkZW50aWZpZXJdOiBzb3VyY2VJbnN0YW5jZS5nZXQoc291cmNlS2V5KSxcclxuICAgICAgICAgIFtmb3JlaWduSWRlbnRpZmllcl06IGFzc29jLmdldCh0YXJnZXRLZXkpXHJcbiAgICAgICAgfTtcclxuXHJcblxyXG4gICAgICAgIHByb21pc2VzLnB1c2goYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbC51cGRhdGUoYXR0cmlidXRlcywgT2JqZWN0LmFzc2lnbihvcHRpb25zLCB7IHdoZXJlIH0pKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBVdGlscy5Qcm9taXNlLmFsbChwcm9taXNlcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBhc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLmZpbmRBbGwoXy5kZWZhdWx0cyh7IHdoZXJlLCByYXc6IHRydWUgfSwgb3B0aW9ucykpXHJcbiAgICAgIC50aGVuKGN1cnJlbnRSb3dzID0+IHVwZGF0ZUFzc29jaWF0aW9ucyhjdXJyZW50Um93cykpXHJcbiAgICAgIC50aGVuKChbYXNzb2NpYXRpb25zXSkgPT4gYXNzb2NpYXRpb25zKVxyXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVtcHR5UmVzdWx0RXJyb3IpIHJldHVybiB1cGRhdGVBc3NvY2lhdGlvbnMoKTtcclxuICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbi1hc3NvY2lhdGUgb25lIG9yIG1vcmUgaW5zdGFuY2UocykuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfSBzb3VyY2VJbnN0YW5jZSBpbnN0YW5jZSB0byB1biBhc3NvY2lhdGUgaW5zdGFuY2VzIHdpdGhcclxuICAgKiBAcGFyYW0ge01vZGVsfE1vZGVsW118c3RyaW5nfHN0cmluZ1tdfG51bWJlcnxudW1iZXJbXX0gW29sZEFzc29jaWF0ZWRPYmplY3RzXSBDYW4gYmUgYW4gSW5zdGFuY2Ugb3IgaXRzIHByaW1hcnkga2V5LCBvciBhIG1peGVkIGFycmF5IG9mIGluc3RhbmNlcyBhbmQgcHJpbWFyeSBrZXlzXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHBhc3NlZCB0byBgdGhyb3VnaC5kZXN0cm95YFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgcmVtb3ZlKHNvdXJjZUluc3RhbmNlLCBvbGRBc3NvY2lhdGVkT2JqZWN0cywgb3B0aW9ucykge1xyXG4gICAgY29uc3QgYXNzb2NpYXRpb24gPSB0aGlzO1xyXG5cclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIG9sZEFzc29jaWF0ZWRPYmplY3RzID0gYXNzb2NpYXRpb24udG9JbnN0YW5jZUFycmF5KG9sZEFzc29jaWF0ZWRPYmplY3RzKTtcclxuXHJcbiAgICBjb25zdCB3aGVyZSA9IHtcclxuICAgICAgW2Fzc29jaWF0aW9uLmlkZW50aWZpZXJdOiBzb3VyY2VJbnN0YW5jZS5nZXQoYXNzb2NpYXRpb24uc291cmNlS2V5KSxcclxuICAgICAgW2Fzc29jaWF0aW9uLmZvcmVpZ25JZGVudGlmaWVyXTogb2xkQXNzb2NpYXRlZE9iamVjdHMubWFwKG5ld0luc3RhbmNlID0+IG5ld0luc3RhbmNlLmdldChhc3NvY2lhdGlvbi50YXJnZXRLZXkpKVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbC5kZXN0cm95KF8uZGVmYXVsdHMoeyB3aGVyZSB9LCBvcHRpb25zKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGFzc29jaWF0ZWQgbW9kZWwgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIHRoaXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfSBzb3VyY2VJbnN0YW5jZSBzb3VyY2UgaW5zdGFuY2VcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW3ZhbHVlc10gdmFsdWVzIGZvciB0YXJnZXQgbW9kZWxcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgcGFzc2VkIHRvIGNyZWF0ZSBhbmQgYWRkXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnRocm91Z2hdIEFkZGl0aW9uYWwgYXR0cmlidXRlcyBmb3IgdGhlIGpvaW4gdGFibGVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIGNyZWF0ZShzb3VyY2VJbnN0YW5jZSwgdmFsdWVzLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXM7XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICB2YWx1ZXMgPSB2YWx1ZXMgfHwge307XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcclxuICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICBmaWVsZHM6IG9wdGlvbnNcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXNzb2NpYXRpb24uc2NvcGUpIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbih2YWx1ZXMsIGFzc29jaWF0aW9uLnNjb3BlKTtcclxuICAgICAgaWYgKG9wdGlvbnMuZmllbGRzKSB7XHJcbiAgICAgICAgb3B0aW9ucy5maWVsZHMgPSBvcHRpb25zLmZpZWxkcy5jb25jYXQoT2JqZWN0LmtleXMoYXNzb2NpYXRpb24uc2NvcGUpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSB0aGUgcmVsYXRlZCBtb2RlbCBpbnN0YW5jZVxyXG4gICAgcmV0dXJuIGFzc29jaWF0aW9uLnRhcmdldC5jcmVhdGUodmFsdWVzLCBvcHRpb25zKS50aGVuKG5ld0Fzc29jaWF0ZWRPYmplY3QgPT5cclxuICAgICAgc291cmNlSW5zdGFuY2VbYXNzb2NpYXRpb24uYWNjZXNzb3JzLmFkZF0obmV3QXNzb2NpYXRlZE9iamVjdCwgXy5vbWl0KG9wdGlvbnMsIFsnZmllbGRzJ10pKS5yZXR1cm4obmV3QXNzb2NpYXRlZE9iamVjdClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB2ZXJpZnlBc3NvY2lhdGlvbkFsaWFzKGFsaWFzKSB7XHJcbiAgICBpZiAodHlwZW9mIGFsaWFzID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5hcyA9PT0gYWxpYXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFsaWFzICYmIGFsaWFzLnBsdXJhbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5hcyA9PT0gYWxpYXMucGx1cmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAhdGhpcy5pc0FsaWFzZWQ7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJlbG9uZ3NUb01hbnk7XHJcbm1vZHVsZS5leHBvcnRzLkJlbG9uZ3NUb01hbnkgPSBCZWxvbmdzVG9NYW55O1xyXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gQmVsb25nc1RvTWFueTtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvYmVsb25ncy10by1tYW55LmpzIl0sIm5hbWVzIjpbIlV0aWxzIiwicmVxdWlyZSIsIkhlbHBlcnMiLCJfIiwiQXNzb2NpYXRpb24iLCJCZWxvbmdzVG8iLCJIYXNNYW55IiwiSGFzT25lIiwiQXNzb2NpYXRpb25FcnJvciIsIkVtcHR5UmVzdWx0RXJyb3IiLCJPcCIsIkJlbG9uZ3NUb01hbnkiLCJzb3VyY2UiLCJ0YXJnZXQiLCJvcHRpb25zIiwidGhyb3VnaCIsInVuZGVmaW5lZCIsIm5hbWUiLCJtb2RlbCIsImFzc29jaWF0aW9uVHlwZSIsInRhcmdldEFzc29jaWF0aW9uIiwic2VxdWVsaXplIiwiT2JqZWN0IiwiYXNzaWduIiwiaXNNdWx0aUFzc29jaWF0aW9uIiwiZG91YmxlTGlua2VkIiwiYXMiLCJpc1NlbGZBc3NvY2lhdGlvbiIsImlzQWxpYXNlZCIsImlzUGxhaW5PYmplY3QiLCJwbHVyYWwiLCJzaW5ndWxhciIsInNpbmd1bGFyaXplIiwiY29tYmluZWRUYWJsZU5hbWUiLCJjb21iaW5lVGFibGVOYW1lcyIsInRhYmxlTmFtZSIsImVhY2giLCJhc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbiIsInBhaXJlZCIsInNvdXJjZUtleSIsInByaW1hcnlLZXlBdHRyaWJ1dGUiLCJzb3VyY2VLZXlGaWVsZCIsInJhd0F0dHJpYnV0ZXMiLCJmaWVsZCIsInRhcmdldEtleSIsInRhcmdldEtleUZpZWxkIiwidGFyZ2V0S2V5RGVmYXVsdCIsIl9jcmVhdGVGb3JlaWduQW5kT3RoZXJLZXlzIiwiaXNEZWZpbmVkIiwiZGVmaW5lIiwiaW5kZXhlcyIsInBhcmFub2lkIiwidmFsaWRhdGUiLCJwaWNrIiwibmVlZEluamVjdFBhaXJlZCIsIm90aGVyS2V5Iiwib3RoZXJLZXlEZWZhdWx0IiwiZm9yZWlnbktleSIsIl9pbmplY3RBdHRyaWJ1dGVzIiwidGhyb3VnaE1vZGVsIiwiY29tYmluZWROYW1lIiwiYXNzb2NpYXRpb25BY2Nlc3NvciIsInVwcGVyRmlyc3QiLCJhY2Nlc3NvcnMiLCJnZXQiLCJzZXQiLCJhZGRNdWx0aXBsZSIsImFkZCIsImNyZWF0ZSIsInJlbW92ZSIsInJlbW92ZU11bHRpcGxlIiwiaGFzU2luZ2xlIiwiaGFzQWxsIiwiY291bnQiLCJpc09iamVjdCIsImZvcmVpZ25LZXlBdHRyaWJ1dGUiLCJmaWVsZE5hbWUiLCJjYW1lbGl6ZSIsImpvaW4iLCJvdGhlcktleUF0dHJpYnV0ZSIsImlkZW50aWZpZXIiLCJmb3JlaWduSWRlbnRpZmllciIsImF0dHJpYnV0ZSIsImF0dHJpYnV0ZU5hbWUiLCJwcmltYXJ5S2V5IiwiX2F1dG9HZW5lcmF0ZWQiLCJwcmltYXJ5S2V5RGVsZXRlZCIsInNvdXJjZUtleVR5cGUiLCJ0eXBlIiwidGFyZ2V0S2V5VHlwZSIsInNvdXJjZUF0dHJpYnV0ZSIsImRlZmF1bHRzIiwidGFyZ2V0QXR0cmlidXRlIiwidW5pcXVlIiwidW5pcXVlS2V5IiwiY29uc3RyYWludHMiLCJyZWZlcmVuY2VzIiwiZ2V0VGFibGVOYW1lIiwia2V5Iiwib25EZWxldGUiLCJvblVwZGF0ZSIsInJlZnJlc2hBdHRyaWJ1dGVzIiwiaWRlbnRpZmllckZpZWxkIiwiZm9yZWlnbklkZW50aWZpZXJGaWVsZCIsInRvU291cmNlIiwibWFueUZyb21Tb3VyY2UiLCJvbmVGcm9tU291cmNlIiwidG9UYXJnZXQiLCJtYW55RnJvbVRhcmdldCIsIm9uZUZyb21UYXJnZXQiLCJjaGVja05hbWluZ0NvbGxpc2lvbiIsIm9iaiIsIm1ldGhvZHMiLCJhbGlhc2VzIiwibWl4aW5NZXRob2RzIiwiaW5zdGFuY2UiLCJjbG9uZURlZXAiLCJzY29wZVdoZXJlIiwidGhyb3VnaFdoZXJlIiwic2NvcGUiLCJjbG9uZSIsIndoZXJlIiwiYW5kIiwiaW5jbHVkZSIsInB1c2giLCJhdHRyaWJ1dGVzIiwiam9pblRhYmxlQXR0cmlidXRlcyIsInJlcXVpcmVkIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidW5zY29wZWQiLCJzY2hlbWEiLCJzY2hlbWFEZWxpbWl0ZXIiLCJmaW5kQWxsIiwiZm4iLCJjb2wiLCJyYXciLCJwbGFpbiIsInRoZW4iLCJyZXN1bHQiLCJwYXJzZUludCIsInNvdXJjZUluc3RhbmNlIiwiaW5zdGFuY2VzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5zdGFuY2VQcmltYXJ5S2V5cyIsIm1hcCIsIm9yIiwiYXNzb2NpYXRlZE9iamVjdHMiLCJkaWZmZXJlbmNlV2l0aCIsImEiLCJiIiwiaXNFcXVhbCIsImxlbmd0aCIsIm5ld0Fzc29jaWF0ZWRPYmplY3RzIiwidG9JbnN0YW5jZUFycmF5IiwidXBkYXRlQXNzb2NpYXRpb25zIiwiY3VycmVudFJvd3MiLCJvYnNvbGV0ZUFzc29jaWF0aW9ucyIsInByb21pc2VzIiwiZGVmYXVsdEF0dHJpYnV0ZXMiLCJ1bmFzc29jaWF0ZWRPYmplY3RzIiwiZmlsdGVyIiwic29tZSIsImN1cnJlbnRSb3ciLCJuZXdPYmoiLCJmaW5kIiwidGhyb3VnaEF0dHJpYnV0ZXMiLCJrZXlzIiwidXBkYXRlIiwib2Jzb2xldGVBc3NvY2lhdGlvbiIsImRlc3Ryb3kiLCJidWxrIiwidW5hc3NvY2lhdGVkT2JqZWN0IiwiYnVsa0NyZWF0ZSIsIlByb21pc2UiLCJhbGwiLCJjYXRjaCIsImVycm9yIiwibmV3SW5zdGFuY2VzIiwicmVzb2x2ZSIsIm5ld0luc3RhbmNlIiwiY2hhbmdlZEFzc29jaWF0aW9ucyIsImV4aXN0aW5nQXNzb2NpYXRpb24iLCJjdXJyZW50IiwiYXNzb2MiLCJvbGRBc3NvY2lhdGVkT2JqZWN0cyIsInZhbHVlcyIsImZpZWxkcyIsImNvbmNhdCIsIm5ld0Fzc29jaWF0ZWRPYmplY3QiLCJvbWl0IiwicmV0dXJuIiwiYWxpYXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxZQUFELENBQXJCOztBQUNBLE1BQU1D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L3V0aWxzJyk7XG5jb25zdCBIZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBBc3NvY2lhdGlvbiA9IHJlcXVpcmUoJy4vYmFzZScpO1xuY29uc3QgQmVsb25nc1RvID0gcmVxdWlyZSgnLi9iZWxvbmdzLXRvJyk7XG5jb25zdCBIYXNNYW55ID0gcmVxdWlyZSgnLi9oYXMtbWFueScpO1xuY29uc3QgSGFzT25lID0gcmVxdWlyZSgnLi9oYXMtb25lJyk7XG5jb25zdCBBc3NvY2lhdGlvbkVycm9yID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuQXNzb2NpYXRpb25FcnJvcjtcbmNvbnN0IEVtcHR5UmVzdWx0RXJyb3IgPSByZXF1aXJlKCcuLi9lcnJvcnMnKS5FbXB0eVJlc3VsdEVycm9yO1xuY29uc3QgT3AgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMnKTtcblxuLyoqXG4gKiBNYW55LXRvLW1hbnkgYXNzb2NpYXRpb24gd2l0aCBhIGpvaW4gdGFibGUuXG4gKlxuICogV2hlbiB0aGUgam9pbiB0YWJsZSBoYXMgYWRkaXRpb25hbCBhdHRyaWJ1dGVzLCB0aGVzZSBjYW4gYmUgcGFzc2VkIGluIHRoZSBvcHRpb25zIG9iamVjdDpcbiAqXG4gKiBgYGBqc1xuICogVXNlclByb2plY3QgPSBzZXF1ZWxpemUuZGVmaW5lKCd1c2VyX3Byb2plY3QnLCB7XG4gKiAgIHJvbGU6IFNlcXVlbGl6ZS5TVFJJTkdcbiAqIH0pO1xuICogVXNlci5iZWxvbmdzVG9NYW55KFByb2plY3QsIHsgdGhyb3VnaDogVXNlclByb2plY3QgfSk7XG4gKiBQcm9qZWN0LmJlbG9uZ3NUb01hbnkoVXNlciwgeyB0aHJvdWdoOiBVc2VyUHJvamVjdCB9KTtcbiAqIC8vIHRocm91Z2ggaXMgcmVxdWlyZWQhXG4gKlxuICogdXNlci5hZGRQcm9qZWN0KHByb2plY3QsIHsgdGhyb3VnaDogeyByb2xlOiAnbWFuYWdlcicgfX0pO1xuICogYGBgXG4gKlxuICogQWxsIG1ldGhvZHMgYWxsb3cgeW91IHRvIHBhc3MgZWl0aGVyIGEgcGVyc2lzdGVkIGluc3RhbmNlLCBpdHMgcHJpbWFyeSBrZXksIG9yIGEgbWl4dHVyZTpcbiAqXG4gKiBgYGBqc1xuICogUHJvamVjdC5jcmVhdGUoeyBpZDogMTEgfSkudGhlbihwcm9qZWN0ID0+IHtcbiAqICAgdXNlci5hZGRQcm9qZWN0cyhbcHJvamVjdCwgMTJdKTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogSWYgeW91IHdhbnQgdG8gc2V0IHNldmVyYWwgdGFyZ2V0IGluc3RhbmNlcywgYnV0IHdpdGggZGlmZmVyZW50IGF0dHJpYnV0ZXMgeW91IGhhdmUgdG8gc2V0IHRoZSBhdHRyaWJ1dGVzIG9uIHRoZSBpbnN0YW5jZSwgdXNpbmcgYSBwcm9wZXJ0eSB3aXRoIHRoZSBuYW1lIG9mIHRoZSB0aHJvdWdoIG1vZGVsOlxuICpcbiAqIGBgYGpzXG4gKiBwMS5Vc2VyUHJvamVjdHMgPSB7XG4gKiAgIHN0YXJ0ZWQ6IHRydWVcbiAqIH1cbiAqIHVzZXIuc2V0UHJvamVjdHMoW3AxLCBwMl0sIHsgdGhyb3VnaDogeyBzdGFydGVkOiBmYWxzZSB9fSkgLy8gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UsIGJ1dCBwMSBvdmVycmlkZXMgdGhhdC5cbiAqIGBgYFxuICpcbiAqIFNpbWlsYXJseSwgd2hlbiBmZXRjaGluZyB0aHJvdWdoIGEgam9pbiB0YWJsZSB3aXRoIGN1c3RvbSBhdHRyaWJ1dGVzLCB0aGVzZSBhdHRyaWJ1dGVzIHdpbGwgYmUgYXZhaWxhYmxlIGFzIGFuIG9iamVjdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSB0aHJvdWdoIG1vZGVsLlxuICogYGBganNcbiAqIHVzZXIuZ2V0UHJvamVjdHMoKS50aGVuKHByb2plY3RzID0+IHtcbiAgICogICBsZXQgcDEgPSBwcm9qZWN0c1swXVxuICAgKiAgIHAxLlVzZXJQcm9qZWN0cy5zdGFydGVkIC8vIElzIHRoaXMgcHJvamVjdCBzdGFydGVkIHlldD9cbiAgICogfSlcbiAqIGBgYFxuICpcbiAqIEluIHRoZSBBUEkgcmVmZXJlbmNlIGJlbG93LCBhZGQgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0aW9uIHRvIHRoZSBtZXRob2QsIGUuZy4gZm9yIGBVc2VyLmJlbG9uZ3NUb01hbnkoUHJvamVjdClgIHRoZSBnZXR0ZXIgd2lsbCBiZSBgdXNlci5nZXRQcm9qZWN0cygpYC5cbiAqXG4gKiBAc2VlIHtAbGluayBNb2RlbC5iZWxvbmdzVG9NYW55fVxuICovXG5jbGFzcyBCZWxvbmdzVG9NYW55IGV4dGVuZHMgQXNzb2NpYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihzb3VyY2UsIHRhcmdldCwgb3B0aW9ucykge1xuICAgIHN1cGVyKHNvdXJjZSwgdGFyZ2V0LCBvcHRpb25zKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMudGhyb3VnaCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMub3B0aW9ucy50aHJvdWdoID09PSB0cnVlIHx8IHRoaXMub3B0aW9ucy50aHJvdWdoID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzb2NpYXRpb25FcnJvcihgJHtzb3VyY2UubmFtZX0uYmVsb25nc1RvTWFueSgke3RhcmdldC5uYW1lfSkgcmVxdWlyZXMgdGhyb3VnaCBvcHRpb24sIHBhc3MgZWl0aGVyIGEgc3RyaW5nIG9yIGEgbW9kZWxgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy50aHJvdWdoLm1vZGVsKSB7XG4gICAgICB0aGlzLm9wdGlvbnMudGhyb3VnaCA9IHtcbiAgICAgICAgbW9kZWw6IG9wdGlvbnMudGhyb3VnaFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmFzc29jaWF0aW9uVHlwZSA9ICdCZWxvbmdzVG9NYW55JztcbiAgICB0aGlzLnRhcmdldEFzc29jaWF0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNlcXVlbGl6ZSA9IHNvdXJjZS5zZXF1ZWxpemU7XG4gICAgdGhpcy50aHJvdWdoID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLnRocm91Z2gpO1xuICAgIHRoaXMuaXNNdWx0aUFzc29jaWF0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmRvdWJsZUxpbmtlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmFzICYmIHRoaXMuaXNTZWxmQXNzb2NpYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBBc3NvY2lhdGlvbkVycm9yKCdcXCdhc1xcJyBtdXN0IGJlIGRlZmluZWQgZm9yIG1hbnktdG8tbWFueSBzZWxmLWFzc29jaWF0aW9ucycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFzKSB7XG4gICAgICB0aGlzLmlzQWxpYXNlZCA9IHRydWU7XG5cbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QodGhpcy5hcykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm5hbWUgPSB0aGlzLmFzO1xuICAgICAgICB0aGlzLmFzID0gdGhpcy5hcy5wbHVyYWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMubmFtZSA9IHtcbiAgICAgICAgICBwbHVyYWw6IHRoaXMuYXMsXG4gICAgICAgICAgc2luZ3VsYXI6IFV0aWxzLnNpbmd1bGFyaXplKHRoaXMuYXMpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXMgPSB0aGlzLnRhcmdldC5vcHRpb25zLm5hbWUucGx1cmFsO1xuICAgICAgdGhpcy5vcHRpb25zLm5hbWUgPSB0aGlzLnRhcmdldC5vcHRpb25zLm5hbWU7XG4gICAgfVxuXG4gICAgdGhpcy5jb21iaW5lZFRhYmxlTmFtZSA9IFV0aWxzLmNvbWJpbmVUYWJsZU5hbWVzKFxuICAgICAgdGhpcy5zb3VyY2UudGFibGVOYW1lLFxuICAgICAgdGhpcy5pc1NlbGZBc3NvY2lhdGlvbiA/IHRoaXMuYXMgfHwgdGhpcy50YXJnZXQudGFibGVOYW1lIDogdGhpcy50YXJnZXQudGFibGVOYW1lXG4gICAgKTtcblxuICAgIC8qXG4gICAgKiBJZiBzZWxmIGFzc29jaWF0aW9uLCB0aGlzIGlzIHRoZSB0YXJnZXQgYXNzb2NpYXRpb24gLSBVbmxlc3Mgd2UgZmluZCBhIHBhaXJpbmcgYXNzb2NpYXRpb25cbiAgICAqL1xuICAgIGlmICh0aGlzLmlzU2VsZkFzc29jaWF0aW9uKSB7XG4gICAgICB0aGlzLnRhcmdldEFzc29jaWF0aW9uID0gdGhpcztcbiAgICB9XG5cbiAgICAvKlxuICAgICogRmluZCBwYWlyZWQgYXNzb2NpYXRpb24gKGlmIGV4aXN0cylcbiAgICAqL1xuICAgIF8uZWFjaCh0aGlzLnRhcmdldC5hc3NvY2lhdGlvbnMsIGFzc29jaWF0aW9uID0+IHtcbiAgICAgIGlmIChhc3NvY2lhdGlvbi5hc3NvY2lhdGlvblR5cGUgIT09ICdCZWxvbmdzVG9NYW55JykgcmV0dXJuO1xuICAgICAgaWYgKGFzc29jaWF0aW9uLnRhcmdldCAhPT0gdGhpcy5zb3VyY2UpIHJldHVybjtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy50aHJvdWdoLm1vZGVsID09PSBhc3NvY2lhdGlvbi5vcHRpb25zLnRocm91Z2gubW9kZWwpIHtcbiAgICAgICAgdGhpcy5wYWlyZWQgPSBhc3NvY2lhdGlvbjtcbiAgICAgICAgYXNzb2NpYXRpb24ucGFpcmVkID0gdGhpcztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qXG4gICAgKiBEZWZhdWx0L2dlbmVyYXRlZCBzb3VyY2UvdGFyZ2V0IGtleXNcbiAgICAqL1xuICAgIHRoaXMuc291cmNlS2V5ID0gdGhpcy5vcHRpb25zLnNvdXJjZUtleSB8fCB0aGlzLnNvdXJjZS5wcmltYXJ5S2V5QXR0cmlidXRlO1xuICAgIHRoaXMuc291cmNlS2V5RmllbGQgPSB0aGlzLnNvdXJjZS5yYXdBdHRyaWJ1dGVzW3RoaXMuc291cmNlS2V5XS5maWVsZCB8fCB0aGlzLnNvdXJjZUtleTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0S2V5KSB7XG4gICAgICB0aGlzLnRhcmdldEtleSA9IHRoaXMub3B0aW9ucy50YXJnZXRLZXk7XG4gICAgICB0aGlzLnRhcmdldEtleUZpZWxkID0gdGhpcy50YXJnZXQucmF3QXR0cmlidXRlc1t0aGlzLnRhcmdldEtleV0uZmllbGQgfHwgdGhpcy50YXJnZXRLZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFyZ2V0S2V5RGVmYXVsdCA9IHRydWU7XG4gICAgICB0aGlzLnRhcmdldEtleSA9IHRoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGU7XG4gICAgICB0aGlzLnRhcmdldEtleUZpZWxkID0gdGhpcy50YXJnZXQucmF3QXR0cmlidXRlc1t0aGlzLnRhcmdldEtleV0uZmllbGQgfHwgdGhpcy50YXJnZXRLZXk7XG4gICAgfVxuXG4gICAgdGhpcy5fY3JlYXRlRm9yZWlnbkFuZE90aGVyS2V5cygpO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnRocm91Z2gubW9kZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIXRoaXMuc2VxdWVsaXplLmlzRGVmaW5lZCh0aGlzLnRocm91Z2gubW9kZWwpKSB7XG4gICAgICAgIHRoaXMudGhyb3VnaC5tb2RlbCA9IHRoaXMuc2VxdWVsaXplLmRlZmluZSh0aGlzLnRocm91Z2gubW9kZWwsIHt9LCBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywge1xuICAgICAgICAgIHRhYmxlTmFtZTogdGhpcy50aHJvdWdoLm1vZGVsLFxuICAgICAgICAgIGluZGV4ZXM6IFtdLCAvL3dlIGRvbid0IHdhbnQgaW5kZXhlcyBoZXJlIChhcyByZWZlcmVuY2VkIGluICMyNDE2KVxuICAgICAgICAgIHBhcmFub2lkOiBmYWxzZSwgLy8gQSBwYXJhbm9pZCBqb2luIHRhYmxlIGRvZXMgbm90IG1ha2Ugc2Vuc2VcbiAgICAgICAgICB2YWxpZGF0ZToge30gLy8gRG9uJ3QgcHJvcGFnYXRlIG1vZGVsLWxldmVsIHZhbGlkYXRpb25zXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGhyb3VnaC5tb2RlbCA9IHRoaXMuc2VxdWVsaXplLm1vZGVsKHRoaXMudGhyb3VnaC5tb2RlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIF8ucGljayh0aGlzLnRocm91Z2gubW9kZWwub3B0aW9ucywgW1xuICAgICAgJ3RpbWVzdGFtcHMnLCAnY3JlYXRlZEF0JywgJ3VwZGF0ZWRBdCcsICdkZWxldGVkQXQnLCAncGFyYW5vaWQnXG4gICAgXSkpO1xuXG4gICAgaWYgKHRoaXMucGFpcmVkKSB7XG4gICAgICBsZXQgbmVlZEluamVjdFBhaXJlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy50YXJnZXRLZXlEZWZhdWx0KSB7XG4gICAgICAgIHRoaXMudGFyZ2V0S2V5ID0gdGhpcy5wYWlyZWQuc291cmNlS2V5O1xuICAgICAgICB0aGlzLnRhcmdldEtleUZpZWxkID0gdGhpcy5wYWlyZWQuc291cmNlS2V5RmllbGQ7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUZvcmVpZ25BbmRPdGhlcktleXMoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnBhaXJlZC50YXJnZXRLZXlEZWZhdWx0KSB7XG4gICAgICAgIC8vIGluIHRoaXMgY2FzZSBwYWlyZWQub3RoZXJLZXkgZGVwZW5kcyBvbiBwYWlyZWQudGFyZ2V0S2V5LFxuICAgICAgICAvLyBzbyBjbGVhbnVwIHByZXZpb3VzbHkgd3JvbmcgZ2VuZXJhdGVkIG90aGVyS2V5XG4gICAgICAgIGlmICh0aGlzLnBhaXJlZC50YXJnZXRLZXkgIT09IHRoaXMuc291cmNlS2V5KSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMudGhyb3VnaC5tb2RlbC5yYXdBdHRyaWJ1dGVzW3RoaXMucGFpcmVkLm90aGVyS2V5XTtcbiAgICAgICAgICB0aGlzLnBhaXJlZC50YXJnZXRLZXkgPSB0aGlzLnNvdXJjZUtleTtcbiAgICAgICAgICB0aGlzLnBhaXJlZC50YXJnZXRLZXlGaWVsZCA9IHRoaXMuc291cmNlS2V5RmllbGQ7XG4gICAgICAgICAgdGhpcy5wYWlyZWQuX2NyZWF0ZUZvcmVpZ25BbmRPdGhlcktleXMoKTtcbiAgICAgICAgICBuZWVkSW5qZWN0UGFpcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vdGhlcktleURlZmF1bHQpIHtcbiAgICAgICAgdGhpcy5vdGhlcktleSA9IHRoaXMucGFpcmVkLmZvcmVpZ25LZXk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wYWlyZWQub3RoZXJLZXlEZWZhdWx0KSB7XG4gICAgICAgIC8vIElmIHBhaXJlZCBvdGhlcktleSB3YXMgaW5mZXJyZWQgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0byBjbGVhbiBpdCB1cFxuICAgICAgICAvLyBiZWZvcmUgYWRkaW5nIGEgbmV3IG9uZSB0aGF0IG1hdGNoZXMgdGhlIGZvcmVpZ25LZXlcbiAgICAgICAgaWYgKHRoaXMucGFpcmVkLm90aGVyS2V5ICE9PSB0aGlzLmZvcmVpZ25LZXkpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5wYWlyZWQub3RoZXJLZXldO1xuICAgICAgICAgIHRoaXMucGFpcmVkLm90aGVyS2V5ID0gdGhpcy5mb3JlaWduS2V5O1xuICAgICAgICAgIG5lZWRJbmplY3RQYWlyZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWVkSW5qZWN0UGFpcmVkKSB7XG4gICAgICAgIHRoaXMucGFpcmVkLl9pbmplY3RBdHRyaWJ1dGVzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGhyb3VnaCkge1xuICAgICAgdGhpcy50aHJvdWdoTW9kZWwgPSB0aGlzLnRocm91Z2gubW9kZWw7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zLnRhYmxlTmFtZSA9IHRoaXMuY29tYmluZWROYW1lID0gdGhpcy50aHJvdWdoLm1vZGVsID09PSBPYmplY3QodGhpcy50aHJvdWdoLm1vZGVsKSA/IHRoaXMudGhyb3VnaC5tb2RlbC50YWJsZU5hbWUgOiB0aGlzLnRocm91Z2gubW9kZWw7XG5cbiAgICB0aGlzLmFzc29jaWF0aW9uQWNjZXNzb3IgPSB0aGlzLmFzO1xuXG4gICAgLy8gR2V0IHNpbmd1bGFyIGFuZCBwbHVyYWwgbmFtZXMsIHRyeWluZyB0byB1cHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciwgdW5sZXNzIHRoZSBtb2RlbCBmb3JiaWRzIGl0XG4gICAgY29uc3QgcGx1cmFsID0gXy51cHBlckZpcnN0KHRoaXMub3B0aW9ucy5uYW1lLnBsdXJhbCk7XG4gICAgY29uc3Qgc2luZ3VsYXIgPSBfLnVwcGVyRmlyc3QodGhpcy5vcHRpb25zLm5hbWUuc2luZ3VsYXIpO1xuXG4gICAgdGhpcy5hY2Nlc3NvcnMgPSB7XG4gICAgICBnZXQ6IGBnZXQke3BsdXJhbH1gLFxuICAgICAgc2V0OiBgc2V0JHtwbHVyYWx9YCxcbiAgICAgIGFkZE11bHRpcGxlOiBgYWRkJHtwbHVyYWx9YCxcbiAgICAgIGFkZDogYGFkZCR7c2luZ3VsYXJ9YCxcbiAgICAgIGNyZWF0ZTogYGNyZWF0ZSR7c2luZ3VsYXJ9YCxcbiAgICAgIHJlbW92ZTogYHJlbW92ZSR7c2luZ3VsYXJ9YCxcbiAgICAgIHJlbW92ZU11bHRpcGxlOiBgcmVtb3ZlJHtwbHVyYWx9YCxcbiAgICAgIGhhc1NpbmdsZTogYGhhcyR7c2luZ3VsYXJ9YCxcbiAgICAgIGhhc0FsbDogYGhhcyR7cGx1cmFsfWAsXG4gICAgICBjb3VudDogYGNvdW50JHtwbHVyYWx9YFxuICAgIH07XG4gIH1cblxuICBfY3JlYXRlRm9yZWlnbkFuZE90aGVyS2V5cygpIHtcbiAgICAvKlxuICAgICogRGVmYXVsdC9nZW5lcmF0ZWQgZm9yZWlnbi9vdGhlciBrZXlzXG4gICAgKi9cbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLm9wdGlvbnMuZm9yZWlnbktleSkpIHtcbiAgICAgIHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZSA9IHRoaXMub3B0aW9ucy5mb3JlaWduS2V5O1xuICAgICAgdGhpcy5mb3JlaWduS2V5ID0gdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlLm5hbWUgfHwgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlLmZpZWxkTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlID0ge307XG4gICAgICB0aGlzLmZvcmVpZ25LZXkgPSB0aGlzLm9wdGlvbnMuZm9yZWlnbktleSB8fCBVdGlscy5jYW1lbGl6ZShcbiAgICAgICAgW1xuICAgICAgICAgIHRoaXMuc291cmNlLm9wdGlvbnMubmFtZS5zaW5ndWxhcixcbiAgICAgICAgICB0aGlzLnNvdXJjZUtleVxuICAgICAgICBdLmpvaW4oJ18nKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLm9wdGlvbnMub3RoZXJLZXkpKSB7XG4gICAgICB0aGlzLm90aGVyS2V5QXR0cmlidXRlID0gdGhpcy5vcHRpb25zLm90aGVyS2V5O1xuICAgICAgdGhpcy5vdGhlcktleSA9IHRoaXMub3RoZXJLZXlBdHRyaWJ1dGUubmFtZSB8fCB0aGlzLm90aGVyS2V5QXR0cmlidXRlLmZpZWxkTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMub3RoZXJLZXkpIHtcbiAgICAgICAgdGhpcy5vdGhlcktleURlZmF1bHQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm90aGVyS2V5QXR0cmlidXRlID0ge307XG4gICAgICB0aGlzLm90aGVyS2V5ID0gdGhpcy5vcHRpb25zLm90aGVyS2V5IHx8IFV0aWxzLmNhbWVsaXplKFxuICAgICAgICBbXG4gICAgICAgICAgdGhpcy5pc1NlbGZBc3NvY2lhdGlvbiA/IFV0aWxzLnNpbmd1bGFyaXplKHRoaXMuYXMpIDogdGhpcy50YXJnZXQub3B0aW9ucy5uYW1lLnNpbmd1bGFyLFxuICAgICAgICAgIHRoaXMudGFyZ2V0S2V5XG4gICAgICAgIF0uam9pbignXycpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRoZSBpZCBpcyBpbiB0aGUgdGFyZ2V0IHRhYmxlXG4gIC8vIG9yIGluIGFuIGV4dHJhIHRhYmxlIHdoaWNoIGNvbm5lY3RzIHR3byB0YWJsZXNcbiAgX2luamVjdEF0dHJpYnV0ZXMoKSB7XG4gICAgdGhpcy5pZGVudGlmaWVyID0gdGhpcy5mb3JlaWduS2V5O1xuICAgIHRoaXMuZm9yZWlnbklkZW50aWZpZXIgPSB0aGlzLm90aGVyS2V5O1xuXG4gICAgLy8gcmVtb3ZlIGFueSBQS3MgcHJldmlvdXNseSBkZWZpbmVkIGJ5IHNlcXVlbGl6ZVxuICAgIC8vIGJ1dCBpZ25vcmUgYW55IGtleXMgdGhhdCBhcmUgcGFydCBvZiB0aGlzIGFzc29jaWF0aW9uICgjNTg2NSlcbiAgICBfLmVhY2godGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXMsIChhdHRyaWJ1dGUsIGF0dHJpYnV0ZU5hbWUpID0+IHtcbiAgICAgIGlmIChhdHRyaWJ1dGUucHJpbWFyeUtleSA9PT0gdHJ1ZSAmJiBhdHRyaWJ1dGUuX2F1dG9HZW5lcmF0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT09IHRoaXMuZm9yZWlnbktleSB8fCBhdHRyaWJ1dGVOYW1lID09PSB0aGlzLm90aGVyS2V5KSB7XG4gICAgICAgICAgLy8gdGhpcyBrZXkgaXMgc3RpbGwgbmVlZGVkIGFzIGl0J3MgcGFydCBvZiB0aGUgYXNzb2NpYXRpb25cbiAgICAgICAgICAvLyBzbyBqdXN0IHNldCBwcmltYXJ5S2V5IHRvIGZhbHNlXG4gICAgICAgICAgYXR0cmlidXRlLnByaW1hcnlLZXkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmltYXJ5S2V5RGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzb3VyY2VLZXkgPSB0aGlzLnNvdXJjZS5yYXdBdHRyaWJ1dGVzW3RoaXMuc291cmNlS2V5XTtcbiAgICBjb25zdCBzb3VyY2VLZXlUeXBlID0gc291cmNlS2V5LnR5cGU7XG4gICAgY29uc3Qgc291cmNlS2V5RmllbGQgPSB0aGlzLnNvdXJjZUtleUZpZWxkO1xuICAgIGNvbnN0IHRhcmdldEtleSA9IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy50YXJnZXRLZXldO1xuICAgIGNvbnN0IHRhcmdldEtleVR5cGUgPSB0YXJnZXRLZXkudHlwZTtcbiAgICBjb25zdCB0YXJnZXRLZXlGaWVsZCA9IHRoaXMudGFyZ2V0S2V5RmllbGQ7XG4gICAgY29uc3Qgc291cmNlQXR0cmlidXRlID0gXy5kZWZhdWx0cyh7fSwgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlLCB7IHR5cGU6IHNvdXJjZUtleVR5cGUgfSk7XG4gICAgY29uc3QgdGFyZ2V0QXR0cmlidXRlID0gXy5kZWZhdWx0cyh7fSwgdGhpcy5vdGhlcktleUF0dHJpYnV0ZSwgeyB0eXBlOiB0YXJnZXRLZXlUeXBlIH0pO1xuXG4gICAgaWYgKHRoaXMucHJpbWFyeUtleURlbGV0ZWQgPT09IHRydWUpIHtcbiAgICAgIHRhcmdldEF0dHJpYnV0ZS5wcmltYXJ5S2V5ID0gc291cmNlQXR0cmlidXRlLnByaW1hcnlLZXkgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy50aHJvdWdoLnVuaXF1ZSAhPT0gZmFsc2UpIHtcbiAgICAgIGxldCB1bmlxdWVLZXk7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy51bmlxdWVLZXkgPT09ICdzdHJpbmcnICYmIHRoaXMub3B0aW9ucy51bmlxdWVLZXkgIT09ICcnKSB7XG4gICAgICAgIHVuaXF1ZUtleSA9IHRoaXMub3B0aW9ucy51bmlxdWVLZXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bmlxdWVLZXkgPSBbdGhpcy50aHJvdWdoLm1vZGVsLnRhYmxlTmFtZSwgdGhpcy5mb3JlaWduS2V5LCB0aGlzLm90aGVyS2V5LCAndW5pcXVlJ10uam9pbignXycpO1xuICAgICAgfVxuICAgICAgdGFyZ2V0QXR0cmlidXRlLnVuaXF1ZSA9IHNvdXJjZUF0dHJpYnV0ZS51bmlxdWUgPSB1bmlxdWVLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldKSB7XG4gICAgICB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldID0ge1xuICAgICAgICBfYXV0b0dlbmVyYXRlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudGhyb3VnaC5tb2RlbC5yYXdBdHRyaWJ1dGVzW3RoaXMub3RoZXJLZXldKSB7XG4gICAgICB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLm90aGVyS2V5XSA9IHtcbiAgICAgICAgX2F1dG9HZW5lcmF0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb25zdHJhaW50cyAhPT0gZmFsc2UpIHtcbiAgICAgIHNvdXJjZUF0dHJpYnV0ZS5yZWZlcmVuY2VzID0ge1xuICAgICAgICBtb2RlbDogdGhpcy5zb3VyY2UuZ2V0VGFibGVOYW1lKCksXG4gICAgICAgIGtleTogc291cmNlS2V5RmllbGRcbiAgICAgIH07XG4gICAgICAvLyBGb3IgdGhlIHNvdXJjZSBhdHRyaWJ1dGUgdGhlIHBhc3NlZCBvcHRpb24gaXMgdGhlIHByaW9yaXR5XG4gICAgICBzb3VyY2VBdHRyaWJ1dGUub25EZWxldGUgPSB0aGlzLm9wdGlvbnMub25EZWxldGUgfHwgdGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XS5vbkRlbGV0ZTtcbiAgICAgIHNvdXJjZUF0dHJpYnV0ZS5vblVwZGF0ZSA9IHRoaXMub3B0aW9ucy5vblVwZGF0ZSB8fCB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldLm9uVXBkYXRlO1xuXG4gICAgICBpZiAoIXNvdXJjZUF0dHJpYnV0ZS5vbkRlbGV0ZSkgc291cmNlQXR0cmlidXRlLm9uRGVsZXRlID0gJ0NBU0NBREUnO1xuICAgICAgaWYgKCFzb3VyY2VBdHRyaWJ1dGUub25VcGRhdGUpIHNvdXJjZUF0dHJpYnV0ZS5vblVwZGF0ZSA9ICdDQVNDQURFJztcblxuICAgICAgdGFyZ2V0QXR0cmlidXRlLnJlZmVyZW5jZXMgPSB7XG4gICAgICAgIG1vZGVsOiB0aGlzLnRhcmdldC5nZXRUYWJsZU5hbWUoKSxcbiAgICAgICAga2V5OiB0YXJnZXRLZXlGaWVsZFxuICAgICAgfTtcbiAgICAgIC8vIEJ1dCB0aGUgZm9yIHRhcmdldCBhdHRyaWJ1dGUgdGhlIHByZXZpb3VzbHkgZGVmaW5lZCBvcHRpb24gaXMgdGhlIHByaW9yaXR5IChzaW5jZSBpdCBjb3VsZCd2ZSBiZWVuIHNldCBieSBhbm90aGVyIGJlbG9uZ3NUb01hbnkgY2FsbClcbiAgICAgIHRhcmdldEF0dHJpYnV0ZS5vbkRlbGV0ZSA9IHRoaXMudGhyb3VnaC5tb2RlbC5yYXdBdHRyaWJ1dGVzW3RoaXMub3RoZXJLZXldLm9uRGVsZXRlIHx8IHRoaXMub3B0aW9ucy5vbkRlbGV0ZTtcbiAgICAgIHRhcmdldEF0dHJpYnV0ZS5vblVwZGF0ZSA9IHRoaXMudGhyb3VnaC5tb2RlbC5yYXdBdHRyaWJ1dGVzW3RoaXMub3RoZXJLZXldLm9uVXBkYXRlIHx8IHRoaXMub3B0aW9ucy5vblVwZGF0ZTtcblxuICAgICAgaWYgKCF0YXJnZXRBdHRyaWJ1dGUub25EZWxldGUpIHRhcmdldEF0dHJpYnV0ZS5vbkRlbGV0ZSA9ICdDQVNDQURFJztcbiAgICAgIGlmICghdGFyZ2V0QXR0cmlidXRlLm9uVXBkYXRlKSB0YXJnZXRBdHRyaWJ1dGUub25VcGRhdGUgPSAnQ0FTQ0FERSc7XG4gICAgfVxuXG4gICAgdGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XSA9IE9iamVjdC5hc3NpZ24odGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XSwgc291cmNlQXR0cmlidXRlKTtcbiAgICB0aGlzLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLm90aGVyS2V5XSA9IE9iamVjdC5hc3NpZ24odGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5vdGhlcktleV0sIHRhcmdldEF0dHJpYnV0ZSk7XG5cbiAgICB0aGlzLnRocm91Z2gubW9kZWwucmVmcmVzaEF0dHJpYnV0ZXMoKTtcblxuICAgIHRoaXMuaWRlbnRpZmllckZpZWxkID0gdGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XS5maWVsZCB8fCB0aGlzLmZvcmVpZ25LZXk7XG4gICAgdGhpcy5mb3JlaWduSWRlbnRpZmllckZpZWxkID0gdGhpcy50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5vdGhlcktleV0uZmllbGQgfHwgdGhpcy5vdGhlcktleTtcblxuICAgIGlmICh0aGlzLnBhaXJlZCAmJiAhdGhpcy5wYWlyZWQuZm9yZWlnbklkZW50aWZpZXJGaWVsZCkge1xuICAgICAgdGhpcy5wYWlyZWQuZm9yZWlnbklkZW50aWZpZXJGaWVsZCA9IHRoaXMudGhyb3VnaC5tb2RlbC5yYXdBdHRyaWJ1dGVzW3RoaXMucGFpcmVkLm90aGVyS2V5XS5maWVsZCB8fCB0aGlzLnBhaXJlZC5vdGhlcktleTtcbiAgICB9XG5cbiAgICB0aGlzLnRvU291cmNlID0gbmV3IEJlbG9uZ3NUbyh0aGlzLnRocm91Z2gubW9kZWwsIHRoaXMuc291cmNlLCB7XG4gICAgICBmb3JlaWduS2V5OiB0aGlzLmZvcmVpZ25LZXlcbiAgICB9KTtcbiAgICB0aGlzLm1hbnlGcm9tU291cmNlID0gbmV3IEhhc01hbnkodGhpcy5zb3VyY2UsIHRoaXMudGhyb3VnaC5tb2RlbCwge1xuICAgICAgZm9yZWlnbktleTogdGhpcy5mb3JlaWduS2V5XG4gICAgfSk7XG4gICAgdGhpcy5vbmVGcm9tU291cmNlID0gbmV3IEhhc09uZSh0aGlzLnNvdXJjZSwgdGhpcy50aHJvdWdoLm1vZGVsLCB7XG4gICAgICBmb3JlaWduS2V5OiB0aGlzLmZvcmVpZ25LZXksXG4gICAgICBhczogdGhpcy50aHJvdWdoLm1vZGVsLm5hbWVcbiAgICB9KTtcblxuICAgIHRoaXMudG9UYXJnZXQgPSBuZXcgQmVsb25nc1RvKHRoaXMudGhyb3VnaC5tb2RlbCwgdGhpcy50YXJnZXQsIHtcbiAgICAgIGZvcmVpZ25LZXk6IHRoaXMub3RoZXJLZXlcbiAgICB9KTtcbiAgICB0aGlzLm1hbnlGcm9tVGFyZ2V0ID0gbmV3IEhhc01hbnkodGhpcy50YXJnZXQsIHRoaXMudGhyb3VnaC5tb2RlbCwge1xuICAgICAgZm9yZWlnbktleTogdGhpcy5vdGhlcktleVxuICAgIH0pO1xuICAgIHRoaXMub25lRnJvbVRhcmdldCA9IG5ldyBIYXNPbmUodGhpcy50YXJnZXQsIHRoaXMudGhyb3VnaC5tb2RlbCwge1xuICAgICAgZm9yZWlnbktleTogdGhpcy5vdGhlcktleSxcbiAgICAgIGFzOiB0aGlzLnRocm91Z2gubW9kZWwubmFtZVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucGFpcmVkICYmIHRoaXMucGFpcmVkLm90aGVyS2V5RGVmYXVsdCkge1xuICAgICAgdGhpcy5wYWlyZWQudG9UYXJnZXQgPSBuZXcgQmVsb25nc1RvKHRoaXMucGFpcmVkLnRocm91Z2gubW9kZWwsIHRoaXMucGFpcmVkLnRhcmdldCwge1xuICAgICAgICBmb3JlaWduS2V5OiB0aGlzLnBhaXJlZC5vdGhlcktleVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucGFpcmVkLm9uZUZyb21UYXJnZXQgPSBuZXcgSGFzT25lKHRoaXMucGFpcmVkLnRhcmdldCwgdGhpcy5wYWlyZWQudGhyb3VnaC5tb2RlbCwge1xuICAgICAgICBmb3JlaWduS2V5OiB0aGlzLnBhaXJlZC5vdGhlcktleSxcbiAgICAgICAgYXM6IHRoaXMucGFpcmVkLnRocm91Z2gubW9kZWwubmFtZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgSGVscGVycy5jaGVja05hbWluZ0NvbGxpc2lvbih0aGlzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbWl4aW4ob2JqKSB7XG4gICAgY29uc3QgbWV0aG9kcyA9IFsnZ2V0JywgJ2NvdW50JywgJ2hhc1NpbmdsZScsICdoYXNBbGwnLCAnc2V0JywgJ2FkZCcsICdhZGRNdWx0aXBsZScsICdyZW1vdmUnLCAncmVtb3ZlTXVsdGlwbGUnLCAnY3JlYXRlJ107XG4gICAgY29uc3QgYWxpYXNlcyA9IHtcbiAgICAgIGhhc1NpbmdsZTogJ2hhcycsXG4gICAgICBoYXNBbGw6ICdoYXMnLFxuICAgICAgYWRkTXVsdGlwbGU6ICdhZGQnLFxuICAgICAgcmVtb3ZlTXVsdGlwbGU6ICdyZW1vdmUnXG4gICAgfTtcblxuICAgIEhlbHBlcnMubWl4aW5NZXRob2RzKHRoaXMsIG9iaiwgbWV0aG9kcywgYWxpYXNlcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGV2ZXJ5dGhpbmcgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGlzLCB1c2luZyBhbiBvcHRpb25hbCB3aGVyZSBjbGF1c2UuXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsfSBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uIG9mIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gaW5zdGFuY2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBmaW5kIG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLndoZXJlXSBBbiBvcHRpb25hbCB3aGVyZSBjbGF1c2UgdG8gbGltaXQgdGhlIGFzc29jaWF0ZWQgbW9kZWxzXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IFtvcHRpb25zLnNjb3BlXSBBcHBseSBhIHNjb3BlIG9uIHRoZSByZWxhdGVkIG1vZGVsLCBvciByZW1vdmUgaXRzIGRlZmF1bHQgc2NvcGUgYnkgcGFzc2luZyBmYWxzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc2NoZW1hXSBBcHBseSBhIHNjaGVtYSBvbiB0aGUgcmVsYXRlZCBtb2RlbFxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxNb2RlbD4+fVxuICAgKi9cbiAgZ2V0KGluc3RhbmNlLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKSB8fCB7fTtcblxuICAgIGNvbnN0IHRocm91Z2ggPSB0aGlzLnRocm91Z2g7XG4gICAgbGV0IHNjb3BlV2hlcmU7XG4gICAgbGV0IHRocm91Z2hXaGVyZTtcblxuICAgIGlmICh0aGlzLnNjb3BlKSB7XG4gICAgICBzY29wZVdoZXJlID0gXy5jbG9uZSh0aGlzLnNjb3BlKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLndoZXJlID0ge1xuICAgICAgW09wLmFuZF06IFtcbiAgICAgICAgc2NvcGVXaGVyZSxcbiAgICAgICAgb3B0aW9ucy53aGVyZVxuICAgICAgXVxuICAgIH07XG5cbiAgICBpZiAoT2JqZWN0KHRocm91Z2gubW9kZWwpID09PSB0aHJvdWdoLm1vZGVsKSB7XG4gICAgICB0aHJvdWdoV2hlcmUgPSB7fTtcbiAgICAgIHRocm91Z2hXaGVyZVt0aGlzLmZvcmVpZ25LZXldID0gaW5zdGFuY2UuZ2V0KHRoaXMuc291cmNlS2V5KTtcblxuICAgICAgaWYgKHRocm91Z2guc2NvcGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aHJvdWdoV2hlcmUsIHRocm91Z2guc2NvcGUpO1xuICAgICAgfVxuXG4gICAgICAvL0lmIGEgdXNlciBwYXNzIGEgd2hlcmUgb24gdGhlIG9wdGlvbnMgdGhyb3VnaCBvcHRpb25zLCBtYWtlIGFuIFwiYW5kXCIgd2l0aCB0aGUgY3VycmVudCB0aHJvdWdoV2hlcmVcbiAgICAgIGlmIChvcHRpb25zLnRocm91Z2ggJiYgb3B0aW9ucy50aHJvdWdoLndoZXJlKSB7XG4gICAgICAgIHRocm91Z2hXaGVyZSA9IHtcbiAgICAgICAgICBbT3AuYW5kXTogW3Rocm91Z2hXaGVyZSwgb3B0aW9ucy50aHJvdWdoLndoZXJlXVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLmluY2x1ZGUgPSBvcHRpb25zLmluY2x1ZGUgfHwgW107XG4gICAgICBvcHRpb25zLmluY2x1ZGUucHVzaCh7XG4gICAgICAgIGFzc29jaWF0aW9uOiB0aGlzLm9uZUZyb21UYXJnZXQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IG9wdGlvbnMuam9pblRhYmxlQXR0cmlidXRlcyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHdoZXJlOiB0aHJvdWdoV2hlcmVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBtb2RlbCA9IHRoaXMudGFyZ2V0O1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3Njb3BlJykpIHtcbiAgICAgIGlmICghb3B0aW9ucy5zY29wZSkge1xuICAgICAgICBtb2RlbCA9IG1vZGVsLnVuc2NvcGVkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb2RlbCA9IG1vZGVsLnNjb3BlKG9wdGlvbnMuc2NvcGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NjaGVtYScpKSB7XG4gICAgICBtb2RlbCA9IG1vZGVsLnNjaGVtYShvcHRpb25zLnNjaGVtYSwgb3B0aW9ucy5zY2hlbWFEZWxpbWl0ZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBtb2RlbC5maW5kQWxsKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvdW50IGV2ZXJ5dGhpbmcgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGlzLCB1c2luZyBhbiBvcHRpb25hbCB3aGVyZSBjbGF1c2UuXG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZWx9IGluc3RhbmNlIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gZmluZCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy53aGVyZV0gQW4gb3B0aW9uYWwgd2hlcmUgY2xhdXNlIHRvIGxpbWl0IHRoZSBhc3NvY2lhdGVkIG1vZGVsc1xuICAgKiBAcGFyYW0ge3N0cmluZ3xib29sZWFufSBbb3B0aW9ucy5zY29wZV0gQXBwbHkgYSBzY29wZSBvbiB0aGUgcmVsYXRlZCBtb2RlbCwgb3IgcmVtb3ZlIGl0cyBkZWZhdWx0IHNjb3BlIGJ5IHBhc3NpbmcgZmFsc2VcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn1cbiAgICovXG4gIGNvdW50KGluc3RhbmNlLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc2VxdWVsaXplID0gdGhpcy50YXJnZXQuc2VxdWVsaXplO1xuXG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKTtcbiAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBbXG4gICAgICBbc2VxdWVsaXplLmZuKCdDT1VOVCcsIHNlcXVlbGl6ZS5jb2woW3RoaXMudGFyZ2V0Lm5hbWUsIHRoaXMudGFyZ2V0S2V5RmllbGRdLmpvaW4oJy4nKSkpLCAnY291bnQnXVxuICAgIF07XG4gICAgb3B0aW9ucy5qb2luVGFibGVBdHRyaWJ1dGVzID0gW107XG4gICAgb3B0aW9ucy5yYXcgPSB0cnVlO1xuICAgIG9wdGlvbnMucGxhaW4gPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0KGluc3RhbmNlLCBvcHRpb25zKS50aGVuKHJlc3VsdCA9PiBwYXJzZUludChyZXN1bHQuY291bnQsIDEwKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgb25lIG9yIG1vcmUgaW5zdGFuY2UocykgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzLiBJZiBhIGxpc3Qgb2YgaW5zdGFuY2VzIGlzIHBhc3NlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBfYWxsXyBpbnN0YW5jZXMgYXJlIGFzc29jaWF0ZWRcbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2Ugc291cmNlIGluc3RhbmNlIHRvIGNoZWNrIGZvciBhbiBhc3NvY2lhdGlvbiB3aXRoXG4gICAqIEBwYXJhbSB7TW9kZWx8TW9kZWxbXXxzdHJpbmdbXXxzdHJpbmd8bnVtYmVyW118bnVtYmVyfSBbaW5zdGFuY2VzXSBDYW4gYmUgYW4gYXJyYXkgb2YgaW5zdGFuY2VzIG9yIHRoZWlyIHByaW1hcnkga2V5c1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgcGFzc2VkIHRvIGdldEFzc29jaWF0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIGhhcyhzb3VyY2VJbnN0YW5jZSwgaW5zdGFuY2VzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGluc3RhbmNlcykpIHtcbiAgICAgIGluc3RhbmNlcyA9IFtpbnN0YW5jZXNdO1xuICAgIH1cblxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIHJhdzogdHJ1ZVxuICAgIH0sIG9wdGlvbnMsIHtcbiAgICAgIHNjb3BlOiBmYWxzZSxcbiAgICAgIGF0dHJpYnV0ZXM6IFt0aGlzLnRhcmdldEtleV0sXG4gICAgICBqb2luVGFibGVBdHRyaWJ1dGVzOiBbXVxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcmltYXJ5S2V5cyA9IGluc3RhbmNlcy5tYXAoaW5zdGFuY2UgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlIGluc3RhbmNlb2YgdGhpcy50YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLndoZXJlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbdGhpcy50YXJnZXRLZXldOiBpbnN0YW5jZVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIG9wdGlvbnMud2hlcmUgPSB7XG4gICAgICBbT3AuYW5kXTogW1xuICAgICAgICB7IFtPcC5vcl06IGluc3RhbmNlUHJpbWFyeUtleXMgfSxcbiAgICAgICAgb3B0aW9ucy53aGVyZVxuICAgICAgXVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5nZXQoc291cmNlSW5zdGFuY2UsIG9wdGlvbnMpLnRoZW4oYXNzb2NpYXRlZE9iamVjdHMgPT5cbiAgICAgIF8uZGlmZmVyZW5jZVdpdGgoaW5zdGFuY2VQcmltYXJ5S2V5cywgYXNzb2NpYXRlZE9iamVjdHMsXG4gICAgICAgIChhLCBiKSA9PiBfLmlzRXF1YWwoYVt0aGlzLnRhcmdldEtleV0sIGJbdGhpcy50YXJnZXRLZXldKSkubGVuZ3RoID09PSAwXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFzc29jaWF0ZWQgbW9kZWxzIGJ5IHBhc3NpbmcgYW4gYXJyYXkgb2YgaW5zdGFuY2VzIG9yIHRoZWlyIHByaW1hcnkga2V5cy5cbiAgICogRXZlcnl0aGluZyB0aGF0IGl0IG5vdCBpbiB0aGUgcGFzc2VkIGFycmF5IHdpbGwgYmUgdW4tYXNzb2NpYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2Ugc291cmNlIGluc3RhbmNlIHRvIGFzc29jaWF0ZSBuZXcgaW5zdGFuY2VzIHdpdGhcbiAgICogQHBhcmFtIHtNb2RlbHxNb2RlbFtdfHN0cmluZ1tdfHN0cmluZ3xudW1iZXJbXXxudW1iZXJ9IFtuZXdBc3NvY2lhdGVkT2JqZWN0c10gQSBzaW5nbGUgaW5zdGFuY2Ugb3IgcHJpbWFyeSBrZXksIG9yIGEgbWl4ZWQgYXJyYXkgb2YgcGVyc2lzdGVkIGluc3RhbmNlcyBvciBwcmltYXJ5IGtleXNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHBhc3NlZCB0byBgdGhyb3VnaC5maW5kQWxsYCwgYGJ1bGtDcmVhdGVgLCBgdXBkYXRlYCBhbmQgYGRlc3Ryb3lgXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy52YWxpZGF0ZV0gUnVuIHZhbGlkYXRpb24gZm9yIHRoZSBqb2luIG1vZGVsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy50aHJvdWdoXSBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMgZm9yIHRoZSBqb2luIHRhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHNldChzb3VyY2VJbnN0YW5jZSwgbmV3QXNzb2NpYXRlZE9iamVjdHMsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGNvbnN0IHNvdXJjZUtleSA9IHRoaXMuc291cmNlS2V5O1xuICAgIGNvbnN0IHRhcmdldEtleSA9IHRoaXMudGFyZ2V0S2V5O1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmlkZW50aWZpZXI7XG4gICAgY29uc3QgZm9yZWlnbklkZW50aWZpZXIgPSB0aGlzLmZvcmVpZ25JZGVudGlmaWVyO1xuICAgIGxldCB3aGVyZSA9IHt9O1xuXG4gICAgaWYgKG5ld0Fzc29jaWF0ZWRPYmplY3RzID09PSBudWxsKSB7XG4gICAgICBuZXdBc3NvY2lhdGVkT2JqZWN0cyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdBc3NvY2lhdGVkT2JqZWN0cyA9IHRoaXMudG9JbnN0YW5jZUFycmF5KG5ld0Fzc29jaWF0ZWRPYmplY3RzKTtcbiAgICB9XG5cbiAgICB3aGVyZVtpZGVudGlmaWVyXSA9IHNvdXJjZUluc3RhbmNlLmdldChzb3VyY2VLZXkpO1xuICAgIHdoZXJlID0gT2JqZWN0LmFzc2lnbih3aGVyZSwgdGhpcy50aHJvdWdoLnNjb3BlKTtcblxuICAgIGNvbnN0IHVwZGF0ZUFzc29jaWF0aW9ucyA9IGN1cnJlbnRSb3dzID0+IHtcbiAgICAgIGNvbnN0IG9ic29sZXRlQXNzb2NpYXRpb25zID0gW107XG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgY29uc3QgZGVmYXVsdEF0dHJpYnV0ZXMgPSBvcHRpb25zLnRocm91Z2ggfHwge307XG5cbiAgICAgIGNvbnN0IHVuYXNzb2NpYXRlZE9iamVjdHMgPSBuZXdBc3NvY2lhdGVkT2JqZWN0cy5maWx0ZXIob2JqID0+XG4gICAgICAgICFjdXJyZW50Um93cy5zb21lKGN1cnJlbnRSb3cgPT4gY3VycmVudFJvd1tmb3JlaWduSWRlbnRpZmllcl0gPT09IG9iai5nZXQodGFyZ2V0S2V5KSlcbiAgICAgICk7XG5cbiAgICAgIGZvciAoY29uc3QgY3VycmVudFJvdyBvZiBjdXJyZW50Um93cykge1xuICAgICAgICBjb25zdCBuZXdPYmogPSBuZXdBc3NvY2lhdGVkT2JqZWN0cy5maW5kKG9iaiA9PiBjdXJyZW50Um93W2ZvcmVpZ25JZGVudGlmaWVyXSA9PT0gb2JqLmdldCh0YXJnZXRLZXkpKTtcblxuICAgICAgICBpZiAoIW5ld09iaikge1xuICAgICAgICAgIG9ic29sZXRlQXNzb2NpYXRpb25zLnB1c2goY3VycmVudFJvdyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHRocm91Z2hBdHRyaWJ1dGVzID0gbmV3T2JqW3RoaXMudGhyb3VnaC5tb2RlbC5uYW1lXTtcbiAgICAgICAgICAvLyBRdWljay1maXggZm9yIHN1YnRsZSBidWcgd2hlbiB1c2luZyBleGlzdGluZyBvYmplY3RzIHRoYXQgbWlnaHQgaGF2ZSB0aGUgdGhyb3VnaCBtb2RlbCBhdHRhY2hlZCAobm90IGFzIGFuIGF0dHJpYnV0ZSBvYmplY3QpXG4gICAgICAgICAgaWYgKHRocm91Z2hBdHRyaWJ1dGVzIGluc3RhbmNlb2YgdGhpcy50aHJvdWdoLm1vZGVsKSB7XG4gICAgICAgICAgICB0aHJvdWdoQXR0cmlidXRlcyA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBfLmRlZmF1bHRzKHt9LCB0aHJvdWdoQXR0cmlidXRlcywgZGVmYXVsdEF0dHJpYnV0ZXMpO1xuXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmxlbmd0aCkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgdGhpcy50aHJvdWdoLm1vZGVsLnVwZGF0ZShhdHRyaWJ1dGVzLCBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHtcbiAgICAgICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdOiBzb3VyY2VJbnN0YW5jZS5nZXQoc291cmNlS2V5KSxcbiAgICAgICAgICAgICAgICAgIFtmb3JlaWduSWRlbnRpZmllcl06IG5ld09iai5nZXQodGFyZ2V0S2V5KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9ic29sZXRlQXNzb2NpYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgd2hlcmUgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICBbaWRlbnRpZmllcl06IHNvdXJjZUluc3RhbmNlLmdldChzb3VyY2VLZXkpLFxuICAgICAgICAgIFtmb3JlaWduSWRlbnRpZmllcl06IG9ic29sZXRlQXNzb2NpYXRpb25zLm1hcChvYnNvbGV0ZUFzc29jaWF0aW9uID0+IG9ic29sZXRlQXNzb2NpYXRpb25bZm9yZWlnbklkZW50aWZpZXJdKVxuICAgICAgICB9LCB0aGlzLnRocm91Z2guc2NvcGUpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgIHRoaXMudGhyb3VnaC5tb2RlbC5kZXN0cm95KF8uZGVmYXVsdHMoe1xuICAgICAgICAgICAgd2hlcmVcbiAgICAgICAgICB9LCBvcHRpb25zKSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVuYXNzb2NpYXRlZE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBidWxrID0gdW5hc3NvY2lhdGVkT2JqZWN0cy5tYXAodW5hc3NvY2lhdGVkT2JqZWN0ID0+IHtcbiAgICAgICAgICBsZXQgYXR0cmlidXRlcyA9IHt9O1xuXG4gICAgICAgICAgYXR0cmlidXRlc1tpZGVudGlmaWVyXSA9IHNvdXJjZUluc3RhbmNlLmdldChzb3VyY2VLZXkpO1xuICAgICAgICAgIGF0dHJpYnV0ZXNbZm9yZWlnbklkZW50aWZpZXJdID0gdW5hc3NvY2lhdGVkT2JqZWN0LmdldCh0YXJnZXRLZXkpO1xuXG4gICAgICAgICAgYXR0cmlidXRlcyA9IF8uZGVmYXVsdHMoYXR0cmlidXRlcywgdW5hc3NvY2lhdGVkT2JqZWN0W3RoaXMudGhyb3VnaC5tb2RlbC5uYW1lXSwgZGVmYXVsdEF0dHJpYnV0ZXMpO1xuXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCB0aGlzLnRocm91Z2guc2NvcGUpO1xuICAgICAgICAgIGF0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKGF0dHJpYnV0ZXMsIHRoaXMudGhyb3VnaC5zY29wZSk7XG5cbiAgICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnRocm91Z2gubW9kZWwuYnVsa0NyZWF0ZShidWxrLCBPYmplY3QuYXNzaWduKHsgdmFsaWRhdGU6IHRydWUgfSwgb3B0aW9ucykpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFV0aWxzLlByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMudGhyb3VnaC5tb2RlbC5maW5kQWxsKF8uZGVmYXVsdHMoeyB3aGVyZSwgcmF3OiB0cnVlIH0sIG9wdGlvbnMpKVxuICAgICAgLnRoZW4oY3VycmVudFJvd3MgPT4gdXBkYXRlQXNzb2NpYXRpb25zKGN1cnJlbnRSb3dzKSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVtcHR5UmVzdWx0RXJyb3IpIHJldHVybiB1cGRhdGVBc3NvY2lhdGlvbnMoW10pO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZSBvbmUgb3Igc2V2ZXJhbCByb3dzIHdpdGggc291cmNlIGluc3RhbmNlLiBJdCB3aWxsIG5vdCB1bi1hc3NvY2lhdGUgYW55IGFscmVhZHkgYXNzb2NpYXRlZCBpbnN0YW5jZVxuICAgKiB0aGF0IG1heSBiZSBtaXNzaW5nIGZyb20gYG5ld0luc3RhbmNlc2AuXG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZWx9IHNvdXJjZUluc3RhbmNlIHNvdXJjZSBpbnN0YW5jZSB0byBhc3NvY2lhdGUgbmV3IGluc3RhbmNlcyB3aXRoXG4gICAqIEBwYXJhbSB7TW9kZWx8TW9kZWxbXXxzdHJpbmdbXXxzdHJpbmd8bnVtYmVyW118bnVtYmVyfSBbbmV3SW5zdGFuY2VzXSBBIHNpbmdsZSBpbnN0YW5jZSBvciBwcmltYXJ5IGtleSwgb3IgYSBtaXhlZCBhcnJheSBvZiBwZXJzaXN0ZWQgaW5zdGFuY2VzIG9yIHByaW1hcnkga2V5c1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgcGFzc2VkIHRvIGB0aHJvdWdoLmZpbmRBbGxgLCBgYnVsa0NyZWF0ZWAgYW5kIGB1cGRhdGVgXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy52YWxpZGF0ZV0gUnVuIHZhbGlkYXRpb24gZm9yIHRoZSBqb2luIG1vZGVsLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMudGhyb3VnaF0gQWRkaXRpb25hbCBhdHRyaWJ1dGVzIGZvciB0aGUgam9pbiB0YWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBhZGQoc291cmNlSW5zdGFuY2UsIG5ld0luc3RhbmNlcywgb3B0aW9ucykge1xuICAgIC8vIElmIG5ld0luc3RhbmNlcyBpcyBudWxsIG9yIHVuZGVmaW5lZCwgbm8tb3BcbiAgICBpZiAoIW5ld0luc3RhbmNlcykgcmV0dXJuIFV0aWxzLlByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgb3B0aW9ucyA9IF8uY2xvbmUob3B0aW9ucykgfHwge307XG5cbiAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXM7XG4gICAgY29uc3Qgc291cmNlS2V5ID0gYXNzb2NpYXRpb24uc291cmNlS2V5O1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGFzc29jaWF0aW9uLnRhcmdldEtleTtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gYXNzb2NpYXRpb24uaWRlbnRpZmllcjtcbiAgICBjb25zdCBmb3JlaWduSWRlbnRpZmllciA9IGFzc29jaWF0aW9uLmZvcmVpZ25JZGVudGlmaWVyO1xuICAgIGNvbnN0IGRlZmF1bHRBdHRyaWJ1dGVzID0gb3B0aW9ucy50aHJvdWdoIHx8IHt9O1xuXG4gICAgbmV3SW5zdGFuY2VzID0gYXNzb2NpYXRpb24udG9JbnN0YW5jZUFycmF5KG5ld0luc3RhbmNlcyk7XG5cbiAgICBjb25zdCB3aGVyZSA9IHtcbiAgICAgIFtpZGVudGlmaWVyXTogc291cmNlSW5zdGFuY2UuZ2V0KHNvdXJjZUtleSksXG4gICAgICBbZm9yZWlnbklkZW50aWZpZXJdOiBuZXdJbnN0YW5jZXMubWFwKG5ld0luc3RhbmNlID0+IG5ld0luc3RhbmNlLmdldCh0YXJnZXRLZXkpKVxuICAgIH07XG5cbiAgICBPYmplY3QuYXNzaWduKHdoZXJlLCBhc3NvY2lhdGlvbi50aHJvdWdoLnNjb3BlKTtcblxuICAgIGNvbnN0IHVwZGF0ZUFzc29jaWF0aW9ucyA9IGN1cnJlbnRSb3dzID0+IHtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICBjb25zdCB1bmFzc29jaWF0ZWRPYmplY3RzID0gW107XG4gICAgICBjb25zdCBjaGFuZ2VkQXNzb2NpYXRpb25zID0gW107XG4gICAgICBmb3IgKGNvbnN0IG9iaiBvZiBuZXdJbnN0YW5jZXMpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdBc3NvY2lhdGlvbiA9IGN1cnJlbnRSb3dzICYmIGN1cnJlbnRSb3dzLmZpbmQoY3VycmVudCA9PiBjdXJyZW50W2ZvcmVpZ25JZGVudGlmaWVyXSA9PT0gb2JqLmdldCh0YXJnZXRLZXkpKTtcblxuICAgICAgICBpZiAoIWV4aXN0aW5nQXNzb2NpYXRpb24pIHtcbiAgICAgICAgICB1bmFzc29jaWF0ZWRPYmplY3RzLnB1c2gob2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0aHJvdWdoQXR0cmlidXRlcyA9IG9ialthc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLm5hbWVdO1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBfLmRlZmF1bHRzKHt9LCB0aHJvdWdoQXR0cmlidXRlcywgZGVmYXVsdEF0dHJpYnV0ZXMpO1xuXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLnNvbWUoYXR0cmlidXRlID0+IGF0dHJpYnV0ZXNbYXR0cmlidXRlXSAhPT0gZXhpc3RpbmdBc3NvY2lhdGlvblthdHRyaWJ1dGVdKSkge1xuICAgICAgICAgICAgY2hhbmdlZEFzc29jaWF0aW9ucy5wdXNoKG9iaik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1bmFzc29jaWF0ZWRPYmplY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgYnVsayA9IHVuYXNzb2NpYXRlZE9iamVjdHMubWFwKHVuYXNzb2NpYXRlZE9iamVjdCA9PiB7XG4gICAgICAgICAgY29uc3QgdGhyb3VnaEF0dHJpYnV0ZXMgPSB1bmFzc29jaWF0ZWRPYmplY3RbYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbC5uYW1lXTtcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gXy5kZWZhdWx0cyh7fSwgdGhyb3VnaEF0dHJpYnV0ZXMsIGRlZmF1bHRBdHRyaWJ1dGVzKTtcblxuICAgICAgICAgIGF0dHJpYnV0ZXNbaWRlbnRpZmllcl0gPSBzb3VyY2VJbnN0YW5jZS5nZXQoc291cmNlS2V5KTtcbiAgICAgICAgICBhdHRyaWJ1dGVzW2ZvcmVpZ25JZGVudGlmaWVyXSA9IHVuYXNzb2NpYXRlZE9iamVjdC5nZXQodGFyZ2V0S2V5KTtcblxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oYXR0cmlidXRlcywgYXNzb2NpYXRpb24udGhyb3VnaC5zY29wZSk7XG5cbiAgICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaChhc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLmJ1bGtDcmVhdGUoYnVsaywgT2JqZWN0LmFzc2lnbih7IHZhbGlkYXRlOiB0cnVlIH0sIG9wdGlvbnMpKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgYXNzb2Mgb2YgY2hhbmdlZEFzc29jaWF0aW9ucykge1xuICAgICAgICBsZXQgdGhyb3VnaEF0dHJpYnV0ZXMgPSBhc3NvY1thc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLm5hbWVdO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gXy5kZWZhdWx0cyh7fSwgdGhyb3VnaEF0dHJpYnV0ZXMsIGRlZmF1bHRBdHRyaWJ1dGVzKTtcbiAgICAgICAgLy8gUXVpY2stZml4IGZvciBzdWJ0bGUgYnVnIHdoZW4gdXNpbmcgZXhpc3Rpbmcgb2JqZWN0cyB0aGF0IG1pZ2h0IGhhdmUgdGhlIHRocm91Z2ggbW9kZWwgYXR0YWNoZWQgKG5vdCBhcyBhbiBhdHRyaWJ1dGUgb2JqZWN0KVxuICAgICAgICBpZiAodGhyb3VnaEF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBhc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsKSB7XG4gICAgICAgICAgdGhyb3VnaEF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3aGVyZSA9IHtcbiAgICAgICAgICBbaWRlbnRpZmllcl06IHNvdXJjZUluc3RhbmNlLmdldChzb3VyY2VLZXkpLFxuICAgICAgICAgIFtmb3JlaWduSWRlbnRpZmllcl06IGFzc29jLmdldCh0YXJnZXRLZXkpXG4gICAgICAgIH07XG5cblxuICAgICAgICBwcm9taXNlcy5wdXNoKGFzc29jaWF0aW9uLnRocm91Z2gubW9kZWwudXBkYXRlKGF0dHJpYnV0ZXMsIE9iamVjdC5hc3NpZ24ob3B0aW9ucywgeyB3aGVyZSB9KSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gVXRpbHMuUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbC5maW5kQWxsKF8uZGVmYXVsdHMoeyB3aGVyZSwgcmF3OiB0cnVlIH0sIG9wdGlvbnMpKVxuICAgICAgLnRoZW4oY3VycmVudFJvd3MgPT4gdXBkYXRlQXNzb2NpYXRpb25zKGN1cnJlbnRSb3dzKSlcbiAgICAgIC50aGVuKChbYXNzb2NpYXRpb25zXSkgPT4gYXNzb2NpYXRpb25zKVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRW1wdHlSZXN1bHRFcnJvcikgcmV0dXJuIHVwZGF0ZUFzc29jaWF0aW9ucygpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuLWFzc29jaWF0ZSBvbmUgb3IgbW9yZSBpbnN0YW5jZShzKS5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2UgaW5zdGFuY2UgdG8gdW4gYXNzb2NpYXRlIGluc3RhbmNlcyB3aXRoXG4gICAqIEBwYXJhbSB7TW9kZWx8TW9kZWxbXXxzdHJpbmd8c3RyaW5nW118bnVtYmVyfG51bWJlcltdfSBbb2xkQXNzb2NpYXRlZE9iamVjdHNdIENhbiBiZSBhbiBJbnN0YW5jZSBvciBpdHMgcHJpbWFyeSBrZXksIG9yIGEgbWl4ZWQgYXJyYXkgb2YgaW5zdGFuY2VzIGFuZCBwcmltYXJ5IGtleXNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHBhc3NlZCB0byBgdGhyb3VnaC5kZXN0cm95YFxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHJlbW92ZShzb3VyY2VJbnN0YW5jZSwgb2xkQXNzb2NpYXRlZE9iamVjdHMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXM7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIG9sZEFzc29jaWF0ZWRPYmplY3RzID0gYXNzb2NpYXRpb24udG9JbnN0YW5jZUFycmF5KG9sZEFzc29jaWF0ZWRPYmplY3RzKTtcblxuICAgIGNvbnN0IHdoZXJlID0ge1xuICAgICAgW2Fzc29jaWF0aW9uLmlkZW50aWZpZXJdOiBzb3VyY2VJbnN0YW5jZS5nZXQoYXNzb2NpYXRpb24uc291cmNlS2V5KSxcbiAgICAgIFthc3NvY2lhdGlvbi5mb3JlaWduSWRlbnRpZmllcl06IG9sZEFzc29jaWF0ZWRPYmplY3RzLm1hcChuZXdJbnN0YW5jZSA9PiBuZXdJbnN0YW5jZS5nZXQoYXNzb2NpYXRpb24udGFyZ2V0S2V5KSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFzc29jaWF0aW9uLnRocm91Z2gubW9kZWwuZGVzdHJveShfLmRlZmF1bHRzKHsgd2hlcmUgfSwgb3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYXNzb2NpYXRlZCBtb2RlbCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggdGhpcy5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2Ugc291cmNlIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbdmFsdWVzXSB2YWx1ZXMgZm9yIHRhcmdldCBtb2RlbFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgcGFzc2VkIHRvIGNyZWF0ZSBhbmQgYWRkXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy50aHJvdWdoXSBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMgZm9yIHRoZSBqb2luIHRhYmxlXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgY3JlYXRlKHNvdXJjZUluc3RhbmNlLCB2YWx1ZXMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXM7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMgfHwge307XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgZmllbGRzOiBvcHRpb25zXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChhc3NvY2lhdGlvbi5zY29wZSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih2YWx1ZXMsIGFzc29jaWF0aW9uLnNjb3BlKTtcbiAgICAgIGlmIChvcHRpb25zLmZpZWxkcykge1xuICAgICAgICBvcHRpb25zLmZpZWxkcyA9IG9wdGlvbnMuZmllbGRzLmNvbmNhdChPYmplY3Qua2V5cyhhc3NvY2lhdGlvbi5zY29wZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcmVsYXRlZCBtb2RlbCBpbnN0YW5jZVxuICAgIHJldHVybiBhc3NvY2lhdGlvbi50YXJnZXQuY3JlYXRlKHZhbHVlcywgb3B0aW9ucykudGhlbihuZXdBc3NvY2lhdGVkT2JqZWN0ID0+XG4gICAgICBzb3VyY2VJbnN0YW5jZVthc3NvY2lhdGlvbi5hY2Nlc3NvcnMuYWRkXShuZXdBc3NvY2lhdGVkT2JqZWN0LCBfLm9taXQob3B0aW9ucywgWydmaWVsZHMnXSkpLnJldHVybihuZXdBc3NvY2lhdGVkT2JqZWN0KVxuICAgICk7XG4gIH1cblxuICB2ZXJpZnlBc3NvY2lhdGlvbkFsaWFzKGFsaWFzKSB7XG4gICAgaWYgKHR5cGVvZiBhbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzID09PSBhbGlhcztcbiAgICB9XG5cbiAgICBpZiAoYWxpYXMgJiYgYWxpYXMucGx1cmFsKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcyA9PT0gYWxpYXMucGx1cmFsO1xuICAgIH1cblxuICAgIHJldHVybiAhdGhpcy5pc0FsaWFzZWQ7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCZWxvbmdzVG9NYW55O1xubW9kdWxlLmV4cG9ydHMuQmVsb25nc1RvTWFueSA9IEJlbG9uZ3NUb01hbnk7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gQmVsb25nc1RvTWFueTtcbiJdfQ== \ No newline at end of file diff --git a/dist/associations/belongs-to.js b/dist/associations/belongs-to.js index c9bbab9..75d0fea 100644 --- a/dist/associations/belongs-to.js +++ b/dist/associations/belongs-to.js @@ -6,15 +6,19 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const Utils = require('./../utils'); @@ -34,17 +38,17 @@ const Op = require('../operators'); */ -let BelongsTo = -/*#__PURE__*/ -function (_Association) { +let BelongsTo = /*#__PURE__*/function (_Association) { _inherits(BelongsTo, _Association); + var _super = _createSuper(BelongsTo); + function BelongsTo(source, target, options) { var _this; _classCallCheck(this, BelongsTo); - _this = _possibleConstructorReturn(this, _getPrototypeOf(BelongsTo).call(this, source, target, options)); + _this = _super.call(this, source, target, options); _this.associationType = 'BelongsTo'; _this.isSingleAssociation = true; _this.foreignKeyAttribute = {}; @@ -275,4 +279,4 @@ function (_Association) { module.exports = BelongsTo; module.exports.BelongsTo = BelongsTo; module.exports.default = BelongsTo; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvYmVsb25ncy10by5qcyJdLCJuYW1lcyI6WyJVdGlscyIsInJlcXVpcmUiLCJIZWxwZXJzIiwiXyIsIkFzc29jaWF0aW9uIiwiT3AiLCJCZWxvbmdzVG8iLCJzb3VyY2UiLCJ0YXJnZXQiLCJvcHRpb25zIiwiYXNzb2NpYXRpb25UeXBlIiwiaXNTaW5nbGVBc3NvY2lhdGlvbiIsImZvcmVpZ25LZXlBdHRyaWJ1dGUiLCJhcyIsImlzQWxpYXNlZCIsIm5hbWUiLCJzaW5ndWxhciIsImlzT2JqZWN0IiwiZm9yZWlnbktleSIsImZpZWxkTmFtZSIsImNhbWVsaXplIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsImpvaW4iLCJpZGVudGlmaWVyIiwicmF3QXR0cmlidXRlcyIsImlkZW50aWZpZXJGaWVsZCIsImZpZWxkIiwidGFyZ2V0S2V5IiwiRXJyb3IiLCJ0YXJnZXRLZXlGaWVsZCIsInRhcmdldEtleUlzUHJpbWFyeSIsInRhcmdldElkZW50aWZpZXIiLCJhc3NvY2lhdGlvbkFjY2Vzc29yIiwidXNlSG9va3MiLCJ1cHBlckZpcnN0IiwiYWNjZXNzb3JzIiwiZ2V0Iiwic2V0IiwiY3JlYXRlIiwibmV3QXR0cmlidXRlcyIsImRlZmF1bHRzIiwidHlwZSIsImtleVR5cGUiLCJhbGxvd051bGwiLCJjb25zdHJhaW50cyIsIm9uRGVsZXRlIiwib25VcGRhdGUiLCJhZGRGb3JlaWduS2V5Q29uc3RyYWludHMiLCJtZXJnZURlZmF1bHRzIiwicmVmcmVzaEF0dHJpYnV0ZXMiLCJjaGVja05hbWluZ0NvbGxpc2lvbiIsIm9iaiIsIm1ldGhvZHMiLCJtaXhpbk1ldGhvZHMiLCJpbnN0YW5jZXMiLCJ3aGVyZSIsIlRhcmdldCIsImluc3RhbmNlIiwiY2xvbmVEZWVwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic2NvcGUiLCJ1bnNjb3BlZCIsInNjaGVtYSIsInNjaGVtYURlbGltaXRlciIsIkFycmF5IiwiaXNBcnJheSIsInVuZGVmaW5lZCIsImluIiwibWFwIiwiZmluZEJ5UGsiLCJsaW1pdCIsImFuZCIsImZpbmRBbGwiLCJ0aGVuIiwicmVzdWx0cyIsInJlc3VsdCIsInJhdyIsImZpbmRPbmUiLCJzb3VyY2VJbnN0YW5jZSIsImFzc29jaWF0ZWRJbnN0YW5jZSIsInZhbHVlIiwic2F2ZSIsImFzc2lnbiIsImZpZWxkcyIsImFzc29jaWF0aW9uIiwidmFsdWVzIiwibmV3QXNzb2NpYXRlZE9iamVjdCIsImFsaWFzIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxZQUFELENBQXJCOztBQUNBLE1BQU1DLE9BQU8sR0FBR0QsT0FBTyxDQUFDLFdBQUQsQ0FBdkI7O0FBQ0EsTUFBTUUsQ0FBQyxHQUFHRixPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNRyxXQUFXLEdBQUdILE9BQU8sQ0FBQyxRQUFELENBQTNCOztBQUNBLE1BQU1JLEVBQUUsR0FBR0osT0FBTyxDQUFDLGNBQUQsQ0FBbEI7QUFFQTs7Ozs7Ozs7O0lBT01LLFM7Ozs7O0FBQ0oscUJBQVlDLE1BQVosRUFBb0JDLE1BQXBCLEVBQTRCQyxPQUE1QixFQUFxQztBQUFBOztBQUFBOztBQUNuQyxtRkFBTUYsTUFBTixFQUFjQyxNQUFkLEVBQXNCQyxPQUF0QjtBQUVBLFVBQUtDLGVBQUwsR0FBdUIsV0FBdkI7QUFDQSxVQUFLQyxtQkFBTCxHQUEyQixJQUEzQjtBQUNBLFVBQUtDLG1CQUFMLEdBQTJCLEVBQTNCOztBQUVBLFFBQUksTUFBS0MsRUFBVCxFQUFhO0FBQ1gsWUFBS0MsU0FBTCxHQUFpQixJQUFqQjtBQUNBLFlBQUtMLE9BQUwsQ0FBYU0sSUFBYixHQUFvQjtBQUNsQkMsUUFBQUEsUUFBUSxFQUFFLE1BQUtIO0FBREcsT0FBcEI7QUFHRCxLQUxELE1BS087QUFDTCxZQUFLQSxFQUFMLEdB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TUFBTSxHQUFHQSxNQUFNLElBQUksRUFBbkI7QUFDQS9FLE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxJQUFJLEVBQXJCO0FBRUEsYUFBTyxLQUFLRCxNQUFMLENBQVk4QixNQUFaLENBQW1Ca0QsTUFBbkIsRUFBMkIvRSxPQUEzQixFQUNKbUUsSUFESSxDQUNDYSxtQkFBbUIsSUFBSVIsY0FBYyxDQUFDLEtBQUs5QyxTQUFMLENBQWVFLEdBQWhCLENBQWQsQ0FBbUNvRCxtQkFBbkMsRUFBd0RoRixPQUF4RCxFQUMxQm1FLElBRDBCLENBQ3JCLE1BQU1hLG1CQURlLENBRHhCLENBQVA7QUFJRDs7OzJDQUVzQkMsSyxFQUFPO0FBQzVCLFVBQUksT0FBT0EsS0FBUCxLQUFpQixRQUFyQixFQUErQjtBQUM3QixlQUFPLEtBQUs3RSxFQUFMLEtBQVk2RSxLQUFuQjtBQUNEOztBQUVELFVBQUlBLEtBQUssSUFBSUEsS0FBSyxDQUFDMUUsUUFBbkIsRUFBNkI7QUFDM0IsZUFBTyxLQUFLSCxFQUFMLEtBQVk2RSxLQUFLLENBQUMxRSxRQUF6QjtBQUNEOztBQUVELGFBQU8sQ0FBQyxLQUFLRixTQUFiO0FBQ0Q7Ozs7RUF2T3FCVixXOztBQTBPeEJ1RixNQUFNLENBQUNDLE9BQVAsR0FBaUJ0RixTQUFqQjtBQUNBcUYsTUFBTSxDQUFDQyxPQUFQLENBQWV0RixTQUFmLEdBQTJCQSxTQUEzQjtBQUNBcUYsTUFBTSxDQUFDQyxPQUFQLENBQWVDLE9BQWYsR0FBeUJ2RixTQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xyXG5jb25zdCBIZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgQXNzb2NpYXRpb24gPSByZXF1aXJlKCcuL2Jhc2UnKTtcclxuY29uc3QgT3AgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMnKTtcclxuXHJcbi8qKlxyXG4gKiBPbmUtdG8tb25lIGFzc29jaWF0aW9uXHJcbiAqXHJcbiAqIEluIHRoZSBBUEkgcmVmZXJlbmNlIGJlbG93LCBhZGQgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0aW9uIHRvIHRoZSBtZXRob2QsIGUuZy4gZm9yIGBVc2VyLmJlbG9uZ3NUbyhQcm9qZWN0KWAgdGhlIGdldHRlciB3aWxsIGJlIGB1c2VyLmdldFByb2plY3QoKWAuXHJcbiAqXHJcbiAqIEBzZWUge0BsaW5rIE1vZGVsLmJlbG9uZ3NUb31cclxuICovXHJcbmNsYXNzIEJlbG9uZ3NUbyBleHRlbmRzIEFzc29jaWF0aW9uIHtcclxuICBjb25zdHJ1Y3Rvcihzb3VyY2UsIHRhcmdldCwgb3B0aW9ucykge1xyXG4gICAgc3VwZXIoc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuYXNzb2NpYXRpb25UeXBlID0gJ0JlbG9uZ3NUbyc7XHJcbiAgICB0aGlzLmlzU2luZ2xlQXNzb2NpYXRpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlID0ge307XHJcblxyXG4gICAgaWYgKHRoaXMuYXMpIHtcclxuICAgICAgdGhpcy5pc0FsaWFzZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLm9wdGlvbnMubmFtZSA9IHtcclxuICAgICAgICBzaW5ndWxhcjogdGhpcy5hc1xyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hcyA9IHRoaXMudGFyZ2V0Lm9wdGlvbnMubmFtZS5zaW5ndWxhcjtcclxuICAgICAgdGhpcy5vcHRpb25zLm5hbWUgPSB0aGlzLnRhcmdldC5vcHRpb25zLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKF8uaXNPYmplY3QodGhpcy5vcHRpb25zLmZvcmVpZ25LZXkpKSB7XHJcbiAgICAgIHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZSA9IHRoaXMub3B0aW9ucy5mb3JlaWduS2V5O1xyXG4gICAgICB0aGlzLmZvcmVpZ25LZXkgPSB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUubmFtZSB8fCB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUuZmllbGROYW1lO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZm9yZWlnbktleSkge1xyXG4gICAgICB0aGlzLmZvcmVpZ25LZXkgPSB0aGlzLm9wdGlvbnMuZm9yZWlnbktleTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZm9yZWlnbktleSkge1xyXG4gICAgICB0aGlzLmZvcmVpZ25LZXkgPSBVdGlscy5jYW1lbGl6ZShcclxuICAgICAgICBbXHJcbiAgICAgICAgICB0aGlzLmFzLFxyXG4gICAgICAgICAgdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZVxyXG4gICAgICAgIF0uam9pbignXycpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pZGVudGlmaWVyID0gdGhpcy5mb3JlaWduS2V5O1xyXG4gICAgaWYgKHRoaXMuc291cmNlLnJhd0F0dHJpYnV0ZXNbdGhpcy5pZGVudGlmaWVyXSkge1xyXG4gICAgICB0aGlzLmlkZW50aWZpZXJGaWVsZCA9IHRoaXMuc291cmNlLnJhd0F0dHJpYnV0ZXNbdGhpcy5pZGVudGlmaWVyXS5maWVsZCB8fCB0aGlzLmlkZW50aWZpZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm9wdGlvbnMudGFyZ2V0S2V5XHJcbiAgICAgICYmICF0aGlzLnRhcmdldC5yYXdBdHRyaWJ1dGVzW3RoaXMub3B0aW9ucy50YXJnZXRLZXldXHJcbiAgICApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGF0dHJpYnV0ZSBcIiR7dGhpcy5vcHRpb25zLnRhcmdldEtleX1cIiBwYXNzZWQgYXMgdGFyZ2V0S2V5LCBkZWZpbmUgdGhpcyBhdHRyaWJ1dGUgb24gbW9kZWwgXCIke3RoaXMudGFyZ2V0Lm5hbWV9XCIgZmlyc3RgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRhcmdldEtleSA9IHRoaXMub3B0aW9ucy50YXJnZXRLZXkgfHwgdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZTtcclxuICAgIHRoaXMudGFyZ2V0S2V5RmllbGQgPSB0aGlzLnRhcmdldC5yYXdBdHRyaWJ1dGVzW3RoaXMudGFyZ2V0S2V5XS5maWVsZCB8fCB0aGlzLnRhcmdldEtleTtcclxuICAgIHRoaXMudGFyZ2V0S2V5SXNQcmltYXJ5ID0gdGhpcy50YXJnZXRLZXkgPT09IHRoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGU7XHJcbiAgICB0aGlzLnRhcmdldElkZW50aWZpZXIgPSB0aGlzLnRhcmdldEtleTtcclxuXHJcbiAgICB0aGlzLmFzc29jaWF0aW9uQWNjZXNzb3IgPSB0aGlzLmFzO1xyXG4gICAgdGhpcy5vcHRpb25zLnVzZUhvb2tzID0gb3B0aW9ucy51c2VIb29rcztcclxuXHJcbiAgICAvLyBHZXQgc2luZ3VsYXIgbmFtZSwgdHJ5aW5nIHRvIHVwcGVyY2FzZSB0aGUgZmlyc3QgbGV0dGVyLCB1bmxlc3MgdGhlIG1vZGVsIGZvcmJpZHMgaXRcclxuICAgIGNvbnN0IHNpbmd1bGFyID0gXy51cHBlckZpcnN0KHRoaXMub3B0aW9ucy5uYW1lLnNpbmd1bGFyKTtcclxuXHJcbiAgICB0aGlzLmFjY2Vzc29ycyA9IHtcclxuICAgICAgZ2V0OiBgZ2V0JHtzaW5ndWxhcn1gLFxyXG4gICAgICBzZXQ6IGBzZXQke3Npbmd1bGFyfWAsXHJcbiAgICAgIGNyZWF0ZTogYGNyZWF0ZSR7c2luZ3VsYXJ9YFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIHRoZSBpZCBpcyBpbiB0aGUgc291cmNlIHRhYmxlXHJcbiAgX2luamVjdEF0dHJpYnV0ZXMoKSB7XHJcbiAgICBjb25zdCBuZXdBdHRyaWJ1dGVzID0ge307XHJcblxyXG4gICAgbmV3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldID0gXy5kZWZhdWx0cyh7fSwgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlLCB7XHJcbiAgICAgIHR5cGU6IHRoaXMub3B0aW9ucy5rZXlUeXBlIHx8IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy50YXJnZXRLZXldLnR5cGUsXHJcbiAgICAgIGFsbG93TnVsbDogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb25zdHJhaW50cyAhPT0gZmFsc2UpIHtcclxuICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldIHx8IG5ld0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XTtcclxuICAgICAgdGhpcy5vcHRpb25zLm9uRGVsZXRlID0gdGhpcy5vcHRpb25zLm9uRGVsZXRlIHx8IChzb3VyY2UuYWxsb3dOdWxsID8gJ1NFVCBOVUxMJyA6ICdOTyBBQ1RJT04nKTtcclxuICAgICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlID0gdGhpcy5vcHRpb25zLm9uVXBkYXRlIHx8ICdDQVNDQURFJztcclxuICAgIH1cclxuXHJcbiAgICBIZWxwZXJzLmFkZEZvcmVpZ25LZXlDb25zdHJhaW50cyhuZXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0sIHRoaXMudGFyZ2V0LCB0aGlzLnNvdXJjZSwgdGhpcy5vcHRpb25zLCB0aGlzLnRhcmdldEtleUZpZWxkKTtcclxuICAgIFV0aWxzLm1lcmdlRGVmYXVsdHModGhpcy5zb3VyY2UucmF3QXR0cmlidXRlcywgbmV3QXR0cmlidXRlcyk7XHJcblxyXG4gICAgdGhpcy5zb3VyY2UucmVmcmVzaEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICB0aGlzLmlkZW50aWZpZXJGaWVsZCA9IHRoaXMuc291cmNlLnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XS5maWVsZCB8fCB0aGlzLmZvcmVpZ25LZXk7XHJcblxyXG4gICAgSGVscGVycy5jaGVja05hbWluZ0NvbGxpc2lvbih0aGlzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG1peGluKG9iaikge1xyXG4gICAgY29uc3QgbWV0aG9kcyA9IFsnZ2V0JywgJ3NldCcsICdjcmVhdGUnXTtcclxuXHJcbiAgICBIZWxwZXJzLm1peGluTWV0aG9kcyh0aGlzLCBvYmosIG1ldGhvZHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBhc3NvY2lhdGVkIGluc3RhbmNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb2RlbHxBcnJheTxNb2RlbD59IGluc3RhbmNlcyBzb3VyY2UgaW5zdGFuY2VzXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgW29wdGlvbnNdIGZpbmQgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IFtvcHRpb25zLnNjb3BlXSAgQXBwbHkgYSBzY29wZSBvbiB0aGUgcmVsYXRlZCBtb2RlbCwgb3IgcmVtb3ZlIGl0cyBkZWZhdWx0IHNjb3BlIGJ5IHBhc3NpbmcgZmFsc2UuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgW29wdGlvbnMuc2NoZW1hXSBBcHBseSBhIHNjaGVtYSBvbiB0aGUgcmVsYXRlZCBtb2RlbFxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbC5maW5kT25lfSBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uIG9mIG9wdGlvbnNcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsPn1cclxuICAgKi9cclxuICBnZXQoaW5zdGFuY2VzLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCB3aGVyZSA9IHt9O1xyXG4gICAgbGV0IFRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgbGV0IGluc3RhbmNlO1xyXG5cclxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc2NvcGUnKSkge1xyXG4gICAgICBpZiAoIW9wdGlvbnMuc2NvcGUpIHtcclxuICAgICAgICBUYXJnZXQgPSBUYXJnZXQudW5zY29wZWQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBUYXJnZXQgPSBUYXJnZXQuc2NvcGUob3B0aW9ucy5zY29wZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdzY2hlbWEnKSkge1xyXG4gICAgICBUYXJnZXQgPSBUYXJnZXQuc2NoZW1hKG9wdGlvbnMuc2NoZW1hLCBvcHRpb25zLnNjaGVtYURlbGltaXRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGluc3RhbmNlcykpIHtcclxuICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZXM7XHJcbiAgICAgIGluc3RhbmNlcyA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5zdGFuY2VzKSB7XHJcbiAgICAgIHdoZXJlW3RoaXMudGFyZ2V0S2V5XSA9IHtcclxuICAgICAgICBbT3AuaW5dOiBpbnN0YW5jZXMubWFwKGluc3RhbmNlID0+IGluc3RhbmNlLmdldCh0aGlzLmZvcmVpZ25LZXkpKVxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMudGFyZ2V0S2V5SXNQcmltYXJ5ICYmICFvcHRpb25zLndoZXJlKSB7XHJcbiAgICAgICAgcmV0dXJuIFRhcmdldC5maW5kQnlQayhpbnN0YW5jZS5nZXQodGhpcy5mb3JlaWduS2V5KSwgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgd2hlcmVbdGhpcy50YXJnZXRLZXldID0gaW5zdGFuY2UuZ2V0KHRoaXMuZm9yZWlnbktleSk7XHJcbiAgICAgIG9wdGlvbnMubGltaXQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbnMud2hlcmUgPSBvcHRpb25zLndoZXJlID9cclxuICAgICAgeyBbT3AuYW5kXTogW3doZXJlLCBvcHRpb25zLndoZXJlXSB9IDpcclxuICAgICAgd2hlcmU7XHJcblxyXG4gICAgaWYgKGluc3RhbmNlcykge1xyXG4gICAgICByZXR1cm4gVGFyZ2V0LmZpbmRBbGwob3B0aW9ucykudGhlbihyZXN1bHRzID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIGluc3RhbmNlcykge1xyXG4gICAgICAgICAgcmVzdWx0W2luc3RhbmNlLmdldCh0aGlzLmZvcmVpZ25LZXksIHsgcmF3OiB0cnVlIH0pXSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgIHJlc3VsdFtpbnN0YW5jZS5nZXQodGhpcy50YXJnZXRLZXksIHsgcmF3OiB0cnVlIH0pXSA9IGluc3RhbmNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFRhcmdldC5maW5kT25lKG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBhc3NvY2lhdGVkIG1vZGVsLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2UgdGhlIHNvdXJjZSBpbnN0YW5jZVxyXG4gICAqIEBwYXJhbSB7PzxNb2RlbD58c3RyaW5nfG51bWJlcn0gW2Fzc29jaWF0ZWRJbnN0YW5jZV0gQW4gcGVyc2lzdGVkIGluc3RhbmNlIG9yIHRoZSBwcmltYXJ5IGtleSBvZiBhbiBpbnN0YW5jZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzLiBQYXNzIGBudWxsYCBvciBgdW5kZWZpbmVkYCB0byByZW1vdmUgdGhlIGFzc29jaWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gb3B0aW9ucyBwYXNzZWQgdG8gYHRoaXMuc2F2ZWBcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnNhdmU9dHJ1ZV0gU2tpcCBzYXZpbmcgdGhpcyBhZnRlciBzZXR0aW5nIHRoZSBmb3JlaWduIGtleSBpZiBmYWxzZS5cclxuICAgKlxyXG4gICAqICBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBzZXQoc291cmNlSW5zdGFuY2UsIGFzc29jaWF0ZWRJbnN0YW5jZSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBsZXQgdmFsdWUgPSBhc3NvY2lhdGVkSW5zdGFuY2U7XHJcblxyXG4gICAgaWYgKGFzc29jaWF0ZWRJbnN0YW5jZSBpbnN0YW5jZW9mIHRoaXMudGFyZ2V0KSB7XHJcbiAgICAgIHZhbHVlID0gYXNzb2NpYXRlZEluc3RhbmNlW3RoaXMudGFyZ2V0S2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBzb3VyY2VJbnN0YW5jZS5zZXQodGhpcy5mb3JlaWduS2V5LCB2YWx1ZSk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuc2F2ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgIGZpZWxkczogW3RoaXMuZm9yZWlnbktleV0sXHJcbiAgICAgIGFsbG93TnVsbDogW3RoaXMuZm9yZWlnbktleV0sXHJcbiAgICAgIGFzc29jaWF0aW9uOiB0cnVlXHJcbiAgICB9LCBvcHRpb25zKTtcclxuXHJcbiAgICAvLyBwYXNzZXMgdGhlIGNoYW5nZWQgZmllbGQgdG8gc2F2ZSwgc28gb25seSB0aGF0IGZpZWxkIGdldCB1cGRhdGVkLlxyXG4gICAgcmV0dXJuIHNvdXJjZUluc3RhbmNlLnNhdmUob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGFzc29jaWF0ZWQgbW9kZWwgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIHRoaXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfSBzb3VyY2VJbnN0YW5jZSB0aGUgc291cmNlIGluc3RhbmNlXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFt2YWx1ZXM9e31dIHZhbHVlcyB0byBjcmVhdGUgYXNzb2NpYXRlZCBtb2RlbCBpbnN0YW5jZSB3aXRoXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25zIHBhc3NlZCB0byBgdGFyZ2V0LmNyZWF0ZWAgYW5kIHNldEFzc29jaWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbCNjcmVhdGV9ICBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uIG9mIG9wdGlvbnNcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsPn0gVGhlIGNyZWF0ZWQgdGFyZ2V0IG1vZGVsXHJcbiAgICovXHJcbiAgY3JlYXRlKHNvdXJjZUluc3RhbmNlLCB2YWx1ZXMsIG9wdGlvbnMpIHtcclxuICAgIHZhbHVlcyA9IHZhbHVlcyB8fCB7fTtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRhcmdldC5jcmVhdGUodmFsdWVzLCBvcHRpb25zKVxyXG4gICAgICAudGhlbihuZXdBc3NvY2lhdGVkT2JqZWN0ID0+IHNvdXJjZUluc3RhbmNlW3RoaXMuYWNjZXNzb3JzLnNldF0obmV3QXNzb2NpYXRlZE9iamVjdCwgb3B0aW9ucylcclxuICAgICAgICAudGhlbigoKSA9PiBuZXdBc3NvY2lhdGVkT2JqZWN0KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgdmVyaWZ5QXNzb2NpYXRpb25BbGlhcyhhbGlhcykge1xyXG4gICAgaWYgKHR5cGVvZiBhbGlhcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXMgPT09IGFsaWFzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbGlhcyAmJiBhbGlhcy5zaW5ndWxhcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5hcyA9PT0gYWxpYXMuc2luZ3VsYXI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICF0aGlzLmlzQWxpYXNlZDtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmVsb25nc1RvO1xyXG5tb2R1bGUuZXhwb3J0cy5CZWxvbmdzVG8gPSBCZWxvbmdzVG87XHJcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBCZWxvbmdzVG87XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvYmVsb25ncy10by5qcyJdLCJuYW1lcyI6WyJVdGlscyIsInJlcXVpcmUiLCJIZWxwZXJzIiwiXyIsIkFzc29jaWF0aW9uIiwiT3AiLCJCZWxvbmdzVG8iLCJzb3VyY2UiLCJ0YXJnZXQiLCJvcHRpb25zIiwiYXNzb2NpYXRpb25UeXBlIiwiaXNTaW5nbGVBc3NvY2lhdGlvbiIsImZvcmVpZ25LZXlBdHRyaWJ1dGUiLCJhcyIsImlzQWxpYXNlZCIsIm5hbWUiLCJzaW5ndWxhciIsImlzT2JqZWN0IiwiZm9yZWlnbktleSIsImZpZWxkTmFtZSIsImNhbWVsaXplIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsImpvaW4iLCJpZGVudGlmaWVyIiwicmF3QXR0cmlidXRlcyIsImlkZW50aWZpZXJGaWVsZCIsImZpZWxkIiwidGFyZ2V0S2V5IiwiRXJyb3IiLCJ0YXJnZXRLZXlGaWVsZCIsInRhcmdldEtleUlzUHJpbWFyeSIsInRhcmdldElkZW50aWZpZXIiLCJhc3NvY2lhdGlvbkFjY2Vzc29yIiwidXNlSG9va3MiLCJ1cHBlckZpcnN0IiwiYWNjZXNzb3JzIiwiZ2V0Iiwic2V0IiwiY3JlYXRlIiwibmV3QXR0cmlidXRlcyIsImRlZmF1bHRzIiwidHlwZSIsImtleVR5cGUiLCJhbGxvd051bGwiLCJjb25zdHJhaW50cyIsIm9uRGVsZXRlIiwib25VcGRhdGUiLCJhZGRGb3JlaWduS2V5Q29uc3RyYWludHMiLCJtZXJnZURlZmF1bHRzIiwicmVmcmVzaEF0dHJpYnV0ZXMiLCJjaGVja05hbWluZ0NvbGxpc2lvbiIsIm9iaiIsIm1ldGhvZHMiLCJtaXhpbk1ldGhvZHMiLCJpbnN0YW5jZXMiLCJ3aGVyZSIsIlRhcmdldCIsImluc3RhbmNlIiwiY2xvbmVEZWVwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic2NvcGUiLCJ1bnNjb3BlZCIsInNjaGVtYSIsInNjaGVtYURlbGltaXRlciIsIkFycmF5IiwiaXNBcnJheSIsInVuZGVmaW5lZCIsImluIiwibWFwIiwiZmluZEJ5UGsiLCJsaW1pdCIsImFuZCIsImZpbmRBbGwiLCJ0aGVuIiwicmVzdWx0cyIsInJlc3VsdCIsInJhdyIsImZpbmRPbmUiLCJzb3VyY2VJbnN0YW5jZSIsImFzc29jaWF0ZWRJbnN0YW5jZSIsInZhbHVlIiwic2F2ZSIsImFzc2lnbiIsImZpZWxkcyIsImFzc29jaWF0aW9uIiwidmFsdWVzIiwibmV3QXNzb2NpYXRlZE9iamVjdCIsImFsaWFzIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBRCxDQUFyQjs7QUFDQSxNQUFNQyxPQUFPLEdBQUdELE9BQU8sQ0FBQyxXQUFELENBQXZCOztBQUNBLE1BQU1FLENBQUMsR0FBR0YsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUcsV0FBVyxHQUFHSCxPQUFPLENBQUMsUUFBRCxDQUEzQjs7QUFDQSxNQUFNSSxFQUFFLEdBQUdKLE9BQU8sQ0FBQyxjQUFELENBQWxCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztJQUNNSyxTOzs7OztBQUNKLHFCQUFZQyxNQUFaLEVBQW9CQyxNQUFwQixFQUE0QkMsT0FBNUIsRUFBcUM7QUFBQTs7QUFBQTs7QUFDbkMsOEJBQU1GLE1BQU4sRUFBY0MsTUFBZCxFQUFzQkMsT0FBdEI7QUFFQSxVQUFLQyxlQUFMLEdBQXVCLFdBQXZCO0FBQ0EsVUFBS0MsbUJBQUwsR0FBMkIsSUFBM0I7QUFDQSxVQUFLQyxtQkFBTCxHQUEyQixFQUEzQjs7QUFFQSxRQUFJLE1BQUtDLEVBQVQsRUFBYTtBQUNYLFlBQUtDLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxZQUFLTCxPQUFMLENBQWFNLElBQWIsR0FBb0I7QUFDbEJDLFFBQUFBLFFBQVEsRUFBRSxNQUFLSDtBQURHLE9BQXBCO0FBR0Qs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QUFPd0UsY0FBYyxDQUFDRyxJQUFmLENBQW9CM0UsT0FBcEIsQ0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzJCQUNTd0UsYyxFQUFnQk8sTSxFQUFRL0UsTyxFQUFTO0FBQ3RDK0UsTUFBQUEsTUFBTSxHQUFHQSxNQUFNLElBQUksRUFBbkI7QUFDQS9FLE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxJQUFJLEVBQXJCO0FBRUEsYUFBTyxLQUFLRCxNQUFMLENBQVk4QixNQUFaLENBQW1Ca0QsTUFBbkIsRUFBMkIvRSxPQUEzQixFQUNKbUUsSUFESSxDQUNDYSxtQkFBbUIsSUFBSVIsY0FBYyxDQUFDLEtBQUs5QyxTQUFMLENBQWVFLEdBQWhCLENBQWQsQ0FBbUNvRCxtQkFBbkMsRUFBd0RoRixPQUF4RCxFQUMxQm1FLElBRDBCLENBQ3JCLE1BQU1hLG1CQURlLENBRHhCLENBQVA7QUFJRDs7OzJDQUVzQkMsSyxFQUFPO0FBQzVCLFVBQUksT0FBT0EsS0FBUCxLQUFpQixRQUFyQixFQUErQjtBQUM3QixlQUFPLEtBQUs3RSxFQUFMLEtBQVk2RSxLQUFuQjtBQUNEOztBQUVELFVBQUlBLEtBQUssSUFBSUEsS0FBSyxDQUFDMUUsUUFBbkIsRUFBNkI7QUFDM0IsZUFBTyxLQUFLSCxFQUFMLEtBQVk2RSxLQUFLLENBQUMxRSxRQUF6QjtBQUNEOztBQUVELGFBQU8sQ0FBQyxLQUFLRixTQUFiO0FBQ0Q7Ozs7RUF2T3FCVixXOztBQTBPeEJ1RixNQUFNLENBQUNDLE9BQVAsR0FBaUJ0RixTQUFqQjtBQUNBcUYsTUFBTSxDQUFDQyxPQUFQLENBQWV0RixTQUFmLEdBQTJCQSxTQUEzQjtBQUNBcUYsTUFBTSxDQUFDQyxPQUFQLENBQWVDLE9BQWYsR0FBeUJ2RixTQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5jb25zdCBIZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBBc3NvY2lhdGlvbiA9IHJlcXVpcmUoJy4vYmFzZScpO1xuY29uc3QgT3AgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMnKTtcblxuLyoqXG4gKiBPbmUtdG8tb25lIGFzc29jaWF0aW9uXG4gKlxuICogSW4gdGhlIEFQSSByZWZlcmVuY2UgYmVsb3csIGFkZCB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRpb24gdG8gdGhlIG1ldGhvZCwgZS5nLiBmb3IgYFVzZXIuYmVsb25nc1RvKFByb2plY3QpYCB0aGUgZ2V0dGVyIHdpbGwgYmUgYHVzZXIuZ2V0UHJvamVjdCgpYC5cbiAqXG4gKiBAc2VlIHtAbGluayBNb2RlbC5iZWxvbmdzVG99XG4gKi9cbmNsYXNzIEJlbG9uZ3NUbyBleHRlbmRzIEFzc29jaWF0aW9uIHtcbiAgY29uc3RydWN0b3Ioc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihzb3VyY2UsIHRhcmdldCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLmFzc29jaWF0aW9uVHlwZSA9ICdCZWxvbmdzVG8nO1xuICAgIHRoaXMuaXNTaW5nbGVBc3NvY2lhdGlvbiA9IHRydWU7XG4gICAgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlID0ge307XG5cbiAgICBpZiAodGhpcy5hcykge1xuICAgICAgdGhpcy5pc0FsaWFzZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vcHRpb25zLm5hbWUgPSB7XG4gICAgICAgIHNpbmd1bGFyOiB0aGlzLmFzXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzID0gdGhpcy50YXJnZXQub3B0aW9ucy5uYW1lLnNpbmd1bGFyO1xuICAgICAgdGhpcy5vcHRpb25zLm5hbWUgPSB0aGlzLnRhcmdldC5vcHRpb25zLm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNPYmplY3QodGhpcy5vcHRpb25zLmZvcmVpZ25LZXkpKSB7XG4gICAgICB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUgPSB0aGlzLm9wdGlvbnMuZm9yZWlnbktleTtcbiAgICAgIHRoaXMuZm9yZWlnbktleSA9IHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZS5uYW1lIHx8IHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZS5maWVsZE5hbWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZm9yZWlnbktleSkge1xuICAgICAgdGhpcy5mb3JlaWduS2V5ID0gdGhpcy5vcHRpb25zLmZvcmVpZ25LZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZvcmVpZ25LZXkpIHtcbiAgICAgIHRoaXMuZm9yZWlnbktleSA9IFV0aWxzLmNhbWVsaXplKFxuICAgICAgICBbXG4gICAgICAgICAgdGhpcy5hcyxcbiAgICAgICAgICB0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXG4gICAgICAgIF0uam9pbignXycpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaWRlbnRpZmllciA9IHRoaXMuZm9yZWlnbktleTtcbiAgICBpZiAodGhpcy5zb3VyY2UucmF3QXR0cmlidXRlc1t0aGlzLmlkZW50aWZpZXJdKSB7XG4gICAgICB0aGlzLmlkZW50aWZpZXJGaWVsZCA9IHRoaXMuc291cmNlLnJhd0F0dHJpYnV0ZXNbdGhpcy5pZGVudGlmaWVyXS5maWVsZCB8fCB0aGlzLmlkZW50aWZpZXI7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLnRhcmdldEtleVxuICAgICAgJiYgIXRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy5vcHRpb25zLnRhcmdldEtleV1cbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhdHRyaWJ1dGUgXCIke3RoaXMub3B0aW9ucy50YXJnZXRLZXl9XCIgcGFzc2VkIGFzIHRhcmdldEtleSwgZGVmaW5lIHRoaXMgYXR0cmlidXRlIG9uIG1vZGVsIFwiJHt0aGlzLnRhcmdldC5uYW1lfVwiIGZpcnN0YCk7XG4gICAgfVxuXG4gICAgdGhpcy50YXJnZXRLZXkgPSB0aGlzLm9wdGlvbnMudGFyZ2V0S2V5IHx8IHRoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGU7XG4gICAgdGhpcy50YXJnZXRLZXlGaWVsZCA9IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy50YXJnZXRLZXldLmZpZWxkIHx8IHRoaXMudGFyZ2V0S2V5O1xuICAgIHRoaXMudGFyZ2V0S2V5SXNQcmltYXJ5ID0gdGhpcy50YXJnZXRLZXkgPT09IHRoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGU7XG4gICAgdGhpcy50YXJnZXRJZGVudGlmaWVyID0gdGhpcy50YXJnZXRLZXk7XG5cbiAgICB0aGlzLmFzc29jaWF0aW9uQWNjZXNzb3IgPSB0aGlzLmFzO1xuICAgIHRoaXMub3B0aW9ucy51c2VIb29rcyA9IG9wdGlvbnMudXNlSG9va3M7XG5cbiAgICAvLyBHZXQgc2luZ3VsYXIgbmFtZSwgdHJ5aW5nIHRvIHVwcGVyY2FzZSB0aGUgZmlyc3QgbGV0dGVyLCB1bmxlc3MgdGhlIG1vZGVsIGZvcmJpZHMgaXRcbiAgICBjb25zdCBzaW5ndWxhciA9IF8udXBwZXJGaXJzdCh0aGlzLm9wdGlvbnMubmFtZS5zaW5ndWxhcik7XG5cbiAgICB0aGlzLmFjY2Vzc29ycyA9IHtcbiAgICAgIGdldDogYGdldCR7c2luZ3VsYXJ9YCxcbiAgICAgIHNldDogYHNldCR7c2luZ3VsYXJ9YCxcbiAgICAgIGNyZWF0ZTogYGNyZWF0ZSR7c2luZ3VsYXJ9YFxuICAgIH07XG4gIH1cblxuICAvLyB0aGUgaWQgaXMgaW4gdGhlIHNvdXJjZSB0YWJsZVxuICBfaW5qZWN0QXR0cmlidXRlcygpIHtcbiAgICBjb25zdCBuZXdBdHRyaWJ1dGVzID0ge307XG5cbiAgICBuZXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0gPSBfLmRlZmF1bHRzKHt9LCB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUsIHtcbiAgICAgIHR5cGU6IHRoaXMub3B0aW9ucy5rZXlUeXBlIHx8IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy50YXJnZXRLZXldLnR5cGUsXG4gICAgICBhbGxvd051bGw6IHRydWVcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29uc3RyYWludHMgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZS5yYXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0gfHwgbmV3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldO1xuICAgICAgdGhpcy5vcHRpb25zLm9uRGVsZXRlID0gdGhpcy5vcHRpb25zLm9uRGVsZXRlIHx8IChzb3VyY2UuYWxsb3dOdWxsID8gJ1NFVCBOVUxMJyA6ICdOTyBBQ1RJT04nKTtcbiAgICAgIHRoaXMub3B0aW9ucy5vblVwZGF0ZSA9IHRoaXMub3B0aW9ucy5vblVwZGF0ZSB8fCAnQ0FTQ0FERSc7XG4gICAgfVxuXG4gICAgSGVscGVycy5hZGRGb3JlaWduS2V5Q29uc3RyYWludHMobmV3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldLCB0aGlzLnRhcmdldCwgdGhpcy5zb3VyY2UsIHRoaXMub3B0aW9ucywgdGhpcy50YXJnZXRLZXlGaWVsZCk7XG4gICAgVXRpbHMubWVyZ2VEZWZhdWx0cyh0aGlzLnNvdXJjZS5yYXdBdHRyaWJ1dGVzLCBuZXdBdHRyaWJ1dGVzKTtcblxuICAgIHRoaXMuc291cmNlLnJlZnJlc2hBdHRyaWJ1dGVzKCk7XG5cbiAgICB0aGlzLmlkZW50aWZpZXJGaWVsZCA9IHRoaXMuc291cmNlLnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XS5maWVsZCB8fCB0aGlzLmZvcmVpZ25LZXk7XG5cbiAgICBIZWxwZXJzLmNoZWNrTmFtaW5nQ29sbGlzaW9uKHRoaXMpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtaXhpbihvYmopIHtcbiAgICBjb25zdCBtZXRob2RzID0gWydnZXQnLCAnc2V0JywgJ2NyZWF0ZSddO1xuXG4gICAgSGVscGVycy5taXhpbk1ldGhvZHModGhpcywgb2JqLCBtZXRob2RzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFzc29jaWF0ZWQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZWx8QXJyYXk8TW9kZWw+fSBpbnN0YW5jZXMgc291cmNlIGluc3RhbmNlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICBbb3B0aW9uc10gZmluZCBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IFtvcHRpb25zLnNjb3BlXSAgQXBwbHkgYSBzY29wZSBvbiB0aGUgcmVsYXRlZCBtb2RlbCwgb3IgcmVtb3ZlIGl0cyBkZWZhdWx0IHNjb3BlIGJ5IHBhc3NpbmcgZmFsc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgIFtvcHRpb25zLnNjaGVtYV0gQXBwbHkgYSBzY2hlbWEgb24gdGhlIHJlbGF0ZWQgbW9kZWxcbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuZmluZE9uZX0gZm9yIGEgZnVsbCBleHBsYW5hdGlvbiBvZiBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsPn1cbiAgICovXG4gIGdldChpbnN0YW5jZXMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB3aGVyZSA9IHt9O1xuICAgIGxldCBUYXJnZXQgPSB0aGlzLnRhcmdldDtcbiAgICBsZXQgaW5zdGFuY2U7XG5cbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc2NvcGUnKSkge1xuICAgICAgaWYgKCFvcHRpb25zLnNjb3BlKSB7XG4gICAgICAgIFRhcmdldCA9IFRhcmdldC51bnNjb3BlZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgVGFyZ2V0ID0gVGFyZ2V0LnNjb3BlKG9wdGlvbnMuc2NvcGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NjaGVtYScpKSB7XG4gICAgICBUYXJnZXQgPSBUYXJnZXQuc2NoZW1hKG9wdGlvbnMuc2NoZW1hLCBvcHRpb25zLnNjaGVtYURlbGltaXRlcik7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGluc3RhbmNlcykpIHtcbiAgICAgIGluc3RhbmNlID0gaW5zdGFuY2VzO1xuICAgICAgaW5zdGFuY2VzID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZXMpIHtcbiAgICAgIHdoZXJlW3RoaXMudGFyZ2V0S2V5XSA9IHtcbiAgICAgICAgW09wLmluXTogaW5zdGFuY2VzLm1hcChpbnN0YW5jZSA9PiBpbnN0YW5jZS5nZXQodGhpcy5mb3JlaWduS2V5KSlcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnRhcmdldEtleUlzUHJpbWFyeSAmJiAhb3B0aW9ucy53aGVyZSkge1xuICAgICAgICByZXR1cm4gVGFyZ2V0LmZpbmRCeVBrKGluc3RhbmNlLmdldCh0aGlzLmZvcmVpZ25LZXkpLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHdoZXJlW3RoaXMudGFyZ2V0S2V5XSA9IGluc3RhbmNlLmdldCh0aGlzLmZvcmVpZ25LZXkpO1xuICAgICAgb3B0aW9ucy5saW1pdCA9IG51bGw7XG4gICAgfVxuXG4gICAgb3B0aW9ucy53aGVyZSA9IG9wdGlvbnMud2hlcmUgP1xuICAgICAgeyBbT3AuYW5kXTogW3doZXJlLCBvcHRpb25zLndoZXJlXSB9IDpcbiAgICAgIHdoZXJlO1xuXG4gICAgaWYgKGluc3RhbmNlcykge1xuICAgICAgcmV0dXJuIFRhcmdldC5maW5kQWxsKG9wdGlvbnMpLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIGluc3RhbmNlcykge1xuICAgICAgICAgIHJlc3VsdFtpbnN0YW5jZS5nZXQodGhpcy5mb3JlaWduS2V5LCB7IHJhdzogdHJ1ZSB9KV0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpbnN0YW5jZSBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgcmVzdWx0W2luc3RhbmNlLmdldCh0aGlzLnRhcmdldEtleSwgeyByYXc6IHRydWUgfSldID0gaW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFRhcmdldC5maW5kT25lKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgYXNzb2NpYXRlZCBtb2RlbC5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2UgdGhlIHNvdXJjZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gez88TW9kZWw+fHN0cmluZ3xudW1iZXJ9IFthc3NvY2lhdGVkSW5zdGFuY2VdIEFuIHBlcnNpc3RlZCBpbnN0YW5jZSBvciB0aGUgcHJpbWFyeSBrZXkgb2YgYW4gaW5zdGFuY2UgdG8gYXNzb2NpYXRlIHdpdGggdGhpcy4gUGFzcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgdG8gcmVtb3ZlIHRoZSBhc3NvY2lhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBvcHRpb25zIHBhc3NlZCB0byBgdGhpcy5zYXZlYFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnNhdmU9dHJ1ZV0gU2tpcCBzYXZpbmcgdGhpcyBhZnRlciBzZXR0aW5nIHRoZSBmb3JlaWduIGtleSBpZiBmYWxzZS5cbiAgICpcbiAgICogIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgc2V0KHNvdXJjZUluc3RhbmNlLCBhc3NvY2lhdGVkSW5zdGFuY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCB2YWx1ZSA9IGFzc29jaWF0ZWRJbnN0YW5jZTtcblxuICAgIGlmIChhc3NvY2lhdGVkSW5zdGFuY2UgaW5zdGFuY2VvZiB0aGlzLnRhcmdldCkge1xuICAgICAgdmFsdWUgPSBhc3NvY2lhdGVkSW5zdGFuY2VbdGhpcy50YXJnZXRLZXldO1xuICAgIH1cblxuICAgIHNvdXJjZUluc3RhbmNlLnNldCh0aGlzLmZvcmVpZ25LZXksIHZhbHVlKTtcblxuICAgIGlmIChvcHRpb25zLnNhdmUgPT09IGZhbHNlKSByZXR1cm47XG5cbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBmaWVsZHM6IFt0aGlzLmZvcmVpZ25LZXldLFxuICAgICAgYWxsb3dOdWxsOiBbdGhpcy5mb3JlaWduS2V5XSxcbiAgICAgIGFzc29jaWF0aW9uOiB0cnVlXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICAvLyBwYXNzZXMgdGhlIGNoYW5nZWQgZmllbGQgdG8gc2F2ZSwgc28gb25seSB0aGF0IGZpZWxkIGdldCB1cGRhdGVkLlxuICAgIHJldHVybiBzb3VyY2VJbnN0YW5jZS5zYXZlKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYXNzb2NpYXRlZCBtb2RlbCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggdGhpcy5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2UgdGhlIHNvdXJjZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW3ZhbHVlcz17fV0gdmFsdWVzIHRvIGNyZWF0ZSBhc3NvY2lhdGVkIG1vZGVsIGluc3RhbmNlIHdpdGhcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25zIHBhc3NlZCB0byBgdGFyZ2V0LmNyZWF0ZWAgYW5kIHNldEFzc29jaWF0aW9uLlxuICAgKlxuICAgKiBAc2VlXG4gICAqIHtAbGluayBNb2RlbCNjcmVhdGV9ICBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uIG9mIG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWw+fSBUaGUgY3JlYXRlZCB0YXJnZXQgbW9kZWxcbiAgICovXG4gIGNyZWF0ZShzb3VyY2VJbnN0YW5jZSwgdmFsdWVzLCBvcHRpb25zKSB7XG4gICAgdmFsdWVzID0gdmFsdWVzIHx8IHt9O1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0LmNyZWF0ZSh2YWx1ZXMsIG9wdGlvbnMpXG4gICAgICAudGhlbihuZXdBc3NvY2lhdGVkT2JqZWN0ID0+IHNvdXJjZUluc3RhbmNlW3RoaXMuYWNjZXNzb3JzLnNldF0obmV3QXNzb2NpYXRlZE9iamVjdCwgb3B0aW9ucylcbiAgICAgICAgLnRoZW4oKCkgPT4gbmV3QXNzb2NpYXRlZE9iamVjdClcbiAgICAgICk7XG4gIH1cblxuICB2ZXJpZnlBc3NvY2lhdGlvbkFsaWFzKGFsaWFzKSB7XG4gICAgaWYgKHR5cGVvZiBhbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzID09PSBhbGlhcztcbiAgICB9XG5cbiAgICBpZiAoYWxpYXMgJiYgYWxpYXMuc2luZ3VsYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzID09PSBhbGlhcy5zaW5ndWxhcjtcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXMuaXNBbGlhc2VkO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmVsb25nc1RvO1xubW9kdWxlLmV4cG9ydHMuQmVsb25nc1RvID0gQmVsb25nc1RvO1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEJlbG9uZ3NUbztcbiJdfQ== \ No newline at end of file diff --git a/dist/associations/has-many.js b/dist/associations/has-many.js index 7a96087..d848a36 100644 --- a/dist/associations/has-many.js +++ b/dist/associations/has-many.js @@ -6,15 +6,19 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const Utils = require('./../utils'); @@ -35,17 +39,17 @@ const Op = require('../operators'); */ -let HasMany = -/*#__PURE__*/ -function (_Association) { +let HasMany = /*#__PURE__*/function (_Association) { _inherits(HasMany, _Association); + var _super = _createSuper(HasMany); + function HasMany(source, target, options) { var _this; _classCallCheck(this, HasMany); - _this = _possibleConstructorReturn(this, _getPrototypeOf(HasMany).call(this, source, target, options)); + _this = _super.call(this, source, target, options); _this.associationType = 'HasMany'; _this.targetAssociation = null; _this.sequelize = source.sequelize; @@ -492,4 +496,4 @@ function (_Association) { module.exports = HasMany; module.exports.HasMany = HasMany; module.exports.default = HasMany; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvaGFzLW1hbnkuanMiXSwibmFtZXMiOlsiVXRpbHMiLCJyZXF1aXJlIiwiSGVscGVycyIsIl8iLCJBc3NvY2lhdGlvbiIsIk9wIiwiSGFzTWFueSIsInNvdXJjZSIsInRhcmdldCIsIm9wdGlvbnMiLCJhc3NvY2lhdGlvblR5cGUiLCJ0YXJnZXRBc3NvY2lhdGlvbiIsInNlcXVlbGl6ZSIsImlzTXVsdGlBc3NvY2lhdGlvbiIsImZvcmVpZ25LZXlBdHRyaWJ1dGUiLCJ0aHJvdWdoIiwiRXJyb3IiLCJpc1NlbGZBc3NvY2lhdGlvbiIsImFzIiwiaXNBbGlhc2VkIiwiaXNQbGFpbk9iamVjdCIsIm5hbWUiLCJwbHVyYWwiLCJzaW5ndWxhciIsInNpbmd1bGFyaXplIiwiaXNPYmplY3QiLCJmb3JlaWduS2V5IiwiZmllbGROYW1lIiwiY2FtZWxpemUiLCJwcmltYXJ5S2V5QXR0cmlidXRlIiwiam9pbiIsInJhd0F0dHJpYnV0ZXMiLCJpZGVudGlmaWVyRmllbGQiLCJmaWVsZCIsImZvcmVpZ25LZXlGaWVsZCIsInNvdXJjZUtleSIsInNvdXJjZUtleUF0dHJpYnV0ZSIsInNvdXJjZUtleUZpZWxkIiwicHJpbWFyeUtleUZpZWxkIiwidXBwZXJGaXJzdCIsImFzc29jaWF0aW9uQWNjZXNzb3IiLCJhY2Nlc3NvcnMiLCJnZXQiLCJzZXQiLCJhZGRNdWx0aXBsZSIsImFkZCIsImNyZWF0ZSIsInJlbW92ZSIsInJlbW92ZU11bHRpcGxlIiwiaGFzU2luZ2xlIiwiaGFzQWxsIiwiY291bnQiLCJuZXdBdHRyaWJ1dGVzIiwiY29uc3RyYWludE9wdGlvbnMiLCJjbG9uZSIsImRlZmF1bHRzIiwidHlwZSIsImtleVR5cGUiLCJhbGxvd051bGwiLCJjb25zdHJhaW50cyIsIm9uRGVsZXRlIiwib25VcGRhdGUiLCJhZGRGb3JlaWduS2V5Q29uc3RyYWludHMiLCJtZXJnZURlZmF1bHRzIiwicmVmcmVzaEF0dHJpYnV0ZXMiLCJjaGVja05hbWluZ0NvbGxpc2lvbiIsIm9iaiIsIm1ldGhvZHMiLCJhbGlhc2VzIiwibWl4aW5NZXRob2RzIiwiaW5zdGFuY2VzIiwid2hlcmUiLCJNb2RlbCIsImluc3RhbmNlIiwidmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwidW5kZWZpbmVkIiwiT2JqZWN0IiwiYXNzaWduIiwic2NvcGUiLCJtYXAiLCJyYXciLCJsaW1pdCIsImxlbmd0aCIsImdyb3VwZWRMaW1pdCIsIm9uIiwiaW4iLCJhbmQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ1bnNjb3BlZCIsInNjaGVtYSIsInNjaGVtYURlbGltaXRlciIsImZpbmRBbGwiLCJ0aGVuIiwicmVzdWx0cyIsInJlc3VsdCIsInB1c2giLCJjbG9uZURlZXAiLCJhdHRyaWJ1dGVzIiwiZm4iLCJjb2wiLCJwbGFpbiIsInBhcnNlSW50Iiwic291cmNlSW5zdGFuY2UiLCJ0YXJnZXRJbnN0YW5jZXMiLCJvciIsImFzc29jaWF0ZWRPYmplY3RzIiwidG9JbnN0YW5jZUFycmF5Iiwib2xkQXNzb2NpYXRpb25zIiwicHJvbWlzZXMiLCJvYnNvbGV0ZUFzc29jaWF0aW9ucyIsImZpbHRlciIsIm9sZCIsImZpbmQiLCJ1bmFzc29jaWF0ZWRPYmplY3RzIiwidXBkYXRlV2hlcmUiLCJ1cGRhdGUiLCJhc3NvY2lhdGVkT2JqZWN0IiwidW5hc3NvY2lhdGVkT2JqZWN0IiwiUHJvbWlzZSIsImFsbCIsInJldHVybiIsInJlc29sdmUiLCJ0YXJnZXRJbnN0YW5jZSIsImZpZWxkcyIsImF0dHJpYnV0ZSIsImtleXMiLCJhbGlhcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBRCxDQUFyQjs7QUFDQSxNQUFNQyxPQUFPLEdBQUdELE9BQU8sQ0FBQyxXQUFELENBQXZCOztBQUNBLE1BQU1FLENBQUMsR0FBR0YsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUcsV0FBVyxHQUFHSCxPQUFPLENBQUMsUUFBRCxDQUEzQjs7QUFDQSxNQUFNSSxFQUFFLEdBQUdKLE9BQU8sQ0FBQyxjQUFELENBQWxCO0FBRUE7Ozs7Ozs7Ozs7SUFRTUssTzs7Ozs7QUFDSixtQkFBWUMsTUFBWixFQUFvQkMsTUFBcEIsRUFBNEJDLE9BQTVCLEVBQXFDO0FBQUE7O0FBQUE7O0FBQ25DLGlGQUFNRixNQUFOLEVBQWNDLE1BQWQsRUFBc0JDLE9BQXRCO0FBRUEsVUFBS0MsZUFBTCxHQUF1QixTQUF2QjtBQUNBLFVBQUtDLGlCQUFMLEdBQXlCLElBQXpCO0FBQ0EsVUFBS0MsU0FBTCxHQUFpQkwsTUFBTSxDQUFDSyxTQUF4QjtBQUNBLFVBQUtDLGtCQUFMLEdBQTBCLElBQTFCO0FBQ0EsVUFBS0MsbUJBQUwsR0FBMkIsRUFBM0I7O0FBRUEsUUFBSSxNQUFLTCxPQUFMLENBQWFNLE9BQWpCLEVBQTBCO0FBQ3hCLFlBQU0sSUFBSUMsS0FBSixDQUFVLDRFQUFWLENBQU47QUFDRDtBQUVEOzs7OztBQUdBLFFBQUksTUFBS0MsaUJBQVQsRUFBNEI7QUFDMUIsWUFBS04saUJBQUw7QUFDRDs7QUFFRCxRQUFJLE1BQUtPLEVBQVQsRUFBYTtBQUNYLFlBQUtDLFNBQUwsR0FBaUIsSUFBakI7O0FBRUEsVUFBSWhCLENBQUMsQ0FBQ2lCLGFBQUYsQ0FBZ0IsTUFBS0YsRUFBckIsQ0FBSixFQUE4QjtBQUM1QixjQUFLVCxPQUFMLENBQWFZLElBQWIsR0FBb0IsTUFBS0gsRUFBekI7QUFDQSxjQUFLQSxFQUFMLEdBQVUsTUFBS0EsRUFBTCxDQUFRSSxNQUFsQjtBQUNELE9BSEQsTUFHTztBQUNMLGNBQUtiLE9BQUwsQ0FBYVksSUFBYixHQUFvQjtBQUNsQkMsVUFBQUEsTUFBTSxFQUFFLE1BQUtKLEVBREs7QUFFbEJLLFVBQUFBLFFBQVEsRUFBRXZCLEtBQUssQ0FBQ3dCLFdBQU4sQ0FBa0IsTUFBS04sRUFBdkI7QUFGUSxTQUFwQjtBQUlEO0FBQ0YsS0FaRCxNQVlPO0FBQ0wsWUFBS0EsRUFBTCxHQUFVLE1BQUtWLE1BQUwsQ0FBWUMsT0FBWixDQUFvQlksSUFBcEIsQ0FBeUJDLE1BQW5DO0FBQ0EsWUFBS2IsT0FBTCxDQUFhWSxJQUFiLEdBQW9CLE1BQUtiLE1BQUwsQ0FBWUMsT0FBWixDQUFvQlksSUFBeEM7QUFDRDtBQUVEOzs7OztBQUdBLFFBQUlsQixDQUFDLENBQUNzQixRQUFGLENBQVcsTUFBS2hCLE9BQUwsQ0FBYWlCLFVBQXhCLENBQUosRUFBeUM7QUFDdkMsWUFBS1osbUJBQUwsR0FBMkIsTUFBS0wsT0FBTCxDQUFhaUIsVUFBeEM7QUFDQSxZQUFLQSxVQUFMLEdBQWtCLE1BQUtaLG1CQUFMLENBQXlCTyxJQUF6QixJQUFpQyxNQUFLUCxtQkFBTCxDQUF5QmEsU0FBNUU7QUFDRCxLQUhELE1BR08sSUFBSSxNQUFLbEIsT0FBTCxDQUFhaUIsVUFBakIsRUFBNkI7QUFDbEMsWUFBS0EsVUFBTCxHQUFrQixNQUFLakIsT0FBTCxDQUFhaUIsVUFBL0I7QUFDRDs7QUFFRCxRQUFJLENBQUMsTUFBS0EsVUFBVixFQUFzQjtBQUNwQixZQUFLQSxVQUFMLEdBQWtCMUIsS0FBSyxDQUFDNEIsUUFBTixDQUNoQixDQUNFLE1BQUtyQixNQUFMLENBQVlFLE9BQVosQ0FBb0JZLElBQXBCLENBQXlCRSxRQUQzQixFQUVFLE1BQUtoQixNQUFMLENBQVlzQixtQkFGZCxFQUdFQyxJQUhGLENBR08sR0FIUCxDQURnQixDQUFsQjtBQU1EOztBQUVELFFBQUksTUFBS3RCLE1BQUwsQ0FBWXVCLGFBQVosQ0FBMEIsTUFBS0wsVUFBL0IsQ0FBSixFQUFnRDtBQUM5QyxZQUFLTSxlQUFMLEdBQXVCLE1BQUt4QixNQUFMLENBQVl1QixhQUFaLENBQTBCLE1BQUtMLFVBQS9CLEVBQTJDTyxLQUEzQyxJQUFvRCxNQUFLUCxVQUFoRjtBQUNBLFlBQUtRLGVBQUwsR0FBdUIsTUFBSzFCLE1BQUwsQ0FBWXVCLGFBQVosQ0FBMEIsTUFBS0wsVUFBL0IsRUFBMkNPLEtBQTNDLElBQW9ELE1BQUtQLFVBQWhGO0FBQ0Q7QUFFRDs7Ozs7QUFHQSxVQUFLUyxTQUFMLEdBQWlCLE1BQUsxQixPQUFMLENBQWEwQixTQUFiLElBQTBCLE1BQUs1QixNQUFMLENBQVlzQixtQkFBdkQ7O0FBRUEsUUFBSSxNQUFLdEIsTUFBTCxDQUFZd0IsYUFBWixDQUEwQixNQUFLSSxTQUEvQixDQUFKLEVBQStDO0FBQzdDLFlBQUtDLGtCQUFMLEdBQTBCLE1BQUtELFNBQS9CO0FBQ0EsWUFBS0UsY0FBTCxHQUFzQixNQUFLOUIsTUFBTCxDQUFZd0IsYUFBWixDQUEwQixNQUFLSSxTQUEvQixFQUEwQ0YsS0FBMUMsSUFBbUQsTUFBS0UsU0FBOUU7QUFDRCxLQUhELE1BR087QUFDTCxZQUFLQyxrQkFBTCxHQUEwQixNQUFLN0IsTUFBTCxDQUFZc0IsbUJBQXRDO0FBQ0EsWUFBS1EsY0FBTCxHQUFzQixNQUFLOUIsTUFBTCxDQUFZK0IsZUFBbEM7QUFDRCxLQXhFa0MsQ0EwRW5DO0FBQ0E7OztBQUNBLFVBQU1oQixNQUFNLEdBQUduQixDQUFDLENBQUNvQyxVQUFGLENBQWEsTUFBSzlCLE9BQUwsQ0FBYVksSUFBYixDQUFrQkMsTUFBL0IsQ0FBZjs7QUFDQSxVQUFNQyxRQUFRLEdBQUdwQixDQUFDLENBQUNvQyxVQUFGLENBQWEsTUFBSzlCLE9BQUwsQ0FBYVksSUFBYixDQUFrQkUsUUFBL0IsQ0FBakI7O0FBRUEsVUFBS2lCLG1CQUFMLEdBQTJCLE1BQUt0QixFQUFoQztBQUNBLFVBQUt1QixTQUFMLEdBQWlCO0FBQ2ZDLE1BQUFBLEdBQUcsRUFBRyxNQUFLcEIsTUFBTyxFQURIO0FBRWZxQixNQUFBQSxHQUFHLEVBQUcsTUFBS3JCLE1BQU8sRUFGSDtBQUdmc0IsTUFBQUEsV0FBVyxFQUFHLE1BQUt0QixNQUFPLEVBSFg7QUFJZnVCLE1BQUFBLEdBQUcsRUFBRyxNQUFLdEIsUUFBUyxFQUpMO0FBS2Z1QixNQUFBQSxNQUFNLEVBQUcsU0FBUXZCLFFBQVMsRUFMWDtBQU1md0IsTUFBQUEsTUFBTSxFQUFHLFNBQVF4QixRQUFTLEVBTlg7QUFPZnlCLE1BQUFBLGNBQWMsRUFBRyxTQUFRMUIsTUFBTyxFQVBqQjtBQVFmMkIsTUFBQUEsU0FBUyxFQUFHLE1BQUsxQixRQUFTLEVBUlg7QUFTZjJCLE1BQUFBLE1BQU0sRUFBRyxNQUFLNUIsTUFBTyxFQVROO0FBVWY2QixNQUFBQSxLQUFLLEVBQUcsUUFBTzdCLE1BQU87QUFWUCxLQUFqQjtBQWhGbUM7QUE0RnBDLEcsQ0FFRDtBQUNBOzs7Ozt3Q0FDb0I7QUFDbEIsWUFBTThCLGFBQWEsR0FBRyxFQUF0QixDQURrQixDQUVsQjs7QUFDQSxZQUFNQyxpQkFBaUIsR0FBR2xELENBQUMsQ0FBQ21ELEtBQUYsQ0FBUSxLQUFLN0MsT0FBYixDQUExQjs7QUFFQTJDLE1BQUFBLGFBQWEsQ0FBQyxLQUFLMUIsVUFBTixDQUFiLEdBQWlDdkIsQ0FBQyxDQUFDb0QsUUFBRixDQUFXLEVBQVgsRUFBZSxLQUFLekMsbUJBQXBCLEVBQXlDO0FBQ3hFMEMsUUFBQUEsSUFBSSxFQUFFLEtBQUsvQyxPQUFMLENBQWFnRCxPQUFiLElBQXdCLEtBQUtsRCxNQUFMLENBQVl3QixhQUFaLENBQTBCLEtBQUtLLGtCQUEvQixFQUFtRG9CLElBRFQ7QUFFeEVFLFFBQUFBLFNBQVMsRUFBRTtBQUY2RCxPQUF6QyxDQUFqQzs7QUFLQSxVQUFJLEtBQUtqRCxPQUFMLENBQWFrRCxXQUFiLEtBQTZCLEtBQWpDLEVBQXdDO0FBQ3RDLGNBQU1uRCxNQUFNLEdBQUcsS0FBS0EsTUFBTCxDQUFZdUIsYUFBWixDQUEwQixLQUFLTCxVQUEvQixLQUE4QzBCLGFBQWEsQ0FBQyxLQUFLMUIsVUFBTixDQUExRTtBQUNBMkIsUUFBQUEsaUJBQWlCLENBQUNPLFFBQWxCLEdBQTZCUCxpQkFBaUIsQ0FBQ08sUUFBbEIsS0FBK0JwRCxNQUFNLENBQUNrRCxTQUFQLEdBQW1CLFVBQW5CLEdBQWdDLFNBQS9ELENBQTdCO0FBQ0FMLFFBQUFBLGlCQUFpQixDQUFDUSxRQUFsQixHQUE2QlIsaUJBQWlCLENBQUNRLFFBQWxCLElBQThCLFNBQTNEO0FBQ0Q7O0FBRUQzRCxNQUFBQSxPQUFPLENBQUM0RCx3QkFBUixDQUFpQ1YsYUFBYSxDQUFDLEtBQUsxQixVQUFOLENBQTlDLEVBQWlFLEtBQUtuQixNQUF0RSxFQUE4RSxLQUFLQyxNQUFuRixFQUEyRjZDLGlCQUEzRixFQUE4RyxLQUFLaEIsY0FBbkg7QUFDQXJDLE1BQUFBLEtBQUssQ0FBQytELGFBQU4sQ0FBb0IsS0FBS3ZELE1BQUwsQ0FBWXVCLGFBQWhDLEVBQStDcUIsYUFBL0M7QUFFQSxXQUFLNUMsTUFBTCxDQUFZd0QsaUJBQVo7QUFDQSxXQUFLekQsTUFBTCxDQUFZeUQsaUJBQVo7QUFFQSxXQUFLaEMsZUFBTCxHQUF1QixLQUFLeEIsTUFBTCxDQUFZdUIsYUFBWixDQUEwQixLQUFLTCxVQUEvQixFQUEyQ08sS0FBM0MsSUFBb0QsS0FBS1AsVUFBaEY7QUFDQSxXQUFLUSxlQUFMLEdBQXVCLEtBQUsxQixNQUFMLENBQVl1QixhQUFaLENBQTBCLEtBQUtMLFVBQS9CLEVBQTJDTyxLQUEzQyxJQUFvRCxLQUFLUCxVQUFoRjtBQUNBLFdBQUtXLGNBQUwsR0FBc0IsS0FBSzlCLE1BQUwsQ0FBWXdCLGFBQVosQ0FBMEIsS0FBS0ksU0FBL0IsRUFBMENGLEtBQTFDLElBQW1ELEtBQUtFLFNBQTlFO0FBRUFqQyxNQUFBQSxPQUFPLENBQUMrRCxvQkFBUixDQUE2QixJQUE3QjtBQUVBLGFBQU8sSUFBUDtBQUNEOzs7MEJBRUtDLEcsRUFBSztBQUNULFlBQU1DLE9BQU8sR0FBRyxDQUFDLEtBQUQsRUFBUSxPQUFSLEVBQWlCLFdBQWpCLEVBQThCLFFBQTlCLEVBQXdDLEtBQXhDLEVBQStDLEtBQS9DLEVBQXNELGFBQXRELEVBQXFFLFFBQXJFLEVBQStFLGdCQUEvRSxFQUFpRyxRQUFqRyxDQUFoQjtBQUNBLFlBQU1DLE9BQU8sR0FBRztBQUNkbkIsUUFBQUEsU0FBUyxFQUFFLEtBREc7QUFFZEMsUUFBQUEsTUFBTSxFQUFFLEtBRk07QUFHZE4sUUFBQUEsV0FBVyxFQUFFLEtBSEM7QUFJZEksUUFBQUEsY0FBYyxFQUFFO0FBSkYsT0FBaEI7QUFPQTlDLE1BQUFBLE9BQU8sQ0FBQ21FLFlBQVIsQ0FBcUIsSUFBckIsRUFBMkJILEdBQTNCLEVBQWdDQyxPQUFoQyxFQUF5Q0MsT0FBekM7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozt3QkFjSUUsUyxFQUFXN0QsT0FBTyxHQUFHLEUsRUFBSTtBQUMzQixZQUFNOEQsS0FBSyxHQUFHLEVBQWQ7QUFFQSxVQUFJQyxLQUFLLEdBQUcsS0FBS2hFLE1BQWpCO0FBQ0EsVUFBSWlFLFFBQUo7QUFDQSxVQUFJQyxNQUFKOztBQUVBLFVBQUksQ0FBQ0MsS0FBSyxDQUFDQyxPQUFOLENBQWNOLFNBQWQsQ0FBTCxFQUErQjtBQUM3QkcsUUFBQUEsUUFBUSxHQUFHSCxTQUFYO0FBQ0FBLFFBQUFBLFNBQVMsR0FBR08sU0FBWjtBQUNEOztBQUVEcEUsTUFBQUEsT0FBTyxHQUFHcUUsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQnRFLE9BQWxCLENBQVY7O0FBRUEsVUFBSSxLQUFLdUUsS0FBVCxFQUFnQjtBQUNkRixRQUFBQSxNQUFNLENBQUNDLE1BQVAsQ0FBY1IsS0FBZCxFQUFxQixLQUFLUyxLQUExQjtBQUNEOztBQUVELFVBQUlWLFNBQUosRUFBZTtBQUNiSSxRQUFBQSxNQUFNLEdBQUdKLFNBQVMsQ0FBQ1csR0FBVixDQUFjUixRQUFRLElBQUlBLFFBQVEsQ0FBQy9CLEdBQVQsQ0FBYSxLQUFLUCxTQUFsQixFQUE2QjtBQUFFK0MsVUFBQUEsR0FBRyxFQUFFO0FBQVAsU0FBN0IsQ0FBMUIsQ0FBVDs7QUFFQSxZQUFJekUsT0FBTyxDQUFDMEUsS0FBUixJQUFpQmIsU0FBUyxDQUFDYyxNQUFWLEdBQW1CLENBQXhDLEVBQTJDO0FBQ3pDM0UsVUFBQUEsT0FBTyxDQUFDNEUsWUFBUixHQUF1QjtBQUNyQkYsWUFBQUEsS0FBSyxFQUFFMUUsT0FBTyxDQUFDMEUsS0FETTtBQUVyQkcsWUFBQUEsRUFBRSxFQUFFLElBRmlCO0FBRVg7QUFDVlosWUFBQUE7QUFIcUIsV0FBdkI7QUFNQSxpQkFBT2pFLE9BQU8sQ0FBQzBFLEtBQWY7QUFDRCxTQVJELE1BUU87QUFDTFosVUFBQUEsS0FBSyxDQUFDLEtBQUs3QyxVQUFOLENBQUwsR0FBeUI7QUFDdkIsYUFBQ3JCLEVBQUUsQ0FBQ2tGLEVBQUosR0FBU2I7QUFEYyxXQUF6QjtBQUdBLGlCQUFPakUsT0FBTyxDQUFDNEUsWUFBZjtBQUNEO0FBQ0YsT0FqQkQsTUFpQk87QUFDTGQsUUFBQUEsS0FBSyxDQUFDLEtBQUs3QyxVQUFOLENBQUwsR0FBeUIrQyxRQUFRLENBQUMvQixHQUFULENBQWEsS0FBS1AsU0FBbEIsRUFBNkI7QUFBRStDLFVBQUFBLEdBQUcsRUFBRTtBQUFQLFNBQTdCLENBQXpCO0FBQ0Q7O0FBRUR6RSxNQUFBQSxPQUFPLENBQUM4RCxLQUFSLEdBQWdCOUQsT0FBTyxDQUFDOEQsS0FBUixHQUNkO0FBQUUsU0FBQ2xFLEVBQUUsQ0FBQ21GLEdBQUosR0FBVSxDQUFDakIsS0FBRCxFQUFROUQsT0FBTyxDQUFDOEQsS0FBaEI7QUFBWixPQURjLEdBRWRBLEtBRkY7O0FBSUEsVUFBSU8sTUFBTSxDQUFDVyxTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNsRixPQUFyQyxFQUE4QyxPQUE5QyxDQUFKLEVBQTREO0FBQzFELFlBQUksQ0FBQ0EsT0FBTyxDQUFDdUUsS0FBYixFQUFvQjtBQUNsQlIsVUFBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUNvQixRQUFOLEVBQVI7QUFDRCxTQUZELE1BRU87QUFDTHBCLFVBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDUSxLQUFOLENBQVl2RSxPQUFPLENBQUN1RSxLQUFwQixDQUFSO0FBQ0Q7QUFDRjs7QUFFRCxVQUFJRixNQUFNLENBQUNXLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ2xGLE9BQXJDLEVBQThDLFFBQTlDLENBQUosRUFBNkQ7QUFDM0QrRCxRQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3FCLE1BQU4sQ0FBYXBGLE9BQU8sQ0FBQ29GLE1BQXJCLEVBQTZCcEYsT0FBTyxDQUFDcUYsZUFBckMsQ0FBUjtBQUNEOztBQUVELGFBQU90QixLQUFLLENBQUN1QixPQUFOLENBQWN0RixPQUFkLEVBQXVCdUYsSUFBdkIsQ0FBNEJDLE9BQU8sSUFBSTtBQUM1QyxZQUFJeEIsUUFBSixFQUFjLE9BQU93QixPQUFQO0FBRWQsY0FBTUMsTUFBTSxHQUFHLEVBQWY7O0FBQ0EsYUFBSyxNQUFNekIsUUFBWCxJQUF1QkgsU0FBdkIsRUFBa0M7QUFDaEM0QixVQUFBQSxNQUFNLENBQUN6QixRQUFRLENBQUMvQixHQUFULENBQWEsS0FBS1AsU0FBbEIsRUFBNkI7QUFBRStDLFlBQUFBLEdBQUcsRUFBRTtBQUFQLFdBQTdCLENBQUQsQ0FBTixHQUFzRCxFQUF0RDtBQUNEOztBQUVELGFBQUssTUFBTVQsUUFBWCxJQUF1QndCLE9BQXZCLEVBQWdDO0FBQzlCQyxVQUFBQSxNQUFNLENBQUN6QixRQUFRLENBQUMvQixHQUFULENBQWEsS0FBS2hCLFVBQWxCLEVBQThCO0FBQUV3RCxZQUFBQSxHQUFHLEVBQUU7QUFBUCxXQUE5QixDQUFELENBQU4sQ0FBcURpQixJQUFyRCxDQUEwRDFCLFFBQTFEO0FBQ0Q7O0FBRUQsZUFBT3lCLE1BQVA7QUFDRCxPQWJNLENBQVA7QUFjRDtBQUVEOzs7Ozs7Ozs7Ozs7OzBCQVVNekIsUSxFQUFVaEUsTyxFQUFTO0FBQ3ZCQSxNQUFBQSxPQUFPLEdBQUdULEtBQUssQ0FBQ29HLFNBQU4sQ0FBZ0IzRixPQUFoQixDQUFWO0FBRUFBLE1BQUFBLE9BQU8sQ0FBQzRGLFVBQVIsR0FBcUIsQ0FDbkIsQ0FDRSxLQUFLekYsU0FBTCxDQUFlMEYsRUFBZixDQUNFLE9BREYsRUFFRSxLQUFLMUYsU0FBTCxDQUFlMkYsR0FBZixDQUFvQixHQUFFLEtBQUsvRixNQUFMLENBQVlhLElBQUssSUFBRyxLQUFLYixNQUFMLENBQVk4QixlQUFnQixFQUF0RSxDQUZGLENBREYsRUFLRSxPQUxGLENBRG1CLENBQXJCO0FBU0E3QixNQUFBQSxPQUFPLENBQUN5RSxHQUFSLEdBQWMsSUFBZDtBQUNBekUsTUFBQUEsT0FBTyxDQUFDK0YsS0FBUixHQUFnQixJQUFoQjtBQUVBLGFBQU8sS0FBSzlELEdBQUwsQ0FBUytCLFFBQVQsRUFBbUJoRSxPQUFuQixFQUE0QnVGLElBQTVCLENBQWlDRSxNQUFNLElBQUlPLFFBQVEsQ0FBQ1AsTUFBTSxDQUFDL0MsS0FBUixFQUFlLEVBQWYsQ0FBbkQsQ0FBUDtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7Ozt3QkFTSXVELGMsRUFBZ0JDLGUsRUFBaUJsRyxPLEVBQVM7QUFDNUMsWUFBTThELEtBQUssR0FBRyxFQUFkOztBQUVBLFVBQUksQ0FBQ0ksS0FBSyxDQUFDQyxPQUFOLENBQWMrQixlQUFkLENBQUwsRUFBcUM7QUFDbkNBLFFBQUFBLGVBQWUsR0FBRyxDQUFDQSxlQUFELENBQWxCO0FBQ0Q7O0FBRURsRyxNQUFBQSxPQUFPLEdBQUdxRSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCdEUsT0FBbEIsRUFBMkI7QUFDbkN1RSxRQUFBQSxLQUFLLEVBQUUsS0FENEI7QUFFbkNxQixRQUFBQSxVQUFVLEVBQUUsQ0FBQyxLQUFLN0YsTUFBTCxDQUFZcUIsbUJBQWIsQ0FGdUI7QUFHbkNxRCxRQUFBQSxHQUFHLEVBQUU7QUFIOEIsT0FBM0IsQ0FBVjtBQU1BWCxNQUFBQSxLQUFLLENBQUNsRSxFQUFFLENBQUN1RyxFQUFKLENBQUwsR0FBZUQsZUFBZSxDQUFDMUIsR0FBaEIsQ0FBb0JSLFFBQVEsSUFBSTtBQUM3QyxZQUFJQSxRQUFRLFlBQVksS0FBS2pFLE1BQTdCLEVBQXFDO0FBQ25DLGlCQUFPaUUsUUFBUSxDQUFDRixLQUFULEVBQVA7QUFDRDs7QUFDRCxlQUFPO0FBQ0wsV0FBQyxLQUFLL0QsTUFBTCxDQUFZcUIsbUJBQWIsR0FBbUM0QztBQUQ5QixTQUFQO0FBR0QsT0FQYyxDQUFmO0FBU0FoRSxNQUFBQSxPQUFPLENBQUM4RCxLQUFSLEdBQWdCO0FBQ2QsU0FBQ2xFLEVBQUUsQ0FBQ21GLEdBQUosR0FBVSxDQUNSakIsS0FEUSxFQUVSOUQsT0FBTyxDQUFDOEQsS0FGQTtBQURJLE9BQWhCO0FBT0EsYUFBTyxLQUFLN0IsR0FBTCxDQUFTZ0UsY0FBVCxFQUF5QmpHLE9BQXpCLEVBQWtDdUYsSUFBbEMsQ0FBdUNhLGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ3pCLE1BQWxCLEtBQTZCdUIsZUFBZSxDQUFDdkIsTUFBekcsQ0FBUDtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7Ozs7d0JBVUlzQixjLEVBQWdCQyxlLEVBQWlCbEcsTyxFQUFTO0FBQzVDLFVBQUlrRyxlQUFlLEtBQUssSUFBeEIsRUFBOEI7QUFDNUJBLFFBQUFBLGVBQWUsR0FBRyxFQUFsQjtBQUNELE9BRkQsTUFFTztBQUNMQSxRQUFBQSxlQUFlLEdBQUcsS0FBS0csZUFBTCxDQUFxQkgsZUFBckIsQ0FBbEI7QUFDRDs7QUFFRCxhQUFPLEtBQUtqRSxHQUFMLENBQVNnRSxjQUFULEVBQXlCdkcsQ0FBQyxDQUFDb0QsUUFBRixDQUFXO0FBQUV5QixRQUFBQSxLQUFLLEVBQUUsS0FBVDtBQUFnQkUsUUFBQUEsR0FBRyxFQUFFO0FBQXJCLE9BQVgsRUFBd0N6RSxPQUF4QyxDQUF6QixFQUEyRXVGLElBQTNFLENBQWdGZSxlQUFlLElBQUk7QUFDeEcsY0FBTUMsUUFBUSxHQUFHLEVBQWpCO0FBQ0EsY0FBTUMsb0JBQW9CLEdBQUdGLGVBQWUsQ0FBQ0csTUFBaEIsQ0FBdUJDLEdBQUcsSUFDckQsQ0FBQ1IsZUFBZSxDQUFDUyxJQUFoQixDQUFxQmxELEdBQUcsSUFDdkJBLEdBQUcsQ0FBQyxLQUFLMUQsTUFBTCxDQUFZcUIsbUJBQWIsQ0FBSCxLQUF5Q3NGLEdBQUcsQ0FBQyxLQUFLM0csTUFBTCxDQUFZcUIsbUJBQWIsQ0FEN0MsQ0FEMEIsQ0FBN0I7QUFLQSxjQUFNd0YsbUJBQW1CLEdBQUdWLGVBQWUsQ0FBQ08sTUFBaEIsQ0FBdUJoRCxHQUFHLElBQ3BELENBQUM2QyxlQUFlLENBQUNLLElBQWhCLENBQXFCRCxHQUFHLElBQ3ZCakQsR0FBRyxDQUFDLEtBQUsxRCxNQUFMLENBQVlxQixtQkFBYixDQUFILEtBQXlDc0YsR0FBRyxDQUFDLEtBQUszRyxNQUFMLENBQVlxQixtQkFBYixDQUQ3QyxDQUR5QixDQUE1QjtBQUtBLFlBQUl5RixXQUFKO0FBQ0EsWUFBSUMsTUFBSjs7QUFFQSxZQUFJTixvQkFBb0IsQ0FBQzdCLE1BQXJCLEdBQThCLENBQWxDLEVBQXFDO0FBQ25DbUMsVUFBQUEsTUFBTSxHQUFHLEVBQVQ7QUFDQUEsVUFBQUEsTUFBTSxDQUFDLEtBQUs3RixVQUFOLENBQU4sR0FBMEIsSUFBMUI7QUFFQTRGLFVBQUFBLFdBQVcsR0FBRztBQUNaLGFBQUMsS0FBSzlHLE1BQUwsQ0FBWXFCLG1CQUFiLEdBQW1Db0Ysb0JBQW9CLENBQUNoQyxHQUFyQixDQUF5QnVDLGdCQUFnQixJQUMxRUEsZ0JBQWdCLENBQUMsS0FBS2hILE1BQUwsQ0FBWXFCLG1CQUFiLENBRGlCO0FBRHZCLFdBQWQ7QUFPQW1GLFVBQUFBLFFBQVEsQ0FBQ2IsSUFBVCxDQUFjLEtBQUszRixNQUFMLENBQVlvRixRQUFaLEdBQXVCMkIsTUFBdkIsQ0FDWkEsTUFEWSxFQUVacEgsQ0FBQyxDQUFDb0QsUUFBRixDQUFXO0FBQ1RnQixZQUFBQSxLQUFLLEVBQUUrQztBQURFLFdBQVgsRUFFRzdHLE9BRkgsQ0FGWSxDQUFkO0FBTUQ7O0FBRUQsWUFBSTRHLG1CQUFtQixDQUFDakMsTUFBcEIsR0FBNkIsQ0FBakMsRUFBb0M7QUFDbENrQyxVQUFBQSxXQUFXLEdBQUcsRUFBZDtBQUVBQyxVQUFBQSxNQUFNLEdBQUcsRUFBVDtBQUNBQSxVQUFBQSxNQUFNLENBQUMsS0FBSzdGLFVBQU4sQ0FBTixHQUEwQmdGLGNBQWMsQ0FBQ2hFLEdBQWYsQ0FBbUIsS0FBS1AsU0FBeEIsQ0FBMUI7QUFFQTJDLFVBQUFBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjd0MsTUFBZCxFQUFzQixLQUFLdkMsS0FBM0I7QUFDQXNDLFVBQUFBLFdBQVcsQ0FBQyxLQUFLOUcsTUFBTCxDQUFZcUIsbUJBQWIsQ0FBWCxHQUErQ3dGLG1CQUFtQixDQUFDcEMsR0FBcEIsQ0FBd0J3QyxrQkFBa0IsSUFDdkZBLGtCQUFrQixDQUFDLEtBQUtqSCxNQUFMLENBQVlxQixtQkFBYixDQUQyQixDQUEvQztBQUlBbUYsVUFBQUEsUUFBUSxDQUFDYixJQUFULENBQWMsS0FBSzNGLE1BQUwsQ0FBWW9GLFFBQVosR0FBdUIyQixNQUF2QixDQUNaQSxNQURZLEVBRVpwSCxDQUFDLENBQUNvRCxRQUFGLENBQVc7QUFDVGdCLFlBQUFBLEtBQUssRUFBRStDO0FBREUsV0FBWCxFQUVHN0csT0FGSCxDQUZZLENBQWQ7QUFNRDs7QUFFRCxlQUFPVCxLQUFLLENBQUMwSCxPQUFOLENBQWNDLEdBQWQsQ0FBa0JYLFFBQWxCLEVBQTRCWSxNQUE1QixDQUFtQ2xCLGNBQW5DLENBQVA7QUFDRCxPQXRETSxDQUFQO0FBdUREO0FBRUQ7Ozs7Ozs7Ozs7Ozs7d0JBVUlBLGMsRUFBZ0JDLGUsRUFBaUJsRyxPQUFPLEdBQUcsRSxFQUFJO0FBQ2pELFVBQUksQ0FBQ2tHLGVBQUwsRUFBc0IsT0FBTzNHLEtBQUssQ0FBQzBILE9BQU4sQ0FBY0csT0FBZCxFQUFQO0FBRXRCLFlBQU1OLE1BQU0sR0FBRyxFQUFmO0FBRUFaLE1BQUFBLGVBQWUsR0FBRyxLQUFLRyxlQUFMLENBQXFCSCxlQUFyQixDQUFsQjtBQUVBWSxNQUFBQSxNQUFNLENBQUMsS0FBSzdGLFVBQU4sQ0FBTixHQUEwQmdGLGNBQWMsQ0FBQ2hFLEdBQWYsQ0FBbUIsS0FBS1AsU0FBeEIsQ0FBMUI7QUFDQTJDLE1BQUFBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjd0MsTUFBZCxFQUFzQixLQUFLdkMsS0FBM0I7QUFFQSxZQUFNVCxLQUFLLEdBQUc7QUFDWixTQUFDLEtBQUsvRCxNQUFMLENBQVlxQixtQkFBYixHQUFtQzhFLGVBQWUsQ0FBQzFCLEdBQWhCLENBQW9Cd0Msa0JBQWtCLElBQ3ZFQSxrQkFBa0IsQ0FBQy9FLEdBQW5CLENBQXVCLEtBQUtsQyxNQUFMLENBQVlxQixtQkFBbkMsQ0FEaUM7QUFEdkIsT0FBZDtBQU1BLGFBQU8sS0FBS3JCLE1BQUwsQ0FBWW9GLFFBQVosR0FBdUIyQixNQUF2QixDQUE4QkEsTUFBOUIsRUFBc0NwSCxDQUFDLENBQUNvRCxRQUFGLENBQVc7QUFBRWdCLFFBQUFBO0FBQUYsT0FBWCxFQUFzQjlELE9BQXRCLENBQXRDLEVBQXNFbUgsTUFBdEUsQ0FBNkVsQixjQUE3RSxDQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7OzJCQVNPQSxjLEVBQWdCQyxlLEVBQWlCbEcsT0FBTyxHQUFHLEUsRUFBSTtBQUNwRCxZQUFNOEcsTUFBTSxHQUFHO0FBQ2IsU0FBQyxLQUFLN0YsVUFBTixHQUFtQjtBQUROLE9BQWY7QUFJQWlGLE1BQUFBLGVBQWUsR0FBRyxLQUFLRyxlQUFMLENBQXFCSCxlQUFyQixDQUFsQjtBQUVBLFlBQU1wQyxLQUFLLEdBQUc7QUFDWixTQUFDLEtBQUs3QyxVQUFOLEdBQW1CZ0YsY0FBYyxDQUFDaEUsR0FBZixDQUFtQixLQUFLUCxTQUF4QixDQURQO0FBRVosU0FBQyxLQUFLM0IsTUFBTCxDQUFZcUIsbUJBQWIsR0FBbUM4RSxlQUFlLENBQUMxQixHQUFoQixDQUFvQjZDLGNBQWMsSUFDbkVBLGNBQWMsQ0FBQ3BGLEdBQWYsQ0FBbUIsS0FBS2xDLE1BQUwsQ0FBWXFCLG1CQUEvQixDQURpQztBQUZ2QixPQUFkO0FBT0EsYUFBTyxLQUFLckIsTUFBTCxDQUFZb0YsUUFBWixHQUF1QjJCLE1BQXZCLENBQThCQSxNQUE5QixFQUFzQ3BILENBQUMsQ0FBQ29ELFFBQUYsQ0FBVztBQUFFZ0IsUUFBQUE7QUFBRixPQUFYLEVBQXNCOUQsT0FBdEIsQ0FBdEMsRUFBc0VtSCxNQUF0RSxDQUE2RSxJQUE3RSxDQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7OzJCQVNPbEIsYyxFQUFnQmhDLE0sRUFBUWpFLE9BQU8sR0FBRyxFLEVBQUk7QUFDM0MsVUFBSWtFLEtBQUssQ0FBQ0MsT0FBTixDQUFjbkUsT0FBZCxDQUFKLEVBQTRCO0FBQzFCQSxRQUFBQSxPQUFPLEdBQUc7QUFDUnNILFVBQUFBLE1BQU0sRUFBRXRIO0FBREEsU0FBVjtBQUdEOztBQUVELFVBQUlpRSxNQUFNLEtBQUtHLFNBQWYsRUFBMEI7QUFDeEJILFFBQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0Q7O0FBRUQsVUFBSSxLQUFLTSxLQUFULEVBQWdCO0FBQ2QsYUFBSyxNQUFNZ0QsU0FBWCxJQUF3QmxELE1BQU0sQ0FBQ21ELElBQVAsQ0FBWSxLQUFLakQsS0FBakIsQ0FBeEIsRUFBaUQ7QUFDL0NOLFVBQUFBLE1BQU0sQ0FBQ3NELFNBQUQsQ0FBTixHQUFvQixLQUFLaEQsS0FBTCxDQUFXZ0QsU0FBWCxDQUFwQjtBQUNBLGNBQUl2SCxPQUFPLENBQUNzSCxNQUFaLEVBQW9CdEgsT0FBTyxDQUFDc0gsTUFBUixDQUFlNUIsSUFBZixDQUFvQjZCLFNBQXBCO0FBQ3JCO0FBQ0Y7O0FBRUR0RCxNQUFBQSxNQUFNLENBQUMsS0FBS2hELFVBQU4sQ0FBTixHQUEwQmdGLGNBQWMsQ0FBQ2hFLEdBQWYsQ0FBbUIsS0FBS1AsU0FBeEIsQ0FBMUI7QUFDQSxVQUFJMUIsT0FBTyxDQUFDc0gsTUFBWixFQUFvQnRILE9BQU8sQ0FBQ3NILE1BQVIsQ0FBZTVCLElBQWYsQ0FBb0IsS0FBS3pFLFVBQXpCO0FBQ3BCLGFBQU8sS0FBS2xCLE1BQUwsQ0FBWXNDLE1BQVosQ0FBbUI0QixNQUFuQixFQUEyQmpFLE9BQTNCLENBQVA7QUFDRDs7OzJDQUVzQnlILEssRUFBTztBQUM1QixVQUFJLE9BQU9BLEtBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDN0IsZUFBTyxLQUFLaEgsRUFBTCxLQUFZZ0gsS0FBbkI7QUFDRDs7QUFFRCxVQUFJQSxLQUFLLElBQUlBLEtBQUssQ0FBQzVHLE1BQW5CLEVBQTJCO0FBQ3pCLGVBQU8sS0FBS0osRUFBTCxLQUFZZ0gsS0FBSyxDQUFDNUcsTUFBekI7QUFDRDs7QUFFRCxhQUFPLENBQUMsS0FBS0gsU0FBYjtBQUNEOzs7O0VBamRtQmYsVzs7QUFvZHRCK0gsTUFBTSxDQUFDQyxPQUFQLEdBQWlCOUgsT0FBakI7QUFDQTZILE1BQU0sQ0FBQ0MsT0FBUCxDQUFlOUgsT0FBZixHQUF5QkEsT0FBekI7QUFDQTZILE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCL0gsT0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBVdGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcclxuY29uc3QgSGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IEFzc29jaWF0aW9uID0gcmVxdWlyZSgnLi9iYXNlJyk7XHJcbmNvbnN0IE9wID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzJyk7XHJcblxyXG4vKipcclxuICogT25lLXRvLW1hbnkgYXNzb2NpYXRpb25cclxuICpcclxuICogSW4gdGhlIEFQSSByZWZlcmVuY2UgYmVsb3csIGFkZCB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRpb24gdG8gdGhlIG1ldGhvZCwgZS5nLiBmb3IgYFVzZXIuaGFzTWFueShQcm9qZWN0KWAgdGhlIGdldHRlciB3aWxsIGJlIGB1c2VyLmdldFByb2plY3RzKClgLlxyXG4gKiBJZiB0aGUgYXNzb2NpYXRpb24gaXMgYWxpYXNlZCwgdXNlIHRoZSBhbGlhcyBpbnN0ZWFkLCBlLmcuIGBVc2VyLmhhc01hbnkoUHJvamVjdCwgeyBhczogJ2pvYnMnIH0pYCB3aWxsIGJlIGB1c2VyLmdldEpvYnMoKWAuXHJcbiAqXHJcbiAqIEBzZWUge0BsaW5rIE1vZGVsLmhhc01hbnl9XHJcbiAqL1xyXG5jbGFzcyBIYXNNYW55IGV4dGVuZHMgQXNzb2NpYXRpb24ge1xyXG4gIGNvbnN0cnVjdG9yKHNvdXJjZSwgdGFyZ2V0LCBvcHRpb25zKSB7XHJcbiAgICBzdXBlcihzb3VyY2UsIHRhcmdldCwgb3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5hc3NvY2lhdGlvblR5cGUgPSAnSGFzTWFueSc7XHJcbiAgICB0aGlzLnRhcmdldEFzc29jaWF0aW9uID0gbnVsbDtcclxuICAgIHRoaXMuc2VxdWVsaXplID0gc291cmNlLnNlcXVlbGl6ZTtcclxuICAgIHRoaXMuaXNNdWx0aUFzc29jaWF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZSA9IHt9O1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMudGhyb3VnaCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ046TSBhc3NvY2lhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBoYXNNYW55LiBVc2UgYmVsb25nc1RvTWFueSBpbnN0ZWFkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICogSWYgc2VsZiBhc3NvY2lhdGlvbiwgdGhpcyBpcyB0aGUgdGFyZ2V0IGFzc29jaWF0aW9uXHJcbiAgICAqL1xyXG4gICAgaWYgKHRoaXMuaXNTZWxmQXNzb2NpYXRpb24pIHtcclxuICAgICAgdGhpcy50YXJnZXRBc3NvY2lhdGlvbiA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXMpIHtcclxuICAgICAgdGhpcy5pc0FsaWFzZWQgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdCh0aGlzLmFzKSkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5uYW1lID0gdGhpcy5hcztcclxuICAgICAgICB0aGlzLmFzID0gdGhpcy5hcy5wbHVyYWw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLm5hbWUgPSB7XHJcbiAgICAgICAgICBwbHVyYWw6IHRoaXMuYXMsXHJcbiAgICAgICAgICBzaW5ndWxhcjogVXRpbHMuc2luZ3VsYXJpemUodGhpcy5hcylcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFzID0gdGhpcy50YXJnZXQub3B0aW9ucy5uYW1lLnBsdXJhbDtcclxuICAgICAgdGhpcy5vcHRpb25zLm5hbWUgPSB0aGlzLnRhcmdldC5vcHRpb25zLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEZvcmVpZ24ga2V5IHNldHVwXHJcbiAgICAgKi9cclxuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMub3B0aW9ucy5mb3JlaWduS2V5KSkge1xyXG4gICAgICB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUgPSB0aGlzLm9wdGlvbnMuZm9yZWlnbktleTtcclxuICAgICAgdGhpcy5mb3JlaWduS2V5ID0gdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlLm5hbWUgfHwgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlLmZpZWxkTmFtZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmZvcmVpZ25LZXkpIHtcclxuICAgICAgdGhpcy5mb3JlaWduS2V5ID0gdGhpcy5vcHRpb25zLmZvcmVpZ25LZXk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmZvcmVpZ25LZXkpIHtcclxuICAgICAgdGhpcy5mb3JlaWduS2V5ID0gVXRpbHMuY2FtZWxpemUoXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgdGhpcy5zb3VyY2Uub3B0aW9ucy5uYW1lLnNpbmd1bGFyLFxyXG4gICAgICAgICAgdGhpcy5zb3VyY2UucHJpbWFyeUtleUF0dHJpYnV0ZVxyXG4gICAgICAgIF0uam9pbignXycpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XSkge1xyXG4gICAgICB0aGlzLmlkZW50aWZpZXJGaWVsZCA9IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XS5maWVsZCB8fCB0aGlzLmZvcmVpZ25LZXk7XHJcbiAgICAgIHRoaXMuZm9yZWlnbktleUZpZWxkID0gdGhpcy50YXJnZXQucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldLmZpZWxkIHx8IHRoaXMuZm9yZWlnbktleTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogU291cmNlIGtleSBzZXR1cFxyXG4gICAgICovXHJcbiAgICB0aGlzLnNvdXJjZUtleSA9IHRoaXMub3B0aW9ucy5zb3VyY2VLZXkgfHwgdGhpcy5zb3VyY2UucHJpbWFyeUtleUF0dHJpYnV0ZTtcclxuXHJcbiAgICBpZiAodGhpcy5zb3VyY2UucmF3QXR0cmlidXRlc1t0aGlzLnNvdXJjZUtleV0pIHtcclxuICAgICAgdGhpcy5zb3VyY2VLZXlBdHRyaWJ1dGUgPSB0aGlzLnNvdXJjZUtleTtcclxuICAgICAgdGhpcy5zb3VyY2VLZXlGaWVsZCA9IHRoaXMuc291cmNlLnJhd0F0dHJpYnV0ZXNbdGhpcy5zb3VyY2VLZXldLmZpZWxkIHx8IHRoaXMuc291cmNlS2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zb3VyY2VLZXlBdHRyaWJ1dGUgPSB0aGlzLnNvdXJjZS5wcmltYXJ5S2V5QXR0cmlidXRlO1xyXG4gICAgICB0aGlzLnNvdXJjZUtleUZpZWxkID0gdGhpcy5zb3VyY2UucHJpbWFyeUtleUZpZWxkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdldCBzaW5ndWxhciBhbmQgcGx1cmFsIG5hbWVzXHJcbiAgICAvLyB0cnkgdG8gdXBwZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXIsIHVubGVzcyB0aGUgbW9kZWwgZm9yYmlkcyBpdFxyXG4gICAgY29uc3QgcGx1cmFsID0gXy51cHBlckZpcnN0KHRoaXMub3B0aW9ucy5uYW1lLnBsdXJhbCk7XHJcbiAgICBjb25zdCBzaW5ndWxhciA9IF8udXBwZXJGaXJzdCh0aGlzLm9wdGlvbnMubmFtZS5zaW5ndWxhcik7XHJcblxyXG4gICAgdGhpcy5hc3NvY2lhdGlvbkFjY2Vzc29yID0gdGhpcy5hcztcclxuICAgIHRoaXMuYWNjZXNzb3JzID0ge1xyXG4gICAgICBnZXQ6IGBnZXQke3BsdXJhbH1gLFxyXG4gICAgICBzZXQ6IGBzZXQke3BsdXJhbH1gLFxyXG4gICAgICBhZGRNdWx0aXBsZTogYGFkZCR7cGx1cmFsfWAsXHJcbiAgICAgIGFkZDogYGFkZCR7c2luZ3VsYXJ9YCxcclxuICAgICAgY3JlYXRlOiBgY3JlYXRlJHtzaW5ndWxhcn1gLFxyXG4gICAgICByZW1vdmU6IGByZW1vdmUke3Npbmd1bGFyfWAsXHJcbiAgICAgIHJlbW92ZU11bHRpcGxlOiBgcmVtb3ZlJHtwbHVyYWx9YCxcclxuICAgICAgaGFzU2luZ2xlOiBgaGFzJHtzaW5ndWxhcn1gLFxyXG4gICAgICBoYXNBbGw6IGBoYXMke3BsdXJhbH1gLFxyXG4gICAgICBjb3VudDogYGNvdW50JHtwbHVyYWx9YFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIHRoZSBpZCBpcyBpbiB0aGUgdGFyZ2V0IHRhYmxlXHJcbiAgLy8gb3IgaW4gYW4gZXh0cmEgdGFibGUgd2hpY2ggY29ubmVjdHMgdHdvIHRhYmxlc1xyXG4gIF9pbmplY3RBdHRyaWJ1dGVzKCkge1xyXG4gICAgY29uc3QgbmV3QXR0cmlidXRlcyA9IHt9O1xyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0IGZvciB1c2Ugd2l0aCBhZGRGb3JlaWduS2V5Q29uc3RyYWludHMsIHRvIGF2b2lkIHBvbGx1dGluZyB0aGlzLm9wdGlvbnMgaW4gY2FzZSBpdCBpcyBsYXRlciB1c2VkIGZvciBhIG46bVxyXG4gICAgY29uc3QgY29uc3RyYWludE9wdGlvbnMgPSBfLmNsb25lKHRoaXMub3B0aW9ucyk7XHJcblxyXG4gICAgbmV3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldID0gXy5kZWZhdWx0cyh7fSwgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlLCB7XHJcbiAgICAgIHR5cGU6IHRoaXMub3B0aW9ucy5rZXlUeXBlIHx8IHRoaXMuc291cmNlLnJhd0F0dHJpYnV0ZXNbdGhpcy5zb3VyY2VLZXlBdHRyaWJ1dGVdLnR5cGUsXHJcbiAgICAgIGFsbG93TnVsbDogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb25zdHJhaW50cyAhPT0gZmFsc2UpIHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50YXJnZXQucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldIHx8IG5ld0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XTtcclxuICAgICAgY29uc3RyYWludE9wdGlvbnMub25EZWxldGUgPSBjb25zdHJhaW50T3B0aW9ucy5vbkRlbGV0ZSB8fCAodGFyZ2V0LmFsbG93TnVsbCA/ICdTRVQgTlVMTCcgOiAnQ0FTQ0FERScpO1xyXG4gICAgICBjb25zdHJhaW50T3B0aW9ucy5vblVwZGF0ZSA9IGNvbnN0cmFpbnRPcHRpb25zLm9uVXBkYXRlIHx8ICdDQVNDQURFJztcclxuICAgIH1cclxuXHJcbiAgICBIZWxwZXJzLmFkZEZvcmVpZ25LZXlDb25zdHJhaW50cyhuZXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0sIHRoaXMuc291cmNlLCB0aGlzLnRhcmdldCwgY29uc3RyYWludE9wdGlvbnMsIHRoaXMuc291cmNlS2V5RmllbGQpO1xyXG4gICAgVXRpbHMubWVyZ2VEZWZhdWx0cyh0aGlzLnRhcmdldC5yYXdBdHRyaWJ1dGVzLCBuZXdBdHRyaWJ1dGVzKTtcclxuXHJcbiAgICB0aGlzLnRhcmdldC5yZWZyZXNoQXR0cmlidXRlcygpO1xyXG4gICAgdGhpcy5zb3VyY2UucmVmcmVzaEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICB0aGlzLmlkZW50aWZpZXJGaWVsZCA9IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XS5maWVsZCB8fCB0aGlzLmZvcmVpZ25LZXk7XHJcbiAgICB0aGlzLmZvcmVpZ25LZXlGaWVsZCA9IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XS5maWVsZCB8fCB0aGlzLmZvcmVpZ25LZXk7XHJcbiAgICB0aGlzLnNvdXJjZUtleUZpZWxkID0gdGhpcy5zb3VyY2UucmF3QXR0cmlidXRlc1t0aGlzLnNvdXJjZUtleV0uZmllbGQgfHwgdGhpcy5zb3VyY2VLZXk7XHJcblxyXG4gICAgSGVscGVycy5jaGVja05hbWluZ0NvbGxpc2lvbih0aGlzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG1peGluKG9iaikge1xyXG4gICAgY29uc3QgbWV0aG9kcyA9IFsnZ2V0JywgJ2NvdW50JywgJ2hhc1NpbmdsZScsICdoYXNBbGwnLCAnc2V0JywgJ2FkZCcsICdhZGRNdWx0aXBsZScsICdyZW1vdmUnLCAncmVtb3ZlTXVsdGlwbGUnLCAnY3JlYXRlJ107XHJcbiAgICBjb25zdCBhbGlhc2VzID0ge1xyXG4gICAgICBoYXNTaW5nbGU6ICdoYXMnLFxyXG4gICAgICBoYXNBbGw6ICdoYXMnLFxyXG4gICAgICBhZGRNdWx0aXBsZTogJ2FkZCcsXHJcbiAgICAgIHJlbW92ZU11bHRpcGxlOiAncmVtb3ZlJ1xyXG4gICAgfTtcclxuXHJcbiAgICBIZWxwZXJzLm1peGluTWV0aG9kcyh0aGlzLCBvYmosIG1ldGhvZHMsIGFsaWFzZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGV2ZXJ5dGhpbmcgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGlzLCB1c2luZyBhbiBvcHRpb25hbCB3aGVyZSBjbGF1c2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfEFycmF5PE1vZGVsPn0gaW5zdGFuY2VzIHNvdXJjZSBpbnN0YW5jZXNcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIGZpbmQgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy53aGVyZV0gQW4gb3B0aW9uYWwgd2hlcmUgY2xhdXNlIHRvIGxpbWl0IHRoZSBhc3NvY2lhdGVkIG1vZGVsc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IFtvcHRpb25zLnNjb3BlXSBBcHBseSBhIHNjb3BlIG9uIHRoZSByZWxhdGVkIG1vZGVsLCBvciByZW1vdmUgaXRzIGRlZmF1bHQgc2NvcGUgYnkgcGFzc2luZyBmYWxzZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zY2hlbWFdIEFwcGx5IGEgc2NoZW1hIG9uIHRoZSByZWxhdGVkIG1vZGVsXHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRBbGx9ICBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uIG9mIG9wdGlvbnNcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PE1vZGVsPj59XHJcbiAgICovXHJcbiAgZ2V0KGluc3RhbmNlcywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBjb25zdCB3aGVyZSA9IHt9O1xyXG5cclxuICAgIGxldCBNb2RlbCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgbGV0IGluc3RhbmNlO1xyXG4gICAgbGV0IHZhbHVlcztcclxuXHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5zdGFuY2VzKSkge1xyXG4gICAgICBpbnN0YW5jZSA9IGluc3RhbmNlcztcclxuICAgICAgaW5zdGFuY2VzID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcclxuXHJcbiAgICBpZiAodGhpcy5zY29wZSkge1xyXG4gICAgICBPYmplY3QuYXNzaWduKHdoZXJlLCB0aGlzLnNjb3BlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5zdGFuY2VzKSB7XHJcbiAgICAgIHZhbHVlcyA9IGluc3RhbmNlcy5tYXAoaW5zdGFuY2UgPT4gaW5zdGFuY2UuZ2V0KHRoaXMuc291cmNlS2V5LCB7IHJhdzogdHJ1ZSB9KSk7XHJcblxyXG4gICAgICBpZiAob3B0aW9ucy5saW1pdCAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIG9wdGlvbnMuZ3JvdXBlZExpbWl0ID0ge1xyXG4gICAgICAgICAgbGltaXQ6IG9wdGlvbnMubGltaXQsXHJcbiAgICAgICAgICBvbjogdGhpcywgLy8gYXNzb2NpYXRpb25cclxuICAgICAgICAgIHZhbHVlc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLmxpbWl0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHdoZXJlW3RoaXMuZm9yZWlnbktleV0gPSB7XHJcbiAgICAgICAgICBbT3AuaW5dOiB2YWx1ZXNcclxuICAgICAgICB9O1xyXG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLmdyb3VwZWRMaW1pdDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd2hlcmVbdGhpcy5mb3JlaWduS2V5XSA9IGluc3RhbmNlLmdldCh0aGlzLnNvdXJjZUtleSwgeyByYXc6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucy53aGVyZSA9IG9wdGlvbnMud2hlcmUgP1xyXG4gICAgICB7IFtPcC5hbmRdOiBbd2hlcmUsIG9wdGlvbnMud2hlcmVdIH0gOlxyXG4gICAgICB3aGVyZTtcclxuXHJcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdzY29wZScpKSB7XHJcbiAgICAgIGlmICghb3B0aW9ucy5zY29wZSkge1xyXG4gICAgICAgIE1vZGVsID0gTW9kZWwudW5zY29wZWQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBNb2RlbCA9IE1vZGVsLnNjb3BlKG9wdGlvbnMuc2NvcGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc2NoZW1hJykpIHtcclxuICAgICAgTW9kZWwgPSBNb2RlbC5zY2hlbWEob3B0aW9ucy5zY2hlbWEsIG9wdGlvbnMuc2NoZW1hRGVsaW1pdGVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTW9kZWwuZmluZEFsbChvcHRpb25zKS50aGVuKHJlc3VsdHMgPT4ge1xyXG4gICAgICBpZiAoaW5zdGFuY2UpIHJldHVybiByZXN1bHRzO1xyXG5cclxuICAgICAgY29uc3QgcmVzdWx0ID0ge307XHJcbiAgICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7XHJcbiAgICAgICAgcmVzdWx0W2luc3RhbmNlLmdldCh0aGlzLnNvdXJjZUtleSwgeyByYXc6IHRydWUgfSldID0gW107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgcmVzdWx0cykge1xyXG4gICAgICAgIHJlc3VsdFtpbnN0YW5jZS5nZXQodGhpcy5mb3JlaWduS2V5LCB7IHJhdzogdHJ1ZSB9KV0ucHVzaChpbnN0YW5jZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvdW50IGV2ZXJ5dGhpbmcgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGlzLCB1c2luZyBhbiBvcHRpb25hbCB3aGVyZSBjbGF1c2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfSAgICAgICAgaW5zdGFuY2UgdGhlIHNvdXJjZSBpbnN0YW5jZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgIFtvcHRpb25zXSBmaW5kICYgY291bnQgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgIFtvcHRpb25zLndoZXJlXSBBbiBvcHRpb25hbCB3aGVyZSBjbGF1c2UgdG8gbGltaXQgdGhlIGFzc29jaWF0ZWQgbW9kZWxzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gW29wdGlvbnMuc2NvcGVdIEFwcGx5IGEgc2NvcGUgb24gdGhlIHJlbGF0ZWQgbW9kZWwsIG9yIHJlbW92ZSBpdHMgZGVmYXVsdCBzY29wZSBieSBwYXNzaW5nIGZhbHNlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fVxyXG4gICAqL1xyXG4gIGNvdW50KGluc3RhbmNlLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xyXG5cclxuICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IFtcclxuICAgICAgW1xyXG4gICAgICAgIHRoaXMuc2VxdWVsaXplLmZuKFxyXG4gICAgICAgICAgJ0NPVU5UJyxcclxuICAgICAgICAgIHRoaXMuc2VxdWVsaXplLmNvbChgJHt0aGlzLnRhcmdldC5uYW1lfS4ke3RoaXMudGFyZ2V0LnByaW1hcnlLZXlGaWVsZH1gKVxyXG4gICAgICAgICksXHJcbiAgICAgICAgJ2NvdW50J1xyXG4gICAgICBdXHJcbiAgICBdO1xyXG4gICAgb3B0aW9ucy5yYXcgPSB0cnVlO1xyXG4gICAgb3B0aW9ucy5wbGFpbiA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0KGluc3RhbmNlLCBvcHRpb25zKS50aGVuKHJlc3VsdCA9PiBwYXJzZUludChyZXN1bHQuY291bnQsIDEwKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBvbmUgb3IgbW9yZSByb3dzIGFyZSBhc3NvY2lhdGVkIHdpdGggYHRoaXNgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2UgdGhlIHNvdXJjZSBpbnN0YW5jZVxyXG4gICAqIEBwYXJhbSB7TW9kZWx8TW9kZWxbXXxzdHJpbmdbXXxzdHJpbmd8bnVtYmVyW118bnVtYmVyfSBbdGFyZ2V0SW5zdGFuY2VzXSBDYW4gYmUgYW4gYXJyYXkgb2YgaW5zdGFuY2VzIG9yIHRoZWlyIHByaW1hcnkga2V5c1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBwYXNzZWQgdG8gZ2V0QXNzb2NpYXRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBoYXMoc291cmNlSW5zdGFuY2UsIHRhcmdldEluc3RhbmNlcywgb3B0aW9ucykge1xyXG4gICAgY29uc3Qgd2hlcmUgPSB7fTtcclxuXHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0SW5zdGFuY2VzKSkge1xyXG4gICAgICB0YXJnZXRJbnN0YW5jZXMgPSBbdGFyZ2V0SW5zdGFuY2VzXTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xyXG4gICAgICBzY29wZTogZmFsc2UsXHJcbiAgICAgIGF0dHJpYnV0ZXM6IFt0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXSxcclxuICAgICAgcmF3OiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICB3aGVyZVtPcC5vcl0gPSB0YXJnZXRJbnN0YW5jZXMubWFwKGluc3RhbmNlID0+IHtcclxuICAgICAgaWYgKGluc3RhbmNlIGluc3RhbmNlb2YgdGhpcy50YXJnZXQpIHtcclxuICAgICAgICByZXR1cm4gaW5zdGFuY2Uud2hlcmUoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIFt0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXTogaW5zdGFuY2VcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIG9wdGlvbnMud2hlcmUgPSB7XHJcbiAgICAgIFtPcC5hbmRdOiBbXHJcbiAgICAgICAgd2hlcmUsXHJcbiAgICAgICAgb3B0aW9ucy53aGVyZVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmdldChzb3VyY2VJbnN0YW5jZSwgb3B0aW9ucykudGhlbihhc3NvY2lhdGVkT2JqZWN0cyA9PiBhc3NvY2lhdGVkT2JqZWN0cy5sZW5ndGggPT09IHRhcmdldEluc3RhbmNlcy5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBhc3NvY2lhdGVkIG1vZGVscyBieSBwYXNzaW5nIGFuIGFycmF5IG9mIHBlcnNpc3RlZCBpbnN0YW5jZXMgb3IgdGhlaXIgcHJpbWFyeSBrZXlzLiBFdmVyeXRoaW5nIHRoYXQgaXMgbm90IGluIHRoZSBwYXNzZWQgYXJyYXkgd2lsbCBiZSB1bi1hc3NvY2lhdGVkXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfSBzb3VyY2VJbnN0YW5jZSBzb3VyY2UgaW5zdGFuY2UgdG8gYXNzb2NpYXRlIG5ldyBpbnN0YW5jZXMgd2l0aFxyXG4gICAqIEBwYXJhbSB7TW9kZWx8TW9kZWxbXXxzdHJpbmdbXXxzdHJpbmd8bnVtYmVyW118bnVtYmVyfSBbdGFyZ2V0SW5zdGFuY2VzXSBBbiBhcnJheSBvZiBwZXJzaXN0ZWQgaW5zdGFuY2VzIG9yIHByaW1hcnkga2V5IG9mIGluc3RhbmNlcyB0byBhc3NvY2lhdGUgd2l0aCB0aGlzLiBQYXNzIGBudWxsYCBvciBgdW5kZWZpbmVkYCB0byByZW1vdmUgYWxsIGFzc29jaWF0aW9ucy5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgcGFzc2VkIHRvIGB0YXJnZXQuZmluZEFsbGAgYW5kIGB1cGRhdGVgLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy52YWxpZGF0ZV0gUnVuIHZhbGlkYXRpb24gZm9yIHRoZSBqb2luIG1vZGVsXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBzZXQoc291cmNlSW5zdGFuY2UsIHRhcmdldEluc3RhbmNlcywgb3B0aW9ucykge1xyXG4gICAgaWYgKHRhcmdldEluc3RhbmNlcyA9PT0gbnVsbCkge1xyXG4gICAgICB0YXJnZXRJbnN0YW5jZXMgPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhcmdldEluc3RhbmNlcyA9IHRoaXMudG9JbnN0YW5jZUFycmF5KHRhcmdldEluc3RhbmNlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0KHNvdXJjZUluc3RhbmNlLCBfLmRlZmF1bHRzKHsgc2NvcGU6IGZhbHNlLCByYXc6IHRydWUgfSwgb3B0aW9ucykpLnRoZW4ob2xkQXNzb2NpYXRpb25zID0+IHtcclxuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgY29uc3Qgb2Jzb2xldGVBc3NvY2lhdGlvbnMgPSBvbGRBc3NvY2lhdGlvbnMuZmlsdGVyKG9sZCA9PlxyXG4gICAgICAgICF0YXJnZXRJbnN0YW5jZXMuZmluZChvYmogPT5cclxuICAgICAgICAgIG9ialt0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXSA9PT0gb2xkW3RoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGVdXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB1bmFzc29jaWF0ZWRPYmplY3RzID0gdGFyZ2V0SW5zdGFuY2VzLmZpbHRlcihvYmogPT5cclxuICAgICAgICAhb2xkQXNzb2NpYXRpb25zLmZpbmQob2xkID0+XHJcbiAgICAgICAgICBvYmpbdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZV0gPT09IG9sZFt0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgbGV0IHVwZGF0ZVdoZXJlO1xyXG4gICAgICBsZXQgdXBkYXRlO1xyXG5cclxuICAgICAgaWYgKG9ic29sZXRlQXNzb2NpYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cGRhdGUgPSB7fTtcclxuICAgICAgICB1cGRhdGVbdGhpcy5mb3JlaWduS2V5XSA9IG51bGw7XHJcblxyXG4gICAgICAgIHVwZGF0ZVdoZXJlID0ge1xyXG4gICAgICAgICAgW3RoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGVdOiBvYnNvbGV0ZUFzc29jaWF0aW9ucy5tYXAoYXNzb2NpYXRlZE9iamVjdCA9PlxyXG4gICAgICAgICAgICBhc3NvY2lhdGVkT2JqZWN0W3RoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGVdXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfTtcclxuXHJcblxyXG4gICAgICAgIHByb21pc2VzLnB1c2godGhpcy50YXJnZXQudW5zY29wZWQoKS51cGRhdGUoXHJcbiAgICAgICAgICB1cGRhdGUsXHJcbiAgICAgICAgICBfLmRlZmF1bHRzKHtcclxuICAgICAgICAgICAgd2hlcmU6IHVwZGF0ZVdoZXJlXHJcbiAgICAgICAgICB9LCBvcHRpb25zKVxyXG4gICAgICAgICkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodW5hc3NvY2lhdGVkT2JqZWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXBkYXRlV2hlcmUgPSB7fTtcclxuXHJcbiAgICAgICAgdXBkYXRlID0ge307XHJcbiAgICAgICAgdXBkYXRlW3RoaXMuZm9yZWlnbktleV0gPSBzb3VyY2VJbnN0YW5jZS5nZXQodGhpcy5zb3VyY2VLZXkpO1xyXG5cclxuICAgICAgICBPYmplY3QuYXNzaWduKHVwZGF0ZSwgdGhpcy5zY29wZSk7XHJcbiAgICAgICAgdXBkYXRlV2hlcmVbdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZV0gPSB1bmFzc29jaWF0ZWRPYmplY3RzLm1hcCh1bmFzc29jaWF0ZWRPYmplY3QgPT5cclxuICAgICAgICAgIHVuYXNzb2NpYXRlZE9iamVjdFt0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHByb21pc2VzLnB1c2godGhpcy50YXJnZXQudW5zY29wZWQoKS51cGRhdGUoXHJcbiAgICAgICAgICB1cGRhdGUsXHJcbiAgICAgICAgICBfLmRlZmF1bHRzKHtcclxuICAgICAgICAgICAgd2hlcmU6IHVwZGF0ZVdoZXJlXHJcbiAgICAgICAgICB9LCBvcHRpb25zKVxyXG4gICAgICAgICkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gVXRpbHMuUHJvbWlzZS5hbGwocHJvbWlzZXMpLnJldHVybihzb3VyY2VJbnN0YW5jZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFzc29jaWF0ZSBvbmUgb3IgbW9yZSB0YXJnZXQgcm93cyB3aXRoIGB0aGlzYC4gVGhpcyBtZXRob2QgYWNjZXB0cyBhIE1vZGVsIC8gc3RyaW5nIC8gbnVtYmVyIHRvIGFzc29jaWF0ZSBhIHNpbmdsZSByb3csXHJcbiAgICogb3IgYSBtaXhlZCBhcnJheSBvZiBNb2RlbCAvIHN0cmluZyAvIG51bWJlcnMgdG8gYXNzb2NpYXRlIG11bHRpcGxlIHJvd3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfSBzb3VyY2VJbnN0YW5jZSB0aGUgc291cmNlIGluc3RhbmNlXHJcbiAgICogQHBhcmFtIHtNb2RlbHxNb2RlbFtdfHN0cmluZ1tdfHN0cmluZ3xudW1iZXJbXXxudW1iZXJ9IFt0YXJnZXRJbnN0YW5jZXNdIEEgc2luZ2xlIGluc3RhbmNlIG9yIHByaW1hcnkga2V5LCBvciBhIG1peGVkIGFycmF5IG9mIHBlcnNpc3RlZCBpbnN0YW5jZXMgb3IgcHJpbWFyeSBrZXlzXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHBhc3NlZCB0byBgdGFyZ2V0LnVwZGF0ZWAuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBhZGQoc291cmNlSW5zdGFuY2UsIHRhcmdldEluc3RhbmNlcywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBpZiAoIXRhcmdldEluc3RhbmNlcykgcmV0dXJuIFV0aWxzLlByb21pc2UucmVzb2x2ZSgpO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZSA9IHt9O1xyXG5cclxuICAgIHRhcmdldEluc3RhbmNlcyA9IHRoaXMudG9JbnN0YW5jZUFycmF5KHRhcmdldEluc3RhbmNlcyk7XHJcblxyXG4gICAgdXBkYXRlW3RoaXMuZm9yZWlnbktleV0gPSBzb3VyY2VJbnN0YW5jZS5nZXQodGhpcy5zb3VyY2VLZXkpO1xyXG4gICAgT2JqZWN0LmFzc2lnbih1cGRhdGUsIHRoaXMuc2NvcGUpO1xyXG5cclxuICAgIGNvbnN0IHdoZXJlID0ge1xyXG4gICAgICBbdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZV06IHRhcmdldEluc3RhbmNlcy5tYXAodW5hc3NvY2lhdGVkT2JqZWN0ID0+XHJcbiAgICAgICAgdW5hc3NvY2lhdGVkT2JqZWN0LmdldCh0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlKVxyXG4gICAgICApXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRhcmdldC51bnNjb3BlZCgpLnVwZGF0ZSh1cGRhdGUsIF8uZGVmYXVsdHMoeyB3aGVyZSB9LCBvcHRpb25zKSkucmV0dXJuKHNvdXJjZUluc3RhbmNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuLWFzc29jaWF0ZSBvbmUgb3Igc2V2ZXJhbCB0YXJnZXQgcm93cy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW9kZWx9IHNvdXJjZUluc3RhbmNlIGluc3RhbmNlIHRvIHVuIGFzc29jaWF0ZSBpbnN0YW5jZXMgd2l0aFxyXG4gICAqIEBwYXJhbSB7TW9kZWx8TW9kZWxbXXxzdHJpbmd8c3RyaW5nW118bnVtYmVyfG51bWJlcltdfSBbdGFyZ2V0SW5zdGFuY2VzXSBDYW4gYmUgYW4gSW5zdGFuY2Ugb3IgaXRzIHByaW1hcnkga2V5LCBvciBhIG1peGVkIGFycmF5IG9mIGluc3RhbmNlcyBhbmQgcHJpbWFyeSBrZXlzXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHBhc3NlZCB0byBgdGFyZ2V0LnVwZGF0ZWBcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIHJlbW92ZShzb3VyY2VJbnN0YW5jZSwgdGFyZ2V0SW5zdGFuY2VzLCBvcHRpb25zID0ge30pIHtcclxuICAgIGNvbnN0IHVwZGF0ZSA9IHtcclxuICAgICAgW3RoaXMuZm9yZWlnbktleV06IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgdGFyZ2V0SW5zdGFuY2VzID0gdGhpcy50b0luc3RhbmNlQXJyYXkodGFyZ2V0SW5zdGFuY2VzKTtcclxuXHJcbiAgICBjb25zdCB3aGVyZSA9IHtcclxuICAgICAgW3RoaXMuZm9yZWlnbktleV06IHNvdXJjZUluc3RhbmNlLmdldCh0aGlzLnNvdXJjZUtleSksXHJcbiAgICAgIFt0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXTogdGFyZ2V0SW5zdGFuY2VzLm1hcCh0YXJnZXRJbnN0YW5jZSA9PlxyXG4gICAgICAgIHRhcmdldEluc3RhbmNlLmdldCh0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlKVxyXG4gICAgICApXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRhcmdldC51bnNjb3BlZCgpLnVwZGF0ZSh1cGRhdGUsIF8uZGVmYXVsdHMoeyB3aGVyZSB9LCBvcHRpb25zKSkucmV0dXJuKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBhc3NvY2lhdGVkIG1vZGVsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCB0aGlzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2Ugc291cmNlIGluc3RhbmNlXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFt2YWx1ZXNdIHZhbHVlcyBmb3IgdGFyZ2V0IG1vZGVsIGluc3RhbmNlXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHBhc3NlZCB0byBgdGFyZ2V0LmNyZWF0ZWBcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIGNyZWF0ZShzb3VyY2VJbnN0YW5jZSwgdmFsdWVzLCBvcHRpb25zID0ge30pIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XHJcbiAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgZmllbGRzOiBvcHRpb25zXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhbHVlcyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNjb3BlKSB7XHJcbiAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIE9iamVjdC5rZXlzKHRoaXMuc2NvcGUpKSB7XHJcbiAgICAgICAgdmFsdWVzW2F0dHJpYnV0ZV0gPSB0aGlzLnNjb3BlW2F0dHJpYnV0ZV07XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRzKSBvcHRpb25zLmZpZWxkcy5wdXNoKGF0dHJpYnV0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YWx1ZXNbdGhpcy5mb3JlaWduS2V5XSA9IHNvdXJjZUluc3RhbmNlLmdldCh0aGlzLnNvdXJjZUtleSk7XHJcbiAgICBpZiAob3B0aW9ucy5maWVsZHMpIG9wdGlvbnMuZmllbGRzLnB1c2godGhpcy5mb3JlaWduS2V5KTtcclxuICAgIHJldHVybiB0aGlzLnRhcmdldC5jcmVhdGUodmFsdWVzLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHZlcmlmeUFzc29jaWF0aW9uQWxpYXMoYWxpYXMpIHtcclxuICAgIGlmICh0eXBlb2YgYWxpYXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFzID09PSBhbGlhcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWxpYXMgJiYgYWxpYXMucGx1cmFsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFzID09PSBhbGlhcy5wbHVyYWw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICF0aGlzLmlzQWxpYXNlZDtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSGFzTWFueTtcclxubW9kdWxlLmV4cG9ydHMuSGFzTWFueSA9IEhhc01hbnk7XHJcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBIYXNNYW55O1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvaGFzLW1hbnkuanMiXSwibmFtZXMiOlsiVXRpbHMiLCJyZXF1aXJlIiwiSGVscGVycyIsIl8iLCJBc3NvY2lhdGlvbiIsIk9wIiwiSGFzTWFueSIsInNvdXJjZSIsInRhcmdldCIsIm9wdGlvbnMiLCJhc3NvY2lhdGlvblR5cGUiLCJ0YXJnZXRBc3NvY2lhdGlvbiIsInNlcXVlbGl6ZSIsImlzTXVsdGlBc3NvY2lhdGlvbiIsImZvcmVpZ25LZXlBdHRyaWJ1dGUiLCJ0aHJvdWdoIiwiRXJyb3IiLCJpc1NlbGZBc3NvY2lhdGlvbiIsImFzIiwiaXNBbGlhc2VkIiwiaXNQbGFpbk9iamVjdCIsIm5hbWUiLCJwbHVyYWwiLCJzaW5ndWxhciIsInNpbmd1bGFyaXplIiwiaXNPYmplY3QiLCJmb3JlaWduS2V5IiwiZmllbGROYW1lIiwiY2FtZWxpemUiLCJwcmltYXJ5S2V5QXR0cmlidXRlIiwiam9pbiIsInJhd0F0dHJpYnV0ZXMiLCJpZGVudGlmaWVyRmllbGQiLCJmaWVsZCIsImZvcmVpZ25LZXlGaWVsZCIsInNvdXJjZUtleSIsInNvdXJjZUtleUF0dHJpYnV0ZSIsInNvdXJjZUtleUZpZWxkIiwicHJpbWFyeUtleUZpZWxkIiwidXBwZXJGaXJzdCIsImFzc29jaWF0aW9uQWNjZXNzb3IiLCJhY2Nlc3NvcnMiLCJnZXQiLCJzZXQiLCJhZGRNdWx0aXBsZSIsImFkZCIsImNyZWF0ZSIsInJlbW92ZSIsInJlbW92ZU11bHRpcGxlIiwiaGFzU2luZ2xlIiwiaGFzQWxsIiwiY291bnQiLCJuZXdBdHRyaWJ1dGVzIiwiY29uc3RyYWludE9wdGlvbnMiLCJjbG9uZSIsImRlZmF1bHRzIiwidHlwZSIsImtleVR5cGUiLCJhbGxvd051bGwiLCJjb25zdHJhaW50cyIsIm9uRGVsZXRlIiwib25VcGRhdGUiLCJhZGRGb3JlaWduS2V5Q29uc3RyYWludHMiLCJtZXJnZURlZmF1bHRzIiwicmVmcmVzaEF0dHJpYnV0ZXMiLCJjaGVja05hbWluZ0NvbGxpc2lvbiIsIm9iaiIsIm1ldGhvZHMiLCJhbGlhc2VzIiwibWl4aW5NZXRob2RzIiwiaW5zdGFuY2VzIiwid2hlcmUiLCJNb2RlbCIsImluc3RhbmNlIiwidmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwidW5kZWZpbmVkIiwiT2JqZWN0IiwiYXNzaWduIiwic2NvcGUiLCJtYXAiLCJyYXciLCJsaW1pdCIsImxlbmd0aCIsImdyb3VwZWRMaW1pdCIsIm9uIiwiaW4iLCJhbmQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ1bnNjb3BlZCIsInNjaGVtYSIsInNjaGVtYURlbGltaXRlciIsImZpbmRBbGwiLCJ0aGVuIiwicmVzdWx0cyIsInJlc3VsdCIsInB1c2giLCJjbG9uZURlZXAiLCJhdHRyaWJ1dGVzIiwiZm4iLCJjb2wiLCJwbGFpbiIsInBhcnNlSW50Iiwic291cmNlSW5zdGFuY2UiLCJ0YXJnZXRJbnN0YW5jZXMiLCJvciIsImFzc29jaWF0ZWRPYmplY3RzIiwidG9JbnN0YW5jZUFycmF5Iiwib2xkQXNzb2NpYXRpb25zIiwicHJvbWlzZXMiLCJvYnNvbGV0ZUFzc29jaWF0aW9ucyIsImZpbHRlciIsIm9sZCIsImZpbmQiLCJ1bmFzc29jaWF0ZWRPYmplY3RzIiwidXBkYXRlV2hlcmUiLCJ1cGRhdGUiLCJhc3NvY2lhdGVkT2JqZWN0IiwidW5hc3NvY2lhdGVkT2JqZWN0IiwiUHJvbWlzZSIsImFsbCIsInJldHVybiIsInJlc29sdmUiLCJ0YXJnZXRJbnN0YW5jZSIsImZpZWxkcyIsImF0dHJpYnV0ZSIsImtleXMiLCJhbGlhcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQUQsQ0FBckI7O0FBQ0EsTUFBTUMsT0FBTyxHQUFHRCxPQUFPLENBQUMsV0FBRCxDQUF2Qjs7QUFDQSxNQUFNRSxDQUFDLEdBQUdGLE9B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QVosQ0FBbUI0QixNQUFuQixFQUEyQmpFLE9BQTNCLENBQVA7QUFDRDs7OzJDQUVzQnlILEssRUFBTztBQUM1QixVQUFJLE9BQU9BLEtBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDN0IsZUFBTyxLQUFLaEgsRUFBTCxLQUFZZ0gsS0FBbkI7QUFDRDs7QUFFRCxVQUFJQSxLQUFLLElBQUlBLEtBQUssQ0FBQzVHLE1BQW5CLEVBQTJCO0FBQ3pCLGVBQU8sS0FBS0osRUFBTCxLQUFZZ0gsS0FBSyxDQUFDNUcsTUFBekI7QUFDRDs7QUFFRCxhQUFPLENBQUMsS0FBS0gsU0FBYjtBQUNEOzs7O0VBamRtQmYsVzs7QUFvZHRCK0gsTUFBTSxDQUFDQyxPQUFQLEdBQWlCOUgsT0FBakI7QUFDQTZILE1BQU0sQ0FBQ0MsT0FBUCxDQUFlOUgsT0FBZixHQUF5QkEsT0FBekI7QUFDQTZILE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCL0gsT0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuY29uc3QgSGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgQXNzb2NpYXRpb24gPSByZXF1aXJlKCcuL2Jhc2UnKTtcbmNvbnN0IE9wID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzJyk7XG5cbi8qKlxuICogT25lLXRvLW1hbnkgYXNzb2NpYXRpb25cbiAqXG4gKiBJbiB0aGUgQVBJIHJlZmVyZW5jZSBiZWxvdywgYWRkIHRoZSBuYW1lIG9mIHRoZSBhc3NvY2lhdGlvbiB0byB0aGUgbWV0aG9kLCBlLmcuIGZvciBgVXNlci5oYXNNYW55KFByb2plY3QpYCB0aGUgZ2V0dGVyIHdpbGwgYmUgYHVzZXIuZ2V0UHJvamVjdHMoKWAuXG4gKiBJZiB0aGUgYXNzb2NpYXRpb24gaXMgYWxpYXNlZCwgdXNlIHRoZSBhbGlhcyBpbnN0ZWFkLCBlLmcuIGBVc2VyLmhhc01hbnkoUHJvamVjdCwgeyBhczogJ2pvYnMnIH0pYCB3aWxsIGJlIGB1c2VyLmdldEpvYnMoKWAuXG4gKlxuICogQHNlZSB7QGxpbmsgTW9kZWwuaGFzTWFueX1cbiAqL1xuY2xhc3MgSGFzTWFueSBleHRlbmRzIEFzc29jaWF0aW9uIHtcbiAgY29uc3RydWN0b3Ioc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihzb3VyY2UsIHRhcmdldCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLmFzc29jaWF0aW9uVHlwZSA9ICdIYXNNYW55JztcbiAgICB0aGlzLnRhcmdldEFzc29jaWF0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNlcXVlbGl6ZSA9IHNvdXJjZS5zZXF1ZWxpemU7XG4gICAgdGhpcy5pc011bHRpQXNzb2NpYXRpb24gPSB0cnVlO1xuICAgIHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZSA9IHt9O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy50aHJvdWdoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ046TSBhc3NvY2lhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBoYXNNYW55LiBVc2UgYmVsb25nc1RvTWFueSBpbnN0ZWFkJyk7XG4gICAgfVxuXG4gICAgLypcbiAgICAqIElmIHNlbGYgYXNzb2NpYXRpb24sIHRoaXMgaXMgdGhlIHRhcmdldCBhc3NvY2lhdGlvblxuICAgICovXG4gICAgaWYgKHRoaXMuaXNTZWxmQXNzb2NpYXRpb24pIHtcbiAgICAgIHRoaXMudGFyZ2V0QXNzb2NpYXRpb24gPSB0aGlzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFzKSB7XG4gICAgICB0aGlzLmlzQWxpYXNlZCA9IHRydWU7XG5cbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QodGhpcy5hcykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm5hbWUgPSB0aGlzLmFzO1xuICAgICAgICB0aGlzLmFzID0gdGhpcy5hcy5wbHVyYWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMubmFtZSA9IHtcbiAgICAgICAgICBwbHVyYWw6IHRoaXMuYXMsXG4gICAgICAgICAgc2luZ3VsYXI6IFV0aWxzLnNpbmd1bGFyaXplKHRoaXMuYXMpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXMgPSB0aGlzLnRhcmdldC5vcHRpb25zLm5hbWUucGx1cmFsO1xuICAgICAgdGhpcy5vcHRpb25zLm5hbWUgPSB0aGlzLnRhcmdldC5vcHRpb25zLm5hbWU7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBGb3JlaWduIGtleSBzZXR1cFxuICAgICAqL1xuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMub3B0aW9ucy5mb3JlaWduS2V5KSkge1xuICAgICAgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlID0gdGhpcy5vcHRpb25zLmZvcmVpZ25LZXk7XG4gICAgICB0aGlzLmZvcmVpZ25LZXkgPSB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUubmFtZSB8fCB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUuZmllbGROYW1lO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmZvcmVpZ25LZXkpIHtcbiAgICAgIHRoaXMuZm9yZWlnbktleSA9IHRoaXMub3B0aW9ucy5mb3JlaWduS2V5O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5mb3JlaWduS2V5KSB7XG4gICAgICB0aGlzLmZvcmVpZ25LZXkgPSBVdGlscy5jYW1lbGl6ZShcbiAgICAgICAgW1xuICAgICAgICAgIHRoaXMuc291cmNlLm9wdGlvbnMubmFtZS5zaW5ndWxhcixcbiAgICAgICAgICB0aGlzLnNvdXJjZS5wcmltYXJ5S2V5QXR0cmlidXRlXG4gICAgICAgIF0uam9pbignXycpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhcmdldC5yYXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0pIHtcbiAgICAgIHRoaXMuaWRlbnRpZmllckZpZWxkID0gdGhpcy50YXJnZXQucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldLmZpZWxkIHx8IHRoaXMuZm9yZWlnbktleTtcbiAgICAgIHRoaXMuZm9yZWlnbktleUZpZWxkID0gdGhpcy50YXJnZXQucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldLmZpZWxkIHx8IHRoaXMuZm9yZWlnbktleTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFNvdXJjZSBrZXkgc2V0dXBcbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZUtleSA9IHRoaXMub3B0aW9ucy5zb3VyY2VLZXkgfHwgdGhpcy5zb3VyY2UucHJpbWFyeUtleUF0dHJpYnV0ZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZS5yYXdBdHRyaWJ1dGVzW3RoaXMuc291cmNlS2V5XSkge1xuICAgICAgdGhpcy5zb3VyY2VLZXlBdHRyaWJ1dGUgPSB0aGlzLnNvdXJjZUtleTtcbiAgICAgIHRoaXMuc291cmNlS2V5RmllbGQgPSB0aGlzLnNvdXJjZS5yYXdBdHRyaWJ1dGVzW3RoaXMuc291cmNlS2V5XS5maWVsZCB8fCB0aGlzLnNvdXJjZUtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3VyY2VLZXlBdHRyaWJ1dGUgPSB0aGlzLnNvdXJjZS5wcmltYXJ5S2V5QXR0cmlidXRlO1xuICAgICAgdGhpcy5zb3VyY2VLZXlGaWVsZCA9IHRoaXMuc291cmNlLnByaW1hcnlLZXlGaWVsZDtcbiAgICB9XG5cbiAgICAvLyBHZXQgc2luZ3VsYXIgYW5kIHBsdXJhbCBuYW1lc1xuICAgIC8vIHRyeSB0byB1cHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciwgdW5sZXNzIHRoZSBtb2RlbCBmb3JiaWRzIGl0XG4gICAgY29uc3QgcGx1cmFsID0gXy51cHBlckZpcnN0KHRoaXMub3B0aW9ucy5uYW1lLnBsdXJhbCk7XG4gICAgY29uc3Qgc2luZ3VsYXIgPSBfLnVwcGVyRmlyc3QodGhpcy5vcHRpb25zLm5hbWUuc2luZ3VsYXIpO1xuXG4gICAgdGhpcy5hc3NvY2lhdGlvbkFjY2Vzc29yID0gdGhpcy5hcztcbiAgICB0aGlzLmFjY2Vzc29ycyA9IHtcbiAgICAgIGdldDogYGdldCR7cGx1cmFsfWAsXG4gICAgICBzZXQ6IGBzZXQke3BsdXJhbH1gLFxuICAgICAgYWRkTXVsdGlwbGU6IGBhZGQke3BsdXJhbH1gLFxuICAgICAgYWRkOiBgYWRkJHtzaW5ndWxhcn1gLFxuICAgICAgY3JlYXRlOiBgY3JlYXRlJHtzaW5ndWxhcn1gLFxuICAgICAgcmVtb3ZlOiBgcmVtb3ZlJHtzaW5ndWxhcn1gLFxuICAgICAgcmVtb3ZlTXVsdGlwbGU6IGByZW1vdmUke3BsdXJhbH1gLFxuICAgICAgaGFzU2luZ2xlOiBgaGFzJHtzaW5ndWxhcn1gLFxuICAgICAgaGFzQWxsOiBgaGFzJHtwbHVyYWx9YCxcbiAgICAgIGNvdW50OiBgY291bnQke3BsdXJhbH1gXG4gICAgfTtcbiAgfVxuXG4gIC8vIHRoZSBpZCBpcyBpbiB0aGUgdGFyZ2V0IHRhYmxlXG4gIC8vIG9yIGluIGFuIGV4dHJhIHRhYmxlIHdoaWNoIGNvbm5lY3RzIHR3byB0YWJsZXNcbiAgX2luamVjdEF0dHJpYnV0ZXMoKSB7XG4gICAgY29uc3QgbmV3QXR0cmlidXRlcyA9IHt9O1xuICAgIC8vIENyZWF0ZSBhIG5ldyBvcHRpb25zIG9iamVjdCBmb3IgdXNlIHdpdGggYWRkRm9yZWlnbktleUNvbnN0cmFpbnRzLCB0byBhdm9pZCBwb2xsdXRpbmcgdGhpcy5vcHRpb25zIGluIGNhc2UgaXQgaXMgbGF0ZXIgdXNlZCBmb3IgYSBuOm1cbiAgICBjb25zdCBjb25zdHJhaW50T3B0aW9ucyA9IF8uY2xvbmUodGhpcy5vcHRpb25zKTtcblxuICAgIG5ld0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XSA9IF8uZGVmYXVsdHMoe30sIHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZSwge1xuICAgICAgdHlwZTogdGhpcy5vcHRpb25zLmtleVR5cGUgfHwgdGhpcy5zb3VyY2UucmF3QXR0cmlidXRlc1t0aGlzLnNvdXJjZUtleUF0dHJpYnV0ZV0udHlwZSxcbiAgICAgIGFsbG93TnVsbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb25zdHJhaW50cyAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XSB8fCBuZXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV07XG4gICAgICBjb25zdHJhaW50T3B0aW9ucy5vbkRlbGV0ZSA9IGNvbnN0cmFpbnRPcHRpb25zLm9uRGVsZXRlIHx8ICh0YXJnZXQuYWxsb3dOdWxsID8gJ1NFVCBOVUxMJyA6ICdDQVNDQURFJyk7XG4gICAgICBjb25zdHJhaW50T3B0aW9ucy5vblVwZGF0ZSA9IGNvbnN0cmFpbnRPcHRpb25zLm9uVXBkYXRlIHx8ICdDQVNDQURFJztcbiAgICB9XG5cbiAgICBIZWxwZXJzLmFkZEZvcmVpZ25LZXlDb25zdHJhaW50cyhuZXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0sIHRoaXMuc291cmNlLCB0aGlzLnRhcmdldCwgY29uc3RyYWludE9wdGlvbnMsIHRoaXMuc291cmNlS2V5RmllbGQpO1xuICAgIFV0aWxzLm1lcmdlRGVmYXVsdHModGhpcy50YXJnZXQucmF3QXR0cmlidXRlcywgbmV3QXR0cmlidXRlcyk7XG5cbiAgICB0aGlzLnRhcmdldC5yZWZyZXNoQXR0cmlidXRlcygpO1xuICAgIHRoaXMuc291cmNlLnJlZnJlc2hBdHRyaWJ1dGVzKCk7XG5cbiAgICB0aGlzLmlkZW50aWZpZXJGaWVsZCA9IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XS5maWVsZCB8fCB0aGlzLmZvcmVpZ25LZXk7XG4gICAgdGhpcy5mb3JlaWduS2V5RmllbGQgPSB0aGlzLnRhcmdldC5yYXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0uZmllbGQgfHwgdGhpcy5mb3JlaWduS2V5O1xuICAgIHRoaXMuc291cmNlS2V5RmllbGQgPSB0aGlzLnNvdXJjZS5yYXdBdHRyaWJ1dGVzW3RoaXMuc291cmNlS2V5XS5maWVsZCB8fCB0aGlzLnNvdXJjZUtleTtcblxuICAgIEhlbHBlcnMuY2hlY2tOYW1pbmdDb2xsaXNpb24odGhpcyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG1peGluKG9iaikge1xuICAgIGNvbnN0IG1ldGhvZHMgPSBbJ2dldCcsICdjb3VudCcsICdoYXNTaW5nbGUnLCAnaGFzQWxsJywgJ3NldCcsICdhZGQnLCAnYWRkTXVsdGlwbGUnLCAncmVtb3ZlJywgJ3JlbW92ZU11bHRpcGxlJywgJ2NyZWF0ZSddO1xuICAgIGNvbnN0IGFsaWFzZXMgPSB7XG4gICAgICBoYXNTaW5nbGU6ICdoYXMnLFxuICAgICAgaGFzQWxsOiAnaGFzJyxcbiAgICAgIGFkZE11bHRpcGxlOiAnYWRkJyxcbiAgICAgIHJlbW92ZU11bHRpcGxlOiAncmVtb3ZlJ1xuICAgIH07XG5cbiAgICBIZWxwZXJzLm1peGluTWV0aG9kcyh0aGlzLCBvYmosIG1ldGhvZHMsIGFsaWFzZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBldmVyeXRoaW5nIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhpcywgdXNpbmcgYW4gb3B0aW9uYWwgd2hlcmUgY2xhdXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge01vZGVsfEFycmF5PE1vZGVsPn0gaW5zdGFuY2VzIHNvdXJjZSBpbnN0YW5jZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBmaW5kIG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLndoZXJlXSBBbiBvcHRpb25hbCB3aGVyZSBjbGF1c2UgdG8gbGltaXQgdGhlIGFzc29jaWF0ZWQgbW9kZWxzXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IFtvcHRpb25zLnNjb3BlXSBBcHBseSBhIHNjb3BlIG9uIHRoZSByZWxhdGVkIG1vZGVsLCBvciByZW1vdmUgaXRzIGRlZmF1bHQgc2NvcGUgYnkgcGFzc2luZyBmYWxzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc2NoZW1hXSBBcHBseSBhIHNjaGVtYSBvbiB0aGUgcmVsYXRlZCBtb2RlbFxuICAgKlxuICAgKiBAc2VlXG4gICAqIHtAbGluayBNb2RlbC5maW5kQWxsfSAgZm9yIGEgZnVsbCBleHBsYW5hdGlvbiBvZiBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PE1vZGVsPj59XG4gICAqL1xuICBnZXQoaW5zdGFuY2VzLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB3aGVyZSA9IHt9O1xuXG4gICAgbGV0IE1vZGVsID0gdGhpcy50YXJnZXQ7XG4gICAgbGV0IGluc3RhbmNlO1xuICAgIGxldCB2YWx1ZXM7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5zdGFuY2VzKSkge1xuICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZXM7XG4gICAgICBpbnN0YW5jZXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuc2NvcGUpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24od2hlcmUsIHRoaXMuc2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZXMpIHtcbiAgICAgIHZhbHVlcyA9IGluc3RhbmNlcy5tYXAoaW5zdGFuY2UgPT4gaW5zdGFuY2UuZ2V0KHRoaXMuc291cmNlS2V5LCB7IHJhdzogdHJ1ZSB9KSk7XG5cbiAgICAgIGlmIChvcHRpb25zLmxpbWl0ICYmIGluc3RhbmNlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIG9wdGlvbnMuZ3JvdXBlZExpbWl0ID0ge1xuICAgICAgICAgIGxpbWl0OiBvcHRpb25zLmxpbWl0LFxuICAgICAgICAgIG9uOiB0aGlzLCAvLyBhc3NvY2lhdGlvblxuICAgICAgICAgIHZhbHVlc1xuICAgICAgICB9O1xuXG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLmxpbWl0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2hlcmVbdGhpcy5mb3JlaWduS2V5XSA9IHtcbiAgICAgICAgICBbT3AuaW5dOiB2YWx1ZXNcbiAgICAgICAgfTtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMuZ3JvdXBlZExpbWl0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB3aGVyZVt0aGlzLmZvcmVpZ25LZXldID0gaW5zdGFuY2UuZ2V0KHRoaXMuc291cmNlS2V5LCB7IHJhdzogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBvcHRpb25zLndoZXJlID0gb3B0aW9ucy53aGVyZSA/XG4gICAgICB7IFtPcC5hbmRdOiBbd2hlcmUsIG9wdGlvbnMud2hlcmVdIH0gOlxuICAgICAgd2hlcmU7XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdzY29wZScpKSB7XG4gICAgICBpZiAoIW9wdGlvbnMuc2NvcGUpIHtcbiAgICAgICAgTW9kZWwgPSBNb2RlbC51bnNjb3BlZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTW9kZWwgPSBNb2RlbC5zY29wZShvcHRpb25zLnNjb3BlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdzY2hlbWEnKSkge1xuICAgICAgTW9kZWwgPSBNb2RlbC5zY2hlbWEob3B0aW9ucy5zY2hlbWEsIG9wdGlvbnMuc2NoZW1hRGVsaW1pdGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTW9kZWwuZmluZEFsbChvcHRpb25zKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlKSByZXR1cm4gcmVzdWx0cztcblxuICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIGluc3RhbmNlcykge1xuICAgICAgICByZXN1bHRbaW5zdGFuY2UuZ2V0KHRoaXMuc291cmNlS2V5LCB7IHJhdzogdHJ1ZSB9KV0gPSBbXTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBpbnN0YW5jZSBvZiByZXN1bHRzKSB7XG4gICAgICAgIHJlc3VsdFtpbnN0YW5jZS5nZXQodGhpcy5mb3JlaWduS2V5LCB7IHJhdzogdHJ1ZSB9KV0ucHVzaChpbnN0YW5jZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ291bnQgZXZlcnl0aGluZyBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMsIHVzaW5nIGFuIG9wdGlvbmFsIHdoZXJlIGNsYXVzZS5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gICAgICAgIGluc3RhbmNlIHRoZSBzb3VyY2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgW29wdGlvbnNdIGZpbmQgJiBjb3VudCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgIFtvcHRpb25zLndoZXJlXSBBbiBvcHRpb25hbCB3aGVyZSBjbGF1c2UgdG8gbGltaXQgdGhlIGFzc29jaWF0ZWQgbW9kZWxzXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IFtvcHRpb25zLnNjb3BlXSBBcHBseSBhIHNjb3BlIG9uIHRoZSByZWxhdGVkIG1vZGVsLCBvciByZW1vdmUgaXRzIGRlZmF1bHQgc2NvcGUgYnkgcGFzc2luZyBmYWxzZVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fVxuICAgKi9cbiAgY291bnQoaW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xuXG4gICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gW1xuICAgICAgW1xuICAgICAgICB0aGlzLnNlcXVlbGl6ZS5mbihcbiAgICAgICAgICAnQ09VTlQnLFxuICAgICAgICAgIHRoaXMuc2VxdWVsaXplLmNvbChgJHt0aGlzLnRhcmdldC5uYW1lfS4ke3RoaXMudGFyZ2V0LnByaW1hcnlLZXlGaWVsZH1gKVxuICAgICAgICApLFxuICAgICAgICAnY291bnQnXG4gICAgICBdXG4gICAgXTtcbiAgICBvcHRpb25zLnJhdyA9IHRydWU7XG4gICAgb3B0aW9ucy5wbGFpbiA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5nZXQoaW5zdGFuY2UsIG9wdGlvbnMpLnRoZW4ocmVzdWx0ID0+IHBhcnNlSW50KHJlc3VsdC5jb3VudCwgMTApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBvbmUgb3IgbW9yZSByb3dzIGFyZSBhc3NvY2lhdGVkIHdpdGggYHRoaXNgLlxuICAgKlxuICAgKiBAcGFyYW0ge01vZGVsfSBzb3VyY2VJbnN0YW5jZSB0aGUgc291cmNlIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7TW9kZWx8TW9kZWxbXXxzdHJpbmdbXXxzdHJpbmd8bnVtYmVyW118bnVtYmVyfSBbdGFyZ2V0SW5zdGFuY2VzXSBDYW4gYmUgYW4gYXJyYXkgb2YgaW5zdGFuY2VzIG9yIHRoZWlyIHByaW1hcnkga2V5c1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgcGFzc2VkIHRvIGdldEFzc29jaWF0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGhhcyhzb3VyY2VJbnN0YW5jZSwgdGFyZ2V0SW5zdGFuY2VzLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgd2hlcmUgPSB7fTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXJnZXRJbnN0YW5jZXMpKSB7XG4gICAgICB0YXJnZXRJbnN0YW5jZXMgPSBbdGFyZ2V0SW5zdGFuY2VzXTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgc2NvcGU6IGZhbHNlLFxuICAgICAgYXR0cmlidXRlczogW3RoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGVdLFxuICAgICAgcmF3OiB0cnVlXG4gICAgfSk7XG5cbiAgICB3aGVyZVtPcC5vcl0gPSB0YXJnZXRJbnN0YW5jZXMubWFwKGluc3RhbmNlID0+IHtcbiAgICAgIGlmIChpbnN0YW5jZSBpbnN0YW5jZW9mIHRoaXMudGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS53aGVyZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3RoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGVdOiBpbnN0YW5jZVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIG9wdGlvbnMud2hlcmUgPSB7XG4gICAgICBbT3AuYW5kXTogW1xuICAgICAgICB3aGVyZSxcbiAgICAgICAgb3B0aW9ucy53aGVyZVxuICAgICAgXVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5nZXQoc291cmNlSW5zdGFuY2UsIG9wdGlvbnMpLnRoZW4oYXNzb2NpYXRlZE9iamVjdHMgPT4gYXNzb2NpYXRlZE9iamVjdHMubGVuZ3RoID09PSB0YXJnZXRJbnN0YW5jZXMubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFzc29jaWF0ZWQgbW9kZWxzIGJ5IHBhc3NpbmcgYW4gYXJyYXkgb2YgcGVyc2lzdGVkIGluc3RhbmNlcyBvciB0aGVpciBwcmltYXJ5IGtleXMuIEV2ZXJ5dGhpbmcgdGhhdCBpcyBub3QgaW4gdGhlIHBhc3NlZCBhcnJheSB3aWxsIGJlIHVuLWFzc29jaWF0ZWRcbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2Ugc291cmNlIGluc3RhbmNlIHRvIGFzc29jaWF0ZSBuZXcgaW5zdGFuY2VzIHdpdGhcbiAgICogQHBhcmFtIHtNb2RlbHxNb2RlbFtdfHN0cmluZ1tdfHN0cmluZ3xudW1iZXJbXXxudW1iZXJ9IFt0YXJnZXRJbnN0YW5jZXNdIEFuIGFycmF5IG9mIHBlcnNpc3RlZCBpbnN0YW5jZXMgb3IgcHJpbWFyeSBrZXkgb2YgaW5zdGFuY2VzIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMuIFBhc3MgYG51bGxgIG9yIGB1bmRlZmluZWRgIHRvIHJlbW92ZSBhbGwgYXNzb2NpYXRpb25zLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgcGFzc2VkIHRvIGB0YXJnZXQuZmluZEFsbGAgYW5kIGB1cGRhdGVgLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMudmFsaWRhdGVdIFJ1biB2YWxpZGF0aW9uIGZvciB0aGUgam9pbiBtb2RlbFxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHNldChzb3VyY2VJbnN0YW5jZSwgdGFyZ2V0SW5zdGFuY2VzLCBvcHRpb25zKSB7XG4gICAgaWYgKHRhcmdldEluc3RhbmNlcyA9PT0gbnVsbCkge1xuICAgICAgdGFyZ2V0SW5zdGFuY2VzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldEluc3RhbmNlcyA9IHRoaXMudG9JbnN0YW5jZUFycmF5KHRhcmdldEluc3RhbmNlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0KHNvdXJjZUluc3RhbmNlLCBfLmRlZmF1bHRzKHsgc2NvcGU6IGZhbHNlLCByYXc6IHRydWUgfSwgb3B0aW9ucykpLnRoZW4ob2xkQXNzb2NpYXRpb25zID0+IHtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICBjb25zdCBvYnNvbGV0ZUFzc29jaWF0aW9ucyA9IG9sZEFzc29jaWF0aW9ucy5maWx0ZXIob2xkID0+XG4gICAgICAgICF0YXJnZXRJbnN0YW5jZXMuZmluZChvYmogPT5cbiAgICAgICAgICBvYmpbdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZV0gPT09IG9sZFt0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgY29uc3QgdW5hc3NvY2lhdGVkT2JqZWN0cyA9IHRhcmdldEluc3RhbmNlcy5maWx0ZXIob2JqID0+XG4gICAgICAgICFvbGRBc3NvY2lhdGlvbnMuZmluZChvbGQgPT5cbiAgICAgICAgICBvYmpbdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZV0gPT09IG9sZFt0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgbGV0IHVwZGF0ZVdoZXJlO1xuICAgICAgbGV0IHVwZGF0ZTtcblxuICAgICAgaWYgKG9ic29sZXRlQXNzb2NpYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdXBkYXRlID0ge307XG4gICAgICAgIHVwZGF0ZVt0aGlzLmZvcmVpZ25LZXldID0gbnVsbDtcblxuICAgICAgICB1cGRhdGVXaGVyZSA9IHtcbiAgICAgICAgICBbdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZV06IG9ic29sZXRlQXNzb2NpYXRpb25zLm1hcChhc3NvY2lhdGVkT2JqZWN0ID0+XG4gICAgICAgICAgICBhc3NvY2lhdGVkT2JqZWN0W3RoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGVdXG4gICAgICAgICAgKVxuICAgICAgICB9O1xuXG5cbiAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnRhcmdldC51bnNjb3BlZCgpLnVwZGF0ZShcbiAgICAgICAgICB1cGRhdGUsXG4gICAgICAgICAgXy5kZWZhdWx0cyh7XG4gICAgICAgICAgICB3aGVyZTogdXBkYXRlV2hlcmVcbiAgICAgICAgICB9LCBvcHRpb25zKVxuICAgICAgICApKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVuYXNzb2NpYXRlZE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICB1cGRhdGVXaGVyZSA9IHt9O1xuXG4gICAgICAgIHVwZGF0ZSA9IHt9O1xuICAgICAgICB1cGRhdGVbdGhpcy5mb3JlaWduS2V5XSA9IHNvdXJjZUluc3RhbmNlLmdldCh0aGlzLnNvdXJjZUtleSk7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih1cGRhdGUsIHRoaXMuc2NvcGUpO1xuICAgICAgICB1cGRhdGVXaGVyZVt0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXSA9IHVuYXNzb2NpYXRlZE9iamVjdHMubWFwKHVuYXNzb2NpYXRlZE9iamVjdCA9PlxuICAgICAgICAgIHVuYXNzb2NpYXRlZE9iamVjdFt0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApO1xuXG4gICAgICAgIHByb21pc2VzLnB1c2godGhpcy50YXJnZXQudW5zY29wZWQoKS51cGRhdGUoXG4gICAgICAgICAgdXBkYXRlLFxuICAgICAgICAgIF8uZGVmYXVsdHMoe1xuICAgICAgICAgICAgd2hlcmU6IHVwZGF0ZVdoZXJlXG4gICAgICAgICAgfSwgb3B0aW9ucylcbiAgICAgICAgKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBVdGlscy5Qcm9taXNlLmFsbChwcm9taXNlcykucmV0dXJuKHNvdXJjZUluc3RhbmNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGUgb25lIG9yIG1vcmUgdGFyZ2V0IHJvd3Mgd2l0aCBgdGhpc2AuIFRoaXMgbWV0aG9kIGFjY2VwdHMgYSBNb2RlbCAvIHN0cmluZyAvIG51bWJlciB0byBhc3NvY2lhdGUgYSBzaW5nbGUgcm93LFxuICAgKiBvciBhIG1peGVkIGFycmF5IG9mIE1vZGVsIC8gc3RyaW5nIC8gbnVtYmVycyB0byBhc3NvY2lhdGUgbXVsdGlwbGUgcm93cy5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2UgdGhlIHNvdXJjZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge01vZGVsfE1vZGVsW118c3RyaW5nW118c3RyaW5nfG51bWJlcltdfG51bWJlcn0gW3RhcmdldEluc3RhbmNlc10gQSBzaW5nbGUgaW5zdGFuY2Ugb3IgcHJpbWFyeSBrZXksIG9yIGEgbWl4ZWQgYXJyYXkgb2YgcGVyc2lzdGVkIGluc3RhbmNlcyBvciBwcmltYXJ5IGtleXNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHBhc3NlZCB0byBgdGFyZ2V0LnVwZGF0ZWAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgYWRkKHNvdXJjZUluc3RhbmNlLCB0YXJnZXRJbnN0YW5jZXMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGFyZ2V0SW5zdGFuY2VzKSByZXR1cm4gVXRpbHMuUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBjb25zdCB1cGRhdGUgPSB7fTtcblxuICAgIHRhcmdldEluc3RhbmNlcyA9IHRoaXMudG9JbnN0YW5jZUFycmF5KHRhcmdldEluc3RhbmNlcyk7XG5cbiAgICB1cGRhdGVbdGhpcy5mb3JlaWduS2V5XSA9IHNvdXJjZUluc3RhbmNlLmdldCh0aGlzLnNvdXJjZUtleSk7XG4gICAgT2JqZWN0LmFzc2lnbih1cGRhdGUsIHRoaXMuc2NvcGUpO1xuXG4gICAgY29uc3Qgd2hlcmUgPSB7XG4gICAgICBbdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZV06IHRhcmdldEluc3RhbmNlcy5tYXAodW5hc3NvY2lhdGVkT2JqZWN0ID0+XG4gICAgICAgIHVuYXNzb2NpYXRlZE9iamVjdC5nZXQodGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZSlcbiAgICAgIClcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0LnVuc2NvcGVkKCkudXBkYXRlKHVwZGF0ZSwgXy5kZWZhdWx0cyh7IHdoZXJlIH0sIG9wdGlvbnMpKS5yZXR1cm4oc291cmNlSW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuLWFzc29jaWF0ZSBvbmUgb3Igc2V2ZXJhbCB0YXJnZXQgcm93cy5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2UgaW5zdGFuY2UgdG8gdW4gYXNzb2NpYXRlIGluc3RhbmNlcyB3aXRoXG4gICAqIEBwYXJhbSB7TW9kZWx8TW9kZWxbXXxzdHJpbmd8c3RyaW5nW118bnVtYmVyfG51bWJlcltdfSBbdGFyZ2V0SW5zdGFuY2VzXSBDYW4gYmUgYW4gSW5zdGFuY2Ugb3IgaXRzIHByaW1hcnkga2V5LCBvciBhIG1peGVkIGFycmF5IG9mIGluc3RhbmNlcyBhbmQgcHJpbWFyeSBrZXlzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBwYXNzZWQgdG8gYHRhcmdldC51cGRhdGVgXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgcmVtb3ZlKHNvdXJjZUluc3RhbmNlLCB0YXJnZXRJbnN0YW5jZXMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgIFt0aGlzLmZvcmVpZ25LZXldOiBudWxsXG4gICAgfTtcblxuICAgIHRhcmdldEluc3RhbmNlcyA9IHRoaXMudG9JbnN0YW5jZUFycmF5KHRhcmdldEluc3RhbmNlcyk7XG5cbiAgICBjb25zdCB3aGVyZSA9IHtcbiAgICAgIFt0aGlzLmZvcmVpZ25LZXldOiBzb3VyY2VJbnN0YW5jZS5nZXQodGhpcy5zb3VyY2VLZXkpLFxuICAgICAgW3RoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGVdOiB0YXJnZXRJbnN0YW5jZXMubWFwKHRhcmdldEluc3RhbmNlID0+XG4gICAgICAgIHRhcmdldEluc3RhbmNlLmdldCh0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlKVxuICAgICAgKVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy50YXJnZXQudW5zY29wZWQoKS51cGRhdGUodXBkYXRlLCBfLmRlZmF1bHRzKHsgd2hlcmUgfSwgb3B0aW9ucykpLnJldHVybih0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGFzc29jaWF0ZWQgbW9kZWwgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIHRoaXMuXG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZWx9IHNvdXJjZUluc3RhbmNlIHNvdXJjZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW3ZhbHVlc10gdmFsdWVzIGZvciB0YXJnZXQgbW9kZWwgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHBhc3NlZCB0byBgdGFyZ2V0LmNyZWF0ZWBcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBjcmVhdGUoc291cmNlSW5zdGFuY2UsIHZhbHVlcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIGZpZWxkczogb3B0aW9uc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlcyA9IHt9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNjb3BlKSB7XG4gICAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBPYmplY3Qua2V5cyh0aGlzLnNjb3BlKSkge1xuICAgICAgICB2YWx1ZXNbYXR0cmlidXRlXSA9IHRoaXMuc2NvcGVbYXR0cmlidXRlXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRzKSBvcHRpb25zLmZpZWxkcy5wdXNoKGF0dHJpYnV0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFsdWVzW3RoaXMuZm9yZWlnbktleV0gPSBzb3VyY2VJbnN0YW5jZS5nZXQodGhpcy5zb3VyY2VLZXkpO1xuICAgIGlmIChvcHRpb25zLmZpZWxkcykgb3B0aW9ucy5maWVsZHMucHVzaCh0aGlzLmZvcmVpZ25LZXkpO1xuICAgIHJldHVybiB0aGlzLnRhcmdldC5jcmVhdGUodmFsdWVzLCBvcHRpb25zKTtcbiAgfVxuXG4gIHZlcmlmeUFzc29jaWF0aW9uQWxpYXMoYWxpYXMpIHtcbiAgICBpZiAodHlwZW9mIGFsaWFzID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMuYXMgPT09IGFsaWFzO1xuICAgIH1cblxuICAgIGlmIChhbGlhcyAmJiBhbGlhcy5wbHVyYWwpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzID09PSBhbGlhcy5wbHVyYWw7XG4gICAgfVxuXG4gICAgcmV0dXJuICF0aGlzLmlzQWxpYXNlZDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc01hbnk7XG5tb2R1bGUuZXhwb3J0cy5IYXNNYW55ID0gSGFzTWFueTtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBIYXNNYW55O1xuIl19 \ No newline at end of file diff --git a/dist/associations/has-one.js b/dist/associations/has-one.js index 58b0f77..3bf7a9f 100644 --- a/dist/associations/has-one.js +++ b/dist/associations/has-one.js @@ -6,15 +6,19 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const Utils = require('./../utils'); @@ -35,17 +39,17 @@ const Op = require('../operators'); */ -let HasOne = -/*#__PURE__*/ -function (_Association) { +let HasOne = /*#__PURE__*/function (_Association) { _inherits(HasOne, _Association); + var _super = _createSuper(HasOne); + function HasOne(source, target, options) { var _this; _classCallCheck(this, HasOne); - _this = _possibleConstructorReturn(this, _getPrototypeOf(HasOne).call(this, source, target, options)); + _this = _super.call(this, source, target, options); _this.associationType = 'HasOne'; _this.isSingleAssociation = true; _this.foreignKeyAttribute = {}; @@ -309,4 +313,4 @@ function (_Association) { }(Association); module.exports = HasOne; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvaGFzLW9uZS5qcyJdLCJuYW1lcyI6WyJVdGlscyIsInJlcXVpcmUiLCJIZWxwZXJzIiwiXyIsIkFzc29jaWF0aW9uIiwiT3AiLCJIYXNPbmUiLCJzb3VyY2UiLCJ0YXJnZXQiLCJvcHRpb25zIiwiYXNzb2NpYXRpb25UeXBlIiwiaXNTaW5nbGVBc3NvY2lhdGlvbiIsImZvcmVpZ25LZXlBdHRyaWJ1dGUiLCJhcyIsImlzQWxpYXNlZCIsIm5hbWUiLCJzaW5ndWxhciIsImlzT2JqZWN0IiwiZm9yZWlnbktleSIsImZpZWxkTmFtZSIsImNhbWVsaXplIiwic2luZ3VsYXJpemUiLCJwcmltYXJ5S2V5QXR0cmlidXRlIiwiam9pbiIsInNvdXJjZUtleSIsInJhd0F0dHJpYnV0ZXMiLCJFcnJvciIsInNvdXJjZUtleUF0dHJpYnV0ZSIsInNvdXJjZUtleUZpZWxkIiwiZmllbGQiLCJzb3VyY2VLZXlJc1ByaW1hcnkiLCJhc3NvY2lhdGlvbkFjY2Vzc29yIiwidXNlSG9va3MiLCJpZGVudGlmaWVyRmllbGQiLCJ1cHBlckZpcnN0IiwiYWNjZXNzb3JzIiwiZ2V0Iiwic2V0IiwiY3JlYXRlIiwibmV3QXR0cmlidXRlcyIsImRlZmF1bHRzIiwidHlwZSIsImtleVR5cGUiLCJhbGxvd051bGwiLCJjb25zdHJhaW50cyIsIm9uRGVsZXRlIiwib25VcGRhdGUiLCJhZGRGb3JlaWduS2V5Q29uc3RyYWludHMiLCJtZXJnZURlZmF1bHRzIiwicmVmcmVzaEF0dHJpYnV0ZXMiLCJjaGVja05hbWluZ0NvbGxpc2lvbiIsIm9iaiIsIm1ldGhvZHMiLCJtaXhpbk1ldGhvZHMiLCJpbnN0YW5jZXMiLCJ3aGVyZSIsIlRhcmdldCIsImluc3RhbmNlIiwiY2xvbmVEZWVwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic2NvcGUiLCJ1bnNjb3BlZCIsInNjaGVtYSIsInNjaGVtYURlbGltaXRlciIsIkFycmF5IiwiaXNBcnJheSIsInVuZGVmaW5lZCIsImluIiwibWFwIiwiYXNzaWduIiwiYW5kIiwiZmluZEFsbCIsInRoZW4iLCJyZXN1bHRzIiwicmVzdWx0IiwicmF3IiwiZmluZE9uZSIsInNvdXJjZUluc3RhbmNlIiwiYXNzb2NpYXRlZEluc3RhbmNlIiwiYWxyZWFkeUFzc29jaWF0ZWQiLCJvbGRJbnN0YW5jZSIsInByaW1hcnlLZXlBdHRyaWJ1dGVzIiwiZXZlcnkiLCJhdHRyaWJ1dGUiLCJzYXZlIiwiZmllbGRzIiwiYXNzb2NpYXRpb24iLCJ0bXBJbnN0YW5jZSIsImJ1aWxkIiwiaXNOZXdSZWNvcmQiLCJ2YWx1ZXMiLCJrZXlzIiwicHVzaCIsImFsaWFzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQUQsQ0FBckI7O0FBQ0EsTUFBTUMsT0FBTyxHQUFHRCxPQUFPLENBQUMsV0FBRCxDQUF2Qjs7QUFDQSxNQUFNRSxDQUFDLEdBQUdGLE9BQU8sQ0FBQyxRQUFELENBQWpCOztBQUNBLE1BQU1HLFdBQVcsR0FBR0gsT0FBTyxDQUFDLFFBQUQsQ0FBM0I7O0FBQ0EsTUFBTUksRUFBRSxHQUFHSixPQUFPLENBQUMsY0FBRCxDQUFsQjtBQUVBOzs7Ozs7Ozs7O0lBUU1LLE07Ozs7O0FBQ0osa0JBQVlDLE1BQVosRUFBb0JDLE1BQXBCLEVBQTRCQyxPQUE1QixFQUFxQztBQUFBOztBQUFBOztBQUNuQyxnRkFBTUYsTUFBTixFQUFjQyxNQUFkLEVBQXNCQyxPQUF0QjtBQUVBLFVBQUtDLGVBQUwsR0FBdUIsUUFBdkI7QUFDQSxVQUFLQyxtQkFBTCxHQUEyQixJQUEzQjtBQUNBLFVBQUtDLG1CQUFMLEdBQTJCLEVBQTNCOztBQUVBLFFBQUksTUFBS0MsRUFBVCxFQUFhO0FBQ1gsWUFBS0MsU0FBTCxHQUFpQixJQUFqQjtBQUNBLFlBQUtMLE9BQUwsQ0FBYU0sSUFBYixHQUFvQjtBQUNsQkMs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QUFQLEdBQWlCNUYsTUFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBVdGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcclxuY29uc3QgSGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IEFzc29jaWF0aW9uID0gcmVxdWlyZSgnLi9iYXNlJyk7XHJcbmNvbnN0IE9wID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzJyk7XHJcblxyXG4vKipcclxuICogT25lLXRvLW9uZSBhc3NvY2lhdGlvblxyXG4gKlxyXG4gKiBJbiB0aGUgQVBJIHJlZmVyZW5jZSBiZWxvdywgYWRkIHRoZSBuYW1lIG9mIHRoZSBhc3NvY2lhdGlvbiB0byB0aGUgbWV0aG9kLCBlLmcuIGZvciBgVXNlci5oYXNPbmUoUHJvamVjdClgIHRoZSBnZXR0ZXIgd2lsbCBiZSBgdXNlci5nZXRQcm9qZWN0KClgLlxyXG4gKiBUaGlzIGlzIGFsbW9zdCB0aGUgc2FtZSBhcyBgYmVsb25nc1RvYCB3aXRoIG9uZSBleGNlcHRpb24gLSBUaGUgZm9yZWlnbiBrZXkgd2lsbCBiZSBkZWZpbmVkIG9uIHRoZSB0YXJnZXQgbW9kZWwuXHJcbiAqXHJcbiAqIEBzZWUge0BsaW5rIE1vZGVsLmhhc09uZX1cclxuICovXHJcbmNsYXNzIEhhc09uZSBleHRlbmRzIEFzc29jaWF0aW9uIHtcclxuICBjb25zdHJ1Y3Rvcihzb3VyY2UsIHRhcmdldCwgb3B0aW9ucykge1xyXG4gICAgc3VwZXIoc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuYXNzb2NpYXRpb25UeXBlID0gJ0hhc09uZSc7XHJcbiAgICB0aGlzLmlzU2luZ2xlQXNzb2NpYXRpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlID0ge307XHJcblxyXG4gICAgaWYgKHRoaXMuYXMpIHtcclxuICAgICAgdGhpcy5pc0FsaWFzZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLm9wdGlvbnMubmFtZSA9IHtcclxuICAgICAgICBzaW5ndWxhcjogdGhpcy5hc1xyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hcyA9IHRoaXMudGFyZ2V0Lm9wdGlvbnMubmFtZS5zaW5ndWxhcjtcclxuICAgICAgdGhpcy5vcHRpb25zLm5hbWUgPSB0aGlzLnRhcmdldC5vcHRpb25zLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKF8uaXNPYmplY3QodGhpcy5vcHRpb25zLmZvcmVpZ25LZXkpKSB7XHJcbiAgICAgIHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZSA9IHRoaXMub3B0aW9ucy5mb3JlaWduS2V5O1xyXG4gICAgICB0aGlzLmZvcmVpZ25LZXkgPSB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUubmFtZSB8fCB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUuZmllbGROYW1lO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZm9yZWlnbktleSkge1xyXG4gICAgICB0aGlzLmZvcmVpZ25LZXkgPSB0aGlzLm9wdGlvbnMuZm9yZWlnbktleTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZm9yZWlnbktleSkge1xyXG4gICAgICB0aGlzLmZvcmVpZ25LZXkgPSBVdGlscy5jYW1lbGl6ZShcclxuICAgICAgICBbXHJcbiAgICAgICAgICBVdGlscy5zaW5ndWxhcml6ZSh0aGlzLm9wdGlvbnMuYXMgfHwgdGhpcy5zb3VyY2UubmFtZSksXHJcbiAgICAgICAgICB0aGlzLnNvdXJjZS5wcmltYXJ5S2V5QXR0cmlidXRlXHJcbiAgICAgICAgXS5qb2luKCdfJylcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3B0aW9ucy5zb3VyY2VLZXlcclxuICAgICAgJiYgIXRoaXMuc291cmNlLnJhd0F0dHJpYnV0ZXNbdGhpcy5vcHRpb25zLnNvdXJjZUtleV1cclxuICAgICkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXR0cmlidXRlIFwiJHt0aGlzLm9wdGlvbnMuc291cmNlS2V5fVwiIHBhc3NlZCBhcyBzb3VyY2VLZXksIGRlZmluZSB0aGlzIGF0dHJpYnV0ZSBvbiBtb2RlbCBcIiR7dGhpcy5zb3VyY2UubmFtZX1cIiBmaXJzdGApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc291cmNlS2V5ID0gdGhpcy5zb3VyY2VLZXlBdHRyaWJ1dGUgPSB0aGlzLm9wdGlvbnMuc291cmNlS2V5IHx8IHRoaXMuc291cmNlLnByaW1hcnlLZXlBdHRyaWJ1dGU7XHJcbiAgICB0aGlzLnNvdXJjZUtleUZpZWxkID0gdGhpcy5zb3VyY2UucmF3QXR0cmlidXRlc1t0aGlzLnNvdXJjZUtleV0uZmllbGQgfHwgdGhpcy5zb3VyY2VLZXk7XHJcbiAgICB0aGlzLnNvdXJjZUtleUlzUHJpbWFyeSA9IHRoaXMuc291cmNlS2V5ID09PSB0aGlzLnNvdXJjZS5wcmltYXJ5S2V5QXR0cmlidXRlO1xyXG5cclxuICAgIHRoaXMuYXNzb2NpYXRpb25BY2Nlc3NvciA9IHRoaXMuYXM7XHJcbiAgICB0aGlzLm9wdGlvbnMudXNlSG9va3MgPSBvcHRpb25zLnVzZUhvb2tzO1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldC5yYXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0pIHtcclxuICAgICAgdGhpcy5pZGVudGlmaWVyRmllbGQgPSB0aGlzLnRhcmdldC5yYXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0uZmllbGQgfHwgdGhpcy5mb3JlaWduS2V5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdldCBzaW5ndWxhciBuYW1lLCB0cnlpbmcgdG8gdXBwZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXIsIHVubGVzcyB0aGUgbW9kZWwgZm9yYmlkcyBpdFxyXG4gICAgY29uc3Qgc2luZ3VsYXIgPSBfLnVwcGVyRmlyc3QodGhpcy5vcHRpb25zLm5hbWUuc2luZ3VsYXIpO1xyXG5cclxuICAgIHRoaXMuYWNjZXNzb3JzID0ge1xyXG4gICAgICBnZXQ6IGBnZXQke3Npbmd1bGFyfWAsXHJcbiAgICAgIHNldDogYHNldCR7c2luZ3VsYXJ9YCxcclxuICAgICAgY3JlYXRlOiBgY3JlYXRlJHtzaW5ndWxhcn1gXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gdGhlIGlkIGlzIGluIHRoZSB0YXJnZXQgdGFibGVcclxuICBfaW5qZWN0QXR0cmlidXRlcygpIHtcclxuICAgIGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSB7fTtcclxuXHJcbiAgICBuZXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0gPSBfLmRlZmF1bHRzKHt9LCB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUsIHtcclxuICAgICAgdHlwZTogdGhpcy5vcHRpb25zLmtleVR5cGUgfHwgdGhpcy5zb3VyY2UucmF3QXR0cmlidXRlc1t0aGlzLnNvdXJjZUtleV0udHlwZSxcclxuICAgICAgYWxsb3dOdWxsOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnN0cmFpbnRzICE9PSBmYWxzZSkge1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldC5yYXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0gfHwgbmV3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldO1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25EZWxldGUgPSB0aGlzLm9wdGlvbnMub25EZWxldGUgfHwgKHRhcmdldC5hbGxvd051bGwgPyAnU0VUIE5VTEwnIDogJ0NBU0NBREUnKTtcclxuICAgICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlID0gdGhpcy5vcHRpb25zLm9uVXBkYXRlIHx8ICdDQVNDQURFJztcclxuICAgIH1cclxuXHJcbiAgICBIZWxwZXJzLmFkZEZvcmVpZ25LZXlDb25zdHJhaW50cyhuZXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0sIHRoaXMuc291cmNlLCB0aGlzLnRhcmdldCwgdGhpcy5vcHRpb25zLCB0aGlzLnNvdXJjZUtleUZpZWxkKTtcclxuICAgIFV0aWxzLm1lcmdlRGVmYXVsdHModGhpcy50YXJnZXQucmF3QXR0cmlidXRlcywgbmV3QXR0cmlidXRlcyk7XHJcblxyXG4gICAgdGhpcy50YXJnZXQucmVmcmVzaEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICB0aGlzLmlkZW50aWZpZXJGaWVsZCA9IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XS5maWVsZCB8fCB0aGlzLmZvcmVpZ25LZXk7XHJcblxyXG4gICAgSGVscGVycy5jaGVja05hbWluZ0NvbGxpc2lvbih0aGlzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG1peGluKG9iaikge1xyXG4gICAgY29uc3QgbWV0aG9kcyA9IFsnZ2V0JywgJ3NldCcsICdjcmVhdGUnXTtcclxuXHJcbiAgICBIZWxwZXJzLm1peGluTWV0aG9kcyh0aGlzLCBvYmosIG1ldGhvZHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBhc3NvY2lhdGVkIGluc3RhbmNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb2RlbHxBcnJheTxNb2RlbD59IGluc3RhbmNlcyBzb3VyY2UgaW5zdGFuY2VzXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgW29wdGlvbnNdIGZpbmQgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IFtvcHRpb25zLnNjb3BlXSBBcHBseSBhIHNjb3BlIG9uIHRoZSByZWxhdGVkIG1vZGVsLCBvciByZW1vdmUgaXRzIGRlZmF1bHQgc2NvcGUgYnkgcGFzc2luZyBmYWxzZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zY2hlbWFdIEFwcGx5IGEgc2NoZW1hIG9uIHRoZSByZWxhdGVkIG1vZGVsXHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRPbmV9IGZvciBhIGZ1bGwgZXhwbGFuYXRpb24gb2Ygb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWw+fVxyXG4gICAqL1xyXG4gIGdldChpbnN0YW5jZXMsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHdoZXJlID0ge307XHJcblxyXG4gICAgbGV0IFRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgbGV0IGluc3RhbmNlO1xyXG5cclxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc2NvcGUnKSkge1xyXG4gICAgICBpZiAoIW9wdGlvbnMuc2NvcGUpIHtcclxuICAgICAgICBUYXJnZXQgPSBUYXJnZXQudW5zY29wZWQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBUYXJnZXQgPSBUYXJnZXQuc2NvcGUob3B0aW9ucy5zY29wZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdzY2hlbWEnKSkge1xyXG4gICAgICBUYXJnZXQgPSBUYXJnZXQuc2NoZW1hKG9wdGlvbnMuc2NoZW1hLCBvcHRpb25zLnNjaGVtYURlbGltaXRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGluc3RhbmNlcykpIHtcclxuICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZXM7XHJcbiAgICAgIGluc3RhbmNlcyA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5zdGFuY2VzKSB7XHJcbiAgICAgIHdoZXJlW3RoaXMuZm9yZWlnbktleV0gPSB7XHJcbiAgICAgICAgW09wLmluXTogaW5zdGFuY2VzLm1hcChpbnN0YW5jZSA9PiBpbnN0YW5jZS5nZXQodGhpcy5zb3VyY2VLZXkpKVxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd2hlcmVbdGhpcy5mb3JlaWduS2V5XSA9IGluc3RhbmNlLmdldCh0aGlzLnNvdXJjZUtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2NvcGUpIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbih3aGVyZSwgdGhpcy5zY29wZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucy53aGVyZSA9IG9wdGlvbnMud2hlcmUgP1xyXG4gICAgICB7IFtPcC5hbmRdOiBbd2hlcmUsIG9wdGlvbnMud2hlcmVdIH0gOlxyXG4gICAgICB3aGVyZTtcclxuXHJcbiAgICBpZiAoaW5zdGFuY2VzKSB7XHJcbiAgICAgIHJldHVybiBUYXJnZXQuZmluZEFsbChvcHRpb25zKS50aGVuKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7XHJcbiAgICAgICAgICByZXN1bHRbaW5zdGFuY2UuZ2V0KHRoaXMuc291cmNlS2V5LCB7IHJhdzogdHJ1ZSB9KV0gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBpbnN0YW5jZSBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgICByZXN1bHRbaW5zdGFuY2UuZ2V0KHRoaXMuZm9yZWlnbktleSwgeyByYXc6IHRydWUgfSldID0gaW5zdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gVGFyZ2V0LmZpbmRPbmUob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGFzc29jaWF0ZWQgbW9kZWwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfSBzb3VyY2VJbnN0YW5jZSB0aGUgc291cmNlIGluc3RhbmNlXHJcbiAgICogQHBhcmFtIHs/PE1vZGVsPnxzdHJpbmd8bnVtYmVyfSBbYXNzb2NpYXRlZEluc3RhbmNlXSBBbiBwZXJzaXN0ZWQgaW5zdGFuY2Ugb3IgdGhlIHByaW1hcnkga2V5IG9mIGFuIGluc3RhbmNlIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMuIFBhc3MgYG51bGxgIG9yIGB1bmRlZmluZWRgIHRvIHJlbW92ZSB0aGUgYXNzb2NpYXRpb24uXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHBhc3NlZCB0byBnZXRBc3NvY2lhdGlvbiBhbmQgYHRhcmdldC5zYXZlYFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgc2V0KHNvdXJjZUluc3RhbmNlLCBhc3NvY2lhdGVkSW5zdGFuY2UsIG9wdGlvbnMpIHtcclxuICAgIGxldCBhbHJlYWR5QXNzb2NpYXRlZDtcclxuXHJcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xyXG4gICAgICBzY29wZTogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBzb3VyY2VJbnN0YW5jZVt0aGlzLmFjY2Vzc29ycy5nZXRdKG9wdGlvbnMpLnRoZW4ob2xkSW5zdGFuY2UgPT4ge1xyXG4gICAgICAvLyBUT0RPIFVzZSBlcXVhbHMgbWV0aG9kIG9uY2UgIzU2MDUgaXMgcmVzb2x2ZWRcclxuICAgICAgYWxyZWFkeUFzc29jaWF0ZWQgPSBvbGRJbnN0YW5jZSAmJiBhc3NvY2lhdGVkSW5zdGFuY2UgJiYgdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZXMuZXZlcnkoYXR0cmlidXRlID0+XHJcbiAgICAgICAgb2xkSW5zdGFuY2UuZ2V0KGF0dHJpYnV0ZSwgeyByYXc6IHRydWUgfSkgPT09IChhc3NvY2lhdGVkSW5zdGFuY2UuZ2V0ID8gYXNzb2NpYXRlZEluc3RhbmNlLmdldChhdHRyaWJ1dGUsIHsgcmF3OiB0cnVlIH0pIDogYXNzb2NpYXRlZEluc3RhbmNlKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKG9sZEluc3RhbmNlICYmICFhbHJlYWR5QXNzb2NpYXRlZCkge1xyXG4gICAgICAgIG9sZEluc3RhbmNlW3RoaXMuZm9yZWlnbktleV0gPSBudWxsO1xyXG4gICAgICAgIHJldHVybiBvbGRJbnN0YW5jZS5zYXZlKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcclxuICAgICAgICAgIGZpZWxkczogW3RoaXMuZm9yZWlnbktleV0sXHJcbiAgICAgICAgICBhbGxvd051bGw6IFt0aGlzLmZvcmVpZ25LZXldLFxyXG4gICAgICAgICAgYXNzb2NpYXRpb246IHRydWVcclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICBpZiAoYXNzb2NpYXRlZEluc3RhbmNlICYmICFhbHJlYWR5QXNzb2NpYXRlZCkge1xyXG4gICAgICAgIGlmICghKGFzc29jaWF0ZWRJbnN0YW5jZSBpbnN0YW5jZW9mIHRoaXMudGFyZ2V0KSkge1xyXG4gICAgICAgICAgY29uc3QgdG1wSW5zdGFuY2UgPSB7fTtcclxuICAgICAgICAgIHRtcEluc3RhbmNlW3RoaXMudGFyZ2V0LnByaW1hcnlLZXlBdHRyaWJ1dGVdID0gYXNzb2NpYXRlZEluc3RhbmNlO1xyXG4gICAgICAgICAgYXNzb2NpYXRlZEluc3RhbmNlID0gdGhpcy50YXJnZXQuYnVpbGQodG1wSW5zdGFuY2UsIHtcclxuICAgICAgICAgICAgaXNOZXdSZWNvcmQ6IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXNzb2NpYXRlZEluc3RhbmNlLCB0aGlzLnNjb3BlKTtcclxuICAgICAgICBhc3NvY2lhdGVkSW5zdGFuY2Uuc2V0KHRoaXMuZm9yZWlnbktleSwgc291cmNlSW5zdGFuY2UuZ2V0KHRoaXMuc291cmNlS2V5QXR0cmlidXRlKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBhc3NvY2lhdGVkSW5zdGFuY2Uuc2F2ZShvcHRpb25zKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYXNzb2NpYXRlZCBtb2RlbCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggdGhpcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW9kZWx9IHNvdXJjZUluc3RhbmNlIHRoZSBzb3VyY2UgaW5zdGFuY2VcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW3ZhbHVlcz17fV0gdmFsdWVzIHRvIGNyZWF0ZSBhc3NvY2lhdGVkIG1vZGVsIGluc3RhbmNlIHdpdGhcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgcGFzc2VkIHRvIGB0YXJnZXQuY3JlYXRlYCBhbmQgc2V0QXNzb2NpYXRpb24uXHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsI2NyZWF0ZX0gZm9yIGEgZnVsbCBleHBsYW5hdGlvbiBvZiBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbD59IFRoZSBjcmVhdGVkIHRhcmdldCBtb2RlbFxyXG4gICAqL1xyXG4gIGNyZWF0ZShzb3VyY2VJbnN0YW5jZSwgdmFsdWVzLCBvcHRpb25zKSB7XHJcbiAgICB2YWx1ZXMgPSB2YWx1ZXMgfHwge307XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICBpZiAodGhpcy5zY29wZSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBPYmplY3Qua2V5cyh0aGlzLnNjb3BlKSkge1xyXG4gICAgICAgIHZhbHVlc1thdHRyaWJ1dGVdID0gdGhpcy5zY29wZVthdHRyaWJ1dGVdO1xyXG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkcykge1xyXG4gICAgICAgICAgb3B0aW9ucy5maWVsZHMucHVzaChhdHRyaWJ1dGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhbHVlc1t0aGlzLmZvcmVpZ25LZXldID0gc291cmNlSW5zdGFuY2UuZ2V0KHRoaXMuc291cmNlS2V5QXR0cmlidXRlKTtcclxuICAgIGlmIChvcHRpb25zLmZpZWxkcykge1xyXG4gICAgICBvcHRpb25zLmZpZWxkcy5wdXNoKHRoaXMuZm9yZWlnbktleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0LmNyZWF0ZSh2YWx1ZXMsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgdmVyaWZ5QXNzb2NpYXRpb25BbGlhcyhhbGlhcykge1xyXG4gICAgaWYgKHR5cGVvZiBhbGlhcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXMgPT09IGFsaWFzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbGlhcyAmJiBhbGlhcy5zaW5ndWxhcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5hcyA9PT0gYWxpYXMuc2luZ3VsYXI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICF0aGlzLmlzQWxpYXNlZDtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSGFzT25lO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvaGFzLW9uZS5qcyJdLCJuYW1lcyI6WyJVdGlscyIsInJlcXVpcmUiLCJIZWxwZXJzIiwiXyIsIkFzc29jaWF0aW9uIiwiT3AiLCJIYXNPbmUiLCJzb3VyY2UiLCJ0YXJnZXQiLCJvcHRpb25zIiwiYXNzb2NpYXRpb25UeXBlIiwiaXNTaW5nbGVBc3NvY2lhdGlvbiIsImZvcmVpZ25LZXlBdHRyaWJ1dGUiLCJhcyIsImlzQWxpYXNlZCIsIm5hbWUiLCJzaW5ndWxhciIsImlzT2JqZWN0IiwiZm9yZWlnbktleSIsImZpZWxkTmFtZSIsImNhbWVsaXplIiwic2luZ3VsYXJpemUiLCJwcmltYXJ5S2V5QXR0cmlidXRlIiwiam9pbiIsInNvdXJjZUtleSIsInJhd0F0dHJpYnV0ZXMiLCJFcnJvciIsInNvdXJjZUtleUF0dHJpYnV0ZSIsInNvdXJjZUtleUZpZWxkIiwiZmllbGQiLCJzb3VyY2VLZXlJc1ByaW1hcnkiLCJhc3NvY2lhdGlvbkFjY2Vzc29yIiwidXNlSG9va3MiLCJpZGVudGlmaWVyRmllbGQiLCJ1cHBlckZpcnN0IiwiYWNjZXNzb3JzIiwiZ2V0Iiwic2V0IiwiY3JlYXRlIiwibmV3QXR0cmlidXRlcyIsImRlZmF1bHRzIiwidHlwZSIsImtleVR5cGUiLCJhbGxvd051bGwiLCJjb25zdHJhaW50cyIsIm9uRGVsZXRlIiwib25VcGRhdGUiLCJhZGRGb3JlaWduS2V5Q29uc3RyYWludHMiLCJtZXJnZURlZmF1bHRzIiwicmVmcmVzaEF0dHJpYnV0ZXMiLCJjaGVja05hbWluZ0NvbGxpc2lvbiIsIm9iaiIsIm1ldGhvZHMiLCJtaXhpbk1ldGhvZHMiLCJpbnN0YW5jZXMiLCJ3aGVyZSIsIlRhcmdldCIsImluc3RhbmNlIiwiY2xvbmVEZWVwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic2NvcGUiLCJ1bnNjb3BlZCIsInNjaGVtYSIsInNjaGVtYURlbGltaXRlciIsIkFycmF5IiwiaXNBcnJheSIsInVuZGVmaW5lZCIsImluIiwibWFwIiwiYXNzaWduIiwiYW5kIiwiZmluZEFsbCIsInRoZW4iLCJyZXN1bHRzIiwicmVzdWx0IiwicmF3IiwiZmluZE9uZSIsInNvdXJjZUluc3RhbmNlIiwiYXNzb2NpYXRlZEluc3RhbmNlIiwiYWxyZWFkeUFzc29jaWF0ZWQiLCJvbGRJbnN0YW5jZSIsInByaW1hcnlLZXlBdHRyaWJ1dGVzIiwiZXZlcnkiLCJhdHRyaWJ1dGUiLCJzYXZlIiwiZmllbGRzIiwiYXNzb2NpYXRpb24iLCJ0bXBJbnN0YW5jZSIsImJ1aWxkIiwiaXNOZXdSZWNvcmQiLCJ2YWx1ZXMiLCJrZXlzIiwicHVzaCIsImFsaWFzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxZQUFELENBQXJCOztBQUNBLE1BQU1DLE9BQU8sR0FBR0QsT0FBTyxDQUFDLFdBQUQsQ0FBdkI7O0FBQ0EsTUFBTUUsQ0FBQyxHQUFHRixPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNRyxXQUFXLEdBQUdILE9BQU8sQ0FBQyxRQUFELENBQTNCOztBQUNBLE1BQU1JLEVBQUUsR0FBR0osT0FBTyxDQUFDLGNBQUQsQ0FBbEI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7SUFDTUssTTs7Ozs7QUFDSixrQkFBWUMsTUFBWixFQUFvQkMsTUFBcEIsRUFBNEJDLE9BQTVCLEVBQXFDO0FBQUE7O0FBQUE7O0FBQ25DLDhCQUFNRixNQUFOLEVBQWNDLE1BQWQsRUFBc0JDLE9BQXRCO0FBRUEsVUFBS0MsZUFBTCxHQUF1QixRQUF2QjtBQUNBLFVBQUtDLG1CQUFMLEdBQTJCLElBQTNCO0FBQ0EsVUFBS0MsbUJBQUwsR0FBMkIsRUFBM0I7O0FBRUEsUUFBSSxNQUFLQyxFQUFULEVBQWE7QUFDWCxZQUFLQyxTQUFMLEdBQWlCLElBQWpCO0FBQ0EsWUFBS0wsT0FBTCxDQUFhTSxJQUFiLEdBQW9CO0FBQ2xCQyxRQUFBQSxRQUFRLEVBQUUsTUFBS0g7QUFERyxPQUFwQjtBQUdELEtBTEQsTUFLTztBQUNMLFlBQUtBLEVBQUwsR0FBVSxNQUFLTCxNQUFMLENBQVlDLE9BQVosQ0FBb0JNLElBQXBCLENBQXlCQyxRQUFuQztBQUNBLFlBQUtQLE9BQUwsQ0FBYU0sSUFBYixHQUFvQixNQUFLUCxNQUFMLENBQVlDLE9BQVosQ0FBb0JNLElBQXhDO0FBQ0Q7O0FBRUQsUUFBSVosQ0FBQyxDQUFDYyxRQUFGLENBQVcsTUFBS1IsT0FBTCxDQUFhUyxVQUF4QixDQUFKLEVBQXlDO0FBQ3ZDLFlBQUtOLG1CQUFMLEdBQTJCLE1BQUtILE9BQUwsQ0FBYVMsVUFBeEM7QUFDQSxZQUFLQSxVQUFMLEdBQWtCLE1BQUtOLG1CQUFMLENBQXlCRyxJQUF6QixJQUFpQyxNQUFLSCxtQkFBTCxDQUF5Qk8sU0FBNUU7QUFDRCxLQUhELE1BR08sSUFBSSxNQUFLVixPQUFMLENBQWFTLFVBQWpCLEVBQTZCO0FBQ2xDLFlBQUtBLFVBQUwsR0FBa0IsTUFBS1QsT0FBTCxDQUFhUyxVQUEvQjtBQUNEOztBQUVELFFBQUksQ0FBQyxNQUFLQSxVQUFWLEVBQXNCO0FBQ3BCLFlBQUtBLFVBQUwsR0FBa0JsQixLQUFLLENBQUNvQixRQUFOLENBQ2hCLENBQ0VwQixLQUFLLENBQUNxQixXQUFOLENBQWtCLE1BQUtaLE9BQUwsQ0FBYUksRUFBYixJQUFtQixNQUFLTixNQUFMLENBQVlRLElBQWpELENBREYsRUFFRSxNQUFLUixNQUFMLENBQVllLG1CQUZkLEVBR0VDLElBSEYsQ0FHTyxHQUhQLENBRGdCLENBQWxCO0FBTUQ7O0FBRUQsUUFDRSxNQUFLZCxPQUFMLENBQWFlLFNBQWIsSUFDRyxDQUFDLE1BQUtqQixNQUFMLENBQVlrQixhQUFaLENBQTBCLE1BQUtoQixPQUFMLENBQWFlLFNBQXZDLENBRk4sRUFHRTtBQUNBLFlBQU0sSUFBSUUsS0FBSixDQUFXLHNCQUFxQixNQUFLakIsT0FBTCxDQUFhZSxTQUFVLDBEQUF5RCxNQUFLakIsTUFBTCxDQUFZUSxJQUFLLFNBQWpJLENBQU47QUFDRDs7QUFFRCxVQUFLUyxTQUFMLEdBQWlCLE1BQUtHLGtCQUFMLEdBQTBCLE1BQUtsQixPQUFMLENBQWFlLFNBQWIsSUFBMEIsTUFBS2pCLE1BQUwsQ0FBWWUsbUJBQWpGO0FBQ0EsVUFBS00sY0FBTCxHQUFzQixNQUFLckIsTUFBTCxDQUFZa0IsYUFBWixDQUEwQixNQUFLRCxTQUEvQixFQUEwQ0ssS0FBMUMsSUFBbUQsTUFBS0wsU0FBOUU7QUFDQSxVQUFLTSxrQkFBTCxHQUEwQixNQUFLTixTQUFMLEtBQW1CLE1BQUtqQixNQUFMLENBQVllLG1CQUF6RDtBQUVBLFVBQUtTLG1CQUFMLEdBQTJCLE1BQUtsQixFQUFoQztBQUNBLFVBQUtKLE9BQUwsQ0FBYXVCLFFBQWIsR0FBd0J2QixPQUFPLENBQUN1QixRQUFoQzs7QUFFQSxRQUFJLE1BQUt4QixNQUFMLENBQVlpQixhQUFaLENBQTBCLE1BQUtQLFVBQS9CLENBQUosRUFBZ0Q7QUFDOUMsWUFBS2UsZUFBTCxHQUF1QixNQUFLekIsTUFBTCxDQUFZaUIsYUFBWixDQUEwQixNQUFLUCxVQUEvQixFQUEyQ1csS0FBM0MsSUFBb0QsTUFBS1gsVUFBaEY7QUFDRCxLQWpEa0MsQ0FtRG5DOzs7QUFDQSxVQUFNRixRQUFRLEdBQUdiLENBQUMsQ0FBQytCLFVBQUYsQ0FBYSxNQUFLekIsT0FBTCxDQUFhTSxJQUFiLENBQWtCQyxRQUEvQixDQUFqQjs7QUFFQSxVQUFLbUIsU0FBTCxHQUFpQjtBQUNmQyxNQUFBQSxHQUFHLEVBQUcsTUFBS3BCLFFBQVMsRUFETDtBQUVmcUIsTUFBQUEsR0FBRyxFQUFHLE1BQUtyQixRQUFTLEVBRkw7QUFHZnNCLE1BQUFBLE1BQU0sRUFBRyxTQUFRdEIsUUFBUztBQUhYLEtBQWpCO0FBdERtQztBQTJEcEMsRyxDQUVEOzs7Ozt3Q0FDb0I7QUFDbEIsWUFBTXVCLGFBQWEsR0FBRyxFQUF0QjtBQUVBQSxNQUFBQSxhQUFhLENBQUMsS0FBS3JCLFVBQU4sQ0FBYixHQUFpQ2YsQ0FBQyxDQUFDcUMsUUFBRixDQUFXLEVBQVgsRUFBZSxLQUFLNUIsbUJBQXBCLEVBQXlDO0FBQ3hFNkIsUUFBQUEsSUFBSSxFQUFFLEtBQUtoQyxPQUFMLENBQWFpQyxPQUFiLElBQXdCLEtBQUtuQyxNQUFMLENBQVlrQixhQUFaLENBQTBCLEtBQUtELFNBQS9CLEVBQTBDaUIsSUFEQTtBQUV4RUUsUUFBQUEsU0FBUyxFQUFFO0FBRjZELE9BQXpDLENBQWpDOztBQUtBLFVBQUksS0FBS2xDLE9BQUwsQ0FBYW1DLFdBQWIsS0FBNkIsS0FBakMsRUFBd0M7QUFDdEMsY0FBTXBDLE1BQU0sR0FBRyxLQUFLQSxNQUFMLENBQVlpQixhQUFaLENBQTBCLEtBQUtQLFVBQS9CLEtBQThDcUIsYUFBYSxDQUFDLEtBQUtyQixVQUFOLENBQTFFO0FBQ0EsYUFBS1QsT0FBTCxDQUFhb0MsUUFBYixHQUF3QixLQUFLcEMsT0FBTCxDQUFhb0MsUUFBYixLQUEwQnJDLE1BQU0sQ0FBQ21DLFNBQVAsR0FBbUIsVUFBbkIsR0FBZ0MsU0FBMUQsQ0FBeEI7QUFDQSxhQUFLbEMsT0FBTCxDQUFhcUMsUUFBYixHQUF3QixLQUFLckMsT0FBTCxDQUFhcUMsUUFBYixJQUF5QixTQUFqRDtBQUNEOztBQUVENUMsTUFBQUEsT0FBTyxDQUFDNkMsd0JBQVIsQ0FBaUNSLGFBQWEsQ0FBQyxLQUFLckIsVUFBTixDQUE5QyxFQUFpRSxLQUFLWCxNQUF0RSxFQUE4RSxLQUFLQyxNQUFuRixFQUEyRixLQUFLQyxPQUFoRyxFQUF5RyxLQUFLbUIsY0FBOUc7QUFDQTVCLE1BQUFBLEtBQUssQ0FBQ2dELGFBQU4sQ0FBb0IsS0FBS3hDLE1BQUwsQ0FBWWlCLGFBQWhDLEVBQStDYyxhQUEvQztBQUVBLFdBQUsvQixNQUFMLENBQVl5QyxpQkFBWjtBQUVBLFdBQUtoQixlQUFMLEdBQXVCLEtBQUt6QixNQUFMLENBQVlpQixhQUFaLENBQTBCLEtBQUtQLFVBQS9CLEVBQTJDVyxLQUEzQyxJQUFvRCxLQUFLWCxVQUFoRjtBQUVBaEIsTUFBQUEsT0FBTyxDQUFDZ0Qsb0JBQVIsQ0FBNkIsSUFBN0I7QUFFQSxhQUFPLElBQVA7QUFDRDs7OzBCQUVLQyxHLEVBQUs7QUFDVCxZQUFNQyxPQUFPLEdBQUcsQ0FBQyxLQUFELEVBQVEsS0FBUixFQUFlLFFBQWYsQ0FBaEI7QUFFQWxELE1BQUFBLE9BQU8sQ0FBQ21ELFlBQVIsQ0FBcUIsSUFBckIsRUFBMkJGLEdBQTNCLEVBQWdDQyxPQUFoQztBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7d0JBQ01FLFMsRUFBVzdDLE8sRUFBUztBQUN0QixZQUFNOEMsS0FBSyxHQUFHLEVBQWQ7QUFFQSxVQUFJQyxNQUFNLEdBQUcsS0FBS2hELE1BQWxCO0FBQ0EsVUFBSWlELFFBQUo7QUFFQWhELE1BQUFBLE9BQU8sR0FBR1QsS0FBSyxDQUFDMEQsU0FBTixDQUFnQmpELE9BQWhCLENBQVY7O0FBRUEsVUFBSWtELE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDckQsT0FBckMsRUFBOEMsT0FBOUMsQ0FBSixFQUE0RDtBQUMxRCxZQUFJLENBQUNBLE9BQU8sQ0FBQ3NELEtBQWIsRUFBb0I7QUFDbEJQLFVBQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDUSxRQUFQLEVBQVQ7QUFDRCxTQUZELE1BRU87QUFDTFIsVUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNPLEtBQVAsQ0FBYXRELE9BQU8sQ0FBQ3NELEtBQXJCLENBQVQ7QUFDRDtBQUNGOztBQUVELFVBQUlKLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDckQsT0FBckMsRUFBOEMsUUFBOUMsQ0FBSixFQUE2RDtBQUMzRCtDLFFBQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDUyxNQUFQLENBQWN4RCxPQUFPLENBQUN3RCxNQUF0QixFQUE4QnhELE9BQU8sQ0FBQ3lELGVBQXRDLENBQVQ7QUFDRDs7QUFFRCxVQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTixDQUFjZCxTQUFkLENBQUwsRUFBK0I7QUFDN0JHLFFBQUFBLFFBQVEsR0FBR0gsU0FBWDtBQUNBQSxRQUFBQSxTQUFTLEdBQUdlLFNBQVo7QUFDRDs7QUFFRCxVQUFJZixTQUFKLEVBQWU7QUFDYkMsUUFBQUEsS0FBSyxDQUFDLEtBQUtyQyxVQUFOLENBQUwsR0FBeUI7QUFDdkIsV0FBQ2IsRUFBRSxDQUFDaUUsRUFBSixHQUFTaEIsU0FBUyxDQUFDaUIsR0FBVixDQUFjZCxRQUFRLElBQUlBLFFBQVEsQ0FBQ3JCLEdBQVQsQ0FBYSxLQUFLWixTQUFsQixDQUExQjtBQURjLFNBQXpCO0FBR0QsT0FKRCxNQUlPO0FBQ0wrQixRQUFBQSxLQUFLLENBQUMsS0FBS3JDLFVBQU4sQ0FBTCxHQUF5QnVDLFFBQVEsQ0FBQ3JCLEdBQVQsQ0FBYSxLQUFLWixTQUFsQixDQUF6QjtBQUNEOztBQUVELFVBQUksS0FBS3VDLEtBQVQsRUFBZ0I7QUFDZEosUUFBQUEsTUFBTSxDQUFDYSxNQUFQLENBQWNqQixLQUFkLEVBQXFCLEtBQUtRLEtBQTFCO0FBQ0Q7O0FBRUR0RCxNQUFBQSxPQUFPLENBQUM4QyxLQUFSLEdBQWdCOUMsT0FBTyxDQUFDOEMsS0FBUixHQUNkO0FBQUUsU0FBQ2xELEVBQUUsQ0FBQ29FLEdBQUosR0FBVSxDQUFDbEIsS0FBRCxFQUFROUMsT0FBTyxDQUFDOEMsS0FBaEI7QUFBWixPQURjLEdBRWRBLEtBRkY7O0FBSUEsVUFBSUQsU0FBSixFQUFlO0FBQ2IsZUFBT0UsTUFBTSxDQUFDa0IsT0FBUCxDQUFlakUsT0FBZixFQUF3QmtFLElBQXhCLENBQTZCQyxPQUFPLElBQUk7QUFDN0MsZ0JBQU1DLE1BQU0sR0FBRyxFQUFmOztBQUNBLGVBQUssTUFBTXBCLFFBQVgsSUFBdUJILFNBQXZCLEVBQWtDO0FBQ2hDdUIsWUFBQUEsTUFBTSxDQUFDcEIsUUFBUSxDQUFDckIsR0FBVCxDQUFhLEtBQUtaLFNBQWxCLEVBQTZCO0FBQUVzRCxjQUFBQSxHQUFHLEVBQUU7QUFBUCxhQUE3QixDQUFELENBQU4sR0FBc0QsSUFBdEQ7QUFDRDs7QUFFRCxlQUFLLE1BQU1yQixRQUFYLElBQXVCbUIsT0FBdkIsRUFBZ0M7QUFDOUJDLFlBQUFBLE1BQU0sQ0FBQ3BCLFFBQVEsQ0FBQ3JCLEdBQVQsQ0FBYSxLQUFLbEIsVUFBbEIsRUFBOEI7QUFBRTRELGNBQUFBLEdBQUcsRUFBRTtBQUFQLGFBQTlCLENBQUQsQ0FBTixHQUF1RHJCLFFBQXZEO0FBQ0Q7O0FBRUQsaUJBQU9vQixNQUFQO0FBQ0QsU0FYTSxDQUFQO0FBWUQ7O0FBRUQsYUFBT3JCLE1BQU0sQ0FBQ3VCLE9BQVAsQ0FBZXRFLE9BQWYsQ0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O3dCQUNNdUUsYyxFQUFnQkMsa0IsRUFBb0J4RSxPLEVBQVM7QUFDL0MsVUFBSXlFLGlCQUFKO0FBRUF6RSxNQUFBQSxPQUFPLEdBQUdrRCxNQUFNLENBQUNhLE1BQVAsQ0FBYyxFQUFkLEVBQWtCL0QsT0FBbEIsRUFBMkI7QUFDbkNzRCxRQUFBQSxLQUFLLEVBQUU7QUFENEIsT0FBM0IsQ0FBVjtBQUlBLGFBQU9pQixjQUFjLENBQUMsS0FBSzdDLFNBQUwsQ0FBZUMsR0FBaEIsQ0FBZCxDQUFtQzNCLE9BQW5DLEVBQTRDa0UsSUFBNUMsQ0FBaURRLFdBQVcsSUFBSTtBQUNyRTtBQUNBRCxRQUFBQSxpQkFBaUIsR0FBR0MsV0FBVyxJQUFJRixrQkFBZixJQUFxQyxLQUFLekUsTUFBTCxDQUFZNEUsb0JBQVosQ0FBaUNDLEtBQWpDLENBQXVDQyxTQUFTLElBQ3ZHSCxXQUFXLENBQUMvQyxHQUFaLENBQWdCa0QsU0FBaEIsRUFBMkI7QUFBRVIsVUFBQUEsR0FBRyxFQUFFO0FBQVAsU0FBM0IsT0FBK0NHLGtCQUFrQixDQUFDN0MsR0FBbkIsR0FBeUI2QyxrQkFBa0IsQ0FBQzdDLEdBQW5CLENBQXVCa0QsU0FBdkIsRUFBa0M7QUFBRVIsVUFBQUEsR0FBRyxFQUFFO0FBQVAsU0FBbEMsQ0FBekIsR0FBNEVHLGtCQUEzSCxDQUR1RCxDQUF6RDs7QUFJQSxZQUFJRSxXQUFXLElBQUksQ0FBQ0QsaUJBQXBCLEVBQXVDO0FBQ3JDQyxVQUFBQSxXQUFXLENBQUMsS0FBS2pFLFVBQU4sQ0FBWCxHQUErQixJQUEvQjtBQUNBLGlCQUFPaUUsV0FBVyxDQUFDSSxJQUFaLENBQWlCNUIsTUFBTSxDQUFDYSxNQUFQLENBQWMsRUFBZCxFQUFrQi9ELE9BQWxCLEVBQTJCO0FBQ2pEK0UsWUFBQUEsTUFBTSxFQUFFLENBQUMsS0FBS3RFLFVBQU4sQ0FEeUM7QUFFakR5QixZQUFBQSxTQUFTLEVBQUUsQ0FBQyxLQUFLekIsVUFBTixDQUZzQztBQUdqRHVFLFlBQUFBLFdBQVcsRUFBRTtBQUhvQyxXQUEzQixDQUFqQixDQUFQO0FBS0Q7QUFDRixPQWRNLEVBY0pkLElBZEksQ0FjQyxNQUFNO0FBQ1osWUFBSU0sa0JBQWtCLElBQUksQ0FBQ0MsaUJBQTNCLEVBQThDO0FBQzVDLGNBQUksRUFBRUQsa0JBQWtCLFlBQVksS0FBS3pFLE1BQXJDLENBQUosRUFBa0Q7QUFDaEQsa0JBQU1rRixXQUFXLEdBQUcsRUFBcEI7QUFDQUEsWUFBQUEsV0FBVyxDQUFDLEtBQUtsRixNQUFMLENBQVljLG1CQUFiLENBQVgsR0FBK0MyRCxrQkFBL0M7QUFDQUEsWUFBQUEsa0JBQWtCLEdBQUcsS0FBS3pFLE1BQUwsQ0FBWW1GLEtBQVosQ0FBa0JELFdBQWxCLEVBQStCO0FBQ2xERSxjQUFBQSxXQUFXLEVBQUU7QUFEcUMsYUFBL0IsQ0FBckI7QUFHRDs7QUFFRGpDLFVBQUFBLE1BQU0sQ0FBQ2EsTUFBUCxDQUFjUyxrQkFBZCxFQUFrQyxLQUFLbEIsS0FBdkM7QUFDQWtCLFVBQUFBLGtCQUFrQixDQUFDNUMsR0FBbkIsQ0FBdUIsS0FBS25CLFVBQTVCLEVBQXdDOEQsY0FBYyxDQUFDNUMsR0FBZixDQUFtQixLQUFLVCxrQkFBeEIsQ0FBeEM7QUFFQSxpQkFBT3NELGtCQUFrQixDQUFDTSxJQUFuQixDQUF3QjlFLE9BQXhCLENBQVA7QUFDRDs7QUFFRCxlQUFPLElBQVA7QUFDRCxPQS9CTSxDQUFQO0FBZ0NEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzJCQUNTdUUsYyxFQUFnQmEsTSxFQUFRcEYsTyxFQUFTO0FBQ3RDb0YsTUFBQUEsTUFBTSxHQUFHQSxNQUFNLElBQUksRUFBbkI7QUFDQXBGLE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxJQUFJLEVBQXJCOztBQUVBLFVBQUksS0FBS3NELEtBQVQsRUFBZ0I7QUFDZCxhQUFLLE1BQU11QixTQUFYLElBQXdCM0IsTUFBTSxDQUFDbUMsSUFBUCxDQUFZLEtBQUsvQixLQUFqQixDQUF4QixFQUFpRDtBQUMvQzhCLFVBQUFBLE1BQU0sQ0FBQ1AsU0FBRCxDQUFOLEdBQW9CLEtBQUt2QixLQUFMLENBQVd1QixTQUFYLENBQXBCOztBQUNBLGNBQUk3RSxPQUFPLENBQUMrRSxNQUFaLEVBQW9CO0FBQ2xCL0UsWUFBQUEsT0FBTyxDQUFDK0UsTUFBUixDQUFlTyxJQUFmLENBQW9CVCxTQUFwQjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRE8sTUFBQUEsTUFBTSxDQUFDLEtBQUszRSxVQUFOLENBQU4sR0FBMEI4RCxjQUFjLENBQUM1QyxHQUFmLENBQW1CLEtBQUtULGtCQUF4QixDQUExQjs7QUFDQSxVQUFJbEIsT0FBTyxDQUFDK0UsTUFBWixFQUFvQjtBQUNsQi9FLFFBQUFBLE9BQU8sQ0FBQytFLE1BQVIsQ0FBZU8sSUFBZixDQUFvQixLQUFLN0UsVUFBekI7QUFDRDs7QUFFRCxhQUFPLEtBQUtWLE1BQUwsQ0FBWThCLE1BQVosQ0FBbUJ1RCxNQUFuQixFQUEyQnBGLE9BQTNCLENBQVA7QUFDRDs7OzJDQUVzQnVGLEssRUFBTztBQUM1QixVQUFJLE9BQU9BLEtBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDN0IsZUFBTyxLQUFLbkYsRUFBTCxLQUFZbUYsS0FBbkI7QUFDRDs7QUFFRCxVQUFJQSxLQUFLLElBQUlBLEtBQUssQ0FBQ2hGLFFBQW5CLEVBQTZCO0FBQzNCLGVBQU8sS0FBS0gsRUFBTCxLQUFZbUYsS0FBSyxDQUFDaEYsUUFBekI7QUFDRDs7QUFFRCxhQUFPLENBQUMsS0FBS0YsU0FBYjtBQUNEOzs7O0VBcFFrQlYsVzs7QUF1UXJCNkYsTUFBTSxDQUFDQyxPQUFQLEdBQWlCNUYsTUFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuY29uc3QgSGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgQXNzb2NpYXRpb24gPSByZXF1aXJlKCcuL2Jhc2UnKTtcbmNvbnN0IE9wID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzJyk7XG5cbi8qKlxuICogT25lLXRvLW9uZSBhc3NvY2lhdGlvblxuICpcbiAqIEluIHRoZSBBUEkgcmVmZXJlbmNlIGJlbG93LCBhZGQgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0aW9uIHRvIHRoZSBtZXRob2QsIGUuZy4gZm9yIGBVc2VyLmhhc09uZShQcm9qZWN0KWAgdGhlIGdldHRlciB3aWxsIGJlIGB1c2VyLmdldFByb2plY3QoKWAuXG4gKiBUaGlzIGlzIGFsbW9zdCB0aGUgc2FtZSBhcyBgYmVsb25nc1RvYCB3aXRoIG9uZSBleGNlcHRpb24gLSBUaGUgZm9yZWlnbiBrZXkgd2lsbCBiZSBkZWZpbmVkIG9uIHRoZSB0YXJnZXQgbW9kZWwuXG4gKlxuICogQHNlZSB7QGxpbmsgTW9kZWwuaGFzT25lfVxuICovXG5jbGFzcyBIYXNPbmUgZXh0ZW5kcyBBc3NvY2lhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNvdXJjZSwgdGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5hc3NvY2lhdGlvblR5cGUgPSAnSGFzT25lJztcbiAgICB0aGlzLmlzU2luZ2xlQXNzb2NpYXRpb24gPSB0cnVlO1xuICAgIHRoaXMuZm9yZWlnbktleUF0dHJpYnV0ZSA9IHt9O1xuXG4gICAgaWYgKHRoaXMuYXMpIHtcbiAgICAgIHRoaXMuaXNBbGlhc2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMub3B0aW9ucy5uYW1lID0ge1xuICAgICAgICBzaW5ndWxhcjogdGhpcy5hc1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcyA9IHRoaXMudGFyZ2V0Lm9wdGlvbnMubmFtZS5zaW5ndWxhcjtcbiAgICAgIHRoaXMub3B0aW9ucy5uYW1lID0gdGhpcy50YXJnZXQub3B0aW9ucy5uYW1lO1xuICAgIH1cblxuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMub3B0aW9ucy5mb3JlaWduS2V5KSkge1xuICAgICAgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlID0gdGhpcy5vcHRpb25zLmZvcmVpZ25LZXk7XG4gICAgICB0aGlzLmZvcmVpZ25LZXkgPSB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUubmFtZSB8fCB0aGlzLmZvcmVpZ25LZXlBdHRyaWJ1dGUuZmllbGROYW1lO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmZvcmVpZ25LZXkpIHtcbiAgICAgIHRoaXMuZm9yZWlnbktleSA9IHRoaXMub3B0aW9ucy5mb3JlaWduS2V5O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5mb3JlaWduS2V5KSB7XG4gICAgICB0aGlzLmZvcmVpZ25LZXkgPSBVdGlscy5jYW1lbGl6ZShcbiAgICAgICAgW1xuICAgICAgICAgIFV0aWxzLnNpbmd1bGFyaXplKHRoaXMub3B0aW9ucy5hcyB8fCB0aGlzLnNvdXJjZS5uYW1lKSxcbiAgICAgICAgICB0aGlzLnNvdXJjZS5wcmltYXJ5S2V5QXR0cmlidXRlXG4gICAgICAgIF0uam9pbignXycpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9ucy5zb3VyY2VLZXlcbiAgICAgICYmICF0aGlzLnNvdXJjZS5yYXdBdHRyaWJ1dGVzW3RoaXMub3B0aW9ucy5zb3VyY2VLZXldXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXR0cmlidXRlIFwiJHt0aGlzLm9wdGlvbnMuc291cmNlS2V5fVwiIHBhc3NlZCBhcyBzb3VyY2VLZXksIGRlZmluZSB0aGlzIGF0dHJpYnV0ZSBvbiBtb2RlbCBcIiR7dGhpcy5zb3VyY2UubmFtZX1cIiBmaXJzdGApO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlS2V5ID0gdGhpcy5zb3VyY2VLZXlBdHRyaWJ1dGUgPSB0aGlzLm9wdGlvbnMuc291cmNlS2V5IHx8IHRoaXMuc291cmNlLnByaW1hcnlLZXlBdHRyaWJ1dGU7XG4gICAgdGhpcy5zb3VyY2VLZXlGaWVsZCA9IHRoaXMuc291cmNlLnJhd0F0dHJpYnV0ZXNbdGhpcy5zb3VyY2VLZXldLmZpZWxkIHx8IHRoaXMuc291cmNlS2V5O1xuICAgIHRoaXMuc291cmNlS2V5SXNQcmltYXJ5ID0gdGhpcy5zb3VyY2VLZXkgPT09IHRoaXMuc291cmNlLnByaW1hcnlLZXlBdHRyaWJ1dGU7XG5cbiAgICB0aGlzLmFzc29jaWF0aW9uQWNjZXNzb3IgPSB0aGlzLmFzO1xuICAgIHRoaXMub3B0aW9ucy51c2VIb29rcyA9IG9wdGlvbnMudXNlSG9va3M7XG5cbiAgICBpZiAodGhpcy50YXJnZXQucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldKSB7XG4gICAgICB0aGlzLmlkZW50aWZpZXJGaWVsZCA9IHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XS5maWVsZCB8fCB0aGlzLmZvcmVpZ25LZXk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHNpbmd1bGFyIG5hbWUsIHRyeWluZyB0byB1cHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciwgdW5sZXNzIHRoZSBtb2RlbCBmb3JiaWRzIGl0XG4gICAgY29uc3Qgc2luZ3VsYXIgPSBfLnVwcGVyRmlyc3QodGhpcy5vcHRpb25zLm5hbWUuc2luZ3VsYXIpO1xuXG4gICAgdGhpcy5hY2Nlc3NvcnMgPSB7XG4gICAgICBnZXQ6IGBnZXQke3Npbmd1bGFyfWAsXG4gICAgICBzZXQ6IGBzZXQke3Npbmd1bGFyfWAsXG4gICAgICBjcmVhdGU6IGBjcmVhdGUke3Npbmd1bGFyfWBcbiAgICB9O1xuICB9XG5cbiAgLy8gdGhlIGlkIGlzIGluIHRoZSB0YXJnZXQgdGFibGVcbiAgX2luamVjdEF0dHJpYnV0ZXMoKSB7XG4gICAgY29uc3QgbmV3QXR0cmlidXRlcyA9IHt9O1xuXG4gICAgbmV3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldID0gXy5kZWZhdWx0cyh7fSwgdGhpcy5mb3JlaWduS2V5QXR0cmlidXRlLCB7XG4gICAgICB0eXBlOiB0aGlzLm9wdGlvbnMua2V5VHlwZSB8fCB0aGlzLnNvdXJjZS5yYXdBdHRyaWJ1dGVzW3RoaXMuc291cmNlS2V5XS50eXBlLFxuICAgICAgYWxsb3dOdWxsOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnN0cmFpbnRzICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50YXJnZXQucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldIHx8IG5ld0F0dHJpYnV0ZXNbdGhpcy5mb3JlaWduS2V5XTtcbiAgICAgIHRoaXMub3B0aW9ucy5vbkRlbGV0ZSA9IHRoaXMub3B0aW9ucy5vbkRlbGV0ZSB8fCAodGFyZ2V0LmFsbG93TnVsbCA/ICdTRVQgTlVMTCcgOiAnQ0FTQ0FERScpO1xuICAgICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlID0gdGhpcy5vcHRpb25zLm9uVXBkYXRlIHx8ICdDQVNDQURFJztcbiAgICB9XG5cbiAgICBIZWxwZXJzLmFkZEZvcmVpZ25LZXlDb25zdHJhaW50cyhuZXdBdHRyaWJ1dGVzW3RoaXMuZm9yZWlnbktleV0sIHRoaXMuc291cmNlLCB0aGlzLnRhcmdldCwgdGhpcy5vcHRpb25zLCB0aGlzLnNvdXJjZUtleUZpZWxkKTtcbiAgICBVdGlscy5tZXJnZURlZmF1bHRzKHRoaXMudGFyZ2V0LnJhd0F0dHJpYnV0ZXMsIG5ld0F0dHJpYnV0ZXMpO1xuXG4gICAgdGhpcy50YXJnZXQucmVmcmVzaEF0dHJpYnV0ZXMoKTtcblxuICAgIHRoaXMuaWRlbnRpZmllckZpZWxkID0gdGhpcy50YXJnZXQucmF3QXR0cmlidXRlc1t0aGlzLmZvcmVpZ25LZXldLmZpZWxkIHx8IHRoaXMuZm9yZWlnbktleTtcblxuICAgIEhlbHBlcnMuY2hlY2tOYW1pbmdDb2xsaXNpb24odGhpcyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG1peGluKG9iaikge1xuICAgIGNvbnN0IG1ldGhvZHMgPSBbJ2dldCcsICdzZXQnLCAnY3JlYXRlJ107XG5cbiAgICBIZWxwZXJzLm1peGluTWV0aG9kcyh0aGlzLCBvYmosIG1ldGhvZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXNzb2NpYXRlZCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbHxBcnJheTxNb2RlbD59IGluc3RhbmNlcyBzb3VyY2UgaW5zdGFuY2VzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgIFtvcHRpb25zXSBmaW5kIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gW29wdGlvbnMuc2NvcGVdIEFwcGx5IGEgc2NvcGUgb24gdGhlIHJlbGF0ZWQgbW9kZWwsIG9yIHJlbW92ZSBpdHMgZGVmYXVsdCBzY29wZSBieSBwYXNzaW5nIGZhbHNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zY2hlbWFdIEFwcGx5IGEgc2NoZW1hIG9uIHRoZSByZWxhdGVkIG1vZGVsXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRPbmV9IGZvciBhIGZ1bGwgZXhwbGFuYXRpb24gb2Ygb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbD59XG4gICAqL1xuICBnZXQoaW5zdGFuY2VzLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgd2hlcmUgPSB7fTtcblxuICAgIGxldCBUYXJnZXQgPSB0aGlzLnRhcmdldDtcbiAgICBsZXQgaW5zdGFuY2U7XG5cbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc2NvcGUnKSkge1xuICAgICAgaWYgKCFvcHRpb25zLnNjb3BlKSB7XG4gICAgICAgIFRhcmdldCA9IFRhcmdldC51bnNjb3BlZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgVGFyZ2V0ID0gVGFyZ2V0LnNjb3BlKG9wdGlvbnMuc2NvcGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NjaGVtYScpKSB7XG4gICAgICBUYXJnZXQgPSBUYXJnZXQuc2NoZW1hKG9wdGlvbnMuc2NoZW1hLCBvcHRpb25zLnNjaGVtYURlbGltaXRlcik7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGluc3RhbmNlcykpIHtcbiAgICAgIGluc3RhbmNlID0gaW5zdGFuY2VzO1xuICAgICAgaW5zdGFuY2VzID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZXMpIHtcbiAgICAgIHdoZXJlW3RoaXMuZm9yZWlnbktleV0gPSB7XG4gICAgICAgIFtPcC5pbl06IGluc3RhbmNlcy5tYXAoaW5zdGFuY2UgPT4gaW5zdGFuY2UuZ2V0KHRoaXMuc291cmNlS2V5KSlcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoZXJlW3RoaXMuZm9yZWlnbktleV0gPSBpbnN0YW5jZS5nZXQodGhpcy5zb3VyY2VLZXkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNjb3BlKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHdoZXJlLCB0aGlzLnNjb3BlKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLndoZXJlID0gb3B0aW9ucy53aGVyZSA/XG4gICAgICB7IFtPcC5hbmRdOiBbd2hlcmUsIG9wdGlvbnMud2hlcmVdIH0gOlxuICAgICAgd2hlcmU7XG5cbiAgICBpZiAoaW5zdGFuY2VzKSB7XG4gICAgICByZXR1cm4gVGFyZ2V0LmZpbmRBbGwob3B0aW9ucykudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7XG4gICAgICAgICAgcmVzdWx0W2luc3RhbmNlLmdldCh0aGlzLnNvdXJjZUtleSwgeyByYXc6IHRydWUgfSldID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgcmVzdWx0cykge1xuICAgICAgICAgIHJlc3VsdFtpbnN0YW5jZS5nZXQodGhpcy5mb3JlaWduS2V5LCB7IHJhdzogdHJ1ZSB9KV0gPSBpbnN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gVGFyZ2V0LmZpbmRPbmUob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBhc3NvY2lhdGVkIG1vZGVsLlxuICAgKlxuICAgKiBAcGFyYW0ge01vZGVsfSBzb3VyY2VJbnN0YW5jZSB0aGUgc291cmNlIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7PzxNb2RlbD58c3RyaW5nfG51bWJlcn0gW2Fzc29jaWF0ZWRJbnN0YW5jZV0gQW4gcGVyc2lzdGVkIGluc3RhbmNlIG9yIHRoZSBwcmltYXJ5IGtleSBvZiBhbiBpbnN0YW5jZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzLiBQYXNzIGBudWxsYCBvciBgdW5kZWZpbmVkYCB0byByZW1vdmUgdGhlIGFzc29jaWF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgcGFzc2VkIHRvIGdldEFzc29jaWF0aW9uIGFuZCBgdGFyZ2V0LnNhdmVgXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgc2V0KHNvdXJjZUluc3RhbmNlLCBhc3NvY2lhdGVkSW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgICBsZXQgYWxyZWFkeUFzc29jaWF0ZWQ7XG5cbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgc2NvcGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc291cmNlSW5zdGFuY2VbdGhpcy5hY2Nlc3NvcnMuZ2V0XShvcHRpb25zKS50aGVuKG9sZEluc3RhbmNlID0+IHtcbiAgICAgIC8vIFRPRE8gVXNlIGVxdWFscyBtZXRob2Qgb25jZSAjNTYwNSBpcyByZXNvbHZlZFxuICAgICAgYWxyZWFkeUFzc29jaWF0ZWQgPSBvbGRJbnN0YW5jZSAmJiBhc3NvY2lhdGVkSW5zdGFuY2UgJiYgdGhpcy50YXJnZXQucHJpbWFyeUtleUF0dHJpYnV0ZXMuZXZlcnkoYXR0cmlidXRlID0+XG4gICAgICAgIG9sZEluc3RhbmNlLmdldChhdHRyaWJ1dGUsIHsgcmF3OiB0cnVlIH0pID09PSAoYXNzb2NpYXRlZEluc3RhbmNlLmdldCA/IGFzc29jaWF0ZWRJbnN0YW5jZS5nZXQoYXR0cmlidXRlLCB7IHJhdzogdHJ1ZSB9KSA6IGFzc29jaWF0ZWRJbnN0YW5jZSlcbiAgICAgICk7XG5cbiAgICAgIGlmIChvbGRJbnN0YW5jZSAmJiAhYWxyZWFkeUFzc29jaWF0ZWQpIHtcbiAgICAgICAgb2xkSW5zdGFuY2VbdGhpcy5mb3JlaWduS2V5XSA9IG51bGw7XG4gICAgICAgIHJldHVybiBvbGRJbnN0YW5jZS5zYXZlKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICBmaWVsZHM6IFt0aGlzLmZvcmVpZ25LZXldLFxuICAgICAgICAgIGFsbG93TnVsbDogW3RoaXMuZm9yZWlnbktleV0sXG4gICAgICAgICAgYXNzb2NpYXRpb246IHRydWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKGFzc29jaWF0ZWRJbnN0YW5jZSAmJiAhYWxyZWFkeUFzc29jaWF0ZWQpIHtcbiAgICAgICAgaWYgKCEoYXNzb2NpYXRlZEluc3RhbmNlIGluc3RhbmNlb2YgdGhpcy50YXJnZXQpKSB7XG4gICAgICAgICAgY29uc3QgdG1wSW5zdGFuY2UgPSB7fTtcbiAgICAgICAgICB0bXBJbnN0YW5jZVt0aGlzLnRhcmdldC5wcmltYXJ5S2V5QXR0cmlidXRlXSA9IGFzc29jaWF0ZWRJbnN0YW5jZTtcbiAgICAgICAgICBhc3NvY2lhdGVkSW5zdGFuY2UgPSB0aGlzLnRhcmdldC5idWlsZCh0bXBJbnN0YW5jZSwge1xuICAgICAgICAgICAgaXNOZXdSZWNvcmQ6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuYXNzaWduKGFzc29jaWF0ZWRJbnN0YW5jZSwgdGhpcy5zY29wZSk7XG4gICAgICAgIGFzc29jaWF0ZWRJbnN0YW5jZS5zZXQodGhpcy5mb3JlaWduS2V5LCBzb3VyY2VJbnN0YW5jZS5nZXQodGhpcy5zb3VyY2VLZXlBdHRyaWJ1dGUpKTtcblxuICAgICAgICByZXR1cm4gYXNzb2NpYXRlZEluc3RhbmNlLnNhdmUob3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYXNzb2NpYXRlZCBtb2RlbCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggdGhpcy5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gc291cmNlSW5zdGFuY2UgdGhlIHNvdXJjZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW3ZhbHVlcz17fV0gdmFsdWVzIHRvIGNyZWF0ZSBhc3NvY2lhdGVkIG1vZGVsIGluc3RhbmNlIHdpdGhcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHBhc3NlZCB0byBgdGFyZ2V0LmNyZWF0ZWAgYW5kIHNldEFzc29jaWF0aW9uLlxuICAgKlxuICAgKiBAc2VlXG4gICAqIHtAbGluayBNb2RlbCNjcmVhdGV9IGZvciBhIGZ1bGwgZXhwbGFuYXRpb24gb2Ygb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbD59IFRoZSBjcmVhdGVkIHRhcmdldCBtb2RlbFxuICAgKi9cbiAgY3JlYXRlKHNvdXJjZUluc3RhbmNlLCB2YWx1ZXMsIG9wdGlvbnMpIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMgfHwge307XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodGhpcy5zY29wZSkge1xuICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgT2JqZWN0LmtleXModGhpcy5zY29wZSkpIHtcbiAgICAgICAgdmFsdWVzW2F0dHJpYnV0ZV0gPSB0aGlzLnNjb3BlW2F0dHJpYnV0ZV07XG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkcykge1xuICAgICAgICAgIG9wdGlvbnMuZmllbGRzLnB1c2goYXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlc1t0aGlzLmZvcmVpZ25LZXldID0gc291cmNlSW5zdGFuY2UuZ2V0KHRoaXMuc291cmNlS2V5QXR0cmlidXRlKTtcbiAgICBpZiAob3B0aW9ucy5maWVsZHMpIHtcbiAgICAgIG9wdGlvbnMuZmllbGRzLnB1c2godGhpcy5mb3JlaWduS2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50YXJnZXQuY3JlYXRlKHZhbHVlcywgb3B0aW9ucyk7XG4gIH1cblxuICB2ZXJpZnlBc3NvY2lhdGlvbkFsaWFzKGFsaWFzKSB7XG4gICAgaWYgKHR5cGVvZiBhbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzID09PSBhbGlhcztcbiAgICB9XG5cbiAgICBpZiAoYWxpYXMgJiYgYWxpYXMuc2luZ3VsYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzID09PSBhbGlhcy5zaW5ndWxhcjtcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXMuaXNBbGlhc2VkO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzT25lO1xuIl19 \ No newline at end of file diff --git a/dist/associations/helpers.js b/dist/associations/helpers.js index 6baa849..5c9147f 100644 --- a/dist/associations/helpers.js +++ b/dist/associations/helpers.js @@ -66,4 +66,4 @@ function mixinMethods(association, obj, methods, aliases) { } exports.mixinMethods = mixinMethods; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvaGVscGVycy5qcyJdLCJuYW1lcyI6WyJjaGVja05hbWluZ0NvbGxpc2lvbiIsImFzc29jaWF0aW9uIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic291cmNlIiwicmF3QXR0cmlidXRlcyIsImFzIiwiRXJyb3IiLCJuYW1lIiwiZXhwb3J0cyIsImFkZEZvcmVpZ25LZXlDb25zdHJhaW50cyIsIm5ld0F0dHJpYnV0ZSIsInRhcmdldCIsIm9wdGlvbnMiLCJrZXkiLCJmb3JlaWduS2V5Q29uc3RyYWludCIsIm9uRGVsZXRlIiwib25VcGRhdGUiLCJwcmltYXJ5S2V5cyIsImtleXMiLCJtYXAiLCJwcmltYXJ5S2V5QXR0cmlidXRlIiwiZmllbGQiLCJsZW5ndGgiLCJpbmNsdWRlcyIsIl9zY2hlbWEiLCJyZWZlcmVuY2VzIiwibW9kZWwiLCJzZXF1ZWxpemUiLCJnZXRRdWVyeUludGVyZmFjZSIsIlF1ZXJ5R2VuZXJhdG9yIiwiYWRkU2NoZW1hIiwidGFibGVOYW1lIiwiX3NjaGVtYURlbGltaXRlciIsIm1peGluTWV0aG9kcyIsIm9iaiIsIm1ldGhvZHMiLCJhbGlhc2VzIiwibWV0aG9kIiwiYWNjZXNzb3JzIiwicmVhbE1ldGhvZCIsIkFycmF5IiwiZnJvbSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsU0FBU0Esb0JBQVQsQ0FBOEJDLFdBQTlCLEVBQTJDO0FBQ3pDLE1BQUlDLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDSixXQUFXLENBQUNLLE1BQVosQ0FBbUJDLGFBQXhELEVBQXVFTixXQUFXLENBQUNPLEVBQW5GLENBQUosRUFBNEY7QUFDMUYsVUFBTSxJQUFJQyxLQUFKLENBQ0gsdUNBQXNDUixXQUFXLENBQUNPLEVBQUcsR0FBdEQsR0FDQyxxQkFBb0JQLFdBQVcsQ0FBQ08sRUFBRyxjQUFhUCxXQUFXLENB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WyIndXNlIHN0cmljdCc7XHJcblxyXG5mdW5jdGlvbiBjaGVja05hbWluZ0NvbGxpc2lvbihhc3NvY2lhdGlvbikge1xyXG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXNzb2NpYXRpb24uc291cmNlLnJhd0F0dHJpYnV0ZXMsIGFzc29jaWF0aW9uLmFzKSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgTmFtaW5nIGNvbGxpc2lvbiBiZXR3ZWVuIGF0dHJpYnV0ZSAnJHthc3NvY2lhdGlvbi5hc30nYCArXHJcbiAgICAgIGAgYW5kIGFzc29jaWF0aW9uICcke2Fzc29jaWF0aW9uLmFzfScgb24gbW9kZWwgJHthc3NvY2lhdGlvbi5zb3VyY2UubmFtZX1gICtcclxuICAgICAgJy4gVG8gcmVtZWR5IHRoaXMsIGNoYW5nZSBlaXRoZXIgZm9yZWlnbktleSBvciBhcyBpbiB5b3VyIGFzc29jaWF0aW9uIGRlZmluaXRpb24nXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5leHBvcnRzLmNoZWNrTmFtaW5nQ29sbGlzaW9uID0gY2hlY2tOYW1pbmdDb2xsaXNpb247XHJcblxyXG5mdW5jdGlvbiBhZGRGb3JlaWduS2V5Q29uc3RyYWludHMobmV3QXR0cmlidXRlLCBzb3VyY2UsIHRhcmdldCwgb3B0aW9ucywga2V5KSB7XHJcbiAgLy8gRksgY29uc3RyYWludHMgYXJlIG9wdC1pbjogdXNlcnMgbXVzdCBlaXRoZXIgc2V0IGBmb3JlaWduS2V5Q29uc3RyYWludHNgXHJcbiAgLy8gb24gdGhlIGFzc29jaWF0aW9uLCBvciByZXF1ZXN0IGFuIGBvbkRlbGV0ZWAgb3IgYG9uVXBkYXRlYCBiZWhhdmlvclxyXG5cclxuICBpZiAob3B0aW9ucy5mb3JlaWduS2V5Q29uc3RyYWludCB8fCBvcHRpb25zLm9uRGVsZXRlIHx8IG9wdGlvbnMub25VcGRhdGUpIHtcclxuICAgIC8vIEZpbmQgcHJpbWFyeSBrZXlzOiBjb21wb3NpdGUga2V5cyBub3Qgc3VwcG9ydGVkIHdpdGggdGhpcyBhcHByb2FjaFxyXG4gICAgY29uc3QgcHJpbWFyeUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UucHJpbWFyeUtleXMpXHJcbiAgICAgIC5tYXAocHJpbWFyeUtleUF0dHJpYnV0ZSA9PiBzb3VyY2UucmF3QXR0cmlidXRlc1twcmltYXJ5S2V5QXR0cmlidXRlXS5maWVsZCB8fCBwcmltYXJ5S2V5QXR0cmlidXRlKTtcclxuXHJcbiAgICBpZiAocHJpbWFyeUtleXMubGVuZ3RoID09PSAxIHx8ICFwcmltYXJ5S2V5cy5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgIGlmIChzb3VyY2UuX3NjaGVtYSkge1xyXG4gICAgICAgIG5ld0F0dHJpYnV0ZS5yZWZlcmVuY2VzID0ge1xyXG4gICAgICAgICAgbW9kZWw6IHNvdXJjZS5zZXF1ZWxpemUuZ2V0UXVlcnlJbnRlcmZhY2UoKS5RdWVyeUdlbmVyYXRvci5hZGRTY2hlbWEoe1xyXG4gICAgICAgICAgICB0YWJsZU5hbWU6IHNvdXJjZS50YWJsZU5hbWUsXHJcbiAgICAgICAgICAgIF9zY2hlbWE6IHNvdXJjZS5fc2NoZW1hLFxyXG4gICAgICAgICAgICBfc2NoZW1hRGVsaW1pdGVyOiBzb3VyY2UuX3NjaGVtYURlbGltaXRlclxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0F0dHJpYnV0ZS5yZWZlcmVuY2VzID0geyBtb2RlbDogc291cmNlLnRhYmxlTmFtZSB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuZXdBdHRyaWJ1dGUucmVmZXJlbmNlcy5rZXkgPSBrZXkgfHwgcHJpbWFyeUtleXNbMF07XHJcbiAgICAgIG5ld0F0dHJpYnV0ZS5vbkRlbGV0ZSA9IG9wdGlvbnMub25EZWxldGU7XHJcbiAgICAgIG5ld0F0dHJpYnV0ZS5vblVwZGF0ZSA9IG9wdGlvbnMub25VcGRhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbmV4cG9ydHMuYWRkRm9yZWlnbktleUNvbnN0cmFpbnRzID0gYWRkRm9yZWlnbktleUNvbnN0cmFpbnRzO1xyXG5cclxuLyoqXHJcbiAqIE1peGluIChpbmplY3QpIGFzc29jaWF0aW9uIG1ldGhvZHMgdG8gbW9kZWwgcHJvdG90eXBlXHJcbiAqXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBhc3NvY2lhdGlvbiBpbnN0YW5jZVxyXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE1vZGVsIHByb3RvdHlwZVxyXG4gKiBAcGFyYW0ge0FycmF5fSBtZXRob2RzIE1ldGhvZCBuYW1lcyB0byBpbmplY3RcclxuICogQHBhcmFtIHtPYmplY3R9IGFsaWFzZXMgTWFwcGluZyBiZXR3ZWVuIG1vZGVsIGFuZCBhc3NvY2lhdGlvbiBtZXRob2QgbmFtZXNcclxuICpcclxuICovXHJcbmZ1bmN0aW9uIG1peGluTWV0aG9kcyhhc3NvY2lhdGlvbiwgb2JqLCBtZXRob2RzLCBhbGlhc2VzKSB7XHJcbiAgYWxpYXNlcyA9IGFsaWFzZXMgfHwge307XHJcblxyXG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcclxuICAgIC8vIGRvbid0IG92ZXJyaWRlIGN1c3RvbSBtZXRob2RzXHJcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGFzc29jaWF0aW9uLmFjY2Vzc29yc1ttZXRob2RdKSkge1xyXG4gICAgICBjb25zdCByZWFsTWV0aG9kID0gYWxpYXNlc1ttZXRob2RdIHx8IG1ldGhvZDtcclxuXHJcbiAgICAgIG9ialthc3NvY2lhdGlvbi5hY2Nlc3NvcnNbbWV0aG9kXV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gYXNzb2NpYXRpb25bcmVhbE1ldGhvZF0odGhpcywgLi4uQXJyYXkuZnJvbShhcmd1bWVudHMpKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuZXhwb3J0cy5taXhpbk1ldGhvZHMgPSBtaXhpbk1ldGhvZHM7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvaGVscGVycy5qcyJdLCJuYW1lcyI6WyJjaGVja05hbWluZ0NvbGxpc2lvbiIsImFzc29jaWF0aW9uIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic291cmNlIiwicmF3QXR0cmlidXRlcyIsImFzIiwiRXJyb3IiLCJuYW1lIiwiZXhwb3J0cyIsImFkZEZvcmVpZ25LZXlDb25zdHJhaW50cyIsIm5ld0F0dHJpYnV0ZSIsInRhcmdldCIsIm9wdGlvbnMiLCJrZXkiLCJmb3JlaWduS2V5Q29uc3RyYWludCIsIm9uRGVsZXRlIiwib25VcGRhdGUiLCJwcmltYXJ5S2V5cyIsImtleXMiLCJtYXAiLCJwcmltYXJ5S2V5QXR0cmlidXRlIiwiZmllbGQiLCJsZW5ndGgiLCJpbmNsdWRlcyIsIl9zY2hlbWEiLCJyZWZlcmVuY2VzIiwibW9kZWwiLCJzZXF1ZWxpemUiLCJnZXRRdWVyeUludGVyZmFjZSIsIlF1ZXJ5R2VuZXJhdG9yIiwiYWRkU2NoZW1hIiwidGFibGVOYW1lIiwiX3NjaGVtYURlbGltaXRlciIsIm1peGluTWV0aG9kcyIsIm9iaiIsIm1ldGhvZHMiLCJhbGlhc2VzIiwibWV0aG9kIiwiYWNjZXNzb3JzIiwicmVhbE1ldGhvZCIsIkFycmF5IiwiZnJvbSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsU0FBU0Esb0JBQVQsQ0FBOEJDLFdBQTlCLEVBQTJDO0FBQ3pDLE1BQUlDLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDSixXQUFXLENBQUNLLE1BQVosQ0FBbUJDLGFBQXhELEVBQXVFTixXQUFXLENBQUNPLEVBQW5GLENBQUosRUFBNEY7QUFDMUYsVUFBTSxJQUFJQyxLQUFKLENBQ0gsdUNBQXNDUixXQUFXLENBQUNPLEVBQUcsR0FBdEQsR0FDQyxxQkFBb0JQLFdBQVcsQ0FBQ08sRUFBRyxjQUFhUCxXQUFXLENB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Q3lCLFlBQVIsR0FBdUJBLFlBQXZCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja05hbWluZ0NvbGxpc2lvbihhc3NvY2lhdGlvbikge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFzc29jaWF0aW9uLnNvdXJjZS5yYXdBdHRyaWJ1dGVzLCBhc3NvY2lhdGlvbi5hcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTmFtaW5nIGNvbGxpc2lvbiBiZXR3ZWVuIGF0dHJpYnV0ZSAnJHthc3NvY2lhdGlvbi5hc30nYCArXG4gICAgICBgIGFuZCBhc3NvY2lhdGlvbiAnJHthc3NvY2lhdGlvbi5hc30nIG9uIG1vZGVsICR7YXNzb2NpYXRpb24uc291cmNlLm5hbWV9YCArXG4gICAgICAnLiBUbyByZW1lZHkgdGhpcywgY2hhbmdlIGVpdGhlciBmb3JlaWduS2V5IG9yIGFzIGluIHlvdXIgYXNzb2NpYXRpb24gZGVmaW5pdGlvbidcbiAgICApO1xuICB9XG59XG5leHBvcnRzLmNoZWNrTmFtaW5nQ29sbGlzaW9uID0gY2hlY2tOYW1pbmdDb2xsaXNpb247XG5cbmZ1bmN0aW9uIGFkZEZvcmVpZ25LZXlDb25zdHJhaW50cyhuZXdBdHRyaWJ1dGUsIHNvdXJjZSwgdGFyZ2V0LCBvcHRpb25zLCBrZXkpIHtcbiAgLy8gRksgY29uc3RyYWludHMgYXJlIG9wdC1pbjogdXNlcnMgbXVzdCBlaXRoZXIgc2V0IGBmb3JlaWduS2V5Q29uc3RyYWludHNgXG4gIC8vIG9uIHRoZSBhc3NvY2lhdGlvbiwgb3IgcmVxdWVzdCBhbiBgb25EZWxldGVgIG9yIGBvblVwZGF0ZWAgYmVoYXZpb3JcblxuICBpZiAob3B0aW9ucy5mb3JlaWduS2V5Q29uc3RyYWludCB8fCBvcHRpb25zLm9uRGVsZXRlIHx8IG9wdGlvbnMub25VcGRhdGUpIHtcbiAgICAvLyBGaW5kIHByaW1hcnkga2V5czogY29tcG9zaXRlIGtleXMgbm90IHN1cHBvcnRlZCB3aXRoIHRoaXMgYXBwcm9hY2hcbiAgICBjb25zdCBwcmltYXJ5S2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZS5wcmltYXJ5S2V5cylcbiAgICAgIC5tYXAocHJpbWFyeUtleUF0dHJpYnV0ZSA9PiBzb3VyY2UucmF3QXR0cmlidXRlc1twcmltYXJ5S2V5QXR0cmlidXRlXS5maWVsZCB8fCBwcmltYXJ5S2V5QXR0cmlidXRlKTtcblxuICAgIGlmIChwcmltYXJ5S2V5cy5sZW5ndGggPT09IDEgfHwgIXByaW1hcnlLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGlmIChzb3VyY2UuX3NjaGVtYSkge1xuICAgICAgICBuZXdBdHRyaWJ1dGUucmVmZXJlbmNlcyA9IHtcbiAgICAgICAgICBtb2RlbDogc291cmNlLnNlcXVlbGl6ZS5nZXRRdWVyeUludGVyZmFjZSgpLlF1ZXJ5R2VuZXJhdG9yLmFkZFNjaGVtYSh7XG4gICAgICAgICAgICB0YWJsZU5hbWU6IHNvdXJjZS50YWJsZU5hbWUsXG4gICAgICAgICAgICBfc2NoZW1hOiBzb3VyY2UuX3NjaGVtYSxcbiAgICAgICAgICAgIF9zY2hlbWFEZWxpbWl0ZXI6IHNvdXJjZS5fc2NoZW1hRGVsaW1pdGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld0F0dHJpYnV0ZS5yZWZlcmVuY2VzID0geyBtb2RlbDogc291cmNlLnRhYmxlTmFtZSB9O1xuICAgICAgfVxuXG4gICAgICBuZXdBdHRyaWJ1dGUucmVmZXJlbmNlcy5rZXkgPSBrZXkgfHwgcHJpbWFyeUtleXNbMF07XG4gICAgICBuZXdBdHRyaWJ1dGUub25EZWxldGUgPSBvcHRpb25zLm9uRGVsZXRlO1xuICAgICAgbmV3QXR0cmlidXRlLm9uVXBkYXRlID0gb3B0aW9ucy5vblVwZGF0ZTtcbiAgICB9XG4gIH1cbn1cbmV4cG9ydHMuYWRkRm9yZWlnbktleUNvbnN0cmFpbnRzID0gYWRkRm9yZWlnbktleUNvbnN0cmFpbnRzO1xuXG4vKipcbiAqIE1peGluIChpbmplY3QpIGFzc29jaWF0aW9uIG1ldGhvZHMgdG8gbW9kZWwgcHJvdG90eXBlXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYXNzb2NpYXRpb24gaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogTW9kZWwgcHJvdG90eXBlXG4gKiBAcGFyYW0ge0FycmF5fSBtZXRob2RzIE1ldGhvZCBuYW1lcyB0byBpbmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBhbGlhc2VzIE1hcHBpbmcgYmV0d2VlbiBtb2RlbCBhbmQgYXNzb2NpYXRpb24gbWV0aG9kIG5hbWVzXG4gKlxuICovXG5mdW5jdGlvbiBtaXhpbk1ldGhvZHMoYXNzb2NpYXRpb24sIG9iaiwgbWV0aG9kcywgYWxpYXNlcykge1xuICBhbGlhc2VzID0gYWxpYXNlcyB8fCB7fTtcblxuICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBtZXRob2RzKSB7XG4gICAgLy8gZG9uJ3Qgb3ZlcnJpZGUgY3VzdG9tIG1ldGhvZHNcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGFzc29jaWF0aW9uLmFjY2Vzc29yc1ttZXRob2RdKSkge1xuICAgICAgY29uc3QgcmVhbE1ldGhvZCA9IGFsaWFzZXNbbWV0aG9kXSB8fCBtZXRob2Q7XG5cbiAgICAgIG9ialthc3NvY2lhdGlvbi5hY2Nlc3NvcnNbbWV0aG9kXV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFzc29jaWF0aW9uW3JlYWxNZXRob2RdKHRoaXMsIC4uLkFycmF5LmZyb20oYXJndW1lbnRzKSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuZXhwb3J0cy5taXhpbk1ldGhvZHMgPSBtaXhpbk1ldGhvZHM7XG4iXX0= \ No newline at end of file diff --git a/dist/associations/index.js b/dist/associations/index.js index 9f13d36..6eb38a6 100644 --- a/dist/associations/index.js +++ b/dist/associations/index.js @@ -9,4 +9,4 @@ Association.BelongsToMany = require('./belongs-to-many'); module.exports = Association; module.exports.default = Association; module.exports.Association = Association; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvaW5kZXguanMiXSwibmFtZXMiOlsiQXNzb2NpYXRpb24iLCJyZXF1aXJlIiwiQmVsb25nc1RvIiwiSGFzT25lIiwiSGFzTWFueSIsIkJlbG9uZ3NUb01hbnkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUEzQjs7QUFFQUQsV0FBVyxDQUFDRSxTQUFaLEdBQXdCRCxPQUFPLENBQUMsY0FBRCxDQUEvQjtBQUNBRCxXQUFXLENBQUNHLE1BQVosR0FBcUJGLE9BQU8sQ0FBQyxXQUFELENBQTVCO0FBQ0FELFdBQVcsQ0FBQ0ksT0FBWixHQUFzQkgsT0FBTyxDQUFDLFlBQUQsQ0FBN0I7QUFDQUQsV0FBVyxDQUFDSyxhQUFaLEdBQTRCSixPQUFPLENBQUMsbUJBQUQsQ0FBbkM7QUFFQUssTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxXQUFqQjtBQUNBTSxNQUFNLENBQUNDLE9BQVAsQ0FBZUMsT0FBZixHQUF5QlIsV0FBekI7QUFDQU0sTUFBTSxDQUFDQyxPQUFQLENBQWVQLFdBQWYsR0FBNkJBLFdBQTdCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgQXNzb2NpYXRpb24gPSByZXF1aXJlKCcuL2Jhc2UnKTtcclxuXHJcbkFzc29jaWF0aW9uLkJlbG9uZ3NUbyA9IHJlcXVpcmUoJy4vYmVsb25ncy10bycpO1xyXG5Bc3NvY2lhdGlvbi5IYXNPbmUgPSByZXF1aXJlKCcuL2hhcy1vbmUnKTtcclxuQXNzb2NpYXRpb24uSGFzTWFueSA9IHJlcXVpcmUoJy4vaGFzLW1hbnknKTtcclxuQXNzb2NpYXRpb24uQmVsb25nc1RvTWFueSA9IHJlcXVpcmUoJy4vYmVsb25ncy10by1tYW55Jyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFzc29jaWF0aW9uO1xyXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gQXNzb2NpYXRpb247XHJcbm1vZHVsZS5leHBvcnRzLkFzc29jaWF0aW9uID0gQXNzb2NpYXRpb247XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvaW5kZXguanMiXSwibmFtZXMiOlsiQXNzb2NpYXRpb24iLCJyZXF1aXJlIiwiQmVsb25nc1RvIiwiSGFzT25lIiwiSGFzTWFueSIsIkJlbG9uZ3NUb01hbnkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUEzQjs7QUFFQUQsV0FBVyxDQUFDRSxTQUFaLEdBQXdCRCxPQUFPLENBQUMsY0FBRCxDQUEvQjtBQUNBRCxXQUFXLENBQUNHLE1BQVosR0FBcUJGLE9BQU8sQ0FBQyxXQUFELENBQTVCO0FBQ0FELFdBQVcsQ0FBQ0ksT0FBWixHQUFzQkgsT0FBTyxDQUFDLFlBQUQsQ0FBN0I7QUFDQUQsV0FBVyxDQUFDSyxhQUFaLEdBQTRCSixPQUFPLENBQUMsbUJBQUQsQ0FBbkM7QUFFQUssTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxXQUFqQjtBQUNBTSxNQUFNLENBQUNDLE9BQVAsQ0FBZUMsT0FBZixHQUF5QlIsV0FBekI7QUFDQU0sTUFBTSxDQUFDQyxPQUFQLENBQWVQLFdBQWYsR0FBNkJBLFdBQTdCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBBc3NvY2lhdGlvbiA9IHJlcXVpcmUoJy4vYmFzZScpO1xuXG5Bc3NvY2lhdGlvbi5CZWxvbmdzVG8gPSByZXF1aXJlKCcuL2JlbG9uZ3MtdG8nKTtcbkFzc29jaWF0aW9uLkhhc09uZSA9IHJlcXVpcmUoJy4vaGFzLW9uZScpO1xuQXNzb2NpYXRpb24uSGFzTWFueSA9IHJlcXVpcmUoJy4vaGFzLW1hbnknKTtcbkFzc29jaWF0aW9uLkJlbG9uZ3NUb01hbnkgPSByZXF1aXJlKCcuL2JlbG9uZ3MtdG8tbWFueScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFzc29jaWF0aW9uO1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEFzc29jaWF0aW9uO1xubW9kdWxlLmV4cG9ydHMuQXNzb2NpYXRpb24gPSBBc3NvY2lhdGlvbjtcbiJdfQ== \ No newline at end of file diff --git a/dist/associations/mixin.js b/dist/associations/mixin.js index e382252..e3e42a9 100644 --- a/dist/associations/mixin.js +++ b/dist/associations/mixin.js @@ -152,4 +152,4 @@ Mixin.belongsTo = singleLinked(BelongsTo); module.exports = Mixin; module.exports.Mixin = Mixin; module.exports.default = Mixin; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvbWl4aW4uanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJIYXNPbmUiLCJIYXNNYW55IiwiQmVsb25nc1RvTWFueSIsIkJlbG9uZ3NUbyIsImlzTW9kZWwiLCJtb2RlbCIsInNlcXVlbGl6ZSIsInByb3RvdHlwZSIsIlNlcXVlbGl6ZSIsIk1vZGVsIiwiTWl4aW4iLCJoYXNNYW55IiwidGFyZ2V0Iiwib3B0aW9ucyIsIkVycm9yIiwibmFtZSIsInNvdXJjZSIsImhvb2tzIiwidW5kZWZpbmVkIiwiQm9vbGVhbiIsInVzZUhvb2tzIiwiT2JqZWN0IiwiYXNzaWduIiwib21pdCIsInJ1bkhvb2tzIiwidHlwZSIsImFzc29jaWF0aW9uIiwiYXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25BY2Nlc3NvciIsIl9pbmplY3RBdHRyaWJ1dGVzIiwibWl4aW4iLCJiZWxvbmdzVG9NYW55IiwidGltZXN0YW1wcyIsImdldEFzc29jaWF0aW9ucyIsInZhbHVlcyIsImZpbHRlciIsImdldEFzc29jaWF0aW9uRm9yQWxpYXMiLCJhbGlhcyIsImZpbmQiLCJ2ZXJpZnlBc3NvY2lhdGlvbkFsaWFzIiwic2luZ2xlTGlua2VkIiwiVHlwZSIsImxvd2VyRmlyc3QiLCJoYXNPbmUiLCJiZWxvbmdzVG8iLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsQ0FBQyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNQyxNQUFNLEdBQUdELE9BQU8sQ0FBQyxXQUFELENBQXRCOztBQUNBLE1BQU1FLE9BQU8sR0FBR0YsT0FBTyxDQUFDLFlBQUQsQ0FBdkI7O0FBQ0EsTUFBTUcsYUFBYSxHQUFHSCxPQUFPLENBQUMsbUJBQUQsQ0FBN0I7O0FBQ0EsTUFBTUksU0FBUyxHQUFHSixPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFFQSxTQUFTSyxPQUFULENBQWlCQyxLQUFqQixF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O0FBQ0EsVUFBTWEsV0FBVyxHQUFHLElBQUllLElBQUosQ0FBU3pCLE1BQVQsRUFBaUJKLE1BQWpCLEVBQXlCUyxNQUFNLENBQUNDLE1BQVAsQ0FBY1QsT0FBZCxFQUF1QkcsTUFBTSxDQUFDSCxPQUE5QixDQUF6QixDQUFwQjtBQUNBRyxJQUFBQSxNQUFNLENBQUNXLFlBQVAsQ0FBb0JELFdBQVcsQ0FBQ0UsbUJBQWhDLElBQXVERixXQUF2RDs7QUFFQUEsSUFBQUEsV0FBVyxDQUFDRyxpQkFBWjs7QUFDQUgsSUFBQUEsV0FBVyxDQUFDSSxLQUFaLENBQWtCZCxNQUFNLENBQUNULFNBQXpCOztBQUVBLFFBQUlNLE9BQU8sQ0FBQ08sUUFBWixFQUFzQjtBQUNwQkosTUFBQUEsTUFBTSxDQUFDUSxRQUFQLENBQWdCLGdCQUFoQixFQUFrQztBQUFFUixRQUFBQSxNQUFGO0FBQVVKLFFBQUFBLE1BQVY7QUFBa0JhLFFBQUFBLElBQUksRUFBRWdCLElBQXhCO0FBQThCZixRQUFBQTtBQUE5QixPQUFsQyxFQUErRWIsT0FBL0U7QUFDRDs7QUFFRCxXQUFPYSxXQUFQO0FBQ0QsR0EzQkQ7QUE0QkQ7O0FBRURoQixLQUFLLENBQUNpQyxNQUFOLEdBQWVILFlBQVksQ0FBQ3hDLE1BQUQsQ0FBM0I7QUFDQVUsS0FBSyxDQUFDa0MsU0FBTixHQUFrQkosWUFBWSxDQUFDckMsU0FBRCxDQUE5QjtBQUVBMEMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCcEMsS0FBakI7QUFDQW1DLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlcEMsS0FBZixHQUF1QkEsS0FBdkI7QUFDQW1DLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCckMsS0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IEhhc09uZSA9IHJlcXVpcmUoJy4vaGFzLW9uZScpO1xyXG5jb25zdCBIYXNNYW55ID0gcmVxdWlyZSgnLi9oYXMtbWFueScpO1xyXG5jb25zdCBCZWxvbmdzVG9NYW55ID0gcmVxdWlyZSgnLi9iZWxvbmdzLXRvLW1hbnknKTtcclxuY29uc3QgQmVsb25nc1RvID0gcmVxdWlyZSgnLi9iZWxvbmdzLXRvJyk7XHJcblxyXG5mdW5jdGlvbiBpc01vZGVsKG1vZGVsLCBzZXF1ZWxpemUpIHtcclxuICByZXR1cm4gbW9kZWxcclxuICAgICYmIG1vZGVsLnByb3RvdHlwZVxyXG4gICAgJiYgbW9kZWwucHJvdG90eXBlIGluc3RhbmNlb2Ygc2VxdWVsaXplLlNlcXVlbGl6ZS5Nb2RlbDtcclxufVxyXG5cclxuY29uc3QgTWl4aW4gPSB7XHJcbiAgaGFzTWFueSh0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgaWYgKCFpc01vZGVsKHRhcmdldCwgdGhpcy5zZXF1ZWxpemUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm5hbWV9Lmhhc01hbnkgY2FsbGVkIHdpdGggc29tZXRoaW5nIHRoYXQncyBub3QgYSBzdWJjbGFzcyBvZiBTZXF1ZWxpemUuTW9kZWxgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzO1xyXG5cclxuICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBtaXhpbiwgd2UnbGwgbmVlZCBhIHVuaXF1ZSBsZXRpYWJsZSBuYW1lIGZvciBob29rcyAoc2luY2UgTW9kZWwgd2lsbCBvdmVycmlkZSBvdXIgaG9va3Mgb3B0aW9uKVxyXG4gICAgb3B0aW9ucy5ob29rcyA9IG9wdGlvbnMuaG9va3MgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogQm9vbGVhbihvcHRpb25zLmhvb2tzKTtcclxuICAgIG9wdGlvbnMudXNlSG9va3MgPSBvcHRpb25zLmhvb2tzO1xyXG5cclxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG9wdGlvbnMsIF8ub21pdChzb3VyY2Uub3B0aW9ucywgWydob29rcyddKSk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMudXNlSG9va3MpIHtcclxuICAgICAgdGhpcy5ydW5Ib29rcygnYmVmb3JlQXNzb2NpYXRlJywgeyBzb3VyY2UsIHRhcmdldCwgdHlwZTogSGFzTWFueSB9LCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGUgaWQgaXMgaW4gdGhlIGZvcmVpZ24gdGFibGUgb3IgaW4gYSBjb25uZWN0aW5nIHRhYmxlXHJcbiAgICBjb25zdCBhc3NvY2lhdGlvbiA9IG5ldyBIYXNNYW55KHNvdXJjZSwgdGFyZ2V0LCBvcHRpb25zKTtcclxuICAgIHNvdXJjZS5hc3NvY2lhdGlvbnNbYXNzb2NpYXRpb24uYXNzb2NpYXRpb25BY2Nlc3Nvcl0gPSBhc3NvY2lhdGlvbjtcclxuXHJcbiAgICBhc3NvY2lhdGlvbi5faW5qZWN0QXR0cmlidXRlcygpO1xyXG4gICAgYXNzb2NpYXRpb24ubWl4aW4oc291cmNlLnByb3RvdHlwZSk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMudXNlSG9va3MpIHtcclxuICAgICAgdGhpcy5ydW5Ib29rcygnYWZ0ZXJBc3NvY2lhdGUnLCB7IHNvdXJjZSwgdGFyZ2V0LCB0eXBlOiBIYXNNYW55LCBhc3NvY2lhdGlvbiB9LCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXNzb2NpYXRpb247XHJcbiAgfSxcclxuXHJcbiAgYmVsb25nc1RvTWFueSh0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgaWYgKCFpc01vZGVsKHRhcmdldCwgdGhpcy5zZXF1ZWxpemUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm5hbWV9LmJlbG9uZ3NUb01hbnkgY2FsbGVkIHdpdGggc29tZXRoaW5nIHRoYXQncyBub3QgYSBzdWJjbGFzcyBvZiBTZXF1ZWxpemUuTW9kZWxgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzO1xyXG5cclxuICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBtaXhpbiwgd2UnbGwgbmVlZCBhIHVuaXF1ZSBsZXRpYWJsZSBuYW1lIGZvciBob29rcyAoc2luY2UgTW9kZWwgd2lsbCBvdmVycmlkZSBvdXIgaG9va3Mgb3B0aW9uKVxyXG4gICAgb3B0aW9ucy5ob29rcyA9IG9wdGlvbnMuaG9va3MgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogQm9vbGVhbihvcHRpb25zLmhvb2tzKTtcclxuICAgIG9wdGlvbnMudXNlSG9va3MgPSBvcHRpb25zLmhvb2tzO1xyXG4gICAgb3B0aW9ucy50aW1lc3RhbXBzID0gb3B0aW9ucy50aW1lc3RhbXBzID09PSB1bmRlZmluZWQgPyB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLnRpbWVzdGFtcHMgOiBvcHRpb25zLnRpbWVzdGFtcHM7XHJcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbihvcHRpb25zLCBfLm9taXQoc291cmNlLm9wdGlvbnMsIFsnaG9va3MnLCAndGltZXN0YW1wcycsICdzY29wZXMnLCAnZGVmYXVsdFNjb3BlJ10pKTtcclxuXHJcbiAgICBpZiAob3B0aW9ucy51c2VIb29rcykge1xyXG4gICAgICB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVBc3NvY2lhdGUnLCB7IHNvdXJjZSwgdGFyZ2V0LCB0eXBlOiBCZWxvbmdzVG9NYW55IH0sIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhlIGlkIGlzIGluIHRoZSBmb3JlaWduIHRhYmxlIG9yIGluIGEgY29ubmVjdGluZyB0YWJsZVxyXG4gICAgY29uc3QgYXNzb2NpYXRpb24gPSBuZXcgQmVsb25nc1RvTWFueShzb3VyY2UsIHRhcmdldCwgb3B0aW9ucyk7XHJcbiAgICBzb3VyY2UuYXNzb2NpYXRpb25zW2Fzc29jaWF0aW9uLmFzc29jaWF0aW9uQWNjZXNzb3JdID0gYXNzb2NpYXRpb247XHJcblxyXG4gICAgYXNzb2NpYXRpb24uX2luamVjdEF0dHJpYnV0ZXMoKTtcclxuICAgIGFzc29jaWF0aW9uLm1peGluKHNvdXJjZS5wcm90b3R5cGUpO1xyXG5cclxuICAgIGlmIChvcHRpb25zLnVzZUhvb2tzKSB7XHJcbiAgICAgIHRoaXMucnVuSG9va3MoJ2FmdGVyQXNzb2NpYXRlJywgeyBzb3VyY2UsIHRhcmdldCwgdHlwZTogQmVsb25nc1RvTWFueSwgYXNzb2NpYXRpb24gfSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFzc29jaWF0aW9uO1xyXG4gIH0sXHJcblxyXG4gIGdldEFzc29jaWF0aW9ucyh0YXJnZXQpIHtcclxuICAgIHJldHVybiBfLnZhbHVlcyh0aGlzLmFzc29jaWF0aW9ucykuZmlsdGVyKGFzc29jaWF0aW9uID0+IGFzc29jaWF0aW9uLnRhcmdldC5uYW1lID09PSB0YXJnZXQubmFtZSk7XHJcbiAgfSxcclxuXHJcbiAgZ2V0QXNzb2NpYXRpb25Gb3JBbGlhcyh0YXJnZXQsIGFsaWFzKSB7XHJcbiAgICAvLyBUd28gYXNzb2NpYXRpb25zIGNhbm5vdCBoYXZlIHRoZSBzYW1lIGFsaWFzLCBzbyB3ZSBjYW4gdXNlIGZpbmQgaW5zdGVhZCBvZiBmaWx0ZXJcclxuICAgIHJldHVybiB0aGlzLmdldEFzc29jaWF0aW9ucyh0YXJnZXQpLmZpbmQoYXNzb2NpYXRpb24gPT4gYXNzb2NpYXRpb24udmVyaWZ5QXNzb2NpYXRpb25BbGlhcyhhbGlhcykpIHx8IG51bGw7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gVGhlIGxvZ2ljIGZvciBoYXNPbmUgYW5kIGJlbG9uZ3NUbyBpcyBleGFjdGx5IHRoZSBzYW1lXHJcbmZ1bmN0aW9uIHNpbmdsZUxpbmtlZChUeXBlKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uKHRhcmdldCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXHJcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzO1xyXG4gICAgaWYgKCFpc01vZGVsKHRhcmdldCwgc291cmNlLnNlcXVlbGl6ZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3NvdXJjZS5uYW1lfS4ke18ubG93ZXJGaXJzdChUeXBlLm5hbWUpfSBjYWxsZWQgd2l0aCBzb21ldGhpbmcgdGhhdCdzIG5vdCBhIHN1YmNsYXNzIG9mIFNlcXVlbGl6ZS5Nb2RlbGApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBTaW5jZSB0aGlzIGlzIGEgbWl4aW4sIHdlJ2xsIG5lZWQgYSB1bmlxdWUgbGV0aWFibGUgbmFtZSBmb3IgaG9va3MgKHNpbmNlIE1vZGVsIHdpbGwgb3ZlcnJpZGUgb3VyIGhvb2tzIG9wdGlvbilcclxuICAgIG9wdGlvbnMuaG9va3MgPSBvcHRpb25zLmhvb2tzID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IEJvb2xlYW4ob3B0aW9ucy5ob29rcyk7XHJcbiAgICBvcHRpb25zLnVzZUhvb2tzID0gb3B0aW9ucy5ob29rcztcclxuXHJcbiAgICBpZiAob3B0aW9ucy51c2VIb29rcykge1xyXG4gICAgICBzb3VyY2UucnVuSG9va3MoJ2JlZm9yZUFzc29jaWF0ZScsIHsgc291cmNlLCB0YXJnZXQsIHR5cGU6IFR5cGUgfSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGUgaWQgaXMgaW4gdGhlIGZvcmVpZ24gdGFibGVcclxuICAgIGNvbnN0IGFzc29jaWF0aW9uID0gbmV3IFR5cGUoc291cmNlLCB0YXJnZXQsIE9iamVjdC5hc3NpZ24ob3B0aW9ucywgc291cmNlLm9wdGlvbnMpKTtcclxuICAgIHNvdXJjZS5hc3NvY2lhdGlvbnNbYXNzb2NpYXRpb24uYXNzb2NpYXRpb25BY2Nlc3Nvcl0gPSBhc3NvY2lhdGlvbjtcclxuXHJcbiAgICBhc3NvY2lhdGlvbi5faW5qZWN0QXR0cmlidXRlcygpO1xyXG4gICAgYXNzb2NpYXRpb24ubWl4aW4oc291cmNlLnByb3RvdHlwZSk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMudXNlSG9va3MpIHtcclxuICAgICAgc291cmNlLnJ1bkhvb2tzKCdhZnRlckFzc29jaWF0ZScsIHsgc291cmNlLCB0YXJnZXQsIHR5cGU6IFR5cGUsIGFzc29jaWF0aW9uIH0sIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhc3NvY2lhdGlvbjtcclxuICB9O1xyXG59XHJcblxyXG5NaXhpbi5oYXNPbmUgPSBzaW5nbGVMaW5rZWQoSGFzT25lKTtcclxuTWl4aW4uYmVsb25nc1RvID0gc2luZ2xlTGlua2VkKEJlbG9uZ3NUbyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1peGluO1xyXG5tb2R1bGUuZXhwb3J0cy5NaXhpbiA9IE1peGluO1xyXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gTWl4aW47XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hc3NvY2lhdGlvbnMvbWl4aW4uanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJIYXNPbmUiLCJIYXNNYW55IiwiQmVsb25nc1RvTWFueSIsIkJlbG9uZ3NUbyIsImlzTW9kZWwiLCJtb2RlbCIsInNlcXVlbGl6ZSIsInByb3RvdHlwZSIsIlNlcXVlbGl6ZSIsIk1vZGVsIiwiTWl4aW4iLCJoYXNNYW55IiwidGFyZ2V0Iiwib3B0aW9ucyIsIkVycm9yIiwibmFtZSIsInNvdXJjZSIsImhvb2tzIiwidW5kZWZpbmVkIiwiQm9vbGVhbiIsInVzZUhvb2tzIiwiT2JqZWN0IiwiYXNzaWduIiwib21pdCIsInJ1bkhvb2tzIiwidHlwZSIsImFzc29jaWF0aW9uIiwiYXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25BY2Nlc3NvciIsIl9pbmplY3RBdHRyaWJ1dGVzIiwibWl4aW4iLCJiZWxvbmdzVG9NYW55IiwidGltZXN0YW1wcyIsImdldEFzc29jaWF0aW9ucyIsInZhbHVlcyIsImZpbHRlciIsImdldEFzc29jaWF0aW9uRm9yQWxpYXMiLCJhbGlhcyIsImZpbmQiLCJ2ZXJpZnlBc3NvY2lhdGlvbkFsaWFzIiwic2luZ2xlTGlua2VkIiwiVHlwZSIsImxvd2VyRmlyc3QiLCJoYXNPbmUiLCJiZWxvbmdzVG8iLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsQ0FBQyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNQyxNQUFNLEdBQUdELE9BQU8sQ0FBQyxXQUFELENBQXRCOztBQUNBLE1BQU1FLE9BQU8sR0FBR0YsT0FBTyxDQUFDLFlBQUQsQ0FBdkI7O0FBQ0EsTUFBTUcsYUFBYSxHQUFHSCxPQUFPLENBQUMsbUJBQUQsQ0FBN0I7O0FBQ0EsTUFBTUksU0FBUyxHQUFHSixPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFFQSxTQUFTSyxPQUFULENBQWlCQyxLQUFqQixF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O0FBQ0EsVUFBTWEsV0FBVyxHQUFHLElBQUllLElBQUosQ0FBU3pCLE1BQVQsRUFBaUJKLE1BQWpCLEVBQXlCUyxNQUFNLENBQUNDLE1BQVAsQ0FBY1QsT0FBZCxFQUF1QkcsTUFBTSxDQUFDSCxPQUE5QixDQUF6QixDQUFwQjtBQUNBRyxJQUFBQSxNQUFNLENBQUNXLFlBQVAsQ0FBb0JELFdBQVcsQ0FBQ0UsbUJBQWhDLElBQXVERixXQUF2RDs7QUFFQUEsSUFBQUEsV0FBVyxDQUFDRyxpQkFBWjs7QUFDQUgsSUFBQUEsV0FBVyxDQUFDSSxLQUFaLENBQWtCZCxNQUFNLENBQUNULFNBQXpCOztBQUVBLFFBQUlNLE9BQU8sQ0FBQ08sUUFBWixFQUFzQjtBQUNwQkosTUFBQUEsTUFBTSxDQUFDUSxRQUFQLENBQWdCLGdCQUFoQixFQUFrQztBQUFFUixRQUFBQSxNQUFGO0FBQVVKLFFBQUFBLE1BQVY7QUFBa0JhLFFBQUFBLElBQUksRUFBRWdCLElBQXhCO0FBQThCZixRQUFBQTtBQUE5QixPQUFsQyxFQUErRWIsT0FBL0U7QUFDRDs7QUFFRCxXQUFPYSxXQUFQO0FBQ0QsR0EzQkQ7QUE0QkQ7O0FBRURoQixLQUFLLENBQUNpQyxNQUFOLEdBQWVILFlBQVksQ0FBQ3hDLE1BQUQsQ0FBM0I7QUFDQVUsS0FBSyxDQUFDa0MsU0FBTixHQUFrQkosWUFBWSxDQUFDckMsU0FBRCxDQUE5QjtBQUVBMEMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCcEMsS0FBakI7QUFDQW1DLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlcEMsS0FBZixHQUF1QkEsS0FBdkI7QUFDQW1DLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCckMsS0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbmNvbnN0IEhhc09uZSA9IHJlcXVpcmUoJy4vaGFzLW9uZScpO1xuY29uc3QgSGFzTWFueSA9IHJlcXVpcmUoJy4vaGFzLW1hbnknKTtcbmNvbnN0IEJlbG9uZ3NUb01hbnkgPSByZXF1aXJlKCcuL2JlbG9uZ3MtdG8tbWFueScpO1xuY29uc3QgQmVsb25nc1RvID0gcmVxdWlyZSgnLi9iZWxvbmdzLXRvJyk7XG5cbmZ1bmN0aW9uIGlzTW9kZWwobW9kZWwsIHNlcXVlbGl6ZSkge1xuICByZXR1cm4gbW9kZWxcbiAgICAmJiBtb2RlbC5wcm90b3R5cGVcbiAgICAmJiBtb2RlbC5wcm90b3R5cGUgaW5zdGFuY2VvZiBzZXF1ZWxpemUuU2VxdWVsaXplLk1vZGVsO1xufVxuXG5jb25zdCBNaXhpbiA9IHtcbiAgaGFzTWFueSh0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghaXNNb2RlbCh0YXJnZXQsIHRoaXMuc2VxdWVsaXplKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMubmFtZX0uaGFzTWFueSBjYWxsZWQgd2l0aCBzb21ldGhpbmcgdGhhdCdzIG5vdCBhIHN1YmNsYXNzIG9mIFNlcXVlbGl6ZS5Nb2RlbGApO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXM7XG5cbiAgICAvLyBTaW5jZSB0aGlzIGlzIGEgbWl4aW4sIHdlJ2xsIG5lZWQgYSB1bmlxdWUgbGV0aWFibGUgbmFtZSBmb3IgaG9va3MgKHNpbmNlIE1vZGVsIHdpbGwgb3ZlcnJpZGUgb3VyIGhvb2tzIG9wdGlvbilcbiAgICBvcHRpb25zLmhvb2tzID0gb3B0aW9ucy5ob29rcyA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBCb29sZWFuKG9wdGlvbnMuaG9va3MpO1xuICAgIG9wdGlvbnMudXNlSG9va3MgPSBvcHRpb25zLmhvb2tzO1xuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3B0aW9ucywgXy5vbWl0KHNvdXJjZS5vcHRpb25zLCBbJ2hvb2tzJ10pKTtcblxuICAgIGlmIChvcHRpb25zLnVzZUhvb2tzKSB7XG4gICAgICB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVBc3NvY2lhdGUnLCB7IHNvdXJjZSwgdGFyZ2V0LCB0eXBlOiBIYXNNYW55IH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIHRoZSBpZCBpcyBpbiB0aGUgZm9yZWlnbiB0YWJsZSBvciBpbiBhIGNvbm5lY3RpbmcgdGFibGVcbiAgICBjb25zdCBhc3NvY2lhdGlvbiA9IG5ldyBIYXNNYW55KHNvdXJjZSwgdGFyZ2V0LCBvcHRpb25zKTtcbiAgICBzb3VyY2UuYXNzb2NpYXRpb25zW2Fzc29jaWF0aW9uLmFzc29jaWF0aW9uQWNjZXNzb3JdID0gYXNzb2NpYXRpb247XG5cbiAgICBhc3NvY2lhdGlvbi5faW5qZWN0QXR0cmlidXRlcygpO1xuICAgIGFzc29jaWF0aW9uLm1peGluKHNvdXJjZS5wcm90b3R5cGUpO1xuXG4gICAgaWYgKG9wdGlvbnMudXNlSG9va3MpIHtcbiAgICAgIHRoaXMucnVuSG9va3MoJ2FmdGVyQXNzb2NpYXRlJywgeyBzb3VyY2UsIHRhcmdldCwgdHlwZTogSGFzTWFueSwgYXNzb2NpYXRpb24gfSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzc29jaWF0aW9uO1xuICB9LFxuXG4gIGJlbG9uZ3NUb01hbnkodGFyZ2V0LCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIWlzTW9kZWwodGFyZ2V0LCB0aGlzLnNlcXVlbGl6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm5hbWV9LmJlbG9uZ3NUb01hbnkgY2FsbGVkIHdpdGggc29tZXRoaW5nIHRoYXQncyBub3QgYSBzdWJjbGFzcyBvZiBTZXF1ZWxpemUuTW9kZWxgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzO1xuXG4gICAgLy8gU2luY2UgdGhpcyBpcyBhIG1peGluLCB3ZSdsbCBuZWVkIGEgdW5pcXVlIGxldGlhYmxlIG5hbWUgZm9yIGhvb2tzIChzaW5jZSBNb2RlbCB3aWxsIG92ZXJyaWRlIG91ciBob29rcyBvcHRpb24pXG4gICAgb3B0aW9ucy5ob29rcyA9IG9wdGlvbnMuaG9va3MgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogQm9vbGVhbihvcHRpb25zLmhvb2tzKTtcbiAgICBvcHRpb25zLnVzZUhvb2tzID0gb3B0aW9ucy5ob29rcztcbiAgICBvcHRpb25zLnRpbWVzdGFtcHMgPSBvcHRpb25zLnRpbWVzdGFtcHMgPT09IHVuZGVmaW5lZCA/IHRoaXMuc2VxdWVsaXplLm9wdGlvbnMudGltZXN0YW1wcyA6IG9wdGlvbnMudGltZXN0YW1wcztcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbihvcHRpb25zLCBfLm9taXQoc291cmNlLm9wdGlvbnMsIFsnaG9va3MnLCAndGltZXN0YW1wcycsICdzY29wZXMnLCAnZGVmYXVsdFNjb3BlJ10pKTtcblxuICAgIGlmIChvcHRpb25zLnVzZUhvb2tzKSB7XG4gICAgICB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVBc3NvY2lhdGUnLCB7IHNvdXJjZSwgdGFyZ2V0LCB0eXBlOiBCZWxvbmdzVG9NYW55IH0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvLyB0aGUgaWQgaXMgaW4gdGhlIGZvcmVpZ24gdGFibGUgb3IgaW4gYSBjb25uZWN0aW5nIHRhYmxlXG4gICAgY29uc3QgYXNzb2NpYXRpb24gPSBuZXcgQmVsb25nc1RvTWFueShzb3VyY2UsIHRhcmdldCwgb3B0aW9ucyk7XG4gICAgc291cmNlLmFzc29jaWF0aW9uc1thc3NvY2lhdGlvbi5hc3NvY2lhdGlvbkFjY2Vzc29yXSA9IGFzc29jaWF0aW9uO1xuXG4gICAgYXNzb2NpYXRpb24uX2luamVjdEF0dHJpYnV0ZXMoKTtcbiAgICBhc3NvY2lhdGlvbi5taXhpbihzb3VyY2UucHJvdG90eXBlKTtcblxuICAgIGlmIChvcHRpb25zLnVzZUhvb2tzKSB7XG4gICAgICB0aGlzLnJ1bkhvb2tzKCdhZnRlckFzc29jaWF0ZScsIHsgc291cmNlLCB0YXJnZXQsIHR5cGU6IEJlbG9uZ3NUb01hbnksIGFzc29jaWF0aW9uIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBhc3NvY2lhdGlvbjtcbiAgfSxcblxuICBnZXRBc3NvY2lhdGlvbnModGFyZ2V0KSB7XG4gICAgcmV0dXJuIF8udmFsdWVzKHRoaXMuYXNzb2NpYXRpb25zKS5maWx0ZXIoYXNzb2NpYXRpb24gPT4gYXNzb2NpYXRpb24udGFyZ2V0Lm5hbWUgPT09IHRhcmdldC5uYW1lKTtcbiAgfSxcblxuICBnZXRBc3NvY2lhdGlvbkZvckFsaWFzKHRhcmdldCwgYWxpYXMpIHtcbiAgICAvLyBUd28gYXNzb2NpYXRpb25zIGNhbm5vdCBoYXZlIHRoZSBzYW1lIGFsaWFzLCBzbyB3ZSBjYW4gdXNlIGZpbmQgaW5zdGVhZCBvZiBmaWx0ZXJcbiAgICByZXR1cm4gdGhpcy5nZXRBc3NvY2lhdGlvbnModGFyZ2V0KS5maW5kKGFzc29jaWF0aW9uID0+IGFzc29jaWF0aW9uLnZlcmlmeUFzc29jaWF0aW9uQWxpYXMoYWxpYXMpKSB8fCBudWxsO1xuICB9XG59O1xuXG4vLyBUaGUgbG9naWMgZm9yIGhhc09uZSBhbmQgYmVsb25nc1RvIGlzIGV4YWN0bHkgdGhlIHNhbWVcbmZ1bmN0aW9uIHNpbmdsZUxpbmtlZChUeXBlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzO1xuICAgIGlmICghaXNNb2RlbCh0YXJnZXQsIHNvdXJjZS5zZXF1ZWxpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c291cmNlLm5hbWV9LiR7Xy5sb3dlckZpcnN0KFR5cGUubmFtZSl9IGNhbGxlZCB3aXRoIHNvbWV0aGluZyB0aGF0J3Mgbm90IGEgc3ViY2xhc3Mgb2YgU2VxdWVsaXplLk1vZGVsYCk7XG4gICAgfVxuXG5cbiAgICAvLyBTaW5jZSB0aGlzIGlzIGEgbWl4aW4sIHdlJ2xsIG5lZWQgYSB1bmlxdWUgbGV0aWFibGUgbmFtZSBmb3IgaG9va3MgKHNpbmNlIE1vZGVsIHdpbGwgb3ZlcnJpZGUgb3VyIGhvb2tzIG9wdGlvbilcbiAgICBvcHRpb25zLmhvb2tzID0gb3B0aW9ucy5ob29rcyA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBCb29sZWFuKG9wdGlvbnMuaG9va3MpO1xuICAgIG9wdGlvbnMudXNlSG9va3MgPSBvcHRpb25zLmhvb2tzO1xuXG4gICAgaWYgKG9wdGlvbnMudXNlSG9va3MpIHtcbiAgICAgIHNvdXJjZS5ydW5Ib29rcygnYmVmb3JlQXNzb2NpYXRlJywgeyBzb3VyY2UsIHRhcmdldCwgdHlwZTogVHlwZSB9LCBvcHRpb25zKTtcbiAgICB9XG4gICAgLy8gdGhlIGlkIGlzIGluIHRoZSBmb3JlaWduIHRhYmxlXG4gICAgY29uc3QgYXNzb2NpYXRpb24gPSBuZXcgVHlwZShzb3VyY2UsIHRhcmdldCwgT2JqZWN0LmFzc2lnbihvcHRpb25zLCBzb3VyY2Uub3B0aW9ucykpO1xuICAgIHNvdXJjZS5hc3NvY2lhdGlvbnNbYXNzb2NpYXRpb24uYXNzb2NpYXRpb25BY2Nlc3Nvcl0gPSBhc3NvY2lhdGlvbjtcblxuICAgIGFzc29jaWF0aW9uLl9pbmplY3RBdHRyaWJ1dGVzKCk7XG4gICAgYXNzb2NpYXRpb24ubWl4aW4oc291cmNlLnByb3RvdHlwZSk7XG5cbiAgICBpZiAob3B0aW9ucy51c2VIb29rcykge1xuICAgICAgc291cmNlLnJ1bkhvb2tzKCdhZnRlckFzc29jaWF0ZScsIHsgc291cmNlLCB0YXJnZXQsIHR5cGU6IFR5cGUsIGFzc29jaWF0aW9uIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBhc3NvY2lhdGlvbjtcbiAgfTtcbn1cblxuTWl4aW4uaGFzT25lID0gc2luZ2xlTGlua2VkKEhhc09uZSk7XG5NaXhpbi5iZWxvbmdzVG8gPSBzaW5nbGVMaW5rZWQoQmVsb25nc1RvKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNaXhpbjtcbm1vZHVsZS5leHBvcnRzLk1peGluID0gTWl4aW47XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gTWl4aW47XG4iXX0= \ No newline at end of file diff --git a/dist/data-types.js b/dist/data-types.js index a5b6207..cb8ce17 100644 --- a/dist/data-types.js +++ b/dist/data-types.js @@ -1,14 +1,18 @@ 'use strict'; +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -20,8 +24,6 @@ const util = require('util'); const _ = require('lodash'); -const wkx = require('wkx'); - const sequelizeErrors = require('./errors'); const Validator = require('./utils/validator-extras').validator; @@ -40,9 +42,7 @@ const { classToInvokable } = require('./utils/classToInvokable'); -let ABSTRACT = -/*#__PURE__*/ -function () { +let ABSTRACT = /*#__PURE__*/function () { function ABSTRACT() { _classCallCheck(this, ABSTRACT); } @@ -103,11 +103,11 @@ ABSTRACT.prototype.dialectTypes = ''; * STRING A variable length string */ -let STRING = -/*#__PURE__*/ -function (_ABSTRACT) { +let STRING = /*#__PURE__*/function (_ABSTRACT) { _inherits(STRING, _ABSTRACT); + var _super = _createSuper(STRING); + /** * @param {number} [length=255] length of string * @param {boolean} [binary=false] Is this binary? @@ -117,7 +117,7 @@ function (_ABSTRACT) { _classCallCheck(this, STRING); - _this = _possibleConstructorReturn(this, _getPrototypeOf(STRING).call(this)); + _this = _super.call(this); const options = typeof length === 'object' && length || { length, binary @@ -167,11 +167,11 @@ function (_ABSTRACT) { */ -let CHAR = -/*#__PURE__*/ -function (_STRING) { +let CHAR = /*#__PURE__*/function (_STRING) { _inherits(CHAR, _STRING); + var _super2 = _createSuper(CHAR); + /** * @param {number} [length=255] length of string * @param {boolean} [binary=false] Is this binary? @@ -179,10 +179,10 @@ function (_STRING) { function CHAR(length, binary) { _classCallCheck(this, CHAR); - return _possibleConstructorReturn(this, _getPrototypeOf(CHAR).call(this, typeof length === 'object' && length || { + return _super2.call(this, typeof length === 'object' && length || { length, binary - })); + }); } _createClass(CHAR, [{ @@ -199,11 +199,11 @@ function (_STRING) { */ -let TEXT = -/*#__PURE__*/ -function (_ABSTRACT2) { +let TEXT = /*#__PURE__*/function (_ABSTRACT2) { _inherits(TEXT, _ABSTRACT2); + var _super3 = _createSuper(TEXT); + /** * @param {string} [length=''] could be tiny, medium, long. */ @@ -212,7 +212,7 @@ function (_ABSTRACT2) { _classCallCheck(this, TEXT); - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(TEXT).call(this)); + _this2 = _super3.call(this); const options = typeof length === 'object' && length || { length }; @@ -259,15 +259,15 @@ function (_ABSTRACT2) { */ -let CITEXT = -/*#__PURE__*/ -function (_ABSTRACT3) { +let CITEXT = /*#__PURE__*/function (_ABSTRACT3) { _inherits(CITEXT, _ABSTRACT3); + var _super4 = _createSuper(CITEXT); + function CITEXT() { _classCallCheck(this, CITEXT); - return _possibleConstructorReturn(this, _getPrototypeOf(CITEXT).apply(this, arguments)); + return _super4.apply(this, arguments); } _createClass(CITEXT, [{ @@ -293,11 +293,11 @@ function (_ABSTRACT3) { */ -let NUMBER = -/*#__PURE__*/ -function (_ABSTRACT4) { +let NUMBER = /*#__PURE__*/function (_ABSTRACT4) { _inherits(NUMBER, _ABSTRACT4); + var _super5 = _createSuper(NUMBER); + /** * @param {Object} options type options * @param {string|number} [options.length] length of type, like `INT(4)` @@ -312,7 +312,7 @@ function (_ABSTRACT4) { _classCallCheck(this, NUMBER); - _this3 = _possibleConstructorReturn(this, _getPrototypeOf(NUMBER).call(this)); + _this3 = _super5.call(this); if (typeof options === 'number') { options = { @@ -410,15 +410,15 @@ function (_ABSTRACT4) { */ -let INTEGER = -/*#__PURE__*/ -function (_NUMBER) { +let INTEGER = /*#__PURE__*/function (_NUMBER) { _inherits(INTEGER, _NUMBER); + var _super6 = _createSuper(INTEGER); + function INTEGER() { _classCallCheck(this, INTEGER); - return _possibleConstructorReturn(this, _getPrototypeOf(INTEGER).apply(this, arguments)); + return _super6.apply(this, arguments); } _createClass(INTEGER, [{ @@ -439,15 +439,15 @@ function (_NUMBER) { */ -let TINYINT = -/*#__PURE__*/ -function (_INTEGER) { +let TINYINT = /*#__PURE__*/function (_INTEGER) { _inherits(TINYINT, _INTEGER); + var _super7 = _createSuper(TINYINT); + function TINYINT() { _classCallCheck(this, TINYINT); - return _possibleConstructorReturn(this, _getPrototypeOf(TINYINT).apply(this, arguments)); + return _super7.apply(this, arguments); } return TINYINT; @@ -457,15 +457,15 @@ function (_INTEGER) { */ -let SMALLINT = -/*#__PURE__*/ -function (_INTEGER2) { +let SMALLINT = /*#__PURE__*/function (_INTEGER2) { _inherits(SMALLINT, _INTEGER2); + var _super8 = _createSuper(SMALLINT); + function SMALLINT() { _classCallCheck(this, SMALLINT); - return _possibleConstructorReturn(this, _getPrototypeOf(SMALLINT).apply(this, arguments)); + return _super8.apply(this, arguments); } return SMALLINT; @@ -475,15 +475,15 @@ function (_INTEGER2) { */ -let MEDIUMINT = -/*#__PURE__*/ -function (_INTEGER3) { +let MEDIUMINT = /*#__PURE__*/function (_INTEGER3) { _inherits(MEDIUMINT, _INTEGER3); + var _super9 = _createSuper(MEDIUMINT); + function MEDIUMINT() { _classCallCheck(this, MEDIUMINT); - return _possibleConstructorReturn(this, _getPrototypeOf(MEDIUMINT).apply(this, arguments)); + return _super9.apply(this, arguments); } return MEDIUMINT; @@ -493,15 +493,15 @@ function (_INTEGER3) { */ -let BIGINT = -/*#__PURE__*/ -function (_INTEGER4) { +let BIGINT = /*#__PURE__*/function (_INTEGER4) { _inherits(BIGINT, _INTEGER4); + var _super10 = _createSuper(BIGINT); + function BIGINT() { _classCallCheck(this, BIGINT); - return _possibleConstructorReturn(this, _getPrototypeOf(BIGINT).apply(this, arguments)); + return _super10.apply(this, arguments); } return BIGINT; @@ -511,11 +511,11 @@ function (_INTEGER4) { */ -let FLOAT = -/*#__PURE__*/ -function (_NUMBER2) { +let FLOAT = /*#__PURE__*/function (_NUMBER2) { _inherits(FLOAT, _NUMBER2); + var _super11 = _createSuper(FLOAT); + /** * @param {string|number} [length] length of type, like `FLOAT(4)` * @param {string|number} [decimals] number of decimal points, used with length `FLOAT(5, 4)` @@ -523,10 +523,10 @@ function (_NUMBER2) { function FLOAT(length, decimals) { _classCallCheck(this, FLOAT); - return _possibleConstructorReturn(this, _getPrototypeOf(FLOAT).call(this, typeof length === 'object' && length || { + return _super11.call(this, typeof length === 'object' && length || { length, decimals - })); + }); } _createClass(FLOAT, [{ @@ -547,11 +547,11 @@ function (_NUMBER2) { */ -let REAL = -/*#__PURE__*/ -function (_NUMBER3) { +let REAL = /*#__PURE__*/function (_NUMBER3) { _inherits(REAL, _NUMBER3); + var _super12 = _createSuper(REAL); + /** * @param {string|number} [length] length of type, like `REAL(4)` * @param {string|number} [decimals] number of decimal points, used with length `REAL(5, 4)` @@ -559,10 +559,10 @@ function (_NUMBER3) { function REAL(length, decimals) { _classCallCheck(this, REAL); - return _possibleConstructorReturn(this, _getPrototypeOf(REAL).call(this, typeof length === 'object' && length || { + return _super12.call(this, typeof length === 'object' && length || { length, decimals - })); + }); } return REAL; @@ -572,11 +572,11 @@ function (_NUMBER3) { */ -let DOUBLE = -/*#__PURE__*/ -function (_NUMBER4) { +let DOUBLE = /*#__PURE__*/function (_NUMBER4) { _inherits(DOUBLE, _NUMBER4); + var _super13 = _createSuper(DOUBLE); + /** * @param {string|number} [length] length of type, like `DOUBLE PRECISION(25)` * @param {string|number} [decimals] number of decimal points, used with length `DOUBLE PRECISION(25, 10)` @@ -584,10 +584,10 @@ function (_NUMBER4) { function DOUBLE(length, decimals) { _classCallCheck(this, DOUBLE); - return _possibleConstructorReturn(this, _getPrototypeOf(DOUBLE).call(this, typeof length === 'object' && length || { + return _super13.call(this, typeof length === 'object' && length || { length, decimals - })); + }); } return DOUBLE; @@ -597,11 +597,11 @@ function (_NUMBER4) { */ -let DECIMAL = -/*#__PURE__*/ -function (_NUMBER5) { +let DECIMAL = /*#__PURE__*/function (_NUMBER5) { _inherits(DECIMAL, _NUMBER5); + var _super14 = _createSuper(DECIMAL); + /** * @param {string|number} [precision] defines precision * @param {string|number} [scale] defines scale @@ -609,10 +609,10 @@ function (_NUMBER5) { function DECIMAL(precision, scale) { _classCallCheck(this, DECIMAL); - return _possibleConstructorReturn(this, _getPrototypeOf(DECIMAL).call(this, typeof precision === 'object' && precision || { + return _super14.call(this, typeof precision === 'object' && precision || { precision, scale - })); + }); } _createClass(DECIMAL, [{ @@ -673,15 +673,15 @@ for (const floating of [FLOAT, DOUBLE, REAL]) { */ -let BOOLEAN = -/*#__PURE__*/ -function (_ABSTRACT5) { +let BOOLEAN = /*#__PURE__*/function (_ABSTRACT5) { _inherits(BOOLEAN, _ABSTRACT5); + var _super15 = _createSuper(BOOLEAN); + function BOOLEAN() { _classCallCheck(this, BOOLEAN); - return _possibleConstructorReturn(this, _getPrototypeOf(BOOLEAN).apply(this, arguments)); + return _super15.apply(this, arguments); } _createClass(BOOLEAN, [{ @@ -733,15 +733,15 @@ BOOLEAN.parse = BOOLEAN.prototype._sanitize; * */ -let TIME = -/*#__PURE__*/ -function (_ABSTRACT6) { +let TIME = /*#__PURE__*/function (_ABSTRACT6) { _inherits(TIME, _ABSTRACT6); + var _super16 = _createSuper(TIME); + function TIME() { _classCallCheck(this, TIME); - return _possibleConstructorReturn(this, _getPrototypeOf(TIME).apply(this, arguments)); + return _super16.apply(this, arguments); } _createClass(TIME, [{ @@ -758,11 +758,11 @@ function (_ABSTRACT6) { */ -let DATE = -/*#__PURE__*/ -function (_ABSTRACT7) { +let DATE = /*#__PURE__*/function (_ABSTRACT7) { _inherits(DATE, _ABSTRACT7); + var _super17 = _createSuper(DATE); + /** * @param {string|number} [length] precision to allow storing milliseconds */ @@ -771,7 +771,7 @@ function (_ABSTRACT7) { _classCallCheck(this, DATE); - _this4 = _possibleConstructorReturn(this, _getPrototypeOf(DATE).call(this)); + _this4 = _super17.call(this); const options = typeof length === 'object' && length || { length }; @@ -846,15 +846,15 @@ function (_ABSTRACT7) { */ -let DATEONLY = -/*#__PURE__*/ -function (_ABSTRACT8) { +let DATEONLY = /*#__PURE__*/function (_ABSTRACT8) { _inherits(DATEONLY, _ABSTRACT8); + var _super18 = _createSuper(DATEONLY); + function DATEONLY() { _classCallCheck(this, DATEONLY); - return _possibleConstructorReturn(this, _getPrototypeOf(DATEONLY).apply(this, arguments)); + return _super18.apply(this, arguments); } _createClass(DATEONLY, [{ @@ -899,15 +899,15 @@ function (_ABSTRACT8) { */ -let HSTORE = -/*#__PURE__*/ -function (_ABSTRACT9) { +let HSTORE = /*#__PURE__*/function (_ABSTRACT9) { _inherits(HSTORE, _ABSTRACT9); + var _super19 = _createSuper(HSTORE); + function HSTORE() { _classCallCheck(this, HSTORE); - return _possibleConstructorReturn(this, _getPrototypeOf(HSTORE).apply(this, arguments)); + return _super19.apply(this, arguments); } _createClass(HSTORE, [{ @@ -928,15 +928,15 @@ function (_ABSTRACT9) { */ -let JSONTYPE = -/*#__PURE__*/ -function (_ABSTRACT10) { +let JSONTYPE = /*#__PURE__*/function (_ABSTRACT10) { _inherits(JSONTYPE, _ABSTRACT10); + var _super20 = _createSuper(JSONTYPE); + function JSONTYPE() { _classCallCheck(this, JSONTYPE); - return _possibleConstructorReturn(this, _getPrototypeOf(JSONTYPE).apply(this, arguments)); + return _super20.apply(this, arguments); } _createClass(JSONTYPE, [{ @@ -958,15 +958,15 @@ function (_ABSTRACT10) { */ -let JSONB = -/*#__PURE__*/ -function (_JSONTYPE) { +let JSONB = /*#__PURE__*/function (_JSONTYPE) { _inherits(JSONB, _JSONTYPE); + var _super21 = _createSuper(JSONB); + function JSONB() { _classCallCheck(this, JSONB); - return _possibleConstructorReturn(this, _getPrototypeOf(JSONB).apply(this, arguments)); + return _super21.apply(this, arguments); } return JSONB; @@ -976,15 +976,15 @@ function (_JSONTYPE) { */ -let NOW = -/*#__PURE__*/ -function (_ABSTRACT11) { +let NOW = /*#__PURE__*/function (_ABSTRACT11) { _inherits(NOW, _ABSTRACT11); + var _super22 = _createSuper(NOW); + function NOW() { _classCallCheck(this, NOW); - return _possibleConstructorReturn(this, _getPrototypeOf(NOW).apply(this, arguments)); + return _super22.apply(this, arguments); } return NOW; @@ -994,11 +994,11 @@ function (_ABSTRACT11) { */ -let BLOB = -/*#__PURE__*/ -function (_ABSTRACT12) { +let BLOB = /*#__PURE__*/function (_ABSTRACT12) { _inherits(BLOB, _ABSTRACT12); + var _super23 = _createSuper(BLOB); + /** * @param {string} [length=''] could be tiny, medium, long. */ @@ -1007,7 +1007,7 @@ function (_ABSTRACT12) { _classCallCheck(this, BLOB); - _this5 = _possibleConstructorReturn(this, _getPrototypeOf(BLOB).call(this)); + _this5 = _super23.call(this); const options = typeof length === 'object' && length || { length }; @@ -1085,11 +1085,11 @@ BLOB.prototype.escape = false; * Only available in Postgres. See [the Postgres documentation](http://www.postgresql.org/docs/9.4/static/rangetypes.html) for more details */ -let RANGE = -/*#__PURE__*/ -function (_ABSTRACT13) { +let RANGE = /*#__PURE__*/function (_ABSTRACT13) { _inherits(RANGE, _ABSTRACT13); + var _super24 = _createSuper(RANGE); + /** * @param {ABSTRACT} subtype A subtype for range, like RANGE(DATE) */ @@ -1098,7 +1098,7 @@ function (_ABSTRACT13) { _classCallCheck(this, RANGE); - _this6 = _possibleConstructorReturn(this, _getPrototypeOf(RANGE).call(this)); + _this6 = _super24.call(this); const options = _.isPlainObject(subtype) ? subtype : { subtype }; @@ -1136,15 +1136,15 @@ function (_ABSTRACT13) { */ -let UUID = -/*#__PURE__*/ -function (_ABSTRACT14) { +let UUID = /*#__PURE__*/function (_ABSTRACT14) { _inherits(UUID, _ABSTRACT14); + var _super25 = _createSuper(UUID); + function UUID() { _classCallCheck(this, UUID); - return _possibleConstructorReturn(this, _getPrototypeOf(UUID).apply(this, arguments)); + return _super25.apply(this, arguments); } _createClass(UUID, [{ @@ -1165,15 +1165,15 @@ function (_ABSTRACT14) { */ -let UUIDV1 = -/*#__PURE__*/ -function (_ABSTRACT15) { +let UUIDV1 = /*#__PURE__*/function (_ABSTRACT15) { _inherits(UUIDV1, _ABSTRACT15); + var _super26 = _createSuper(UUIDV1); + function UUIDV1() { _classCallCheck(this, UUIDV1); - return _possibleConstructorReturn(this, _getPrototypeOf(UUIDV1).apply(this, arguments)); + return _super26.apply(this, arguments); } _createClass(UUIDV1, [{ @@ -1194,15 +1194,15 @@ function (_ABSTRACT15) { */ -let UUIDV4 = -/*#__PURE__*/ -function (_ABSTRACT16) { +let UUIDV4 = /*#__PURE__*/function (_ABSTRACT16) { _inherits(UUIDV4, _ABSTRACT16); + var _super27 = _createSuper(UUIDV4); + function UUIDV4() { _classCallCheck(this, UUIDV4); - return _possibleConstructorReturn(this, _getPrototypeOf(UUIDV4).apply(this, arguments)); + return _super27.apply(this, arguments); } _createClass(UUIDV4, [{ @@ -1260,11 +1260,11 @@ function (_ABSTRACT16) { */ -let VIRTUAL = -/*#__PURE__*/ -function (_ABSTRACT17) { +let VIRTUAL = /*#__PURE__*/function (_ABSTRACT17) { _inherits(VIRTUAL, _ABSTRACT17); + var _super28 = _createSuper(VIRTUAL); + /** * @param {ABSTRACT} [ReturnType] return type for virtual type * @param {Array} [fields] array of fields this virtual type is dependent on @@ -1274,7 +1274,7 @@ function (_ABSTRACT17) { _classCallCheck(this, VIRTUAL); - _this7 = _possibleConstructorReturn(this, _getPrototypeOf(VIRTUAL).call(this)); + _this7 = _super28.call(this); if (typeof ReturnType === 'function') ReturnType = new ReturnType(); _this7.returnType = ReturnType; _this7.fields = fields; @@ -1295,11 +1295,11 @@ function (_ABSTRACT17) { */ -let ENUM = -/*#__PURE__*/ -function (_ABSTRACT18) { +let ENUM = /*#__PURE__*/function (_ABSTRACT18) { _inherits(ENUM, _ABSTRACT18); + var _super29 = _createSuper(ENUM); + /** * @param {...any|{ values: any[] }|any[]} args either array of values or options object with values array. It also supports variadic values */ @@ -1308,7 +1308,7 @@ function (_ABSTRACT18) { _classCallCheck(this, ENUM); - _this8 = _possibleConstructorReturn(this, _getPrototypeOf(ENUM).call(this)); + _this8 = _super29.call(this); const value = args[0]; const options = typeof value === 'object' && !Array.isArray(value) && value || { values: args.reduce((result, element) => { @@ -1341,11 +1341,11 @@ function (_ABSTRACT18) { */ -let ARRAY = -/*#__PURE__*/ -function (_ABSTRACT19) { +let ARRAY = /*#__PURE__*/function (_ABSTRACT19) { _inherits(ARRAY, _ABSTRACT19); + var _super30 = _createSuper(ARRAY); + /** * @param {ABSTRACT} type type of array values */ @@ -1354,7 +1354,7 @@ function (_ABSTRACT19) { _classCallCheck(this, ARRAY); - _this9 = _possibleConstructorReturn(this, _getPrototypeOf(ARRAY).call(this)); + _this9 = _super30.call(this); const options = _.isPlainObject(type) ? type : { type }; @@ -1386,173 +1386,22 @@ function (_ABSTRACT19) { return ARRAY; }(ABSTRACT); -/** - * A column storing Geometry information. - * It is only available in PostgreSQL (with PostGIS), MariaDB or MySQL. - * - * GeoJSON is accepted as input and returned as output. - * - * In PostGIS, the GeoJSON is parsed using the PostGIS function `ST_GeomFromGeoJSON`. - * In MySQL it is parsed using the function `GeomFromText`. - * - * Therefore, one can just follow the [GeoJSON spec](http://geojson.org/geojson-spec.html) for handling geometry objects. See the following examples: - * - * @example Defining a Geometry type attribute - * DataTypes.GEOMETRY - * DataTypes.GEOMETRY('POINT') - * DataTypes.GEOMETRY('POINT', 4326) - * - * @example Create a new point - * const point = { type: 'Point', coordinates: [39.807222,-76.984722]}; - * - * User.create({username: 'username', geometry: point }); - * - * @example Create a new linestring - * const line = { type: 'LineString', 'coordinates': [ [100.0, 0.0], [101.0, 1.0] ] }; - * - * User.create({username: 'username', geometry: line }); - * - * @example Create a new polygon - * const polygon = { type: 'Polygon', coordinates: [ - * [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], - * [100.0, 1.0], [100.0, 0.0] ] - * ]}; - * - * User.create({username: 'username', geometry: polygon }); - * - * @example Create a new point with a custom SRID - * const point = { - * type: 'Point', - * coordinates: [39.807222,-76.984722], - * crs: { type: 'name', properties: { name: 'EPSG:4326'} } - * }; - * - * User.create({username: 'username', geometry: point }) - * - * - * @see {@link DataTypes.GEOGRAPHY} - */ - - -let GEOMETRY = -/*#__PURE__*/ -function (_ABSTRACT20) { - _inherits(GEOMETRY, _ABSTRACT20); - - /** - * @param {string} [type] Type of geometry data - * @param {string} [srid] SRID of type - */ - function GEOMETRY(type, srid) { - var _this10; - - _classCallCheck(this, GEOMETRY); - - _this10 = _possibleConstructorReturn(this, _getPrototypeOf(GEOMETRY).call(this)); - const options = _.isPlainObject(type) ? type : { - type, - srid - }; - _this10.options = options; - _this10.type = options.type; - _this10.srid = options.srid; - return _this10; - } - - _createClass(GEOMETRY, [{ - key: "_stringify", - value: function _stringify(value, options) { - return `GeomFromText(${options.escape(wkx.Geometry.parseGeoJSON(value).toWkt())})`; - } - }, { - key: "_bindParam", - value: function _bindParam(value, options) { - return `GeomFromText(${options.bindParam(wkx.Geometry.parseGeoJSON(value).toWkt())})`; - } - }]); - - return GEOMETRY; -}(ABSTRACT); - -GEOMETRY.prototype.escape = false; -/** - * A geography datatype represents two dimensional spacial objects in an elliptic coord system. - * - * __The difference from geometry and geography type:__ - * - * PostGIS 1.5 introduced a new spatial type called geography, which uses geodetic measurement instead of Cartesian measurement. - * Coordinate points in the geography type are always represented in WGS 84 lon lat degrees (SRID 4326), - * but measurement functions and relationships ST_Distance, ST_DWithin, ST_Length, and ST_Area always return answers in meters or assume inputs in meters. - * - * __What is best to use? It depends:__ - * - * When choosing between the geometry and geography type for data storage, you should consider what you’ll be using it for. - * If all you do are simple measurements and relationship checks on your data, and your data covers a fairly large area, then most likely you’ll be better off storing your data using the new geography type. - * Although the new geography data type can cover the globe, the geometry type is far from obsolete. - * The geometry type has a much richer set of functions than geography, relationship checks are generally faster, and it has wider support currently across desktop and web-mapping tools - * - * @example Defining a Geography type attribute - * DataTypes.GEOGRAPHY - * DataTypes.GEOGRAPHY('POINT') - * DataTypes.GEOGRAPHY('POINT', 4326) - */ - -let GEOGRAPHY = -/*#__PURE__*/ -function (_ABSTRACT21) { - _inherits(GEOGRAPHY, _ABSTRACT21); - - /** - * @param {string} [type] Type of geography data - * @param {string} [srid] SRID of type - */ - function GEOGRAPHY(type, srid) { - var _this11; - - _classCallCheck(this, GEOGRAPHY); - - _this11 = _possibleConstructorReturn(this, _getPrototypeOf(GEOGRAPHY).call(this)); - const options = _.isPlainObject(type) ? type : { - type, - srid - }; - _this11.options = options; - _this11.type = options.type; - _this11.srid = options.srid; - return _this11; - } - - _createClass(GEOGRAPHY, [{ - key: "_stringify", - value: function _stringify(value, options) { - return `GeomFromText(${options.escape(wkx.Geometry.parseGeoJSON(value).toWkt())})`; - } - }, { - key: "_bindParam", - value: function _bindParam(value, options) { - return `GeomFromText(${options.bindParam(wkx.Geometry.parseGeoJSON(value).toWkt())})`; - } - }]); - - return GEOGRAPHY; -}(ABSTRACT); - -GEOGRAPHY.prototype.escape = false; /** * The cidr type holds an IPv4 or IPv6 network specification. Takes 7 or 19 bytes. * * Only available for Postgres */ -let CIDR = -/*#__PURE__*/ -function (_ABSTRACT22) { - _inherits(CIDR, _ABSTRACT22); + +let CIDR = /*#__PURE__*/function (_ABSTRACT20) { + _inherits(CIDR, _ABSTRACT20); + + var _super31 = _createSuper(CIDR); function CIDR() { _classCallCheck(this, CIDR); - return _possibleConstructorReturn(this, _getPrototypeOf(CIDR).apply(this, arguments)); + return _super31.apply(this, arguments); } _createClass(CIDR, [{ @@ -1575,15 +1424,15 @@ function (_ABSTRACT22) { */ -let INET = -/*#__PURE__*/ -function (_ABSTRACT23) { - _inherits(INET, _ABSTRACT23); +let INET = /*#__PURE__*/function (_ABSTRACT21) { + _inherits(INET, _ABSTRACT21); + + var _super32 = _createSuper(INET); function INET() { _classCallCheck(this, INET); - return _possibleConstructorReturn(this, _getPrototypeOf(INET).apply(this, arguments)); + return _super32.apply(this, arguments); } _createClass(INET, [{ @@ -1607,15 +1456,15 @@ function (_ABSTRACT23) { */ -let MACADDR = -/*#__PURE__*/ -function (_ABSTRACT24) { - _inherits(MACADDR, _ABSTRACT24); +let MACADDR = /*#__PURE__*/function (_ABSTRACT22) { + _inherits(MACADDR, _ABSTRACT22); + + var _super33 = _createSuper(MACADDR); function MACADDR() { _classCallCheck(this, MACADDR); - return _possibleConstructorReturn(this, _getPrototypeOf(MACADDR).apply(this, arguments)); + return _super33.apply(this, arguments); } _createClass(MACADDR, [{ @@ -1711,8 +1560,6 @@ const DataTypes = module.exports = { REAL, 'DOUBLE PRECISION': DOUBLE, DOUBLE, - GEOMETRY, - GEOGRAPHY, CIDR, INET, MACADDR, @@ -1753,4 +1600,4 @@ for (const dataTypes of [DataTypes, ...dialectList]) { } Object.assign(DataTypes, dialectMap); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLXR5cGVzLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiXyIsIndreCIsInNlcXVlbGl6ZUVycm9ycyIsIlZhbGlkYXRvciIsInZhbGlkYXRvciIsIm1vbWVudFR6IiwibW9tZW50IiwibG9nZ2VyIiwid2FybmluZ3MiLCJjbGFzc1RvSW52b2thYmxlIiwiQUJTVFJBQ1QiLCJvcHRpb25zIiwidG9TcWwiLCJrZXkiLCJ2YWx1ZSIsIl9zdHJpbmdpZnkiLCJfYmluZFBhcmFtIiwiYmluZFBhcmFtIiwic3RyaW5naWZ5IiwibmFtZSIsImxpbmsiLCJ0ZXh0Iiwid2FybiIsIm9sZFR5cGUiLCJwcm90b3R5cGUiLCJkaWFsZWN0VHlwZXMiLCJTVFJJTkciLCJsZW5ndGgiLCJiaW5hcnkiLCJfYmluYXJ5IiwiX2xlbmd0aCIsIk9iamVjdCIsInRvU3RyaW5nIiwiY2FsbCIsIkJ1ZmZlciIsImlzQnVmZmVyIiwiVmFsaWRhdGlvbkVycm9yIiwiZm9ybWF0IiwiQklOQVJZIiwiQ0hBUiIsIlRFWFQiLCJ0b0xvd2VyQ2FzZSIsIkNJVEVYVCIsIk5VTUJFUiIsIl96ZXJvZmlsbCIsInplcm9maWxsIiwiX2RlY2ltYWxzIiwiZGVjaW1hbHMiLCJfcHJlY2lzaW9uIiwicHJlY2lzaW9uIiwiX3NjYWxlIiwic2NhbGUiLCJfdW5zaWduZWQiLCJ1bnNpZ25lZCIsInJlc3VsdCIsImlzRmxvYXQiLCJTdHJpbmciLCJudW1iZXIiLCJ1bmRlZmluZWQiLCJVTlNJR05FRCIsIlpFUk9GSUxMIiwiSU5URUdFUiIsImlzSW50IiwiVElOWUlOVCIsIlNNQUxMSU5UIiwiTUVESVVNSU5UIiwiQklHSU5UIiwiRkxPQVQiLCJSRUFMIiwiRE9VQkxFIiwiREVDSU1BTCIsImZpbHRlciIsImlkZW50aXR5Iiwiam9pbiIsImlzRGVjaW1hbCIsInByb3RvRXh0ZW5zaW9ucyIsImVzY2FwZSIsIl92YWx1ZSIsImlzTmFOIiwiaXNGaW5pdGUiLCJzaWduIiwiZmxvYXRpbmciLCJhc3NpZ24iLCJCT09MRUFOIiwiaXNCb29sZWFuIiwidHlwZSIsInBhcnNlIiwiX3Nhbml0aXplIiwiVElNRSIsIkRBVEUiLCJpc0RhdGUiLCJyYXciLCJEYXRlIiwib3JpZ2luYWxWYWx1ZSIsImdldFRpbWUiLCJkYXRlIiwidGltZXpvbmUiLCJ0eiIsInpvbmUiLCJ1dGNPZmZzZXQiLCJfYXBwbHlUaW1lem9uZSIsIkRBVEVPTkxZIiwiSFNUT1JFIiwiaXNQbGFpbk9iamVjdCIsIkpTT05UWVBFIiwiSlNPTiIsIkpTT05CIiwiTk9XIiwiQkxPQiIsIkFycmF5IiwiaXNBcnJheSIsImZyb20iLCJoZXgiLCJfaGV4aWZ5IiwiUkFOR0UiLCJzdWJ0eXBlIiwiX3N1YnR5cGUiLCJVVUlEIiwiaXNVVUlEIiwiYWNjZXB0U3RyaW5ncyIsIlVVSURWMSIsIlVVSURWNCIsIlZJUlRVQUwiLCJSZXR1cm5UeXBlIiwiZmllbGRzIiwicmV0dXJuVHlwZSIsIkVOVU0iLCJhcmdzIiwidmFsdWVzIiwicmVkdWNlIiwiZWxlbWVudCIsImNvbmNhdCIsImluY2x1ZGVzIiwiQVJSQVkiLCJvYmoiLCJHRU9NRVRSWSIsInNyaWQiLCJHZW9tZXRyeSIsInBhcnNlR2VvSlNPTiIsInRvV2t0IiwiR0VPR1JBUEhZIiwiQ0lEUiIsImlzSVBSYW5nZSIsIklORVQiLCJpc0lQIiwiTUFDQUREUiIsImlzTUFDQWRkcmVzcyIsIkRhdGFUeXBlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJOVU1FUklDIiwiZWFjaCIsImRhdGFUeXBlIiwiaGFzT3duUHJvcGVydHkiLCJ0eXBlcyIsImRpYWxlY3RNYXAiLCJzcWxpdGUiLCJkaWFsZWN0TGlzdCIsImRhdGFUeXBlcyIsIkRhdGFUeXBlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsSUFBSSxHQUFHQyxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNQyxDQUFDLEdBQUdELE9BQU8sQ0FBQyxRQUFELENBQWpCOztBQUNBLE1BQU1F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LFFBQUQsRUFBV2xKLEdBQVgsS0FBbUI7QUFDbkMsUUFBSSxDQUFDa0osUUFBUSxDQUFDbEosR0FBZCxFQUFtQjtBQUNqQmtKLE1BQUFBLFFBQVEsQ0FBQ2xKLEdBQVQsR0FBZWtKLFFBQVEsQ0FBQ3ZJLFNBQVQsQ0FBbUJYLEdBQW5CLEdBQXlCQSxHQUF4QztBQUNEO0FBQ0YsR0FKRDtBQUtELEMsQ0FFRDs7O0FBQ0EsS0FBSyxNQUFNaUosU0FBWCxJQUF3QixDQUFDWCxTQUFELEVBQVksR0FBR1UsV0FBZixDQUF4QixFQUFxRDtBQUNuRDdKLEVBQUFBLENBQUMsQ0FBQ3VKLElBQUYsQ0FBT08sU0FBUCxFQUFrQixDQUFDQyxRQUFELEVBQVdsSixHQUFYLEtBQW1CO0FBQ25DaUosSUFBQUEsU0FBUyxDQUFDakosR0FBRCxDQUFULEdBQWlCSixnQkFBZ0IsQ0FBQ3NKLFFBQUQsQ0FBakM7QUFDRCxHQUZEO0FBR0Q7O0FBRURoSSxNQUFNLENBQUNtRCxNQUFQLENBQWNpRSxTQUFkLEVBQXlCUSxVQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3Qgd2t4ID0gcmVxdWlyZSgnd2t4Jyk7XHJcbmNvbnN0IHNlcXVlbGl6ZUVycm9ycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XHJcbmNvbnN0IFZhbGlkYXRvciA9IHJlcXVpcmUoJy4vdXRpbHMvdmFsaWRhdG9yLWV4dHJhcycpLnZhbGlkYXRvcjtcclxuY29uc3QgbW9tZW50VHogPSByZXF1aXJlKCdtb21lbnQtdGltZXpvbmUnKTtcclxuY29uc3QgbW9tZW50ID0gcmVxdWlyZSgnbW9tZW50Jyk7XHJcbmNvbnN0IHsgbG9nZ2VyIH0gPSByZXF1aXJlKCcuL3V0aWxzL2xvZ2dlcicpO1xyXG5jb25zdCB3YXJuaW5ncyA9IHt9O1xyXG5jb25zdCB7IGNsYXNzVG9JbnZva2FibGUgfSA9IHJlcXVpcmUoJy4vdXRpbHMvY2xhc3NUb0ludm9rYWJsZScpO1xyXG5cclxuY2xhc3MgQUJTVFJBQ1Qge1xyXG4gIHRvU3RyaW5nKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLnRvU3FsKG9wdGlvbnMpO1xyXG4gIH1cclxuICB0b1NxbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmtleTtcclxuICB9XHJcbiAgc3RyaW5naWZ5KHZhbHVlLCBvcHRpb25zKSB7XHJcbiAgICBpZiAodGhpcy5fc3RyaW5naWZ5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zdHJpbmdpZnkodmFsdWUsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuICBiaW5kUGFyYW0odmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIGlmICh0aGlzLl9iaW5kUGFyYW0pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JpbmRQYXJhbSh2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3B0aW9ucy5iaW5kUGFyYW0odGhpcy5zdHJpbmdpZnkodmFsdWUsIG9wdGlvbnMpKTtcclxuICB9XHJcbiAgc3RhdGljIHRvU3RyaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICB9XHJcbiAgc3RhdGljIHdhcm4obGluaywgdGV4dCkge1xyXG4gICAgaWYgKCF3YXJuaW5nc1t0ZXh0XSkge1xyXG4gICAgICB3YXJuaW5nc1t0ZXh0XSA9IHRydWU7XHJcbiAgICAgIGxvZ2dlci53YXJuKGAke3RleHR9IFxcbj4+IENoZWNrOiAke2xpbmt9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBleHRlbmQob2xkVHlwZSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKG9sZFR5cGUub3B0aW9ucyk7XHJcbiAgfVxyXG59XHJcblxyXG5BQlNUUkFDVC5wcm90b3R5cGUuZGlhbGVjdFR5cGVzID0gJyc7XHJcblxyXG4vKipcclxuICogU1RSSU5HIEEgdmFyaWFibGUgbGVuZ3RoIHN0cmluZ1xyXG4gKi9cclxuY2xhc3MgU1RSSU5HIGV4dGVuZHMgQUJTVFJBQ1Qge1xyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTI1NV0gbGVuZ3RoIG9mIHN0cmluZ1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JpbmFyeT1mYWxzZV0gSXMgdGhpcyBiaW5hcnk/XHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IobGVuZ3RoLCBiaW5hcnkpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIGxlbmd0aCA9PT0gJ29iamVjdCcgJiYgbGVuZ3RoIHx8IHsgbGVuZ3RoLCBiaW5hcnkgfTtcclxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICB0aGlzLl9iaW5hcnkgPSBvcHRpb25zLmJpbmFyeTtcclxuICAgIHRoaXMuX2xlbmd0aCA9IG9wdGlvbnMubGVuZ3RoIHx8IDI1NTtcclxuICB9XHJcbiAgdG9TcWwoKSB7XHJcbiAgICByZXR1cm4gYFZBUkNIQVIoJHt0aGlzLl9sZW5ndGh9KSR7dGhpcy5fYmluYXJ5ID8gJyBCSU5BUlknIDogJyd9YDtcclxuICB9XHJcbiAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSAnW29iamVjdCBTdHJpbmddJykge1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmJpbmFyeSAmJiBCdWZmZXIuaXNCdWZmZXIodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgc3RyaW5nJywgdmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IEJJTkFSWSgpIHtcclxuICAgIHRoaXMuX2JpbmFyeSA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnMuYmluYXJ5ID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldCBCSU5BUlkoKSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoKS5CSU5BUlk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ0hBUiBBIGZpeGVkIGxlbmd0aCBzdHJpbmdcclxuICovXHJcbmNsYXNzIENIQVIgZXh0ZW5kcyBTVFJJTkcge1xyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTI1NV0gbGVuZ3RoIG9mIHN0cmluZ1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JpbmFyeT1mYWxzZV0gSXMgdGhpcyBiaW5hcnk/XHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IobGVuZ3RoLCBiaW5hcnkpIHtcclxuICAgIHN1cGVyKHR5cGVvZiBsZW5ndGggPT09ICdvYmplY3QnICYmIGxlbmd0aCB8fCB7IGxlbmd0aCwgYmluYXJ5IH0pO1xyXG4gIH1cclxuICB0b1NxbCgpIHtcclxuICAgIHJldHVybiBgQ0hBUigke3RoaXMuX2xlbmd0aH0pJHt0aGlzLl9iaW5hcnkgPyAnIEJJTkFSWScgOiAnJ31gO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFVubGltaXRlZCBsZW5ndGggVEVYVCBjb2x1bW5cclxuICovXHJcbmNsYXNzIFRFWFQgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9JyddIGNvdWxkIGJlIHRpbnksIG1lZGl1bSwgbG9uZy5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihsZW5ndGgpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIGxlbmd0aCA9PT0gJ29iamVjdCcgJiYgbGVuZ3RoIHx8IHsgbGVuZ3RoIH07XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgdGhpcy5fbGVuZ3RoID0gb3B0aW9ucy5sZW5ndGggfHwgJyc7XHJcbiAgfVxyXG4gIHRvU3FsKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLl9sZW5ndGgudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICBjYXNlICd0aW55JzpcclxuICAgICAgICByZXR1cm4gJ1RJTllURVhUJztcclxuICAgICAgY2FzZSAnbWVkaXVtJzpcclxuICAgICAgICByZXR1cm4gJ01FRElVTVRFWFQnO1xyXG4gICAgICBjYXNlICdsb25nJzpcclxuICAgICAgICByZXR1cm4gJ0xPTkdURVhUJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdGhpcy5rZXk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgc3RyaW5nJywgdmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIHVubGltaXRlZCBsZW5ndGggY2FzZS1pbnNlbnNpdGl2ZSB0ZXh0IGNvbHVtbi5cclxuICogT3JpZ2luYWwgY2FzZSBpcyBwcmVzZXJ2ZWQgYnV0IGFjdHMgY2FzZS1pbnNlbnNpdGl2ZSB3aGVuIGNvbXBhcmluZyB2YWx1ZXMgKHN1Y2ggYXMgd2hlbiBmaW5kaW5nIG9yIHVuaXF1ZSBjb25zdHJhaW50cykuXHJcbiAqIE9ubHkgYXZhaWxhYmxlIGluIFBvc3RncmVzIGFuZCBTUUxpdGUuXHJcbiAqXHJcbiAqL1xyXG5jbGFzcyBDSVRFWFQgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgdG9TcWwoKSB7XHJcbiAgICByZXR1cm4gJ0NJVEVYVCc7XHJcbiAgfVxyXG4gIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgc3RyaW5nJywgdmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEJhc2UgbnVtYmVyIHR5cGUgd2hpY2ggaXMgdXNlZCB0byBidWlsZCBvdGhlciB0eXBlc1xyXG4gKi9cclxuY2xhc3MgTlVNQkVSIGV4dGVuZHMgQUJTVFJBQ1Qge1xyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIHR5cGUgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMubGVuZ3RoXSBsZW5ndGggb2YgdHlwZSwgbGlrZSBgSU5UKDQpYFxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuemVyb2ZpbGxdIElzIHplcm8gZmlsbGVkP1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudW5zaWduZWRdIElzIHVuc2lnbmVkP1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuZGVjaW1hbHNdIG51bWJlciBvZiBkZWNpbWFsIHBvaW50cywgdXNlZCB3aXRoIGxlbmd0aCBgRkxPQVQoNSwgNClgXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5wcmVjaXNpb25dIGRlZmluZXMgcHJlY2lzaW9uIGZvciBkZWNpbWFsIHR5cGVcclxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLnNjYWxlXSBkZWZpbmVzIHNjYWxlIGZvciBkZWNpbWFsIHR5cGVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgbGVuZ3RoOiBvcHRpb25zXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgdGhpcy5fbGVuZ3RoID0gb3B0aW9ucy5sZW5ndGg7XHJcbiAgICB0aGlzLl96ZXJvZmlsbCA9IG9wdGlvbnMuemVyb2ZpbGw7XHJcbiAgICB0aGlzLl9kZWNpbWFscyA9IG9wdGlvbnMuZGVjaW1hbHM7XHJcbiAgICB0aGlzLl9wcmVjaXNpb24gPSBvcHRpb25zLnByZWNpc2lvbjtcclxuICAgIHRoaXMuX3NjYWxlID0gb3B0aW9ucy5zY2FsZTtcclxuICAgIHRoaXMuX3Vuc2lnbmVkID0gb3B0aW9ucy51bnNpZ25lZDtcclxuICB9XHJcbiAgdG9TcWwoKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5rZXk7XHJcbiAgICBpZiAodGhpcy5fbGVuZ3RoKSB7XHJcbiAgICAgIHJlc3VsdCArPSBgKCR7dGhpcy5fbGVuZ3RofWA7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fZGVjaW1hbHMgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IGAsJHt0aGlzLl9kZWNpbWFsc31gO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCArPSAnKSc7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fdW5zaWduZWQpIHtcclxuICAgICAgcmVzdWx0ICs9ICcgVU5TSUdORUQnO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3plcm9maWxsKSB7XHJcbiAgICAgIHJlc3VsdCArPSAnIFpFUk9GSUxMJztcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG4gIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAoIVZhbGlkYXRvci5pc0Zsb2F0KFN0cmluZyh2YWx1ZSkpKSB7XHJcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKHV0aWwuZm9ybWF0KGAlaiBpcyBub3QgYSB2YWxpZCAke3RoaXMua2V5LnRvTG93ZXJDYXNlKCl9YCwgdmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBfc3RyaW5naWZ5KG51bWJlcikge1xyXG4gICAgaWYgKHR5cGVvZiBudW1iZXIgPT09ICdudW1iZXInIHx8IHR5cGVvZiBudW1iZXIgPT09ICdib29sZWFuJyB8fCBudW1iZXIgPT09IG51bGwgfHwgbnVtYmVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIG51bWJlcjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgbnVtYmVyLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHJldHVybiBudW1iZXIudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudW1iZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgVU5TSUdORUQoKSB7XHJcbiAgICB0aGlzLl91bnNpZ25lZCA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnMudW5zaWduZWQgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBnZXQgWkVST0ZJTEwoKSB7XHJcbiAgICB0aGlzLl96ZXJvZmlsbCA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnMuemVyb2ZpbGwgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0IFVOU0lHTkVEKCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKCkuVU5TSUdORUQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0IFpFUk9GSUxMKCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKCkuWkVST0ZJTEw7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSAzMiBiaXQgaW50ZWdlclxyXG4gKi9cclxuY2xhc3MgSU5URUdFUiBleHRlbmRzIE5VTUJFUiB7XHJcbiAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgIGlmICghVmFsaWRhdG9yLmlzSW50KFN0cmluZyh2YWx1ZSkpKSB7XHJcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKHV0aWwuZm9ybWF0KGAlaiBpcyBub3QgYSB2YWxpZCAke3RoaXMua2V5LnRvTG93ZXJDYXNlKCl9YCwgdmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgOCBiaXQgaW50ZWdlclxyXG4gKi9cclxuY2xhc3MgVElOWUlOVCBleHRlbmRzIElOVEVHRVIge1xyXG59XHJcblxyXG4vKipcclxuICogQSAxNiBiaXQgaW50ZWdlclxyXG4gKi9cclxuY2xhc3MgU01BTExJTlQgZXh0ZW5kcyBJTlRFR0VSIHtcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgMjQgYml0IGludGVnZXJcclxuICovXHJcbmNsYXNzIE1FRElVTUlOVCBleHRlbmRzIElOVEVHRVIge1xyXG59XHJcblxyXG4vKipcclxuICogQSA2NCBiaXQgaW50ZWdlclxyXG4gKi9cclxuY2xhc3MgQklHSU5UIGV4dGVuZHMgSU5URUdFUiB7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGbG9hdGluZyBwb2ludCBudW1iZXIgKDQtYnl0ZSBwcmVjaXNpb24pLlxyXG4gKi9cclxuY2xhc3MgRkxPQVQgZXh0ZW5kcyBOVU1CRVIge1xyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW2xlbmd0aF0gbGVuZ3RoIG9mIHR5cGUsIGxpa2UgYEZMT0FUKDQpYFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW2RlY2ltYWxzXSBudW1iZXIgb2YgZGVjaW1hbCBwb2ludHMsIHVzZWQgd2l0aCBsZW5ndGggYEZMT0FUKDUsIDQpYFxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGxlbmd0aCwgZGVjaW1hbHMpIHtcclxuICAgIHN1cGVyKHR5cGVvZiBsZW5ndGggPT09ICdvYmplY3QnICYmIGxlbmd0aCB8fCB7IGxlbmd0aCwgZGVjaW1hbHMgfSk7XHJcbiAgfVxyXG4gIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAoIVZhbGlkYXRvci5pc0Zsb2F0KFN0cmluZyh2YWx1ZSkpKSB7XHJcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKHV0aWwuZm9ybWF0KCclaiBpcyBub3QgYSB2YWxpZCBmbG9hdCcsIHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGbG9hdGluZyBwb2ludCBudW1iZXIgKDQtYnl0ZSBwcmVjaXNpb24pLlxyXG4gKi9cclxuY2xhc3MgUkVBTCBleHRlbmRzIE5VTUJFUiB7XHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbbGVuZ3RoXSBsZW5ndGggb2YgdHlwZSwgbGlrZSBgUkVBTCg0KWBcclxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtkZWNpbWFsc10gbnVtYmVyIG9mIGRlY2ltYWwgcG9pbnRzLCB1c2VkIHdpdGggbGVuZ3RoIGBSRUFMKDUsIDQpYFxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGxlbmd0aCwgZGVjaW1hbHMpIHtcclxuICAgIHN1cGVyKHR5cGVvZiBsZW5ndGggPT09ICdvYmplY3QnICYmIGxlbmd0aCB8fCB7IGxlbmd0aCwgZGVjaW1hbHMgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRmxvYXRpbmcgcG9pbnQgbnVtYmVyICg4LWJ5dGUgcHJlY2lzaW9uKS5cclxuICovXHJcbmNsYXNzIERPVUJMRSBleHRlbmRzIE5VTUJFUiB7XHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbbGVuZ3RoXSBsZW5ndGggb2YgdHlwZSwgbGlrZSBgRE9VQkxFIFBSRUNJU0lPTigyNSlgXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbZGVjaW1hbHNdIG51bWJlciBvZiBkZWNpbWFsIHBvaW50cywgdXNlZCB3aXRoIGxlbmd0aCBgRE9VQkxFIFBSRUNJU0lPTigyNSwgMTApYFxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGxlbmd0aCwgZGVjaW1hbHMpIHtcclxuICAgIHN1cGVyKHR5cGVvZiBsZW5ndGggPT09ICdvYmplY3QnICYmIGxlbmd0aCB8fCB7IGxlbmd0aCwgZGVjaW1hbHMgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRGVjaW1hbCB0eXBlLCB2YXJpYWJsZSBwcmVjaXNpb24sIHRha2UgbGVuZ3RoIGFzIHNwZWNpZmllZCBieSB1c2VyXHJcbiAqL1xyXG5jbGFzcyBERUNJTUFMIGV4dGVuZHMgTlVNQkVSIHtcclxuICAvKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtwcmVjaXNpb25dIGRlZmluZXMgcHJlY2lzaW9uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbc2NhbGVdIGRlZmluZXMgc2NhbGVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihwcmVjaXNpb24sIHNjYWxlKSB7XHJcbiAgICBzdXBlcih0eXBlb2YgcHJlY2lzaW9uID09PSAnb2JqZWN0JyAmJiBwcmVjaXNpb24gfHwgeyBwcmVjaXNpb24sIHNjYWxlIH0pO1xyXG4gIH1cclxuICB0b1NxbCgpIHtcclxuICAgIGlmICh0aGlzLl9wcmVjaXNpb24gfHwgdGhpcy5fc2NhbGUpIHtcclxuICAgICAgcmV0dXJuIGBERUNJTUFMKCR7W3RoaXMuX3ByZWNpc2lvbiwgdGhpcy5fc2NhbGVdLmZpbHRlcihfLmlkZW50aXR5KS5qb2luKCcsJyl9KWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ0RFQ0lNQUwnO1xyXG4gIH1cclxuICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgaWYgKCFWYWxpZGF0b3IuaXNEZWNpbWFsKFN0cmluZyh2YWx1ZSkpKSB7XHJcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKHV0aWwuZm9ybWF0KCclaiBpcyBub3QgYSB2YWxpZCBkZWNpbWFsJywgdmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG5cclxuLy8gVE9ETzogQ3JlYXRlIGludGVybWVkaWF0ZSBjbGFzc1xyXG5jb25zdCBwcm90b0V4dGVuc2lvbnMgPSB7XHJcbiAgZXNjYXBlOiBmYWxzZSxcclxuICBfdmFsdWUodmFsdWUpIHtcclxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuICdOYU4nO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcclxuICAgICAgY29uc3Qgc2lnbiA9IHZhbHVlIDwgMCA/ICctJyA6ICcnO1xyXG4gICAgICByZXR1cm4gYCR7c2lnbn1JbmZpbml0eWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH0sXHJcbiAgX3N0cmluZ2lmeSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGAnJHt0aGlzLl92YWx1ZSh2YWx1ZSl9J2A7XHJcbiAgfSxcclxuICBfYmluZFBhcmFtKHZhbHVlLCBvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gb3B0aW9ucy5iaW5kUGFyYW0odGhpcy5fdmFsdWUodmFsdWUpKTtcclxuICB9XHJcbn07XHJcblxyXG5mb3IgKGNvbnN0IGZsb2F0aW5nIG9mIFtGTE9BVCwgRE9VQkxFLCBSRUFMXSkge1xyXG4gIE9iamVjdC5hc3NpZ24oZmxvYXRpbmcucHJvdG90eXBlLCBwcm90b0V4dGVuc2lvbnMpO1xyXG59XHJcblxyXG4vKipcclxuICogQSBib29sZWFuIC8gdGlueWludCBjb2x1bW4sIGRlcGVuZGluZyBvbiBkaWFsZWN0XHJcbiAqL1xyXG5jbGFzcyBCT09MRUFOIGV4dGVuZHMgQUJTVFJBQ1Qge1xyXG4gIHRvU3FsKCkge1xyXG4gICAgcmV0dXJuICdUSU5ZSU5UKDEpJztcclxuICB9XHJcbiAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgIGlmICghVmFsaWRhdG9yLmlzQm9vbGVhbihTdHJpbmcodmFsdWUpKSkge1xyXG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgYm9vbGVhbicsIHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgX3Nhbml0aXplKHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAvLyBCaXQgZmllbGRzIGFyZSByZXR1cm5lZCBhcyBidWZmZXJzXHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVswXTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvLyBPbmx5IHRha2UgYWN0aW9uIG9uIHZhbGlkIGJvb2xlYW4gc3RyaW5ncy5cclxuICAgICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJyA/IHRydWUgOiB2YWx1ZSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogdmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgLy8gT25seSB0YWtlIGFjdGlvbiBvbiB2YWxpZCBib29sZWFuIGludGVnZXJzLlxyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gMSA/IHRydWUgOiB2YWx1ZSA9PT0gMCA/IGZhbHNlIDogdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5CT09MRUFOLnBhcnNlID0gQk9PTEVBTi5wcm90b3R5cGUuX3Nhbml0aXplO1xyXG5cclxuLyoqXHJcbiAqIEEgdGltZSBjb2x1bW5cclxuICpcclxuICovXHJcbmNsYXNzIFRJTUUgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgdG9TcWwoKSB7XHJcbiAgICByZXR1cm4gJ1RJTUUnO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERhdGUgY29sdW1uIHdpdGggdGltZXpvbmUsIGRlZmF1bHQgaXMgVVRDXHJcbiAqL1xyXG5jbGFzcyBEQVRFIGV4dGVuZHMgQUJTVFJBQ1Qge1xyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW2xlbmd0aF0gcHJlY2lzaW9uIHRvIGFsbG93IHN0b3JpbmcgbWlsbGlzZWNvbmRzXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IobGVuZ3RoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiBsZW5ndGggPT09ICdvYmplY3QnICYmIGxlbmd0aCB8fCB7IGxlbmd0aCB9O1xyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgIHRoaXMuX2xlbmd0aCA9IG9wdGlvbnMubGVuZ3RoIHx8ICcnO1xyXG4gIH1cclxuICB0b1NxbCgpIHtcclxuICAgIHJldHVybiAnREFURVRJTUUnO1xyXG4gIH1cclxuICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgaWYgKCFWYWxpZGF0b3IuaXNEYXRlKFN0cmluZyh2YWx1ZSkpKSB7XHJcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKHV0aWwuZm9ybWF0KCclaiBpcyBub3QgYSB2YWxpZCBkYXRlJywgdmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBfc2FuaXRpemUodmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIGlmICgoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5yYXcpICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSAmJiAhIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG4gIF9pc0NoYW5nZWQodmFsdWUsIG9yaWdpbmFsVmFsdWUpIHtcclxuICAgIGlmIChvcmlnaW5hbFZhbHVlICYmICEhdmFsdWUgJiZcclxuICAgICAgKHZhbHVlID09PSBvcmlnaW5hbFZhbHVlIHx8XHJcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIG9yaWdpbmFsVmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIHZhbHVlLmdldFRpbWUoKSA9PT0gb3JpZ2luYWxWYWx1ZS5nZXRUaW1lKCkpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIG5vdCBjaGFuZ2VkIHdoZW4gc2V0IHRvIHNhbWUgZW1wdHkgdmFsdWVcclxuICAgIGlmICghb3JpZ2luYWxWYWx1ZSAmJiAhdmFsdWUgJiYgb3JpZ2luYWxWYWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIF9hcHBseVRpbWV6b25lKGRhdGUsIG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zLnRpbWV6b25lKSB7XHJcbiAgICAgIGlmIChtb21lbnRUei50ei56b25lKG9wdGlvbnMudGltZXpvbmUpKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudFR6KGRhdGUpLnR6KG9wdGlvbnMudGltZXpvbmUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkYXRlID0gbW9tZW50KGRhdGUpLnV0Y09mZnNldChvcHRpb25zLnRpbWV6b25lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb21lbnRUeihkYXRlKTtcclxuICB9XHJcbiAgX3N0cmluZ2lmeShkYXRlLCBvcHRpb25zKSB7XHJcbiAgICBkYXRlID0gdGhpcy5fYXBwbHlUaW1lem9uZShkYXRlLCBvcHRpb25zKTtcclxuICAgIC8vIFogaGVyZSBtZWFucyBjdXJyZW50IHRpbWV6b25lLCBfbm90XyBVVENcclxuICAgIHJldHVybiBkYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcy5TU1MgWicpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgZGF0ZSBvbmx5IGNvbHVtbiAobm8gdGltZXN0YW1wKVxyXG4gKi9cclxuY2xhc3MgREFURU9OTFkgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgdG9TcWwoKSB7XHJcbiAgICByZXR1cm4gJ0RBVEUnO1xyXG4gIH1cclxuICBfc3RyaW5naWZ5KGRhdGUpIHtcclxuICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgfVxyXG4gIF9zYW5pdGl6ZSh2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgaWYgKCghb3B0aW9ucyB8fCBvcHRpb25zICYmICFvcHRpb25zLnJhdykgJiYgISF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbiAgX2lzQ2hhbmdlZCh2YWx1ZSwgb3JpZ2luYWxWYWx1ZSkge1xyXG4gICAgaWYgKG9yaWdpbmFsVmFsdWUgJiYgISF2YWx1ZSAmJiBvcmlnaW5hbFZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBub3QgY2hhbmdlZCB3aGVuIHNldCB0byBzYW1lIGVtcHR5IHZhbHVlXHJcbiAgICBpZiAoIW9yaWdpbmFsVmFsdWUgJiYgIXZhbHVlICYmIG9yaWdpbmFsVmFsdWUgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEEga2V5IC8gdmFsdWUgc3RvcmUgY29sdW1uLiBPbmx5IGF2YWlsYWJsZSBpbiBQb3N0Z3Jlcy5cclxuICovXHJcbmNsYXNzIEhTVE9SRSBleHRlbmRzIEFCU1RSQUNUIHtcclxuICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QodmFsdWUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKHV0aWwuZm9ybWF0KCclaiBpcyBub3QgYSB2YWxpZCBoc3RvcmUnLCB2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBKU09OIHN0cmluZyBjb2x1bW4uIEF2YWlsYWJsZSBpbiBNeVNRTCwgUG9zdGdyZXMgYW5kIFNRTGl0ZVxyXG4gKi9cclxuY2xhc3MgSlNPTlRZUEUgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgdmFsaWRhdGUoKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgX3N0cmluZ2lmeSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGJpbmFyeSBzdG9yYWdlIEpTT04gY29sdW1uLiBPbmx5IGF2YWlsYWJsZSBpbiBQb3N0Z3Jlcy5cclxuICovXHJcbmNsYXNzIEpTT05CIGV4dGVuZHMgSlNPTlRZUEUge1xyXG59XHJcblxyXG4vKipcclxuICogQSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbWVzdGFtcFxyXG4gKi9cclxuY2xhc3MgTk9XIGV4dGVuZHMgQUJTVFJBQ1Qge1xyXG59XHJcblxyXG4vKipcclxuICogQmluYXJ5IHN0b3JhZ2VcclxuICovXHJcbmNsYXNzIEJMT0IgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9JyddIGNvdWxkIGJlIHRpbnksIG1lZGl1bSwgbG9uZy5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihsZW5ndGgpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIGxlbmd0aCA9PT0gJ29iamVjdCcgJiYgbGVuZ3RoIHx8IHsgbGVuZ3RoIH07XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgdGhpcy5fbGVuZ3RoID0gb3B0aW9ucy5sZW5ndGggfHwgJyc7XHJcbiAgfVxyXG4gIHRvU3FsKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLl9sZW5ndGgudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICBjYXNlICd0aW55JzpcclxuICAgICAgICByZXR1cm4gJ1RJTllCTE9CJztcclxuICAgICAgY2FzZSAnbWVkaXVtJzpcclxuICAgICAgICByZXR1cm4gJ01FRElVTUJMT0InO1xyXG4gICAgICBjYXNlICdsb25nJzpcclxuICAgICAgICByZXR1cm4gJ0xPTkdCTE9CJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdGhpcy5rZXk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xyXG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgYmxvYicsIHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgX3N0cmluZ2lmeSh2YWx1ZSkge1xyXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGhleCA9IHZhbHVlLnRvU3RyaW5nKCdoZXgnKTtcclxuICAgIHJldHVybiB0aGlzLl9oZXhpZnkoaGV4KTtcclxuICB9XHJcbiAgX2hleGlmeShoZXgpIHtcclxuICAgIHJldHVybiBgWCcke2hleH0nYDtcclxuICB9XHJcbiAgX2JpbmRQYXJhbSh2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvcHRpb25zLmJpbmRQYXJhbSh2YWx1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuQkxPQi5wcm90b3R5cGUuZXNjYXBlID0gZmFsc2U7XHJcblxyXG4vKipcclxuICogUmFuZ2UgdHlwZXMgYXJlIGRhdGEgdHlwZXMgcmVwcmVzZW50aW5nIGEgcmFuZ2Ugb2YgdmFsdWVzIG9mIHNvbWUgZWxlbWVudCB0eXBlIChjYWxsZWQgdGhlIHJhbmdlJ3Mgc3VidHlwZSkuXHJcbiAqIE9ubHkgYXZhaWxhYmxlIGluIFBvc3RncmVzLiBTZWUgW3RoZSBQb3N0Z3JlcyBkb2N1bWVudGF0aW9uXShodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvOS40L3N0YXRpYy9yYW5nZXR5cGVzLmh0bWwpIGZvciBtb3JlIGRldGFpbHNcclxuICovXHJcbmNsYXNzIFJBTkdFIGV4dGVuZHMgQUJTVFJBQ1Qge1xyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7QUJTVFJBQ1R9IHN1YnR5cGUgQSBzdWJ0eXBlIGZvciByYW5nZSwgbGlrZSBSQU5HRShEQVRFKVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHN1YnR5cGUpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBjb25zdCBvcHRpb25zID0gXy5pc1BsYWluT2JqZWN0KHN1YnR5cGUpID8gc3VidHlwZSA6IHsgc3VidHlwZSB9O1xyXG4gICAgaWYgKCFvcHRpb25zLnN1YnR5cGUpXHJcbiAgICAgIG9wdGlvbnMuc3VidHlwZSA9IG5ldyBJTlRFR0VSKCk7XHJcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuc3VidHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBvcHRpb25zLnN1YnR5cGUgPSBuZXcgb3B0aW9ucy5zdWJ0eXBlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zdWJ0eXBlID0gb3B0aW9ucy5zdWJ0eXBlLmtleTtcclxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgfVxyXG4gIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKHV0aWwuZm9ybWF0KCclaiBpcyBub3QgYSB2YWxpZCByYW5nZScsIHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUubGVuZ3RoICE9PSAyKSB7XHJcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKCdBIHJhbmdlIG11c3QgYmUgYW4gYXJyYXkgd2l0aCB0d28gZWxlbWVudHMnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgY29sdW1uIHN0b3JpbmcgYSB1bmlxdWUgdW5pdmVyc2FsIGlkZW50aWZpZXIuXHJcbiAqIFVzZSB3aXRoIGBVVUlEVjFgIG9yIGBVVUlEVjRgIGZvciBkZWZhdWx0IHZhbHVlcy5cclxuICovXHJcbmNsYXNzIFVVSUQgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgdmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8ICFWYWxpZGF0b3IuaXNVVUlEKHZhbHVlKSAmJiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuYWNjZXB0U3RyaW5ncykpIHtcclxuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIHV1aWQnLCB2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBkZWZhdWx0IHVuaXF1ZSB1bml2ZXJzYWwgaWRlbnRpZmllciBnZW5lcmF0ZWQgZm9sbG93aW5nIHRoZSBVVUlEIHYxIHN0YW5kYXJkXHJcbiAqL1xyXG5jbGFzcyBVVUlEVjEgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgdmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8ICFWYWxpZGF0b3IuaXNVVUlEKHZhbHVlKSAmJiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuYWNjZXB0U3RyaW5ncykpIHtcclxuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIHV1aWQnLCB2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBkZWZhdWx0IHVuaXF1ZSB1bml2ZXJzYWwgaWRlbnRpZmllciBnZW5lcmF0ZWQgZm9sbG93aW5nIHRoZSBVVUlEIHY0IHN0YW5kYXJkXHJcbiAqL1xyXG5jbGFzcyBVVUlEVjQgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgdmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8ICFWYWxpZGF0b3IuaXNVVUlEKHZhbHVlLCA0KSAmJiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuYWNjZXB0U3RyaW5ncykpIHtcclxuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIHV1aWR2NCcsIHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIHZpcnR1YWwgdmFsdWUgdGhhdCBpcyBub3Qgc3RvcmVkIGluIHRoZSBEQi4gVGhpcyBjb3VsZCBmb3IgZXhhbXBsZSBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUgaW4geW91ciBtb2RlbCB0aGF0IGlzIHJldHVybmVkIHRvIHRoZSB1c2VyIGJ1dCBub3Qgc3RvcmVkIGluIHRoZSBEQi5cclxuICpcclxuICogWW91IGNvdWxkIGFsc28gdXNlIGl0IHRvIHZhbGlkYXRlIGEgdmFsdWUgYmVmb3JlIHBlcm11dGluZyBhbmQgc3RvcmluZyBpdC4gVklSVFVBTCBhbHNvIHRha2VzIGEgcmV0dXJuIHR5cGUgYW5kIGRlcGVuZGVuY3kgZmllbGRzIGFzIGFyZ3VtZW50c1xyXG4gKiBJZiBhIHZpcnR1YWwgYXR0cmlidXRlIGlzIHByZXNlbnQgaW4gYGF0dHJpYnV0ZXNgIGl0IHdpbGwgYXV0b21hdGljYWxseSBwdWxsIGluIHRoZSBleHRyYSBmaWVsZHMgYXMgd2VsbC5cclxuICogUmV0dXJuIHR5cGUgaXMgbW9zdGx5IHVzZWZ1bCBmb3Igc2V0dXBzIHRoYXQgcmVseSBvbiB0eXBlcyBsaWtlIEdyYXBoUUwuXHJcbiAqXHJcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNoZWNraW5nIHBhc3N3b3JkIGxlbmd0aCBiZWZvcmUgaGFzaGluZyBpdDwvY2FwdGlvbj5cclxuICogc2VxdWVsaXplLmRlZmluZSgndXNlcicsIHtcclxuICogICBwYXNzd29yZF9oYXNoOiBEYXRhVHlwZXMuU1RSSU5HLFxyXG4gKiAgIHBhc3N3b3JkOiB7XHJcbiAqICAgICB0eXBlOiBEYXRhVHlwZXMuVklSVFVBTCxcclxuICogICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xyXG4gKiAgICAgICAgLy8gUmVtZW1iZXIgdG8gc2V0IHRoZSBkYXRhIHZhbHVlLCBvdGhlcndpc2UgaXQgd29uJ3QgYmUgdmFsaWRhdGVkXHJcbiAqICAgICAgICB0aGlzLnNldERhdGFWYWx1ZSgncGFzc3dvcmQnLCB2YWwpO1xyXG4gKiAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoJ3Bhc3N3b3JkX2hhc2gnLCB0aGlzLnNhbHQgKyB2YWwpO1xyXG4gKiAgICAgIH0sXHJcbiAqICAgICAgdmFsaWRhdGU6IHtcclxuICogICAgICAgICBpc0xvbmdFbm91Z2g6IGZ1bmN0aW9uICh2YWwpIHtcclxuICogICAgICAgICAgIGlmICh2YWwubGVuZ3RoIDwgNykge1xyXG4gKiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2UgY2hvb3NlIGEgbG9uZ2VyIHBhc3N3b3JkXCIpXHJcbiAqICAgICAgICAgIH1cclxuICogICAgICAgfVxyXG4gKiAgICAgfVxyXG4gKiAgIH1cclxuICogfSlcclxuICpcclxuICogIyBJbiB0aGUgYWJvdmUgY29kZSB0aGUgcGFzc3dvcmQgaXMgc3RvcmVkIHBsYWlubHkgaW4gdGhlIHBhc3N3b3JkIGZpZWxkIHNvIGl0IGNhbiBiZSB2YWxpZGF0ZWQsIGJ1dCBpcyBuZXZlciBzdG9yZWQgaW4gdGhlIERCLlxyXG4gKlxyXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5WaXJ0dWFsIHdpdGggZGVwZW5kZW5jeSBmaWVsZHM8L2NhcHRpb24+XHJcbiAqIHtcclxuICogICBhY3RpdmU6IHtcclxuICogICAgIHR5cGU6IG5ldyBEYXRhVHlwZXMuVklSVFVBTChEYXRhVHlwZXMuQk9PTEVBTiwgWydjcmVhdGVkQXQnXSksXHJcbiAqICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gKiAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2NyZWF0ZWRBdCcpID4gRGF0ZS5ub3coKSAtICg3ICogMjQgKiA2MCAqIDYwICogMTAwMClcclxuICogICAgIH1cclxuICogICB9XHJcbiAqIH1cclxuICpcclxuICovXHJcbmNsYXNzIFZJUlRVQUwgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtBQlNUUkFDVH0gW1JldHVyblR5cGVdIHJldHVybiB0eXBlIGZvciB2aXJ0dWFsIHR5cGVcclxuICAgKiBAcGFyYW0ge0FycmF5fSBbZmllbGRzXSBhcnJheSBvZiBmaWVsZHMgdGhpcyB2aXJ0dWFsIHR5cGUgaXMgZGVwZW5kZW50IG9uXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoUmV0dXJuVHlwZSwgZmllbGRzKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgaWYgKHR5cGVvZiBSZXR1cm5UeXBlID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICBSZXR1cm5UeXBlID0gbmV3IFJldHVyblR5cGUoKTtcclxuICAgIHRoaXMucmV0dXJuVHlwZSA9IFJldHVyblR5cGU7XHJcbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBlbnVtZXJhdGlvbiwgUG9zdGdyZXMgT25seVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBEYXRhVHlwZXMuRU5VTSgndmFsdWUnLCAnYW5vdGhlciB2YWx1ZScpXHJcbiAqIERhdGFUeXBlcy5FTlVNKFsndmFsdWUnLCAnYW5vdGhlciB2YWx1ZSddKVxyXG4gKiBEYXRhVHlwZXMuRU5VTSh7XHJcbiAqICAgdmFsdWVzOiBbJ3ZhbHVlJywgJ2Fub3RoZXIgdmFsdWUnXVxyXG4gKiB9KVxyXG4gKi9cclxuY2xhc3MgRU5VTSBleHRlbmRzIEFCU1RSQUNUIHtcclxuICAvKipcclxuICAgKiBAcGFyYW0gey4uLmFueXx7IHZhbHVlczogYW55W10gfXxhbnlbXX0gYXJncyBlaXRoZXIgYXJyYXkgb2YgdmFsdWVzIG9yIG9wdGlvbnMgb2JqZWN0IHdpdGggdmFsdWVzIGFycmF5LiBJdCBhbHNvIHN1cHBvcnRzIHZhcmlhZGljIHZhbHVlc1xyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGFyZ3NbMF07XHJcbiAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUgfHwge1xyXG4gICAgICB2YWx1ZXM6IGFyZ3MucmVkdWNlKChyZXN1bHQsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0LmNvbmNhdChBcnJheS5pc0FycmF5KGVsZW1lbnQpID8gZWxlbWVudCA6IFtlbGVtZW50XSk7XHJcbiAgICAgIH0sIFtdKVxyXG4gICAgfTtcclxuICAgIHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXM7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gIH1cclxuICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgaWYgKCF0aGlzLnZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIGNob2ljZSBpbiAlaicsIHZhbHVlLCB0aGlzLnZhbHVlcykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQW4gYXJyYXkgb2YgYHR5cGVgLiBPbmx5IGF2YWlsYWJsZSBpbiBQb3N0Z3Jlcy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogRGF0YVR5cGVzLkFSUkFZKERhdGFUeXBlcy5ERUNJTUFMKVxyXG4gKi9cclxuY2xhc3MgQVJSQVkgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtBQlNUUkFDVH0gdHlwZSB0eXBlIG9mIGFycmF5IHZhbHVlc1xyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHR5cGUpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBjb25zdCBvcHRpb25zID0gXy5pc1BsYWluT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgdHlwZSB9O1xyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgIHRoaXMudHlwZSA9IHR5cGVvZiBvcHRpb25zLnR5cGUgPT09ICdmdW5jdGlvbicgPyBuZXcgb3B0aW9ucy50eXBlKCkgOiBvcHRpb25zLnR5cGU7XHJcbiAgfVxyXG4gIHRvU3FsKCkge1xyXG4gICAgcmV0dXJuIGAke3RoaXMudHlwZS50b1NxbCgpfVtdYDtcclxuICB9XHJcbiAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIGFycmF5JywgdmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBzdGF0aWMgaXMob2JqLCB0eXBlKSB7XHJcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgQVJSQVkgJiYgb2JqLnR5cGUgaW5zdGFuY2VvZiB0eXBlO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgY29sdW1uIHN0b3JpbmcgR2VvbWV0cnkgaW5mb3JtYXRpb24uXHJcbiAqIEl0IGlzIG9ubHkgYXZhaWxhYmxlIGluIFBvc3RncmVTUUwgKHdpdGggUG9zdEdJUyksIE1hcmlhREIgb3IgTXlTUUwuXHJcbiAqXHJcbiAqIEdlb0pTT04gaXMgYWNjZXB0ZWQgYXMgaW5wdXQgYW5kIHJldHVybmVkIGFzIG91dHB1dC5cclxuICpcclxuICogSW4gUG9zdEdJUywgdGhlIEdlb0pTT04gaXMgcGFyc2VkIHVzaW5nIHRoZSBQb3N0R0lTIGZ1bmN0aW9uIGBTVF9HZW9tRnJvbUdlb0pTT05gLlxyXG4gKiBJbiBNeVNRTCBpdCBpcyBwYXJzZWQgdXNpbmcgdGhlIGZ1bmN0aW9uIGBHZW9tRnJvbVRleHRgLlxyXG4gKlxyXG4gKiBUaGVyZWZvcmUsIG9uZSBjYW4ganVzdCBmb2xsb3cgdGhlIFtHZW9KU09OIHNwZWNdKGh0dHA6Ly9nZW9qc29uLm9yZy9nZW9qc29uLXNwZWMuaHRtbCkgZm9yIGhhbmRsaW5nIGdlb21ldHJ5IG9iamVjdHMuICBTZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlczpcclxuICpcclxuICogQGV4YW1wbGUgPGNhcHRpb24+RGVmaW5pbmcgYSBHZW9tZXRyeSB0eXBlIGF0dHJpYnV0ZTwvY2FwdGlvbj5cclxuICogRGF0YVR5cGVzLkdFT01FVFJZXHJcbiAqIERhdGFUeXBlcy5HRU9NRVRSWSgnUE9JTlQnKVxyXG4gKiBEYXRhVHlwZXMuR0VPTUVUUlkoJ1BPSU5UJywgNDMyNilcclxuICpcclxuICogQGV4YW1wbGUgPGNhcHRpb24+Q3JlYXRlIGEgbmV3IHBvaW50PC9jYXB0aW9uPlxyXG4gKiBjb25zdCBwb2ludCA9IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IFszOS44MDcyMjIsLTc2Ljk4NDcyMl19O1xyXG4gKlxyXG4gKiBVc2VyLmNyZWF0ZSh7dXNlcm5hbWU6ICd1c2VybmFtZScsIGdlb21ldHJ5OiBwb2ludCB9KTtcclxuICpcclxuICogQGV4YW1wbGUgPGNhcHRpb24+Q3JlYXRlIGEgbmV3IGxpbmVzdHJpbmc8L2NhcHRpb24+XHJcbiAqIGNvbnN0IGxpbmUgPSB7IHR5cGU6ICdMaW5lU3RyaW5nJywgJ2Nvb3JkaW5hdGVzJzogWyBbMTAwLjAsIDAuMF0sIFsxMDEuMCwgMS4wXSBdIH07XHJcbiAqXHJcbiAqIFVzZXIuY3JlYXRlKHt1c2VybmFtZTogJ3VzZXJuYW1lJywgZ2VvbWV0cnk6IGxpbmUgfSk7XHJcbiAqXHJcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNyZWF0ZSBhIG5ldyBwb2x5Z29uPC9jYXB0aW9uPlxyXG4gKiBjb25zdCBwb2x5Z29uID0geyB0eXBlOiAnUG9seWdvbicsIGNvb3JkaW5hdGVzOiBbXHJcbiAqICAgICAgICAgICAgICAgICBbIFsxMDAuMCwgMC4wXSwgWzEwMS4wLCAwLjBdLCBbMTAxLjAsIDEuMF0sXHJcbiAqICAgICAgICAgICAgICAgICAgIFsxMDAuMCwgMS4wXSwgWzEwMC4wLCAwLjBdIF1cclxuICogICAgICAgICAgICAgICAgIF19O1xyXG4gKlxyXG4gKiBVc2VyLmNyZWF0ZSh7dXNlcm5hbWU6ICd1c2VybmFtZScsIGdlb21ldHJ5OiBwb2x5Z29uIH0pO1xyXG4gKlxyXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5DcmVhdGUgYSBuZXcgcG9pbnQgd2l0aCBhIGN1c3RvbSBTUklEPC9jYXB0aW9uPlxyXG4gKiBjb25zdCBwb2ludCA9IHtcclxuICogICB0eXBlOiAnUG9pbnQnLFxyXG4gKiAgIGNvb3JkaW5hdGVzOiBbMzkuODA3MjIyLC03Ni45ODQ3MjJdLFxyXG4gKiAgIGNyczogeyB0eXBlOiAnbmFtZScsIHByb3BlcnRpZXM6IHsgbmFtZTogJ0VQU0c6NDMyNid9IH1cclxuICogfTtcclxuICpcclxuICogVXNlci5jcmVhdGUoe3VzZXJuYW1lOiAndXNlcm5hbWUnLCBnZW9tZXRyeTogcG9pbnQgfSlcclxuICpcclxuICpcclxuICogQHNlZSB7QGxpbmsgRGF0YVR5cGVzLkdFT0dSQVBIWX1cclxuICovXHJcbmNsYXNzIEdFT01FVFJZIGV4dGVuZHMgQUJTVFJBQ1Qge1xyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZV0gVHlwZSBvZiBnZW9tZXRyeSBkYXRhXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzcmlkXSBTUklEIG9mIHR5cGVcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcih0eXBlLCBzcmlkKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IF8uaXNQbGFpbk9iamVjdCh0eXBlKSA/IHR5cGUgOiB7IHR5cGUsIHNyaWQgfTtcclxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XHJcbiAgICB0aGlzLnNyaWQgPSBvcHRpb25zLnNyaWQ7XHJcbiAgfVxyXG4gIF9zdHJpbmdpZnkodmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBgR2VvbUZyb21UZXh0KCR7b3B0aW9ucy5lc2NhcGUod2t4Lkdlb21ldHJ5LnBhcnNlR2VvSlNPTih2YWx1ZSkudG9Xa3QoKSl9KWA7XHJcbiAgfVxyXG4gIF9iaW5kUGFyYW0odmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBgR2VvbUZyb21UZXh0KCR7b3B0aW9ucy5iaW5kUGFyYW0od2t4Lkdlb21ldHJ5LnBhcnNlR2VvSlNPTih2YWx1ZSkudG9Xa3QoKSl9KWA7XHJcbiAgfVxyXG59XHJcblxyXG5HRU9NRVRSWS5wcm90b3R5cGUuZXNjYXBlID0gZmFsc2U7XHJcblxyXG4vKipcclxuICogQSBnZW9ncmFwaHkgZGF0YXR5cGUgcmVwcmVzZW50cyB0d28gZGltZW5zaW9uYWwgc3BhY2lhbCBvYmplY3RzIGluIGFuIGVsbGlwdGljIGNvb3JkIHN5c3RlbS5cclxuICpcclxuICogX19UaGUgZGlmZmVyZW5jZSBmcm9tIGdlb21ldHJ5IGFuZCBnZW9ncmFwaHkgdHlwZTpfX1xyXG4gKlxyXG4gKiBQb3N0R0lTIDEuNSBpbnRyb2R1Y2VkIGEgbmV3IHNwYXRpYWwgdHlwZSBjYWxsZWQgZ2VvZ3JhcGh5LCB3aGljaCB1c2VzIGdlb2RldGljIG1lYXN1cmVtZW50IGluc3RlYWQgb2YgQ2FydGVzaWFuIG1lYXN1cmVtZW50LlxyXG4gKiBDb29yZGluYXRlIHBvaW50cyBpbiB0aGUgZ2VvZ3JhcGh5IHR5cGUgYXJlIGFsd2F5cyByZXByZXNlbnRlZCBpbiBXR1MgODQgbG9uIGxhdCBkZWdyZWVzIChTUklEIDQzMjYpLFxyXG4gKiBidXQgbWVhc3VyZW1lbnQgZnVuY3Rpb25zIGFuZCByZWxhdGlvbnNoaXBzIFNUX0Rpc3RhbmNlLCBTVF9EV2l0aGluLCBTVF9MZW5ndGgsIGFuZCBTVF9BcmVhIGFsd2F5cyByZXR1cm4gYW5zd2VycyBpbiBtZXRlcnMgb3IgYXNzdW1lIGlucHV0cyBpbiBtZXRlcnMuXHJcbiAqXHJcbiAqIF9fV2hhdCBpcyBiZXN0IHRvIHVzZT8gSXQgZGVwZW5kczpfX1xyXG4gKlxyXG4gKiBXaGVuIGNob29zaW5nIGJldHdlZW4gdGhlIGdlb21ldHJ5IGFuZCBnZW9ncmFwaHkgdHlwZSBmb3IgZGF0YSBzdG9yYWdlLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHdoYXQgeW914oCZbGwgYmUgdXNpbmcgaXQgZm9yLlxyXG4gKiBJZiBhbGwgeW91IGRvIGFyZSBzaW1wbGUgbWVhc3VyZW1lbnRzIGFuZCByZWxhdGlvbnNoaXAgY2hlY2tzIG9uIHlvdXIgZGF0YSwgYW5kIHlvdXIgZGF0YSBjb3ZlcnMgYSBmYWlybHkgbGFyZ2UgYXJlYSwgdGhlbiBtb3N0IGxpa2VseSB5b3XigJlsbCBiZSBiZXR0ZXIgb2ZmIHN0b3JpbmcgeW91ciBkYXRhIHVzaW5nIHRoZSBuZXcgZ2VvZ3JhcGh5IHR5cGUuXHJcbiAqIEFsdGhvdWdoIHRoZSBuZXcgZ2VvZ3JhcGh5IGRhdGEgdHlwZSBjYW4gY292ZXIgdGhlIGdsb2JlLCB0aGUgZ2VvbWV0cnkgdHlwZSBpcyBmYXIgZnJvbSBvYnNvbGV0ZS5cclxuICogVGhlIGdlb21ldHJ5IHR5cGUgaGFzIGEgbXVjaCByaWNoZXIgc2V0IG9mIGZ1bmN0aW9ucyB0aGFuIGdlb2dyYXBoeSwgcmVsYXRpb25zaGlwIGNoZWNrcyBhcmUgZ2VuZXJhbGx5IGZhc3RlciwgYW5kIGl0IGhhcyB3aWRlciBzdXBwb3J0IGN1cnJlbnRseSBhY3Jvc3MgZGVza3RvcCBhbmQgd2ViLW1hcHBpbmcgdG9vbHNcclxuICpcclxuICogQGV4YW1wbGUgPGNhcHRpb24+RGVmaW5pbmcgYSBHZW9ncmFwaHkgdHlwZSBhdHRyaWJ1dGU8L2NhcHRpb24+XHJcbiAqIERhdGFUeXBlcy5HRU9HUkFQSFlcclxuICogRGF0YVR5cGVzLkdFT0dSQVBIWSgnUE9JTlQnKVxyXG4gKiBEYXRhVHlwZXMuR0VPR1JBUEhZKCdQT0lOVCcsIDQzMjYpXHJcbiAqL1xyXG5jbGFzcyBHRU9HUkFQSFkgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlXSBUeXBlIG9mIGdlb2dyYXBoeSBkYXRhXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzcmlkXSBTUklEIG9mIHR5cGVcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcih0eXBlLCBzcmlkKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IF8uaXNQbGFpbk9iamVjdCh0eXBlKSA/IHR5cGUgOiB7IHR5cGUsIHNyaWQgfTtcclxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XHJcbiAgICB0aGlzLnNyaWQgPSBvcHRpb25zLnNyaWQ7XHJcbiAgfVxyXG4gIF9zdHJpbmdpZnkodmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBgR2VvbUZyb21UZXh0KCR7b3B0aW9ucy5lc2NhcGUod2t4Lkdlb21ldHJ5LnBhcnNlR2VvSlNPTih2YWx1ZSkudG9Xa3QoKSl9KWA7XHJcbiAgfVxyXG4gIF9iaW5kUGFyYW0odmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBgR2VvbUZyb21UZXh0KCR7b3B0aW9ucy5iaW5kUGFyYW0od2t4Lkdlb21ldHJ5LnBhcnNlR2VvSlNPTih2YWx1ZSkudG9Xa3QoKSl9KWA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuR0VPR1JBUEhZLnByb3RvdHlwZS5lc2NhcGUgPSBmYWxzZTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgY2lkciB0eXBlIGhvbGRzIGFuIElQdjQgb3IgSVB2NiBuZXR3b3JrIHNwZWNpZmljYXRpb24uIFRha2VzIDcgb3IgMTkgYnl0ZXMuXHJcbiAqXHJcbiAqIE9ubHkgYXZhaWxhYmxlIGZvciBQb3N0Z3Jlc1xyXG4gKi9cclxuY2xhc3MgQ0lEUiBleHRlbmRzIEFCU1RSQUNUIHtcclxuICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgIVZhbGlkYXRvci5pc0lQUmFuZ2UodmFsdWUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKHV0aWwuZm9ybWF0KCclaiBpcyBub3QgYSB2YWxpZCBDSURSJywgdmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBJTkVUIHR5cGUgaG9sZHMgYW4gSVB2NCBvciBJUHY2IGhvc3QgYWRkcmVzcywgYW5kIG9wdGlvbmFsbHkgaXRzIHN1Ym5ldC4gVGFrZXMgNyBvciAxOSBieXRlc1xyXG4gKlxyXG4gKiBPbmx5IGF2YWlsYWJsZSBmb3IgUG9zdGdyZXNcclxuICovXHJcbmNsYXNzIElORVQgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8ICFWYWxpZGF0b3IuaXNJUCh2YWx1ZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIElORVQnLCB2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogVGhlIE1BQ0FERFIgdHlwZSBzdG9yZXMgTUFDIGFkZHJlc3Nlcy4gVGFrZXMgNiBieXRlc1xyXG4gKlxyXG4gKiBPbmx5IGF2YWlsYWJsZSBmb3IgUG9zdGdyZXNcclxuICpcclxuICovXHJcbmNsYXNzIE1BQ0FERFIgZXh0ZW5kcyBBQlNUUkFDVCB7XHJcbiAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8ICFWYWxpZGF0b3IuaXNNQUNBZGRyZXNzKHZhbHVlKSkge1xyXG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgTUFDQUREUicsIHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGNvbnZlbmllbmNlIGNsYXNzIGhvbGRpbmcgY29tbW9ubHkgdXNlZCBkYXRhIHR5cGVzLiBUaGUgZGF0YSB0eXBlcyBhcmUgdXNlZCB3aGVuIGRlZmluaW5nIGEgbmV3IG1vZGVsIHVzaW5nIGBTZXF1ZWxpemUuZGVmaW5lYCwgbGlrZSB0aGlzOlxyXG4gKiBgYGBqc1xyXG4gKiBzZXF1ZWxpemUuZGVmaW5lKCdtb2RlbCcsIHtcclxuICogICBjb2x1bW46IERhdGFUeXBlcy5JTlRFR0VSXHJcbiAqIH0pXHJcbiAqIGBgYFxyXG4gKiBXaGVuIGRlZmluaW5nIGEgbW9kZWwgeW91IGNhbiBqdXN0IGFzIGVhc2lseSBwYXNzIGEgc3RyaW5nIGFzIHR5cGUsIGJ1dCBvZnRlbiB1c2luZyB0aGUgdHlwZXMgZGVmaW5lZCBoZXJlIGlzIGJlbmVmaWNpYWwuIEZvciBleGFtcGxlLCB1c2luZyBgRGF0YVR5cGVzLkJMT0JgLCBtZWFuXHJcbiAqIHRoYXQgdGhhdCBjb2x1bW4gd2lsbCBiZSByZXR1cm5lZCBhcyBhbiBpbnN0YW5jZSBvZiBgQnVmZmVyYCB3aGVuIGJlaW5nIGZldGNoZWQgYnkgc2VxdWVsaXplLlxyXG4gKlxyXG4gKiBUbyBwcm92aWRlIGEgbGVuZ3RoIGZvciB0aGUgZGF0YSB0eXBlLCB5b3UgY2FuIGludm9rZSBpdCBsaWtlIGEgZnVuY3Rpb246IGBJTlRFR0VSKDIpYFxyXG4gKlxyXG4gKiBTb21lIGRhdGEgdHlwZXMgaGF2ZSBzcGVjaWFsIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgaW4gb3JkZXIgdG8gY2hhbmdlIHRoZSBkYXRhIHR5cGUuXHJcbiAqIEZvciBleGFtcGxlLCB0byBnZXQgYW4gdW5zaWduZWQgaW50ZWdlciB3aXRoIHplcm9maWxsIHlvdSBjYW4gZG8gYERhdGFUeXBlcy5JTlRFR0VSLlVOU0lHTkVELlpFUk9GSUxMYC5cclxuICogVGhlIG9yZGVyIHlvdSBhY2Nlc3MgdGhlIHByb3BlcnRpZXMgaW4gZG8gbm90IG1hdHRlciwgc28gYERhdGFUeXBlcy5JTlRFR0VSLlpFUk9GSUxMLlVOU0lHTkVEYCBpcyBmaW5lIGFzIHdlbGwuXHJcbiAqXHJcbiAqICogQWxsIG51bWJlciB0eXBlcyAoYElOVEVHRVJgLCBgQklHSU5UYCwgYEZMT0FUYCwgYERPVUJMRWAsIGBSRUFMYCwgYERFQ0lNQUxgKSBleHBvc2UgdGhlIHByb3BlcnRpZXMgYFVOU0lHTkVEYCBhbmQgYFpFUk9GSUxMYFxyXG4gKiAqIFRoZSBgQ0hBUmAgYW5kIGBTVFJJTkdgIHR5cGVzIGV4cG9zZSB0aGUgYEJJTkFSWWAgcHJvcGVydHlcclxuICpcclxuICogVGhyZWUgb2YgdGhlIHZhbHVlcyBwcm92aWRlZCBoZXJlIChgTk9XYCwgYFVVSURWMWAgYW5kIGBVVUlEVjRgKSBhcmUgc3BlY2lhbCBkZWZhdWx0IHZhbHVlcywgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQgdG8gZGVmaW5lIHR5cGVzLiBJbnN0ZWFkIHRoZXkgYXJlIHVzZWQgYXMgc2hvcnRoYW5kcyBmb3JcclxuICogZGVmaW5pbmcgZGVmYXVsdCB2YWx1ZXMuIEZvciBleGFtcGxlLCB0byBnZXQgYSB1dWlkIGZpZWxkIHdpdGggYSBkZWZhdWx0IHZhbHVlIGdlbmVyYXRlZCBmb2xsb3dpbmcgdjEgb2YgdGhlIFVVSUQgc3RhbmRhcmQ6XHJcbiAqIGBgYGpzXHJcbiAqIHNlcXVlbGl6ZS5kZWZpbmUoJ21vZGVsJywge1xyXG4gKiAgIHV1aWQ6IHtcclxuICogICAgIHR5cGU6IERhdGFUeXBlcy5VVUlELFxyXG4gKiAgICAgZGVmYXVsdFZhbHVlOiBEYXRhVHlwZXMuVVVJRFYxLFxyXG4gKiAgICAgcHJpbWFyeUtleTogdHJ1ZVxyXG4gKiAgIH1cclxuICogfSlcclxuICogYGBgXHJcbiAqIFRoZXJlIG1heSBiZSB0aW1lcyB3aGVuIHlvdSB3YW50IHRvIGdlbmVyYXRlIHlvdXIgb3duIFVVSUQgY29uZm9ybWluZyB0byBzb21lIG90aGVyIGFsZ29yaXRobS4gVGhpcyBpcyBhY2NvbXBsaXNoZWRcclxuICogdXNpbmcgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eSBhcyB3ZWxsLCBidXQgaW5zdGVhZCBvZiBzcGVjaWZ5aW5nIG9uZSBvZiB0aGUgc3VwcGxpZWQgVVVJRCB0eXBlcywgeW91IHJldHVybiBhIHZhbHVlXHJcbiAqIGZyb20gYSBmdW5jdGlvbi5cclxuICogYGBganNcclxuICogc2VxdWVsaXplLmRlZmluZSgnbW9kZWwnLCB7XHJcbiAqICAgdXVpZDoge1xyXG4gKiAgICAgdHlwZTogRGF0YVR5cGVzLlVVSUQsXHJcbiAqICAgICBkZWZhdWx0VmFsdWU6IGZ1bmN0aW9uKCkge1xyXG4gKiAgICAgICByZXR1cm4gZ2VuZXJhdGVNeUlkKClcclxuICogICAgIH0sXHJcbiAqICAgICBwcmltYXJ5S2V5OiB0cnVlXHJcbiAqICAgfVxyXG4gKiB9KVxyXG4gKiBgYGBcclxuICovXHJcbmNvbnN0IERhdGFUeXBlcyA9IG1vZHVsZS5leHBvcnRzID0ge1xyXG4gIEFCU1RSQUNULFxyXG4gIFNUUklORyxcclxuICBDSEFSLFxyXG4gIFRFWFQsXHJcbiAgTlVNQkVSLFxyXG4gIFRJTllJTlQsXHJcbiAgU01BTExJTlQsXHJcbiAgTUVESVVNSU5ULFxyXG4gIElOVEVHRVIsXHJcbiAgQklHSU5ULFxyXG4gIEZMT0FULFxyXG4gIFRJTUUsXHJcbiAgREFURSxcclxuICBEQVRFT05MWSxcclxuICBCT09MRUFOLFxyXG4gIE5PVyxcclxuICBCTE9CLFxyXG4gIERFQ0lNQUwsXHJcbiAgTlVNRVJJQzogREVDSU1BTCxcclxuICBVVUlELFxyXG4gIFVVSURWMSxcclxuICBVVUlEVjQsXHJcbiAgSFNUT1JFLFxyXG4gIEpTT046IEpTT05UWVBFLFxyXG4gIEpTT05CLFxyXG4gIFZJUlRVQUwsXHJcbiAgQVJSQVksXHJcbiAgRU5VTSxcclxuICBSQU5HRSxcclxuICBSRUFMLFxyXG4gICdET1VCTEUgUFJFQ0lTSU9OJzogRE9VQkxFLFxyXG4gIERPVUJMRSxcclxuICBHRU9NRVRSWSxcclxuICBHRU9HUkFQSFksXHJcbiAgQ0lEUixcclxuICBJTkVULFxyXG4gIE1BQ0FERFIsXHJcbiAgQ0lURVhUXHJcbn07XHJcblxyXG5fLmVhY2goRGF0YVR5cGVzLCAoZGF0YVR5cGUsIG5hbWUpID0+IHtcclxuICAvLyBndWFyZCBmb3IgYWxpYXNlc1xyXG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGFUeXBlLCAna2V5JykpIHtcclxuICAgIGRhdGFUeXBlLnR5cGVzID0ge307XHJcbiAgICBkYXRhVHlwZS5rZXkgPSBkYXRhVHlwZS5wcm90b3R5cGUua2V5ID0gbmFtZTtcclxuICB9XHJcbn0pO1xyXG5cclxuY29uc3QgZGlhbGVjdE1hcCA9IHt9O1xyXG4vKiBkaWFsZWN0TWFwLnBvc3RncmVzID0gcmVxdWlyZSgnLi9kaWFsZWN0cy9wb3N0Z3Jlcy9kYXRhLXR5cGVzJykoRGF0YVR5cGVzKTtcclxuZGlhbGVjdE1hcC5teXNxbCA9IHJlcXVpcmUoJy4vZGlhbGVjdHMvbXlzcWwvZGF0YS10eXBlcycpKERhdGFUeXBlcyk7XHJcbmRpYWxlY3RNYXAubWFyaWFkYiA9IHJlcXVpcmUoJy4vZGlhbGVjdHMvbWFyaWFkYi9kYXRhLXR5cGVzJykoRGF0YVR5cGVzKTsgKi9cclxuZGlhbGVjdE1hcC5zcWxpdGUgPSByZXF1aXJlKCcuL2RpYWxlY3RzL3NxbGl0ZS9kYXRhLXR5cGVzJykoRGF0YVR5cGVzKTtcclxuLyogZGlhbGVjdE1hcC5tc3NxbCA9IHJlcXVpcmUoJy4vZGlhbGVjdHMvbXNzcWwvZGF0YS10eXBlcycpKERhdGFUeXBlcyk7ICovXHJcblxyXG5jb25zdCBkaWFsZWN0TGlzdCA9IF8udmFsdWVzKGRpYWxlY3RNYXApO1xyXG5cclxuZm9yIChjb25zdCBkYXRhVHlwZXMgb2YgZGlhbGVjdExpc3QpIHtcclxuICBfLmVhY2goZGF0YVR5cGVzLCAoRGF0YVR5cGUsIGtleSkgPT4ge1xyXG4gICAgaWYgKCFEYXRhVHlwZS5rZXkpIHtcclxuICAgICAgRGF0YVR5cGUua2V5ID0gRGF0YVR5cGUucHJvdG90eXBlLmtleSA9IGtleTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuLy8gV3JhcCBhbGwgZGF0YSB0eXBlcyB0byBub3QgcmVxdWlyZSBgbmV3YFxyXG5mb3IgKGNvbnN0IGRhdGFUeXBlcyBvZiBbRGF0YVR5cGVzLCAuLi5kaWFsZWN0TGlzdF0pIHtcclxuICBfLmVhY2goZGF0YVR5cGVzLCAoRGF0YVR5cGUsIGtleSkgPT4ge1xyXG4gICAgZGF0YVR5cGVzW2tleV0gPSBjbGFzc1RvSW52b2thYmxlKERhdGFUeXBlKTtcclxuICB9KTtcclxufVxyXG5cclxuT2JqZWN0LmFzc2lnbihEYXRhVHlwZXMsIGRpYWxlY3RNYXApO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLXR5cGVzLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiXyIsInNlcXVlbGl6ZUVycm9ycyIsIlZhbGlkYXRvciIsInZhbGlkYXRvciIsIm1vbWVudFR6IiwibW9tZW50IiwibG9nZ2VyIiwid2FybmluZ3MiLCJjbGFzc1RvSW52b2thYmxlIiwiQUJTVFJBQ1QiLCJvcHRpb25zIiwidG9TcWwiLCJrZXkiLCJ2YWx1ZSIsIl9zdHJpbmdpZnkiLCJfYmluZFBhcmFtIiwiYmluZFBhcmFtIiwic3RyaW5naWZ5IiwibmFtZSIsImxpbmsiLCJ0ZXh0Iiwid2FybiIsIm9sZFR5cGUiLCJwcm90b3R5cGUiLCJkaWFsZWN0VHlwZXMiLCJTVFJJTkciLCJsZW5ndGgiLCJiaW5hcnkiLCJfYmluYXJ5IiwiX2xlbmd0aCIsIk9iamVjdCIsInRvU3RyaW5nIiwiY2FsbCIsIkJ1ZmZlciIsImlzQnVmZmVyIiwiVmFsaWRhdGlvbkVycm9yIiwiZm9ybWF0IiwiQklOQVJZIiwiQ0hBUiIsIlRFWFQiLCJ0b0xvd2VyQ2FzZSIsIkNJVEVYVCIsIk5VTUJFUiIsIl96ZXJvZmlsbCIsInplcm9maWxsIiwiX2RlY2ltYWxzIiwiZGVjaW1hbHMiLCJfcHJlY2lzaW9uIiwicHJlY2lzaW9uIiwiX3NjYWxlIiwic2NhbGUiLCJfdW5zaWduZWQiLCJ1bnNpZ25lZCIsInJlc3VsdCIsImlzRmxvYXQiLCJTdHJpbmciLCJudW1iZXIiLCJ1bmRlZmluZWQiLCJVTlNJR05FRCIsIlpFUk9GSUxMIiwiSU5URUdFUiIsImlzSW50IiwiVElOWUlOVCIsIlNNQUxMSU5UIiwiTUVESVVNSU5UIiwiQklHSU5UIiwiRkxPQVQiLCJSRUFMIiwiRE9VQkxFIiwiREVDSU1BTCIsImZpbHRlciIsImlkZW50aXR5Iiwiam9pbiIsImlzRGVjaW1hbCIsInByb3RvRXh0ZW5zaW9ucyIsImVzY2FwZSIsIl92YWx1ZSIsImlzTmFOIiwiaXNGaW5pdGUiLCJzaWduIiwiZmxvYXRpbmciLCJhc3NpZ24iLCJCT09MRUFOIiwiaXNCb29sZWFuIiwidHlwZSIsInBhcnNlIiwiX3Nhbml0aXplIiwiVElNRSIsIkRBVEUiLCJpc0RhdGUiLCJyYXciLCJEYXRlIiwib3JpZ2luYWxWYWx1ZSIsImdldFRpbWUiLCJkYXRlIiwidGltZXpvbmUiLCJ0eiIsInpvbmUiLCJ1dGNPZmZzZXQiLCJfYXBwbHlUaW1lem9uZSIsIkRBVEVPTkxZIiwiSFNUT1JFIiwiaXNQbGFpbk9iamVjdCIsIkpTT05UWVBFIiwiSlNPTiIsIkpTT05CIiwiTk9XIiwiQkxPQiIsIkFycmF5IiwiaXNBcnJheSIsImZyb20iLCJoZXgiLCJfaGV4aWZ5IiwiUkFOR0UiLCJzdWJ0eXBlIiwiX3N1YnR5cGUiLCJVVUlEIiwiaXNVVUlEIiwiYWNjZXB0U3RyaW5ncyIsIlVVSURWMSIsIlVVSURWNCIsIlZJUlRVQUwiLCJSZXR1cm5UeXBlIiwiZmllbGRzIiwicmV0dXJuVHlwZSIsIkVOVU0iLCJhcmdzIiwidmFsdWVzIiwicmVkdWNlIiwiZWxlbWVudCIsImNvbmNhdCIsImluY2x1ZGVzIiwiQVJSQVkiLCJvYmoiLCJDSURSIiwiaXNJUFJhbmdlIiwiSU5FVCIsImlzSVAiLCJNQUNBRERSIiwiaXNNQUNBZGRyZXNzIiwiRGF0YVR5cGVzIiwibW9kdWxlIiwiZXhwb3J0cyIsIk5VTUVSSUMiLCJlYWNoIiwiZGF0YVR5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInR5cGVzIiwiZGlhbGVjdE1hcCIsInNxbGl0ZSIsImRpYWxlY3RMaXN0IiwiZGF0YVR5cGVzIiwiRGF0YVR5cGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsSUFBSSxHQUFHQyxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNQyxDQUFDLEdBQUdELE9BQU8sQ0FBQyxRQUFELENBQWpCOztBQUNBLE1BQU1FLGVBQWUsR0FBR0YsT0FBTyxDQUFDLFVBQUQsQ0FBL0I7O0FBQ0EsTUFBTUcsU0FBUyxHQUFHSCxPQUFPLENBQUMs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QUF4QyxDQUFwQjtBQUNBOztBQUVBLE1BQU1VLFdBQVcsR0FBR3RKLENBQUMsQ0FBQytILE1BQUYsQ0FBU3FCLFVBQVQsQ0FBcEI7O0FBRUEsS0FBSyxNQUFNRyxTQUFYLElBQXdCRCxXQUF4QixFQUFxQztBQUNuQ3RKLEVBQUFBLENBQUMsQ0FBQ2dKLElBQUYsQ0FBT08sU0FBUCxFQUFrQixDQUFDQyxRQUFELEVBQVc1SSxHQUFYLEtBQW1CO0FBQ25DLFFBQUksQ0FBQzRJLFFBQVEsQ0FBQzVJLEdBQWQsRUFBbUI7QUFDakI0SSxNQUFBQSxRQUFRLENBQUM1SSxHQUFULEdBQWU0SSxRQUFRLENBQUNqSSxTQUFULENBQW1CWCxHQUFuQixHQUF5QkEsR0FBeEM7QUFDRDtBQUNGLEdBSkQ7QUFLRCxDLENBRUQ7OztBQUNBLEtBQUssTUFBTTJJLFNBQVgsSUFBd0IsQ0FBQ1gsU0FBRCxFQUFZLEdBQUdVLFdBQWYsQ0FBeEIsRUFBcUQ7QUFDbkR0SixFQUFBQSxDQUFDLENBQUNnSixJQUFGLENBQU9PLFNBQVAsRUFBa0IsQ0FBQ0MsUUFBRCxFQUFXNUksR0FBWCxLQUFtQjtBQUNuQzJJLElBQUFBLFNBQVMsQ0FBQzNJLEdBQUQsQ0FBVCxHQUFpQkosZ0JBQWdCLENBQUNnSixRQUFELENBQWpDO0FBQ0QsR0FGRDtBQUdEOztBQUVEMUgsTUFBTSxDQUFDbUQsTUFBUCxDQUFjMkQsU0FBZCxFQUF5QlEsVUFBekIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBzZXF1ZWxpemVFcnJvcnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xuY29uc3QgVmFsaWRhdG9yID0gcmVxdWlyZSgnLi91dGlscy92YWxpZGF0b3ItZXh0cmFzJykudmFsaWRhdG9yO1xuY29uc3QgbW9tZW50VHogPSByZXF1aXJlKCdtb21lbnQtdGltZXpvbmUnKTtcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoJy4vdXRpbHMvbG9nZ2VyJyk7XG5jb25zdCB3YXJuaW5ncyA9IHt9O1xuY29uc3QgeyBjbGFzc1RvSW52b2thYmxlIH0gPSByZXF1aXJlKCcuL3V0aWxzL2NsYXNzVG9JbnZva2FibGUnKTtcblxuY2xhc3MgQUJTVFJBQ1Qge1xuICB0b1N0cmluZyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TcWwob3B0aW9ucyk7XG4gIH1cbiAgdG9TcWwoKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5O1xuICB9XG4gIHN0cmluZ2lmeSh2YWx1ZSwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzLl9zdHJpbmdpZnkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdHJpbmdpZnkodmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgYmluZFBhcmFtKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuX2JpbmRQYXJhbSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2JpbmRQYXJhbSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmJpbmRQYXJhbSh0aGlzLnN0cmluZ2lmeSh2YWx1ZSwgb3B0aW9ucykpO1xuICB9XG4gIHN0YXRpYyB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG4gIHN0YXRpYyB3YXJuKGxpbmssIHRleHQpIHtcbiAgICBpZiAoIXdhcm5pbmdzW3RleHRdKSB7XG4gICAgICB3YXJuaW5nc1t0ZXh0XSA9IHRydWU7XG4gICAgICBsb2dnZXIud2FybihgJHt0ZXh0fSBcXG4+PiBDaGVjazogJHtsaW5rfWApO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgZXh0ZW5kKG9sZFR5cGUpIHtcbiAgICByZXR1cm4gbmV3IHRoaXMob2xkVHlwZS5vcHRpb25zKTtcbiAgfVxufVxuXG5BQlNUUkFDVC5wcm90b3R5cGUuZGlhbGVjdFR5cGVzID0gJyc7XG5cbi8qKlxuICogU1RSSU5HIEEgdmFyaWFibGUgbGVuZ3RoIHN0cmluZ1xuICovXG5jbGFzcyBTVFJJTkcgZXh0ZW5kcyBBQlNUUkFDVCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0yNTVdIGxlbmd0aCBvZiBzdHJpbmdcbiAgICogQHBhcmFtIHtib29sZWFufSBbYmluYXJ5PWZhbHNlXSBJcyB0aGlzIGJpbmFyeT9cbiAgICovXG4gIGNvbnN0cnVjdG9yKGxlbmd0aCwgYmluYXJ5KSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIGxlbmd0aCA9PT0gJ29iamVjdCcgJiYgbGVuZ3RoIHx8IHsgbGVuZ3RoLCBiaW5hcnkgfTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuX2JpbmFyeSA9IG9wdGlvbnMuYmluYXJ5O1xuICAgIHRoaXMuX2xlbmd0aCA9IG9wdGlvbnMubGVuZ3RoIHx8IDI1NTtcbiAgfVxuICB0b1NxbCgpIHtcbiAgICByZXR1cm4gYFZBUkNIQVIoJHt0aGlzLl9sZW5ndGh9KSR7dGhpcy5fYmluYXJ5ID8gJyBCSU5BUlknIDogJyd9YDtcbiAgfVxuICB2YWxpZGF0ZSh2YWx1ZSkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSAnW29iamVjdCBTdHJpbmddJykge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5iaW5hcnkgJiYgQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIHN0cmluZycsIHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0IEJJTkFSWSgpIHtcbiAgICB0aGlzLl9iaW5hcnkgPSB0cnVlO1xuICAgIHRoaXMub3B0aW9ucy5iaW5hcnkgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIGdldCBCSU5BUlkoKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKCkuQklOQVJZO1xuICB9XG59XG5cbi8qKlxuICogQ0hBUiBBIGZpeGVkIGxlbmd0aCBzdHJpbmdcbiAqL1xuY2xhc3MgQ0hBUiBleHRlbmRzIFNUUklORyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0yNTVdIGxlbmd0aCBvZiBzdHJpbmdcbiAgICogQHBhcmFtIHtib29sZWFufSBbYmluYXJ5PWZhbHNlXSBJcyB0aGlzIGJpbmFyeT9cbiAgICovXG4gIGNvbnN0cnVjdG9yKGxlbmd0aCwgYmluYXJ5KSB7XG4gICAgc3VwZXIodHlwZW9mIGxlbmd0aCA9PT0gJ29iamVjdCcgJiYgbGVuZ3RoIHx8IHsgbGVuZ3RoLCBiaW5hcnkgfSk7XG4gIH1cbiAgdG9TcWwoKSB7XG4gICAgcmV0dXJuIGBDSEFSKCR7dGhpcy5fbGVuZ3RofSkke3RoaXMuX2JpbmFyeSA/ICcgQklOQVJZJyA6ICcnfWA7XG4gIH1cbn1cblxuLyoqXG4gKiBVbmxpbWl0ZWQgbGVuZ3RoIFRFWFQgY29sdW1uXG4gKi9cbmNsYXNzIFRFWFQgZXh0ZW5kcyBBQlNUUkFDVCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nJ10gY291bGQgYmUgdGlueSwgbWVkaXVtLCBsb25nLlxuICAgKi9cbiAgY29uc3RydWN0b3IobGVuZ3RoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIGxlbmd0aCA9PT0gJ29iamVjdCcgJiYgbGVuZ3RoIHx8IHsgbGVuZ3RoIH07XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLl9sZW5ndGggPSBvcHRpb25zLmxlbmd0aCB8fCAnJztcbiAgfVxuICB0b1NxbCgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2xlbmd0aC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICd0aW55JzpcbiAgICAgICAgcmV0dXJuICdUSU5ZVEVYVCc7XG4gICAgICBjYXNlICdtZWRpdW0nOlxuICAgICAgICByZXR1cm4gJ01FRElVTVRFWFQnO1xuICAgICAgY2FzZSAnbG9uZyc6XG4gICAgICAgIHJldHVybiAnTE9OR1RFWFQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5O1xuICAgIH1cbiAgfVxuICB2YWxpZGF0ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgc3RyaW5nJywgdmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiB1bmxpbWl0ZWQgbGVuZ3RoIGNhc2UtaW5zZW5zaXRpdmUgdGV4dCBjb2x1bW4uXG4gKiBPcmlnaW5hbCBjYXNlIGlzIHByZXNlcnZlZCBidXQgYWN0cyBjYXNlLWluc2Vuc2l0aXZlIHdoZW4gY29tcGFyaW5nIHZhbHVlcyAoc3VjaCBhcyB3aGVuIGZpbmRpbmcgb3IgdW5pcXVlIGNvbnN0cmFpbnRzKS5cbiAqIE9ubHkgYXZhaWxhYmxlIGluIFBvc3RncmVzIGFuZCBTUUxpdGUuXG4gKlxuICovXG5jbGFzcyBDSVRFWFQgZXh0ZW5kcyBBQlNUUkFDVCB7XG4gIHRvU3FsKCkge1xuICAgIHJldHVybiAnQ0lURVhUJztcbiAgfVxuICB2YWxpZGF0ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgc3RyaW5nJywgdmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBCYXNlIG51bWJlciB0eXBlIHdoaWNoIGlzIHVzZWQgdG8gYnVpbGQgb3RoZXIgdHlwZXNcbiAqL1xuY2xhc3MgTlVNQkVSIGV4dGVuZHMgQUJTVFJBQ1Qge1xuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgdHlwZSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMubGVuZ3RoXSBsZW5ndGggb2YgdHlwZSwgbGlrZSBgSU5UKDQpYFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnplcm9maWxsXSBJcyB6ZXJvIGZpbGxlZD9cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy51bnNpZ25lZF0gSXMgdW5zaWduZWQ/XG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuZGVjaW1hbHNdIG51bWJlciBvZiBkZWNpbWFsIHBvaW50cywgdXNlZCB3aXRoIGxlbmd0aCBgRkxPQVQoNSwgNClgXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMucHJlY2lzaW9uXSBkZWZpbmVzIHByZWNpc2lvbiBmb3IgZGVjaW1hbCB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuc2NhbGVdIGRlZmluZXMgc2NhbGUgZm9yIGRlY2ltYWwgdHlwZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBsZW5ndGg6IG9wdGlvbnNcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5fbGVuZ3RoID0gb3B0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5femVyb2ZpbGwgPSBvcHRpb25zLnplcm9maWxsO1xuICAgIHRoaXMuX2RlY2ltYWxzID0gb3B0aW9ucy5kZWNpbWFscztcbiAgICB0aGlzLl9wcmVjaXNpb24gPSBvcHRpb25zLnByZWNpc2lvbjtcbiAgICB0aGlzLl9zY2FsZSA9IG9wdGlvbnMuc2NhbGU7XG4gICAgdGhpcy5fdW5zaWduZWQgPSBvcHRpb25zLnVuc2lnbmVkO1xuICB9XG4gIHRvU3FsKCkge1xuICAgIGxldCByZXN1bHQgPSB0aGlzLmtleTtcbiAgICBpZiAodGhpcy5fbGVuZ3RoKSB7XG4gICAgICByZXN1bHQgKz0gYCgke3RoaXMuX2xlbmd0aH1gO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9kZWNpbWFscyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmVzdWx0ICs9IGAsJHt0aGlzLl9kZWNpbWFsc31gO1xuICAgICAgfVxuICAgICAgcmVzdWx0ICs9ICcpJztcbiAgICB9XG4gICAgaWYgKHRoaXMuX3Vuc2lnbmVkKSB7XG4gICAgICByZXN1bHQgKz0gJyBVTlNJR05FRCc7XG4gICAgfVxuICAgIGlmICh0aGlzLl96ZXJvZmlsbCkge1xuICAgICAgcmVzdWx0ICs9ICcgWkVST0ZJTEwnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHZhbGlkYXRlKHZhbHVlKSB7XG4gICAgaWYgKCFWYWxpZGF0b3IuaXNGbG9hdChTdHJpbmcodmFsdWUpKSkge1xuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoYCVqIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5rZXkudG9Mb3dlckNhc2UoKX1gLCB2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBfc3RyaW5naWZ5KG51bWJlcikge1xuICAgIGlmICh0eXBlb2YgbnVtYmVyID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgbnVtYmVyID09PSAnYm9vbGVhbicgfHwgbnVtYmVyID09PSBudWxsIHx8IG51bWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG51bWJlci50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIG51bWJlci50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgZ2V0IFVOU0lHTkVEKCkge1xuICAgIHRoaXMuX3Vuc2lnbmVkID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMudW5zaWduZWQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0IFpFUk9GSUxMKCkge1xuICAgIHRoaXMuX3plcm9maWxsID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMuemVyb2ZpbGwgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIGdldCBVTlNJR05FRCgpIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoKS5VTlNJR05FRDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgWkVST0ZJTEwoKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKCkuWkVST0ZJTEw7XG4gIH1cbn1cblxuLyoqXG4gKiBBIDMyIGJpdCBpbnRlZ2VyXG4gKi9cbmNsYXNzIElOVEVHRVIgZXh0ZW5kcyBOVU1CRVIge1xuICB2YWxpZGF0ZSh2YWx1ZSkge1xuICAgIGlmICghVmFsaWRhdG9yLmlzSW50KFN0cmluZyh2YWx1ZSkpKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdChgJWogaXMgbm90IGEgdmFsaWQgJHt0aGlzLmtleS50b0xvd2VyQ2FzZSgpfWAsIHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQSA4IGJpdCBpbnRlZ2VyXG4gKi9cbmNsYXNzIFRJTllJTlQgZXh0ZW5kcyBJTlRFR0VSIHtcbn1cblxuLyoqXG4gKiBBIDE2IGJpdCBpbnRlZ2VyXG4gKi9cbmNsYXNzIFNNQUxMSU5UIGV4dGVuZHMgSU5URUdFUiB7XG59XG5cbi8qKlxuICogQSAyNCBiaXQgaW50ZWdlclxuICovXG5jbGFzcyBNRURJVU1JTlQgZXh0ZW5kcyBJTlRFR0VSIHtcbn1cblxuLyoqXG4gKiBBIDY0IGJpdCBpbnRlZ2VyXG4gKi9cbmNsYXNzIEJJR0lOVCBleHRlbmRzIElOVEVHRVIge1xufVxuXG4vKipcbiAqIEZsb2F0aW5nIHBvaW50IG51bWJlciAoNC1ieXRlIHByZWNpc2lvbikuXG4gKi9cbmNsYXNzIEZMT0FUIGV4dGVuZHMgTlVNQkVSIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW2xlbmd0aF0gbGVuZ3RoIG9mIHR5cGUsIGxpa2UgYEZMT0FUKDQpYFxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtkZWNpbWFsc10gbnVtYmVyIG9mIGRlY2ltYWwgcG9pbnRzLCB1c2VkIHdpdGggbGVuZ3RoIGBGTE9BVCg1LCA0KWBcbiAgICovXG4gIGNvbnN0cnVjdG9yKGxlbmd0aCwgZGVjaW1hbHMpIHtcbiAgICBzdXBlcih0eXBlb2YgbGVuZ3RoID09PSAnb2JqZWN0JyAmJiBsZW5ndGggfHwgeyBsZW5ndGgsIGRlY2ltYWxzIH0pO1xuICB9XG4gIHZhbGlkYXRlKHZhbHVlKSB7XG4gICAgaWYgKCFWYWxpZGF0b3IuaXNGbG9hdChTdHJpbmcodmFsdWUpKSkge1xuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIGZsb2F0JywgdmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBGbG9hdGluZyBwb2ludCBudW1iZXIgKDQtYnl0ZSBwcmVjaXNpb24pLlxuICovXG5jbGFzcyBSRUFMIGV4dGVuZHMgTlVNQkVSIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW2xlbmd0aF0gbGVuZ3RoIG9mIHR5cGUsIGxpa2UgYFJFQUwoNClgXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW2RlY2ltYWxzXSBudW1iZXIgb2YgZGVjaW1hbCBwb2ludHMsIHVzZWQgd2l0aCBsZW5ndGggYFJFQUwoNSwgNClgXG4gICAqL1xuICBjb25zdHJ1Y3RvcihsZW5ndGgsIGRlY2ltYWxzKSB7XG4gICAgc3VwZXIodHlwZW9mIGxlbmd0aCA9PT0gJ29iamVjdCcgJiYgbGVuZ3RoIHx8IHsgbGVuZ3RoLCBkZWNpbWFscyB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEZsb2F0aW5nIHBvaW50IG51bWJlciAoOC1ieXRlIHByZWNpc2lvbikuXG4gKi9cbmNsYXNzIERPVUJMRSBleHRlbmRzIE5VTUJFUiB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtsZW5ndGhdIGxlbmd0aCBvZiB0eXBlLCBsaWtlIGBET1VCTEUgUFJFQ0lTSU9OKDI1KWBcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbZGVjaW1hbHNdIG51bWJlciBvZiBkZWNpbWFsIHBvaW50cywgdXNlZCB3aXRoIGxlbmd0aCBgRE9VQkxFIFBSRUNJU0lPTigyNSwgMTApYFxuICAgKi9cbiAgY29uc3RydWN0b3IobGVuZ3RoLCBkZWNpbWFscykge1xuICAgIHN1cGVyKHR5cGVvZiBsZW5ndGggPT09ICdvYmplY3QnICYmIGxlbmd0aCB8fCB7IGxlbmd0aCwgZGVjaW1hbHMgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWNpbWFsIHR5cGUsIHZhcmlhYmxlIHByZWNpc2lvbiwgdGFrZSBsZW5ndGggYXMgc3BlY2lmaWVkIGJ5IHVzZXJcbiAqL1xuY2xhc3MgREVDSU1BTCBleHRlbmRzIE5VTUJFUiB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtwcmVjaXNpb25dIGRlZmluZXMgcHJlY2lzaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW3NjYWxlXSBkZWZpbmVzIHNjYWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwcmVjaXNpb24sIHNjYWxlKSB7XG4gICAgc3VwZXIodHlwZW9mIHByZWNpc2lvbiA9PT0gJ29iamVjdCcgJiYgcHJlY2lzaW9uIHx8IHsgcHJlY2lzaW9uLCBzY2FsZSB9KTtcbiAgfVxuICB0b1NxbCgpIHtcbiAgICBpZiAodGhpcy5fcHJlY2lzaW9uIHx8IHRoaXMuX3NjYWxlKSB7XG4gICAgICByZXR1cm4gYERFQ0lNQUwoJHtbdGhpcy5fcHJlY2lzaW9uLCB0aGlzLl9zY2FsZV0uZmlsdGVyKF8uaWRlbnRpdHkpLmpvaW4oJywnKX0pYDtcbiAgICB9XG4gICAgcmV0dXJuICdERUNJTUFMJztcbiAgfVxuICB2YWxpZGF0ZSh2YWx1ZSkge1xuICAgIGlmICghVmFsaWRhdG9yLmlzRGVjaW1hbChTdHJpbmcodmFsdWUpKSkge1xuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIGRlY2ltYWwnLCB2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vLyBUT0RPOiBDcmVhdGUgaW50ZXJtZWRpYXRlIGNsYXNzXG5jb25zdCBwcm90b0V4dGVuc2lvbnMgPSB7XG4gIGVzY2FwZTogZmFsc2UsXG4gIF92YWx1ZSh2YWx1ZSkge1xuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnTmFOJztcbiAgICB9XG4gICAgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHNpZ24gPSB2YWx1ZSA8IDAgPyAnLScgOiAnJztcbiAgICAgIHJldHVybiBgJHtzaWdufUluZmluaXR5YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIF9zdHJpbmdpZnkodmFsdWUpIHtcbiAgICByZXR1cm4gYCcke3RoaXMuX3ZhbHVlKHZhbHVlKX0nYDtcbiAgfSxcbiAgX2JpbmRQYXJhbSh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmJpbmRQYXJhbSh0aGlzLl92YWx1ZSh2YWx1ZSkpO1xuICB9XG59O1xuXG5mb3IgKGNvbnN0IGZsb2F0aW5nIG9mIFtGTE9BVCwgRE9VQkxFLCBSRUFMXSkge1xuICBPYmplY3QuYXNzaWduKGZsb2F0aW5nLnByb3RvdHlwZSwgcHJvdG9FeHRlbnNpb25zKTtcbn1cblxuLyoqXG4gKiBBIGJvb2xlYW4gLyB0aW55aW50IGNvbHVtbiwgZGVwZW5kaW5nIG9uIGRpYWxlY3RcbiAqL1xuY2xhc3MgQk9PTEVBTiBleHRlbmRzIEFCU1RSQUNUIHtcbiAgdG9TcWwoKSB7XG4gICAgcmV0dXJuICdUSU5ZSU5UKDEpJztcbiAgfVxuICB2YWxpZGF0ZSh2YWx1ZSkge1xuICAgIGlmICghVmFsaWRhdG9yLmlzQm9vbGVhbihTdHJpbmcodmFsdWUpKSkge1xuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIGJvb2xlYW4nLCB2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBfc2FuaXRpemUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIEJpdCBmaWVsZHMgYXJlIHJldHVybmVkIGFzIGJ1ZmZlcnNcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gT25seSB0YWtlIGFjdGlvbiBvbiB2YWxpZCBib29sZWFuIHN0cmluZ3MuXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnID8gdHJ1ZSA6IHZhbHVlID09PSAnZmFsc2UnID8gZmFsc2UgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBPbmx5IHRha2UgYWN0aW9uIG9uIHZhbGlkIGJvb2xlYW4gaW50ZWdlcnMuXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gMSA/IHRydWUgOiB2YWx1ZSA9PT0gMCA/IGZhbHNlIDogdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5cbkJPT0xFQU4ucGFyc2UgPSBCT09MRUFOLnByb3RvdHlwZS5fc2FuaXRpemU7XG5cbi8qKlxuICogQSB0aW1lIGNvbHVtblxuICpcbiAqL1xuY2xhc3MgVElNRSBleHRlbmRzIEFCU1RSQUNUIHtcbiAgdG9TcWwoKSB7XG4gICAgcmV0dXJuICdUSU1FJztcbiAgfVxufVxuXG4vKipcbiAqIERhdGUgY29sdW1uIHdpdGggdGltZXpvbmUsIGRlZmF1bHQgaXMgVVRDXG4gKi9cbmNsYXNzIERBVEUgZXh0ZW5kcyBBQlNUUkFDVCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtsZW5ndGhdIHByZWNpc2lvbiB0byBhbGxvdyBzdG9yaW5nIG1pbGxpc2Vjb25kc1xuICAgKi9cbiAgY29uc3RydWN0b3IobGVuZ3RoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIGxlbmd0aCA9PT0gJ29iamVjdCcgJiYgbGVuZ3RoIHx8IHsgbGVuZ3RoIH07XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLl9sZW5ndGggPSBvcHRpb25zLmxlbmd0aCB8fCAnJztcbiAgfVxuICB0b1NxbCgpIHtcbiAgICByZXR1cm4gJ0RBVEVUSU1FJztcbiAgfVxuICB2YWxpZGF0ZSh2YWx1ZSkge1xuICAgIGlmICghVmFsaWRhdG9yLmlzRGF0ZShTdHJpbmcodmFsdWUpKSkge1xuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIGRhdGUnLCB2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBfc2FuaXRpemUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAoKCFvcHRpb25zIHx8IG9wdGlvbnMgJiYgIW9wdGlvbnMucmF3KSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgJiYgISF2YWx1ZSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIF9pc0NoYW5nZWQodmFsdWUsIG9yaWdpbmFsVmFsdWUpIHtcbiAgICBpZiAob3JpZ2luYWxWYWx1ZSAmJiAhIXZhbHVlICYmXG4gICAgICAodmFsdWUgPT09IG9yaWdpbmFsVmFsdWUgfHxcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIG9yaWdpbmFsVmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIHZhbHVlLmdldFRpbWUoKSA9PT0gb3JpZ2luYWxWYWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIG5vdCBjaGFuZ2VkIHdoZW4gc2V0IHRvIHNhbWUgZW1wdHkgdmFsdWVcbiAgICBpZiAoIW9yaWdpbmFsVmFsdWUgJiYgIXZhbHVlICYmIG9yaWdpbmFsVmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIF9hcHBseVRpbWV6b25lKGRhdGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy50aW1lem9uZSkge1xuICAgICAgaWYgKG1vbWVudFR6LnR6LnpvbmUob3B0aW9ucy50aW1lem9uZSkpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudFR6KGRhdGUpLnR6KG9wdGlvbnMudGltZXpvbmUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGUgPSBtb21lbnQoZGF0ZSkudXRjT2Zmc2V0KG9wdGlvbnMudGltZXpvbmUpO1xuICAgIH1cbiAgICByZXR1cm4gbW9tZW50VHooZGF0ZSk7XG4gIH1cbiAgX3N0cmluZ2lmeShkYXRlLCBvcHRpb25zKSB7XG4gICAgZGF0ZSA9IHRoaXMuX2FwcGx5VGltZXpvbmUoZGF0ZSwgb3B0aW9ucyk7XG4gICAgLy8gWiBoZXJlIG1lYW5zIGN1cnJlbnQgdGltZXpvbmUsIF9ub3RfIFVUQ1xuICAgIHJldHVybiBkYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcy5TU1MgWicpO1xuICB9XG59XG5cbi8qKlxuICogQSBkYXRlIG9ubHkgY29sdW1uIChubyB0aW1lc3RhbXApXG4gKi9cbmNsYXNzIERBVEVPTkxZIGV4dGVuZHMgQUJTVFJBQ1Qge1xuICB0b1NxbCgpIHtcbiAgICByZXR1cm4gJ0RBVEUnO1xuICB9XG4gIF9zdHJpbmdpZnkoZGF0ZSkge1xuICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gIH1cbiAgX3Nhbml0aXplKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgaWYgKCghb3B0aW9ucyB8fCBvcHRpb25zICYmICFvcHRpb25zLnJhdykgJiYgISF2YWx1ZSkge1xuICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBfaXNDaGFuZ2VkKHZhbHVlLCBvcmlnaW5hbFZhbHVlKSB7XG4gICAgaWYgKG9yaWdpbmFsVmFsdWUgJiYgISF2YWx1ZSAmJiBvcmlnaW5hbFZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBub3QgY2hhbmdlZCB3aGVuIHNldCB0byBzYW1lIGVtcHR5IHZhbHVlXG4gICAgaWYgKCFvcmlnaW5hbFZhbHVlICYmICF2YWx1ZSAmJiBvcmlnaW5hbFZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEEga2V5IC8gdmFsdWUgc3RvcmUgY29sdW1uLiBPbmx5IGF2YWlsYWJsZSBpbiBQb3N0Z3Jlcy5cbiAqL1xuY2xhc3MgSFNUT1JFIGV4dGVuZHMgQUJTVFJBQ1Qge1xuICB2YWxpZGF0ZSh2YWx1ZSkge1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3IodXRpbC5mb3JtYXQoJyVqIGlzIG5vdCBhIHZhbGlkIGhzdG9yZScsIHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQSBKU09OIHN0cmluZyBjb2x1bW4uIEF2YWlsYWJsZSBpbiBNeVNRTCwgUG9zdGdyZXMgYW5kIFNRTGl0ZVxuICovXG5jbGFzcyBKU09OVFlQRSBleHRlbmRzIEFCU1RSQUNUIHtcbiAgdmFsaWRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgX3N0cmluZ2lmeSh2YWx1ZSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGJpbmFyeSBzdG9yYWdlIEpTT04gY29sdW1uLiBPbmx5IGF2YWlsYWJsZSBpbiBQb3N0Z3Jlcy5cbiAqL1xuY2xhc3MgSlNPTkIgZXh0ZW5kcyBKU09OVFlQRSB7XG59XG5cbi8qKlxuICogQSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbWVzdGFtcFxuICovXG5jbGFzcyBOT1cgZXh0ZW5kcyBBQlNUUkFDVCB7XG59XG5cbi8qKlxuICogQmluYXJ5IHN0b3JhZ2VcbiAqL1xuY2xhc3MgQkxPQiBleHRlbmRzIEFCU1RSQUNUIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPScnXSBjb3VsZCBiZSB0aW55LCBtZWRpdW0sIGxvbmcuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihsZW5ndGgpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2YgbGVuZ3RoID09PSAnb2JqZWN0JyAmJiBsZW5ndGggfHwgeyBsZW5ndGggfTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuX2xlbmd0aCA9IG9wdGlvbnMubGVuZ3RoIHx8ICcnO1xuICB9XG4gIHRvU3FsKCkge1xuICAgIHN3aXRjaCAodGhpcy5fbGVuZ3RoLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ3RpbnknOlxuICAgICAgICByZXR1cm4gJ1RJTllCTE9CJztcbiAgICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICAgIHJldHVybiAnTUVESVVNQkxPQic7XG4gICAgICBjYXNlICdsb25nJzpcbiAgICAgICAgcmV0dXJuICdMT05HQkxPQic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5rZXk7XG4gICAgfVxuICB9XG4gIHZhbGlkYXRlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKHV0aWwuZm9ybWF0KCclaiBpcyBub3QgYSB2YWxpZCBibG9iJywgdmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgX3N0cmluZ2lmeSh2YWx1ZSkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGhleCA9IHZhbHVlLnRvU3RyaW5nKCdoZXgnKTtcbiAgICByZXR1cm4gdGhpcy5faGV4aWZ5KGhleCk7XG4gIH1cbiAgX2hleGlmeShoZXgpIHtcbiAgICByZXR1cm4gYFgnJHtoZXh9J2A7XG4gIH1cbiAgX2JpbmRQYXJhbSh2YWx1ZSwgb3B0aW9ucykge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmJpbmRQYXJhbSh2YWx1ZSk7XG4gIH1cbn1cblxuXG5CTE9CLnByb3RvdHlwZS5lc2NhcGUgPSBmYWxzZTtcblxuLyoqXG4gKiBSYW5nZSB0eXBlcyBhcmUgZGF0YSB0eXBlcyByZXByZXNlbnRpbmcgYSByYW5nZSBvZiB2YWx1ZXMgb2Ygc29tZSBlbGVtZW50IHR5cGUgKGNhbGxlZCB0aGUgcmFuZ2UncyBzdWJ0eXBlKS5cbiAqIE9ubHkgYXZhaWxhYmxlIGluIFBvc3RncmVzLiBTZWUgW3RoZSBQb3N0Z3JlcyBkb2N1bWVudGF0aW9uXShodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvOS40L3N0YXRpYy9yYW5nZXR5cGVzLmh0bWwpIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuY2xhc3MgUkFOR0UgZXh0ZW5kcyBBQlNUUkFDVCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0FCU1RSQUNUfSBzdWJ0eXBlIEEgc3VidHlwZSBmb3IgcmFuZ2UsIGxpa2UgUkFOR0UoREFURSlcbiAgICovXG4gIGNvbnN0cnVjdG9yKHN1YnR5cGUpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBfLmlzUGxhaW5PYmplY3Qoc3VidHlwZSkgPyBzdWJ0eXBlIDogeyBzdWJ0eXBlIH07XG4gICAgaWYgKCFvcHRpb25zLnN1YnR5cGUpXG4gICAgICBvcHRpb25zLnN1YnR5cGUgPSBuZXcgSU5URUdFUigpO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zdWJ0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRpb25zLnN1YnR5cGUgPSBuZXcgb3B0aW9ucy5zdWJ0eXBlKCk7XG4gICAgfVxuICAgIHRoaXMuX3N1YnR5cGUgPSBvcHRpb25zLnN1YnR5cGUua2V5O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cbiAgdmFsaWRhdGUodmFsdWUpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgcmFuZ2UnLCB2YWx1ZSkpO1xuICAgIH1cbiAgICBpZiAodmFsdWUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcignQSByYW5nZSBtdXN0IGJlIGFuIGFycmF5IHdpdGggdHdvIGVsZW1lbnRzJyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQSBjb2x1bW4gc3RvcmluZyBhIHVuaXF1ZSB1bml2ZXJzYWwgaWRlbnRpZmllci5cbiAqIFVzZSB3aXRoIGBVVUlEVjFgIG9yIGBVVUlEVjRgIGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqL1xuY2xhc3MgVVVJRCBleHRlbmRzIEFCU1RSQUNUIHtcbiAgdmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhVmFsaWRhdG9yLmlzVVVJRCh2YWx1ZSkgJiYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmFjY2VwdFN0cmluZ3MpKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgdXVpZCcsIHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQSBkZWZhdWx0IHVuaXF1ZSB1bml2ZXJzYWwgaWRlbnRpZmllciBnZW5lcmF0ZWQgZm9sbG93aW5nIHRoZSBVVUlEIHYxIHN0YW5kYXJkXG4gKi9cbmNsYXNzIFVVSURWMSBleHRlbmRzIEFCU1RSQUNUIHtcbiAgdmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhVmFsaWRhdG9yLmlzVVVJRCh2YWx1ZSkgJiYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmFjY2VwdFN0cmluZ3MpKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgdXVpZCcsIHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQSBkZWZhdWx0IHVuaXF1ZSB1bml2ZXJzYWwgaWRlbnRpZmllciBnZW5lcmF0ZWQgZm9sbG93aW5nIHRoZSBVVUlEIHY0IHN0YW5kYXJkXG4gKi9cbmNsYXNzIFVVSURWNCBleHRlbmRzIEFCU1RSQUNUIHtcbiAgdmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhVmFsaWRhdG9yLmlzVVVJRCh2YWx1ZSwgNCkgJiYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmFjY2VwdFN0cmluZ3MpKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgdXVpZHY0JywgdmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHZpcnR1YWwgdmFsdWUgdGhhdCBpcyBub3Qgc3RvcmVkIGluIHRoZSBEQi4gVGhpcyBjb3VsZCBmb3IgZXhhbXBsZSBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUgaW4geW91ciBtb2RlbCB0aGF0IGlzIHJldHVybmVkIHRvIHRoZSB1c2VyIGJ1dCBub3Qgc3RvcmVkIGluIHRoZSBEQi5cbiAqXG4gKiBZb3UgY291bGQgYWxzbyB1c2UgaXQgdG8gdmFsaWRhdGUgYSB2YWx1ZSBiZWZvcmUgcGVybXV0aW5nIGFuZCBzdG9yaW5nIGl0LiBWSVJUVUFMIGFsc28gdGFrZXMgYSByZXR1cm4gdHlwZSBhbmQgZGVwZW5kZW5jeSBmaWVsZHMgYXMgYXJndW1lbnRzXG4gKiBJZiBhIHZpcnR1YWwgYXR0cmlidXRlIGlzIHByZXNlbnQgaW4gYGF0dHJpYnV0ZXNgIGl0IHdpbGwgYXV0b21hdGljYWxseSBwdWxsIGluIHRoZSBleHRyYSBmaWVsZHMgYXMgd2VsbC5cbiAqIFJldHVybiB0eXBlIGlzIG1vc3RseSB1c2VmdWwgZm9yIHNldHVwcyB0aGF0IHJlbHkgb24gdHlwZXMgbGlrZSBHcmFwaFFMLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNoZWNraW5nIHBhc3N3b3JkIGxlbmd0aCBiZWZvcmUgaGFzaGluZyBpdDwvY2FwdGlvbj5cbiAqIHNlcXVlbGl6ZS5kZWZpbmUoJ3VzZXInLCB7XG4gKiAgIHBhc3N3b3JkX2hhc2g6IERhdGFUeXBlcy5TVFJJTkcsXG4gKiAgIHBhc3N3b3JkOiB7XG4gKiAgICAgdHlwZTogRGF0YVR5cGVzLlZJUlRVQUwsXG4gKiAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gKiAgICAgICAgLy8gUmVtZW1iZXIgdG8gc2V0IHRoZSBkYXRhIHZhbHVlLCBvdGhlcndpc2UgaXQgd29uJ3QgYmUgdmFsaWRhdGVkXG4gKiAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoJ3Bhc3N3b3JkJywgdmFsKTtcbiAqICAgICAgICB0aGlzLnNldERhdGFWYWx1ZSgncGFzc3dvcmRfaGFzaCcsIHRoaXMuc2FsdCArIHZhbCk7XG4gKiAgICAgIH0sXG4gKiAgICAgIHZhbGlkYXRlOiB7XG4gKiAgICAgICAgIGlzTG9uZ0Vub3VnaDogZnVuY3Rpb24gKHZhbCkge1xuICogICAgICAgICAgIGlmICh2YWwubGVuZ3RoIDwgNykge1xuICogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIGNob29zZSBhIGxvbmdlciBwYXNzd29yZFwiKVxuICogICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfVxuICogfSlcbiAqXG4gKiAjIEluIHRoZSBhYm92ZSBjb2RlIHRoZSBwYXNzd29yZCBpcyBzdG9yZWQgcGxhaW5seSBpbiB0aGUgcGFzc3dvcmQgZmllbGQgc28gaXQgY2FuIGJlIHZhbGlkYXRlZCwgYnV0IGlzIG5ldmVyIHN0b3JlZCBpbiB0aGUgREIuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+VmlydHVhbCB3aXRoIGRlcGVuZGVuY3kgZmllbGRzPC9jYXB0aW9uPlxuICoge1xuICogICBhY3RpdmU6IHtcbiAqICAgICB0eXBlOiBuZXcgRGF0YVR5cGVzLlZJUlRVQUwoRGF0YVR5cGVzLkJPT0xFQU4sIFsnY3JlYXRlZEF0J10pLFxuICogICAgIGdldDogZnVuY3Rpb24oKSB7XG4gKiAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2NyZWF0ZWRBdCcpID4gRGF0ZS5ub3coKSAtICg3ICogMjQgKiA2MCAqIDYwICogMTAwMClcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqXG4gKi9cbmNsYXNzIFZJUlRVQUwgZXh0ZW5kcyBBQlNUUkFDVCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0FCU1RSQUNUfSBbUmV0dXJuVHlwZV0gcmV0dXJuIHR5cGUgZm9yIHZpcnR1YWwgdHlwZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbZmllbGRzXSBhcnJheSBvZiBmaWVsZHMgdGhpcyB2aXJ0dWFsIHR5cGUgaXMgZGVwZW5kZW50IG9uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihSZXR1cm5UeXBlLCBmaWVsZHMpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICh0eXBlb2YgUmV0dXJuVHlwZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIFJldHVyblR5cGUgPSBuZXcgUmV0dXJuVHlwZSgpO1xuICAgIHRoaXMucmV0dXJuVHlwZSA9IFJldHVyblR5cGU7XG4gICAgdGhpcy5maWVsZHMgPSBmaWVsZHM7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBlbnVtZXJhdGlvbiwgUG9zdGdyZXMgT25seVxuICpcbiAqIEBleGFtcGxlXG4gKiBEYXRhVHlwZXMuRU5VTSgndmFsdWUnLCAnYW5vdGhlciB2YWx1ZScpXG4gKiBEYXRhVHlwZXMuRU5VTShbJ3ZhbHVlJywgJ2Fub3RoZXIgdmFsdWUnXSlcbiAqIERhdGFUeXBlcy5FTlVNKHtcbiAqICAgdmFsdWVzOiBbJ3ZhbHVlJywgJ2Fub3RoZXIgdmFsdWUnXVxuICogfSlcbiAqL1xuY2xhc3MgRU5VTSBleHRlbmRzIEFCU1RSQUNUIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Li4uYW55fHsgdmFsdWVzOiBhbnlbXSB9fGFueVtdfSBhcmdzIGVpdGhlciBhcnJheSBvZiB2YWx1ZXMgb3Igb3B0aW9ucyBvYmplY3Qgd2l0aCB2YWx1ZXMgYXJyYXkuIEl0IGFsc28gc3VwcG9ydHMgdmFyaWFkaWMgdmFsdWVzXG4gICAqL1xuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB2YWx1ZSA9IGFyZ3NbMF07XG4gICAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlIHx8IHtcbiAgICAgIHZhbHVlczogYXJncy5yZWR1Y2UoKHJlc3VsdCwgZWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0LmNvbmNhdChBcnJheS5pc0FycmF5KGVsZW1lbnQpID8gZWxlbWVudCA6IFtlbGVtZW50XSk7XG4gICAgICB9LCBbXSlcbiAgICB9O1xuICAgIHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXM7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuICB2YWxpZGF0ZSh2YWx1ZSkge1xuICAgIGlmICghdGhpcy52YWx1ZXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgY2hvaWNlIGluICVqJywgdmFsdWUsIHRoaXMudmFsdWVzKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQW4gYXJyYXkgb2YgYHR5cGVgLiBPbmx5IGF2YWlsYWJsZSBpbiBQb3N0Z3Jlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogRGF0YVR5cGVzLkFSUkFZKERhdGFUeXBlcy5ERUNJTUFMKVxuICovXG5jbGFzcyBBUlJBWSBleHRlbmRzIEFCU1RSQUNUIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QUJTVFJBQ1R9IHR5cGUgdHlwZSBvZiBhcnJheSB2YWx1ZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHR5cGUpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBfLmlzUGxhaW5PYmplY3QodHlwZSkgPyB0eXBlIDogeyB0eXBlIH07XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnR5cGUgPSB0eXBlb2Ygb3B0aW9ucy50eXBlID09PSAnZnVuY3Rpb24nID8gbmV3IG9wdGlvbnMudHlwZSgpIDogb3B0aW9ucy50eXBlO1xuICB9XG4gIHRvU3FsKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnR5cGUudG9TcWwoKX1bXWA7XG4gIH1cbiAgdmFsaWRhdGUodmFsdWUpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgYXJyYXknLCB2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzdGF0aWMgaXMob2JqLCB0eXBlKSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEFSUkFZICYmIG9iai50eXBlIGluc3RhbmNlb2YgdHlwZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBjaWRyIHR5cGUgaG9sZHMgYW4gSVB2NCBvciBJUHY2IG5ldHdvcmsgc3BlY2lmaWNhdGlvbi4gVGFrZXMgNyBvciAxOSBieXRlcy5cbiAqXG4gKiBPbmx5IGF2YWlsYWJsZSBmb3IgUG9zdGdyZXNcbiAqL1xuY2xhc3MgQ0lEUiBleHRlbmRzIEFCU1RSQUNUIHtcbiAgdmFsaWRhdGUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhVmFsaWRhdG9yLmlzSVBSYW5nZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKHV0aWwuZm9ybWF0KCclaiBpcyBub3QgYSB2YWxpZCBDSURSJywgdmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgSU5FVCB0eXBlIGhvbGRzIGFuIElQdjQgb3IgSVB2NiBob3N0IGFkZHJlc3MsIGFuZCBvcHRpb25hbGx5IGl0cyBzdWJuZXQuIFRha2VzIDcgb3IgMTkgYnl0ZXNcbiAqXG4gKiBPbmx5IGF2YWlsYWJsZSBmb3IgUG9zdGdyZXNcbiAqL1xuY2xhc3MgSU5FVCBleHRlbmRzIEFCU1RSQUNUIHtcbiAgdmFsaWRhdGUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhVmFsaWRhdG9yLmlzSVAodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvcih1dGlsLmZvcm1hdCgnJWogaXMgbm90IGEgdmFsaWQgSU5FVCcsIHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogVGhlIE1BQ0FERFIgdHlwZSBzdG9yZXMgTUFDIGFkZHJlc3Nlcy4gVGFrZXMgNiBieXRlc1xuICpcbiAqIE9ubHkgYXZhaWxhYmxlIGZvciBQb3N0Z3Jlc1xuICpcbiAqL1xuY2xhc3MgTUFDQUREUiBleHRlbmRzIEFCU1RSQUNUIHtcbiAgdmFsaWRhdGUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhVmFsaWRhdG9yLmlzTUFDQWRkcmVzcyh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9yKHV0aWwuZm9ybWF0KCclaiBpcyBub3QgYSB2YWxpZCBNQUNBRERSJywgdmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbnZlbmllbmNlIGNsYXNzIGhvbGRpbmcgY29tbW9ubHkgdXNlZCBkYXRhIHR5cGVzLiBUaGUgZGF0YSB0eXBlcyBhcmUgdXNlZCB3aGVuIGRlZmluaW5nIGEgbmV3IG1vZGVsIHVzaW5nIGBTZXF1ZWxpemUuZGVmaW5lYCwgbGlrZSB0aGlzOlxuICogYGBganNcbiAqIHNlcXVlbGl6ZS5kZWZpbmUoJ21vZGVsJywge1xuICogICBjb2x1bW46IERhdGFUeXBlcy5JTlRFR0VSXG4gKiB9KVxuICogYGBgXG4gKiBXaGVuIGRlZmluaW5nIGEgbW9kZWwgeW91IGNhbiBqdXN0IGFzIGVhc2lseSBwYXNzIGEgc3RyaW5nIGFzIHR5cGUsIGJ1dCBvZnRlbiB1c2luZyB0aGUgdHlwZXMgZGVmaW5lZCBoZXJlIGlzIGJlbmVmaWNpYWwuIEZvciBleGFtcGxlLCB1c2luZyBgRGF0YVR5cGVzLkJMT0JgLCBtZWFuXG4gKiB0aGF0IHRoYXQgY29sdW1uIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gaW5zdGFuY2Ugb2YgYEJ1ZmZlcmAgd2hlbiBiZWluZyBmZXRjaGVkIGJ5IHNlcXVlbGl6ZS5cbiAqXG4gKiBUbyBwcm92aWRlIGEgbGVuZ3RoIGZvciB0aGUgZGF0YSB0eXBlLCB5b3UgY2FuIGludm9rZSBpdCBsaWtlIGEgZnVuY3Rpb246IGBJTlRFR0VSKDIpYFxuICpcbiAqIFNvbWUgZGF0YSB0eXBlcyBoYXZlIHNwZWNpYWwgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBpbiBvcmRlciB0byBjaGFuZ2UgdGhlIGRhdGEgdHlwZS5cbiAqIEZvciBleGFtcGxlLCB0byBnZXQgYW4gdW5zaWduZWQgaW50ZWdlciB3aXRoIHplcm9maWxsIHlvdSBjYW4gZG8gYERhdGFUeXBlcy5JTlRFR0VSLlVOU0lHTkVELlpFUk9GSUxMYC5cbiAqIFRoZSBvcmRlciB5b3UgYWNjZXNzIHRoZSBwcm9wZXJ0aWVzIGluIGRvIG5vdCBtYXR0ZXIsIHNvIGBEYXRhVHlwZXMuSU5URUdFUi5aRVJPRklMTC5VTlNJR05FRGAgaXMgZmluZSBhcyB3ZWxsLlxuICpcbiAqICogQWxsIG51bWJlciB0eXBlcyAoYElOVEVHRVJgLCBgQklHSU5UYCwgYEZMT0FUYCwgYERPVUJMRWAsIGBSRUFMYCwgYERFQ0lNQUxgKSBleHBvc2UgdGhlIHByb3BlcnRpZXMgYFVOU0lHTkVEYCBhbmQgYFpFUk9GSUxMYFxuICogKiBUaGUgYENIQVJgIGFuZCBgU1RSSU5HYCB0eXBlcyBleHBvc2UgdGhlIGBCSU5BUllgIHByb3BlcnR5XG4gKlxuICogVGhyZWUgb2YgdGhlIHZhbHVlcyBwcm92aWRlZCBoZXJlIChgTk9XYCwgYFVVSURWMWAgYW5kIGBVVUlEVjRgKSBhcmUgc3BlY2lhbCBkZWZhdWx0IHZhbHVlcywgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQgdG8gZGVmaW5lIHR5cGVzLiBJbnN0ZWFkIHRoZXkgYXJlIHVzZWQgYXMgc2hvcnRoYW5kcyBmb3JcbiAqIGRlZmluaW5nIGRlZmF1bHQgdmFsdWVzLiBGb3IgZXhhbXBsZSwgdG8gZ2V0IGEgdXVpZCBmaWVsZCB3aXRoIGEgZGVmYXVsdCB2YWx1ZSBnZW5lcmF0ZWQgZm9sbG93aW5nIHYxIG9mIHRoZSBVVUlEIHN0YW5kYXJkOlxuICogYGBganNcbiAqIHNlcXVlbGl6ZS5kZWZpbmUoJ21vZGVsJywge1xuICogICB1dWlkOiB7XG4gKiAgICAgdHlwZTogRGF0YVR5cGVzLlVVSUQsXG4gKiAgICAgZGVmYXVsdFZhbHVlOiBEYXRhVHlwZXMuVVVJRFYxLFxuICogICAgIHByaW1hcnlLZXk6IHRydWVcbiAqICAgfVxuICogfSlcbiAqIGBgYFxuICogVGhlcmUgbWF5IGJlIHRpbWVzIHdoZW4geW91IHdhbnQgdG8gZ2VuZXJhdGUgeW91ciBvd24gVVVJRCBjb25mb3JtaW5nIHRvIHNvbWUgb3RoZXIgYWxnb3JpdGhtLiBUaGlzIGlzIGFjY29tcGxpc2hlZFxuICogdXNpbmcgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eSBhcyB3ZWxsLCBidXQgaW5zdGVhZCBvZiBzcGVjaWZ5aW5nIG9uZSBvZiB0aGUgc3VwcGxpZWQgVVVJRCB0eXBlcywgeW91IHJldHVybiBhIHZhbHVlXG4gKiBmcm9tIGEgZnVuY3Rpb24uXG4gKiBgYGBqc1xuICogc2VxdWVsaXplLmRlZmluZSgnbW9kZWwnLCB7XG4gKiAgIHV1aWQ6IHtcbiAqICAgICB0eXBlOiBEYXRhVHlwZXMuVVVJRCxcbiAqICAgICBkZWZhdWx0VmFsdWU6IGZ1bmN0aW9uKCkge1xuICogICAgICAgcmV0dXJuIGdlbmVyYXRlTXlJZCgpXG4gKiAgICAgfSxcbiAqICAgICBwcmltYXJ5S2V5OiB0cnVlXG4gKiAgIH1cbiAqIH0pXG4gKiBgYGBcbiAqL1xuY29uc3QgRGF0YVR5cGVzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCU1RSQUNULFxuICBTVFJJTkcsXG4gIENIQVIsXG4gIFRFWFQsXG4gIE5VTUJFUixcbiAgVElOWUlOVCxcbiAgU01BTExJTlQsXG4gIE1FRElVTUlOVCxcbiAgSU5URUdFUixcbiAgQklHSU5ULFxuICBGTE9BVCxcbiAgVElNRSxcbiAgREFURSxcbiAgREFURU9OTFksXG4gIEJPT0xFQU4sXG4gIE5PVyxcbiAgQkxPQixcbiAgREVDSU1BTCxcbiAgTlVNRVJJQzogREVDSU1BTCxcbiAgVVVJRCxcbiAgVVVJRFYxLFxuICBVVUlEVjQsXG4gIEhTVE9SRSxcbiAgSlNPTjogSlNPTlRZUEUsXG4gIEpTT05CLFxuICBWSVJUVUFMLFxuICBBUlJBWSxcbiAgRU5VTSxcbiAgUkFOR0UsXG4gIFJFQUwsXG4gICdET1VCTEUgUFJFQ0lTSU9OJzogRE9VQkxFLFxuICBET1VCTEUsXG4gIENJRFIsXG4gIElORVQsXG4gIE1BQ0FERFIsXG4gIENJVEVYVFxufTtcblxuXy5lYWNoKERhdGFUeXBlcywgKGRhdGFUeXBlLCBuYW1lKSA9PiB7XG4gIC8vIGd1YXJkIGZvciBhbGlhc2VzXG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGFUeXBlLCAna2V5JykpIHtcbiAgICBkYXRhVHlwZS50eXBlcyA9IHt9O1xuICAgIGRhdGFUeXBlLmtleSA9IGRhdGFUeXBlLnByb3RvdHlwZS5rZXkgPSBuYW1lO1xuICB9XG59KTtcblxuY29uc3QgZGlhbGVjdE1hcCA9IHt9O1xuLyogZGlhbGVjdE1hcC5wb3N0Z3JlcyA9IHJlcXVpcmUoJy4vZGlhbGVjdHMvcG9zdGdyZXMvZGF0YS10eXBlcycpKERhdGFUeXBlcyk7XG5kaWFsZWN0TWFwLm15c3FsID0gcmVxdWlyZSgnLi9kaWFsZWN0cy9teXNxbC9kYXRhLXR5cGVzJykoRGF0YVR5cGVzKTtcbmRpYWxlY3RNYXAubWFyaWFkYiA9IHJlcXVpcmUoJy4vZGlhbGVjdHMvbWFyaWFkYi9kYXRhLXR5cGVzJykoRGF0YVR5cGVzKTsgKi9cbmRpYWxlY3RNYXAuc3FsaXRlID0gcmVxdWlyZSgnLi9kaWFsZWN0cy9zcWxpdGUvZGF0YS10eXBlcycpKERhdGFUeXBlcyk7XG4vKiBkaWFsZWN0TWFwLm1zc3FsID0gcmVxdWlyZSgnLi9kaWFsZWN0cy9tc3NxbC9kYXRhLXR5cGVzJykoRGF0YVR5cGVzKTsgKi9cblxuY29uc3QgZGlhbGVjdExpc3QgPSBfLnZhbHVlcyhkaWFsZWN0TWFwKTtcblxuZm9yIChjb25zdCBkYXRhVHlwZXMgb2YgZGlhbGVjdExpc3QpIHtcbiAgXy5lYWNoKGRhdGFUeXBlcywgKERhdGFUeXBlLCBrZXkpID0+IHtcbiAgICBpZiAoIURhdGFUeXBlLmtleSkge1xuICAgICAgRGF0YVR5cGUua2V5ID0gRGF0YVR5cGUucHJvdG90eXBlLmtleSA9IGtleTtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyBXcmFwIGFsbCBkYXRhIHR5cGVzIHRvIG5vdCByZXF1aXJlIGBuZXdgXG5mb3IgKGNvbnN0IGRhdGFUeXBlcyBvZiBbRGF0YVR5cGVzLCAuLi5kaWFsZWN0TGlzdF0pIHtcbiAgXy5lYWNoKGRhdGFUeXBlcywgKERhdGFUeXBlLCBrZXkpID0+IHtcbiAgICBkYXRhVHlwZXNba2V5XSA9IGNsYXNzVG9JbnZva2FibGUoRGF0YVR5cGUpO1xuICB9KTtcbn1cblxuT2JqZWN0LmFzc2lnbihEYXRhVHlwZXMsIGRpYWxlY3RNYXApO1xuIl19 \ No newline at end of file diff --git a/dist/deferrable.js b/dist/deferrable.js index 05a4650..c0db00a 100644 --- a/dist/deferrable.js +++ b/dist/deferrable.js @@ -1,14 +1,18 @@ 'use strict'; +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -20,9 +24,7 @@ const { classToInvokable } = require('./utils'); -let ABSTRACT = -/*#__PURE__*/ -function () { +let ABSTRACT = /*#__PURE__*/function () { function ABSTRACT() { _classCallCheck(this, ABSTRACT); } @@ -47,15 +49,15 @@ function () { return ABSTRACT; }(); -let INITIALLY_DEFERRED = -/*#__PURE__*/ -function (_ABSTRACT) { +let INITIALLY_DEFERRED = /*#__PURE__*/function (_ABSTRACT) { _inherits(INITIALLY_DEFERRED, _ABSTRACT); + var _super = _createSuper(INITIALLY_DEFERRED); + function INITIALLY_DEFERRED() { _classCallCheck(this, INITIALLY_DEFERRED); - return _possibleConstructorReturn(this, _getPrototypeOf(INITIALLY_DEFERRED).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(INITIALLY_DEFERRED, [{ @@ -68,15 +70,15 @@ function (_ABSTRACT) { return INITIALLY_DEFERRED; }(ABSTRACT); -let INITIALLY_IMMEDIATE = -/*#__PURE__*/ -function (_ABSTRACT2) { +let INITIALLY_IMMEDIATE = /*#__PURE__*/function (_ABSTRACT2) { _inherits(INITIALLY_IMMEDIATE, _ABSTRACT2); + var _super2 = _createSuper(INITIALLY_IMMEDIATE); + function INITIALLY_IMMEDIATE() { _classCallCheck(this, INITIALLY_IMMEDIATE); - return _possibleConstructorReturn(this, _getPrototypeOf(INITIALLY_IMMEDIATE).apply(this, arguments)); + return _super2.apply(this, arguments); } _createClass(INITIALLY_IMMEDIATE, [{ @@ -89,15 +91,15 @@ function (_ABSTRACT2) { return INITIALLY_IMMEDIATE; }(ABSTRACT); -let NOT = -/*#__PURE__*/ -function (_ABSTRACT3) { +let NOT = /*#__PURE__*/function (_ABSTRACT3) { _inherits(NOT, _ABSTRACT3); + var _super3 = _createSuper(NOT); + function NOT() { _classCallCheck(this, NOT); - return _possibleConstructorReturn(this, _getPrototypeOf(NOT).apply(this, arguments)); + return _super3.apply(this, arguments); } _createClass(NOT, [{ @@ -110,17 +112,17 @@ function (_ABSTRACT3) { return NOT; }(ABSTRACT); -let SET_DEFERRED = -/*#__PURE__*/ -function (_ABSTRACT4) { +let SET_DEFERRED = /*#__PURE__*/function (_ABSTRACT4) { _inherits(SET_DEFERRED, _ABSTRACT4); + var _super4 = _createSuper(SET_DEFERRED); + function SET_DEFERRED(constraints) { var _this; _classCallCheck(this, SET_DEFERRED); - _this = _possibleConstructorReturn(this, _getPrototypeOf(SET_DEFERRED).call(this)); + _this = _super4.call(this); _this.constraints = constraints; return _this; } @@ -135,17 +137,17 @@ function (_ABSTRACT4) { return SET_DEFERRED; }(ABSTRACT); -let SET_IMMEDIATE = -/*#__PURE__*/ -function (_ABSTRACT5) { +let SET_IMMEDIATE = /*#__PURE__*/function (_ABSTRACT5) { _inherits(SET_IMMEDIATE, _ABSTRACT5); + var _super5 = _createSuper(SET_IMMEDIATE); + function SET_IMMEDIATE(constraints) { var _this2; _classCallCheck(this, SET_IMMEDIATE); - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(SET_IMMEDIATE).call(this)); + _this2 = _super5.call(this); _this2.constraints = constraints; return _this2; } @@ -206,4 +208,4 @@ const Deferrable = module.exports = { SET_DEFERRED: classToInvokable(SET_DEFERRED), SET_IMMEDIATE: classToInvokable(SET_IMMEDIATE) }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWZlcnJhYmxlLmpzIl0sIm5hbWVzIjpbImNsYXNzVG9JbnZva2FibGUiLCJyZXF1aXJlIiwiQUJTVFJBQ1QiLCJhcmdzIiwidG9TcWwiLCJFcnJvciIsInRvU3RyaW5nIiwiSU5JVElBTExZX0RFRkVSUkVEIiwiSU5JVElBTExZX0lNTUVESUFURSIsIk5PVCIsIlNFVF9ERUZFUlJFRCIsImNvbnN0cmFpbnRzIiwicXVlcnlHZW5lcmF0b3IiLCJzZXREZWZlcnJlZFF1ZXJ5IiwiU0VUX0lNTUVESUFURSIsInNldEltbWVkaWF0ZVF1ZXJ5IiwiRGVmZXJyYWJsZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBdUJDLE9BQU8sQ0FBQyxTQUFELENBQXBDOztJQUVNQyxROzs7Ozs7Ozs7NkJBS0ssR0FBR0MsSSxFQUFNO0FBQ2hCLGFBQU8sS0FBS0MsS0FBTCxDQUFXLEdBQUdELElBQWQsQ0FBUDtBQUNEOzs7NEJBRU87QUFDTixZQUFNLElBQUlFLEtBQUosQ0FBVSw4QkFBVixDQUFOO0FBQ0Q7Ozs2QkFWZSxHQUFHRixJLEVBQU07QUFDdkIsYUFBTyxJQUFJLElBQUosR0FBV0csUUFBWCxDQUFvQixHQUFHSCxJQUF2QixDQUFQO0FBQ0Q7Ozs7OztJQVdHSSxrQjs7Ozs7Ozs7Ozs7Ozs0QkFDSTtBQUNOLGFBQU8sK0JBQVA7QUFDRDs7OztFQUg4QkwsUTs7SUFNM0JNLG1COzs7Ozs7Ozs7Ozs7OzRCQUNJO0FBQ04sYUFBTyxnQ0FBUDtBQUNEOzs7O0VBSCtCTixROztJQU01Qk8sRzs7Ozs7Ozs7Ozs7Ozs0QkFDSTtBQUNOLGFBQU8sZ0JBQVA7QUFDRDs7OztFQUhlUCxROztJQU1aUSxZOzs7OztBQUNKLHdCQUFZQyxXQUFaLEVBQXlCO0FBQUE7O0FBQUE7O0FBQ3ZCO0FBQ0EsVUFBS0EsV0FBTCxHQUFtQkEsV0FBbkI7QUFGdUI7QUFHeEI7Ozs7MEJBRUtDLGMsRUFBZ0I7QUFDcEIsYUFBT0EsY0FBYyxDQUFDQyxnQkFBZixDQUFnQyxLQUFLRixXQUFyQyxDQUFQO0FBQ0Q7Ozs7RUFSd0JULFE7O0lBV3JCWSxhOzs7OztBQUNKLHlCQUFZSCxXQUFaLEVBQXlCO0FBQUE7O0FBQUE7O0FBQ3ZCO0FBQ0EsV0FBS0EsV0FBTCxHQUFtQkEsV0FBbkI7QUFGdUI7QUFHeEI7Ozs7MEJBRUtDLGMsRUFBZ0I7QUFDcEIsYUFBT0EsY0FBYyxDQUFDRyxpQkFBZixDQUFpQyxLQUFLSixXQUF0QyxDQUFQO0FBQ0Q7Ozs7RUFSeUJULFE7QUFXNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNDQSxNQUFNYyxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUFFO0FBQ3BDWCxFQUFBQSxrQkFBa0IsRUFBRVAsZ0JBQWdCLENBQUNPLGtCQUFELENBREY7QUFFbENDLEVBQUFBLG1CQUFtQixFQUFFUixnQkFBZ0IsQ0FBQ1EsbUJBQUQsQ0FGSDtBQUdsQ0MsRUFBQUEsR0FBRyxFQUFFVCxnQkFBZ0IsQ0FBQ1MsR0FBRCxDQUhhO0FBSWxDQyxFQUFBQSxZQUFZLEVBQUVWLGdCQUFnQixDQUFDVSxZQUFELENBSkk7QUFLbENJLEVBQUFBLGFBQWEsRUFBRWQsZ0JBQWdCLENBQUNjLGFBQUQ7QUFMRyxDQUFwQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IHsgY2xhc3NUb0ludm9rYWJsZSB9ID0gcmVxdWlyZSgnLi91dGlscycpO1xyXG5cclxuY2xhc3MgQUJTVFJBQ1Qge1xyXG4gIHN0YXRpYyB0b1N0cmluZyguLi5hcmdzKSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoKS50b1N0cmluZyguLi5hcmdzKTtcclxuICB9XHJcblxyXG4gIHRvU3RyaW5nKC4uLmFyZ3MpIHtcclxuICAgIHJldHVybiB0aGlzLnRvU3FsKC4uLmFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgdG9TcWwoKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvU3FsIGltcGxlbWVudGF0aW9uIG1pc3NpbmcnKTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIElOSVRJQUxMWV9ERUZFUlJFRCBleHRlbmRzIEFCU1RSQUNUIHtcclxuICB0b1NxbCgpIHtcclxuICAgIHJldHVybiAnREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQnO1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgSU5JVElBTExZX0lNTUVESUFURSBleHRlbmRzIEFCU1RSQUNUIHtcclxuICB0b1NxbCgpIHtcclxuICAgIHJldHVybiAnREVGRVJSQUJMRSBJTklUSUFMTFkgSU1NRURJQVRFJztcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIE5PVCBleHRlbmRzIEFCU1RSQUNUIHtcclxuICB0b1NxbCgpIHtcclxuICAgIHJldHVybiAnTk9UIERFRkVSUkFCTEUnO1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgU0VUX0RFRkVSUkVEIGV4dGVuZHMgQUJTVFJBQ1Qge1xyXG4gIGNvbnN0cnVjdG9yKGNvbnN0cmFpbnRzKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzO1xyXG4gIH1cclxuXHJcbiAgdG9TcWwocXVlcnlHZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBxdWVyeUdlbmVyYXRvci5zZXREZWZlcnJlZFF1ZXJ5KHRoaXMuY29uc3RyYWludHMpO1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgU0VUX0lNTUVESUFURSBleHRlbmRzIEFCU1RSQUNUIHtcclxuICBjb25zdHJ1Y3Rvcihjb25zdHJhaW50cykge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuY29uc3RyYWludHMgPSBjb25zdHJhaW50cztcclxuICB9XHJcblxyXG4gIHRvU3FsKHF1ZXJ5R2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gcXVlcnlHZW5lcmF0b3Iuc2V0SW1tZWRpYXRlUXVlcnkodGhpcy5jb25zdHJhaW50cyk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXMgcmVsYXRlZCB0byBkZWZlcnJhYmxlIGNvbnN0cmFpbnRzLiBJdCBjYW4gYmUgdXNlZCB0b1xyXG4gKiBtYWtlIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzIGRlZmVycmFibGUgYW5kIHRvIHNldCB0aGUgY29uc3RyYWludHMgd2l0aGluIGFcclxuICogdHJhbnNhY3Rpb24uIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgaW4gUG9zdGdyZVNRTC5cclxuICpcclxuICogVGhlIGZvcmVpZ24ga2V5cyBjYW4gYmUgY29uZmlndXJlZCBsaWtlIHRoaXMuIEl0IHdpbGwgY3JlYXRlIGEgZm9yZWlnbiBrZXlcclxuICogdGhhdCB3aWxsIGNoZWNrIHRoZSBjb25zdHJhaW50cyBpbW1lZGlhdGVseSB3aGVuIHRoZSBkYXRhIHdhcyBpbnNlcnRlZC5cclxuICpcclxuICogYGBganNcclxuICogc2VxdWVsaXplLmRlZmluZSgnTW9kZWwnLCB7XHJcbiAqICAgZm9yZWlnbl9pZDoge1xyXG4gKiAgICAgdHlwZTogU2VxdWVsaXplLklOVEVHRVIsXHJcbiAqICAgICByZWZlcmVuY2VzOiB7XHJcbiAqICAgICAgIG1vZGVsOiBPdGhlck1vZGVsLFxyXG4gKiAgICAgICBrZXk6ICdpZCcsXHJcbiAqICAgICAgIGRlZmVycmFibGU6IFNlcXVlbGl6ZS5EZWZlcnJhYmxlLklOSVRJQUxMWV9JTU1FRElBVEVcclxuICogICAgIH1cclxuICogICB9XHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGNvbnN0cmFpbnRzIGNhbiBiZSBjb25maWd1cmVkIGluIGEgdHJhbnNhY3Rpb24gbGlrZSB0aGlzLiBJdCB3aWxsXHJcbiAqIHRyaWdnZXIgYSBxdWVyeSBvbmNlIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBzdGFydGVkIGFuZCBzZXQgdGhlIGNvbnN0cmFpbnRzXHJcbiAqIHRvIGJlIGNoZWNrZWQgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi5cclxuICpcclxuICogYGBganNcclxuICogc2VxdWVsaXplLnRyYW5zYWN0aW9uKHtcclxuICogICBkZWZlcnJhYmxlOiBTZXF1ZWxpemUuRGVmZXJyYWJsZS5TRVRfREVGRVJSRURcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcHJvcGVydHkgSU5JVElBTExZX0RFRkVSUkVEIERlZmVyIGNvbnN0cmFpbnRzIGNoZWNrcyB0byB0aGUgZW5kIG9mIHRyYW5zYWN0aW9ucy5cclxuICogQHByb3BlcnR5IElOSVRJQUxMWV9JTU1FRElBVEUgVHJpZ2dlciB0aGUgY29uc3RyYWludCBjaGVja3MgaW1tZWRpYXRlbHlcclxuICogQHByb3BlcnR5IE5PVCBTZXQgdGhlIGNvbnN0cmFpbnRzIHRvIG5vdCBkZWZlcnJlZC4gVGhpcyBpcyB0aGUgZGVmYXVsdCBpbiBQb3N0Z3JlU1FMIGFuZCBpdCBtYWtlIGl0IGltcG9zc2libGUgdG8gZHluYW1pY2FsbHkgZGVmZXIgdGhlIGNvbnN0cmFpbnRzIHdpdGhpbiBhIHRyYW5zYWN0aW9uLlxyXG4gKiBAcHJvcGVydHkgU0VUX0RFRkVSUkVEXHJcbiAqIEBwcm9wZXJ0eSBTRVRfSU1NRURJQVRFXHJcbiAqL1xyXG5cclxuY29uc3QgRGVmZXJyYWJsZSA9IG1vZHVsZS5leHBvcnRzID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXHJcbiAgSU5JVElBTExZX0RFRkVSUkVEOiBjbGFzc1RvSW52b2thYmxlKElOSVRJQUxMWV9ERUZFUlJFRCksXHJcbiAgSU5JVElBTExZX0lNTUVESUFURTogY2xhc3NUb0ludm9rYWJsZShJTklUSUFMTFlfSU1NRURJQVRFKSxcclxuICBOT1Q6IGNsYXNzVG9JbnZva2FibGUoTk9UKSxcclxuICBTRVRfREVGRVJSRUQ6IGNsYXNzVG9JbnZva2FibGUoU0VUX0RFRkVSUkVEKSxcclxuICBTRVRfSU1NRURJQVRFOiBjbGFzc1RvSW52b2thYmxlKFNFVF9JTU1FRElBVEUpXHJcbn07XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWZlcnJhYmxlLmpzIl0sIm5hbWVzIjpbImNsYXNzVG9JbnZva2FibGUiLCJyZXF1aXJlIiwiQUJTVFJBQ1QiLCJhcmdzIiwidG9TcWwiLCJFcnJvciIsInRvU3RyaW5nIiwiSU5JVElBTExZX0RFRkVSUkVEIiwiSU5JVElBTExZX0lNTUVESUFURSIsIk5PVCIsIlNFVF9ERUZFUlJFRCIsImNvbnN0cmFpbnRzIiwicXVlcnlHZW5lcmF0b3IiLCJzZXREZWZlcnJlZFF1ZXJ5IiwiU0VUX0lNTUVESUFURSIsInNldEltbWVkaWF0ZVF1ZXJ5IiwiRGVmZXJyYWJsZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQXVCQyxPQUFPLENBQUMsU0FBRCxDQUFwQzs7SUFFTUMsUTs7Ozs7Ozs2QkFLSyxHQUFHQyxJLEVBQU07QUFDaEIsYUFBTyxLQUFLQyxLQUFMLENBQVcsR0FBR0QsSUFBZCxDQUFQO0FBQ0Q7Ozs0QkFFTztBQUNOLFlBQU0sSUFBSUUsS0FBSixDQUFVLDhCQUFWLENBQU47QUFDRDs7OzZCQVZlLEdBQUdGLEksRUFBTTtBQUN2QixhQUFPLElBQUksSUFBSixHQUFXRyxRQUFYLENBQW9CLEdBQUdILElBQXZCLENBQVA7QUFDRDs7Ozs7O0lBV0dJLGtCOzs7Ozs7Ozs7Ozs7OzRCQUNJO0FBQ04sYUFBTywrQkFBUDtBQUNEOzs7O0VBSDhCTCxROztJQU0zQk0sbUI7Ozs7Ozs7Ozs7Ozs7NEJBQ0k7QUFDTixhQUFPLGdDQUFQO0FBQ0Q7Ozs7RUFIK0JOLFE7O0lBTTVCTyxHOzs7Ozs7Ozs7Ozs7OzRCQUNJO0FBQ04sYUFBTyxnQkFBUDtBQUNEOzs7O0VBSGVQLFE7O0lBTVpRLFk7Ozs7O0FBQ0osd0JBQVlDLFdBQVosRUFBeUI7QUFBQTs7QUFBQTs7QUFDdkI7QUFDQSxVQUFLQSxXQUFMLEdBQW1CQSxXQUFuQjtBQUZ1QjtBQUd4Qjs7OzswQkFFS0MsYyxFQUFnQjtBQUNwQixhQUFPQSxjQUFjLENBQUNDLGdCQUFmLENBQWdDLEtBQUtGLFdBQXJDLENBQVA7QUFDRDs7OztFQVJ3QlQsUTs7SUFXckJZLGE7Ozs7O0FBQ0oseUJBQVlILFdBQVosRUFBeUI7QUFBQTs7QUFBQTs7QUFDdkI7QUFDQSxXQUFLQSxXQUFMLEdBQW1CQSxXQUFuQjtBQUZ1QjtBQUd4Qjs7OzswQkFFS0MsYyxFQUFnQjtBQUNwQixhQUFPQSxjQUFjLENBQUNHLGlCQUFmLENBQWlDLEtBQUtKLFdBQXRDLENBQVA7QUFDRDs7OztFQVJ5QlQsUTtBQVc1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUEsTUFBTWMsVUFBVSxHQUFHQyxNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFBRTtBQUNwQ1gsRUFBQUEsa0JBQWtCLEVBQUVQLGdCQUFnQixDQUFDTyxrQkFBRCxDQURGO0FBRWxDQyxFQUFBQSxtQkFBbUIsRUFBRVIsZ0JBQWdCLENBQUNRLG1CQUFELENBRkg7QUFHbENDLEVBQUFBLEdBQUcsRUFBRVQsZ0JBQWdCLENBQUNTLEdBQUQsQ0FIYTtBQUlsQ0MsRUFBQUEsWUFBWSxFQUFFVixnQkFBZ0IsQ0FBQ1UsWUFBRCxDQUpJO0FBS2xDSSxFQUFBQSxhQUFhLEVBQUVkLGdCQUFnQixDQUFDYyxhQUFEO0FBTEcsQ0FBcEMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgY2xhc3NUb0ludm9rYWJsZSB9ID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG5jbGFzcyBBQlNUUkFDVCB7XG4gIHN0YXRpYyB0b1N0cmluZyguLi5hcmdzKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKCkudG9TdHJpbmcoLi4uYXJncyk7XG4gIH1cblxuICB0b1N0cmluZyguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TcWwoLi4uYXJncyk7XG4gIH1cblxuICB0b1NxbCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvU3FsIGltcGxlbWVudGF0aW9uIG1pc3NpbmcnKTtcbiAgfVxufVxuXG5jbGFzcyBJTklUSUFMTFlfREVGRVJSRUQgZXh0ZW5kcyBBQlNUUkFDVCB7XG4gIHRvU3FsKCkge1xuICAgIHJldHVybiAnREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQnO1xuICB9XG59XG5cbmNsYXNzIElOSVRJQUxMWV9JTU1FRElBVEUgZXh0ZW5kcyBBQlNUUkFDVCB7XG4gIHRvU3FsKCkge1xuICAgIHJldHVybiAnREVGRVJSQUJMRSBJTklUSUFMTFkgSU1NRURJQVRFJztcbiAgfVxufVxuXG5jbGFzcyBOT1QgZXh0ZW5kcyBBQlNUUkFDVCB7XG4gIHRvU3FsKCkge1xuICAgIHJldHVybiAnTk9UIERFRkVSUkFCTEUnO1xuICB9XG59XG5cbmNsYXNzIFNFVF9ERUZFUlJFRCBleHRlbmRzIEFCU1RSQUNUIHtcbiAgY29uc3RydWN0b3IoY29uc3RyYWludHMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29uc3RyYWludHMgPSBjb25zdHJhaW50cztcbiAgfVxuXG4gIHRvU3FsKHF1ZXJ5R2VuZXJhdG9yKSB7XG4gICAgcmV0dXJuIHF1ZXJ5R2VuZXJhdG9yLnNldERlZmVycmVkUXVlcnkodGhpcy5jb25zdHJhaW50cyk7XG4gIH1cbn1cblxuY2xhc3MgU0VUX0lNTUVESUFURSBleHRlbmRzIEFCU1RSQUNUIHtcbiAgY29uc3RydWN0b3IoY29uc3RyYWludHMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29uc3RyYWludHMgPSBjb25zdHJhaW50cztcbiAgfVxuXG4gIHRvU3FsKHF1ZXJ5R2VuZXJhdG9yKSB7XG4gICAgcmV0dXJuIHF1ZXJ5R2VuZXJhdG9yLnNldEltbWVkaWF0ZVF1ZXJ5KHRoaXMuY29uc3RyYWludHMpO1xuICB9XG59XG5cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXMgcmVsYXRlZCB0byBkZWZlcnJhYmxlIGNvbnN0cmFpbnRzLiBJdCBjYW4gYmUgdXNlZCB0b1xuICogbWFrZSBmb3JlaWduIGtleSBjb25zdHJhaW50cyBkZWZlcnJhYmxlIGFuZCB0byBzZXQgdGhlIGNvbnN0cmFpbnRzIHdpdGhpbiBhXG4gKiB0cmFuc2FjdGlvbi4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBQb3N0Z3JlU1FMLlxuICpcbiAqIFRoZSBmb3JlaWduIGtleXMgY2FuIGJlIGNvbmZpZ3VyZWQgbGlrZSB0aGlzLiBJdCB3aWxsIGNyZWF0ZSBhIGZvcmVpZ24ga2V5XG4gKiB0aGF0IHdpbGwgY2hlY2sgdGhlIGNvbnN0cmFpbnRzIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGRhdGEgd2FzIGluc2VydGVkLlxuICpcbiAqIGBgYGpzXG4gKiBzZXF1ZWxpemUuZGVmaW5lKCdNb2RlbCcsIHtcbiAqICAgZm9yZWlnbl9pZDoge1xuICogICAgIHR5cGU6IFNlcXVlbGl6ZS5JTlRFR0VSLFxuICogICAgIHJlZmVyZW5jZXM6IHtcbiAqICAgICAgIG1vZGVsOiBPdGhlck1vZGVsLFxuICogICAgICAga2V5OiAnaWQnLFxuICogICAgICAgZGVmZXJyYWJsZTogU2VxdWVsaXplLkRlZmVycmFibGUuSU5JVElBTExZX0lNTUVESUFURVxuICogICAgIH1cbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgY29uc3RyYWludHMgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gYSB0cmFuc2FjdGlvbiBsaWtlIHRoaXMuIEl0IHdpbGxcbiAqIHRyaWdnZXIgYSBxdWVyeSBvbmNlIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBzdGFydGVkIGFuZCBzZXQgdGhlIGNvbnN0cmFpbnRzXG4gKiB0byBiZSBjaGVja2VkIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24uXG4gKlxuICogYGBganNcbiAqIHNlcXVlbGl6ZS50cmFuc2FjdGlvbih7XG4gKiAgIGRlZmVycmFibGU6IFNlcXVlbGl6ZS5EZWZlcnJhYmxlLlNFVF9ERUZFUlJFRFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHJvcGVydHkgSU5JVElBTExZX0RFRkVSUkVEIERlZmVyIGNvbnN0cmFpbnRzIGNoZWNrcyB0byB0aGUgZW5kIG9mIHRyYW5zYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSBJTklUSUFMTFlfSU1NRURJQVRFIFRyaWdnZXIgdGhlIGNvbnN0cmFpbnQgY2hlY2tzIGltbWVkaWF0ZWx5XG4gKiBAcHJvcGVydHkgTk9UIFNldCB0aGUgY29uc3RyYWludHMgdG8gbm90IGRlZmVycmVkLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGluIFBvc3RncmVTUUwgYW5kIGl0IG1ha2UgaXQgaW1wb3NzaWJsZSB0byBkeW5hbWljYWxseSBkZWZlciB0aGUgY29uc3RyYWludHMgd2l0aGluIGEgdHJhbnNhY3Rpb24uXG4gKiBAcHJvcGVydHkgU0VUX0RFRkVSUkVEXG4gKiBAcHJvcGVydHkgU0VUX0lNTUVESUFURVxuICovXG5cbmNvbnN0IERlZmVycmFibGUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICBJTklUSUFMTFlfREVGRVJSRUQ6IGNsYXNzVG9JbnZva2FibGUoSU5JVElBTExZX0RFRkVSUkVEKSxcbiAgSU5JVElBTExZX0lNTUVESUFURTogY2xhc3NUb0ludm9rYWJsZShJTklUSUFMTFlfSU1NRURJQVRFKSxcbiAgTk9UOiBjbGFzc1RvSW52b2thYmxlKE5PVCksXG4gIFNFVF9ERUZFUlJFRDogY2xhc3NUb0ludm9rYWJsZShTRVRfREVGRVJSRUQpLFxuICBTRVRfSU1NRURJQVRFOiBjbGFzc1RvSW52b2thYmxlKFNFVF9JTU1FRElBVEUpXG59O1xuIl19 \ No newline at end of file diff --git a/dist/dialects/abstract/connection-manager.js b/dist/dialects/abstract/connection-manager.js index 64a3dfc..8de677e 100644 --- a/dist/dialects/abstract/connection-manager.js +++ b/dist/dialects/abstract/connection-manager.js @@ -33,9 +33,7 @@ const debug = logger.debugContext("pool"); * @private */ -let ConnectionManager = -/*#__PURE__*/ -function () { +let ConnectionManager = /*#__PURE__*/function () { function ConnectionManager(dialect, sequelize) { _classCallCheck(this, ConnectionManager); @@ -366,4 +364,4 @@ function () { module.exports = ConnectionManager; module.exports.ConnectionManager = ConnectionManager; module.exports.default = ConnectionManager; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9jb25uZWN0aW9uLW1hbmFnZXIuanMiXSwibmFtZXMiOlsiUG9vbCIsIlRpbWVvdXRFcnJvciIsInJlcXVpcmUiLCJfIiwic2VtdmVyIiwiUHJvbWlzZSIsImVycm9ycyIsImxvZ2dlciIsImRlYnVnIiwiZGVidWdDb250ZXh0IiwiQ29ubmVjdGlvbk1hbmFnZXIiLCJkaWFsZWN0Iiwic2VxdWVsaXplIiwiY29uZmlnIiwiY2xvbmVEZWVwIiwidmVyc2lvblByb21pc2UiLCJkaWFsZWN0TmFtZSIsIm9wdGlvbnMiLCJwb29sIiwiRXJyb3IiLCJkZWZhdWx0cyIsIm1heCIsIm1pbiIsImlkbGUiLCJhY3F1aXJlIiwiZXZpY3QiLCJ2YWxpZGF0ZSIsIl92YWxpZGF0ZSIsImJpbmQiLCJpbml0UG9vbHMiLCJkYXRhVHlwZXMiLCJlYWNoIiwiZGF0YVR5cGUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0eXBlcyIsIl9yZWZyZXNoVHlwZVBhcnNlciIsImtleSIsImRpYWxlY3RNb2R1bGUiLCJ3aW5kb3ciLCJkaWFsZWN0TW9kdWxlUGF0aCIsInJlc29sdmUiLCJkcmFpbiIsInRoZW4iLCJkZXN0cm95QWxsTm93IiwiZ2V0Q29ubmVjdGlvbiIsInJlamVjdCIsIl9vblByb2Nlc3NFeGl0IiwicmVwbGljYXRpb24iLCJuYW1lIiwiY3JlYXRlIiwiX2Nvbm5lY3QiLCJkZXN0cm95IiwiY29ubmVjdGlvbiIsIl9kaXNjb25uZWN0IiwidGFwIiwiYWNxdWlyZVRpbWVvdXRNaWxsaXMiLCJpZGxlVGltZW91dE1pbGxpcyIsInJlYXBJbnRlcnZhbE1pbGxpcyIsIkFycmF5IiwiaXNBcnJheSIsInJlYWQiLCJ3cml0ZSIsIm9taXQiLCJtYXAiLCJyZWFkQ29uZmlnIiwicmVhZHMiLCJyZWxlYXNlIiwiY2xpZW50IiwicXVlcnlUeXBlIiwidXNlTWFzdGVyIiwidW5kZWZpbmVkIiwiam9pbiIsIm5leHRSZWFkIiwibGVuZ3RoIiwicHJvbWlzZSIsImRhdGFiYXNlVmVyc2lvbiIsIl9vcHRpb25zIiwidHJhbnNhY3Rpb24iLCJsb2dnaW5nIiwiX190ZXN0TG9nZ2luZ0ZuIiwidmVyc2lvbiIsInBhcnNlZFZlcnNpb24iLCJnZXQiLCJjb2VyY2UiLCJ2YWxpZCIsImRlZmF1bHRWZXJzaW9uIiwiY2F0Y2giLCJlcnIiLCJ0eXBlIiwiZXJyb3IiLCJDb25uZWN0aW9uQWNxdWlyZVRpbWVvdXRFcnJvciIsInRyeSIsInJ1bkhvb2tzIiwiY29ubmVjdGlvbk1hbmFnZXIiLCJjb25uZWN0IiwicmV0dXJuIiwiZGlzY29ubmVjdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBLElBQUY7QUFBUUMsRUFBQUE7QUFBUixJQUF5QkMsT0FBTyxDQUFDLGdCQUFELENBQXRDOztBQUNBLE1BQU1DLENBQUMsR0FBR0QsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUUsTUFBTSxHQUFHRixPQUFPLENBQUMsUUFBRCxDQUF0Qjs7QUFDQSxNQUFNRyxPQUFPLEdBQUdILE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1JLE1BQU0sR0FBR0osT0FBTyxDQUFDLGNBQUQsQ0FBdEI7O0FBQ0EsTUFBTTtBQUFFSyxFQUFBQTtBQUFGLElBQWFMLE9BQU8sQ0FBQyxvQkFBRCxDQUExQjs7QUFDQSxNQUFNTSxLQUFLLEdBQUdELE1BQU0sQ0FBQ0UsWUFBUCxDQUFvQixNQUFwQixDQUFkO0FBRUE7Ozs7Ozs7OztJQVFNQyxpQjs7O0FBQ0osNkJBQVlDLE9BQVosRUFBcUJDLFNBQXJCLEVBQWdDO0FBQUE7O0FBQzlCLFVBQU1DLE1BQU0sR0FBR1YsQ0FBQyxDQUFDVyxTQUFGLENBQVlGLFNBQVMsQ0FBQ0MsTUFBdEIsQ0FBZjs7QUFFQSxTQUFLRCxTQUFMLEdBQWlCQSxTQUFqQjtBQUNBLFNBQUtDLE1BQUws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QSxVLEVBQVk7QUFDcEIsVUFBSSxDQUFDLEtBQUs1QyxPQUFMLENBQWFxRixpQkFBYixDQUErQnRFLFFBQXBDLEVBQThDO0FBQzVDLGVBQU8sSUFBUDtBQUNEOztBQUVELGFBQU8sS0FBS2YsT0FBTCxDQUFhcUYsaUJBQWIsQ0FBK0J0RSxRQUEvQixDQUF3QzZCLFVBQXhDLENBQVA7QUFDRDs7Ozs7O0FBR0g2QyxNQUFNLENBQUNDLE9BQVAsR0FBaUIzRixpQkFBakI7QUFDQTBGLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlM0YsaUJBQWYsR0FBbUNBLGlCQUFuQztBQUNBMEYsTUFBTSxDQUFDQyxPQUFQLENBQWVDLE9BQWYsR0FBeUI1RixpQkFBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IHsgUG9vbCwgVGltZW91dEVycm9yIH0gPSByZXF1aXJlKFwic2VxdWVsaXplLXBvb2xcIik7XHJcbmNvbnN0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xyXG5jb25zdCBzZW12ZXIgPSByZXF1aXJlKFwic2VtdmVyXCIpO1xyXG5jb25zdCBQcm9taXNlID0gcmVxdWlyZShcIi4uLy4uL3Byb21pc2VcIik7XHJcbmNvbnN0IGVycm9ycyA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvcnNcIik7XHJcbmNvbnN0IHsgbG9nZ2VyIH0gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nZ2VyXCIpO1xyXG5jb25zdCBkZWJ1ZyA9IGxvZ2dlci5kZWJ1Z0NvbnRleHQoXCJwb29sXCIpO1xyXG5cclxuLyoqXHJcbiAqIEFic3RyYWN0IENvbm5lY3Rpb24gTWFuYWdlclxyXG4gKlxyXG4gKiBDb25uZWN0aW9uIG1hbmFnZXIgd2hpY2ggaGFuZGxlcyBwb29saW5nICYgcmVwbGljYXRpb24uXHJcbiAqIFVzZXMgc2VxdWVsaXplLXBvb2wgZm9yIHBvb2xpbmdcclxuICpcclxuICogQHByaXZhdGVcclxuICovXHJcbmNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIHtcclxuICBjb25zdHJ1Y3RvcihkaWFsZWN0LCBzZXF1ZWxpemUpIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IF8uY2xvbmVEZWVwKHNlcXVlbGl6ZS5jb25maWcpO1xyXG5cclxuICAgIHRoaXMuc2VxdWVsaXplID0gc2VxdWVsaXplO1xyXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XHJcbiAgICB0aGlzLmRpYWxlY3QgPSBkaWFsZWN0O1xyXG4gICAgdGhpcy52ZXJzaW9uUHJvbWlzZSA9IG51bGw7XHJcbiAgICB0aGlzLmRpYWxlY3ROYW1lID0gdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0O1xyXG5cclxuICAgIGlmIChjb25maWcucG9vbCA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3VwcG9ydCBmb3IgcG9vbDpmYWxzZSB3YXMgcmVtb3ZlZCBpbiB2NC4wXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpZy5wb29sID0gXy5kZWZhdWx0cyhjb25maWcucG9vbCB8fCB7fSwge1xyXG4gICAgICBtYXg6IDUsXHJcbiAgICAgIG1pbjogMCxcclxuICAgICAgaWRsZTogMTAwMDAsXHJcbiAgICAgIGFjcXVpcmU6IDYwMDAwLFxyXG4gICAgICBldmljdDogMTAwMCxcclxuICAgICAgdmFsaWRhdGU6IHRoaXMuX3ZhbGlkYXRlLmJpbmQodGhpcylcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaW5pdFBvb2xzKCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoVHlwZVBhcnNlcihkYXRhVHlwZXMpIHtcclxuICAgIF8uZWFjaChkYXRhVHlwZXMsIGRhdGFUeXBlID0+IHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhVHlwZSwgXCJwYXJzZVwiKSkge1xyXG4gICAgICAgIGlmIChkYXRhVHlwZS50eXBlc1t0aGlzLmRpYWxlY3ROYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5fcmVmcmVzaFR5cGVQYXJzZXIoZGF0YVR5cGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBQYXJzZSBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkIGZvciB0eXBlICR7ZGF0YVR5cGUua2V5fSBpbiBkaWFsZWN0ICR7dGhpcy5kaWFsZWN0TmFtZX1gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcnkgdG8gbG9hZCBkaWFsZWN0IG1vZHVsZSBmcm9tIHZhcmlvdXMgY29uZmlndXJlZCBvcHRpb25zLlxyXG4gICAqIFByaW9yaXR5IGdvZXMgbGlrZSBkaWFsZWN0TW9kdWxlUGF0aCA+IGRpYWxlY3RNb2R1bGUgPiByZXF1aXJlKGRlZmF1bHQpXHJcbiAgICpcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICBfbG9hZERpYWxlY3RNb2R1bGUoKSB7XHJcbiAgICBjb25zdCBkaWFsZWN0TW9kdWxlID0gdGhpcy5zZXF1ZWxpemUuY29uZmlnLmRpYWxlY3RNb2R1bGUgfHwgd2luZG93O1xyXG4gICAgaWYgKCFkaWFsZWN0TW9kdWxlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlcXVlbGl6ZS5jb25maWcuZGlhbGVjdE1vZHVsZVBhdGgpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgVW5hYmxlIHRvIGxvYWQgZGlhbGVjdE1vZHVsZSBhdCAke3RoaXMuc2VxdWVsaXplLmNvbmZpZy5kaWFsZWN0TW9kdWxlfWBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGxlYXNlIGFkZCBwYXJhbWV0ZXIgZGlhbGVjdE1vZHVsZSBpbiBjb25maWcgbWFudWFsbHlgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkaWFsZWN0TW9kdWxlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlciB3aGljaCBleGVjdXRlcyBvbiBwcm9jZXNzIGV4aXQgb3IgY29ubmVjdGlvbiBtYW5hZ2VyIHNodXRkb3duXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIF9vblByb2Nlc3NFeGl0KCkge1xyXG4gICAgaWYgKCF0aGlzLnBvb2wpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnBvb2wuZHJhaW4oKS50aGVuKCgpID0+IHtcclxuICAgICAgZGVidWcoXCJjb25uZWN0aW9uIGRyYWluIGR1ZSB0byBwcm9jZXNzIGV4aXRcIik7XHJcbiAgICAgIHJldHVybiB0aGlzLnBvb2wuZGVzdHJveUFsbE5vdygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEcmFpbiB0aGUgcG9vbCBhbmQgY2xvc2UgaXQgcGVybWFuZW50bHlcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIGNsb3NlKCkge1xyXG4gICAgLy8gTWFyayBjbG9zZSBvZiBwb29sXHJcbiAgICB0aGlzLmdldENvbm5lY3Rpb24gPSBmdW5jdGlvbiBnZXRDb25uZWN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXHJcbiAgICAgICAgbmV3IEVycm9yKFxyXG4gICAgICAgICAgXCJDb25uZWN0aW9uTWFuYWdlci5nZXRDb25uZWN0aW9uIHdhcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gbWFuYWdlciB3YXMgY2xvc2VkIVwiXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fb25Qcm9jZXNzRXhpdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSBjb25uZWN0aW9uIHBvb2wuIEJ5IGRlZmF1bHQgcG9vbCBhdXRvc3RhcnQgaXMgc2V0IHRvIGZhbHNlLCBzbyBubyBjb25uZWN0aW9uIHdpbGwgYmVcclxuICAgKiBiZSBjcmVhdGVkIHVubGVzcyBgcG9vbC5hY3F1aXJlYCBpcyBjYWxsZWQuXHJcbiAgICovXHJcbiAgaW5pdFBvb2xzKCkge1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XHJcblxyXG4gICAgaWYgKCFjb25maWcucmVwbGljYXRpb24pIHtcclxuICAgICAgdGhpcy5wb29sID0gbmV3IFBvb2woe1xyXG4gICAgICAgIG5hbWU6IFwic2VxdWVsaXplXCIsXHJcbiAgICAgICAgY3JlYXRlOiAoKSA9PiB0aGlzLl9jb25uZWN0KGNvbmZpZyksXHJcbiAgICAgICAgZGVzdHJveTogY29ubmVjdGlvbiA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzY29ubmVjdChjb25uZWN0aW9uKS50YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBkZWJ1ZyhcImNvbm5lY3Rpb24gZGVzdHJveVwiKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmFsaWRhdGU6IGNvbmZpZy5wb29sLnZhbGlkYXRlLFxyXG4gICAgICAgIG1heDogY29uZmlnLnBvb2wubWF4LFxyXG4gICAgICAgIG1pbjogY29uZmlnLnBvb2wubWluLFxyXG4gICAgICAgIGFjcXVpcmVUaW1lb3V0TWlsbGlzOiBjb25maWcucG9vbC5hY3F1aXJlLFxyXG4gICAgICAgIGlkbGVUaW1lb3V0TWlsbGlzOiBjb25maWcucG9vbC5pZGxlLFxyXG4gICAgICAgIHJlYXBJbnRlcnZhbE1pbGxpczogY29uZmlnLnBvb2wuZXZpY3RcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBkZWJ1ZyhcclxuICAgICAgICBgcG9vbCBjcmVhdGVkIHdpdGggbWF4L21pbjogJHtjb25maWcucG9vbC5tYXh9LyR7Y29uZmlnLnBvb2wubWlufSwgbm8gcmVwbGljYXRpb25gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5yZXBsaWNhdGlvbi5yZWFkKSkge1xyXG4gICAgICBjb25maWcucmVwbGljYXRpb24ucmVhZCA9IFtjb25maWcucmVwbGljYXRpb24ucmVhZF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFwIG1haW4gY29ubmVjdGlvbiBjb25maWdcclxuICAgIGNvbmZpZy5yZXBsaWNhdGlvbi53cml0ZSA9IF8uZGVmYXVsdHMoXHJcbiAgICAgIGNvbmZpZy5yZXBsaWNhdGlvbi53cml0ZSxcclxuICAgICAgXy5vbWl0KGNvbmZpZywgXCJyZXBsaWNhdGlvblwiKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBBcHBseSBkZWZhdWx0cyB0byBlYWNoIHJlYWQgY29uZmlnXHJcbiAgICBjb25maWcucmVwbGljYXRpb24ucmVhZCA9IGNvbmZpZy5yZXBsaWNhdGlvbi5yZWFkLm1hcChyZWFkQ29uZmlnID0+XHJcbiAgICAgIF8uZGVmYXVsdHMocmVhZENvbmZpZywgXy5vbWl0KHRoaXMuY29uZmlnLCBcInJlcGxpY2F0aW9uXCIpKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBjdXN0b20gcG9vbGluZyBmb3IgcmVwbGljYXRpb24gKG9yaWdpbmFsIGF1dGhvciBAamFubWVpZXIpXHJcbiAgICBsZXQgcmVhZHMgPSAwO1xyXG4gICAgdGhpcy5wb29sID0ge1xyXG4gICAgICByZWxlYXNlOiBjbGllbnQgPT4ge1xyXG4gICAgICAgIGlmIChjbGllbnQucXVlcnlUeXBlID09PSBcInJlYWRcIikge1xyXG4gICAgICAgICAgdGhpcy5wb29sLnJlYWQucmVsZWFzZShjbGllbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnBvb2wud3JpdGUucmVsZWFzZShjbGllbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgYWNxdWlyZTogKHF1ZXJ5VHlwZSwgdXNlTWFzdGVyKSA9PiB7XHJcbiAgICAgICAgdXNlTWFzdGVyID0gdXNlTWFzdGVyID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IHVzZU1hc3RlcjtcclxuICAgICAgICBpZiAocXVlcnlUeXBlID09PSBcIlNFTEVDVFwiICYmICF1c2VNYXN0ZXIpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnBvb2wucmVhZC5hY3F1aXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnBvb2wud3JpdGUuYWNxdWlyZSgpO1xyXG4gICAgICB9LFxyXG4gICAgICBkZXN0cm95OiBjb25uZWN0aW9uID0+IHtcclxuICAgICAgICB0aGlzLnBvb2xbY29ubmVjdGlvbi5xdWVyeVR5cGVdLmRlc3Ryb3koY29ubmVjdGlvbik7XHJcbiAgICAgICAgZGVidWcoXCJjb25uZWN0aW9uIGRlc3Ryb3lcIik7XHJcbiAgICAgIH0sXHJcbiAgICAgIGRlc3Ryb3lBbGxOb3c6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5qb2luKFxyXG4gICAgICAgICAgdGhpcy5wb29sLnJlYWQuZGVzdHJveUFsbE5vdygpLFxyXG4gICAgICAgICAgdGhpcy5wb29sLndyaXRlLmRlc3Ryb3lBbGxOb3coKVxyXG4gICAgICAgICkudGFwKCgpID0+IHtcclxuICAgICAgICAgIGRlYnVnKFwiYWxsIGNvbm5lY3Rpb25zIGRlc3Ryb3llZFwiKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgZHJhaW46ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5qb2luKHRoaXMucG9vbC53cml0ZS5kcmFpbigpLCB0aGlzLnBvb2wucmVhZC5kcmFpbigpKTtcclxuICAgICAgfSxcclxuICAgICAgcmVhZDogbmV3IFBvb2woe1xyXG4gICAgICAgIG5hbWU6IFwic2VxdWVsaXplOnJlYWRcIixcclxuICAgICAgICBjcmVhdGU6ICgpID0+IHtcclxuICAgICAgICAgIC8vIHJvdW5kIHJvYmluIGNvbmZpZ1xyXG4gICAgICAgICAgY29uc3QgbmV4dFJlYWQgPSByZWFkcysrICUgY29uZmlnLnJlcGxpY2F0aW9uLnJlYWQubGVuZ3RoO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3QoY29uZmlnLnJlcGxpY2F0aW9uLnJlYWRbbmV4dFJlYWRdKS50YXAoXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb24ucXVlcnlUeXBlID0gXCJyZWFkXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZXN0cm95OiBjb25uZWN0aW9uID0+IHRoaXMuX2Rpc2Nvbm5lY3QoY29ubmVjdGlvbiksXHJcbiAgICAgICAgdmFsaWRhdGU6IGNvbmZpZy5wb29sLnZhbGlkYXRlLFxyXG4gICAgICAgIG1heDogY29uZmlnLnBvb2wubWF4LFxyXG4gICAgICAgIG1pbjogY29uZmlnLnBvb2wubWluLFxyXG4gICAgICAgIGFjcXVpcmVUaW1lb3V0TWlsbGlzOiBjb25maWcucG9vbC5hY3F1aXJlLFxyXG4gICAgICAgIGlkbGVUaW1lb3V0TWlsbGlzOiBjb25maWcucG9vbC5pZGxlLFxyXG4gICAgICAgIHJlYXBJbnRlcnZhbE1pbGxpczogY29uZmlnLnBvb2wuZXZpY3RcclxuICAgICAgfSksXHJcbiAgICAgIHdyaXRlOiBuZXcgUG9vbCh7XHJcbiAgICAgICAgbmFtZTogXCJzZXF1ZWxpemU6d3JpdGVcIixcclxuICAgICAgICBjcmVhdGU6ICgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0KGNvbmZpZy5yZXBsaWNhdGlvbi53cml0ZSkudGFwKGNvbm5lY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25uZWN0aW9uLnF1ZXJ5VHlwZSA9IFwid3JpdGVcIjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVzdHJveTogY29ubmVjdGlvbiA9PiB0aGlzLl9kaXNjb25uZWN0KGNvbm5lY3Rpb24pLFxyXG4gICAgICAgIHZhbGlkYXRlOiBjb25maWcucG9vbC52YWxpZGF0ZSxcclxuICAgICAgICBtYXg6IGNvbmZpZy5wb29sLm1heCxcclxuICAgICAgICBtaW46IGNvbmZpZy5wb29sLm1pbixcclxuICAgICAgICBhY3F1aXJlVGltZW91dE1pbGxpczogY29uZmlnLnBvb2wuYWNxdWlyZSxcclxuICAgICAgICBpZGxlVGltZW91dE1pbGxpczogY29uZmlnLnBvb2wuaWRsZSxcclxuICAgICAgICByZWFwSW50ZXJ2YWxNaWxsaXM6IGNvbmZpZy5wb29sLmV2aWN0XHJcbiAgICAgIH0pXHJcbiAgICB9O1xyXG5cclxuICAgIGRlYnVnKFxyXG4gICAgICBgcG9vbCBjcmVhdGVkIHdpdGggbWF4L21pbjogJHtjb25maWcucG9vbC5tYXh9LyR7Y29uZmlnLnBvb2wubWlufSwgd2l0aCByZXBsaWNhdGlvbmBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgY29ubmVjdGlvbiBmcm9tIHBvb2wuIEl0IHNldHMgZGF0YWJhc2UgdmVyc2lvbiBpZiBpdCdzIG5vdCBhbHJlYWR5IHNldC5cclxuICAgKiBDYWxsIHBvb2wuYWNxdWlyZSB0byBnZXQgYSBjb25uZWN0aW9uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9uc10gICAgICAgICAgICAgICAgIFBvb2wgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLnR5cGVdICAgICAgICAgICAgU2V0IHdoaWNoIHJlcGxpY2EgdG8gdXNlLiBBdmFpbGFibGUgb3B0aW9ucyBhcmUgYHJlYWRgIGFuZCBgd3JpdGVgXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgW29wdGlvbnMudXNlTWFzdGVyPWZhbHNlXSBGb3JjZSBtYXN0ZXIgb3Igd3JpdGUgcmVwbGljYSB0byBnZXQgY29ubmVjdGlvbiBmcm9tXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb25uZWN0aW9uPn1cclxuICAgKi9cclxuICBnZXRDb25uZWN0aW9uKG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIGxldCBwcm9taXNlO1xyXG4gICAgaWYgKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGF0YWJhc2VWZXJzaW9uID09PSAwKSB7XHJcbiAgICAgIGlmICh0aGlzLnZlcnNpb25Qcm9taXNlKSB7XHJcbiAgICAgICAgcHJvbWlzZSA9IHRoaXMudmVyc2lvblByb21pc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJvbWlzZSA9IHRoaXMudmVyc2lvblByb21pc2UgPSB0aGlzLl9jb25uZWN0KFxyXG4gICAgICAgICAgdGhpcy5jb25maWcucmVwbGljYXRpb24ud3JpdGUgfHwgdGhpcy5jb25maWdcclxuICAgICAgICApXHJcbiAgICAgICAgICAudGhlbihjb25uZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3QgX29wdGlvbnMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIF9vcHRpb25zLnRyYW5zYWN0aW9uID0geyBjb25uZWN0aW9uIH07IC8vIENoZWF0IC5xdWVyeSB0byB1c2Ugb3VyIHByaXZhdGUgY29ubmVjdGlvblxyXG4gICAgICAgICAgICBfb3B0aW9ucy5sb2dnaW5nID0gKCkgPT4ge307XHJcbiAgICAgICAgICAgIF9vcHRpb25zLmxvZ2dpbmcuX190ZXN0TG9nZ2luZ0ZuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vY29ubmVjdGlvbiBtaWdodCBoYXZlIHNldCBkYXRhYmFzZVZlcnNpb24gdmFsdWUgYXQgaW5pdGlhbGl6YXRpb24sXHJcbiAgICAgICAgICAgIC8vYXZvaWRpbmcgYSB1c2VsZXNzIHJvdW5kIHRyaXBcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGF0YWJhc2VWZXJzaW9uID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLmRhdGFiYXNlVmVyc2lvbihfb3B0aW9ucykudGhlbih2ZXJzaW9uID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFZlcnNpb24gPVxyXG4gICAgICAgICAgICAgICAgICBfLmdldChzZW12ZXIuY29lcmNlKHZlcnNpb24pLCBcInZlcnNpb25cIikgfHwgdmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGF0YWJhc2VWZXJzaW9uID0gc2VtdmVyLnZhbGlkKFxyXG4gICAgICAgICAgICAgICAgICBwYXJzZWRWZXJzaW9uXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgID8gcGFyc2VkVmVyc2lvblxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuZGVmYXVsdFZlcnNpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZlcnNpb25Qcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaXNjb25uZWN0KGNvbm5lY3Rpb24pO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZlcnNpb25Qcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2Nvbm5lY3QoY29ubmVjdGlvbik7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmVyc2lvblByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9taXNlXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb29sXHJcbiAgICAgICAgICAuYWNxdWlyZShvcHRpb25zLnR5cGUsIG9wdGlvbnMudXNlTWFzdGVyKVxyXG4gICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVGltZW91dEVycm9yKVxyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnMuQ29ubmVjdGlvbkFjcXVpcmVUaW1lb3V0RXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgICAudGFwKCgpID0+IHtcclxuICAgICAgICBkZWJ1ZyhcImNvbm5lY3Rpb24gYWNxdWlyZWRcIik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVsZWFzZSBhIHBvb2xlZCBjb25uZWN0aW9uIHNvIGl0IGNhbiBiZSB1dGlsaXplZCBieSBvdGhlciBjb25uZWN0aW9uIHJlcXVlc3RzXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb25cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIHJlbGVhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcclxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XHJcbiAgICAgIHRoaXMucG9vbC5yZWxlYXNlKGNvbm5lY3Rpb24pO1xyXG4gICAgICBkZWJ1ZyhcImNvbm5lY3Rpb24gcmVsZWFzZWRcIik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGwgZGlhbGVjdCBsaWJyYXJ5IHRvIGdldCBjb25uZWN0aW9uXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9IGNvbmZpZyBDb25uZWN0aW9uIGNvbmZpZ1xyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8Q29ubmVjdGlvbj59XHJcbiAgICovXHJcbiAgX2Nvbm5lY3QoY29uZmlnKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVcclxuICAgICAgLnJ1bkhvb2tzKFwiYmVmb3JlQ29ubmVjdFwiLCBjb25maWcpXHJcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuZGlhbGVjdC5jb25uZWN0aW9uTWFuYWdlci5jb25uZWN0KGNvbmZpZykpXHJcbiAgICAgIC50aGVuKGNvbm5lY3Rpb24gPT5cclxuICAgICAgICB0aGlzLnNlcXVlbGl6ZVxyXG4gICAgICAgICAgLnJ1bkhvb2tzKFwiYWZ0ZXJDb25uZWN0XCIsIGNvbm5lY3Rpb24sIGNvbmZpZylcclxuICAgICAgICAgIC5yZXR1cm4oY29ubmVjdGlvbilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGwgZGlhbGVjdCBsaWJyYXJ5IHRvIGRpc2Nvbm5lY3QgYSBjb25uZWN0aW9uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb25cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIF9kaXNjb25uZWN0KGNvbm5lY3Rpb24pIHtcclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZVxyXG4gICAgICAucnVuSG9va3MoXCJiZWZvcmVEaXNjb25uZWN0XCIsIGNvbm5lY3Rpb24pXHJcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuZGlhbGVjdC5jb25uZWN0aW9uTWFuYWdlci5kaXNjb25uZWN0KGNvbm5lY3Rpb24pKVxyXG4gICAgICAudGhlbigoKSA9PiB0aGlzLnNlcXVlbGl6ZS5ydW5Ib29rcyhcImFmdGVyRGlzY29ubmVjdFwiLCBjb25uZWN0aW9uKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmUgaWYgYSBjb25uZWN0aW9uIGlzIHN0aWxsIHZhbGlkIG9yIG5vdFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDb25uZWN0aW9ufSBjb25uZWN0aW9uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBfdmFsaWRhdGUoY29ubmVjdGlvbikge1xyXG4gICAgaWYgKCF0aGlzLmRpYWxlY3QuY29ubmVjdGlvbk1hbmFnZXIudmFsaWRhdGUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZGlhbGVjdC5jb25uZWN0aW9uTWFuYWdlci52YWxpZGF0ZShjb25uZWN0aW9uKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29ubmVjdGlvbk1hbmFnZXI7XHJcbm1vZHVsZS5leHBvcnRzLkNvbm5lY3Rpb25NYW5hZ2VyID0gQ29ubmVjdGlvbk1hbmFnZXI7XHJcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBDb25uZWN0aW9uTWFuYWdlcjtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9jb25uZWN0aW9uLW1hbmFnZXIuanMiXSwibmFtZXMiOlsiUG9vbCIsIlRpbWVvdXRFcnJvciIsInJlcXVpcmUiLCJfIiwic2VtdmVyIiwiUHJvbWlzZSIsImVycm9ycyIsImxvZ2dlciIsImRlYnVnIiwiZGVidWdDb250ZXh0IiwiQ29ubmVjdGlvbk1hbmFnZXIiLCJkaWFsZWN0Iiwic2VxdWVsaXplIiwiY29uZmlnIiwiY2xvbmVEZWVwIiwidmVyc2lvblByb21pc2UiLCJkaWFsZWN0TmFtZSIsIm9wdGlvbnMiLCJwb29sIiwiRXJyb3IiLCJkZWZhdWx0cyIsIm1heCIsIm1pbiIsImlkbGUiLCJhY3F1aXJlIiwiZXZpY3QiLCJ2YWxpZGF0ZSIsIl92YWxpZGF0ZSIsImJpbmQiLCJpbml0UG9vbHMiLCJkYXRhVHlwZXMiLCJlYWNoIiwiZGF0YVR5cGUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0eXBlcyIsIl9yZWZyZXNoVHlwZVBhcnNlciIsImtleSIsImRpYWxlY3RNb2R1bGUiLCJ3aW5kb3ciLCJkaWFsZWN0TW9kdWxlUGF0aCIsInJlc29sdmUiLCJkcmFpbiIsInRoZW4iLCJkZXN0cm95QWxsTm93IiwiZ2V0Q29ubmVjdGlvbiIsInJlamVjdCIsIl9vblByb2Nlc3NFeGl0IiwicmVwbGljYXRpb24iLCJuYW1lIiwiY3JlYXRlIiwiX2Nvbm5lY3QiLCJkZXN0cm95IiwiY29ubmVjdGlvbiIsIl9kaXNjb25uZWN0IiwidGFwIiwiYWNxdWlyZVRpbWVvdXRNaWxsaXMiLCJpZGxlVGltZW91dE1pbGxpcyIsInJlYXBJbnRlcnZhbE1pbGxpcyIsIkFycmF5IiwiaXNBcnJheSIsInJlYWQiLCJ3cml0ZSIsIm9taXQiLCJtYXAiLCJyZWFkQ29uZmlnIiwicmVhZHMiLCJyZWxlYXNlIiwiY2xpZW50IiwicXVlcnlUeXBlIiwidXNlTWFzdGVyIiwidW5kZWZpbmVkIiwiam9pbiIsIm5leHRSZWFkIiwibGVuZ3RoIiwicHJvbWlzZSIsImRhdGFiYXNlVmVyc2lvbiIsIl9vcHRpb25zIiwidHJhbnNhY3Rpb24iLCJsb2dnaW5nIiwiX190ZXN0TG9nZ2luZ0ZuIiwidmVyc2lvbiIsInBhcnNlZFZlcnNpb24iLCJnZXQiLCJjb2VyY2UiLCJ2YWxpZCIsImRlZmF1bHRWZXJzaW9uIiwiY2F0Y2giLCJlcnIiLCJ0eXBlIiwiZXJyb3IiLCJDb25uZWN0aW9uQWNxdWlyZVRpbWVvdXRFcnJvciIsInRyeSIsInJ1bkhvb2tzIiwiY29ubmVjdGlvbk1hbmFnZXIiLCJjb25uZWN0IiwicmV0dXJuIiwiZGlzY29ubmVjdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBLElBQUY7QUFBUUMsRUFBQUE7QUFBUixJQUF5QkMsT0FBTyxDQUFDLGdCQUFELENBQXRDOztBQUNBLE1BQU1DLENBQUMsR0FBR0QsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUUsTUFBTSxHQUFHRixPQUFPLENBQUMsUUFBRCxDQUF0Qjs7QUFDQSxNQUFNRyxPQUFPLEdBQUdILE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1JLE1BQU0sR0FBR0osT0FBTyxDQUFDLGNBQUQsQ0FBdEI7O0FBQ0EsTUFBTTtBQUFFSyxFQUFBQTtBQUFGLElBQWFMLE9BQU8sQ0FBQyxvQkFBRCxDQUExQjs7QUFDQSxNQUFNTSxLQUFLLEdBQUdELE1BQU0sQ0FBQ0UsWUFBUCxDQUFvQixNQUFwQixDQUFkO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7SUFDTUMsaUI7QUFDSiw2QkFBWUMsT0FBWixFQUFxQkMsU0FBckIsRUFBZ0M7QUFBQTs7QUFDOUIsVUFBTUMsTUFBTSxHQUFHVixDQUFDLENBQUNXLFNBQUYsQ0FBWUYsU0FBUyxDQUFDQyxNQUF0QixDQUFmOztBQUVBLFNBQUtELFNBQUwsR0FBaUJBLFNBQWpCO0FBQ0EsU0FBS0MsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0YsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0ksY0FBTCxHQUFzQixJQUF0QjtBQUNBLFNBQUtDLFdBQUwsR0FBbUIsS0FBS0osU0FBTCxDQUFlSyxPQUFmLENBQXVCTixPQUExQzs7QUFFQSxRQUFJRSxNQUFNLENBQUNLLElBQVAsS0FBZ0IsS0FBcEIsRUFBMkI7QUFDekIsWUFBTSxJQUFJQyxLQUFKLENBQVUsNENBQVYsQ0FBTjtBQUNEOztBQUVETixJQUFBQSxNQUFNLENBQUNLLElBQVAsR0FBY2YsQ0FBQyxDQUFDaUIsUUFBRixDQUFXUCxNQUFNLENBQUNLLElBQVAsSUFBZSxFQUExQixFQUE4QjtBQUMxQ0csTUFBQUEsR0FBRyxFQUFFLENBRHFDO0FBRTFDQyxNQUFBQSxHQUFHLEVBQUUsQ0FGcUM7QUFHMUNDLE1BQUFBLElBQUksRUFBRSxLQUhvQztBQUkxQ0MsTUFBQUEsT0FBTyxFQUFFLEtBSmlDO0FBSzFDQyxNQUFBQSxLQUFLLEVBQUUsSUFMbUM7QUFNMUNDLE1BQUFBLFFBQVEsRUFBRSxLQUFLQyxTQUFMLENBQWVDLElBQWYsQ0FBb0IsSUFBcEI7QUFOZ0MsS0FBOUIsQ0FBZDtBQVNBLFNBQUtDLFNBQUw7QUFDRDs7OztzQ0FFaUJDLFMsRUFBVztBQUMzQjNCLE1BQUFBLENBQUMsQ0FBQzRCLElBQUYsQ0FBT0QsU0FBUCxFQUFrQkUsUUFBUSxJQUFJO0FBQzVCLFlBQUlDLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDSixRQUFyQyxFQUErQyxPQUEvQyxDQUFKLEVBQTZEO0FBQzNELGNBQUlBLFFBQVEsQ0FBQ0ssS0FBVCxDQUFlLEtBQUtyQixXQUFwQixDQUFKLEVBQXNDO0FBQ3BDLGlCQUFLc0Isa0JBQUwsQ0FBd0JOLFFBQXhCO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsa0JBQU0sSUFBSWIsS0FBSixDQUNILHlDQUF3Q2EsUUFBUSxDQUFDTyxHQUFJLGVBQWMsS0FBS3ZCLFdBQVksRUFEakYsQ0FBTjtBQUdEO0FBQ0Y7QUFDRixPQVZEO0FBV0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O3lDQUN1QjtBQUNuQixZQUFNd0IsYUFBYSxHQUFHLEtBQUs1QixTQUFMLENBQWVDLE1BQWYsQ0FBc0IyQixhQUF0QixJQUF1Q0MsTUFBN0Q7O0FBQ0EsVUFBSSxDQUFDRCxhQUFMLEVBQW9CO0FBQ2xCLFlBQUksS0FBSzVCLFNBQUwsQ0FBZUMsTUFBZixDQUFzQjZCLGlCQUExQixFQUE2QztBQUMzQyxnQkFBTSxJQUFJdkIsS0FBSixDQUNILG1DQUFrQyxLQUFLUCxTQUFMLENBQWVDLE1BQWYsQ0FBc0IyQixhQUFjLEVBRG5FLENBQU47QUFHRDs7QUFDRCxjQUFNLElBQUlyQixLQUFKLENBQVcsdURBQVgsQ0FBTjtBQUNEOztBQUNELGFBQU9xQixhQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7cUNBQ21CO0FBQ2YsVUFBSSxDQUFDLEtBQUt0QixJQUFWLEVBQWdCO0FBQ2QsZUFBT2IsT0FBTyxDQUFDc0MsT0FBUixFQUFQO0FBQ0Q7O0FBRUQsYUFBTyxLQUFLekIsSUFBTCxDQUFVMEIsS0FBVixHQUFrQkMsSUFBbEIsQ0FBdUIsTUFBTTtBQUNsQ3JDLFFBQUFBLEtBQUssQ0FBQyxzQ0FBRCxDQUFMO0FBQ0EsZUFBTyxLQUFLVSxJQUFMLENBQVU0QixhQUFWLEVBQVA7QUFDRCxPQUhNLENBQVA7QUFJRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7NEJBQ1U7QUFDTjtBQUNBLFdBQUtDLGFBQUwsR0FBcUIsU0FBU0EsYUFBVCxHQUF5QjtBQUM1QyxlQUFPMUMsT0FBTyxDQUFDMkMsTUFBUixDQUNMLElBQUk3QixLQUFKLENBQ0UscUZBREYsQ0FESyxDQUFQO0FBS0QsT0FORDs7QUFRQSxhQUFPLEtBQUs4QixjQUFMLEVBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBOzs7O2dDQUNjO0FBQ1YsWUFBTXBDLE1BQU0sR0FBRyxLQUFLQSxNQUFwQjs7QUFFQSxVQUFJLENBQUNBLE1BQU0sQ0FBQ3FDLFdBQVosRUFBeUI7QUFDdkIsYUFBS2hDLElBQUwsR0FBWSxJQUFJbEIsSUFBSixDQUFTO0FBQ25CbUQsVUFBQUEsSUFBSSxFQUFFLFdBRGE7QUFFbkJDLFVBQUFBLE1BQU0sRUFBRSxNQUFNLEtBQUtDLFFBQUwsQ0FBY3hDLE1BQWQsQ0FGSztBQUduQnlDLFVBQUFBLE9BQU8sRUFBRUMsVUFBVSxJQUFJO0FBQ3JCLG1CQUFPLEtBQUtDLFdBQUwsQ0FBaUJELFVBQWpCLEVBQTZCRSxHQUE3QixDQUFpQyxNQUFNO0FBQzVDakQsY0FBQUEsS0FBSyxDQUFDLG9CQUFELENBQUw7QUFDRCxhQUZNLENBQVA7QUFHRCxXQVBrQjtBQVFuQmtCLFVBQUFBLFFBQVEsRUFBRWIsTUFBTSxDQUFDSyxJQUFQLENBQVlRLFFBUkg7QUFTbkJMLFVBQUFBLEdBQUcsRUFBRVIsTUFBTSxDQUFDSyxJQUFQLENBQVlHLEdBVEU7QUFVbkJDLFVBQUFBLEdBQUcsRUFBRVQsTUFBTSxDQUFDSyxJQUFQLENBQVlJLEdBVkU7QUFXbkJvQyxVQUFBQSxvQkFBb0IsRUFBRTdDLE1BQU0sQ0FBQ0ssSUFBUCxDQUFZTSxPQVhmO0FBWW5CbUMsVUFBQUEsaUJBQWlCLEVBQUU5QyxNQUFNLENBQUNLLElBQVAsQ0FBWUssSUFaWjtBQWFuQnFDLFVBQUFBLGtCQUFrQixFQUFFL0MsTUFBTSxDQUFDSyxJQUFQLENBQVlPO0FBYmIsU0FBVCxDQUFaO0FBZ0JBakIsUUFBQUEsS0FBSyxDQUNGLDhCQUE2QkssTUFBTSxDQUFDSyxJQUFQLENBQVlHLEdBQUksSUFBR1IsTUFBTSxDQUFDSyxJQUFQLENBQVlJLEdBQUksa0JBRDlELENBQUw7QUFJQTtBQUNEOztBQUVELFVBQUksQ0FBQ3VDLEtBQUssQ0FBQ0MsT0FBTixDQUFjakQsTUFBTSxDQUFDcUMsV0FBUCxDQUFtQmEsSUFBakMsQ0FBTCxFQUE2QztBQUMzQ2xELFFBQUFBLE1BQU0sQ0FBQ3FDLFdBQVAsQ0FBbUJhLElBQW5CLEdBQTBCLENBQUNsRCxNQUFNLENBQUNxQyxXQUFQLENBQW1CYSxJQUFwQixDQUExQjtBQUNELE9BN0JTLENBK0JWOzs7QUFDQWxELE1BQUFBLE1BQU0sQ0FBQ3FDLFdBQVAsQ0FBbUJjLEtBQW5CLEdBQTJCN0QsQ0FBQyxDQUFDaUIsUUFBRixDQUN6QlAsTUFBTSxDQUFDcUMsV0FBUCxDQUFtQmMsS0FETSxFQUV6QjdELENBQUMsQ0FBQzhELElBQUYsQ0FBT3BELE1BQVAsRUFBZSxhQUFmLENBRnlCLENBQTNCLENBaENVLENBcUNWOztBQUNBQSxNQUFBQSxNQUFNLENBQUNxQyxXQUFQLENBQW1CYSxJQUFuQixHQUEwQmxELE1BQU0sQ0FBQ3FDLFdBQVAsQ0FBbUJhLElBQW5CLENBQXdCRyxHQUF4QixDQUE0QkMsVUFBVSxJQUM5RGhFLENBQUMsQ0FBQ2lCLFFBQUYsQ0FBVytDLFVBQVgsRUFBdUJoRSxDQUFDLENBQUM4RCxJQUFGLENBQU8sS0FBS3BELE1BQVosRUFBb0IsYUFBcEIsQ0FBdkIsQ0FEd0IsQ0FBMUIsQ0F0Q1UsQ0EwQ1Y7O0FBQ0EsVUFBSXVELEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBS2xELElBQUwsR0FBWTtBQUNWbUQsUUFBQUEsT0FBTyxFQUFFQyxNQUFNLElBQUk7QUFDakIsY0FBSUEsTUFBTSxDQUFDQyxTQUFQLEtBQXFCLE1BQXpCLEVBQWlDO0FBQy9CLGlCQUFLckQsSUFBTCxDQUFVNkMsSUFBVixDQUFlTSxPQUFmLENBQXVCQyxNQUF2QjtBQUNELFdBRkQsTUFFTztBQUNMLGlCQUFLcEQsSUFBTCxDQUFVOEMsS0FBVixDQUFnQkssT0FBaEIsQ0FBd0JDLE1BQXhCO0FBQ0Q7QUFDRixTQVBTO0FBUVY5QyxRQUFBQSxPQUFPLEVBQUUsQ0FBQytDLFNBQUQsRUFBWUMsU0FBWixLQUEwQjtBQUNqQ0EsVUFBQUEsU0FBUyxHQUFHQSxTQUFTLEtBQUtDLFNBQWQsR0FBMEIsS0FBMUIsR0FBa0NELFNBQTlDOztBQUNBLGNBQUlELFNBQVMsS0FBSyxRQUFkLElBQTBCLENBQUNDLFNBQS9CLEVBQTBDO0FBQ3hDLG1CQUFPLEtBQUt0RCxJQUFMLENBQVU2QyxJQUFWLENBQWV2QyxPQUFmLEVBQVA7QUFDRDs7QUFDRCxpQkFBTyxLQUFLTixJQUFMLENBQVU4QyxLQUFWLENBQWdCeEMsT0FBaEIsRUFBUDtBQUNELFNBZFM7QUFlVjhCLFFBQUFBLE9BQU8sRUFBRUMsVUFBVSxJQUFJO0FBQ3JCLGVBQUtyQyxJQUFMLENBQVVxQyxVQUFVLENBQUNnQixTQUFyQixFQUFnQ2pCLE9BQWhDLENBQXdDQyxVQUF4QztBQUNBL0MsVUFBQUEsS0FBSyxDQUFDLG9CQUFELENBQUw7QUFDRCxTQWxCUztBQW1CVnNDLFFBQUFBLGFBQWEsRUFBRSxNQUFNO0FBQ25CLGlCQUFPekMsT0FBTyxDQUFDcUUsSUFBUixDQUNMLEtBQUt4RCxJQUFMLENBQVU2QyxJQUFWLENBQWVqQixhQUFmLEVBREssRUFFTCxLQUFLNUIsSUFBTCxDQUFVOEMsS0FBVixDQUFnQmxCLGFBQWhCLEVBRkssRUFHTFcsR0FISyxDQUdELE1BQU07QUFDVmpELFlBQUFBLEtBQUssQ0FBQywyQkFBRCxDQUFMO0FBQ0QsV0FMTSxDQUFQO0FBTUQsU0ExQlM7QUEyQlZvQyxRQUFBQSxLQUFLLEVBQUUsTUFBTTtBQUNYLGlCQUFPdkMsT0FBTyxDQUFDcUUsSUFBUixDQUFhLEtBQUt4RCxJQUFMLENBQVU4QyxLQUFWLENBQWdCcEIsS0FBaEIsRUFBYixFQUFzQyxLQUFLMUIsSUFBTCxDQUFVNkMsSUFBVixDQUFlbkIsS0FBZixFQUF0QyxDQUFQO0FBQ0QsU0E3QlM7QUE4QlZtQixRQUFBQSxJQUFJLEVBQUUsSUFBSS9ELElBQUosQ0FBUztBQUNibUQsVUFBQUEsSUFBSSxFQUFFLGdCQURPO0FBRWJDLFVBQUFBLE1BQU0sRUFBRSxNQUFNO0FBQ1o7QUFDQSxrQkFBTXVCLFFBQVEsR0FBR1AsS0FBSyxLQUFLdkQsTUFBTSxDQUFDcUMsV0FBUCxDQUFtQmEsSUFBbkIsQ0FBd0JhLE1BQW5EO0FBQ0EsbUJBQU8sS0FBS3ZCLFFBQUwsQ0FBY3hDLE1BQU0sQ0FBQ3FDLFdBQVAsQ0FBbUJhLElBQW5CLENBQXdCWSxRQUF4QixDQUFkLEVBQWlEbEIsR0FBakQsQ0FDTEYsVUFBVSxJQUFJO0FBQ1pBLGNBQUFBLFVBQVUsQ0FBQ2dCLFNBQVgsR0FBdUIsTUFBdkI7QUFDRCxhQUhJLENBQVA7QUFLRCxXQVZZO0FBV2JqQixVQUFBQSxPQUFPLEVBQUVDLFVBQVUsSUFBSSxLQUFLQyxXQUFMLENBQWlCRCxVQUFqQixDQVhWO0FBWWI3QixVQUFBQSxRQUFRLEVBQUViLE1BQU0sQ0FBQ0ssSUFBUCxDQUFZUSxRQVpUO0FBYWJMLFVBQUFBLEdBQUcsRUFBRVIsTUFBTSxDQUFDSyxJQUFQLENBQVlHLEdBYko7QUFjYkMsVUFBQUEsR0FBRyxFQUFFVCxNQUFNLENBQUNLLElBQVAsQ0FBWUksR0FkSjtBQWVib0MsVUFBQUEsb0JBQW9CLEVBQUU3QyxNQUFNLENBQUNLLElBQVAsQ0FBWU0sT0FmckI7QUFnQmJtQyxVQUFBQSxpQkFBaUIsRUFBRTlDLE1BQU0sQ0FBQ0ssSUFBUCxDQUFZSyxJQWhCbEI7QUFpQmJxQyxVQUFBQSxrQkFBa0IsRUFBRS9DLE1BQU0sQ0FBQ0ssSUFBUCxDQUFZTztBQWpCbkIsU0FBVCxDQTlCSTtBQWlEVnVDLFFBQUFBLEtBQUssRUFBRSxJQUFJaEUsSUFBSixDQUFTO0FBQ2RtRCxVQUFBQSxJQUFJLEVBQUUsaUJBRFE7QUFFZEMsVUFBQUEsTUFBTSxFQUFFLE1BQU07QUFDWixtQkFBTyxLQUFLQyxRQUFMLENBQWN4QyxNQUFNLENBQUNxQyxXQUFQLENBQW1CYyxLQUFqQyxFQUF3Q1AsR0FBeEMsQ0FBNENGLFVBQVUsSUFBSTtBQUMvREEsY0FBQUEsVUFBVSxDQUFDZ0IsU0FBWCxHQUF1QixPQUF2QjtBQUNELGFBRk0sQ0FBUDtBQUdELFdBTmE7QUFPZGpCLFVBQUFBLE9BQU8sRUFBRUMsVUFBVSxJQUFJLEtBQUtDLFdBQUwsQ0FBaUJELFVBQWpCLENBUFQ7QUFRZDdCLFVBQUFBLFFBQVEsRUFBRWIsTUFBTSxDQUFDSyxJQUFQLENBQVlRLFFBUlI7QUFTZEwsVUFBQUEsR0FBRyxFQUFFUixNQUFNLENBQUNLLElBQVAsQ0FBWUcsR0FUSDtBQVVkQyxVQUFBQSxHQUFHLEVBQUVULE1BQU0sQ0FBQ0ssSUFBUCxDQUFZSSxHQVZIO0FBV2RvQyxVQUFBQSxvQkFBb0IsRUFBRTdDLE1BQU0sQ0FBQ0ssSUFBUCxDQUFZTSxPQVhwQjtBQVlkbUMsVUFBQUEsaUJBQWlCLEVBQUU5QyxNQUFNLENBQUNLLElBQVAsQ0FBWUssSUFaakI7QUFhZHFDLFVBQUFBLGtCQUFrQixFQUFFL0MsTUFBTSxDQUFDSyxJQUFQLENBQVlPO0FBYmxCLFNBQVQ7QUFqREcsT0FBWjtBQWtFQWpCLE1BQUFBLEtBQUssQ0FDRiw4QkFBNkJLLE1BQU0sQ0FBQ0ssSUFBUCxDQUFZRyxHQUFJLElBQUdSLE1BQU0sQ0FBQ0ssSUFBUCxDQUFZSSxHQUFJLG9CQUQ5RCxDQUFMO0FBR0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztrQ0FDZ0JMLE8sRUFBUztBQUNyQkEsTUFBQUEsT0FBTyxHQUFHQSxPQUFPLElBQUksRUFBckI7QUFFQSxVQUFJNEQsT0FBSjs7QUFDQSxVQUFJLEtBQUtqRSxTQUFMLENBQWVLLE9BQWYsQ0FBdUI2RCxlQUF2QixLQUEyQyxDQUEvQyxFQUFrRDtBQUNoRCxZQUFJLEtBQUsvRCxjQUFULEVBQXlCO0FBQ3ZCOEQsVUFBQUEsT0FBTyxHQUFHLEtBQUs5RCxjQUFmO0FBQ0QsU0FGRCxNQUVPO0FBQ0w4RCxVQUFBQSxPQUFPLEdBQUcsS0FBSzlELGNBQUwsR0FBc0IsS0FBS3NDLFFBQUwsQ0FDOUIsS0FBS3hDLE1BQUwsQ0FBWXFDLFdBQVosQ0FBd0JjLEtBQXhCLElBQWlDLEtBQUtuRCxNQURSLEVBRzdCZ0MsSUFINkIsQ0FHeEJVLFVBQVUsSUFBSTtBQUNsQixrQkFBTXdCLFFBQVEsR0FBRyxFQUFqQjtBQUVBQSxZQUFBQSxRQUFRLENBQUNDLFdBQVQsR0FBdUI7QUFBRXpCLGNBQUFBO0FBQUYsYUFBdkIsQ0FIa0IsQ0FHcUI7O0FBQ3ZDd0IsWUFBQUEsUUFBUSxDQUFDRSxPQUFULEdBQW1CLE1BQU0sQ0FBRSxDQUEzQjs7QUFDQUYsWUFBQUEsUUFBUSxDQUFDRSxPQUFULENBQWlCQyxlQUFqQixHQUFtQyxJQUFuQyxDQUxrQixDQU9sQjtBQUNBOztBQUNBLGdCQUFJLEtBQUt0RSxTQUFMLENBQWVLLE9BQWYsQ0FBdUI2RCxlQUF2QixLQUEyQyxDQUEvQyxFQUFrRDtBQUNoRCxxQkFBTyxLQUFLbEUsU0FBTCxDQUFla0UsZUFBZixDQUErQkMsUUFBL0IsRUFBeUNsQyxJQUF6QyxDQUE4Q3NDLE9BQU8sSUFBSTtBQUM5RCxzQkFBTUMsYUFBYSxHQUNqQmpGLENBQUMsQ0FBQ2tGLEdBQUYsQ0FBTWpGLE1BQU0sQ0FBQ2tGLE1BQVAsQ0FBY0gsT0FBZCxDQUFOLEVBQThCLFNBQTlCLEtBQTRDQSxPQUQ5QztBQUVBLHFCQUFLdkUsU0FBTCxDQUFlSyxPQUFmLENBQXVCNkQsZUFBdkIsR0FBeUMxRSxNQUFNLENBQUNtRixLQUFQLENBQ3ZDSCxhQUR1QyxJQUdyQ0EsYUFIcUMsR0FJckMsS0FBS0ksY0FKVDtBQUtBLHFCQUFLekUsY0FBTCxHQUFzQixJQUF0QjtBQUNBLHVCQUFPLEtBQUt5QyxXQUFMLENBQWlCRCxVQUFqQixDQUFQO0FBQ0QsZUFWTSxDQUFQO0FBV0Q7O0FBRUQsaUJBQUt4QyxjQUFMLEdBQXNCLElBQXRCO0FBQ0EsbUJBQU8sS0FBS3lDLFdBQUwsQ0FBaUJELFVBQWpCLENBQVA7QUFDRCxXQTVCNkIsRUE2QjdCa0MsS0E3QjZCLENBNkJ2QkMsR0FBRyxJQUFJO0FBQ1osaUJBQUszRSxjQUFMLEdBQXNCLElBQXRCO0FBQ0Esa0JBQU0yRSxHQUFOO0FBQ0QsV0FoQzZCLENBQWhDO0FBaUNEO0FBQ0YsT0F0Q0QsTUFzQ087QUFDTGIsUUFBQUEsT0FBTyxHQUFHeEUsT0FBTyxDQUFDc0MsT0FBUixFQUFWO0FBQ0Q7O0FBRUQsYUFBT2tDLE9BQU8sQ0FDWGhDLElBREksQ0FDQyxNQUFNO0FBQ1YsZUFBTyxLQUFLM0IsSUFBTCxDQUNKTSxPQURJLENBQ0lQLE9BQU8sQ0FBQzBFLElBRFosRUFDa0IxRSxPQUFPLENBQUN1RCxTQUQxQixFQUVKaUIsS0FGSSxDQUVFRyxLQUFLLElBQUk7QUFDZCxjQUFJQSxLQUFLLFlBQVkzRixZQUFyQixFQUNFLE1BQU0sSUFBSUssTUFBTSxDQUFDdUYsNkJBQVgsQ0FBeUNELEtBQXpDLENBQU47QUFDRixnQkFBTUEsS0FBTjtBQUNELFNBTkksQ0FBUDtBQU9ELE9BVEksRUFVSm5DLEdBVkksQ0FVQSxNQUFNO0FBQ1RqRCxRQUFBQSxLQUFLLENBQUMscUJBQUQsQ0FBTDtBQUNELE9BWkksQ0FBUDtBQWFEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7c0NBQ29CK0MsVSxFQUFZO0FBQzVCLGFBQU9sRCxPQUFPLENBQUN5RixHQUFSLENBQVksTUFBTTtBQUN2QixhQUFLNUUsSUFBTCxDQUFVbUQsT0FBVixDQUFrQmQsVUFBbEI7QUFDQS9DLFFBQUFBLEtBQUssQ0FBQyxxQkFBRCxDQUFMO0FBQ0QsT0FITSxDQUFQO0FBSUQ7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs2QkFDV0ssTSxFQUFRO0FBQ2YsYUFBTyxLQUFLRCxTQUFMLENBQ0ptRixRQURJLENBQ0ssZUFETCxFQUNzQmxGLE1BRHRCLEVBRUpnQyxJQUZJLENBRUMsTUFBTSxLQUFLbEMsT0FBTCxDQUFhcUYsaUJBQWIsQ0FBK0JDLE9BQS9CLENBQXVDcEYsTUFBdkMsQ0FGUCxFQUdKZ0MsSUFISSxDQUdDVSxVQUFVLElBQ2QsS0FBSzNDLFNBQUwsQ0FDR21GLFFBREgsQ0FDWSxjQURaLEVBQzRCeEMsVUFENUIsRUFDd0MxQyxNQUR4QyxFQUVHcUYsTUFGSCxDQUVVM0MsVUFGVixDQUpHLENBQVA7QUFRRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O2dDQUNjQSxVLEVBQVk7QUFDdEIsYUFBTyxLQUFLM0MsU0FBTCxDQUNKbUYsUUFESSxDQUNLLGtCQURMLEVBQ3lCeEMsVUFEekIsRUFFSlYsSUFGSSxDQUVDLE1BQU0sS0FBS2xDLE9BQUwsQ0FBYXFGLGlCQUFiLENBQStCRyxVQUEvQixDQUEwQzVDLFVBQTFDLENBRlAsRUFHSlYsSUFISSxDQUdDLE1BQU0sS0FBS2pDLFNBQUwsQ0FBZW1GLFFBQWYsQ0FBd0IsaUJBQXhCLEVBQTJDeEMsVUFBM0MsQ0FIUCxDQUFQO0FBSUQ7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs4QkFDWUEsVSxFQUFZO0FBQ3BCLFVBQUksQ0FBQyxLQUFLNUMsT0FBTCxDQUFhcUYsaUJBQWIsQ0FBK0J0RSxRQUFwQyxFQUE4QztBQUM1QyxlQUFPLElBQVA7QUFDRDs7QUFFRCxhQUFPLEtBQUtmLE9BQUwsQ0FBYXFGLGlCQUFiLENBQStCdEUsUUFBL0IsQ0FBd0M2QixVQUF4QyxDQUFQO0FBQ0Q7Ozs7OztBQUdINkMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCM0YsaUJBQWpCO0FBQ0EwRixNQUFNLENBQUNDLE9BQVAsQ0FBZTNGLGlCQUFmLEdBQW1DQSxpQkFBbkM7QUFDQTBGLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCNUYsaUJBQXpCIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHsgUG9vbCwgVGltZW91dEVycm9yIH0gPSByZXF1aXJlKFwic2VxdWVsaXplLXBvb2xcIik7XG5jb25zdCBfID0gcmVxdWlyZShcImxvZGFzaFwiKTtcbmNvbnN0IHNlbXZlciA9IHJlcXVpcmUoXCJzZW12ZXJcIik7XG5jb25zdCBQcm9taXNlID0gcmVxdWlyZShcIi4uLy4uL3Byb21pc2VcIik7XG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3JzXCIpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dnZXJcIik7XG5jb25zdCBkZWJ1ZyA9IGxvZ2dlci5kZWJ1Z0NvbnRleHQoXCJwb29sXCIpO1xuXG4vKipcbiAqIEFic3RyYWN0IENvbm5lY3Rpb24gTWFuYWdlclxuICpcbiAqIENvbm5lY3Rpb24gbWFuYWdlciB3aGljaCBoYW5kbGVzIHBvb2xpbmcgJiByZXBsaWNhdGlvbi5cbiAqIFVzZXMgc2VxdWVsaXplLXBvb2wgZm9yIHBvb2xpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDb25uZWN0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKGRpYWxlY3QsIHNlcXVlbGl6ZSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IF8uY2xvbmVEZWVwKHNlcXVlbGl6ZS5jb25maWcpO1xuXG4gICAgdGhpcy5zZXF1ZWxpemUgPSBzZXF1ZWxpemU7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5kaWFsZWN0ID0gZGlhbGVjdDtcbiAgICB0aGlzLnZlcnNpb25Qcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLmRpYWxlY3ROYW1lID0gdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0O1xuXG4gICAgaWYgKGNvbmZpZy5wb29sID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3VwcG9ydCBmb3IgcG9vbDpmYWxzZSB3YXMgcmVtb3ZlZCBpbiB2NC4wXCIpO1xuICAgIH1cblxuICAgIGNvbmZpZy5wb29sID0gXy5kZWZhdWx0cyhjb25maWcucG9vbCB8fCB7fSwge1xuICAgICAgbWF4OiA1LFxuICAgICAgbWluOiAwLFxuICAgICAgaWRsZTogMTAwMDAsXG4gICAgICBhY3F1aXJlOiA2MDAwMCxcbiAgICAgIGV2aWN0OiAxMDAwLFxuICAgICAgdmFsaWRhdGU6IHRoaXMuX3ZhbGlkYXRlLmJpbmQodGhpcylcbiAgICB9KTtcblxuICAgIHRoaXMuaW5pdFBvb2xzKCk7XG4gIH1cblxuICByZWZyZXNoVHlwZVBhcnNlcihkYXRhVHlwZXMpIHtcbiAgICBfLmVhY2goZGF0YVR5cGVzLCBkYXRhVHlwZSA9PiB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGFUeXBlLCBcInBhcnNlXCIpKSB7XG4gICAgICAgIGlmIChkYXRhVHlwZS50eXBlc1t0aGlzLmRpYWxlY3ROYW1lXSkge1xuICAgICAgICAgIHRoaXMuX3JlZnJlc2hUeXBlUGFyc2VyKGRhdGFUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgUGFyc2UgZnVuY3Rpb24gbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAke2RhdGFUeXBlLmtleX0gaW4gZGlhbGVjdCAke3RoaXMuZGlhbGVjdE5hbWV9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gbG9hZCBkaWFsZWN0IG1vZHVsZSBmcm9tIHZhcmlvdXMgY29uZmlndXJlZCBvcHRpb25zLlxuICAgKiBQcmlvcml0eSBnb2VzIGxpa2UgZGlhbGVjdE1vZHVsZVBhdGggPiBkaWFsZWN0TW9kdWxlID4gcmVxdWlyZShkZWZhdWx0KVxuICAgKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgX2xvYWREaWFsZWN0TW9kdWxlKCkge1xuICAgIGNvbnN0IGRpYWxlY3RNb2R1bGUgPSB0aGlzLnNlcXVlbGl6ZS5jb25maWcuZGlhbGVjdE1vZHVsZSB8fCB3aW5kb3c7XG4gICAgaWYgKCFkaWFsZWN0TW9kdWxlKSB7XG4gICAgICBpZiAodGhpcy5zZXF1ZWxpemUuY29uZmlnLmRpYWxlY3RNb2R1bGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVW5hYmxlIHRvIGxvYWQgZGlhbGVjdE1vZHVsZSBhdCAke3RoaXMuc2VxdWVsaXplLmNvbmZpZy5kaWFsZWN0TW9kdWxlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGxlYXNlIGFkZCBwYXJhbWV0ZXIgZGlhbGVjdE1vZHVsZSBpbiBjb25maWcgbWFudWFsbHlgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpYWxlY3RNb2R1bGU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlciB3aGljaCBleGVjdXRlcyBvbiBwcm9jZXNzIGV4aXQgb3IgY29ubmVjdGlvbiBtYW5hZ2VyIHNodXRkb3duXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgX29uUHJvY2Vzc0V4aXQoKSB7XG4gICAgaWYgKCF0aGlzLnBvb2wpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wb29sLmRyYWluKCkudGhlbigoKSA9PiB7XG4gICAgICBkZWJ1ZyhcImNvbm5lY3Rpb24gZHJhaW4gZHVlIHRvIHByb2Nlc3MgZXhpdFwiKTtcbiAgICAgIHJldHVybiB0aGlzLnBvb2wuZGVzdHJveUFsbE5vdygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERyYWluIHRoZSBwb29sIGFuZCBjbG9zZSBpdCBwZXJtYW5lbnRseVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIC8vIE1hcmsgY2xvc2Ugb2YgcG9vbFxuICAgIHRoaXMuZ2V0Q29ubmVjdGlvbiA9IGZ1bmN0aW9uIGdldENvbm5lY3Rpb24oKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNvbm5lY3Rpb25NYW5hZ2VyLmdldENvbm5lY3Rpb24gd2FzIGNhbGxlZCBhZnRlciB0aGUgY29ubmVjdGlvbiBtYW5hZ2VyIHdhcyBjbG9zZWQhXCJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuX29uUHJvY2Vzc0V4aXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNvbm5lY3Rpb24gcG9vbC4gQnkgZGVmYXVsdCBwb29sIGF1dG9zdGFydCBpcyBzZXQgdG8gZmFsc2UsIHNvIG5vIGNvbm5lY3Rpb24gd2lsbCBiZVxuICAgKiBiZSBjcmVhdGVkIHVubGVzcyBgcG9vbC5hY3F1aXJlYCBpcyBjYWxsZWQuXG4gICAqL1xuICBpbml0UG9vbHMoKSB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIWNvbmZpZy5yZXBsaWNhdGlvbikge1xuICAgICAgdGhpcy5wb29sID0gbmV3IFBvb2woe1xuICAgICAgICBuYW1lOiBcInNlcXVlbGl6ZVwiLFxuICAgICAgICBjcmVhdGU6ICgpID0+IHRoaXMuX2Nvbm5lY3QoY29uZmlnKSxcbiAgICAgICAgZGVzdHJveTogY29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2Nvbm5lY3QoY29ubmVjdGlvbikudGFwKCgpID0+IHtcbiAgICAgICAgICAgIGRlYnVnKFwiY29ubmVjdGlvbiBkZXN0cm95XCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZTogY29uZmlnLnBvb2wudmFsaWRhdGUsXG4gICAgICAgIG1heDogY29uZmlnLnBvb2wubWF4LFxuICAgICAgICBtaW46IGNvbmZpZy5wb29sLm1pbixcbiAgICAgICAgYWNxdWlyZVRpbWVvdXRNaWxsaXM6IGNvbmZpZy5wb29sLmFjcXVpcmUsXG4gICAgICAgIGlkbGVUaW1lb3V0TWlsbGlzOiBjb25maWcucG9vbC5pZGxlLFxuICAgICAgICByZWFwSW50ZXJ2YWxNaWxsaXM6IGNvbmZpZy5wb29sLmV2aWN0XG4gICAgICB9KTtcblxuICAgICAgZGVidWcoXG4gICAgICAgIGBwb29sIGNyZWF0ZWQgd2l0aCBtYXgvbWluOiAke2NvbmZpZy5wb29sLm1heH0vJHtjb25maWcucG9vbC5taW59LCBubyByZXBsaWNhdGlvbmBcbiAgICAgICk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnJlcGxpY2F0aW9uLnJlYWQpKSB7XG4gICAgICBjb25maWcucmVwbGljYXRpb24ucmVhZCA9IFtjb25maWcucmVwbGljYXRpb24ucmVhZF07XG4gICAgfVxuXG4gICAgLy8gTWFwIG1haW4gY29ubmVjdGlvbiBjb25maWdcbiAgICBjb25maWcucmVwbGljYXRpb24ud3JpdGUgPSBfLmRlZmF1bHRzKFxuICAgICAgY29uZmlnLnJlcGxpY2F0aW9uLndyaXRlLFxuICAgICAgXy5vbWl0KGNvbmZpZywgXCJyZXBsaWNhdGlvblwiKVxuICAgICk7XG5cbiAgICAvLyBBcHBseSBkZWZhdWx0cyB0byBlYWNoIHJlYWQgY29uZmlnXG4gICAgY29uZmlnLnJlcGxpY2F0aW9uLnJlYWQgPSBjb25maWcucmVwbGljYXRpb24ucmVhZC5tYXAocmVhZENvbmZpZyA9PlxuICAgICAgXy5kZWZhdWx0cyhyZWFkQ29uZmlnLCBfLm9taXQodGhpcy5jb25maWcsIFwicmVwbGljYXRpb25cIikpXG4gICAgKTtcblxuICAgIC8vIGN1c3RvbSBwb29saW5nIGZvciByZXBsaWNhdGlvbiAob3JpZ2luYWwgYXV0aG9yIEBqYW5tZWllcilcbiAgICBsZXQgcmVhZHMgPSAwO1xuICAgIHRoaXMucG9vbCA9IHtcbiAgICAgIHJlbGVhc2U6IGNsaWVudCA9PiB7XG4gICAgICAgIGlmIChjbGllbnQucXVlcnlUeXBlID09PSBcInJlYWRcIikge1xuICAgICAgICAgIHRoaXMucG9vbC5yZWFkLnJlbGVhc2UoY2xpZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnBvb2wud3JpdGUucmVsZWFzZShjbGllbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYWNxdWlyZTogKHF1ZXJ5VHlwZSwgdXNlTWFzdGVyKSA9PiB7XG4gICAgICAgIHVzZU1hc3RlciA9IHVzZU1hc3RlciA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiB1c2VNYXN0ZXI7XG4gICAgICAgIGlmIChxdWVyeVR5cGUgPT09IFwiU0VMRUNUXCIgJiYgIXVzZU1hc3Rlcikge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBvb2wucmVhZC5hY3F1aXJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucG9vbC53cml0ZS5hY3F1aXJlKCk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogY29ubmVjdGlvbiA9PiB7XG4gICAgICAgIHRoaXMucG9vbFtjb25uZWN0aW9uLnF1ZXJ5VHlwZV0uZGVzdHJveShjb25uZWN0aW9uKTtcbiAgICAgICAgZGVidWcoXCJjb25uZWN0aW9uIGRlc3Ryb3lcIik7XG4gICAgICB9LFxuICAgICAgZGVzdHJveUFsbE5vdzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5qb2luKFxuICAgICAgICAgIHRoaXMucG9vbC5yZWFkLmRlc3Ryb3lBbGxOb3coKSxcbiAgICAgICAgICB0aGlzLnBvb2wud3JpdGUuZGVzdHJveUFsbE5vdygpXG4gICAgICAgICkudGFwKCgpID0+IHtcbiAgICAgICAgICBkZWJ1ZyhcImFsbCBjb25uZWN0aW9ucyBkZXN0cm95ZWRcIik7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGRyYWluOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmpvaW4odGhpcy5wb29sLndyaXRlLmRyYWluKCksIHRoaXMucG9vbC5yZWFkLmRyYWluKCkpO1xuICAgICAgfSxcbiAgICAgIHJlYWQ6IG5ldyBQb29sKHtcbiAgICAgICAgbmFtZTogXCJzZXF1ZWxpemU6cmVhZFwiLFxuICAgICAgICBjcmVhdGU6ICgpID0+IHtcbiAgICAgICAgICAvLyByb3VuZCByb2JpbiBjb25maWdcbiAgICAgICAgICBjb25zdCBuZXh0UmVhZCA9IHJlYWRzKysgJSBjb25maWcucmVwbGljYXRpb24ucmVhZC5sZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3QoY29uZmlnLnJlcGxpY2F0aW9uLnJlYWRbbmV4dFJlYWRdKS50YXAoXG4gICAgICAgICAgICBjb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbi5xdWVyeVR5cGUgPSBcInJlYWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBkZXN0cm95OiBjb25uZWN0aW9uID0+IHRoaXMuX2Rpc2Nvbm5lY3QoY29ubmVjdGlvbiksXG4gICAgICAgIHZhbGlkYXRlOiBjb25maWcucG9vbC52YWxpZGF0ZSxcbiAgICAgICAgbWF4OiBjb25maWcucG9vbC5tYXgsXG4gICAgICAgIG1pbjogY29uZmlnLnBvb2wubWluLFxuICAgICAgICBhY3F1aXJlVGltZW91dE1pbGxpczogY29uZmlnLnBvb2wuYWNxdWlyZSxcbiAgICAgICAgaWRsZVRpbWVvdXRNaWxsaXM6IGNvbmZpZy5wb29sLmlkbGUsXG4gICAgICAgIHJlYXBJbnRlcnZhbE1pbGxpczogY29uZmlnLnBvb2wuZXZpY3RcbiAgICAgIH0pLFxuICAgICAgd3JpdGU6IG5ldyBQb29sKHtcbiAgICAgICAgbmFtZTogXCJzZXF1ZWxpemU6d3JpdGVcIixcbiAgICAgICAgY3JlYXRlOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3QoY29uZmlnLnJlcGxpY2F0aW9uLndyaXRlKS50YXAoY29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25uZWN0aW9uLnF1ZXJ5VHlwZSA9IFwid3JpdGVcIjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVzdHJveTogY29ubmVjdGlvbiA9PiB0aGlzLl9kaXNjb25uZWN0KGNvbm5lY3Rpb24pLFxuICAgICAgICB2YWxpZGF0ZTogY29uZmlnLnBvb2wudmFsaWRhdGUsXG4gICAgICAgIG1heDogY29uZmlnLnBvb2wubWF4LFxuICAgICAgICBtaW46IGNvbmZpZy5wb29sLm1pbixcbiAgICAgICAgYWNxdWlyZVRpbWVvdXRNaWxsaXM6IGNvbmZpZy5wb29sLmFjcXVpcmUsXG4gICAgICAgIGlkbGVUaW1lb3V0TWlsbGlzOiBjb25maWcucG9vbC5pZGxlLFxuICAgICAgICByZWFwSW50ZXJ2YWxNaWxsaXM6IGNvbmZpZy5wb29sLmV2aWN0XG4gICAgICB9KVxuICAgIH07XG5cbiAgICBkZWJ1ZyhcbiAgICAgIGBwb29sIGNyZWF0ZWQgd2l0aCBtYXgvbWluOiAke2NvbmZpZy5wb29sLm1heH0vJHtjb25maWcucG9vbC5taW59LCB3aXRoIHJlcGxpY2F0aW9uYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbm5lY3Rpb24gZnJvbSBwb29sLiBJdCBzZXRzIGRhdGFiYXNlIHZlcnNpb24gaWYgaXQncyBub3QgYWxyZWFkeSBzZXQuXG4gICAqIENhbGwgcG9vbC5hY3F1aXJlIHRvIGdldCBhIGNvbm5lY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnNdICAgICAgICAgICAgICAgICBQb29sIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgW29wdGlvbnMudHlwZV0gICAgICAgICAgICBTZXQgd2hpY2ggcmVwbGljYSB0byB1c2UuIEF2YWlsYWJsZSBvcHRpb25zIGFyZSBgcmVhZGAgYW5kIGB3cml0ZWBcbiAgICogQHBhcmFtIHtib29sZWFufSAgW29wdGlvbnMudXNlTWFzdGVyPWZhbHNlXSBGb3JjZSBtYXN0ZXIgb3Igd3JpdGUgcmVwbGljYSB0byBnZXQgY29ubmVjdGlvbiBmcm9tXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENvbm5lY3Rpb24+fVxuICAgKi9cbiAgZ2V0Q29ubmVjdGlvbihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBpZiAodGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kYXRhYmFzZVZlcnNpb24gPT09IDApIHtcbiAgICAgIGlmICh0aGlzLnZlcnNpb25Qcm9taXNlKSB7XG4gICAgICAgIHByb21pc2UgPSB0aGlzLnZlcnNpb25Qcm9taXNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZSA9IHRoaXMudmVyc2lvblByb21pc2UgPSB0aGlzLl9jb25uZWN0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLnJlcGxpY2F0aW9uLndyaXRlIHx8IHRoaXMuY29uZmlnXG4gICAgICAgIClcbiAgICAgICAgICAudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IF9vcHRpb25zID0ge307XG5cbiAgICAgICAgICAgIF9vcHRpb25zLnRyYW5zYWN0aW9uID0geyBjb25uZWN0aW9uIH07IC8vIENoZWF0IC5xdWVyeSB0byB1c2Ugb3VyIHByaXZhdGUgY29ubmVjdGlvblxuICAgICAgICAgICAgX29wdGlvbnMubG9nZ2luZyA9ICgpID0+IHt9O1xuICAgICAgICAgICAgX29wdGlvbnMubG9nZ2luZy5fX3Rlc3RMb2dnaW5nRm4gPSB0cnVlO1xuXG4gICAgICAgICAgICAvL2Nvbm5lY3Rpb24gbWlnaHQgaGF2ZSBzZXQgZGF0YWJhc2VWZXJzaW9uIHZhbHVlIGF0IGluaXRpYWxpemF0aW9uLFxuICAgICAgICAgICAgLy9hdm9pZGluZyBhIHVzZWxlc3Mgcm91bmQgdHJpcFxuICAgICAgICAgICAgaWYgKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGF0YWJhc2VWZXJzaW9uID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5kYXRhYmFzZVZlcnNpb24oX29wdGlvbnMpLnRoZW4odmVyc2lvbiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkVmVyc2lvbiA9XG4gICAgICAgICAgICAgICAgICBfLmdldChzZW12ZXIuY29lcmNlKHZlcnNpb24pLCBcInZlcnNpb25cIikgfHwgdmVyc2lvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRhdGFiYXNlVmVyc2lvbiA9IHNlbXZlci52YWxpZChcbiAgICAgICAgICAgICAgICAgIHBhcnNlZFZlcnNpb25cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA/IHBhcnNlZFZlcnNpb25cbiAgICAgICAgICAgICAgICAgIDogdGhpcy5kZWZhdWx0VmVyc2lvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcnNpb25Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzY29ubmVjdChjb25uZWN0aW9uKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudmVyc2lvblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2Nvbm5lY3QoY29ubmVjdGlvbik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMudmVyc2lvblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2VcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9vbFxuICAgICAgICAgIC5hY3F1aXJlKG9wdGlvbnMudHlwZSwgb3B0aW9ucy51c2VNYXN0ZXIpXG4gICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFRpbWVvdXRFcnJvcilcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5Db25uZWN0aW9uQWNxdWlyZVRpbWVvdXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAudGFwKCgpID0+IHtcbiAgICAgICAgZGVidWcoXCJjb25uZWN0aW9uIGFjcXVpcmVkXCIpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZSBhIHBvb2xlZCBjb25uZWN0aW9uIHNvIGl0IGNhbiBiZSB1dGlsaXplZCBieSBvdGhlciBjb25uZWN0aW9uIHJlcXVlc3RzXG4gICAqXG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvbn0gY29ubmVjdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHJlbGVhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xuICAgICAgdGhpcy5wb29sLnJlbGVhc2UoY29ubmVjdGlvbik7XG4gICAgICBkZWJ1ZyhcImNvbm5lY3Rpb24gcmVsZWFzZWRcIik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBkaWFsZWN0IGxpYnJhcnkgdG8gZ2V0IGNvbm5lY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHsqfSBjb25maWcgQ29ubmVjdGlvbiBjb25maWdcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q29ubmVjdGlvbj59XG4gICAqL1xuICBfY29ubmVjdChjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVcbiAgICAgIC5ydW5Ib29rcyhcImJlZm9yZUNvbm5lY3RcIiwgY29uZmlnKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5kaWFsZWN0LmNvbm5lY3Rpb25NYW5hZ2VyLmNvbm5lY3QoY29uZmlnKSlcbiAgICAgIC50aGVuKGNvbm5lY3Rpb24gPT5cbiAgICAgICAgdGhpcy5zZXF1ZWxpemVcbiAgICAgICAgICAucnVuSG9va3MoXCJhZnRlckNvbm5lY3RcIiwgY29ubmVjdGlvbiwgY29uZmlnKVxuICAgICAgICAgIC5yZXR1cm4oY29ubmVjdGlvbilcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBkaWFsZWN0IGxpYnJhcnkgdG8gZGlzY29ubmVjdCBhIGNvbm5lY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtDb25uZWN0aW9ufSBjb25uZWN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgX2Rpc2Nvbm5lY3QoY29ubmVjdGlvbikge1xuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZVxuICAgICAgLnJ1bkhvb2tzKFwiYmVmb3JlRGlzY29ubmVjdFwiLCBjb25uZWN0aW9uKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5kaWFsZWN0LmNvbm5lY3Rpb25NYW5hZ2VyLmRpc2Nvbm5lY3QoY29ubmVjdGlvbikpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLnNlcXVlbGl6ZS5ydW5Ib29rcyhcImFmdGVyRGlzY29ubmVjdFwiLCBjb25uZWN0aW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIGEgY29ubmVjdGlvbiBpcyBzdGlsbCB2YWxpZCBvciBub3RcbiAgICpcbiAgICogQHBhcmFtIHtDb25uZWN0aW9ufSBjb25uZWN0aW9uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgX3ZhbGlkYXRlKGNvbm5lY3Rpb24pIHtcbiAgICBpZiAoIXRoaXMuZGlhbGVjdC5jb25uZWN0aW9uTWFuYWdlci52YWxpZGF0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGlhbGVjdC5jb25uZWN0aW9uTWFuYWdlci52YWxpZGF0ZShjb25uZWN0aW9uKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbm5lY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMuQ29ubmVjdGlvbk1hbmFnZXIgPSBDb25uZWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBDb25uZWN0aW9uTWFuYWdlcjtcbiJdfQ== \ No newline at end of file diff --git a/dist/dialects/abstract/index.js b/dist/dialects/abstract/index.js index 348cce6..230aed9 100644 --- a/dist/dialects/abstract/index.js +++ b/dist/dialects/abstract/index.js @@ -81,4 +81,4 @@ AbstractDialect.prototype.supports = { module.exports = AbstractDialect; module.exports.AbstractDialect = AbstractDialect; module.exports.default = AbstractDialect; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9pbmRleC5qcyJdLCJuYW1lcyI6WyJBYnN0cmFjdERpYWxlY3QiLCJwcm90b3R5cGUiLCJzdXBwb3J0cyIsInJldHVyblZhbHVlcyIsImF1dG9JbmNyZW1lbnQiLCJpZGVudGl0eUluc2VydCIsImRlZmF1bHRWYWx1ZSIsInVwZGF0ZSIsImJ1bGtEZWZhdWx0Iiwic2NoZW1hcyIsInRyYW5zYWN0aW9ucyIsInNldHRpbmdJc29sYXRpb25MZXZlbER1cmluZ1RyYW5zYWN0aW9uIiwidHJhbnNhY3Rpb25PcHRpb25zIiwidHlwZSIsIm1pZ3JhdGlvbnMiLCJ1cHNlcnRzIiwiaW5zZXJ0cyIsImlnbm9yZUR1cGxpY2F0ZXMiLCJ1cGRhdGVPbkR1cGxpY2F0ZSIsIm9uQ29uZmxpY3REb05vdGhpbmciLCJjb25zdHJhaW50cyIsInJlc3RyaWN0IiwiYWRkQ29uc3RyYWludCIsImRyb3BDb25zdHJhaW50IiwidW5pcXVlIiwiZGVmYXVsdCIsImNoZWNrIiwiZm9yZWlnbktleSIsInByaW1hcnlLZXkiLCJpbmRleCIsImNvbGxhdGUiLCJsZW5ndGgiLCJwYXJzZXIiLCJjb25jdXJyZW50bHkiLCJ1c2luZyIsImZ1bmN0aW9uQmFzZWQiLCJqb2luVGFibGVEZXBlbmRlbnQiLCJncm91cGVkTGltaXQiLCJpbmRleFZpYUFsdGVyIiwiSlNPTiIsImRlZmVycmFibGVDb25zdHJhaW50cyIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7O0lBRU1BLGU7Ozs7QUFFTkEsZUFBZSxDQUFDQyxTQUFoQixDQUEwQkMsUUFBMUIsR0FBcUM7QUFDbkMsYUFBVyxJQUR3QjtBQUVuQyxvQkFBa0IsS0FGaUI7QUFHbkMsZUFBYSxLQUhzQjtBQUluQyxxQkFBbUIsS0FKZ0I7QUFLbkMsc0JBQW9CLElBTGU7QUFNbkMsaUJBQWUsS0FOb0I7QUFPbkMsV0FBUyxJQVAwQjtBQVFuQyxlQUFhLElBUnNCO0FBU25DLGdCQUFjLElBVHFCOztBQVduQztBQUNBQyxFQUFBQSxZQUFZLEVBQUUsS0FacUI7O0FBY25DO0FBQ0FDLEVBQUFBLGFBQWEsRUFBRTtBQUNiO0FBQ0FDLElBQUFBLGNBQWMsRUFBRSxLQUZIOztBQUliO0FBQ0FDLElBQUFBLFlBQVksRUFBRSxJQUxEOztBQU9iO0FBQ0FDLElBQUFBLE1BQU0sRUFBRTtBQVJLLEdBZm9COztBQXlCbkM7QUFDQUMsRUFBQUEsV0FBVyxFQUFFLEtBMUJzQjtBQTJCbkNDLEVBQUFBLE9BQU8sRUFBRSxLQTNCMEI7QUE0Qm5DQyxFQUFBQSxZQUFZLEVBQUUsSUE1QnFCO0FBNkJuQ0MsRUFBQUEsc0NBQXNDLEVBQUUsSUE3Qkw7QUE4Qm5DQyxFQUFBQSxrQkFBa0IsRUFBRTtBQUNsQkMsSUFBQUEsSUFBSSxFQUFFO0FBRFksR0E5QmU7QUFpQ25DQyxFQUFBQSxVQUFVLEVBQUUsSUFqQ3VCO0FBa0NuQ0MsRUFBQUEsT0FBTyxFQUFFLElBbEMwQjtBQW1DbkNDLEVBQUFBLE9BQU8sRUFBRTtBQUNQQyxJQUFBQSxnQkFBZ0IsRUFBRSxFQURYOztBQUNlO0FBQ3RCQyxJQUFBQSxpQkFBaUIsRUFBRSxLQUZaOztBQUVtQjtBQUMxQkMsSUFBQUEsbUJBQW1CLEVBQUU7QUFBRzs7QUFIakIsR0FuQzBCO0FBd0NuQ0MsRUFBQUEsV0FBVyxFQUFFO0FBQ1hDLElBQUFBLFFBQVEsRUFBRSxJQURDO0FBRVhDLElBQUFBLGFBQWEsRUFBRSxJQUZKO0FBR1hDLElBQUFBLGNBQWMsRUFBRSxJQUhMO0FBSVhDLElBQUFBLE1BQU0sRUFBRSxJQUpHO0FBS1hDLElBQUFBLE9BQU8sRUFBRSxLQUxFO0FBTVhDLElBQUFBLEtBQUssRUFBRSxJQU5JO0FBT1hDLElBQUFBLFVBQVUsRUFBRSxJQVBEO0FBUVhDLElBQUFBLFVBQVUsRUFBRTtBQVJELEdBeENzQjtBQWtEbkNDLEVBQUFBLEtBQUssRUFBRTtBQUNMQyxJQUFBQSxPQUFPLEVBQUUsSUFESjtBQUVMQyxJQUFBQSxNQUFNLEVBQUUsS0FGSDtBQUdMQyxJQUFBQSxNQUFNLEVBQUUsS0FISDtBQUlMQyxJQUFBQSxZQUFZLEVBQUUsS0FKVDtBQUtMcEIsSUFBQUEsSUFBSSxFQUFFLEtBTEQ7QUFNTHFCLElBQUFBLEtBQUssRUFBRSxJQU5GO0FBT0xDLElBQUFBLGFBQWEsRUFBRTtBQVBWLEdBbEQ0QjtBQTJEbkNDLEVBQUFBLGtCQUFrQixFQUFFLElBM0RlO0FBNERuQ0MsRUFBQUEsWUFBWSxFQUFFLElBNURxQjtBQTZEbkNDLEVBQUFBLGFBQWEsRUFBRSxLQTdEb0I7QUE4RG5DQyxFQUFBQSxJQUFJLEVBQUUsS0E5RDZCO0FBK0RuQ0MsRUFBQUEscUJBQXFCLEVBQUU7QUEvRFksQ0FBckM7QUFrRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjFDLGVBQWpCO0FBQ0F5QyxNQUFNLENBQUNDLE9BQVAsQ0FBZTFDLGVBQWYsR0FBaUNBLGVBQWpDO0FBQ0F5QyxNQUFNLENBQUNDLE9BQVAsQ0FBZWpCLE9BQWYsR0FBeUJ6QixlQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNsYXNzIEFic3RyYWN0RGlhbGVjdCB7fVxyXG5cclxuQWJzdHJhY3REaWFsZWN0LnByb3RvdHlwZS5zdXBwb3J0cyA9IHtcclxuICAnREVGQVVMVCc6IHRydWUsXHJcbiAgJ0RFRkFVTFQgVkFMVUVTJzogZmFsc2UsXHJcbiAgJ1ZBTFVFUyAoKSc6IGZhbHNlLFxyXG4gICdMSU1JVCBPTiBVUERBVEUnOiBmYWxzZSxcclxuICAnT04gRFVQTElDQVRFIEtFWSc6IHRydWUsXHJcbiAgJ09SREVSIE5VTExTJzogZmFsc2UsXHJcbiAgJ1VOSU9OJzogdHJ1ZSxcclxuICAnVU5JT04gQUxMJzogdHJ1ZSxcclxuICAnUklHSFQgSk9JTic6IHRydWUsXHJcblxyXG4gIC8qIGRvZXMgdGhlIGRpYWxlY3Qgc3VwcG9ydCByZXR1cm5pbmcgdmFsdWVzIGZvciBpbnNlcnRlZC91cGRhdGVkIGZpZWxkcyAqL1xyXG4gIHJldHVyblZhbHVlczogZmFsc2UsXHJcblxyXG4gIC8qIGZlYXR1cmVzIHNwZWNpZmljIHRvIGF1dG9JbmNyZW1lbnQgdmFsdWVzICovXHJcbiAgYXV0b0luY3JlbWVudDoge1xyXG4gICAgLyogZG9lcyB0aGUgZGlhbGVjdCByZXF1aXJlIG1vZGlmaWNhdGlvbiBvZiBpbnNlcnQgcXVlcmllcyB3aGVuIGluc2VydGluZyBhdXRvIGluY3JlbWVudCBmaWVsZHMgKi9cclxuICAgIGlkZW50aXR5SW5zZXJ0OiBmYWxzZSxcclxuXHJcbiAgICAvKiBkb2VzIHRoZSBkaWFsZWN0IHN1cHBvcnQgaW5zZXJ0aW5nIGRlZmF1bHQvbnVsbCB2YWx1ZXMgZm9yIGF1dG9pbmNyZW1lbnQgZmllbGRzICovXHJcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXHJcblxyXG4gICAgLyogZG9lcyB0aGUgZGlhbGVjdCBzdXBwb3J0IHVwZGF0aW5nIGF1dG9pbmNyZW1lbnQgZmllbGRzICovXHJcbiAgICB1cGRhdGU6IHRydWVcclxuICB9LFxyXG4gIC8qIERvIHdlIG5lZWQgdG8gc2F5IERFRkFVTFQgZm9yIGJ1bGsgaW5zZXJ0ICovXHJcbiAgYnVsa0RlZmF1bHQ6IGZhbHNlLFxyXG4gIHNjaGVtYXM6IGZhbHNlLFxyXG4gIHRyYW5zYWN0aW9uczogdHJ1ZSxcclxuICBzZXR0aW5nSXNvbGF0aW9uTGV2ZWxEdXJpbmdUcmFuc2FjdGlvbjogdHJ1ZSxcclxuICB0cmFuc2FjdGlvbk9wdGlvbnM6IHtcclxuICAgIHR5cGU6IGZhbHNlXHJcbiAgfSxcclxuICBtaWdyYXRpb25zOiB0cnVlLFxyXG4gIHVwc2VydHM6IHRydWUsXHJcbiAgaW5zZXJ0czoge1xyXG4gICAgaWdub3JlRHVwbGljYXRlczogJycsIC8qIGRpYWxlY3Qgc3BlY2lmaWMgd29yZHMgZm9yIElOU0VSVCBJR05PUkUgb3IgRE8gTk9USElORyAqL1xyXG4gICAgdXBkYXRlT25EdXBsaWNhdGU6IGZhbHNlLCAvKiB3aGV0aGVyIGRpYWxlY3Qgc3VwcG9ydHMgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgKi9cclxuICAgIG9uQ29uZmxpY3REb05vdGhpbmc6ICcnIC8qIGRpYWxlY3Qgc3BlY2lmaWMgd29yZHMgZm9yIE9OIENPTkZMSUNUIERPIE5PVEhJTkcgKi9cclxuICB9LFxyXG4gIGNvbnN0cmFpbnRzOiB7XHJcbiAgICByZXN0cmljdDogdHJ1ZSxcclxuICAgIGFkZENvbnN0cmFpbnQ6IHRydWUsXHJcbiAgICBkcm9wQ29uc3RyYWludDogdHJ1ZSxcclxuICAgIHVuaXF1ZTogdHJ1ZSxcclxuICAgIGRlZmF1bHQ6IGZhbHNlLFxyXG4gICAgY2hlY2s6IHRydWUsXHJcbiAgICBmb3JlaWduS2V5OiB0cnVlLFxyXG4gICAgcHJpbWFyeUtleTogdHJ1ZVxyXG4gIH0sXHJcbiAgaW5kZXg6IHtcclxuICAgIGNvbGxhdGU6IHRydWUsXHJcbiAgICBsZW5ndGg6IGZhbHNlLFxyXG4gICAgcGFyc2VyOiBmYWxzZSxcclxuICAgIGNvbmN1cnJlbnRseTogZmFsc2UsXHJcbiAgICB0eXBlOiBmYWxzZSxcclxuICAgIHVzaW5nOiB0cnVlLFxyXG4gICAgZnVuY3Rpb25CYXNlZDogZmFsc2VcclxuICB9LFxyXG4gIGpvaW5UYWJsZURlcGVuZGVudDogdHJ1ZSxcclxuICBncm91cGVkTGltaXQ6IHRydWUsXHJcbiAgaW5kZXhWaWFBbHRlcjogZmFsc2UsXHJcbiAgSlNPTjogZmFsc2UsXHJcbiAgZGVmZXJyYWJsZUNvbnN0cmFpbnRzOiBmYWxzZVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBYnN0cmFjdERpYWxlY3Q7XHJcbm1vZHVsZS5leHBvcnRzLkFic3RyYWN0RGlhbGVjdCA9IEFic3RyYWN0RGlhbGVjdDtcclxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEFic3RyYWN0RGlhbGVjdDtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9pbmRleC5qcyJdLCJuYW1lcyI6WyJBYnN0cmFjdERpYWxlY3QiLCJwcm90b3R5cGUiLCJzdXBwb3J0cyIsInJldHVyblZhbHVlcyIsImF1dG9JbmNyZW1lbnQiLCJpZGVudGl0eUluc2VydCIsImRlZmF1bHRWYWx1ZSIsInVwZGF0ZSIsImJ1bGtEZWZhdWx0Iiwic2NoZW1hcyIsInRyYW5zYWN0aW9ucyIsInNldHRpbmdJc29sYXRpb25MZXZlbER1cmluZ1RyYW5zYWN0aW9uIiwidHJhbnNhY3Rpb25PcHRpb25zIiwidHlwZSIsIm1pZ3JhdGlvbnMiLCJ1cHNlcnRzIiwiaW5zZXJ0cyIsImlnbm9yZUR1cGxpY2F0ZXMiLCJ1cGRhdGVPbkR1cGxpY2F0ZSIsIm9uQ29uZmxpY3REb05vdGhpbmciLCJjb25zdHJhaW50cyIsInJlc3RyaWN0IiwiYWRkQ29uc3RyYWludCIsImRyb3BDb25zdHJhaW50IiwidW5pcXVlIiwiZGVmYXVsdCIsImNoZWNrIiwiZm9yZWlnbktleSIsInByaW1hcnlLZXkiLCJpbmRleCIsImNvbGxhdGUiLCJsZW5ndGgiLCJwYXJzZXIiLCJjb25jdXJyZW50bHkiLCJ1c2luZyIsImZ1bmN0aW9uQmFzZWQiLCJqb2luVGFibGVEZXBlbmRlbnQiLCJncm91cGVkTGltaXQiLCJpbmRleFZpYUFsdGVyIiwiSlNPTiIsImRlZmVycmFibGVDb25zdHJhaW50cyIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7O0lBRU1BLGU7Ozs7QUFFTkEsZUFBZSxDQUFDQyxTQUFoQixDQUEwQkMsUUFBMUIsR0FBcUM7QUFDbkMsYUFBVyxJQUR3QjtBQUVuQyxvQkFBa0IsS0FGaUI7QUFHbkMsZUFBYSxLQUhzQjtBQUluQyxxQkFBbUIsS0FKZ0I7QUFLbkMsc0JBQW9CLElBTGU7QUFNbkMsaUJBQWUsS0FOb0I7QUFPbkMsV0FBUyxJQVAwQjtBQVFuQyxlQUFhLElBUnNCO0FBU25DLGdCQUFjLElBVHFCOztBQVduQztBQUNBQyxFQUFBQSxZQUFZLEVBQUUsS0FacUI7O0FBY25DO0FBQ0FDLEVBQUFBLGFBQWEsRUFBRTtBQUNiO0FBQ0FDLElBQUFBLGNBQWMsRUFBRSxLQUZIOztBQUliO0FBQ0FDLElBQUFBLFlBQVksRUFBRSxJQUxEOztBQU9iO0FBQ0FDLElBQUFBLE1BQU0sRUFBRTtBQVJLLEdBZm9COztBQXlCbkM7QUFDQUMsRUFBQUEsV0FBVyxFQUFFLEtBMUJzQjtBQTJCbkNDLEVBQUFBLE9BQU8sRUFBRSxLQTNCMEI7QUE0Qm5DQyxFQUFBQSxZQUFZLEVBQUUsSUE1QnFCO0FBNkJuQ0MsRUFBQUEsc0NBQXNDLEVBQUUsSUE3Qkw7QUE4Qm5DQyxFQUFBQSxrQkFBa0IsRUFBRTtBQUNsQkMsSUFBQUEsSUFBSSxFQUFFO0FBRFksR0E5QmU7QUFpQ25DQyxFQUFBQSxVQUFVLEVBQUUsSUFqQ3VCO0FBa0NuQ0MsRUFBQUEsT0FBTyxFQUFFLElBbEMwQjtBQW1DbkNDLEVBQUFBLE9BQU8sRUFBRTtBQUNQQyxJQUFBQSxnQkFBZ0IsRUFBRSxFQURYOztBQUNlO0FBQ3RCQyxJQUFBQSxpQkFBaUIsRUFBRSxLQUZaOztBQUVtQjtBQUMxQkMsSUFBQUEsbUJBQW1CLEVBQUU7QUFBRzs7QUFIakIsR0FuQzBCO0FBd0NuQ0MsRUFBQUEsV0FBVyxFQUFFO0FBQ1hDLElBQUFBLFFBQVEsRUFBRSxJQURDO0FBRVhDLElBQUFBLGFBQWEsRUFBRSxJQUZKO0FBR1hDLElBQUFBLGNBQWMsRUFBRSxJQUhMO0FBSVhDLElBQUFBLE1BQU0sRUFBRSxJQUpHO0FBS1hDLElBQUFBLE9BQU8sRUFBRSxLQUxFO0FBTVhDLElBQUFBLEtBQUssRUFBRSxJQU5JO0FBT1hDLElBQUFBLFVBQVUsRUFBRSxJQVBEO0FBUVhDLElBQUFBLFVBQVUsRUFBRTtBQVJELEdBeENzQjtBQWtEbkNDLEVBQUFBLEtBQUssRUFBRTtBQUNMQyxJQUFBQSxPQUFPLEVBQUUsSUFESjtBQUVMQyxJQUFBQSxNQUFNLEVBQUUsS0FGSDtBQUdMQyxJQUFBQSxNQUFNLEVBQUUsS0FISDtBQUlMQyxJQUFBQSxZQUFZLEVBQUUsS0FKVDtBQUtMcEIsSUFBQUEsSUFBSSxFQUFFLEtBTEQ7QUFNTHFCLElBQUFBLEtBQUssRUFBRSxJQU5GO0FBT0xDLElBQUFBLGFBQWEsRUFBRTtBQVBWLEdBbEQ0QjtBQTJEbkNDLEVBQUFBLGtCQUFrQixFQUFFLElBM0RlO0FBNERuQ0MsRUFBQUEsWUFBWSxFQUFFLElBNURxQjtBQTZEbkNDLEVBQUFBLGFBQWEsRUFBRSxLQTdEb0I7QUE4RG5DQyxFQUFBQSxJQUFJLEVBQUUsS0E5RDZCO0FBK0RuQ0MsRUFBQUEscUJBQXFCLEVBQUU7QUEvRFksQ0FBckM7QUFrRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjFDLGVBQWpCO0FBQ0F5QyxNQUFNLENBQUNDLE9BQVAsQ0FBZTFDLGVBQWYsR0FBaUNBLGVBQWpDO0FBQ0F5QyxNQUFNLENBQUNDLE9BQVAsQ0FBZWpCLE9BQWYsR0FBeUJ6QixlQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY2xhc3MgQWJzdHJhY3REaWFsZWN0IHt9XG5cbkFic3RyYWN0RGlhbGVjdC5wcm90b3R5cGUuc3VwcG9ydHMgPSB7XG4gICdERUZBVUxUJzogdHJ1ZSxcbiAgJ0RFRkFVTFQgVkFMVUVTJzogZmFsc2UsXG4gICdWQUxVRVMgKCknOiBmYWxzZSxcbiAgJ0xJTUlUIE9OIFVQREFURSc6IGZhbHNlLFxuICAnT04gRFVQTElDQVRFIEtFWSc6IHRydWUsXG4gICdPUkRFUiBOVUxMUyc6IGZhbHNlLFxuICAnVU5JT04nOiB0cnVlLFxuICAnVU5JT04gQUxMJzogdHJ1ZSxcbiAgJ1JJR0hUIEpPSU4nOiB0cnVlLFxuXG4gIC8qIGRvZXMgdGhlIGRpYWxlY3Qgc3VwcG9ydCByZXR1cm5pbmcgdmFsdWVzIGZvciBpbnNlcnRlZC91cGRhdGVkIGZpZWxkcyAqL1xuICByZXR1cm5WYWx1ZXM6IGZhbHNlLFxuXG4gIC8qIGZlYXR1cmVzIHNwZWNpZmljIHRvIGF1dG9JbmNyZW1lbnQgdmFsdWVzICovXG4gIGF1dG9JbmNyZW1lbnQ6IHtcbiAgICAvKiBkb2VzIHRoZSBkaWFsZWN0IHJlcXVpcmUgbW9kaWZpY2F0aW9uIG9mIGluc2VydCBxdWVyaWVzIHdoZW4gaW5zZXJ0aW5nIGF1dG8gaW5jcmVtZW50IGZpZWxkcyAqL1xuICAgIGlkZW50aXR5SW5zZXJ0OiBmYWxzZSxcblxuICAgIC8qIGRvZXMgdGhlIGRpYWxlY3Qgc3VwcG9ydCBpbnNlcnRpbmcgZGVmYXVsdC9udWxsIHZhbHVlcyBmb3IgYXV0b2luY3JlbWVudCBmaWVsZHMgKi9cbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG5cbiAgICAvKiBkb2VzIHRoZSBkaWFsZWN0IHN1cHBvcnQgdXBkYXRpbmcgYXV0b2luY3JlbWVudCBmaWVsZHMgKi9cbiAgICB1cGRhdGU6IHRydWVcbiAgfSxcbiAgLyogRG8gd2UgbmVlZCB0byBzYXkgREVGQVVMVCBmb3IgYnVsayBpbnNlcnQgKi9cbiAgYnVsa0RlZmF1bHQ6IGZhbHNlLFxuICBzY2hlbWFzOiBmYWxzZSxcbiAgdHJhbnNhY3Rpb25zOiB0cnVlLFxuICBzZXR0aW5nSXNvbGF0aW9uTGV2ZWxEdXJpbmdUcmFuc2FjdGlvbjogdHJ1ZSxcbiAgdHJhbnNhY3Rpb25PcHRpb25zOiB7XG4gICAgdHlwZTogZmFsc2VcbiAgfSxcbiAgbWlncmF0aW9uczogdHJ1ZSxcbiAgdXBzZXJ0czogdHJ1ZSxcbiAgaW5zZXJ0czoge1xuICAgIGlnbm9yZUR1cGxpY2F0ZXM6ICcnLCAvKiBkaWFsZWN0IHNwZWNpZmljIHdvcmRzIGZvciBJTlNFUlQgSUdOT1JFIG9yIERPIE5PVEhJTkcgKi9cbiAgICB1cGRhdGVPbkR1cGxpY2F0ZTogZmFsc2UsIC8qIHdoZXRoZXIgZGlhbGVjdCBzdXBwb3J0cyBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSAqL1xuICAgIG9uQ29uZmxpY3REb05vdGhpbmc6ICcnIC8qIGRpYWxlY3Qgc3BlY2lmaWMgd29yZHMgZm9yIE9OIENPTkZMSUNUIERPIE5PVEhJTkcgKi9cbiAgfSxcbiAgY29uc3RyYWludHM6IHtcbiAgICByZXN0cmljdDogdHJ1ZSxcbiAgICBhZGRDb25zdHJhaW50OiB0cnVlLFxuICAgIGRyb3BDb25zdHJhaW50OiB0cnVlLFxuICAgIHVuaXF1ZTogdHJ1ZSxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICBjaGVjazogdHJ1ZSxcbiAgICBmb3JlaWduS2V5OiB0cnVlLFxuICAgIHByaW1hcnlLZXk6IHRydWVcbiAgfSxcbiAgaW5kZXg6IHtcbiAgICBjb2xsYXRlOiB0cnVlLFxuICAgIGxlbmd0aDogZmFsc2UsXG4gICAgcGFyc2VyOiBmYWxzZSxcbiAgICBjb25jdXJyZW50bHk6IGZhbHNlLFxuICAgIHR5cGU6IGZhbHNlLFxuICAgIHVzaW5nOiB0cnVlLFxuICAgIGZ1bmN0aW9uQmFzZWQ6IGZhbHNlXG4gIH0sXG4gIGpvaW5UYWJsZURlcGVuZGVudDogdHJ1ZSxcbiAgZ3JvdXBlZExpbWl0OiB0cnVlLFxuICBpbmRleFZpYUFsdGVyOiBmYWxzZSxcbiAgSlNPTjogZmFsc2UsXG4gIGRlZmVycmFibGVDb25zdHJhaW50czogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3REaWFsZWN0O1xubW9kdWxlLmV4cG9ydHMuQWJzdHJhY3REaWFsZWN0ID0gQWJzdHJhY3REaWFsZWN0O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEFic3RyYWN0RGlhbGVjdDtcbiJdfQ== \ No newline at end of file diff --git a/dist/dialects/abstract/query-generator.js b/dist/dialects/abstract/query-generator.js index 3112537..6a0ad13 100644 --- a/dist/dialects/abstract/query-generator.js +++ b/dist/dialects/abstract/query-generator.js @@ -46,9 +46,7 @@ const QuoteHelper = require('./query-generator/helpers/quote'); */ -let QueryGenerator = -/*#__PURE__*/ -function () { +let QueryGenerator = /*#__PURE__*/function () { function QueryGenerator(options) { _classCallCheck(this, QueryGenerator); @@ -771,7 +769,7 @@ function () { the values of cols (which is assumed to be an array), quoted and joined with ', ', unless they are themselves objects * If direction is set, should be prepended - Currently this function is only used for ordering / grouping columns and Sequelize.col(), but it could + Currently this function is only used for ordering / grouping columns and Sequelize.col(), but it could potentially also be used for other places where we want to be able to call SQL functions (e.g. as default values) @private */ @@ -2800,4 +2798,4 @@ function () { Object.assign(QueryGenerator.prototype, require('./query-generator/operators')); Object.assign(QueryGenerator.prototype, require('./query-generator/transaction')); module.exports = QueryGenerator; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9xdWVyeS1nZW5lcmF0b3IuanMiXSwibmFtZXMiOlsidXRpbCIsInJlcXVpcmUiLCJfIiwidXVpZHY0Iiwic2VtdmVyIiwiVXRpbHMiLCJkZXByZWNhdGlvbnMiLCJTcWxTdHJpbmciLCJEYXRhVHlwZXMiLCJNb2RlbCIsIkFzc29jaWF0aW9uIiwiQmVsb25nc1RvIiwiQmVsb25nc1RvTWFueSIsIkhhc01hbnkiLCJPcCIsInNlcXVlbGl6ZUVycm9yIiwiSW5kZXhIaW50cyIsIlF1b3RlSGVscGVyIiwiUXVlcnlHZW5lcmF0b3IiLCJvcHRpb25zIiwic2VxdWVsaXplIiwiRXJyb3IiLCJfZGlhbGVjdCIsImRpYWxlY3QiLCJuYW1lIiwidGFibGVOYW1lIiwic2NoZW1hIiwiaXNQbGFpbk9iamVjdCIsImRlbGltaXRlciIsInBhcmFtIiwiX3NjaGVtYSIsInNlbGYiLCJ0YWJsZSIsIl9zY2hlbWFEZWxpbWl0ZXIiLCJ0b1N0cmluZyIsInF1b3RlVGFibGUiLCJkcm9wVGFibGVRdWVyeSIsInNjaGVtYURlbGltaXRlciIsImFkZFNjaGVtYSIsImJlZm9yZSIsImFmdGVyIiwidmFsdWVIYXNoIiwibW9kZWxBdHRyaWJ1dGVzIiwiZGVmYXVsdHMiLCJtb2RlbEF0dHJpYnV0ZU1hcCIsImZpZWxkcyIsInZhbHVlcyIsImJpbmQiLCJxdW90ZWRUYWJsZSIsImJpbmRQYXJhbSIsInVuZGVmaW5lZCIsInF1ZXJ5IiwidmFsdWVRdWVyeSIsImVtcHR5UXVlcnkiLCJvdXRwdXRGcmFnbWVudCIsImlkZW50aXR5V3JhcHBlclJlcXVpcmVkIiwidG1wVGFibGUiLCJlYWNoIiwiYXR0cmlidXRlIiwia2V5IiwiZmllbGQiLCJzdXBwb3J0cyIsInJldHVyblZhbHVlcyIsInJldHVybmluZyIsIm91dHB1dCIsImhhc1RyaWdnZXIiLCJ0bXBUYWJsZVRyaWdnZXIiLCJ0bXBDb2x1bW5zIiwib3V0cHV0Q29sdW1ucyIsIm1vZGVsS2V5IiwidHlwZSIsIlZJUlRVQUwiLCJsZW5ndGgiLCJxdW90ZUlkZW50aWZpZXIiLCJ0b1NxbCIsInNlbGVjdEZyb21UbXAiLCJnZXQiLCJzZWFyY2hQYXRoIiwiRVhDRVBUSU9OIiwiZXhjZXB0aW9uIiwicmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoIiwib21pdE51bGwiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ2YWx1ZSIsInB1c2giLCJhdXRvSW5jcmVtZW50IiwiZGVmYXVsdFZhbHVlIiwic3BsaWNlIiwiREVGQVVMVCIsImVzY2FwZSIsIlNlcXVlbGl6ZU1ldGhvZCIsImNvbnRleHQiLCJmb3JtYXQiLCJyZXBsYWNlbWVudHMiLCJpZ25vcmVEdXBsaWNhdGVzIiwiaW5zZXJ0cyIsIm9uQ29uZmxpY3REb05vdGhpbmciLCJhdHRyaWJ1dGVzIiwiam9pbiIsImd0ZSIsImRhdGFiYXNlVmVyc2lvbiIsInJlcGxhY2UiLCJvbkR1cGxpY2F0ZSIsImlkZW50aXR5SW5zZXJ0IiwicmVzdWx0IiwiZmllbGRWYWx1ZUhhc2hlcyIsImZpZWxkTWFwcGVkQXR0cmlidXRlcyIsInR1cGxlcyIsInNlcmlhbHMiLCJhbGxBdHRyaWJ1dGVzIiwib25EdXBsaWNhdGVLZXlVcGRhdGUiLCJmaWVsZFZhbHVlSGFzaCIsImZvck93biIsImluY2x1ZGVzIiwibWFwIiwiYnVsa0RlZmF1bHQiLCJ1cGRhdGVPbkR1cGxpY2F0ZSIsImNvbmZsaWN0S2V5cyIsInVwc2VydEtleXMiLCJhdHRyIiwidXBkYXRlS2V5cyIsInZhbHVlS2V5cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJWYWx1ZUhhc2giLCJ3aGVyZSIsInN1ZmZpeCIsImxpbWl0IiwibWFwVG9Nb2RlbCIsInVwZGF0ZSIsIndoZXJlT3B0aW9ucyIsIndoZXJlUXVlcnkiLCJ0cmltIiwib3BlcmF0b3IiLCJyZXR1cm5pbmdGcmFnbWVudCIsInJhd1RhYmxlbmFtZSIsInByZWZpeCIsImZpZWxkc1NxbCIsImhhbmRsZVNlcXVlbGl6ZU1ldGhvZCIsImluc3BlY3QiLCJpbmRleCIsImNvbGxhdGUiLCJvcmRlciIsIm5hbWVJbmRleCIsIl9jb25mb3JtSW5kZXgiLCJxdW90ZUlkZW50aWZpZXJzIiwiY29uY3VycmVudGx5IiwiaW5kIiwiaW5kZXhWaWFBbHRlciIsImNvbmNhdCIsInVuaXF1ZSIsInVzaW5nIiwicGFyc2VyIiwiY29tcGFjdCIsImNvbnN0cmFpbnRTbmlwcGV0IiwiZ2V0Q29uc3RyYWludFNuaXBwZXQiLCJjb25zdHJhaW50TmFtZSIsImZpZWxkc1NxbFF1b3RlZFN0cmluZyIsImZpZWxkc1NxbFN0cmluZyIsInRvVXBwZXJDYXNlIiwid2hlcmVJdGVtc1F1ZXJ5IiwicmVmZXJlbmNlcyIsInJlZmVyZW5jZXNTbmlwcGV0Iiwib25VcGRhdGUiLCJvbkRlbGV0ZSIsImNvbGxlY3Rpb24iLCJwYXJlbnQiLCJjb25uZWN0b3IiLCJ2YWxpZE9yZGVyT3B0aW9ucyIsImZvckVhY2giLCJpdGVtIiwicHJldmlvdXMiLCJwcmV2aW91c0Fzc29jaWF0aW9uIiwicHJldmlvdXNNb2RlbCIsInRhcmdldCIsIm1vZGVsIiwiYXMiLCJ0aHJvdWdoIiwiZ2V0QXNzb2NpYXRpb25Gb3JBbGlhcyIsIm9yZGVySW5kZXgiLCJpbmRleE9mIiwibGl0ZXJhbCIsImFzc29jaWF0aW9ucyIsInJhd0F0dHJpYnV0ZXMiLCJpdGVtU3BsaXQiLCJzcGxpdCIsIkpTT04iLCJpZGVudGlmaWVyIiwicGF0aCIsInNsaWNlIiwianNvblBhdGhFeHRyYWN0aW9uUXVlcnkiLCJjb2xsZWN0aW9uTGVuZ3RoIiwidGFibGVOYW1lcyIsImkiLCJfbW9kZWxBdHRyaWJ1dGUiLCJzcWwiLCJjb2xsZWN0aW9uSXRlbSIsInF1b3RlIiwiZmllbGROYW1lIiwicmF3IiwiZm9yY2UiLCJpZGVudGlmaWVycyIsImhlYWQiLCJ0YWlsIiwiYWxpYXMiLCJpc09iamVjdCIsInNjaGVtYXMiLCJ2YWxpZGF0ZSIsInN0cmluZ2lmeSIsInNpbXBsZUVzY2FwZSIsImVzY1ZhbCIsInRpbWV6b25lIiwib3BlcmF0aW9uIiwiaWRlbnRpdHkiLCJ0eXBlVmFsaWRhdGlvbiIsImlzTGlzdCIsImVycm9yIiwiVmFsaWRhdGlvbkVycm9yIiwiZXJyb3JzIiwiVmFsaWRhdGlvbkVycm9ySXRlbSIsIm1lc3NhZ2UiLCJpc0lkZW50aWZpZXJRdW90ZWQiLCJjb2x1bW4iLCJwYXRocyIsInRvUGF0aCIsInBhdGhTdHIiLCJxdW90ZWRDb2x1bW4iLCJzdWJQYXRoIiwidGVzdCIsImFkZFRpY2tzIiwiX18iLCJkaWdpdCIsIm1haW5RdWVyeUl0ZW1zIiwic3ViUXVlcnlJdGVtcyIsInN1YlF1ZXJ5IiwiaGFzTXVsdGlBc3NvY2lhdGlvbiIsIm1haW4iLCJtYWluVGFibGUiLCJxdW90ZWROYW1lIiwidG9wTGV2ZWxJbmZvIiwibmFtZXMiLCJtYWluSm9pblF1ZXJpZXMiLCJzdWJKb2luUXVlcmllcyIsIm1pbmlmeUFsaWFzZXMiLCJhbGlhc2VzTWFwcGluZyIsIk1hcCIsImFsaWFzZXNCeVRhYmxlIiwidGFibGVBcyIsInQiLCJrZXlBdHQiLCJwcmltYXJ5S2V5QXR0cmlidXRlcyIsInNvbWUiLCJlc2NhcGVBdHRyaWJ1dGVzIiwiaW5jbHVkZSIsImdyb3VwZWRMaW1pdCIsInNlcGFyYXRlIiwiam9pblF1ZXJpZXMiLCJnZW5lcmF0ZUluY2x1ZGUiLCJleHRlcm5hbEFzIiwiaW50ZXJuYWxBcyIsIm1haW5RdWVyeSIsInVuaXEiLCJzZWxlY3RGcm9tVGFibGVGcmFnbWVudCIsImFzc2lnbiIsImdyb3VwZWRMaW1pdE9yZGVyIiwid2hlcmVLZXkiLCJncm91cGVkVGFibGVOYW1lIiwib24iLCJmb3JlaWduS2V5RmllbGQiLCJtYW55RnJvbVNvdXJjZSIsImdyb3VwZWRMaW1pdE9wdGlvbnMiLCJfdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzIiwiYXNzb2NpYXRpb24iLCJkdXBsaWNhdGluZyIsInJlcXVpcmVkIiwicGxhY2Vob2xkZXIiLCJoYXNKb2luIiwiaW5jbHVkZU1hcCIsImluY2x1ZGVOYW1lcyIsImJhc2VRdWVyeSIsInNlbGVjdFF1ZXJ5Iiwib2Zmc2V0IiwicGxhY2VIb2xkZXIiLCJ3aGVyZUl0ZW1RdWVyeSIsInNwbGljZVBvcyIsImdyb3VwV2hlcmUiLCJmb3JlaWduSWRlbnRpZmllckZpZWxkIiwic3BsaWNlU3RyIiwiZ2V0V2hlcmVDb25kaXRpb25zIiwic3RhcnRzV2l0aCIsImdyb3VwIiwiYWxpYXNHcm91cGluZyIsImhhdmluZyIsIm9yZGVycyIsImdldFF1ZXJ5T3JkZXJzIiwibWFpblF1ZXJ5T3JkZXIiLCJzdWJRdWVyeU9yZGVyIiwibGltaXRPcmRlciIsImFkZExpbWl0QW5kT2Zmc2V0IiwibG9jayIsImxldmVsIiwibG9ja0tleSIsImZvclNoYXJlIiwibG9ja09mIiwib2YiLCJza2lwTG9ja2VkIiwic3JjIiwiX2dldEFsaWFzRm9yRmllbGQiLCJtYWluVGFibGVBcyIsImFkZFRhYmxlIiwibm9SYXdBdHRyaWJ1dGVzIiwiX2dldE1pbmlmaWVkQWxpYXMiLCJUSUNLX0NIQVIiLCJxdW90ZUF0dHJpYnV0ZSIsImlzRW1wdHkiLCJwYXJlbnRUYWJsZU5hbWUiLCJtYWluQ2hpbGRJbmNsdWRlcyIsInN1YkNoaWxkSW5jbHVkZXMiLCJyZXF1aXJlZE1pc21hdGNoIiwiaW5jbHVkZUFzIiwiam9pblF1ZXJ5Iiwia2V5c0VzY2FwZWQiLCJpbmNsdWRlSWdub3JlQXR0cmlidXRlcyIsIl9leHBhbmRBdHRyaWJ1dGVzIiwibWFwRmluZGVyT3B0aW9ucyIsImluY2x1ZGVBdHRyaWJ1dGVzIiwiYXR0ckFzIiwidmVyYmF0aW0iLCJMaXRlcmFsIiwiQ2FzdCIsIkZuIiwidmFsIiwiZ2VuZXJhdGVUaHJvdWdoSm9pbiIsIl9nZW5lcmF0ZVN1YlF1ZXJ5RmlsdGVyIiwiZ2VuZXJhdGVKb2luIiwiY2hpbGRJbmNsdWRlIiwiX3BzZXVkbyIsImNoaWxkSm9pblF1ZXJpZXMiLCJib2R5IiwiY29uZGl0aW9uIiwibWF0Y2giLCJtaW5pZmllZEFsaWFzIiwic2l6ZSIsInNldCIsInBhcmVudElzVG9wIiwiJHBhcmVudCIsImpvaW5XaGVyZSIsImxlZnQiLCJzb3VyY2UiLCJhdHRyTGVmdCIsInNvdXJjZUtleUF0dHJpYnV0ZSIsInByaW1hcnlLZXlBdHRyaWJ1dGUiLCJmaWVsZExlZnQiLCJpZGVudGlmaWVyRmllbGQiLCJhc0xlZnQiLCJyaWdodCIsInRhYmxlUmlnaHQiLCJnZXRUYWJsZU5hbWUiLCJmaWVsZFJpZ2h0IiwidGFyZ2V0SWRlbnRpZmllciIsImFzUmlnaHQiLCJqb2luT24iLCJzdWJxdWVyeUF0dHJpYnV0ZXMiLCJqb2luU291cmNlIiwib3IiLCJ0aHJvdWdoVGFibGUiLCJ0aHJvdWdoQXMiLCJleHRlcm5hbFRocm91Z2hBcyIsInRocm91Z2hBdHRyaWJ1dGVzIiwidGFibGVTb3VyY2UiLCJpZGVudFNvdXJjZSIsInRhYmxlVGFyZ2V0IiwiaWRlbnRUYXJnZXQiLCJhdHRyVGFyZ2V0IiwidGFyZ2V0S2V5RmllbGQiLCJqb2luVHlwZSIsImpvaW5Cb2R5Iiwiam9pbkNvbmRpdGlvbiIsImF0dHJTb3VyY2UiLCJzb3VyY2VLZXkiLCJzb3VyY2VKb2luT24iLCJ0YXJnZXRKb2luT24iLCJ0aHJvdWdoV2hlcmUiLCJ0YXJnZXRXaGVyZSIsInNvdXJjZUtleUZpZWxkIiwibWFpbk1vZGVsIiwiYWxpYXNlZFNvdXJjZSIsImpvaW5UYWJsZURlcGVuZGVudCIsInN1YlF1ZXJ5RmlsdGVyIiwiY2hpbGQiLCJuZXN0ZWRJbmNsdWRlcyIsIl9nZXRSZXF1aXJlZENsb3N1cmUiLCJ0b3BJbmNsdWRlIiwidG9wUGFyZW50IiwidG9wQXNzb2NpYXRpb24iLCJwcmltYXJ5S2V5RmllbGQiLCJ0b1RhcmdldCIsImFuZCIsImlzQmVsb25nc1RvIiwiYXNzb2NpYXRpb25UeXBlIiwic291cmNlRmllbGQiLCJ0YXJnZXRGaWVsZCIsImNvcHkiLCJmaWx0ZXIiLCJpbmMiLCJzdWJRdWVyeUF0dHJpYnV0ZSIsImZpbmQiLCJhIiwibW9kZWxOYW1lIiwiQ29sIiwidGFibGVzIiwiZnJhZ21lbnQiLCJpbmRleEhpbnRzIiwiaGludCIsImluZGV4TmFtZSIsInNtdGgiLCJmYWN0b3J5IiwicHJlcGVuZCIsIk9wZXJhdG9yTWFwIiwiY29tcGFyYXRvciIsIldoZXJlIiwibG9naWMiLCJib29sZWFuVmFsdWUiLCJmbiIsImFyZ3MiLCJhcmciLCJjb2wiLCJiaW5kaW5nIiwiZ2V0Q29tcGxleFNpemUiLCJpdGVtcyIsImdldENvbXBsZXhLZXlzIiwicHJvcCIsImtleVBhcnRzIiwidG1wIiwiX2ZpbmRGaWVsZCIsImZpZWxkVHlwZSIsIk9wZXJhdG9yc0FsaWFzTWFwIiwiX3JlcGxhY2VBbGlhc2VzIiwib3BWYWx1ZSIsIl9qb2luS2V5VmFsdWUiLCJpcyIsImVxIiwiY2FuVHJlYXRBcnJheUFzQW5kIiwibm90IiwiX3doZXJlR3JvdXBCaW5kIiwiX3doZXJlQmluZCIsIkFSUkFZIiwianNvbiIsIl93aGVyZUpTT04iLCJfd2hlcmVQYXJzZVNpbmdsZVZhbHVlT2JqZWN0IiwiaW4iLCJmaWVsZFJhd0F0dHJpYnV0ZXNNYXAiLCJvdXRlckJpbmRpbmciLCJpdGVtUXVlcnkiLCJiYXNlS2V5IiwiZ2V0T3BlcmF0b3JzIiwib3AiLCJfdHJhdmVyc2VKU09OIiwiY2FzdCIsInBhdGhLZXkiLCJfdG9KU09OVmFsdWUiLCJfY2FzdEtleSIsIml0ZW1Qcm9wIiwiX2dldEpzb25DYXN0IiwiRGF0ZSIsIl9nZXRTYWZlS2V5IiwiX3ByZWZpeEtleSIsImlzQ29sU3RyaW5nIiwic3Vic3RyIiwibm90SW4iLCJuZSIsImFueSIsImFsbCIsImJldHdlZW4iLCJub3RCZXR3ZWVuIiwibGlrZSIsImVuZHNXaXRoIiwic3Vic3RyaW5nIiwiZXNjYXBlT3B0aW9ucyIsImFjY2VwdFN0cmluZ3MiLCJwcmltYXJ5S2V5cyIsImtleXMiLCJCdWZmZXIiLCJpc0J1ZmZlciIsIl9zbXRoIiwiY29uZGl0aW9ucyIsInJlZHVjZSIsInBhcnNlQ29uZGl0aW9uT2JqZWN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6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U0FBWjtBQUNBLGVBQU9xQixNQUFQO0FBQ0QsT0FOTSxFQU1KLEVBTkksQ0FBUDtBQU9EOzs7aUNBRVlyQixLLEVBQU87QUFDbEIsYUFBT0EsS0FBUDtBQUNEOzs7Ozs7QUFHSEosTUFBTSxDQUFDd0wsTUFBUCxDQUFjeFAsY0FBYyxDQUFDaUUsU0FBN0IsRUFBd0NsRixPQUFPLENBQUMsNkJBQUQsQ0FBL0M7QUFDQWlGLE1BQU0sQ0FBQ3dMLE1BQVAsQ0FBY3hQLGNBQWMsQ0FBQ2lFLFNBQTdCLEVBQXdDbEYsT0FBTyxDQUFDLCtCQUFELENBQS9DO0FBRUEwZSxNQUFNLENBQUNDLE9BQVAsR0FBaUIxZCxjQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgdXVpZHY0ID0gcmVxdWlyZSgndXVpZC92NCcpO1xyXG5jb25zdCBzZW12ZXIgPSByZXF1aXJlKCdzZW12ZXInKTtcclxuXHJcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcclxuY29uc3QgZGVwcmVjYXRpb25zID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvZGVwcmVjYXRpb25zJyk7XHJcbmNvbnN0IFNxbFN0cmluZyA9IHJlcXVpcmUoJy4uLy4uL3NxbC1zdHJpbmcnKTtcclxuY29uc3QgRGF0YVR5cGVzID0gcmVxdWlyZSgnLi4vLi4vZGF0YS10eXBlcycpO1xyXG5jb25zdCBNb2RlbCA9IHJlcXVpcmUoJy4uLy4uL21vZGVsJyk7XHJcbmNvbnN0IEFzc29jaWF0aW9uID0gcmVxdWlyZSgnLi4vLi4vYXNzb2NpYXRpb25zL2Jhc2UnKTtcclxuY29uc3QgQmVsb25nc1RvID0gcmVxdWlyZSgnLi4vLi4vYXNzb2NpYXRpb25zL2JlbG9uZ3MtdG8nKTtcclxuY29uc3QgQmVsb25nc1RvTWFueSA9IHJlcXVpcmUoJy4uLy4uL2Fzc29jaWF0aW9ucy9iZWxvbmdzLXRvLW1hbnknKTtcclxuY29uc3QgSGFzTWFueSA9IHJlcXVpcmUoJy4uLy4uL2Fzc29jaWF0aW9ucy9oYXMtbWFueScpO1xyXG5jb25zdCBPcCA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9ycycpO1xyXG5jb25zdCBzZXF1ZWxpemVFcnJvciA9IHJlcXVpcmUoJy4uLy4uL2Vycm9ycycpO1xyXG5jb25zdCBJbmRleEhpbnRzID0gcmVxdWlyZSgnLi4vLi4vaW5kZXgtaGludHMnKTtcclxuXHJcbmNvbnN0IFF1b3RlSGVscGVyID0gcmVxdWlyZSgnLi9xdWVyeS1nZW5lcmF0b3IvaGVscGVycy9xdW90ZScpO1xyXG5cclxuLyoqXHJcbiAqIEFic3RyYWN0IFF1ZXJ5IEdlbmVyYXRvclxyXG4gKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY2xhc3MgUXVlcnlHZW5lcmF0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgIGlmICghb3B0aW9ucy5zZXF1ZWxpemUpIHRocm93IG5ldyBFcnJvcignUXVlcnlHZW5lcmF0b3IgaW5pdGlhbGl6ZWQgd2l0aG91dCBvcHRpb25zLnNlcXVlbGl6ZScpO1xyXG4gICAgaWYgKCFvcHRpb25zLl9kaWFsZWN0KSB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5R2VuZXJhdG9yIGluaXRpYWxpemVkIHdpdGhvdXQgb3B0aW9ucy5fZGlhbGVjdCcpO1xyXG5cclxuICAgIHRoaXMuc2VxdWVsaXplID0gb3B0aW9ucy5zZXF1ZWxpemU7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zLnNlcXVlbGl6ZS5vcHRpb25zO1xyXG5cclxuICAgIC8vIGRpYWxlY3QgbmFtZVxyXG4gICAgdGhpcy5kaWFsZWN0ID0gb3B0aW9ucy5fZGlhbGVjdC5uYW1lO1xyXG4gICAgdGhpcy5fZGlhbGVjdCA9IG9wdGlvbnMuX2RpYWxlY3Q7XHJcbiAgfVxyXG5cclxuICBleHRyYWN0VGFibGVEZXRhaWxzKHRhYmxlTmFtZSwgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICB0YWJsZU5hbWUgPSB0YWJsZU5hbWUgfHwge307XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzY2hlbWE6IHRhYmxlTmFtZS5zY2hlbWEgfHwgb3B0aW9ucy5zY2hlbWEgfHwgJ3B1YmxpYycsXHJcbiAgICAgIHRhYmxlTmFtZTogXy5pc1BsYWluT2JqZWN0KHRhYmxlTmFtZSkgPyB0YWJsZU5hbWUudGFibGVOYW1lIDogdGFibGVOYW1lLFxyXG4gICAgICBkZWxpbWl0ZXI6IHRhYmxlTmFtZS5kZWxpbWl0ZXIgfHwgb3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy4nXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgYWRkU2NoZW1hKHBhcmFtKSB7XHJcbiAgICBpZiAoIXBhcmFtLl9zY2hlbWEpIHJldHVybiBwYXJhbS50YWJsZU5hbWUgfHwgcGFyYW07XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRhYmxlTmFtZTogcGFyYW0udGFibGVOYW1lIHx8IHBhcmFtLFxyXG4gICAgICB0YWJsZTogcGFyYW0udGFibGVOYW1lIHx8IHBhcmFtLFxyXG4gICAgICBuYW1lOiBwYXJhbS5uYW1lIHx8IHBhcmFtLFxyXG4gICAgICBzY2hlbWE6IHBhcmFtLl9zY2hlbWEsXHJcbiAgICAgIGRlbGltaXRlcjogcGFyYW0uX3NjaGVtYURlbGltaXRlciB8fCAnLicsXHJcbiAgICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBzZWxmLnF1b3RlVGFibGUodGhpcyk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBkcm9wU2NoZW1hKHRhYmxlTmFtZSwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMuZHJvcFRhYmxlUXVlcnkodGFibGVOYW1lLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGRlc2NyaWJlVGFibGVRdWVyeSh0YWJsZU5hbWUsIHNjaGVtYSwgc2NoZW1hRGVsaW1pdGVyKSB7XHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMucXVvdGVUYWJsZShcclxuICAgICAgdGhpcy5hZGRTY2hlbWEoe1xyXG4gICAgICAgIHRhYmxlTmFtZSxcclxuICAgICAgICBfc2NoZW1hOiBzY2hlbWEsXHJcbiAgICAgICAgX3NjaGVtYURlbGltaXRlcjogc2NoZW1hRGVsaW1pdGVyXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBgREVTQ1JJQkUgJHt0YWJsZX07YDtcclxuICB9XHJcblxyXG4gIGRyb3BUYWJsZVF1ZXJ5KHRhYmxlTmFtZSkge1xyXG4gICAgcmV0dXJuIGBEUk9QIFRBQkxFIElGIEVYSVNUUyAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfTtgO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lVGFibGVRdWVyeShiZWZvcmUsIGFmdGVyKSB7XHJcbiAgICByZXR1cm4gYEFMVEVSIFRBQkxFICR7dGhpcy5xdW90ZVRhYmxlKGJlZm9yZSl9IFJFTkFNRSBUTyAke3RoaXMucXVvdGVUYWJsZShhZnRlcil9O2A7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGFuIGluc2VydCBpbnRvIGNvbW1hbmRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZUhhc2ggICAgICAgYXR0cmlidXRlIHZhbHVlIHBhaXJzXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG1vZGVsQXR0cmlidXRlc1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgaW5zZXJ0UXVlcnkodGFibGUsIHZhbHVlSGFzaCwgbW9kZWxBdHRyaWJ1dGVzLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIF8uZGVmYXVsdHMob3B0aW9ucywgdGhpcy5vcHRpb25zKTtcclxuXHJcbiAgICBjb25zdCBtb2RlbEF0dHJpYnV0ZU1hcCA9IHt9O1xyXG4gICAgY29uc3QgZmllbGRzID0gW107XHJcbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcclxuICAgIGNvbnN0IGJpbmQgPSBbXTtcclxuICAgIGNvbnN0IHF1b3RlZFRhYmxlID0gdGhpcy5xdW90ZVRhYmxlKHRhYmxlKTtcclxuICAgIGNvbnN0IGJpbmRQYXJhbSA9IG9wdGlvbnMuYmluZFBhcmFtID09PSB1bmRlZmluZWQgPyB0aGlzLmJpbmRQYXJhbShiaW5kKSA6IG9wdGlvbnMuYmluZFBhcmFtO1xyXG4gICAgbGV0IHF1ZXJ5O1xyXG4gICAgbGV0IHZhbHVlUXVlcnkgPSAnJztcclxuICAgIGxldCBlbXB0eVF1ZXJ5ID0gJyc7XHJcbiAgICBsZXQgb3V0cHV0RnJhZ21lbnQgPSAnJztcclxuICAgIGxldCBpZGVudGl0eVdyYXBwZXJSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgbGV0IHRtcFRhYmxlID0gJyc7IC8vdG1wVGFibGUgZGVjbGFyYXRpb24gZm9yIHRyaWdnZXJcclxuXHJcbiAgICBpZiAobW9kZWxBdHRyaWJ1dGVzKSB7XHJcbiAgICAgIF8uZWFjaChtb2RlbEF0dHJpYnV0ZXMsIChhdHRyaWJ1dGUsIGtleSkgPT4ge1xyXG4gICAgICAgIG1vZGVsQXR0cmlidXRlTWFwW2tleV0gPSBhdHRyaWJ1dGU7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZS5maWVsZCkge1xyXG4gICAgICAgICAgbW9kZWxBdHRyaWJ1dGVNYXBbYXR0cmlidXRlLmZpZWxkXSA9IGF0dHJpYnV0ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzWydERUZBVUxUIFZBTFVFUyddKSB7XHJcbiAgICAgIGVtcHR5UXVlcnkgKz0gJyBERUZBVUxUIFZBTFVFUyc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHNbJ1ZBTFVFUyAoKSddKSB7XHJcbiAgICAgIGVtcHR5UXVlcnkgKz0gJyBWQUxVRVMgKCknO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnJldHVyblZhbHVlcyAmJiBvcHRpb25zLnJldHVybmluZykge1xyXG4gICAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5yZXR1cm5WYWx1ZXMucmV0dXJuaW5nKSB7XHJcbiAgICAgICAgdmFsdWVRdWVyeSArPSAnIFJFVFVSTklORyAqJztcclxuICAgICAgICBlbXB0eVF1ZXJ5ICs9ICcgUkVUVVJOSU5HIConO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMucmV0dXJuVmFsdWVzLm91dHB1dCkge1xyXG4gICAgICAgIG91dHB1dEZyYWdtZW50ID0gJyBPVVRQVVQgSU5TRVJURUQuKic7XHJcblxyXG4gICAgICAgIC8vVG8gY2FwdHVyZSBvdXRwdXQgcm93cyB3aGVuIHRoZXJlIGlzIGEgdHJpZ2dlciBvbiBNU1NRTCBEQlxyXG4gICAgICAgIGlmIChtb2RlbEF0dHJpYnV0ZXMgJiYgb3B0aW9ucy5oYXNUcmlnZ2VyICYmIHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMudG1wVGFibGVUcmlnZ2VyKSB7XHJcblxyXG4gICAgICAgICAgbGV0IHRtcENvbHVtbnMgPSAnJztcclxuICAgICAgICAgIGxldCBvdXRwdXRDb2x1bW5zID0gJyc7XHJcblxyXG4gICAgICAgICAgZm9yIChjb25zdCBtb2RlbEtleSBpbiBtb2RlbEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbW9kZWxBdHRyaWJ1dGVzW21vZGVsS2V5XTtcclxuICAgICAgICAgICAgaWYgKCEoYXR0cmlidXRlLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuVklSVFVBTCkpIHtcclxuICAgICAgICAgICAgICBpZiAodG1wQ29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0bXBDb2x1bW5zICs9ICcsJztcclxuICAgICAgICAgICAgICAgIG91dHB1dENvbHVtbnMgKz0gJywnO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdG1wQ29sdW1ucyArPSBgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyaWJ1dGUuZmllbGQpfSAke2F0dHJpYnV0ZS50eXBlLnRvU3FsKCl9YDtcclxuICAgICAgICAgICAgICBvdXRwdXRDb2x1bW5zICs9IGBJTlNFUlRFRC4ke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHJpYnV0ZS5maWVsZCl9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRtcFRhYmxlID0gYGRlY2xhcmUgQHRtcCB0YWJsZSAoJHt0bXBDb2x1bW5zfSk7YDtcclxuICAgICAgICAgIG91dHB1dEZyYWdtZW50ID0gYCBPVVRQVVQgJHtvdXRwdXRDb2x1bW5zfSBpbnRvIEB0bXBgO1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0RnJvbVRtcCA9ICc7c2VsZWN0ICogZnJvbSBAdG1wJztcclxuXHJcbiAgICAgICAgICB2YWx1ZVF1ZXJ5ICs9IHNlbGVjdEZyb21UbXA7XHJcbiAgICAgICAgICBlbXB0eVF1ZXJ5ICs9IHNlbGVjdEZyb21UbXA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKF8uZ2V0KHRoaXMsIFsnc2VxdWVsaXplJywgJ29wdGlvbnMnLCAnZGlhbGVjdE9wdGlvbnMnLCAncHJlcGVuZFNlYXJjaFBhdGgnXSkgfHwgb3B0aW9ucy5zZWFyY2hQYXRoKSB7XHJcbiAgICAgIC8vIE5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIHdpdGggc2VhcmNoIHBhdGggKHJlcXVpcmVzIG91dHB1dCBvZiBtdWx0aXBsZSBxdWVyaWVzKVxyXG4gICAgICBvcHRpb25zLmJpbmRQYXJhbSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLkVYQ0VQVElPTiAmJiBvcHRpb25zLmV4Y2VwdGlvbikge1xyXG4gICAgICAvLyBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCB3aXRoIGJpbmQgcGFyYW1ldGVycyAocmVxdWlyZXMgb3V0cHV0IG9mIG11bHRpcGxlIHF1ZXJpZXMpXHJcbiAgICAgIG9wdGlvbnMuYmluZFBhcmFtID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVIYXNoID0gVXRpbHMucmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoKHZhbHVlSGFzaCwgdGhpcy5vcHRpb25zLm9taXROdWxsKTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlSGFzaCkge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlSGFzaCwga2V5KSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVIYXNoW2tleV07XHJcbiAgICAgICAgZmllbGRzLnB1c2godGhpcy5xdW90ZUlkZW50aWZpZXIoa2V5KSk7XHJcblxyXG4gICAgICAgIC8vIFNFUklBTFMnIGNhbid0IGJlIE5VTEwgaW4gcG9zdGdyZXNxbCwgdXNlIERFRkFVTFQgd2hlcmUgc3VwcG9ydGVkXHJcbiAgICAgICAgaWYgKG1vZGVsQXR0cmlidXRlTWFwICYmIG1vZGVsQXR0cmlidXRlTWFwW2tleV0gJiYgbW9kZWxBdHRyaWJ1dGVNYXBba2V5XS5hdXRvSW5jcmVtZW50ID09PSB0cnVlICYmICF2YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmF1dG9JbmNyZW1lbnQuZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpZWxkcy5zcGxpY2UoLTEsIDEpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLkRFRkFVTFQpIHtcclxuICAgICAgICAgICAgdmFsdWVzLnB1c2goJ0RFRkFVTFQnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuZXNjYXBlKG51bGwpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKG1vZGVsQXR0cmlidXRlTWFwICYmIG1vZGVsQXR0cmlidXRlTWFwW2tleV0gJiYgbW9kZWxBdHRyaWJ1dGVNYXBba2V5XS5hdXRvSW5jcmVtZW50ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlkZW50aXR5V3JhcHBlclJlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QgfHwgb3B0aW9ucy5iaW5kUGFyYW0gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuZXNjYXBlKHZhbHVlLCBtb2RlbEF0dHJpYnV0ZU1hcCAmJiBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldIHx8IHVuZGVmaW5lZCwgeyBjb250ZXh0OiAnSU5TRVJUJyB9KSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLmZvcm1hdCh2YWx1ZSwgbW9kZWxBdHRyaWJ1dGVNYXAgJiYgbW9kZWxBdHRyaWJ1dGVNYXBba2V5XSB8fCB1bmRlZmluZWQsIHsgY29udGV4dDogJ0lOU0VSVCcgfSwgYmluZFBhcmFtKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVwbGFjZW1lbnRzID0ge1xyXG4gICAgICBpZ25vcmVEdXBsaWNhdGVzOiBvcHRpb25zLmlnbm9yZUR1cGxpY2F0ZXMgPyB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluc2VydHMuaWdub3JlRHVwbGljYXRlcyA6ICcnLFxyXG4gICAgICBvbkNvbmZsaWN0RG9Ob3RoaW5nOiBvcHRpb25zLmlnbm9yZUR1cGxpY2F0ZXMgPyB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluc2VydHMub25Db25mbGljdERvTm90aGluZyA6ICcnLFxyXG4gICAgICBhdHRyaWJ1dGVzOiBmaWVsZHMuam9pbignLCcpLFxyXG4gICAgICBvdXRwdXQ6IG91dHB1dEZyYWdtZW50LFxyXG4gICAgICB2YWx1ZXM6IHZhbHVlcy5qb2luKCcsJyksXHJcbiAgICAgIHRtcFRhYmxlXHJcbiAgICB9O1xyXG5cclxuICAgIHZhbHVlUXVlcnkgPSBgJHt0bXBUYWJsZX1JTlNFUlQke3JlcGxhY2VtZW50cy5pZ25vcmVEdXBsaWNhdGVzfSBJTlRPICR7cXVvdGVkVGFibGV9ICgke3JlcGxhY2VtZW50cy5hdHRyaWJ1dGVzfSkke3JlcGxhY2VtZW50cy5vdXRwdXR9IFZBTFVFUyAoJHtyZXBsYWNlbWVudHMudmFsdWVzfSkke3JlcGxhY2VtZW50cy5vbkNvbmZsaWN0RG9Ob3RoaW5nfSR7dmFsdWVRdWVyeX1gO1xyXG4gICAgZW1wdHlRdWVyeSA9IGAke3RtcFRhYmxlfUlOU0VSVCR7cmVwbGFjZW1lbnRzLmlnbm9yZUR1cGxpY2F0ZXN9IElOVE8gJHtxdW90ZWRUYWJsZX0ke3JlcGxhY2VtZW50cy5vdXRwdXR9JHtyZXBsYWNlbWVudHMub25Db25mbGljdERvTm90aGluZ30ke2VtcHR5UXVlcnl9YDtcclxuXHJcbiAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5FWENFUFRJT04gJiYgb3B0aW9ucy5leGNlcHRpb24pIHtcclxuICAgICAgLy8gTW9zdGx5IGZvciBpbnRlcm5hbCB1c2UsIHNvIHdlIGV4cGVjdCB0aGUgdXNlciB0byBrbm93IHdoYXQgaGUncyBkb2luZyFcclxuICAgICAgLy8gcGdfdGVtcCBmdW5jdGlvbnMgYXJlIHByaXZhdGUgcGVyIGNvbm5lY3Rpb24sIHNvIHdlIG5ldmVyIHJpc2sgdGhpcyBmdW5jdGlvbiBpbnRlcmZlcmluZyB3aXRoIGFub3RoZXIgb25lLlxyXG4gICAgICBpZiAoc2VtdmVyLmd0ZSh0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRhdGFiYXNlVmVyc2lvbiwgJzkuMi4wJykpIHtcclxuICAgICAgICAvLyA+PSA5LjIgLSBVc2UgYSBVVUlEIGJ1dCBwcmVmaXggd2l0aCAnZnVuY18nIChudW1iZXJzIGZpcnN0IG5vdCBhbGxvd2VkKVxyXG4gICAgICAgIGNvbnN0IGRlbGltaXRlciA9IGAkZnVuY18ke3V1aWR2NCgpLnJlcGxhY2UoLy0vZywgJycpfSRgO1xyXG5cclxuICAgICAgICBvcHRpb25zLmV4Y2VwdGlvbiA9ICdXSEVOIHVuaXF1ZV92aW9sYXRpb24gVEhFTiBHRVQgU1RBQ0tFRCBESUFHTk9TVElDUyBzZXF1ZWxpemVfY2F1Z2h0X2V4Y2VwdGlvbiA9IFBHX0VYQ0VQVElPTl9ERVRBSUw7JztcclxuICAgICAgICB2YWx1ZVF1ZXJ5ID0gYCR7YENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHBnX3RlbXAudGVzdGZ1bmMoT1VUIHJlc3BvbnNlICR7cXVvdGVkVGFibGV9LCBPVVQgc2VxdWVsaXplX2NhdWdodF9leGNlcHRpb24gdGV4dCkgUkVUVVJOUyBSRUNPUkQgQVMgJHtkZWxpbWl0ZXJ9YCArXHJcbiAgICAgICAgICAnIEJFR0lOICd9JHt2YWx1ZVF1ZXJ5fSBJTlRPIHJlc3BvbnNlOyBFWENFUFRJT04gJHtvcHRpb25zLmV4Y2VwdGlvbn0gRU5EICR7ZGVsaW1pdGVyXHJcbiAgICAgICAgfSBMQU5HVUFHRSBwbHBnc3FsOyBTRUxFQ1QgKHRlc3RmdW5jLnJlc3BvbnNlKS4qLCB0ZXN0ZnVuYy5zZXF1ZWxpemVfY2F1Z2h0X2V4Y2VwdGlvbiBGUk9NIHBnX3RlbXAudGVzdGZ1bmMoKTsgRFJPUCBGVU5DVElPTiBJRiBFWElTVFMgcGdfdGVtcC50ZXN0ZnVuYygpYDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcHRpb25zLmV4Y2VwdGlvbiA9ICdXSEVOIHVuaXF1ZV92aW9sYXRpb24gVEhFTiBOVUxMOyc7XHJcbiAgICAgICAgdmFsdWVRdWVyeSA9IGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBwZ190ZW1wLnRlc3RmdW5jKCkgUkVUVVJOUyBTRVRPRiAke3F1b3RlZFRhYmxlfSBBUyAkYm9keSQgQkVHSU4gUkVUVVJOIFFVRVJZICR7dmFsdWVRdWVyeX07IEVYQ0VQVElPTiAke29wdGlvbnMuZXhjZXB0aW9ufSBFTkQ7ICRib2R5JCBMQU5HVUFHRSBwbHBnc3FsOyBTRUxFQ1QgKiBGUk9NIHBnX3RlbXAudGVzdGZ1bmMoKTsgRFJPUCBGVU5DVElPTiBJRiBFWElTVFMgcGdfdGVtcC50ZXN0ZnVuYygpO2A7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0c1snT04gRFVQTElDQVRFIEtFWSddICYmIG9wdGlvbnMub25EdXBsaWNhdGUpIHtcclxuICAgICAgdmFsdWVRdWVyeSArPSBgIE9OIERVUExJQ0FURSBLRVkgJHtvcHRpb25zLm9uRHVwbGljYXRlfWA7XHJcbiAgICAgIGVtcHR5UXVlcnkgKz0gYCBPTiBEVVBMSUNBVEUgS0VZICR7b3B0aW9ucy5vbkR1cGxpY2F0ZX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHF1ZXJ5ID0gYCR7cmVwbGFjZW1lbnRzLmF0dHJpYnV0ZXMubGVuZ3RoID8gdmFsdWVRdWVyeSA6IGVtcHR5UXVlcnl9O2A7XHJcbiAgICBpZiAoaWRlbnRpdHlXcmFwcGVyUmVxdWlyZWQgJiYgdGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5hdXRvSW5jcmVtZW50LmlkZW50aXR5SW5zZXJ0KSB7XHJcbiAgICAgIHF1ZXJ5ID0gYFNFVCBJREVOVElUWV9JTlNFUlQgJHtxdW90ZWRUYWJsZX0gT047ICR7cXVlcnl9IFNFVCBJREVOVElUWV9JTlNFUlQgJHtxdW90ZWRUYWJsZX0gT0ZGO2A7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXNlZCBieSBQb3N0Z3JlcyB1cHNlcnRRdWVyeSBhbmQgY2FsbHMgdG8gaGVyZSB3aXRoIG9wdGlvbnMuZXhjZXB0aW9uIHNldCB0byB0cnVlXHJcbiAgICBjb25zdCByZXN1bHQgPSB7IHF1ZXJ5IH07XHJcbiAgICBpZiAob3B0aW9ucy5iaW5kUGFyYW0gIT09IGZhbHNlKSB7XHJcbiAgICAgIHJlc3VsdC5iaW5kID0gYmluZDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGFuIGluc2VydCBpbnRvIGNvbW1hbmQgZm9yIG11bHRpcGxlIHZhbHVlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gZmllbGRWYWx1ZUhhc2hlc1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGZpZWxkTWFwcGVkQXR0cmlidXRlc1xyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBidWxrSW5zZXJ0UXVlcnkodGFibGVOYW1lLCBmaWVsZFZhbHVlSGFzaGVzLCBvcHRpb25zLCBmaWVsZE1hcHBlZEF0dHJpYnV0ZXMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgZmllbGRNYXBwZWRBdHRyaWJ1dGVzID0gZmllbGRNYXBwZWRBdHRyaWJ1dGVzIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IHR1cGxlcyA9IFtdO1xyXG4gICAgY29uc3Qgc2VyaWFscyA9IHt9O1xyXG4gICAgY29uc3QgYWxsQXR0cmlidXRlcyA9IFtdO1xyXG4gICAgbGV0IG9uRHVwbGljYXRlS2V5VXBkYXRlID0gJyc7XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWVsZFZhbHVlSGFzaCBvZiBmaWVsZFZhbHVlSGFzaGVzKSB7XHJcbiAgICAgIF8uZm9yT3duKGZpZWxkVmFsdWVIYXNoLCAodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghYWxsQXR0cmlidXRlcy5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgICBhbGxBdHRyaWJ1dGVzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZmllbGRNYXBwZWRBdHRyaWJ1dGVzW2tleV1cclxuICAgICAgICAgICYmIGZpZWxkTWFwcGVkQXR0cmlidXRlc1trZXldLmF1dG9JbmNyZW1lbnQgPT09IHRydWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHNlcmlhbHNba2V5XSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWVIYXNoIG9mIGZpZWxkVmFsdWVIYXNoZXMpIHtcclxuICAgICAgY29uc3QgdmFsdWVzID0gYWxsQXR0cmlidXRlcy5tYXAoa2V5ID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmJ1bGtEZWZhdWx0XHJcbiAgICAgICAgICAmJiBzZXJpYWxzW2tleV0gPT09IHRydWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiBmaWVsZFZhbHVlSGFzaFtrZXldIHx8ICdERUZBVUxUJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmVzY2FwZShmaWVsZFZhbHVlSGFzaFtrZXldLCBmaWVsZE1hcHBlZEF0dHJpYnV0ZXNba2V5XSwgeyBjb250ZXh0OiAnSU5TRVJUJyB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0dXBsZXMucHVzaChgKCR7dmFsdWVzLmpvaW4oJywnKX0pYCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuaW5zZXJ0cy51cGRhdGVPbkR1cGxpY2F0ZSAmJiBvcHRpb25zLnVwZGF0ZU9uRHVwbGljYXRlKSB7XHJcbiAgICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluc2VydHMudXBkYXRlT25EdXBsaWNhdGUgPT0gJyBPTiBDT05GTElDVCBETyBVUERBVEUgU0VUJykgeyAvLyBwb3N0Z3JlcyAvIHNxbGl0ZVxyXG4gICAgICAgIC8vIElmIG5vIGNvbmZsaWN0IHRhcmdldCBjb2x1bW5zIHdlcmUgc3BlY2lmaWVkLCB1c2UgdGhlIHByaW1hcnkga2V5IG5hbWVzIGZyb20gb3B0aW9ucy51cHNlcnRLZXlzXHJcbiAgICAgICAgY29uc3QgY29uZmxpY3RLZXlzID0gb3B0aW9ucy51cHNlcnRLZXlzLm1hcChhdHRyID0+IHRoaXMucXVvdGVJZGVudGlmaWVyKGF0dHIpKTtcclxuICAgICAgICBjb25zdCB1cGRhdGVLZXlzID0gb3B0aW9ucy51cGRhdGVPbkR1cGxpY2F0ZS5tYXAoYXR0ciA9PiBgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKX09RVhDTFVERUQuJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKX1gKTtcclxuICAgICAgICBvbkR1cGxpY2F0ZUtleVVwZGF0ZSA9IGAgT04gQ09ORkxJQ1QgKCR7Y29uZmxpY3RLZXlzLmpvaW4oJywnKX0pIERPIFVQREFURSBTRVQgJHt1cGRhdGVLZXlzLmpvaW4oJywnKX1gO1xyXG4gICAgICB9IGVsc2UgeyAvLyBteXNxbCAvIG1hcmlhXHJcbiAgICAgICAgY29uc3QgdmFsdWVLZXlzID0gb3B0aW9ucy51cGRhdGVPbkR1cGxpY2F0ZS5tYXAoYXR0ciA9PiBgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKX09VkFMVUVTKCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cil9KWApO1xyXG4gICAgICAgIG9uRHVwbGljYXRlS2V5VXBkYXRlID0gYCR7dGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbnNlcnRzLnVwZGF0ZU9uRHVwbGljYXRlfSAke3ZhbHVlS2V5cy5qb2luKCcsJyl9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlnbm9yZUR1cGxpY2F0ZXMgPSBvcHRpb25zLmlnbm9yZUR1cGxpY2F0ZXMgPyB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluc2VydHMuaWdub3JlRHVwbGljYXRlcyA6ICcnO1xyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IGFsbEF0dHJpYnV0ZXMubWFwKGF0dHIgPT4gdGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cikpLmpvaW4oJywnKTtcclxuICAgIGNvbnN0IG9uQ29uZmxpY3REb05vdGhpbmcgPSBvcHRpb25zLmlnbm9yZUR1cGxpY2F0ZXMgPyB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluc2VydHMub25Db25mbGljdERvTm90aGluZyA6ICcnO1xyXG4gICAgbGV0IHJldHVybmluZyA9ICcnO1xyXG5cclxuICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnJldHVyblZhbHVlcyAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMucmV0dXJuaW5nKSkge1xyXG4gICAgICBjb25zdCBmaWVsZHMgPSBvcHRpb25zLnJldHVybmluZy5tYXAoZmllbGQgPT4gdGhpcy5xdW90ZUlkZW50aWZpZXIoZmllbGQpKS5qb2luKCcsJyk7XHJcbiAgICAgIHJldHVybmluZyArPSBgIFJFVFVSTklORyAke2ZpZWxkc31gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuaW5nICs9IHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMucmV0dXJuVmFsdWVzICYmIG9wdGlvbnMucmV0dXJuaW5nID8gJyBSRVRVUk5JTkcgKicgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYElOU0VSVCR7aWdub3JlRHVwbGljYXRlc30gSU5UTyAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfSAoJHthdHRyaWJ1dGVzfSkgVkFMVUVTICR7dHVwbGVzLmpvaW4oJywnKX0ke29uRHVwbGljYXRlS2V5VXBkYXRlfSR7b25Db25mbGljdERvTm90aGluZ30ke3JldHVybmluZ307YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYW4gdXBkYXRlIHF1ZXJ5XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJWYWx1ZUhhc2hcclxuICAgKiBAcGFyYW0ge09iamVjdH0gd2hlcmUgQSBoYXNoIHdpdGggY29uZGl0aW9ucyAoZS5nLiB7bmFtZTogJ2Zvbyd9KSBPUiBhbiBJRCBhcyBpbnRlZ2VyXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlc1xyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICB1cGRhdGVRdWVyeSh0YWJsZU5hbWUsIGF0dHJWYWx1ZUhhc2gsIHdoZXJlLCBvcHRpb25zLCBhdHRyaWJ1dGVzKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIF8uZGVmYXVsdHMob3B0aW9ucywgdGhpcy5vcHRpb25zKTtcclxuXHJcbiAgICBhdHRyVmFsdWVIYXNoID0gVXRpbHMucmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoKGF0dHJWYWx1ZUhhc2gsIG9wdGlvbnMub21pdE51bGwsIG9wdGlvbnMpO1xyXG5cclxuICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xyXG4gICAgY29uc3QgYmluZCA9IFtdO1xyXG4gICAgY29uc3QgbW9kZWxBdHRyaWJ1dGVNYXAgPSB7fTtcclxuICAgIGxldCBvdXRwdXRGcmFnbWVudCA9ICcnO1xyXG4gICAgbGV0IHRtcFRhYmxlID0gJyc7IC8vIHRtcFRhYmxlIGRlY2xhcmF0aW9uIGZvciB0cmlnZ2VyXHJcbiAgICBsZXQgc2VsZWN0RnJvbVRtcCA9ICcnOyAvLyBTZWxlY3Qgc3RhdGVtZW50IGZvciB0cmlnZ2VyXHJcbiAgICBsZXQgc3VmZml4ID0gJyc7XHJcblxyXG4gICAgaWYgKF8uZ2V0KHRoaXMsIFsnc2VxdWVsaXplJywgJ29wdGlvbnMnLCAnZGlhbGVjdE9wdGlvbnMnLCAncHJlcGVuZFNlYXJjaFBhdGgnXSkgfHwgb3B0aW9ucy5zZWFyY2hQYXRoKSB7XHJcbiAgICAgIC8vIE5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIHdpdGggc2VhcmNoIHBhdGggKHJlcXVpcmVzIG91dHB1dCBvZiBtdWx0aXBsZSBxdWVyaWVzKVxyXG4gICAgICBvcHRpb25zLmJpbmRQYXJhbSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJpbmRQYXJhbSA9IG9wdGlvbnMuYmluZFBhcmFtID09PSB1bmRlZmluZWQgPyB0aGlzLmJpbmRQYXJhbShiaW5kKSA6IG9wdGlvbnMuYmluZFBhcmFtO1xyXG5cclxuICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzWydMSU1JVCBPTiBVUERBVEUnXSAmJiBvcHRpb25zLmxpbWl0KSB7XHJcbiAgICAgIGlmICh0aGlzLmRpYWxlY3QgIT09ICdtc3NxbCcpIHtcclxuICAgICAgICBzdWZmaXggPSBgIExJTUlUICR7dGhpcy5lc2NhcGUob3B0aW9ucy5saW1pdCl9IGA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5yZXR1cm5WYWx1ZXMpIHtcclxuICAgICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMucmV0dXJuVmFsdWVzLm91dHB1dCkge1xyXG4gICAgICAgIC8vIHdlIGFsd2F5cyBuZWVkIHRoaXMgZm9yIG1zc3FsXHJcbiAgICAgICAgb3V0cHV0RnJhZ21lbnQgPSAnIE9VVFBVVCBJTlNFUlRFRC4qJztcclxuXHJcbiAgICAgICAgLy9UbyBjYXB0dXJlIG91dHB1dCByb3dzIHdoZW4gdGhlcmUgaXMgYSB0cmlnZ2VyIG9uIE1TU1FMIERCXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgb3B0aW9ucy5oYXNUcmlnZ2VyICYmIHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMudG1wVGFibGVUcmlnZ2VyKSB7XHJcbiAgICAgICAgICBsZXQgdG1wQ29sdW1ucyA9ICcnO1xyXG4gICAgICAgICAgbGV0IG91dHB1dENvbHVtbnMgPSAnJztcclxuXHJcbiAgICAgICAgICBmb3IgKGNvbnN0IG1vZGVsS2V5IGluIGF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlc1ttb2RlbEtleV07XHJcbiAgICAgICAgICAgIGlmICghKGF0dHJpYnV0ZS50eXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLlZJUlRVQUwpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRtcENvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdG1wQ29sdW1ucyArPSAnLCc7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRDb2x1bW5zICs9ICcsJztcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHRtcENvbHVtbnMgKz0gYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cmlidXRlLmZpZWxkKX0gJHthdHRyaWJ1dGUudHlwZS50b1NxbCgpfWA7XHJcbiAgICAgICAgICAgICAgb3V0cHV0Q29sdW1ucyArPSBgSU5TRVJURUQuJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyaWJ1dGUuZmllbGQpfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0bXBUYWJsZSA9IGBkZWNsYXJlIEB0bXAgdGFibGUgKCR7dG1wQ29sdW1uc30pOyBgO1xyXG4gICAgICAgICAgb3V0cHV0RnJhZ21lbnQgPSBgIE9VVFBVVCAke291dHB1dENvbHVtbnN9IGludG8gQHRtcGA7XHJcbiAgICAgICAgICBzZWxlY3RGcm9tVG1wID0gJztzZWxlY3QgKiBmcm9tIEB0bXAnO1xyXG5cclxuICAgICAgICAgIHN1ZmZpeCArPSBzZWxlY3RGcm9tVG1wO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnJldHVyblZhbHVlcyAmJiBvcHRpb25zLnJldHVybmluZykge1xyXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSByZXR1cm4gb3V0cHV0IGlzIHByb3Blcmx5IG1hcHBlZCB0byBtb2RlbCBmaWVsZHMuXHJcbiAgICAgICAgb3B0aW9ucy5tYXBUb01vZGVsID0gdHJ1ZTtcclxuICAgICAgICBzdWZmaXggKz0gJyBSRVRVUk5JTkcgKic7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXR0cmlidXRlcykge1xyXG4gICAgICBfLmVhY2goYXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgbW9kZWxBdHRyaWJ1dGVNYXBba2V5XSA9IGF0dHJpYnV0ZTtcclxuICAgICAgICBpZiAoYXR0cmlidXRlLmZpZWxkKSB7XHJcbiAgICAgICAgICBtb2RlbEF0dHJpYnV0ZU1hcFthdHRyaWJ1dGUuZmllbGRdID0gYXR0cmlidXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0clZhbHVlSGFzaCkge1xyXG4gICAgICBpZiAobW9kZWxBdHRyaWJ1dGVNYXAgJiYgbW9kZWxBdHRyaWJ1dGVNYXBba2V5XSAmJlxyXG4gICAgICAgIG1vZGVsQXR0cmlidXRlTWFwW2tleV0uYXV0b0luY3JlbWVudCA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICF0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmF1dG9JbmNyZW1lbnQudXBkYXRlKSB7XHJcbiAgICAgICAgLy8gbm90IGFsbG93ZWQgdG8gdXBkYXRlIGlkZW50aXR5IGNvbHVtblxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB2YWx1ZSA9IGF0dHJWYWx1ZUhhc2hba2V5XTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCB8fCBvcHRpb25zLmJpbmRQYXJhbSA9PT0gZmFsc2UpIHtcclxuICAgICAgICB2YWx1ZXMucHVzaChgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihrZXkpfT0ke3RoaXMuZXNjYXBlKHZhbHVlLCBtb2RlbEF0dHJpYnV0ZU1hcCAmJiBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldIHx8IHVuZGVmaW5lZCwgeyBjb250ZXh0OiAnVVBEQVRFJyB9KX1gKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWx1ZXMucHVzaChgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihrZXkpfT0ke3RoaXMuZm9ybWF0KHZhbHVlLCBtb2RlbEF0dHJpYnV0ZU1hcCAmJiBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldIHx8IHVuZGVmaW5lZCwgeyBjb250ZXh0OiAnVVBEQVRFJyB9LCBiaW5kUGFyYW0pfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgd2hlcmVPcHRpb25zID0gXy5kZWZhdWx0cyh7IGJpbmRQYXJhbSB9LCBvcHRpb25zKTtcclxuXHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcXVlcnkgPSBgJHt0bXBUYWJsZX1VUERBVEUgJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX0gU0VUICR7dmFsdWVzLmpvaW4oJywnKX0ke291dHB1dEZyYWdtZW50fSAke3RoaXMud2hlcmVRdWVyeSh3aGVyZSwgd2hlcmVPcHRpb25zKX0ke3N1ZmZpeH1gLnRyaW0oKTtcclxuICAgIC8vIFVzZWQgYnkgUG9zdGdyZXMgdXBzZXJ0UXVlcnkgYW5kIGNhbGxzIHRvIGhlcmUgd2l0aCBvcHRpb25zLmV4Y2VwdGlvbiBzZXQgdG8gdHJ1ZVxyXG4gICAgY29uc3QgcmVzdWx0ID0geyBxdWVyeSB9O1xyXG4gICAgaWYgKG9wdGlvbnMuYmluZFBhcmFtICE9PSBmYWxzZSkge1xyXG4gICAgICByZXN1bHQuYmluZCA9IGJpbmQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhbiB1cGRhdGUgcXVlcnkgdXNpbmcgYXJpdGhtZXRpYyBvcGVyYXRvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yICAgICAgU3RyaW5nIHdpdGggdGhlIGFyaXRobWV0aWMgb3BlcmF0b3IgKGUuZy4gJysnIG9yICctJylcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lICAgICBOYW1lIG9mIHRoZSB0YWJsZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyVmFsdWVIYXNoIEEgaGFzaCB3aXRoIGF0dHJpYnV0ZS12YWx1ZS1wYWlyc1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB3aGVyZSAgICAgICAgIEEgaGFzaCB3aXRoIGNvbmRpdGlvbnMgKGUuZy4ge25hbWU6ICdmb28nfSkgT1IgYW4gSUQgYXMgaW50ZWdlclxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcclxuICAgKi9cclxuICBhcml0aG1ldGljUXVlcnkob3BlcmF0b3IsIHRhYmxlTmFtZSwgYXR0clZhbHVlSGFzaCwgd2hlcmUsIG9wdGlvbnMsIGF0dHJpYnV0ZXMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgXy5kZWZhdWx0cyhvcHRpb25zLCB7IHJldHVybmluZzogdHJ1ZSB9KTtcclxuXHJcbiAgICBhdHRyVmFsdWVIYXNoID0gVXRpbHMucmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoKGF0dHJWYWx1ZUhhc2gsIHRoaXMub3B0aW9ucy5vbWl0TnVsbCk7XHJcblxyXG4gICAgY29uc3QgdmFsdWVzID0gW107XHJcbiAgICBsZXQgb3V0cHV0RnJhZ21lbnQgPSAnJztcclxuICAgIGxldCByZXR1cm5pbmdGcmFnbWVudCA9ICcnO1xyXG5cclxuICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnJldHVyblZhbHVlcyAmJiBvcHRpb25zLnJldHVybmluZykge1xyXG4gICAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5yZXR1cm5WYWx1ZXMucmV0dXJuaW5nKSB7XHJcbiAgICAgICAgb3B0aW9ucy5tYXBUb01vZGVsID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm5pbmdGcmFnbWVudCA9ICdSRVRVUk5JTkcgKic7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5yZXR1cm5WYWx1ZXMub3V0cHV0KSB7XHJcbiAgICAgICAgb3V0cHV0RnJhZ21lbnQgPSAnIE9VVFBVVCBJTlNFUlRFRC4qJztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IGluIGF0dHJWYWx1ZUhhc2gpIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBhdHRyVmFsdWVIYXNoW2tleV07XHJcbiAgICAgIHZhbHVlcy5wdXNoKGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGtleSl9PSR7dGhpcy5xdW90ZUlkZW50aWZpZXIoa2V5KX0ke29wZXJhdG9yfSAke3RoaXMuZXNjYXBlKHZhbHVlKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIGF0dHJpYnV0ZXMpIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBhdHRyaWJ1dGVzW2tleV07XHJcbiAgICAgIHZhbHVlcy5wdXNoKGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGtleSl9PSR7dGhpcy5lc2NhcGUodmFsdWUpfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgVVBEQVRFICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9IFNFVCAke3ZhbHVlcy5qb2luKCcsJyl9JHtvdXRwdXRGcmFnbWVudH0gJHt0aGlzLndoZXJlUXVlcnkod2hlcmUpfSAke3JldHVybmluZ0ZyYWdtZW50fWAudHJpbSgpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIFJldHVybnMgYW4gYWRkIGluZGV4IHF1ZXJ5LlxyXG4gICAgUGFyYW1ldGVyczpcclxuICAgICAgLSB0YWJsZU5hbWUgLT4gTmFtZSBvZiBhbiBleGlzdGluZyB0YWJsZSwgcG9zc2libHkgd2l0aCBzY2hlbWEuXHJcbiAgICAgIC0gb3B0aW9uczpcclxuICAgICAgICAtIHR5cGU6IFVOSVFVRXxGVUxMVEVYVHxTUEFUSUFMXHJcbiAgICAgICAgLSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgaW5kZXguIERlZmF1bHQgaXMgPHRhYmxlPl88YXR0cjE+XzxhdHRyMj5cclxuICAgICAgICAtIGZpZWxkczogQW4gYXJyYXkgb2YgYXR0cmlidXRlcyBhcyBzdHJpbmcgb3IgYXMgaGFzaC5cclxuICAgICAgICAgICAgICAgICAgSWYgdGhlIGF0dHJpYnV0ZSBpcyBhIGhhc2gsIGl0IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGNvbnRlbnQ6XHJcbiAgICAgICAgICAgICAgICAgIC0gbmFtZTogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS9jb2x1bW5cclxuICAgICAgICAgICAgICAgICAgLSBsZW5ndGg6IEFuIGludGVnZXIuIE9wdGlvbmFsXHJcbiAgICAgICAgICAgICAgICAgIC0gb3JkZXI6ICdBU0MnIG9yICdERVNDJy4gT3B0aW9uYWxcclxuICAgICAgICAtIHBhcnNlclxyXG4gICAgICAgIC0gdXNpbmdcclxuICAgICAgICAtIG9wZXJhdG9yXHJcbiAgICAgICAgLSBjb25jdXJyZW50bHk6IFBhc3MgQ09OQ1VSUkVOVCBzbyBvdGhlciBvcGVyYXRpb25zIHJ1biB3aGlsZSB0aGUgaW5kZXggaXMgY3JlYXRlZFxyXG4gICAgICAtIHJhd1RhYmxlbmFtZSwgdGhlIG5hbWUgb2YgdGhlIHRhYmxlLCB3aXRob3V0IHNjaGVtYS4gVXNlZCB0byBjcmVhdGUgdGhlIG5hbWUgb2YgdGhlIGluZGV4XHJcbiAgIEBwcml2YXRlXHJcbiAgKi9cclxuICBhZGRJbmRleFF1ZXJ5KHRhYmxlTmFtZSwgYXR0cmlidXRlcywgb3B0aW9ucywgcmF3VGFibGVuYW1lKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXR0cmlidXRlcykpIHtcclxuICAgICAgb3B0aW9ucyA9IGF0dHJpYnV0ZXM7XHJcbiAgICAgIGF0dHJpYnV0ZXMgPSB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvcHRpb25zLmZpZWxkcyA9IGF0dHJpYnV0ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucy5wcmVmaXggPSBvcHRpb25zLnByZWZpeCB8fCByYXdUYWJsZW5hbWUgfHwgdGFibGVOYW1lO1xyXG4gICAgaWYgKG9wdGlvbnMucHJlZml4ICYmIHR5cGVvZiBvcHRpb25zLnByZWZpeCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgb3B0aW9ucy5wcmVmaXggPSBvcHRpb25zLnByZWZpeC5yZXBsYWNlKC9cXC4vZywgJ18nKTtcclxuICAgICAgb3B0aW9ucy5wcmVmaXggPSBvcHRpb25zLnByZWZpeC5yZXBsYWNlKC8oXCJ8JykvZywgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpZWxkc1NxbCA9IG9wdGlvbnMuZmllbGRzLm1hcChmaWVsZCA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgZmllbGQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVvdGVJZGVudGlmaWVyKGZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXF1ZWxpemVNZXRob2QoZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICAgIGlmIChmaWVsZC5hdHRyaWJ1dGUpIHtcclxuICAgICAgICBmaWVsZC5uYW1lID0gZmllbGQuYXR0cmlidXRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWZpZWxkLm5hbWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xsb3dpbmcgaW5kZXggZmllbGQgaGFzIG5vIG5hbWU6ICR7dXRpbC5pbnNwZWN0KGZpZWxkKX1gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzdWx0ICs9IHRoaXMucXVvdGVJZGVudGlmaWVyKGZpZWxkLm5hbWUpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuaW5kZXguY29sbGF0ZSAmJiBmaWVsZC5jb2xsYXRlKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IGAgQ09MTEFURSAke3RoaXMucXVvdGVJZGVudGlmaWVyKGZpZWxkLmNvbGxhdGUpfWA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluZGV4Lmxlbmd0aCAmJiBmaWVsZC5sZW5ndGgpIHtcclxuICAgICAgICByZXN1bHQgKz0gYCgke2ZpZWxkLmxlbmd0aH0pYDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZpZWxkLm9yZGVyKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IGAgJHtmaWVsZC5vcmRlcn1gO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcclxuICAgICAgLy8gTW9zdGx5IGZvciBjYXNlcyB3aGVyZSBhZGRJbmRleCBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIHVzZXIgd2l0aG91dCBhbiBvcHRpb25zIG9iamVjdCAoZm9yIGV4YW1wbGUgaW4gbWlncmF0aW9ucylcclxuICAgICAgLy8gQWxsIGNhbGxzIHRoYXQgZ28gdGhyb3VnaCBzZXF1ZWxpemUgc2hvdWxkIGFscmVhZHkgaGF2ZSBhIG5hbWVcclxuICAgICAgb3B0aW9ucyA9IFV0aWxzLm5hbWVJbmRleChvcHRpb25zLCBvcHRpb25zLnByZWZpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IE1vZGVsLl9jb25mb3JtSW5kZXgob3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluZGV4LnR5cGUpIHtcclxuICAgICAgZGVsZXRlIG9wdGlvbnMudHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucy53aGVyZSkge1xyXG4gICAgICBvcHRpb25zLndoZXJlID0gdGhpcy53aGVyZVF1ZXJ5KG9wdGlvbnMud2hlcmUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGFibGVOYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0YWJsZU5hbWUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcnModGFibGVOYW1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhYmxlTmFtZSA9IHRoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbmN1cnJlbnRseSA9IHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuaW5kZXguY29uY3VycmVudGx5ICYmIG9wdGlvbnMuY29uY3VycmVudGx5ID8gJ0NPTkNVUlJFTlRMWScgOiB1bmRlZmluZWQ7XHJcbiAgICBsZXQgaW5kO1xyXG4gICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuaW5kZXhWaWFBbHRlcikge1xyXG4gICAgICBpbmQgPSBbXHJcbiAgICAgICAgJ0FMVEVSIFRBQkxFJyxcclxuICAgICAgICB0YWJsZU5hbWUsXHJcbiAgICAgICAgY29uY3VycmVudGx5LFxyXG4gICAgICAgICdBREQnXHJcbiAgICAgIF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbmQgPSBbJ0NSRUFURSddO1xyXG4gICAgfVxyXG5cclxuICAgIGluZCA9IGluZC5jb25jYXQoXHJcbiAgICAgIG9wdGlvbnMudW5pcXVlID8gJ1VOSVFVRScgOiAnJyxcclxuICAgICAgb3B0aW9ucy50eXBlLCAnSU5ERVgnLFxyXG4gICAgICAhdGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbmRleFZpYUFsdGVyID8gY29uY3VycmVudGx5IDogdW5kZWZpbmVkLFxyXG4gICAgICB0aGlzLnF1b3RlSWRlbnRpZmllcnMob3B0aW9ucy5uYW1lKSxcclxuICAgICAgdGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbmRleC51c2luZyA9PT0gMSAmJiBvcHRpb25zLnVzaW5nID8gYFVTSU5HICR7b3B0aW9ucy51c2luZ31gIDogJycsXHJcbiAgICAgICF0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluZGV4VmlhQWx0ZXIgPyBgT04gJHt0YWJsZU5hbWV9YCA6IHVuZGVmaW5lZCxcclxuICAgICAgdGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbmRleC51c2luZyA9PT0gMiAmJiBvcHRpb25zLnVzaW5nID8gYFVTSU5HICR7b3B0aW9ucy51c2luZ31gIDogJycsXHJcbiAgICAgIGAoJHtmaWVsZHNTcWwuam9pbignLCAnKX0ke29wdGlvbnMub3BlcmF0b3IgPyBgICR7b3B0aW9ucy5vcGVyYXRvcn1gIDogJyd9KWAsXHJcbiAgICAgIHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuaW5kZXgucGFyc2VyICYmIG9wdGlvbnMucGFyc2VyID8gYFdJVEggUEFSU0VSICR7b3B0aW9ucy5wYXJzZXJ9YCA6IHVuZGVmaW5lZCxcclxuICAgICAgdGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbmRleC53aGVyZSAmJiBvcHRpb25zLndoZXJlID8gb3B0aW9ucy53aGVyZSA6IHVuZGVmaW5lZFxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gXy5jb21wYWN0KGluZCkuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ29uc3RyYWludFF1ZXJ5KHRhYmxlTmFtZSwgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICBjb25zdCBjb25zdHJhaW50U25pcHBldCA9IHRoaXMuZ2V0Q29uc3RyYWludFNuaXBwZXQodGFibGVOYW1lLCBvcHRpb25zKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGFibGVOYW1lID0gdGhpcy5xdW90ZUlkZW50aWZpZXJzKHRhYmxlTmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0YWJsZU5hbWUgPSB0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYEFMVEVSIFRBQkxFICR7dGFibGVOYW1lfSBBREQgJHtjb25zdHJhaW50U25pcHBldH07YDtcclxuICB9XHJcblxyXG4gIGdldENvbnN0cmFpbnRTbmlwcGV0KHRhYmxlTmFtZSwgb3B0aW9ucykge1xyXG4gICAgbGV0IGNvbnN0cmFpbnRTbmlwcGV0LCBjb25zdHJhaW50TmFtZTtcclxuXHJcbiAgICBjb25zdCBmaWVsZHNTcWwgPSBvcHRpb25zLmZpZWxkcy5tYXAoZmllbGQgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGZpZWxkID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1b3RlSWRlbnRpZmllcihmaWVsZCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKGZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmllbGQuYXR0cmlidXRlKSB7XHJcbiAgICAgICAgZmllbGQubmFtZSA9IGZpZWxkLmF0dHJpYnV0ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFmaWVsZC5uYW1lKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZm9sbG93aW5nIGluZGV4IGZpZWxkIGhhcyBubyBuYW1lOiAke2ZpZWxkfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5xdW90ZUlkZW50aWZpZXIoZmllbGQubmFtZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBmaWVsZHNTcWxRdW90ZWRTdHJpbmcgPSBmaWVsZHNTcWwuam9pbignLCAnKTtcclxuICAgIGNvbnN0IGZpZWxkc1NxbFN0cmluZyA9IGZpZWxkc1NxbC5qb2luKCdfJyk7XHJcblxyXG4gICAgc3dpdGNoIChvcHRpb25zLnR5cGUudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICBjYXNlICdVTklRVUUnOlxyXG4gICAgICAgIGNvbnN0cmFpbnROYW1lID0gdGhpcy5xdW90ZUlkZW50aWZpZXIob3B0aW9ucy5uYW1lIHx8IGAke3RhYmxlTmFtZX1fJHtmaWVsZHNTcWxTdHJpbmd9X3VrYCk7XHJcbiAgICAgICAgY29uc3RyYWludFNuaXBwZXQgPSBgQ09OU1RSQUlOVCAke2NvbnN0cmFpbnROYW1lfSBVTklRVUUgKCR7ZmllbGRzU3FsUXVvdGVkU3RyaW5nfSlgO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdDSEVDSyc6XHJcbiAgICAgICAgb3B0aW9ucy53aGVyZSA9IHRoaXMud2hlcmVJdGVtc1F1ZXJ5KG9wdGlvbnMud2hlcmUpO1xyXG4gICAgICAgIGNvbnN0cmFpbnROYW1lID0gdGhpcy5xdW90ZUlkZW50aWZpZXIob3B0aW9ucy5uYW1lIHx8IGAke3RhYmxlTmFtZX1fJHtmaWVsZHNTcWxTdHJpbmd9X2NrYCk7XHJcbiAgICAgICAgY29uc3RyYWludFNuaXBwZXQgPSBgQ09OU1RSQUlOVCAke2NvbnN0cmFpbnROYW1lfSBDSEVDSyAoJHtvcHRpb25zLndoZXJlfSlgO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdERUZBVUxUJzpcclxuICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZWZhdWx0IHZhbHVlIG11c3QgYmUgc3BlY2lmZWQgZm9yIERFRkFVTFQgQ09OU1RSQUlOVCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RpYWxlY3QubmFtZSAhPT0gJ21zc3FsJykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZWZhdWx0IGNvbnN0cmFpbnRzIGFyZSBzdXBwb3J0ZWQgb25seSBmb3IgTVNTUUwgZGlhbGVjdC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0cmFpbnROYW1lID0gdGhpcy5xdW90ZUlkZW50aWZpZXIob3B0aW9ucy5uYW1lIHx8IGAke3RhYmxlTmFtZX1fJHtmaWVsZHNTcWxTdHJpbmd9X2RmYCk7XHJcbiAgICAgICAgY29uc3RyYWludFNuaXBwZXQgPSBgQ09OU1RSQUlOVCAke2NvbnN0cmFpbnROYW1lfSBERUZBVUxUICgke3RoaXMuZXNjYXBlKG9wdGlvbnMuZGVmYXVsdFZhbHVlKX0pIEZPUiAke2ZpZWxkc1NxbFswXX1gO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdQUklNQVJZIEtFWSc6XHJcbiAgICAgICAgY29uc3RyYWludE5hbWUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcihvcHRpb25zLm5hbWUgfHwgYCR7dGFibGVOYW1lfV8ke2ZpZWxkc1NxbFN0cmluZ31fcGtgKTtcclxuICAgICAgICBjb25zdHJhaW50U25pcHBldCA9IGBDT05TVFJBSU5UICR7Y29uc3RyYWludE5hbWV9IFBSSU1BUlkgS0VZICgke2ZpZWxkc1NxbFF1b3RlZFN0cmluZ30pYDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnRk9SRUlHTiBLRVknOlxyXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBvcHRpb25zLnJlZmVyZW5jZXM7XHJcbiAgICAgICAgaWYgKCFyZWZlcmVuY2VzIHx8ICFyZWZlcmVuY2VzLnRhYmxlIHx8ICFyZWZlcmVuY2VzLmZpZWxkKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZmVyZW5jZXMgb2JqZWN0IHdpdGggdGFibGUgYW5kIGZpZWxkIG11c3QgYmUgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0cmFpbnROYW1lID0gdGhpcy5xdW90ZUlkZW50aWZpZXIob3B0aW9ucy5uYW1lIHx8IGAke3RhYmxlTmFtZX1fJHtmaWVsZHNTcWxTdHJpbmd9XyR7cmVmZXJlbmNlcy50YWJsZX1fZmtgKTtcclxuICAgICAgICBjb25zdCByZWZlcmVuY2VzU25pcHBldCA9IGAke3RoaXMucXVvdGVUYWJsZShyZWZlcmVuY2VzLnRhYmxlKX0gKCR7dGhpcy5xdW90ZUlkZW50aWZpZXIocmVmZXJlbmNlcy5maWVsZCl9KWA7XHJcbiAgICAgICAgY29uc3RyYWludFNuaXBwZXQgPSBgQ09OU1RSQUlOVCAke2NvbnN0cmFpbnROYW1lfSBgO1xyXG4gICAgICAgIGNvbnN0cmFpbnRTbmlwcGV0ICs9IGBGT1JFSUdOIEtFWSAoJHtmaWVsZHNTcWxRdW90ZWRTdHJpbmd9KSBSRUZFUkVOQ0VTICR7cmVmZXJlbmNlc1NuaXBwZXR9YDtcclxuICAgICAgICBpZiAob3B0aW9ucy5vblVwZGF0ZSkge1xyXG4gICAgICAgICAgY29uc3RyYWludFNuaXBwZXQgKz0gYCBPTiBVUERBVEUgJHtvcHRpb25zLm9uVXBkYXRlLnRvVXBwZXJDYXNlKCl9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMub25EZWxldGUpIHtcclxuICAgICAgICAgIGNvbnN0cmFpbnRTbmlwcGV0ICs9IGAgT04gREVMRVRFICR7b3B0aW9ucy5vbkRlbGV0ZS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYCR7b3B0aW9ucy50eXBlfSBpcyBpbnZhbGlkLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnN0cmFpbnRTbmlwcGV0O1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ29uc3RyYWludFF1ZXJ5KHRhYmxlTmFtZSwgY29uc3RyYWludE5hbWUpIHtcclxuICAgIGlmICh0eXBlb2YgdGFibGVOYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0YWJsZU5hbWUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcnModGFibGVOYW1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhYmxlTmFtZSA9IHRoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgQUxURVIgVEFCTEUgJHt0YWJsZU5hbWV9IERST1AgQ09OU1RSQUlOVCAke3RoaXMucXVvdGVJZGVudGlmaWVycyhjb25zdHJhaW50TmFtZSl9YDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICBRdW90ZSBhbiBvYmplY3QgYmFzZWQgb24gaXRzIHR5cGUuIFRoaXMgaXMgYSBtb3JlIGdlbmVyYWwgdmVyc2lvbiBvZiBxdW90ZUlkZW50aWZpZXJzXHJcbiAgICBTdHJpbmdzOiBzaG91bGQgcHJveHkgdG8gcXVvdGVJZGVudGlmaWVyc1xyXG4gICAgQXJyYXlzOlxyXG4gICAgICAqIEV4cGVjdHMgYXJyYXkgaW4gdGhlIGZvcm06IFs8bW9kZWw+IChvcHRpb25hbCksIDxtb2RlbD4gKG9wdGlvbmFsKSwuLi4gU3RyaW5nLCBTdHJpbmcgKG9wdGlvbmFsKV1cclxuICAgICAgICBFYWNoIDxtb2RlbD4gY2FuIGJlIGEgbW9kZWwsIG9yIGFuIG9iamVjdCB7bW9kZWw6IE1vZGVsLCBhczogU3RyaW5nfSwgbWF0Y2hpbmcgaW5jbHVkZSwgb3IgYW5cclxuICAgICAgICBhc3NvY2lhdGlvbiBvYmplY3QsIG9yIHRoZSBuYW1lIG9mIGFuIGFzc29jaWF0aW9uLlxyXG4gICAgICAqIFplcm8gb3IgbW9yZSBtb2RlbHMgY2FuIGJlIGluY2x1ZGVkIGluIHRoZSBhcnJheSBhbmQgYXJlIHVzZWQgdG8gdHJhY2UgYSBwYXRoIHRocm91Z2ggdGhlIHRyZWUgb2ZcclxuICAgICAgICBpbmNsdWRlZCBuZXN0ZWQgYXNzb2NpYXRpb25zLiBUaGlzIHByb2R1Y2VzIHRoZSBjb3JyZWN0IHRhYmxlIG5hbWUgZm9yIHRoZSBPUkRFUiBCWS9HUk9VUCBCWSBTUUxcclxuICAgICAgICBhbmQgcXVvdGVzIGl0LlxyXG4gICAgICAqIElmIGEgc2luZ2xlIHN0cmluZyBpcyBhcHBlbmRlZCB0byBlbmQgb2YgYXJyYXksIGl0IGlzIHF1b3RlZC5cclxuICAgICAgICBJZiB0d28gc3RyaW5ncyBhcHBlbmRlZCwgdGhlIDFzdCBzdHJpbmcgaXMgcXVvdGVkLCB0aGUgMm5kIHN0cmluZyB1bnF1b3RlZC5cclxuICAgIE9iamVjdHM6XHJcbiAgICAgICogSWYgcmF3IGlzIHNldCwgdGhhdCB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgdmVyYmF0aW0sIHdpdGhvdXQgcXVvdGluZ1xyXG4gICAgICAqIElmIGZuIGlzIHNldCwgdGhlIHN0cmluZyBzaG91bGQgc3RhcnQgd2l0aCB0aGUgdmFsdWUgb2YgZm4sIHN0YXJ0aW5nIHBhcmVuLCBmb2xsb3dlZCBieVxyXG4gICAgICAgIHRoZSB2YWx1ZXMgb2YgY29scyAod2hpY2ggaXMgYXNzdW1lZCB0byBiZSBhbiBhcnJheSksIHF1b3RlZCBhbmQgam9pbmVkIHdpdGggJywgJyxcclxuICAgICAgICB1bmxlc3MgdGhleSBhcmUgdGhlbXNlbHZlcyBvYmplY3RzXHJcbiAgICAgICogSWYgZGlyZWN0aW9uIGlzIHNldCwgc2hvdWxkIGJlIHByZXBlbmRlZFxyXG5cclxuICAgIEN1cnJlbnRseSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBmb3Igb3JkZXJpbmcgLyBncm91cGluZyBjb2x1bW5zIGFuZCBTZXF1ZWxpemUuY29sKCksIGJ1dCBpdCBjb3VsZFxyXG4gICAgcG90ZW50aWFsbHkgYWxzbyBiZSB1c2VkIGZvciBvdGhlciBwbGFjZXMgd2hlcmUgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGNhbGwgU1FMIGZ1bmN0aW9ucyAoZS5nLiBhcyBkZWZhdWx0IHZhbHVlcylcclxuICAgQHByaXZhdGVcclxuICAqL1xyXG4gIHF1b3RlKGNvbGxlY3Rpb24sIHBhcmVudCwgY29ubmVjdG9yKSB7XHJcbiAgICAvLyBpbml0XHJcbiAgICBjb25zdCB2YWxpZE9yZGVyT3B0aW9ucyA9IFtcclxuICAgICAgJ0FTQycsXHJcbiAgICAgICdERVNDJyxcclxuICAgICAgJ0FTQyBOVUxMUyBMQVNUJyxcclxuICAgICAgJ0RFU0MgTlVMTFMgTEFTVCcsXHJcbiAgICAgICdBU0MgTlVMTFMgRklSU1QnLFxyXG4gICAgICAnREVTQyBOVUxMUyBGSVJTVCcsXHJcbiAgICAgICdOVUxMUyBGSVJTVCcsXHJcbiAgICAgICdOVUxMUyBMQVNUJ1xyXG4gICAgXTtcclxuXHJcbiAgICAvLyBkZWZhdWx0XHJcbiAgICBjb25uZWN0b3IgPSBjb25uZWN0b3IgfHwgJy4nO1xyXG5cclxuICAgIC8vIGp1c3QgcXVvdGUgYXMgaWRlbnRpZmllcnMgaWYgc3RyaW5nXHJcbiAgICBpZiAodHlwZW9mIGNvbGxlY3Rpb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnF1b3RlSWRlbnRpZmllcnMoY29sbGVjdGlvbik7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xyXG4gICAgICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIGNvbGxlY3Rpb24gYW5kIG11dGF0ZSBvYmplY3RzIGludG8gYXNzb2NpYXRpb25zXHJcbiAgICAgIGNvbGxlY3Rpb24uZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IGNvbGxlY3Rpb25baW5kZXggLSAxXTtcclxuICAgICAgICBsZXQgcHJldmlvdXNBc3NvY2lhdGlvbjtcclxuICAgICAgICBsZXQgcHJldmlvdXNNb2RlbDtcclxuXHJcbiAgICAgICAgLy8gc2V0IHRoZSBwcmV2aW91cyBhcyB0aGUgcGFyZW50IHdoZW4gcHJldmlvdXMgaXMgdW5kZWZpbmVkIG9yIHRoZSB0YXJnZXQgb2YgdGhlIGFzc29jaWF0aW9uXHJcbiAgICAgICAgaWYgKCFwcmV2aW91cyAmJiBwYXJlbnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgcHJldmlvdXNNb2RlbCA9IHBhcmVudDtcclxuICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzIGluc3RhbmNlb2YgQXNzb2NpYXRpb24pIHtcclxuICAgICAgICAgIHByZXZpb3VzQXNzb2NpYXRpb24gPSBwcmV2aW91cztcclxuICAgICAgICAgIHByZXZpb3VzTW9kZWwgPSBwcmV2aW91cy50YXJnZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiB0aGUgcHJldmlvdXMgaXRlbSBpcyBhIG1vZGVsLCB0aGVuIGF0dGVtcHQgZ2V0dGluZyBhbiBhc3NvY2lhdGlvblxyXG4gICAgICAgIGlmIChwcmV2aW91c01vZGVsICYmIHByZXZpb3VzTW9kZWwucHJvdG90eXBlIGluc3RhbmNlb2YgTW9kZWwpIHtcclxuICAgICAgICAgIGxldCBtb2RlbDtcclxuICAgICAgICAgIGxldCBhcztcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdmdW5jdGlvbicgJiYgaXRlbS5wcm90b3R5cGUgaW5zdGFuY2VvZiBNb2RlbCkge1xyXG4gICAgICAgICAgICAvLyBzZXRcclxuICAgICAgICAgICAgbW9kZWwgPSBpdGVtO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QoaXRlbSkgJiYgaXRlbS5tb2RlbCAmJiBpdGVtLm1vZGVsLnByb3RvdHlwZSBpbnN0YW5jZW9mIE1vZGVsKSB7XHJcbiAgICAgICAgICAgIC8vIHNldFxyXG4gICAgICAgICAgICBtb2RlbCA9IGl0ZW0ubW9kZWw7XHJcbiAgICAgICAgICAgIGFzID0gaXRlbS5hcztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobW9kZWwpIHtcclxuICAgICAgICAgICAgLy8gc2V0IHRoZSBhcyB0byBlaXRoZXIgdGhlIHRocm91Z2ggbmFtZSBvciB0aGUgbW9kZWwgbmFtZVxyXG4gICAgICAgICAgICBpZiAoIWFzICYmIHByZXZpb3VzQXNzb2NpYXRpb24gJiYgcHJldmlvdXNBc3NvY2lhdGlvbiBpbnN0YW5jZW9mIEFzc29jaWF0aW9uICYmIHByZXZpb3VzQXNzb2NpYXRpb24udGhyb3VnaCAmJiBwcmV2aW91c0Fzc29jaWF0aW9uLnRocm91Z2gubW9kZWwgPT09IG1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgLy8gZ2V0IGZyb20gcHJldmlvdXMgYXNzb2NpYXRpb25cclxuICAgICAgICAgICAgICBpdGVtID0gbmV3IEFzc29jaWF0aW9uKHByZXZpb3VzTW9kZWwsIG1vZGVsLCB7XHJcbiAgICAgICAgICAgICAgICBhczogbW9kZWwubmFtZVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIGdldCBhc3NvY2lhdGlvbiBmcm9tIHByZXZpb3VzIG1vZGVsXHJcbiAgICAgICAgICAgICAgaXRlbSA9IHByZXZpb3VzTW9kZWwuZ2V0QXNzb2NpYXRpb25Gb3JBbGlhcyhtb2RlbCwgYXMpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBhdHRlbXB0IHRvIHVzZSB0aGUgbW9kZWwgbmFtZSBpZiB0aGUgaXRlbSBpcyBzdGlsbCBudWxsXHJcbiAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtID0gcHJldmlvdXNNb2RlbC5nZXRBc3NvY2lhdGlvbkZvckFsaWFzKG1vZGVsLCBtb2RlbC5uYW1lKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFzc29jaWF0aW9uXHJcbiAgICAgICAgICAgIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBBc3NvY2lhdGlvbikpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ1VuYWJsZSB0byBmaW5kIGEgdmFsaWQgYXNzb2NpYXRpb24gZm9yIG1vZGVsLCBcXCclc1xcJycsIG1vZGVsLm5hbWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgLy8gZ2V0IG9yZGVyIGluZGV4XHJcbiAgICAgICAgICBjb25zdCBvcmRlckluZGV4ID0gdmFsaWRPcmRlck9wdGlvbnMuaW5kZXhPZihpdGVtLnRvVXBwZXJDYXNlKCkpO1xyXG5cclxuICAgICAgICAgIC8vIHNlZSBpZiB0aGlzIGlzIGFuIG9yZGVyXHJcbiAgICAgICAgICBpZiAoaW5kZXggPiAwICYmIG9yZGVySW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnNlcXVlbGl6ZS5saXRlcmFsKGAgJHt2YWxpZE9yZGVyT3B0aW9uc1tvcmRlckluZGV4XX1gKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNNb2RlbCAmJiBwcmV2aW91c01vZGVsLnByb3RvdHlwZSBpbnN0YW5jZW9mIE1vZGVsKSB7XHJcbiAgICAgICAgICAgIC8vIG9ubHkgZ28gZG93biB0aGlzIHBhdGggaWYgd2UgaGF2ZSBwcmVpdm91cyBtb2RlbCBhbmQgY2hlY2sgb25seSBvbmNlXHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c01vZGVsLmFzc29jaWF0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHByZXZpb3VzTW9kZWwuYXNzb2NpYXRpb25zW2l0ZW1dKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29udmVydCB0aGUgaXRlbSB0byBhbiBhc3NvY2lhdGlvblxyXG4gICAgICAgICAgICAgIGl0ZW0gPSBwcmV2aW91c01vZGVsLmFzc29jaWF0aW9uc1tpdGVtXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c01vZGVsLnJhd0F0dHJpYnV0ZXMgIT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c01vZGVsLnJhd0F0dHJpYnV0ZXNbaXRlbV0gJiYgaXRlbSAhPT0gcHJldmlvdXNNb2RlbC5yYXdBdHRyaWJ1dGVzW2l0ZW1dLmZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29udmVydCB0aGUgaXRlbSBhdHRyaWJ1dGUgZnJvbSBpdHMgYWxpYXNcclxuICAgICAgICAgICAgICBpdGVtID0gcHJldmlvdXNNb2RlbC5yYXdBdHRyaWJ1dGVzW2l0ZW1dLmZpZWxkO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIGl0ZW0uaW5jbHVkZXMoJy4nKVxyXG4gICAgICAgICAgICAgICYmIHByZXZpb3VzTW9kZWwucmF3QXR0cmlidXRlcyAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1TcGxpdCA9IGl0ZW0uc3BsaXQoJy4nKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHByZXZpb3VzTW9kZWwucmF3QXR0cmlidXRlc1tpdGVtU3BsaXRbMF1dLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuSlNPTikge1xyXG4gICAgICAgICAgICAgICAgLy8ganVzdCBxdW90ZSBpZGVudGlmaWVycyBmb3Igbm93XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5xdW90ZUlkZW50aWZpZXJzKGAke3ByZXZpb3VzTW9kZWwubmFtZX0uJHtwcmV2aW91c01vZGVsLnJhd0F0dHJpYnV0ZXNbaXRlbVNwbGl0WzBdXS5maWVsZH1gKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBnZXQgcGF0aFxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGl0ZW1TcGxpdC5zbGljZSgxKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBleHRyYWN0IHBhdGhcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmpzb25QYXRoRXh0cmFjdGlvblF1ZXJ5KGlkZW50aWZpZXIsIHBhdGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGxpdGVyYWwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGFwcGVuZCB0aGUgbW9kZWwgbmFtZSB3aGVuIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMuc2VxdWVsaXplLmxpdGVyYWwoaXRlbSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2xsZWN0aW9uW2luZGV4XSA9IGl0ZW07XHJcbiAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgLy8gbG9vcCB0aHJvdWdoIGFycmF5LCBhZGRpbmcgdGFibGUgbmFtZXMgb2YgbW9kZWxzIHRvIHF1b3RlZFxyXG4gICAgICBjb25zdCBjb2xsZWN0aW9uTGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XHJcbiAgICAgIGNvbnN0IHRhYmxlTmFtZXMgPSBbXTtcclxuICAgICAgbGV0IGl0ZW07XHJcbiAgICAgIGxldCBpID0gMDtcclxuXHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xsZWN0aW9uTGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgaXRlbSA9IGNvbGxlY3Rpb25baV07XHJcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyB8fCBpdGVtLl9tb2RlbEF0dHJpYnV0ZSB8fCBpdGVtIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBBc3NvY2lhdGlvbikge1xyXG4gICAgICAgICAgdGFibGVOYW1lc1tpXSA9IGl0ZW0uYXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzdGFydCBidWlsZGluZyBzcWxcclxuICAgICAgbGV0IHNxbCA9ICcnO1xyXG5cclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgc3FsICs9IGAke3RoaXMucXVvdGVJZGVudGlmaWVyKHRhYmxlTmFtZXMuam9pbihjb25uZWN0b3IpKX0uYDtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29sbGVjdGlvblswXSA9PT0gJ3N0cmluZycgJiYgcGFyZW50KSB7XHJcbiAgICAgICAgc3FsICs9IGAke3RoaXMucXVvdGVJZGVudGlmaWVyKHBhcmVudC5uYW1lKX0uYDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gbG9vcCB0aHJvdWdoIGV2ZXJ5dGhpbmcgcGFzdCBpIGFuZCBhcHBlbmQgdG8gdGhlIHNxbFxyXG4gICAgICBjb2xsZWN0aW9uLnNsaWNlKGkpLmZvckVhY2goY29sbGVjdGlvbkl0ZW0gPT4ge1xyXG4gICAgICAgIHNxbCArPSB0aGlzLnF1b3RlKGNvbGxlY3Rpb25JdGVtLCBwYXJlbnQsIGNvbm5lY3Rvcik7XHJcbiAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgcmV0dXJuIHNxbDtcclxuICAgIH1cclxuICAgIGlmIChjb2xsZWN0aW9uLl9tb2RlbEF0dHJpYnV0ZSkge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy5xdW90ZVRhYmxlKGNvbGxlY3Rpb24uTW9kZWwubmFtZSl9LiR7dGhpcy5xdW90ZUlkZW50aWZpZXIoY29sbGVjdGlvbi5maWVsZE5hbWUpfWA7XHJcbiAgICB9XHJcbiAgICBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXF1ZWxpemVNZXRob2QoY29sbGVjdGlvbik7XHJcbiAgICB9XHJcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGNvbGxlY3Rpb24pICYmIGNvbGxlY3Rpb24ucmF3KSB7XHJcbiAgICAgIC8vIHNpbXBsZSBvYmplY3RzIHdpdGggcmF3IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHtyYXc6IFwiLi4uXCJ9YCBzeW50YXggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIFVzZSBgc2VxdWVsaXplLmxpdGVyYWxgIGluc3RlYWQuJyk7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3RydWN0dXJlIHBhc3NlZCB0byBvcmRlciAvIGdyb3VwOiAke3V0aWwuaW5zcGVjdChjb2xsZWN0aW9uKX1gKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNwbGl0IGEgbGlzdCBvZiBpZGVudGlmaWVycyBieSBcIi5cIiBhbmQgcXVvdGUgZWFjaCBwYXJ0XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpZmllclxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgcXVvdGVJZGVudGlmaWVyKGlkZW50aWZpZXIsIGZvcmNlKSB7XHJcbiAgICByZXR1cm4gUXVvdGVIZWxwZXIucXVvdGVJZGVudGlmaWVyKHRoaXMuZGlhbGVjdCwgaWRlbnRpZmllciwge1xyXG4gICAgICBmb3JjZSxcclxuICAgICAgcXVvdGVJZGVudGlmaWVyczogdGhpcy5vcHRpb25zLnF1b3RlSWRlbnRpZmllcnNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcXVvdGVJZGVudGlmaWVycyhpZGVudGlmaWVycykge1xyXG4gICAgaWYgKGlkZW50aWZpZXJzLmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgaWRlbnRpZmllcnMgPSBpZGVudGlmaWVycy5zcGxpdCgnLicpO1xyXG5cclxuICAgICAgY29uc3QgaGVhZCA9IGlkZW50aWZpZXJzLnNsaWNlKDAsIGlkZW50aWZpZXJzLmxlbmd0aCAtIDEpLmpvaW4oJy0+Jyk7XHJcbiAgICAgIGNvbnN0IHRhaWwgPSBpZGVudGlmaWVyc1tpZGVudGlmaWVycy5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgIHJldHVybiBgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihoZWFkKX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcih0YWlsKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnF1b3RlSWRlbnRpZmllcihpZGVudGlmaWVycyk7XHJcbiAgfVxyXG5cclxuICBxdW90ZUF0dHJpYnV0ZShhdHRyaWJ1dGUsIG1vZGVsKSB7XHJcbiAgICBpZiAobW9kZWwgJiYgYXR0cmlidXRlIGluIG1vZGVsLnJhd0F0dHJpYnV0ZXMpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucXVvdGVJZGVudGlmaWVyKGF0dHJpYnV0ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5xdW90ZUlkZW50aWZpZXJzKGF0dHJpYnV0ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBRdW90ZSB0YWJsZSBuYW1lIHdpdGggb3B0aW9uYWwgYWxpYXMgYW5kIHNjaGVtYSBhdHRyaWJ1dGlvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSAgcGFyYW0gdGFibGUgc3RyaW5nIG9yIG9iamVjdFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IGFsaWFzIGFsaWFzIG5hbWVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgcXVvdGVUYWJsZShwYXJhbSwgYWxpYXMpIHtcclxuICAgIGxldCB0YWJsZSA9ICcnO1xyXG5cclxuICAgIGlmIChhbGlhcyA9PT0gdHJ1ZSkge1xyXG4gICAgICBhbGlhcyA9IHBhcmFtLmFzIHx8IHBhcmFtLm5hbWUgfHwgcGFyYW07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKF8uaXNPYmplY3QocGFyYW0pKSB7XHJcbiAgICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnNjaGVtYXMpIHtcclxuICAgICAgICBpZiAocGFyYW0uc2NoZW1hKSB7XHJcbiAgICAgICAgICB0YWJsZSArPSBgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihwYXJhbS5zY2hlbWEpfS5gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFibGUgKz0gdGhpcy5xdW90ZUlkZW50aWZpZXIocGFyYW0udGFibGVOYW1lKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAocGFyYW0uc2NoZW1hKSB7XHJcbiAgICAgICAgICB0YWJsZSArPSBwYXJhbS5zY2hlbWEgKyAocGFyYW0uZGVsaW1pdGVyIHx8ICcuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YWJsZSArPSBwYXJhbS50YWJsZU5hbWU7XHJcbiAgICAgICAgdGFibGUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcih0YWJsZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhYmxlID0gdGhpcy5xdW90ZUlkZW50aWZpZXIocGFyYW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbGlhcykge1xyXG4gICAgICB0YWJsZSArPSBgIEFTICR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYWxpYXMpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhYmxlO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIEVzY2FwZSBhIHZhbHVlIChlLmcuIGEgc3RyaW5nLCBudW1iZXIgb3IgZGF0ZSlcclxuICAgIEBwcml2YXRlXHJcbiAgKi9cclxuICBlc2NhcGUodmFsdWUsIGZpZWxkLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXF1ZWxpemVNZXRob2QodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmaWVsZCAmJiBmaWVsZC50eXBlKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZSh2YWx1ZSwgZmllbGQsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQudHlwZS5zdHJpbmdpZnkpIHtcclxuICAgICAgICAgIC8vIFVzZXJzIHNob3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZXNlIGFyZ3MgLSBqdXN0IGdpdmUgdGhlbSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBzaW5nbGUgYXJnXHJcbiAgICAgICAgICBjb25zdCBzaW1wbGVFc2NhcGUgPSBlc2NWYWwgPT4gU3FsU3RyaW5nLmVzY2FwZShlc2NWYWwsIHRoaXMub3B0aW9ucy50aW1lem9uZSwgdGhpcy5kaWFsZWN0KTtcclxuXHJcbiAgICAgICAgICB2YWx1ZSA9IGZpZWxkLnR5cGUuc3RyaW5naWZ5KHZhbHVlLCB7IGVzY2FwZTogc2ltcGxlRXNjYXBlLCBmaWVsZCwgdGltZXpvbmU6IHRoaXMub3B0aW9ucy50aW1lem9uZSwgb3BlcmF0aW9uOiBvcHRpb25zLm9wZXJhdGlvbiB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoZmllbGQudHlwZS5lc2NhcGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIC8vIFRoZSBkYXRhLXR5cGUgYWxyZWFkeSBkaWQgdGhlIHJlcXVpcmVkIGVzY2FwaW5nXHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gU3FsU3RyaW5nLmVzY2FwZSh2YWx1ZSwgdGhpcy5vcHRpb25zLnRpbWV6b25lLCB0aGlzLmRpYWxlY3QpO1xyXG4gIH1cclxuXHJcbiAgYmluZFBhcmFtKGJpbmQpIHtcclxuICAgIHJldHVybiB2YWx1ZSA9PiB7XHJcbiAgICAgIGJpbmQucHVzaCh2YWx1ZSk7XHJcbiAgICAgIHJldHVybiBgJCR7YmluZC5sZW5ndGh9YDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgUmV0dXJucyBhIGJpbmQgcGFyYW1ldGVyIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFsdWUgKGUuZy4gYSBzdHJpbmcsIG51bWJlciBvciBkYXRlKVxyXG4gICAgQHByaXZhdGVcclxuICAqL1xyXG4gIGZvcm1hdCh2YWx1ZSwgZmllbGQsIG9wdGlvbnMsIGJpbmRQYXJhbSkge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFzcyBTZXF1ZWxpemVNZXRob2QgYXMgYSBiaW5kIHBhcmFtZXRlciAtIHVzZSBlc2NhcGUgaW5zdGVhZCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmaWVsZCAmJiBmaWVsZC50eXBlKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZSh2YWx1ZSwgZmllbGQsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQudHlwZS5iaW5kUGFyYW0pIHtcclxuICAgICAgICAgIHJldHVybiBmaWVsZC50eXBlLmJpbmRQYXJhbSh2YWx1ZSwgeyBlc2NhcGU6IF8uaWRlbnRpdHksIGZpZWxkLCB0aW1lem9uZTogdGhpcy5vcHRpb25zLnRpbWV6b25lLCBvcGVyYXRpb246IG9wdGlvbnMub3BlcmF0aW9uLCBiaW5kUGFyYW0gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGJpbmRQYXJhbSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgVmFsaWRhdGUgYSB2YWx1ZSBhZ2FpbnN0IGEgZmllbGQgc3BlY2lmaWNhdGlvblxyXG4gICAgQHByaXZhdGVcclxuICAqL1xyXG4gIHZhbGlkYXRlKHZhbHVlLCBmaWVsZCwgb3B0aW9ucykge1xyXG4gICAgaWYgKHRoaXMudHlwZVZhbGlkYXRpb24gJiYgZmllbGQudHlwZS52YWxpZGF0ZSAmJiB2YWx1ZSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChvcHRpb25zLmlzTGlzdCAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpZWxkLnR5cGUudmFsaWRhdGUoaXRlbSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZpZWxkLnR5cGUudmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBzZXF1ZWxpemVFcnJvci5WYWxpZGF0aW9uRXJyb3IpIHtcclxuICAgICAgICAgIGVycm9yLmVycm9ycy5wdXNoKG5ldyBzZXF1ZWxpemVFcnJvci5WYWxpZGF0aW9uRXJyb3JJdGVtKFxyXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlLFxyXG4gICAgICAgICAgICAnVmFsaWRhdGlvbiBlcnJvcicsXHJcbiAgICAgICAgICAgIGZpZWxkLmZpZWxkTmFtZSxcclxuICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIGAke2ZpZWxkLnR5cGUua2V5fSB2YWxpZGF0b3JgXHJcbiAgICAgICAgICApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0lkZW50aWZpZXJRdW90ZWQoaWRlbnRpZmllcikge1xyXG4gICAgcmV0dXJuIFF1b3RlSGVscGVyLmlzSWRlbnRpZmllclF1b3RlZChpZGVudGlmaWVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyBhbiBTUUwgcXVlcnkgdGhhdCBleHRyYWN0IEpTT04gcHJvcGVydHkgb2YgZ2l2ZW4gcGF0aC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSAgIHtzdHJpbmd9ICAgICAgICAgICAgICAgY29sdW1uICBUaGUgSlNPTiBjb2x1bW5cclxuICAgKiBAcGFyYW0gICB7c3RyaW5nfEFycmF5PHN0cmluZz59IFtwYXRoXSAgVGhlIHBhdGggdG8gZXh0cmFjdCAob3B0aW9uYWwpXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgIFRoZSBnZW5lcmF0ZWQgc3FsIHF1ZXJ5XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBqc29uUGF0aEV4dHJhY3Rpb25RdWVyeShjb2x1bW4sIHBhdGgpIHtcclxuICAgIGxldCBwYXRocyA9IF8udG9QYXRoKHBhdGgpO1xyXG4gICAgbGV0IHBhdGhTdHI7XHJcbiAgICBjb25zdCBxdW90ZWRDb2x1bW4gPSB0aGlzLmlzSWRlbnRpZmllclF1b3RlZChjb2x1bW4pXHJcbiAgICAgID8gY29sdW1uXHJcbiAgICAgIDogdGhpcy5xdW90ZUlkZW50aWZpZXIoY29sdW1uKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuZGlhbGVjdCkge1xyXG4gICAgICBjYXNlICdteXNxbCc6XHJcbiAgICAgIGNhc2UgJ21hcmlhZGInOlxyXG4gICAgICBjYXNlICdzcWxpdGUnOlxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE5vbiBkaWdpdCBzdWIgcGF0aHMgbmVlZCB0byBiZSBxdW90ZWQgYXMgRUNNQVNjcmlwdCBpZGVudGlmaWVyc1xyXG4gICAgICAgICAqIGh0dHBzOi8vYnVncy5teXNxbC5jb20vYnVnLnBocD9pZD04MTg5NlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICh0aGlzLmRpYWxlY3QgPT09ICdteXNxbCcpIHtcclxuICAgICAgICAgIHBhdGhzID0gcGF0aHMubWFwKHN1YlBhdGggPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gL1xcRC8udGVzdChzdWJQYXRoKVxyXG4gICAgICAgICAgICAgID8gVXRpbHMuYWRkVGlja3Moc3ViUGF0aCwgJ1wiJylcclxuICAgICAgICAgICAgICA6IHN1YlBhdGg7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBhdGhTdHIgPSB0aGlzLmVzY2FwZShbJyQnXVxyXG4gICAgICAgICAgLmNvbmNhdChwYXRocylcclxuICAgICAgICAgIC5qb2luKCcuJylcclxuICAgICAgICAgIC5yZXBsYWNlKC9cXC4oXFxkKykoPzooPz1cXC4pfCQpL2csIChfXywgZGlnaXQpID0+IGBbJHtkaWdpdH1dYCkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kaWFsZWN0ID09PSAnc3FsaXRlJykge1xyXG4gICAgICAgICAgcmV0dXJuIGBqc29uX2V4dHJhY3QoJHtxdW90ZWRDb2x1bW59LCR7cGF0aFN0cn0pYDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBganNvbl91bnF1b3RlKGpzb25fZXh0cmFjdCgke3F1b3RlZENvbHVtbn0sJHtwYXRoU3RyfSkpYDtcclxuXHJcbiAgICAgIGNhc2UgJ3Bvc3RncmVzJzpcclxuICAgICAgICBwYXRoU3RyID0gdGhpcy5lc2NhcGUoYHske3BhdGhzLmpvaW4oJywnKX19YCk7XHJcbiAgICAgICAgcmV0dXJuIGAoJHtxdW90ZWRDb2x1bW59Iz4+JHtwYXRoU3RyfSlgO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkICR7dGhpcy5kaWFsZWN0fSBmb3IgSlNPTiBvcGVyYXRpb25zYCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgUmV0dXJucyBhIHF1ZXJ5IGZvciBzZWxlY3RpbmcgZWxlbWVudHMgaW4gdGhlIHRhYmxlIDx0YWJsZU5hbWU+LlxyXG4gICAgT3B0aW9uczpcclxuICAgICAgLSBhdHRyaWJ1dGVzIC0+IEFuIGFycmF5IG9mIGF0dHJpYnV0ZXMgKGUuZy4gWyduYW1lJywgJ2JpcnRoZGF5J10pLiBEZWZhdWx0OiAqXHJcbiAgICAgIC0gd2hlcmUgLT4gQSBoYXNoIHdpdGggY29uZGl0aW9ucyAoZS5nLiB7bmFtZTogJ2Zvbyd9KVxyXG4gICAgICAgICAgICAgICAgIE9SIGFuIElEIGFzIGludGVnZXJcclxuICAgICAgLSBvcmRlciAtPiBlLmcuICdpZCBERVNDJ1xyXG4gICAgICAtIGdyb3VwXHJcbiAgICAgIC0gbGltaXQgLT4gVGhlIG1heGltdW0gY291bnQgeW91IHdhbnQgdG8gZ2V0LlxyXG4gICAgICAtIG9mZnNldCAtPiBBbiBvZmZzZXQgdmFsdWUgdG8gc3RhcnQgZnJvbS4gT25seSB1c2VhYmxlIHdpdGggbGltaXQhXHJcbiAgIEBwcml2YXRlXHJcbiAgKi9cclxuICBzZWxlY3RRdWVyeSh0YWJsZU5hbWUsIG9wdGlvbnMsIG1vZGVsKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIGNvbnN0IGxpbWl0ID0gb3B0aW9ucy5saW1pdDtcclxuICAgIGNvbnN0IG1haW5RdWVyeUl0ZW1zID0gW107XHJcbiAgICBjb25zdCBzdWJRdWVyeUl0ZW1zID0gW107XHJcbiAgICBjb25zdCBzdWJRdWVyeSA9IG9wdGlvbnMuc3ViUXVlcnkgPT09IHVuZGVmaW5lZCA/IGxpbWl0ICYmIG9wdGlvbnMuaGFzTXVsdGlBc3NvY2lhdGlvbiA6IG9wdGlvbnMuc3ViUXVlcnk7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xyXG4gICAgICBtYWluOiBvcHRpb25zLmF0dHJpYnV0ZXMgJiYgb3B0aW9ucy5hdHRyaWJ1dGVzLnNsaWNlKCksXHJcbiAgICAgIHN1YlF1ZXJ5OiBudWxsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgbWFpblRhYmxlID0ge1xyXG4gICAgICBuYW1lOiB0YWJsZU5hbWUsXHJcbiAgICAgIHF1b3RlZE5hbWU6IG51bGwsXHJcbiAgICAgIGFzOiBudWxsLFxyXG4gICAgICBtb2RlbFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHRvcExldmVsSW5mbyA9IHtcclxuICAgICAgbmFtZXM6IG1haW5UYWJsZSxcclxuICAgICAgb3B0aW9ucyxcclxuICAgICAgc3ViUXVlcnlcclxuICAgIH07XHJcbiAgICBsZXQgbWFpbkpvaW5RdWVyaWVzID0gW107XHJcbiAgICBsZXQgc3ViSm9pblF1ZXJpZXMgPSBbXTtcclxuICAgIGxldCBxdWVyeTtcclxuXHJcbiAgICAvLyBBbGlhc2VzIGNhbiBiZSBwYXNzZWQgdGhyb3VnaCBzdWJxdWVyaWVzIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZW1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubWluaWZ5QWxpYXNlcyAmJiAhb3B0aW9ucy5hbGlhc2VzTWFwcGluZykge1xyXG4gICAgICBvcHRpb25zLmFsaWFzZXNNYXBwaW5nID0gbmV3IE1hcCgpO1xyXG4gICAgICBvcHRpb25zLmFsaWFzZXNCeVRhYmxlID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVzb2x2ZSB0YWJsZSBuYW1lIG9wdGlvbnNcclxuICAgIGlmIChvcHRpb25zLnRhYmxlQXMpIHtcclxuICAgICAgbWFpblRhYmxlLmFzID0gdGhpcy5xdW90ZUlkZW50aWZpZXIob3B0aW9ucy50YWJsZUFzKTtcclxuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWFpblRhYmxlLm5hbWUpICYmIG1haW5UYWJsZS5tb2RlbCkge1xyXG4gICAgICBtYWluVGFibGUuYXMgPSB0aGlzLnF1b3RlSWRlbnRpZmllcihtYWluVGFibGUubW9kZWwubmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFpblRhYmxlLnF1b3RlZE5hbWUgPSAhQXJyYXkuaXNBcnJheShtYWluVGFibGUubmFtZSkgPyB0aGlzLnF1b3RlVGFibGUobWFpblRhYmxlLm5hbWUpIDogdGFibGVOYW1lLm1hcCh0ID0+IHtcclxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodCkgPyB0aGlzLnF1b3RlVGFibGUodFswXSwgdFsxXSkgOiB0aGlzLnF1b3RlVGFibGUodCwgdHJ1ZSk7XHJcbiAgICB9KS5qb2luKCcsICcpO1xyXG5cclxuICAgIGlmIChzdWJRdWVyeSAmJiBhdHRyaWJ1dGVzLm1haW4pIHtcclxuICAgICAgZm9yIChjb25zdCBrZXlBdHQgb2YgbWFpblRhYmxlLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgbWFpbkF0dHJpYnV0ZXMgY29udGFpbiB0aGUgcHJpbWFyeSBrZXkgb2YgdGhlIG1vZGVsIGVpdGhlciBhcyBhIGZpZWxkIG9yIGFuIGFsaWFzZWQgZmllbGRcclxuICAgICAgICBpZiAoIWF0dHJpYnV0ZXMubWFpbi5zb21lKGF0dHIgPT4ga2V5QXR0ID09PSBhdHRyIHx8IGtleUF0dCA9PT0gYXR0clswXSB8fCBrZXlBdHQgPT09IGF0dHJbMV0pKSB7XHJcbiAgICAgICAgICBhdHRyaWJ1dGVzLm1haW4ucHVzaChtYWluVGFibGUubW9kZWwucmF3QXR0cmlidXRlc1trZXlBdHRdLmZpZWxkID8gW2tleUF0dCwgbWFpblRhYmxlLm1vZGVsLnJhd0F0dHJpYnV0ZXNba2V5QXR0XS5maWVsZF0gOiBrZXlBdHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGF0dHJpYnV0ZXMubWFpbiA9IHRoaXMuZXNjYXBlQXR0cmlidXRlcyhhdHRyaWJ1dGVzLm1haW4sIG9wdGlvbnMsIG1haW5UYWJsZS5hcyk7XHJcbiAgICBhdHRyaWJ1dGVzLm1haW4gPSBhdHRyaWJ1dGVzLm1haW4gfHwgKG9wdGlvbnMuaW5jbHVkZSA/IFtgJHttYWluVGFibGUuYXN9LipgXSA6IFsnKiddKTtcclxuXHJcbiAgICAvLyBJZiBzdWJxdWVyeSwgd2UgYWRkIHRoZSBtYWluQXR0cmlidXRlcyB0byB0aGUgc3ViUXVlcnkgYW5kIHNldCB0aGUgbWFpbkF0dHJpYnV0ZXMgdG8gc2VsZWN0ICogZnJvbSBzdWJxdWVyeVxyXG4gICAgaWYgKHN1YlF1ZXJ5IHx8IG9wdGlvbnMuZ3JvdXBlZExpbWl0KSB7XHJcbiAgICAgIC8vIFdlIG5lZWQgcHJpbWFyeSBrZXlzXHJcbiAgICAgIGF0dHJpYnV0ZXMuc3ViUXVlcnkgPSBhdHRyaWJ1dGVzLm1haW47XHJcbiAgICAgIGF0dHJpYnV0ZXMubWFpbiA9IFtgJHttYWluVGFibGUuYXMgfHwgbWFpblRhYmxlLnF1b3RlZE5hbWV9LipgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlKSB7XHJcbiAgICAgIGZvciAoY29uc3QgaW5jbHVkZSBvZiBvcHRpb25zLmluY2x1ZGUpIHtcclxuICAgICAgICBpZiAoaW5jbHVkZS5zZXBhcmF0ZSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGpvaW5RdWVyaWVzID0gdGhpcy5nZW5lcmF0ZUluY2x1ZGUoaW5jbHVkZSwgeyBleHRlcm5hbEFzOiBtYWluVGFibGUuYXMsIGludGVybmFsQXM6IG1haW5UYWJsZS5hcyB9LCB0b3BMZXZlbEluZm8pO1xyXG5cclxuICAgICAgICBzdWJKb2luUXVlcmllcyA9IHN1YkpvaW5RdWVyaWVzLmNvbmNhdChqb2luUXVlcmllcy5zdWJRdWVyeSk7XHJcbiAgICAgICAgbWFpbkpvaW5RdWVyaWVzID0gbWFpbkpvaW5RdWVyaWVzLmNvbmNhdChqb2luUXVlcmllcy5tYWluUXVlcnkpO1xyXG5cclxuICAgICAgICBpZiAoam9pblF1ZXJpZXMuYXR0cmlidXRlcy5tYWluLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZXMubWFpbiA9IF8udW5pcShhdHRyaWJ1dGVzLm1haW4uY29uY2F0KGpvaW5RdWVyaWVzLmF0dHJpYnV0ZXMubWFpbikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoam9pblF1ZXJpZXMuYXR0cmlidXRlcy5zdWJRdWVyeS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBhdHRyaWJ1dGVzLnN1YlF1ZXJ5ID0gXy51bmlxKGF0dHJpYnV0ZXMuc3ViUXVlcnkuY29uY2F0KGpvaW5RdWVyaWVzLmF0dHJpYnV0ZXMuc3ViUXVlcnkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3ViUXVlcnkpIHtcclxuICAgICAgc3ViUXVlcnlJdGVtcy5wdXNoKHRoaXMuc2VsZWN0RnJvbVRhYmxlRnJhZ21lbnQob3B0aW9ucywgbWFpblRhYmxlLm1vZGVsLCBhdHRyaWJ1dGVzLnN1YlF1ZXJ5LCBtYWluVGFibGUucXVvdGVkTmFtZSwgbWFpblRhYmxlLmFzKSk7XHJcbiAgICAgIHN1YlF1ZXJ5SXRlbXMucHVzaChzdWJKb2luUXVlcmllcy5qb2luKCcnKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAob3B0aW9ucy5ncm91cGVkTGltaXQpIHtcclxuICAgICAgICBpZiAoIW1haW5UYWJsZS5hcykge1xyXG4gICAgICAgICAgbWFpblRhYmxlLmFzID0gbWFpblRhYmxlLnF1b3RlZE5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdoZXJlID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy53aGVyZSk7XHJcbiAgICAgICAgbGV0IGdyb3VwZWRMaW1pdE9yZGVyLFxyXG4gICAgICAgICAgd2hlcmVLZXksXHJcbiAgICAgICAgICBpbmNsdWRlLFxyXG4gICAgICAgICAgZ3JvdXBlZFRhYmxlTmFtZSA9IG1haW5UYWJsZS5hcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmdyb3VwZWRMaW1pdC5vbiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIHdoZXJlS2V5ID0gb3B0aW9ucy5ncm91cGVkTGltaXQub247XHJcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmdyb3VwZWRMaW1pdC5vbiBpbnN0YW5jZW9mIEhhc01hbnkpIHtcclxuICAgICAgICAgIHdoZXJlS2V5ID0gb3B0aW9ucy5ncm91cGVkTGltaXQub24uZm9yZWlnbktleUZpZWxkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZ3JvdXBlZExpbWl0Lm9uIGluc3RhbmNlb2YgQmVsb25nc1RvTWFueSkge1xyXG4gICAgICAgICAgLy8gQlRNIGluY2x1ZGVzIG5lZWRzIHRvIGpvaW4gdGhlIHRocm91Z2ggdGFibGUgb24gdG8gY2hlY2sgSURcclxuICAgICAgICAgIGdyb3VwZWRUYWJsZU5hbWUgPSBvcHRpb25zLmdyb3VwZWRMaW1pdC5vbi5tYW55RnJvbVNvdXJjZS5hcztcclxuICAgICAgICAgIGNvbnN0IGdyb3VwZWRMaW1pdE9wdGlvbnMgPSBNb2RlbC5fdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzKHtcclxuICAgICAgICAgICAgaW5jbHVkZTogW3tcclxuICAgICAgICAgICAgICBhc3NvY2lhdGlvbjogb3B0aW9ucy5ncm91cGVkTGltaXQub24ubWFueUZyb21Tb3VyY2UsXHJcbiAgICAgICAgICAgICAgZHVwbGljYXRpbmc6IGZhbHNlLCAvLyBUaGUgVU5JT04nZWQgcXVlcnkgbWF5IGNvbnRhaW4gZHVwbGljYXRlcywgYnV0IGVhY2ggc3ViLXF1ZXJ5IGNhbm5vdFxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHdoZXJlOiBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgICAgIFtPcC5wbGFjZWhvbGRlcl06IHRydWVcclxuICAgICAgICAgICAgICB9LCBvcHRpb25zLmdyb3VwZWRMaW1pdC50aHJvdWdoICYmIG9wdGlvbnMuZ3JvdXBlZExpbWl0LnRocm91Z2gud2hlcmUpXHJcbiAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICBtb2RlbFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gTWFrZSBzdXJlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgam9pbiB0YWJsZSBhcmUgbWFwcGVkIGJhY2sgdG8gbW9kZWxzXHJcbiAgICAgICAgICBvcHRpb25zLmhhc0pvaW4gPSB0cnVlO1xyXG4gICAgICAgICAgb3B0aW9ucy5oYXNNdWx0aUFzc29jaWF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIG9wdGlvbnMuaW5jbHVkZU1hcCA9IE9iamVjdC5hc3NpZ24oZ3JvdXBlZExpbWl0T3B0aW9ucy5pbmNsdWRlTWFwLCBvcHRpb25zLmluY2x1ZGVNYXApO1xyXG4gICAgICAgICAgb3B0aW9ucy5pbmNsdWRlTmFtZXMgPSBncm91cGVkTGltaXRPcHRpb25zLmluY2x1ZGVOYW1lcy5jb25jYXQob3B0aW9ucy5pbmNsdWRlTmFtZXMgfHwgW10pO1xyXG4gICAgICAgICAgaW5jbHVkZSA9IGdyb3VwZWRMaW1pdE9wdGlvbnMuaW5jbHVkZTtcclxuXHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLm9yZGVyKSkge1xyXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgb3JkZXIgYnkgYXR0cmlidXRlcyBhcmUgYXZhaWxhYmxlIHRvIHRoZSBwYXJlbnQgcXVlcnlcclxuICAgICAgICAgICAgb3B0aW9ucy5vcmRlci5mb3JFYWNoKChvcmRlciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9yZGVyKSkge1xyXG4gICAgICAgICAgICAgICAgb3JkZXIgPSBvcmRlclswXTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGxldCBhbGlhcyA9IGBzdWJxdWVyeV9vcmRlcl8ke2l9YDtcclxuICAgICAgICAgICAgICBvcHRpb25zLmF0dHJpYnV0ZXMucHVzaChbb3JkZXIsIGFsaWFzXSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcHJlcGVuZCBtb2RlbCBuYW1lIHdoZW4gd2UgYWxpYXMgdGhlIGF0dHJpYnV0ZXMsIHNvIHF1b3RlIHRoZW0gaGVyZVxyXG4gICAgICAgICAgICAgIGFsaWFzID0gdGhpcy5zZXF1ZWxpemUubGl0ZXJhbCh0aGlzLnF1b3RlKGFsaWFzKSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMub3JkZXJbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9yZGVyW2ldWzBdID0gYWxpYXM7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMub3JkZXJbaV0gPSBhbGlhcztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBncm91cGVkTGltaXRPcmRlciA9IG9wdGlvbnMub3JkZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIE9yZGVyaW5nIGlzIGhhbmRsZWQgYnkgdGhlIHN1YnF1ZXJpZXMsIHNvIG9yZGVyaW5nIHRoZSBVTklPTidlZCByZXN1bHQgaXMgbm90IG5lZWRlZFxyXG4gICAgICAgICAgZ3JvdXBlZExpbWl0T3JkZXIgPSBvcHRpb25zLm9yZGVyO1xyXG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnMub3JkZXI7XHJcbiAgICAgICAgICB3aGVyZVtPcC5wbGFjZWhvbGRlcl0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2FjaGluZyB0aGUgYmFzZSBxdWVyeSBhbmQgc3BsaWNpbmcgdGhlIHdoZXJlIHBhcnQgaW50byBpdCBpcyBjb25zaXN0ZW50bHkgPiB0d2ljZVxyXG4gICAgICAgIC8vIGFzIGZhc3QgdGhhbiBnZW5lcmF0aW5nIGZyb20gc2NyYXRjaCBlYWNoIHRpbWUgZm9yIHZhbHVlcy5sZW5ndGggPj0gNVxyXG4gICAgICAgIGNvbnN0IGJhc2VRdWVyeSA9IGBTRUxFQ1QgKiBGUk9NICgke3RoaXMuc2VsZWN0UXVlcnkoXHJcbiAgICAgICAgICB0YWJsZU5hbWUsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IG9wdGlvbnMuYXR0cmlidXRlcyxcclxuICAgICAgICAgICAgb2Zmc2V0OiBvcHRpb25zLm9mZnNldCxcclxuICAgICAgICAgICAgbGltaXQ6IG9wdGlvbnMuZ3JvdXBlZExpbWl0LmxpbWl0LFxyXG4gICAgICAgICAgICBvcmRlcjogZ3JvdXBlZExpbWl0T3JkZXIsXHJcbiAgICAgICAgICAgIGFsaWFzZXNNYXBwaW5nOiBvcHRpb25zLmFsaWFzZXNNYXBwaW5nLFxyXG4gICAgICAgICAgICBhbGlhc2VzQnlUYWJsZTogb3B0aW9ucy5hbGlhc2VzQnlUYWJsZSxcclxuICAgICAgICAgICAgd2hlcmUsXHJcbiAgICAgICAgICAgIGluY2x1ZGUsXHJcbiAgICAgICAgICAgIG1vZGVsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgbW9kZWxcclxuICAgICAgICApLnJlcGxhY2UoLzskLywgJycpfSkgQVMgc3ViYDsgLy8gRXZlcnkgZGVyaXZlZCB0YWJsZSBtdXN0IGhhdmUgaXRzIG93biBhbGlhc1xyXG4gICAgICAgIGNvbnN0IHBsYWNlSG9sZGVyID0gdGhpcy53aGVyZUl0ZW1RdWVyeShPcC5wbGFjZWhvbGRlciwgdHJ1ZSwgeyBtb2RlbCB9KTtcclxuICAgICAgICBjb25zdCBzcGxpY2VQb3MgPSBiYXNlUXVlcnkuaW5kZXhPZihwbGFjZUhvbGRlcik7XHJcblxyXG4gICAgICAgIG1haW5RdWVyeUl0ZW1zLnB1c2godGhpcy5zZWxlY3RGcm9tVGFibGVGcmFnbWVudChvcHRpb25zLCBtYWluVGFibGUubW9kZWwsIGF0dHJpYnV0ZXMubWFpbiwgYCgke1xyXG4gICAgICAgICAgb3B0aW9ucy5ncm91cGVkTGltaXQudmFsdWVzLm1hcCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBncm91cFdoZXJlO1xyXG4gICAgICAgICAgICBpZiAod2hlcmVLZXkpIHtcclxuICAgICAgICAgICAgICBncm91cFdoZXJlID0ge1xyXG4gICAgICAgICAgICAgICAgW3doZXJlS2V5XTogdmFsdWVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgZ3JvdXBXaGVyZSA9IHtcclxuICAgICAgICAgICAgICAgIFtvcHRpb25zLmdyb3VwZWRMaW1pdC5vbi5mb3JlaWduSWRlbnRpZmllckZpZWxkXTogdmFsdWVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuc3BsaWNlU3RyKGJhc2VRdWVyeSwgc3BsaWNlUG9zLCBwbGFjZUhvbGRlci5sZW5ndGgsIHRoaXMuZ2V0V2hlcmVDb25kaXRpb25zKGdyb3VwV2hlcmUsIGdyb3VwZWRUYWJsZU5hbWUpKTtcclxuICAgICAgICAgIH0pLmpvaW4oXHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxlY3Quc3VwcG9ydHNbJ1VOSU9OIEFMTCddID8gJyBVTklPTiBBTEwgJyA6ICcgVU5JT04gJ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0pYCwgbWFpblRhYmxlLmFzKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWFpblF1ZXJ5SXRlbXMucHVzaCh0aGlzLnNlbGVjdEZyb21UYWJsZUZyYWdtZW50KG9wdGlvbnMsIG1haW5UYWJsZS5tb2RlbCwgYXR0cmlidXRlcy5tYWluLCBtYWluVGFibGUucXVvdGVkTmFtZSwgbWFpblRhYmxlLmFzKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1haW5RdWVyeUl0ZW1zLnB1c2gobWFpbkpvaW5RdWVyaWVzLmpvaW4oJycpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgV0hFUkUgdG8gc3ViIG9yIG1haW4gcXVlcnlcclxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3doZXJlJykgJiYgIW9wdGlvbnMuZ3JvdXBlZExpbWl0KSB7XHJcbiAgICAgIG9wdGlvbnMud2hlcmUgPSB0aGlzLmdldFdoZXJlQ29uZGl0aW9ucyhvcHRpb25zLndoZXJlLCBtYWluVGFibGUuYXMgfHwgdGFibGVOYW1lLCBtb2RlbCwgb3B0aW9ucyk7XHJcbiAgICAgIGlmIChvcHRpb25zLndoZXJlKSB7XHJcbiAgICAgICAgaWYgKHN1YlF1ZXJ5KSB7XHJcbiAgICAgICAgICBzdWJRdWVyeUl0ZW1zLnB1c2goYCBXSEVSRSAke29wdGlvbnMud2hlcmV9YCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG1haW5RdWVyeUl0ZW1zLnB1c2goYCBXSEVSRSAke29wdGlvbnMud2hlcmV9YCk7XHJcbiAgICAgICAgICAvLyBXYWxrIHRoZSBtYWluIHF1ZXJ5IHRvIHVwZGF0ZSBhbGwgc2VsZWN0c1xyXG4gICAgICAgICAgbWFpblF1ZXJ5SXRlbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnU0VMRUNUJykpIHtcclxuICAgICAgICAgICAgICBtYWluUXVlcnlJdGVtc1trZXldID0gdGhpcy5zZWxlY3RGcm9tVGFibGVGcmFnbWVudChvcHRpb25zLCBtb2RlbCwgYXR0cmlidXRlcy5tYWluLCBtYWluVGFibGUucXVvdGVkTmFtZSwgbWFpblRhYmxlLmFzLCBvcHRpb25zLndoZXJlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIEdST1VQIEJZIHRvIHN1YiBvciBtYWluIHF1ZXJ5XHJcbiAgICBpZiAob3B0aW9ucy5ncm91cCkge1xyXG4gICAgICBvcHRpb25zLmdyb3VwID0gQXJyYXkuaXNBcnJheShvcHRpb25zLmdyb3VwKSA/IG9wdGlvbnMuZ3JvdXAubWFwKHQgPT4gdGhpcy5hbGlhc0dyb3VwaW5nKHQsIG1vZGVsLCBtYWluVGFibGUuYXMsIG9wdGlvbnMpKS5qb2luKCcsICcpIDogdGhpcy5hbGlhc0dyb3VwaW5nKG9wdGlvbnMuZ3JvdXAsIG1vZGVsLCBtYWluVGFibGUuYXMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgaWYgKHN1YlF1ZXJ5KSB7XHJcbiAgICAgICAgc3ViUXVlcnlJdGVtcy5wdXNoKGAgR1JPVVAgQlkgJHtvcHRpb25zLmdyb3VwfWApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1haW5RdWVyeUl0ZW1zLnB1c2goYCBHUk9VUCBCWSAke29wdGlvbnMuZ3JvdXB9YCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgSEFWSU5HIHRvIHN1YiBvciBtYWluIHF1ZXJ5XHJcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdoYXZpbmcnKSkge1xyXG4gICAgICBvcHRpb25zLmhhdmluZyA9IHRoaXMuZ2V0V2hlcmVDb25kaXRpb25zKG9wdGlvbnMuaGF2aW5nLCB0YWJsZU5hbWUsIG1vZGVsLCBvcHRpb25zLCBmYWxzZSk7XHJcbiAgICAgIGlmIChvcHRpb25zLmhhdmluZykge1xyXG4gICAgICAgIGlmIChzdWJRdWVyeSkge1xyXG4gICAgICAgICAgc3ViUXVlcnlJdGVtcy5wdXNoKGAgSEFWSU5HICR7b3B0aW9ucy5oYXZpbmd9YCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG1haW5RdWVyeUl0ZW1zLnB1c2goYCBIQVZJTkcgJHtvcHRpb25zLmhhdmluZ31gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgT1JERVIgdG8gc3ViIG9yIG1haW4gcXVlcnlcclxuICAgIGlmIChvcHRpb25zLm9yZGVyKSB7XHJcbiAgICAgIGNvbnN0IG9yZGVycyA9IHRoaXMuZ2V0UXVlcnlPcmRlcnMob3B0aW9ucywgbW9kZWwsIHN1YlF1ZXJ5KTtcclxuICAgICAgaWYgKG9yZGVycy5tYWluUXVlcnlPcmRlci5sZW5ndGgpIHtcclxuICAgICAgICBtYWluUXVlcnlJdGVtcy5wdXNoKGAgT1JERVIgQlkgJHtvcmRlcnMubWFpblF1ZXJ5T3JkZXIuam9pbignLCAnKX1gKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob3JkZXJzLnN1YlF1ZXJ5T3JkZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgc3ViUXVlcnlJdGVtcy5wdXNoKGAgT1JERVIgQlkgJHtvcmRlcnMuc3ViUXVlcnlPcmRlci5qb2luKCcsICcpfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIExJTUlULCBPRkZTRVQgdG8gc3ViIG9yIG1haW4gcXVlcnlcclxuICAgIGNvbnN0IGxpbWl0T3JkZXIgPSB0aGlzLmFkZExpbWl0QW5kT2Zmc2V0KG9wdGlvbnMsIG1haW5UYWJsZS5tb2RlbCk7XHJcbiAgICBpZiAobGltaXRPcmRlciAmJiAhb3B0aW9ucy5ncm91cGVkTGltaXQpIHtcclxuICAgICAgaWYgKHN1YlF1ZXJ5KSB7XHJcbiAgICAgICAgc3ViUXVlcnlJdGVtcy5wdXNoKGxpbWl0T3JkZXIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1haW5RdWVyeUl0ZW1zLnB1c2gobGltaXRPcmRlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3ViUXVlcnkpIHtcclxuICAgICAgcXVlcnkgPSBgU0VMRUNUICR7YXR0cmlidXRlcy5tYWluLmpvaW4oJywgJyl9IEZST00gKCR7c3ViUXVlcnlJdGVtcy5qb2luKCcnKX0pIEFTICR7bWFpblRhYmxlLmFzfSR7bWFpbkpvaW5RdWVyaWVzLmpvaW4oJycpfSR7bWFpblF1ZXJ5SXRlbXMuam9pbignJyl9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHF1ZXJ5ID0gbWFpblF1ZXJ5SXRlbXMuam9pbignJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMubG9jayAmJiB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmxvY2spIHtcclxuICAgICAgbGV0IGxvY2sgPSBvcHRpb25zLmxvY2s7XHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NrID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIGxvY2sgPSBvcHRpb25zLmxvY2subGV2ZWw7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMubG9ja0tleSAmJiAobG9jayA9PT0gJ0tFWSBTSEFSRScgfHwgbG9jayA9PT0gJ05PIEtFWSBVUERBVEUnKSkge1xyXG4gICAgICAgIHF1ZXJ5ICs9IGAgRk9SICR7bG9ja31gO1xyXG4gICAgICB9IGVsc2UgaWYgKGxvY2sgPT09ICdTSEFSRScpIHtcclxuICAgICAgICBxdWVyeSArPSBgICR7dGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5mb3JTaGFyZX1gO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXJ5ICs9ICcgRk9SIFVQREFURSc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMubG9ja09mICYmIG9wdGlvbnMubG9jay5vZiAmJiBvcHRpb25zLmxvY2sub2YucHJvdG90eXBlIGluc3RhbmNlb2YgTW9kZWwpIHtcclxuICAgICAgICBxdWVyeSArPSBgIE9GICR7dGhpcy5xdW90ZVRhYmxlKG9wdGlvbnMubG9jay5vZi5uYW1lKX1gO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnNraXBMb2NrZWQgJiYgb3B0aW9ucy5za2lwTG9ja2VkKSB7XHJcbiAgICAgICAgcXVlcnkgKz0gJyBTS0lQIExPQ0tFRCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYCR7cXVlcnl9O2A7XHJcbiAgfVxyXG5cclxuICBhbGlhc0dyb3VwaW5nKGZpZWxkLCBtb2RlbCwgdGFibGVOYW1lLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBzcmMgPSBBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkWzBdIDogZmllbGQ7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucXVvdGUodGhpcy5fZ2V0QWxpYXNGb3JGaWVsZCh0YWJsZU5hbWUsIHNyYywgb3B0aW9ucykgfHwgc3JjLCBtb2RlbCk7XHJcbiAgfVxyXG5cclxuICBlc2NhcGVBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMsIG9wdGlvbnMsIG1haW5UYWJsZUFzKSB7XHJcbiAgICByZXR1cm4gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLm1hcChhdHRyID0+IHtcclxuICAgICAgbGV0IGFkZFRhYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmIChhdHRyIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKGF0dHIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHIpKSB7XHJcbiAgICAgICAgaWYgKGF0dHIubGVuZ3RoICE9PSAyKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7SlNPTi5zdHJpbmdpZnkoYXR0cil9IGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBkZWZpbml0aW9uLiBQbGVhc2UgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiBbJ2F0dHJpYnV0ZSBkZWZpbml0aW9uJywgJ2FsaWFzJ11gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0ciA9IGF0dHIuc2xpY2UoKTtcclxuXHJcbiAgICAgICAgaWYgKGF0dHJbMF0gaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcclxuICAgICAgICAgIGF0dHJbMF0gPSB0aGlzLmhhbmRsZVNlcXVlbGl6ZU1ldGhvZChhdHRyWzBdKTtcclxuICAgICAgICAgIGFkZFRhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICghYXR0clswXS5pbmNsdWRlcygnKCcpICYmICFhdHRyWzBdLmluY2x1ZGVzKCcpJykpIHtcclxuICAgICAgICAgIGF0dHJbMF0gPSB0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyWzBdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZGVwcmVjYXRpb25zLm5vUmF3QXR0cmlidXRlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYWxpYXMgPSBhdHRyWzFdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm1pbmlmeUFsaWFzZXMpIHtcclxuICAgICAgICAgIGFsaWFzID0gdGhpcy5fZ2V0TWluaWZpZWRBbGlhcyhhbGlhcywgbWFpblRhYmxlQXMsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXR0ciA9IFthdHRyWzBdLCB0aGlzLnF1b3RlSWRlbnRpZmllcihhbGlhcyldLmpvaW4oJyBBUyAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhdHRyID0gIWF0dHIuaW5jbHVkZXMoVXRpbHMuVElDS19DSEFSKSAmJiAhYXR0ci5pbmNsdWRlcygnXCInKVxyXG4gICAgICAgICAgPyB0aGlzLnF1b3RlQXR0cmlidXRlKGF0dHIsIG9wdGlvbnMubW9kZWwpXHJcbiAgICAgICAgICA6IHRoaXMuZXNjYXBlKGF0dHIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghXy5pc0VtcHR5KG9wdGlvbnMuaW5jbHVkZSkgJiYgIWF0dHIuaW5jbHVkZXMoJy4nKSAmJiBhZGRUYWJsZSkge1xyXG4gICAgICAgIGF0dHIgPSBgJHttYWluVGFibGVBc30uJHthdHRyfWA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBhdHRyO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUluY2x1ZGUoaW5jbHVkZSwgcGFyZW50VGFibGVOYW1lLCB0b3BMZXZlbEluZm8pIHtcclxuICAgIGNvbnN0IGpvaW5RdWVyaWVzID0ge1xyXG4gICAgICBtYWluUXVlcnk6IFtdLFxyXG4gICAgICBzdWJRdWVyeTogW11cclxuICAgIH07XHJcbiAgICBjb25zdCBtYWluQ2hpbGRJbmNsdWRlcyA9IFtdO1xyXG4gICAgY29uc3Qgc3ViQ2hpbGRJbmNsdWRlcyA9IFtdO1xyXG4gICAgbGV0IHJlcXVpcmVkTWlzbWF0Y2ggPSBmYWxzZTtcclxuICAgIGNvbnN0IGluY2x1ZGVBcyA9IHtcclxuICAgICAgaW50ZXJuYWxBczogaW5jbHVkZS5hcyxcclxuICAgICAgZXh0ZXJuYWxBczogaW5jbHVkZS5hc1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XHJcbiAgICAgIG1haW46IFtdLFxyXG4gICAgICBzdWJRdWVyeTogW11cclxuICAgIH07XHJcbiAgICBsZXQgam9pblF1ZXJ5O1xyXG5cclxuICAgIHRvcExldmVsSW5mby5vcHRpb25zLmtleXNFc2NhcGVkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodG9wTGV2ZWxJbmZvLm5hbWVzLm5hbWUgIT09IHBhcmVudFRhYmxlTmFtZS5leHRlcm5hbEFzICYmIHRvcExldmVsSW5mby5uYW1lcy5hcyAhPT0gcGFyZW50VGFibGVOYW1lLmV4dGVybmFsQXMpIHtcclxuICAgICAgaW5jbHVkZUFzLmludGVybmFsQXMgPSBgJHtwYXJlbnRUYWJsZU5hbWUuaW50ZXJuYWxBc30tPiR7aW5jbHVkZS5hc31gO1xyXG4gICAgICBpbmNsdWRlQXMuZXh0ZXJuYWxBcyA9IGAke3BhcmVudFRhYmxlTmFtZS5leHRlcm5hbEFzfS4ke2luY2x1ZGUuYXN9YDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbmNsdWRlSWdub3JlQXR0cmlidXRlcyBpcyB1c2VkIGJ5IGFnZ3JlZ2F0ZSBmdW5jdGlvbnNcclxuICAgIGlmICh0b3BMZXZlbEluZm8ub3B0aW9ucy5pbmNsdWRlSWdub3JlQXR0cmlidXRlcyAhPT0gZmFsc2UpIHtcclxuICAgICAgaW5jbHVkZS5tb2RlbC5fZXhwYW5kQXR0cmlidXRlcyhpbmNsdWRlKTtcclxuICAgICAgVXRpbHMubWFwRmluZGVyT3B0aW9ucyhpbmNsdWRlLCBpbmNsdWRlLm1vZGVsKTtcclxuXHJcbiAgICAgIGNvbnN0IGluY2x1ZGVBdHRyaWJ1dGVzID0gaW5jbHVkZS5hdHRyaWJ1dGVzLm1hcChhdHRyID0+IHtcclxuICAgICAgICBsZXQgYXR0ckFzID0gYXR0cjtcclxuICAgICAgICBsZXQgdmVyYmF0aW0gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXR0cikgJiYgYXR0ci5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgIGlmIChhdHRyWzBdIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kICYmIChcclxuICAgICAgICAgICAgYXR0clswXSBpbnN0YW5jZW9mIFV0aWxzLkxpdGVyYWwgfHxcclxuICAgICAgICAgICAgYXR0clswXSBpbnN0YW5jZW9mIFV0aWxzLkNhc3QgfHxcclxuICAgICAgICAgICAgYXR0clswXSBpbnN0YW5jZW9mIFV0aWxzLkZuXHJcbiAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgIHZlcmJhdGltID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhdHRyID0gYXR0ci5tYXAoYXR0ciA9PiBhdHRyIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kID8gdGhpcy5oYW5kbGVTZXF1ZWxpemVNZXRob2QoYXR0cikgOiBhdHRyKTtcclxuXHJcbiAgICAgICAgICBhdHRyQXMgPSBhdHRyWzFdO1xyXG4gICAgICAgICAgYXR0ciA9IGF0dHJbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhdHRyIGluc3RhbmNlb2YgVXRpbHMuTGl0ZXJhbCkge1xyXG4gICAgICAgICAgcmV0dXJuIGF0dHIudmFsOyAvLyBXZSB0cnVzdCB0aGUgdXNlciB0byByZW5hbWUgdGhlIGZpZWxkIGNvcnJlY3RseVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXR0ciBpbnN0YW5jZW9mIFV0aWxzLkNhc3QgfHwgYXR0ciBpbnN0YW5jZW9mIFV0aWxzLkZuKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICdUcmllZCB0byBzZWxlY3QgYXR0cmlidXRlcyB1c2luZyBTZXF1ZWxpemUuY2FzdCBvciBTZXF1ZWxpemUuZm4gd2l0aG91dCBzcGVjaWZ5aW5nIGFuIGFsaWFzIGZvciB0aGUgcmVzdWx0LCBkdXJpbmcgZWFnZXIgbG9hZGluZy4gJyArXHJcbiAgICAgICAgICAgICdUaGlzIG1lYW5zIHRoZSBhdHRyaWJ1dGUgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIHJldHVybmVkIGluc3RhbmNlJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwcmVmaXg7XHJcbiAgICAgICAgaWYgKHZlcmJhdGltID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBwcmVmaXggPSBhdHRyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoLyM+PnwtPj4vLnRlc3QoYXR0cikpIHtcclxuICAgICAgICAgIHByZWZpeCA9IGAoJHt0aGlzLnF1b3RlSWRlbnRpZmllcihpbmNsdWRlQXMuaW50ZXJuYWxBcyl9LiR7YXR0ci5yZXBsYWNlKC9cXCh8XFwpL2csICcnKX0pYDtcclxuICAgICAgICB9IGVsc2UgaWYgKC9qc29uX2V4dHJhY3RcXCgvLnRlc3QoYXR0cikpIHtcclxuICAgICAgICAgIHByZWZpeCA9IGF0dHIucmVwbGFjZSgvanNvbl9leHRyYWN0XFwoL2ksIGBqc29uX2V4dHJhY3QoJHt0aGlzLnF1b3RlSWRlbnRpZmllcihpbmNsdWRlQXMuaW50ZXJuYWxBcyl9LmApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwcmVmaXggPSBgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihpbmNsdWRlQXMuaW50ZXJuYWxBcyl9LiR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cil9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFsaWFzID0gYCR7aW5jbHVkZUFzLmV4dGVybmFsQXN9LiR7YXR0ckFzfWA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubWluaWZ5QWxpYXNlcykge1xyXG4gICAgICAgICAgYWxpYXMgPSB0aGlzLl9nZXRNaW5pZmllZEFsaWFzKGFsaWFzLCBpbmNsdWRlQXMuaW50ZXJuYWxBcywgdG9wTGV2ZWxJbmZvLm9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0gQVMgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhbGlhcywgdHJ1ZSl9YDtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChpbmNsdWRlLnN1YlF1ZXJ5ICYmIHRvcExldmVsSW5mby5zdWJRdWVyeSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBpbmNsdWRlQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgYXR0cmlidXRlcy5zdWJRdWVyeS5wdXNoKGF0dHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgaW5jbHVkZUF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZXMubWFpbi5wdXNoKGF0dHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vdGhyb3VnaFxyXG4gICAgaWYgKGluY2x1ZGUudGhyb3VnaCkge1xyXG4gICAgICBqb2luUXVlcnkgPSB0aGlzLmdlbmVyYXRlVGhyb3VnaEpvaW4oaW5jbHVkZSwgaW5jbHVkZUFzLCBwYXJlbnRUYWJsZU5hbWUuaW50ZXJuYWxBcywgdG9wTGV2ZWxJbmZvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2dlbmVyYXRlU3ViUXVlcnlGaWx0ZXIoaW5jbHVkZSwgaW5jbHVkZUFzLCB0b3BMZXZlbEluZm8pO1xyXG4gICAgICBqb2luUXVlcnkgPSB0aGlzLmdlbmVyYXRlSm9pbihpbmNsdWRlLCB0b3BMZXZlbEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBuZXcgYXR0cmlidXRlcyBjcmVhdGVkIGluIGpvaW5cclxuICAgIGlmIChqb2luUXVlcnkuYXR0cmlidXRlcy5tYWluLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXR0cmlidXRlcy5tYWluID0gYXR0cmlidXRlcy5tYWluLmNvbmNhdChqb2luUXVlcnkuYXR0cmlidXRlcy5tYWluKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoam9pblF1ZXJ5LmF0dHJpYnV0ZXMuc3ViUXVlcnkubGVuZ3RoID4gMCkge1xyXG4gICAgICBhdHRyaWJ1dGVzLnN1YlF1ZXJ5ID0gYXR0cmlidXRlcy5zdWJRdWVyeS5jb25jYXQoam9pblF1ZXJ5LmF0dHJpYnV0ZXMuc3ViUXVlcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmNsdWRlLmluY2x1ZGUpIHtcclxuICAgICAgZm9yIChjb25zdCBjaGlsZEluY2x1ZGUgb2YgaW5jbHVkZS5pbmNsdWRlKSB7XHJcbiAgICAgICAgaWYgKGNoaWxkSW5jbHVkZS5zZXBhcmF0ZSB8fCBjaGlsZEluY2x1ZGUuX3BzZXVkbykge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjaGlsZEpvaW5RdWVyaWVzID0gdGhpcy5nZW5lcmF0ZUluY2x1ZGUoY2hpbGRJbmNsdWRlLCBpbmNsdWRlQXMsIHRvcExldmVsSW5mbyk7XHJcblxyXG4gICAgICAgIGlmIChpbmNsdWRlLnJlcXVpcmVkID09PSBmYWxzZSAmJiBjaGlsZEluY2x1ZGUucmVxdWlyZWQgPT09IHRydWUpIHtcclxuICAgICAgICAgIHJlcXVpcmVkTWlzbWF0Y2ggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaXMgYSBzdWIgcXVlcnkgd2UganVzdCBnaXZlIGl0IHRvIHRoZVxyXG4gICAgICAgIGlmIChjaGlsZEluY2x1ZGUuc3ViUXVlcnkgJiYgdG9wTGV2ZWxJbmZvLnN1YlF1ZXJ5KSB7XHJcbiAgICAgICAgICBzdWJDaGlsZEluY2x1ZGVzLnB1c2goY2hpbGRKb2luUXVlcmllcy5zdWJRdWVyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGlsZEpvaW5RdWVyaWVzLm1haW5RdWVyeSkge1xyXG4gICAgICAgICAgbWFpbkNoaWxkSW5jbHVkZXMucHVzaChjaGlsZEpvaW5RdWVyaWVzLm1haW5RdWVyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGlsZEpvaW5RdWVyaWVzLmF0dHJpYnV0ZXMubWFpbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBhdHRyaWJ1dGVzLm1haW4gPSBhdHRyaWJ1dGVzLm1haW4uY29uY2F0KGNoaWxkSm9pblF1ZXJpZXMuYXR0cmlidXRlcy5tYWluKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoaWxkSm9pblF1ZXJpZXMuYXR0cmlidXRlcy5zdWJRdWVyeS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBhdHRyaWJ1dGVzLnN1YlF1ZXJ5ID0gYXR0cmlidXRlcy5zdWJRdWVyeS5jb25jYXQoY2hpbGRKb2luUXVlcmllcy5hdHRyaWJ1dGVzLnN1YlF1ZXJ5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5jbHVkZS5zdWJRdWVyeSAmJiB0b3BMZXZlbEluZm8uc3ViUXVlcnkpIHtcclxuICAgICAgaWYgKHJlcXVpcmVkTWlzbWF0Y2ggJiYgc3ViQ2hpbGRJbmNsdWRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgam9pblF1ZXJpZXMuc3ViUXVlcnkucHVzaChgICR7am9pblF1ZXJ5LmpvaW59ICggJHtqb2luUXVlcnkuYm9keX0ke3N1YkNoaWxkSW5jbHVkZXMuam9pbignJyl9ICkgT04gJHtqb2luUXVlcnkuY29uZGl0aW9ufWApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGpvaW5RdWVyaWVzLnN1YlF1ZXJ5LnB1c2goYCAke2pvaW5RdWVyeS5qb2lufSAke2pvaW5RdWVyeS5ib2R5fSBPTiAke2pvaW5RdWVyeS5jb25kaXRpb259YCk7XHJcbiAgICAgICAgaWYgKHN1YkNoaWxkSW5jbHVkZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgam9pblF1ZXJpZXMuc3ViUXVlcnkucHVzaChzdWJDaGlsZEluY2x1ZGVzLmpvaW4oJycpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgam9pblF1ZXJpZXMubWFpblF1ZXJ5LnB1c2gobWFpbkNoaWxkSW5jbHVkZXMuam9pbignJykpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHJlcXVpcmVkTWlzbWF0Y2ggJiYgbWFpbkNoaWxkSW5jbHVkZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGpvaW5RdWVyaWVzLm1haW5RdWVyeS5wdXNoKGAgJHtqb2luUXVlcnkuam9pbn0gKCAke2pvaW5RdWVyeS5ib2R5fSR7bWFpbkNoaWxkSW5jbHVkZXMuam9pbignJyl9ICkgT04gJHtqb2luUXVlcnkuY29uZGl0aW9ufWApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGpvaW5RdWVyaWVzLm1haW5RdWVyeS5wdXNoKGAgJHtqb2luUXVlcnkuam9pbn0gJHtqb2luUXVlcnkuYm9keX0gT04gJHtqb2luUXVlcnkuY29uZGl0aW9ufWApO1xyXG4gICAgICAgIGlmIChtYWluQ2hpbGRJbmNsdWRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBqb2luUXVlcmllcy5tYWluUXVlcnkucHVzaChtYWluQ2hpbGRJbmNsdWRlcy5qb2luKCcnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGpvaW5RdWVyaWVzLnN1YlF1ZXJ5LnB1c2goc3ViQ2hpbGRJbmNsdWRlcy5qb2luKCcnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWFpblF1ZXJ5OiBqb2luUXVlcmllcy5tYWluUXVlcnkuam9pbignJyksXHJcbiAgICAgIHN1YlF1ZXJ5OiBqb2luUXVlcmllcy5zdWJRdWVyeS5qb2luKCcnKSxcclxuICAgICAgYXR0cmlidXRlc1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIF9nZXRNaW5pZmllZEFsaWFzKGFsaWFzLCB0YWJsZU5hbWUsIG9wdGlvbnMpIHtcclxuICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHJlLWFsaWFzIGluIGNhc2Ugb2YgYSBzdWJxdWVyeVxyXG4gICAgaWYgKG9wdGlvbnMuYWxpYXNlc0J5VGFibGVbYCR7dGFibGVOYW1lfSR7YWxpYXN9YF0pIHtcclxuICAgICAgcmV0dXJuIG9wdGlvbnMuYWxpYXNlc0J5VGFibGVbYCR7dGFibGVOYW1lfSR7YWxpYXN9YF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRG8gbm90IGFsaWFzIGN1c3RvbSBzdXF1ZXJ5X29yZGVyc1xyXG4gICAgaWYgKGFsaWFzLm1hdGNoKC9zdWJxdWVyeV9vcmRlcl9bMC05XS8pKSB7XHJcbiAgICAgIHJldHVybiBhbGlhcztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtaW5pZmllZEFsaWFzID0gYF8ke29wdGlvbnMuYWxpYXNlc01hcHBpbmcuc2l6ZX1gO1xyXG5cclxuICAgIG9wdGlvbnMuYWxpYXNlc01hcHBpbmcuc2V0KG1pbmlmaWVkQWxpYXMsIGFsaWFzKTtcclxuICAgIG9wdGlvbnMuYWxpYXNlc0J5VGFibGVbYCR7dGFibGVOYW1lfSR7YWxpYXN9YF0gPSBtaW5pZmllZEFsaWFzO1xyXG5cclxuICAgIHJldHVybiBtaW5pZmllZEFsaWFzO1xyXG4gIH1cclxuXHJcbiAgX2dldEFsaWFzRm9yRmllbGQodGFibGVOYW1lLCBmaWVsZCwgb3B0aW9ucykge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5taW5pZnlBbGlhc2VzKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLmFsaWFzZXNCeVRhYmxlW2Ake3RhYmxlTmFtZX0ke2ZpZWxkfWBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuYWxpYXNlc0J5VGFibGVbYCR7dGFibGVOYW1lfSR7ZmllbGR9YF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVKb2luKGluY2x1ZGUsIHRvcExldmVsSW5mbykge1xyXG4gICAgY29uc3QgYXNzb2NpYXRpb24gPSBpbmNsdWRlLmFzc29jaWF0aW9uO1xyXG4gICAgY29uc3QgcGFyZW50ID0gaW5jbHVkZS5wYXJlbnQ7XHJcbiAgICBjb25zdCBwYXJlbnRJc1RvcCA9ICEhcGFyZW50ICYmICFpbmNsdWRlLnBhcmVudC5hc3NvY2lhdGlvbiAmJiBpbmNsdWRlLnBhcmVudC5tb2RlbC5uYW1lID09PSB0b3BMZXZlbEluZm8ub3B0aW9ucy5tb2RlbC5uYW1lO1xyXG4gICAgbGV0ICRwYXJlbnQ7XHJcbiAgICBsZXQgam9pbldoZXJlO1xyXG4gICAgLyogQXR0cmlidXRlcyBmb3IgdGhlIGxlZnQgc2lkZSAqL1xyXG4gICAgY29uc3QgbGVmdCA9IGFzc29jaWF0aW9uLnNvdXJjZTtcclxuICAgIGNvbnN0IGF0dHJMZWZ0ID0gYXNzb2NpYXRpb24gaW5zdGFuY2VvZiBCZWxvbmdzVG8gP1xyXG4gICAgICBhc3NvY2lhdGlvbi5pZGVudGlmaWVyIDpcclxuICAgICAgYXNzb2NpYXRpb24uc291cmNlS2V5QXR0cmlidXRlIHx8IGxlZnQucHJpbWFyeUtleUF0dHJpYnV0ZTtcclxuICAgIGNvbnN0IGZpZWxkTGVmdCA9IGFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvID9cclxuICAgICAgYXNzb2NpYXRpb24uaWRlbnRpZmllckZpZWxkIDpcclxuICAgICAgbGVmdC5yYXdBdHRyaWJ1dGVzW2Fzc29jaWF0aW9uLnNvdXJjZUtleUF0dHJpYnV0ZSB8fCBsZWZ0LnByaW1hcnlLZXlBdHRyaWJ1dGVdLmZpZWxkO1xyXG4gICAgbGV0IGFzTGVmdDtcclxuICAgIC8qIEF0dHJpYnV0ZXMgZm9yIHRoZSByaWdodCBzaWRlICovXHJcbiAgICBjb25zdCByaWdodCA9IGluY2x1ZGUubW9kZWw7XHJcbiAgICBjb25zdCB0YWJsZVJpZ2h0ID0gcmlnaHQuZ2V0VGFibGVOYW1lKCk7XHJcbiAgICBjb25zdCBmaWVsZFJpZ2h0ID0gYXNzb2NpYXRpb24gaW5zdGFuY2VvZiBCZWxvbmdzVG8gP1xyXG4gICAgICByaWdodC5yYXdBdHRyaWJ1dGVzW2Fzc29jaWF0aW9uLnRhcmdldElkZW50aWZpZXIgfHwgcmlnaHQucHJpbWFyeUtleUF0dHJpYnV0ZV0uZmllbGQgOlxyXG4gICAgICBhc3NvY2lhdGlvbi5pZGVudGlmaWVyRmllbGQ7XHJcbiAgICBsZXQgYXNSaWdodCA9IGluY2x1ZGUuYXM7XHJcblxyXG4gICAgd2hpbGUgKCgkcGFyZW50ID0gJHBhcmVudCAmJiAkcGFyZW50LnBhcmVudCB8fCBpbmNsdWRlLnBhcmVudCkgJiYgJHBhcmVudC5hc3NvY2lhdGlvbikge1xyXG4gICAgICBpZiAoYXNMZWZ0KSB7XHJcbiAgICAgICAgYXNMZWZ0ID0gYCR7JHBhcmVudC5hc30tPiR7YXNMZWZ0fWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXNMZWZ0ID0gJHBhcmVudC5hcztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghYXNMZWZ0KSBhc0xlZnQgPSBwYXJlbnQuYXMgfHwgcGFyZW50Lm1vZGVsLm5hbWU7XHJcbiAgICBlbHNlIGFzUmlnaHQgPSBgJHthc0xlZnR9LT4ke2FzUmlnaHR9YDtcclxuXHJcbiAgICBsZXQgam9pbk9uID0gYCR7dGhpcy5xdW90ZVRhYmxlKGFzTGVmdCl9LiR7dGhpcy5xdW90ZUlkZW50aWZpZXIoZmllbGRMZWZ0KX1gO1xyXG4gICAgY29uc3Qgc3VicXVlcnlBdHRyaWJ1dGVzID0gW107XHJcblxyXG4gICAgaWYgKHRvcExldmVsSW5mby5vcHRpb25zLmdyb3VwZWRMaW1pdCAmJiBwYXJlbnRJc1RvcCB8fCB0b3BMZXZlbEluZm8uc3ViUXVlcnkgJiYgaW5jbHVkZS5wYXJlbnQuc3ViUXVlcnkgJiYgIWluY2x1ZGUuc3ViUXVlcnkpIHtcclxuICAgICAgaWYgKHBhcmVudElzVG9wKSB7XHJcbiAgICAgICAgLy8gVGhlIG1haW4gbW9kZWwgYXR0cmlidXRlcyBpcyBub3QgYWxpYXNlZCB0byBhIHByZWZpeFxyXG4gICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRoaXMucXVvdGVUYWJsZShwYXJlbnQuYXMgfHwgcGFyZW50Lm1vZGVsLm5hbWUpO1xyXG5cclxuICAgICAgICAvLyBDaGVjayBmb3IgcG90ZW50aWFsIGFsaWFzZWQgSk9JTiBjb25kaXRpb25cclxuICAgICAgICBqb2luT24gPSB0aGlzLl9nZXRBbGlhc0ZvckZpZWxkKHRhYmxlTmFtZSwgYXR0ckxlZnQsIHRvcExldmVsSW5mby5vcHRpb25zKSB8fCBgJHt0YWJsZU5hbWV9LiR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0ckxlZnQpfWA7XHJcblxyXG4gICAgICAgIGlmICh0b3BMZXZlbEluZm8uc3ViUXVlcnkpIHtcclxuICAgICAgICAgIHN1YnF1ZXJ5QXR0cmlidXRlcy5wdXNoKGAke3RhYmxlTmFtZX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcihmaWVsZExlZnQpfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBqb2luU291cmNlID0gYCR7YXNMZWZ0LnJlcGxhY2UoLy0+L2csICcuJyl9LiR7YXR0ckxlZnR9YDtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgZm9yIHBvdGVudGlhbCBhbGlhc2VkIEpPSU4gY29uZGl0aW9uXHJcbiAgICAgICAgam9pbk9uID0gdGhpcy5fZ2V0QWxpYXNGb3JGaWVsZChhc0xlZnQsIGpvaW5Tb3VyY2UsIHRvcExldmVsSW5mby5vcHRpb25zKSB8fCB0aGlzLnF1b3RlSWRlbnRpZmllcihqb2luU291cmNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGpvaW5PbiArPSBgID0gJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhc1JpZ2h0KX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcihmaWVsZFJpZ2h0KX1gO1xyXG5cclxuICAgIGlmIChpbmNsdWRlLm9uKSB7XHJcbiAgICAgIGpvaW5PbiA9IHRoaXMud2hlcmVJdGVtc1F1ZXJ5KGluY2x1ZGUub24sIHtcclxuICAgICAgICBwcmVmaXg6IHRoaXMuc2VxdWVsaXplLmxpdGVyYWwodGhpcy5xdW90ZUlkZW50aWZpZXIoYXNSaWdodCkpLFxyXG4gICAgICAgIG1vZGVsOiBpbmNsdWRlLm1vZGVsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmNsdWRlLndoZXJlKSB7XHJcbiAgICAgIGpvaW5XaGVyZSA9IHRoaXMud2hlcmVJdGVtc1F1ZXJ5KGluY2x1ZGUud2hlcmUsIHtcclxuICAgICAgICBwcmVmaXg6IHRoaXMuc2VxdWVsaXplLmxpdGVyYWwodGhpcy5xdW90ZUlkZW50aWZpZXIoYXNSaWdodCkpLFxyXG4gICAgICAgIG1vZGVsOiBpbmNsdWRlLm1vZGVsXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoam9pbldoZXJlKSB7XHJcbiAgICAgICAgaWYgKGluY2x1ZGUub3IpIHtcclxuICAgICAgICAgIGpvaW5PbiArPSBgIE9SICR7am9pbldoZXJlfWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGpvaW5PbiArPSBgIEFORCAke2pvaW5XaGVyZX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGpvaW46IGluY2x1ZGUucmVxdWlyZWQgPyAnSU5ORVIgSk9JTicgOiBpbmNsdWRlLnJpZ2h0ICYmIHRoaXMuX2RpYWxlY3Quc3VwcG9ydHNbJ1JJR0hUIEpPSU4nXSA/ICdSSUdIVCBPVVRFUiBKT0lOJyA6ICdMRUZUIE9VVEVSIEpPSU4nLFxyXG4gICAgICBib2R5OiB0aGlzLnF1b3RlVGFibGUodGFibGVSaWdodCwgYXNSaWdodCksXHJcbiAgICAgIGNvbmRpdGlvbjogam9pbk9uLFxyXG4gICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgbWFpbjogW10sXHJcbiAgICAgICAgc3ViUXVlcnk6IHN1YnF1ZXJ5QXR0cmlidXRlc1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVUaHJvdWdoSm9pbihpbmNsdWRlLCBpbmNsdWRlQXMsIHBhcmVudFRhYmxlTmFtZSwgdG9wTGV2ZWxJbmZvKSB7XHJcbiAgICBjb25zdCB0aHJvdWdoID0gaW5jbHVkZS50aHJvdWdoO1xyXG4gICAgY29uc3QgdGhyb3VnaFRhYmxlID0gdGhyb3VnaC5tb2RlbC5nZXRUYWJsZU5hbWUoKTtcclxuICAgIGNvbnN0IHRocm91Z2hBcyA9IGAke2luY2x1ZGVBcy5pbnRlcm5hbEFzfS0+JHt0aHJvdWdoLmFzfWA7XHJcbiAgICBjb25zdCBleHRlcm5hbFRocm91Z2hBcyA9IGAke2luY2x1ZGVBcy5leHRlcm5hbEFzfS4ke3Rocm91Z2guYXN9YDtcclxuICAgIGNvbnN0IHRocm91Z2hBdHRyaWJ1dGVzID0gdGhyb3VnaC5hdHRyaWJ1dGVzLm1hcChhdHRyID0+IHtcclxuICAgICAgbGV0IGFsaWFzID0gYCR7ZXh0ZXJuYWxUaHJvdWdoQXN9LiR7QXJyYXkuaXNBcnJheShhdHRyKSA/IGF0dHJbMV0gOiBhdHRyfWA7XHJcblxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLm1pbmlmeUFsaWFzZXMpIHtcclxuICAgICAgICBhbGlhcyA9IHRoaXMuX2dldE1pbmlmaWVkQWxpYXMoYWxpYXMsIHRocm91Z2hBcywgdG9wTGV2ZWxJbmZvLm9wdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIodGhyb3VnaEFzKX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcihBcnJheS5pc0FycmF5KGF0dHIpID8gYXR0clswXSA6IGF0dHIpXHJcbiAgICAgIH0gQVMgJHtcclxuICAgICAgICB0aGlzLnF1b3RlSWRlbnRpZmllcihhbGlhcyl9YDtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYXNzb2NpYXRpb24gPSBpbmNsdWRlLmFzc29jaWF0aW9uO1xyXG4gICAgY29uc3QgcGFyZW50SXNUb3AgPSAhaW5jbHVkZS5wYXJlbnQuYXNzb2NpYXRpb24gJiYgaW5jbHVkZS5wYXJlbnQubW9kZWwubmFtZSA9PT0gdG9wTGV2ZWxJbmZvLm9wdGlvbnMubW9kZWwubmFtZTtcclxuICAgIGNvbnN0IHRhYmxlU291cmNlID0gcGFyZW50VGFibGVOYW1lO1xyXG4gICAgY29uc3QgaWRlbnRTb3VyY2UgPSBhc3NvY2lhdGlvbi5pZGVudGlmaWVyRmllbGQ7XHJcbiAgICBjb25zdCB0YWJsZVRhcmdldCA9IGluY2x1ZGVBcy5pbnRlcm5hbEFzO1xyXG4gICAgY29uc3QgaWRlbnRUYXJnZXQgPSBhc3NvY2lhdGlvbi5mb3JlaWduSWRlbnRpZmllckZpZWxkO1xyXG4gICAgY29uc3QgYXR0clRhcmdldCA9IGFzc29jaWF0aW9uLnRhcmdldEtleUZpZWxkO1xyXG5cclxuICAgIGNvbnN0IGpvaW5UeXBlID0gaW5jbHVkZS5yZXF1aXJlZCA/ICdJTk5FUiBKT0lOJyA6IGluY2x1ZGUucmlnaHQgJiYgdGhpcy5fZGlhbGVjdC5zdXBwb3J0c1snUklHSFQgSk9JTiddID8gJ1JJR0hUIE9VVEVSIEpPSU4nIDogJ0xFRlQgT1VURVIgSk9JTic7XHJcbiAgICBsZXQgam9pbkJvZHk7XHJcbiAgICBsZXQgam9pbkNvbmRpdGlvbjtcclxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XHJcbiAgICAgIG1haW46IFtdLFxyXG4gICAgICBzdWJRdWVyeTogW11cclxuICAgIH07XHJcbiAgICBsZXQgYXR0clNvdXJjZSA9IGFzc29jaWF0aW9uLnNvdXJjZUtleTtcclxuICAgIGxldCBzb3VyY2VKb2luT247XHJcbiAgICBsZXQgdGFyZ2V0Sm9pbk9uO1xyXG4gICAgbGV0IHRocm91Z2hXaGVyZTtcclxuICAgIGxldCB0YXJnZXRXaGVyZTtcclxuXHJcbiAgICBpZiAodG9wTGV2ZWxJbmZvLm9wdGlvbnMuaW5jbHVkZUlnbm9yZUF0dHJpYnV0ZXMgIT09IGZhbHNlKSB7XHJcbiAgICAgIC8vIFRocm91Z2ggaW5jbHVkZXMgYXJlIGFsd2F5cyBoYXNNYW55LCBzbyB3ZSBuZWVkIHRvIGFkZCB0aGUgYXR0cmlidXRlcyB0byB0aGUgbWFpbkF0dHJpYnV0ZXMgbm8gbWF0dGVyIHdoYXQgKFJlYWwgam9pbiB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkIGluIHN1YnF1ZXJ5KVxyXG4gICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgdGhyb3VnaEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBhdHRyaWJ1dGVzLm1haW4ucHVzaChhdHRyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byB1c2UgZmllbGQgb3IgYXR0cmlidXRlXHJcbiAgICBpZiAoIXRvcExldmVsSW5mby5zdWJRdWVyeSkge1xyXG4gICAgICBhdHRyU291cmNlID0gYXNzb2NpYXRpb24uc291cmNlS2V5RmllbGQ7XHJcbiAgICB9XHJcbiAgICBpZiAodG9wTGV2ZWxJbmZvLnN1YlF1ZXJ5ICYmICFpbmNsdWRlLnN1YlF1ZXJ5ICYmICFpbmNsdWRlLnBhcmVudC5zdWJRdWVyeSAmJiBpbmNsdWRlLnBhcmVudC5tb2RlbCAhPT0gdG9wTGV2ZWxJbmZvLm9wdGlvbnMubWFpbk1vZGVsKSB7XHJcbiAgICAgIGF0dHJTb3VyY2UgPSBhc3NvY2lhdGlvbi5zb3VyY2VLZXlGaWVsZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaWx0ZXIgc3RhdGVtZW50IGZvciBsZWZ0IHNpZGUgb2YgdGhyb3VnaFxyXG4gICAgLy8gVXNlZCBieSBib3RoIGpvaW4gYW5kIHN1YnF1ZXJ5IHdoZXJlXHJcbiAgICAvLyBJZiBwYXJlbnQgaW5jbHVkZSB3YXMgaW4gYSBzdWJxdWVyeSBuZWVkIHRvIGpvaW4gb24gdGhlIGFsaWFzZWQgYXR0cmlidXRlXHJcbiAgICBpZiAodG9wTGV2ZWxJbmZvLnN1YlF1ZXJ5ICYmICFpbmNsdWRlLnN1YlF1ZXJ5ICYmIGluY2x1ZGUucGFyZW50LnN1YlF1ZXJ5ICYmICFwYXJlbnRJc1RvcCkge1xyXG4gICAgICAvLyBJZiB3ZSBhcmUgbWluaWZ5aW5nIGFsaWFzZXMgYW5kIG91ciBKT0lOIHRhcmdldCBoYXMgYmVlbiBtaW5pZmllZCwgd2UgbmVlZCB0byB1c2UgdGhlIGFsaWFzIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNvbHVtbiBuYW1lXHJcbiAgICAgIGNvbnN0IGpvaW5Tb3VyY2UgPSB0aGlzLl9nZXRBbGlhc0ZvckZpZWxkKHRhYmxlU291cmNlLCBgJHt0YWJsZVNvdXJjZX0uJHthdHRyU291cmNlfWAsIHRvcExldmVsSW5mby5vcHRpb25zKSB8fCBgJHt0YWJsZVNvdXJjZX0uJHthdHRyU291cmNlfWA7XHJcblxyXG4gICAgICBzb3VyY2VKb2luT24gPSBgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihqb2luU291cmNlKX0gPSBgO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gSWYgd2UgYXJlIG1pbmlmeWluZyBhbGlhc2VzIGFuZCBvdXIgSk9JTiB0YXJnZXQgaGFzIGJlZW4gbWluaWZpZWQsIHdlIG5lZWQgdG8gdXNlIHRoZSBhbGlhcyBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjb2x1bW4gbmFtZVxyXG4gICAgICBjb25zdCBhbGlhc2VkU291cmNlID0gdGhpcy5fZ2V0QWxpYXNGb3JGaWVsZCh0YWJsZVNvdXJjZSwgYXR0clNvdXJjZSwgdG9wTGV2ZWxJbmZvLm9wdGlvbnMpIHx8IGF0dHJTb3VyY2U7XHJcblxyXG4gICAgICBzb3VyY2VKb2luT24gPSBgJHt0aGlzLnF1b3RlVGFibGUodGFibGVTb3VyY2UpfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKGFsaWFzZWRTb3VyY2UpfSA9IGA7XHJcbiAgICB9XHJcbiAgICBzb3VyY2VKb2luT24gKz0gYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIodGhyb3VnaEFzKX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcihpZGVudFNvdXJjZSl9YDtcclxuXHJcbiAgICAvLyBGaWx0ZXIgc3RhdGVtZW50IGZvciByaWdodCBzaWRlIG9mIHRocm91Z2hcclxuICAgIC8vIFVzZWQgYnkgYm90aCBqb2luIGFuZCBzdWJxdWVyeSB3aGVyZVxyXG4gICAgdGFyZ2V0Sm9pbk9uID0gYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIodGFibGVUYXJnZXQpfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHJUYXJnZXQpfSA9IGA7XHJcbiAgICB0YXJnZXRKb2luT24gKz0gYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIodGhyb3VnaEFzKX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcihpZGVudFRhcmdldCl9YDtcclxuXHJcbiAgICBpZiAodGhyb3VnaC53aGVyZSkge1xyXG4gICAgICB0aHJvdWdoV2hlcmUgPSB0aGlzLmdldFdoZXJlQ29uZGl0aW9ucyh0aHJvdWdoLndoZXJlLCB0aGlzLnNlcXVlbGl6ZS5saXRlcmFsKHRoaXMucXVvdGVJZGVudGlmaWVyKHRocm91Z2hBcykpLCB0aHJvdWdoLm1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5qb2luVGFibGVEZXBlbmRlbnQpIHtcclxuICAgICAgLy8gR2VuZXJhdGUgYSB3cmFwcGVkIGpvaW4gc28gdGhhdCB0aGUgdGhyb3VnaCB0YWJsZSBqb2luIGNhbiBiZSBkZXBlbmRlbnQgb24gdGhlIHRhcmdldCBqb2luXHJcbiAgICAgIGpvaW5Cb2R5ID0gYCggJHt0aGlzLnF1b3RlVGFibGUodGhyb3VnaFRhYmxlLCB0aHJvdWdoQXMpfSBJTk5FUiBKT0lOICR7dGhpcy5xdW90ZVRhYmxlKGluY2x1ZGUubW9kZWwuZ2V0VGFibGVOYW1lKCksIGluY2x1ZGVBcy5pbnRlcm5hbEFzKX0gT04gJHt0YXJnZXRKb2luT259YDtcclxuICAgICAgaWYgKHRocm91Z2hXaGVyZSkge1xyXG4gICAgICAgIGpvaW5Cb2R5ICs9IGAgQU5EICR7dGhyb3VnaFdoZXJlfWA7XHJcbiAgICAgIH1cclxuICAgICAgam9pbkJvZHkgKz0gJyknO1xyXG4gICAgICBqb2luQ29uZGl0aW9uID0gc291cmNlSm9pbk9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gR2VuZXJhdGUgam9pbiBTUUwgZm9yIGxlZnQgc2lkZSBvZiB0aHJvdWdoXHJcbiAgICAgIGpvaW5Cb2R5ID0gYCR7dGhpcy5xdW90ZVRhYmxlKHRocm91Z2hUYWJsZSwgdGhyb3VnaEFzKX0gT04gJHtzb3VyY2VKb2luT259ICR7am9pblR5cGV9ICR7dGhpcy5xdW90ZVRhYmxlKGluY2x1ZGUubW9kZWwuZ2V0VGFibGVOYW1lKCksIGluY2x1ZGVBcy5pbnRlcm5hbEFzKX1gO1xyXG4gICAgICBqb2luQ29uZGl0aW9uID0gdGFyZ2V0Sm9pbk9uO1xyXG4gICAgICBpZiAodGhyb3VnaFdoZXJlKSB7XHJcbiAgICAgICAgam9pbkNvbmRpdGlvbiArPSBgIEFORCAke3Rocm91Z2hXaGVyZX1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluY2x1ZGUud2hlcmUgfHwgaW5jbHVkZS50aHJvdWdoLndoZXJlKSB7XHJcbiAgICAgIGlmIChpbmNsdWRlLndoZXJlKSB7XHJcbiAgICAgICAgdGFyZ2V0V2hlcmUgPSB0aGlzLmdldFdoZXJlQ29uZGl0aW9ucyhpbmNsdWRlLndoZXJlLCB0aGlzLnNlcXVlbGl6ZS5saXRlcmFsKHRoaXMucXVvdGVJZGVudGlmaWVyKGluY2x1ZGVBcy5pbnRlcm5hbEFzKSksIGluY2x1ZGUubW9kZWwsIHRvcExldmVsSW5mby5vcHRpb25zKTtcclxuICAgICAgICBpZiAodGFyZ2V0V2hlcmUpIHtcclxuICAgICAgICAgIGpvaW5Db25kaXRpb24gKz0gYCBBTkQgJHt0YXJnZXRXaGVyZX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2dlbmVyYXRlU3ViUXVlcnlGaWx0ZXIoaW5jbHVkZSwgaW5jbHVkZUFzLCB0b3BMZXZlbEluZm8pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGpvaW46IGpvaW5UeXBlLFxyXG4gICAgICBib2R5OiBqb2luQm9keSxcclxuICAgICAgY29uZGl0aW9uOiBqb2luQ29uZGl0aW9uLFxyXG4gICAgICBhdHRyaWJ1dGVzXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBHZW5lcmF0ZXMgc3ViUXVlcnlGaWx0ZXIgLSBhIHNlbGVjdCBuZXN0ZWQgaW4gdGhlIHdoZXJlIGNsYXVzZSBvZiB0aGUgc3ViUXVlcnkuXHJcbiAgICogRm9yIGEgZ2l2ZW4gaW5jbHVkZSBhIHF1ZXJ5IGlzIGdlbmVyYXRlZCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgd2F5IGZyb20gdGhlIHN1YlF1ZXJ5XHJcbiAgICogdGFibGUgdG8gdGhlIGluY2x1ZGUgdGFibGUgcGx1cyBldmVyeXRoaW5nIHRoYXQncyBpbiByZXF1aXJlZCB0cmFuc2l0aXZlIGNsb3N1cmUgb2YgdGhlXHJcbiAgICogZ2l2ZW4gaW5jbHVkZS5cclxuICAgKi9cclxuICBfZ2VuZXJhdGVTdWJRdWVyeUZpbHRlcihpbmNsdWRlLCBpbmNsdWRlQXMsIHRvcExldmVsSW5mbykge1xyXG4gICAgaWYgKCF0b3BMZXZlbEluZm8uc3ViUXVlcnkgfHwgIWluY2x1ZGUuc3ViUXVlcnlGaWx0ZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdG9wTGV2ZWxJbmZvLm9wdGlvbnMud2hlcmUpIHtcclxuICAgICAgdG9wTGV2ZWxJbmZvLm9wdGlvbnMud2hlcmUgPSB7fTtcclxuICAgIH1cclxuICAgIGxldCBwYXJlbnQgPSBpbmNsdWRlO1xyXG4gICAgbGV0IGNoaWxkID0gaW5jbHVkZTtcclxuICAgIGxldCBuZXN0ZWRJbmNsdWRlcyA9IHRoaXMuX2dldFJlcXVpcmVkQ2xvc3VyZShpbmNsdWRlKS5pbmNsdWRlO1xyXG4gICAgbGV0IHF1ZXJ5O1xyXG5cclxuICAgIHdoaWxlICgocGFyZW50ID0gcGFyZW50LnBhcmVudCkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxyXG4gICAgICBpZiAocGFyZW50LnBhcmVudCAmJiAhcGFyZW50LnJlcXVpcmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBvbmx5IGdlbmVyYXRlIHN1YlF1ZXJ5RmlsdGVyIGlmIGFsbCB0aGUgcGFyZW50cyBvZiB0aGlzIGluY2x1ZGUgYXJlIHJlcXVpcmVkXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwYXJlbnQuc3ViUXVlcnlGaWx0ZXIpIHtcclxuICAgICAgICAvLyB0aGUgaW5jbHVkZSBpcyBhbHJlYWR5IGhhbmRsZWQgYXMgdGhpcyBwYXJlbnQgaGFzIHRoZSBpbmNsdWRlIG9uIGl0cyByZXF1aXJlZCBjbG9zdXJlXHJcbiAgICAgICAgLy8gc2tpcCB0byBwcmV2ZW50IGR1cGxpY2F0ZSBzdWJRdWVyeUZpbHRlclxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgbmVzdGVkSW5jbHVkZXMgPSBbT2JqZWN0LmFzc2lnbih7fSwgY2hpbGQsIHsgaW5jbHVkZTogbmVzdGVkSW5jbHVkZXMsIGF0dHJpYnV0ZXM6IFtdIH0pXTtcclxuICAgICAgY2hpbGQgPSBwYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdG9wSW5jbHVkZSA9IG5lc3RlZEluY2x1ZGVzWzBdO1xyXG4gICAgY29uc3QgdG9wUGFyZW50ID0gdG9wSW5jbHVkZS5wYXJlbnQ7XHJcbiAgICBjb25zdCB0b3BBc3NvY2lhdGlvbiA9IHRvcEluY2x1ZGUuYXNzb2NpYXRpb247XHJcbiAgICB0b3BJbmNsdWRlLmFzc29jaWF0aW9uID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmICh0b3BJbmNsdWRlLnRocm91Z2ggJiYgT2JqZWN0KHRvcEluY2x1ZGUudGhyb3VnaC5tb2RlbCkgPT09IHRvcEluY2x1ZGUudGhyb3VnaC5tb2RlbCkge1xyXG4gICAgICBxdWVyeSA9IHRoaXMuc2VsZWN0UXVlcnkodG9wSW5jbHVkZS50aHJvdWdoLm1vZGVsLmdldFRhYmxlTmFtZSgpLCB7XHJcbiAgICAgICAgYXR0cmlidXRlczogW3RvcEluY2x1ZGUudGhyb3VnaC5tb2RlbC5wcmltYXJ5S2V5RmllbGRdLFxyXG4gICAgICAgIGluY2x1ZGU6IE1vZGVsLl92YWxpZGF0ZUluY2x1ZGVkRWxlbWVudHMoe1xyXG4gICAgICAgICAgbW9kZWw6IHRvcEluY2x1ZGUudGhyb3VnaC5tb2RlbCxcclxuICAgICAgICAgIGluY2x1ZGU6IFt7XHJcbiAgICAgICAgICAgIGFzc29jaWF0aW9uOiB0b3BBc3NvY2lhdGlvbi50b1RhcmdldCxcclxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHdoZXJlOiB0b3BJbmNsdWRlLndoZXJlLFxyXG4gICAgICAgICAgICBpbmNsdWRlOiB0b3BJbmNsdWRlLmluY2x1ZGVcclxuICAgICAgICAgIH1dXHJcbiAgICAgICAgfSkuaW5jbHVkZSxcclxuICAgICAgICBtb2RlbDogdG9wSW5jbHVkZS50aHJvdWdoLm1vZGVsLFxyXG4gICAgICAgIHdoZXJlOiB7XHJcbiAgICAgICAgICBbT3AuYW5kXTogW1xyXG4gICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZS5saXRlcmFsKFtcclxuICAgICAgICAgICAgICBgJHt0aGlzLnF1b3RlVGFibGUodG9wUGFyZW50Lm1vZGVsLm5hbWUpfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKHRvcFBhcmVudC5tb2RlbC5wcmltYXJ5S2V5RmllbGQpfWAsXHJcbiAgICAgICAgICAgICAgYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIodG9wSW5jbHVkZS50aHJvdWdoLm1vZGVsLm5hbWUpfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKHRvcEFzc29jaWF0aW9uLmlkZW50aWZpZXJGaWVsZCl9YFxyXG4gICAgICAgICAgICBdLmpvaW4oJyA9ICcpKSxcclxuICAgICAgICAgICAgdG9wSW5jbHVkZS50aHJvdWdoLndoZXJlXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBsaW1pdDogMSxcclxuICAgICAgICBpbmNsdWRlSWdub3JlQXR0cmlidXRlczogZmFsc2VcclxuICAgICAgfSwgdG9wSW5jbHVkZS50aHJvdWdoLm1vZGVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGlzQmVsb25nc1RvID0gdG9wQXNzb2NpYXRpb24uYXNzb2NpYXRpb25UeXBlID09PSAnQmVsb25nc1RvJztcclxuICAgICAgY29uc3Qgc291cmNlRmllbGQgPSBpc0JlbG9uZ3NUbyA/IHRvcEFzc29jaWF0aW9uLmlkZW50aWZpZXJGaWVsZCA6IHRvcEFzc29jaWF0aW9uLnNvdXJjZUtleUZpZWxkIHx8IHRvcFBhcmVudC5tb2RlbC5wcmltYXJ5S2V5RmllbGQ7XHJcbiAgICAgIGNvbnN0IHRhcmdldEZpZWxkID0gaXNCZWxvbmdzVG8gPyB0b3BBc3NvY2lhdGlvbi5zb3VyY2VLZXlGaWVsZCB8fCB0b3BJbmNsdWRlLm1vZGVsLnByaW1hcnlLZXlGaWVsZCA6IHRvcEFzc29jaWF0aW9uLmlkZW50aWZpZXJGaWVsZDtcclxuXHJcbiAgICAgIGNvbnN0IGpvaW4gPSBbXHJcbiAgICAgICAgYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIodG9wSW5jbHVkZS5hcyl9LiR7dGhpcy5xdW90ZUlkZW50aWZpZXIodGFyZ2V0RmllbGQpfWAsXHJcbiAgICAgICAgYCR7dGhpcy5xdW90ZVRhYmxlKHRvcFBhcmVudC5hcyB8fCB0b3BQYXJlbnQubW9kZWwubmFtZSl9LiR7dGhpcy5xdW90ZUlkZW50aWZpZXIoc291cmNlRmllbGQpfWBcclxuICAgICAgXS5qb2luKCcgPSAnKTtcclxuXHJcbiAgICAgIHF1ZXJ5ID0gdGhpcy5zZWxlY3RRdWVyeSh0b3BJbmNsdWRlLm1vZGVsLmdldFRhYmxlTmFtZSgpLCB7XHJcbiAgICAgICAgYXR0cmlidXRlczogW3RhcmdldEZpZWxkXSxcclxuICAgICAgICBpbmNsdWRlOiBNb2RlbC5fdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzKHRvcEluY2x1ZGUpLmluY2x1ZGUsXHJcbiAgICAgICAgbW9kZWw6IHRvcEluY2x1ZGUubW9kZWwsXHJcbiAgICAgICAgd2hlcmU6IHtcclxuICAgICAgICAgIFtPcC5hbmRdOiBbXHJcbiAgICAgICAgICAgIHRvcEluY2x1ZGUud2hlcmUsXHJcbiAgICAgICAgICAgIHsgW09wLmpvaW5dOiB0aGlzLnNlcXVlbGl6ZS5saXRlcmFsKGpvaW4pIH1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGxpbWl0OiAxLFxyXG4gICAgICAgIHRhYmxlQXM6IHRvcEluY2x1ZGUuYXMsXHJcbiAgICAgICAgaW5jbHVkZUlnbm9yZUF0dHJpYnV0ZXM6IGZhbHNlXHJcbiAgICAgIH0sIHRvcEluY2x1ZGUubW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdG9wTGV2ZWxJbmZvLm9wdGlvbnMud2hlcmVbT3AuYW5kXSkge1xyXG4gICAgICB0b3BMZXZlbEluZm8ub3B0aW9ucy53aGVyZVtPcC5hbmRdID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdG9wTGV2ZWxJbmZvLm9wdGlvbnMud2hlcmVbYF9fJHtpbmNsdWRlQXMuaW50ZXJuYWxBc31gXSA9IHRoaXMuc2VxdWVsaXplLmxpdGVyYWwoW1xyXG4gICAgICAnKCcsXHJcbiAgICAgIHF1ZXJ5LnJlcGxhY2UoLzskLywgJycpLFxyXG4gICAgICAnKScsXHJcbiAgICAgICdJUyBOT1QgTlVMTCdcclxuICAgIF0uam9pbignICcpKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogRm9yIGEgZ2l2ZW4gaW5jbHVkZSBoaWVyYXJjaHkgY3JlYXRlcyBhIGNvcHkgb2YgaXQgd2hlcmUgb25seSB0aGUgcmVxdWlyZWQgaW5jbHVkZXNcclxuICAgKiBhcmUgcHJlc2VydmVkLlxyXG4gICAqL1xyXG4gIF9nZXRSZXF1aXJlZENsb3N1cmUoaW5jbHVkZSkge1xyXG4gICAgY29uc3QgY29weSA9IE9iamVjdC5hc3NpZ24oe30sIGluY2x1ZGUsIHsgYXR0cmlidXRlczogW10sIGluY2x1ZGU6IFtdIH0pO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGluY2x1ZGUuaW5jbHVkZSkpIHtcclxuICAgICAgY29weS5pbmNsdWRlID0gaW5jbHVkZS5pbmNsdWRlXHJcbiAgICAgICAgLmZpbHRlcihpID0+IGkucmVxdWlyZWQpXHJcbiAgICAgICAgLm1hcChpbmMgPT4gdGhpcy5fZ2V0UmVxdWlyZWRDbG9zdXJlKGluYykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb3B5O1xyXG4gIH1cclxuXHJcbiAgZ2V0UXVlcnlPcmRlcnMob3B0aW9ucywgbW9kZWwsIHN1YlF1ZXJ5KSB7XHJcbiAgICBjb25zdCBtYWluUXVlcnlPcmRlciA9IFtdO1xyXG4gICAgY29uc3Qgc3ViUXVlcnlPcmRlciA9IFtdO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMub3JkZXIpKSB7XHJcbiAgICAgIGZvciAobGV0IG9yZGVyIG9mIG9wdGlvbnMub3JkZXIpIHtcclxuXHJcbiAgICAgICAgLy8gd3JhcCBpZiBub3QgYXJyYXlcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3JkZXIpKSB7XHJcbiAgICAgICAgICBvcmRlciA9IFtvcmRlcl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBzdWJRdWVyeVxyXG4gICAgICAgICAgJiYgQXJyYXkuaXNBcnJheShvcmRlcilcclxuICAgICAgICAgICYmIG9yZGVyWzBdXHJcbiAgICAgICAgICAmJiAhKG9yZGVyWzBdIGluc3RhbmNlb2YgQXNzb2NpYXRpb24pXHJcbiAgICAgICAgICAmJiAhKHR5cGVvZiBvcmRlclswXSA9PT0gJ2Z1bmN0aW9uJyAmJiBvcmRlclswXS5wcm90b3R5cGUgaW5zdGFuY2VvZiBNb2RlbClcclxuICAgICAgICAgICYmICEodHlwZW9mIG9yZGVyWzBdLm1vZGVsID09PSAnZnVuY3Rpb24nICYmIG9yZGVyWzBdLm1vZGVsLnByb3RvdHlwZSBpbnN0YW5jZW9mIE1vZGVsKVxyXG4gICAgICAgICAgJiYgISh0eXBlb2Ygb3JkZXJbMF0gPT09ICdzdHJpbmcnICYmIG1vZGVsICYmIG1vZGVsLmFzc29jaWF0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG1vZGVsLmFzc29jaWF0aW9uc1tvcmRlclswXV0pXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBzdWJRdWVyeU9yZGVyLnB1c2godGhpcy5xdW90ZShvcmRlciwgbW9kZWwsICctPicpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdWJRdWVyeSkge1xyXG4gICAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlcmUgc3ViLXF1ZXJ5IHJlbmFtZXMgYXR0cmlidXRlIHdlIHdhbnQgdG8gb3JkZXIgYnksXHJcbiAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3NlcXVlbGl6ZS9zZXF1ZWxpemUvaXNzdWVzLzg3MzlcclxuICAgICAgICAgIGNvbnN0IHN1YlF1ZXJ5QXR0cmlidXRlID0gb3B0aW9ucy5hdHRyaWJ1dGVzLmZpbmQoYSA9PiBBcnJheS5pc0FycmF5KGEpICYmIGFbMF0gPT09IG9yZGVyWzBdICYmIGFbMV0pO1xyXG4gICAgICAgICAgaWYgKHN1YlF1ZXJ5QXR0cmlidXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRoaXMucXVvdGVJZGVudGlmaWVyKG1vZGVsLm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgb3JkZXJbMF0gPSBuZXcgVXRpbHMuQ29sKHRoaXMuX2dldEFsaWFzRm9yRmllbGQobW9kZWxOYW1lLCBzdWJRdWVyeUF0dHJpYnV0ZVsxXSwgb3B0aW9ucykgfHwgc3ViUXVlcnlBdHRyaWJ1dGVbMV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWFpblF1ZXJ5T3JkZXIucHVzaCh0aGlzLnF1b3RlKG9yZGVyLCBtb2RlbCwgJy0+JykpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMub3JkZXIgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcclxuICAgICAgY29uc3Qgc3FsID0gdGhpcy5xdW90ZShvcHRpb25zLm9yZGVyLCBtb2RlbCwgJy0+Jyk7XHJcbiAgICAgIGlmIChzdWJRdWVyeSkge1xyXG4gICAgICAgIHN1YlF1ZXJ5T3JkZXIucHVzaChzcWwpO1xyXG4gICAgICB9XHJcbiAgICAgIG1haW5RdWVyeU9yZGVyLnB1c2goc3FsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignT3JkZXIgbXVzdCBiZSB0eXBlIG9mIGFycmF5IG9yIGluc3RhbmNlIG9mIGEgdmFsaWQgc2VxdWVsaXplIG1ldGhvZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBtYWluUXVlcnlPcmRlciwgc3ViUXVlcnlPcmRlciB9O1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0RnJvbVRhYmxlRnJhZ21lbnQob3B0aW9ucywgbW9kZWwsIGF0dHJpYnV0ZXMsIHRhYmxlcywgbWFpblRhYmxlQXMpIHtcclxuICAgIGxldCBmcmFnbWVudCA9IGBTRUxFQ1QgJHthdHRyaWJ1dGVzLmpvaW4oJywgJyl9IEZST00gJHt0YWJsZXN9YDtcclxuXHJcbiAgICBpZiAobWFpblRhYmxlQXMpIHtcclxuICAgICAgZnJhZ21lbnQgKz0gYCBBUyAke21haW5UYWJsZUFzfWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuaW5kZXhIaW50cyAmJiB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluZGV4SGludHMpIHtcclxuICAgICAgZm9yIChjb25zdCBoaW50IG9mIG9wdGlvbnMuaW5kZXhIaW50cykge1xyXG4gICAgICAgIGlmIChJbmRleEhpbnRzW2hpbnQudHlwZV0pIHtcclxuICAgICAgICAgIGZyYWdtZW50ICs9IGAgJHtJbmRleEhpbnRzW2hpbnQudHlwZV19IElOREVYICgke2hpbnQudmFsdWVzLm1hcChpbmRleE5hbWUgPT4gdGhpcy5xdW90ZUlkZW50aWZpZXJzKGluZGV4TmFtZSkpLmpvaW4oJywnKX0pYDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnJhZ21lbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGFuIFNRTCBmcmFnbWVudCBmb3IgYWRkaW5nIHJlc3VsdCBjb25zdHJhaW50cy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBBbiBvYmplY3Qgd2l0aCBzZWxlY3RRdWVyeSBvcHRpb25zLlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICAgICAgVGhlIGdlbmVyYXRlZCBzcWwgcXVlcnkuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBhZGRMaW1pdEFuZE9mZnNldChvcHRpb25zKSB7XHJcbiAgICBsZXQgZnJhZ21lbnQgPSAnJztcclxuXHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgaWYgKG9wdGlvbnMub2Zmc2V0ICE9IG51bGwgJiYgb3B0aW9ucy5saW1pdCA9PSBudWxsKSB7XHJcbiAgICAgIGZyYWdtZW50ICs9ICcgTElNSVQgJyArIHRoaXMuZXNjYXBlKG9wdGlvbnMub2Zmc2V0KSArICcsICcgKyAxMDAwMDAwMDAwMDAwMDtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5saW1pdCAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLm9mZnNldCAhPSBudWxsKSB7XHJcbiAgICAgICAgZnJhZ21lbnQgKz0gJyBMSU1JVCAnICsgdGhpcy5lc2NhcGUob3B0aW9ucy5vZmZzZXQpICsgJywgJyArIHRoaXMuZXNjYXBlKG9wdGlvbnMubGltaXQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZyYWdtZW50ICs9ICcgTElNSVQgJyArIHRoaXMuZXNjYXBlKG9wdGlvbnMubGltaXQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiBlc2xpbnQtZW5hYmxlICovXHJcblxyXG4gICAgcmV0dXJuIGZyYWdtZW50O1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VxdWVsaXplTWV0aG9kKHNtdGgsIHRhYmxlTmFtZSwgZmFjdG9yeSwgb3B0aW9ucywgcHJlcGVuZCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuXHJcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuT3BlcmF0b3JNYXAsIHNtdGguY29tcGFyYXRvcikpIHtcclxuICAgICAgc210aC5jb21wYXJhdG9yID0gdGhpcy5PcGVyYXRvck1hcFtzbXRoLmNvbXBhcmF0b3JdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzbXRoIGluc3RhbmNlb2YgVXRpbHMuV2hlcmUpIHtcclxuICAgICAgbGV0IHZhbHVlID0gc210aC5sb2dpYztcclxuICAgICAgbGV0IGtleTtcclxuXHJcbiAgICAgIGlmIChzbXRoLmF0dHJpYnV0ZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCkge1xyXG4gICAgICAgIGtleSA9IHRoaXMuZ2V0V2hlcmVDb25kaXRpb25zKHNtdGguYXR0cmlidXRlLCB0YWJsZU5hbWUsIGZhY3RvcnksIG9wdGlvbnMsIHByZXBlbmQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGtleSA9IGAke3RoaXMucXVvdGVUYWJsZShzbXRoLmF0dHJpYnV0ZS5Nb2RlbC5uYW1lKX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcihzbXRoLmF0dHJpYnV0ZS5maWVsZCB8fCBzbXRoLmF0dHJpYnV0ZS5maWVsZE5hbWUpfWA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCkge1xyXG4gICAgICAgIHZhbHVlID0gdGhpcy5nZXRXaGVyZUNvbmRpdGlvbnModmFsdWUsIHRhYmxlTmFtZSwgZmFjdG9yeSwgb3B0aW9ucywgcHJlcGVuZCk7XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ05VTEwnKSB7XHJcbiAgICAgICAgICBpZiAoc210aC5jb21wYXJhdG9yID09PSAnPScpIHtcclxuICAgICAgICAgICAgc210aC5jb21wYXJhdG9yID0gJ0lTJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzbXRoLmNvbXBhcmF0b3IgPT09ICchPScpIHtcclxuICAgICAgICAgICAgc210aC5jb21wYXJhdG9yID0gJ0lTIE5PVCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW2tleSwgdmFsdWVdLmpvaW4oYCAke3NtdGguY29tcGFyYXRvcn0gYCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53aGVyZUl0ZW1RdWVyeShzbXRoLmF0dHJpYnV0ZSwgdmFsdWUsIHtcclxuICAgICAgICAgIG1vZGVsOiBmYWN0b3J5XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLmJvb2xlYW5WYWx1ZSh2YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLmVzY2FwZSh2YWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWx1ZSA9PT0gJ05VTEwnKSB7XHJcbiAgICAgICAgaWYgKHNtdGguY29tcGFyYXRvciA9PT0gJz0nKSB7XHJcbiAgICAgICAgICBzbXRoLmNvbXBhcmF0b3IgPSAnSVMnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc210aC5jb21wYXJhdG9yID09PSAnIT0nKSB7XHJcbiAgICAgICAgICBzbXRoLmNvbXBhcmF0b3IgPSAnSVMgTk9UJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBba2V5LCB2YWx1ZV0uam9pbihgICR7c210aC5jb21wYXJhdG9yfSBgKTtcclxuICAgIH1cclxuICAgIGlmIChzbXRoIGluc3RhbmNlb2YgVXRpbHMuTGl0ZXJhbCkge1xyXG4gICAgICByZXR1cm4gc210aC52YWw7XHJcbiAgICB9XHJcbiAgICBpZiAoc210aCBpbnN0YW5jZW9mIFV0aWxzLkNhc3QpIHtcclxuICAgICAgaWYgKHNtdGgudmFsIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5oYW5kbGVTZXF1ZWxpemVNZXRob2Qoc210aC52YWwsIHRhYmxlTmFtZSwgZmFjdG9yeSwgb3B0aW9ucywgcHJlcGVuZCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KHNtdGgudmFsKSkge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMud2hlcmVJdGVtc1F1ZXJ5KHNtdGgudmFsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSB0aGlzLmVzY2FwZShzbXRoLnZhbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBgQ0FTVCgke3Jlc3VsdH0gQVMgJHtzbXRoLnR5cGUudG9VcHBlckNhc2UoKX0pYDtcclxuICAgIH1cclxuICAgIGlmIChzbXRoIGluc3RhbmNlb2YgVXRpbHMuRm4pIHtcclxuICAgICAgcmV0dXJuIGAke3NtdGguZm59KCR7c210aC5hcmdzLm1hcChhcmcgPT4ge1xyXG4gICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNlcXVlbGl6ZU1ldGhvZChhcmcsIHRhYmxlTmFtZSwgZmFjdG9yeSwgb3B0aW9ucywgcHJlcGVuZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QoYXJnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2hlcmVJdGVtc1F1ZXJ5KGFyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmVzY2FwZShhcmcpO1xyXG4gICAgICB9KS5qb2luKCcsICcpfSlgO1xyXG4gICAgfVxyXG4gICAgaWYgKHNtdGggaW5zdGFuY2VvZiBVdGlscy5Db2wpIHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc210aC5jb2wpICYmICFmYWN0b3J5KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsbCBTZXF1ZWxpemUuY29sKCkgd2l0aCBhcnJheSBvdXRzaWRlIG9mIG9yZGVyIC8gZ3JvdXAgY2xhdXNlJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNtdGguY29sLnN0YXJ0c1dpdGgoJyonKSkge1xyXG4gICAgICAgIHJldHVybiAnKic7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMucXVvdGUoc210aC5jb2wsIGZhY3RvcnkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNtdGgudG9TdHJpbmcodGhpcywgZmFjdG9yeSk7XHJcbiAgfVxyXG5cclxuICB3aGVyZVF1ZXJ5KHdoZXJlLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMud2hlcmVJdGVtc1F1ZXJ5KHdoZXJlLCBvcHRpb25zKTtcclxuICAgIGlmIChxdWVyeSAmJiBxdWVyeS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGBXSEVSRSAke3F1ZXJ5fWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICB3aGVyZUl0ZW1zUXVlcnkod2hlcmUsIG9wdGlvbnMsIGJpbmRpbmcpIHtcclxuICAgIGlmIChcclxuICAgICAgd2hlcmUgPT09IG51bGwgfHxcclxuICAgICAgd2hlcmUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICBVdGlscy5nZXRDb21wbGV4U2l6ZSh3aGVyZSkgPT09IDBcclxuICAgICkge1xyXG4gICAgICAvLyBOTyBPUFxyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB3aGVyZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciBge3doZXJlOiBcXCdyYXcgcXVlcnlcXCd9YCBoYXMgYmVlbiByZW1vdmVkLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGl0ZW1zID0gW107XHJcblxyXG4gICAgYmluZGluZyA9IGJpbmRpbmcgfHwgJ0FORCc7XHJcbiAgICBpZiAoYmluZGluZ1swXSAhPT0gJyAnKSBiaW5kaW5nID0gYCAke2JpbmRpbmd9IGA7XHJcblxyXG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdCh3aGVyZSkpIHtcclxuICAgICAgVXRpbHMuZ2V0Q29tcGxleEtleXMod2hlcmUpLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHdoZXJlW3Byb3BdO1xyXG4gICAgICAgIGl0ZW1zLnB1c2godGhpcy53aGVyZUl0ZW1RdWVyeShwcm9wLCBpdGVtLCBvcHRpb25zKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbXMucHVzaCh0aGlzLndoZXJlSXRlbVF1ZXJ5KHVuZGVmaW5lZCwgd2hlcmUsIG9wdGlvbnMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoICYmIGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0gJiYgaXRlbS5sZW5ndGgpLmpvaW4oYmluZGluZykgfHwgJyc7XHJcbiAgfVxyXG5cclxuICB3aGVyZUl0ZW1RdWVyeShrZXksIHZhbHVlLCBvcHRpb25zID0ge30pIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV0hFUkUgcGFyYW1ldGVyIFwiJHtrZXl9XCIgaGFzIGludmFsaWQgXCJ1bmRlZmluZWRcIiB2YWx1ZWApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkuaW5jbHVkZXMoJy4nKSAmJiBvcHRpb25zLm1vZGVsKSB7XHJcbiAgICAgIGNvbnN0IGtleVBhcnRzID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICAgIGlmIChvcHRpb25zLm1vZGVsLnJhd0F0dHJpYnV0ZXNba2V5UGFydHNbMF1dICYmIG9wdGlvbnMubW9kZWwucmF3QXR0cmlidXRlc1trZXlQYXJ0c1swXV0udHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5KU09OKSB7XHJcbiAgICAgICAgY29uc3QgdG1wID0ge307XHJcbiAgICAgICAgY29uc3QgZmllbGQgPSBvcHRpb25zLm1vZGVsLnJhd0F0dHJpYnV0ZXNba2V5UGFydHNbMF1dO1xyXG4gICAgICAgIF8uc2V0KHRtcCwga2V5UGFydHMuc2xpY2UoMSksIHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy53aGVyZUl0ZW1RdWVyeShmaWVsZC5maWVsZCB8fCBrZXlQYXJ0c1swXSwgdG1wLCBPYmplY3QuYXNzaWduKHsgZmllbGQgfSwgb3B0aW9ucykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLl9maW5kRmllbGQoa2V5LCBvcHRpb25zKTtcclxuICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkICYmIGZpZWxkLnR5cGUgfHwgb3B0aW9ucy50eXBlO1xyXG5cclxuICAgIGNvbnN0IGlzUGxhaW5PYmplY3QgPSBfLmlzUGxhaW5PYmplY3QodmFsdWUpO1xyXG4gICAgY29uc3QgaXNBcnJheSA9ICFpc1BsYWluT2JqZWN0ICYmIEFycmF5LmlzQXJyYXkodmFsdWUpO1xyXG4gICAga2V5ID0gdGhpcy5PcGVyYXRvcnNBbGlhc01hcCAmJiB0aGlzLk9wZXJhdG9yc0FsaWFzTWFwW2tleV0gfHwga2V5O1xyXG4gICAgaWYgKGlzUGxhaW5PYmplY3QpIHtcclxuICAgICAgdmFsdWUgPSB0aGlzLl9yZXBsYWNlQWxpYXNlcyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YWx1ZUtleXMgPSBpc1BsYWluT2JqZWN0ICYmIFV0aWxzLmdldENvbXBsZXhLZXlzKHZhbHVlKTtcclxuXHJcbiAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0ICYmIHZhbHVlS2V5cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53aGVyZUl0ZW1RdWVyeSh2YWx1ZUtleXNbMF0sIHZhbHVlW3ZhbHVlS2V5c1swXV0sIG9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IG9wVmFsdWUgPSBvcHRpb25zLmJpbmRQYXJhbSA/ICdOVUxMJyA6IHRoaXMuZXNjYXBlKHZhbHVlLCBmaWVsZCk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCBvcFZhbHVlLCB0aGlzLk9wZXJhdG9yTWFwW09wLmlzXSwgb3B0aW9ucy5wcmVmaXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgY29uc3Qgb3BWYWx1ZSA9IG9wdGlvbnMuYmluZFBhcmFtID8gdGhpcy5mb3JtYXQodmFsdWUsIGZpZWxkLCBvcHRpb25zLCBvcHRpb25zLmJpbmRQYXJhbSkgOiB0aGlzLmVzY2FwZSh2YWx1ZSwgZmllbGQpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgb3BWYWx1ZSwgdGhpcy5PcGVyYXRvck1hcFtPcC5lcV0sIG9wdGlvbnMucHJlZml4KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QgJiYgIShrZXkgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLkZuKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXF1ZWxpemVNZXRob2QodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbnZlcnQgd2hlcmU6IFtdIHRvIE9wLmFuZCBpZiBwb3NzaWJsZSwgZWxzZSB0cmVhdCBhcyBsaXRlcmFsL3JlcGxhY2VtZW50c1xyXG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkICYmIGlzQXJyYXkpIHtcclxuICAgICAgaWYgKFV0aWxzLmNhblRyZWF0QXJyYXlBc0FuZCh2YWx1ZSkpIHtcclxuICAgICAgICBrZXkgPSBPcC5hbmQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciBsaXRlcmFsIHJlcGxhY2VtZW50cyBpbiB0aGUgYHdoZXJlYCBvYmplY3QgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChrZXkgPT09IE9wLm9yIHx8IGtleSA9PT0gT3AuYW5kIHx8IGtleSA9PT0gT3Aubm90KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl93aGVyZUdyb3VwQmluZChrZXksIHZhbHVlLCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHZhbHVlW09wLm9yXSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fd2hlcmVCaW5kKHRoaXMuT3BlcmF0b3JNYXBbT3Aub3JdLCBrZXksIHZhbHVlW09wLm9yXSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlW09wLmFuZF0pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3doZXJlQmluZCh0aGlzLk9wZXJhdG9yTWFwW09wLmFuZF0sIGtleSwgdmFsdWVbT3AuYW5kXSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzQXJyYXkgJiYgZmllbGRUeXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLkFSUkFZKSB7XHJcbiAgICAgIGNvbnN0IG9wVmFsdWUgPSBvcHRpb25zLmJpbmRQYXJhbSA/IHRoaXMuZm9ybWF0KHZhbHVlLCBmaWVsZCwgb3B0aW9ucywgb3B0aW9ucy5iaW5kUGFyYW0pIDogdGhpcy5lc2NhcGUodmFsdWUsIGZpZWxkKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIG9wVmFsdWUsIHRoaXMuT3BlcmF0b3JNYXBbT3AuZXFdLCBvcHRpb25zLnByZWZpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzUGxhaW5PYmplY3QgJiYgZmllbGRUeXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLkpTT04gJiYgb3B0aW9ucy5qc29uICE9PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fd2hlcmVKU09OKGtleSwgdmFsdWUsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgLy8gSWYgbXVsdGlwbGUga2V5cyB3ZSBjb21iaW5lIHRoZSBkaWZmZXJlbnQgbG9naWMgY29uZGl0aW9uc1xyXG4gICAgaWYgKGlzUGxhaW5PYmplY3QgJiYgdmFsdWVLZXlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3doZXJlQmluZCh0aGlzLk9wZXJhdG9yTWFwW09wLmFuZF0sIGtleSwgdmFsdWUsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0FycmF5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl93aGVyZVBhcnNlU2luZ2xlVmFsdWVPYmplY3Qoa2V5LCBmaWVsZCwgT3AuaW4sIHZhbHVlLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIGlmIChpc1BsYWluT2JqZWN0KSB7XHJcbiAgICAgIGlmICh0aGlzLk9wZXJhdG9yTWFwW3ZhbHVlS2V5c1swXV0pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2hlcmVQYXJzZVNpbmdsZVZhbHVlT2JqZWN0KGtleSwgZmllbGQsIHZhbHVlS2V5c1swXSwgdmFsdWVbdmFsdWVLZXlzWzBdXSwgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuX3doZXJlUGFyc2VTaW5nbGVWYWx1ZU9iamVjdChrZXksIGZpZWxkLCB0aGlzLk9wZXJhdG9yTWFwW09wLmVxXSwgdmFsdWUsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrZXkgPT09IE9wLnBsYWNlaG9sZGVyKSB7XHJcbiAgICAgIGNvbnN0IG9wVmFsdWUgPSBvcHRpb25zLmJpbmRQYXJhbSA/IHRoaXMuZm9ybWF0KHZhbHVlLCBmaWVsZCwgb3B0aW9ucywgb3B0aW9ucy5iaW5kUGFyYW0pIDogdGhpcy5lc2NhcGUodmFsdWUsIGZpZWxkKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZSh0aGlzLk9wZXJhdG9yTWFwW2tleV0sIG9wVmFsdWUsIHRoaXMuT3BlcmF0b3JNYXBbT3AuZXFdLCBvcHRpb25zLnByZWZpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3BWYWx1ZSA9IG9wdGlvbnMuYmluZFBhcmFtID8gdGhpcy5mb3JtYXQodmFsdWUsIGZpZWxkLCBvcHRpb25zLCBvcHRpb25zLmJpbmRQYXJhbSkgOiB0aGlzLmVzY2FwZSh2YWx1ZSwgZmllbGQpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIG9wVmFsdWUsIHRoaXMuT3BlcmF0b3JNYXBbT3AuZXFdLCBvcHRpb25zLnByZWZpeCk7XHJcbiAgfVxyXG5cclxuICBfZmluZEZpZWxkKGtleSwgb3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMuZmllbGQpIHtcclxuICAgICAgcmV0dXJuIG9wdGlvbnMuZmllbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5yYXdBdHRyaWJ1dGVzICYmIG9wdGlvbnMubW9kZWwucmF3QXR0cmlidXRlc1trZXldKSB7XHJcbiAgICAgIHJldHVybiBvcHRpb25zLm1vZGVsLnJhd0F0dHJpYnV0ZXNba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLmZpZWxkUmF3QXR0cmlidXRlc01hcCAmJiBvcHRpb25zLm1vZGVsLmZpZWxkUmF3QXR0cmlidXRlc01hcFtrZXldKSB7XHJcbiAgICAgIHJldHVybiBvcHRpb25zLm1vZGVsLmZpZWxkUmF3QXR0cmlidXRlc01hcFtrZXldO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gT1IvQU5EL05PVCBncm91cGluZyBsb2dpY1xyXG4gIF93aGVyZUdyb3VwQmluZChrZXksIHZhbHVlLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBiaW5kaW5nID0ga2V5ID09PSBPcC5vciA/IHRoaXMuT3BlcmF0b3JNYXBbT3Aub3JdIDogdGhpcy5PcGVyYXRvck1hcFtPcC5hbmRdO1xyXG4gICAgY29uc3Qgb3V0ZXJCaW5kaW5nID0ga2V5ID09PSBPcC5ub3QgPyAnTk9UICcgOiAnJztcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgbGV0IGl0ZW1RdWVyeSA9IHRoaXMud2hlcmVJdGVtc1F1ZXJ5KGl0ZW0sIG9wdGlvbnMsIHRoaXMuT3BlcmF0b3JNYXBbT3AuYW5kXSk7XHJcbiAgICAgICAgaWYgKGl0ZW1RdWVyeSAmJiBpdGVtUXVlcnkubGVuZ3RoICYmIChBcnJheS5pc0FycmF5KGl0ZW0pIHx8IF8uaXNQbGFpbk9iamVjdChpdGVtKSkgJiYgVXRpbHMuZ2V0Q29tcGxleFNpemUoaXRlbSkgPiAxKSB7XHJcbiAgICAgICAgICBpdGVtUXVlcnkgPSBgKCR7aXRlbVF1ZXJ5fSlgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbVF1ZXJ5O1xyXG4gICAgICB9KS5maWx0ZXIoaXRlbSA9PiBpdGVtICYmIGl0ZW0ubGVuZ3RoKTtcclxuXHJcbiAgICAgIHZhbHVlID0gdmFsdWUubGVuZ3RoICYmIHZhbHVlLmpvaW4oYmluZGluZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMud2hlcmVJdGVtc1F1ZXJ5KHZhbHVlLCBvcHRpb25zLCBiaW5kaW5nKTtcclxuICAgIH1cclxuICAgIC8vIE9wLm9yOiBbXSBzaG91bGQgcmV0dXJuIG5vIGRhdGEuXHJcbiAgICAvLyBPcC5ub3Qgb2Ygbm8gcmVzdHJpY3Rpb24gc2hvdWxkIGFsc28gcmV0dXJuIG5vIGRhdGFcclxuICAgIGlmICgoa2V5ID09PSBPcC5vciB8fCBrZXkgPT09IE9wLm5vdCkgJiYgIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybiAnMCA9IDEnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZSA/IGAke291dGVyQmluZGluZ30oJHt2YWx1ZX0pYCA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIF93aGVyZUJpbmQoYmluZGluZywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcclxuICAgICAgdmFsdWUgPSBVdGlscy5nZXRDb21wbGV4S2V5cyh2YWx1ZSkubWFwKHByb3AgPT4ge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZVtwcm9wXTtcclxuICAgICAgICByZXR1cm4gdGhpcy53aGVyZUl0ZW1RdWVyeShrZXksIHsgW3Byb3BdOiBpdGVtIH0sIG9wdGlvbnMpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhbHVlID0gdmFsdWUubWFwKGl0ZW0gPT4gdGhpcy53aGVyZUl0ZW1RdWVyeShrZXksIGl0ZW0sIG9wdGlvbnMpKTtcclxuICAgIH1cclxuXHJcbiAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcihpdGVtID0+IGl0ZW0gJiYgaXRlbS5sZW5ndGgpO1xyXG5cclxuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPyBgKCR7dmFsdWUuam9pbihiaW5kaW5nKX0pYCA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIF93aGVyZUpTT04oa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgY29uc3QgaXRlbXMgPSBbXTtcclxuICAgIGxldCBiYXNlS2V5ID0gdGhpcy5xdW90ZUlkZW50aWZpZXIoa2V5KTtcclxuICAgIGlmIChvcHRpb25zLnByZWZpeCkge1xyXG4gICAgICBpZiAob3B0aW9ucy5wcmVmaXggaW5zdGFuY2VvZiBVdGlscy5MaXRlcmFsKSB7XHJcbiAgICAgICAgYmFzZUtleSA9IGAke3RoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKG9wdGlvbnMucHJlZml4KX0uJHtiYXNlS2V5fWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFzZUtleSA9IGAke3RoaXMucXVvdGVUYWJsZShvcHRpb25zLnByZWZpeCl9LiR7YmFzZUtleX1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgVXRpbHMuZ2V0T3BlcmF0b3JzKHZhbHVlKS5mb3JFYWNoKG9wID0+IHtcclxuICAgICAgY29uc3Qgd2hlcmUgPSB7XHJcbiAgICAgICAgW29wXTogdmFsdWVbb3BdXHJcbiAgICAgIH07XHJcbiAgICAgIGl0ZW1zLnB1c2godGhpcy53aGVyZUl0ZW1RdWVyeShrZXksIHdoZXJlLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7IGpzb246IGZhbHNlIH0pKSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBfLmZvck93bih2YWx1ZSwgKGl0ZW0sIHByb3ApID0+IHtcclxuICAgICAgdGhpcy5fdHJhdmVyc2VKU09OKGl0ZW1zLCBiYXNlS2V5LCBwcm9wLCBpdGVtLCBbcHJvcF0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gaXRlbXMuam9pbih0aGlzLk9wZXJhdG9yTWFwW09wLmFuZF0pO1xyXG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDEgPyBgKCR7cmVzdWx0fSlgIDogcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgX3RyYXZlcnNlSlNPTihpdGVtcywgYmFzZUtleSwgcHJvcCwgaXRlbSwgcGF0aCkge1xyXG4gICAgbGV0IGNhc3Q7XHJcblxyXG4gICAgaWYgKHBhdGhbcGF0aC5sZW5ndGggLSAxXS5pbmNsdWRlcygnOjonKSkge1xyXG4gICAgICBjb25zdCB0bXAgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV0uc3BsaXQoJzo6Jyk7XHJcbiAgICAgIGNhc3QgPSB0bXBbMV07XHJcbiAgICAgIHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9IHRtcFswXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXRoS2V5ID0gdGhpcy5qc29uUGF0aEV4dHJhY3Rpb25RdWVyeShiYXNlS2V5LCBwYXRoKTtcclxuXHJcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGl0ZW0pKSB7XHJcbiAgICAgIFV0aWxzLmdldE9wZXJhdG9ycyhpdGVtKS5mb3JFYWNoKG9wID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3RvSlNPTlZhbHVlKGl0ZW1bb3BdKTtcclxuICAgICAgICBpdGVtcy5wdXNoKHRoaXMud2hlcmVJdGVtUXVlcnkodGhpcy5fY2FzdEtleShwYXRoS2V5LCB2YWx1ZSwgY2FzdCksIHsgW29wXTogdmFsdWUgfSkpO1xyXG4gICAgICB9KTtcclxuICAgICAgXy5mb3JPd24oaXRlbSwgKHZhbHVlLCBpdGVtUHJvcCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYXZlcnNlSlNPTihpdGVtcywgYmFzZUtleSwgaXRlbVByb3AsIHZhbHVlLCBwYXRoLmNvbmNhdChbaXRlbVByb3BdKSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGl0ZW0gPSB0aGlzLl90b0pTT05WYWx1ZShpdGVtKTtcclxuICAgIGl0ZW1zLnB1c2godGhpcy53aGVyZUl0ZW1RdWVyeSh0aGlzLl9jYXN0S2V5KHBhdGhLZXksIGl0ZW0sIGNhc3QpLCB7IFtPcC5lcV06IGl0ZW0gfSkpO1xyXG4gIH1cclxuXHJcbiAgX3RvSlNPTlZhbHVlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBfY2FzdEtleShrZXksIHZhbHVlLCBjYXN0LCBqc29uKSB7XHJcbiAgICBjYXN0ID0gY2FzdCB8fCB0aGlzLl9nZXRKc29uQ2FzdChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWUpO1xyXG4gICAgaWYgKGNhc3QpIHtcclxuICAgICAgcmV0dXJuIG5ldyBVdGlscy5MaXRlcmFsKHRoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKG5ldyBVdGlscy5DYXN0KG5ldyBVdGlscy5MaXRlcmFsKGtleSksIGNhc3QsIGpzb24pKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBVdGlscy5MaXRlcmFsKGtleSk7XHJcbiAgfVxyXG5cclxuICBfZ2V0SnNvbkNhc3QodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiAnZG91YmxlIHByZWNpc2lvbic7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHJldHVybiAndGltZXN0YW1wdHonO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiAnYm9vbGVhbic7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBfam9pbktleVZhbHVlKGtleSwgdmFsdWUsIGNvbXBhcmF0b3IsIHByZWZpeCkge1xyXG4gICAgaWYgKCFrZXkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXBhcmF0b3IgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5fSBhbmQgJHt2YWx1ZX0gaGFzIG5vIGNvbXBhcmF0b3JgKTtcclxuICAgIH1cclxuICAgIGtleSA9IHRoaXMuX2dldFNhZmVLZXkoa2V5LCBwcmVmaXgpO1xyXG4gICAgcmV0dXJuIFtrZXksIHZhbHVlXS5qb2luKGAgJHtjb21wYXJhdG9yfSBgKTtcclxuICB9XHJcblxyXG4gIF9nZXRTYWZlS2V5KGtleSwgcHJlZml4KSB7XHJcbiAgICBpZiAoa2V5IGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7XHJcbiAgICAgIGtleSA9IHRoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKGtleSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9wcmVmaXhLZXkodGhpcy5oYW5kbGVTZXF1ZWxpemVNZXRob2Qoa2V5KSwgcHJlZml4KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoVXRpbHMuaXNDb2xTdHJpbmcoa2V5KSkge1xyXG4gICAgICBrZXkgPSBrZXkuc3Vic3RyKDEsIGtleS5sZW5ndGggLSAyKS5zcGxpdCgnLicpO1xyXG5cclxuICAgICAgaWYgKGtleS5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAga2V5ID0gW1xyXG4gICAgICAgICAgLy8gam9pbiB0aGUgdGFibGVzIGJ5IC0+IHRvIG1hdGNoIG91dCBpbnRlcm5hbCBuYW1pbmdzXHJcbiAgICAgICAgICBrZXkuc2xpY2UoMCwgLTEpLmpvaW4oJy0+JyksXHJcbiAgICAgICAgICBrZXlba2V5Lmxlbmd0aCAtIDFdXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGtleS5tYXAoaWRlbnRpZmllciA9PiB0aGlzLnF1b3RlSWRlbnRpZmllcihpZGVudGlmaWVyKSkuam9pbignLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcmVmaXhLZXkodGhpcy5xdW90ZUlkZW50aWZpZXIoa2V5KSwgcHJlZml4KTtcclxuICB9XHJcblxyXG4gIF9wcmVmaXhLZXkoa2V5LCBwcmVmaXgpIHtcclxuICAgIGlmIChwcmVmaXgpIHtcclxuICAgICAgaWYgKHByZWZpeCBpbnN0YW5jZW9mIFV0aWxzLkxpdGVyYWwpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKHByZWZpeCksIGtleV0uam9pbignLicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gW3RoaXMucXVvdGVUYWJsZShwcmVmaXgpLCBrZXldLmpvaW4oJy4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5O1xyXG4gIH1cclxuXHJcbiAgX3doZXJlUGFyc2VTaW5nbGVWYWx1ZU9iamVjdChrZXksIGZpZWxkLCBwcm9wLCB2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgaWYgKHByb3AgPT09IE9wLm5vdCkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICBwcm9wID0gT3Aubm90SW47XHJcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHRydWUgJiYgdmFsdWUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgcHJvcCA9IE9wLm5lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbXBhcmF0b3IgPSB0aGlzLk9wZXJhdG9yTWFwW3Byb3BdIHx8IHRoaXMuT3BlcmF0b3JNYXBbT3AuZXFdO1xyXG5cclxuICAgIHN3aXRjaCAocHJvcCkge1xyXG4gICAgICBjYXNlIE9wLmluOlxyXG4gICAgICBjYXNlIE9wLm5vdEluOlxyXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLkxpdGVyYWwpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCB2YWx1ZS52YWwsIGNvbXBhcmF0b3IsIG9wdGlvbnMucHJlZml4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCBgKCR7dmFsdWUubWFwKGl0ZW0gPT4gdGhpcy5lc2NhcGUoaXRlbSwgZmllbGQpKS5qb2luKCcsICcpfSlgLCBjb21wYXJhdG9yLCBvcHRpb25zLnByZWZpeCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29tcGFyYXRvciA9PT0gdGhpcy5PcGVyYXRvck1hcFtPcC5pbl0pIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCAnKE5VTEwpJywgY29tcGFyYXRvciwgb3B0aW9ucy5wcmVmaXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICBjYXNlIE9wLmFueTpcclxuICAgICAgY2FzZSBPcC5hbGw6XHJcbiAgICAgICAgY29tcGFyYXRvciA9IGAke3RoaXMuT3BlcmF0b3JNYXBbT3AuZXFdfSAke2NvbXBhcmF0b3J9YDtcclxuICAgICAgICBpZiAodmFsdWVbT3AudmFsdWVzXSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIGAoVkFMVUVTICR7dmFsdWVbT3AudmFsdWVzXS5tYXAoaXRlbSA9PiBgKCR7dGhpcy5lc2NhcGUoaXRlbSl9KWApLmpvaW4oJywgJyl9KWAsIGNvbXBhcmF0b3IsIG9wdGlvbnMucHJlZml4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCBgKCR7dGhpcy5lc2NhcGUodmFsdWUsIGZpZWxkKX0pYCwgY29tcGFyYXRvciwgb3B0aW9ucy5wcmVmaXgpO1xyXG4gICAgICBjYXNlIE9wLmJldHdlZW46XHJcbiAgICAgIGNhc2UgT3Aubm90QmV0d2VlbjpcclxuICAgICAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgYCR7dGhpcy5lc2NhcGUodmFsdWVbMF0sIGZpZWxkKX0gQU5EICR7dGhpcy5lc2NhcGUodmFsdWVbMV0sIGZpZWxkKX1gLCBjb21wYXJhdG9yLCBvcHRpb25zLnByZWZpeCk7XHJcbiAgICAgIGNhc2UgT3AucmF3OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGAkcmF3YCB3aGVyZSBwcm9wZXJ0eSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgVXNlIGBzZXF1ZWxpemUubGl0ZXJhbGAgaW5zdGVhZC4nKTtcclxuICAgICAgY2FzZSBPcC5jb2w6XHJcbiAgICAgICAgY29tcGFyYXRvciA9IHRoaXMuT3BlcmF0b3JNYXBbT3AuZXFdO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJy4nKTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgIHZhbHVlID0gW1xyXG4gICAgICAgICAgICAvLyBqb2luIHRoZSB0YWJsZXMgYnkgLT4gdG8gbWF0Y2ggb3V0IGludGVybmFsIG5hbWluZ3NcclxuICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgLTEpLmpvaW4oJy0+JyksXHJcbiAgICAgICAgICAgIHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIHZhbHVlLm1hcChpZGVudGlmaWVyID0+IHRoaXMucXVvdGVJZGVudGlmaWVyKGlkZW50aWZpZXIpKS5qb2luKCcuJyksIGNvbXBhcmF0b3IsIG9wdGlvbnMucHJlZml4KTtcclxuICAgICAgY2FzZSBPcC5zdGFydHNXaXRoOlxyXG4gICAgICAgIGNvbXBhcmF0b3IgPSB0aGlzLk9wZXJhdG9yTWFwW09wLmxpa2VdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCB0aGlzLmVzY2FwZShgJHt2YWx1ZX0lYCksIGNvbXBhcmF0b3IsIG9wdGlvbnMucHJlZml4KTtcclxuICAgICAgY2FzZSBPcC5lbmRzV2l0aDpcclxuICAgICAgICBjb21wYXJhdG9yID0gdGhpcy5PcGVyYXRvck1hcFtPcC5saWtlXTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgdGhpcy5lc2NhcGUoYCUke3ZhbHVlfWApLCBjb21wYXJhdG9yLCBvcHRpb25zLnByZWZpeCk7XHJcbiAgICAgIGNhc2UgT3Auc3Vic3RyaW5nOlxyXG4gICAgICAgIGNvbXBhcmF0b3IgPSB0aGlzLk9wZXJhdG9yTWFwW09wLmxpa2VdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCB0aGlzLmVzY2FwZShgJSR7dmFsdWV9JWApLCBjb21wYXJhdG9yLCBvcHRpb25zLnByZWZpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXNjYXBlT3B0aW9ucyA9IHtcclxuICAgICAgYWNjZXB0U3RyaW5nczogY29tcGFyYXRvci5pbmNsdWRlcyh0aGlzLk9wZXJhdG9yTWFwW09wLmxpa2VdKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICBpZiAodmFsdWVbT3AuY29sXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCB0aGlzLndoZXJlSXRlbVF1ZXJ5KG51bGwsIHZhbHVlKSwgY29tcGFyYXRvciwgb3B0aW9ucy5wcmVmaXgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh2YWx1ZVtPcC5hbnldKSB7XHJcbiAgICAgICAgZXNjYXBlT3B0aW9ucy5pc0xpc3QgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCBgKCR7dGhpcy5lc2NhcGUodmFsdWVbT3AuYW55XSwgZmllbGQsIGVzY2FwZU9wdGlvbnMpfSlgLCBgJHtjb21wYXJhdG9yfSAke3RoaXMuT3BlcmF0b3JNYXBbT3AuYW55XX1gLCBvcHRpb25zLnByZWZpeCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHZhbHVlW09wLmFsbF0pIHtcclxuICAgICAgICBlc2NhcGVPcHRpb25zLmlzTGlzdCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIGAoJHt0aGlzLmVzY2FwZSh2YWx1ZVtPcC5hbGxdLCBmaWVsZCwgZXNjYXBlT3B0aW9ucyl9KWAsIGAke2NvbXBhcmF0b3J9ICR7dGhpcy5PcGVyYXRvck1hcFtPcC5hbGxdfWAsIG9wdGlvbnMucHJlZml4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiBjb21wYXJhdG9yID09PSB0aGlzLk9wZXJhdG9yTWFwW09wLmVxXSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgdGhpcy5lc2NhcGUodmFsdWUsIGZpZWxkLCBlc2NhcGVPcHRpb25zKSwgdGhpcy5PcGVyYXRvck1hcFtPcC5pc10sIG9wdGlvbnMucHJlZml4KTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiBjb21wYXJhdG9yID09PSB0aGlzLk9wZXJhdG9yTWFwW09wLm5lXSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgdGhpcy5lc2NhcGUodmFsdWUsIGZpZWxkLCBlc2NhcGVPcHRpb25zKSwgdGhpcy5PcGVyYXRvck1hcFtPcC5ub3RdLCBvcHRpb25zLnByZWZpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIHRoaXMuZXNjYXBlKHZhbHVlLCBmaWVsZCwgZXNjYXBlT3B0aW9ucyksIGNvbXBhcmF0b3IsIG9wdGlvbnMucHJlZml4KTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICBUYWtlcyBzb21ldGhpbmcgYW5kIHRyYW5zZm9ybXMgaXQgaW50byB2YWx1ZXMgb2YgYSB3aGVyZSBjb25kaXRpb24uXHJcbiAgIEBwcml2YXRlXHJcbiAgKi9cclxuICBnZXRXaGVyZUNvbmRpdGlvbnMoc210aCwgdGFibGVOYW1lLCBmYWN0b3J5LCBvcHRpb25zLCBwcmVwZW5kKSB7XHJcbiAgICBjb25zdCB3aGVyZSA9IHt9O1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRhYmxlTmFtZSkpIHtcclxuICAgICAgdGFibGVOYW1lID0gdGFibGVOYW1lWzBdO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWJsZU5hbWUpKSB7XHJcbiAgICAgICAgdGFibGVOYW1lID0gdGFibGVOYW1lWzFdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgaWYgKHByZXBlbmQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBwcmVwZW5kID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc210aCAmJiBzbXRoIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7IC8vIENoZWNraW5nIGEgcHJvcGVydHkgaXMgY2hlYXBlciB0aGFuIGEgbG90IG9mIGluc3RhbmNlb2YgY2FsbHNcclxuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKHNtdGgsIHRhYmxlTmFtZSwgZmFjdG9yeSwgb3B0aW9ucywgcHJlcGVuZCk7XHJcbiAgICB9XHJcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KHNtdGgpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLndoZXJlSXRlbXNRdWVyeShzbXRoLCB7XHJcbiAgICAgICAgbW9kZWw6IGZhY3RvcnksXHJcbiAgICAgICAgcHJlZml4OiBwcmVwZW5kICYmIHRhYmxlTmFtZSxcclxuICAgICAgICB0eXBlOiBvcHRpb25zLnR5cGVcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNtdGggPT09ICdudW1iZXInKSB7XHJcbiAgICAgIGxldCBwcmltYXJ5S2V5cyA9IGZhY3RvcnkgPyBPYmplY3Qua2V5cyhmYWN0b3J5LnByaW1hcnlLZXlzKSA6IFtdO1xyXG5cclxuICAgICAgaWYgKHByaW1hcnlLZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdXN0IGEgbnVtYmVyLCBhc3N1bWUgb25seSB0aGUgZmlyc3Qga2V5XHJcbiAgICAgICAgcHJpbWFyeUtleXMgPSBwcmltYXJ5S2V5c1swXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwcmltYXJ5S2V5cyA9ICdpZCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHdoZXJlW3ByaW1hcnlLZXlzXSA9IHNtdGg7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy53aGVyZUl0ZW1zUXVlcnkod2hlcmUsIHtcclxuICAgICAgICBtb2RlbDogZmFjdG9yeSxcclxuICAgICAgICBwcmVmaXg6IHByZXBlbmQgJiYgdGFibGVOYW1lXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzbXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdGhpcy53aGVyZUl0ZW1zUXVlcnkoc210aCwge1xyXG4gICAgICAgIG1vZGVsOiBmYWN0b3J5LFxyXG4gICAgICAgIHByZWZpeDogcHJlcGVuZCAmJiB0YWJsZU5hbWVcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHNtdGgpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmVzY2FwZShzbXRoKTtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHNtdGgpKSB7XHJcbiAgICAgIGlmIChzbXRoLmxlbmd0aCA9PT0gMCB8fCBzbXRoLmxlbmd0aCA+IDAgJiYgc210aFswXS5sZW5ndGggPT09IDApIHJldHVybiAnMT0xJztcclxuICAgICAgaWYgKFV0aWxzLmNhblRyZWF0QXJyYXlBc0FuZChzbXRoKSkge1xyXG4gICAgICAgIGNvbnN0IF9zbXRoID0geyBbT3AuYW5kXTogc210aCB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFdoZXJlQ29uZGl0aW9ucyhfc210aCwgdGFibGVOYW1lLCBmYWN0b3J5LCBvcHRpb25zLCBwcmVwZW5kKTtcclxuICAgICAgfVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBvcnQgZm9yIGxpdGVyYWwgcmVwbGFjZW1lbnRzIGluIHRoZSBgd2hlcmVgIG9iamVjdCBoYXMgYmVlbiByZW1vdmVkLicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNtdGggPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMud2hlcmVJdGVtc1F1ZXJ5KHNtdGgsIHtcclxuICAgICAgICBtb2RlbDogZmFjdG9yeSxcclxuICAgICAgICBwcmVmaXg6IHByZXBlbmQgJiYgdGFibGVOYW1lXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnMT0xJztcclxuICB9XHJcblxyXG4gIC8vIEEgcmVjdXJzaXZlIHBhcnNlciBmb3IgbmVzdGVkIHdoZXJlIGNvbmRpdGlvbnNcclxuICBwYXJzZUNvbmRpdGlvbk9iamVjdChjb25kaXRpb25zLCBwYXRoKSB7XHJcbiAgICBwYXRoID0gcGF0aCB8fCBbXTtcclxuICAgIHJldHVybiBfLnJlZHVjZShjb25kaXRpb25zLCAocmVzdWx0LCB2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiByZXN1bHQuY29uY2F0KHRoaXMucGFyc2VDb25kaXRpb25PYmplY3QodmFsdWUsIHBhdGguY29uY2F0KGtleSkpKTsgLy8gUmVjdXJzaXZlbHkgcGFyc2Ugb2JqZWN0c1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdC5wdXNoKHsgcGF0aDogcGF0aC5jb25jYXQoa2V5KSwgdmFsdWUgfSk7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBib29sZWFuVmFsdWUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5hc3NpZ24oUXVlcnlHZW5lcmF0b3IucHJvdG90eXBlLCByZXF1aXJlKCcuL3F1ZXJ5LWdlbmVyYXRvci9vcGVyYXRvcnMnKSk7XHJcbk9iamVjdC5hc3NpZ24oUXVlcnlHZW5lcmF0b3IucHJvdG90eXBlLCByZXF1aXJlKCcuL3F1ZXJ5LWdlbmVyYXRvci90cmFuc2FjdGlvbicpKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUXVlcnlHZW5lcmF0b3I7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9xdWVyeS1nZW5lcmF0b3IuanMiXSwibmFtZXMiOlsidXRpbCIsInJlcXVpcmUiLCJfIiwidXVpZHY0Iiwic2VtdmVyIiwiVXRpbHMiLCJkZXByZWNhdGlvbnMiLCJTcWxTdHJpbmciLCJEYXRhVHlwZXMiLCJNb2RlbCIsIkFzc29jaWF0aW9uIiwiQmVsb25nc1RvIiwiQmVsb25nc1RvTWFueSIsIkhhc01hbnkiLCJPcCIsInNlcXVlbGl6ZUVycm9yIiwiSW5kZXhIaW50cyIsIlF1b3RlSGVscGVyIiwiUXVlcnlHZW5lcmF0b3IiLCJvcHRpb25zIiwic2VxdWVsaXplIiwiRXJyb3IiLCJfZGlhbGVjdCIsImRpYWxlY3QiLCJuYW1lIiwidGFibGVOYW1lIiwic2NoZW1hIiwiaXNQbGFpbk9iamVjdCIsImRlbGltaXRlciIsInBhcmFtIiwiX3NjaGVtYSIsInNlbGYiLCJ0YWJsZSIsIl9zY2hlbWFEZWxpbWl0ZXIiLCJ0b1N0cmluZyIsInF1b3RlVGFibGUiLCJkcm9wVGFibGVRdWVyeSIsInNjaGVtYURlbGltaXRlciIsImFkZFNjaGVtYSIsImJlZm9yZSIsImFmdGVyIiwidmFsdWVIYXNoIiwibW9kZWxBdHRyaWJ1dGVzIiwiZGVmYXVsdHMiLCJtb2RlbEF0dHJpYnV0ZU1hcCIsImZpZWxkcyIsInZhbHVlcyIsImJpbmQiLCJxdW90ZWRUYWJsZSIsImJpbmRQYXJhbSIsInVuZGVmaW5lZCIsInF1ZXJ5IiwidmFsdWVRdWVyeSIsImVtcHR5UXVlcnkiLCJvdXRwdXRGcmFnbWVudCIsImlkZW50aXR5V3JhcHBlclJlcXVpcmVkIiwidG1wVGFibGUiLCJlYWNoIiwiYXR0cmlidXRlIiwia2V5IiwiZmllbGQiLCJzdXBwb3J0cyIsInJldHVyblZhbHVlcyIsInJldHVybmluZyIsIm91dHB1dCIsImhhc1RyaWdnZXIiLCJ0bXBUYWJsZVRyaWdnZXIiLCJ0bXBDb2x1bW5zIiwib3V0cHV0Q29sdW1ucyIsIm1vZGVsS2V5IiwidHlwZSIsIlZJUlRVQUwiLCJsZW5ndGgiLCJxdW90ZUlkZW50aWZpZXIiLCJ0b1NxbCIsInNlbGVjdEZyb21UbXAiLCJnZXQiLCJzZWFyY2hQYXRoIiwiRVhDRVBUSU9OIiwiZXhjZXB0aW9uIiwicmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoIiwib21pdE51bGwiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ2YWx1ZSIsInB1c2giLCJhdXRvSW5jcmVtZW50IiwiZGVmYXVsdFZhbHVlIiwic3BsaWNlIiwiREVGQVVMVCIsImVzY2FwZSIsIlNlcXVlbGl6ZU1ldGhvZCIsImNvbnRleHQiLCJmb3JtYXQiLCJyZXBsYWNlbWVudHMiLCJpZ25vcmVEdXBsaWNhdGVzIiwiaW5zZXJ0cyIsIm9uQ29uZmxpY3REb05vdGhpbmciLCJhdHRyaWJ1dGVzIiwiam9pbiIsImd0ZSIsImRhdGFiYXNlVmVyc2lvbiIsInJlcGxhY2UiLCJvbkR1cGxpY2F0ZSIsImlkZW50aXR5SW5zZXJ0IiwicmVzdWx0IiwiZmllbGRWYWx1ZUhhc2hlcyIsImZpZWxkTWFwcGVkQXR0cmlidXRlcyIsInR1cGxlcyIsInNlcmlhbHMiLCJhbGxBdHRyaWJ1dGVzIiwib25EdXBsaWNhdGVLZXlVcGRhdGUiLCJmaWVsZFZhbHVlSGFzaCIsImZvck93biIsImluY2x1ZGVzIiwibWFwIiwiYnVsa0RlZmF1bHQiLCJ1cGRhdGVPbkR1cGxpY2F0ZSIsImNvbmZsaWN0S2V5cyIsInVwc2VydEtleXMiLCJhdHRyIiwidXBkYXRlS2V5cyIsInZhbHVlS2V5cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJWYWx1ZUhhc2giLCJ3aGVyZSIsInN1ZmZpeCIsImxpbWl0IiwibWFwVG9Nb2RlbCIsInVwZGF0ZSIsIndoZXJlT3B0aW9ucyIsIndoZXJlUXVlcnkiLCJ0cmltIiwib3BlcmF0b3IiLCJyZXR1cm5pbmdGcmFnbWVudCIsInJhd1RhYmxlbmFtZSIsInByZWZpeCIsImZpZWxkc1NxbCIsImhhbmRsZVNlcXVlbGl6ZU1ldGhvZCIsImluc3BlY3QiLCJpbmRleCIsImNvbGxhdGUiLCJvcmRlciIsIm5hbWVJbmRleCIsIl9jb25mb3JtSW5kZXgiLCJxdW90ZUlkZW50aWZpZXJzIiwiY29uY3VycmVudGx5IiwiaW5kIiwiaW5kZXhWaWFBbHRlciIsImNvbmNhdCIsInVuaXF1ZSIsInVzaW5nIiwicGFyc2VyIiwiY29tcGFjdCIsImNvbnN0cmFpbnRTbmlwcGV0IiwiZ2V0Q29uc3RyYWludFNuaXBwZXQiLCJjb25zdHJhaW50TmFtZSIsImZpZWxkc1NxbFF1b3RlZFN0cmluZyIsImZpZWxkc1NxbFN0cmluZyIsInRvVXBwZXJDYXNlIiwid2hlcmVJdGVtc1F1ZXJ5IiwicmVmZXJlbmNlcyIsInJlZmVyZW5jZXNTbmlwcGV0Iiwib25VcGRhdGUiLCJvbkRlbGV0ZSIsImNvbGxlY3Rpb24iLCJwYXJlbnQiLCJjb25uZWN0b3IiLCJ2YWxpZE9yZGVyT3B0aW9ucyIsImZvckVhY2giLCJpdGVtIiwicHJldmlvdXMiLCJwcmV2aW91c0Fzc29jaWF0aW9uIiwicHJldmlvdXNNb2RlbCIsInRhcmdldCIsIm1vZGVsIiwiYXMiLCJ0aHJvdWdoIiwiZ2V0QXNzb2NpYXRpb25Gb3JBbGlhcyIsIm9yZGVySW5kZXgiLCJpbmRleE9mIiwibGl0ZXJhbCIsImFzc29jaWF0aW9ucyIsInJhd0F0dHJpYnV0ZXMiLCJpdGVtU3BsaXQiLCJzcGxpdCIsIkpTT04iLCJpZGVudGlmaWVyIiwicGF0aCIsInNsaWNlIiwianNvblBhdGhFeHRyYWN0aW9uUXVlcnkiLCJjb2xsZWN0aW9uTGVuZ3RoIiwidGFibGVOYW1lcyIsImkiLCJfbW9kZWxBdHRyaWJ1dGUiLCJzcWwiLCJjb2xsZWN0aW9uSXRlbSIsInF1b3RlIiwiZmllbGROYW1lIiwicmF3IiwiZm9yY2UiLCJpZGVudGlmaWVycyIsImhlYWQiLCJ0YWlsIiwiYWxpYXMiLCJpc09iamVjdCIsInNjaGVtYXMiLCJ2YWxpZGF0ZSIsInN0cmluZ2lmeSIsInNpbXBsZUVzY2FwZSIsImVzY1ZhbCIsInRpbWV6b25lIiwib3BlcmF0aW9uIiwiaWRlbnRpdHkiLCJ0eXBlVmFsaWRhdGlvbiIsImlzTGlzdCIsImVycm9yIiwiVmFsaWRhdGlvbkVycm9yIiwiZXJyb3JzIiwiVmFsaWRhdGlvbkVycm9ySXRlbSIsIm1lc3NhZ2UiLCJpc0lkZW50aWZpZXJRdW90ZWQiLCJjb2x1bW4iLCJwYXRocyIsInRvUGF0aCIsInBhdGhTdHIiLCJxdW90ZWRDb2x1bW4iLCJzdWJQYXRoIiwidGVzdCIsImFkZFRpY2tzIiwiX18iLCJkaWdpdCIsIm1haW5RdWVyeUl0ZW1zIiwic3ViUXVlcnlJdGVtcyIsInN1YlF1ZXJ5IiwiaGFzTXVsdGlBc3NvY2lhdGlvbiIsIm1haW4iLCJtYWluVGFibGUiLCJxdW90ZWROYW1lIiwidG9wTGV2ZWxJbmZvIiwibmFtZXMiLCJtYWluSm9pblF1ZXJpZXMiLCJzdWJKb2luUXVlcmllcyIsIm1pbmlmeUFsaWFzZXMiLCJhbGlhc2VzTWFwcGluZyIsIk1hcCIsImFsaWFzZXNCeVRhYmxlIiwidGFibGVBcyIsInQiLCJrZXlBdHQiLCJwcmltYXJ5S2V5QXR0cmlidXRlcyIsInNvbWUiLCJlc2NhcGVBdHRyaWJ1dGVzIiwiaW5jbHVkZSIsImdyb3VwZWRMaW1pdCIsInNlcGFyYXRlIiwiam9pblF1ZXJpZXMiLCJnZW5lcmF0ZUluY2x1ZGUiLCJleHRlcm5hbEFzIiwiaW50ZXJuYWxBcyIsIm1haW5RdWVyeSIsInVuaXEiLCJzZWxlY3RGcm9tVGFibGVGcmFnbWVudCIsImFzc2lnbiIsImdyb3VwZWRMaW1pdE9yZGVyIiwid2hlcmVLZXkiLCJncm91cGVkVGFibGVOYW1lIiwib24iLCJmb3JlaWduS2V5RmllbGQiLCJtYW55RnJvbVNvdXJjZSIsImdyb3VwZWRMaW1pdE9wdGlvbnMiLCJfdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzIiwiYXNzb2NpYXRpb24iLCJkdXBsaWNhdGluZyIsInJlcXVpcmVkIiwicGxhY2Vob2xkZXIiLCJoYXNKb2luIiwiaW5jbHVkZU1hcCIsImluY2x1ZGVOYW1lcyIsImJhc2VRdWVyeSIsInNlbGVjdFF1ZXJ5Iiwib2Zmc2V0IiwicGxhY2VIb2xkZXIiLCJ3aGVyZUl0ZW1RdWVyeSIsInNwbGljZVBvcyIsImdyb3VwV2hlcmUiLCJmb3JlaWduSWRlbnRpZmllckZpZWxkIiwic3BsaWNlU3RyIiwiZ2V0V2hlcmVDb25kaXRpb25zIiwic3RhcnRzV2l0aCIsImdyb3VwIiwiYWxpYXNHcm91cGluZyIsImhhdmluZyIsIm9yZGVycyIsImdldFF1ZXJ5T3JkZXJzIiwibWFpblF1ZXJ5T3JkZXIiLCJzdWJRdWVyeU9yZGVyIiwibGltaXRPcmRlciIsImFkZExpbWl0QW5kT2Zmc2V0IiwibG9jayIsImxldmVsIiwibG9ja0tleSIsImZvclNoYXJlIiwibG9ja09mIiwib2YiLCJza2lwTG9ja2VkIiwic3JjIiwiX2dldEFsaWFzRm9yRmllbGQiLCJtYWluVGFibGVBcyIsImFkZFRhYmxlIiwibm9SYXdBdHRyaWJ1dGVzIiwiX2dldE1pbmlmaWVkQWxpYXMiLCJUSUNLX0NIQVIiLCJxdW90ZUF0dHJpYnV0ZSIsImlzRW1wdHkiLCJwYXJlbnRUYWJsZU5hbWUiLCJtYWluQ2hpbGRJbmNsdWRlcyIsInN1YkNoaWxkSW5jbHVkZXMiLCJyZXF1aXJlZE1pc21hdGNoIiwiaW5jbHVkZUFzIiwiam9pblF1ZXJ5Iiwia2V5c0VzY2FwZWQiLCJpbmNsdWRlSWdub3JlQXR0cmlidXRlcyIsIl9leHBhbmRBdHRyaWJ1dGVzIiwibWFwRmluZGVyT3B0aW9ucyIsImluY2x1ZGVBdHRyaWJ1dGVzIiwiYXR0ckFzIiwidmVyYmF0aW0iLCJMaXRlcmFsIiwiQ2FzdCIsIkZuIiwidmFsIiwiZ2VuZXJhdGVUaHJvdWdoSm9pbiIsIl9nZW5lcmF0ZVN1YlF1ZXJ5RmlsdGVyIiwiZ2VuZXJhdGVKb2luIiwiY2hpbGRJbmNsdWRlIiwiX3BzZXVkbyIsImNoaWxkSm9pblF1ZXJpZXMiLCJib2R5IiwiY29uZGl0aW9uIiwibWF0Y2giLCJtaW5pZmllZEFsaWFzIiwic2l6ZSIsInNldCIsInBhcmVudElzVG9wIiwiJHBhcmVudCIsImpvaW5XaGVyZSIsImxlZnQiLCJzb3VyY2UiLCJhdHRyTGVmdCIsInNvdXJjZUtleUF0dHJpYnV0ZSIsInByaW1hcnlLZXlBdHRyaWJ1dGUiLCJmaWVsZExlZnQiLCJpZGVudGlmaWVyRmllbGQiLCJhc0xlZnQiLCJyaWdodCIsInRhYmxlUmlnaHQiLCJnZXRUYWJsZU5hbWUiLCJmaWVsZFJpZ2h0IiwidGFyZ2V0SWRlbnRpZmllciIsImFzUmlnaHQiLCJqb2luT24iLCJzdWJxdWVyeUF0dHJpYnV0ZXMiLCJqb2luU291cmNlIiwib3IiLCJ0aHJvdWdoVGFibGUiLCJ0aHJvdWdoQXMiLCJleHRlcm5hbFRocm91Z2hBcyIsInRocm91Z2hBdHRyaWJ1dGVzIiwidGFibGVTb3VyY2UiLCJpZGVudFNvdXJjZSIsInRhYmxlVGFyZ2V0IiwiaWRlbnRUYXJnZXQiLCJhdHRyVGFyZ2V0IiwidGFyZ2V0S2V5RmllbGQiLCJqb2luVHlwZSIsImpvaW5Cb2R5Iiwiam9pbkNvbmRpdGlvbiIsImF0dHJTb3VyY2UiLCJzb3VyY2VLZXkiLCJzb3VyY2VKb2luT24iLCJ0YXJnZXRKb2luT24iLCJ0aHJvdWdoV2hlcmUiLCJ0YXJnZXRXaGVyZSIsInNvdXJjZUtleUZpZWxkIiwibWFpbk1vZGVsIiwiYWxpYXNlZFNvdXJjZSIsImpvaW5UYWJsZURlcGVuZGVudCIsInN1YlF1ZXJ5RmlsdGVyIiwiY2hpbGQiLCJuZXN0ZWRJbmNsdWRlcyIsIl9nZXRSZXF1aXJlZENsb3N1cmUiLCJ0b3BJbmNsdWRlIiwidG9wUGFyZW50IiwidG9wQXNzb2NpYXRpb24iLCJwcmltYXJ5S2V5RmllbGQiLCJ0b1RhcmdldCIsImFuZCIsImlzQmVsb25nc1RvIiwiYXNzb2NpYXRpb25UeXBlIiwic291cmNlRmllbGQiLCJ0YXJnZXRGaWVsZCIsImNvcHkiLCJmaWx0ZXIiLCJpbmMiLCJzdWJRdWVyeUF0dHJpYnV0ZSIsImZpbmQiLCJhIiwibW9kZWxOYW1lIiwiQ29sIiwidGFibGVzIiwiZnJhZ21lbnQiLCJpbmRleEhpbnRzIiwiaGludCIsImluZGV4TmFtZSIsInNtdGgiLCJmYWN0b3J5IiwicHJlcGVuZCIsIk9wZXJhdG9yTWFwIiwiY29tcGFyYXRvciIsIldoZXJlIiwibG9naWMiLCJib29sZWFuVmFsdWUiLCJmbiIsImFyZ3MiLCJhcmciLCJjb2wiLCJiaW5kaW5nIiwiZ2V0Q29tcGxleFNpemUiLCJpdGVtcyIsImdldENvbXBsZXhLZXlzIiwicHJvcCIsImtleVBhcnRzIiwidG1wIiwiX2ZpbmRGaWVsZCIsImZpZWxkVHlwZSIsIk9wZXJhdG9yc0FsaWFzTWFwIiwiX3JlcGxhY2VBbGlhc2VzIiwib3BWYWx1ZSIsIl9qb2luS2V5VmFsdWUiLCJpcyIsImVxIiwiY2FuVHJlYXRBcnJheUFzQW5kIiwibm90IiwiX3doZXJlR3JvdXBCaW5kIiwiX3doZXJlQmluZCIsIkFSUkFZIiwianNvbiIsIl93aGVyZUpTT04iLCJfd2hlcmVQYXJzZVNpbmdsZVZhbHVlT2JqZWN0IiwiaW4iLCJmaWVsZFJhd0F0dHJpYnV0ZXNNYXAiLCJvdXRlckJpbmRpbmciLCJpdGVtUXVlcnkiLCJiYXNlS2V5IiwiZ2V0T3BlcmF0b3JzIiwib3AiLCJfdHJhdmVyc2VKU09OIiwiY2FzdCIsInBhdGhLZXkiLCJfdG9KU09OVmFsdWUiLCJfY2FzdEtleSIsIml0ZW1Qcm9wIiwiX2dldEpzb25DYXN0IiwiRGF0ZSIsIl9nZXRTYWZlS2V5IiwiX3ByZWZpeEtleSIsImlzQ29sU3RyaW5nIiwic3Vic3RyIiwibm90SW4iLCJuZSIsImFueSIsImFsbCIsImJldHdlZW4iLCJub3RCZXR3ZWVuIiwibGlrZSIsImVuZHNXaXRoIiwic3Vic3RyaW5nIiwiZXNjYXBlT3B0aW9ucyIsImFjY2VwdFN0cmluZ3MiLCJwcmltYXJ5S2V5cyIsImtleXMiLCJCdWZmZXIiLCJpc0J1ZmZlciIsIl9zbXRoIiwiY29uZGl0aW9ucyIsInJlZHVjZSIsInBhcnNlQ29uZGl0aW9uT2JqZWN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6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IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbmNvbnN0IHV1aWR2NCA9IHJlcXVpcmUoJ3V1aWQvdjQnKTtcbmNvbnN0IHNlbXZlciA9IHJlcXVpcmUoJ3NlbXZlcicpO1xuXG5jb25zdCBVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5jb25zdCBkZXByZWNhdGlvbnMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9kZXByZWNhdGlvbnMnKTtcbmNvbnN0IFNxbFN0cmluZyA9IHJlcXVpcmUoJy4uLy4uL3NxbC1zdHJpbmcnKTtcbmNvbnN0IERhdGFUeXBlcyA9IHJlcXVpcmUoJy4uLy4uL2RhdGEtdHlwZXMnKTtcbmNvbnN0IE1vZGVsID0gcmVxdWlyZSgnLi4vLi4vbW9kZWwnKTtcbmNvbnN0IEFzc29jaWF0aW9uID0gcmVxdWlyZSgnLi4vLi4vYXNzb2NpYXRpb25zL2Jhc2UnKTtcbmNvbnN0IEJlbG9uZ3NUbyA9IHJlcXVpcmUoJy4uLy4uL2Fzc29jaWF0aW9ucy9iZWxvbmdzLXRvJyk7XG5jb25zdCBCZWxvbmdzVG9NYW55ID0gcmVxdWlyZSgnLi4vLi4vYXNzb2NpYXRpb25zL2JlbG9uZ3MtdG8tbWFueScpO1xuY29uc3QgSGFzTWFueSA9IHJlcXVpcmUoJy4uLy4uL2Fzc29jaWF0aW9ucy9oYXMtbWFueScpO1xuY29uc3QgT3AgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvcnMnKTtcbmNvbnN0IHNlcXVlbGl6ZUVycm9yID0gcmVxdWlyZSgnLi4vLi4vZXJyb3JzJyk7XG5jb25zdCBJbmRleEhpbnRzID0gcmVxdWlyZSgnLi4vLi4vaW5kZXgtaGludHMnKTtcblxuY29uc3QgUXVvdGVIZWxwZXIgPSByZXF1aXJlKCcuL3F1ZXJ5LWdlbmVyYXRvci9oZWxwZXJzL3F1b3RlJyk7XG5cbi8qKlxuICogQWJzdHJhY3QgUXVlcnkgR2VuZXJhdG9yXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgUXVlcnlHZW5lcmF0b3Ige1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnNlcXVlbGl6ZSkgdGhyb3cgbmV3IEVycm9yKCdRdWVyeUdlbmVyYXRvciBpbml0aWFsaXplZCB3aXRob3V0IG9wdGlvbnMuc2VxdWVsaXplJyk7XG4gICAgaWYgKCFvcHRpb25zLl9kaWFsZWN0KSB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5R2VuZXJhdG9yIGluaXRpYWxpemVkIHdpdGhvdXQgb3B0aW9ucy5fZGlhbGVjdCcpO1xuXG4gICAgdGhpcy5zZXF1ZWxpemUgPSBvcHRpb25zLnNlcXVlbGl6ZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zLnNlcXVlbGl6ZS5vcHRpb25zO1xuXG4gICAgLy8gZGlhbGVjdCBuYW1lXG4gICAgdGhpcy5kaWFsZWN0ID0gb3B0aW9ucy5fZGlhbGVjdC5uYW1lO1xuICAgIHRoaXMuX2RpYWxlY3QgPSBvcHRpb25zLl9kaWFsZWN0O1xuICB9XG5cbiAgZXh0cmFjdFRhYmxlRGV0YWlscyh0YWJsZU5hbWUsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0YWJsZU5hbWUgPSB0YWJsZU5hbWUgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYTogdGFibGVOYW1lLnNjaGVtYSB8fCBvcHRpb25zLnNjaGVtYSB8fCAncHVibGljJyxcbiAgICAgIHRhYmxlTmFtZTogXy5pc1BsYWluT2JqZWN0KHRhYmxlTmFtZSkgPyB0YWJsZU5hbWUudGFibGVOYW1lIDogdGFibGVOYW1lLFxuICAgICAgZGVsaW1pdGVyOiB0YWJsZU5hbWUuZGVsaW1pdGVyIHx8IG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcuJ1xuICAgIH07XG4gIH1cblxuICBhZGRTY2hlbWEocGFyYW0pIHtcbiAgICBpZiAoIXBhcmFtLl9zY2hlbWEpIHJldHVybiBwYXJhbS50YWJsZU5hbWUgfHwgcGFyYW07XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhYmxlTmFtZTogcGFyYW0udGFibGVOYW1lIHx8IHBhcmFtLFxuICAgICAgdGFibGU6IHBhcmFtLnRhYmxlTmFtZSB8fCBwYXJhbSxcbiAgICAgIG5hbWU6IHBhcmFtLm5hbWUgfHwgcGFyYW0sXG4gICAgICBzY2hlbWE6IHBhcmFtLl9zY2hlbWEsXG4gICAgICBkZWxpbWl0ZXI6IHBhcmFtLl9zY2hlbWFEZWxpbWl0ZXIgfHwgJy4nLFxuICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLnF1b3RlVGFibGUodGhpcyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGRyb3BTY2hlbWEodGFibGVOYW1lLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcFRhYmxlUXVlcnkodGFibGVOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGRlc2NyaWJlVGFibGVRdWVyeSh0YWJsZU5hbWUsIHNjaGVtYSwgc2NoZW1hRGVsaW1pdGVyKSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnF1b3RlVGFibGUoXG4gICAgICB0aGlzLmFkZFNjaGVtYSh7XG4gICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgX3NjaGVtYTogc2NoZW1hLFxuICAgICAgICBfc2NoZW1hRGVsaW1pdGVyOiBzY2hlbWFEZWxpbWl0ZXJcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiBgREVTQ1JJQkUgJHt0YWJsZX07YDtcbiAgfVxuXG4gIGRyb3BUYWJsZVF1ZXJ5KHRhYmxlTmFtZSkge1xuICAgIHJldHVybiBgRFJPUCBUQUJMRSBJRiBFWElTVFMgJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX07YDtcbiAgfVxuXG4gIHJlbmFtZVRhYmxlUXVlcnkoYmVmb3JlLCBhZnRlcikge1xuICAgIHJldHVybiBgQUxURVIgVEFCTEUgJHt0aGlzLnF1b3RlVGFibGUoYmVmb3JlKX0gUkVOQU1FIFRPICR7dGhpcy5xdW90ZVRhYmxlKGFmdGVyKX07YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGluc2VydCBpbnRvIGNvbW1hbmRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZUhhc2ggICAgICAgYXR0cmlidXRlIHZhbHVlIHBhaXJzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtb2RlbEF0dHJpYnV0ZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaW5zZXJ0UXVlcnkodGFibGUsIHZhbHVlSGFzaCwgbW9kZWxBdHRyaWJ1dGVzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgXy5kZWZhdWx0cyhvcHRpb25zLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgY29uc3QgbW9kZWxBdHRyaWJ1dGVNYXAgPSB7fTtcbiAgICBjb25zdCBmaWVsZHMgPSBbXTtcbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICBjb25zdCBiaW5kID0gW107XG4gICAgY29uc3QgcXVvdGVkVGFibGUgPSB0aGlzLnF1b3RlVGFibGUodGFibGUpO1xuICAgIGNvbnN0IGJpbmRQYXJhbSA9IG9wdGlvbnMuYmluZFBhcmFtID09PSB1bmRlZmluZWQgPyB0aGlzLmJpbmRQYXJhbShiaW5kKSA6IG9wdGlvbnMuYmluZFBhcmFtO1xuICAgIGxldCBxdWVyeTtcbiAgICBsZXQgdmFsdWVRdWVyeSA9ICcnO1xuICAgIGxldCBlbXB0eVF1ZXJ5ID0gJyc7XG4gICAgbGV0IG91dHB1dEZyYWdtZW50ID0gJyc7XG4gICAgbGV0IGlkZW50aXR5V3JhcHBlclJlcXVpcmVkID0gZmFsc2U7XG4gICAgbGV0IHRtcFRhYmxlID0gJyc7IC8vdG1wVGFibGUgZGVjbGFyYXRpb24gZm9yIHRyaWdnZXJcblxuICAgIGlmIChtb2RlbEF0dHJpYnV0ZXMpIHtcbiAgICAgIF8uZWFjaChtb2RlbEF0dHJpYnV0ZXMsIChhdHRyaWJ1dGUsIGtleSkgPT4ge1xuICAgICAgICBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldID0gYXR0cmlidXRlO1xuICAgICAgICBpZiAoYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgbW9kZWxBdHRyaWJ1dGVNYXBbYXR0cmlidXRlLmZpZWxkXSA9IGF0dHJpYnV0ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHNbJ0RFRkFVTFQgVkFMVUVTJ10pIHtcbiAgICAgIGVtcHR5UXVlcnkgKz0gJyBERUZBVUxUIFZBTFVFUyc7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzWydWQUxVRVMgKCknXSkge1xuICAgICAgZW1wdHlRdWVyeSArPSAnIFZBTFVFUyAoKSc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMucmV0dXJuVmFsdWVzICYmIG9wdGlvbnMucmV0dXJuaW5nKSB7XG4gICAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5yZXR1cm5WYWx1ZXMucmV0dXJuaW5nKSB7XG4gICAgICAgIHZhbHVlUXVlcnkgKz0gJyBSRVRVUk5JTkcgKic7XG4gICAgICAgIGVtcHR5UXVlcnkgKz0gJyBSRVRVUk5JTkcgKic7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMucmV0dXJuVmFsdWVzLm91dHB1dCkge1xuICAgICAgICBvdXRwdXRGcmFnbWVudCA9ICcgT1VUUFVUIElOU0VSVEVELionO1xuXG4gICAgICAgIC8vVG8gY2FwdHVyZSBvdXRwdXQgcm93cyB3aGVuIHRoZXJlIGlzIGEgdHJpZ2dlciBvbiBNU1NRTCBEQlxuICAgICAgICBpZiAobW9kZWxBdHRyaWJ1dGVzICYmIG9wdGlvbnMuaGFzVHJpZ2dlciAmJiB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnRtcFRhYmxlVHJpZ2dlcikge1xuXG4gICAgICAgICAgbGV0IHRtcENvbHVtbnMgPSAnJztcbiAgICAgICAgICBsZXQgb3V0cHV0Q29sdW1ucyA9ICcnO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBtb2RlbEtleSBpbiBtb2RlbEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IG1vZGVsQXR0cmlidXRlc1ttb2RlbEtleV07XG4gICAgICAgICAgICBpZiAoIShhdHRyaWJ1dGUudHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5WSVJUVUFMKSkge1xuICAgICAgICAgICAgICBpZiAodG1wQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdG1wQ29sdW1ucyArPSAnLCc7XG4gICAgICAgICAgICAgICAgb3V0cHV0Q29sdW1ucyArPSAnLCc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0bXBDb2x1bW5zICs9IGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHJpYnV0ZS5maWVsZCl9ICR7YXR0cmlidXRlLnR5cGUudG9TcWwoKX1gO1xuICAgICAgICAgICAgICBvdXRwdXRDb2x1bW5zICs9IGBJTlNFUlRFRC4ke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHJpYnV0ZS5maWVsZCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0bXBUYWJsZSA9IGBkZWNsYXJlIEB0bXAgdGFibGUgKCR7dG1wQ29sdW1uc30pO2A7XG4gICAgICAgICAgb3V0cHV0RnJhZ21lbnQgPSBgIE9VVFBVVCAke291dHB1dENvbHVtbnN9IGludG8gQHRtcGA7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0RnJvbVRtcCA9ICc7c2VsZWN0ICogZnJvbSBAdG1wJztcblxuICAgICAgICAgIHZhbHVlUXVlcnkgKz0gc2VsZWN0RnJvbVRtcDtcbiAgICAgICAgICBlbXB0eVF1ZXJ5ICs9IHNlbGVjdEZyb21UbXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXy5nZXQodGhpcywgWydzZXF1ZWxpemUnLCAnb3B0aW9ucycsICdkaWFsZWN0T3B0aW9ucycsICdwcmVwZW5kU2VhcmNoUGF0aCddKSB8fCBvcHRpb25zLnNlYXJjaFBhdGgpIHtcbiAgICAgIC8vIE5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIHdpdGggc2VhcmNoIHBhdGggKHJlcXVpcmVzIG91dHB1dCBvZiBtdWx0aXBsZSBxdWVyaWVzKVxuICAgICAgb3B0aW9ucy5iaW5kUGFyYW0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5FWENFUFRJT04gJiYgb3B0aW9ucy5leGNlcHRpb24pIHtcbiAgICAgIC8vIE5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIHdpdGggYmluZCBwYXJhbWV0ZXJzIChyZXF1aXJlcyBvdXRwdXQgb2YgbXVsdGlwbGUgcXVlcmllcylcbiAgICAgIG9wdGlvbnMuYmluZFBhcmFtID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFsdWVIYXNoID0gVXRpbHMucmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoKHZhbHVlSGFzaCwgdGhpcy5vcHRpb25zLm9taXROdWxsKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZUhhc2gpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWVIYXNoLCBrZXkpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVIYXNoW2tleV07XG4gICAgICAgIGZpZWxkcy5wdXNoKHRoaXMucXVvdGVJZGVudGlmaWVyKGtleSkpO1xuXG4gICAgICAgIC8vIFNFUklBTFMnIGNhbid0IGJlIE5VTEwgaW4gcG9zdGdyZXNxbCwgdXNlIERFRkFVTFQgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGlmIChtb2RlbEF0dHJpYnV0ZU1hcCAmJiBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldICYmIG1vZGVsQXR0cmlidXRlTWFwW2tleV0uYXV0b0luY3JlbWVudCA9PT0gdHJ1ZSAmJiAhdmFsdWUpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuYXV0b0luY3JlbWVudC5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgIGZpZWxkcy5zcGxpY2UoLTEsIDEpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5ERUZBVUxUKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCgnREVGQVVMVCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLmVzY2FwZShudWxsKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChtb2RlbEF0dHJpYnV0ZU1hcCAmJiBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldICYmIG1vZGVsQXR0cmlidXRlTWFwW2tleV0uYXV0b0luY3JlbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWRlbnRpdHlXcmFwcGVyUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCB8fCBvcHRpb25zLmJpbmRQYXJhbSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuZXNjYXBlKHZhbHVlLCBtb2RlbEF0dHJpYnV0ZU1hcCAmJiBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldIHx8IHVuZGVmaW5lZCwgeyBjb250ZXh0OiAnSU5TRVJUJyB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuZm9ybWF0KHZhbHVlLCBtb2RlbEF0dHJpYnV0ZU1hcCAmJiBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldIHx8IHVuZGVmaW5lZCwgeyBjb250ZXh0OiAnSU5TRVJUJyB9LCBiaW5kUGFyYW0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXBsYWNlbWVudHMgPSB7XG4gICAgICBpZ25vcmVEdXBsaWNhdGVzOiBvcHRpb25zLmlnbm9yZUR1cGxpY2F0ZXMgPyB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluc2VydHMuaWdub3JlRHVwbGljYXRlcyA6ICcnLFxuICAgICAgb25Db25mbGljdERvTm90aGluZzogb3B0aW9ucy5pZ25vcmVEdXBsaWNhdGVzID8gdGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbnNlcnRzLm9uQ29uZmxpY3REb05vdGhpbmcgOiAnJyxcbiAgICAgIGF0dHJpYnV0ZXM6IGZpZWxkcy5qb2luKCcsJyksXG4gICAgICBvdXRwdXQ6IG91dHB1dEZyYWdtZW50LFxuICAgICAgdmFsdWVzOiB2YWx1ZXMuam9pbignLCcpLFxuICAgICAgdG1wVGFibGVcbiAgICB9O1xuXG4gICAgdmFsdWVRdWVyeSA9IGAke3RtcFRhYmxlfUlOU0VSVCR7cmVwbGFjZW1lbnRzLmlnbm9yZUR1cGxpY2F0ZXN9IElOVE8gJHtxdW90ZWRUYWJsZX0gKCR7cmVwbGFjZW1lbnRzLmF0dHJpYnV0ZXN9KSR7cmVwbGFjZW1lbnRzLm91dHB1dH0gVkFMVUVTICgke3JlcGxhY2VtZW50cy52YWx1ZXN9KSR7cmVwbGFjZW1lbnRzLm9uQ29uZmxpY3REb05vdGhpbmd9JHt2YWx1ZVF1ZXJ5fWA7XG4gICAgZW1wdHlRdWVyeSA9IGAke3RtcFRhYmxlfUlOU0VSVCR7cmVwbGFjZW1lbnRzLmlnbm9yZUR1cGxpY2F0ZXN9IElOVE8gJHtxdW90ZWRUYWJsZX0ke3JlcGxhY2VtZW50cy5vdXRwdXR9JHtyZXBsYWNlbWVudHMub25Db25mbGljdERvTm90aGluZ30ke2VtcHR5UXVlcnl9YDtcblxuICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLkVYQ0VQVElPTiAmJiBvcHRpb25zLmV4Y2VwdGlvbikge1xuICAgICAgLy8gTW9zdGx5IGZvciBpbnRlcm5hbCB1c2UsIHNvIHdlIGV4cGVjdCB0aGUgdXNlciB0byBrbm93IHdoYXQgaGUncyBkb2luZyFcbiAgICAgIC8vIHBnX3RlbXAgZnVuY3Rpb25zIGFyZSBwcml2YXRlIHBlciBjb25uZWN0aW9uLCBzbyB3ZSBuZXZlciByaXNrIHRoaXMgZnVuY3Rpb24gaW50ZXJmZXJpbmcgd2l0aCBhbm90aGVyIG9uZS5cbiAgICAgIGlmIChzZW12ZXIuZ3RlKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGF0YWJhc2VWZXJzaW9uLCAnOS4yLjAnKSkge1xuICAgICAgICAvLyA+PSA5LjIgLSBVc2UgYSBVVUlEIGJ1dCBwcmVmaXggd2l0aCAnZnVuY18nIChudW1iZXJzIGZpcnN0IG5vdCBhbGxvd2VkKVxuICAgICAgICBjb25zdCBkZWxpbWl0ZXIgPSBgJGZ1bmNfJHt1dWlkdjQoKS5yZXBsYWNlKC8tL2csICcnKX0kYDtcblxuICAgICAgICBvcHRpb25zLmV4Y2VwdGlvbiA9ICdXSEVOIHVuaXF1ZV92aW9sYXRpb24gVEhFTiBHRVQgU1RBQ0tFRCBESUFHTk9TVElDUyBzZXF1ZWxpemVfY2F1Z2h0X2V4Y2VwdGlvbiA9IFBHX0VYQ0VQVElPTl9ERVRBSUw7JztcbiAgICAgICAgdmFsdWVRdWVyeSA9IGAke2BDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBwZ190ZW1wLnRlc3RmdW5jKE9VVCByZXNwb25zZSAke3F1b3RlZFRhYmxlfSwgT1VUIHNlcXVlbGl6ZV9jYXVnaHRfZXhjZXB0aW9uIHRleHQpIFJFVFVSTlMgUkVDT1JEIEFTICR7ZGVsaW1pdGVyfWAgK1xuICAgICAgICAgICcgQkVHSU4gJ30ke3ZhbHVlUXVlcnl9IElOVE8gcmVzcG9uc2U7IEVYQ0VQVElPTiAke29wdGlvbnMuZXhjZXB0aW9ufSBFTkQgJHtkZWxpbWl0ZXJcbiAgICAgICAgfSBMQU5HVUFHRSBwbHBnc3FsOyBTRUxFQ1QgKHRlc3RmdW5jLnJlc3BvbnNlKS4qLCB0ZXN0ZnVuYy5zZXF1ZWxpemVfY2F1Z2h0X2V4Y2VwdGlvbiBGUk9NIHBnX3RlbXAudGVzdGZ1bmMoKTsgRFJPUCBGVU5DVElPTiBJRiBFWElTVFMgcGdfdGVtcC50ZXN0ZnVuYygpYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuZXhjZXB0aW9uID0gJ1dIRU4gdW5pcXVlX3Zpb2xhdGlvbiBUSEVOIE5VTEw7JztcbiAgICAgICAgdmFsdWVRdWVyeSA9IGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBwZ190ZW1wLnRlc3RmdW5jKCkgUkVUVVJOUyBTRVRPRiAke3F1b3RlZFRhYmxlfSBBUyAkYm9keSQgQkVHSU4gUkVUVVJOIFFVRVJZICR7dmFsdWVRdWVyeX07IEVYQ0VQVElPTiAke29wdGlvbnMuZXhjZXB0aW9ufSBFTkQ7ICRib2R5JCBMQU5HVUFHRSBwbHBnc3FsOyBTRUxFQ1QgKiBGUk9NIHBnX3RlbXAudGVzdGZ1bmMoKTsgRFJPUCBGVU5DVElPTiBJRiBFWElTVFMgcGdfdGVtcC50ZXN0ZnVuYygpO2A7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHNbJ09OIERVUExJQ0FURSBLRVknXSAmJiBvcHRpb25zLm9uRHVwbGljYXRlKSB7XG4gICAgICB2YWx1ZVF1ZXJ5ICs9IGAgT04gRFVQTElDQVRFIEtFWSAke29wdGlvbnMub25EdXBsaWNhdGV9YDtcbiAgICAgIGVtcHR5UXVlcnkgKz0gYCBPTiBEVVBMSUNBVEUgS0VZICR7b3B0aW9ucy5vbkR1cGxpY2F0ZX1gO1xuICAgIH1cblxuICAgIHF1ZXJ5ID0gYCR7cmVwbGFjZW1lbnRzLmF0dHJpYnV0ZXMubGVuZ3RoID8gdmFsdWVRdWVyeSA6IGVtcHR5UXVlcnl9O2A7XG4gICAgaWYgKGlkZW50aXR5V3JhcHBlclJlcXVpcmVkICYmIHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuYXV0b0luY3JlbWVudC5pZGVudGl0eUluc2VydCkge1xuICAgICAgcXVlcnkgPSBgU0VUIElERU5USVRZX0lOU0VSVCAke3F1b3RlZFRhYmxlfSBPTjsgJHtxdWVyeX0gU0VUIElERU5USVRZX0lOU0VSVCAke3F1b3RlZFRhYmxlfSBPRkY7YDtcbiAgICB9XG5cbiAgICAvLyBVc2VkIGJ5IFBvc3RncmVzIHVwc2VydFF1ZXJ5IGFuZCBjYWxscyB0byBoZXJlIHdpdGggb3B0aW9ucy5leGNlcHRpb24gc2V0IHRvIHRydWVcbiAgICBjb25zdCByZXN1bHQgPSB7IHF1ZXJ5IH07XG4gICAgaWYgKG9wdGlvbnMuYmluZFBhcmFtICE9PSBmYWxzZSkge1xuICAgICAgcmVzdWx0LmJpbmQgPSBiaW5kO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gaW5zZXJ0IGludG8gY29tbWFuZCBmb3IgbXVsdGlwbGUgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZFZhbHVlSGFzaGVzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZE1hcHBlZEF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGJ1bGtJbnNlcnRRdWVyeSh0YWJsZU5hbWUsIGZpZWxkVmFsdWVIYXNoZXMsIG9wdGlvbnMsIGZpZWxkTWFwcGVkQXR0cmlidXRlcykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGZpZWxkTWFwcGVkQXR0cmlidXRlcyA9IGZpZWxkTWFwcGVkQXR0cmlidXRlcyB8fCB7fTtcblxuICAgIGNvbnN0IHR1cGxlcyA9IFtdO1xuICAgIGNvbnN0IHNlcmlhbHMgPSB7fTtcbiAgICBjb25zdCBhbGxBdHRyaWJ1dGVzID0gW107XG4gICAgbGV0IG9uRHVwbGljYXRlS2V5VXBkYXRlID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWVIYXNoIG9mIGZpZWxkVmFsdWVIYXNoZXMpIHtcbiAgICAgIF8uZm9yT3duKGZpZWxkVmFsdWVIYXNoLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIWFsbEF0dHJpYnV0ZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIGFsbEF0dHJpYnV0ZXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWVsZE1hcHBlZEF0dHJpYnV0ZXNba2V5XVxuICAgICAgICAgICYmIGZpZWxkTWFwcGVkQXR0cmlidXRlc1trZXldLmF1dG9JbmNyZW1lbnQgPT09IHRydWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2VyaWFsc1trZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaWVsZFZhbHVlSGFzaCBvZiBmaWVsZFZhbHVlSGFzaGVzKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBhbGxBdHRyaWJ1dGVzLm1hcChrZXkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5idWxrRGVmYXVsdFxuICAgICAgICAgICYmIHNlcmlhbHNba2V5XSA9PT0gdHJ1ZVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmllbGRWYWx1ZUhhc2hba2V5XSB8fCAnREVGQVVMVCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5lc2NhcGUoZmllbGRWYWx1ZUhhc2hba2V5XSwgZmllbGRNYXBwZWRBdHRyaWJ1dGVzW2tleV0sIHsgY29udGV4dDogJ0lOU0VSVCcgfSk7XG4gICAgICB9KTtcblxuICAgICAgdHVwbGVzLnB1c2goYCgke3ZhbHVlcy5qb2luKCcsJyl9KWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluc2VydHMudXBkYXRlT25EdXBsaWNhdGUgJiYgb3B0aW9ucy51cGRhdGVPbkR1cGxpY2F0ZSkge1xuICAgICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuaW5zZXJ0cy51cGRhdGVPbkR1cGxpY2F0ZSA9PSAnIE9OIENPTkZMSUNUIERPIFVQREFURSBTRVQnKSB7IC8vIHBvc3RncmVzIC8gc3FsaXRlXG4gICAgICAgIC8vIElmIG5vIGNvbmZsaWN0IHRhcmdldCBjb2x1bW5zIHdlcmUgc3BlY2lmaWVkLCB1c2UgdGhlIHByaW1hcnkga2V5IG5hbWVzIGZyb20gb3B0aW9ucy51cHNlcnRLZXlzXG4gICAgICAgIGNvbnN0IGNvbmZsaWN0S2V5cyA9IG9wdGlvbnMudXBzZXJ0S2V5cy5tYXAoYXR0ciA9PiB0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZUtleXMgPSBvcHRpb25zLnVwZGF0ZU9uRHVwbGljYXRlLm1hcChhdHRyID0+IGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHIpfT1FWENMVURFRC4ke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHIpfWApO1xuICAgICAgICBvbkR1cGxpY2F0ZUtleVVwZGF0ZSA9IGAgT04gQ09ORkxJQ1QgKCR7Y29uZmxpY3RLZXlzLmpvaW4oJywnKX0pIERPIFVQREFURSBTRVQgJHt1cGRhdGVLZXlzLmpvaW4oJywnKX1gO1xuICAgICAgfSBlbHNlIHsgLy8gbXlzcWwgLyBtYXJpYVxuICAgICAgICBjb25zdCB2YWx1ZUtleXMgPSBvcHRpb25zLnVwZGF0ZU9uRHVwbGljYXRlLm1hcChhdHRyID0+IGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHIpfT1WQUxVRVMoJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKX0pYCk7XG4gICAgICAgIG9uRHVwbGljYXRlS2V5VXBkYXRlID0gYCR7dGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbnNlcnRzLnVwZGF0ZU9uRHVwbGljYXRlfSAke3ZhbHVlS2V5cy5qb2luKCcsJyl9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVEdXBsaWNhdGVzID0gb3B0aW9ucy5pZ25vcmVEdXBsaWNhdGVzID8gdGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbnNlcnRzLmlnbm9yZUR1cGxpY2F0ZXMgOiAnJztcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gYWxsQXR0cmlidXRlcy5tYXAoYXR0ciA9PiB0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKSkuam9pbignLCcpO1xuICAgIGNvbnN0IG9uQ29uZmxpY3REb05vdGhpbmcgPSBvcHRpb25zLmlnbm9yZUR1cGxpY2F0ZXMgPyB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluc2VydHMub25Db25mbGljdERvTm90aGluZyA6ICcnO1xuICAgIGxldCByZXR1cm5pbmcgPSAnJztcblxuICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnJldHVyblZhbHVlcyAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMucmV0dXJuaW5nKSkge1xuICAgICAgY29uc3QgZmllbGRzID0gb3B0aW9ucy5yZXR1cm5pbmcubWFwKGZpZWxkID0+IHRoaXMucXVvdGVJZGVudGlmaWVyKGZpZWxkKSkuam9pbignLCcpO1xuICAgICAgcmV0dXJuaW5nICs9IGAgUkVUVVJOSU5HICR7ZmllbGRzfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybmluZyArPSB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnJldHVyblZhbHVlcyAmJiBvcHRpb25zLnJldHVybmluZyA/ICcgUkVUVVJOSU5HIConIDogJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBJTlNFUlQke2lnbm9yZUR1cGxpY2F0ZXN9IElOVE8gJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX0gKCR7YXR0cmlidXRlc30pIFZBTFVFUyAke3R1cGxlcy5qb2luKCcsJyl9JHtvbkR1cGxpY2F0ZUtleVVwZGF0ZX0ke29uQ29uZmxpY3REb05vdGhpbmd9JHtyZXR1cm5pbmd9O2A7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiB1cGRhdGUgcXVlcnlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0clZhbHVlSGFzaFxuICAgKiBAcGFyYW0ge09iamVjdH0gd2hlcmUgQSBoYXNoIHdpdGggY29uZGl0aW9ucyAoZS5nLiB7bmFtZTogJ2Zvbyd9KSBPUiBhbiBJRCBhcyBpbnRlZ2VyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cGRhdGVRdWVyeSh0YWJsZU5hbWUsIGF0dHJWYWx1ZUhhc2gsIHdoZXJlLCBvcHRpb25zLCBhdHRyaWJ1dGVzKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgXy5kZWZhdWx0cyhvcHRpb25zLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgYXR0clZhbHVlSGFzaCA9IFV0aWxzLnJlbW92ZU51bGxWYWx1ZXNGcm9tSGFzaChhdHRyVmFsdWVIYXNoLCBvcHRpb25zLm9taXROdWxsLCBvcHRpb25zKTtcblxuICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgIGNvbnN0IGJpbmQgPSBbXTtcbiAgICBjb25zdCBtb2RlbEF0dHJpYnV0ZU1hcCA9IHt9O1xuICAgIGxldCBvdXRwdXRGcmFnbWVudCA9ICcnO1xuICAgIGxldCB0bXBUYWJsZSA9ICcnOyAvLyB0bXBUYWJsZSBkZWNsYXJhdGlvbiBmb3IgdHJpZ2dlclxuICAgIGxldCBzZWxlY3RGcm9tVG1wID0gJyc7IC8vIFNlbGVjdCBzdGF0ZW1lbnQgZm9yIHRyaWdnZXJcbiAgICBsZXQgc3VmZml4ID0gJyc7XG5cbiAgICBpZiAoXy5nZXQodGhpcywgWydzZXF1ZWxpemUnLCAnb3B0aW9ucycsICdkaWFsZWN0T3B0aW9ucycsICdwcmVwZW5kU2VhcmNoUGF0aCddKSB8fCBvcHRpb25zLnNlYXJjaFBhdGgpIHtcbiAgICAgIC8vIE5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIHdpdGggc2VhcmNoIHBhdGggKHJlcXVpcmVzIG91dHB1dCBvZiBtdWx0aXBsZSBxdWVyaWVzKVxuICAgICAgb3B0aW9ucy5iaW5kUGFyYW0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiaW5kUGFyYW0gPSBvcHRpb25zLmJpbmRQYXJhbSA9PT0gdW5kZWZpbmVkID8gdGhpcy5iaW5kUGFyYW0oYmluZCkgOiBvcHRpb25zLmJpbmRQYXJhbTtcblxuICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzWydMSU1JVCBPTiBVUERBVEUnXSAmJiBvcHRpb25zLmxpbWl0KSB7XG4gICAgICBpZiAodGhpcy5kaWFsZWN0ICE9PSAnbXNzcWwnKSB7XG4gICAgICAgIHN1ZmZpeCA9IGAgTElNSVQgJHt0aGlzLmVzY2FwZShvcHRpb25zLmxpbWl0KX0gYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5yZXR1cm5WYWx1ZXMpIHtcbiAgICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnJldHVyblZhbHVlcy5vdXRwdXQpIHtcbiAgICAgICAgLy8gd2UgYWx3YXlzIG5lZWQgdGhpcyBmb3IgbXNzcWxcbiAgICAgICAgb3V0cHV0RnJhZ21lbnQgPSAnIE9VVFBVVCBJTlNFUlRFRC4qJztcblxuICAgICAgICAvL1RvIGNhcHR1cmUgb3V0cHV0IHJvd3Mgd2hlbiB0aGVyZSBpcyBhIHRyaWdnZXIgb24gTVNTUUwgREJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgb3B0aW9ucy5oYXNUcmlnZ2VyICYmIHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMudG1wVGFibGVUcmlnZ2VyKSB7XG4gICAgICAgICAgbGV0IHRtcENvbHVtbnMgPSAnJztcbiAgICAgICAgICBsZXQgb3V0cHV0Q29sdW1ucyA9ICcnO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBtb2RlbEtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW21vZGVsS2V5XTtcbiAgICAgICAgICAgIGlmICghKGF0dHJpYnV0ZS50eXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLlZJUlRVQUwpKSB7XG4gICAgICAgICAgICAgIGlmICh0bXBDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0bXBDb2x1bW5zICs9ICcsJztcbiAgICAgICAgICAgICAgICBvdXRwdXRDb2x1bW5zICs9ICcsJztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRtcENvbHVtbnMgKz0gYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cmlidXRlLmZpZWxkKX0gJHthdHRyaWJ1dGUudHlwZS50b1NxbCgpfWA7XG4gICAgICAgICAgICAgIG91dHB1dENvbHVtbnMgKz0gYElOU0VSVEVELiR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cmlidXRlLmZpZWxkKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRtcFRhYmxlID0gYGRlY2xhcmUgQHRtcCB0YWJsZSAoJHt0bXBDb2x1bW5zfSk7IGA7XG4gICAgICAgICAgb3V0cHV0RnJhZ21lbnQgPSBgIE9VVFBVVCAke291dHB1dENvbHVtbnN9IGludG8gQHRtcGA7XG4gICAgICAgICAgc2VsZWN0RnJvbVRtcCA9ICc7c2VsZWN0ICogZnJvbSBAdG1wJztcblxuICAgICAgICAgIHN1ZmZpeCArPSBzZWxlY3RGcm9tVG1wO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMucmV0dXJuVmFsdWVzICYmIG9wdGlvbnMucmV0dXJuaW5nKSB7XG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSByZXR1cm4gb3V0cHV0IGlzIHByb3Blcmx5IG1hcHBlZCB0byBtb2RlbCBmaWVsZHMuXG4gICAgICAgIG9wdGlvbnMubWFwVG9Nb2RlbCA9IHRydWU7XG4gICAgICAgIHN1ZmZpeCArPSAnIFJFVFVSTklORyAqJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgXy5lYWNoKGF0dHJpYnV0ZXMsIChhdHRyaWJ1dGUsIGtleSkgPT4ge1xuICAgICAgICBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldID0gYXR0cmlidXRlO1xuICAgICAgICBpZiAoYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgbW9kZWxBdHRyaWJ1dGVNYXBbYXR0cmlidXRlLmZpZWxkXSA9IGF0dHJpYnV0ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0clZhbHVlSGFzaCkge1xuICAgICAgaWYgKG1vZGVsQXR0cmlidXRlTWFwICYmIG1vZGVsQXR0cmlidXRlTWFwW2tleV0gJiZcbiAgICAgICAgbW9kZWxBdHRyaWJ1dGVNYXBba2V5XS5hdXRvSW5jcmVtZW50ID09PSB0cnVlICYmXG4gICAgICAgICF0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmF1dG9JbmNyZW1lbnQudXBkYXRlKSB7XG4gICAgICAgIC8vIG5vdCBhbGxvd2VkIHRvIHVwZGF0ZSBpZGVudGl0eSBjb2x1bW5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gYXR0clZhbHVlSGFzaFtrZXldO1xuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QgfHwgb3B0aW9ucy5iaW5kUGFyYW0gPT09IGZhbHNlKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGtleSl9PSR7dGhpcy5lc2NhcGUodmFsdWUsIG1vZGVsQXR0cmlidXRlTWFwICYmIG1vZGVsQXR0cmlidXRlTWFwW2tleV0gfHwgdW5kZWZpbmVkLCB7IGNvbnRleHQ6ICdVUERBVEUnIH0pfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVzLnB1c2goYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoa2V5KX09JHt0aGlzLmZvcm1hdCh2YWx1ZSwgbW9kZWxBdHRyaWJ1dGVNYXAgJiYgbW9kZWxBdHRyaWJ1dGVNYXBba2V5XSB8fCB1bmRlZmluZWQsIHsgY29udGV4dDogJ1VQREFURScgfSwgYmluZFBhcmFtKX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aGVyZU9wdGlvbnMgPSBfLmRlZmF1bHRzKHsgYmluZFBhcmFtIH0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeSA9IGAke3RtcFRhYmxlfVVQREFURSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfSBTRVQgJHt2YWx1ZXMuam9pbignLCcpfSR7b3V0cHV0RnJhZ21lbnR9ICR7dGhpcy53aGVyZVF1ZXJ5KHdoZXJlLCB3aGVyZU9wdGlvbnMpfSR7c3VmZml4fWAudHJpbSgpO1xuICAgIC8vIFVzZWQgYnkgUG9zdGdyZXMgdXBzZXJ0UXVlcnkgYW5kIGNhbGxzIHRvIGhlcmUgd2l0aCBvcHRpb25zLmV4Y2VwdGlvbiBzZXQgdG8gdHJ1ZVxuICAgIGNvbnN0IHJlc3VsdCA9IHsgcXVlcnkgfTtcbiAgICBpZiAob3B0aW9ucy5iaW5kUGFyYW0gIT09IGZhbHNlKSB7XG4gICAgICByZXN1bHQuYmluZCA9IGJpbmQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiB1cGRhdGUgcXVlcnkgdXNpbmcgYXJpdGhtZXRpYyBvcGVyYXRvclxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgICAgICBTdHJpbmcgd2l0aCB0aGUgYXJpdGhtZXRpYyBvcGVyYXRvciAoZS5nLiAnKycgb3IgJy0nKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lICAgICBOYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0clZhbHVlSGFzaCBBIGhhc2ggd2l0aCBhdHRyaWJ1dGUtdmFsdWUtcGFpcnNcbiAgICogQHBhcmFtIHtPYmplY3R9IHdoZXJlICAgICAgICAgQSBoYXNoIHdpdGggY29uZGl0aW9ucyAoZS5nLiB7bmFtZTogJ2Zvbyd9KSBPUiBhbiBJRCBhcyBpbnRlZ2VyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG4gICAqL1xuICBhcml0aG1ldGljUXVlcnkob3BlcmF0b3IsIHRhYmxlTmFtZSwgYXR0clZhbHVlSGFzaCwgd2hlcmUsIG9wdGlvbnMsIGF0dHJpYnV0ZXMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBfLmRlZmF1bHRzKG9wdGlvbnMsIHsgcmV0dXJuaW5nOiB0cnVlIH0pO1xuXG4gICAgYXR0clZhbHVlSGFzaCA9IFV0aWxzLnJlbW92ZU51bGxWYWx1ZXNGcm9tSGFzaChhdHRyVmFsdWVIYXNoLCB0aGlzLm9wdGlvbnMub21pdE51bGwpO1xuXG4gICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgbGV0IG91dHB1dEZyYWdtZW50ID0gJyc7XG4gICAgbGV0IHJldHVybmluZ0ZyYWdtZW50ID0gJyc7XG5cbiAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5yZXR1cm5WYWx1ZXMgJiYgb3B0aW9ucy5yZXR1cm5pbmcpIHtcbiAgICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnJldHVyblZhbHVlcy5yZXR1cm5pbmcpIHtcbiAgICAgICAgb3B0aW9ucy5tYXBUb01vZGVsID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuaW5nRnJhZ21lbnQgPSAnUkVUVVJOSU5HIConO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnJldHVyblZhbHVlcy5vdXRwdXQpIHtcbiAgICAgICAgb3V0cHV0RnJhZ21lbnQgPSAnIE9VVFBVVCBJTlNFUlRFRC4qJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRyVmFsdWVIYXNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF0dHJWYWx1ZUhhc2hba2V5XTtcbiAgICAgIHZhbHVlcy5wdXNoKGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGtleSl9PSR7dGhpcy5xdW90ZUlkZW50aWZpZXIoa2V5KX0ke29wZXJhdG9yfSAke3RoaXMuZXNjYXBlKHZhbHVlKX1gKTtcbiAgICB9XG5cbiAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICAgIHZhbHVlcy5wdXNoKGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGtleSl9PSR7dGhpcy5lc2NhcGUodmFsdWUpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBgVVBEQVRFICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9IFNFVCAke3ZhbHVlcy5qb2luKCcsJyl9JHtvdXRwdXRGcmFnbWVudH0gJHt0aGlzLndoZXJlUXVlcnkod2hlcmUpfSAke3JldHVybmluZ0ZyYWdtZW50fWAudHJpbSgpO1xuICB9XG5cbiAgLypcbiAgICBSZXR1cm5zIGFuIGFkZCBpbmRleCBxdWVyeS5cbiAgICBQYXJhbWV0ZXJzOlxuICAgICAgLSB0YWJsZU5hbWUgLT4gTmFtZSBvZiBhbiBleGlzdGluZyB0YWJsZSwgcG9zc2libHkgd2l0aCBzY2hlbWEuXG4gICAgICAtIG9wdGlvbnM6XG4gICAgICAgIC0gdHlwZTogVU5JUVVFfEZVTExURVhUfFNQQVRJQUxcbiAgICAgICAgLSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgaW5kZXguIERlZmF1bHQgaXMgPHRhYmxlPl88YXR0cjE+XzxhdHRyMj5cbiAgICAgICAgLSBmaWVsZHM6IEFuIGFycmF5IG9mIGF0dHJpYnV0ZXMgYXMgc3RyaW5nIG9yIGFzIGhhc2guXG4gICAgICAgICAgICAgICAgICBJZiB0aGUgYXR0cmlidXRlIGlzIGEgaGFzaCwgaXQgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgY29udGVudDpcbiAgICAgICAgICAgICAgICAgIC0gbmFtZTogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS9jb2x1bW5cbiAgICAgICAgICAgICAgICAgIC0gbGVuZ3RoOiBBbiBpbnRlZ2VyLiBPcHRpb25hbFxuICAgICAgICAgICAgICAgICAgLSBvcmRlcjogJ0FTQycgb3IgJ0RFU0MnLiBPcHRpb25hbFxuICAgICAgICAtIHBhcnNlclxuICAgICAgICAtIHVzaW5nXG4gICAgICAgIC0gb3BlcmF0b3JcbiAgICAgICAgLSBjb25jdXJyZW50bHk6IFBhc3MgQ09OQ1VSUkVOVCBzbyBvdGhlciBvcGVyYXRpb25zIHJ1biB3aGlsZSB0aGUgaW5kZXggaXMgY3JlYXRlZFxuICAgICAgLSByYXdUYWJsZW5hbWUsIHRoZSBuYW1lIG9mIHRoZSB0YWJsZSwgd2l0aG91dCBzY2hlbWEuIFVzZWQgdG8gY3JlYXRlIHRoZSBuYW1lIG9mIHRoZSBpbmRleFxuICAgQHByaXZhdGVcbiAgKi9cbiAgYWRkSW5kZXhRdWVyeSh0YWJsZU5hbWUsIGF0dHJpYnV0ZXMsIG9wdGlvbnMsIHJhd1RhYmxlbmFtZSkge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGF0dHJpYnV0ZXMpKSB7XG4gICAgICBvcHRpb25zID0gYXR0cmlidXRlcztcbiAgICAgIGF0dHJpYnV0ZXMgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuZmllbGRzID0gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBvcHRpb25zLnByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8IHJhd1RhYmxlbmFtZSB8fCB0YWJsZU5hbWU7XG4gICAgaWYgKG9wdGlvbnMucHJlZml4ICYmIHR5cGVvZiBvcHRpb25zLnByZWZpeCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMucHJlZml4ID0gb3B0aW9ucy5wcmVmaXgucmVwbGFjZSgvXFwuL2csICdfJyk7XG4gICAgICBvcHRpb25zLnByZWZpeCA9IG9wdGlvbnMucHJlZml4LnJlcGxhY2UoLyhcInwnKS9nLCAnJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRzU3FsID0gb3B0aW9ucy5maWVsZHMubWFwKGZpZWxkID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZmllbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1b3RlSWRlbnRpZmllcihmaWVsZCk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKGZpZWxkKTtcbiAgICAgIH1cbiAgICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgICAgaWYgKGZpZWxkLmF0dHJpYnV0ZSkge1xuICAgICAgICBmaWVsZC5uYW1lID0gZmllbGQuYXR0cmlidXRlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZpZWxkLm5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZm9sbG93aW5nIGluZGV4IGZpZWxkIGhhcyBubyBuYW1lOiAke3V0aWwuaW5zcGVjdChmaWVsZCl9YCk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCArPSB0aGlzLnF1b3RlSWRlbnRpZmllcihmaWVsZC5uYW1lKTtcblxuICAgICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuaW5kZXguY29sbGF0ZSAmJiBmaWVsZC5jb2xsYXRlKSB7XG4gICAgICAgIHJlc3VsdCArPSBgIENPTExBVEUgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihmaWVsZC5jb2xsYXRlKX1gO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbmRleC5sZW5ndGggJiYgZmllbGQubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdCArPSBgKCR7ZmllbGQubGVuZ3RofSlgO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGQub3JkZXIpIHtcbiAgICAgICAgcmVzdWx0ICs9IGAgJHtmaWVsZC5vcmRlcn1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgIC8vIE1vc3RseSBmb3IgY2FzZXMgd2hlcmUgYWRkSW5kZXggaXMgY2FsbGVkIGRpcmVjdGx5IGJ5IHRoZSB1c2VyIHdpdGhvdXQgYW4gb3B0aW9ucyBvYmplY3QgKGZvciBleGFtcGxlIGluIG1pZ3JhdGlvbnMpXG4gICAgICAvLyBBbGwgY2FsbHMgdGhhdCBnbyB0aHJvdWdoIHNlcXVlbGl6ZSBzaG91bGQgYWxyZWFkeSBoYXZlIGEgbmFtZVxuICAgICAgb3B0aW9ucyA9IFV0aWxzLm5hbWVJbmRleChvcHRpb25zLCBvcHRpb25zLnByZWZpeCk7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IE1vZGVsLl9jb25mb3JtSW5kZXgob3B0aW9ucyk7XG5cbiAgICBpZiAoIXRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuaW5kZXgudHlwZSkge1xuICAgICAgZGVsZXRlIG9wdGlvbnMudHlwZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy53aGVyZSkge1xuICAgICAgb3B0aW9ucy53aGVyZSA9IHRoaXMud2hlcmVRdWVyeShvcHRpb25zLndoZXJlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRhYmxlTmFtZSA9IHRoaXMucXVvdGVJZGVudGlmaWVycyh0YWJsZU5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZU5hbWUgPSB0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25jdXJyZW50bHkgPSB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluZGV4LmNvbmN1cnJlbnRseSAmJiBvcHRpb25zLmNvbmN1cnJlbnRseSA/ICdDT05DVVJSRU5UTFknIDogdW5kZWZpbmVkO1xuICAgIGxldCBpbmQ7XG4gICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuaW5kZXhWaWFBbHRlcikge1xuICAgICAgaW5kID0gW1xuICAgICAgICAnQUxURVIgVEFCTEUnLFxuICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgIGNvbmN1cnJlbnRseSxcbiAgICAgICAgJ0FERCdcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZCA9IFsnQ1JFQVRFJ107XG4gICAgfVxuXG4gICAgaW5kID0gaW5kLmNvbmNhdChcbiAgICAgIG9wdGlvbnMudW5pcXVlID8gJ1VOSVFVRScgOiAnJyxcbiAgICAgIG9wdGlvbnMudHlwZSwgJ0lOREVYJyxcbiAgICAgICF0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluZGV4VmlhQWx0ZXIgPyBjb25jdXJyZW50bHkgOiB1bmRlZmluZWQsXG4gICAgICB0aGlzLnF1b3RlSWRlbnRpZmllcnMob3B0aW9ucy5uYW1lKSxcbiAgICAgIHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuaW5kZXgudXNpbmcgPT09IDEgJiYgb3B0aW9ucy51c2luZyA/IGBVU0lORyAke29wdGlvbnMudXNpbmd9YCA6ICcnLFxuICAgICAgIXRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuaW5kZXhWaWFBbHRlciA/IGBPTiAke3RhYmxlTmFtZX1gIDogdW5kZWZpbmVkLFxuICAgICAgdGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbmRleC51c2luZyA9PT0gMiAmJiBvcHRpb25zLnVzaW5nID8gYFVTSU5HICR7b3B0aW9ucy51c2luZ31gIDogJycsXG4gICAgICBgKCR7ZmllbGRzU3FsLmpvaW4oJywgJyl9JHtvcHRpb25zLm9wZXJhdG9yID8gYCAke29wdGlvbnMub3BlcmF0b3J9YCA6ICcnfSlgLFxuICAgICAgdGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbmRleC5wYXJzZXIgJiYgb3B0aW9ucy5wYXJzZXIgPyBgV0lUSCBQQVJTRVIgJHtvcHRpb25zLnBhcnNlcn1gIDogdW5kZWZpbmVkLFxuICAgICAgdGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5pbmRleC53aGVyZSAmJiBvcHRpb25zLndoZXJlID8gb3B0aW9ucy53aGVyZSA6IHVuZGVmaW5lZFxuICAgICk7XG5cbiAgICByZXR1cm4gXy5jb21wYWN0KGluZCkuam9pbignICcpO1xuICB9XG5cbiAgYWRkQ29uc3RyYWludFF1ZXJ5KHRhYmxlTmFtZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGNvbnN0cmFpbnRTbmlwcGV0ID0gdGhpcy5nZXRDb25zdHJhaW50U25pcHBldCh0YWJsZU5hbWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiB0YWJsZU5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0YWJsZU5hbWUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcnModGFibGVOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVOYW1lID0gdGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBBTFRFUiBUQUJMRSAke3RhYmxlTmFtZX0gQUREICR7Y29uc3RyYWludFNuaXBwZXR9O2A7XG4gIH1cblxuICBnZXRDb25zdHJhaW50U25pcHBldCh0YWJsZU5hbWUsIG9wdGlvbnMpIHtcbiAgICBsZXQgY29uc3RyYWludFNuaXBwZXQsIGNvbnN0cmFpbnROYW1lO1xuXG4gICAgY29uc3QgZmllbGRzU3FsID0gb3B0aW9ucy5maWVsZHMubWFwKGZpZWxkID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZmllbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1b3RlSWRlbnRpZmllcihmaWVsZCk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKGZpZWxkKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5hdHRyaWJ1dGUpIHtcbiAgICAgICAgZmllbGQubmFtZSA9IGZpZWxkLmF0dHJpYnV0ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFmaWVsZC5uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGxvd2luZyBpbmRleCBmaWVsZCBoYXMgbm8gbmFtZTogJHtmaWVsZH1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucXVvdGVJZGVudGlmaWVyKGZpZWxkLm5hbWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZmllbGRzU3FsUXVvdGVkU3RyaW5nID0gZmllbGRzU3FsLmpvaW4oJywgJyk7XG4gICAgY29uc3QgZmllbGRzU3FsU3RyaW5nID0gZmllbGRzU3FsLmpvaW4oJ18nKTtcblxuICAgIHN3aXRjaCAob3B0aW9ucy50eXBlLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ1VOSVFVRSc6XG4gICAgICAgIGNvbnN0cmFpbnROYW1lID0gdGhpcy5xdW90ZUlkZW50aWZpZXIob3B0aW9ucy5uYW1lIHx8IGAke3RhYmxlTmFtZX1fJHtmaWVsZHNTcWxTdHJpbmd9X3VrYCk7XG4gICAgICAgIGNvbnN0cmFpbnRTbmlwcGV0ID0gYENPTlNUUkFJTlQgJHtjb25zdHJhaW50TmFtZX0gVU5JUVVFICgke2ZpZWxkc1NxbFF1b3RlZFN0cmluZ30pYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdDSEVDSyc6XG4gICAgICAgIG9wdGlvbnMud2hlcmUgPSB0aGlzLndoZXJlSXRlbXNRdWVyeShvcHRpb25zLndoZXJlKTtcbiAgICAgICAgY29uc3RyYWludE5hbWUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcihvcHRpb25zLm5hbWUgfHwgYCR7dGFibGVOYW1lfV8ke2ZpZWxkc1NxbFN0cmluZ31fY2tgKTtcbiAgICAgICAgY29uc3RyYWludFNuaXBwZXQgPSBgQ09OU1RSQUlOVCAke2NvbnN0cmFpbnROYW1lfSBDSEVDSyAoJHtvcHRpb25zLndoZXJlfSlgO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0RFRkFVTFQnOlxuICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRGVmYXVsdCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmVkIGZvciBERUZBVUxUIENPTlNUUkFJTlQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kaWFsZWN0Lm5hbWUgIT09ICdtc3NxbCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlZmF1bHQgY29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBvbmx5IGZvciBNU1NRTCBkaWFsZWN0LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3RyYWludE5hbWUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcihvcHRpb25zLm5hbWUgfHwgYCR7dGFibGVOYW1lfV8ke2ZpZWxkc1NxbFN0cmluZ31fZGZgKTtcbiAgICAgICAgY29uc3RyYWludFNuaXBwZXQgPSBgQ09OU1RSQUlOVCAke2NvbnN0cmFpbnROYW1lfSBERUZBVUxUICgke3RoaXMuZXNjYXBlKG9wdGlvbnMuZGVmYXVsdFZhbHVlKX0pIEZPUiAke2ZpZWxkc1NxbFswXX1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1BSSU1BUlkgS0VZJzpcbiAgICAgICAgY29uc3RyYWludE5hbWUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcihvcHRpb25zLm5hbWUgfHwgYCR7dGFibGVOYW1lfV8ke2ZpZWxkc1NxbFN0cmluZ31fcGtgKTtcbiAgICAgICAgY29uc3RyYWludFNuaXBwZXQgPSBgQ09OU1RSQUlOVCAke2NvbnN0cmFpbnROYW1lfSBQUklNQVJZIEtFWSAoJHtmaWVsZHNTcWxRdW90ZWRTdHJpbmd9KWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRk9SRUlHTiBLRVknOlxuICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gb3B0aW9ucy5yZWZlcmVuY2VzO1xuICAgICAgICBpZiAoIXJlZmVyZW5jZXMgfHwgIXJlZmVyZW5jZXMudGFibGUgfHwgIXJlZmVyZW5jZXMuZmllbGQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZmVyZW5jZXMgb2JqZWN0IHdpdGggdGFibGUgYW5kIGZpZWxkIG11c3QgYmUgc3BlY2lmaWVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWludE5hbWUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcihvcHRpb25zLm5hbWUgfHwgYCR7dGFibGVOYW1lfV8ke2ZpZWxkc1NxbFN0cmluZ31fJHtyZWZlcmVuY2VzLnRhYmxlfV9ma2ApO1xuICAgICAgICBjb25zdCByZWZlcmVuY2VzU25pcHBldCA9IGAke3RoaXMucXVvdGVUYWJsZShyZWZlcmVuY2VzLnRhYmxlKX0gKCR7dGhpcy5xdW90ZUlkZW50aWZpZXIocmVmZXJlbmNlcy5maWVsZCl9KWA7XG4gICAgICAgIGNvbnN0cmFpbnRTbmlwcGV0ID0gYENPTlNUUkFJTlQgJHtjb25zdHJhaW50TmFtZX0gYDtcbiAgICAgICAgY29uc3RyYWludFNuaXBwZXQgKz0gYEZPUkVJR04gS0VZICgke2ZpZWxkc1NxbFF1b3RlZFN0cmluZ30pIFJFRkVSRU5DRVMgJHtyZWZlcmVuY2VzU25pcHBldH1gO1xuICAgICAgICBpZiAob3B0aW9ucy5vblVwZGF0ZSkge1xuICAgICAgICAgIGNvbnN0cmFpbnRTbmlwcGV0ICs9IGAgT04gVVBEQVRFICR7b3B0aW9ucy5vblVwZGF0ZS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMub25EZWxldGUpIHtcbiAgICAgICAgICBjb25zdHJhaW50U25pcHBldCArPSBgIE9OIERFTEVURSAke29wdGlvbnMub25EZWxldGUudG9VcHBlckNhc2UoKX1gO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGAke29wdGlvbnMudHlwZX0gaXMgaW52YWxpZC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnN0cmFpbnRTbmlwcGV0O1xuICB9XG5cbiAgcmVtb3ZlQ29uc3RyYWludFF1ZXJ5KHRhYmxlTmFtZSwgY29uc3RyYWludE5hbWUpIHtcbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRhYmxlTmFtZSA9IHRoaXMucXVvdGVJZGVudGlmaWVycyh0YWJsZU5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZU5hbWUgPSB0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYEFMVEVSIFRBQkxFICR7dGFibGVOYW1lfSBEUk9QIENPTlNUUkFJTlQgJHt0aGlzLnF1b3RlSWRlbnRpZmllcnMoY29uc3RyYWludE5hbWUpfWA7XG4gIH1cblxuICAvKlxuICAgIFF1b3RlIGFuIG9iamVjdCBiYXNlZCBvbiBpdHMgdHlwZS4gVGhpcyBpcyBhIG1vcmUgZ2VuZXJhbCB2ZXJzaW9uIG9mIHF1b3RlSWRlbnRpZmllcnNcbiAgICBTdHJpbmdzOiBzaG91bGQgcHJveHkgdG8gcXVvdGVJZGVudGlmaWVyc1xuICAgIEFycmF5czpcbiAgICAgICogRXhwZWN0cyBhcnJheSBpbiB0aGUgZm9ybTogWzxtb2RlbD4gKG9wdGlvbmFsKSwgPG1vZGVsPiAob3B0aW9uYWwpLC4uLiBTdHJpbmcsIFN0cmluZyAob3B0aW9uYWwpXVxuICAgICAgICBFYWNoIDxtb2RlbD4gY2FuIGJlIGEgbW9kZWwsIG9yIGFuIG9iamVjdCB7bW9kZWw6IE1vZGVsLCBhczogU3RyaW5nfSwgbWF0Y2hpbmcgaW5jbHVkZSwgb3IgYW5cbiAgICAgICAgYXNzb2NpYXRpb24gb2JqZWN0LCBvciB0aGUgbmFtZSBvZiBhbiBhc3NvY2lhdGlvbi5cbiAgICAgICogWmVybyBvciBtb3JlIG1vZGVscyBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIGFycmF5IGFuZCBhcmUgdXNlZCB0byB0cmFjZSBhIHBhdGggdGhyb3VnaCB0aGUgdHJlZSBvZlxuICAgICAgICBpbmNsdWRlZCBuZXN0ZWQgYXNzb2NpYXRpb25zLiBUaGlzIHByb2R1Y2VzIHRoZSBjb3JyZWN0IHRhYmxlIG5hbWUgZm9yIHRoZSBPUkRFUiBCWS9HUk9VUCBCWSBTUUxcbiAgICAgICAgYW5kIHF1b3RlcyBpdC5cbiAgICAgICogSWYgYSBzaW5nbGUgc3RyaW5nIGlzIGFwcGVuZGVkIHRvIGVuZCBvZiBhcnJheSwgaXQgaXMgcXVvdGVkLlxuICAgICAgICBJZiB0d28gc3RyaW5ncyBhcHBlbmRlZCwgdGhlIDFzdCBzdHJpbmcgaXMgcXVvdGVkLCB0aGUgMm5kIHN0cmluZyB1bnF1b3RlZC5cbiAgICBPYmplY3RzOlxuICAgICAgKiBJZiByYXcgaXMgc2V0LCB0aGF0IHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCB2ZXJiYXRpbSwgd2l0aG91dCBxdW90aW5nXG4gICAgICAqIElmIGZuIGlzIHNldCwgdGhlIHN0cmluZyBzaG91bGQgc3RhcnQgd2l0aCB0aGUgdmFsdWUgb2YgZm4sIHN0YXJ0aW5nIHBhcmVuLCBmb2xsb3dlZCBieVxuICAgICAgICB0aGUgdmFsdWVzIG9mIGNvbHMgKHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgYW4gYXJyYXkpLCBxdW90ZWQgYW5kIGpvaW5lZCB3aXRoICcsICcsXG4gICAgICAgIHVubGVzcyB0aGV5IGFyZSB0aGVtc2VsdmVzIG9iamVjdHNcbiAgICAgICogSWYgZGlyZWN0aW9uIGlzIHNldCwgc2hvdWxkIGJlIHByZXBlbmRlZFxuXG4gICAgQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIGZvciBvcmRlcmluZyAvIGdyb3VwaW5nIGNvbHVtbnMgYW5kIFNlcXVlbGl6ZS5jb2woKSwgYnV0IGl0IGNvdWxkXG4gICAgcG90ZW50aWFsbHkgYWxzbyBiZSB1c2VkIGZvciBvdGhlciBwbGFjZXMgd2hlcmUgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGNhbGwgU1FMIGZ1bmN0aW9ucyAoZS5nLiBhcyBkZWZhdWx0IHZhbHVlcylcbiAgIEBwcml2YXRlXG4gICovXG4gIHF1b3RlKGNvbGxlY3Rpb24sIHBhcmVudCwgY29ubmVjdG9yKSB7XG4gICAgLy8gaW5pdFxuICAgIGNvbnN0IHZhbGlkT3JkZXJPcHRpb25zID0gW1xuICAgICAgJ0FTQycsXG4gICAgICAnREVTQycsXG4gICAgICAnQVNDIE5VTExTIExBU1QnLFxuICAgICAgJ0RFU0MgTlVMTFMgTEFTVCcsXG4gICAgICAnQVNDIE5VTExTIEZJUlNUJyxcbiAgICAgICdERVNDIE5VTExTIEZJUlNUJyxcbiAgICAgICdOVUxMUyBGSVJTVCcsXG4gICAgICAnTlVMTFMgTEFTVCdcbiAgICBdO1xuXG4gICAgLy8gZGVmYXVsdFxuICAgIGNvbm5lY3RvciA9IGNvbm5lY3RvciB8fCAnLic7XG5cbiAgICAvLyBqdXN0IHF1b3RlIGFzIGlkZW50aWZpZXJzIGlmIHN0cmluZ1xuICAgIGlmICh0eXBlb2YgY29sbGVjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1b3RlSWRlbnRpZmllcnMoY29sbGVjdGlvbik7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIGNvbGxlY3Rpb24gYW5kIG11dGF0ZSBvYmplY3RzIGludG8gYXNzb2NpYXRpb25zXG4gICAgICBjb2xsZWN0aW9uLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gY29sbGVjdGlvbltpbmRleCAtIDFdO1xuICAgICAgICBsZXQgcHJldmlvdXNBc3NvY2lhdGlvbjtcbiAgICAgICAgbGV0IHByZXZpb3VzTW9kZWw7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBwcmV2aW91cyBhcyB0aGUgcGFyZW50IHdoZW4gcHJldmlvdXMgaXMgdW5kZWZpbmVkIG9yIHRoZSB0YXJnZXQgb2YgdGhlIGFzc29jaWF0aW9uXG4gICAgICAgIGlmICghcHJldmlvdXMgJiYgcGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcmV2aW91c01vZGVsID0gcGFyZW50O1xuICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzIGluc3RhbmNlb2YgQXNzb2NpYXRpb24pIHtcbiAgICAgICAgICBwcmV2aW91c0Fzc29jaWF0aW9uID0gcHJldmlvdXM7XG4gICAgICAgICAgcHJldmlvdXNNb2RlbCA9IHByZXZpb3VzLnRhcmdldDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZSBwcmV2aW91cyBpdGVtIGlzIGEgbW9kZWwsIHRoZW4gYXR0ZW1wdCBnZXR0aW5nIGFuIGFzc29jaWF0aW9uXG4gICAgICAgIGlmIChwcmV2aW91c01vZGVsICYmIHByZXZpb3VzTW9kZWwucHJvdG90eXBlIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgICAgbGV0IGFzO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnZnVuY3Rpb24nICYmIGl0ZW0ucHJvdG90eXBlIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICAgIC8vIHNldFxuICAgICAgICAgICAgbW9kZWwgPSBpdGVtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGl0ZW0pICYmIGl0ZW0ubW9kZWwgJiYgaXRlbS5tb2RlbC5wcm90b3R5cGUgaW5zdGFuY2VvZiBNb2RlbCkge1xuICAgICAgICAgICAgLy8gc2V0XG4gICAgICAgICAgICBtb2RlbCA9IGl0ZW0ubW9kZWw7XG4gICAgICAgICAgICBhcyA9IGl0ZW0uYXM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1vZGVsKSB7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIGFzIHRvIGVpdGhlciB0aGUgdGhyb3VnaCBuYW1lIG9yIHRoZSBtb2RlbCBuYW1lXG4gICAgICAgICAgICBpZiAoIWFzICYmIHByZXZpb3VzQXNzb2NpYXRpb24gJiYgcHJldmlvdXNBc3NvY2lhdGlvbiBpbnN0YW5jZW9mIEFzc29jaWF0aW9uICYmIHByZXZpb3VzQXNzb2NpYXRpb24udGhyb3VnaCAmJiBwcmV2aW91c0Fzc29jaWF0aW9uLnRocm91Z2gubW9kZWwgPT09IG1vZGVsKSB7XG4gICAgICAgICAgICAgIC8vIGdldCBmcm9tIHByZXZpb3VzIGFzc29jaWF0aW9uXG4gICAgICAgICAgICAgIGl0ZW0gPSBuZXcgQXNzb2NpYXRpb24ocHJldmlvdXNNb2RlbCwgbW9kZWwsIHtcbiAgICAgICAgICAgICAgICBhczogbW9kZWwubmFtZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGdldCBhc3NvY2lhdGlvbiBmcm9tIHByZXZpb3VzIG1vZGVsXG4gICAgICAgICAgICAgIGl0ZW0gPSBwcmV2aW91c01vZGVsLmdldEFzc29jaWF0aW9uRm9yQWxpYXMobW9kZWwsIGFzKTtcblxuICAgICAgICAgICAgICAvLyBhdHRlbXB0IHRvIHVzZSB0aGUgbW9kZWwgbmFtZSBpZiB0aGUgaXRlbSBpcyBzdGlsbCBudWxsXG4gICAgICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgICAgIGl0ZW0gPSBwcmV2aW91c01vZGVsLmdldEFzc29jaWF0aW9uRm9yQWxpYXMobW9kZWwsIG1vZGVsLm5hbWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFzc29jaWF0aW9uXG4gICAgICAgICAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgQXNzb2NpYXRpb24pKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnVW5hYmxlIHRvIGZpbmQgYSB2YWxpZCBhc3NvY2lhdGlvbiBmb3IgbW9kZWwsIFxcJyVzXFwnJywgbW9kZWwubmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyBnZXQgb3JkZXIgaW5kZXhcbiAgICAgICAgICBjb25zdCBvcmRlckluZGV4ID0gdmFsaWRPcmRlck9wdGlvbnMuaW5kZXhPZihpdGVtLnRvVXBwZXJDYXNlKCkpO1xuXG4gICAgICAgICAgLy8gc2VlIGlmIHRoaXMgaXMgYW4gb3JkZXJcbiAgICAgICAgICBpZiAoaW5kZXggPiAwICYmIG9yZGVySW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBpdGVtID0gdGhpcy5zZXF1ZWxpemUubGl0ZXJhbChgICR7dmFsaWRPcmRlck9wdGlvbnNbb3JkZXJJbmRleF19YCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c01vZGVsICYmIHByZXZpb3VzTW9kZWwucHJvdG90eXBlIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgZ28gZG93biB0aGlzIHBhdGggaWYgd2UgaGF2ZSBwcmVpdm91cyBtb2RlbCBhbmQgY2hlY2sgb25seSBvbmNlXG4gICAgICAgICAgICBpZiAocHJldmlvdXNNb2RlbC5hc3NvY2lhdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c01vZGVsLmFzc29jaWF0aW9uc1tpdGVtXSkge1xuICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBpdGVtIHRvIGFuIGFzc29jaWF0aW9uXG4gICAgICAgICAgICAgIGl0ZW0gPSBwcmV2aW91c01vZGVsLmFzc29jaWF0aW9uc1tpdGVtXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNNb2RlbC5yYXdBdHRyaWJ1dGVzICE9PSB1bmRlZmluZWQgJiYgcHJldmlvdXNNb2RlbC5yYXdBdHRyaWJ1dGVzW2l0ZW1dICYmIGl0ZW0gIT09IHByZXZpb3VzTW9kZWwucmF3QXR0cmlidXRlc1tpdGVtXS5maWVsZCkge1xuICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBpdGVtIGF0dHJpYnV0ZSBmcm9tIGl0cyBhbGlhc1xuICAgICAgICAgICAgICBpdGVtID0gcHJldmlvdXNNb2RlbC5yYXdBdHRyaWJ1dGVzW2l0ZW1dLmZpZWxkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgaXRlbS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICAgICYmIHByZXZpb3VzTW9kZWwucmF3QXR0cmlidXRlcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbVNwbGl0ID0gaXRlbS5zcGxpdCgnLicpO1xuXG4gICAgICAgICAgICAgIGlmIChwcmV2aW91c01vZGVsLnJhd0F0dHJpYnV0ZXNbaXRlbVNwbGl0WzBdXS50eXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLkpTT04pIHtcbiAgICAgICAgICAgICAgICAvLyBqdXN0IHF1b3RlIGlkZW50aWZpZXJzIGZvciBub3dcbiAgICAgICAgICAgICAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5xdW90ZUlkZW50aWZpZXJzKGAke3ByZXZpb3VzTW9kZWwubmFtZX0uJHtwcmV2aW91c01vZGVsLnJhd0F0dHJpYnV0ZXNbaXRlbVNwbGl0WzBdXS5maWVsZH1gKTtcblxuICAgICAgICAgICAgICAgIC8vIGdldCBwYXRoXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGl0ZW1TcGxpdC5zbGljZSgxKTtcblxuICAgICAgICAgICAgICAgIC8vIGV4dHJhY3QgcGF0aFxuICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmpzb25QYXRoRXh0cmFjdGlvblF1ZXJ5KGlkZW50aWZpZXIsIHBhdGgpO1xuXG4gICAgICAgICAgICAgICAgLy8gbGl0ZXJhbCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYXBwZW5kIHRoZSBtb2RlbCBuYW1lIHdoZW4gc3RyaW5nXG4gICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMuc2VxdWVsaXplLmxpdGVyYWwoaXRlbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb2xsZWN0aW9uW2luZGV4XSA9IGl0ZW07XG4gICAgICB9LCB0aGlzKTtcblxuICAgICAgLy8gbG9vcCB0aHJvdWdoIGFycmF5LCBhZGRpbmcgdGFibGUgbmFtZXMgb2YgbW9kZWxzIHRvIHF1b3RlZFxuICAgICAgY29uc3QgY29sbGVjdGlvbkxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgY29uc3QgdGFibGVOYW1lcyA9IFtdO1xuICAgICAgbGV0IGl0ZW07XG4gICAgICBsZXQgaSA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xsZWN0aW9uTGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGl0ZW0gPSBjb2xsZWN0aW9uW2ldO1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnIHx8IGl0ZW0uX21vZGVsQXR0cmlidXRlIHx8IGl0ZW0gaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgQXNzb2NpYXRpb24pIHtcbiAgICAgICAgICB0YWJsZU5hbWVzW2ldID0gaXRlbS5hcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzdGFydCBidWlsZGluZyBzcWxcbiAgICAgIGxldCBzcWwgPSAnJztcblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIHNxbCArPSBgJHt0aGlzLnF1b3RlSWRlbnRpZmllcih0YWJsZU5hbWVzLmpvaW4oY29ubmVjdG9yKSl9LmA7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2xsZWN0aW9uWzBdID09PSAnc3RyaW5nJyAmJiBwYXJlbnQpIHtcbiAgICAgICAgc3FsICs9IGAke3RoaXMucXVvdGVJZGVudGlmaWVyKHBhcmVudC5uYW1lKX0uYDtcbiAgICAgIH1cblxuICAgICAgLy8gbG9vcCB0aHJvdWdoIGV2ZXJ5dGhpbmcgcGFzdCBpIGFuZCBhcHBlbmQgdG8gdGhlIHNxbFxuICAgICAgY29sbGVjdGlvbi5zbGljZShpKS5mb3JFYWNoKGNvbGxlY3Rpb25JdGVtID0+IHtcbiAgICAgICAgc3FsICs9IHRoaXMucXVvdGUoY29sbGVjdGlvbkl0ZW0sIHBhcmVudCwgY29ubmVjdG9yKTtcbiAgICAgIH0sIHRoaXMpO1xuXG4gICAgICByZXR1cm4gc3FsO1xuICAgIH1cbiAgICBpZiAoY29sbGVjdGlvbi5fbW9kZWxBdHRyaWJ1dGUpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnF1b3RlVGFibGUoY29sbGVjdGlvbi5Nb2RlbC5uYW1lKX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcihjb2xsZWN0aW9uLmZpZWxkTmFtZSl9YDtcbiAgICB9XG4gICAgaWYgKGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNlcXVlbGl6ZU1ldGhvZChjb2xsZWN0aW9uKTtcbiAgICB9XG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChjb2xsZWN0aW9uKSAmJiBjb2xsZWN0aW9uLnJhdykge1xuICAgICAgLy8gc2ltcGxlIG9iamVjdHMgd2l0aCByYXcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHtyYXc6IFwiLi4uXCJ9YCBzeW50YXggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIFVzZSBgc2VxdWVsaXplLmxpdGVyYWxgIGluc3RlYWQuJyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdHJ1Y3R1cmUgcGFzc2VkIHRvIG9yZGVyIC8gZ3JvdXA6ICR7dXRpbC5pbnNwZWN0KGNvbGxlY3Rpb24pfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IGEgbGlzdCBvZiBpZGVudGlmaWVycyBieSBcIi5cIiBhbmQgcXVvdGUgZWFjaCBwYXJ0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHF1b3RlSWRlbnRpZmllcihpZGVudGlmaWVyLCBmb3JjZSkge1xuICAgIHJldHVybiBRdW90ZUhlbHBlci5xdW90ZUlkZW50aWZpZXIodGhpcy5kaWFsZWN0LCBpZGVudGlmaWVyLCB7XG4gICAgICBmb3JjZSxcbiAgICAgIHF1b3RlSWRlbnRpZmllcnM6IHRoaXMub3B0aW9ucy5xdW90ZUlkZW50aWZpZXJzXG4gICAgfSk7XG4gIH1cblxuICBxdW90ZUlkZW50aWZpZXJzKGlkZW50aWZpZXJzKSB7XG4gICAgaWYgKGlkZW50aWZpZXJzLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIGlkZW50aWZpZXJzID0gaWRlbnRpZmllcnMuc3BsaXQoJy4nKTtcblxuICAgICAgY29uc3QgaGVhZCA9IGlkZW50aWZpZXJzLnNsaWNlKDAsIGlkZW50aWZpZXJzLmxlbmd0aCAtIDEpLmpvaW4oJy0+Jyk7XG4gICAgICBjb25zdCB0YWlsID0gaWRlbnRpZmllcnNbaWRlbnRpZmllcnMubGVuZ3RoIC0gMV07XG5cbiAgICAgIHJldHVybiBgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihoZWFkKX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcih0YWlsKX1gO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1b3RlSWRlbnRpZmllcihpZGVudGlmaWVycyk7XG4gIH1cblxuICBxdW90ZUF0dHJpYnV0ZShhdHRyaWJ1dGUsIG1vZGVsKSB7XG4gICAgaWYgKG1vZGVsICYmIGF0dHJpYnV0ZSBpbiBtb2RlbC5yYXdBdHRyaWJ1dGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cmlidXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucXVvdGVJZGVudGlmaWVycyhhdHRyaWJ1dGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1b3RlIHRhYmxlIG5hbWUgd2l0aCBvcHRpb25hbCBhbGlhcyBhbmQgc2NoZW1hIGF0dHJpYnV0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gIHBhcmFtIHRhYmxlIHN0cmluZyBvciBvYmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gYWxpYXMgYWxpYXMgbmFtZVxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcXVvdGVUYWJsZShwYXJhbSwgYWxpYXMpIHtcbiAgICBsZXQgdGFibGUgPSAnJztcblxuICAgIGlmIChhbGlhcyA9PT0gdHJ1ZSkge1xuICAgICAgYWxpYXMgPSBwYXJhbS5hcyB8fCBwYXJhbS5uYW1lIHx8IHBhcmFtO1xuICAgIH1cblxuICAgIGlmIChfLmlzT2JqZWN0KHBhcmFtKSkge1xuICAgICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMuc2NoZW1hcykge1xuICAgICAgICBpZiAocGFyYW0uc2NoZW1hKSB7XG4gICAgICAgICAgdGFibGUgKz0gYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIocGFyYW0uc2NoZW1hKX0uYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlICs9IHRoaXMucXVvdGVJZGVudGlmaWVyKHBhcmFtLnRhYmxlTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGFyYW0uc2NoZW1hKSB7XG4gICAgICAgICAgdGFibGUgKz0gcGFyYW0uc2NoZW1hICsgKHBhcmFtLmRlbGltaXRlciB8fCAnLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGUgKz0gcGFyYW0udGFibGVOYW1lO1xuICAgICAgICB0YWJsZSA9IHRoaXMucXVvdGVJZGVudGlmaWVyKHRhYmxlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcihwYXJhbSk7XG4gICAgfVxuXG4gICAgaWYgKGFsaWFzKSB7XG4gICAgICB0YWJsZSArPSBgIEFTICR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYWxpYXMpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlO1xuICB9XG5cbiAgLypcbiAgICBFc2NhcGUgYSB2YWx1ZSAoZS5nLiBhIHN0cmluZywgbnVtYmVyIG9yIGRhdGUpXG4gICAgQHByaXZhdGVcbiAgKi9cbiAgZXNjYXBlKHZhbHVlLCBmaWVsZCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXF1ZWxpemVNZXRob2QodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLnR5cGUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZSh2YWx1ZSwgZmllbGQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChmaWVsZC50eXBlLnN0cmluZ2lmeSkge1xuICAgICAgICAgIC8vIFVzZXJzIHNob3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZXNlIGFyZ3MgLSBqdXN0IGdpdmUgdGhlbSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBzaW5nbGUgYXJnXG4gICAgICAgICAgY29uc3Qgc2ltcGxlRXNjYXBlID0gZXNjVmFsID0+IFNxbFN0cmluZy5lc2NhcGUoZXNjVmFsLCB0aGlzLm9wdGlvbnMudGltZXpvbmUsIHRoaXMuZGlhbGVjdCk7XG5cbiAgICAgICAgICB2YWx1ZSA9IGZpZWxkLnR5cGUuc3RyaW5naWZ5KHZhbHVlLCB7IGVzY2FwZTogc2ltcGxlRXNjYXBlLCBmaWVsZCwgdGltZXpvbmU6IHRoaXMub3B0aW9ucy50aW1lem9uZSwgb3BlcmF0aW9uOiBvcHRpb25zLm9wZXJhdGlvbiB9KTtcblxuICAgICAgICAgIGlmIChmaWVsZC50eXBlLmVzY2FwZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIFRoZSBkYXRhLXR5cGUgYWxyZWFkeSBkaWQgdGhlIHJlcXVpcmVkIGVzY2FwaW5nXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFNxbFN0cmluZy5lc2NhcGUodmFsdWUsIHRoaXMub3B0aW9ucy50aW1lem9uZSwgdGhpcy5kaWFsZWN0KTtcbiAgfVxuXG4gIGJpbmRQYXJhbShiaW5kKSB7XG4gICAgcmV0dXJuIHZhbHVlID0+IHtcbiAgICAgIGJpbmQucHVzaCh2YWx1ZSk7XG4gICAgICByZXR1cm4gYCQke2JpbmQubGVuZ3RofWA7XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAgUmV0dXJucyBhIGJpbmQgcGFyYW1ldGVyIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFsdWUgKGUuZy4gYSBzdHJpbmcsIG51bWJlciBvciBkYXRlKVxuICAgIEBwcml2YXRlXG4gICovXG4gIGZvcm1hdCh2YWx1ZSwgZmllbGQsIG9wdGlvbnMsIGJpbmRQYXJhbSkge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXNzIFNlcXVlbGl6ZU1ldGhvZCBhcyBhIGJpbmQgcGFyYW1ldGVyIC0gdXNlIGVzY2FwZSBpbnN0ZWFkJyk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQgJiYgZmllbGQudHlwZSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlKHZhbHVlLCBmaWVsZCwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUuYmluZFBhcmFtKSB7XG4gICAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGUuYmluZFBhcmFtKHZhbHVlLCB7IGVzY2FwZTogXy5pZGVudGl0eSwgZmllbGQsIHRpbWV6b25lOiB0aGlzLm9wdGlvbnMudGltZXpvbmUsIG9wZXJhdGlvbjogb3B0aW9ucy5vcGVyYXRpb24sIGJpbmRQYXJhbSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBiaW5kUGFyYW0odmFsdWUpO1xuICB9XG5cbiAgLypcbiAgICBWYWxpZGF0ZSBhIHZhbHVlIGFnYWluc3QgYSBmaWVsZCBzcGVjaWZpY2F0aW9uXG4gICAgQHByaXZhdGVcbiAgKi9cbiAgdmFsaWRhdGUodmFsdWUsIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMudHlwZVZhbGlkYXRpb24gJiYgZmllbGQudHlwZS52YWxpZGF0ZSAmJiB2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaXNMaXN0ICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICBmaWVsZC50eXBlLnZhbGlkYXRlKGl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZC50eXBlLnZhbGlkYXRlKHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2Ygc2VxdWVsaXplRXJyb3IuVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgZXJyb3IuZXJyb3JzLnB1c2gobmV3IHNlcXVlbGl6ZUVycm9yLlZhbGlkYXRpb25FcnJvckl0ZW0oXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgJ1ZhbGlkYXRpb24gZXJyb3InLFxuICAgICAgICAgICAgZmllbGQuZmllbGROYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgYCR7ZmllbGQudHlwZS5rZXl9IHZhbGlkYXRvcmBcbiAgICAgICAgICApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzSWRlbnRpZmllclF1b3RlZChpZGVudGlmaWVyKSB7XG4gICAgcmV0dXJuIFF1b3RlSGVscGVyLmlzSWRlbnRpZmllclF1b3RlZChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gU1FMIHF1ZXJ5IHRoYXQgZXh0cmFjdCBKU09OIHByb3BlcnR5IG9mIGdpdmVuIHBhdGguXG4gICAqXG4gICAqIEBwYXJhbSAgIHtzdHJpbmd9ICAgICAgICAgICAgICAgY29sdW1uICBUaGUgSlNPTiBjb2x1bW5cbiAgICogQHBhcmFtICAge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBbcGF0aF0gIFRoZSBwYXRoIHRvIGV4dHJhY3QgKG9wdGlvbmFsKVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdlbmVyYXRlZCBzcWwgcXVlcnlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGpzb25QYXRoRXh0cmFjdGlvblF1ZXJ5KGNvbHVtbiwgcGF0aCkge1xuICAgIGxldCBwYXRocyA9IF8udG9QYXRoKHBhdGgpO1xuICAgIGxldCBwYXRoU3RyO1xuICAgIGNvbnN0IHF1b3RlZENvbHVtbiA9IHRoaXMuaXNJZGVudGlmaWVyUXVvdGVkKGNvbHVtbilcbiAgICAgID8gY29sdW1uXG4gICAgICA6IHRoaXMucXVvdGVJZGVudGlmaWVyKGNvbHVtbik7XG5cbiAgICBzd2l0Y2ggKHRoaXMuZGlhbGVjdCkge1xuICAgICAgY2FzZSAnbXlzcWwnOlxuICAgICAgY2FzZSAnbWFyaWFkYic6XG4gICAgICBjYXNlICdzcWxpdGUnOlxuICAgICAgICAvKipcbiAgICAgICAgICogTm9uIGRpZ2l0IHN1YiBwYXRocyBuZWVkIHRvIGJlIHF1b3RlZCBhcyBFQ01BU2NyaXB0IGlkZW50aWZpZXJzXG4gICAgICAgICAqIGh0dHBzOi8vYnVncy5teXNxbC5jb20vYnVnLnBocD9pZD04MTg5NlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMuZGlhbGVjdCA9PT0gJ215c3FsJykge1xuICAgICAgICAgIHBhdGhzID0gcGF0aHMubWFwKHN1YlBhdGggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIC9cXEQvLnRlc3Qoc3ViUGF0aClcbiAgICAgICAgICAgICAgPyBVdGlscy5hZGRUaWNrcyhzdWJQYXRoLCAnXCInKVxuICAgICAgICAgICAgICA6IHN1YlBhdGg7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXRoU3RyID0gdGhpcy5lc2NhcGUoWyckJ11cbiAgICAgICAgICAuY29uY2F0KHBhdGhzKVxuICAgICAgICAgIC5qb2luKCcuJylcbiAgICAgICAgICAucmVwbGFjZSgvXFwuKFxcZCspKD86KD89XFwuKXwkKS9nLCAoX18sIGRpZ2l0KSA9PiBgWyR7ZGlnaXR9XWApKTtcblxuICAgICAgICBpZiAodGhpcy5kaWFsZWN0ID09PSAnc3FsaXRlJykge1xuICAgICAgICAgIHJldHVybiBganNvbl9leHRyYWN0KCR7cXVvdGVkQ29sdW1ufSwke3BhdGhTdHJ9KWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYGpzb25fdW5xdW90ZShqc29uX2V4dHJhY3QoJHtxdW90ZWRDb2x1bW59LCR7cGF0aFN0cn0pKWA7XG5cbiAgICAgIGNhc2UgJ3Bvc3RncmVzJzpcbiAgICAgICAgcGF0aFN0ciA9IHRoaXMuZXNjYXBlKGB7JHtwYXRocy5qb2luKCcsJyl9fWApO1xuICAgICAgICByZXR1cm4gYCgke3F1b3RlZENvbHVtbn0jPj4ke3BhdGhTdHJ9KWA7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgJHt0aGlzLmRpYWxlY3R9IGZvciBKU09OIG9wZXJhdGlvbnNgKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgIFJldHVybnMgYSBxdWVyeSBmb3Igc2VsZWN0aW5nIGVsZW1lbnRzIGluIHRoZSB0YWJsZSA8dGFibGVOYW1lPi5cbiAgICBPcHRpb25zOlxuICAgICAgLSBhdHRyaWJ1dGVzIC0+IEFuIGFycmF5IG9mIGF0dHJpYnV0ZXMgKGUuZy4gWyduYW1lJywgJ2JpcnRoZGF5J10pLiBEZWZhdWx0OiAqXG4gICAgICAtIHdoZXJlIC0+IEEgaGFzaCB3aXRoIGNvbmRpdGlvbnMgKGUuZy4ge25hbWU6ICdmb28nfSlcbiAgICAgICAgICAgICAgICAgT1IgYW4gSUQgYXMgaW50ZWdlclxuICAgICAgLSBvcmRlciAtPiBlLmcuICdpZCBERVNDJ1xuICAgICAgLSBncm91cFxuICAgICAgLSBsaW1pdCAtPiBUaGUgbWF4aW11bSBjb3VudCB5b3Ugd2FudCB0byBnZXQuXG4gICAgICAtIG9mZnNldCAtPiBBbiBvZmZzZXQgdmFsdWUgdG8gc3RhcnQgZnJvbS4gT25seSB1c2VhYmxlIHdpdGggbGltaXQhXG4gICBAcHJpdmF0ZVxuICAqL1xuICBzZWxlY3RRdWVyeSh0YWJsZU5hbWUsIG9wdGlvbnMsIG1vZGVsKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zLmxpbWl0O1xuICAgIGNvbnN0IG1haW5RdWVyeUl0ZW1zID0gW107XG4gICAgY29uc3Qgc3ViUXVlcnlJdGVtcyA9IFtdO1xuICAgIGNvbnN0IHN1YlF1ZXJ5ID0gb3B0aW9ucy5zdWJRdWVyeSA9PT0gdW5kZWZpbmVkID8gbGltaXQgJiYgb3B0aW9ucy5oYXNNdWx0aUFzc29jaWF0aW9uIDogb3B0aW9ucy5zdWJRdWVyeTtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgbWFpbjogb3B0aW9ucy5hdHRyaWJ1dGVzICYmIG9wdGlvbnMuYXR0cmlidXRlcy5zbGljZSgpLFxuICAgICAgc3ViUXVlcnk6IG51bGxcbiAgICB9O1xuICAgIGNvbnN0IG1haW5UYWJsZSA9IHtcbiAgICAgIG5hbWU6IHRhYmxlTmFtZSxcbiAgICAgIHF1b3RlZE5hbWU6IG51bGwsXG4gICAgICBhczogbnVsbCxcbiAgICAgIG1vZGVsXG4gICAgfTtcbiAgICBjb25zdCB0b3BMZXZlbEluZm8gPSB7XG4gICAgICBuYW1lczogbWFpblRhYmxlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHN1YlF1ZXJ5XG4gICAgfTtcbiAgICBsZXQgbWFpbkpvaW5RdWVyaWVzID0gW107XG4gICAgbGV0IHN1YkpvaW5RdWVyaWVzID0gW107XG4gICAgbGV0IHF1ZXJ5O1xuXG4gICAgLy8gQWxpYXNlcyBjYW4gYmUgcGFzc2VkIHRocm91Z2ggc3VicXVlcmllcyBhbmQgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGVtXG4gICAgaWYgKHRoaXMub3B0aW9ucy5taW5pZnlBbGlhc2VzICYmICFvcHRpb25zLmFsaWFzZXNNYXBwaW5nKSB7XG4gICAgICBvcHRpb25zLmFsaWFzZXNNYXBwaW5nID0gbmV3IE1hcCgpO1xuICAgICAgb3B0aW9ucy5hbGlhc2VzQnlUYWJsZSA9IHt9O1xuICAgIH1cblxuICAgIC8vIHJlc29sdmUgdGFibGUgbmFtZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMudGFibGVBcykge1xuICAgICAgbWFpblRhYmxlLmFzID0gdGhpcy5xdW90ZUlkZW50aWZpZXIob3B0aW9ucy50YWJsZUFzKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG1haW5UYWJsZS5uYW1lKSAmJiBtYWluVGFibGUubW9kZWwpIHtcbiAgICAgIG1haW5UYWJsZS5hcyA9IHRoaXMucXVvdGVJZGVudGlmaWVyKG1haW5UYWJsZS5tb2RlbC5uYW1lKTtcbiAgICB9XG5cbiAgICBtYWluVGFibGUucXVvdGVkTmFtZSA9ICFBcnJheS5pc0FycmF5KG1haW5UYWJsZS5uYW1lKSA/IHRoaXMucXVvdGVUYWJsZShtYWluVGFibGUubmFtZSkgOiB0YWJsZU5hbWUubWFwKHQgPT4ge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodCkgPyB0aGlzLnF1b3RlVGFibGUodFswXSwgdFsxXSkgOiB0aGlzLnF1b3RlVGFibGUodCwgdHJ1ZSk7XG4gICAgfSkuam9pbignLCAnKTtcblxuICAgIGlmIChzdWJRdWVyeSAmJiBhdHRyaWJ1dGVzLm1haW4pIHtcbiAgICAgIGZvciAoY29uc3Qga2V5QXR0IG9mIG1haW5UYWJsZS5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlcykge1xuICAgICAgICAvLyBDaGVjayBpZiBtYWluQXR0cmlidXRlcyBjb250YWluIHRoZSBwcmltYXJ5IGtleSBvZiB0aGUgbW9kZWwgZWl0aGVyIGFzIGEgZmllbGQgb3IgYW4gYWxpYXNlZCBmaWVsZFxuICAgICAgICBpZiAoIWF0dHJpYnV0ZXMubWFpbi5zb21lKGF0dHIgPT4ga2V5QXR0ID09PSBhdHRyIHx8IGtleUF0dCA9PT0gYXR0clswXSB8fCBrZXlBdHQgPT09IGF0dHJbMV0pKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5tYWluLnB1c2gobWFpblRhYmxlLm1vZGVsLnJhd0F0dHJpYnV0ZXNba2V5QXR0XS5maWVsZCA/IFtrZXlBdHQsIG1haW5UYWJsZS5tb2RlbC5yYXdBdHRyaWJ1dGVzW2tleUF0dF0uZmllbGRdIDoga2V5QXR0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMubWFpbiA9IHRoaXMuZXNjYXBlQXR0cmlidXRlcyhhdHRyaWJ1dGVzLm1haW4sIG9wdGlvbnMsIG1haW5UYWJsZS5hcyk7XG4gICAgYXR0cmlidXRlcy5tYWluID0gYXR0cmlidXRlcy5tYWluIHx8IChvcHRpb25zLmluY2x1ZGUgPyBbYCR7bWFpblRhYmxlLmFzfS4qYF0gOiBbJyonXSk7XG5cbiAgICAvLyBJZiBzdWJxdWVyeSwgd2UgYWRkIHRoZSBtYWluQXR0cmlidXRlcyB0byB0aGUgc3ViUXVlcnkgYW5kIHNldCB0aGUgbWFpbkF0dHJpYnV0ZXMgdG8gc2VsZWN0ICogZnJvbSBzdWJxdWVyeVxuICAgIGlmIChzdWJRdWVyeSB8fCBvcHRpb25zLmdyb3VwZWRMaW1pdCkge1xuICAgICAgLy8gV2UgbmVlZCBwcmltYXJ5IGtleXNcbiAgICAgIGF0dHJpYnV0ZXMuc3ViUXVlcnkgPSBhdHRyaWJ1dGVzLm1haW47XG4gICAgICBhdHRyaWJ1dGVzLm1haW4gPSBbYCR7bWFpblRhYmxlLmFzIHx8IG1haW5UYWJsZS5xdW90ZWROYW1lfS4qYF07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5jbHVkZSkge1xuICAgICAgZm9yIChjb25zdCBpbmNsdWRlIG9mIG9wdGlvbnMuaW5jbHVkZSkge1xuICAgICAgICBpZiAoaW5jbHVkZS5zZXBhcmF0ZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpvaW5RdWVyaWVzID0gdGhpcy5nZW5lcmF0ZUluY2x1ZGUoaW5jbHVkZSwgeyBleHRlcm5hbEFzOiBtYWluVGFibGUuYXMsIGludGVybmFsQXM6IG1haW5UYWJsZS5hcyB9LCB0b3BMZXZlbEluZm8pO1xuXG4gICAgICAgIHN1YkpvaW5RdWVyaWVzID0gc3ViSm9pblF1ZXJpZXMuY29uY2F0KGpvaW5RdWVyaWVzLnN1YlF1ZXJ5KTtcbiAgICAgICAgbWFpbkpvaW5RdWVyaWVzID0gbWFpbkpvaW5RdWVyaWVzLmNvbmNhdChqb2luUXVlcmllcy5tYWluUXVlcnkpO1xuXG4gICAgICAgIGlmIChqb2luUXVlcmllcy5hdHRyaWJ1dGVzLm1haW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMubWFpbiA9IF8udW5pcShhdHRyaWJ1dGVzLm1haW4uY29uY2F0KGpvaW5RdWVyaWVzLmF0dHJpYnV0ZXMubWFpbikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqb2luUXVlcmllcy5hdHRyaWJ1dGVzLnN1YlF1ZXJ5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnN1YlF1ZXJ5ID0gXy51bmlxKGF0dHJpYnV0ZXMuc3ViUXVlcnkuY29uY2F0KGpvaW5RdWVyaWVzLmF0dHJpYnV0ZXMuc3ViUXVlcnkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdWJRdWVyeSkge1xuICAgICAgc3ViUXVlcnlJdGVtcy5wdXNoKHRoaXMuc2VsZWN0RnJvbVRhYmxlRnJhZ21lbnQob3B0aW9ucywgbWFpblRhYmxlLm1vZGVsLCBhdHRyaWJ1dGVzLnN1YlF1ZXJ5LCBtYWluVGFibGUucXVvdGVkTmFtZSwgbWFpblRhYmxlLmFzKSk7XG4gICAgICBzdWJRdWVyeUl0ZW1zLnB1c2goc3ViSm9pblF1ZXJpZXMuam9pbignJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5ncm91cGVkTGltaXQpIHtcbiAgICAgICAgaWYgKCFtYWluVGFibGUuYXMpIHtcbiAgICAgICAgICBtYWluVGFibGUuYXMgPSBtYWluVGFibGUucXVvdGVkTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3aGVyZSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMud2hlcmUpO1xuICAgICAgICBsZXQgZ3JvdXBlZExpbWl0T3JkZXIsXG4gICAgICAgICAgd2hlcmVLZXksXG4gICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgICBncm91cGVkVGFibGVOYW1lID0gbWFpblRhYmxlLmFzO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5ncm91cGVkTGltaXQub24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgd2hlcmVLZXkgPSBvcHRpb25zLmdyb3VwZWRMaW1pdC5vbjtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmdyb3VwZWRMaW1pdC5vbiBpbnN0YW5jZW9mIEhhc01hbnkpIHtcbiAgICAgICAgICB3aGVyZUtleSA9IG9wdGlvbnMuZ3JvdXBlZExpbWl0Lm9uLmZvcmVpZ25LZXlGaWVsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmdyb3VwZWRMaW1pdC5vbiBpbnN0YW5jZW9mIEJlbG9uZ3NUb01hbnkpIHtcbiAgICAgICAgICAvLyBCVE0gaW5jbHVkZXMgbmVlZHMgdG8gam9pbiB0aGUgdGhyb3VnaCB0YWJsZSBvbiB0byBjaGVjayBJRFxuICAgICAgICAgIGdyb3VwZWRUYWJsZU5hbWUgPSBvcHRpb25zLmdyb3VwZWRMaW1pdC5vbi5tYW55RnJvbVNvdXJjZS5hcztcbiAgICAgICAgICBjb25zdCBncm91cGVkTGltaXRPcHRpb25zID0gTW9kZWwuX3ZhbGlkYXRlSW5jbHVkZWRFbGVtZW50cyh7XG4gICAgICAgICAgICBpbmNsdWRlOiBbe1xuICAgICAgICAgICAgICBhc3NvY2lhdGlvbjogb3B0aW9ucy5ncm91cGVkTGltaXQub24ubWFueUZyb21Tb3VyY2UsXG4gICAgICAgICAgICAgIGR1cGxpY2F0aW5nOiBmYWxzZSwgLy8gVGhlIFVOSU9OJ2VkIHF1ZXJ5IG1heSBjb250YWluIGR1cGxpY2F0ZXMsIGJ1dCBlYWNoIHN1Yi1xdWVyeSBjYW5ub3RcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgIHdoZXJlOiBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgICBbT3AucGxhY2Vob2xkZXJdOiB0cnVlXG4gICAgICAgICAgICAgIH0sIG9wdGlvbnMuZ3JvdXBlZExpbWl0LnRocm91Z2ggJiYgb3B0aW9ucy5ncm91cGVkTGltaXQudGhyb3VnaC53aGVyZSlcbiAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIE1ha2Ugc3VyZSBhdHRyaWJ1dGVzIGZyb20gdGhlIGpvaW4gdGFibGUgYXJlIG1hcHBlZCBiYWNrIHRvIG1vZGVsc1xuICAgICAgICAgIG9wdGlvbnMuaGFzSm9pbiA9IHRydWU7XG4gICAgICAgICAgb3B0aW9ucy5oYXNNdWx0aUFzc29jaWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICBvcHRpb25zLmluY2x1ZGVNYXAgPSBPYmplY3QuYXNzaWduKGdyb3VwZWRMaW1pdE9wdGlvbnMuaW5jbHVkZU1hcCwgb3B0aW9ucy5pbmNsdWRlTWFwKTtcbiAgICAgICAgICBvcHRpb25zLmluY2x1ZGVOYW1lcyA9IGdyb3VwZWRMaW1pdE9wdGlvbnMuaW5jbHVkZU5hbWVzLmNvbmNhdChvcHRpb25zLmluY2x1ZGVOYW1lcyB8fCBbXSk7XG4gICAgICAgICAgaW5jbHVkZSA9IGdyb3VwZWRMaW1pdE9wdGlvbnMuaW5jbHVkZTtcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMub3JkZXIpKSB7XG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgb3JkZXIgYnkgYXR0cmlidXRlcyBhcmUgYXZhaWxhYmxlIHRvIHRoZSBwYXJlbnQgcXVlcnlcbiAgICAgICAgICAgIG9wdGlvbnMub3JkZXIuZm9yRWFjaCgob3JkZXIsIGkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3JkZXIpKSB7XG4gICAgICAgICAgICAgICAgb3JkZXIgPSBvcmRlclswXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxldCBhbGlhcyA9IGBzdWJxdWVyeV9vcmRlcl8ke2l9YDtcbiAgICAgICAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzLnB1c2goW29yZGVyLCBhbGlhc10pO1xuXG4gICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcHJlcGVuZCBtb2RlbCBuYW1lIHdoZW4gd2UgYWxpYXMgdGhlIGF0dHJpYnV0ZXMsIHNvIHF1b3RlIHRoZW0gaGVyZVxuICAgICAgICAgICAgICBhbGlhcyA9IHRoaXMuc2VxdWVsaXplLmxpdGVyYWwodGhpcy5xdW90ZShhbGlhcykpO1xuXG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMub3JkZXJbaV0pKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcmRlcltpXVswXSA9IGFsaWFzO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3JkZXJbaV0gPSBhbGlhcztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBncm91cGVkTGltaXRPcmRlciA9IG9wdGlvbnMub3JkZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE9yZGVyaW5nIGlzIGhhbmRsZWQgYnkgdGhlIHN1YnF1ZXJpZXMsIHNvIG9yZGVyaW5nIHRoZSBVTklPTidlZCByZXN1bHQgaXMgbm90IG5lZWRlZFxuICAgICAgICAgIGdyb3VwZWRMaW1pdE9yZGVyID0gb3B0aW9ucy5vcmRlcjtcbiAgICAgICAgICBkZWxldGUgb3B0aW9ucy5vcmRlcjtcbiAgICAgICAgICB3aGVyZVtPcC5wbGFjZWhvbGRlcl0gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FjaGluZyB0aGUgYmFzZSBxdWVyeSBhbmQgc3BsaWNpbmcgdGhlIHdoZXJlIHBhcnQgaW50byBpdCBpcyBjb25zaXN0ZW50bHkgPiB0d2ljZVxuICAgICAgICAvLyBhcyBmYXN0IHRoYW4gZ2VuZXJhdGluZyBmcm9tIHNjcmF0Y2ggZWFjaCB0aW1lIGZvciB2YWx1ZXMubGVuZ3RoID49IDVcbiAgICAgICAgY29uc3QgYmFzZVF1ZXJ5ID0gYFNFTEVDVCAqIEZST00gKCR7dGhpcy5zZWxlY3RRdWVyeShcbiAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlczogb3B0aW9ucy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgb2Zmc2V0OiBvcHRpb25zLm9mZnNldCxcbiAgICAgICAgICAgIGxpbWl0OiBvcHRpb25zLmdyb3VwZWRMaW1pdC5saW1pdCxcbiAgICAgICAgICAgIG9yZGVyOiBncm91cGVkTGltaXRPcmRlcixcbiAgICAgICAgICAgIGFsaWFzZXNNYXBwaW5nOiBvcHRpb25zLmFsaWFzZXNNYXBwaW5nLFxuICAgICAgICAgICAgYWxpYXNlc0J5VGFibGU6IG9wdGlvbnMuYWxpYXNlc0J5VGFibGUsXG4gICAgICAgICAgICB3aGVyZSxcbiAgICAgICAgICAgIGluY2x1ZGUsXG4gICAgICAgICAgICBtb2RlbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbW9kZWxcbiAgICAgICAgKS5yZXBsYWNlKC87JC8sICcnKX0pIEFTIHN1YmA7IC8vIEV2ZXJ5IGRlcml2ZWQgdGFibGUgbXVzdCBoYXZlIGl0cyBvd24gYWxpYXNcbiAgICAgICAgY29uc3QgcGxhY2VIb2xkZXIgPSB0aGlzLndoZXJlSXRlbVF1ZXJ5KE9wLnBsYWNlaG9sZGVyLCB0cnVlLCB7IG1vZGVsIH0pO1xuICAgICAgICBjb25zdCBzcGxpY2VQb3MgPSBiYXNlUXVlcnkuaW5kZXhPZihwbGFjZUhvbGRlcik7XG5cbiAgICAgICAgbWFpblF1ZXJ5SXRlbXMucHVzaCh0aGlzLnNlbGVjdEZyb21UYWJsZUZyYWdtZW50KG9wdGlvbnMsIG1haW5UYWJsZS5tb2RlbCwgYXR0cmlidXRlcy5tYWluLCBgKCR7XG4gICAgICAgICAgb3B0aW9ucy5ncm91cGVkTGltaXQudmFsdWVzLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBsZXQgZ3JvdXBXaGVyZTtcbiAgICAgICAgICAgIGlmICh3aGVyZUtleSkge1xuICAgICAgICAgICAgICBncm91cFdoZXJlID0ge1xuICAgICAgICAgICAgICAgIFt3aGVyZUtleV06IHZhbHVlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5jbHVkZSkge1xuICAgICAgICAgICAgICBncm91cFdoZXJlID0ge1xuICAgICAgICAgICAgICAgIFtvcHRpb25zLmdyb3VwZWRMaW1pdC5vbi5mb3JlaWduSWRlbnRpZmllckZpZWxkXTogdmFsdWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnNwbGljZVN0cihiYXNlUXVlcnksIHNwbGljZVBvcywgcGxhY2VIb2xkZXIubGVuZ3RoLCB0aGlzLmdldFdoZXJlQ29uZGl0aW9ucyhncm91cFdoZXJlLCBncm91cGVkVGFibGVOYW1lKSk7XG4gICAgICAgICAgfSkuam9pbihcbiAgICAgICAgICAgIHRoaXMuX2RpYWxlY3Quc3VwcG9ydHNbJ1VOSU9OIEFMTCddID8gJyBVTklPTiBBTEwgJyA6ICcgVU5JT04gJ1xuICAgICAgICAgIClcbiAgICAgICAgfSlgLCBtYWluVGFibGUuYXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1haW5RdWVyeUl0ZW1zLnB1c2godGhpcy5zZWxlY3RGcm9tVGFibGVGcmFnbWVudChvcHRpb25zLCBtYWluVGFibGUubW9kZWwsIGF0dHJpYnV0ZXMubWFpbiwgbWFpblRhYmxlLnF1b3RlZE5hbWUsIG1haW5UYWJsZS5hcykpO1xuICAgICAgfVxuXG4gICAgICBtYWluUXVlcnlJdGVtcy5wdXNoKG1haW5Kb2luUXVlcmllcy5qb2luKCcnKSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIFdIRVJFIHRvIHN1YiBvciBtYWluIHF1ZXJ5XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnd2hlcmUnKSAmJiAhb3B0aW9ucy5ncm91cGVkTGltaXQpIHtcbiAgICAgIG9wdGlvbnMud2hlcmUgPSB0aGlzLmdldFdoZXJlQ29uZGl0aW9ucyhvcHRpb25zLndoZXJlLCBtYWluVGFibGUuYXMgfHwgdGFibGVOYW1lLCBtb2RlbCwgb3B0aW9ucyk7XG4gICAgICBpZiAob3B0aW9ucy53aGVyZSkge1xuICAgICAgICBpZiAoc3ViUXVlcnkpIHtcbiAgICAgICAgICBzdWJRdWVyeUl0ZW1zLnB1c2goYCBXSEVSRSAke29wdGlvbnMud2hlcmV9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWFpblF1ZXJ5SXRlbXMucHVzaChgIFdIRVJFICR7b3B0aW9ucy53aGVyZX1gKTtcbiAgICAgICAgICAvLyBXYWxrIHRoZSBtYWluIHF1ZXJ5IHRvIHVwZGF0ZSBhbGwgc2VsZWN0c1xuICAgICAgICAgIG1haW5RdWVyeUl0ZW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdTRUxFQ1QnKSkge1xuICAgICAgICAgICAgICBtYWluUXVlcnlJdGVtc1trZXldID0gdGhpcy5zZWxlY3RGcm9tVGFibGVGcmFnbWVudChvcHRpb25zLCBtb2RlbCwgYXR0cmlidXRlcy5tYWluLCBtYWluVGFibGUucXVvdGVkTmFtZSwgbWFpblRhYmxlLmFzLCBvcHRpb25zLndoZXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBHUk9VUCBCWSB0byBzdWIgb3IgbWFpbiBxdWVyeVxuICAgIGlmIChvcHRpb25zLmdyb3VwKSB7XG4gICAgICBvcHRpb25zLmdyb3VwID0gQXJyYXkuaXNBcnJheShvcHRpb25zLmdyb3VwKSA/IG9wdGlvbnMuZ3JvdXAubWFwKHQgPT4gdGhpcy5hbGlhc0dyb3VwaW5nKHQsIG1vZGVsLCBtYWluVGFibGUuYXMsIG9wdGlvbnMpKS5qb2luKCcsICcpIDogdGhpcy5hbGlhc0dyb3VwaW5nKG9wdGlvbnMuZ3JvdXAsIG1vZGVsLCBtYWluVGFibGUuYXMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoc3ViUXVlcnkpIHtcbiAgICAgICAgc3ViUXVlcnlJdGVtcy5wdXNoKGAgR1JPVVAgQlkgJHtvcHRpb25zLmdyb3VwfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFpblF1ZXJ5SXRlbXMucHVzaChgIEdST1VQIEJZICR7b3B0aW9ucy5ncm91cH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgSEFWSU5HIHRvIHN1YiBvciBtYWluIHF1ZXJ5XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnaGF2aW5nJykpIHtcbiAgICAgIG9wdGlvbnMuaGF2aW5nID0gdGhpcy5nZXRXaGVyZUNvbmRpdGlvbnMob3B0aW9ucy5oYXZpbmcsIHRhYmxlTmFtZSwgbW9kZWwsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICAgIGlmIChvcHRpb25zLmhhdmluZykge1xuICAgICAgICBpZiAoc3ViUXVlcnkpIHtcbiAgICAgICAgICBzdWJRdWVyeUl0ZW1zLnB1c2goYCBIQVZJTkcgJHtvcHRpb25zLmhhdmluZ31gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYWluUXVlcnlJdGVtcy5wdXNoKGAgSEFWSU5HICR7b3B0aW9ucy5oYXZpbmd9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgT1JERVIgdG8gc3ViIG9yIG1haW4gcXVlcnlcbiAgICBpZiAob3B0aW9ucy5vcmRlcikge1xuICAgICAgY29uc3Qgb3JkZXJzID0gdGhpcy5nZXRRdWVyeU9yZGVycyhvcHRpb25zLCBtb2RlbCwgc3ViUXVlcnkpO1xuICAgICAgaWYgKG9yZGVycy5tYWluUXVlcnlPcmRlci5sZW5ndGgpIHtcbiAgICAgICAgbWFpblF1ZXJ5SXRlbXMucHVzaChgIE9SREVSIEJZICR7b3JkZXJzLm1haW5RdWVyeU9yZGVyLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBpZiAob3JkZXJzLnN1YlF1ZXJ5T3JkZXIubGVuZ3RoKSB7XG4gICAgICAgIHN1YlF1ZXJ5SXRlbXMucHVzaChgIE9SREVSIEJZICR7b3JkZXJzLnN1YlF1ZXJ5T3JkZXIuam9pbignLCAnKX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgTElNSVQsIE9GRlNFVCB0byBzdWIgb3IgbWFpbiBxdWVyeVxuICAgIGNvbnN0IGxpbWl0T3JkZXIgPSB0aGlzLmFkZExpbWl0QW5kT2Zmc2V0KG9wdGlvbnMsIG1haW5UYWJsZS5tb2RlbCk7XG4gICAgaWYgKGxpbWl0T3JkZXIgJiYgIW9wdGlvbnMuZ3JvdXBlZExpbWl0KSB7XG4gICAgICBpZiAoc3ViUXVlcnkpIHtcbiAgICAgICAgc3ViUXVlcnlJdGVtcy5wdXNoKGxpbWl0T3JkZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFpblF1ZXJ5SXRlbXMucHVzaChsaW1pdE9yZGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3ViUXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gYFNFTEVDVCAke2F0dHJpYnV0ZXMubWFpbi5qb2luKCcsICcpfSBGUk9NICgke3N1YlF1ZXJ5SXRlbXMuam9pbignJyl9KSBBUyAke21haW5UYWJsZS5hc30ke21haW5Kb2luUXVlcmllcy5qb2luKCcnKX0ke21haW5RdWVyeUl0ZW1zLmpvaW4oJycpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5ID0gbWFpblF1ZXJ5SXRlbXMuam9pbignJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubG9jayAmJiB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmxvY2spIHtcbiAgICAgIGxldCBsb2NrID0gb3B0aW9ucy5sb2NrO1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxvY2sgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGxvY2sgPSBvcHRpb25zLmxvY2subGV2ZWw7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fZGlhbGVjdC5zdXBwb3J0cy5sb2NrS2V5ICYmIChsb2NrID09PSAnS0VZIFNIQVJFJyB8fCBsb2NrID09PSAnTk8gS0VZIFVQREFURScpKSB7XG4gICAgICAgIHF1ZXJ5ICs9IGAgRk9SICR7bG9ja31gO1xuICAgICAgfSBlbHNlIGlmIChsb2NrID09PSAnU0hBUkUnKSB7XG4gICAgICAgIHF1ZXJ5ICs9IGAgJHt0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmZvclNoYXJlfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeSArPSAnIEZPUiBVUERBVEUnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2RpYWxlY3Quc3VwcG9ydHMubG9ja09mICYmIG9wdGlvbnMubG9jay5vZiAmJiBvcHRpb25zLmxvY2sub2YucHJvdG90eXBlIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgcXVlcnkgKz0gYCBPRiAke3RoaXMucXVvdGVUYWJsZShvcHRpb25zLmxvY2sub2YubmFtZSl9YDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLnNraXBMb2NrZWQgJiYgb3B0aW9ucy5za2lwTG9ja2VkKSB7XG4gICAgICAgIHF1ZXJ5ICs9ICcgU0tJUCBMT0NLRUQnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBgJHtxdWVyeX07YDtcbiAgfVxuXG4gIGFsaWFzR3JvdXBpbmcoZmllbGQsIG1vZGVsLCB0YWJsZU5hbWUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzcmMgPSBBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkWzBdIDogZmllbGQ7XG5cbiAgICByZXR1cm4gdGhpcy5xdW90ZSh0aGlzLl9nZXRBbGlhc0ZvckZpZWxkKHRhYmxlTmFtZSwgc3JjLCBvcHRpb25zKSB8fCBzcmMsIG1vZGVsKTtcbiAgfVxuXG4gIGVzY2FwZUF0dHJpYnV0ZXMoYXR0cmlidXRlcywgb3B0aW9ucywgbWFpblRhYmxlQXMpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLm1hcChhdHRyID0+IHtcbiAgICAgIGxldCBhZGRUYWJsZSA9IHRydWU7XG5cbiAgICAgIGlmIChhdHRyIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNlcXVlbGl6ZU1ldGhvZChhdHRyKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHIpKSB7XG4gICAgICAgIGlmIChhdHRyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtKU09OLnN0cmluZ2lmeShhdHRyKX0gaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIGRlZmluaXRpb24uIFBsZWFzZSB1c2UgdGhlIGZvbGxvd2luZyBmb3JtYXQ6IFsnYXR0cmlidXRlIGRlZmluaXRpb24nLCAnYWxpYXMnXWApO1xuICAgICAgICB9XG4gICAgICAgIGF0dHIgPSBhdHRyLnNsaWNlKCk7XG5cbiAgICAgICAgaWYgKGF0dHJbMF0gaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcbiAgICAgICAgICBhdHRyWzBdID0gdGhpcy5oYW5kbGVTZXF1ZWxpemVNZXRob2QoYXR0clswXSk7XG4gICAgICAgICAgYWRkVGFibGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICghYXR0clswXS5pbmNsdWRlcygnKCcpICYmICFhdHRyWzBdLmluY2x1ZGVzKCcpJykpIHtcbiAgICAgICAgICBhdHRyWzBdID0gdGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0clswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwcmVjYXRpb25zLm5vUmF3QXR0cmlidXRlcygpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbGlhcyA9IGF0dHJbMV07XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5taW5pZnlBbGlhc2VzKSB7XG4gICAgICAgICAgYWxpYXMgPSB0aGlzLl9nZXRNaW5pZmllZEFsaWFzKGFsaWFzLCBtYWluVGFibGVBcywgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBhdHRyID0gW2F0dHJbMF0sIHRoaXMucXVvdGVJZGVudGlmaWVyKGFsaWFzKV0uam9pbignIEFTICcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0ciA9ICFhdHRyLmluY2x1ZGVzKFV0aWxzLlRJQ0tfQ0hBUikgJiYgIWF0dHIuaW5jbHVkZXMoJ1wiJylcbiAgICAgICAgICA/IHRoaXMucXVvdGVBdHRyaWJ1dGUoYXR0ciwgb3B0aW9ucy5tb2RlbClcbiAgICAgICAgICA6IHRoaXMuZXNjYXBlKGF0dHIpO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzRW1wdHkob3B0aW9ucy5pbmNsdWRlKSAmJiAhYXR0ci5pbmNsdWRlcygnLicpICYmIGFkZFRhYmxlKSB7XG4gICAgICAgIGF0dHIgPSBgJHttYWluVGFibGVBc30uJHthdHRyfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdHRyO1xuICAgIH0pO1xuICB9XG5cbiAgZ2VuZXJhdGVJbmNsdWRlKGluY2x1ZGUsIHBhcmVudFRhYmxlTmFtZSwgdG9wTGV2ZWxJbmZvKSB7XG4gICAgY29uc3Qgam9pblF1ZXJpZXMgPSB7XG4gICAgICBtYWluUXVlcnk6IFtdLFxuICAgICAgc3ViUXVlcnk6IFtdXG4gICAgfTtcbiAgICBjb25zdCBtYWluQ2hpbGRJbmNsdWRlcyA9IFtdO1xuICAgIGNvbnN0IHN1YkNoaWxkSW5jbHVkZXMgPSBbXTtcbiAgICBsZXQgcmVxdWlyZWRNaXNtYXRjaCA9IGZhbHNlO1xuICAgIGNvbnN0IGluY2x1ZGVBcyA9IHtcbiAgICAgIGludGVybmFsQXM6IGluY2x1ZGUuYXMsXG4gICAgICBleHRlcm5hbEFzOiBpbmNsdWRlLmFzXG4gICAgfTtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgbWFpbjogW10sXG4gICAgICBzdWJRdWVyeTogW11cbiAgICB9O1xuICAgIGxldCBqb2luUXVlcnk7XG5cbiAgICB0b3BMZXZlbEluZm8ub3B0aW9ucy5rZXlzRXNjYXBlZCA9IHRydWU7XG5cbiAgICBpZiAodG9wTGV2ZWxJbmZvLm5hbWVzLm5hbWUgIT09IHBhcmVudFRhYmxlTmFtZS5leHRlcm5hbEFzICYmIHRvcExldmVsSW5mby5uYW1lcy5hcyAhPT0gcGFyZW50VGFibGVOYW1lLmV4dGVybmFsQXMpIHtcbiAgICAgIGluY2x1ZGVBcy5pbnRlcm5hbEFzID0gYCR7cGFyZW50VGFibGVOYW1lLmludGVybmFsQXN9LT4ke2luY2x1ZGUuYXN9YDtcbiAgICAgIGluY2x1ZGVBcy5leHRlcm5hbEFzID0gYCR7cGFyZW50VGFibGVOYW1lLmV4dGVybmFsQXN9LiR7aW5jbHVkZS5hc31gO1xuICAgIH1cblxuICAgIC8vIGluY2x1ZGVJZ25vcmVBdHRyaWJ1dGVzIGlzIHVzZWQgYnkgYWdncmVnYXRlIGZ1bmN0aW9uc1xuICAgIGlmICh0b3BMZXZlbEluZm8ub3B0aW9ucy5pbmNsdWRlSWdub3JlQXR0cmlidXRlcyAhPT0gZmFsc2UpIHtcbiAgICAgIGluY2x1ZGUubW9kZWwuX2V4cGFuZEF0dHJpYnV0ZXMoaW5jbHVkZSk7XG4gICAgICBVdGlscy5tYXBGaW5kZXJPcHRpb25zKGluY2x1ZGUsIGluY2x1ZGUubW9kZWwpO1xuXG4gICAgICBjb25zdCBpbmNsdWRlQXR0cmlidXRlcyA9IGluY2x1ZGUuYXR0cmlidXRlcy5tYXAoYXR0ciA9PiB7XG4gICAgICAgIGxldCBhdHRyQXMgPSBhdHRyO1xuICAgICAgICBsZXQgdmVyYmF0aW0gPSBmYWxzZTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyKSAmJiBhdHRyLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGlmIChhdHRyWzBdIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kICYmIChcbiAgICAgICAgICAgIGF0dHJbMF0gaW5zdGFuY2VvZiBVdGlscy5MaXRlcmFsIHx8XG4gICAgICAgICAgICBhdHRyWzBdIGluc3RhbmNlb2YgVXRpbHMuQ2FzdCB8fFxuICAgICAgICAgICAgYXR0clswXSBpbnN0YW5jZW9mIFV0aWxzLkZuXG4gICAgICAgICAgKSkge1xuICAgICAgICAgICAgdmVyYmF0aW0gPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF0dHIgPSBhdHRyLm1hcChhdHRyID0+IGF0dHIgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QgPyB0aGlzLmhhbmRsZVNlcXVlbGl6ZU1ldGhvZChhdHRyKSA6IGF0dHIpO1xuXG4gICAgICAgICAgYXR0ckFzID0gYXR0clsxXTtcbiAgICAgICAgICBhdHRyID0gYXR0clswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXR0ciBpbnN0YW5jZW9mIFV0aWxzLkxpdGVyYWwpIHtcbiAgICAgICAgICByZXR1cm4gYXR0ci52YWw7IC8vIFdlIHRydXN0IHRoZSB1c2VyIHRvIHJlbmFtZSB0aGUgZmllbGQgY29ycmVjdGx5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF0dHIgaW5zdGFuY2VvZiBVdGlscy5DYXN0IHx8IGF0dHIgaW5zdGFuY2VvZiBVdGlscy5Gbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdUcmllZCB0byBzZWxlY3QgYXR0cmlidXRlcyB1c2luZyBTZXF1ZWxpemUuY2FzdCBvciBTZXF1ZWxpemUuZm4gd2l0aG91dCBzcGVjaWZ5aW5nIGFuIGFsaWFzIGZvciB0aGUgcmVzdWx0LCBkdXJpbmcgZWFnZXIgbG9hZGluZy4gJyArXG4gICAgICAgICAgICAnVGhpcyBtZWFucyB0aGUgYXR0cmlidXRlIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBpbnN0YW5jZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByZWZpeDtcbiAgICAgICAgaWYgKHZlcmJhdGltID09PSB0cnVlKSB7XG4gICAgICAgICAgcHJlZml4ID0gYXR0cjtcbiAgICAgICAgfSBlbHNlIGlmICgvIz4+fC0+Pi8udGVzdChhdHRyKSkge1xuICAgICAgICAgIHByZWZpeCA9IGAoJHt0aGlzLnF1b3RlSWRlbnRpZmllcihpbmNsdWRlQXMuaW50ZXJuYWxBcyl9LiR7YXR0ci5yZXBsYWNlKC9cXCh8XFwpL2csICcnKX0pYDtcbiAgICAgICAgfSBlbHNlIGlmICgvanNvbl9leHRyYWN0XFwoLy50ZXN0KGF0dHIpKSB7XG4gICAgICAgICAgcHJlZml4ID0gYXR0ci5yZXBsYWNlKC9qc29uX2V4dHJhY3RcXCgvaSwgYGpzb25fZXh0cmFjdCgke3RoaXMucXVvdGVJZGVudGlmaWVyKGluY2x1ZGVBcy5pbnRlcm5hbEFzKX0uYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJlZml4ID0gYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoaW5jbHVkZUFzLmludGVybmFsQXMpfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHIpfWA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFsaWFzID0gYCR7aW5jbHVkZUFzLmV4dGVybmFsQXN9LiR7YXR0ckFzfWA7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5taW5pZnlBbGlhc2VzKSB7XG4gICAgICAgICAgYWxpYXMgPSB0aGlzLl9nZXRNaW5pZmllZEFsaWFzKGFsaWFzLCBpbmNsdWRlQXMuaW50ZXJuYWxBcywgdG9wTGV2ZWxJbmZvLm9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0gQVMgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhbGlhcywgdHJ1ZSl9YDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGluY2x1ZGUuc3ViUXVlcnkgJiYgdG9wTGV2ZWxJbmZvLnN1YlF1ZXJ5KSB7XG4gICAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBpbmNsdWRlQXR0cmlidXRlcykge1xuICAgICAgICAgIGF0dHJpYnV0ZXMuc3ViUXVlcnkucHVzaChhdHRyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBhdHRyIG9mIGluY2x1ZGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5tYWluLnB1c2goYXR0cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL3Rocm91Z2hcbiAgICBpZiAoaW5jbHVkZS50aHJvdWdoKSB7XG4gICAgICBqb2luUXVlcnkgPSB0aGlzLmdlbmVyYXRlVGhyb3VnaEpvaW4oaW5jbHVkZSwgaW5jbHVkZUFzLCBwYXJlbnRUYWJsZU5hbWUuaW50ZXJuYWxBcywgdG9wTGV2ZWxJbmZvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZ2VuZXJhdGVTdWJRdWVyeUZpbHRlcihpbmNsdWRlLCBpbmNsdWRlQXMsIHRvcExldmVsSW5mbyk7XG4gICAgICBqb2luUXVlcnkgPSB0aGlzLmdlbmVyYXRlSm9pbihpbmNsdWRlLCB0b3BMZXZlbEluZm8pO1xuICAgIH1cblxuICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBuZXcgYXR0cmlidXRlcyBjcmVhdGVkIGluIGpvaW5cbiAgICBpZiAoam9pblF1ZXJ5LmF0dHJpYnV0ZXMubWFpbi5sZW5ndGggPiAwKSB7XG4gICAgICBhdHRyaWJ1dGVzLm1haW4gPSBhdHRyaWJ1dGVzLm1haW4uY29uY2F0KGpvaW5RdWVyeS5hdHRyaWJ1dGVzLm1haW4pO1xuICAgIH1cblxuICAgIGlmIChqb2luUXVlcnkuYXR0cmlidXRlcy5zdWJRdWVyeS5sZW5ndGggPiAwKSB7XG4gICAgICBhdHRyaWJ1dGVzLnN1YlF1ZXJ5ID0gYXR0cmlidXRlcy5zdWJRdWVyeS5jb25jYXQoam9pblF1ZXJ5LmF0dHJpYnV0ZXMuc3ViUXVlcnkpO1xuICAgIH1cblxuICAgIGlmIChpbmNsdWRlLmluY2x1ZGUpIHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGRJbmNsdWRlIG9mIGluY2x1ZGUuaW5jbHVkZSkge1xuICAgICAgICBpZiAoY2hpbGRJbmNsdWRlLnNlcGFyYXRlIHx8IGNoaWxkSW5jbHVkZS5fcHNldWRvKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGlsZEpvaW5RdWVyaWVzID0gdGhpcy5nZW5lcmF0ZUluY2x1ZGUoY2hpbGRJbmNsdWRlLCBpbmNsdWRlQXMsIHRvcExldmVsSW5mbyk7XG5cbiAgICAgICAgaWYgKGluY2x1ZGUucmVxdWlyZWQgPT09IGZhbHNlICYmIGNoaWxkSW5jbHVkZS5yZXF1aXJlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJlcXVpcmVkTWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBpcyBhIHN1YiBxdWVyeSB3ZSBqdXN0IGdpdmUgaXQgdG8gdGhlXG4gICAgICAgIGlmIChjaGlsZEluY2x1ZGUuc3ViUXVlcnkgJiYgdG9wTGV2ZWxJbmZvLnN1YlF1ZXJ5KSB7XG4gICAgICAgICAgc3ViQ2hpbGRJbmNsdWRlcy5wdXNoKGNoaWxkSm9pblF1ZXJpZXMuc3ViUXVlcnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZEpvaW5RdWVyaWVzLm1haW5RdWVyeSkge1xuICAgICAgICAgIG1haW5DaGlsZEluY2x1ZGVzLnB1c2goY2hpbGRKb2luUXVlcmllcy5tYWluUXVlcnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZEpvaW5RdWVyaWVzLmF0dHJpYnV0ZXMubWFpbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5tYWluID0gYXR0cmlidXRlcy5tYWluLmNvbmNhdChjaGlsZEpvaW5RdWVyaWVzLmF0dHJpYnV0ZXMubWFpbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkSm9pblF1ZXJpZXMuYXR0cmlidXRlcy5zdWJRdWVyeS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5zdWJRdWVyeSA9IGF0dHJpYnV0ZXMuc3ViUXVlcnkuY29uY2F0KGNoaWxkSm9pblF1ZXJpZXMuYXR0cmlidXRlcy5zdWJRdWVyeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZS5zdWJRdWVyeSAmJiB0b3BMZXZlbEluZm8uc3ViUXVlcnkpIHtcbiAgICAgIGlmIChyZXF1aXJlZE1pc21hdGNoICYmIHN1YkNoaWxkSW5jbHVkZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBqb2luUXVlcmllcy5zdWJRdWVyeS5wdXNoKGAgJHtqb2luUXVlcnkuam9pbn0gKCAke2pvaW5RdWVyeS5ib2R5fSR7c3ViQ2hpbGRJbmNsdWRlcy5qb2luKCcnKX0gKSBPTiAke2pvaW5RdWVyeS5jb25kaXRpb259YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqb2luUXVlcmllcy5zdWJRdWVyeS5wdXNoKGAgJHtqb2luUXVlcnkuam9pbn0gJHtqb2luUXVlcnkuYm9keX0gT04gJHtqb2luUXVlcnkuY29uZGl0aW9ufWApO1xuICAgICAgICBpZiAoc3ViQ2hpbGRJbmNsdWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgam9pblF1ZXJpZXMuc3ViUXVlcnkucHVzaChzdWJDaGlsZEluY2x1ZGVzLmpvaW4oJycpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgam9pblF1ZXJpZXMubWFpblF1ZXJ5LnB1c2gobWFpbkNoaWxkSW5jbHVkZXMuam9pbignJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVxdWlyZWRNaXNtYXRjaCAmJiBtYWluQ2hpbGRJbmNsdWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGpvaW5RdWVyaWVzLm1haW5RdWVyeS5wdXNoKGAgJHtqb2luUXVlcnkuam9pbn0gKCAke2pvaW5RdWVyeS5ib2R5fSR7bWFpbkNoaWxkSW5jbHVkZXMuam9pbignJyl9ICkgT04gJHtqb2luUXVlcnkuY29uZGl0aW9ufWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgam9pblF1ZXJpZXMubWFpblF1ZXJ5LnB1c2goYCAke2pvaW5RdWVyeS5qb2lufSAke2pvaW5RdWVyeS5ib2R5fSBPTiAke2pvaW5RdWVyeS5jb25kaXRpb259YCk7XG4gICAgICAgIGlmIChtYWluQ2hpbGRJbmNsdWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgam9pblF1ZXJpZXMubWFpblF1ZXJ5LnB1c2gobWFpbkNoaWxkSW5jbHVkZXMuam9pbignJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBqb2luUXVlcmllcy5zdWJRdWVyeS5wdXNoKHN1YkNoaWxkSW5jbHVkZXMuam9pbignJykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtYWluUXVlcnk6IGpvaW5RdWVyaWVzLm1haW5RdWVyeS5qb2luKCcnKSxcbiAgICAgIHN1YlF1ZXJ5OiBqb2luUXVlcmllcy5zdWJRdWVyeS5qb2luKCcnKSxcbiAgICAgIGF0dHJpYnV0ZXNcbiAgICB9O1xuICB9XG5cbiAgX2dldE1pbmlmaWVkQWxpYXMoYWxpYXMsIHRhYmxlTmFtZSwgb3B0aW9ucykge1xuICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHJlLWFsaWFzIGluIGNhc2Ugb2YgYSBzdWJxdWVyeVxuICAgIGlmIChvcHRpb25zLmFsaWFzZXNCeVRhYmxlW2Ake3RhYmxlTmFtZX0ke2FsaWFzfWBdKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5hbGlhc2VzQnlUYWJsZVtgJHt0YWJsZU5hbWV9JHthbGlhc31gXTtcbiAgICB9XG5cbiAgICAvLyBEbyBub3QgYWxpYXMgY3VzdG9tIHN1cXVlcnlfb3JkZXJzXG4gICAgaWYgKGFsaWFzLm1hdGNoKC9zdWJxdWVyeV9vcmRlcl9bMC05XS8pKSB7XG4gICAgICByZXR1cm4gYWxpYXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWluaWZpZWRBbGlhcyA9IGBfJHtvcHRpb25zLmFsaWFzZXNNYXBwaW5nLnNpemV9YDtcblxuICAgIG9wdGlvbnMuYWxpYXNlc01hcHBpbmcuc2V0KG1pbmlmaWVkQWxpYXMsIGFsaWFzKTtcbiAgICBvcHRpb25zLmFsaWFzZXNCeVRhYmxlW2Ake3RhYmxlTmFtZX0ke2FsaWFzfWBdID0gbWluaWZpZWRBbGlhcztcblxuICAgIHJldHVybiBtaW5pZmllZEFsaWFzO1xuICB9XG5cbiAgX2dldEFsaWFzRm9yRmllbGQodGFibGVOYW1lLCBmaWVsZCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWluaWZ5QWxpYXNlcykge1xuICAgICAgaWYgKG9wdGlvbnMuYWxpYXNlc0J5VGFibGVbYCR7dGFibGVOYW1lfSR7ZmllbGR9YF0pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuYWxpYXNlc0J5VGFibGVbYCR7dGFibGVOYW1lfSR7ZmllbGR9YF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2VuZXJhdGVKb2luKGluY2x1ZGUsIHRvcExldmVsSW5mbykge1xuICAgIGNvbnN0IGFzc29jaWF0aW9uID0gaW5jbHVkZS5hc3NvY2lhdGlvbjtcbiAgICBjb25zdCBwYXJlbnQgPSBpbmNsdWRlLnBhcmVudDtcbiAgICBjb25zdCBwYXJlbnRJc1RvcCA9ICEhcGFyZW50ICYmICFpbmNsdWRlLnBhcmVudC5hc3NvY2lhdGlvbiAmJiBpbmNsdWRlLnBhcmVudC5tb2RlbC5uYW1lID09PSB0b3BMZXZlbEluZm8ub3B0aW9ucy5tb2RlbC5uYW1lO1xuICAgIGxldCAkcGFyZW50O1xuICAgIGxldCBqb2luV2hlcmU7XG4gICAgLyogQXR0cmlidXRlcyBmb3IgdGhlIGxlZnQgc2lkZSAqL1xuICAgIGNvbnN0IGxlZnQgPSBhc3NvY2lhdGlvbi5zb3VyY2U7XG4gICAgY29uc3QgYXR0ckxlZnQgPSBhc3NvY2lhdGlvbiBpbnN0YW5jZW9mIEJlbG9uZ3NUbyA/XG4gICAgICBhc3NvY2lhdGlvbi5pZGVudGlmaWVyIDpcbiAgICAgIGFzc29jaWF0aW9uLnNvdXJjZUtleUF0dHJpYnV0ZSB8fCBsZWZ0LnByaW1hcnlLZXlBdHRyaWJ1dGU7XG4gICAgY29uc3QgZmllbGRMZWZ0ID0gYXNzb2NpYXRpb24gaW5zdGFuY2VvZiBCZWxvbmdzVG8gP1xuICAgICAgYXNzb2NpYXRpb24uaWRlbnRpZmllckZpZWxkIDpcbiAgICAgIGxlZnQucmF3QXR0cmlidXRlc1thc3NvY2lhdGlvbi5zb3VyY2VLZXlBdHRyaWJ1dGUgfHwgbGVmdC5wcmltYXJ5S2V5QXR0cmlidXRlXS5maWVsZDtcbiAgICBsZXQgYXNMZWZ0O1xuICAgIC8qIEF0dHJpYnV0ZXMgZm9yIHRoZSByaWdodCBzaWRlICovXG4gICAgY29uc3QgcmlnaHQgPSBpbmNsdWRlLm1vZGVsO1xuICAgIGNvbnN0IHRhYmxlUmlnaHQgPSByaWdodC5nZXRUYWJsZU5hbWUoKTtcbiAgICBjb25zdCBmaWVsZFJpZ2h0ID0gYXNzb2NpYXRpb24gaW5zdGFuY2VvZiBCZWxvbmdzVG8gP1xuICAgICAgcmlnaHQucmF3QXR0cmlidXRlc1thc3NvY2lhdGlvbi50YXJnZXRJZGVudGlmaWVyIHx8IHJpZ2h0LnByaW1hcnlLZXlBdHRyaWJ1dGVdLmZpZWxkIDpcbiAgICAgIGFzc29jaWF0aW9uLmlkZW50aWZpZXJGaWVsZDtcbiAgICBsZXQgYXNSaWdodCA9IGluY2x1ZGUuYXM7XG5cbiAgICB3aGlsZSAoKCRwYXJlbnQgPSAkcGFyZW50ICYmICRwYXJlbnQucGFyZW50IHx8IGluY2x1ZGUucGFyZW50KSAmJiAkcGFyZW50LmFzc29jaWF0aW9uKSB7XG4gICAgICBpZiAoYXNMZWZ0KSB7XG4gICAgICAgIGFzTGVmdCA9IGAkeyRwYXJlbnQuYXN9LT4ke2FzTGVmdH1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNMZWZ0ID0gJHBhcmVudC5hcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWFzTGVmdCkgYXNMZWZ0ID0gcGFyZW50LmFzIHx8IHBhcmVudC5tb2RlbC5uYW1lO1xuICAgIGVsc2UgYXNSaWdodCA9IGAke2FzTGVmdH0tPiR7YXNSaWdodH1gO1xuXG4gICAgbGV0IGpvaW5PbiA9IGAke3RoaXMucXVvdGVUYWJsZShhc0xlZnQpfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKGZpZWxkTGVmdCl9YDtcbiAgICBjb25zdCBzdWJxdWVyeUF0dHJpYnV0ZXMgPSBbXTtcblxuICAgIGlmICh0b3BMZXZlbEluZm8ub3B0aW9ucy5ncm91cGVkTGltaXQgJiYgcGFyZW50SXNUb3AgfHwgdG9wTGV2ZWxJbmZvLnN1YlF1ZXJ5ICYmIGluY2x1ZGUucGFyZW50LnN1YlF1ZXJ5ICYmICFpbmNsdWRlLnN1YlF1ZXJ5KSB7XG4gICAgICBpZiAocGFyZW50SXNUb3ApIHtcbiAgICAgICAgLy8gVGhlIG1haW4gbW9kZWwgYXR0cmlidXRlcyBpcyBub3QgYWxpYXNlZCB0byBhIHByZWZpeFxuICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSB0aGlzLnF1b3RlVGFibGUocGFyZW50LmFzIHx8IHBhcmVudC5tb2RlbC5uYW1lKTtcblxuICAgICAgICAvLyBDaGVjayBmb3IgcG90ZW50aWFsIGFsaWFzZWQgSk9JTiBjb25kaXRpb25cbiAgICAgICAgam9pbk9uID0gdGhpcy5fZ2V0QWxpYXNGb3JGaWVsZCh0YWJsZU5hbWUsIGF0dHJMZWZ0LCB0b3BMZXZlbEluZm8ub3B0aW9ucykgfHwgYCR7dGFibGVOYW1lfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHJMZWZ0KX1gO1xuXG4gICAgICAgIGlmICh0b3BMZXZlbEluZm8uc3ViUXVlcnkpIHtcbiAgICAgICAgICBzdWJxdWVyeUF0dHJpYnV0ZXMucHVzaChgJHt0YWJsZU5hbWV9LiR7dGhpcy5xdW90ZUlkZW50aWZpZXIoZmllbGRMZWZ0KX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgam9pblNvdXJjZSA9IGAke2FzTGVmdC5yZXBsYWNlKC8tPi9nLCAnLicpfS4ke2F0dHJMZWZ0fWA7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIHBvdGVudGlhbCBhbGlhc2VkIEpPSU4gY29uZGl0aW9uXG4gICAgICAgIGpvaW5PbiA9IHRoaXMuX2dldEFsaWFzRm9yRmllbGQoYXNMZWZ0LCBqb2luU291cmNlLCB0b3BMZXZlbEluZm8ub3B0aW9ucykgfHwgdGhpcy5xdW90ZUlkZW50aWZpZXIoam9pblNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgam9pbk9uICs9IGAgPSAke3RoaXMucXVvdGVJZGVudGlmaWVyKGFzUmlnaHQpfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKGZpZWxkUmlnaHQpfWA7XG5cbiAgICBpZiAoaW5jbHVkZS5vbikge1xuICAgICAgam9pbk9uID0gdGhpcy53aGVyZUl0ZW1zUXVlcnkoaW5jbHVkZS5vbiwge1xuICAgICAgICBwcmVmaXg6IHRoaXMuc2VxdWVsaXplLmxpdGVyYWwodGhpcy5xdW90ZUlkZW50aWZpZXIoYXNSaWdodCkpLFxuICAgICAgICBtb2RlbDogaW5jbHVkZS5tb2RlbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGUud2hlcmUpIHtcbiAgICAgIGpvaW5XaGVyZSA9IHRoaXMud2hlcmVJdGVtc1F1ZXJ5KGluY2x1ZGUud2hlcmUsIHtcbiAgICAgICAgcHJlZml4OiB0aGlzLnNlcXVlbGl6ZS5saXRlcmFsKHRoaXMucXVvdGVJZGVudGlmaWVyKGFzUmlnaHQpKSxcbiAgICAgICAgbW9kZWw6IGluY2x1ZGUubW9kZWxcbiAgICAgIH0pO1xuICAgICAgaWYgKGpvaW5XaGVyZSkge1xuICAgICAgICBpZiAoaW5jbHVkZS5vcikge1xuICAgICAgICAgIGpvaW5PbiArPSBgIE9SICR7am9pbldoZXJlfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgam9pbk9uICs9IGAgQU5EICR7am9pbldoZXJlfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgam9pbjogaW5jbHVkZS5yZXF1aXJlZCA/ICdJTk5FUiBKT0lOJyA6IGluY2x1ZGUucmlnaHQgJiYgdGhpcy5fZGlhbGVjdC5zdXBwb3J0c1snUklHSFQgSk9JTiddID8gJ1JJR0hUIE9VVEVSIEpPSU4nIDogJ0xFRlQgT1VURVIgSk9JTicsXG4gICAgICBib2R5OiB0aGlzLnF1b3RlVGFibGUodGFibGVSaWdodCwgYXNSaWdodCksXG4gICAgICBjb25kaXRpb246IGpvaW5PbixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgbWFpbjogW10sXG4gICAgICAgIHN1YlF1ZXJ5OiBzdWJxdWVyeUF0dHJpYnV0ZXNcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2VuZXJhdGVUaHJvdWdoSm9pbihpbmNsdWRlLCBpbmNsdWRlQXMsIHBhcmVudFRhYmxlTmFtZSwgdG9wTGV2ZWxJbmZvKSB7XG4gICAgY29uc3QgdGhyb3VnaCA9IGluY2x1ZGUudGhyb3VnaDtcbiAgICBjb25zdCB0aHJvdWdoVGFibGUgPSB0aHJvdWdoLm1vZGVsLmdldFRhYmxlTmFtZSgpO1xuICAgIGNvbnN0IHRocm91Z2hBcyA9IGAke2luY2x1ZGVBcy5pbnRlcm5hbEFzfS0+JHt0aHJvdWdoLmFzfWA7XG4gICAgY29uc3QgZXh0ZXJuYWxUaHJvdWdoQXMgPSBgJHtpbmNsdWRlQXMuZXh0ZXJuYWxBc30uJHt0aHJvdWdoLmFzfWA7XG4gICAgY29uc3QgdGhyb3VnaEF0dHJpYnV0ZXMgPSB0aHJvdWdoLmF0dHJpYnV0ZXMubWFwKGF0dHIgPT4ge1xuICAgICAgbGV0IGFsaWFzID0gYCR7ZXh0ZXJuYWxUaHJvdWdoQXN9LiR7QXJyYXkuaXNBcnJheShhdHRyKSA/IGF0dHJbMV0gOiBhdHRyfWA7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubWluaWZ5QWxpYXNlcykge1xuICAgICAgICBhbGlhcyA9IHRoaXMuX2dldE1pbmlmaWVkQWxpYXMoYWxpYXMsIHRocm91Z2hBcywgdG9wTGV2ZWxJbmZvLm9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIodGhyb3VnaEFzKX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcihBcnJheS5pc0FycmF5KGF0dHIpID8gYXR0clswXSA6IGF0dHIpXG4gICAgICB9IEFTICR7XG4gICAgICAgIHRoaXMucXVvdGVJZGVudGlmaWVyKGFsaWFzKX1gO1xuICAgIH0pO1xuICAgIGNvbnN0IGFzc29jaWF0aW9uID0gaW5jbHVkZS5hc3NvY2lhdGlvbjtcbiAgICBjb25zdCBwYXJlbnRJc1RvcCA9ICFpbmNsdWRlLnBhcmVudC5hc3NvY2lhdGlvbiAmJiBpbmNsdWRlLnBhcmVudC5tb2RlbC5uYW1lID09PSB0b3BMZXZlbEluZm8ub3B0aW9ucy5tb2RlbC5uYW1lO1xuICAgIGNvbnN0IHRhYmxlU291cmNlID0gcGFyZW50VGFibGVOYW1lO1xuICAgIGNvbnN0IGlkZW50U291cmNlID0gYXNzb2NpYXRpb24uaWRlbnRpZmllckZpZWxkO1xuICAgIGNvbnN0IHRhYmxlVGFyZ2V0ID0gaW5jbHVkZUFzLmludGVybmFsQXM7XG4gICAgY29uc3QgaWRlbnRUYXJnZXQgPSBhc3NvY2lhdGlvbi5mb3JlaWduSWRlbnRpZmllckZpZWxkO1xuICAgIGNvbnN0IGF0dHJUYXJnZXQgPSBhc3NvY2lhdGlvbi50YXJnZXRLZXlGaWVsZDtcblxuICAgIGNvbnN0IGpvaW5UeXBlID0gaW5jbHVkZS5yZXF1aXJlZCA/ICdJTk5FUiBKT0lOJyA6IGluY2x1ZGUucmlnaHQgJiYgdGhpcy5fZGlhbGVjdC5zdXBwb3J0c1snUklHSFQgSk9JTiddID8gJ1JJR0hUIE9VVEVSIEpPSU4nIDogJ0xFRlQgT1VURVIgSk9JTic7XG4gICAgbGV0IGpvaW5Cb2R5O1xuICAgIGxldCBqb2luQ29uZGl0aW9uO1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICBtYWluOiBbXSxcbiAgICAgIHN1YlF1ZXJ5OiBbXVxuICAgIH07XG4gICAgbGV0IGF0dHJTb3VyY2UgPSBhc3NvY2lhdGlvbi5zb3VyY2VLZXk7XG4gICAgbGV0IHNvdXJjZUpvaW5PbjtcbiAgICBsZXQgdGFyZ2V0Sm9pbk9uO1xuICAgIGxldCB0aHJvdWdoV2hlcmU7XG4gICAgbGV0IHRhcmdldFdoZXJlO1xuXG4gICAgaWYgKHRvcExldmVsSW5mby5vcHRpb25zLmluY2x1ZGVJZ25vcmVBdHRyaWJ1dGVzICE9PSBmYWxzZSkge1xuICAgICAgLy8gVGhyb3VnaCBpbmNsdWRlcyBhcmUgYWx3YXlzIGhhc01hbnksIHNvIHdlIG5lZWQgdG8gYWRkIHRoZSBhdHRyaWJ1dGVzIHRvIHRoZSBtYWluQXR0cmlidXRlcyBubyBtYXR0ZXIgd2hhdCAoUmVhbCBqb2luIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQgaW4gc3VicXVlcnkpXG4gICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgdGhyb3VnaEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgYXR0cmlidXRlcy5tYWluLnB1c2goYXR0cik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHVzZSBmaWVsZCBvciBhdHRyaWJ1dGVcbiAgICBpZiAoIXRvcExldmVsSW5mby5zdWJRdWVyeSkge1xuICAgICAgYXR0clNvdXJjZSA9IGFzc29jaWF0aW9uLnNvdXJjZUtleUZpZWxkO1xuICAgIH1cbiAgICBpZiAodG9wTGV2ZWxJbmZvLnN1YlF1ZXJ5ICYmICFpbmNsdWRlLnN1YlF1ZXJ5ICYmICFpbmNsdWRlLnBhcmVudC5zdWJRdWVyeSAmJiBpbmNsdWRlLnBhcmVudC5tb2RlbCAhPT0gdG9wTGV2ZWxJbmZvLm9wdGlvbnMubWFpbk1vZGVsKSB7XG4gICAgICBhdHRyU291cmNlID0gYXNzb2NpYXRpb24uc291cmNlS2V5RmllbGQ7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIHN0YXRlbWVudCBmb3IgbGVmdCBzaWRlIG9mIHRocm91Z2hcbiAgICAvLyBVc2VkIGJ5IGJvdGggam9pbiBhbmQgc3VicXVlcnkgd2hlcmVcbiAgICAvLyBJZiBwYXJlbnQgaW5jbHVkZSB3YXMgaW4gYSBzdWJxdWVyeSBuZWVkIHRvIGpvaW4gb24gdGhlIGFsaWFzZWQgYXR0cmlidXRlXG4gICAgaWYgKHRvcExldmVsSW5mby5zdWJRdWVyeSAmJiAhaW5jbHVkZS5zdWJRdWVyeSAmJiBpbmNsdWRlLnBhcmVudC5zdWJRdWVyeSAmJiAhcGFyZW50SXNUb3ApIHtcbiAgICAgIC8vIElmIHdlIGFyZSBtaW5pZnlpbmcgYWxpYXNlcyBhbmQgb3VyIEpPSU4gdGFyZ2V0IGhhcyBiZWVuIG1pbmlmaWVkLCB3ZSBuZWVkIHRvIHVzZSB0aGUgYWxpYXMgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY29sdW1uIG5hbWVcbiAgICAgIGNvbnN0IGpvaW5Tb3VyY2UgPSB0aGlzLl9nZXRBbGlhc0ZvckZpZWxkKHRhYmxlU291cmNlLCBgJHt0YWJsZVNvdXJjZX0uJHthdHRyU291cmNlfWAsIHRvcExldmVsSW5mby5vcHRpb25zKSB8fCBgJHt0YWJsZVNvdXJjZX0uJHthdHRyU291cmNlfWA7XG5cbiAgICAgIHNvdXJjZUpvaW5PbiA9IGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGpvaW5Tb3VyY2UpfSA9IGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGFyZSBtaW5pZnlpbmcgYWxpYXNlcyBhbmQgb3VyIEpPSU4gdGFyZ2V0IGhhcyBiZWVuIG1pbmlmaWVkLCB3ZSBuZWVkIHRvIHVzZSB0aGUgYWxpYXMgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY29sdW1uIG5hbWVcbiAgICAgIGNvbnN0IGFsaWFzZWRTb3VyY2UgPSB0aGlzLl9nZXRBbGlhc0ZvckZpZWxkKHRhYmxlU291cmNlLCBhdHRyU291cmNlLCB0b3BMZXZlbEluZm8ub3B0aW9ucykgfHwgYXR0clNvdXJjZTtcblxuICAgICAgc291cmNlSm9pbk9uID0gYCR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlU291cmNlKX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhbGlhc2VkU291cmNlKX0gPSBgO1xuICAgIH1cbiAgICBzb3VyY2VKb2luT24gKz0gYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIodGhyb3VnaEFzKX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcihpZGVudFNvdXJjZSl9YDtcblxuICAgIC8vIEZpbHRlciBzdGF0ZW1lbnQgZm9yIHJpZ2h0IHNpZGUgb2YgdGhyb3VnaFxuICAgIC8vIFVzZWQgYnkgYm90aCBqb2luIGFuZCBzdWJxdWVyeSB3aGVyZVxuICAgIHRhcmdldEpvaW5PbiA9IGAke3RoaXMucXVvdGVJZGVudGlmaWVyKHRhYmxlVGFyZ2V0KX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyVGFyZ2V0KX0gPSBgO1xuICAgIHRhcmdldEpvaW5PbiArPSBgJHt0aGlzLnF1b3RlSWRlbnRpZmllcih0aHJvdWdoQXMpfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKGlkZW50VGFyZ2V0KX1gO1xuXG4gICAgaWYgKHRocm91Z2gud2hlcmUpIHtcbiAgICAgIHRocm91Z2hXaGVyZSA9IHRoaXMuZ2V0V2hlcmVDb25kaXRpb25zKHRocm91Z2gud2hlcmUsIHRoaXMuc2VxdWVsaXplLmxpdGVyYWwodGhpcy5xdW90ZUlkZW50aWZpZXIodGhyb3VnaEFzKSksIHRocm91Z2gubW9kZWwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmpvaW5UYWJsZURlcGVuZGVudCkge1xuICAgICAgLy8gR2VuZXJhdGUgYSB3cmFwcGVkIGpvaW4gc28gdGhhdCB0aGUgdGhyb3VnaCB0YWJsZSBqb2luIGNhbiBiZSBkZXBlbmRlbnQgb24gdGhlIHRhcmdldCBqb2luXG4gICAgICBqb2luQm9keSA9IGAoICR7dGhpcy5xdW90ZVRhYmxlKHRocm91Z2hUYWJsZSwgdGhyb3VnaEFzKX0gSU5ORVIgSk9JTiAke3RoaXMucXVvdGVUYWJsZShpbmNsdWRlLm1vZGVsLmdldFRhYmxlTmFtZSgpLCBpbmNsdWRlQXMuaW50ZXJuYWxBcyl9IE9OICR7dGFyZ2V0Sm9pbk9ufWA7XG4gICAgICBpZiAodGhyb3VnaFdoZXJlKSB7XG4gICAgICAgIGpvaW5Cb2R5ICs9IGAgQU5EICR7dGhyb3VnaFdoZXJlfWA7XG4gICAgICB9XG4gICAgICBqb2luQm9keSArPSAnKSc7XG4gICAgICBqb2luQ29uZGl0aW9uID0gc291cmNlSm9pbk9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZW5lcmF0ZSBqb2luIFNRTCBmb3IgbGVmdCBzaWRlIG9mIHRocm91Z2hcbiAgICAgIGpvaW5Cb2R5ID0gYCR7dGhpcy5xdW90ZVRhYmxlKHRocm91Z2hUYWJsZSwgdGhyb3VnaEFzKX0gT04gJHtzb3VyY2VKb2luT259ICR7am9pblR5cGV9ICR7dGhpcy5xdW90ZVRhYmxlKGluY2x1ZGUubW9kZWwuZ2V0VGFibGVOYW1lKCksIGluY2x1ZGVBcy5pbnRlcm5hbEFzKX1gO1xuICAgICAgam9pbkNvbmRpdGlvbiA9IHRhcmdldEpvaW5PbjtcbiAgICAgIGlmICh0aHJvdWdoV2hlcmUpIHtcbiAgICAgICAgam9pbkNvbmRpdGlvbiArPSBgIEFORCAke3Rocm91Z2hXaGVyZX1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmNsdWRlLndoZXJlIHx8IGluY2x1ZGUudGhyb3VnaC53aGVyZSkge1xuICAgICAgaWYgKGluY2x1ZGUud2hlcmUpIHtcbiAgICAgICAgdGFyZ2V0V2hlcmUgPSB0aGlzLmdldFdoZXJlQ29uZGl0aW9ucyhpbmNsdWRlLndoZXJlLCB0aGlzLnNlcXVlbGl6ZS5saXRlcmFsKHRoaXMucXVvdGVJZGVudGlmaWVyKGluY2x1ZGVBcy5pbnRlcm5hbEFzKSksIGluY2x1ZGUubW9kZWwsIHRvcExldmVsSW5mby5vcHRpb25zKTtcbiAgICAgICAgaWYgKHRhcmdldFdoZXJlKSB7XG4gICAgICAgICAgam9pbkNvbmRpdGlvbiArPSBgIEFORCAke3RhcmdldFdoZXJlfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9nZW5lcmF0ZVN1YlF1ZXJ5RmlsdGVyKGluY2x1ZGUsIGluY2x1ZGVBcywgdG9wTGV2ZWxJbmZvKTtcblxuICAgIHJldHVybiB7XG4gICAgICBqb2luOiBqb2luVHlwZSxcbiAgICAgIGJvZHk6IGpvaW5Cb2R5LFxuICAgICAgY29uZGl0aW9uOiBqb2luQ29uZGl0aW9uLFxuICAgICAgYXR0cmlidXRlc1xuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBHZW5lcmF0ZXMgc3ViUXVlcnlGaWx0ZXIgLSBhIHNlbGVjdCBuZXN0ZWQgaW4gdGhlIHdoZXJlIGNsYXVzZSBvZiB0aGUgc3ViUXVlcnkuXG4gICAqIEZvciBhIGdpdmVuIGluY2x1ZGUgYSBxdWVyeSBpcyBnZW5lcmF0ZWQgdGhhdCBjb250YWlucyBhbGwgdGhlIHdheSBmcm9tIHRoZSBzdWJRdWVyeVxuICAgKiB0YWJsZSB0byB0aGUgaW5jbHVkZSB0YWJsZSBwbHVzIGV2ZXJ5dGhpbmcgdGhhdCdzIGluIHJlcXVpcmVkIHRyYW5zaXRpdmUgY2xvc3VyZSBvZiB0aGVcbiAgICogZ2l2ZW4gaW5jbHVkZS5cbiAgICovXG4gIF9nZW5lcmF0ZVN1YlF1ZXJ5RmlsdGVyKGluY2x1ZGUsIGluY2x1ZGVBcywgdG9wTGV2ZWxJbmZvKSB7XG4gICAgaWYgKCF0b3BMZXZlbEluZm8uc3ViUXVlcnkgfHwgIWluY2x1ZGUuc3ViUXVlcnlGaWx0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRvcExldmVsSW5mby5vcHRpb25zLndoZXJlKSB7XG4gICAgICB0b3BMZXZlbEluZm8ub3B0aW9ucy53aGVyZSA9IHt9O1xuICAgIH1cbiAgICBsZXQgcGFyZW50ID0gaW5jbHVkZTtcbiAgICBsZXQgY2hpbGQgPSBpbmNsdWRlO1xuICAgIGxldCBuZXN0ZWRJbmNsdWRlcyA9IHRoaXMuX2dldFJlcXVpcmVkQ2xvc3VyZShpbmNsdWRlKS5pbmNsdWRlO1xuICAgIGxldCBxdWVyeTtcblxuICAgIHdoaWxlICgocGFyZW50ID0gcGFyZW50LnBhcmVudCkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgaWYgKHBhcmVudC5wYXJlbnQgJiYgIXBhcmVudC5yZXF1aXJlZCkge1xuICAgICAgICByZXR1cm47IC8vIG9ubHkgZ2VuZXJhdGUgc3ViUXVlcnlGaWx0ZXIgaWYgYWxsIHRoZSBwYXJlbnRzIG9mIHRoaXMgaW5jbHVkZSBhcmUgcmVxdWlyZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudC5zdWJRdWVyeUZpbHRlcikge1xuICAgICAgICAvLyB0aGUgaW5jbHVkZSBpcyBhbHJlYWR5IGhhbmRsZWQgYXMgdGhpcyBwYXJlbnQgaGFzIHRoZSBpbmNsdWRlIG9uIGl0cyByZXF1aXJlZCBjbG9zdXJlXG4gICAgICAgIC8vIHNraXAgdG8gcHJldmVudCBkdXBsaWNhdGUgc3ViUXVlcnlGaWx0ZXJcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXN0ZWRJbmNsdWRlcyA9IFtPYmplY3QuYXNzaWduKHt9LCBjaGlsZCwgeyBpbmNsdWRlOiBuZXN0ZWRJbmNsdWRlcywgYXR0cmlidXRlczogW10gfSldO1xuICAgICAgY2hpbGQgPSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgdG9wSW5jbHVkZSA9IG5lc3RlZEluY2x1ZGVzWzBdO1xuICAgIGNvbnN0IHRvcFBhcmVudCA9IHRvcEluY2x1ZGUucGFyZW50O1xuICAgIGNvbnN0IHRvcEFzc29jaWF0aW9uID0gdG9wSW5jbHVkZS5hc3NvY2lhdGlvbjtcbiAgICB0b3BJbmNsdWRlLmFzc29jaWF0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRvcEluY2x1ZGUudGhyb3VnaCAmJiBPYmplY3QodG9wSW5jbHVkZS50aHJvdWdoLm1vZGVsKSA9PT0gdG9wSW5jbHVkZS50aHJvdWdoLm1vZGVsKSB7XG4gICAgICBxdWVyeSA9IHRoaXMuc2VsZWN0UXVlcnkodG9wSW5jbHVkZS50aHJvdWdoLm1vZGVsLmdldFRhYmxlTmFtZSgpLCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IFt0b3BJbmNsdWRlLnRocm91Z2gubW9kZWwucHJpbWFyeUtleUZpZWxkXSxcbiAgICAgICAgaW5jbHVkZTogTW9kZWwuX3ZhbGlkYXRlSW5jbHVkZWRFbGVtZW50cyh7XG4gICAgICAgICAgbW9kZWw6IHRvcEluY2x1ZGUudGhyb3VnaC5tb2RlbCxcbiAgICAgICAgICBpbmNsdWRlOiBbe1xuICAgICAgICAgICAgYXNzb2NpYXRpb246IHRvcEFzc29jaWF0aW9uLnRvVGFyZ2V0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICB3aGVyZTogdG9wSW5jbHVkZS53aGVyZSxcbiAgICAgICAgICAgIGluY2x1ZGU6IHRvcEluY2x1ZGUuaW5jbHVkZVxuICAgICAgICAgIH1dXG4gICAgICAgIH0pLmluY2x1ZGUsXG4gICAgICAgIG1vZGVsOiB0b3BJbmNsdWRlLnRocm91Z2gubW9kZWwsXG4gICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgW09wLmFuZF06IFtcbiAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplLmxpdGVyYWwoW1xuICAgICAgICAgICAgICBgJHt0aGlzLnF1b3RlVGFibGUodG9wUGFyZW50Lm1vZGVsLm5hbWUpfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKHRvcFBhcmVudC5tb2RlbC5wcmltYXJ5S2V5RmllbGQpfWAsXG4gICAgICAgICAgICAgIGAke3RoaXMucXVvdGVJZGVudGlmaWVyKHRvcEluY2x1ZGUudGhyb3VnaC5tb2RlbC5uYW1lKX0uJHt0aGlzLnF1b3RlSWRlbnRpZmllcih0b3BBc3NvY2lhdGlvbi5pZGVudGlmaWVyRmllbGQpfWBcbiAgICAgICAgICAgIF0uam9pbignID0gJykpLFxuICAgICAgICAgICAgdG9wSW5jbHVkZS50aHJvdWdoLndoZXJlXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBsaW1pdDogMSxcbiAgICAgICAgaW5jbHVkZUlnbm9yZUF0dHJpYnV0ZXM6IGZhbHNlXG4gICAgICB9LCB0b3BJbmNsdWRlLnRocm91Z2gubW9kZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpc0JlbG9uZ3NUbyA9IHRvcEFzc29jaWF0aW9uLmFzc29jaWF0aW9uVHlwZSA9PT0gJ0JlbG9uZ3NUbyc7XG4gICAgICBjb25zdCBzb3VyY2VGaWVsZCA9IGlzQmVsb25nc1RvID8gdG9wQXNzb2NpYXRpb24uaWRlbnRpZmllckZpZWxkIDogdG9wQXNzb2NpYXRpb24uc291cmNlS2V5RmllbGQgfHwgdG9wUGFyZW50Lm1vZGVsLnByaW1hcnlLZXlGaWVsZDtcbiAgICAgIGNvbnN0IHRhcmdldEZpZWxkID0gaXNCZWxvbmdzVG8gPyB0b3BBc3NvY2lhdGlvbi5zb3VyY2VLZXlGaWVsZCB8fCB0b3BJbmNsdWRlLm1vZGVsLnByaW1hcnlLZXlGaWVsZCA6IHRvcEFzc29jaWF0aW9uLmlkZW50aWZpZXJGaWVsZDtcblxuICAgICAgY29uc3Qgam9pbiA9IFtcbiAgICAgICAgYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIodG9wSW5jbHVkZS5hcyl9LiR7dGhpcy5xdW90ZUlkZW50aWZpZXIodGFyZ2V0RmllbGQpfWAsXG4gICAgICAgIGAke3RoaXMucXVvdGVUYWJsZSh0b3BQYXJlbnQuYXMgfHwgdG9wUGFyZW50Lm1vZGVsLm5hbWUpfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKHNvdXJjZUZpZWxkKX1gXG4gICAgICBdLmpvaW4oJyA9ICcpO1xuXG4gICAgICBxdWVyeSA9IHRoaXMuc2VsZWN0UXVlcnkodG9wSW5jbHVkZS5tb2RlbC5nZXRUYWJsZU5hbWUoKSwge1xuICAgICAgICBhdHRyaWJ1dGVzOiBbdGFyZ2V0RmllbGRdLFxuICAgICAgICBpbmNsdWRlOiBNb2RlbC5fdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzKHRvcEluY2x1ZGUpLmluY2x1ZGUsXG4gICAgICAgIG1vZGVsOiB0b3BJbmNsdWRlLm1vZGVsLFxuICAgICAgICB3aGVyZToge1xuICAgICAgICAgIFtPcC5hbmRdOiBbXG4gICAgICAgICAgICB0b3BJbmNsdWRlLndoZXJlLFxuICAgICAgICAgICAgeyBbT3Auam9pbl06IHRoaXMuc2VxdWVsaXplLmxpdGVyYWwoam9pbikgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgbGltaXQ6IDEsXG4gICAgICAgIHRhYmxlQXM6IHRvcEluY2x1ZGUuYXMsXG4gICAgICAgIGluY2x1ZGVJZ25vcmVBdHRyaWJ1dGVzOiBmYWxzZVxuICAgICAgfSwgdG9wSW5jbHVkZS5tb2RlbCk7XG4gICAgfVxuXG4gICAgaWYgKCF0b3BMZXZlbEluZm8ub3B0aW9ucy53aGVyZVtPcC5hbmRdKSB7XG4gICAgICB0b3BMZXZlbEluZm8ub3B0aW9ucy53aGVyZVtPcC5hbmRdID0gW107XG4gICAgfVxuXG4gICAgdG9wTGV2ZWxJbmZvLm9wdGlvbnMud2hlcmVbYF9fJHtpbmNsdWRlQXMuaW50ZXJuYWxBc31gXSA9IHRoaXMuc2VxdWVsaXplLmxpdGVyYWwoW1xuICAgICAgJygnLFxuICAgICAgcXVlcnkucmVwbGFjZSgvOyQvLCAnJyksXG4gICAgICAnKScsXG4gICAgICAnSVMgTk9UIE5VTEwnXG4gICAgXS5qb2luKCcgJykpO1xuICB9XG5cbiAgLypcbiAgICogRm9yIGEgZ2l2ZW4gaW5jbHVkZSBoaWVyYXJjaHkgY3JlYXRlcyBhIGNvcHkgb2YgaXQgd2hlcmUgb25seSB0aGUgcmVxdWlyZWQgaW5jbHVkZXNcbiAgICogYXJlIHByZXNlcnZlZC5cbiAgICovXG4gIF9nZXRSZXF1aXJlZENsb3N1cmUoaW5jbHVkZSkge1xuICAgIGNvbnN0IGNvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBpbmNsdWRlLCB7IGF0dHJpYnV0ZXM6IFtdLCBpbmNsdWRlOiBbXSB9KTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGluY2x1ZGUuaW5jbHVkZSkpIHtcbiAgICAgIGNvcHkuaW5jbHVkZSA9IGluY2x1ZGUuaW5jbHVkZVxuICAgICAgICAuZmlsdGVyKGkgPT4gaS5yZXF1aXJlZClcbiAgICAgICAgLm1hcChpbmMgPT4gdGhpcy5fZ2V0UmVxdWlyZWRDbG9zdXJlKGluYykpO1xuICAgIH1cblxuICAgIHJldHVybiBjb3B5O1xuICB9XG5cbiAgZ2V0UXVlcnlPcmRlcnMob3B0aW9ucywgbW9kZWwsIHN1YlF1ZXJ5KSB7XG4gICAgY29uc3QgbWFpblF1ZXJ5T3JkZXIgPSBbXTtcbiAgICBjb25zdCBzdWJRdWVyeU9yZGVyID0gW107XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLm9yZGVyKSkge1xuICAgICAgZm9yIChsZXQgb3JkZXIgb2Ygb3B0aW9ucy5vcmRlcikge1xuXG4gICAgICAgIC8vIHdyYXAgaWYgbm90IGFycmF5XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcmRlcikpIHtcbiAgICAgICAgICBvcmRlciA9IFtvcmRlcl07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3ViUXVlcnlcbiAgICAgICAgICAmJiBBcnJheS5pc0FycmF5KG9yZGVyKVxuICAgICAgICAgICYmIG9yZGVyWzBdXG4gICAgICAgICAgJiYgIShvcmRlclswXSBpbnN0YW5jZW9mIEFzc29jaWF0aW9uKVxuICAgICAgICAgICYmICEodHlwZW9mIG9yZGVyWzBdID09PSAnZnVuY3Rpb24nICYmIG9yZGVyWzBdLnByb3RvdHlwZSBpbnN0YW5jZW9mIE1vZGVsKVxuICAgICAgICAgICYmICEodHlwZW9mIG9yZGVyWzBdLm1vZGVsID09PSAnZnVuY3Rpb24nICYmIG9yZGVyWzBdLm1vZGVsLnByb3RvdHlwZSBpbnN0YW5jZW9mIE1vZGVsKVxuICAgICAgICAgICYmICEodHlwZW9mIG9yZGVyWzBdID09PSAnc3RyaW5nJyAmJiBtb2RlbCAmJiBtb2RlbC5hc3NvY2lhdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBtb2RlbC5hc3NvY2lhdGlvbnNbb3JkZXJbMF1dKVxuICAgICAgICApIHtcbiAgICAgICAgICBzdWJRdWVyeU9yZGVyLnB1c2godGhpcy5xdW90ZShvcmRlciwgbW9kZWwsICctPicpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJRdWVyeSkge1xuICAgICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZXJlIHN1Yi1xdWVyeSByZW5hbWVzIGF0dHJpYnV0ZSB3ZSB3YW50IHRvIG9yZGVyIGJ5LFxuICAgICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vc2VxdWVsaXplL3NlcXVlbGl6ZS9pc3N1ZXMvODczOVxuICAgICAgICAgIGNvbnN0IHN1YlF1ZXJ5QXR0cmlidXRlID0gb3B0aW9ucy5hdHRyaWJ1dGVzLmZpbmQoYSA9PiBBcnJheS5pc0FycmF5KGEpICYmIGFbMF0gPT09IG9yZGVyWzBdICYmIGFbMV0pO1xuICAgICAgICAgIGlmIChzdWJRdWVyeUF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gdGhpcy5xdW90ZUlkZW50aWZpZXIobW9kZWwubmFtZSk7XG5cbiAgICAgICAgICAgIG9yZGVyWzBdID0gbmV3IFV0aWxzLkNvbCh0aGlzLl9nZXRBbGlhc0ZvckZpZWxkKG1vZGVsTmFtZSwgc3ViUXVlcnlBdHRyaWJ1dGVbMV0sIG9wdGlvbnMpIHx8IHN1YlF1ZXJ5QXR0cmlidXRlWzFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYWluUXVlcnlPcmRlci5wdXNoKHRoaXMucXVvdGUob3JkZXIsIG1vZGVsLCAnLT4nKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLm9yZGVyIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7XG4gICAgICBjb25zdCBzcWwgPSB0aGlzLnF1b3RlKG9wdGlvbnMub3JkZXIsIG1vZGVsLCAnLT4nKTtcbiAgICAgIGlmIChzdWJRdWVyeSkge1xuICAgICAgICBzdWJRdWVyeU9yZGVyLnB1c2goc3FsKTtcbiAgICAgIH1cbiAgICAgIG1haW5RdWVyeU9yZGVyLnB1c2goc3FsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcmRlciBtdXN0IGJlIHR5cGUgb2YgYXJyYXkgb3IgaW5zdGFuY2Ugb2YgYSB2YWxpZCBzZXF1ZWxpemUgbWV0aG9kLicpO1xuICAgIH1cblxuICAgIHJldHVybiB7IG1haW5RdWVyeU9yZGVyLCBzdWJRdWVyeU9yZGVyIH07XG4gIH1cblxuICBzZWxlY3RGcm9tVGFibGVGcmFnbWVudChvcHRpb25zLCBtb2RlbCwgYXR0cmlidXRlcywgdGFibGVzLCBtYWluVGFibGVBcykge1xuICAgIGxldCBmcmFnbWVudCA9IGBTRUxFQ1QgJHthdHRyaWJ1dGVzLmpvaW4oJywgJyl9IEZST00gJHt0YWJsZXN9YDtcblxuICAgIGlmIChtYWluVGFibGVBcykge1xuICAgICAgZnJhZ21lbnQgKz0gYCBBUyAke21haW5UYWJsZUFzfWA7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5kZXhIaW50cyAmJiB0aGlzLl9kaWFsZWN0LnN1cHBvcnRzLmluZGV4SGludHMpIHtcbiAgICAgIGZvciAoY29uc3QgaGludCBvZiBvcHRpb25zLmluZGV4SGludHMpIHtcbiAgICAgICAgaWYgKEluZGV4SGludHNbaGludC50eXBlXSkge1xuICAgICAgICAgIGZyYWdtZW50ICs9IGAgJHtJbmRleEhpbnRzW2hpbnQudHlwZV19IElOREVYICgke2hpbnQudmFsdWVzLm1hcChpbmRleE5hbWUgPT4gdGhpcy5xdW90ZUlkZW50aWZpZXJzKGluZGV4TmFtZSkpLmpvaW4oJywnKX0pYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIFNRTCBmcmFnbWVudCBmb3IgYWRkaW5nIHJlc3VsdCBjb25zdHJhaW50cy5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIEFuIG9iamVjdCB3aXRoIHNlbGVjdFF1ZXJ5IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICAgICAgVGhlIGdlbmVyYXRlZCBzcWwgcXVlcnkuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhZGRMaW1pdEFuZE9mZnNldChvcHRpb25zKSB7XG4gICAgbGV0IGZyYWdtZW50ID0gJyc7XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIGlmIChvcHRpb25zLm9mZnNldCAhPSBudWxsICYmIG9wdGlvbnMubGltaXQgPT0gbnVsbCkge1xuICAgICAgZnJhZ21lbnQgKz0gJyBMSU1JVCAnICsgdGhpcy5lc2NhcGUob3B0aW9ucy5vZmZzZXQpICsgJywgJyArIDEwMDAwMDAwMDAwMDAwO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5saW1pdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5vZmZzZXQgIT0gbnVsbCkge1xuICAgICAgICBmcmFnbWVudCArPSAnIExJTUlUICcgKyB0aGlzLmVzY2FwZShvcHRpb25zLm9mZnNldCkgKyAnLCAnICsgdGhpcy5lc2NhcGUob3B0aW9ucy5saW1pdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFnbWVudCArPSAnIExJTUlUICcgKyB0aGlzLmVzY2FwZShvcHRpb25zLmxpbWl0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgaGFuZGxlU2VxdWVsaXplTWV0aG9kKHNtdGgsIHRhYmxlTmFtZSwgZmFjdG9yeSwgb3B0aW9ucywgcHJlcGVuZCkge1xuICAgIGxldCByZXN1bHQ7XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuT3BlcmF0b3JNYXAsIHNtdGguY29tcGFyYXRvcikpIHtcbiAgICAgIHNtdGguY29tcGFyYXRvciA9IHRoaXMuT3BlcmF0b3JNYXBbc210aC5jb21wYXJhdG9yXTtcbiAgICB9XG5cbiAgICBpZiAoc210aCBpbnN0YW5jZW9mIFV0aWxzLldoZXJlKSB7XG4gICAgICBsZXQgdmFsdWUgPSBzbXRoLmxvZ2ljO1xuICAgICAgbGV0IGtleTtcblxuICAgICAgaWYgKHNtdGguYXR0cmlidXRlIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7XG4gICAgICAgIGtleSA9IHRoaXMuZ2V0V2hlcmVDb25kaXRpb25zKHNtdGguYXR0cmlidXRlLCB0YWJsZU5hbWUsIGZhY3RvcnksIG9wdGlvbnMsIHByZXBlbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5ID0gYCR7dGhpcy5xdW90ZVRhYmxlKHNtdGguYXR0cmlidXRlLk1vZGVsLm5hbWUpfS4ke3RoaXMucXVvdGVJZGVudGlmaWVyKHNtdGguYXR0cmlidXRlLmZpZWxkIHx8IHNtdGguYXR0cmlidXRlLmZpZWxkTmFtZSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5nZXRXaGVyZUNvbmRpdGlvbnModmFsdWUsIHRhYmxlTmFtZSwgZmFjdG9yeSwgb3B0aW9ucywgcHJlcGVuZCk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSAnTlVMTCcpIHtcbiAgICAgICAgICBpZiAoc210aC5jb21wYXJhdG9yID09PSAnPScpIHtcbiAgICAgICAgICAgIHNtdGguY29tcGFyYXRvciA9ICdJUyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzbXRoLmNvbXBhcmF0b3IgPT09ICchPScpIHtcbiAgICAgICAgICAgIHNtdGguY29tcGFyYXRvciA9ICdJUyBOT1QnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBba2V5LCB2YWx1ZV0uam9pbihgICR7c210aC5jb21wYXJhdG9yfSBgKTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndoZXJlSXRlbVF1ZXJ5KHNtdGguYXR0cmlidXRlLCB2YWx1ZSwge1xuICAgICAgICAgIG1vZGVsOiBmYWN0b3J5XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5ib29sZWFuVmFsdWUodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmVzY2FwZSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gJ05VTEwnKSB7XG4gICAgICAgIGlmIChzbXRoLmNvbXBhcmF0b3IgPT09ICc9Jykge1xuICAgICAgICAgIHNtdGguY29tcGFyYXRvciA9ICdJUyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNtdGguY29tcGFyYXRvciA9PT0gJyE9Jykge1xuICAgICAgICAgIHNtdGguY29tcGFyYXRvciA9ICdJUyBOT1QnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBba2V5LCB2YWx1ZV0uam9pbihgICR7c210aC5jb21wYXJhdG9yfSBgKTtcbiAgICB9XG4gICAgaWYgKHNtdGggaW5zdGFuY2VvZiBVdGlscy5MaXRlcmFsKSB7XG4gICAgICByZXR1cm4gc210aC52YWw7XG4gICAgfVxuICAgIGlmIChzbXRoIGluc3RhbmNlb2YgVXRpbHMuQ2FzdCkge1xuICAgICAgaWYgKHNtdGgudmFsIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKHNtdGgudmFsLCB0YWJsZU5hbWUsIGZhY3RvcnksIG9wdGlvbnMsIHByZXBlbmQpO1xuICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3Qoc210aC52YWwpKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMud2hlcmVJdGVtc1F1ZXJ5KHNtdGgudmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZXNjYXBlKHNtdGgudmFsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGBDQVNUKCR7cmVzdWx0fSBBUyAke3NtdGgudHlwZS50b1VwcGVyQ2FzZSgpfSlgO1xuICAgIH1cbiAgICBpZiAoc210aCBpbnN0YW5jZW9mIFV0aWxzLkZuKSB7XG4gICAgICByZXR1cm4gYCR7c210aC5mbn0oJHtzbXRoLmFyZ3MubWFwKGFyZyA9PiB7XG4gICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXF1ZWxpemVNZXRob2QoYXJnLCB0YWJsZU5hbWUsIGZhY3RvcnksIG9wdGlvbnMsIHByZXBlbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QoYXJnKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLndoZXJlSXRlbXNRdWVyeShhcmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVzY2FwZShhcmcpO1xuICAgICAgfSkuam9pbignLCAnKX0pYDtcbiAgICB9XG4gICAgaWYgKHNtdGggaW5zdGFuY2VvZiBVdGlscy5Db2wpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNtdGguY29sKSAmJiAhZmFjdG9yeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIFNlcXVlbGl6ZS5jb2woKSB3aXRoIGFycmF5IG91dHNpZGUgb2Ygb3JkZXIgLyBncm91cCBjbGF1c2UnKTtcbiAgICAgIH1cbiAgICAgIGlmIChzbXRoLmNvbC5zdGFydHNXaXRoKCcqJykpIHtcbiAgICAgICAgcmV0dXJuICcqJztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnF1b3RlKHNtdGguY29sLCBmYWN0b3J5KTtcbiAgICB9XG4gICAgcmV0dXJuIHNtdGgudG9TdHJpbmcodGhpcywgZmFjdG9yeSk7XG4gIH1cblxuICB3aGVyZVF1ZXJ5KHdoZXJlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLndoZXJlSXRlbXNRdWVyeSh3aGVyZSwgb3B0aW9ucyk7XG4gICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGBXSEVSRSAke3F1ZXJ5fWA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHdoZXJlSXRlbXNRdWVyeSh3aGVyZSwgb3B0aW9ucywgYmluZGluZykge1xuICAgIGlmIChcbiAgICAgIHdoZXJlID09PSBudWxsIHx8XG4gICAgICB3aGVyZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBVdGlscy5nZXRDb21wbGV4U2l6ZSh3aGVyZSkgPT09IDBcbiAgICApIHtcbiAgICAgIC8vIE5PIE9QXG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aGVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcG9ydCBmb3IgYHt3aGVyZTogXFwncmF3IHF1ZXJ5XFwnfWAgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuXG4gICAgYmluZGluZyA9IGJpbmRpbmcgfHwgJ0FORCc7XG4gICAgaWYgKGJpbmRpbmdbMF0gIT09ICcgJykgYmluZGluZyA9IGAgJHtiaW5kaW5nfSBgO1xuXG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdCh3aGVyZSkpIHtcbiAgICAgIFV0aWxzLmdldENvbXBsZXhLZXlzKHdoZXJlKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBjb25zdCBpdGVtID0gd2hlcmVbcHJvcF07XG4gICAgICAgIGl0ZW1zLnB1c2godGhpcy53aGVyZUl0ZW1RdWVyeShwcm9wLCBpdGVtLCBvcHRpb25zKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXMucHVzaCh0aGlzLndoZXJlSXRlbVF1ZXJ5KHVuZGVmaW5lZCwgd2hlcmUsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoICYmIGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0gJiYgaXRlbS5sZW5ndGgpLmpvaW4oYmluZGluZykgfHwgJyc7XG4gIH1cblxuICB3aGVyZUl0ZW1RdWVyeShrZXksIHZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXSEVSRSBwYXJhbWV0ZXIgXCIke2tleX1cIiBoYXMgaW52YWxpZCBcInVuZGVmaW5lZFwiIHZhbHVlYCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleS5pbmNsdWRlcygnLicpICYmIG9wdGlvbnMubW9kZWwpIHtcbiAgICAgIGNvbnN0IGtleVBhcnRzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICBpZiAob3B0aW9ucy5tb2RlbC5yYXdBdHRyaWJ1dGVzW2tleVBhcnRzWzBdXSAmJiBvcHRpb25zLm1vZGVsLnJhd0F0dHJpYnV0ZXNba2V5UGFydHNbMF1dLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuSlNPTikge1xuICAgICAgICBjb25zdCB0bXAgPSB7fTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBvcHRpb25zLm1vZGVsLnJhd0F0dHJpYnV0ZXNba2V5UGFydHNbMF1dO1xuICAgICAgICBfLnNldCh0bXAsIGtleVBhcnRzLnNsaWNlKDEpLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLndoZXJlSXRlbVF1ZXJ5KGZpZWxkLmZpZWxkIHx8IGtleVBhcnRzWzBdLCB0bXAsIE9iamVjdC5hc3NpZ24oeyBmaWVsZCB9LCBvcHRpb25zKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLl9maW5kRmllbGQoa2V5LCBvcHRpb25zKTtcbiAgICBjb25zdCBmaWVsZFR5cGUgPSBmaWVsZCAmJiBmaWVsZC50eXBlIHx8IG9wdGlvbnMudHlwZTtcblxuICAgIGNvbnN0IGlzUGxhaW5PYmplY3QgPSBfLmlzUGxhaW5PYmplY3QodmFsdWUpO1xuICAgIGNvbnN0IGlzQXJyYXkgPSAhaXNQbGFpbk9iamVjdCAmJiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICBrZXkgPSB0aGlzLk9wZXJhdG9yc0FsaWFzTWFwICYmIHRoaXMuT3BlcmF0b3JzQWxpYXNNYXBba2V5XSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5fcmVwbGFjZUFsaWFzZXModmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZUtleXMgPSBpc1BsYWluT2JqZWN0ICYmIFV0aWxzLmdldENvbXBsZXhLZXlzKHZhbHVlKTtcblxuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNQbGFpbk9iamVjdCAmJiB2YWx1ZUtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndoZXJlSXRlbVF1ZXJ5KHZhbHVlS2V5c1swXSwgdmFsdWVbdmFsdWVLZXlzWzBdXSwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICBjb25zdCBvcFZhbHVlID0gb3B0aW9ucy5iaW5kUGFyYW0gPyAnTlVMTCcgOiB0aGlzLmVzY2FwZSh2YWx1ZSwgZmllbGQpO1xuICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIG9wVmFsdWUsIHRoaXMuT3BlcmF0b3JNYXBbT3AuaXNdLCBvcHRpb25zLnByZWZpeCk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgY29uc3Qgb3BWYWx1ZSA9IG9wdGlvbnMuYmluZFBhcmFtID8gdGhpcy5mb3JtYXQodmFsdWUsIGZpZWxkLCBvcHRpb25zLCBvcHRpb25zLmJpbmRQYXJhbSkgOiB0aGlzLmVzY2FwZSh2YWx1ZSwgZmllbGQpO1xuICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIG9wVmFsdWUsIHRoaXMuT3BlcmF0b3JNYXBbT3AuZXFdLCBvcHRpb25zLnByZWZpeCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kICYmICEoa2V5ICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgaW5zdGFuY2VvZiBVdGlscy5GbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNlcXVlbGl6ZU1ldGhvZCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCB3aGVyZTogW10gdG8gT3AuYW5kIGlmIHBvc3NpYmxlLCBlbHNlIHRyZWF0IGFzIGxpdGVyYWwvcmVwbGFjZW1lbnRzXG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkICYmIGlzQXJyYXkpIHtcbiAgICAgIGlmIChVdGlscy5jYW5UcmVhdEFycmF5QXNBbmQodmFsdWUpKSB7XG4gICAgICAgIGtleSA9IE9wLmFuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcG9ydCBmb3IgbGl0ZXJhbCByZXBsYWNlbWVudHMgaW4gdGhlIGB3aGVyZWAgb2JqZWN0IGhhcyBiZWVuIHJlbW92ZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gT3Aub3IgfHwga2V5ID09PSBPcC5hbmQgfHwga2V5ID09PSBPcC5ub3QpIHtcbiAgICAgIHJldHVybiB0aGlzLl93aGVyZUdyb3VwQmluZChrZXksIHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG5cblxuICAgIGlmICh2YWx1ZVtPcC5vcl0pIHtcbiAgICAgIHJldHVybiB0aGlzLl93aGVyZUJpbmQodGhpcy5PcGVyYXRvck1hcFtPcC5vcl0sIGtleSwgdmFsdWVbT3Aub3JdLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVbT3AuYW5kXSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3doZXJlQmluZCh0aGlzLk9wZXJhdG9yTWFwW09wLmFuZF0sIGtleSwgdmFsdWVbT3AuYW5kXSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkgJiYgZmllbGRUeXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLkFSUkFZKSB7XG4gICAgICBjb25zdCBvcFZhbHVlID0gb3B0aW9ucy5iaW5kUGFyYW0gPyB0aGlzLmZvcm1hdCh2YWx1ZSwgZmllbGQsIG9wdGlvbnMsIG9wdGlvbnMuYmluZFBhcmFtKSA6IHRoaXMuZXNjYXBlKHZhbHVlLCBmaWVsZCk7XG4gICAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgb3BWYWx1ZSwgdGhpcy5PcGVyYXRvck1hcFtPcC5lcV0sIG9wdGlvbnMucHJlZml4KTtcbiAgICB9XG5cbiAgICBpZiAoaXNQbGFpbk9iamVjdCAmJiBmaWVsZFR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuSlNPTiAmJiBvcHRpb25zLmpzb24gIT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd2hlcmVKU09OKGtleSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvLyBJZiBtdWx0aXBsZSBrZXlzIHdlIGNvbWJpbmUgdGhlIGRpZmZlcmVudCBsb2dpYyBjb25kaXRpb25zXG4gICAgaWYgKGlzUGxhaW5PYmplY3QgJiYgdmFsdWVLZXlzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLl93aGVyZUJpbmQodGhpcy5PcGVyYXRvck1hcFtPcC5hbmRdLCBrZXksIHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3doZXJlUGFyc2VTaW5nbGVWYWx1ZU9iamVjdChrZXksIGZpZWxkLCBPcC5pbiwgdmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoaXNQbGFpbk9iamVjdCkge1xuICAgICAgaWYgKHRoaXMuT3BlcmF0b3JNYXBbdmFsdWVLZXlzWzBdXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2hlcmVQYXJzZVNpbmdsZVZhbHVlT2JqZWN0KGtleSwgZmllbGQsIHZhbHVlS2V5c1swXSwgdmFsdWVbdmFsdWVLZXlzWzBdXSwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fd2hlcmVQYXJzZVNpbmdsZVZhbHVlT2JqZWN0KGtleSwgZmllbGQsIHRoaXMuT3BlcmF0b3JNYXBbT3AuZXFdLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gT3AucGxhY2Vob2xkZXIpIHtcbiAgICAgIGNvbnN0IG9wVmFsdWUgPSBvcHRpb25zLmJpbmRQYXJhbSA/IHRoaXMuZm9ybWF0KHZhbHVlLCBmaWVsZCwgb3B0aW9ucywgb3B0aW9ucy5iaW5kUGFyYW0pIDogdGhpcy5lc2NhcGUodmFsdWUsIGZpZWxkKTtcbiAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUodGhpcy5PcGVyYXRvck1hcFtrZXldLCBvcFZhbHVlLCB0aGlzLk9wZXJhdG9yTWFwW09wLmVxXSwgb3B0aW9ucy5wcmVmaXgpO1xuICAgIH1cblxuICAgIGNvbnN0IG9wVmFsdWUgPSBvcHRpb25zLmJpbmRQYXJhbSA/IHRoaXMuZm9ybWF0KHZhbHVlLCBmaWVsZCwgb3B0aW9ucywgb3B0aW9ucy5iaW5kUGFyYW0pIDogdGhpcy5lc2NhcGUodmFsdWUsIGZpZWxkKTtcbiAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgb3BWYWx1ZSwgdGhpcy5PcGVyYXRvck1hcFtPcC5lcV0sIG9wdGlvbnMucHJlZml4KTtcbiAgfVxuXG4gIF9maW5kRmllbGQoa2V5LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuZmllbGQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZpZWxkO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucmF3QXR0cmlidXRlcyAmJiBvcHRpb25zLm1vZGVsLnJhd0F0dHJpYnV0ZXNba2V5XSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubW9kZWwucmF3QXR0cmlidXRlc1trZXldO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwuZmllbGRSYXdBdHRyaWJ1dGVzTWFwICYmIG9wdGlvbnMubW9kZWwuZmllbGRSYXdBdHRyaWJ1dGVzTWFwW2tleV0pIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm1vZGVsLmZpZWxkUmF3QXR0cmlidXRlc01hcFtrZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vIE9SL0FORC9OT1QgZ3JvdXBpbmcgbG9naWNcbiAgX3doZXJlR3JvdXBCaW5kKGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBiaW5kaW5nID0ga2V5ID09PSBPcC5vciA/IHRoaXMuT3BlcmF0b3JNYXBbT3Aub3JdIDogdGhpcy5PcGVyYXRvck1hcFtPcC5hbmRdO1xuICAgIGNvbnN0IG91dGVyQmluZGluZyA9IGtleSA9PT0gT3Aubm90ID8gJ05PVCAnIDogJyc7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUubWFwKGl0ZW0gPT4ge1xuICAgICAgICBsZXQgaXRlbVF1ZXJ5ID0gdGhpcy53aGVyZUl0ZW1zUXVlcnkoaXRlbSwgb3B0aW9ucywgdGhpcy5PcGVyYXRvck1hcFtPcC5hbmRdKTtcbiAgICAgICAgaWYgKGl0ZW1RdWVyeSAmJiBpdGVtUXVlcnkubGVuZ3RoICYmIChBcnJheS5pc0FycmF5KGl0ZW0pIHx8IF8uaXNQbGFpbk9iamVjdChpdGVtKSkgJiYgVXRpbHMuZ2V0Q29tcGxleFNpemUoaXRlbSkgPiAxKSB7XG4gICAgICAgICAgaXRlbVF1ZXJ5ID0gYCgke2l0ZW1RdWVyeX0pYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbVF1ZXJ5O1xuICAgICAgfSkuZmlsdGVyKGl0ZW0gPT4gaXRlbSAmJiBpdGVtLmxlbmd0aCk7XG5cbiAgICAgIHZhbHVlID0gdmFsdWUubGVuZ3RoICYmIHZhbHVlLmpvaW4oYmluZGluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdGhpcy53aGVyZUl0ZW1zUXVlcnkodmFsdWUsIG9wdGlvbnMsIGJpbmRpbmcpO1xuICAgIH1cbiAgICAvLyBPcC5vcjogW10gc2hvdWxkIHJldHVybiBubyBkYXRhLlxuICAgIC8vIE9wLm5vdCBvZiBubyByZXN0cmljdGlvbiBzaG91bGQgYWxzbyByZXR1cm4gbm8gZGF0YVxuICAgIGlmICgoa2V5ID09PSBPcC5vciB8fCBrZXkgPT09IE9wLm5vdCkgJiYgIXZhbHVlKSB7XG4gICAgICByZXR1cm4gJzAgPSAxJztcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUgPyBgJHtvdXRlckJpbmRpbmd9KCR7dmFsdWV9KWAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBfd2hlcmVCaW5kKGJpbmRpbmcsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSBVdGlscy5nZXRDb21wbGV4S2V5cyh2YWx1ZSkubWFwKHByb3AgPT4ge1xuICAgICAgICBjb25zdCBpdGVtID0gdmFsdWVbcHJvcF07XG4gICAgICAgIHJldHVybiB0aGlzLndoZXJlSXRlbVF1ZXJ5KGtleSwgeyBbcHJvcF06IGl0ZW0gfSwgb3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoaXRlbSA9PiB0aGlzLndoZXJlSXRlbVF1ZXJ5KGtleSwgaXRlbSwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUuZmlsdGVyKGl0ZW0gPT4gaXRlbSAmJiBpdGVtLmxlbmd0aCk7XG5cbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoID8gYCgke3ZhbHVlLmpvaW4oYmluZGluZyl9KWAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBfd2hlcmVKU09OKGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGxldCBiYXNlS2V5ID0gdGhpcy5xdW90ZUlkZW50aWZpZXIoa2V5KTtcbiAgICBpZiAob3B0aW9ucy5wcmVmaXgpIHtcbiAgICAgIGlmIChvcHRpb25zLnByZWZpeCBpbnN0YW5jZW9mIFV0aWxzLkxpdGVyYWwpIHtcbiAgICAgICAgYmFzZUtleSA9IGAke3RoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKG9wdGlvbnMucHJlZml4KX0uJHtiYXNlS2V5fWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlS2V5ID0gYCR7dGhpcy5xdW90ZVRhYmxlKG9wdGlvbnMucHJlZml4KX0uJHtiYXNlS2V5fWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgVXRpbHMuZ2V0T3BlcmF0b3JzKHZhbHVlKS5mb3JFYWNoKG9wID0+IHtcbiAgICAgIGNvbnN0IHdoZXJlID0ge1xuICAgICAgICBbb3BdOiB2YWx1ZVtvcF1cbiAgICAgIH07XG4gICAgICBpdGVtcy5wdXNoKHRoaXMud2hlcmVJdGVtUXVlcnkoa2V5LCB3aGVyZSwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyBqc29uOiBmYWxzZSB9KSkpO1xuICAgIH0pO1xuXG4gICAgXy5mb3JPd24odmFsdWUsIChpdGVtLCBwcm9wKSA9PiB7XG4gICAgICB0aGlzLl90cmF2ZXJzZUpTT04oaXRlbXMsIGJhc2VLZXksIHByb3AsIGl0ZW0sIFtwcm9wXSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBpdGVtcy5qb2luKHRoaXMuT3BlcmF0b3JNYXBbT3AuYW5kXSk7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDEgPyBgKCR7cmVzdWx0fSlgIDogcmVzdWx0O1xuICB9XG5cbiAgX3RyYXZlcnNlSlNPTihpdGVtcywgYmFzZUtleSwgcHJvcCwgaXRlbSwgcGF0aCkge1xuICAgIGxldCBjYXN0O1xuXG4gICAgaWYgKHBhdGhbcGF0aC5sZW5ndGggLSAxXS5pbmNsdWRlcygnOjonKSkge1xuICAgICAgY29uc3QgdG1wID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdLnNwbGl0KCc6OicpO1xuICAgICAgY2FzdCA9IHRtcFsxXTtcbiAgICAgIHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9IHRtcFswXTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoS2V5ID0gdGhpcy5qc29uUGF0aEV4dHJhY3Rpb25RdWVyeShiYXNlS2V5LCBwYXRoKTtcblxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoaXRlbSkpIHtcbiAgICAgIFV0aWxzLmdldE9wZXJhdG9ycyhpdGVtKS5mb3JFYWNoKG9wID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl90b0pTT05WYWx1ZShpdGVtW29wXSk7XG4gICAgICAgIGl0ZW1zLnB1c2godGhpcy53aGVyZUl0ZW1RdWVyeSh0aGlzLl9jYXN0S2V5KHBhdGhLZXksIHZhbHVlLCBjYXN0KSwgeyBbb3BdOiB2YWx1ZSB9KSk7XG4gICAgICB9KTtcbiAgICAgIF8uZm9yT3duKGl0ZW0sICh2YWx1ZSwgaXRlbVByb3ApID0+IHtcbiAgICAgICAgdGhpcy5fdHJhdmVyc2VKU09OKGl0ZW1zLCBiYXNlS2V5LCBpdGVtUHJvcCwgdmFsdWUsIHBhdGguY29uY2F0KFtpdGVtUHJvcF0pKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaXRlbSA9IHRoaXMuX3RvSlNPTlZhbHVlKGl0ZW0pO1xuICAgIGl0ZW1zLnB1c2godGhpcy53aGVyZUl0ZW1RdWVyeSh0aGlzLl9jYXN0S2V5KHBhdGhLZXksIGl0ZW0sIGNhc3QpLCB7IFtPcC5lcV06IGl0ZW0gfSkpO1xuICB9XG5cbiAgX3RvSlNPTlZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgX2Nhc3RLZXkoa2V5LCB2YWx1ZSwgY2FzdCwganNvbikge1xuICAgIGNhc3QgPSBjYXN0IHx8IHRoaXMuX2dldEpzb25DYXN0KEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZSk7XG4gICAgaWYgKGNhc3QpIHtcbiAgICAgIHJldHVybiBuZXcgVXRpbHMuTGl0ZXJhbCh0aGlzLmhhbmRsZVNlcXVlbGl6ZU1ldGhvZChuZXcgVXRpbHMuQ2FzdChuZXcgVXRpbHMuTGl0ZXJhbChrZXkpLCBjYXN0LCBqc29uKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVXRpbHMuTGl0ZXJhbChrZXkpO1xuICB9XG5cbiAgX2dldEpzb25DYXN0KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiAnZG91YmxlIHByZWNpc2lvbic7XG4gICAgfVxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiAndGltZXN0YW1wdHonO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiAnYm9vbGVhbic7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIF9qb2luS2V5VmFsdWUoa2V5LCB2YWx1ZSwgY29tcGFyYXRvciwgcHJlZml4KSB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2tleX0gYW5kICR7dmFsdWV9IGhhcyBubyBjb21wYXJhdG9yYCk7XG4gICAgfVxuICAgIGtleSA9IHRoaXMuX2dldFNhZmVLZXkoa2V5LCBwcmVmaXgpO1xuICAgIHJldHVybiBba2V5LCB2YWx1ZV0uam9pbihgICR7Y29tcGFyYXRvcn0gYCk7XG4gIH1cblxuICBfZ2V0U2FmZUtleShrZXksIHByZWZpeCkge1xuICAgIGlmIChrZXkgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcbiAgICAgIGtleSA9IHRoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKGtleSk7XG4gICAgICByZXR1cm4gdGhpcy5fcHJlZml4S2V5KHRoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKGtleSksIHByZWZpeCk7XG4gICAgfVxuXG4gICAgaWYgKFV0aWxzLmlzQ29sU3RyaW5nKGtleSkpIHtcbiAgICAgIGtleSA9IGtleS5zdWJzdHIoMSwga2V5Lmxlbmd0aCAtIDIpLnNwbGl0KCcuJyk7XG5cbiAgICAgIGlmIChrZXkubGVuZ3RoID4gMikge1xuICAgICAgICBrZXkgPSBbXG4gICAgICAgICAgLy8gam9pbiB0aGUgdGFibGVzIGJ5IC0+IHRvIG1hdGNoIG91dCBpbnRlcm5hbCBuYW1pbmdzXG4gICAgICAgICAga2V5LnNsaWNlKDAsIC0xKS5qb2luKCctPicpLFxuICAgICAgICAgIGtleVtrZXkubGVuZ3RoIC0gMV1cbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGtleS5tYXAoaWRlbnRpZmllciA9PiB0aGlzLnF1b3RlSWRlbnRpZmllcihpZGVudGlmaWVyKSkuam9pbignLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wcmVmaXhLZXkodGhpcy5xdW90ZUlkZW50aWZpZXIoa2V5KSwgcHJlZml4KTtcbiAgfVxuXG4gIF9wcmVmaXhLZXkoa2V5LCBwcmVmaXgpIHtcbiAgICBpZiAocHJlZml4KSB7XG4gICAgICBpZiAocHJlZml4IGluc3RhbmNlb2YgVXRpbHMuTGl0ZXJhbCkge1xuICAgICAgICByZXR1cm4gW3RoaXMuaGFuZGxlU2VxdWVsaXplTWV0aG9kKHByZWZpeCksIGtleV0uam9pbignLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW3RoaXMucXVvdGVUYWJsZShwcmVmaXgpLCBrZXldLmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgX3doZXJlUGFyc2VTaW5nbGVWYWx1ZU9iamVjdChrZXksIGZpZWxkLCBwcm9wLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIGlmIChwcm9wID09PSBPcC5ub3QpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBwcm9wID0gT3Aubm90SW47XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB0cnVlICYmIHZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgICBwcm9wID0gT3AubmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbXBhcmF0b3IgPSB0aGlzLk9wZXJhdG9yTWFwW3Byb3BdIHx8IHRoaXMuT3BlcmF0b3JNYXBbT3AuZXFdO1xuXG4gICAgc3dpdGNoIChwcm9wKSB7XG4gICAgICBjYXNlIE9wLmluOlxuICAgICAgY2FzZSBPcC5ub3RJbjpcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVXRpbHMuTGl0ZXJhbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCB2YWx1ZS52YWwsIGNvbXBhcmF0b3IsIG9wdGlvbnMucHJlZml4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgYCgke3ZhbHVlLm1hcChpdGVtID0+IHRoaXMuZXNjYXBlKGl0ZW0sIGZpZWxkKSkuam9pbignLCAnKX0pYCwgY29tcGFyYXRvciwgb3B0aW9ucy5wcmVmaXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBhcmF0b3IgPT09IHRoaXMuT3BlcmF0b3JNYXBbT3AuaW5dKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksICcoTlVMTCknLCBjb21wYXJhdG9yLCBvcHRpb25zLnByZWZpeCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICBjYXNlIE9wLmFueTpcbiAgICAgIGNhc2UgT3AuYWxsOlxuICAgICAgICBjb21wYXJhdG9yID0gYCR7dGhpcy5PcGVyYXRvck1hcFtPcC5lcV19ICR7Y29tcGFyYXRvcn1gO1xuICAgICAgICBpZiAodmFsdWVbT3AudmFsdWVzXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCBgKFZBTFVFUyAke3ZhbHVlW09wLnZhbHVlc10ubWFwKGl0ZW0gPT4gYCgke3RoaXMuZXNjYXBlKGl0ZW0pfSlgKS5qb2luKCcsICcpfSlgLCBjb21wYXJhdG9yLCBvcHRpb25zLnByZWZpeCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgYCgke3RoaXMuZXNjYXBlKHZhbHVlLCBmaWVsZCl9KWAsIGNvbXBhcmF0b3IsIG9wdGlvbnMucHJlZml4KTtcbiAgICAgIGNhc2UgT3AuYmV0d2VlbjpcbiAgICAgIGNhc2UgT3Aubm90QmV0d2VlbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIGAke3RoaXMuZXNjYXBlKHZhbHVlWzBdLCBmaWVsZCl9IEFORCAke3RoaXMuZXNjYXBlKHZhbHVlWzFdLCBmaWVsZCl9YCwgY29tcGFyYXRvciwgb3B0aW9ucy5wcmVmaXgpO1xuICAgICAgY2FzZSBPcC5yYXc6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGAkcmF3YCB3aGVyZSBwcm9wZXJ0eSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgVXNlIGBzZXF1ZWxpemUubGl0ZXJhbGAgaW5zdGVhZC4nKTtcbiAgICAgIGNhc2UgT3AuY29sOlxuICAgICAgICBjb21wYXJhdG9yID0gdGhpcy5PcGVyYXRvck1hcFtPcC5lcV07XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJy4nKTtcblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMikge1xuICAgICAgICAgIHZhbHVlID0gW1xuICAgICAgICAgICAgLy8gam9pbiB0aGUgdGFibGVzIGJ5IC0+IHRvIG1hdGNoIG91dCBpbnRlcm5hbCBuYW1pbmdzXG4gICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCAtMSkuam9pbignLT4nKSxcbiAgICAgICAgICAgIHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCB2YWx1ZS5tYXAoaWRlbnRpZmllciA9PiB0aGlzLnF1b3RlSWRlbnRpZmllcihpZGVudGlmaWVyKSkuam9pbignLicpLCBjb21wYXJhdG9yLCBvcHRpb25zLnByZWZpeCk7XG4gICAgICBjYXNlIE9wLnN0YXJ0c1dpdGg6XG4gICAgICAgIGNvbXBhcmF0b3IgPSB0aGlzLk9wZXJhdG9yTWFwW09wLmxpa2VdO1xuICAgICAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgdGhpcy5lc2NhcGUoYCR7dmFsdWV9JWApLCBjb21wYXJhdG9yLCBvcHRpb25zLnByZWZpeCk7XG4gICAgICBjYXNlIE9wLmVuZHNXaXRoOlxuICAgICAgICBjb21wYXJhdG9yID0gdGhpcy5PcGVyYXRvck1hcFtPcC5saWtlXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIHRoaXMuZXNjYXBlKGAlJHt2YWx1ZX1gKSwgY29tcGFyYXRvciwgb3B0aW9ucy5wcmVmaXgpO1xuICAgICAgY2FzZSBPcC5zdWJzdHJpbmc6XG4gICAgICAgIGNvbXBhcmF0b3IgPSB0aGlzLk9wZXJhdG9yTWFwW09wLmxpa2VdO1xuICAgICAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgdGhpcy5lc2NhcGUoYCUke3ZhbHVlfSVgKSwgY29tcGFyYXRvciwgb3B0aW9ucy5wcmVmaXgpO1xuICAgIH1cblxuICAgIGNvbnN0IGVzY2FwZU9wdGlvbnMgPSB7XG4gICAgICBhY2NlcHRTdHJpbmdzOiBjb21wYXJhdG9yLmluY2x1ZGVzKHRoaXMuT3BlcmF0b3JNYXBbT3AubGlrZV0pXG4gICAgfTtcblxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWVbT3AuY29sXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgdGhpcy53aGVyZUl0ZW1RdWVyeShudWxsLCB2YWx1ZSksIGNvbXBhcmF0b3IsIG9wdGlvbnMucHJlZml4KTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZVtPcC5hbnldKSB7XG4gICAgICAgIGVzY2FwZU9wdGlvbnMuaXNMaXN0ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIGAoJHt0aGlzLmVzY2FwZSh2YWx1ZVtPcC5hbnldLCBmaWVsZCwgZXNjYXBlT3B0aW9ucyl9KWAsIGAke2NvbXBhcmF0b3J9ICR7dGhpcy5PcGVyYXRvck1hcFtPcC5hbnldfWAsIG9wdGlvbnMucHJlZml4KTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZVtPcC5hbGxdKSB7XG4gICAgICAgIGVzY2FwZU9wdGlvbnMuaXNMaXN0ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvaW5LZXlWYWx1ZShrZXksIGAoJHt0aGlzLmVzY2FwZSh2YWx1ZVtPcC5hbGxdLCBmaWVsZCwgZXNjYXBlT3B0aW9ucyl9KWAsIGAke2NvbXBhcmF0b3J9ICR7dGhpcy5PcGVyYXRvck1hcFtPcC5hbGxdfWAsIG9wdGlvbnMucHJlZml4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgJiYgY29tcGFyYXRvciA9PT0gdGhpcy5PcGVyYXRvck1hcFtPcC5lcV0pIHtcbiAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCB0aGlzLmVzY2FwZSh2YWx1ZSwgZmllbGQsIGVzY2FwZU9wdGlvbnMpLCB0aGlzLk9wZXJhdG9yTWFwW09wLmlzXSwgb3B0aW9ucy5wcmVmaXgpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IG51bGwgJiYgY29tcGFyYXRvciA9PT0gdGhpcy5PcGVyYXRvck1hcFtPcC5uZV0pIHtcbiAgICAgIHJldHVybiB0aGlzLl9qb2luS2V5VmFsdWUoa2V5LCB0aGlzLmVzY2FwZSh2YWx1ZSwgZmllbGQsIGVzY2FwZU9wdGlvbnMpLCB0aGlzLk9wZXJhdG9yTWFwW09wLm5vdF0sIG9wdGlvbnMucHJlZml4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fam9pbktleVZhbHVlKGtleSwgdGhpcy5lc2NhcGUodmFsdWUsIGZpZWxkLCBlc2NhcGVPcHRpb25zKSwgY29tcGFyYXRvciwgb3B0aW9ucy5wcmVmaXgpO1xuICB9XG5cbiAgLypcbiAgICBUYWtlcyBzb21ldGhpbmcgYW5kIHRyYW5zZm9ybXMgaXQgaW50byB2YWx1ZXMgb2YgYSB3aGVyZSBjb25kaXRpb24uXG4gICBAcHJpdmF0ZVxuICAqL1xuICBnZXRXaGVyZUNvbmRpdGlvbnMoc210aCwgdGFibGVOYW1lLCBmYWN0b3J5LCBvcHRpb25zLCBwcmVwZW5kKSB7XG4gICAgY29uc3Qgd2hlcmUgPSB7fTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRhYmxlTmFtZSkpIHtcbiAgICAgIHRhYmxlTmFtZSA9IHRhYmxlTmFtZVswXTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhYmxlTmFtZSkpIHtcbiAgICAgICAgdGFibGVOYW1lID0gdGFibGVOYW1lWzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHByZXBlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJlcGVuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHNtdGggJiYgc210aCBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCkgeyAvLyBDaGVja2luZyBhIHByb3BlcnR5IGlzIGNoZWFwZXIgdGhhbiBhIGxvdCBvZiBpbnN0YW5jZW9mIGNhbGxzXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXF1ZWxpemVNZXRob2Qoc210aCwgdGFibGVOYW1lLCBmYWN0b3J5LCBvcHRpb25zLCBwcmVwZW5kKTtcbiAgICB9XG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChzbXRoKSkge1xuICAgICAgcmV0dXJuIHRoaXMud2hlcmVJdGVtc1F1ZXJ5KHNtdGgsIHtcbiAgICAgICAgbW9kZWw6IGZhY3RvcnksXG4gICAgICAgIHByZWZpeDogcHJlcGVuZCAmJiB0YWJsZU5hbWUsXG4gICAgICAgIHR5cGU6IG9wdGlvbnMudHlwZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc210aCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGxldCBwcmltYXJ5S2V5cyA9IGZhY3RvcnkgPyBPYmplY3Qua2V5cyhmYWN0b3J5LnByaW1hcnlLZXlzKSA6IFtdO1xuXG4gICAgICBpZiAocHJpbWFyeUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdXN0IGEgbnVtYmVyLCBhc3N1bWUgb25seSB0aGUgZmlyc3Qga2V5XG4gICAgICAgIHByaW1hcnlLZXlzID0gcHJpbWFyeUtleXNbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmltYXJ5S2V5cyA9ICdpZCc7XG4gICAgICB9XG5cbiAgICAgIHdoZXJlW3ByaW1hcnlLZXlzXSA9IHNtdGg7XG5cbiAgICAgIHJldHVybiB0aGlzLndoZXJlSXRlbXNRdWVyeSh3aGVyZSwge1xuICAgICAgICBtb2RlbDogZmFjdG9yeSxcbiAgICAgICAgcHJlZml4OiBwcmVwZW5kICYmIHRhYmxlTmFtZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc210aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLndoZXJlSXRlbXNRdWVyeShzbXRoLCB7XG4gICAgICAgIG1vZGVsOiBmYWN0b3J5LFxuICAgICAgICBwcmVmaXg6IHByZXBlbmQgJiYgdGFibGVOYW1lXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzbXRoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXNjYXBlKHNtdGgpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzbXRoKSkge1xuICAgICAgaWYgKHNtdGgubGVuZ3RoID09PSAwIHx8IHNtdGgubGVuZ3RoID4gMCAmJiBzbXRoWzBdLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcxPTEnO1xuICAgICAgaWYgKFV0aWxzLmNhblRyZWF0QXJyYXlBc0FuZChzbXRoKSkge1xuICAgICAgICBjb25zdCBfc210aCA9IHsgW09wLmFuZF06IHNtdGggfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V2hlcmVDb25kaXRpb25zKF9zbXRoLCB0YWJsZU5hbWUsIGZhY3RvcnksIG9wdGlvbnMsIHByZXBlbmQpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciBsaXRlcmFsIHJlcGxhY2VtZW50cyBpbiB0aGUgYHdoZXJlYCBvYmplY3QgaGFzIGJlZW4gcmVtb3ZlZC4nKTtcbiAgICB9XG4gICAgaWYgKHNtdGggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLndoZXJlSXRlbXNRdWVyeShzbXRoLCB7XG4gICAgICAgIG1vZGVsOiBmYWN0b3J5LFxuICAgICAgICBwcmVmaXg6IHByZXBlbmQgJiYgdGFibGVOYW1lXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gJzE9MSc7XG4gIH1cblxuICAvLyBBIHJlY3Vyc2l2ZSBwYXJzZXIgZm9yIG5lc3RlZCB3aGVyZSBjb25kaXRpb25zXG4gIHBhcnNlQ29uZGl0aW9uT2JqZWN0KGNvbmRpdGlvbnMsIHBhdGgpIHtcbiAgICBwYXRoID0gcGF0aCB8fCBbXTtcbiAgICByZXR1cm4gXy5yZWR1Y2UoY29uZGl0aW9ucywgKHJlc3VsdCwgdmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuY29uY2F0KHRoaXMucGFyc2VDb25kaXRpb25PYmplY3QodmFsdWUsIHBhdGguY29uY2F0KGtleSkpKTsgLy8gUmVjdXJzaXZlbHkgcGFyc2Ugb2JqZWN0c1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goeyBwYXRoOiBwYXRoLmNvbmNhdChrZXkpLCB2YWx1ZSB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgYm9vbGVhblZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oUXVlcnlHZW5lcmF0b3IucHJvdG90eXBlLCByZXF1aXJlKCcuL3F1ZXJ5LWdlbmVyYXRvci9vcGVyYXRvcnMnKSk7XG5PYmplY3QuYXNzaWduKFF1ZXJ5R2VuZXJhdG9yLnByb3RvdHlwZSwgcmVxdWlyZSgnLi9xdWVyeS1nZW5lcmF0b3IvdHJhbnNhY3Rpb24nKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUXVlcnlHZW5lcmF0b3I7XG4iXX0= \ No newline at end of file diff --git a/dist/dialects/abstract/query-generator/helpers/quote.js b/dist/dialects/abstract/query-generator/helpers/quote.js index 9026a0a..0f00dbe 100644 --- a/dist/dialects/abstract/query-generator/helpers/quote.js +++ b/dist/dialects/abstract/query-generator/helpers/quote.js @@ -82,4 +82,4 @@ function isIdentifierQuoted(identifier) { } module.exports.isIdentifierQuoted = isIdentifierQuoted; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9xdWVyeS1nZW5lcmF0b3IvaGVscGVycy9xdW90ZS5qcyJdLCJuYW1lcyI6WyJVdGlscyIsInJlcXVpcmUiLCJwb3N0Z3Jlc1Jlc2VydmVkV29yZHMiLCJzcGxpdCIsInF1b3RlSWRlbnRpZmllciIsImRpYWxlY3QiLCJpZGVudGlmaWVyIiwib3B0aW9ucyIsImRlZmF1bHRzIiwiZm9yY2UiLCJxdW90ZUlkZW50aWZpZXJzIiwiYWRkVGlja3MiLCJyZW1vdmVUaWNrcyIsInJhd0lkZW50aWZpZXIiLCJpbmNsdWRlcyIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsIkVycm9yIiwibW9kdWxlIiwiZXhwb3J0cyIsImlzSWRlbnRpZmllclF1b3RlZCIsInRlc3QiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0FBV0E7O0FBRUEsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsbUJBQUQsQ0FBckI7QUFFQTs7Ozs7Ozs7QUFNQSxNQUFNQyxxQkFBcUIsR0FBRyxpdUJBQWl1QkMsS0FBanVCLENBQXV1QixHQUF2dUIsQ0FBOUI7QUFFQTs7Ozs7Ozs7Ozs7O0FBV0EsU0FBU0MsZUFBVCxDQUF5QkMsT0FBekIsRUFBa0NDLFVBQWxDLEVBQThDQyxPQUE5QyxFQUF1RDtBQUNyRCxNQUFJRCxVQUFVLEtBQUssR0FBbkIsRUFBd0IsT0FBT0EsVUFBUDtBQUV4QkMsRUFBQUEsT0FBTyxHQUFHUCxLQUFLLENBQUNRLFFBQU4sQ0FBZUQsT0FBTyxJQUFJLEVBQTFCLEVBQThCO0FBQ3RDRSxJQUFBQSxLQUFLLEVBQUUsS0FEK0I7QUFFdENDLElBQUFBLGdCQUFnQixFQUFFO0FBRm9CLEdBQTlCLENBQVY7O0FBS0EsVUFBUUwsT0FBUjtBQUNFLFNBQUssUUFBTDtBQUNBLFNBQUssU0FBTDtBQUNBLFNBQUssT0FBTDtBQUNFLGFBQU9MLEtBQUssQ0FBQ1csUUFBTixDQUFlWCxLQUFLLENBQUNZLFdBQU4sQ0FBa0JOLFVBQWxCLEVBQThCLEdBQTlCLENBQWYsRUFBbUQsR0FBbkQsQ0FBUDs7QUFFRixTQUFLLFVBQUw7QUFDRSxZQUFNTyxhQUFhLEdBQUdiLEtBQUssQ0FBQ1ksV0FBTixDQUFrQk4sVUFBbEIsRUFBOEIsR0FBOUIsQ0FBdEI7O0FBRUEsVUFDRUMsT0FBTyxDQUFDRSxLQUFSLEtBQWtCLElBQWxCLElBQ0FGLE9BQU8sQ0FBQ0csZ0JBQVIsS0FBNkIsS0FEN0IsSUFFQSxDQUFDSixVQUFVLENBQUNRLFFBQVgsQ0FBb0IsR0FBcEIsQ0FGRCxJQUdBLENBQUNSLFVBQVUsQ0FBQ1EsUUFBWCxDQUFvQixJQUFwQixDQUhELElBSUEsQ0FBQ1oscUJBQXFCLENBQUNZLFFBQXRCLENBQStCRCxhQUFhLENBQUNFLFdBQWQsRUFBL0IsQ0FMSCxFQU1FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQU9GLGFBQVA7QUFDRDs7QUFDRCxhQUFPYixLQUFLLENBQUNXLFFBQU4sQ0FBZUUsYUFBZixFQUE4QixHQUE5QixDQUFQOztBQUNGLFNBQUssT0FBTDtBQUNFLGFBQVEsSUFBR1AsVUFBVSxDQUFDVSxPQUFYLENBQW1CLFVBQW5CLEVBQStCLEVBQS9CLENBQW1DLEdBQTlDOztBQUVGO0FBQ0UsWUFBTSxJQUFJQyxLQUFKLENBQVcsWUFBV1osT0FBUSxvQkFBOUIsQ0FBTjtBQTVCSjtBQThCRDs7QUFDRGEsTUFBTSxDQUFDQyxPQUFQLENBQWVmLGVBQWYsR0FBaUNBLGVBQWpDO0FBRUE7Ozs7Ozs7OztBQVFBLFNBQVNnQixrQkFBVCxDQUE0QmQsVUFBNUIsRUFBd0M7QUFDdEMsU0FBTywrQ0FBK0NlLElBQS9DLENBQW9EZixVQUFwRCxDQUFQO0FBQ0Q7O0FBQ0RZLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxrQkFBZixHQUFvQ0Esa0JBQXBDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFF1b3RlIGhlbHBlcnMgaW1wbGVtZW50IHF1b3RlIGFiaWxpdHkgZm9yIGFsbCBkaWFsZWN0cy5cclxuICogVGhlc2UgYXJlIGJhc2ljIGJsb2NrIG9mIHF1ZXJ5IGJ1aWxkaW5nXHJcbiAqXHJcbiAqIEl0cyBiZXR0ZXIgdG8gaW1wbGVtZW50IGFsbCBkaWFsZWN0IGltcGxlbWVudGF0aW9uIHRvZ2V0aGVyIGhlcmUuIFdoaWNoIHdpbGwgYWxsb3dcclxuICogZXZlbiBhYnN0cmFjdCBnZW5lcmF0b3IgdG8gdXNlIHRoZW0gYnkganVzdCBzcGVjaWZ5aW5nIGRpYWxlY3QgdHlwZS5cclxuICpcclxuICogRGVmaW5pbmcgdGhlc2UgaGVscGVycyBpbiBlYWNoIHF1ZXJ5IGRpYWxlY3Qgd2lsbCBsZWF2ZVxyXG4gKiBjb2RlIGluIGR1YWwgZGVwZW5kZW5jeSBvZiBhYnN0cmFjdCA8LT4gc3BlY2lmaWMgZGlhbGVjdFxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vdXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBsaXN0IG9mIHJlc2VydmVkIHdvcmRzIGluIFBvc3RncmVTUUwgMTBcclxuICogc291cmNlOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzEwL3N0YXRpYy9zcWwta2V5d29yZHMtYXBwZW5kaXguaHRtbFxyXG4gKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY29uc3QgcG9zdGdyZXNSZXNlcnZlZFdvcmRzID0gJ2FsbCxhbmFseXNlLGFuYWx5emUsYW5kLGFueSxhcnJheSxhcyxhc2MsYXN5bW1ldHJpYyxhdXRob3JpemF0aW9uLGJpbmFyeSxib3RoLGNhc2UsY2FzdCxjaGVjayxjb2xsYXRlLGNvbGxhdGlvbixjb2x1bW4sY29uY3VycmVudGx5LGNvbnN0cmFpbnQsY3JlYXRlLGNyb3NzLGN1cnJlbnRfY2F0YWxvZyxjdXJyZW50X2RhdGUsY3VycmVudF9yb2xlLGN1cnJlbnRfc2NoZW1hLGN1cnJlbnRfdGltZSxjdXJyZW50X3RpbWVzdGFtcCxjdXJyZW50X3VzZXIsZGVmYXVsdCxkZWZlcnJhYmxlLGRlc2MsZGlzdGluY3QsZG8sZWxzZSxlbmQsZXhjZXB0LGZhbHNlLGZldGNoLGZvcixmb3JlaWduLGZyZWV6ZSxmcm9tLGZ1bGwsZ3JhbnQsZ3JvdXAsaGF2aW5nLGlsaWtlLGluLGluaXRpYWxseSxpbm5lcixpbnRlcnNlY3QsaW50byxpcyxpc251bGwsam9pbixsYXRlcmFsLGxlYWRpbmcsbGVmdCxsaWtlLGxpbWl0LGxvY2FsdGltZSxsb2NhbHRpbWVzdGFtcCxuYXR1cmFsLG5vdCxub3RudWxsLG51bGwsb2Zmc2V0LG9uLG9ubHksb3Isb3JkZXIsb3V0ZXIsb3ZlcmxhcHMscGxhY2luZyxwcmltYXJ5LHJlZmVyZW5jZXMscmV0dXJuaW5nLHJpZ2h0LHNlbGVjdCxzZXNzaW9uX3VzZXIsc2ltaWxhcixzb21lLHN5bW1ldHJpYyx0YWJsZSx0YWJsZXNhbXBsZSx0aGVuLHRvLHRyYWlsaW5nLHRydWUsdW5pb24sdW5pcXVlLHVzZXIsdXNpbmcsdmFyaWFkaWMsdmVyYm9zZSx3aGVuLHdoZXJlLHdpbmRvdyx3aXRoJy5zcGxpdCgnLCcpO1xyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgZGlhbGVjdCAgICAgICAgIERpYWxlY3QgbmFtZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gIGlkZW50aWZpZXIgICAgICBJZGVudGlmaWVyIHRvIHF1b3RlXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSAgW29wdGlvbnNdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZm9yY2U9ZmFsc2VdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucXVvdGVJZGVudGlmaWVycz10cnVlXVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gcXVvdGVJZGVudGlmaWVyKGRpYWxlY3QsIGlkZW50aWZpZXIsIG9wdGlvbnMpIHtcclxuICBpZiAoaWRlbnRpZmllciA9PT0gJyonKSByZXR1cm4gaWRlbnRpZmllcjtcclxuXHJcbiAgb3B0aW9ucyA9IFV0aWxzLmRlZmF1bHRzKG9wdGlvbnMgfHwge30sIHtcclxuICAgIGZvcmNlOiBmYWxzZSxcclxuICAgIHF1b3RlSWRlbnRpZmllcnM6IHRydWVcclxuICB9KTtcclxuXHJcbiAgc3dpdGNoIChkaWFsZWN0KSB7XHJcbiAgICBjYXNlICdzcWxpdGUnOlxyXG4gICAgY2FzZSAnbWFyaWFkYic6XHJcbiAgICBjYXNlICdteXNxbCc6XHJcbiAgICAgIHJldHVybiBVdGlscy5hZGRUaWNrcyhVdGlscy5yZW1vdmVUaWNrcyhpZGVudGlmaWVyLCAnYCcpLCAnYCcpO1xyXG5cclxuICAgIGNhc2UgJ3Bvc3RncmVzJzpcclxuICAgICAgY29uc3QgcmF3SWRlbnRpZmllciA9IFV0aWxzLnJlbW92ZVRpY2tzKGlkZW50aWZpZXIsICdcIicpO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIG9wdGlvbnMuZm9yY2UgIT09IHRydWUgJiZcclxuICAgICAgICBvcHRpb25zLnF1b3RlSWRlbnRpZmllcnMgPT09IGZhbHNlICYmXHJcbiAgICAgICAgIWlkZW50aWZpZXIuaW5jbHVkZXMoJy4nKSAmJlxyXG4gICAgICAgICFpZGVudGlmaWVyLmluY2x1ZGVzKCctPicpICYmXHJcbiAgICAgICAgIXBvc3RncmVzUmVzZXJ2ZWRXb3Jkcy5pbmNsdWRlcyhyYXdJZGVudGlmaWVyLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIEluIFBvc3RncmVzLCBpZiB0YWJsZXMgb3IgYXR0cmlidXRlcyBhcmUgY3JlYXRlZCBkb3VibGUtcXVvdGVkLFxyXG4gICAgICAgIC8vIHRoZXkgYXJlIGFsc28gY2FzZSBzZW5zaXRpdmUuIElmIHRoZXkgY29udGFpbiBhbnkgdXBwZXJjYXNlXHJcbiAgICAgICAgLy8gY2hhcmFjdGVycywgdGhleSBtdXN0IGFsd2F5cyBiZSBkb3VibGUtcXVvdGVkLiBUaGlzIG1ha2VzIGl0XHJcbiAgICAgICAgLy8gaW1wb3NzaWJsZSB0byB3cml0ZSBxdWVyaWVzIGluIHBvcnRhYmxlIFNRTCBpZiB0YWJsZXMgYXJlIGNyZWF0ZWQgaW5cclxuICAgICAgICAvLyB0aGlzIHdheS4gSGVuY2UsIHdlIHN0cmlwIHF1b3RlcyBpZiB3ZSBkb24ndCB3YW50IGNhc2Ugc2Vuc2l0aXZpdHkuXHJcbiAgICAgICAgcmV0dXJuIHJhd0lkZW50aWZpZXI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFV0aWxzLmFkZFRpY2tzKHJhd0lkZW50aWZpZXIsICdcIicpO1xyXG4gICAgY2FzZSAnbXNzcWwnOlxyXG4gICAgICByZXR1cm4gYFske2lkZW50aWZpZXIucmVwbGFjZSgvW1tcXF0nXSsvZywgJycpfV1gO1xyXG5cclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlhbGVjdCBcIiR7ZGlhbGVjdH1cIiBpcyBub3Qgc3VwcG9ydGVkYCk7XHJcbiAgfVxyXG59XHJcbm1vZHVsZS5leHBvcnRzLnF1b3RlSWRlbnRpZmllciA9IHF1b3RlSWRlbnRpZmllcjtcclxuXHJcbi8qKlxyXG4gKiBUZXN0IGlmIGEgZ2l2ZSBzdHJpbmcgaXMgYWxyZWFkeSBxdW90ZWRcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXJcclxuICpcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0lkZW50aWZpZXJRdW90ZWQoaWRlbnRpZmllcikge1xyXG4gIHJldHVybiAvXlxccyooPzooW2BcIiddKSg/Oig/IVxcMSkufFxcMXsyfSkqXFwxXFwuPykrXFxzKiQvaS50ZXN0KGlkZW50aWZpZXIpO1xyXG59XHJcbm1vZHVsZS5leHBvcnRzLmlzSWRlbnRpZmllclF1b3RlZCA9IGlzSWRlbnRpZmllclF1b3RlZDtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9xdWVyeS1nZW5lcmF0b3IvaGVscGVycy9xdW90ZS5qcyJdLCJuYW1lcyI6WyJVdGlscyIsInJlcXVpcmUiLCJwb3N0Z3Jlc1Jlc2VydmVkV29yZHMiLCJzcGxpdCIsInF1b3RlSWRlbnRpZmllciIsImRpYWxlY3QiLCJpZGVudGlmaWVyIiwib3B0aW9ucyIsImRlZmF1bHRzIiwiZm9yY2UiLCJxdW90ZUlkZW50aWZpZXJzIiwiYWRkVGlja3MiLCJyZW1vdmVUaWNrcyIsInJhd0lkZW50aWZpZXIiLCJpbmNsdWRlcyIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsIkVycm9yIiwibW9kdWxlIiwiZXhwb3J0cyIsImlzSWRlbnRpZmllclF1b3RlZCIsInRlc3QiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUEsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsbUJBQUQsQ0FBckI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLE1BQU1DLHFCQUFxQixHQUFHLGl1QkFBaXVCQyxLQUFqdUIsQ0FBdXVCLEdBQXZ1QixDQUE5QjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsU0FBU0MsZUFBVCxDQUF5QkMsT0FBekIsRUFBa0NDLFVBQWxDLEVBQThDQyxPQUE5QyxFQUF1RDtBQUNyRCxNQUFJRCxVQUFVLEtBQUssR0FBbkIsRUFBd0IsT0FBT0EsVUFBUDtBQUV4QkMsRUFBQUEsT0FBTyxHQUFHUCxLQUFLLENBQUNRLFFBQU4sQ0FBZUQsT0FBTyxJQUFJLEVBQTFCLEVBQThCO0FBQ3RDRSxJQUFBQSxLQUFLLEVBQUUsS0FEK0I7QUFFdENDLElBQUFBLGdCQUFnQixFQUFFO0FBRm9CLEdBQTlCLENBQVY7O0FBS0EsVUFBUUwsT0FBUjtBQUNFLFNBQUssUUFBTDtBQUNBLFNBQUssU0FBTDtBQUNBLFNBQUssT0FBTDtBQUNFLGFBQU9MLEtBQUssQ0FBQ1csUUFBTixDQUFlWCxLQUFLLENBQUNZLFdBQU4sQ0FBa0JOLFVBQWxCLEVBQThCLEdBQTlCLENBQWYsRUFBbUQsR0FBbkQsQ0FBUDs7QUFFRixTQUFLLFVBQUw7QUFDRSxZQUFNTyxhQUFhLEdBQUdiLEtBQUssQ0FBQ1ksV0FBTixDQUFrQk4sVUFBbEIsRUFBOEIsR0FBOUIsQ0FBdEI7O0FBRUEsVUFDRUMsT0FBTyxDQUFDRSxLQUFSLEtBQWtCLElBQWxCLElBQ0FGLE9BQU8sQ0FBQ0csZ0JBQVIsS0FBNkIsS0FEN0IsSUFFQSxDQUFDSixVQUFVLENBQUNRLFFBQVgsQ0FBb0IsR0FBcEIsQ0FGRCxJQUdBLENBQUNSLFVBQVUsQ0FBQ1EsUUFBWCxDQUFvQixJQUFwQixDQUhELElBSUEsQ0FBQ1oscUJBQXFCLENBQUNZLFFBQXRCLENBQStCRCxhQUFhLENBQUNFLFdBQWQsRUFBL0IsQ0FMSCxFQU1FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQU9GLGFBQVA7QUFDRDs7QUFDRCxhQUFPYixLQUFLLENBQUNXLFFBQU4sQ0FBZUUsYUFBZixFQUE4QixHQUE5QixDQUFQOztBQUNGLFNBQUssT0FBTDtBQUNFLGFBQVEsSUFBR1AsVUFBVSxDQUFDVSxPQUFYLENBQW1CLFVBQW5CLEVBQStCLEVBQS9CLENBQW1DLEdBQTlDOztBQUVGO0FBQ0UsWUFBTSxJQUFJQyxLQUFKLENBQVcsWUFBV1osT0FBUSxvQkFBOUIsQ0FBTjtBQTVCSjtBQThCRDs7QUFDRGEsTUFBTSxDQUFDQyxPQUFQLENBQWVmLGVBQWYsR0FBaUNBLGVBQWpDO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxTQUFTZ0Isa0JBQVQsQ0FBNEJkLFVBQTVCLEVBQXdDO0FBQ3RDLFNBQU8sK0NBQStDZSxJQUEvQyxDQUFvRGYsVUFBcEQsQ0FBUDtBQUNEOztBQUNEWSxNQUFNLENBQUNDLE9BQVAsQ0FBZUMsa0JBQWYsR0FBb0NBLGtCQUFwQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUXVvdGUgaGVscGVycyBpbXBsZW1lbnQgcXVvdGUgYWJpbGl0eSBmb3IgYWxsIGRpYWxlY3RzLlxuICogVGhlc2UgYXJlIGJhc2ljIGJsb2NrIG9mIHF1ZXJ5IGJ1aWxkaW5nXG4gKlxuICogSXRzIGJldHRlciB0byBpbXBsZW1lbnQgYWxsIGRpYWxlY3QgaW1wbGVtZW50YXRpb24gdG9nZXRoZXIgaGVyZS4gV2hpY2ggd2lsbCBhbGxvd1xuICogZXZlbiBhYnN0cmFjdCBnZW5lcmF0b3IgdG8gdXNlIHRoZW0gYnkganVzdCBzcGVjaWZ5aW5nIGRpYWxlY3QgdHlwZS5cbiAqXG4gKiBEZWZpbmluZyB0aGVzZSBoZWxwZXJzIGluIGVhY2ggcXVlcnkgZGlhbGVjdCB3aWxsIGxlYXZlXG4gKiBjb2RlIGluIGR1YWwgZGVwZW5kZW5jeSBvZiBhYnN0cmFjdCA8LT4gc3BlY2lmaWMgZGlhbGVjdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIGxpc3Qgb2YgcmVzZXJ2ZWQgd29yZHMgaW4gUG9zdGdyZVNRTCAxMFxuICogc291cmNlOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzEwL3N0YXRpYy9zcWwta2V5d29yZHMtYXBwZW5kaXguaHRtbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHBvc3RncmVzUmVzZXJ2ZWRXb3JkcyA9ICdhbGwsYW5hbHlzZSxhbmFseXplLGFuZCxhbnksYXJyYXksYXMsYXNjLGFzeW1tZXRyaWMsYXV0aG9yaXphdGlvbixiaW5hcnksYm90aCxjYXNlLGNhc3QsY2hlY2ssY29sbGF0ZSxjb2xsYXRpb24sY29sdW1uLGNvbmN1cnJlbnRseSxjb25zdHJhaW50LGNyZWF0ZSxjcm9zcyxjdXJyZW50X2NhdGFsb2csY3VycmVudF9kYXRlLGN1cnJlbnRfcm9sZSxjdXJyZW50X3NjaGVtYSxjdXJyZW50X3RpbWUsY3VycmVudF90aW1lc3RhbXAsY3VycmVudF91c2VyLGRlZmF1bHQsZGVmZXJyYWJsZSxkZXNjLGRpc3RpbmN0LGRvLGVsc2UsZW5kLGV4Y2VwdCxmYWxzZSxmZXRjaCxmb3IsZm9yZWlnbixmcmVlemUsZnJvbSxmdWxsLGdyYW50LGdyb3VwLGhhdmluZyxpbGlrZSxpbixpbml0aWFsbHksaW5uZXIsaW50ZXJzZWN0LGludG8saXMsaXNudWxsLGpvaW4sbGF0ZXJhbCxsZWFkaW5nLGxlZnQsbGlrZSxsaW1pdCxsb2NhbHRpbWUsbG9jYWx0aW1lc3RhbXAsbmF0dXJhbCxub3Qsbm90bnVsbCxudWxsLG9mZnNldCxvbixvbmx5LG9yLG9yZGVyLG91dGVyLG92ZXJsYXBzLHBsYWNpbmcscHJpbWFyeSxyZWZlcmVuY2VzLHJldHVybmluZyxyaWdodCxzZWxlY3Qsc2Vzc2lvbl91c2VyLHNpbWlsYXIsc29tZSxzeW1tZXRyaWMsdGFibGUsdGFibGVzYW1wbGUsdGhlbix0byx0cmFpbGluZyx0cnVlLHVuaW9uLHVuaXF1ZSx1c2VyLHVzaW5nLHZhcmlhZGljLHZlcmJvc2Usd2hlbix3aGVyZSx3aW5kb3csd2l0aCcuc3BsaXQoJywnKTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9ICBkaWFsZWN0ICAgICAgICAgRGlhbGVjdCBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gIGlkZW50aWZpZXIgICAgICBJZGVudGlmaWVyIHRvIHF1b3RlXG4gKiBAcGFyYW0ge09iamVjdH0gIFtvcHRpb25zXVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mb3JjZT1mYWxzZV1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucXVvdGVJZGVudGlmaWVycz10cnVlXVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBxdW90ZUlkZW50aWZpZXIoZGlhbGVjdCwgaWRlbnRpZmllciwgb3B0aW9ucykge1xuICBpZiAoaWRlbnRpZmllciA9PT0gJyonKSByZXR1cm4gaWRlbnRpZmllcjtcblxuICBvcHRpb25zID0gVXRpbHMuZGVmYXVsdHMob3B0aW9ucyB8fCB7fSwge1xuICAgIGZvcmNlOiBmYWxzZSxcbiAgICBxdW90ZUlkZW50aWZpZXJzOiB0cnVlXG4gIH0pO1xuXG4gIHN3aXRjaCAoZGlhbGVjdCkge1xuICAgIGNhc2UgJ3NxbGl0ZSc6XG4gICAgY2FzZSAnbWFyaWFkYic6XG4gICAgY2FzZSAnbXlzcWwnOlxuICAgICAgcmV0dXJuIFV0aWxzLmFkZFRpY2tzKFV0aWxzLnJlbW92ZVRpY2tzKGlkZW50aWZpZXIsICdgJyksICdgJyk7XG5cbiAgICBjYXNlICdwb3N0Z3Jlcyc6XG4gICAgICBjb25zdCByYXdJZGVudGlmaWVyID0gVXRpbHMucmVtb3ZlVGlja3MoaWRlbnRpZmllciwgJ1wiJyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5mb3JjZSAhPT0gdHJ1ZSAmJlxuICAgICAgICBvcHRpb25zLnF1b3RlSWRlbnRpZmllcnMgPT09IGZhbHNlICYmXG4gICAgICAgICFpZGVudGlmaWVyLmluY2x1ZGVzKCcuJykgJiZcbiAgICAgICAgIWlkZW50aWZpZXIuaW5jbHVkZXMoJy0+JykgJiZcbiAgICAgICAgIXBvc3RncmVzUmVzZXJ2ZWRXb3Jkcy5pbmNsdWRlcyhyYXdJZGVudGlmaWVyLnRvTG93ZXJDYXNlKCkpXG4gICAgICApIHtcbiAgICAgICAgLy8gSW4gUG9zdGdyZXMsIGlmIHRhYmxlcyBvciBhdHRyaWJ1dGVzIGFyZSBjcmVhdGVkIGRvdWJsZS1xdW90ZWQsXG4gICAgICAgIC8vIHRoZXkgYXJlIGFsc28gY2FzZSBzZW5zaXRpdmUuIElmIHRoZXkgY29udGFpbiBhbnkgdXBwZXJjYXNlXG4gICAgICAgIC8vIGNoYXJhY3RlcnMsIHRoZXkgbXVzdCBhbHdheXMgYmUgZG91YmxlLXF1b3RlZC4gVGhpcyBtYWtlcyBpdFxuICAgICAgICAvLyBpbXBvc3NpYmxlIHRvIHdyaXRlIHF1ZXJpZXMgaW4gcG9ydGFibGUgU1FMIGlmIHRhYmxlcyBhcmUgY3JlYXRlZCBpblxuICAgICAgICAvLyB0aGlzIHdheS4gSGVuY2UsIHdlIHN0cmlwIHF1b3RlcyBpZiB3ZSBkb24ndCB3YW50IGNhc2Ugc2Vuc2l0aXZpdHkuXG4gICAgICAgIHJldHVybiByYXdJZGVudGlmaWVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFV0aWxzLmFkZFRpY2tzKHJhd0lkZW50aWZpZXIsICdcIicpO1xuICAgIGNhc2UgJ21zc3FsJzpcbiAgICAgIHJldHVybiBgWyR7aWRlbnRpZmllci5yZXBsYWNlKC9bW1xcXSddKy9nLCAnJyl9XWA7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWFsZWN0IFwiJHtkaWFsZWN0fVwiIGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMucXVvdGVJZGVudGlmaWVyID0gcXVvdGVJZGVudGlmaWVyO1xuXG4vKipcbiAqIFRlc3QgaWYgYSBnaXZlIHN0cmluZyBpcyBhbHJlYWR5IHF1b3RlZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGlmaWVyXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc0lkZW50aWZpZXJRdW90ZWQoaWRlbnRpZmllcikge1xuICByZXR1cm4gL15cXHMqKD86KFtgXCInXSkoPzooPyFcXDEpLnxcXDF7Mn0pKlxcMVxcLj8pK1xccyokL2kudGVzdChpZGVudGlmaWVyKTtcbn1cbm1vZHVsZS5leHBvcnRzLmlzSWRlbnRpZmllclF1b3RlZCA9IGlzSWRlbnRpZmllclF1b3RlZDtcbiJdfQ== \ No newline at end of file diff --git a/dist/dialects/abstract/query-generator/operators.js b/dist/dialects/abstract/query-generator/operators.js index 9a12c78..503608f 100644 --- a/dist/dialects/abstract/query-generator/operators.js +++ b/dist/dialects/abstract/query-generator/operators.js @@ -88,4 +88,4 @@ const OperatorHelpers = { }; module.exports = OperatorHelpers; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9xdWVyeS1nZW5lcmF0b3Ivb3BlcmF0b3JzLmpzIl0sIm5hbWVzIjpbIl8iLCJyZXF1aXJlIiwiT3AiLCJVdGlscyIsIk9wZXJhdG9ySGVscGVycyIsIk9wZXJhdG9yTWFwIiwiZXEiLCJuZSIsImd0ZSIsImd0IiwibHRlIiwibHQiLCJub3QiLCJpcyIsImluIiwibm90SW4iLCJsaWtlIiwibm90TGlrZSIsImlMaWtlIiwibm90SUxpa2UiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJzdWJzdHJpbmciLCJyZWdleHAiLCJub3RSZWdleHAiLCJpUmVnZXhwIiwibm90SVJlZ2V4cCIsImJldHdlZW4iLCJub3RCZXR3ZWVuIiwib3ZlcmxhcCIsImNvbnRhaW5zIiwiY29udGFpbmVkIiwiYWRqYWNlbnQiLCJzdHJpY3RMZWZ0Iiwic3RyaWN0UmlnaHQiLCJub0V4dGVuZFJpZ2h0Iiwibm9FeHRlbmRMZWZ0IiwiYW55IiwiYWxsIiwiYW5kIiwib3IiLCJjb2wiLCJwbGFjZWhvbGRlciIsIk9wZXJhdG9yc0FsaWFzTWFwIiwic2V0T3BlcmF0b3JzQWxpYXNlcyIsImFsaWFzZXMiLCJpc0VtcHR5IiwiT2JqZWN0IiwiYXNzaWduIiwiX3JlcGxhY2VBbGlhc2VzIiwib3JpZyIsIm9iaiIsImdldE9wZXJhdG9ycyIsImZvckVhY2giLCJvcCIsIml0ZW0iLCJpc1BsYWluT2JqZWN0IiwiZm9yT3duIiwicHJvcCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsb0JBQUQsQ0FBbEI7O0FBQ0EsTUFBTUUsS0FBSyxHQUFHRixPQUFPLENBQUMsZ0JBQUQsQ0FBckI7O0FBRUEsTUFBTUcsZUFBZSxHQUFHO0FBQ3RCQyxFQUFBQSxXQUFXLEVBQUU7QUFDWCxL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RUFBWjs7QUFDQSxRQUFJLENBQUMsS0FBS1IsaUJBQVYsRUFBNkI7QUFDM0IsYUFBT08sSUFBUDtBQUNEOztBQUVEL0MsSUFBQUEsS0FBSyxDQUFDaUQsWUFBTixDQUFtQkYsSUFBbkIsRUFBeUJHLE9BQXpCLENBQWlDQyxFQUFFLElBQUk7QUFDckMsWUFBTUMsSUFBSSxHQUFHTCxJQUFJLENBQUNJLEVBQUQsQ0FBakI7O0FBQ0EsVUFBSXRELENBQUMsQ0FBQ3dELGFBQUYsQ0FBZ0JELElBQWhCLENBQUosRUFBMkI7QUFDekJKLFFBQUFBLEdBQUcsQ0FBQ0csRUFBRCxDQUFILEdBQVUsS0FBS0wsZUFBTCxDQUFxQk0sSUFBckIsQ0FBVjtBQUNELE9BRkQsTUFFTztBQUNMSixRQUFBQSxHQUFHLENBQUNHLEVBQUQsQ0FBSCxHQUFVQyxJQUFWO0FBQ0Q7QUFDRixLQVBEOztBQVNBdkQsSUFBQUEsQ0FBQyxDQUFDeUQsTUFBRixDQUFTUCxJQUFULEVBQWUsQ0FBQ0ssSUFBRCxFQUFPRyxJQUFQLEtBQWdCO0FBQzdCQSxNQUFBQSxJQUFJLEdBQUcsS0FBS2YsaUJBQUwsQ0FBdUJlLElBQXZCLEtBQWdDQSxJQUF2Qzs7QUFDQSxVQUFJMUQsQ0FBQyxDQUFDd0QsYUFBRixDQUFnQkQsSUFBaEIsQ0FBSixFQUEyQjtBQUN6QkEsUUFBQUEsSUFBSSxHQUFHLEtBQUtOLGVBQUwsQ0FBcUJNLElBQXJCLENBQVA7QUFDRDs7QUFDREosTUFBQUEsR0FBRyxDQUFDTyxJQUFELENBQUgsR0FBWUgsSUFBWjtBQUNELEtBTkQ7O0FBT0EsV0FBT0osR0FBUDtBQUNEOztBQTFFcUIsQ0FBeEI7QUE2RUFRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnhELGVBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBPcCA9IHJlcXVpcmUoJy4uLy4uLy4uL29wZXJhdG9ycycpO1xyXG5jb25zdCBVdGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XHJcblxyXG5jb25zdCBPcGVyYXRvckhlbHBlcnMgPSB7XHJcbiAgT3BlcmF0b3JNYXA6IHtcclxuICAgIFtPcC5lcV06ICc9JyxcclxuICAgIFtPcC5uZV06ICchPScsXHJcbiAgICBbT3AuZ3RlXTogJz49JyxcclxuICAgIFtPcC5ndF06ICc+JyxcclxuICAgIFtPcC5sdGVdOiAnPD0nLFxyXG4gICAgW09wLmx0XTogJzwnLFxyXG4gICAgW09wLm5vdF06ICdJUyBOT1QnLFxyXG4gICAgW09wLmlzXTogJ0lTJyxcclxuICAgIFtPcC5pbl06ICdJTicsXHJcbiAgICBbT3Aubm90SW5dOiAnTk9UIElOJyxcclxuICAgIFtPcC5saWtlXTogJ0xJS0UnLFxyXG4gICAgW09wLm5vdExpa2VdOiAnTk9UIExJS0UnLFxyXG4gICAgW09wLmlMaWtlXTogJ0lMSUtFJyxcclxuICAgIFtPcC5ub3RJTGlrZV06ICdOT1QgSUxJS0UnLFxyXG4gICAgW09wLnN0YXJ0c1dpdGhdOiAnTElLRScsXHJcbiAgICBbT3AuZW5kc1dpdGhdOiAnTElLRScsXHJcbiAgICBbT3Auc3Vic3RyaW5nXTogJ0xJS0UnLFxyXG4gICAgW09wLnJlZ2V4cF06ICd+JyxcclxuICAgIFtPcC5ub3RSZWdleHBdOiAnIX4nLFxyXG4gICAgW09wLmlSZWdleHBdOiAnfionLFxyXG4gICAgW09wLm5vdElSZWdleHBdOiAnIX4qJyxcclxuICAgIFtPcC5iZXR3ZWVuXTogJ0JFVFdFRU4nLFxyXG4gICAgW09wLm5vdEJldHdlZW5dOiAnTk9UIEJFVFdFRU4nLFxyXG4gICAgW09wLm92ZXJsYXBdOiAnJiYnLFxyXG4gICAgW09wLmNvbnRhaW5zXTogJ0A+JyxcclxuICAgIFtPcC5jb250YWluZWRdOiAnPEAnLFxyXG4gICAgW09wLmFkamFjZW50XTogJy18LScsXHJcbiAgICBbT3Auc3RyaWN0TGVmdF06ICc8PCcsXHJcbiAgICBbT3Auc3RyaWN0UmlnaHRdOiAnPj4nLFxyXG4gICAgW09wLm5vRXh0ZW5kUmlnaHRdOiAnJjwnLFxyXG4gICAgW09wLm5vRXh0ZW5kTGVmdF06ICcmPicsXHJcbiAgICBbT3AuYW55XTogJ0FOWScsXHJcbiAgICBbT3AuYWxsXTogJ0FMTCcsXHJcbiAgICBbT3AuYW5kXTogJyBBTkQgJyxcclxuICAgIFtPcC5vcl06ICcgT1IgJyxcclxuICAgIFtPcC5jb2xdOiAnQ09MJyxcclxuICAgIFtPcC5wbGFjZWhvbGRlcl06ICckJFBMQUNFSE9MREVSJCQnXHJcbiAgfSxcclxuXHJcbiAgT3BlcmF0b3JzQWxpYXNNYXA6IHt9LFxyXG5cclxuICBzZXRPcGVyYXRvcnNBbGlhc2VzKGFsaWFzZXMpIHtcclxuICAgIGlmICghYWxpYXNlcyB8fCBfLmlzRW1wdHkoYWxpYXNlcykpIHtcclxuICAgICAgdGhpcy5PcGVyYXRvcnNBbGlhc01hcCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5PcGVyYXRvcnNBbGlhc01hcCA9IE9iamVjdC5hc3NpZ24oe30sIGFsaWFzZXMpO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIF9yZXBsYWNlQWxpYXNlcyhvcmlnKSB7XHJcbiAgICBjb25zdCBvYmogPSB7fTtcclxuICAgIGlmICghdGhpcy5PcGVyYXRvcnNBbGlhc01hcCkge1xyXG4gICAgICByZXR1cm4gb3JpZztcclxuICAgIH1cclxuXHJcbiAgICBVdGlscy5nZXRPcGVyYXRvcnMob3JpZykuZm9yRWFjaChvcCA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSBvcmlnW29wXTtcclxuICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChpdGVtKSkge1xyXG4gICAgICAgIG9ialtvcF0gPSB0aGlzLl9yZXBsYWNlQWxpYXNlcyhpdGVtKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvYmpbb3BdID0gaXRlbTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgXy5mb3JPd24ob3JpZywgKGl0ZW0sIHByb3ApID0+IHtcclxuICAgICAgcHJvcCA9IHRoaXMuT3BlcmF0b3JzQWxpYXNNYXBbcHJvcF0gfHwgcHJvcDtcclxuICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChpdGVtKSkge1xyXG4gICAgICAgIGl0ZW0gPSB0aGlzLl9yZXBsYWNlQWxpYXNlcyhpdGVtKTtcclxuICAgICAgfVxyXG4gICAgICBvYmpbcHJvcF0gPSBpdGVtO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gT3BlcmF0b3JIZWxwZXJzO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9xdWVyeS1nZW5lcmF0b3Ivb3BlcmF0b3JzLmpzIl0sIm5hbWVzIjpbIl8iLCJyZXF1aXJlIiwiT3AiLCJVdGlscyIsIk9wZXJhdG9ySGVscGVycyIsIk9wZXJhdG9yTWFwIiwiZXEiLCJuZSIsImd0ZSIsImd0IiwibHRlIiwibHQiLCJub3QiLCJpcyIsImluIiwibm90SW4iLCJsaWtlIiwibm90TGlrZSIsImlMaWtlIiwibm90SUxpa2UiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJzdWJzdHJpbmciLCJyZWdleHAiLCJub3RSZWdleHAiLCJpUmVnZXhwIiwibm90SVJlZ2V4cCIsImJldHdlZW4iLCJub3RCZXR3ZWVuIiwib3ZlcmxhcCIsImNvbnRhaW5zIiwiY29udGFpbmVkIiwiYWRqYWNlbnQiLCJzdHJpY3RMZWZ0Iiwic3RyaWN0UmlnaHQiLCJub0V4dGVuZFJpZ2h0Iiwibm9FeHRlbmRMZWZ0IiwiYW55IiwiYWxsIiwiYW5kIiwib3IiLCJjb2wiLCJwbGFjZWhvbGRlciIsIk9wZXJhdG9yc0FsaWFzTWFwIiwic2V0T3BlcmF0b3JzQWxpYXNlcyIsImFsaWFzZXMiLCJpc0VtcHR5IiwiT2JqZWN0IiwiYXNzaWduIiwiX3JlcGxhY2VBbGlhc2VzIiwib3JpZyIsIm9iaiIsImdldE9wZXJhdG9ycyIsImZvckVhY2giLCJvcCIsIml0ZW0iLCJpc1BsYWluT2JqZWN0IiwiZm9yT3duIiwicHJvcCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsb0JBQUQsQ0FBbEI7O0FBQ0EsTUFBTUUsS0FBSyxHQUFHRixPQUFPLENBQUMsZ0JBQUQsQ0FBckI7O0FBRUEsTUFBTUcsZUFBZSxHQUFHO0FBQ3RCQyxFQUFBQSxXQUFXLEVBQUU7QUFDWCxL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RUFBWjs7QUFDQSxRQUFJLENBQUMsS0FBS1IsaUJBQVYsRUFBNkI7QUFDM0IsYUFBT08sSUFBUDtBQUNEOztBQUVEL0MsSUFBQUEsS0FBSyxDQUFDaUQsWUFBTixDQUFtQkYsSUFBbkIsRUFBeUJHLE9BQXpCLENBQWlDQyxFQUFFLElBQUk7QUFDckMsWUFBTUMsSUFBSSxHQUFHTCxJQUFJLENBQUNJLEVBQUQsQ0FBakI7O0FBQ0EsVUFBSXRELENBQUMsQ0FBQ3dELGFBQUYsQ0FBZ0JELElBQWhCLENBQUosRUFBMkI7QUFDekJKLFFBQUFBLEdBQUcsQ0FBQ0csRUFBRCxDQUFILEdBQVUsS0FBS0wsZUFBTCxDQUFxQk0sSUFBckIsQ0FBVjtBQUNELE9BRkQsTUFFTztBQUNMSixRQUFBQSxHQUFHLENBQUNHLEVBQUQsQ0FBSCxHQUFVQyxJQUFWO0FBQ0Q7QUFDRixLQVBEOztBQVNBdkQsSUFBQUEsQ0FBQyxDQUFDeUQsTUFBRixDQUFTUCxJQUFULEVBQWUsQ0FBQ0ssSUFBRCxFQUFPRyxJQUFQLEtBQWdCO0FBQzdCQSxNQUFBQSxJQUFJLEdBQUcsS0FBS2YsaUJBQUwsQ0FBdUJlLElBQXZCLEtBQWdDQSxJQUF2Qzs7QUFDQSxVQUFJMUQsQ0FBQyxDQUFDd0QsYUFBRixDQUFnQkQsSUFBaEIsQ0FBSixFQUEyQjtBQUN6QkEsUUFBQUEsSUFBSSxHQUFHLEtBQUtOLGVBQUwsQ0FBcUJNLElBQXJCLENBQVA7QUFDRDs7QUFDREosTUFBQUEsR0FBRyxDQUFDTyxJQUFELENBQUgsR0FBWUgsSUFBWjtBQUNELEtBTkQ7O0FBT0EsV0FBT0osR0FBUDtBQUNEOztBQTFFcUIsQ0FBeEI7QUE2RUFRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnhELGVBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBPcCA9IHJlcXVpcmUoJy4uLy4uLy4uL29wZXJhdG9ycycpO1xuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG5jb25zdCBPcGVyYXRvckhlbHBlcnMgPSB7XG4gIE9wZXJhdG9yTWFwOiB7XG4gICAgW09wLmVxXTogJz0nLFxuICAgIFtPcC5uZV06ICchPScsXG4gICAgW09wLmd0ZV06ICc+PScsXG4gICAgW09wLmd0XTogJz4nLFxuICAgIFtPcC5sdGVdOiAnPD0nLFxuICAgIFtPcC5sdF06ICc8JyxcbiAgICBbT3Aubm90XTogJ0lTIE5PVCcsXG4gICAgW09wLmlzXTogJ0lTJyxcbiAgICBbT3AuaW5dOiAnSU4nLFxuICAgIFtPcC5ub3RJbl06ICdOT1QgSU4nLFxuICAgIFtPcC5saWtlXTogJ0xJS0UnLFxuICAgIFtPcC5ub3RMaWtlXTogJ05PVCBMSUtFJyxcbiAgICBbT3AuaUxpa2VdOiAnSUxJS0UnLFxuICAgIFtPcC5ub3RJTGlrZV06ICdOT1QgSUxJS0UnLFxuICAgIFtPcC5zdGFydHNXaXRoXTogJ0xJS0UnLFxuICAgIFtPcC5lbmRzV2l0aF06ICdMSUtFJyxcbiAgICBbT3Auc3Vic3RyaW5nXTogJ0xJS0UnLFxuICAgIFtPcC5yZWdleHBdOiAnficsXG4gICAgW09wLm5vdFJlZ2V4cF06ICchficsXG4gICAgW09wLmlSZWdleHBdOiAnfionLFxuICAgIFtPcC5ub3RJUmVnZXhwXTogJyF+KicsXG4gICAgW09wLmJldHdlZW5dOiAnQkVUV0VFTicsXG4gICAgW09wLm5vdEJldHdlZW5dOiAnTk9UIEJFVFdFRU4nLFxuICAgIFtPcC5vdmVybGFwXTogJyYmJyxcbiAgICBbT3AuY29udGFpbnNdOiAnQD4nLFxuICAgIFtPcC5jb250YWluZWRdOiAnPEAnLFxuICAgIFtPcC5hZGphY2VudF06ICctfC0nLFxuICAgIFtPcC5zdHJpY3RMZWZ0XTogJzw8JyxcbiAgICBbT3Auc3RyaWN0UmlnaHRdOiAnPj4nLFxuICAgIFtPcC5ub0V4dGVuZFJpZ2h0XTogJyY8JyxcbiAgICBbT3Aubm9FeHRlbmRMZWZ0XTogJyY+JyxcbiAgICBbT3AuYW55XTogJ0FOWScsXG4gICAgW09wLmFsbF06ICdBTEwnLFxuICAgIFtPcC5hbmRdOiAnIEFORCAnLFxuICAgIFtPcC5vcl06ICcgT1IgJyxcbiAgICBbT3AuY29sXTogJ0NPTCcsXG4gICAgW09wLnBsYWNlaG9sZGVyXTogJyQkUExBQ0VIT0xERVIkJCdcbiAgfSxcblxuICBPcGVyYXRvcnNBbGlhc01hcDoge30sXG5cbiAgc2V0T3BlcmF0b3JzQWxpYXNlcyhhbGlhc2VzKSB7XG4gICAgaWYgKCFhbGlhc2VzIHx8IF8uaXNFbXB0eShhbGlhc2VzKSkge1xuICAgICAgdGhpcy5PcGVyYXRvcnNBbGlhc01hcCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLk9wZXJhdG9yc0FsaWFzTWFwID0gT2JqZWN0LmFzc2lnbih7fSwgYWxpYXNlcyk7XG4gICAgfVxuICB9LFxuXG4gIF9yZXBsYWNlQWxpYXNlcyhvcmlnKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgaWYgKCF0aGlzLk9wZXJhdG9yc0FsaWFzTWFwKSB7XG4gICAgICByZXR1cm4gb3JpZztcbiAgICB9XG5cbiAgICBVdGlscy5nZXRPcGVyYXRvcnMob3JpZykuZm9yRWFjaChvcCA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gb3JpZ1tvcF07XG4gICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgIG9ialtvcF0gPSB0aGlzLl9yZXBsYWNlQWxpYXNlcyhpdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtvcF0gPSBpdGVtO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgXy5mb3JPd24ob3JpZywgKGl0ZW0sIHByb3ApID0+IHtcbiAgICAgIHByb3AgPSB0aGlzLk9wZXJhdG9yc0FsaWFzTWFwW3Byb3BdIHx8IHByb3A7XG4gICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9yZXBsYWNlQWxpYXNlcyhpdGVtKTtcbiAgICAgIH1cbiAgICAgIG9ialtwcm9wXSA9IGl0ZW07XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPcGVyYXRvckhlbHBlcnM7XG4iXX0= \ No newline at end of file diff --git a/dist/dialects/abstract/query-generator/transaction.js b/dist/dialects/abstract/query-generator/transaction.js index 9abfdb5..95efae2 100644 --- a/dist/dialects/abstract/query-generator/transaction.js +++ b/dist/dialects/abstract/query-generator/transaction.js @@ -80,4 +80,4 @@ const TransactionQueries = { }; module.exports = TransactionQueries; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9xdWVyeS1nZW5lcmF0b3IvdHJhbnNhY3Rpb24uanMiXSwibmFtZXMiOlsidXVpZHY0IiwicmVxdWlyZSIsIlRyYW5zYWN0aW9uUXVlcmllcyIsInNldElzb2xhdGlvbkxldmVsUXVlcnkiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJwYXJlbnQiLCJnZW5lcmF0ZVRyYW5zYWN0aW9uSWQiLCJzdGFydFRyYW5zYWN0aW9uUXVlcnkiLCJ0cmFuc2FjdGlvbiIsInF1b3RlSWRlbnRpZmllciIsIm5hbWUiLCJkZWZlckNvbnN0cmFpbnRzUXVlcnkiLCJzZXRDb25zdHJhaW50UXVlcnkiLCJzZXREZWZlcnJlZFF1ZXJ5Iiwic2V0SW1tZWRpYXRlUXVlcnkiLCJjb21taXRUcmFuc2FjdGlvblF1ZXJ5Iiwicm9sbGJhY2tUcmFuc2FjdGlvblF1ZXJ5IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsTUFBTSxHQUFHQyxPQUFPLENBQUMsU0FBRCxDQUF0Qjs7QUFFQSxNQUFNQyxrQkFBa0IsR0FBRztBQUN6Qjs7Ozs7Ozs7QUFRQUMsRUFBQUEsc0JBQXNCLENBQUNDLEtBQUQsRUFBUUMsT0FBUixFQUFpQjtBQUNyQyxRQUFJQSxPQUFPLENBQUNDLE1BQVosRUFBb0I7QUFDbEI7QUFDRDs7QUFFRCxXQUFRLG1DQUFrQ0YsS0FBTSxHQUFoRDtBQUNELEdBZndCOztBQWlCekJHLEVBQUFBLHFCQUFxQixHQUFHO0FBQ3RCLFdBQU9QLE1BQU0sRUFBYjtBQUNELEdBbkJ3Qjs7QUFxQnpCOzs7Ozs7O0FBT0FRLEVBQUFBLHFCQUFxQixDQUFDQyxXQUFELEVBQWM7QUFDakMsUUFBSUEsV0FBVyxDQUFDSCxNQUFoQixFQUF3QjtBQUN0QjtBQUNBLGFBQVEsYUFBWSxLQUFLSSxlQUFMLENBQXFCRCxXQUFXLENBQUNFLElBQWpDLEVBQXVDLElBQXZDLENBQTZDLEdBQWpFO0FBQ0Q7O0FBRUQsV0FBTyxvQkFBUDtBQUNELEdBbkN3Qjs7QUFxQ3pCQyxFQUFBQSxxQkFBcUIsR0FBRyxDQUFFLENBckNEOztBQXVDekJDLEVBQUFBLGtCQUFrQixHQUFHLENBQUUsQ0F2Q0U7O0FBd0N6QkMsRUFBQUEsZ0JBQWdCLEdBQUcsQ0FBRSxDQXhDSTs7QUF5Q3pCQyxFQUFBQSxpQkFBaUIsR0FBRyxDQUFFLENBekNHOztBQTJDekI7Ozs7Ozs7QUFPQUMsRUFBQUEsc0JBQXNCLENBQUNQLFdBQUQsRUFBYztBQUNsQyxRQUFJQSxXQUFXLENBQUNILE1BQWhCLEVBQXdCO0FBQ3RCO0FBQ0Q7O0FBRUQsV0FBTyxTQUFQO0FBQ0QsR0F4RHdCOztBQTBEekI7Ozs7Ozs7QUFPQVcsRUFBQUEsd0JBQXdCLENBQUNSLFdBQUQsRUFBYztBQUNwQyxRQUFJQSxXQUFXLENBQUNILE1BQWhCLEVBQXdCO0FBQ3RCO0FBQ0EsYUFBUSx5QkFBd0IsS0FBS0ksZUFBTCxDQUFxQkQsV0FBVyxDQUFDRSxJQUFqQyxFQUF1QyxJQUF2QyxDQUE2QyxHQUE3RTtBQUNEOztBQUVELFdBQU8sV0FBUDtBQUNEOztBQXhFd0IsQ0FBM0I7QUEyRUFPLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQmpCLGtCQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IHV1aWR2NCA9IHJlcXVpcmUoJ3V1aWQvdjQnKTtcclxuXHJcbmNvbnN0IFRyYW5zYWN0aW9uUXVlcmllcyA9IHtcclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBzZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHZhbHVlICAgVGhlIGlzb2xhdGlvbiBsZXZlbC5cclxuICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgIFRoZSBnZW5lcmF0ZWQgc3FsIHF1ZXJ5LlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgc2V0SXNvbGF0aW9uTGV2ZWxRdWVyeSh2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMucGFyZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYFNFVCBUUkFOU0FDVElPTiBJU09MQVRJT04gTEVWRUwgJHt2YWx1ZX07YDtcclxuICB9LFxyXG5cclxuICBnZW5lcmF0ZVRyYW5zYWN0aW9uSWQoKSB7XHJcbiAgICByZXR1cm4gdXVpZHY0KCk7XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgc3RhcnRzIGEgdHJhbnNhY3Rpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgIFRoZSBnZW5lcmF0ZWQgc3FsIHF1ZXJ5LlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgc3RhcnRUcmFuc2FjdGlvblF1ZXJ5KHRyYW5zYWN0aW9uKSB7XHJcbiAgICBpZiAodHJhbnNhY3Rpb24ucGFyZW50KSB7XHJcbiAgICAgIC8vIGZvcmNlIHF1b3Rpbmcgb2Ygc2F2ZXBvaW50IGlkZW50aWZpZXJzIGZvciBwb3N0Z3Jlc1xyXG4gICAgICByZXR1cm4gYFNBVkVQT0lOVCAke3RoaXMucXVvdGVJZGVudGlmaWVyKHRyYW5zYWN0aW9uLm5hbWUsIHRydWUpfTtgO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnU1RBUlQgVFJBTlNBQ1RJT047JztcclxuICB9LFxyXG5cclxuICBkZWZlckNvbnN0cmFpbnRzUXVlcnkoKSB7fSxcclxuXHJcbiAgc2V0Q29uc3RyYWludFF1ZXJ5KCkge30sXHJcbiAgc2V0RGVmZXJyZWRRdWVyeSgpIHt9LFxyXG4gIHNldEltbWVkaWF0ZVF1ZXJ5KCkge30sXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBxdWVyeSB0aGF0IGNvbW1pdHMgYSB0cmFuc2FjdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSAge1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvbiBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICAgICAgVGhlIGdlbmVyYXRlZCBzcWwgcXVlcnkuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBjb21taXRUcmFuc2FjdGlvblF1ZXJ5KHRyYW5zYWN0aW9uKSB7XHJcbiAgICBpZiAodHJhbnNhY3Rpb24ucGFyZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJ0NPTU1JVDsnO1xyXG4gIH0sXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHJvbGxiYWNrcyBhIHRyYW5zYWN0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7VHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gICAgICAgICBUaGUgZ2VuZXJhdGVkIHNxbCBxdWVyeS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHJvbGxiYWNrVHJhbnNhY3Rpb25RdWVyeSh0cmFuc2FjdGlvbikge1xyXG4gICAgaWYgKHRyYW5zYWN0aW9uLnBhcmVudCkge1xyXG4gICAgICAvLyBmb3JjZSBxdW90aW5nIG9mIHNhdmVwb2ludCBpZGVudGlmaWVycyBmb3IgcG9zdGdyZXNcclxuICAgICAgcmV0dXJuIGBST0xMQkFDSyBUTyBTQVZFUE9JTlQgJHt0aGlzLnF1b3RlSWRlbnRpZmllcih0cmFuc2FjdGlvbi5uYW1lLCB0cnVlKX07YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJ1JPTExCQUNLOyc7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2FjdGlvblF1ZXJpZXM7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9xdWVyeS1nZW5lcmF0b3IvdHJhbnNhY3Rpb24uanMiXSwibmFtZXMiOlsidXVpZHY0IiwicmVxdWlyZSIsIlRyYW5zYWN0aW9uUXVlcmllcyIsInNldElzb2xhdGlvbkxldmVsUXVlcnkiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJwYXJlbnQiLCJnZW5lcmF0ZVRyYW5zYWN0aW9uSWQiLCJzdGFydFRyYW5zYWN0aW9uUXVlcnkiLCJ0cmFuc2FjdGlvbiIsInF1b3RlSWRlbnRpZmllciIsIm5hbWUiLCJkZWZlckNvbnN0cmFpbnRzUXVlcnkiLCJzZXRDb25zdHJhaW50UXVlcnkiLCJzZXREZWZlcnJlZFF1ZXJ5Iiwic2V0SW1tZWRpYXRlUXVlcnkiLCJjb21taXRUcmFuc2FjdGlvblF1ZXJ5Iiwicm9sbGJhY2tUcmFuc2FjdGlvblF1ZXJ5IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsTUFBTSxHQUFHQyxPQUFPLENBQUMsU0FBRCxDQUF0Qjs7QUFFQSxNQUFNQyxrQkFBa0IsR0FBRztBQUN6QjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0VDLEVBQUFBLHNCQUFzQixDQUFDQyxLQUFELEVBQVFDLE9BQVIsRUFBaUI7QUFDckMsUUFBSUEsT0FBTyxDQUFDQyxNQUFaLEVBQW9CO0FBQ2xCO0FBQ0Q7O0FBRUQsV0FBUSxtQ0FBa0NGLEtBQU0sR0FBaEQ7QUFDRCxHQWZ3Qjs7QUFpQnpCRyxFQUFBQSxxQkFBcUIsR0FBRztBQUN0QixXQUFPUCxNQUFNLEVBQWI7QUFDRCxHQW5Cd0I7O0FBcUJ6QjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFUSxFQUFBQSxxQkFBcUIsQ0FBQ0MsV0FBRCxFQUFjO0FBQ2pDLFFBQUlBLFdBQVcsQ0FBQ0gsTUFBaEIsRUFBd0I7QUFDdEI7QUFDQSxhQUFRLGFBQVksS0FBS0ksZUFBTCxDQUFxQkQsV0FBVyxDQUFDRSxJQUFqQyxFQUF1QyxJQUF2QyxDQUE2QyxHQUFqRTtBQUNEOztBQUVELFdBQU8sb0JBQVA7QUFDRCxHQW5Dd0I7O0FBcUN6QkMsRUFBQUEscUJBQXFCLEdBQUcsQ0FBRSxDQXJDRDs7QUF1Q3pCQyxFQUFBQSxrQkFBa0IsR0FBRyxDQUFFLENBdkNFOztBQXdDekJDLEVBQUFBLGdCQUFnQixHQUFHLENBQUUsQ0F4Q0k7O0FBeUN6QkMsRUFBQUEsaUJBQWlCLEdBQUcsQ0FBRSxDQXpDRzs7QUEyQ3pCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0VDLEVBQUFBLHNCQUFzQixDQUFDUCxXQUFELEVBQWM7QUFDbEMsUUFBSUEsV0FBVyxDQUFDSCxNQUFoQixFQUF3QjtBQUN0QjtBQUNEOztBQUVELFdBQU8sU0FBUDtBQUNELEdBeER3Qjs7QUEwRHpCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0VXLEVBQUFBLHdCQUF3QixDQUFDUixXQUFELEVBQWM7QUFDcEMsUUFBSUEsV0FBVyxDQUFDSCxNQUFoQixFQUF3QjtBQUN0QjtBQUNBLGFBQVEseUJBQXdCLEtBQUtJLGVBQUwsQ0FBcUJELFdBQVcsQ0FBQ0UsSUFBakMsRUFBdUMsSUFBdkMsQ0FBNkMsR0FBN0U7QUFDRDs7QUFFRCxXQUFPLFdBQVA7QUFDRDs7QUF4RXdCLENBQTNCO0FBMkVBTyxNQUFNLENBQUNDLE9BQVAsR0FBaUJqQixrQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHV1aWR2NCA9IHJlcXVpcmUoJ3V1aWQvdjQnKTtcblxuY29uc3QgVHJhbnNhY3Rpb25RdWVyaWVzID0ge1xuICAvKipcbiAgICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgc2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHZhbHVlICAgVGhlIGlzb2xhdGlvbiBsZXZlbC5cbiAgICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICAgICAgVGhlIGdlbmVyYXRlZCBzcWwgcXVlcnkuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXRJc29sYXRpb25MZXZlbFF1ZXJ5KHZhbHVlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMucGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGBTRVQgVFJBTlNBQ1RJT04gSVNPTEFUSU9OIExFVkVMICR7dmFsdWV9O2A7XG4gIH0sXG5cbiAgZ2VuZXJhdGVUcmFuc2FjdGlvbklkKCkge1xuICAgIHJldHVybiB1dWlkdjQoKTtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgc3RhcnRzIGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSAge1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgIFRoZSBnZW5lcmF0ZWQgc3FsIHF1ZXJ5LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhcnRUcmFuc2FjdGlvblF1ZXJ5KHRyYW5zYWN0aW9uKSB7XG4gICAgaWYgKHRyYW5zYWN0aW9uLnBhcmVudCkge1xuICAgICAgLy8gZm9yY2UgcXVvdGluZyBvZiBzYXZlcG9pbnQgaWRlbnRpZmllcnMgZm9yIHBvc3RncmVzXG4gICAgICByZXR1cm4gYFNBVkVQT0lOVCAke3RoaXMucXVvdGVJZGVudGlmaWVyKHRyYW5zYWN0aW9uLm5hbWUsIHRydWUpfTtgO1xuICAgIH1cblxuICAgIHJldHVybiAnU1RBUlQgVFJBTlNBQ1RJT047JztcbiAgfSxcblxuICBkZWZlckNvbnN0cmFpbnRzUXVlcnkoKSB7fSxcblxuICBzZXRDb25zdHJhaW50UXVlcnkoKSB7fSxcbiAgc2V0RGVmZXJyZWRRdWVyeSgpIHt9LFxuICBzZXRJbW1lZGlhdGVRdWVyeSgpIHt9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBjb21taXRzIGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSAge1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvbiBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgIFRoZSBnZW5lcmF0ZWQgc3FsIHF1ZXJ5LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29tbWl0VHJhbnNhY3Rpb25RdWVyeSh0cmFuc2FjdGlvbikge1xuICAgIGlmICh0cmFuc2FjdGlvbi5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gJ0NPTU1JVDsnO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCByb2xsYmFja3MgYSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtICB7VHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICAgICAgVGhlIGdlbmVyYXRlZCBzcWwgcXVlcnkuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByb2xsYmFja1RyYW5zYWN0aW9uUXVlcnkodHJhbnNhY3Rpb24pIHtcbiAgICBpZiAodHJhbnNhY3Rpb24ucGFyZW50KSB7XG4gICAgICAvLyBmb3JjZSBxdW90aW5nIG9mIHNhdmVwb2ludCBpZGVudGlmaWVycyBmb3IgcG9zdGdyZXNcbiAgICAgIHJldHVybiBgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UICR7dGhpcy5xdW90ZUlkZW50aWZpZXIodHJhbnNhY3Rpb24ubmFtZSwgdHJ1ZSl9O2A7XG4gICAgfVxuXG4gICAgcmV0dXJuICdST0xMQkFDSzsnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zYWN0aW9uUXVlcmllcztcbiJdfQ== \ No newline at end of file diff --git a/dist/dialects/abstract/query.js b/dist/dialects/abstract/query.js index 32735c3..f3b046c 100644 --- a/dist/dialects/abstract/query.js +++ b/dist/dialects/abstract/query.js @@ -18,9 +18,7 @@ const deprecations = require('../../utils/deprecations'); const uuid = require('uuid/v4'); -let AbstractQuery = -/*#__PURE__*/ -function () { +let AbstractQuery = /*#__PURE__*/function () { function AbstractQuery(connection, sequelize, options) { _classCallCheck(this, AbstractQuery); @@ -819,4 +817,4 @@ function () { module.exports = AbstractQuery; module.exports.AbstractQuery = AbstractQuery; module.exports.default = AbstractQuery; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9xdWVyeS5qcyJdLCJuYW1lcyI6WyJfIiwicmVxdWlyZSIsIlNxbFN0cmluZyIsIlF1ZXJ5VHlwZXMiLCJEb3QiLCJkZXByZWNhdGlvbnMiLCJ1dWlkIiwiQWJzdHJhY3RRdWVyeSIsImNvbm5lY3Rpb24iLCJzZXF1ZWxpemUiLCJvcHRpb25zIiwiaW5zdGFuY2UiLCJtb2RlbCIsIk9iamVjdCIsImFzc2lnbiIsInBsYWluIiwicmF3IiwibG9nZ2luZyIsImNvbnNvbGUiLCJsb2ciLCJjaGVja0xvZ2dpbmdPcHRpb24iLCJFcnJvciIsIm5vVHJ1ZUxvZ2dpbmciLCJmaWVsZCIsIm1lc3NhZ2UiLCJrZXkiLCJrZXlzIiwidW5pcXVlS2V5cyIsImZpZWxkcyIsImluY2x1ZGVzIiwicmVwbGFjZSIsIm1zZyIsInR5cGUiLCJSQVciLCJWRVJTSU9OIiwiVVBTRVJUIiwicmVzdWx0cyIsIm1ldGFEYXRhIiwicmVzdWx0IiwiSU5TRVJUIiwic3FsIiwidG9Mb3dlckNhc2UiLCJzdGFydHNXaXRoIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUiLCJpZCIsIlNIT1dUQUJMRVMiLCJmbGF0dGVuIiwibWFwIiwicmVzdWx0U2V0IiwidmFsdWVzIiwiU0hPV0lOREVYRVMiLCJTSE9XQ09OU1RSQUlOVFMiLCJERVNDUklCRSIsIlNFTEVDVCIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiRk9SRUlHTktFWVMiLCJVUERBVEUiLCJmaWVsZE1hcCIsInJlZHVjZSIsIm5hbWUiLCJ1bmRlZmluZWQiLCJvIiwibmVzdCIsInRyYW5zZm9ybSIsImhhc0pvaW4iLCJfZ3JvdXBKb2luRGF0YSIsImluY2x1ZGVNYXAiLCJpbmNsdWRlTmFtZXMiLCJjaGVja0V4aXN0aW5nIiwiaGFzTXVsdGlBc3NvY2lhdGlvbiIsImJ1bGtCdWlsZCIsImlzTmV3UmVjb3JkIiwiaW5jbHVkZSIsImluY2x1ZGVWYWxpZGF0ZWQiLCJhdHRyaWJ1dGVzIiwib3JpZ2luYWxBdHRyaWJ1dGVzIiwibGVuZ3RoIiwiZGVidWdDb250ZXh0IiwicGFyYW1ldGVycyIsImJlbmNobWFyayIsImxvZ1F1ZXJ5UGFyYW1ldGVycyIsInN0YXJ0VGltZSIsIkRhdGUiLCJub3ciLCJsb2dQYXJhbWV0ZXIiLCJkZWxpbWl0ZXIiLCJlbmRzV2l0aCIsInBhcmFtU3RyIiwiQXJyYXkiLCJpc0FycmF5IiwicCIsIkpTT04iLCJzdHJpbmdpZnkiLCJqb2luIiwiZm10IiwiYWZ0ZXJNc2ciLCJkaWFsZWN0IiwicmVwbGFjZW1lbnRGdW5jIiwic2tpcFZhbHVlUmVwbGFjZSIsIm1hdGNoIiwidGltZVpvbmUiLCJlc2NhcGUiLCJvcmlnUmVwbGFjZW1lbnRGdW5jIiwibGlzdCIsInNraXBVbmVzY2FwZSIsInJlcGxWYWwiLCJyb3dzIiwiaW5jbHVkZU9wdGlvbnMiLCJpIiwiJGkiLCIkbGVuZ3RoIiwicm93c0kiLCJyb3ciLCJyb3dzTGVuZ3RoIiwia2V5SSIsImtleUxlbmd0aCIsInByZXZLZXkiLCJ0b3BWYWx1ZXMiLCJ0b3BFeGlzdHMiLCJpdGVtSGFzaCIsInBhcmVudEhhc2giLCJ0b3BIYXNoIiwicmVzdWx0TWFwIiwiJGtleVByZWZpeCIsIiRrZXlQcmVmaXhTdHJpbmciLCIkcHJldktleVByZWZpeFN0cmluZyIsIiRwcmV2S2V5UHJlZml4IiwiJGxhc3RLZXlQcmVmaXgiLCIkY3VycmVudCIsIiRwYXJlbnQiLCJwcmV2aW91c1BpZWNlIiwiYnVpbGRJbmNsdWRlTWFwIiwicGllY2UiLCJrZXlQcmVmaXhTdHJpbmdNZW1vIiwia2V5UHJlZml4U3RyaW5nIiwibWVtbyIsInN1YnN0ciIsImxhc3RJbmRleE9mIiwicmVtb3ZlS2V5UHJlZml4TWVtbyIsInJlbW92ZUtleVByZWZpeCIsImluZGV4Iiwia2V5UHJlZml4TWVtbyIsImtleVByZWZpeCIsInByZWZpeFN0cmluZyIsInNwbGl0IiwibGFzdEtleVByZWZpeE1lbW8iLCJsYXN0S2V5UHJlZml4IiwicHJlZml4IiwiZ2V0VW5pcXVlS2V5QXR0cmlidXRlcyIsInVuaXF1ZUtleUF0dHJpYnV0ZXMiLCJjaGFpbiIsImZpbmRLZXkiLCJjaHIiLCJ2YWx1ZSIsIm9iaiIsIkJ1ZmZlciIsInRvU3RyaW5nIiwicHJpbWFyeUtleUF0dHJpYnV0ZXMiLCJpc0VtcHR5IiwiZm9yRWFjaCIsImFzc29jaWF0aW9uIiwiaXNTaW5nbGVBc3NvY2lhdGlvbiIsInB1c2giLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUEsTUFBTUEsQ0FBQyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNQyxTQUFTLEdBQUdELE9BQU8sQ0FBQyxrQkFBRCxDQUF6Qjs7QUFDQSxNQUFNRSxVQUFVLEdBQUdGLE9BQU8sQ0FBQyxtQkFBRCxDQUExQjs7QUFDQSxNQUFNRyxHQUFHLEdBQUdILE9BQU8sQ0FBQyxRQUFELENBQW5COztBQUNBLE1BQU1JLFlBQVksR0FBR0osT0FBTyxDQUFDLDBCQUFELENBQTVCOztBQUNBLE1BQU1LLElBQUksR0FBR0wsT0FBTyxDQUFDLFNBQUQsQ0FBcEI7O0lBRU1NLGE7OztBQUVKLHlCQUFZQyxVQUFaLEVBQXdCQyxTQUF4QixFQUFtQ0MsT0FBbkMsRUFBNEM7QUFBQTs7QUFDMUMsU0FBS0osSUFBTCxHQUFZQSxJQUFJLEVBQWhCO0FBQ0EsU0FBS0UsVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxTQUFLRyxRQUFMLEdBQWdCRCxPQUFPLENBQUNDLFFBQXhCO0FBQ0EsU0FBS0MsS0FBTCxHQUFhRixPQUFPLENBQUNFLEtBQXJCO0FBQ0EsU0FBS0gsU0FBTCxHQUFpQkEsU0FBakI7QUFDQSxTQUFLQyxPQUFMLEdBQWVHLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQzNCQyxNQUFBQSxLQUFLLEVBQUUsS0FEb0I7QUFFM0JDLE1BQUFBLEdBQUcsRUFBRSxLQUZz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QixhQUFhLENBQUM5QixPQUFELENBQTlCOztBQUVBLGdCQUFJbEQsVUFBVSxDQUFDa0QsT0FBRCxDQUFWLENBQW9CNEMsV0FBcEIsQ0FBZ0NDLG1CQUFwQyxFQUF5RDtBQUN2RCxrQkFBSWhDLE9BQUosRUFBYTtBQUNYQSxnQkFBQUEsT0FBTyxDQUFDRixjQUFELENBQVAsR0FBMEJMLFNBQVMsQ0FBQ0gsUUFBRCxDQUFULEdBQXNCdkUsTUFBaEQ7QUFDRDtBQUNGLGFBSkQsTUFJTztBQUNMLGtCQUFJLENBQUNpRixPQUFPLENBQUNGLGNBQUQsQ0FBWixFQUE4QjtBQUM1QkUsZ0JBQUFBLE9BQU8sQ0FBQ0YsY0FBRCxDQUFQLEdBQTBCLEVBQTFCO0FBQ0Q7O0FBQ0RFLGNBQUFBLE9BQU8sQ0FBQ0YsY0FBRCxDQUFQLENBQXdCbUMsSUFBeEIsQ0FBNkJ4QyxTQUFTLENBQUNILFFBQUQsQ0FBVCxHQUFzQnZFLE1BQW5EO0FBQ0Q7QUFDRjs7QUFDRCxjQUFJLENBQUNzRSxTQUFMLEVBQWdCO0FBQ2R2RixZQUFBQSxPQUFPLENBQUNtSSxJQUFSLENBQWE3QyxTQUFiO0FBQ0Q7QUFDRixTQS9ERCxNQStETztBQUNMdEYsVUFBQUEsT0FBTyxDQUFDZ0YsS0FBRCxDQUFQLEdBQWlCTSxTQUFqQjtBQUNEO0FBQ0Y7O0FBRUQsYUFBT3RGLE9BQVA7QUFDRDs7Ozs7O0FBR0hvSSxNQUFNLENBQUNDLE9BQVAsR0FBaUJsSyxhQUFqQjtBQUNBaUssTUFBTSxDQUFDQyxPQUFQLENBQWVsSyxhQUFmLEdBQStCQSxhQUEvQjtBQUNBaUssTUFBTSxDQUFDQyxPQUFQLENBQWVDLE9BQWYsR0FBeUJuSyxhQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgU3FsU3RyaW5nID0gcmVxdWlyZSgnLi4vLi4vc3FsLXN0cmluZycpO1xyXG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZSgnLi4vLi4vcXVlcnktdHlwZXMnKTtcclxuY29uc3QgRG90ID0gcmVxdWlyZSgnZG90dGllJyk7XHJcbmNvbnN0IGRlcHJlY2F0aW9ucyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2RlcHJlY2F0aW9ucycpO1xyXG5jb25zdCB1dWlkID0gcmVxdWlyZSgndXVpZC92NCcpO1xyXG5cclxuY2xhc3MgQWJzdHJhY3RRdWVyeSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb24sIHNlcXVlbGl6ZSwgb3B0aW9ucykge1xyXG4gICAgdGhpcy51dWlkID0gdXVpZCgpO1xyXG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcclxuICAgIHRoaXMuaW5zdGFuY2UgPSBvcHRpb25zLmluc3RhbmNlO1xyXG4gICAgdGhpcy5tb2RlbCA9IG9wdGlvbnMubW9kZWw7XHJcbiAgICB0aGlzLnNlcXVlbGl6ZSA9IHNlcXVlbGl6ZTtcclxuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICBwbGFpbjogZmFsc2UsXHJcbiAgICAgIHJhdzogZmFsc2UsXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgIGxvZ2dpbmc6IGNvbnNvbGUubG9nXHJcbiAgICB9LCBvcHRpb25zIHx8IHt9KTtcclxuICAgIHRoaXMuY2hlY2tMb2dnaW5nT3B0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZXdyaXRlIHF1ZXJ5IHdpdGggcGFyYW1ldGVyc1xyXG4gICAqXHJcbiAgICogRXhhbXBsZXM6XHJcbiAgICpcclxuICAgKiAgIHF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKCdzZWxlY3QgJDEgYXMgZm9vJywgWydmb292YWwnXSk7XHJcbiAgICpcclxuICAgKiAgIHF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKCdzZWxlY3QgJGZvbyBhcyBmb28nLCB7IGZvbzogJ2Zvb3ZhbCcgfSk7XHJcbiAgICpcclxuICAgKiBPcHRpb25zXHJcbiAgICogICBza2lwVW5lc2NhcGU6IGJvb2wsIHNraXAgdW5lc2NhcGluZyAkJFxyXG4gICAqICAgc2tpcFZhbHVlUmVwbGFjZTogYm9vbCwgZG8gbm90IHJlcGxhY2UgKGJ1dCBkbyB1bmVzY2FwZSAkJCkuIENoZWNrIGNvcnJlY3Qgc3ludGF4IGFuZCBpZiBhbGwgdmFsdWVzIGFyZSBhdmFpbGFibGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcclxuICAgKiBAcGFyYW0ge09iamVjdHxBcnJheX0gdmFsdWVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpYWxlY3RcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVwbGFjZW1lbnRGdW5jXVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHN0YXRpYyBmb3JtYXRCaW5kUGFyYW1ldGVycyhzcWwsIHZhbHVlcywgZGlhbGVjdCwgcmVwbGFjZW1lbnRGdW5jLCBvcHRpb25zKSB7XHJcbiAgICBpZiAoIXZhbHVlcykge1xyXG4gICAgICByZXR1cm4gW3NxbCwgW11dO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgaWYgKHR5cGVvZiByZXBsYWNlbWVudEZ1bmMgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgb3B0aW9ucyA9IHJlcGxhY2VtZW50RnVuYyB8fCB7fTtcclxuICAgICAgcmVwbGFjZW1lbnRGdW5jID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcmVwbGFjZW1lbnRGdW5jKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLnNraXBWYWx1ZVJlcGxhY2UpIHtcclxuICAgICAgICByZXBsYWNlbWVudEZ1bmMgPSAobWF0Y2gsIGtleSwgdmFsdWVzKSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWVzW2tleV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVwbGFjZW1lbnRGdW5jID0gKG1hdGNoLCBrZXksIHZhbHVlcywgdGltZVpvbmUsIGRpYWxlY3QpID0+IHtcclxuICAgICAgICAgIGlmICh2YWx1ZXNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTcWxTdHJpbmcuZXNjYXBlKHZhbHVlc1trZXldLCB0aW1lWm9uZSwgZGlhbGVjdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5za2lwVmFsdWVSZXBsYWNlKSB7XHJcbiAgICAgIGNvbnN0IG9yaWdSZXBsYWNlbWVudEZ1bmMgPSByZXBsYWNlbWVudEZ1bmM7XHJcbiAgICAgIHJlcGxhY2VtZW50RnVuYyA9IChtYXRjaCwga2V5LCB2YWx1ZXMsIHRpbWVab25lLCBkaWFsZWN0LCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgaWYgKG9yaWdSZXBsYWNlbWVudEZ1bmMobWF0Y2gsIGtleSwgdmFsdWVzLCB0aW1lWm9uZSwgZGlhbGVjdCwgb3B0aW9ucykgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRpbWVab25lID0gbnVsbDtcclxuICAgIGNvbnN0IGxpc3QgPSBBcnJheS5pc0FycmF5KHZhbHVlcyk7XHJcblxyXG4gICAgc3FsID0gc3FsLnJlcGxhY2UoL1xcJChcXCR8XFx3KykvZywgKG1hdGNoLCBrZXkpID0+IHtcclxuICAgICAgaWYgKCckJyA9PT0ga2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2tpcFVuZXNjYXBlID8gbWF0Y2ggOiBrZXk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCByZXBsVmFsO1xyXG4gICAgICBpZiAobGlzdCkge1xyXG4gICAgICAgIGlmIChrZXkubWF0Y2goL15bMS05XVxcZCokLykpIHtcclxuICAgICAgICAgIGtleSA9IGtleSAtIDE7XHJcbiAgICAgICAgICByZXBsVmFsID0gcmVwbGFjZW1lbnRGdW5jKG1hdGNoLCBrZXksIHZhbHVlcywgdGltZVpvbmUsIGRpYWxlY3QsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICgha2V5Lm1hdGNoKC9eXFxkKiQvKSkge1xyXG4gICAgICAgIHJlcGxWYWwgPSByZXBsYWNlbWVudEZ1bmMobWF0Y2gsIGtleSwgdmFsdWVzLCB0aW1lWm9uZSwgZGlhbGVjdCwgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlcGxWYWwgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTmFtZWQgYmluZCBwYXJhbWV0ZXIgXCIke21hdGNofVwiIGhhcyBubyB2YWx1ZSBpbiB0aGUgZ2l2ZW4gb2JqZWN0LmApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXBsVmFsO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gW3NxbCwgW11dO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZSB0aGUgcGFzc2VkIHNxbCBxdWVyeS5cclxuICAgKlxyXG4gICAqIEV4YW1wbGVzOlxyXG4gICAqXHJcbiAgICogICAgIHF1ZXJ5LnJ1bignU0VMRUNUIDEnKVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBydW4oKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBydW4gbWV0aG9kIHdhc25cXCd0IG92ZXJ3cml0dGVuIScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgdGhlIGxvZ2dpbmcgb3B0aW9uIG9mIHRoZSBpbnN0YW5jZSBhbmQgcHJpbnQgZGVwcmVjYXRpb24gd2FybmluZ3MuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGNoZWNrTG9nZ2luZ09wdGlvbigpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMubG9nZ2luZyA9PT0gdHJ1ZSkge1xyXG4gICAgICBkZXByZWNhdGlvbnMubm9UcnVlTG9nZ2luZygpO1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgICB0aGlzLm9wdGlvbnMubG9nZ2luZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGluc2VydCBxdWVyeSwgd2hpY2ggY29udGFpbnMgdGhlIGp1c3QgaW5zZXJ0ZWQgaWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZmllbGQgbmFtZS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGdldEluc2VydElkRmllbGQoKSB7XHJcbiAgICByZXR1cm4gJ2luc2VydElkJztcclxuICB9XHJcblxyXG4gIGdldFVuaXF1ZUNvbnN0cmFpbnRFcnJvck1lc3NhZ2UoZmllbGQpIHtcclxuICAgIGxldCBtZXNzYWdlID0gZmllbGQgPyBgJHtmaWVsZH0gbXVzdCBiZSB1bmlxdWVgIDogJ011c3QgYmUgdW5pcXVlJztcclxuXHJcbiAgICBpZiAoZmllbGQgJiYgdGhpcy5tb2RlbCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLm1vZGVsLnVuaXF1ZUtleXMpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwudW5pcXVlS2V5c1trZXldLmZpZWxkcy5pbmNsdWRlcyhmaWVsZC5yZXBsYWNlKC9cIi9nLCAnJykpKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbC51bmlxdWVLZXlzW2tleV0ubXNnKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1vZGVsLnVuaXF1ZUtleXNba2V5XS5tc2c7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVzc2FnZTtcclxuICB9XHJcblxyXG4gIGlzUmF3UXVlcnkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuUkFXO1xyXG4gIH1cclxuXHJcbiAgaXNWZXJzaW9uUXVlcnkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuVkVSU0lPTjtcclxuICB9XHJcblxyXG4gIGlzVXBzZXJ0UXVlcnkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuVVBTRVJUO1xyXG4gIH1cclxuXHJcbiAgaXNJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy50eXBlID09PSBRdWVyeVR5cGVzLklOU0VSVCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpcyBpbnNlcnQgcXVlcnkgaWYgc3FsIGNvbnRhaW5zIGluc2VydCBpbnRvXHJcbiAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdpbnNlcnQgaW50bycpO1xyXG5cclxuICAgIC8vIGlzIGluc2VydCBxdWVyeSBpZiBubyByZXN1bHRzIGFyZSBwYXNzZWQgb3IgaWYgdGhlIHJlc3VsdCBoYXMgdGhlIGluc2VydGVkIGlkXHJcbiAgICByZXN1bHQgPSByZXN1bHQgJiYgKCFyZXN1bHRzIHx8IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHRzLCB0aGlzLmdldEluc2VydElkRmllbGQoKSkpO1xyXG5cclxuICAgIC8vIGlzIGluc2VydCBxdWVyeSBpZiBubyBtZXRhZGF0YSBhcmUgcGFzc2VkIG9yIGlmIHRoZSBtZXRhZGF0YSBoYXMgdGhlIGluc2VydGVkIGlkXHJcbiAgICByZXN1bHQgPSByZXN1bHQgJiYgKCFtZXRhRGF0YSB8fCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWV0YURhdGEsIHRoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpKSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGhhbmRsZUluc2VydFF1ZXJ5KHJlc3VsdHMsIG1ldGFEYXRhKSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICAvLyBhZGQgdGhlIGluc2VydGVkIHJvdyBpZCB0byB0aGUgaW5zdGFuY2VcclxuICAgICAgY29uc3QgYXV0b0luY3JlbWVudEF0dHJpYnV0ZSA9IHRoaXMubW9kZWwuYXV0b0luY3JlbWVudEF0dHJpYnV0ZTtcclxuICAgICAgbGV0IGlkID0gbnVsbDtcclxuXHJcbiAgICAgIGlkID0gaWQgfHwgcmVzdWx0cyAmJiByZXN1bHRzW3RoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpXTtcclxuICAgICAgaWQgPSBpZCB8fCBtZXRhRGF0YSAmJiBtZXRhRGF0YVt0aGlzLmdldEluc2VydElkRmllbGQoKV07XHJcblxyXG4gICAgICB0aGlzLmluc3RhbmNlW2F1dG9JbmNyZW1lbnRBdHRyaWJ1dGVdID0gaWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1Nob3dUYWJsZXNRdWVyeSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5TSE9XVEFCTEVTO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2hvd1RhYmxlc1F1ZXJ5KHJlc3VsdHMpIHtcclxuICAgIHJldHVybiBfLmZsYXR0ZW4ocmVzdWx0cy5tYXAocmVzdWx0U2V0ID0+IF8udmFsdWVzKHJlc3VsdFNldCkpKTtcclxuICB9XHJcblxyXG4gIGlzU2hvd0luZGV4ZXNRdWVyeSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5TSE9XSU5ERVhFUztcclxuICB9XHJcblxyXG4gIGlzU2hvd0NvbnN0cmFpbnRzUXVlcnkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuU0hPV0NPTlNUUkFJTlRTO1xyXG4gIH1cclxuXHJcbiAgaXNEZXNjcmliZVF1ZXJ5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50eXBlID09PSBRdWVyeVR5cGVzLkRFU0NSSUJFO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RRdWVyeSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5TRUxFQ1Q7XHJcbiAgfVxyXG5cclxuICBpc0J1bGtVcGRhdGVRdWVyeSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5CVUxLVVBEQVRFO1xyXG4gIH1cclxuXHJcbiAgaXNCdWxrRGVsZXRlUXVlcnkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuQlVMS0RFTEVURTtcclxuICB9XHJcblxyXG4gIGlzRm9yZWlnbktleXNRdWVyeSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5GT1JFSUdOS0VZUztcclxuICB9XHJcblxyXG4gIGlzVXBkYXRlUXVlcnkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuVVBEQVRFO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VsZWN0UXVlcnkocmVzdWx0cykge1xyXG4gICAgbGV0IHJlc3VsdCA9IG51bGw7XHJcblxyXG4gICAgLy8gTWFwIHJhdyBmaWVsZHMgdG8gbmFtZXMgaWYgYSBtYXBwaW5nIGlzIHByb3ZpZGVkXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmZpZWxkTWFwKSB7XHJcbiAgICAgIGNvbnN0IGZpZWxkTWFwID0gdGhpcy5vcHRpb25zLmZpZWxkTWFwO1xyXG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5tYXAocmVzdWx0ID0+IF8ucmVkdWNlKGZpZWxkTWFwLCAocmVzdWx0LCBuYW1lLCBmaWVsZCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHRbZmllbGRdICE9PSB1bmRlZmluZWQgJiYgbmFtZSAhPT0gZmllbGQpIHtcclxuICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHJlc3VsdFtmaWVsZF07XHJcbiAgICAgICAgICBkZWxldGUgcmVzdWx0W2ZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSwgcmVzdWx0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmF3IHF1ZXJpZXNcclxuICAgIGlmICh0aGlzLm9wdGlvbnMucmF3KSB7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdHMubWFwKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgbGV0IG8gPSB7fTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xyXG4gICAgICAgICAgICBvW2tleV0gPSByZXN1bHRba2V5XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubmVzdCkge1xyXG4gICAgICAgICAgbyA9IERvdC50cmFuc2Zvcm0obyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbztcclxuICAgICAgfSk7XHJcbiAgICAvLyBRdWVyaWVzIHdpdGggaW5jbHVkZVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuaGFzSm9pbiA9PT0gdHJ1ZSkge1xyXG4gICAgICByZXN1bHRzID0gQWJzdHJhY3RRdWVyeS5fZ3JvdXBKb2luRGF0YShyZXN1bHRzLCB7XHJcbiAgICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXHJcbiAgICAgICAgaW5jbHVkZU1hcDogdGhpcy5vcHRpb25zLmluY2x1ZGVNYXAsXHJcbiAgICAgICAgaW5jbHVkZU5hbWVzOiB0aGlzLm9wdGlvbnMuaW5jbHVkZU5hbWVzXHJcbiAgICAgIH0sIHtcclxuICAgICAgICBjaGVja0V4aXN0aW5nOiB0aGlzLm9wdGlvbnMuaGFzTXVsdGlBc3NvY2lhdGlvblxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJlc3VsdCA9IHRoaXMubW9kZWwuYnVsa0J1aWxkKHJlc3VsdHMsIHtcclxuICAgICAgICBpc05ld1JlY29yZDogZmFsc2UsXHJcbiAgICAgICAgaW5jbHVkZTogdGhpcy5vcHRpb25zLmluY2x1ZGUsXHJcbiAgICAgICAgaW5jbHVkZU5hbWVzOiB0aGlzLm9wdGlvbnMuaW5jbHVkZU5hbWVzLFxyXG4gICAgICAgIGluY2x1ZGVNYXA6IHRoaXMub3B0aW9ucy5pbmNsdWRlTWFwLFxyXG4gICAgICAgIGluY2x1ZGVWYWxpZGF0ZWQ6IHRydWUsXHJcbiAgICAgICAgYXR0cmlidXRlczogdGhpcy5vcHRpb25zLm9yaWdpbmFsQXR0cmlidXRlcyB8fCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlcyxcclxuICAgICAgICByYXc6IHRydWVcclxuICAgICAgfSk7XHJcbiAgICAvLyBSZWd1bGFyIHF1ZXJpZXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IHRoaXMubW9kZWwuYnVsa0J1aWxkKHJlc3VsdHMsIHtcclxuICAgICAgICBpc05ld1JlY29yZDogZmFsc2UsXHJcbiAgICAgICAgcmF3OiB0cnVlLFxyXG4gICAgICAgIGF0dHJpYnV0ZXM6IHRoaXMub3B0aW9ucy5vcmlnaW5hbEF0dHJpYnV0ZXMgfHwgdGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmV0dXJuIHRoZSBmaXJzdCByZWFsIG1vZGVsIGluc3RhbmNlIGlmIG9wdGlvbnMucGxhaW4gaXMgc2V0IChlLmcuIE1vZGVsLmZpbmQpXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWluKSB7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5sZW5ndGggPT09IDAgPyBudWxsIDogcmVzdWx0WzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGlzU2hvd09yRGVzY3JpYmVRdWVyeSgpIHtcclxuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdzaG93Jyk7XHJcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdkZXNjcmliZScpO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBpc0NhbGxRdWVyeSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNxbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2NhbGwnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBkZWJ1Z0NvbnRleHRcclxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gcGFyYW1ldGVyc1xyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gY2FsbCBhZnRlciB0aGUgcXVlcnkgd2FzIGNvbXBsZXRlZC5cclxuICAgKi9cclxuICBfbG9nUXVlcnkoc3FsLCBkZWJ1Z0NvbnRleHQsIHBhcmFtZXRlcnMpIHtcclxuICAgIGNvbnN0IHsgY29ubmVjdGlvbiwgb3B0aW9ucyB9ID0gdGhpcztcclxuICAgIGNvbnN0IGJlbmNobWFyayA9IHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuYmVuY2htYXJrIHx8IG9wdGlvbnMuYmVuY2htYXJrO1xyXG4gICAgY29uc3QgbG9nUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5sb2dRdWVyeVBhcmFtZXRlcnMgfHwgb3B0aW9ucy5sb2dRdWVyeVBhcmFtZXRlcnM7XHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgbGV0IGxvZ1BhcmFtZXRlciA9ICcnO1xyXG4gICAgXHJcbiAgICBpZiAobG9nUXVlcnlQYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnMpIHtcclxuICAgICAgY29uc3QgZGVsaW1pdGVyID0gc3FsLmVuZHNXaXRoKCc7JykgPyAnJyA6ICc7JztcclxuICAgICAgbGV0IHBhcmFtU3RyO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSkge1xyXG4gICAgICAgIHBhcmFtU3RyID0gcGFyYW1ldGVycy5tYXAocD0+SlNPTi5zdHJpbmdpZnkocCkpLmpvaW4oJywgJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFyYW1TdHIgPSBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJzKTtcclxuICAgICAgfVxyXG4gICAgICBsb2dQYXJhbWV0ZXIgPSBgJHtkZWxpbWl0ZXJ9ICR7cGFyYW1TdHJ9YDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZtdCA9IGAoJHtjb25uZWN0aW9uLnV1aWQgfHwgJ2RlZmF1bHQnfSk6ICR7c3FsfSR7bG9nUGFyYW1ldGVyfWA7XHJcbiAgICBjb25zdCBtc2cgPSBgRXhlY3V0aW5nICR7Zm10fWA7XHJcbiAgICBkZWJ1Z0NvbnRleHQobXNnKTtcclxuICAgIGlmICghYmVuY2htYXJrKSB7XHJcbiAgICAgIHRoaXMuc2VxdWVsaXplLmxvZyhgRXhlY3V0aW5nICR7Zm10fWAsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgY29uc3QgYWZ0ZXJNc2cgPSBgRXhlY3V0ZWQgJHtmbXR9YDtcclxuICAgICAgZGVidWdDb250ZXh0KGFmdGVyTXNnKTtcclxuICAgICAgaWYgKGJlbmNobWFyaykge1xyXG4gICAgICAgIHRoaXMuc2VxdWVsaXplLmxvZyhhZnRlck1zZywgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSwgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgZnVuY3Rpb24gdGFrZXMgdGhlIHJlc3VsdCBvZiB0aGUgcXVlcnkgZXhlY3V0aW9uIGFuZCBncm91cHNcclxuICAgKiB0aGUgYXNzb2NpYXRlZCBkYXRhIGJ5IHRoZSBjYWxsZWUuXHJcbiAgICpcclxuICAgKiBFeGFtcGxlOlxyXG4gICAqICAgZ3JvdXBKb2luRGF0YShbXHJcbiAgICogICAgIHtcclxuICAgKiAgICAgICBzb21lOiAnZGF0YScsXHJcbiAgICogICAgICAgaWQ6IDEsXHJcbiAgICogICAgICAgYXNzb2NpYXRpb246IHsgZm9vOiAnYmFyJywgaWQ6IDEgfVxyXG4gICAqICAgICB9LCB7XHJcbiAgICogICAgICAgc29tZTogJ2RhdGEnLFxyXG4gICAqICAgICAgIGlkOiAxLFxyXG4gICAqICAgICAgIGFzc29jaWF0aW9uOiB7IGZvbzogJ2JhcicsIGlkOiAyIH1cclxuICAgKiAgICAgfSwge1xyXG4gICAqICAgICAgIHNvbWU6ICdkYXRhJyxcclxuICAgKiAgICAgICBpZDogMSxcclxuICAgKiAgICAgICBhc3NvY2lhdGlvbjogeyBmb286ICdiYXInLCBpZDogMyB9XHJcbiAgICogICAgIH1cclxuICAgKiAgIF0pXHJcbiAgICpcclxuICAgKiBSZXN1bHQ6XHJcbiAgICogICBTb21ldGhpbmcgbGlrZSB0aGlzOlxyXG4gICAqXHJcbiAgICogICBbXHJcbiAgICogICAgIHtcclxuICAgKiAgICAgICBzb21lOiAnZGF0YScsXHJcbiAgICogICAgICAgaWQ6IDEsXHJcbiAgICogICAgICAgYXNzb2NpYXRpb246IFtcclxuICAgKiAgICAgICAgIHsgZm9vOiAnYmFyJywgaWQ6IDEgfSxcclxuICAgKiAgICAgICAgIHsgZm9vOiAnYmFyJywgaWQ6IDIgfSxcclxuICAgKiAgICAgICAgIHsgZm9vOiAnYmFyJywgaWQ6IDMgfVxyXG4gICAqICAgICAgIF1cclxuICAgKiAgICAgfVxyXG4gICAqICAgXVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheX0gcm93c1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbmNsdWRlT3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBzdGF0aWMgX2dyb3VwSm9pbkRhdGEocm93cywgaW5jbHVkZU9wdGlvbnMsIG9wdGlvbnMpIHtcclxuXHJcbiAgICAvKlxyXG4gICAgICogQXNzdW1wdGlvbnNcclxuICAgICAqIElEIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgZmlyc3QgZmllbGRcclxuICAgICAqIEFsbCBmaWVsZHMgZm9yIGEgbGV2ZWwgaXMgZ3JvdXBlZCBpbiB0aGUgc2FtZSBzZXQgKGkuZS4gUGFuZWwuaWQsIFRhc2suaWQsIFBhbmVsLnRpdGxlIGlzIG5vdCBwb3NzaWJsZSlcclxuICAgICAqIFBhcmVudCBrZXlzIHdpbGwgYmUgc2VlbiBiZWZvcmUgYW55IGluY2x1ZGUvY2hpbGQga2V5c1xyXG4gICAgICogUHJldmlvdXMgc2V0IHdvbid0IG5lY2Vzc2FyaWx5IGJlIHBhcmVudCBzZXQgKG9uZSBwYXJlbnQgY291bGQgaGF2ZSB0d28gY2hpbGRyZW4sIG9uZSBjaGlsZCB3b3VsZCB0aGVuIGJlIHByZXZpb3VzIHNldCBmb3IgdGhlIG90aGVyKVxyXG4gICAgICovXHJcblxyXG4gICAgLypcclxuICAgICAqIEF1dGhvciAoTUgpIGNvbW1lbnQ6IFRoaXMgY29kZSBpcyBhbiB1bnJlYWRhYmxlIG1lc3MsIGJ1dCBpdCdzIHBlcmZvcm1hbnQuXHJcbiAgICAgKiBncm91cEpvaW5EYXRhIGlzIGEgcGVyZm9ybWFuY2UgY3JpdGljYWwgZnVuY3Rpb24gc28gd2UgcHJpb3JpdGl6ZSBwZXJmIG92ZXIgcmVhZGFiaWxpdHkuXHJcbiAgICAgKi9cclxuICAgIGlmICghcm93cy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdlbmVyaWMgbG9vcGluZ1xyXG4gICAgbGV0IGk7XHJcbiAgICBsZXQgbGVuZ3RoO1xyXG4gICAgbGV0ICRpO1xyXG4gICAgbGV0ICRsZW5ndGg7XHJcbiAgICAvLyBSb3cgc3BlY2lmaWMgbG9vcGluZ1xyXG4gICAgbGV0IHJvd3NJO1xyXG4gICAgbGV0IHJvdztcclxuICAgIGNvbnN0IHJvd3NMZW5ndGggPSByb3dzLmxlbmd0aDtcclxuICAgIC8vIEtleSBzcGVjaWZpYyBsb29waW5nXHJcbiAgICBsZXQga2V5cztcclxuICAgIGxldCBrZXk7XHJcbiAgICBsZXQga2V5STtcclxuICAgIGxldCBrZXlMZW5ndGg7XHJcbiAgICBsZXQgcHJldktleTtcclxuICAgIGxldCB2YWx1ZXM7XHJcbiAgICBsZXQgdG9wVmFsdWVzO1xyXG4gICAgbGV0IHRvcEV4aXN0cztcclxuICAgIGNvbnN0IGNoZWNrRXhpc3RpbmcgPSBvcHRpb25zLmNoZWNrRXhpc3Rpbmc7XHJcbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRvIGRlZHVwbGljYXRlIHdlIGNhbiBwcmUtYWxsb2NhdGUgdGhlIHJlc3VsdGluZyBhcnJheVxyXG4gICAgbGV0IGl0ZW1IYXNoO1xyXG4gICAgbGV0IHBhcmVudEhhc2g7XHJcbiAgICBsZXQgdG9wSGFzaDtcclxuICAgIGNvbnN0IHJlc3VsdHMgPSBjaGVja0V4aXN0aW5nID8gW10gOiBuZXcgQXJyYXkocm93c0xlbmd0aCk7XHJcbiAgICBjb25zdCByZXN1bHRNYXAgPSB7fTtcclxuICAgIGNvbnN0IGluY2x1ZGVNYXAgPSB7fTtcclxuICAgIC8vIFJlc3VsdCB2YXJpYWJsZXMgZm9yIHRoZSByZXNwZWN0aXZlIGZ1bmN0aW9uc1xyXG4gICAgbGV0ICRrZXlQcmVmaXg7XHJcbiAgICBsZXQgJGtleVByZWZpeFN0cmluZztcclxuICAgIGxldCAkcHJldktleVByZWZpeFN0cmluZzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxyXG4gICAgbGV0ICRwcmV2S2V5UHJlZml4O1xyXG4gICAgbGV0ICRsYXN0S2V5UHJlZml4O1xyXG4gICAgbGV0ICRjdXJyZW50O1xyXG4gICAgbGV0ICRwYXJlbnQ7XHJcbiAgICAvLyBNYXAgZWFjaCBrZXkgdG8gYW4gaW5jbHVkZSBvcHRpb25cclxuICAgIGxldCBwcmV2aW91c1BpZWNlO1xyXG4gICAgY29uc3QgYnVpbGRJbmNsdWRlTWFwID0gcGllY2UgPT4ge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCRjdXJyZW50LmluY2x1ZGVNYXAsIHBpZWNlKSkge1xyXG4gICAgICAgIGluY2x1ZGVNYXBba2V5XSA9ICRjdXJyZW50ID0gJGN1cnJlbnQuaW5jbHVkZU1hcFtwaWVjZV07XHJcbiAgICAgICAgaWYgKHByZXZpb3VzUGllY2UpIHtcclxuICAgICAgICAgIHByZXZpb3VzUGllY2UgPSBgJHtwcmV2aW91c1BpZWNlfS4ke3BpZWNlfWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHByZXZpb3VzUGllY2UgPSBwaWVjZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5jbHVkZU1hcFtwcmV2aW91c1BpZWNlXSA9ICRjdXJyZW50O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBzdHJpbmcgcHJlZml4IG9mIGEga2V5ICgnVXNlci5SZXN1bHRzJyBmb3IgJ1VzZXIuUmVzdWx0cy5pZCcpXHJcbiAgICBjb25zdCBrZXlQcmVmaXhTdHJpbmdNZW1vID0ge307XHJcbiAgICBjb25zdCBrZXlQcmVmaXhTdHJpbmcgPSAoa2V5LCBtZW1vKSA9PiB7XHJcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lbW8sIGtleSkpIHtcclxuICAgICAgICBtZW1vW2tleV0gPSBrZXkuc3Vic3RyKDAsIGtleS5sYXN0SW5kZXhPZignLicpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWVtb1trZXldO1xyXG4gICAgfTtcclxuICAgIC8vIFJlbW92ZXMgdGhlIHByZWZpeCBmcm9tIGEga2V5ICgnaWQnIGZvciAnVXNlci5SZXN1bHRzLmlkJylcclxuICAgIGNvbnN0IHJlbW92ZUtleVByZWZpeE1lbW8gPSB7fTtcclxuICAgIGNvbnN0IHJlbW92ZUtleVByZWZpeCA9IGtleSA9PiB7XHJcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlbW92ZUtleVByZWZpeE1lbW8sIGtleSkpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGtleS5sYXN0SW5kZXhPZignLicpO1xyXG4gICAgICAgIHJlbW92ZUtleVByZWZpeE1lbW9ba2V5XSA9IGtleS5zdWJzdHIoaW5kZXggPT09IC0xID8gMCA6IGluZGV4ICsgMSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlbW92ZUtleVByZWZpeE1lbW9ba2V5XTtcclxuICAgIH07XHJcbiAgICAvLyBDYWxjdWxhdGVzIHRoZSBhcnJheSBwcmVmaXggb2YgYSBrZXkgKFsnVXNlcicsICdSZXN1bHRzJ10gZm9yICdVc2VyLlJlc3VsdHMuaWQnKVxyXG4gICAgY29uc3Qga2V5UHJlZml4TWVtbyA9IHt9O1xyXG4gICAgY29uc3Qga2V5UHJlZml4ID0ga2V5ID0+IHtcclxuICAgICAgLy8gV2UgdXNlIGEgZG91YmxlIG1lbW8gYW5kIGtleVByZWZpeFN0cmluZyBzbyB0aGF0IGRpZmZlcmVudCBrZXlzIHdpdGggdGhlIHNhbWUgcHJlZml4IHdpbGwgcmVjZWl2ZSB0aGUgc2FtZSBhcnJheSBpbnN0ZWFkIG9mIGRpZmZlcm5ldCBhcnJheXMgd2l0aCBlcXVhbCB2YWx1ZXNcclxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoa2V5UHJlZml4TWVtbywga2V5KSkge1xyXG4gICAgICAgIGNvbnN0IHByZWZpeFN0cmluZyA9IGtleVByZWZpeFN0cmluZyhrZXksIGtleVByZWZpeFN0cmluZ01lbW8pO1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGtleVByZWZpeE1lbW8sIHByZWZpeFN0cmluZykpIHtcclxuICAgICAgICAgIGtleVByZWZpeE1lbW9bcHJlZml4U3RyaW5nXSA9IHByZWZpeFN0cmluZyA/IHByZWZpeFN0cmluZy5zcGxpdCgnLicpIDogW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGtleVByZWZpeE1lbW9ba2V5XSA9IGtleVByZWZpeE1lbW9bcHJlZml4U3RyaW5nXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4ga2V5UHJlZml4TWVtb1trZXldO1xyXG4gICAgfTtcclxuICAgIC8vIENhbGN1YXRlIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGFycmF5IHByZWZpeCAoJ1Jlc3VsdHMnIGZvciAnVXNlci5SZXN1bHRzLmlkJylcclxuICAgIGNvbnN0IGxhc3RLZXlQcmVmaXhNZW1vID0ge307XHJcbiAgICBjb25zdCBsYXN0S2V5UHJlZml4ID0ga2V5ID0+IHtcclxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGFzdEtleVByZWZpeE1lbW8sIGtleSkpIHtcclxuICAgICAgICBjb25zdCBwcmVmaXggPSBrZXlQcmVmaXgoa2V5KTtcclxuICAgICAgICBjb25zdCBsZW5ndGggPSBwcmVmaXgubGVuZ3RoO1xyXG5cclxuICAgICAgICBsYXN0S2V5UHJlZml4TWVtb1trZXldID0gIWxlbmd0aCA/ICcnIDogcHJlZml4W2xlbmd0aCAtIDFdO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBsYXN0S2V5UHJlZml4TWVtb1trZXldO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGdldFVuaXF1ZUtleUF0dHJpYnV0ZXMgPSBtb2RlbCA9PiB7XHJcbiAgICAgIGxldCB1bmlxdWVLZXlBdHRyaWJ1dGVzID0gXy5jaGFpbihtb2RlbC51bmlxdWVLZXlzKTtcclxuICAgICAgdW5pcXVlS2V5QXR0cmlidXRlcyA9IHVuaXF1ZUtleUF0dHJpYnV0ZXNcclxuICAgICAgICAucmVzdWx0KGAke3VuaXF1ZUtleUF0dHJpYnV0ZXMuZmluZEtleSgpfS5maWVsZHNgKVxyXG4gICAgICAgIC5tYXAoZmllbGQgPT4gXy5maW5kS2V5KG1vZGVsLmF0dHJpYnV0ZXMsIGNociA9PiBjaHIuZmllbGQgPT09IGZpZWxkKSlcclxuICAgICAgICAudmFsdWUoKTtcclxuXHJcbiAgICAgIHJldHVybiB1bmlxdWVLZXlBdHRyaWJ1dGVzO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IHN0cmluZ2lmeSA9IG9iaiA9PiBvYmogaW5zdGFuY2VvZiBCdWZmZXIgPyBvYmoudG9TdHJpbmcoJ2hleCcpIDogb2JqO1xyXG4gICAgbGV0IHByaW1hcnlLZXlBdHRyaWJ1dGVzO1xyXG4gICAgbGV0IHVuaXF1ZUtleUF0dHJpYnV0ZXM7XHJcbiAgICBsZXQgcHJlZml4O1xyXG5cclxuICAgIGZvciAocm93c0kgPSAwOyByb3dzSSA8IHJvd3NMZW5ndGg7IHJvd3NJKyspIHtcclxuICAgICAgcm93ID0gcm93c1tyb3dzSV07XHJcblxyXG4gICAgICAvLyBLZXlzIGFyZSB0aGUgc2FtZSBmb3IgYWxsIHJvd3MsIHNvIG9ubHkgbmVlZCB0byBjb21wdXRlIHRoZW0gb24gdGhlIGZpcnN0IHJvd1xyXG4gICAgICBpZiAocm93c0kgPT09IDApIHtcclxuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcclxuICAgICAgICBrZXlMZW5ndGggPSBrZXlzLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNoZWNrRXhpc3RpbmcpIHtcclxuICAgICAgICB0b3BFeGlzdHMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gQ29tcHV0ZSB0b3AgbGV2ZWwgaGFzaCBrZXkgKHRoaXMgaXMgdXN1YWxseSBqdXN0IHRoZSBwcmltYXJ5IGtleSB2YWx1ZXMpXHJcbiAgICAgICAgJGxlbmd0aCA9IGluY2x1ZGVPcHRpb25zLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGVzLmxlbmd0aDtcclxuICAgICAgICB0b3BIYXNoID0gJyc7XHJcbiAgICAgICAgaWYgKCRsZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHRvcEhhc2ggPSBzdHJpbmdpZnkocm93W2luY2x1ZGVPcHRpb25zLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGVzWzBdXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCRsZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbGVuZ3RoOyAkaSsrKSB7XHJcbiAgICAgICAgICAgIHRvcEhhc2ggKz0gc3RyaW5naWZ5KHJvd1tpbmNsdWRlT3B0aW9ucy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlc1skaV1dKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIV8uaXNFbXB0eShpbmNsdWRlT3B0aW9ucy5tb2RlbC51bmlxdWVLZXlzKSkge1xyXG4gICAgICAgICAgdW5pcXVlS2V5QXR0cmlidXRlcyA9IGdldFVuaXF1ZUtleUF0dHJpYnV0ZXMoaW5jbHVkZU9wdGlvbnMubW9kZWwpO1xyXG4gICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgdW5pcXVlS2V5QXR0cmlidXRlcy5sZW5ndGg7ICRpKyspIHtcclxuICAgICAgICAgICAgdG9wSGFzaCArPSByb3dbdW5pcXVlS2V5QXR0cmlidXRlc1skaV1dO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdG9wVmFsdWVzID0gdmFsdWVzID0ge307XHJcbiAgICAgICRwcmV2S2V5UHJlZml4ID0gdW5kZWZpbmVkO1xyXG4gICAgICBmb3IgKGtleUkgPSAwOyBrZXlJIDwga2V5TGVuZ3RoOyBrZXlJKyspIHtcclxuICAgICAgICBrZXkgPSBrZXlzW2tleUldO1xyXG5cclxuICAgICAgICAvLyBUaGUgc3RyaW5nIHByZWZpeCBpc24ndCBhY3R1YWx5IG5lZWRlZFxyXG4gICAgICAgIC8vIFdlIHVzZSBpdCBzbyBrZXlQcmVmaXggZm9yIGRpZmZlcmVudCBrZXlzIHdpbGwgcmVzb2x2ZSB0byB0aGUgc2FtZSBhcnJheSBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgcHJlZml4XHJcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXk/XHJcbiAgICAgICAgJGtleVByZWZpeFN0cmluZyA9IGtleVByZWZpeFN0cmluZyhrZXksIGtleVByZWZpeFN0cmluZ01lbW8pO1xyXG4gICAgICAgICRrZXlQcmVmaXggPSBrZXlQcmVmaXgoa2V5KTtcclxuXHJcbiAgICAgICAgLy8gT24gdGhlIGZpcnN0IHJvdyB3ZSBjb21wdXRlIHRoZSBpbmNsdWRlTWFwXHJcbiAgICAgICAgaWYgKHJvd3NJID09PSAwICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5jbHVkZU1hcCwga2V5KSkge1xyXG4gICAgICAgICAgaWYgKCEka2V5UHJlZml4Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpbmNsdWRlTWFwW2tleV0gPSBpbmNsdWRlTWFwWycnXSA9IGluY2x1ZGVPcHRpb25zO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJGN1cnJlbnQgPSBpbmNsdWRlT3B0aW9ucztcclxuICAgICAgICAgICAgcHJldmlvdXNQaWVjZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgJGtleVByZWZpeC5mb3JFYWNoKGJ1aWxkSW5jbHVkZU1hcCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuZCBvZiBrZXkgc2V0XHJcbiAgICAgICAgaWYgKCRwcmV2S2V5UHJlZml4ICE9PSB1bmRlZmluZWQgJiYgJHByZXZLZXlQcmVmaXggIT09ICRrZXlQcmVmaXgpIHtcclxuICAgICAgICAgIGlmIChjaGVja0V4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgIC8vIENvbXB1dGUgaGFzaCBrZXkgZm9yIHRoaXMgc2V0IGluc3RhbmNlXHJcbiAgICAgICAgICAgIC8vIFRPRE86IE9wdGltaXplXHJcbiAgICAgICAgICAgIGxlbmd0aCA9ICRwcmV2S2V5UHJlZml4Lmxlbmd0aDtcclxuICAgICAgICAgICAgJHBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIHBhcmVudEhhc2ggPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcHJlZml4ID0gJHBhcmVudCA/IGAkeyRwYXJlbnR9LiR7JHByZXZLZXlQcmVmaXhbaV19YCA6ICRwcmV2S2V5UHJlZml4W2ldO1xyXG4gICAgICAgICAgICAgICAgcHJpbWFyeUtleUF0dHJpYnV0ZXMgPSBpbmNsdWRlTWFwW3ByZWZpeF0ubW9kZWwucHJpbWFyeUtleUF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICAgICAgICAkbGVuZ3RoID0gcHJpbWFyeUtleUF0dHJpYnV0ZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgaXRlbUhhc2ggPSBwcmVmaXg7XHJcbiAgICAgICAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBpdGVtSGFzaCArPSBzdHJpbmdpZnkocm93W2Ake3ByZWZpeH0uJHtwcmltYXJ5S2V5QXR0cmlidXRlc1swXX1gXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICgkbGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbGVuZ3RoOyAkaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUhhc2ggKz0gc3RyaW5naWZ5KHJvd1tgJHtwcmVmaXh9LiR7cHJpbWFyeUtleUF0dHJpYnV0ZXNbJGldfWBdKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIV8uaXNFbXB0eShpbmNsdWRlTWFwW3ByZWZpeF0ubW9kZWwudW5pcXVlS2V5cykpIHtcclxuICAgICAgICAgICAgICAgICAgdW5pcXVlS2V5QXR0cmlidXRlcyA9IGdldFVuaXF1ZUtleUF0dHJpYnV0ZXMoaW5jbHVkZU1hcFtwcmVmaXhdLm1vZGVsKTtcclxuICAgICAgICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgdW5pcXVlS2V5QXR0cmlidXRlcy5sZW5ndGg7ICRpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtSGFzaCArPSByb3dbYCR7cHJlZml4fS4ke3VuaXF1ZUtleUF0dHJpYnV0ZXNbJGldfWBdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEhhc2gpIHtcclxuICAgICAgICAgICAgICAgICAgcGFyZW50SGFzaCA9IHRvcEhhc2g7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbUhhc2ggPSBwYXJlbnRIYXNoICsgaXRlbUhhc2g7XHJcbiAgICAgICAgICAgICAgICAkcGFyZW50ID0gcHJlZml4O1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPCBsZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudEhhc2ggPSBpdGVtSGFzaDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaXRlbUhhc2ggPSB0b3BIYXNoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbUhhc2ggPT09IHRvcEhhc2gpIHtcclxuICAgICAgICAgICAgICBpZiAoIXJlc3VsdE1hcFtpdGVtSGFzaF0pIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdE1hcFtpdGVtSGFzaF0gPSB2YWx1ZXM7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRvcEV4aXN0cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFyZXN1bHRNYXBbaXRlbUhhc2hdKSB7XHJcbiAgICAgICAgICAgICAgJHBhcmVudCA9IHJlc3VsdE1hcFtwYXJlbnRIYXNoXTtcclxuICAgICAgICAgICAgICAkbGFzdEtleVByZWZpeCA9IGxhc3RLZXlQcmVmaXgocHJldktleSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChpbmNsdWRlTWFwW3ByZXZLZXldLmFzc29jaWF0aW9uLmlzU2luZ2xlQXNzb2NpYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGlmICgkcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICRwYXJlbnRbJGxhc3RLZXlQcmVmaXhdID0gcmVzdWx0TWFwW2l0ZW1IYXNoXSA9IHZhbHVlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEkcGFyZW50WyRsYXN0S2V5UHJlZml4XSkge1xyXG4gICAgICAgICAgICAgICAgICAkcGFyZW50WyRsYXN0S2V5UHJlZml4XSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJHBhcmVudFskbGFzdEtleVByZWZpeF0ucHVzaChyZXN1bHRNYXBbaXRlbUhhc2hdID0gdmFsdWVzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFJlc2V0IHZhbHVlc1xyXG4gICAgICAgICAgICB2YWx1ZXMgPSB7fTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIElmIGNoZWNrRXhpc3RpbmcgaXMgZmFsc2UgaXQncyBiZWNhdXNlIHRoZXJlJ3Mgb25seSAxOjEgYXNzb2NpYXRpb25zIGluIHRoaXMgcXVlcnlcclxuICAgICAgICAgICAgLy8gSG93ZXZlciB3ZSBzdGlsbCBuZWVkIHRvIG1hcCBvbnRvIHRoZSBhcHByb3ByaWF0ZSBwYXJlbnRcclxuICAgICAgICAgICAgLy8gRm9yIDE6MSB3ZSBtYXAgZm9yd2FyZCwgaW5pdGlhbGl6aW5nIHRoZSB2YWx1ZSBvYmplY3Qgb24gdGhlIHBhcmVudCB0byBiZSBmaWxsZWQgaW4gdGhlIG5leHQgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcFxyXG4gICAgICAgICAgICAkY3VycmVudCA9IHRvcFZhbHVlcztcclxuICAgICAgICAgICAgbGVuZ3RoID0gJGtleVByZWZpeC5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmIChsZW5ndGgpIHtcclxuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChpID09PSBsZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlcyA9ICRjdXJyZW50WyRrZXlQcmVmaXhbaV1dID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkY3VycmVudCA9ICRjdXJyZW50WyRrZXlQcmVmaXhbaV1dIHx8IHt9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRW5kIG9mIGl0ZXJhdGlvbiwgc2V0IHZhbHVlIGFuZCBzZXQgcHJldiB2YWx1ZXMgKGZvciBuZXh0IGl0ZXJhdGlvbilcclxuICAgICAgICB2YWx1ZXNbcmVtb3ZlS2V5UHJlZml4KGtleSldID0gcm93W2tleV07XHJcbiAgICAgICAgcHJldktleSA9IGtleTtcclxuICAgICAgICAkcHJldktleVByZWZpeCA9ICRrZXlQcmVmaXg7XHJcbiAgICAgICAgJHByZXZLZXlQcmVmaXhTdHJpbmcgPSAka2V5UHJlZml4U3RyaW5nO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hlY2tFeGlzdGluZykge1xyXG4gICAgICAgIGxlbmd0aCA9ICRwcmV2S2V5UHJlZml4Lmxlbmd0aDtcclxuICAgICAgICAkcGFyZW50ID0gbnVsbDtcclxuICAgICAgICBwYXJlbnRIYXNoID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKGxlbmd0aCkge1xyXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHByZWZpeCA9ICRwYXJlbnQgPyBgJHskcGFyZW50fS4keyRwcmV2S2V5UHJlZml4W2ldfWAgOiAkcHJldktleVByZWZpeFtpXTtcclxuICAgICAgICAgICAgcHJpbWFyeUtleUF0dHJpYnV0ZXMgPSBpbmNsdWRlTWFwW3ByZWZpeF0ubW9kZWwucHJpbWFyeUtleUF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICAgICRsZW5ndGggPSBwcmltYXJ5S2V5QXR0cmlidXRlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGl0ZW1IYXNoID0gcHJlZml4O1xyXG4gICAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIGl0ZW1IYXNoICs9IHN0cmluZ2lmeShyb3dbYCR7cHJlZml4fS4ke3ByaW1hcnlLZXlBdHRyaWJ1dGVzWzBdfWBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgkbGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICRpKyspIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1IYXNoICs9IHN0cmluZ2lmeShyb3dbYCR7cHJlZml4fS4ke3ByaW1hcnlLZXlBdHRyaWJ1dGVzWyRpXX1gXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFfLmlzRW1wdHkoaW5jbHVkZU1hcFtwcmVmaXhdLm1vZGVsLnVuaXF1ZUtleXMpKSB7XHJcbiAgICAgICAgICAgICAgdW5pcXVlS2V5QXR0cmlidXRlcyA9IGdldFVuaXF1ZUtleUF0dHJpYnV0ZXMoaW5jbHVkZU1hcFtwcmVmaXhdLm1vZGVsKTtcclxuICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCB1bmlxdWVLZXlBdHRyaWJ1dGVzLmxlbmd0aDsgJGkrKykge1xyXG4gICAgICAgICAgICAgICAgaXRlbUhhc2ggKz0gcm93W2Ake3ByZWZpeH0uJHt1bmlxdWVLZXlBdHRyaWJ1dGVzWyRpXX1gXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJlbnRIYXNoKSB7XHJcbiAgICAgICAgICAgICAgcGFyZW50SGFzaCA9IHRvcEhhc2g7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGl0ZW1IYXNoID0gcGFyZW50SGFzaCArIGl0ZW1IYXNoO1xyXG4gICAgICAgICAgICAkcGFyZW50ID0gcHJlZml4O1xyXG4gICAgICAgICAgICBpZiAoaSA8IGxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICBwYXJlbnRIYXNoID0gaXRlbUhhc2g7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaXRlbUhhc2ggPSB0b3BIYXNoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW1IYXNoID09PSB0b3BIYXNoKSB7XHJcbiAgICAgICAgICBpZiAoIXJlc3VsdE1hcFtpdGVtSGFzaF0pIHtcclxuICAgICAgICAgICAgcmVzdWx0TWFwW2l0ZW1IYXNoXSA9IHZhbHVlcztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRvcEV4aXN0cyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghcmVzdWx0TWFwW2l0ZW1IYXNoXSkge1xyXG4gICAgICAgICAgJHBhcmVudCA9IHJlc3VsdE1hcFtwYXJlbnRIYXNoXTtcclxuICAgICAgICAgICRsYXN0S2V5UHJlZml4ID0gbGFzdEtleVByZWZpeChwcmV2S2V5KTtcclxuXHJcbiAgICAgICAgICBpZiAoaW5jbHVkZU1hcFtwcmV2S2V5XS5hc3NvY2lhdGlvbi5pc1NpbmdsZUFzc29jaWF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICgkcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgJHBhcmVudFskbGFzdEtleVByZWZpeF0gPSByZXN1bHRNYXBbaXRlbUhhc2hdID0gdmFsdWVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoISRwYXJlbnRbJGxhc3RLZXlQcmVmaXhdKSB7XHJcbiAgICAgICAgICAgICAgJHBhcmVudFskbGFzdEtleVByZWZpeF0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkcGFyZW50WyRsYXN0S2V5UHJlZml4XS5wdXNoKHJlc3VsdE1hcFtpdGVtSGFzaF0gPSB2YWx1ZXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRvcEV4aXN0cykge1xyXG4gICAgICAgICAgcmVzdWx0cy5wdXNoKHRvcFZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdHNbcm93c0ldID0gdG9wVmFsdWVzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0UXVlcnk7XHJcbm1vZHVsZS5leHBvcnRzLkFic3RyYWN0UXVlcnkgPSBBYnN0cmFjdFF1ZXJ5O1xyXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gQWJzdHJhY3RRdWVyeTtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9hYnN0cmFjdC9xdWVyeS5qcyJdLCJuYW1lcyI6WyJfIiwicmVxdWlyZSIsIlNxbFN0cmluZyIsIlF1ZXJ5VHlwZXMiLCJEb3QiLCJkZXByZWNhdGlvbnMiLCJ1dWlkIiwiQWJzdHJhY3RRdWVyeSIsImNvbm5lY3Rpb24iLCJzZXF1ZWxpemUiLCJvcHRpb25zIiwiaW5zdGFuY2UiLCJtb2RlbCIsIk9iamVjdCIsImFzc2lnbiIsInBsYWluIiwicmF3IiwibG9nZ2luZyIsImNvbnNvbGUiLCJsb2ciLCJjaGVja0xvZ2dpbmdPcHRpb24iLCJFcnJvciIsIm5vVHJ1ZUxvZ2dpbmciLCJmaWVsZCIsIm1lc3NhZ2UiLCJrZXkiLCJrZXlzIiwidW5pcXVlS2V5cyIsImZpZWxkcyIsImluY2x1ZGVzIiwicmVwbGFjZSIsIm1zZyIsInR5cGUiLCJSQVciLCJWRVJTSU9OIiwiVVBTRVJUIiwicmVzdWx0cyIsIm1ldGFEYXRhIiwicmVzdWx0IiwiSU5TRVJUIiwic3FsIiwidG9Mb3dlckNhc2UiLCJzdGFydHNXaXRoIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUiLCJpZCIsIlNIT1dUQUJMRVMiLCJmbGF0dGVuIiwibWFwIiwicmVzdWx0U2V0IiwidmFsdWVzIiwiU0hPV0lOREVYRVMiLCJTSE9XQ09OU1RSQUlOVFMiLCJERVNDUklCRSIsIlNFTEVDVCIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiRk9SRUlHTktFWVMiLCJVUERBVEUiLCJmaWVsZE1hcCIsInJlZHVjZSIsIm5hbWUiLCJ1bmRlZmluZWQiLCJvIiwibmVzdCIsInRyYW5zZm9ybSIsImhhc0pvaW4iLCJfZ3JvdXBKb2luRGF0YSIsImluY2x1ZGVNYXAiLCJpbmNsdWRlTmFtZXMiLCJjaGVja0V4aXN0aW5nIiwiaGFzTXVsdGlBc3NvY2lhdGlvbiIsImJ1bGtCdWlsZCIsImlzTmV3UmVjb3JkIiwiaW5jbHVkZSIsImluY2x1ZGVWYWxpZGF0ZWQiLCJhdHRyaWJ1dGVzIiwib3JpZ2luYWxBdHRyaWJ1dGVzIiwibGVuZ3RoIiwiZGVidWdDb250ZXh0IiwicGFyYW1ldGVycyIsImJlbmNobWFyayIsImxvZ1F1ZXJ5UGFyYW1ldGVycyIsInN0YXJ0VGltZSIsIkRhdGUiLCJub3ciLCJsb2dQYXJhbWV0ZXIiLCJkZWxpbWl0ZXIiLCJlbmRzV2l0aCIsInBhcmFtU3RyIiwiQXJyYXkiLCJpc0FycmF5IiwicCIsIkpTT04iLCJzdHJpbmdpZnkiLCJqb2luIiwiZm10IiwiYWZ0ZXJNc2ciLCJkaWFsZWN0IiwicmVwbGFjZW1lbnRGdW5jIiwic2tpcFZhbHVlUmVwbGFjZSIsIm1hdGNoIiwidGltZVpvbmUiLCJlc2NhcGUiLCJvcmlnUmVwbGFjZW1lbnRGdW5jIiwibGlzdCIsInNraXBVbmVzY2FwZSIsInJlcGxWYWwiLCJyb3dzIiwiaW5jbHVkZU9wdGlvbnMiLCJpIiwiJGkiLCIkbGVuZ3RoIiwicm93c0kiLCJyb3ciLCJyb3dzTGVuZ3RoIiwia2V5SSIsImtleUxlbmd0aCIsInByZXZLZXkiLCJ0b3BWYWx1ZXMiLCJ0b3BFeGlzdHMiLCJpdGVtSGFzaCIsInBhcmVudEhhc2giLCJ0b3BIYXNoIiwicmVzdWx0TWFwIiwiJGtleVByZWZpeCIsIiRrZXlQcmVmaXhTdHJpbmciLCIkcHJldktleVByZWZpeFN0cmluZyIsIiRwcmV2S2V5UHJlZml4IiwiJGxhc3RLZXlQcmVmaXgiLCIkY3VycmVudCIsIiRwYXJlbnQiLCJwcmV2aW91c1BpZWNlIiwiYnVpbGRJbmNsdWRlTWFwIiwicGllY2UiLCJrZXlQcmVmaXhTdHJpbmdNZW1vIiwia2V5UHJlZml4U3RyaW5nIiwibWVtbyIsInN1YnN0ciIsImxhc3RJbmRleE9mIiwicmVtb3ZlS2V5UHJlZml4TWVtbyIsInJlbW92ZUtleVByZWZpeCIsImluZGV4Iiwia2V5UHJlZml4TWVtbyIsImtleVByZWZpeCIsInByZWZpeFN0cmluZyIsInNwbGl0IiwibGFzdEtleVByZWZpeE1lbW8iLCJsYXN0S2V5UHJlZml4IiwicHJlZml4IiwiZ2V0VW5pcXVlS2V5QXR0cmlidXRlcyIsInVuaXF1ZUtleUF0dHJpYnV0ZXMiLCJjaGFpbiIsImZpbmRLZXkiLCJjaHIiLCJ2YWx1ZSIsIm9iaiIsIkJ1ZmZlciIsInRvU3RyaW5nIiwicHJpbWFyeUtleUF0dHJpYnV0ZXMiLCJpc0VtcHR5IiwiZm9yRWFjaCIsImFzc29jaWF0aW9uIiwiaXNTaW5nbGVBc3NvY2lhdGlvbiIsInB1c2giLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUEsTUFBTUEsQ0FBQyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNQyxTQUFTLEdBQUdELE9BQU8sQ0FBQyxrQkFBRCxDQUF6Qjs7QUFDQSxNQUFNRSxVQUFVLEdBQUdGLE9BQU8sQ0FBQyxtQkFBRCxDQUExQjs7QUFDQSxNQUFNRyxHQUFHLEdBQUdILE9BQU8sQ0FBQyxRQUFELENBQW5COztBQUNBLE1BQU1JLFlBQVksR0FBR0osT0FBTyxDQUFDLDBCQUFELENBQTVCOztBQUNBLE1BQU1LLElBQUksR0FBR0wsT0FBTyxDQUFDLFNBQUQsQ0FBcEI7O0lBRU1NLGE7QUFFSix5QkFBWUMsVUFBWixFQUF3QkMsU0FBeEIsRUFBbUNDLE9BQW5DLEVBQTRDO0FBQUE7O0FBQzFDLFNBQUtKLElBQUwsR0FBWUEsSUFBSSxFQUFoQjtBQUNBLFNBQUtFLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0csUUFBTCxHQUFnQkQsT0FBTyxDQUFDQyxRQUF4QjtBQUNBLFNBQUtDLEtBQUwsR0FBYUYsT0FBTyxDQUFDRSxLQUFyQjtBQUNBLFNBQUtILFNBQUwsR0FBaUJBLFNBQWpCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlRyxNQUFNLENBQUNDLE1BQVAsQ0FBYztBQUMzQkMsTUFBQUEsS0FBSyxFQUFFLEtBRG9CO0FBRTNCQyxNQUFBQSxHQUFHLEVBQUUsS0FGc0I7QUFHM0I7QUFDQUMsTUFBQUEsT0FBTyxFQUFFQyxPQUFPLENBQUNDO0FBSlUsS0FBZCxFQUtaVCxPQUFPLElBQUksRUFMQyxDQUFmO0FBTUEsU0FBS1Usa0JBQUw7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQStERTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7MEJBQ1E7QUFDSixZQUFNLElBQUlDLEtBQUosQ0FBVSxxQ0FBVixDQUFOO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7O3lDQUN1QjtBQUNuQixVQUFJLEtBQUtYLE9BQUwsQ0FBYU8sT0FBYixLQUF5QixJQUE3QixFQUFtQztBQUNqQ1osUUFBQUEsWUFBWSxDQUFDaUIsYUFBYixHQURpQyxDQUVqQzs7QUFDQSxhQUFLWixPQUFMLENBQWFPLE9BQWIsR0FBdUJDLE9BQU8sQ0FBQ0MsR0FBL0I7QUFDRDtBQUNGO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O3VDQUNxQjtBQUNqQixhQUFPLFVBQVA7QUFDRDs7O29EQUUrQkksSyxFQUFPO0FBQ3JDLFVBQUlDLE9BQU8sR0FBR0QsS0FBSyxHQUFJLEdBQUVBLEtBQU0saUJBQVosR0FBK0IsZ0JBQWxEOztBQUVBLFVBQUlBLEtBQUssSUFBSSxLQUFLWCxLQUFsQixFQUF5QjtBQUN2QixhQUFLLE1BQU1hLEdBQVgsSUFBa0JaLE1BQU0sQ0FBQ2EsSUFBUCxDQUFZLEtBQUtkLEtBQUwsQ0FBV2UsVUFBdkIsQ0FBbEIsRUFBc0Q7QUFDcEQsY0FBSSxLQUFLZixLQUFMLENBQVdlLFVBQVgsQ0FBc0JGLEdBQXRCLEVBQTJCRyxNQUEzQixDQUFrQ0MsUUFBbEMsQ0FBMkNOLEtBQUssQ0FBQ08sT0FBTixDQUFjLElBQWQsRUFBb0IsRUFBcEIsQ0FBM0MsQ0FBSixFQUF5RTtBQUN2RSxnQkFBSSxLQUFLbEIsS0FBTCxDQUFXZSxVQUFYLENBQXNCRixHQUF0QixFQUEyQk0sR0FBL0IsRUFBb0M7QUFDbENQLGNBQUFBLE9BQU8sR0FBRyxLQUFLWixLQUFMLENBQVdlLFVBQVgsQ0FBc0JGLEdBQXRCLEVBQTJCTSxHQUFyQztBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUNELGFBQU9QLE9BQVA7QUFDRDs7O2lDQUVZO0FBQ1gsYUFBTyxLQUFLZCxPQUFMLENBQWFzQixJQUFiLEtBQXNCN0IsVUFBVSxDQUFDOEIsR0FBeEM7QUFDRDs7O3FDQUVnQjtBQUNmLGFBQU8sS0FBS3ZCLE9BQUwsQ0FBYXNCLElBQWIsS0FBc0I3QixVQUFVLENBQUMrQixPQUF4QztBQUNEOzs7b0NBRWU7QUFDZCxhQUFPLEtBQUt4QixPQUFMLENBQWFzQixJQUFiLEtBQXNCN0IsVUFBVSxDQUFDZ0MsTUFBeEM7QUFDRDs7O2tDQUVhQyxPLEVBQVNDLFEsRUFBVTtBQUMvQixVQUFJQyxNQUFNLEdBQUcsSUFBYjs7QUFFQSxVQUFJLEtBQUs1QixPQUFMLENBQWFzQixJQUFiLEtBQXNCN0IsVUFBVSxDQUFDb0MsTUFBckMsRUFBNkM7QUFDM0MsZUFBTyxJQUFQO0FBQ0QsT0FMOEIsQ0FPL0I7OztBQUNBRCxNQUFBQSxNQUFNLEdBQUdBLE1BQU0sSUFBSSxLQUFLRSxHQUFMLENBQVNDLFdBQVQsR0FBdUJDLFVBQXZCLENBQWtDLGFBQWxDLENBQW5CLENBUitCLENBVS9COztBQUNBSixNQUFBQSxNQUFNLEdBQUdBLE1BQU0sS0FBSyxDQUFDRixPQUFELElBQVl2QixNQUFNLENBQUM4QixTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNULE9BQXJDLEVBQThDLEtBQUtVLGdCQUFMLEVBQTlDLENBQWpCLENBQWYsQ0FYK0IsQ0FhL0I7O0FBQ0FSLE1BQUFBLE1BQU0sR0FBR0EsTUFBTSxLQUFLLENBQUNELFFBQUQsSUFBYXhCLE1BQU0sQ0FBQzhCLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ1IsUUFBckMsRUFBK0MsS0FBS1MsZ0JBQUwsRUFBL0MsQ0FBbEIsQ0FBZjtBQUVBLGFBQU9SLE1BQVA7QUFDRDs7O3NDQUVpQkYsTyxFQUFTQyxRLEVBQVU7QUFDbkMsVUFBSSxLQUFLMUIsUUFBVCxFQUFtQjtBQUNqQjtBQUNBLGNBQU1vQyxzQkFBc0IsR0FBRyxLQUFLbkMsS0FBTCxDQUFXbUMsc0JBQTFDO0FBQ0EsWUFBSUMsRUFBRSxHQUFHLElBQVQ7QUFFQUEsUUFBQUEsRUFBRSxHQUFHQSxFQUFFLElBQUlaLE9BQU8sSUFBSUEsT0FBTyxDQUFDLEtBQUtVLGdCQUFMLEVBQUQsQ0FBN0I7QUFDQUUsUUFBQUEsRUFBRSxHQUFHQSxFQUFFLElBQUlYLFFBQVEsSUFBSUEsUUFBUSxDQUFDLEtBQUtTLGdCQUFMLEVBQUQsQ0FBL0I7QUFFQSxhQUFLbkMsUUFBTCxDQUFjb0Msc0JBQWQsSUFBd0NDLEVBQXhDO0FBQ0Q7QUFDRjs7O3dDQUVtQjtBQUNsQixhQUFPLEtBQUt0QyxPQUFMLENBQWFzQixJQUFiLEtBQXNCN0IsVUFBVSxDQUFDOEMsVUFBeEM7QUFDRDs7OzBDQUVxQmIsTyxFQUFTO0FBQzdCLGFBQU9wQyxDQUFDLENBQUNrRCxPQUFGLENBQVVkLE9BQU8sQ0FBQ2UsR0FBUixDQUFZQyxTQUFTLElBQUlwRCxDQUFDLENBQUNxRCxNQUFGLENBQVNELFNBQVQsQ0FBekIsQ0FBVixDQUFQO0FBQ0Q7Ozt5Q0FFb0I7QUFDbkIsYUFBTyxLQUFLMUMsT0FBTCxDQUFhc0IsSUFBYixLQUFzQjdCLFVBQVUsQ0FBQ21ELFdBQXhDO0FBQ0Q7Ozs2Q0FFd0I7QUFDdkIsYUFBTyxLQUFLNUMsT0FBTCxDQUFhc0IsSUFBYixLQUFzQjdCLFVBQVUsQ0FBQ29ELGVBQXhDO0FBQ0Q7OztzQ0FFaUI7QUFDaEIsYUFBTyxLQUFLN0MsT0FBTCxDQUFhc0IsSUFBYixLQUFzQjdCLFVBQVUsQ0FBQ3FELFFBQXhDO0FBQ0Q7OztvQ0FFZTtBQUNkLGFBQU8sS0FBSzlDLE9BQUwsQ0FBYXNCLElBQWIsS0FBc0I3QixVQUFVLENBQUNzRCxNQUF4QztBQUNEOzs7d0NBRW1CO0FBQ2xCLGFBQU8sS0FBSy9DLE9BQUwsQ0FBYXNCLElBQWIsS0FBc0I3QixVQUFVLENBQUN1RCxVQUF4QztBQUNEOzs7d0NBRW1CO0FBQ2xCLGFBQU8sS0FBS2hELE9BQUwsQ0FBYXNCLElBQWIsS0FBc0I3QixVQUFVLENBQUN3RCxVQUF4QztBQUNEOzs7eUNBRW9CO0FBQ25CLGFBQU8sS0FBS2pELE9BQUwsQ0FBYXNCLElBQWIsS0FBc0I3QixVQUFVLENBQUN5RCxXQUF4QztBQUNEOzs7b0NBRWU7QUFDZCxhQUFPLEtBQUtsRCxPQUFMLENBQWFzQixJQUFiLEtBQXNCN0IsVUFBVSxDQUFDMEQsTUFBeEM7QUFDRDs7O3NDQUVpQnpCLE8sRUFBUztBQUN6QixVQUFJRSxNQUFNLEdBQUcsSUFBYixDQUR5QixDQUd6Qjs7QUFDQSxVQUFJLEtBQUs1QixPQUFMLENBQWFvRCxRQUFqQixFQUEyQjtBQUN6QixjQUFNQSxRQUFRLEdBQUcsS0FBS3BELE9BQUwsQ0FBYW9ELFFBQTlCO0FBQ0ExQixRQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ2UsR0FBUixDQUFZYixNQUFNLElBQUl0QyxDQUFDLENBQUMrRCxNQUFGLENBQVNELFFBQVQsRUFBbUIsQ0FBQ3hCLE1BQUQsRUFBUzBCLElBQVQsRUFBZXpDLEtBQWYsS0FBeUI7QUFDMUUsY0FBSWUsTUFBTSxDQUFDZixLQUFELENBQU4sS0FBa0IwQyxTQUFsQixJQUErQkQsSUFBSSxLQUFLekMsS0FBNUMsRUFBbUQ7QUFDakRlLFlBQUFBLE1BQU0sQ0FBQzBCLElBQUQsQ0FBTixHQUFlMUIsTUFBTSxDQUFDZixLQUFELENBQXJCO0FBQ0EsbUJBQU9lLE1BQU0sQ0FBQ2YsS0FBRCxDQUFiO0FBQ0Q7O0FBQ0QsaUJBQU9lLE1BQVA7QUFDRCxTQU4rQixFQU03QkEsTUFONkIsQ0FBdEIsQ0FBVjtBQU9ELE9BYndCLENBZXpCOzs7QUFDQSxVQUFJLEtBQUs1QixPQUFMLENBQWFNLEdBQWpCLEVBQXNCO0FBQ3BCc0IsUUFBQUEsTUFBTSxHQUFHRixPQUFPLENBQUNlLEdBQVIsQ0FBWWIsTUFBTSxJQUFJO0FBQzdCLGNBQUk0QixDQUFDLEdBQUcsRUFBUjs7QUFFQSxlQUFLLE1BQU16QyxHQUFYLElBQWtCYSxNQUFsQixFQUEwQjtBQUN4QixnQkFBSXpCLE1BQU0sQ0FBQzhCLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ1AsTUFBckMsRUFBNkNiLEdBQTdDLENBQUosRUFBdUQ7QUFDckR5QyxjQUFBQSxDQUFDLENBQUN6QyxHQUFELENBQUQsR0FBU2EsTUFBTSxDQUFDYixHQUFELENBQWY7QUFDRDtBQUNGOztBQUVELGNBQUksS0FBS2YsT0FBTCxDQUFheUQsSUFBakIsRUFBdUI7QUFDckJELFlBQUFBLENBQUMsR0FBRzlELEdBQUcsQ0FBQ2dFLFNBQUosQ0FBY0YsQ0FBZCxDQUFKO0FBQ0Q7O0FBRUQsaUJBQU9BLENBQVA7QUFDRCxTQWRRLENBQVQsQ0FEb0IsQ0FnQnRCO0FBQ0MsT0FqQkQsTUFpQk8sSUFBSSxLQUFLeEQsT0FBTCxDQUFhMkQsT0FBYixLQUF5QixJQUE3QixFQUFtQztBQUN4Q2pDLFFBQUFBLE9BQU8sR0FBRzdCLGFBQWEsQ0FBQytELGNBQWQsQ0FBNkJsQyxPQUE3QixFQUFzQztBQUM5Q3hCLFVBQUFBLEtBQUssRUFBRSxLQUFLQSxLQURrQztBQUU5QzJELFVBQUFBLFVBQVUsRUFBRSxLQUFLN0QsT0FBTCxDQUFhNkQsVUFGcUI7QUFHOUNDLFVBQUFBLFlBQVksRUFBRSxLQUFLOUQsT0FBTCxDQUFhOEQ7QUFIbUIsU0FBdEMsRUFJUDtBQUNEQyxVQUFBQSxhQUFhLEVBQUUsS0FBSy9ELE9BQUwsQ0FBYWdFO0FBRDNCLFNBSk8sQ0FBVjtBQVFBcEMsUUFBQUEsTUFBTSxHQUFHLEtBQUsxQixLQUFMLENBQVcrRCxTQUFYLENBQXFCdkMsT0FBckIsRUFBOEI7QUFDckN3QyxVQUFBQSxXQUFXLEVBQUUsS0FEd0I7QUFFckNDLFVBQUFBLE9BQU8sRUFBRSxLQUFLbkUsT0FBTCxDQUFhbUUsT0FGZTtBQUdyQ0wsVUFBQUEsWUFBWSxFQUFFLEtBQUs5RCxPQUFMLENBQWE4RCxZQUhVO0FBSXJDRCxVQUFBQSxVQUFVLEVBQUUsS0FBSzdELE9BQUwsQ0FBYTZELFVBSlk7QUFLckNPLFVBQUFBLGdCQUFnQixFQUFFLElBTG1CO0FBTXJDQyxVQUFBQSxVQUFVLEVBQUUsS0FBS3JFLE9BQUwsQ0FBYXNFLGtCQUFiLElBQW1DLEtBQUt0RSxPQUFMLENBQWFxRSxVQU52QjtBQU9yQy9ELFVBQUFBLEdBQUcsRUFBRTtBQVBnQyxTQUE5QixDQUFULENBVHdDLENBa0IxQztBQUNDLE9BbkJNLE1BbUJBO0FBQ0xzQixRQUFBQSxNQUFNLEdBQUcsS0FBSzFCLEtBQUwsQ0FBVytELFNBQVgsQ0FBcUJ2QyxPQUFyQixFQUE4QjtBQUNyQ3dDLFVBQUFBLFdBQVcsRUFBRSxLQUR3QjtBQUVyQzVELFVBQUFBLEdBQUcsRUFBRSxJQUZnQztBQUdyQytELFVBQUFBLFVBQVUsRUFBRSxLQUFLckUsT0FBTCxDQUFhc0Usa0JBQWIsSUFBbUMsS0FBS3RFLE9BQUwsQ0FBYXFFO0FBSHZCLFNBQTlCLENBQVQ7QUFLRCxPQTFEd0IsQ0E0RHpCOzs7QUFDQSxVQUFJLEtBQUtyRSxPQUFMLENBQWFLLEtBQWpCLEVBQXdCO0FBQ3RCdUIsUUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUMyQyxNQUFQLEtBQWtCLENBQWxCLEdBQXNCLElBQXRCLEdBQTZCM0MsTUFBTSxDQUFDLENBQUQsQ0FBNUM7QUFDRDs7QUFDRCxhQUFPQSxNQUFQO0FBQ0Q7Ozs0Q0FFdUI7QUFDdEIsVUFBSUEsTUFBTSxHQUFHLEtBQWI7QUFFQUEsTUFBQUEsTUFBTSxHQUFHQSxNQUFNLElBQUksS0FBS0UsR0FBTCxDQUFTQyxXQUFULEdBQXVCQyxVQUF2QixDQUFrQyxNQUFsQyxDQUFuQjtBQUNBSixNQUFBQSxNQUFNLEdBQUdBLE1BQU0sSUFBSSxLQUFLRSxHQUFMLENBQVNDLFdBQVQsR0FBdUJDLFVBQXZCLENBQWtDLFVBQWxDLENBQW5CO0FBRUEsYUFBT0osTUFBUDtBQUNEOzs7a0NBRWE7QUFDWixhQUFPLEtBQUtFLEdBQUwsQ0FBU0MsV0FBVCxHQUF1QkMsVUFBdkIsQ0FBa0MsTUFBbEMsQ0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OEJBQ1lGLEcsRUFBSzBDLFksRUFBY0MsVSxFQUFZO0FBQ3ZDLFlBQU07QUFBRTNFLFFBQUFBLFVBQUY7QUFBY0UsUUFBQUE7QUFBZCxVQUEwQixJQUFoQztBQUNBLFlBQU0wRSxTQUFTLEdBQUcsS0FBSzNFLFNBQUwsQ0FBZUMsT0FBZixDQUF1QjBFLFNBQXZCLElBQW9DMUUsT0FBTyxDQUFDMEUsU0FBOUQ7QUFDQSxZQUFNQyxrQkFBa0IsR0FBRyxLQUFLNUUsU0FBTCxDQUFlQyxPQUFmLENBQXVCMkUsa0JBQXZCLElBQTZDM0UsT0FBTyxDQUFDMkUsa0JBQWhGO0FBQ0EsWUFBTUMsU0FBUyxHQUFHQyxJQUFJLENBQUNDLEdBQUwsRUFBbEI7QUFDQSxVQUFJQyxZQUFZLEdBQUcsRUFBbkI7O0FBRUEsVUFBSUosa0JBQWtCLElBQUlGLFVBQTFCLEVBQXNDO0FBQ3BDLGNBQU1PLFNBQVMsR0FBR2xELEdBQUcsQ0FBQ21ELFFBQUosQ0FBYSxHQUFiLElBQW9CLEVBQXBCLEdBQXlCLEdBQTNDO0FBQ0EsWUFBSUMsUUFBSjs7QUFDQSxZQUFJQyxLQUFLLENBQUNDLE9BQU4sQ0FBY1gsVUFBZCxDQUFKLEVBQStCO0FBQzdCUyxVQUFBQSxRQUFRLEdBQUdULFVBQVUsQ0FBQ2hDLEdBQVgsQ0FBZTRDLENBQUMsSUFBRUMsSUFBSSxDQUFDQyxTQUFMLENBQWVGLENBQWYsQ0FBbEIsRUFBcUNHLElBQXJDLENBQTBDLElBQTFDLENBQVg7QUFDRCxTQUZELE1BRU87QUFDTE4sVUFBQUEsUUFBUSxHQUFHSSxJQUFJLENBQUNDLFNBQUwsQ0FBZWQsVUFBZixDQUFYO0FBQ0Q7O0FBQ0RNLFFBQUFBLFlBQVksR0FBSSxHQUFFQyxTQUFVLElBQUdFLFFBQVMsRUFBeEM7QUFDRDs7QUFDRCxZQUFNTyxHQUFHLEdBQUksSUFBRzNGLFVBQVUsQ0FBQ0YsSUFBWCxJQUFtQixTQUFVLE1BQUtrQyxHQUFJLEdBQUVpRCxZQUFhLEVBQXJFO0FBQ0EsWUFBTTFELEdBQUcsR0FBSSxhQUFZb0UsR0FBSSxFQUE3QjtBQUNBakIsTUFBQUEsWUFBWSxDQUFDbkQsR0FBRCxDQUFaOztBQUNBLFVBQUksQ0FBQ3FELFNBQUwsRUFBZ0I7QUFDZCxhQUFLM0UsU0FBTCxDQUFlVSxHQUFmLENBQW9CLGFBQVlnRixHQUFJLEVBQXBDLEVBQXVDekYsT0FBdkM7QUFDRDs7QUFDRCxhQUFPLE1BQU07QUFDWCxjQUFNMEYsUUFBUSxHQUFJLFlBQVdELEdBQUksRUFBakM7QUFDQWpCLFFBQUFBLFlBQVksQ0FBQ2tCLFFBQUQsQ0FBWjs7QUFDQSxZQUFJaEIsU0FBSixFQUFlO0FBQ2IsZUFBSzNFLFNBQUwsQ0FBZVUsR0FBZixDQUFtQmlGLFFBQW5CLEVBQTZCYixJQUFJLENBQUNDLEdBQUwsS0FBYUYsU0FBMUMsRUFBcUQ1RSxPQUFyRDtBQUNEO0FBQ0YsT0FORDtBQU9EO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozt5Q0FwVzhCOEIsRyxFQUFLYSxNLEVBQVFnRCxPLEVBQVNDLGUsRUFBaUI1RixPLEVBQVM7QUFDMUUsVUFBSSxDQUFDMkMsTUFBTCxFQUFhO0FBQ1gsZUFBTyxDQUFDYixHQUFELEVBQU0sRUFBTixDQUFQO0FBQ0Q7O0FBRUQ5QixNQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxFQUFyQjs7QUFDQSxVQUFJLE9BQU80RixlQUFQLEtBQTJCLFVBQS9CLEVBQTJDO0FBQ3pDNUYsUUFBQUEsT0FBTyxHQUFHNEYsZUFBZSxJQUFJLEVBQTdCO0FBQ0FBLFFBQUFBLGVBQWUsR0FBR3JDLFNBQWxCO0FBQ0Q7O0FBRUQsVUFBSSxDQUFDcUMsZUFBTCxFQUFzQjtBQUNwQixZQUFJNUYsT0FBTyxDQUFDNkYsZ0JBQVosRUFBOEI7QUFDNUJELFVBQUFBLGVBQWUsR0FBRyxDQUFDRSxLQUFELEVBQVEvRSxHQUFSLEVBQWE0QixNQUFiLEtBQXdCO0FBQ3hDLGdCQUFJQSxNQUFNLENBQUM1QixHQUFELENBQU4sS0FBZ0J3QyxTQUFwQixFQUErQjtBQUM3QixxQkFBT3VDLEtBQVA7QUFDRDs7QUFDRCxtQkFBT3ZDLFNBQVA7QUFDRCxXQUxEO0FBTUQsU0FQRCxNQU9PO0FBQ0xxQyxVQUFBQSxlQUFlLEdBQUcsQ0FBQ0UsS0FBRCxFQUFRL0UsR0FBUixFQUFhNEIsTUFBYixFQUFxQm9ELFFBQXJCLEVBQStCSixPQUEvQixLQUEyQztBQUMzRCxnQkFBSWhELE1BQU0sQ0FBQzVCLEdBQUQsQ0FBTixLQUFnQndDLFNBQXBCLEVBQStCO0FBQzdCLHFCQUFPL0QsU0FBUyxDQUFDd0csTUFBVixDQUFpQnJELE1BQU0sQ0FBQzVCLEdBQUQsQ0FBdkIsRUFBOEJnRixRQUE5QixFQUF3Q0osT0FBeEMsQ0FBUDtBQUNEOztBQUNELG1CQUFPcEMsU0FBUDtBQUNELFdBTEQ7QUFNRDtBQUNGLE9BaEJELE1BZ0JPLElBQUl2RCxPQUFPLENBQUM2RixnQkFBWixFQUE4QjtBQUNuQyxjQUFNSSxtQkFBbUIsR0FBR0wsZUFBNUI7O0FBQ0FBLFFBQUFBLGVBQWUsR0FBRyxDQUFDRSxLQUFELEVBQVEvRSxHQUFSLEVBQWE0QixNQUFiLEVBQXFCb0QsUUFBckIsRUFBK0JKLE9BQS9CLEVBQXdDM0YsT0FBeEMsS0FBb0Q7QUFDcEUsY0FBSWlHLG1CQUFtQixDQUFDSCxLQUFELEVBQVEvRSxHQUFSLEVBQWE0QixNQUFiLEVBQXFCb0QsUUFBckIsRUFBK0JKLE9BQS9CLEVBQXdDM0YsT0FBeEMsQ0FBbkIsS0FBd0V1RCxTQUE1RSxFQUF1RjtBQUNyRixtQkFBT3VDLEtBQVA7QUFDRDs7QUFDRCxpQkFBT3ZDLFNBQVA7QUFDRCxTQUxEO0FBTUQ7O0FBRUQsWUFBTXdDLFFBQVEsR0FBRyxJQUFqQjtBQUNBLFlBQU1HLElBQUksR0FBR2YsS0FBSyxDQUFDQyxPQUFOLENBQWN6QyxNQUFkLENBQWI7QUFFQWIsTUFBQUEsR0FBRyxHQUFHQSxHQUFHLENBQUNWLE9BQUosQ0FBWSxhQUFaLEVBQTJCLENBQUMwRSxLQUFELEVBQVEvRSxHQUFSLEtBQWdCO0FBQy9DLFlBQUksUUFBUUEsR0FBWixFQUFpQjtBQUNmLGlCQUFPZixPQUFPLENBQUNtRyxZQUFSLEdBQXVCTCxLQUF2QixHQUErQi9FLEdBQXRDO0FBQ0Q7O0FBRUQsWUFBSXFGLE9BQUo7O0FBQ0EsWUFBSUYsSUFBSixFQUFVO0FBQ1IsY0FBSW5GLEdBQUcsQ0FBQytFLEtBQUosQ0FBVSxZQUFWLENBQUosRUFBNkI7QUFDM0IvRSxZQUFBQSxHQUFHLEdBQUdBLEdBQUcsR0FBRyxDQUFaO0FBQ0FxRixZQUFBQSxPQUFPLEdBQUdSLGVBQWUsQ0FBQ0UsS0FBRCxFQUFRL0UsR0FBUixFQUFhNEIsTUFBYixFQUFxQm9ELFFBQXJCLEVBQStCSixPQUEvQixFQUF3QzNGLE9BQXhDLENBQXpCO0FBQ0Q7QUFDRixTQUxELE1BS08sSUFBSSxDQUFDZSxHQUFHLENBQUMrRSxLQUFKLENBQVUsT0FBVixDQUFMLEVBQXlCO0FBQzlCTSxVQUFBQSxPQUFPLEdBQUdSLGVBQWUsQ0FBQ0UsS0FBRCxFQUFRL0UsR0FBUixFQUFhNEIsTUFBYixFQUFxQm9ELFFBQXJCLEVBQStCSixPQUEvQixFQUF3QzNGLE9BQXhDLENBQXpCO0FBQ0Q7O0FBQ0QsWUFBSW9HLE9BQU8sS0FBSzdDLFNBQWhCLEVBQTJCO0FBQ3pCLGdCQUFNLElBQUk1QyxLQUFKLENBQVcseUJBQXdCbUYsS0FBTSxxQ0FBekMsQ0FBTjtBQUNEOztBQUNELGVBQU9NLE9BQVA7QUFDRCxPQWxCSyxDQUFOO0FBbUJBLGFBQU8sQ0FBQ3RFLEdBQUQsRUFBTSxFQUFOLENBQVA7QUFDRDs7O21DQXlTcUJ1RSxJLEVBQU1DLGMsRUFBZ0J0RyxPLEVBQVM7QUFFbkQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUk7QUFDSjtBQUNBO0FBQ0E7QUFDSSxVQUFJLENBQUNxRyxJQUFJLENBQUM5QixNQUFWLEVBQWtCO0FBQ2hCLGVBQU8sRUFBUDtBQUNELE9BaEJrRCxDQWtCbkQ7OztBQUNBLFVBQUlnQyxDQUFKO0FBQ0EsVUFBSWhDLE1BQUo7QUFDQSxVQUFJaUMsRUFBSjtBQUNBLFVBQUlDLE9BQUosQ0F0Qm1ELENBdUJuRDs7QUFDQSxVQUFJQyxLQUFKO0FBQ0EsVUFBSUMsR0FBSjtBQUNBLFlBQU1DLFVBQVUsR0FBR1AsSUFBSSxDQUFDOUIsTUFBeEIsQ0ExQm1ELENBMkJuRDs7QUFDQSxVQUFJdkQsSUFBSjtBQUNBLFVBQUlELEdBQUo7QUFDQSxVQUFJOEYsSUFBSjtBQUNBLFVBQUlDLFNBQUo7QUFDQSxVQUFJQyxPQUFKO0FBQ0EsVUFBSXBFLE1BQUo7QUFDQSxVQUFJcUUsU0FBSjtBQUNBLFVBQUlDLFNBQUo7QUFDQSxZQUFNbEQsYUFBYSxHQUFHL0QsT0FBTyxDQUFDK0QsYUFBOUIsQ0FwQ21ELENBcUNuRDs7QUFDQSxVQUFJbUQsUUFBSjtBQUNBLFVBQUlDLFVBQUo7QUFDQSxVQUFJQyxPQUFKO0FBQ0EsWUFBTTFGLE9BQU8sR0FBR3FDLGFBQWEsR0FBRyxFQUFILEdBQVEsSUFBSW9CLEtBQUosQ0FBVXlCLFVBQVYsQ0FBckM7QUFDQSxZQUFNUyxTQUFTLEdBQUcsRUFBbEI7QUFDQSxZQUFNeEQsVUFBVSxHQUFHLEVBQW5CLENBM0NtRCxDQTRDbkQ7O0FBQ0EsVUFBSXlELFVBQUo7QUFDQSxVQUFJQyxnQkFBSjtBQUNBLFVBQUlDLG9CQUFKLENBL0NtRCxDQStDekI7O0FBQzFCLFVBQUlDLGNBQUo7QUFDQSxVQUFJQyxjQUFKO0FBQ0EsVUFBSUMsUUFBSjtBQUNBLFVBQUlDLE9BQUosQ0FuRG1ELENBb0RuRDs7QUFDQSxVQUFJQyxhQUFKOztBQUNBLFlBQU1DLGVBQWUsR0FBR0MsS0FBSyxJQUFJO0FBQy9CLFlBQUk1SCxNQUFNLENBQUM4QixTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUN3RixRQUFRLENBQUM5RCxVQUE5QyxFQUEwRGtFLEtBQTFELENBQUosRUFBc0U7QUFDcEVsRSxVQUFBQSxVQUFVLENBQUM5QyxHQUFELENBQVYsR0FBa0I0RyxRQUFRLEdBQUdBLFFBQVEsQ0FBQzlELFVBQVQsQ0FBb0JrRSxLQUFwQixDQUE3Qjs7QUFDQSxjQUFJRixhQUFKLEVBQW1CO0FBQ2pCQSxZQUFBQSxhQUFhLEdBQUksR0FBRUEsYUFBYyxJQUFHRSxLQUFNLEVBQTFDO0FBQ0QsV0FGRCxNQUVPO0FBQ0xGLFlBQUFBLGFBQWEsR0FBR0UsS0FBaEI7QUFDRDs7QUFDRGxFLFVBQUFBLFVBQVUsQ0FBQ2dFLGFBQUQsQ0FBVixHQUE0QkYsUUFBNUI7QUFDRDtBQUNGLE9BVkQsQ0F0RG1ELENBaUVuRDs7O0FBQ0EsWUFBTUssbUJBQW1CLEdBQUcsRUFBNUI7O0FBQ0EsWUFBTUMsZUFBZSxHQUFHLENBQUNsSCxHQUFELEVBQU1tSCxJQUFOLEtBQWU7QUFDckMsWUFBSSxDQUFDL0gsTUFBTSxDQUFDOEIsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDK0YsSUFBckMsRUFBMkNuSCxHQUEzQyxDQUFMLEVBQXNEO0FBQ3BEbUgsVUFBQUEsSUFBSSxDQUFDbkgsR0FBRCxDQUFKLEdBQVlBLEdBQUcsQ0FBQ29ILE1BQUosQ0FBVyxDQUFYLEVBQWNwSCxHQUFHLENBQUNxSCxXQUFKLENBQWdCLEdBQWhCLENBQWQsQ0FBWjtBQUNEOztBQUNELGVBQU9GLElBQUksQ0FBQ25ILEdBQUQsQ0FBWDtBQUNELE9BTEQsQ0FuRW1ELENBeUVuRDs7O0FBQ0EsWUFBTXNILG1CQUFtQixHQUFHLEVBQTVCOztBQUNBLFlBQU1DLGVBQWUsR0FBR3ZILEdBQUcsSUFBSTtBQUM3QixZQUFJLENBQUNaLE1BQU0sQ0FBQzhCLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ2tHLG1CQUFyQyxFQUEwRHRILEdBQTFELENBQUwsRUFBcUU7QUFDbkUsZ0JBQU13SCxLQUFLLEdBQUd4SCxHQUFHLENBQUNxSCxXQUFKLENBQWdCLEdBQWhCLENBQWQ7QUFDQUMsVUFBQUEsbUJBQW1CLENBQUN0SCxHQUFELENBQW5CLEdBQTJCQSxHQUFHLENBQUNvSCxNQUFKLENBQVdJLEtBQUssS0FBSyxDQUFDLENBQVgsR0FBZSxDQUFmLEdBQW1CQSxLQUFLLEdBQUcsQ0FBdEMsQ0FBM0I7QUFDRDs7QUFDRCxlQUFPRixtQkFBbUIsQ0FBQ3RILEdBQUQsQ0FBMUI7QUFDRCxPQU5ELENBM0VtRCxDQWtGbkQ7OztBQUNBLFlBQU15SCxhQUFhLEdBQUcsRUFBdEI7O0FBQ0EsWUFBTUMsU0FBUyxHQUFHMUgsR0FBRyxJQUFJO0FBQ3ZCO0FBQ0EsWUFBSSxDQUFDWixNQUFNLENBQUM4QixTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNxRyxhQUFyQyxFQUFvRHpILEdBQXBELENBQUwsRUFBK0Q7QUFDN0QsZ0JBQU0ySCxZQUFZLEdBQUdULGVBQWUsQ0FBQ2xILEdBQUQsRUFBTWlILG1CQUFOLENBQXBDOztBQUNBLGNBQUksQ0FBQzdILE1BQU0sQ0FBQzhCLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ3FHLGFBQXJDLEVBQW9ERSxZQUFwRCxDQUFMLEVBQXdFO0FBQ3RFRixZQUFBQSxhQUFhLENBQUNFLFlBQUQsQ0FBYixHQUE4QkEsWUFBWSxHQUFHQSxZQUFZLENBQUNDLEtBQWIsQ0FBbUIsR0FBbkIsQ0FBSCxHQUE2QixFQUF2RTtBQUNEOztBQUNESCxVQUFBQSxhQUFhLENBQUN6SCxHQUFELENBQWIsR0FBcUJ5SCxhQUFhLENBQUNFLFlBQUQsQ0FBbEM7QUFDRDs7QUFDRCxlQUFPRixhQUFhLENBQUN6SCxHQUFELENBQXBCO0FBQ0QsT0FWRCxDQXBGbUQsQ0ErRm5EOzs7QUFDQSxZQUFNNkgsaUJBQWlCLEdBQUcsRUFBMUI7O0FBQ0EsWUFBTUMsYUFBYSxHQUFHOUgsR0FBRyxJQUFJO0FBQzNCLFlBQUksQ0FBQ1osTUFBTSxDQUFDOEIsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDeUcsaUJBQXJDLEVBQXdEN0gsR0FBeEQsQ0FBTCxFQUFtRTtBQUNqRSxnQkFBTStILE1BQU0sR0FBR0wsU0FBUyxDQUFDMUgsR0FBRCxDQUF4QjtBQUNBLGdCQUFNd0QsTUFBTSxHQUFHdUUsTUFBTSxDQUFDdkUsTUFBdEI7QUFFQXFFLFVBQUFBLGlCQUFpQixDQUFDN0gsR0FBRCxDQUFqQixHQUF5QixDQUFDd0QsTUFBRCxHQUFVLEVBQVYsR0FBZXVFLE1BQU0sQ0FBQ3ZFLE1BQU0sR0FBRyxDQUFWLENBQTlDO0FBQ0Q7O0FBQ0QsZUFBT3FFLGlCQUFpQixDQUFDN0gsR0FBRCxDQUF4QjtBQUNELE9BUkQ7O0FBU0EsWUFBTWdJLHNCQUFzQixHQUFHN0ksS0FBSyxJQUFJO0FBQ3RDLFlBQUk4SSxtQkFBbUIsR0FBRzFKLENBQUMsQ0FBQzJKLEtBQUYsQ0FBUS9JLEtBQUssQ0FBQ2UsVUFBZCxDQUExQjs7QUFDQStILFFBQUFBLG1CQUFtQixHQUFHQSxtQkFBbUIsQ0FDdENwSCxNQURtQixDQUNYLEdBQUVvSCxtQkFBbUIsQ0FBQ0UsT0FBcEIsRUFBOEIsU0FEckIsRUFFbkJ6RyxHQUZtQixDQUVmNUIsS0FBSyxJQUFJdkIsQ0FBQyxDQUFDNEosT0FBRixDQUFVaEosS0FBSyxDQUFDbUUsVUFBaEIsRUFBNEI4RSxHQUFHLElBQUlBLEdBQUcsQ0FBQ3RJLEtBQUosS0FBY0EsS0FBakQsQ0FGTSxFQUduQnVJLEtBSG1CLEVBQXRCO0FBS0EsZUFBT0osbUJBQVA7QUFDRCxPQVJEOztBQVNBLFlBQU16RCxTQUFTLEdBQUc4RCxHQUFHLElBQUlBLEdBQUcsWUFBWUMsTUFBZixHQUF3QkQsR0FBRyxDQUFDRSxRQUFKLENBQWEsS0FBYixDQUF4QixHQUE4Q0YsR0FBdkU7O0FBQ0EsVUFBSUcsb0JBQUo7QUFDQSxVQUFJUixtQkFBSjtBQUNBLFVBQUlGLE1BQUo7O0FBRUEsV0FBS3BDLEtBQUssR0FBRyxDQUFiLEVBQWdCQSxLQUFLLEdBQUdFLFVBQXhCLEVBQW9DRixLQUFLLEVBQXpDLEVBQTZDO0FBQzNDQyxRQUFBQSxHQUFHLEdBQUdOLElBQUksQ0FBQ0ssS0FBRCxDQUFWLENBRDJDLENBRzNDOztBQUNBLFlBQUlBLEtBQUssS0FBSyxDQUFkLEVBQWlCO0FBQ2YxRixVQUFBQSxJQUFJLEdBQUdiLE1BQU0sQ0FBQ2EsSUFBUCxDQUFZMkYsR0FBWixDQUFQO0FBQ0FHLFVBQUFBLFNBQVMsR0FBRzlGLElBQUksQ0FBQ3VELE1BQWpCO0FBQ0Q7O0FBRUQsWUFBSVIsYUFBSixFQUFtQjtBQUNqQmtELFVBQUFBLFNBQVMsR0FBRyxLQUFaLENBRGlCLENBR2pCOztBQUNBUixVQUFBQSxPQUFPLEdBQUdILGNBQWMsQ0FBQ3BHLEtBQWYsQ0FBcUJzSixvQkFBckIsQ0FBMENqRixNQUFwRDtBQUNBNkMsVUFBQUEsT0FBTyxHQUFHLEVBQVY7O0FBQ0EsY0FBSVgsT0FBTyxLQUFLLENBQWhCLEVBQW1CO0FBQ2pCVyxZQUFBQSxPQUFPLEdBQUc3QixTQUFTLENBQUNvQixHQUFHLENBQUNMLGNBQWMsQ0FBQ3BHLEtBQWYsQ0FBcUJzSixvQkFBckIsQ0FBMEMsQ0FBMUMsQ0FBRCxDQUFKLENBQW5CO0FBQ0QsV0FGRCxNQUdLLElBQUkvQyxPQUFPLEdBQUcsQ0FBZCxFQUFpQjtBQUNwQixpQkFBS0QsRUFBRSxHQUFHLENBQVYsRUFBYUEsRUFBRSxHQUFHQyxPQUFsQixFQUEyQkQsRUFBRSxFQUE3QixFQUFpQztBQUMvQlksY0FBQUEsT0FBTyxJQUFJN0IsU0FBUyxDQUFDb0IsR0FBRyxDQUFDTCxjQUFjLENBQUNwRyxLQUFmLENBQXFCc0osb0JBQXJCLENBQTBDaEQsRUFBMUMsQ0FBRCxDQUFKLENBQXBCO0FBQ0Q7QUFDRixXQUpJLE1BS0EsSUFBSSxDQUFDbEgsQ0FBQyxDQUFDbUssT0FBRixDQUFVbkQsY0FBYyxDQUFDcEcsS0FBZixDQUFxQmUsVUFBL0IsQ0FBTCxFQUFpRDtBQUNwRCtILFlBQUFBLG1CQUFtQixHQUFHRCxzQkFBc0IsQ0FBQ3pDLGNBQWMsQ0FBQ3BHLEtBQWhCLENBQTVDOztBQUNBLGlCQUFLc0csRUFBRSxHQUFHLENBQVYsRUFBYUEsRUFBRSxHQUFHd0MsbUJBQW1CLENBQUN6RSxNQUF0QyxFQUE4Q2lDLEVBQUUsRUFBaEQsRUFBb0Q7QUFDbERZLGNBQUFBLE9BQU8sSUFBSVQsR0FBRyxDQUFDcUMsbUJBQW1CLENBQUN4QyxFQUFELENBQXBCLENBQWQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRURRLFFBQUFBLFNBQVMsR0FBR3JFLE1BQU0sR0FBRyxFQUFyQjtBQUNBOEUsUUFBQUEsY0FBYyxHQUFHbEUsU0FBakI7O0FBQ0EsYUFBS3NELElBQUksR0FBRyxDQUFaLEVBQWVBLElBQUksR0FBR0MsU0FBdEIsRUFBaUNELElBQUksRUFBckMsRUFBeUM7QUFDdkM5RixVQUFBQSxHQUFHLEdBQUdDLElBQUksQ0FBQzZGLElBQUQsQ0FBVixDQUR1QyxDQUd2QztBQUNBO0FBQ0E7O0FBQ0FVLFVBQUFBLGdCQUFnQixHQUFHVSxlQUFlLENBQUNsSCxHQUFELEVBQU1pSCxtQkFBTixDQUFsQztBQUNBVixVQUFBQSxVQUFVLEdBQUdtQixTQUFTLENBQUMxSCxHQUFELENBQXRCLENBUHVDLENBU3ZDOztBQUNBLGNBQUkyRixLQUFLLEtBQUssQ0FBVixJQUFlLENBQUN2RyxNQUFNLENBQUM4QixTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUMwQixVQUFyQyxFQUFpRDlDLEdBQWpELENBQXBCLEVBQTJFO0FBQ3pFLGdCQUFJLENBQUN1RyxVQUFVLENBQUMvQyxNQUFoQixFQUF3QjtBQUN0QlYsY0FBQUEsVUFBVSxDQUFDOUMsR0FBRCxDQUFWLEdBQWtCOEMsVUFBVSxDQUFDLEVBQUQsQ0FBVixHQUFpQnlDLGNBQW5DO0FBQ0QsYUFGRCxNQUVPO0FBQ0xxQixjQUFBQSxRQUFRLEdBQUdyQixjQUFYO0FBQ0F1QixjQUFBQSxhQUFhLEdBQUd0RSxTQUFoQjtBQUNBK0QsY0FBQUEsVUFBVSxDQUFDb0MsT0FBWCxDQUFtQjVCLGVBQW5CO0FBQ0Q7QUFDRixXQWxCc0MsQ0FtQnZDOzs7QUFDQSxjQUFJTCxjQUFjLEtBQUtsRSxTQUFuQixJQUFnQ2tFLGNBQWMsS0FBS0gsVUFBdkQsRUFBbUU7QUFDakUsZ0JBQUl2RCxhQUFKLEVBQW1CO0FBQ2pCO0FBQ0E7QUFDQVEsY0FBQUEsTUFBTSxHQUFHa0QsY0FBYyxDQUFDbEQsTUFBeEI7QUFDQXFELGNBQUFBLE9BQU8sR0FBRyxJQUFWO0FBQ0FULGNBQUFBLFVBQVUsR0FBRyxJQUFiOztBQUVBLGtCQUFJNUMsTUFBSixFQUFZO0FBQ1YscUJBQUtnQyxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdoQyxNQUFoQixFQUF3QmdDLENBQUMsRUFBekIsRUFBNkI7QUFDM0J1QyxrQkFBQUEsTUFBTSxHQUFHbEIsT0FBTyxHQUFJLEdBQUVBLE9BQVEsSUFBR0gsY0FBYyxDQUFDbEIsQ0FBRCxDQUFJLEVBQW5DLEdBQXVDa0IsY0FBYyxDQUFDbEIsQ0FBRCxDQUFyRTtBQUNBaUQsa0JBQUFBLG9CQUFvQixHQUFHM0YsVUFBVSxDQUFDaUYsTUFBRCxDQUFWLENBQW1CNUksS0FBbkIsQ0FBeUJzSixvQkFBaEQ7QUFDQS9DLGtCQUFBQSxPQUFPLEdBQUcrQyxvQkFBb0IsQ0FBQ2pGLE1BQS9CO0FBQ0EyQyxrQkFBQUEsUUFBUSxHQUFHNEIsTUFBWDs7QUFDQSxzQkFBSXJDLE9BQU8sS0FBSyxDQUFoQixFQUFtQjtBQUNqQlMsb0JBQUFBLFFBQVEsSUFBSTNCLFNBQVMsQ0FBQ29CLEdBQUcsQ0FBRSxHQUFFbUMsTUFBTyxJQUFHVSxvQkFBb0IsQ0FBQyxDQUFELENBQUksRUFBdEMsQ0FBSixDQUFyQjtBQUNELG1CQUZELE1BR0ssSUFBSS9DLE9BQU8sR0FBRyxDQUFkLEVBQWlCO0FBQ3BCLHlCQUFLRCxFQUFFLEdBQUcsQ0FBVixFQUFhQSxFQUFFLEdBQUdDLE9BQWxCLEVBQTJCRCxFQUFFLEVBQTdCLEVBQWlDO0FBQy9CVSxzQkFBQUEsUUFBUSxJQUFJM0IsU0FBUyxDQUFDb0IsR0FBRyxDQUFFLEdBQUVtQyxNQUFPLElBQUdVLG9CQUFvQixDQUFDaEQsRUFBRCxDQUFLLEVBQXZDLENBQUosQ0FBckI7QUFDRDtBQUNGLG1CQUpJLE1BS0EsSUFBSSxDQUFDbEgsQ0FBQyxDQUFDbUssT0FBRixDQUFVNUYsVUFBVSxDQUFDaUYsTUFBRCxDQUFWLENBQW1CNUksS0FBbkIsQ0FBeUJlLFVBQW5DLENBQUwsRUFBcUQ7QUFDeEQrSCxvQkFBQUEsbUJBQW1CLEdBQUdELHNCQUFzQixDQUFDbEYsVUFBVSxDQUFDaUYsTUFBRCxDQUFWLENBQW1CNUksS0FBcEIsQ0FBNUM7O0FBQ0EseUJBQUtzRyxFQUFFLEdBQUcsQ0FBVixFQUFhQSxFQUFFLEdBQUd3QyxtQkFBbUIsQ0FBQ3pFLE1BQXRDLEVBQThDaUMsRUFBRSxFQUFoRCxFQUFvRDtBQUNsRFUsc0JBQUFBLFFBQVEsSUFBSVAsR0FBRyxDQUFFLEdBQUVtQyxNQUFPLElBQUdFLG1CQUFtQixDQUFDeEMsRUFBRCxDQUFLLEVBQXRDLENBQWY7QUFDRDtBQUNGOztBQUNELHNCQUFJLENBQUNXLFVBQUwsRUFBaUI7QUFDZkEsb0JBQUFBLFVBQVUsR0FBR0MsT0FBYjtBQUNEOztBQUVERixrQkFBQUEsUUFBUSxHQUFHQyxVQUFVLEdBQUdELFFBQXhCO0FBQ0FVLGtCQUFBQSxPQUFPLEdBQUdrQixNQUFWOztBQUNBLHNCQUFJdkMsQ0FBQyxHQUFHaEMsTUFBTSxHQUFHLENBQWpCLEVBQW9CO0FBQ2xCNEMsb0JBQUFBLFVBQVUsR0FBR0QsUUFBYjtBQUNEO0FBQ0Y7QUFDRixlQTlCRCxNQThCTztBQUNMQSxnQkFBQUEsUUFBUSxHQUFHRSxPQUFYO0FBQ0Q7O0FBRUQsa0JBQUlGLFFBQVEsS0FBS0UsT0FBakIsRUFBMEI7QUFDeEIsb0JBQUksQ0FBQ0MsU0FBUyxDQUFDSCxRQUFELENBQWQsRUFBMEI7QUFDeEJHLGtCQUFBQSxTQUFTLENBQUNILFFBQUQsQ0FBVCxHQUFzQnZFLE1BQXRCO0FBQ0QsaUJBRkQsTUFFTztBQUNMc0Usa0JBQUFBLFNBQVMsR0FBRyxJQUFaO0FBQ0Q7QUFDRixlQU5ELE1BTU8sSUFBSSxDQUFDSSxTQUFTLENBQUNILFFBQUQsQ0FBZCxFQUEwQjtBQUMvQlUsZ0JBQUFBLE9BQU8sR0FBR1AsU0FBUyxDQUFDRixVQUFELENBQW5CO0FBQ0FPLGdCQUFBQSxjQUFjLEdBQUdtQixhQUFhLENBQUM5QixPQUFELENBQTlCOztBQUVBLG9CQUFJbEQsVUFBVSxDQUFDa0QsT0FBRCxDQUFWLENBQW9CNEMsV0FBcEIsQ0FBZ0NDLG1CQUFwQyxFQUF5RDtBQUN2RCxzQkFBSWhDLE9BQUosRUFBYTtBQUNYQSxvQkFBQUEsT0FBTyxDQUFDRixjQUFELENBQVAsR0FBMEJMLFNBQVMsQ0FBQ0gsUUFBRCxDQUFULEdBQXNCdkUsTUFBaEQ7QUFDRDtBQUNGLGlCQUpELE1BSU87QUFDTCxzQkFBSSxDQUFDaUYsT0FBTyxDQUFDRixjQUFELENBQVosRUFBOEI7QUFDNUJFLG9CQUFBQSxPQUFPLENBQUNGLGNBQUQsQ0FBUCxHQUEwQixFQUExQjtBQUNEOztBQUNERSxrQkFBQUEsT0FBTyxDQUFDRixjQUFELENBQVAsQ0FBd0JtQyxJQUF4QixDQUE2QnhDLFNBQVMsQ0FBQ0gsUUFBRCxDQUFULEdBQXNCdkUsTUFBbkQ7QUFDRDtBQUNGLGVBN0RnQixDQStEakI7OztBQUNBQSxjQUFBQSxNQUFNLEdBQUcsRUFBVDtBQUNELGFBakVELE1BaUVPO0FBQ0w7QUFDQTtBQUNBO0FBQ0FnRixjQUFBQSxRQUFRLEdBQUdYLFNBQVg7QUFDQXpDLGNBQUFBLE1BQU0sR0FBRytDLFVBQVUsQ0FBQy9DLE1BQXBCOztBQUNBLGtCQUFJQSxNQUFKLEVBQVk7QUFDVixxQkFBS2dDLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR2hDLE1BQWhCLEVBQXdCZ0MsQ0FBQyxFQUF6QixFQUE2QjtBQUMzQixzQkFBSUEsQ0FBQyxLQUFLaEMsTUFBTSxHQUFHLENBQW5CLEVBQXNCO0FBQ3BCNUIsb0JBQUFBLE1BQU0sR0FBR2dGLFFBQVEsQ0FBQ0wsVUFBVSxDQUFDZixDQUFELENBQVgsQ0FBUixHQUEwQixFQUFuQztBQUNEOztBQUNEb0Isa0JBQUFBLFFBQVEsR0FBR0EsUUFBUSxDQUFDTCxVQUFVLENBQUNmLENBQUQsQ0FBWCxDQUFSLElBQTJCLEVBQXRDO0FBQ0Q7QUFDRjtBQUNGO0FBQ0YsV0FyR3NDLENBdUd2Qzs7O0FBQ0E1RCxVQUFBQSxNQUFNLENBQUMyRixlQUFlLENBQUN2SCxHQUFELENBQWhCLENBQU4sR0FBK0I0RixHQUFHLENBQUM1RixHQUFELENBQWxDO0FBQ0FnRyxVQUFBQSxPQUFPLEdBQUdoRyxHQUFWO0FBQ0EwRyxVQUFBQSxjQUFjLEdBQUdILFVBQWpCO0FBQ0FFLFVBQUFBLG9CQUFvQixHQUFHRCxnQkFBdkI7QUFDRDs7QUFFRCxZQUFJeEQsYUFBSixFQUFtQjtBQUNqQlEsVUFBQUEsTUFBTSxHQUFHa0QsY0FBYyxDQUFDbEQsTUFBeEI7QUFDQXFELFVBQUFBLE9BQU8sR0FBRyxJQUFWO0FBQ0FULFVBQUFBLFVBQVUsR0FBRyxJQUFiOztBQUVBLGNBQUk1QyxNQUFKLEVBQVk7QUFDVixpQkFBS2dDLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR2hDLE1BQWhCLEVBQXdCZ0MsQ0FBQyxFQUF6QixFQUE2QjtBQUMzQnVDLGNBQUFBLE1BQU0sR0FBR2xCLE9BQU8sR0FBSSxHQUFFQSxPQUFRLElBQUdILGNBQWMsQ0FBQ2xCLENBQUQsQ0FBSSxFQUFuQyxHQUF1Q2tCLGNBQWMsQ0FBQ2xCLENBQUQsQ0FBckU7QUFDQWlELGNBQUFBLG9CQUFvQixHQUFHM0YsVUFBVSxDQUFDaUYsTUFBRCxDQUFWLENBQW1CNUksS0FBbkIsQ0FBeUJzSixvQkFBaEQ7QUFDQS9DLGNBQUFBLE9BQU8sR0FBRytDLG9CQUFvQixDQUFDakYsTUFBL0I7QUFDQTJDLGNBQUFBLFFBQVEsR0FBRzRCLE1BQVg7O0FBQ0Esa0JBQUlyQyxPQUFPLEtBQUssQ0FBaEIsRUFBbUI7QUFDakJTLGdCQUFBQSxRQUFRLElBQUkzQixTQUFTLENBQUNvQixHQUFHLENBQUUsR0FBRW1DLE1BQU8sSUFBR1Usb0JBQW9CLENBQUMsQ0FBRCxDQUFJLEVBQXRDLENBQUosQ0FBckI7QUFDRCxlQUZELE1BR0ssSUFBSS9DLE9BQU8sR0FBRyxDQUFkLEVBQWlCO0FBQ3BCLHFCQUFLRCxFQUFFLEdBQUcsQ0FBVixFQUFhQSxFQUFFLEdBQUdDLE9BQWxCLEVBQTJCRCxFQUFFLEVBQTdCLEVBQWlDO0FBQy9CVSxrQkFBQUEsUUFBUSxJQUFJM0IsU0FBUyxDQUFDb0IsR0FBRyxDQUFFLEdBQUVtQyxNQUFPLElBQUdVLG9CQUFvQixDQUFDaEQsRUFBRCxDQUFLLEVBQXZDLENBQUosQ0FBckI7QUFDRDtBQUNGLGVBSkksTUFLQSxJQUFJLENBQUNsSCxDQUFDLENBQUNtSyxPQUFGLENBQVU1RixVQUFVLENBQUNpRixNQUFELENBQVYsQ0FBbUI1SSxLQUFuQixDQUF5QmUsVUFBbkMsQ0FBTCxFQUFxRDtBQUN4RCtILGdCQUFBQSxtQkFBbUIsR0FBR0Qsc0JBQXNCLENBQUNsRixVQUFVLENBQUNpRixNQUFELENBQVYsQ0FBbUI1SSxLQUFwQixDQUE1Qzs7QUFDQSxxQkFBS3NHLEVBQUUsR0FBRyxDQUFWLEVBQWFBLEVBQUUsR0FBR3dDLG1CQUFtQixDQUFDekUsTUFBdEMsRUFBOENpQyxFQUFFLEVBQWhELEVBQW9EO0FBQ2xEVSxrQkFBQUEsUUFBUSxJQUFJUCxHQUFHLENBQUUsR0FBRW1DLE1BQU8sSUFBR0UsbUJBQW1CLENBQUN4QyxFQUFELENBQUssRUFBdEMsQ0FBZjtBQUNEO0FBQ0Y7O0FBQ0Qsa0JBQUksQ0FBQ1csVUFBTCxFQUFpQjtBQUNmQSxnQkFBQUEsVUFBVSxHQUFHQyxPQUFiO0FBQ0Q7O0FBRURGLGNBQUFBLFFBQVEsR0FBR0MsVUFBVSxHQUFHRCxRQUF4QjtBQUNBVSxjQUFBQSxPQUFPLEdBQUdrQixNQUFWOztBQUNBLGtCQUFJdkMsQ0FBQyxHQUFHaEMsTUFBTSxHQUFHLENBQWpCLEVBQW9CO0FBQ2xCNEMsZ0JBQUFBLFVBQVUsR0FBR0QsUUFBYjtBQUNEO0FBQ0Y7QUFDRixXQTlCRCxNQThCTztBQUNMQSxZQUFBQSxRQUFRLEdBQUdFLE9BQVg7QUFDRDs7QUFFRCxjQUFJRixRQUFRLEtBQUtFLE9BQWpCLEVBQTBCO0FBQ3hCLGdCQUFJLENBQUNDLFNBQVMsQ0FBQ0gsUUFBRCxDQUFkLEVBQTBCO0FBQ3hCRyxjQUFBQSxTQUFTLENBQUNILFFBQUQsQ0FBVCxHQUFzQnZFLE1BQXRCO0FBQ0QsYUFGRCxNQUVPO0FBQ0xzRSxjQUFBQSxTQUFTLEdBQUcsSUFBWjtBQUNEO0FBQ0YsV0FORCxNQU1PLElBQUksQ0FBQ0ksU0FBUyxDQUFDSCxRQUFELENBQWQsRUFBMEI7QUFDL0JVLFlBQUFBLE9BQU8sR0FBR1AsU0FBUyxDQUFDRixVQUFELENBQW5CO0FBQ0FPLFlBQUFBLGNBQWMsR0FBR21CLGFBQWEsQ0FBQzlCLE9BQUQsQ0FBOUI7O0FBRUEsZ0JBQUlsRCxVQUFVLENBQUNrRCxPQUFELENBQVYsQ0FBb0I0QyxXQUFwQixDQUFnQ0MsbUJBQXBDLEVBQXlEO0FBQ3ZELGtCQUFJaEMsT0FBSixFQUFhO0FBQ1hBLGdCQUFBQSxPQUFPLENBQUNGLGNBQUQsQ0FBUCxHQUEwQkwsU0FBUyxDQUFDSCxRQUFELENBQVQsR0FBc0J2RSxNQUFoRDtBQUNEO0FBQ0YsYUFKRCxNQUlPO0FBQ0wsa0JBQUksQ0FBQ2lGLE9BQU8sQ0FBQ0YsY0FBRCxDQUFaLEVBQThCO0FBQzVCRSxnQkFBQUEsT0FBTyxDQUFDRixjQUFELENBQVAsR0FBMEIsRUFBMUI7QUFDRDs7QUFDREUsY0FBQUEsT0FBTyxDQUFDRixjQUFELENBQVAsQ0FBd0JtQyxJQUF4QixDQUE2QnhDLFNBQVMsQ0FBQ0gsUUFBRCxDQUFULEdBQXNCdkUsTUFBbkQ7QUFDRDtBQUNGOztBQUNELGNBQUksQ0FBQ3NFLFNBQUwsRUFBZ0I7QUFDZHZGLFlBQUFBLE9BQU8sQ0FBQ21JLElBQVIsQ0FBYTdDLFNBQWI7QUFDRDtBQUNGLFNBL0RELE1BK0RPO0FBQ0x0RixVQUFBQSxPQUFPLENBQUNnRixLQUFELENBQVAsR0FBaUJNLFNBQWpCO0FBQ0Q7QUFDRjs7QUFFRCxhQUFPdEYsT0FBUDtBQUNEOzs7Ozs7QUFHSG9JLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQmxLLGFBQWpCO0FBQ0FpSyxNQUFNLENBQUNDLE9BQVAsQ0FBZWxLLGFBQWYsR0FBK0JBLGFBQS9CO0FBQ0FpSyxNQUFNLENBQUNDLE9BQVAsQ0FBZUMsT0FBZixHQUF5Qm5LLGFBQXpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBTcWxTdHJpbmcgPSByZXF1aXJlKCcuLi8uLi9zcWwtc3RyaW5nJyk7XG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZSgnLi4vLi4vcXVlcnktdHlwZXMnKTtcbmNvbnN0IERvdCA9IHJlcXVpcmUoJ2RvdHRpZScpO1xuY29uc3QgZGVwcmVjYXRpb25zID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvZGVwcmVjYXRpb25zJyk7XG5jb25zdCB1dWlkID0gcmVxdWlyZSgndXVpZC92NCcpO1xuXG5jbGFzcyBBYnN0cmFjdFF1ZXJ5IHtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uLCBzZXF1ZWxpemUsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnV1aWQgPSB1dWlkKCk7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgICB0aGlzLmluc3RhbmNlID0gb3B0aW9ucy5pbnN0YW5jZTtcbiAgICB0aGlzLm1vZGVsID0gb3B0aW9ucy5tb2RlbDtcbiAgICB0aGlzLnNlcXVlbGl6ZSA9IHNlcXVlbGl6ZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIHBsYWluOiBmYWxzZSxcbiAgICAgIHJhdzogZmFsc2UsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgbG9nZ2luZzogY29uc29sZS5sb2dcbiAgICB9LCBvcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLmNoZWNrTG9nZ2luZ09wdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHJld3JpdGUgcXVlcnkgd2l0aCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgIHF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKCdzZWxlY3QgJDEgYXMgZm9vJywgWydmb292YWwnXSk7XG4gICAqXG4gICAqICAgcXVlcnkuZm9ybWF0QmluZFBhcmFtZXRlcnMoJ3NlbGVjdCAkZm9vIGFzIGZvbycsIHsgZm9vOiAnZm9vdmFsJyB9KTtcbiAgICpcbiAgICogT3B0aW9uc1xuICAgKiAgIHNraXBVbmVzY2FwZTogYm9vbCwgc2tpcCB1bmVzY2FwaW5nICQkXG4gICAqICAgc2tpcFZhbHVlUmVwbGFjZTogYm9vbCwgZG8gbm90IHJlcGxhY2UgKGJ1dCBkbyB1bmVzY2FwZSAkJCkuIENoZWNrIGNvcnJlY3Qgc3ludGF4IGFuZCBpZiBhbGwgdmFsdWVzIGFyZSBhdmFpbGFibGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNxbFxuICAgKiBAcGFyYW0ge09iamVjdHxBcnJheX0gdmFsdWVzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaWFsZWN0XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXBsYWNlbWVudEZ1bmNdXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHN0YXRpYyBmb3JtYXRCaW5kUGFyYW1ldGVycyhzcWwsIHZhbHVlcywgZGlhbGVjdCwgcmVwbGFjZW1lbnRGdW5jLCBvcHRpb25zKSB7XG4gICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBbc3FsLCBbXV07XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKHR5cGVvZiByZXBsYWNlbWVudEZ1bmMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdGlvbnMgPSByZXBsYWNlbWVudEZ1bmMgfHwge307XG4gICAgICByZXBsYWNlbWVudEZ1bmMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFyZXBsYWNlbWVudEZ1bmMpIHtcbiAgICAgIGlmIChvcHRpb25zLnNraXBWYWx1ZVJlcGxhY2UpIHtcbiAgICAgICAgcmVwbGFjZW1lbnRGdW5jID0gKG1hdGNoLCBrZXksIHZhbHVlcykgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZXNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXBsYWNlbWVudEZ1bmMgPSAobWF0Y2gsIGtleSwgdmFsdWVzLCB0aW1lWm9uZSwgZGlhbGVjdCkgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZXNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gU3FsU3RyaW5nLmVzY2FwZSh2YWx1ZXNba2V5XSwgdGltZVpvbmUsIGRpYWxlY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5za2lwVmFsdWVSZXBsYWNlKSB7XG4gICAgICBjb25zdCBvcmlnUmVwbGFjZW1lbnRGdW5jID0gcmVwbGFjZW1lbnRGdW5jO1xuICAgICAgcmVwbGFjZW1lbnRGdW5jID0gKG1hdGNoLCBrZXksIHZhbHVlcywgdGltZVpvbmUsIGRpYWxlY3QsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgaWYgKG9yaWdSZXBsYWNlbWVudEZ1bmMobWF0Y2gsIGtleSwgdmFsdWVzLCB0aW1lWm9uZSwgZGlhbGVjdCwgb3B0aW9ucykgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lWm9uZSA9IG51bGw7XG4gICAgY29uc3QgbGlzdCA9IEFycmF5LmlzQXJyYXkodmFsdWVzKTtcblxuICAgIHNxbCA9IHNxbC5yZXBsYWNlKC9cXCQoXFwkfFxcdyspL2csIChtYXRjaCwga2V5KSA9PiB7XG4gICAgICBpZiAoJyQnID09PSBrZXkpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2tpcFVuZXNjYXBlID8gbWF0Y2ggOiBrZXk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZXBsVmFsO1xuICAgICAgaWYgKGxpc3QpIHtcbiAgICAgICAgaWYgKGtleS5tYXRjaCgvXlsxLTldXFxkKiQvKSkge1xuICAgICAgICAgIGtleSA9IGtleSAtIDE7XG4gICAgICAgICAgcmVwbFZhbCA9IHJlcGxhY2VtZW50RnVuYyhtYXRjaCwga2V5LCB2YWx1ZXMsIHRpbWVab25lLCBkaWFsZWN0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgha2V5Lm1hdGNoKC9eXFxkKiQvKSkge1xuICAgICAgICByZXBsVmFsID0gcmVwbGFjZW1lbnRGdW5jKG1hdGNoLCBrZXksIHZhbHVlcywgdGltZVpvbmUsIGRpYWxlY3QsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcGxWYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5hbWVkIGJpbmQgcGFyYW1ldGVyIFwiJHttYXRjaH1cIiBoYXMgbm8gdmFsdWUgaW4gdGhlIGdpdmVuIG9iamVjdC5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXBsVmFsO1xuICAgIH0pO1xuICAgIHJldHVybiBbc3FsLCBbXV07XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgcGFzc2VkIHNxbCBxdWVyeS5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBxdWVyeS5ydW4oJ1NFTEVDVCAxJylcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJ1bigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBydW4gbWV0aG9kIHdhc25cXCd0IG92ZXJ3cml0dGVuIScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBsb2dnaW5nIG9wdGlvbiBvZiB0aGUgaW5zdGFuY2UgYW5kIHByaW50IGRlcHJlY2F0aW9uIHdhcm5pbmdzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2hlY2tMb2dnaW5nT3B0aW9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubG9nZ2luZyA9PT0gdHJ1ZSkge1xuICAgICAgZGVwcmVjYXRpb25zLm5vVHJ1ZUxvZ2dpbmcoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICB0aGlzLm9wdGlvbnMubG9nZ2luZyA9IGNvbnNvbGUubG9nO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gaW5zZXJ0IHF1ZXJ5LCB3aGljaCBjb250YWlucyB0aGUganVzdCBpbnNlcnRlZCBpZC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZpZWxkIG5hbWUuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRJbnNlcnRJZEZpZWxkKCkge1xuICAgIHJldHVybiAnaW5zZXJ0SWQnO1xuICB9XG5cbiAgZ2V0VW5pcXVlQ29uc3RyYWludEVycm9yTWVzc2FnZShmaWVsZCkge1xuICAgIGxldCBtZXNzYWdlID0gZmllbGQgPyBgJHtmaWVsZH0gbXVzdCBiZSB1bmlxdWVgIDogJ011c3QgYmUgdW5pcXVlJztcblxuICAgIGlmIChmaWVsZCAmJiB0aGlzLm1vZGVsKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLm1vZGVsLnVuaXF1ZUtleXMpKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnVuaXF1ZUtleXNba2V5XS5maWVsZHMuaW5jbHVkZXMoZmllbGQucmVwbGFjZSgvXCIvZywgJycpKSkge1xuICAgICAgICAgIGlmICh0aGlzLm1vZGVsLnVuaXF1ZUtleXNba2V5XS5tc2cpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1vZGVsLnVuaXF1ZUtleXNba2V5XS5tc2c7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgaXNSYXdRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuUkFXO1xuICB9XG5cbiAgaXNWZXJzaW9uUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50eXBlID09PSBRdWVyeVR5cGVzLlZFUlNJT047XG4gIH1cblxuICBpc1Vwc2VydFF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5VUFNFUlQ7XG4gIH1cblxuICBpc0luc2VydFF1ZXJ5KHJlc3VsdHMsIG1ldGFEYXRhKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuSU5TRVJUKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBpcyBpbnNlcnQgcXVlcnkgaWYgc3FsIGNvbnRhaW5zIGluc2VydCBpbnRvXG4gICAgcmVzdWx0ID0gcmVzdWx0ICYmIHRoaXMuc3FsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnaW5zZXJ0IGludG8nKTtcblxuICAgIC8vIGlzIGluc2VydCBxdWVyeSBpZiBubyByZXN1bHRzIGFyZSBwYXNzZWQgb3IgaWYgdGhlIHJlc3VsdCBoYXMgdGhlIGluc2VydGVkIGlkXG4gICAgcmVzdWx0ID0gcmVzdWx0ICYmICghcmVzdWx0cyB8fCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzdWx0cywgdGhpcy5nZXRJbnNlcnRJZEZpZWxkKCkpKTtcblxuICAgIC8vIGlzIGluc2VydCBxdWVyeSBpZiBubyBtZXRhZGF0YSBhcmUgcGFzc2VkIG9yIGlmIHRoZSBtZXRhZGF0YSBoYXMgdGhlIGluc2VydGVkIGlkXG4gICAgcmVzdWx0ID0gcmVzdWx0ICYmICghbWV0YURhdGEgfHwgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1ldGFEYXRhLCB0aGlzLmdldEluc2VydElkRmllbGQoKSkpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGhhbmRsZUluc2VydFF1ZXJ5KHJlc3VsdHMsIG1ldGFEYXRhKSB7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIC8vIGFkZCB0aGUgaW5zZXJ0ZWQgcm93IGlkIHRvIHRoZSBpbnN0YW5jZVxuICAgICAgY29uc3QgYXV0b0luY3JlbWVudEF0dHJpYnV0ZSA9IHRoaXMubW9kZWwuYXV0b0luY3JlbWVudEF0dHJpYnV0ZTtcbiAgICAgIGxldCBpZCA9IG51bGw7XG5cbiAgICAgIGlkID0gaWQgfHwgcmVzdWx0cyAmJiByZXN1bHRzW3RoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpXTtcbiAgICAgIGlkID0gaWQgfHwgbWV0YURhdGEgJiYgbWV0YURhdGFbdGhpcy5nZXRJbnNlcnRJZEZpZWxkKCldO1xuXG4gICAgICB0aGlzLmluc3RhbmNlW2F1dG9JbmNyZW1lbnRBdHRyaWJ1dGVdID0gaWQ7XG4gICAgfVxuICB9XG5cbiAgaXNTaG93VGFibGVzUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50eXBlID09PSBRdWVyeVR5cGVzLlNIT1dUQUJMRVM7XG4gIH1cblxuICBoYW5kbGVTaG93VGFibGVzUXVlcnkocmVzdWx0cykge1xuICAgIHJldHVybiBfLmZsYXR0ZW4ocmVzdWx0cy5tYXAocmVzdWx0U2V0ID0+IF8udmFsdWVzKHJlc3VsdFNldCkpKTtcbiAgfVxuXG4gIGlzU2hvd0luZGV4ZXNRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuU0hPV0lOREVYRVM7XG4gIH1cblxuICBpc1Nob3dDb25zdHJhaW50c1F1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5TSE9XQ09OU1RSQUlOVFM7XG4gIH1cblxuICBpc0Rlc2NyaWJlUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50eXBlID09PSBRdWVyeVR5cGVzLkRFU0NSSUJFO1xuICB9XG5cbiAgaXNTZWxlY3RRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuU0VMRUNUO1xuICB9XG5cbiAgaXNCdWxrVXBkYXRlUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50eXBlID09PSBRdWVyeVR5cGVzLkJVTEtVUERBVEU7XG4gIH1cblxuICBpc0J1bGtEZWxldGVRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuQlVMS0RFTEVURTtcbiAgfVxuXG4gIGlzRm9yZWlnbktleXNRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuRk9SRUlHTktFWVM7XG4gIH1cblxuICBpc1VwZGF0ZVF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5VUERBVEU7XG4gIH1cblxuICBoYW5kbGVTZWxlY3RRdWVyeShyZXN1bHRzKSB7XG4gICAgbGV0IHJlc3VsdCA9IG51bGw7XG5cbiAgICAvLyBNYXAgcmF3IGZpZWxkcyB0byBuYW1lcyBpZiBhIG1hcHBpbmcgaXMgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5vcHRpb25zLmZpZWxkTWFwKSB7XG4gICAgICBjb25zdCBmaWVsZE1hcCA9IHRoaXMub3B0aW9ucy5maWVsZE1hcDtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4gXy5yZWR1Y2UoZmllbGRNYXAsIChyZXN1bHQsIG5hbWUsIGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHRbZmllbGRdICE9PSB1bmRlZmluZWQgJiYgbmFtZSAhPT0gZmllbGQpIHtcbiAgICAgICAgICByZXN1bHRbbmFtZV0gPSByZXN1bHRbZmllbGRdO1xuICAgICAgICAgIGRlbGV0ZSByZXN1bHRbZmllbGRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LCByZXN1bHQpKTtcbiAgICB9XG5cbiAgICAvLyBSYXcgcXVlcmllc1xuICAgIGlmICh0aGlzLm9wdGlvbnMucmF3KSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICBsZXQgbyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlc3VsdCkge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgICAgICAgICBvW2tleV0gPSByZXN1bHRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5lc3QpIHtcbiAgICAgICAgICBvID0gRG90LnRyYW5zZm9ybShvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvO1xuICAgICAgfSk7XG4gICAgLy8gUXVlcmllcyB3aXRoIGluY2x1ZGVcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5oYXNKb2luID09PSB0cnVlKSB7XG4gICAgICByZXN1bHRzID0gQWJzdHJhY3RRdWVyeS5fZ3JvdXBKb2luRGF0YShyZXN1bHRzLCB7XG4gICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxuICAgICAgICBpbmNsdWRlTWFwOiB0aGlzLm9wdGlvbnMuaW5jbHVkZU1hcCxcbiAgICAgICAgaW5jbHVkZU5hbWVzOiB0aGlzLm9wdGlvbnMuaW5jbHVkZU5hbWVzXG4gICAgICB9LCB7XG4gICAgICAgIGNoZWNrRXhpc3Rpbmc6IHRoaXMub3B0aW9ucy5oYXNNdWx0aUFzc29jaWF0aW9uXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0ID0gdGhpcy5tb2RlbC5idWxrQnVpbGQocmVzdWx0cywge1xuICAgICAgICBpc05ld1JlY29yZDogZmFsc2UsXG4gICAgICAgIGluY2x1ZGU6IHRoaXMub3B0aW9ucy5pbmNsdWRlLFxuICAgICAgICBpbmNsdWRlTmFtZXM6IHRoaXMub3B0aW9ucy5pbmNsdWRlTmFtZXMsXG4gICAgICAgIGluY2x1ZGVNYXA6IHRoaXMub3B0aW9ucy5pbmNsdWRlTWFwLFxuICAgICAgICBpbmNsdWRlVmFsaWRhdGVkOiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVzOiB0aGlzLm9wdGlvbnMub3JpZ2luYWxBdHRyaWJ1dGVzIHx8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzLFxuICAgICAgICByYXc6IHRydWVcbiAgICAgIH0pO1xuICAgIC8vIFJlZ3VsYXIgcXVlcmllc1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLm1vZGVsLmJ1bGtCdWlsZChyZXN1bHRzLCB7XG4gICAgICAgIGlzTmV3UmVjb3JkOiBmYWxzZSxcbiAgICAgICAgcmF3OiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVzOiB0aGlzLm9wdGlvbnMub3JpZ2luYWxBdHRyaWJ1dGVzIHx8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gdGhlIGZpcnN0IHJlYWwgbW9kZWwgaW5zdGFuY2UgaWYgb3B0aW9ucy5wbGFpbiBpcyBzZXQgKGUuZy4gTW9kZWwuZmluZClcbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWluKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQubGVuZ3RoID09PSAwID8gbnVsbCA6IHJlc3VsdFswXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlzU2hvd09yRGVzY3JpYmVRdWVyeSgpIHtcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG5cbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdzaG93Jyk7XG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuc3FsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZGVzY3JpYmUnKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpc0NhbGxRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdjYWxsJyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNxbFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBkZWJ1Z0NvbnRleHRcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHBhcmFtZXRlcnNcbiAgICogQHByb3RlY3RlZFxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gY2FsbCBhZnRlciB0aGUgcXVlcnkgd2FzIGNvbXBsZXRlZC5cbiAgICovXG4gIF9sb2dRdWVyeShzcWwsIGRlYnVnQ29udGV4dCwgcGFyYW1ldGVycykge1xuICAgIGNvbnN0IHsgY29ubmVjdGlvbiwgb3B0aW9ucyB9ID0gdGhpcztcbiAgICBjb25zdCBiZW5jaG1hcmsgPSB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmJlbmNobWFyayB8fCBvcHRpb25zLmJlbmNobWFyaztcbiAgICBjb25zdCBsb2dRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmxvZ1F1ZXJ5UGFyYW1ldGVycyB8fCBvcHRpb25zLmxvZ1F1ZXJ5UGFyYW1ldGVycztcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGxldCBsb2dQYXJhbWV0ZXIgPSAnJztcbiAgICBcbiAgICBpZiAobG9nUXVlcnlQYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnMpIHtcbiAgICAgIGNvbnN0IGRlbGltaXRlciA9IHNxbC5lbmRzV2l0aCgnOycpID8gJycgOiAnOyc7XG4gICAgICBsZXQgcGFyYW1TdHI7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSkge1xuICAgICAgICBwYXJhbVN0ciA9IHBhcmFtZXRlcnMubWFwKHA9PkpTT04uc3RyaW5naWZ5KHApKS5qb2luKCcsICcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1TdHIgPSBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJzKTtcbiAgICAgIH1cbiAgICAgIGxvZ1BhcmFtZXRlciA9IGAke2RlbGltaXRlcn0gJHtwYXJhbVN0cn1gO1xuICAgIH1cbiAgICBjb25zdCBmbXQgPSBgKCR7Y29ubmVjdGlvbi51dWlkIHx8ICdkZWZhdWx0J30pOiAke3NxbH0ke2xvZ1BhcmFtZXRlcn1gO1xuICAgIGNvbnN0IG1zZyA9IGBFeGVjdXRpbmcgJHtmbXR9YDtcbiAgICBkZWJ1Z0NvbnRleHQobXNnKTtcbiAgICBpZiAoIWJlbmNobWFyaykge1xuICAgICAgdGhpcy5zZXF1ZWxpemUubG9nKGBFeGVjdXRpbmcgJHtmbXR9YCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBhZnRlck1zZyA9IGBFeGVjdXRlZCAke2ZtdH1gO1xuICAgICAgZGVidWdDb250ZXh0KGFmdGVyTXNnKTtcbiAgICAgIGlmIChiZW5jaG1hcmspIHtcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUubG9nKGFmdGVyTXNnLCBEYXRlLm5vdygpIC0gc3RhcnRUaW1lLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0YWtlcyB0aGUgcmVzdWx0IG9mIHRoZSBxdWVyeSBleGVjdXRpb24gYW5kIGdyb3Vwc1xuICAgKiB0aGUgYXNzb2NpYXRlZCBkYXRhIGJ5IHRoZSBjYWxsZWUuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqICAgZ3JvdXBKb2luRGF0YShbXG4gICAqICAgICB7XG4gICAqICAgICAgIHNvbWU6ICdkYXRhJyxcbiAgICogICAgICAgaWQ6IDEsXG4gICAqICAgICAgIGFzc29jaWF0aW9uOiB7IGZvbzogJ2JhcicsIGlkOiAxIH1cbiAgICogICAgIH0sIHtcbiAgICogICAgICAgc29tZTogJ2RhdGEnLFxuICAgKiAgICAgICBpZDogMSxcbiAgICogICAgICAgYXNzb2NpYXRpb246IHsgZm9vOiAnYmFyJywgaWQ6IDIgfVxuICAgKiAgICAgfSwge1xuICAgKiAgICAgICBzb21lOiAnZGF0YScsXG4gICAqICAgICAgIGlkOiAxLFxuICAgKiAgICAgICBhc3NvY2lhdGlvbjogeyBmb286ICdiYXInLCBpZDogMyB9XG4gICAqICAgICB9XG4gICAqICAgXSlcbiAgICpcbiAgICogUmVzdWx0OlxuICAgKiAgIFNvbWV0aGluZyBsaWtlIHRoaXM6XG4gICAqXG4gICAqICAgW1xuICAgKiAgICAge1xuICAgKiAgICAgICBzb21lOiAnZGF0YScsXG4gICAqICAgICAgIGlkOiAxLFxuICAgKiAgICAgICBhc3NvY2lhdGlvbjogW1xuICAgKiAgICAgICAgIHsgZm9vOiAnYmFyJywgaWQ6IDEgfSxcbiAgICogICAgICAgICB7IGZvbzogJ2JhcicsIGlkOiAyIH0sXG4gICAqICAgICAgICAgeyBmb286ICdiYXInLCBpZDogMyB9XG4gICAqICAgICAgIF1cbiAgICogICAgIH1cbiAgICogICBdXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHJvd3NcbiAgICogQHBhcmFtIHtPYmplY3R9IGluY2x1ZGVPcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgX2dyb3VwSm9pbkRhdGEocm93cywgaW5jbHVkZU9wdGlvbnMsIG9wdGlvbnMpIHtcblxuICAgIC8qXG4gICAgICogQXNzdW1wdGlvbnNcbiAgICAgKiBJRCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGZpcnN0IGZpZWxkXG4gICAgICogQWxsIGZpZWxkcyBmb3IgYSBsZXZlbCBpcyBncm91cGVkIGluIHRoZSBzYW1lIHNldCAoaS5lLiBQYW5lbC5pZCwgVGFzay5pZCwgUGFuZWwudGl0bGUgaXMgbm90IHBvc3NpYmxlKVxuICAgICAqIFBhcmVudCBrZXlzIHdpbGwgYmUgc2VlbiBiZWZvcmUgYW55IGluY2x1ZGUvY2hpbGQga2V5c1xuICAgICAqIFByZXZpb3VzIHNldCB3b24ndCBuZWNlc3NhcmlseSBiZSBwYXJlbnQgc2V0IChvbmUgcGFyZW50IGNvdWxkIGhhdmUgdHdvIGNoaWxkcmVuLCBvbmUgY2hpbGQgd291bGQgdGhlbiBiZSBwcmV2aW91cyBzZXQgZm9yIHRoZSBvdGhlcilcbiAgICAgKi9cblxuICAgIC8qXG4gICAgICogQXV0aG9yIChNSCkgY29tbWVudDogVGhpcyBjb2RlIGlzIGFuIHVucmVhZGFibGUgbWVzcywgYnV0IGl0J3MgcGVyZm9ybWFudC5cbiAgICAgKiBncm91cEpvaW5EYXRhIGlzIGEgcGVyZm9ybWFuY2UgY3JpdGljYWwgZnVuY3Rpb24gc28gd2UgcHJpb3JpdGl6ZSBwZXJmIG92ZXIgcmVhZGFiaWxpdHkuXG4gICAgICovXG4gICAgaWYgKCFyb3dzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIEdlbmVyaWMgbG9vcGluZ1xuICAgIGxldCBpO1xuICAgIGxldCBsZW5ndGg7XG4gICAgbGV0ICRpO1xuICAgIGxldCAkbGVuZ3RoO1xuICAgIC8vIFJvdyBzcGVjaWZpYyBsb29waW5nXG4gICAgbGV0IHJvd3NJO1xuICAgIGxldCByb3c7XG4gICAgY29uc3Qgcm93c0xlbmd0aCA9IHJvd3MubGVuZ3RoO1xuICAgIC8vIEtleSBzcGVjaWZpYyBsb29waW5nXG4gICAgbGV0IGtleXM7XG4gICAgbGV0IGtleTtcbiAgICBsZXQga2V5STtcbiAgICBsZXQga2V5TGVuZ3RoO1xuICAgIGxldCBwcmV2S2V5O1xuICAgIGxldCB2YWx1ZXM7XG4gICAgbGV0IHRvcFZhbHVlcztcbiAgICBsZXQgdG9wRXhpc3RzO1xuICAgIGNvbnN0IGNoZWNrRXhpc3RpbmcgPSBvcHRpb25zLmNoZWNrRXhpc3Rpbmc7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0byBkZWR1cGxpY2F0ZSB3ZSBjYW4gcHJlLWFsbG9jYXRlIHRoZSByZXN1bHRpbmcgYXJyYXlcbiAgICBsZXQgaXRlbUhhc2g7XG4gICAgbGV0IHBhcmVudEhhc2g7XG4gICAgbGV0IHRvcEhhc2g7XG4gICAgY29uc3QgcmVzdWx0cyA9IGNoZWNrRXhpc3RpbmcgPyBbXSA6IG5ldyBBcnJheShyb3dzTGVuZ3RoKTtcbiAgICBjb25zdCByZXN1bHRNYXAgPSB7fTtcbiAgICBjb25zdCBpbmNsdWRlTWFwID0ge307XG4gICAgLy8gUmVzdWx0IHZhcmlhYmxlcyBmb3IgdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zXG4gICAgbGV0ICRrZXlQcmVmaXg7XG4gICAgbGV0ICRrZXlQcmVmaXhTdHJpbmc7XG4gICAgbGV0ICRwcmV2S2V5UHJlZml4U3RyaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgbGV0ICRwcmV2S2V5UHJlZml4O1xuICAgIGxldCAkbGFzdEtleVByZWZpeDtcbiAgICBsZXQgJGN1cnJlbnQ7XG4gICAgbGV0ICRwYXJlbnQ7XG4gICAgLy8gTWFwIGVhY2gga2V5IHRvIGFuIGluY2x1ZGUgb3B0aW9uXG4gICAgbGV0IHByZXZpb3VzUGllY2U7XG4gICAgY29uc3QgYnVpbGRJbmNsdWRlTWFwID0gcGllY2UgPT4ge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgkY3VycmVudC5pbmNsdWRlTWFwLCBwaWVjZSkpIHtcbiAgICAgICAgaW5jbHVkZU1hcFtrZXldID0gJGN1cnJlbnQgPSAkY3VycmVudC5pbmNsdWRlTWFwW3BpZWNlXTtcbiAgICAgICAgaWYgKHByZXZpb3VzUGllY2UpIHtcbiAgICAgICAgICBwcmV2aW91c1BpZWNlID0gYCR7cHJldmlvdXNQaWVjZX0uJHtwaWVjZX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzUGllY2UgPSBwaWVjZTtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdWRlTWFwW3ByZXZpb3VzUGllY2VdID0gJGN1cnJlbnQ7XG4gICAgICB9XG4gICAgfTtcbiAgICAvLyBDYWxjdWxhdGUgdGhlIHN0cmluZyBwcmVmaXggb2YgYSBrZXkgKCdVc2VyLlJlc3VsdHMnIGZvciAnVXNlci5SZXN1bHRzLmlkJylcbiAgICBjb25zdCBrZXlQcmVmaXhTdHJpbmdNZW1vID0ge307XG4gICAgY29uc3Qga2V5UHJlZml4U3RyaW5nID0gKGtleSwgbWVtbykgPT4ge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWVtbywga2V5KSkge1xuICAgICAgICBtZW1vW2tleV0gPSBrZXkuc3Vic3RyKDAsIGtleS5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vW2tleV07XG4gICAgfTtcbiAgICAvLyBSZW1vdmVzIHRoZSBwcmVmaXggZnJvbSBhIGtleSAoJ2lkJyBmb3IgJ1VzZXIuUmVzdWx0cy5pZCcpXG4gICAgY29uc3QgcmVtb3ZlS2V5UHJlZml4TWVtbyA9IHt9O1xuICAgIGNvbnN0IHJlbW92ZUtleVByZWZpeCA9IGtleSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZW1vdmVLZXlQcmVmaXhNZW1vLCBrZXkpKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0ga2V5Lmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgIHJlbW92ZUtleVByZWZpeE1lbW9ba2V5XSA9IGtleS5zdWJzdHIoaW5kZXggPT09IC0xID8gMCA6IGluZGV4ICsgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVtb3ZlS2V5UHJlZml4TWVtb1trZXldO1xuICAgIH07XG4gICAgLy8gQ2FsY3VsYXRlcyB0aGUgYXJyYXkgcHJlZml4IG9mIGEga2V5IChbJ1VzZXInLCAnUmVzdWx0cyddIGZvciAnVXNlci5SZXN1bHRzLmlkJylcbiAgICBjb25zdCBrZXlQcmVmaXhNZW1vID0ge307XG4gICAgY29uc3Qga2V5UHJlZml4ID0ga2V5ID0+IHtcbiAgICAgIC8vIFdlIHVzZSBhIGRvdWJsZSBtZW1vIGFuZCBrZXlQcmVmaXhTdHJpbmcgc28gdGhhdCBkaWZmZXJlbnQga2V5cyB3aXRoIHRoZSBzYW1lIHByZWZpeCB3aWxsIHJlY2VpdmUgdGhlIHNhbWUgYXJyYXkgaW5zdGVhZCBvZiBkaWZmZXJuZXQgYXJyYXlzIHdpdGggZXF1YWwgdmFsdWVzXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrZXlQcmVmaXhNZW1vLCBrZXkpKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeFN0cmluZyA9IGtleVByZWZpeFN0cmluZyhrZXksIGtleVByZWZpeFN0cmluZ01lbW8pO1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrZXlQcmVmaXhNZW1vLCBwcmVmaXhTdHJpbmcpKSB7XG4gICAgICAgICAga2V5UHJlZml4TWVtb1twcmVmaXhTdHJpbmddID0gcHJlZml4U3RyaW5nID8gcHJlZml4U3RyaW5nLnNwbGl0KCcuJykgOiBbXTtcbiAgICAgICAgfVxuICAgICAgICBrZXlQcmVmaXhNZW1vW2tleV0gPSBrZXlQcmVmaXhNZW1vW3ByZWZpeFN0cmluZ107XG4gICAgICB9XG4gICAgICByZXR1cm4ga2V5UHJlZml4TWVtb1trZXldO1xuICAgIH07XG4gICAgLy8gQ2FsY3VhdGUgdGhlIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkgcHJlZml4ICgnUmVzdWx0cycgZm9yICdVc2VyLlJlc3VsdHMuaWQnKVxuICAgIGNvbnN0IGxhc3RLZXlQcmVmaXhNZW1vID0ge307XG4gICAgY29uc3QgbGFzdEtleVByZWZpeCA9IGtleSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXN0S2V5UHJlZml4TWVtbywga2V5KSkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBrZXlQcmVmaXgoa2V5KTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gcHJlZml4Lmxlbmd0aDtcblxuICAgICAgICBsYXN0S2V5UHJlZml4TWVtb1trZXldID0gIWxlbmd0aCA/ICcnIDogcHJlZml4W2xlbmd0aCAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhc3RLZXlQcmVmaXhNZW1vW2tleV07XG4gICAgfTtcbiAgICBjb25zdCBnZXRVbmlxdWVLZXlBdHRyaWJ1dGVzID0gbW9kZWwgPT4ge1xuICAgICAgbGV0IHVuaXF1ZUtleUF0dHJpYnV0ZXMgPSBfLmNoYWluKG1vZGVsLnVuaXF1ZUtleXMpO1xuICAgICAgdW5pcXVlS2V5QXR0cmlidXRlcyA9IHVuaXF1ZUtleUF0dHJpYnV0ZXNcbiAgICAgICAgLnJlc3VsdChgJHt1bmlxdWVLZXlBdHRyaWJ1dGVzLmZpbmRLZXkoKX0uZmllbGRzYClcbiAgICAgICAgLm1hcChmaWVsZCA9PiBfLmZpbmRLZXkobW9kZWwuYXR0cmlidXRlcywgY2hyID0+IGNoci5maWVsZCA9PT0gZmllbGQpKVxuICAgICAgICAudmFsdWUoKTtcblxuICAgICAgcmV0dXJuIHVuaXF1ZUtleUF0dHJpYnV0ZXM7XG4gICAgfTtcbiAgICBjb25zdCBzdHJpbmdpZnkgPSBvYmogPT4gb2JqIGluc3RhbmNlb2YgQnVmZmVyID8gb2JqLnRvU3RyaW5nKCdoZXgnKSA6IG9iajtcbiAgICBsZXQgcHJpbWFyeUtleUF0dHJpYnV0ZXM7XG4gICAgbGV0IHVuaXF1ZUtleUF0dHJpYnV0ZXM7XG4gICAgbGV0IHByZWZpeDtcblxuICAgIGZvciAocm93c0kgPSAwOyByb3dzSSA8IHJvd3NMZW5ndGg7IHJvd3NJKyspIHtcbiAgICAgIHJvdyA9IHJvd3Nbcm93c0ldO1xuXG4gICAgICAvLyBLZXlzIGFyZSB0aGUgc2FtZSBmb3IgYWxsIHJvd3MsIHNvIG9ubHkgbmVlZCB0byBjb21wdXRlIHRoZW0gb24gdGhlIGZpcnN0IHJvd1xuICAgICAgaWYgKHJvd3NJID09PSAwKSB7XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgICBrZXlMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoZWNrRXhpc3RpbmcpIHtcbiAgICAgICAgdG9wRXhpc3RzID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0b3AgbGV2ZWwgaGFzaCBrZXkgKHRoaXMgaXMgdXN1YWxseSBqdXN0IHRoZSBwcmltYXJ5IGtleSB2YWx1ZXMpXG4gICAgICAgICRsZW5ndGggPSBpbmNsdWRlT3B0aW9ucy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgIHRvcEhhc2ggPSAnJztcbiAgICAgICAgaWYgKCRsZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b3BIYXNoID0gc3RyaW5naWZ5KHJvd1tpbmNsdWRlT3B0aW9ucy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlc1swXV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCRsZW5ndGggPiAxKSB7XG4gICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGxlbmd0aDsgJGkrKykge1xuICAgICAgICAgICAgdG9wSGFzaCArPSBzdHJpbmdpZnkocm93W2luY2x1ZGVPcHRpb25zLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGVzWyRpXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghXy5pc0VtcHR5KGluY2x1ZGVPcHRpb25zLm1vZGVsLnVuaXF1ZUtleXMpKSB7XG4gICAgICAgICAgdW5pcXVlS2V5QXR0cmlidXRlcyA9IGdldFVuaXF1ZUtleUF0dHJpYnV0ZXMoaW5jbHVkZU9wdGlvbnMubW9kZWwpO1xuICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IHVuaXF1ZUtleUF0dHJpYnV0ZXMubGVuZ3RoOyAkaSsrKSB7XG4gICAgICAgICAgICB0b3BIYXNoICs9IHJvd1t1bmlxdWVLZXlBdHRyaWJ1dGVzWyRpXV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRvcFZhbHVlcyA9IHZhbHVlcyA9IHt9O1xuICAgICAgJHByZXZLZXlQcmVmaXggPSB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGtleUkgPSAwOyBrZXlJIDwga2V5TGVuZ3RoOyBrZXlJKyspIHtcbiAgICAgICAga2V5ID0ga2V5c1trZXlJXTtcblxuICAgICAgICAvLyBUaGUgc3RyaW5nIHByZWZpeCBpc24ndCBhY3R1YWx5IG5lZWRlZFxuICAgICAgICAvLyBXZSB1c2UgaXQgc28ga2V5UHJlZml4IGZvciBkaWZmZXJlbnQga2V5cyB3aWxsIHJlc29sdmUgdG8gdGhlIHNhbWUgYXJyYXkgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHByZWZpeFxuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheT9cbiAgICAgICAgJGtleVByZWZpeFN0cmluZyA9IGtleVByZWZpeFN0cmluZyhrZXksIGtleVByZWZpeFN0cmluZ01lbW8pO1xuICAgICAgICAka2V5UHJlZml4ID0ga2V5UHJlZml4KGtleSk7XG5cbiAgICAgICAgLy8gT24gdGhlIGZpcnN0IHJvdyB3ZSBjb21wdXRlIHRoZSBpbmNsdWRlTWFwXG4gICAgICAgIGlmIChyb3dzSSA9PT0gMCAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluY2x1ZGVNYXAsIGtleSkpIHtcbiAgICAgICAgICBpZiAoISRrZXlQcmVmaXgubGVuZ3RoKSB7XG4gICAgICAgICAgICBpbmNsdWRlTWFwW2tleV0gPSBpbmNsdWRlTWFwWycnXSA9IGluY2x1ZGVPcHRpb25zO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkY3VycmVudCA9IGluY2x1ZGVPcHRpb25zO1xuICAgICAgICAgICAgcHJldmlvdXNQaWVjZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICRrZXlQcmVmaXguZm9yRWFjaChidWlsZEluY2x1ZGVNYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbmQgb2Yga2V5IHNldFxuICAgICAgICBpZiAoJHByZXZLZXlQcmVmaXggIT09IHVuZGVmaW5lZCAmJiAkcHJldktleVByZWZpeCAhPT0gJGtleVByZWZpeCkge1xuICAgICAgICAgIGlmIChjaGVja0V4aXN0aW5nKSB7XG4gICAgICAgICAgICAvLyBDb21wdXRlIGhhc2gga2V5IGZvciB0aGlzIHNldCBpbnN0YW5jZVxuICAgICAgICAgICAgLy8gVE9ETzogT3B0aW1pemVcbiAgICAgICAgICAgIGxlbmd0aCA9ICRwcmV2S2V5UHJlZml4Lmxlbmd0aDtcbiAgICAgICAgICAgICRwYXJlbnQgPSBudWxsO1xuICAgICAgICAgICAgcGFyZW50SGFzaCA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gJHBhcmVudCA/IGAkeyRwYXJlbnR9LiR7JHByZXZLZXlQcmVmaXhbaV19YCA6ICRwcmV2S2V5UHJlZml4W2ldO1xuICAgICAgICAgICAgICAgIHByaW1hcnlLZXlBdHRyaWJ1dGVzID0gaW5jbHVkZU1hcFtwcmVmaXhdLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgICRsZW5ndGggPSBwcmltYXJ5S2V5QXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaXRlbUhhc2ggPSBwcmVmaXg7XG4gICAgICAgICAgICAgICAgaWYgKCRsZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1IYXNoICs9IHN0cmluZ2lmeShyb3dbYCR7cHJlZml4fS4ke3ByaW1hcnlLZXlBdHRyaWJ1dGVzWzBdfWBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoJGxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICRpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUhhc2ggKz0gc3RyaW5naWZ5KHJvd1tgJHtwcmVmaXh9LiR7cHJpbWFyeUtleUF0dHJpYnV0ZXNbJGldfWBdKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIV8uaXNFbXB0eShpbmNsdWRlTWFwW3ByZWZpeF0ubW9kZWwudW5pcXVlS2V5cykpIHtcbiAgICAgICAgICAgICAgICAgIHVuaXF1ZUtleUF0dHJpYnV0ZXMgPSBnZXRVbmlxdWVLZXlBdHRyaWJ1dGVzKGluY2x1ZGVNYXBbcHJlZml4XS5tb2RlbCk7XG4gICAgICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCB1bmlxdWVLZXlBdHRyaWJ1dGVzLmxlbmd0aDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtSGFzaCArPSByb3dbYCR7cHJlZml4fS4ke3VuaXF1ZUtleUF0dHJpYnV0ZXNbJGldfWBdO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEhhc2gpIHtcbiAgICAgICAgICAgICAgICAgIHBhcmVudEhhc2ggPSB0b3BIYXNoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW1IYXNoID0gcGFyZW50SGFzaCArIGl0ZW1IYXNoO1xuICAgICAgICAgICAgICAgICRwYXJlbnQgPSBwcmVmaXg7XG4gICAgICAgICAgICAgICAgaWYgKGkgPCBsZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICBwYXJlbnRIYXNoID0gaXRlbUhhc2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpdGVtSGFzaCA9IHRvcEhhc2g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtSGFzaCA9PT0gdG9wSGFzaCkge1xuICAgICAgICAgICAgICBpZiAoIXJlc3VsdE1hcFtpdGVtSGFzaF0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRNYXBbaXRlbUhhc2hdID0gdmFsdWVzO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvcEV4aXN0cyA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXJlc3VsdE1hcFtpdGVtSGFzaF0pIHtcbiAgICAgICAgICAgICAgJHBhcmVudCA9IHJlc3VsdE1hcFtwYXJlbnRIYXNoXTtcbiAgICAgICAgICAgICAgJGxhc3RLZXlQcmVmaXggPSBsYXN0S2V5UHJlZml4KHByZXZLZXkpO1xuXG4gICAgICAgICAgICAgIGlmIChpbmNsdWRlTWFwW3ByZXZLZXldLmFzc29jaWF0aW9uLmlzU2luZ2xlQXNzb2NpYXRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoJHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgJHBhcmVudFskbGFzdEtleVByZWZpeF0gPSByZXN1bHRNYXBbaXRlbUhhc2hdID0gdmFsdWVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoISRwYXJlbnRbJGxhc3RLZXlQcmVmaXhdKSB7XG4gICAgICAgICAgICAgICAgICAkcGFyZW50WyRsYXN0S2V5UHJlZml4XSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkcGFyZW50WyRsYXN0S2V5UHJlZml4XS5wdXNoKHJlc3VsdE1hcFtpdGVtSGFzaF0gPSB2YWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJlc2V0IHZhbHVlc1xuICAgICAgICAgICAgdmFsdWVzID0ge307XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIGNoZWNrRXhpc3RpbmcgaXMgZmFsc2UgaXQncyBiZWNhdXNlIHRoZXJlJ3Mgb25seSAxOjEgYXNzb2NpYXRpb25zIGluIHRoaXMgcXVlcnlcbiAgICAgICAgICAgIC8vIEhvd2V2ZXIgd2Ugc3RpbGwgbmVlZCB0byBtYXAgb250byB0aGUgYXBwcm9wcmlhdGUgcGFyZW50XG4gICAgICAgICAgICAvLyBGb3IgMToxIHdlIG1hcCBmb3J3YXJkLCBpbml0aWFsaXppbmcgdGhlIHZhbHVlIG9iamVjdCBvbiB0aGUgcGFyZW50IHRvIGJlIGZpbGxlZCBpbiB0aGUgbmV4dCBpdGVyYXRpb25zIG9mIHRoZSBsb29wXG4gICAgICAgICAgICAkY3VycmVudCA9IHRvcFZhbHVlcztcbiAgICAgICAgICAgIGxlbmd0aCA9ICRrZXlQcmVmaXgubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGxlbmd0aCkge1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWVzID0gJGN1cnJlbnRbJGtleVByZWZpeFtpXV0gPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJGN1cnJlbnQgPSAkY3VycmVudFska2V5UHJlZml4W2ldXSB8fCB7fTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuZCBvZiBpdGVyYXRpb24sIHNldCB2YWx1ZSBhbmQgc2V0IHByZXYgdmFsdWVzIChmb3IgbmV4dCBpdGVyYXRpb24pXG4gICAgICAgIHZhbHVlc1tyZW1vdmVLZXlQcmVmaXgoa2V5KV0gPSByb3dba2V5XTtcbiAgICAgICAgcHJldktleSA9IGtleTtcbiAgICAgICAgJHByZXZLZXlQcmVmaXggPSAka2V5UHJlZml4O1xuICAgICAgICAkcHJldktleVByZWZpeFN0cmluZyA9ICRrZXlQcmVmaXhTdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGVja0V4aXN0aW5nKSB7XG4gICAgICAgIGxlbmd0aCA9ICRwcmV2S2V5UHJlZml4Lmxlbmd0aDtcbiAgICAgICAgJHBhcmVudCA9IG51bGw7XG4gICAgICAgIHBhcmVudEhhc2ggPSBudWxsO1xuXG4gICAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHByZWZpeCA9ICRwYXJlbnQgPyBgJHskcGFyZW50fS4keyRwcmV2S2V5UHJlZml4W2ldfWAgOiAkcHJldktleVByZWZpeFtpXTtcbiAgICAgICAgICAgIHByaW1hcnlLZXlBdHRyaWJ1dGVzID0gaW5jbHVkZU1hcFtwcmVmaXhdLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgJGxlbmd0aCA9IHByaW1hcnlLZXlBdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICAgICAgICAgIGl0ZW1IYXNoID0gcHJlZml4O1xuICAgICAgICAgICAgaWYgKCRsZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgaXRlbUhhc2ggKz0gc3RyaW5naWZ5KHJvd1tgJHtwcmVmaXh9LiR7cHJpbWFyeUtleUF0dHJpYnV0ZXNbMF19YF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoJGxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGxlbmd0aDsgJGkrKykge1xuICAgICAgICAgICAgICAgIGl0ZW1IYXNoICs9IHN0cmluZ2lmeShyb3dbYCR7cHJlZml4fS4ke3ByaW1hcnlLZXlBdHRyaWJ1dGVzWyRpXX1gXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFfLmlzRW1wdHkoaW5jbHVkZU1hcFtwcmVmaXhdLm1vZGVsLnVuaXF1ZUtleXMpKSB7XG4gICAgICAgICAgICAgIHVuaXF1ZUtleUF0dHJpYnV0ZXMgPSBnZXRVbmlxdWVLZXlBdHRyaWJ1dGVzKGluY2x1ZGVNYXBbcHJlZml4XS5tb2RlbCk7XG4gICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IHVuaXF1ZUtleUF0dHJpYnV0ZXMubGVuZ3RoOyAkaSsrKSB7XG4gICAgICAgICAgICAgICAgaXRlbUhhc2ggKz0gcm93W2Ake3ByZWZpeH0uJHt1bmlxdWVLZXlBdHRyaWJ1dGVzWyRpXX1gXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwYXJlbnRIYXNoKSB7XG4gICAgICAgICAgICAgIHBhcmVudEhhc2ggPSB0b3BIYXNoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdGVtSGFzaCA9IHBhcmVudEhhc2ggKyBpdGVtSGFzaDtcbiAgICAgICAgICAgICRwYXJlbnQgPSBwcmVmaXg7XG4gICAgICAgICAgICBpZiAoaSA8IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgcGFyZW50SGFzaCA9IGl0ZW1IYXNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtSGFzaCA9IHRvcEhhc2g7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbUhhc2ggPT09IHRvcEhhc2gpIHtcbiAgICAgICAgICBpZiAoIXJlc3VsdE1hcFtpdGVtSGFzaF0pIHtcbiAgICAgICAgICAgIHJlc3VsdE1hcFtpdGVtSGFzaF0gPSB2YWx1ZXM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvcEV4aXN0cyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFyZXN1bHRNYXBbaXRlbUhhc2hdKSB7XG4gICAgICAgICAgJHBhcmVudCA9IHJlc3VsdE1hcFtwYXJlbnRIYXNoXTtcbiAgICAgICAgICAkbGFzdEtleVByZWZpeCA9IGxhc3RLZXlQcmVmaXgocHJldktleSk7XG5cbiAgICAgICAgICBpZiAoaW5jbHVkZU1hcFtwcmV2S2V5XS5hc3NvY2lhdGlvbi5pc1NpbmdsZUFzc29jaWF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoJHBhcmVudCkge1xuICAgICAgICAgICAgICAkcGFyZW50WyRsYXN0S2V5UHJlZml4XSA9IHJlc3VsdE1hcFtpdGVtSGFzaF0gPSB2YWx1ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghJHBhcmVudFskbGFzdEtleVByZWZpeF0pIHtcbiAgICAgICAgICAgICAgJHBhcmVudFskbGFzdEtleVByZWZpeF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRwYXJlbnRbJGxhc3RLZXlQcmVmaXhdLnB1c2gocmVzdWx0TWFwW2l0ZW1IYXNoXSA9IHZhbHVlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdG9wRXhpc3RzKSB7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKHRvcFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdHNbcm93c0ldID0gdG9wVmFsdWVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RRdWVyeTtcbm1vZHVsZS5leHBvcnRzLkFic3RyYWN0UXVlcnkgPSBBYnN0cmFjdFF1ZXJ5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEFic3RyYWN0UXVlcnk7XG4iXX0= \ No newline at end of file diff --git a/dist/dialects/mysql/query-generator.js b/dist/dialects/mysql/query-generator.js index 07f38e1..6c4f04d 100644 --- a/dist/dialects/mysql/query-generator.js +++ b/dist/dialects/mysql/query-generator.js @@ -6,20 +6,24 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + const _ = require('lodash'); const Utils = require('../../utils'); @@ -36,17 +40,17 @@ const tokenCaptureRegex = /^\s*((?:([`"'])(?:(?!\2).|\2{2})*\2)|[\w\d\s]+|[().,; const foreignKeyFields = 'CONSTRAINT_NAME as constraint_name,' + 'CONSTRAINT_NAME as constraintName,' + 'CONSTRAINT_SCHEMA as constraintSchema,' + 'CONSTRAINT_SCHEMA as constraintCatalog,' + 'TABLE_NAME as tableName,' + 'TABLE_SCHEMA as tableSchema,' + 'TABLE_SCHEMA as tableCatalog,' + 'COLUMN_NAME as columnName,' + 'REFERENCED_TABLE_SCHEMA as referencedTableSchema,' + 'REFERENCED_TABLE_SCHEMA as referencedTableCatalog,' + 'REFERENCED_TABLE_NAME as referencedTableName,' + 'REFERENCED_COLUMN_NAME as referencedColumnName'; const typeWithoutDefault = new Set(['BLOB', 'TEXT', 'GEOMETRY', 'JSON']); -let MySQLQueryGenerator = -/*#__PURE__*/ -function (_AbstractQueryGenerat) { +let MySQLQueryGenerator = /*#__PURE__*/function (_AbstractQueryGenerat) { _inherits(MySQLQueryGenerator, _AbstractQueryGenerat); + var _super = _createSuper(MySQLQueryGenerator); + function MySQLQueryGenerator(options) { var _this; _classCallCheck(this, MySQLQueryGenerator); - _this = _possibleConstructorReturn(this, _getPrototypeOf(MySQLQueryGenerator).call(this, options)); + _this = _super.call(this, options); _this.OperatorMap = Object.assign({}, _this.OperatorMap, { [Op.regexp]: 'REGEXP', [Op.notRegexp]: 'NOT REGEXP' @@ -576,4 +580,4 @@ function wrapSingleQuote(identifier) { } module.exports = MySQLQueryGenerator; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9teXNxbC9xdWVyeS1nZW5lcmF0b3IuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIkFic3RyYWN0UXVlcnlHZW5lcmF0b3IiLCJ1dGlsIiwiT3AiLCJqc29uRnVuY3Rpb25SZWdleCIsImpzb25PcGVyYXRvclJlZ2V4IiwidG9rZW5DYXB0dXJlUmVnZXgiLCJmb3JlaWduS2V5RmllbGRzIiwidHlwZVdpdGhvdXREZWZhdWx0IiwiU2V0IiwiTXlTUUxRdWVyeUdlbmVyYXRvciIsIm9wdGlvbnMiLCJPcGVyYXRvck1hcCIsIk9iamVjdCIsImFzc2lnbiIsInJlZ2V4cCIsIm5vdFJlZ2V4cCIsImRhdGFiYXNlTmFtZSIsImNoYXJzZXQiLCJjb2xsYXRlIiwiZGF0YWJhc2UiLCJxdW90ZUlkZW50aWZpZXIiLCJlc2NhcGUiLCJ0cmltIiwidGFibGVOYW1lIiwiYXR0cmlidXRlcyIsImVuZ2luZSIsInJvd0Zvcm1hdCIsInByaW1hcnlLZXlzIiwiZm9yZWlnbktleXMiLCJhdHRyU3RyIiwiYXR0ciIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRhdGFUeXBlIiwibWF0Y2giLCJpbmNsdWRlcyIsInB1c2giLCJyZXBsYWNlIiwidGFibGUiLCJxdW90ZVRhYmxlIiwiYXR0cmlidXRlc0NsYXVzZSIsImpvaW4iLCJjb21tZW50IiwiY29sbGF0aW9uIiwiaW5pdGlhbEF1dG9JbmNyZW1lbnQiLCJwa1N0cmluZyIsIm1hcCIsInBrIiwidW5pcXVlS2V5cyIsImVhY2giLCJjb2x1bW5zIiwiaW5kZXhOYW1lIiwiY3VzdG9tSW5kZXgiLCJmaWVsZHMiLCJmaWVsZCIsImxlbmd0aCIsImZrZXkiLCJzY2hlbWEiLCJzY2hlbWFEZWxpbWl0ZXIiLCJhZGRTY2hlbWEiLCJfc2NoZW1hIiwiX3NjaGVtYURlbGltaXRlciIsInF1ZXJ5Iiwia2V5IiwiZGVmaW5pdGlvbiIsImF0dHJpYnV0ZVRvU1FMIiwiY29udGV4dCIsImZvcmVpZ25LZXkiLCJhdHRyaWJ1dGVOYW1lIiwiYXR0clN0cmluZyIsImNvbnN0cmFpbnRTdHJpbmciLCJhdHRyTmFtZSIsImZpbmFsUXVlcnkiLCJhdHRyQmVmb3JlIiwic210aCIsImZhY3RvcnkiLCJwcmVwZW5kIiwiSnNvbiIsImNvbmRpdGlvbnMiLCJwYXJzZUNvbmRpdGlvbk9iamVjdCIsImNvbmRpdGlvbiIsImpzb25QYXRoRXh0cmFjdGlvblF1ZXJ5IiwicGF0aCIsInRhaWwiLCJ2YWx1ZSIsInN0ciIsIl9jaGVja1ZhbGlkSnNvblN0YXRlbWVudCIsInBhdGhzIiwidG9QYXRoIiwiY29sdW1uIiwic2hpZnQiLCJmb3JtYXQiLCJDYXN0IiwidGVzdCIsInR5cGUiLCJqc29uIiwidG9TdHJpbmciLCJpbnNlcnRWYWx1ZXMiLCJ1cGRhdGVWYWx1ZXMiLCJ3aGVyZSIsIm1vZGVsIiwib25EdXBsaWNhdGUiLCJrZXlzIiwiaW5zZXJ0UXVlcnkiLCJyYXdBdHRyaWJ1dGVzIiwibGltaXQiLCJnZXRXaGVyZUNvbmRpdGlvbnMiLCJjb25zdHJhaW50TmFtZSIsInNjaGVtYU5hbWUiLCJzcWwiLCJpbmRleE5hbWVPckF0dHJpYnV0ZXMiLCJ1bmRlcnNjb3JlIiwiYXR0cmlidXRlIiwiaXNQbGFpbk9iamVjdCIsImF0dHJpYnV0ZVN0cmluZyIsImJpbmQiLCJ0ZW1wbGF0ZSIsImFsbG93TnVsbCIsImF1dG9JbmNyZW1lbnQiLCJoYXMiLCJfYmluYXJ5IiwiZGVmYXVsdFZhbHVlU2NoZW1hYmxlIiwiZGVmYXVsdFZhbHVlIiwidW5pcXVlIiwicHJpbWFyeUtleSIsImZpcnN0IiwiYWZ0ZXIiLCJyZWZlcmVuY2VzIiwiZmtOYW1lIiwib25EZWxldGUiLCJ0b1VwcGVyQ2FzZSIsIm9uVXBkYXRlIiwicmVzdWx0Iiwic3RtdCIsImN1cnJlbnRJbmRleCIsIm9wZW5pbmdCcmFja2V0cyIsImNsb3NpbmdCcmFja2V0cyIsImhhc0pzb25GdW5jdGlvbiIsImhhc0ludmFsaWRUb2tlbiIsInN0cmluZyIsInN1YnN0ciIsImZ1bmN0aW9uTWF0Y2hlcyIsImV4ZWMiLCJpbmRleE9mIiwib3BlcmF0b3JNYXRjaGVzIiwidG9rZW5NYXRjaGVzIiwiY2FwdHVyZWRUb2tlbiIsIkVycm9yIiwiY29sdW1uTmFtZSIsInF1b3RlZFNjaGVtYU5hbWUiLCJ3cmFwU2luZ2xlUXVvdGUiLCJxdW90ZWRUYWJsZU5hbWUiLCJxdW90ZWRDb2x1bW5OYW1lIiwiaWRlbnRpZmllciIsImFkZFRpY2tzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxDQUFDLEdBQUdDLE9BQU8sQ0FBQyxRQUFELENBQWpCOztBQUNBLE1BQU1DLEtBQUssR0FBR0QsT0FBTyxDQUFDLGFBQUQsQ0FBckI7O0FBQ0EsTUFBTUUsc0JBQXNCLEdBQUdGLE9BQU8sQ0FBQyw2QkFBRCxDQUF0Qzs7QUFDQSxNQUFNRyxJQUFJLEdBQUdILE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLE1BQU1JLEVBQUUsR0FBR0osT0FBTyxDQUFDLGlCQUFELENBQWxCOztBQUdBLE1BQU1LLGlCQUFpQixHQUFHLHdEQUExQjtBQUNBLE1BQU1DLGlCQUFpQixHQUFHLG9DQUExQjtBQUNBLE1BQU1DLGlCQUFpQixHQUFHLDREQUExQjtBQUNBLE1BQU1DLGdCQUFnQixHQUFHLHdDQUNyQixvQ0FEcUIsR0FFckIsd0NBRnFCLEdBR3JCLHlDQUhxQixHQUlyQiwwQkFKcUIsR0FLckIsOEJBTHFCLEdBTXJCLCtCQU5xQixHQU9yQiw0QkFQcUIsR0FRckIsbURBUnFCLEdBU3JCLG9EQVRxQixHQVVyQiwrQ0FWcUIsR0FXckIsZ0RBWEo7QUFhQSxNQUFNQyxrQkFBa0IsR0FBRyxJQUFJQyxHQUFKLENBQVEsQ0FBQyxNQUFELEVBQVMsTUFBVCxFQUFpQixVQUFqQixFQUE2QixNQUE3QixDQUFSLENBQTNCOztJQUVNQyxtQjs7Ozs7QUFDSiwrQkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFB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SixLQUFLLENBQUM0SixRQUFOLENBQWVELFVBQWYsRUFBMkIsSUFBM0IsQ0FBUDtBQUNEOztBQUVERSxNQUFNLENBQUNDLE9BQVAsR0FBaUJwSixtQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcclxuY29uc3QgQWJzdHJhY3RRdWVyeUdlbmVyYXRvciA9IHJlcXVpcmUoJy4uL2Fic3RyYWN0L3F1ZXJ5LWdlbmVyYXRvcicpO1xyXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xyXG5jb25zdCBPcCA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9ycycpO1xyXG5cclxuXHJcbmNvbnN0IGpzb25GdW5jdGlvblJlZ2V4ID0gL15cXHMqKCg/OlthLXpdK18pezAsMn1qc29uYj8oPzpfW2Etel0rKXswLDJ9KVxcKFteKV0qXFwpL2k7XHJcbmNvbnN0IGpzb25PcGVyYXRvclJlZ2V4ID0gL15cXHMqKC0+Pj98QD58PEB8XFw/W3wmXT98XFx8ezJ9fCMtKS9pO1xyXG5jb25zdCB0b2tlbkNhcHR1cmVSZWdleCA9IC9eXFxzKigoPzooW2BcIiddKSg/Oig/IVxcMikufFxcMnsyfSkqXFwyKXxbXFx3XFxkXFxzXSt8WygpLiw7Ky1dKS9pO1xyXG5jb25zdCBmb3JlaWduS2V5RmllbGRzID0gJ0NPTlNUUkFJTlRfTkFNRSBhcyBjb25zdHJhaW50X25hbWUsJ1xyXG4gICsgJ0NPTlNUUkFJTlRfTkFNRSBhcyBjb25zdHJhaW50TmFtZSwnXHJcbiAgKyAnQ09OU1RSQUlOVF9TQ0hFTUEgYXMgY29uc3RyYWludFNjaGVtYSwnXHJcbiAgKyAnQ09OU1RSQUlOVF9TQ0hFTUEgYXMgY29uc3RyYWludENhdGFsb2csJ1xyXG4gICsgJ1RBQkxFX05BTUUgYXMgdGFibGVOYW1lLCdcclxuICArICdUQUJMRV9TQ0hFTUEgYXMgdGFibGVTY2hlbWEsJ1xyXG4gICsgJ1RBQkxFX1NDSEVNQSBhcyB0YWJsZUNhdGFsb2csJ1xyXG4gICsgJ0NPTFVNTl9OQU1FIGFzIGNvbHVtbk5hbWUsJ1xyXG4gICsgJ1JFRkVSRU5DRURfVEFCTEVfU0NIRU1BIGFzIHJlZmVyZW5jZWRUYWJsZVNjaGVtYSwnXHJcbiAgKyAnUkVGRVJFTkNFRF9UQUJMRV9TQ0hFTUEgYXMgcmVmZXJlbmNlZFRhYmxlQ2F0YWxvZywnXHJcbiAgKyAnUkVGRVJFTkNFRF9UQUJMRV9OQU1FIGFzIHJlZmVyZW5jZWRUYWJsZU5hbWUsJ1xyXG4gICsgJ1JFRkVSRU5DRURfQ09MVU1OX05BTUUgYXMgcmVmZXJlbmNlZENvbHVtbk5hbWUnO1xyXG5cclxuY29uc3QgdHlwZVdpdGhvdXREZWZhdWx0ID0gbmV3IFNldChbJ0JMT0InLCAnVEVYVCcsICdHRU9NRVRSWScsICdKU09OJ10pO1xyXG5cclxuY2xhc3MgTXlTUUxRdWVyeUdlbmVyYXRvciBleHRlbmRzIEFic3RyYWN0UXVlcnlHZW5lcmF0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuT3BlcmF0b3JNYXAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLk9wZXJhdG9yTWFwLCB7XHJcbiAgICAgIFtPcC5yZWdleHBdOiAnUkVHRVhQJyxcclxuICAgICAgW09wLm5vdFJlZ2V4cF06ICdOT1QgUkVHRVhQJ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVEYXRhYmFzZVF1ZXJ5KGRhdGFiYXNlTmFtZSwgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICBjaGFyc2V0OiBudWxsLFxyXG4gICAgICBjb2xsYXRlOiBudWxsXHJcbiAgICB9LCBvcHRpb25zIHx8IHt9KTtcclxuXHJcbiAgICBjb25zdCBkYXRhYmFzZSA9IHRoaXMucXVvdGVJZGVudGlmaWVyKGRhdGFiYXNlTmFtZSk7XHJcbiAgICBjb25zdCBjaGFyc2V0ID0gb3B0aW9ucy5jaGFyc2V0ID8gYCBERUZBVUxUIENIQVJBQ1RFUiBTRVQgJHt0aGlzLmVzY2FwZShvcHRpb25zLmNoYXJzZXQpfWAgOiAnJztcclxuICAgIGNvbnN0IGNvbGxhdGUgPSBvcHRpb25zLmNvbGxhdGUgPyBgIERFRkFVTFQgQ09MTEFURSAke3RoaXMuZXNjYXBlKG9wdGlvbnMuY29sbGF0ZSl9YCA6ICcnO1xyXG5cclxuICAgIHJldHVybiBgJHtgQ1JFQVRFIERBVEFCQVNFIElGIE5PVCBFWElTVFMgJHtkYXRhYmFzZX0ke2NoYXJzZXR9JHtjb2xsYXRlfWAudHJpbSgpfTtgO1xyXG4gIH1cclxuXHJcbiAgZHJvcERhdGFiYXNlUXVlcnkoZGF0YWJhc2VOYW1lKSB7XHJcbiAgICByZXR1cm4gYERST1AgREFUQUJBU0UgSUYgRVhJU1RTICR7dGhpcy5xdW90ZUlkZW50aWZpZXIoZGF0YWJhc2VOYW1lKS50cmltKCl9O2A7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVTY2hlbWEoKSB7XHJcbiAgICByZXR1cm4gJ1NIT1cgVEFCTEVTJztcclxuICB9XHJcblxyXG4gIHNob3dTY2hlbWFzUXVlcnkoKSB7XHJcbiAgICByZXR1cm4gJ1NIT1cgVEFCTEVTJztcclxuICB9XHJcblxyXG4gIHZlcnNpb25RdWVyeSgpIHtcclxuICAgIHJldHVybiAnU0VMRUNUIFZFUlNJT04oKSBhcyBgdmVyc2lvbmAnO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVGFibGVRdWVyeSh0YWJsZU5hbWUsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcclxuICAgICAgZW5naW5lOiAnSW5ub0RCJyxcclxuICAgICAgY2hhcnNldDogbnVsbCxcclxuICAgICAgcm93Rm9ybWF0OiBudWxsXHJcbiAgICB9LCBvcHRpb25zIHx8IHt9KTtcclxuXHJcbiAgICBjb25zdCBwcmltYXJ5S2V5cyA9IFtdO1xyXG4gICAgY29uc3QgZm9yZWlnbktleXMgPSB7fTtcclxuICAgIGNvbnN0IGF0dHJTdHIgPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGF0dHIgaW4gYXR0cmlidXRlcykge1xyXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhdHRyaWJ1dGVzLCBhdHRyKSkgY29udGludWU7XHJcbiAgICAgIGNvbnN0IGRhdGFUeXBlID0gYXR0cmlidXRlc1thdHRyXTtcclxuICAgICAgbGV0IG1hdGNoO1xyXG5cclxuICAgICAgaWYgKGRhdGFUeXBlLmluY2x1ZGVzKCdQUklNQVJZIEtFWScpKSB7XHJcbiAgICAgICAgcHJpbWFyeUtleXMucHVzaChhdHRyKTtcclxuXHJcbiAgICAgICAgaWYgKGRhdGFUeXBlLmluY2x1ZGVzKCdSRUZFUkVOQ0VTJykpIHtcclxuICAgICAgICAgIC8vIE15U1FMIGRvZXNuJ3Qgc3VwcG9ydCBpbmxpbmUgUkVGRVJFTkNFUyBkZWNsYXJhdGlvbnM6IG1vdmUgdG8gdGhlIGVuZFxyXG4gICAgICAgICAgbWF0Y2ggPSBkYXRhVHlwZS5tYXRjaCgvXiguKykgKFJFRkVSRU5DRVMuKikkLyk7XHJcbiAgICAgICAgICBhdHRyU3RyLnB1c2goYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cil9ICR7bWF0Y2hbMV0ucmVwbGFjZSgnUFJJTUFSWSBLRVknLCAnJyl9YCk7XHJcbiAgICAgICAgICBmb3JlaWduS2V5c1thdHRyXSA9IG1hdGNoWzJdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhdHRyU3RyLnB1c2goYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cil9ICR7ZGF0YVR5cGUucmVwbGFjZSgnUFJJTUFSWSBLRVknLCAnJyl9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGRhdGFUeXBlLmluY2x1ZGVzKCdSRUZFUkVOQ0VTJykpIHtcclxuICAgICAgICAvLyBNeVNRTCBkb2Vzbid0IHN1cHBvcnQgaW5saW5lIFJFRkVSRU5DRVMgZGVjbGFyYXRpb25zOiBtb3ZlIHRvIHRoZSBlbmRcclxuICAgICAgICBtYXRjaCA9IGRhdGFUeXBlLm1hdGNoKC9eKC4rKSAoUkVGRVJFTkNFUy4qKSQvKTtcclxuICAgICAgICBhdHRyU3RyLnB1c2goYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cil9ICR7bWF0Y2hbMV19YCk7XHJcbiAgICAgICAgZm9yZWlnbktleXNbYXR0cl0gPSBtYXRjaFsyXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhdHRyU3RyLnB1c2goYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cil9ICR7ZGF0YVR5cGV9YCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpO1xyXG4gICAgbGV0IGF0dHJpYnV0ZXNDbGF1c2UgPSBhdHRyU3RyLmpvaW4oJywgJyk7XHJcbiAgICBjb25zdCBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50ICYmIHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09ICdzdHJpbmcnID8gYCBDT01NRU5UICR7dGhpcy5lc2NhcGUob3B0aW9ucy5jb21tZW50KX1gIDogJyc7XHJcbiAgICBjb25zdCBlbmdpbmUgPSBvcHRpb25zLmVuZ2luZTtcclxuICAgIGNvbnN0IGNoYXJzZXQgPSBvcHRpb25zLmNoYXJzZXQgPyBgIERFRkFVTFQgQ0hBUlNFVD0ke29wdGlvbnMuY2hhcnNldH1gIDogJyc7XHJcbiAgICBjb25zdCBjb2xsYXRpb24gPSBvcHRpb25zLmNvbGxhdGUgPyBgIENPTExBVEUgJHtvcHRpb25zLmNvbGxhdGV9YCA6ICcnO1xyXG4gICAgY29uc3Qgcm93Rm9ybWF0ID0gb3B0aW9ucy5yb3dGb3JtYXQgPyBgIFJPV19GT1JNQVQ9JHtvcHRpb25zLnJvd0Zvcm1hdH1gIDogJyc7XHJcbiAgICBjb25zdCBpbml0aWFsQXV0b0luY3JlbWVudCA9IG9wdGlvbnMuaW5pdGlhbEF1dG9JbmNyZW1lbnQgPyBgIEFVVE9fSU5DUkVNRU5UPSR7b3B0aW9ucy5pbml0aWFsQXV0b0luY3JlbWVudH1gIDogJyc7XHJcbiAgICBjb25zdCBwa1N0cmluZyA9IHByaW1hcnlLZXlzLm1hcChwayA9PiB0aGlzLnF1b3RlSWRlbnRpZmllcihwaykpLmpvaW4oJywgJyk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMudW5pcXVlS2V5cykge1xyXG4gICAgICBfLmVhY2gob3B0aW9ucy51bmlxdWVLZXlzLCAoY29sdW1ucywgaW5kZXhOYW1lKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbnMuY3VzdG9tSW5kZXgpIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgaW5kZXhOYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpbmRleE5hbWUgPSBgdW5pcV8ke3RhYmxlTmFtZX1fJHtjb2x1bW5zLmZpZWxkcy5qb2luKCdfJyl9YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF0dHJpYnV0ZXNDbGF1c2UgKz0gYCwgVU5JUVVFICR7dGhpcy5xdW90ZUlkZW50aWZpZXIoaW5kZXhOYW1lKX0gKCR7Y29sdW1ucy5maWVsZHMubWFwKGZpZWxkID0+IHRoaXMucXVvdGVJZGVudGlmaWVyKGZpZWxkKSkuam9pbignLCAnKX0pYDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwa1N0cmluZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGF0dHJpYnV0ZXNDbGF1c2UgKz0gYCwgUFJJTUFSWSBLRVkgKCR7cGtTdHJpbmd9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBma2V5IGluIGZvcmVpZ25LZXlzKSB7XHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9yZWlnbktleXMsIGZrZXkpKSB7XHJcbiAgICAgICAgYXR0cmlidXRlc0NsYXVzZSArPSBgLCBGT1JFSUdOIEtFWSAoJHt0aGlzLnF1b3RlSWRlbnRpZmllcihma2V5KX0pICR7Zm9yZWlnbktleXNbZmtleV19YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJHt0YWJsZX0gKCR7YXR0cmlidXRlc0NsYXVzZX0pIEVOR0lORT0ke2VuZ2luZX0ke2NvbW1lbnR9JHtjaGFyc2V0fSR7Y29sbGF0aW9ufSR7aW5pdGlhbEF1dG9JbmNyZW1lbnR9JHtyb3dGb3JtYXR9O2A7XHJcbiAgfVxyXG5cclxuXHJcbiAgZGVzY3JpYmVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSwgc2NoZW1hLCBzY2hlbWFEZWxpbWl0ZXIpIHtcclxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdW90ZVRhYmxlKFxyXG4gICAgICB0aGlzLmFkZFNjaGVtYSh7XHJcbiAgICAgICAgdGFibGVOYW1lLFxyXG4gICAgICAgIF9zY2hlbWE6IHNjaGVtYSxcclxuICAgICAgICBfc2NoZW1hRGVsaW1pdGVyOiBzY2hlbWFEZWxpbWl0ZXJcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIGBTSE9XIEZVTEwgQ09MVU1OUyBGUk9NICR7dGFibGV9O2A7XHJcbiAgfVxyXG5cclxuICBzaG93VGFibGVzUXVlcnkoZGF0YWJhc2UpIHtcclxuICAgIGxldCBxdWVyeSA9ICdTRUxFQ1QgVEFCTEVfTkFNRSBGUk9NIElORk9STUFUSU9OX1NDSEVNQS5UQUJMRVMgV0hFUkUgVEFCTEVfVFlQRSA9IFxcJ0JBU0UgVEFCTEVcXCcnO1xyXG4gICAgaWYgKGRhdGFiYXNlKSB7XHJcbiAgICAgIHF1ZXJ5ICs9IGAgQU5EIFRBQkxFX1NDSEVNQSA9ICR7dGhpcy5lc2NhcGUoZGF0YWJhc2UpfWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBxdWVyeSArPSAnIEFORCBUQUJMRV9TQ0hFTUEgTk9UIElOIChcXCdNWVNRTFxcJywgXFwnSU5GT1JNQVRJT05fU0NIRU1BXFwnLCBcXCdQRVJGT1JNQU5DRV9TQ0hFTUFcXCcsIFxcJ1NZU1xcJyknO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke3F1ZXJ5fTtgO1xyXG4gIH1cclxuXHJcbiAgYWRkQ29sdW1uUXVlcnkodGFibGUsIGtleSwgZGF0YVR5cGUpIHtcclxuICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmF0dHJpYnV0ZVRvU1FMKGRhdGFUeXBlLCB7XHJcbiAgICAgIGNvbnRleHQ6ICdhZGRDb2x1bW4nLFxyXG4gICAgICB0YWJsZU5hbWU6IHRhYmxlLFxyXG4gICAgICBmb3JlaWduS2V5OiBrZXlcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBgQUxURVIgVEFCTEUgJHt0aGlzLnF1b3RlVGFibGUodGFibGUpfSBBREQgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihrZXkpfSAke2RlZmluaXRpb259O2A7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDb2x1bW5RdWVyeSh0YWJsZU5hbWUsIGF0dHJpYnV0ZU5hbWUpIHtcclxuICAgIHJldHVybiBgQUxURVIgVEFCTEUgJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX0gRFJPUCAke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHJpYnV0ZU5hbWUpfTtgO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlQ29sdW1uUXVlcnkodGFibGVOYW1lLCBhdHRyaWJ1dGVzKSB7XHJcbiAgICBjb25zdCBhdHRyU3RyaW5nID0gW107XHJcbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIGluIGF0dHJpYnV0ZXMpIHtcclxuICAgICAgbGV0IGRlZmluaXRpb24gPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdO1xyXG4gICAgICBpZiAoZGVmaW5pdGlvbi5pbmNsdWRlcygnUkVGRVJFTkNFUycpKSB7XHJcbiAgICAgICAgY29uc3QgYXR0ck5hbWUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyaWJ1dGVOYW1lKTtcclxuICAgICAgICBkZWZpbml0aW9uID0gZGVmaW5pdGlvbi5yZXBsYWNlKC8uKz8oPz1SRUZFUkVOQ0VTKS8sICcnKTtcclxuICAgICAgICBjb25zdHJhaW50U3RyaW5nLnB1c2goYEZPUkVJR04gS0VZICgke2F0dHJOYW1lfSkgJHtkZWZpbml0aW9ufWApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF0dHJTdHJpbmcucHVzaChgXFxgJHthdHRyaWJ1dGVOYW1lfVxcYCBcXGAke2F0dHJpYnV0ZU5hbWV9XFxgICR7ZGVmaW5pdGlvbn1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBmaW5hbFF1ZXJ5ID0gJyc7XHJcbiAgICBpZiAoYXR0clN0cmluZy5sZW5ndGgpIHtcclxuICAgICAgZmluYWxRdWVyeSArPSBgQ0hBTkdFICR7YXR0clN0cmluZy5qb2luKCcsICcpfWA7XHJcbiAgICAgIGZpbmFsUXVlcnkgKz0gY29uc3RyYWludFN0cmluZy5sZW5ndGggPyAnICcgOiAnJztcclxuICAgIH1cclxuICAgIGlmIChjb25zdHJhaW50U3RyaW5nLmxlbmd0aCkge1xyXG4gICAgICBmaW5hbFF1ZXJ5ICs9IGBBREQgJHtjb25zdHJhaW50U3RyaW5nLmpvaW4oJywgJyl9YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYEFMVEVSIFRBQkxFICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9ICR7ZmluYWxRdWVyeX07YDtcclxuICB9XHJcblxyXG4gIHJlbmFtZUNvbHVtblF1ZXJ5KHRhYmxlTmFtZSwgYXR0ckJlZm9yZSwgYXR0cmlidXRlcykge1xyXG4gICAgY29uc3QgYXR0clN0cmluZyA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgYXR0ck5hbWUgaW4gYXR0cmlidXRlcykge1xyXG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gYXR0cmlidXRlc1thdHRyTmFtZV07XHJcbiAgICAgIGF0dHJTdHJpbmcucHVzaChgXFxgJHthdHRyQmVmb3JlfVxcYCBcXGAke2F0dHJOYW1lfVxcYCAke2RlZmluaXRpb259YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGBBTFRFUiBUQUJMRSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfSBDSEFOR0UgJHthdHRyU3RyaW5nLmpvaW4oJywgJyl9O2A7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTZXF1ZWxpemVNZXRob2Qoc210aCwgdGFibGVOYW1lLCBmYWN0b3J5LCBvcHRpb25zLCBwcmVwZW5kKSB7XHJcbiAgICBpZiAoc210aCBpbnN0YW5jZW9mIFV0aWxzLkpzb24pIHtcclxuICAgICAgLy8gUGFyc2UgbmVzdGVkIG9iamVjdFxyXG4gICAgICBpZiAoc210aC5jb25kaXRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHRoaXMucGFyc2VDb25kaXRpb25PYmplY3Qoc210aC5jb25kaXRpb25zKS5tYXAoY29uZGl0aW9uID0+XHJcbiAgICAgICAgICBgJHt0aGlzLmpzb25QYXRoRXh0cmFjdGlvblF1ZXJ5KGNvbmRpdGlvbi5wYXRoWzBdLCBfLnRhaWwoY29uZGl0aW9uLnBhdGgpKX0gPSAnJHtjb25kaXRpb24udmFsdWV9J2BcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gY29uZGl0aW9ucy5qb2luKCcgQU5EICcpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzbXRoLnBhdGgpIHtcclxuICAgICAgICBsZXQgc3RyO1xyXG5cclxuICAgICAgICAvLyBBbGxvdyBzcGVjaWZ5aW5nIGNvbmRpdGlvbnMgdXNpbmcgdGhlIHNxbGl0ZSBqc29uIGZ1bmN0aW9uc1xyXG4gICAgICAgIGlmICh0aGlzLl9jaGVja1ZhbGlkSnNvblN0YXRlbWVudChzbXRoLnBhdGgpKSB7XHJcbiAgICAgICAgICBzdHIgPSBzbXRoLnBhdGg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEFsc28gc3VwcG9ydCBqc29uIHByb3BlcnR5IGFjY2Vzc29yc1xyXG4gICAgICAgICAgY29uc3QgcGF0aHMgPSBfLnRvUGF0aChzbXRoLnBhdGgpO1xyXG4gICAgICAgICAgY29uc3QgY29sdW1uID0gcGF0aHMuc2hpZnQoKTtcclxuICAgICAgICAgIHN0ciA9IHRoaXMuanNvblBhdGhFeHRyYWN0aW9uUXVlcnkoY29sdW1uLCBwYXRocyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc210aC52YWx1ZSkge1xyXG4gICAgICAgICAgc3RyICs9IHV0aWwuZm9ybWF0KCcgPSAlcycsIHRoaXMuZXNjYXBlKHNtdGgudmFsdWUpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoc210aCBpbnN0YW5jZW9mIFV0aWxzLkNhc3QpIHtcclxuICAgICAgaWYgKC90aW1lc3RhbXAvaS50ZXN0KHNtdGgudHlwZSkpIHtcclxuICAgICAgICBzbXRoLnR5cGUgPSAnZGF0ZXRpbWUnO1xyXG4gICAgICB9IGVsc2UgaWYgKHNtdGguanNvbiAmJiAvYm9vbGVhbi9pLnRlc3Qoc210aC50eXBlKSkge1xyXG4gICAgICAgIC8vIHRydWUgb3IgZmFsc2UgY2Fubm90IGJlIGNhc3RlZCBhcyBib29sZWFucyB3aXRoaW4gYSBKU09OIHN0cnVjdHVyZVxyXG4gICAgICAgIHNtdGgudHlwZSA9ICdjaGFyJztcclxuICAgICAgfSBlbHNlIGlmICgvZG91YmxlIHByZWNpc2lvbi9pLnRlc3Qoc210aC50eXBlKSB8fCAvYm9vbGVhbi9pLnRlc3Qoc210aC50eXBlKSB8fCAvaW50ZWdlci9pLnRlc3Qoc210aC50eXBlKSkge1xyXG4gICAgICAgIHNtdGgudHlwZSA9ICdkZWNpbWFsJztcclxuICAgICAgfSBlbHNlIGlmICgvdGV4dC9pLnRlc3Qoc210aC50eXBlKSkge1xyXG4gICAgICAgIHNtdGgudHlwZSA9ICdjaGFyJztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdXBlci5oYW5kbGVTZXF1ZWxpemVNZXRob2Qoc210aCwgdGFibGVOYW1lLCBmYWN0b3J5LCBvcHRpb25zLCBwcmVwZW5kKTtcclxuICB9XHJcblxyXG4gIF90b0pTT05WYWx1ZSh2YWx1ZSkge1xyXG4gICAgLy8gdHJ1ZS9mYWxzZSBhcmUgc3RvcmVkIGFzIHN0cmluZ3MgaW4gbXlzcWxcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xyXG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIC8vIG51bGwgaXMgc3RvcmVkIGFzIGEgc3RyaW5nIGluIG15c3FsXHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuICdudWxsJztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHVwc2VydFF1ZXJ5KHRhYmxlTmFtZSwgaW5zZXJ0VmFsdWVzLCB1cGRhdGVWYWx1ZXMsIHdoZXJlLCBtb2RlbCwgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucy5vbkR1cGxpY2F0ZSA9ICdVUERBVEUgJztcclxuXHJcbiAgICBvcHRpb25zLm9uRHVwbGljYXRlICs9IE9iamVjdC5rZXlzKHVwZGF0ZVZhbHVlcykubWFwKGtleSA9PiB7XHJcbiAgICAgIGtleSA9IHRoaXMucXVvdGVJZGVudGlmaWVyKGtleSk7XHJcbiAgICAgIHJldHVybiBgJHtrZXl9PVZBTFVFUygke2tleX0pYDtcclxuICAgIH0pLmpvaW4oJywgJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0UXVlcnkodGFibGVOYW1lLCBpbnNlcnRWYWx1ZXMsIG1vZGVsLnJhd0F0dHJpYnV0ZXMsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgdHJ1bmNhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSkge1xyXG4gICAgcmV0dXJuIGBUUlVOQ0FURSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfWA7XHJcbiAgfVxyXG5cclxuICBkZWxldGVRdWVyeSh0YWJsZU5hbWUsIHdoZXJlLCBvcHRpb25zID0ge30sIG1vZGVsKSB7XHJcbiAgICBsZXQgbGltaXQgPSAnJztcclxuICAgIGxldCBxdWVyeSA9IGBERUxFVEUgRlJPTSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfWA7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMubGltaXQpIHtcclxuICAgICAgbGltaXQgPSBgIExJTUlUICR7dGhpcy5lc2NhcGUob3B0aW9ucy5saW1pdCl9YDtcclxuICAgIH1cclxuXHJcbiAgICB3aGVyZSA9IHRoaXMuZ2V0V2hlcmVDb25kaXRpb25zKHdoZXJlLCBudWxsLCBtb2RlbCwgb3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKHdoZXJlKSB7XHJcbiAgICAgIHF1ZXJ5ICs9IGAgV0hFUkUgJHt3aGVyZX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBxdWVyeSArIGxpbWl0O1xyXG4gIH1cclxuXHJcbiAgc2hvd0luZGV4ZXNRdWVyeSh0YWJsZU5hbWUsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBgU0hPVyBJTkRFWCBGUk9NICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9JHsob3B0aW9ucyB8fCB7fSkuZGF0YWJhc2UgPyBgIEZST00gXFxgJHtvcHRpb25zLmRhdGFiYXNlfVxcYGAgOiAnJ31gO1xyXG4gIH1cclxuXHJcbiAgc2hvd0NvbnN0cmFpbnRzUXVlcnkodGFibGUsIGNvbnN0cmFpbnROYW1lKSB7XHJcbiAgICBjb25zdCB0YWJsZU5hbWUgPSB0YWJsZS50YWJsZU5hbWUgfHwgdGFibGU7XHJcbiAgICBjb25zdCBzY2hlbWFOYW1lID0gdGFibGUuc2NoZW1hO1xyXG5cclxuICAgIGxldCBzcWwgPSBbXHJcbiAgICAgICdTRUxFQ1QgQ09OU1RSQUlOVF9DQVRBTE9HIEFTIGNvbnN0cmFpbnRDYXRhbG9nLCcsXHJcbiAgICAgICdDT05TVFJBSU5UX05BTUUgQVMgY29uc3RyYWludE5hbWUsJyxcclxuICAgICAgJ0NPTlNUUkFJTlRfU0NIRU1BIEFTIGNvbnN0cmFpbnRTY2hlbWEsJyxcclxuICAgICAgJ0NPTlNUUkFJTlRfVFlQRSBBUyBjb25zdHJhaW50VHlwZSwnLFxyXG4gICAgICAnVEFCTEVfTkFNRSBBUyB0YWJsZU5hbWUsJyxcclxuICAgICAgJ1RBQkxFX1NDSEVNQSBBUyB0YWJsZVNjaGVtYScsXHJcbiAgICAgICdmcm9tIElORk9STUFUSU9OX1NDSEVNQS5UQUJMRV9DT05TVFJBSU5UUycsXHJcbiAgICAgIGBXSEVSRSB0YWJsZV9uYW1lPScke3RhYmxlTmFtZX0nYFxyXG4gICAgXS5qb2luKCcgJyk7XHJcblxyXG4gICAgaWYgKGNvbnN0cmFpbnROYW1lKSB7XHJcbiAgICAgIHNxbCArPSBgIEFORCBjb25zdHJhaW50X25hbWUgPSAnJHtjb25zdHJhaW50TmFtZX0nYDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2NoZW1hTmFtZSkge1xyXG4gICAgICBzcWwgKz0gYCBBTkQgVEFCTEVfU0NIRU1BID0gJyR7c2NoZW1hTmFtZX0nYDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYCR7c3FsfTtgO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSW5kZXhRdWVyeSh0YWJsZU5hbWUsIGluZGV4TmFtZU9yQXR0cmlidXRlcykge1xyXG4gICAgbGV0IGluZGV4TmFtZSA9IGluZGV4TmFtZU9yQXR0cmlidXRlcztcclxuXHJcbiAgICBpZiAodHlwZW9mIGluZGV4TmFtZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgaW5kZXhOYW1lID0gVXRpbHMudW5kZXJzY29yZShgJHt0YWJsZU5hbWV9XyR7aW5kZXhOYW1lT3JBdHRyaWJ1dGVzLmpvaW4oJ18nKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYERST1AgSU5ERVggJHt0aGlzLnF1b3RlSWRlbnRpZmllcihpbmRleE5hbWUpfSBPTiAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfWA7XHJcbiAgfVxyXG5cclxuICBhdHRyaWJ1dGVUb1NRTChhdHRyaWJ1dGUsIG9wdGlvbnMpIHtcclxuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGF0dHJpYnV0ZSkpIHtcclxuICAgICAgYXR0cmlidXRlID0ge1xyXG4gICAgICAgIHR5cGU6IGF0dHJpYnV0ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGF0dHJpYnV0ZVN0cmluZyA9IGF0dHJpYnV0ZS50eXBlLnRvU3RyaW5nKHsgZXNjYXBlOiB0aGlzLmVzY2FwZS5iaW5kKHRoaXMpIH0pO1xyXG4gICAgbGV0IHRlbXBsYXRlID0gYXR0cmlidXRlU3RyaW5nO1xyXG5cclxuICAgIGlmIChhdHRyaWJ1dGUuYWxsb3dOdWxsID09PSBmYWxzZSkge1xyXG4gICAgICB0ZW1wbGF0ZSArPSAnIE5PVCBOVUxMJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXR0cmlidXRlLmF1dG9JbmNyZW1lbnQpIHtcclxuICAgICAgdGVtcGxhdGUgKz0gJyBhdXRvX2luY3JlbWVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQkxPQi9URVhUL0dFT01FVFJZL0pTT04gY2Fubm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlXHJcbiAgICBpZiAoIXR5cGVXaXRob3V0RGVmYXVsdC5oYXMoYXR0cmlidXRlU3RyaW5nKVxyXG4gICAgICAmJiBhdHRyaWJ1dGUudHlwZS5fYmluYXJ5ICE9PSB0cnVlXHJcbiAgICAgICYmIFV0aWxzLmRlZmF1bHRWYWx1ZVNjaGVtYWJsZShhdHRyaWJ1dGUuZGVmYXVsdFZhbHVlKSkge1xyXG4gICAgICB0ZW1wbGF0ZSArPSBgIERFRkFVTFQgJHt0aGlzLmVzY2FwZShhdHRyaWJ1dGUuZGVmYXVsdFZhbHVlKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhdHRyaWJ1dGUudW5pcXVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRlbXBsYXRlICs9ICcgVU5JUVVFJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXR0cmlidXRlLnByaW1hcnlLZXkpIHtcclxuICAgICAgdGVtcGxhdGUgKz0gJyBQUklNQVJZIEtFWSc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGF0dHJpYnV0ZS5jb21tZW50KSB7XHJcbiAgICAgIHRlbXBsYXRlICs9IGAgQ09NTUVOVCAke3RoaXMuZXNjYXBlKGF0dHJpYnV0ZS5jb21tZW50KX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhdHRyaWJ1dGUuZmlyc3QpIHtcclxuICAgICAgdGVtcGxhdGUgKz0gJyBGSVJTVCc7XHJcbiAgICB9XHJcbiAgICBpZiAoYXR0cmlidXRlLmFmdGVyKSB7XHJcbiAgICAgIHRlbXBsYXRlICs9IGAgQUZURVIgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyaWJ1dGUuYWZ0ZXIpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGF0dHJpYnV0ZS5yZWZlcmVuY2VzKSB7XHJcblxyXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQgPT09ICdhZGRDb2x1bW4nICYmIG9wdGlvbnMuZm9yZWlnbktleSkge1xyXG4gICAgICAgIGNvbnN0IGF0dHJOYW1lID0gdGhpcy5xdW90ZUlkZW50aWZpZXIob3B0aW9ucy5mb3JlaWduS2V5KTtcclxuICAgICAgICBjb25zdCBma05hbWUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcihgJHtvcHRpb25zLnRhYmxlTmFtZX1fJHthdHRyTmFtZX1fZm9yZWlnbl9pZHhgKTtcclxuXHJcbiAgICAgICAgdGVtcGxhdGUgKz0gYCwgQUREIENPTlNUUkFJTlQgJHtma05hbWV9IEZPUkVJR04gS0VZICgke2F0dHJOYW1lfSlgO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0ZW1wbGF0ZSArPSBgIFJFRkVSRU5DRVMgJHt0aGlzLnF1b3RlVGFibGUoYXR0cmlidXRlLnJlZmVyZW5jZXMubW9kZWwpfWA7XHJcblxyXG4gICAgICBpZiAoYXR0cmlidXRlLnJlZmVyZW5jZXMua2V5KSB7XHJcbiAgICAgICAgdGVtcGxhdGUgKz0gYCAoJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyaWJ1dGUucmVmZXJlbmNlcy5rZXkpfSlgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRlbXBsYXRlICs9IGAgKCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoJ2lkJyl9KWA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhdHRyaWJ1dGUub25EZWxldGUpIHtcclxuICAgICAgICB0ZW1wbGF0ZSArPSBgIE9OIERFTEVURSAke2F0dHJpYnV0ZS5vbkRlbGV0ZS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhdHRyaWJ1dGUub25VcGRhdGUpIHtcclxuICAgICAgICB0ZW1wbGF0ZSArPSBgIE9OIFVQREFURSAke2F0dHJpYnV0ZS5vblVwZGF0ZS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGVtcGxhdGU7XHJcbiAgfVxyXG5cclxuICBhdHRyaWJ1dGVzVG9TUUwoYXR0cmlidXRlcywgb3B0aW9ucykge1xyXG4gICAgY29uc3QgcmVzdWx0ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0cmlidXRlcykge1xyXG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2tleV07XHJcbiAgICAgIHJlc3VsdFthdHRyaWJ1dGUuZmllbGQgfHwga2V5XSA9IHRoaXMuYXR0cmlidXRlVG9TUUwoYXR0cmlidXRlLCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgc3RhdG1lbWVudCBpcyBqc29uIGZ1bmN0aW9uIG9yIHNpbXBsZSBwYXRoXHJcbiAgICpcclxuICAgKiBAcGFyYW0gICB7c3RyaW5nfSAgc3RtdCAgVGhlIHN0YXRlbWVudCB0byB2YWxpZGF0ZVxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAgICAgICB0cnVlIGlmIHRoZSBnaXZlbiBzdGF0ZW1lbnQgaXMganNvbiBmdW5jdGlvblxyXG4gICAqIEB0aHJvd3MgIHtFcnJvcn0gICAgICAgICB0aHJvdyBpZiB0aGUgc3RhdGVtZW50IGxvb2tzIGxpa2UganNvbiBmdW5jdGlvbiBidXQgaGFzIGludmFsaWQgdG9rZW5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9jaGVja1ZhbGlkSnNvblN0YXRlbWVudChzdG10KSB7XHJcbiAgICBpZiAodHlwZW9mIHN0bXQgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcclxuICAgIGxldCBvcGVuaW5nQnJhY2tldHMgPSAwO1xyXG4gICAgbGV0IGNsb3NpbmdCcmFja2V0cyA9IDA7XHJcbiAgICBsZXQgaGFzSnNvbkZ1bmN0aW9uID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzSW52YWxpZFRva2VuID0gZmFsc2U7XHJcblxyXG4gICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IHN0bXQubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHN0cmluZyA9IHN0bXQuc3Vic3RyKGN1cnJlbnRJbmRleCk7XHJcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTWF0Y2hlcyA9IGpzb25GdW5jdGlvblJlZ2V4LmV4ZWMoc3RyaW5nKTtcclxuICAgICAgaWYgKGZ1bmN0aW9uTWF0Y2hlcykge1xyXG4gICAgICAgIGN1cnJlbnRJbmRleCArPSBmdW5jdGlvbk1hdGNoZXNbMF0uaW5kZXhPZignKCcpO1xyXG4gICAgICAgIGhhc0pzb25GdW5jdGlvbiA9IHRydWU7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG9wZXJhdG9yTWF0Y2hlcyA9IGpzb25PcGVyYXRvclJlZ2V4LmV4ZWMoc3RyaW5nKTtcclxuICAgICAgaWYgKG9wZXJhdG9yTWF0Y2hlcykge1xyXG4gICAgICAgIGN1cnJlbnRJbmRleCArPSBvcGVyYXRvck1hdGNoZXNbMF0ubGVuZ3RoO1xyXG4gICAgICAgIGhhc0pzb25GdW5jdGlvbiA9IHRydWU7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHRva2VuTWF0Y2hlcyA9IHRva2VuQ2FwdHVyZVJlZ2V4LmV4ZWMoc3RyaW5nKTtcclxuICAgICAgaWYgKHRva2VuTWF0Y2hlcykge1xyXG4gICAgICAgIGNvbnN0IGNhcHR1cmVkVG9rZW4gPSB0b2tlbk1hdGNoZXNbMV07XHJcbiAgICAgICAgaWYgKGNhcHR1cmVkVG9rZW4gPT09ICcoJykge1xyXG4gICAgICAgICAgb3BlbmluZ0JyYWNrZXRzKys7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjYXB0dXJlZFRva2VuID09PSAnKScpIHtcclxuICAgICAgICAgIGNsb3NpbmdCcmFja2V0cysrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2FwdHVyZWRUb2tlbiA9PT0gJzsnKSB7XHJcbiAgICAgICAgICBoYXNJbnZhbGlkVG9rZW4gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRJbmRleCArPSB0b2tlbk1hdGNoZXNbMF0ubGVuZ3RoO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpbnZhbGlkIGpzb24gc3RhdGVtZW50XHJcbiAgICBpZiAoaGFzSnNvbkZ1bmN0aW9uICYmIChoYXNJbnZhbGlkVG9rZW4gfHwgb3BlbmluZ0JyYWNrZXRzICE9PSBjbG9zaW5nQnJhY2tldHMpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBqc29uIHN0YXRlbWVudDogJHtzdG10fWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJldHVybiB0cnVlIGlmIHRoZSBzdGF0ZW1lbnQgaGFzIHZhbGlkIGpzb24gZnVuY3Rpb25cclxuICAgIHJldHVybiBoYXNKc29uRnVuY3Rpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgYW4gU1FMIHF1ZXJ5IHRoYXQgcmV0dXJucyBhbGwgZm9yZWlnbiBrZXlzIG9mIGEgdGFibGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhYmxlICBUaGUgdGFibGUuXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSBzY2hlbWFOYW1lIFRoZSBuYW1lIG9mIHRoZSBzY2hlbWEuXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gICAgICAgICAgICBUaGUgZ2VuZXJhdGVkIHNxbCBxdWVyeS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGdldEZvcmVpZ25LZXlzUXVlcnkodGFibGUsIHNjaGVtYU5hbWUpIHtcclxuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRhYmxlLnRhYmxlTmFtZSB8fCB0YWJsZTtcclxuICAgIHJldHVybiBgU0VMRUNUICR7Zm9yZWlnbktleUZpZWxkc30gRlJPTSBJTkZPUk1BVElPTl9TQ0hFTUEuS0VZX0NPTFVNTl9VU0FHRSB3aGVyZSBUQUJMRV9OQU1FID0gJyR7dGFibGVOYW1lfScgQU5EIENPTlNUUkFJTlRfTkFNRSE9J1BSSU1BUlknIEFORCBDT05TVFJBSU5UX1NDSEVNQT0nJHtzY2hlbWFOYW1lfScgQU5EIFJFRkVSRU5DRURfVEFCTEVfTkFNRSBJUyBOT1QgTlVMTDtgO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIGFuIFNRTCBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgb2YgYSBnaXZlbiBjb2x1bW4uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhYmxlICBUaGUgdGFibGUuXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSBjb2x1bW5OYW1lIFRoZSBuYW1lIG9mIHRoZSBjb2x1bW4uXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gICAgICAgICAgICBUaGUgZ2VuZXJhdGVkIHNxbCBxdWVyeS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGdldEZvcmVpZ25LZXlRdWVyeSh0YWJsZSwgY29sdW1uTmFtZSkge1xyXG4gICAgY29uc3QgcXVvdGVkU2NoZW1hTmFtZSA9IHRhYmxlLnNjaGVtYSA/IHdyYXBTaW5nbGVRdW90ZSh0YWJsZS5zY2hlbWEpIDogJyc7XHJcbiAgICBjb25zdCBxdW90ZWRUYWJsZU5hbWUgPSB3cmFwU2luZ2xlUXVvdGUodGFibGUudGFibGVOYW1lIHx8IHRhYmxlKTtcclxuICAgIGNvbnN0IHF1b3RlZENvbHVtbk5hbWUgPSB3cmFwU2luZ2xlUXVvdGUoY29sdW1uTmFtZSk7XHJcblxyXG4gICAgcmV0dXJuIGBTRUxFQ1QgJHtmb3JlaWduS2V5RmllbGRzfSBGUk9NIElORk9STUFUSU9OX1NDSEVNQS5LRVlfQ09MVU1OX1VTQUdFYFxyXG4gICAgICArIGAgV0hFUkUgKFJFRkVSRU5DRURfVEFCTEVfTkFNRSA9ICR7cXVvdGVkVGFibGVOYW1lfSR7dGFibGUuc2NoZW1hXHJcbiAgICAgICAgPyBgIEFORCBSRUZFUkVOQ0VEX1RBQkxFX1NDSEVNQSA9ICR7cXVvdGVkU2NoZW1hTmFtZX1gXHJcbiAgICAgICAgOiAnJ30gQU5EIFJFRkVSRU5DRURfQ09MVU1OX05BTUUgPSAke3F1b3RlZENvbHVtbk5hbWV9KWBcclxuICAgICAgKyBgIE9SIChUQUJMRV9OQU1FID0gJHtxdW90ZWRUYWJsZU5hbWV9JHt0YWJsZS5zY2hlbWEgP1xyXG4gICAgICAgIGAgQU5EIFRBQkxFX1NDSEVNQSA9ICR7cXVvdGVkU2NoZW1hTmFtZX1gIDogJyd9IEFORCBDT0xVTU5fTkFNRSA9ICR7cXVvdGVkQ29sdW1uTmFtZX0gQU5EIFJFRkVSRU5DRURfVEFCTEVfTkFNRSBJUyBOT1QgTlVMTClgO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIGFuIFNRTCBxdWVyeSB0aGF0IHJlbW92ZXMgYSBmb3JlaWduIGtleSBmcm9tIGEgdGFibGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRhYmxlTmFtZSAgVGhlIG5hbWUgb2YgdGhlIHRhYmxlLlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gZm9yZWlnbktleSBUaGUgbmFtZSBvZiB0aGUgZm9yZWlnbiBrZXkgY29uc3RyYWludC5cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgICAgIFRoZSBnZW5lcmF0ZWQgc3FsIHF1ZXJ5LlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgZHJvcEZvcmVpZ25LZXlRdWVyeSh0YWJsZU5hbWUsIGZvcmVpZ25LZXkpIHtcclxuICAgIHJldHVybiBgQUxURVIgVEFCTEUgJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX1cclxuICAgICAgRFJPUCBGT1JFSUdOIEtFWSAke3RoaXMucXVvdGVJZGVudGlmaWVyKGZvcmVpZ25LZXkpfTtgO1xyXG4gIH1cclxufVxyXG5cclxuLy8gcHJpdmF0ZSBtZXRob2RzXHJcbmZ1bmN0aW9uIHdyYXBTaW5nbGVRdW90ZShpZGVudGlmaWVyKSB7XHJcbiAgcmV0dXJuIFV0aWxzLmFkZFRpY2tzKGlkZW50aWZpZXIsICdcXCcnKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNeVNRTFF1ZXJ5R2VuZXJhdG9yOyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9teXNxbC9xdWVyeS1nZW5lcmF0b3IuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIkFic3RyYWN0UXVlcnlHZW5lcmF0b3IiLCJ1dGlsIiwiT3AiLCJqc29uRnVuY3Rpb25SZWdleCIsImpzb25PcGVyYXRvclJlZ2V4IiwidG9rZW5DYXB0dXJlUmVnZXgiLCJmb3JlaWduS2V5RmllbGRzIiwidHlwZVdpdGhvdXREZWZhdWx0IiwiU2V0IiwiTXlTUUxRdWVyeUdlbmVyYXRvciIsIm9wdGlvbnMiLCJPcGVyYXRvck1hcCIsIk9iamVjdCIsImFzc2lnbiIsInJlZ2V4cCIsIm5vdFJlZ2V4cCIsImRhdGFiYXNlTmFtZSIsImNoYXJzZXQiLCJjb2xsYXRlIiwiZGF0YWJhc2UiLCJxdW90ZUlkZW50aWZpZXIiLCJlc2NhcGUiLCJ0cmltIiwidGFibGVOYW1lIiwiYXR0cmlidXRlcyIsImVuZ2luZSIsInJvd0Zvcm1hdCIsInByaW1hcnlLZXlzIiwiZm9yZWlnbktleXMiLCJhdHRyU3RyIiwiYXR0ciIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRhdGFUeXBlIiwibWF0Y2giLCJpbmNsdWRlcyIsInB1c2giLCJyZXBsYWNlIiwidGFibGUiLCJxdW90ZVRhYmxlIiwiYXR0cmlidXRlc0NsYXVzZSIsImpvaW4iLCJjb21tZW50IiwiY29sbGF0aW9uIiwiaW5pdGlhbEF1dG9JbmNyZW1lbnQiLCJwa1N0cmluZyIsIm1hcCIsInBrIiwidW5pcXVlS2V5cyIsImVhY2giLCJjb2x1bW5zIiwiaW5kZXhOYW1lIiwiY3VzdG9tSW5kZXgiLCJmaWVsZHMiLCJmaWVsZCIsImxlbmd0aCIsImZrZXkiLCJzY2hlbWEiLCJzY2hlbWFEZWxpbWl0ZXIiLCJhZGRTY2hlbWEiLCJfc2NoZW1hIiwiX3NjaGVtYURlbGltaXRlciIsInF1ZXJ5Iiwia2V5IiwiZGVmaW5pdGlvbiIsImF0dHJpYnV0ZVRvU1FMIiwiY29udGV4dCIsImZvcmVpZ25LZXkiLCJhdHRyaWJ1dGVOYW1lIiwiYXR0clN0cmluZyIsImNvbnN0cmFpbnRTdHJpbmciLCJhdHRyTmFtZSIsImZpbmFsUXVlcnkiLCJhdHRyQmVmb3JlIiwic210aCIsImZhY3RvcnkiLCJwcmVwZW5kIiwiSnNvbiIsImNvbmRpdGlvbnMiLCJwYXJzZUNvbmRpdGlvbk9iamVjdCIsImNvbmRpdGlvbiIsImpzb25QYXRoRXh0cmFjdGlvblF1ZXJ5IiwicGF0aCIsInRhaWwiLCJ2YWx1ZSIsInN0ciIsIl9jaGVja1ZhbGlkSnNvblN0YXRlbWVudCIsInBhdGhzIiwidG9QYXRoIiwiY29sdW1uIiwic2hpZnQiLCJmb3JtYXQiLCJDYXN0IiwidGVzdCIsInR5cGUiLCJqc29uIiwidG9TdHJpbmciLCJpbnNlcnRWYWx1ZXMiLCJ1cGRhdGVWYWx1ZXMiLCJ3aGVyZSIsIm1vZGVsIiwib25EdXBsaWNhdGUiLCJrZXlzIiwiaW5zZXJ0UXVlcnkiLCJyYXdBdHRyaWJ1dGVzIiwibGltaXQiLCJnZXRXaGVyZUNvbmRpdGlvbnMiLCJjb25zdHJhaW50TmFtZSIsInNjaGVtYU5hbWUiLCJzcWwiLCJpbmRleE5hbWVPckF0dHJpYnV0ZXMiLCJ1bmRlcnNjb3JlIiwiYXR0cmlidXRlIiwiaXNQbGFpbk9iamVjdCIsImF0dHJpYnV0ZVN0cmluZyIsImJpbmQiLCJ0ZW1wbGF0ZSIsImFsbG93TnVsbCIsImF1dG9JbmNyZW1lbnQiLCJoYXMiLCJfYmluYXJ5IiwiZGVmYXVsdFZhbHVlU2NoZW1hYmxlIiwiZGVmYXVsdFZhbHVlIiwidW5pcXVlIiwicHJpbWFyeUtleSIsImZpcnN0IiwiYWZ0ZXIiLCJyZWZlcmVuY2VzIiwiZmtOYW1lIiwib25EZWxldGUiLCJ0b1VwcGVyQ2FzZSIsIm9uVXBkYXRlIiwicmVzdWx0Iiwic3RtdCIsImN1cnJlbnRJbmRleCIsIm9wZW5pbmdCcmFja2V0cyIsImNsb3NpbmdCcmFja2V0cyIsImhhc0pzb25GdW5jdGlvbiIsImhhc0ludmFsaWRUb2tlbiIsInN0cmluZyIsInN1YnN0ciIsImZ1bmN0aW9uTWF0Y2hlcyIsImV4ZWMiLCJpbmRleE9mIiwib3BlcmF0b3JNYXRjaGVzIiwidG9rZW5NYXRjaGVzIiwiY2FwdHVyZWRUb2tlbiIsIkVycm9yIiwiY29sdW1uTmFtZSIsInF1b3RlZFNjaGVtYU5hbWUiLCJ3cmFwU2luZ2xlUXVvdGUiLCJxdW90ZWRUYWJsZU5hbWUiLCJxdW90ZWRDb2x1bW5OYW1lIiwiaWRlbnRpZmllciIsImFkZFRpY2tzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsQ0FBQyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNQyxLQUFLLEdBQUdELE9BQU8sQ0FBQyxhQUFELENBQXJCOztBQUNBLE1BQU1FLHNCQUFzQixHQUFHRixPQUFPLENBQUMsNkJBQUQsQ0FBdEM7O0FBQ0EsTUFBTUcsSUFBSSxHQUFHSCxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNSSxFQUFFLEdBQUdKLE9BQU8sQ0FBQyxpQkFBRCxDQUFsQjs7QUFHQSxNQUFNSyxpQkFBaUIsR0FBRyx3REFBMUI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxvQ0FBMUI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyw0REFBMUI7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyx3Q0FDckIsb0NBRHFCLEdBRXJCLHdDQUZxQixHQUdyQix5Q0FIcUIsR0FJckIsMEJBSnFCLEdBS3JCLDhCQUxxQixHQU1yQiwrQkFOcUIsR0FPckIsNEJBUHFCLEdBUXJCLG1EQVJxQixHQVNyQixvREFUcUIsR0FVckIsK0NBVnFCLEdBV3JCLGdEQVhKO0FBYUEsTUFBTUMsa0JBQWtCLEdBQUcsSUFBSUMsR0FBSixDQUFRLENBQUMsTUFBRCxFQUFTLE1BQVQsRUFBaUIsVUFBakIsRUFBNkIsTUFBN0IsQ0FBUixDQUEzQjs7SUFFTUMsbUI7Ozs7O0FBQ0osK0JBQVlDLE9BQVosRUFBcUI7QUFBQTs7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RCx5QkFBeUIsS0FBS0gsZUFBTCxDQUFxQmdELFVBQXJCLENBQWlDLEdBRHREO0FBRUQ7Ozs7RUF6ZitCcEUsc0IsR0E0ZmxDOzs7QUFDQSxTQUFTdUosZUFBVCxDQUF5QkcsVUFBekIsRUFBcUM7QUFDbkMsU0FBTzNKLEtBQUssQ0FBQzRKLFFBQU4sQ0FBZUQsVUFBZixFQUEyQixJQUEzQixDQUFQO0FBQ0Q7O0FBRURFLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnBKLG1CQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuY29uc3QgQWJzdHJhY3RRdWVyeUdlbmVyYXRvciA9IHJlcXVpcmUoJy4uL2Fic3RyYWN0L3F1ZXJ5LWdlbmVyYXRvcicpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IE9wID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3JzJyk7XG5cblxuY29uc3QganNvbkZ1bmN0aW9uUmVnZXggPSAvXlxccyooKD86W2Etel0rXyl7MCwyfWpzb25iPyg/Ol9bYS16XSspezAsMn0pXFwoW14pXSpcXCkvaTtcbmNvbnN0IGpzb25PcGVyYXRvclJlZ2V4ID0gL15cXHMqKC0+Pj98QD58PEB8XFw/W3wmXT98XFx8ezJ9fCMtKS9pO1xuY29uc3QgdG9rZW5DYXB0dXJlUmVnZXggPSAvXlxccyooKD86KFtgXCInXSkoPzooPyFcXDIpLnxcXDJ7Mn0pKlxcMil8W1xcd1xcZFxcc10rfFsoKS4sOystXSkvaTtcbmNvbnN0IGZvcmVpZ25LZXlGaWVsZHMgPSAnQ09OU1RSQUlOVF9OQU1FIGFzIGNvbnN0cmFpbnRfbmFtZSwnXG4gICsgJ0NPTlNUUkFJTlRfTkFNRSBhcyBjb25zdHJhaW50TmFtZSwnXG4gICsgJ0NPTlNUUkFJTlRfU0NIRU1BIGFzIGNvbnN0cmFpbnRTY2hlbWEsJ1xuICArICdDT05TVFJBSU5UX1NDSEVNQSBhcyBjb25zdHJhaW50Q2F0YWxvZywnXG4gICsgJ1RBQkxFX05BTUUgYXMgdGFibGVOYW1lLCdcbiAgKyAnVEFCTEVfU0NIRU1BIGFzIHRhYmxlU2NoZW1hLCdcbiAgKyAnVEFCTEVfU0NIRU1BIGFzIHRhYmxlQ2F0YWxvZywnXG4gICsgJ0NPTFVNTl9OQU1FIGFzIGNvbHVtbk5hbWUsJ1xuICArICdSRUZFUkVOQ0VEX1RBQkxFX1NDSEVNQSBhcyByZWZlcmVuY2VkVGFibGVTY2hlbWEsJ1xuICArICdSRUZFUkVOQ0VEX1RBQkxFX1NDSEVNQSBhcyByZWZlcmVuY2VkVGFibGVDYXRhbG9nLCdcbiAgKyAnUkVGRVJFTkNFRF9UQUJMRV9OQU1FIGFzIHJlZmVyZW5jZWRUYWJsZU5hbWUsJ1xuICArICdSRUZFUkVOQ0VEX0NPTFVNTl9OQU1FIGFzIHJlZmVyZW5jZWRDb2x1bW5OYW1lJztcblxuY29uc3QgdHlwZVdpdGhvdXREZWZhdWx0ID0gbmV3IFNldChbJ0JMT0InLCAnVEVYVCcsICdHRU9NRVRSWScsICdKU09OJ10pO1xuXG5jbGFzcyBNeVNRTFF1ZXJ5R2VuZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RRdWVyeUdlbmVyYXRvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIHRoaXMuT3BlcmF0b3JNYXAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLk9wZXJhdG9yTWFwLCB7XG4gICAgICBbT3AucmVnZXhwXTogJ1JFR0VYUCcsXG4gICAgICBbT3Aubm90UmVnZXhwXTogJ05PVCBSRUdFWFAnXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVEYXRhYmFzZVF1ZXJ5KGRhdGFiYXNlTmFtZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGNoYXJzZXQ6IG51bGwsXG4gICAgICBjb2xsYXRlOiBudWxsXG4gICAgfSwgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICBjb25zdCBkYXRhYmFzZSA9IHRoaXMucXVvdGVJZGVudGlmaWVyKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgY2hhcnNldCA9IG9wdGlvbnMuY2hhcnNldCA/IGAgREVGQVVMVCBDSEFSQUNURVIgU0VUICR7dGhpcy5lc2NhcGUob3B0aW9ucy5jaGFyc2V0KX1gIDogJyc7XG4gICAgY29uc3QgY29sbGF0ZSA9IG9wdGlvbnMuY29sbGF0ZSA/IGAgREVGQVVMVCBDT0xMQVRFICR7dGhpcy5lc2NhcGUob3B0aW9ucy5jb2xsYXRlKX1gIDogJyc7XG5cbiAgICByZXR1cm4gYCR7YENSRUFURSBEQVRBQkFTRSBJRiBOT1QgRVhJU1RTICR7ZGF0YWJhc2V9JHtjaGFyc2V0fSR7Y29sbGF0ZX1gLnRyaW0oKX07YDtcbiAgfVxuXG4gIGRyb3BEYXRhYmFzZVF1ZXJ5KGRhdGFiYXNlTmFtZSkge1xuICAgIHJldHVybiBgRFJPUCBEQVRBQkFTRSBJRiBFWElTVFMgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihkYXRhYmFzZU5hbWUpLnRyaW0oKX07YDtcbiAgfVxuXG4gIGNyZWF0ZVNjaGVtYSgpIHtcbiAgICByZXR1cm4gJ1NIT1cgVEFCTEVTJztcbiAgfVxuXG4gIHNob3dTY2hlbWFzUXVlcnkoKSB7XG4gICAgcmV0dXJuICdTSE9XIFRBQkxFUyc7XG4gIH1cblxuICB2ZXJzaW9uUXVlcnkoKSB7XG4gICAgcmV0dXJuICdTRUxFQ1QgVkVSU0lPTigpIGFzIGB2ZXJzaW9uYCc7XG4gIH1cblxuICBjcmVhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSwgYXR0cmlidXRlcywgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuZ2luZTogJ0lubm9EQicsXG4gICAgICBjaGFyc2V0OiBudWxsLFxuICAgICAgcm93Rm9ybWF0OiBudWxsXG4gICAgfSwgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICBjb25zdCBwcmltYXJ5S2V5cyA9IFtdO1xuICAgIGNvbnN0IGZvcmVpZ25LZXlzID0ge307XG4gICAgY29uc3QgYXR0clN0ciA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBhdHRyIGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGF0dHJpYnV0ZXMsIGF0dHIpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGRhdGFUeXBlID0gYXR0cmlidXRlc1thdHRyXTtcbiAgICAgIGxldCBtYXRjaDtcblxuICAgICAgaWYgKGRhdGFUeXBlLmluY2x1ZGVzKCdQUklNQVJZIEtFWScpKSB7XG4gICAgICAgIHByaW1hcnlLZXlzLnB1c2goYXR0cik7XG5cbiAgICAgICAgaWYgKGRhdGFUeXBlLmluY2x1ZGVzKCdSRUZFUkVOQ0VTJykpIHtcbiAgICAgICAgICAvLyBNeVNRTCBkb2Vzbid0IHN1cHBvcnQgaW5saW5lIFJFRkVSRU5DRVMgZGVjbGFyYXRpb25zOiBtb3ZlIHRvIHRoZSBlbmRcbiAgICAgICAgICBtYXRjaCA9IGRhdGFUeXBlLm1hdGNoKC9eKC4rKSAoUkVGRVJFTkNFUy4qKSQvKTtcbiAgICAgICAgICBhdHRyU3RyLnB1c2goYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cil9ICR7bWF0Y2hbMV0ucmVwbGFjZSgnUFJJTUFSWSBLRVknLCAnJyl9YCk7XG4gICAgICAgICAgZm9yZWlnbktleXNbYXR0cl0gPSBtYXRjaFsyXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdHRyU3RyLnB1c2goYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cil9ICR7ZGF0YVR5cGUucmVwbGFjZSgnUFJJTUFSWSBLRVknLCAnJyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVR5cGUuaW5jbHVkZXMoJ1JFRkVSRU5DRVMnKSkge1xuICAgICAgICAvLyBNeVNRTCBkb2Vzbid0IHN1cHBvcnQgaW5saW5lIFJFRkVSRU5DRVMgZGVjbGFyYXRpb25zOiBtb3ZlIHRvIHRoZSBlbmRcbiAgICAgICAgbWF0Y2ggPSBkYXRhVHlwZS5tYXRjaCgvXiguKykgKFJFRkVSRU5DRVMuKikkLyk7XG4gICAgICAgIGF0dHJTdHIucHVzaChgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKX0gJHttYXRjaFsxXX1gKTtcbiAgICAgICAgZm9yZWlnbktleXNbYXR0cl0gPSBtYXRjaFsyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF0dHJTdHIucHVzaChgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKX0gJHtkYXRhVHlwZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpO1xuICAgIGxldCBhdHRyaWJ1dGVzQ2xhdXNlID0gYXR0clN0ci5qb2luKCcsICcpO1xuICAgIGNvbnN0IGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQgJiYgdHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gJ3N0cmluZycgPyBgIENPTU1FTlQgJHt0aGlzLmVzY2FwZShvcHRpb25zLmNvbW1lbnQpfWAgOiAnJztcbiAgICBjb25zdCBlbmdpbmUgPSBvcHRpb25zLmVuZ2luZTtcbiAgICBjb25zdCBjaGFyc2V0ID0gb3B0aW9ucy5jaGFyc2V0ID8gYCBERUZBVUxUIENIQVJTRVQ9JHtvcHRpb25zLmNoYXJzZXR9YCA6ICcnO1xuICAgIGNvbnN0IGNvbGxhdGlvbiA9IG9wdGlvbnMuY29sbGF0ZSA/IGAgQ09MTEFURSAke29wdGlvbnMuY29sbGF0ZX1gIDogJyc7XG4gICAgY29uc3Qgcm93Rm9ybWF0ID0gb3B0aW9ucy5yb3dGb3JtYXQgPyBgIFJPV19GT1JNQVQ9JHtvcHRpb25zLnJvd0Zvcm1hdH1gIDogJyc7XG4gICAgY29uc3QgaW5pdGlhbEF1dG9JbmNyZW1lbnQgPSBvcHRpb25zLmluaXRpYWxBdXRvSW5jcmVtZW50ID8gYCBBVVRPX0lOQ1JFTUVOVD0ke29wdGlvbnMuaW5pdGlhbEF1dG9JbmNyZW1lbnR9YCA6ICcnO1xuICAgIGNvbnN0IHBrU3RyaW5nID0gcHJpbWFyeUtleXMubWFwKHBrID0+IHRoaXMucXVvdGVJZGVudGlmaWVyKHBrKSkuam9pbignLCAnKTtcblxuICAgIGlmIChvcHRpb25zLnVuaXF1ZUtleXMpIHtcbiAgICAgIF8uZWFjaChvcHRpb25zLnVuaXF1ZUtleXMsIChjb2x1bW5zLCBpbmRleE5hbWUpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbnMuY3VzdG9tSW5kZXgpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGluZGV4TmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGluZGV4TmFtZSA9IGB1bmlxXyR7dGFibGVOYW1lfV8ke2NvbHVtbnMuZmllbGRzLmpvaW4oJ18nKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhdHRyaWJ1dGVzQ2xhdXNlICs9IGAsIFVOSVFVRSAke3RoaXMucXVvdGVJZGVudGlmaWVyKGluZGV4TmFtZSl9ICgke2NvbHVtbnMuZmllbGRzLm1hcChmaWVsZCA9PiB0aGlzLnF1b3RlSWRlbnRpZmllcihmaWVsZCkpLmpvaW4oJywgJyl9KWA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwa1N0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICBhdHRyaWJ1dGVzQ2xhdXNlICs9IGAsIFBSSU1BUlkgS0VZICgke3BrU3RyaW5nfSlgO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZmtleSBpbiBmb3JlaWduS2V5cykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmb3JlaWduS2V5cywgZmtleSkpIHtcbiAgICAgICAgYXR0cmlidXRlc0NsYXVzZSArPSBgLCBGT1JFSUdOIEtFWSAoJHt0aGlzLnF1b3RlSWRlbnRpZmllcihma2V5KX0pICR7Zm9yZWlnbktleXNbZmtleV19YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICR7dGFibGV9ICgke2F0dHJpYnV0ZXNDbGF1c2V9KSBFTkdJTkU9JHtlbmdpbmV9JHtjb21tZW50fSR7Y2hhcnNldH0ke2NvbGxhdGlvbn0ke2luaXRpYWxBdXRvSW5jcmVtZW50fSR7cm93Rm9ybWF0fTtgO1xuICB9XG5cblxuICBkZXNjcmliZVRhYmxlUXVlcnkodGFibGVOYW1lLCBzY2hlbWEsIHNjaGVtYURlbGltaXRlcikge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdW90ZVRhYmxlKFxuICAgICAgdGhpcy5hZGRTY2hlbWEoe1xuICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgIF9zY2hlbWE6IHNjaGVtYSxcbiAgICAgICAgX3NjaGVtYURlbGltaXRlcjogc2NoZW1hRGVsaW1pdGVyXG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gYFNIT1cgRlVMTCBDT0xVTU5TIEZST00gJHt0YWJsZX07YDtcbiAgfVxuXG4gIHNob3dUYWJsZXNRdWVyeShkYXRhYmFzZSkge1xuICAgIGxldCBxdWVyeSA9ICdTRUxFQ1QgVEFCTEVfTkFNRSBGUk9NIElORk9STUFUSU9OX1NDSEVNQS5UQUJMRVMgV0hFUkUgVEFCTEVfVFlQRSA9IFxcJ0JBU0UgVEFCTEVcXCcnO1xuICAgIGlmIChkYXRhYmFzZSkge1xuICAgICAgcXVlcnkgKz0gYCBBTkQgVEFCTEVfU0NIRU1BID0gJHt0aGlzLmVzY2FwZShkYXRhYmFzZSl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnkgKz0gJyBBTkQgVEFCTEVfU0NIRU1BIE5PVCBJTiAoXFwnTVlTUUxcXCcsIFxcJ0lORk9STUFUSU9OX1NDSEVNQVxcJywgXFwnUEVSRk9STUFOQ0VfU0NIRU1BXFwnLCBcXCdTWVNcXCcpJztcbiAgICB9XG4gICAgcmV0dXJuIGAke3F1ZXJ5fTtgO1xuICB9XG5cbiAgYWRkQ29sdW1uUXVlcnkodGFibGUsIGtleSwgZGF0YVR5cGUpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5hdHRyaWJ1dGVUb1NRTChkYXRhVHlwZSwge1xuICAgICAgY29udGV4dDogJ2FkZENvbHVtbicsXG4gICAgICB0YWJsZU5hbWU6IHRhYmxlLFxuICAgICAgZm9yZWlnbktleToga2V5XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYEFMVEVSIFRBQkxFICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlKX0gQUREICR7dGhpcy5xdW90ZUlkZW50aWZpZXIoa2V5KX0gJHtkZWZpbml0aW9ufTtgO1xuICB9XG5cbiAgcmVtb3ZlQ29sdW1uUXVlcnkodGFibGVOYW1lLCBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgcmV0dXJuIGBBTFRFUiBUQUJMRSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfSBEUk9QICR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cmlidXRlTmFtZSl9O2A7XG4gIH1cblxuICBjaGFuZ2VDb2x1bW5RdWVyeSh0YWJsZU5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCBhdHRyU3RyaW5nID0gW107XG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGxldCBkZWZpbml0aW9uID0gYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXTtcbiAgICAgIGlmIChkZWZpbml0aW9uLmluY2x1ZGVzKCdSRUZFUkVOQ0VTJykpIHtcbiAgICAgICAgY29uc3QgYXR0ck5hbWUgPSB0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgZGVmaW5pdGlvbiA9IGRlZmluaXRpb24ucmVwbGFjZSgvLis/KD89UkVGRVJFTkNFUykvLCAnJyk7XG4gICAgICAgIGNvbnN0cmFpbnRTdHJpbmcucHVzaChgRk9SRUlHTiBLRVkgKCR7YXR0ck5hbWV9KSAke2RlZmluaXRpb259YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRyU3RyaW5nLnB1c2goYFxcYCR7YXR0cmlidXRlTmFtZX1cXGAgXFxgJHthdHRyaWJ1dGVOYW1lfVxcYCAke2RlZmluaXRpb259YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZpbmFsUXVlcnkgPSAnJztcbiAgICBpZiAoYXR0clN0cmluZy5sZW5ndGgpIHtcbiAgICAgIGZpbmFsUXVlcnkgKz0gYENIQU5HRSAke2F0dHJTdHJpbmcuam9pbignLCAnKX1gO1xuICAgICAgZmluYWxRdWVyeSArPSBjb25zdHJhaW50U3RyaW5nLmxlbmd0aCA/ICcgJyA6ICcnO1xuICAgIH1cbiAgICBpZiAoY29uc3RyYWludFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIGZpbmFsUXVlcnkgKz0gYEFERCAke2NvbnN0cmFpbnRTdHJpbmcuam9pbignLCAnKX1gO1xuICAgIH1cblxuICAgIHJldHVybiBgQUxURVIgVEFCTEUgJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX0gJHtmaW5hbFF1ZXJ5fTtgO1xuICB9XG5cbiAgcmVuYW1lQ29sdW1uUXVlcnkodGFibGVOYW1lLCBhdHRyQmVmb3JlLCBhdHRyaWJ1dGVzKSB7XG4gICAgY29uc3QgYXR0clN0cmluZyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBhdHRyTmFtZSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gYXR0cmlidXRlc1thdHRyTmFtZV07XG4gICAgICBhdHRyU3RyaW5nLnB1c2goYFxcYCR7YXR0ckJlZm9yZX1cXGAgXFxgJHthdHRyTmFtZX1cXGAgJHtkZWZpbml0aW9ufWApO1xuICAgIH1cblxuICAgIHJldHVybiBgQUxURVIgVEFCTEUgJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX0gQ0hBTkdFICR7YXR0clN0cmluZy5qb2luKCcsICcpfTtgO1xuICB9XG5cbiAgaGFuZGxlU2VxdWVsaXplTWV0aG9kKHNtdGgsIHRhYmxlTmFtZSwgZmFjdG9yeSwgb3B0aW9ucywgcHJlcGVuZCkge1xuICAgIGlmIChzbXRoIGluc3RhbmNlb2YgVXRpbHMuSnNvbikge1xuICAgICAgLy8gUGFyc2UgbmVzdGVkIG9iamVjdFxuICAgICAgaWYgKHNtdGguY29uZGl0aW9ucykge1xuICAgICAgICBjb25zdCBjb25kaXRpb25zID0gdGhpcy5wYXJzZUNvbmRpdGlvbk9iamVjdChzbXRoLmNvbmRpdGlvbnMpLm1hcChjb25kaXRpb24gPT5cbiAgICAgICAgICBgJHt0aGlzLmpzb25QYXRoRXh0cmFjdGlvblF1ZXJ5KGNvbmRpdGlvbi5wYXRoWzBdLCBfLnRhaWwoY29uZGl0aW9uLnBhdGgpKX0gPSAnJHtjb25kaXRpb24udmFsdWV9J2BcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gY29uZGl0aW9ucy5qb2luKCcgQU5EICcpO1xuICAgICAgfVxuICAgICAgaWYgKHNtdGgucGF0aCkge1xuICAgICAgICBsZXQgc3RyO1xuXG4gICAgICAgIC8vIEFsbG93IHNwZWNpZnlpbmcgY29uZGl0aW9ucyB1c2luZyB0aGUgc3FsaXRlIGpzb24gZnVuY3Rpb25zXG4gICAgICAgIGlmICh0aGlzLl9jaGVja1ZhbGlkSnNvblN0YXRlbWVudChzbXRoLnBhdGgpKSB7XG4gICAgICAgICAgc3RyID0gc210aC5wYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFsc28gc3VwcG9ydCBqc29uIHByb3BlcnR5IGFjY2Vzc29yc1xuICAgICAgICAgIGNvbnN0IHBhdGhzID0gXy50b1BhdGgoc210aC5wYXRoKTtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSBwYXRocy5zaGlmdCgpO1xuICAgICAgICAgIHN0ciA9IHRoaXMuanNvblBhdGhFeHRyYWN0aW9uUXVlcnkoY29sdW1uLCBwYXRocyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc210aC52YWx1ZSkge1xuICAgICAgICAgIHN0ciArPSB1dGlsLmZvcm1hdCgnID0gJXMnLCB0aGlzLmVzY2FwZShzbXRoLnZhbHVlKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc210aCBpbnN0YW5jZW9mIFV0aWxzLkNhc3QpIHtcbiAgICAgIGlmICgvdGltZXN0YW1wL2kudGVzdChzbXRoLnR5cGUpKSB7XG4gICAgICAgIHNtdGgudHlwZSA9ICdkYXRldGltZSc7XG4gICAgICB9IGVsc2UgaWYgKHNtdGguanNvbiAmJiAvYm9vbGVhbi9pLnRlc3Qoc210aC50eXBlKSkge1xuICAgICAgICAvLyB0cnVlIG9yIGZhbHNlIGNhbm5vdCBiZSBjYXN0ZWQgYXMgYm9vbGVhbnMgd2l0aGluIGEgSlNPTiBzdHJ1Y3R1cmVcbiAgICAgICAgc210aC50eXBlID0gJ2NoYXInO1xuICAgICAgfSBlbHNlIGlmICgvZG91YmxlIHByZWNpc2lvbi9pLnRlc3Qoc210aC50eXBlKSB8fCAvYm9vbGVhbi9pLnRlc3Qoc210aC50eXBlKSB8fCAvaW50ZWdlci9pLnRlc3Qoc210aC50eXBlKSkge1xuICAgICAgICBzbXRoLnR5cGUgPSAnZGVjaW1hbCc7XG4gICAgICB9IGVsc2UgaWYgKC90ZXh0L2kudGVzdChzbXRoLnR5cGUpKSB7XG4gICAgICAgIHNtdGgudHlwZSA9ICdjaGFyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuaGFuZGxlU2VxdWVsaXplTWV0aG9kKHNtdGgsIHRhYmxlTmFtZSwgZmFjdG9yeSwgb3B0aW9ucywgcHJlcGVuZCk7XG4gIH1cblxuICBfdG9KU09OVmFsdWUodmFsdWUpIHtcbiAgICAvLyB0cnVlL2ZhbHNlIGFyZSBzdG9yZWQgYXMgc3RyaW5ncyBpbiBteXNxbFxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIC8vIG51bGwgaXMgc3RvcmVkIGFzIGEgc3RyaW5nIGluIG15c3FsXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB1cHNlcnRRdWVyeSh0YWJsZU5hbWUsIGluc2VydFZhbHVlcywgdXBkYXRlVmFsdWVzLCB3aGVyZSwgbW9kZWwsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLm9uRHVwbGljYXRlID0gJ1VQREFURSAnO1xuXG4gICAgb3B0aW9ucy5vbkR1cGxpY2F0ZSArPSBPYmplY3Qua2V5cyh1cGRhdGVWYWx1ZXMpLm1hcChrZXkgPT4ge1xuICAgICAga2V5ID0gdGhpcy5xdW90ZUlkZW50aWZpZXIoa2V5KTtcbiAgICAgIHJldHVybiBgJHtrZXl9PVZBTFVFUygke2tleX0pYDtcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0UXVlcnkodGFibGVOYW1lLCBpbnNlcnRWYWx1ZXMsIG1vZGVsLnJhd0F0dHJpYnV0ZXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgdHJ1bmNhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSkge1xuICAgIHJldHVybiBgVFJVTkNBVEUgJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX1gO1xuICB9XG5cbiAgZGVsZXRlUXVlcnkodGFibGVOYW1lLCB3aGVyZSwgb3B0aW9ucyA9IHt9LCBtb2RlbCkge1xuICAgIGxldCBsaW1pdCA9ICcnO1xuICAgIGxldCBxdWVyeSA9IGBERUxFVEUgRlJPTSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfWA7XG5cbiAgICBpZiAob3B0aW9ucy5saW1pdCkge1xuICAgICAgbGltaXQgPSBgIExJTUlUICR7dGhpcy5lc2NhcGUob3B0aW9ucy5saW1pdCl9YDtcbiAgICB9XG5cbiAgICB3aGVyZSA9IHRoaXMuZ2V0V2hlcmVDb25kaXRpb25zKHdoZXJlLCBudWxsLCBtb2RlbCwgb3B0aW9ucyk7XG5cbiAgICBpZiAod2hlcmUpIHtcbiAgICAgIHF1ZXJ5ICs9IGAgV0hFUkUgJHt3aGVyZX1gO1xuICAgIH1cblxuICAgIHJldHVybiBxdWVyeSArIGxpbWl0O1xuICB9XG5cbiAgc2hvd0luZGV4ZXNRdWVyeSh0YWJsZU5hbWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYFNIT1cgSU5ERVggRlJPTSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfSR7KG9wdGlvbnMgfHwge30pLmRhdGFiYXNlID8gYCBGUk9NIFxcYCR7b3B0aW9ucy5kYXRhYmFzZX1cXGBgIDogJyd9YDtcbiAgfVxuXG4gIHNob3dDb25zdHJhaW50c1F1ZXJ5KHRhYmxlLCBjb25zdHJhaW50TmFtZSkge1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRhYmxlLnRhYmxlTmFtZSB8fCB0YWJsZTtcbiAgICBjb25zdCBzY2hlbWFOYW1lID0gdGFibGUuc2NoZW1hO1xuXG4gICAgbGV0IHNxbCA9IFtcbiAgICAgICdTRUxFQ1QgQ09OU1RSQUlOVF9DQVRBTE9HIEFTIGNvbnN0cmFpbnRDYXRhbG9nLCcsXG4gICAgICAnQ09OU1RSQUlOVF9OQU1FIEFTIGNvbnN0cmFpbnROYW1lLCcsXG4gICAgICAnQ09OU1RSQUlOVF9TQ0hFTUEgQVMgY29uc3RyYWludFNjaGVtYSwnLFxuICAgICAgJ0NPTlNUUkFJTlRfVFlQRSBBUyBjb25zdHJhaW50VHlwZSwnLFxuICAgICAgJ1RBQkxFX05BTUUgQVMgdGFibGVOYW1lLCcsXG4gICAgICAnVEFCTEVfU0NIRU1BIEFTIHRhYmxlU2NoZW1hJyxcbiAgICAgICdmcm9tIElORk9STUFUSU9OX1NDSEVNQS5UQUJMRV9DT05TVFJBSU5UUycsXG4gICAgICBgV0hFUkUgdGFibGVfbmFtZT0nJHt0YWJsZU5hbWV9J2BcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIGlmIChjb25zdHJhaW50TmFtZSkge1xuICAgICAgc3FsICs9IGAgQU5EIGNvbnN0cmFpbnRfbmFtZSA9ICcke2NvbnN0cmFpbnROYW1lfSdgO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWFOYW1lKSB7XG4gICAgICBzcWwgKz0gYCBBTkQgVEFCTEVfU0NIRU1BID0gJyR7c2NoZW1hTmFtZX0nYDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7c3FsfTtgO1xuICB9XG5cbiAgcmVtb3ZlSW5kZXhRdWVyeSh0YWJsZU5hbWUsIGluZGV4TmFtZU9yQXR0cmlidXRlcykge1xuICAgIGxldCBpbmRleE5hbWUgPSBpbmRleE5hbWVPckF0dHJpYnV0ZXM7XG5cbiAgICBpZiAodHlwZW9mIGluZGV4TmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGluZGV4TmFtZSA9IFV0aWxzLnVuZGVyc2NvcmUoYCR7dGFibGVOYW1lfV8ke2luZGV4TmFtZU9yQXR0cmlidXRlcy5qb2luKCdfJyl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBEUk9QIElOREVYICR7dGhpcy5xdW90ZUlkZW50aWZpZXIoaW5kZXhOYW1lKX0gT04gJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX1gO1xuICB9XG5cbiAgYXR0cmlidXRlVG9TUUwoYXR0cmlidXRlLCBvcHRpb25zKSB7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoYXR0cmlidXRlKSkge1xuICAgICAgYXR0cmlidXRlID0ge1xuICAgICAgICB0eXBlOiBhdHRyaWJ1dGVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlU3RyaW5nID0gYXR0cmlidXRlLnR5cGUudG9TdHJpbmcoeyBlc2NhcGU6IHRoaXMuZXNjYXBlLmJpbmQodGhpcykgfSk7XG4gICAgbGV0IHRlbXBsYXRlID0gYXR0cmlidXRlU3RyaW5nO1xuXG4gICAgaWYgKGF0dHJpYnV0ZS5hbGxvd051bGwgPT09IGZhbHNlKSB7XG4gICAgICB0ZW1wbGF0ZSArPSAnIE5PVCBOVUxMJztcbiAgICB9XG5cbiAgICBpZiAoYXR0cmlidXRlLmF1dG9JbmNyZW1lbnQpIHtcbiAgICAgIHRlbXBsYXRlICs9ICcgYXV0b19pbmNyZW1lbnQnO1xuICAgIH1cblxuICAgIC8vIEJMT0IvVEVYVC9HRU9NRVRSWS9KU09OIGNhbm5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZVxuICAgIGlmICghdHlwZVdpdGhvdXREZWZhdWx0LmhhcyhhdHRyaWJ1dGVTdHJpbmcpXG4gICAgICAmJiBhdHRyaWJ1dGUudHlwZS5fYmluYXJ5ICE9PSB0cnVlXG4gICAgICAmJiBVdGlscy5kZWZhdWx0VmFsdWVTY2hlbWFibGUoYXR0cmlidXRlLmRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIHRlbXBsYXRlICs9IGAgREVGQVVMVCAke3RoaXMuZXNjYXBlKGF0dHJpYnV0ZS5kZWZhdWx0VmFsdWUpfWA7XG4gICAgfVxuXG4gICAgaWYgKGF0dHJpYnV0ZS51bmlxdWUgPT09IHRydWUpIHtcbiAgICAgIHRlbXBsYXRlICs9ICcgVU5JUVVFJztcbiAgICB9XG5cbiAgICBpZiAoYXR0cmlidXRlLnByaW1hcnlLZXkpIHtcbiAgICAgIHRlbXBsYXRlICs9ICcgUFJJTUFSWSBLRVknO1xuICAgIH1cblxuICAgIGlmIChhdHRyaWJ1dGUuY29tbWVudCkge1xuICAgICAgdGVtcGxhdGUgKz0gYCBDT01NRU5UICR7dGhpcy5lc2NhcGUoYXR0cmlidXRlLmNvbW1lbnQpfWA7XG4gICAgfVxuXG4gICAgaWYgKGF0dHJpYnV0ZS5maXJzdCkge1xuICAgICAgdGVtcGxhdGUgKz0gJyBGSVJTVCc7XG4gICAgfVxuICAgIGlmIChhdHRyaWJ1dGUuYWZ0ZXIpIHtcbiAgICAgIHRlbXBsYXRlICs9IGAgQUZURVIgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyaWJ1dGUuYWZ0ZXIpfWA7XG4gICAgfVxuXG4gICAgaWYgKGF0dHJpYnV0ZS5yZWZlcmVuY2VzKSB7XG5cbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dCA9PT0gJ2FkZENvbHVtbicgJiYgb3B0aW9ucy5mb3JlaWduS2V5KSB7XG4gICAgICAgIGNvbnN0IGF0dHJOYW1lID0gdGhpcy5xdW90ZUlkZW50aWZpZXIob3B0aW9ucy5mb3JlaWduS2V5KTtcbiAgICAgICAgY29uc3QgZmtOYW1lID0gdGhpcy5xdW90ZUlkZW50aWZpZXIoYCR7b3B0aW9ucy50YWJsZU5hbWV9XyR7YXR0ck5hbWV9X2ZvcmVpZ25faWR4YCk7XG5cbiAgICAgICAgdGVtcGxhdGUgKz0gYCwgQUREIENPTlNUUkFJTlQgJHtma05hbWV9IEZPUkVJR04gS0VZICgke2F0dHJOYW1lfSlgO1xuICAgICAgfVxuXG4gICAgICB0ZW1wbGF0ZSArPSBgIFJFRkVSRU5DRVMgJHt0aGlzLnF1b3RlVGFibGUoYXR0cmlidXRlLnJlZmVyZW5jZXMubW9kZWwpfWA7XG5cbiAgICAgIGlmIChhdHRyaWJ1dGUucmVmZXJlbmNlcy5rZXkpIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gYCAoJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyaWJ1dGUucmVmZXJlbmNlcy5rZXkpfSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gYCAoJHt0aGlzLnF1b3RlSWRlbnRpZmllcignaWQnKX0pYDtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJpYnV0ZS5vbkRlbGV0ZSkge1xuICAgICAgICB0ZW1wbGF0ZSArPSBgIE9OIERFTEVURSAke2F0dHJpYnV0ZS5vbkRlbGV0ZS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRyaWJ1dGUub25VcGRhdGUpIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gYCBPTiBVUERBVEUgJHthdHRyaWJ1dGUub25VcGRhdGUudG9VcHBlckNhc2UoKX1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIGF0dHJpYnV0ZXNUb1NRTChhdHRyaWJ1dGVzLCBvcHRpb25zKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgICByZXN1bHRbYXR0cmlidXRlLmZpZWxkIHx8IGtleV0gPSB0aGlzLmF0dHJpYnV0ZVRvU1FMKGF0dHJpYnV0ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBzdGF0bWVtZW50IGlzIGpzb24gZnVuY3Rpb24gb3Igc2ltcGxlIHBhdGhcbiAgICpcbiAgICogQHBhcmFtICAge3N0cmluZ30gIHN0bXQgIFRoZSBzdGF0ZW1lbnQgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICAgIHRydWUgaWYgdGhlIGdpdmVuIHN0YXRlbWVudCBpcyBqc29uIGZ1bmN0aW9uXG4gICAqIEB0aHJvd3MgIHtFcnJvcn0gICAgICAgICB0aHJvdyBpZiB0aGUgc3RhdGVtZW50IGxvb2tzIGxpa2UganNvbiBmdW5jdGlvbiBidXQgaGFzIGludmFsaWQgdG9rZW5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja1ZhbGlkSnNvblN0YXRlbWVudChzdG10KSB7XG4gICAgaWYgKHR5cGVvZiBzdG10ICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICAgIGxldCBvcGVuaW5nQnJhY2tldHMgPSAwO1xuICAgIGxldCBjbG9zaW5nQnJhY2tldHMgPSAwO1xuICAgIGxldCBoYXNKc29uRnVuY3Rpb24gPSBmYWxzZTtcbiAgICBsZXQgaGFzSW52YWxpZFRva2VuID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgc3RtdC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IHN0bXQuc3Vic3RyKGN1cnJlbnRJbmRleCk7XG4gICAgICBjb25zdCBmdW5jdGlvbk1hdGNoZXMgPSBqc29uRnVuY3Rpb25SZWdleC5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoZnVuY3Rpb25NYXRjaGVzKSB7XG4gICAgICAgIGN1cnJlbnRJbmRleCArPSBmdW5jdGlvbk1hdGNoZXNbMF0uaW5kZXhPZignKCcpO1xuICAgICAgICBoYXNKc29uRnVuY3Rpb24gPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3BlcmF0b3JNYXRjaGVzID0ganNvbk9wZXJhdG9yUmVnZXguZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKG9wZXJhdG9yTWF0Y2hlcykge1xuICAgICAgICBjdXJyZW50SW5kZXggKz0gb3BlcmF0b3JNYXRjaGVzWzBdLmxlbmd0aDtcbiAgICAgICAgaGFzSnNvbkZ1bmN0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuTWF0Y2hlcyA9IHRva2VuQ2FwdHVyZVJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmICh0b2tlbk1hdGNoZXMpIHtcbiAgICAgICAgY29uc3QgY2FwdHVyZWRUb2tlbiA9IHRva2VuTWF0Y2hlc1sxXTtcbiAgICAgICAgaWYgKGNhcHR1cmVkVG9rZW4gPT09ICcoJykge1xuICAgICAgICAgIG9wZW5pbmdCcmFja2V0cysrO1xuICAgICAgICB9IGVsc2UgaWYgKGNhcHR1cmVkVG9rZW4gPT09ICcpJykge1xuICAgICAgICAgIGNsb3NpbmdCcmFja2V0cysrO1xuICAgICAgICB9IGVsc2UgaWYgKGNhcHR1cmVkVG9rZW4gPT09ICc7Jykge1xuICAgICAgICAgIGhhc0ludmFsaWRUb2tlbiA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudEluZGV4ICs9IHRva2VuTWF0Y2hlc1swXS5sZW5ndGg7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpbnZhbGlkIGpzb24gc3RhdGVtZW50XG4gICAgaWYgKGhhc0pzb25GdW5jdGlvbiAmJiAoaGFzSW52YWxpZFRva2VuIHx8IG9wZW5pbmdCcmFja2V0cyAhPT0gY2xvc2luZ0JyYWNrZXRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGpzb24gc3RhdGVtZW50OiAke3N0bXR9YCk7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHRydWUgaWYgdGhlIHN0YXRlbWVudCBoYXMgdmFsaWQganNvbiBmdW5jdGlvblxuICAgIHJldHVybiBoYXNKc29uRnVuY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIFNRTCBxdWVyeSB0aGF0IHJldHVybnMgYWxsIGZvcmVpZ24ga2V5cyBvZiBhIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhYmxlICBUaGUgdGFibGUuXG4gICAqIEBwYXJhbSAge3N0cmluZ30gc2NoZW1hTmFtZSBUaGUgbmFtZSBvZiB0aGUgc2NoZW1hLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgICAgIFRoZSBnZW5lcmF0ZWQgc3FsIHF1ZXJ5LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0Rm9yZWlnbktleXNRdWVyeSh0YWJsZSwgc2NoZW1hTmFtZSkge1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRhYmxlLnRhYmxlTmFtZSB8fCB0YWJsZTtcbiAgICByZXR1cm4gYFNFTEVDVCAke2ZvcmVpZ25LZXlGaWVsZHN9IEZST00gSU5GT1JNQVRJT05fU0NIRU1BLktFWV9DT0xVTU5fVVNBR0Ugd2hlcmUgVEFCTEVfTkFNRSA9ICcke3RhYmxlTmFtZX0nIEFORCBDT05TVFJBSU5UX05BTUUhPSdQUklNQVJZJyBBTkQgQ09OU1RSQUlOVF9TQ0hFTUE9JyR7c2NoZW1hTmFtZX0nIEFORCBSRUZFUkVOQ0VEX1RBQkxFX05BTUUgSVMgTk9UIE5VTEw7YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gU1FMIHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZm9yZWlnbiBrZXkgY29uc3RyYWludCBvZiBhIGdpdmVuIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSB0YWJsZSAgVGhlIHRhYmxlLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IGNvbHVtbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvbHVtbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gICAgICAgICAgICBUaGUgZ2VuZXJhdGVkIHNxbCBxdWVyeS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEZvcmVpZ25LZXlRdWVyeSh0YWJsZSwgY29sdW1uTmFtZSkge1xuICAgIGNvbnN0IHF1b3RlZFNjaGVtYU5hbWUgPSB0YWJsZS5zY2hlbWEgPyB3cmFwU2luZ2xlUXVvdGUodGFibGUuc2NoZW1hKSA6ICcnO1xuICAgIGNvbnN0IHF1b3RlZFRhYmxlTmFtZSA9IHdyYXBTaW5nbGVRdW90ZSh0YWJsZS50YWJsZU5hbWUgfHwgdGFibGUpO1xuICAgIGNvbnN0IHF1b3RlZENvbHVtbk5hbWUgPSB3cmFwU2luZ2xlUXVvdGUoY29sdW1uTmFtZSk7XG5cbiAgICByZXR1cm4gYFNFTEVDVCAke2ZvcmVpZ25LZXlGaWVsZHN9IEZST00gSU5GT1JNQVRJT05fU0NIRU1BLktFWV9DT0xVTU5fVVNBR0VgXG4gICAgICArIGAgV0hFUkUgKFJFRkVSRU5DRURfVEFCTEVfTkFNRSA9ICR7cXVvdGVkVGFibGVOYW1lfSR7dGFibGUuc2NoZW1hXG4gICAgICAgID8gYCBBTkQgUkVGRVJFTkNFRF9UQUJMRV9TQ0hFTUEgPSAke3F1b3RlZFNjaGVtYU5hbWV9YFxuICAgICAgICA6ICcnfSBBTkQgUkVGRVJFTkNFRF9DT0xVTU5fTkFNRSA9ICR7cXVvdGVkQ29sdW1uTmFtZX0pYFxuICAgICAgKyBgIE9SIChUQUJMRV9OQU1FID0gJHtxdW90ZWRUYWJsZU5hbWV9JHt0YWJsZS5zY2hlbWEgP1xuICAgICAgICBgIEFORCBUQUJMRV9TQ0hFTUEgPSAke3F1b3RlZFNjaGVtYU5hbWV9YCA6ICcnfSBBTkQgQ09MVU1OX05BTUUgPSAke3F1b3RlZENvbHVtbk5hbWV9IEFORCBSRUZFUkVOQ0VEX1RBQkxFX05BTUUgSVMgTk9UIE5VTEwpYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gU1FMIHF1ZXJ5IHRoYXQgcmVtb3ZlcyBhIGZvcmVpZ24ga2V5IGZyb20gYSB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSB0YWJsZU5hbWUgIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS5cbiAgICogQHBhcmFtICB7c3RyaW5nfSBmb3JlaWduS2V5IFRoZSBuYW1lIG9mIHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgICAgIFRoZSBnZW5lcmF0ZWQgc3FsIHF1ZXJ5LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZHJvcEZvcmVpZ25LZXlRdWVyeSh0YWJsZU5hbWUsIGZvcmVpZ25LZXkpIHtcbiAgICByZXR1cm4gYEFMVEVSIFRBQkxFICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9XG4gICAgICBEUk9QIEZPUkVJR04gS0VZICR7dGhpcy5xdW90ZUlkZW50aWZpZXIoZm9yZWlnbktleSl9O2A7XG4gIH1cbn1cblxuLy8gcHJpdmF0ZSBtZXRob2RzXG5mdW5jdGlvbiB3cmFwU2luZ2xlUXVvdGUoaWRlbnRpZmllcikge1xuICByZXR1cm4gVXRpbHMuYWRkVGlja3MoaWRlbnRpZmllciwgJ1xcJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE15U1FMUXVlcnlHZW5lcmF0b3I7Il19 \ No newline at end of file diff --git a/dist/dialects/parserStore.js b/dist/dialects/parserStore.js index be441ee..0600109 100644 --- a/dist/dialects/parserStore.js +++ b/dist/dialects/parserStore.js @@ -24,4 +24,4 @@ module.exports = dialect => { }; }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kaWFsZWN0cy9wYXJzZXJTdG9yZS5qcyJdLCJuYW1lcyI6WyJzdG9yZXMiLCJNYXAiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGlhbGVjdCIsImhhcyIsInNldCIsImNsZWFyIiwiZ2V0IiwicmVmcmVzaCIsImRhdGFUeXBlIiwidHlwZSIsInR5cGVzIiwicGFyc2UiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE1BQU1BLE1BQU0sR0FBRyxJQUFJQyxHQUFKLEVBQWY7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQkMsT0FBTyxJQUFJO0FBQzFCLE1BQUksQ0FBQ0osTUFBTSxDQUFDSyxHQUFQLENBQVdELE9BQVgsQ0FBTCxFQUEwQjtBQUN4QkosSUFBQUEsTUFBTSxDQUFDTSxHQUFQLENBQVdGLE9BQVgsRUFBb0IsSUFBSUgsR0FBSixFQUFwQjtBQUNEOztBQUVELFNBQU87QUFDTE0sSUFBQUEsS0FBSyxHQUFHO0FBQ05QLE1BQUFBLE1BQU0sQ0FBQ1EsR0FBUCxDQUFXSixPQUFYLEVBQW9CRyxLQUFwQjtBQUNELEtBSEk7O0FBSUxFLElBQUFBLE9BQU8sQ0FBQ0MsUUFBRCxFQUFXO0FBQ2hCLFdBQUssTUFBTUMsSUFBWCxJQUFtQkQsUUFBUSxDQUFDRSxLQUFULENBQWVSLE9BQWYsQ0FBbkIsRUFBNEM7QUFDMUNKLFFBQUFBLE1BQU0sQ0FBQ1EsR0FBUCxDQUFXSixPQUFYLEVBQW9CRSxHQUFwQixDQUF3QkssSUFBeEIsRUFBOEJELFFBQVEsQ0FBQ0csS0FBdkM7QUFDRDtBQUNGLEtBUkk7O0FBU0xMLElBQUFBLEdBQUcsQ0FBQ0csSUFBRCxFQUFPO0FBQ1IsYUFBT1gsTUFBTSxDQUFDUSxHQUFQLENBQVdKLE9BQVgsRUFBb0JJLEdBQXBCLENBQXdCRyxJQUF4QixDQUFQO0FBQ0Q7O0FBWEksR0FBUDtBQWFELENBbEJEIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3Qgc3RvcmVzID0gbmV3IE1hcCgpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBkaWFsZWN0ID0+IHtcclxuICBpZiAoIXN0b3Jlcy5oYXMoZGlhbGVjdCkpIHtcclxuICAgIHN0b3Jlcy5zZXQoZGlhbGVjdCwgbmV3IE1hcCgpKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgc3RvcmVzLmdldChkaWFsZWN0KS5jbGVhcigpO1xyXG4gICAgfSxcclxuICAgIHJlZnJlc2goZGF0YVR5cGUpIHtcclxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIGRhdGFUeXBlLnR5cGVzW2RpYWxlY3RdKSB7XHJcbiAgICAgICAgc3RvcmVzLmdldChkaWFsZWN0KS5zZXQodHlwZSwgZGF0YVR5cGUucGFyc2UpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0KHR5cGUpIHtcclxuICAgICAgcmV0dXJuIHN0b3Jlcy5nZXQoZGlhbGVjdCkuZ2V0KHR5cGUpO1xyXG4gICAgfVxyXG4gIH07XHJcbn07XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kaWFsZWN0cy9wYXJzZXJTdG9yZS5qcyJdLCJuYW1lcyI6WyJzdG9yZXMiLCJNYXAiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGlhbGVjdCIsImhhcyIsInNldCIsImNsZWFyIiwiZ2V0IiwicmVmcmVzaCIsImRhdGFUeXBlIiwidHlwZSIsInR5cGVzIiwicGFyc2UiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE1BQU1BLE1BQU0sR0FBRyxJQUFJQyxHQUFKLEVBQWY7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQkMsT0FBTyxJQUFJO0FBQzFCLE1BQUksQ0FBQ0osTUFBTSxDQUFDSyxHQUFQLENBQVdELE9BQVgsQ0FBTCxFQUEwQjtBQUN4QkosSUFBQUEsTUFBTSxDQUFDTSxHQUFQLENBQVdGLE9BQVgsRUFBb0IsSUFBSUgsR0FBSixFQUFwQjtBQUNEOztBQUVELFNBQU87QUFDTE0sSUFBQUEsS0FBSyxHQUFHO0FBQ05QLE1BQUFBLE1BQU0sQ0FBQ1EsR0FBUCxDQUFXSixPQUFYLEVBQW9CRyxLQUFwQjtBQUNELEtBSEk7O0FBSUxFLElBQUFBLE9BQU8sQ0FBQ0MsUUFBRCxFQUFXO0FBQ2hCLFdBQUssTUFBTUMsSUFBWCxJQUFtQkQsUUFBUSxDQUFDRSxLQUFULENBQWVSLE9BQWYsQ0FBbkIsRUFBNEM7QUFDMUNKLFFBQUFBLE1BQU0sQ0FBQ1EsR0FBUCxDQUFXSixPQUFYLEVBQW9CRSxHQUFwQixDQUF3QkssSUFBeEIsRUFBOEJELFFBQVEsQ0FBQ0csS0FBdkM7QUFDRDtBQUNGLEtBUkk7O0FBU0xMLElBQUFBLEdBQUcsQ0FBQ0csSUFBRCxFQUFPO0FBQ1IsYUFBT1gsTUFBTSxDQUFDUSxHQUFQLENBQVdKLE9BQVgsRUFBb0JJLEdBQXBCLENBQXdCRyxJQUF4QixDQUFQO0FBQ0Q7O0FBWEksR0FBUDtBQWFELENBbEJEIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdG9yZXMgPSBuZXcgTWFwKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGlhbGVjdCA9PiB7XG4gIGlmICghc3RvcmVzLmhhcyhkaWFsZWN0KSkge1xuICAgIHN0b3Jlcy5zZXQoZGlhbGVjdCwgbmV3IE1hcCgpKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2xlYXIoKSB7XG4gICAgICBzdG9yZXMuZ2V0KGRpYWxlY3QpLmNsZWFyKCk7XG4gICAgfSxcbiAgICByZWZyZXNoKGRhdGFUeXBlKSB7XG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgZGF0YVR5cGUudHlwZXNbZGlhbGVjdF0pIHtcbiAgICAgICAgc3RvcmVzLmdldChkaWFsZWN0KS5zZXQodHlwZSwgZGF0YVR5cGUucGFyc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0KHR5cGUpIHtcbiAgICAgIHJldHVybiBzdG9yZXMuZ2V0KGRpYWxlY3QpLmdldCh0eXBlKTtcbiAgICB9XG4gIH07XG59O1xuIl19 \ No newline at end of file diff --git a/dist/dialects/sqlite/connection-manager.js b/dist/dialects/sqlite/connection-manager.js index fe562cc..8e5d486 100644 --- a/dist/dialects/sqlite/connection-manager.js +++ b/dist/dialects/sqlite/connection-manager.js @@ -6,20 +6,24 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + const AbstractConnectionManager = require("../abstract/connection-manager"); const Promise = require("../../promise"); @@ -36,17 +40,17 @@ const sequelizeErrors = require("../../errors"); const parserStore = require("../parserStore")("sqlite"); -let ConnectionManager = -/*#__PURE__*/ -function (_AbstractConnectionMa) { +let ConnectionManager = /*#__PURE__*/function (_AbstractConnectionMa) { _inherits(ConnectionManager, _AbstractConnectionMa); + var _super = _createSuper(ConnectionManager); + function ConnectionManager(dialect, sequelize) { var _this; _classCallCheck(this, ConnectionManager); - _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectionManager).call(this, dialect, sequelize)); + _this = _super.call(this, dialect, sequelize); _this.connections = {}; const { @@ -137,4 +141,4 @@ function (_AbstractConnectionMa) { module.exports = ConnectionManager; module.exports.ConnectionManager = ConnectionManager; module.exports.default = ConnectionManager; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvY29ubmVjdGlvbi1tYW5hZ2VyLmpzIl0sIm5hbWVzIjpbIkFic3RyYWN0Q29ubmVjdGlvbk1hbmFnZXIiLCJyZXF1aXJlIiwiUHJvbWlzZSIsImxvZ2dlciIsImRlYnVnIiwiZGVidWdDb250ZXh0IiwiZGF0YVR5cGVzIiwic3FsaXRlIiwic2VxdWVsaXplRXJyb3JzIiwicGFyc2VyU3RvcmUiLCJDb25uZWN0aW9uTWFuYWdlciIsImRpYWxlY3QiLCJzZXF1ZWxpemUiLCJjb25uZWN0aW9ucyIsIm9wZW5EYXRhYmFzZSIsIl9sb2FkRGlhbGVjdE1vZHVsZSIsIm9wdGlvbnMiLCJkYXRhYmFzZSIsImRpYWxlY3RPcHRpb25zIiwidmVyc2lvbiIsImRlc2NyaXB0aW9uIiwic2l6ZSIsImNvbm4iLCJyZWZyZXNoVHlwZVBhcnNlciIsInByb21pc2VzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIm1hcCIsImNvbm5lY3Rpb24iLCJmcm9tQ2FsbGJhY2siLCJjYWxsYmFjayIsImNsb3NlIiwiYWxsIiwidGhlbiIsImJpbmQiLCJkYXRhVHlwZSIsInJlZnJlc2giLCJjbGVhciIsInV1aWQiLCJyZXNvbHZlIiwicmVqZWN0IiwiQ29ubmVjdGlvbkVycm9yIiwiRXJyb3IiLCJ0YXAiLCJjb25maWciLCJwYXNzd29yZCIsImV4ZWMiLCJzcWwiLCJlc2NhcGUiLCJhcmdzIiwiZm9yZWlnbktleXMiLCJmb3JjZSIsInVuZGVmaW5lZCIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLHlCQUF5QixHQUFHQyxPQUFPLENBQUMsZ0NBQUQsQ0FBekM7O0FBQ0EsTUFBTUMsT0FBTyxHQUFHRCxPQUFPLENBQUMsZUFBRCxDQUF2Qjs7QUFDQSxNQUFNO0FBQUVFLEVBQUFBO0FBQUYsSUFBYUYsT0FBTyxDQUFDLG9CQUFE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S0FBWCxJQUFvQkgsVUFBVSxDQUFDRyxLQUFYLEVBQXBCO0FBQ0EsYUFBS1QsSUFBTCxHQUFZOEIsU0FBWjtBQUNBaEQsUUFBQUEsS0FBSyxDQUFFLHVCQUFzQndCLFVBQVUsQ0FBQ1UsSUFBSyxFQUF4QyxDQUFMO0FBQ0EsZUFBTyxLQUFLekIsV0FBTCxDQUFpQmUsVUFBVSxDQUFDVSxJQUE1QixDQUFQO0FBQ0Q7QUFDRjs7OztFQXBHNkJ0Qyx5Qjs7QUF1R2hDcUQsTUFBTSxDQUFDQyxPQUFQLEdBQWlCNUMsaUJBQWpCO0FBQ0EyQyxNQUFNLENBQUNDLE9BQVAsQ0FBZTVDLGlCQUFmLEdBQW1DQSxpQkFBbkM7QUFDQTJDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCN0MsaUJBQXpCIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBBYnN0cmFjdENvbm5lY3Rpb25NYW5hZ2VyID0gcmVxdWlyZShcIi4uL2Fic3RyYWN0L2Nvbm5lY3Rpb24tbWFuYWdlclwiKTtcclxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoXCIuLi8uLi9wcm9taXNlXCIpO1xyXG5jb25zdCB7IGxvZ2dlciB9ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xvZ2dlclwiKTtcclxuY29uc3QgZGVidWcgPSBsb2dnZXIuZGVidWdDb250ZXh0KFwiY29ubmVjdGlvbjpzcWxpdGVcIik7XHJcbmNvbnN0IGRhdGFUeXBlcyA9IHJlcXVpcmUoXCIuLi8uLi9kYXRhLXR5cGVzXCIpLnNxbGl0ZTtcclxuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcclxuY29uc3QgcGFyc2VyU3RvcmUgPSByZXF1aXJlKFwiLi4vcGFyc2VyU3RvcmVcIikoXCJzcWxpdGVcIik7XHJcblxyXG5jbGFzcyBDb25uZWN0aW9uTWFuYWdlciBleHRlbmRzIEFic3RyYWN0Q29ubmVjdGlvbk1hbmFnZXIge1xyXG4gIGNvbnN0cnVjdG9yKGRpYWxlY3QsIHNlcXVlbGl6ZSkge1xyXG4gICAgc3VwZXIoZGlhbGVjdCwgc2VxdWVsaXplKTtcclxuXHJcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0ge307XHJcbiAgICBjb25zdCB7IG9wZW5EYXRhYmFzZSB9ID0gdGhpcy5fbG9hZERpYWxlY3RNb2R1bGUoKTtcclxuICAgIHRoaXMub3BlbkRhdGFiYXNlID0gKCkgPT5cclxuICAgICAgb3BlbkRhdGFiYXNlKFxyXG4gICAgICAgIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGF0YWJhc2UsXHJcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0T3B0aW9ucy52ZXJzaW9uIHx8IFwiMS4wXCIsXHJcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0T3B0aW9ucy5kZXNjcmlwdGlvbiB8fFxyXG4gICAgICAgICAgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kYXRhYmFzZSxcclxuICAgICAgICB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3RPcHRpb25zLnNpemUgfHwgNCAqIDEwMjQgKiAxMDI0XHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmNvbm4gPSB0aGlzLm9wZW5EYXRhYmFzZSgpO1xyXG4gICAgdGhpcy5yZWZyZXNoVHlwZVBhcnNlcihkYXRhVHlwZXMpO1xyXG4gIH1cclxuXHJcbiAgX29uUHJvY2Vzc0V4aXQoKSB7XHJcbiAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFxyXG4gICAgICB0aGlzLmNvbm5lY3Rpb25zXHJcbiAgICApLm1hcChjb25uZWN0aW9uID0+XHJcbiAgICAgIFByb21pc2UuZnJvbUNhbGxiYWNrKGNhbGxiYWNrID0+XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uc1tjb25uZWN0aW9uXS5jbG9zZShjYWxsYmFjaylcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oc3VwZXIuX29uUHJvY2Vzc0V4aXQuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICAvLyBFeHBvc2UgdGhpcyBhcyBhIG1ldGhvZCBzbyB0aGF0IHRoZSBwYXJzaW5nIG1heSBiZSB1cGRhdGVkIHdoZW4gdGhlIHVzZXIgaGFzIGFkZGVkIGFkZGl0aW9uYWwsIGN1c3RvbSB0eXBlc1xyXG4gIF9yZWZyZXNoVHlwZVBhcnNlcihkYXRhVHlwZSkge1xyXG4gICAgcGFyc2VyU3RvcmUucmVmcmVzaChkYXRhVHlwZSk7XHJcbiAgfVxyXG5cclxuICBfY2xlYXJUeXBlUGFyc2VyKCkge1xyXG4gICAgcGFyc2VyU3RvcmUuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIGdldENvbm5lY3Rpb24ob3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICBvcHRpb25zLnV1aWQgPSBvcHRpb25zLnV1aWQgfHwgXCJkZWZhdWx0XCI7XHJcblxyXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5jb25uZWN0aW9uc1tvcHRpb25zLnV1aWRdID0gIXRoaXMuY29ublxyXG4gICAgICAgID8gdGhpcy5vcGVuRGF0YWJhc2UoKVxyXG4gICAgICAgIDogdGhpcy5jb25uO1xyXG4gICAgICBkZWJ1ZyhgY29ubmVjdGlvbiBhY3F1aXJlZCAke29wdGlvbnMudXVpZH1gKTtcclxuICAgICAgaWYgKCF0aGlzLmNvbm5lY3Rpb25zW29wdGlvbnMudXVpZF0pXHJcbiAgICAgICAgcmV0dXJuIHJlamVjdChcclxuICAgICAgICAgIG5ldyBzZXF1ZWxpemVFcnJvcnMuQ29ubmVjdGlvbkVycm9yKFxyXG4gICAgICAgICAgICBuZXcgRXJyb3IoXCJEYXRhYmFzZSByZWZlcmVuY2Ugbm8gZm91bmQhXCIpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgcmVzb2x2ZSh0aGlzLmNvbm5lY3Rpb25zW29wdGlvbnMudXVpZF0pO1xyXG4gICAgfSkudGFwKGNvbm5lY3Rpb24gPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZXF1ZWxpemUuY29uZmlnLnBhc3N3b3JkKSB7XHJcbiAgICAgICAgLy8gTWFrZSBpdCBwb3NzaWJsZSB0byBkZWZpbmUgYW5kIHVzZSBwYXNzd29yZCBmb3Igc3FsaXRlIGVuY3J5cHRpb24gcGx1Z2luIGxpa2Ugc3FsY2lwaGVyXHJcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24gJiYgY29ubmVjdGlvbi5leGVjKSB7XHJcbiAgICAgICAgICBjb25uZWN0aW9uLmV4ZWMoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzcWw6IGBQUkFHTUEgS0VZPSR7dGhpcy5zZXF1ZWxpemUuZXNjYXBlKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZS5jb25maWcucGFzc3dvcmRcclxuICAgICAgICAgICAgICAgICl9O2AsXHJcbiAgICAgICAgICAgICAgICBhcmdzOiBbXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICAgICgpID0+IHt9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZXF1ZWxpemUub3B0aW9ucy5mb3JlaWduS2V5cyAhPT0gZmFsc2UpIHtcclxuICAgICAgICAvLyBNYWtlIGl0IHBvc3NpYmxlIHRvIGRlZmluZSBhbmQgdXNlIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzIHVubGVzc1xyXG4gICAgICAgIC8vIGV4cGxpY2l0bHkgZGlzYWxsb3dlZC4gSXQncyBzdGlsbCBvcHQtaW4gcGVyIHJlbGF0aW9uXHJcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24gJiYgY29ubmVjdGlvbi5leGVjKSB7XHJcbiAgICAgICAgICBjb25uZWN0aW9uLmV4ZWMoXHJcbiAgICAgICAgICAgIFt7IHNxbDogXCJQUkFHTUEgRk9SRUlHTl9LRVlTPU9OXCIsIGFyZ3M6IFtdIH1dLFxyXG4gICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgICAgKCkgPT4ge31cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbGVhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24sIGZvcmNlKSB7XHJcbiAgICBpZiAoZm9yY2UgIT09IHRydWUpIHJldHVybjtcclxuXHJcbiAgICBpZiAoY29ubmVjdGlvbi51dWlkKSB7XHJcbiAgICAgIGNvbm5lY3Rpb24uY2xvc2UgJiYgY29ubmVjdGlvbi5jbG9zZSgpO1xyXG4gICAgICB0aGlzLmNvbm4gPSB1bmRlZmluZWQ7XHJcbiAgICAgIGRlYnVnKGBjb25uZWN0aW9uIHJlbGVhc2VkICR7Y29ubmVjdGlvbi51dWlkfWApO1xyXG4gICAgICBkZWxldGUgdGhpcy5jb25uZWN0aW9uc1tjb25uZWN0aW9uLnV1aWRdO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb25uZWN0aW9uTWFuYWdlcjtcclxubW9kdWxlLmV4cG9ydHMuQ29ubmVjdGlvbk1hbmFnZXIgPSBDb25uZWN0aW9uTWFuYWdlcjtcclxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IENvbm5lY3Rpb25NYW5hZ2VyO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvY29ubmVjdGlvbi1tYW5hZ2VyLmpzIl0sIm5hbWVzIjpbIkFic3RyYWN0Q29ubmVjdGlvbk1hbmFnZXIiLCJyZXF1aXJlIiwiUHJvbWlzZSIsImxvZ2dlciIsImRlYnVnIiwiZGVidWdDb250ZXh0IiwiZGF0YVR5cGVzIiwic3FsaXRlIiwic2VxdWVsaXplRXJyb3JzIiwicGFyc2VyU3RvcmUiLCJDb25uZWN0aW9uTWFuYWdlciIsImRpYWxlY3QiLCJzZXF1ZWxpemUiLCJjb25uZWN0aW9ucyIsIm9wZW5EYXRhYmFzZSIsIl9sb2FkRGlhbGVjdE1vZHVsZSIsIm9wdGlvbnMiLCJkYXRhYmFzZSIsImRpYWxlY3RPcHRpb25zIiwidmVyc2lvbiIsImRlc2NyaXB0aW9uIiwic2l6ZSIsImNvbm4iLCJyZWZyZXNoVHlwZVBhcnNlciIsInByb21pc2VzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIm1hcCIsImNvbm5lY3Rpb24iLCJmcm9tQ2FsbGJhY2siLCJjYWxsYmFjayIsImNsb3NlIiwiYWxsIiwidGhlbiIsImJpbmQiLCJkYXRhVHlwZSIsInJlZnJlc2giLCJjbGVhciIsInV1aWQiLCJyZXNvbHZlIiwicmVqZWN0IiwiQ29ubmVjdGlvbkVycm9yIiwiRXJyb3IiLCJ0YXAiLCJjb25maWciLCJwYXNzd29yZCIsImV4ZWMiLCJzcWwiLCJlc2NhcGUiLCJhcmdzIiwiZm9yZWlnbktleXMiLCJmb3JjZSIsInVuZGVmaW5lZCIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSx5QkFBeUIsR0FBR0MsT0FBTyxDQUFDLGdDQUFELENBQXpDOztBQUNBLE1BQU1DLE9BQU8sR0FBR0QsT0FBTyxDQUFDLGVBQUQsQ0FBdkI7O0FBQ0EsTUFBTTtBQUFFRSxFQUFBQTtBQUFGLElBQWFGLE9BQU8sQ0FBQyxv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QUNHLEtBQVgsSUFBb0JILFVBQVUsQ0FBQ0csS0FBWCxFQUFwQjtBQUNBLGFBQUtULElBQUwsR0FBWThCLFNBQVo7QUFDQWhELFFBQUFBLEtBQUssQ0FBRSx1QkFBc0J3QixVQUFVLENBQUNVLElBQUssRUFBeEMsQ0FBTDtBQUNBLGVBQU8sS0FBS3pCLFdBQUwsQ0FBaUJlLFVBQVUsQ0FBQ1UsSUFBNUIsQ0FBUDtBQUNEO0FBQ0Y7Ozs7RUFwRzZCdEMseUI7O0FBdUdoQ3FELE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjVDLGlCQUFqQjtBQUNBMkMsTUFBTSxDQUFDQyxPQUFQLENBQWU1QyxpQkFBZixHQUFtQ0EsaUJBQW5DO0FBQ0EyQyxNQUFNLENBQUNDLE9BQVAsQ0FBZUMsT0FBZixHQUF5QjdDLGlCQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBBYnN0cmFjdENvbm5lY3Rpb25NYW5hZ2VyID0gcmVxdWlyZShcIi4uL2Fic3RyYWN0L2Nvbm5lY3Rpb24tbWFuYWdlclwiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZVwiKTtcbmNvbnN0IHsgbG9nZ2VyIH0gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nZ2VyXCIpO1xuY29uc3QgZGVidWcgPSBsb2dnZXIuZGVidWdDb250ZXh0KFwiY29ubmVjdGlvbjpzcWxpdGVcIik7XG5jb25zdCBkYXRhVHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vZGF0YS10eXBlc1wiKS5zcWxpdGU7XG5jb25zdCBzZXF1ZWxpemVFcnJvcnMgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3JzXCIpO1xuY29uc3QgcGFyc2VyU3RvcmUgPSByZXF1aXJlKFwiLi4vcGFyc2VyU3RvcmVcIikoXCJzcWxpdGVcIik7XG5cbmNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGV4dGVuZHMgQWJzdHJhY3RDb25uZWN0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKGRpYWxlY3QsIHNlcXVlbGl6ZSkge1xuICAgIHN1cGVyKGRpYWxlY3QsIHNlcXVlbGl6ZSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0ge307XG4gICAgY29uc3QgeyBvcGVuRGF0YWJhc2UgfSA9IHRoaXMuX2xvYWREaWFsZWN0TW9kdWxlKCk7XG4gICAgdGhpcy5vcGVuRGF0YWJhc2UgPSAoKSA9PlxuICAgICAgb3BlbkRhdGFiYXNlKFxuICAgICAgICB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRhdGFiYXNlLFxuICAgICAgICB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3RPcHRpb25zLnZlcnNpb24gfHwgXCIxLjBcIixcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0T3B0aW9ucy5kZXNjcmlwdGlvbiB8fFxuICAgICAgICAgIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGF0YWJhc2UsXG4gICAgICAgIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdE9wdGlvbnMuc2l6ZSB8fCA0ICogMTAyNCAqIDEwMjRcbiAgICAgICk7XG4gICAgdGhpcy5jb25uID0gdGhpcy5vcGVuRGF0YWJhc2UoKTtcbiAgICB0aGlzLnJlZnJlc2hUeXBlUGFyc2VyKGRhdGFUeXBlcyk7XG4gIH1cblxuICBfb25Qcm9jZXNzRXhpdCgpIHtcbiAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFxuICAgICAgdGhpcy5jb25uZWN0aW9uc1xuICAgICkubWFwKGNvbm5lY3Rpb24gPT5cbiAgICAgIFByb21pc2UuZnJvbUNhbGxiYWNrKGNhbGxiYWNrID0+XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbnNbY29ubmVjdGlvbl0uY2xvc2UoY2FsbGJhY2spXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihzdXBlci5fb25Qcm9jZXNzRXhpdC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8vIEV4cG9zZSB0aGlzIGFzIGEgbWV0aG9kIHNvIHRoYXQgdGhlIHBhcnNpbmcgbWF5IGJlIHVwZGF0ZWQgd2hlbiB0aGUgdXNlciBoYXMgYWRkZWQgYWRkaXRpb25hbCwgY3VzdG9tIHR5cGVzXG4gIF9yZWZyZXNoVHlwZVBhcnNlcihkYXRhVHlwZSkge1xuICAgIHBhcnNlclN0b3JlLnJlZnJlc2goZGF0YVR5cGUpO1xuICB9XG5cbiAgX2NsZWFyVHlwZVBhcnNlcigpIHtcbiAgICBwYXJzZXJTdG9yZS5jbGVhcigpO1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvbihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51dWlkID0gb3B0aW9ucy51dWlkIHx8IFwiZGVmYXVsdFwiO1xuXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbm5lY3Rpb25zW29wdGlvbnMudXVpZF0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25zW29wdGlvbnMudXVpZF0gPSAhdGhpcy5jb25uXG4gICAgICAgID8gdGhpcy5vcGVuRGF0YWJhc2UoKVxuICAgICAgICA6IHRoaXMuY29ubjtcbiAgICAgIGRlYnVnKGBjb25uZWN0aW9uIGFjcXVpcmVkICR7b3B0aW9ucy51dWlkfWApO1xuICAgICAgaWYgKCF0aGlzLmNvbm5lY3Rpb25zW29wdGlvbnMudXVpZF0pXG4gICAgICAgIHJldHVybiByZWplY3QoXG4gICAgICAgICAgbmV3IHNlcXVlbGl6ZUVycm9ycy5Db25uZWN0aW9uRXJyb3IoXG4gICAgICAgICAgICBuZXcgRXJyb3IoXCJEYXRhYmFzZSByZWZlcmVuY2Ugbm8gZm91bmQhXCIpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgcmVzb2x2ZSh0aGlzLmNvbm5lY3Rpb25zW29wdGlvbnMudXVpZF0pO1xuICAgIH0pLnRhcChjb25uZWN0aW9uID0+IHtcbiAgICAgIGlmICh0aGlzLnNlcXVlbGl6ZS5jb25maWcucGFzc3dvcmQpIHtcbiAgICAgICAgLy8gTWFrZSBpdCBwb3NzaWJsZSB0byBkZWZpbmUgYW5kIHVzZSBwYXNzd29yZCBmb3Igc3FsaXRlIGVuY3J5cHRpb24gcGx1Z2luIGxpa2Ugc3FsY2lwaGVyXG4gICAgICAgIGlmIChjb25uZWN0aW9uICYmIGNvbm5lY3Rpb24uZXhlYykge1xuICAgICAgICAgIGNvbm5lY3Rpb24uZXhlYyhcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNxbDogYFBSQUdNQSBLRVk9JHt0aGlzLnNlcXVlbGl6ZS5lc2NhcGUoXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZS5jb25maWcucGFzc3dvcmRcbiAgICAgICAgICAgICAgICApfTtgLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICgpID0+IHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZm9yZWlnbktleXMgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIE1ha2UgaXQgcG9zc2libGUgdG8gZGVmaW5lIGFuZCB1c2UgZm9yZWlnbiBrZXkgY29uc3RyYWludHMgdW5sZXNzXG4gICAgICAgIC8vIGV4cGxpY2l0bHkgZGlzYWxsb3dlZC4gSXQncyBzdGlsbCBvcHQtaW4gcGVyIHJlbGF0aW9uXG4gICAgICAgIGlmIChjb25uZWN0aW9uICYmIGNvbm5lY3Rpb24uZXhlYykge1xuICAgICAgICAgIGNvbm5lY3Rpb24uZXhlYyhcbiAgICAgICAgICAgIFt7IHNxbDogXCJQUkFHTUEgRk9SRUlHTl9LRVlTPU9OXCIsIGFyZ3M6IFtdIH1dLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAoKSA9PiB7fVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJlbGVhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24sIGZvcmNlKSB7XG4gICAgaWYgKGZvcmNlICE9PSB0cnVlKSByZXR1cm47XG5cbiAgICBpZiAoY29ubmVjdGlvbi51dWlkKSB7XG4gICAgICBjb25uZWN0aW9uLmNsb3NlICYmIGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHRoaXMuY29ubiA9IHVuZGVmaW5lZDtcbiAgICAgIGRlYnVnKGBjb25uZWN0aW9uIHJlbGVhc2VkICR7Y29ubmVjdGlvbi51dWlkfWApO1xuICAgICAgZGVsZXRlIHRoaXMuY29ubmVjdGlvbnNbY29ubmVjdGlvbi51dWlkXTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25uZWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzLkNvbm5lY3Rpb25NYW5hZ2VyID0gQ29ubmVjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gQ29ubmVjdGlvbk1hbmFnZXI7XG4iXX0= \ No newline at end of file diff --git a/dist/dialects/sqlite/data-types.js b/dist/dialects/sqlite/data-types.js index 11e3223..923ae8c 100644 --- a/dist/dialects/sqlite/data-types.js +++ b/dist/dialects/sqlite/data-types.js @@ -10,15 +10,19 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } module.exports = BaseTypes => { const warn = BaseTypes.ABSTRACT.warn.bind(undefined, "https://www.sqlite.org/datatype3.html"); @@ -60,18 +64,17 @@ module.exports = BaseTypes => { BaseTypes.ENUM.types.sqlite = false; BaseTypes.REAL.types.sqlite = ["REAL"]; BaseTypes.DOUBLE.types.sqlite = ["DOUBLE PRECISION"]; - BaseTypes.GEOMETRY.types.sqlite = false; BaseTypes.JSON.types.sqlite = ["JSON", "JSONB"]; - let JSONTYPE = - /*#__PURE__*/ - function (_BaseTypes$JSON) { + let JSONTYPE = /*#__PURE__*/function (_BaseTypes$JSON) { _inherits(JSONTYPE, _BaseTypes$JSON); + var _super = _createSuper(JSONTYPE); + function JSONTYPE() { _classCallCheck(this, JSONTYPE); - return _possibleConstructorReturn(this, _getPrototypeOf(JSONTYPE).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(JSONTYPE, null, [{ @@ -84,36 +87,36 @@ module.exports = BaseTypes => { return JSONTYPE; }(BaseTypes.JSON); - let DATE = - /*#__PURE__*/ - function (_BaseTypes$DATE) { + let DATE = /*#__PURE__*/function (_BaseTypes$DATE) { _inherits(DATE, _BaseTypes$DATE); + var _super2 = _createSuper(DATE); + function DATE() { _classCallCheck(this, DATE); - return _possibleConstructorReturn(this, _getPrototypeOf(DATE).apply(this, arguments)); + return _super2.apply(this, arguments); } _createClass(DATE, null, [{ key: "parse", value: function parse(date, options) { - return new Date(date.replace(" ", "T").replace(" " + options.timezone, "+0000")); // We already have a timezone stored in the string + return new Date(date.replace(' ', 'T').replace(' +00:00', 'Z')); // We already have a timezone stored in the string } }]); return DATE; }(BaseTypes.DATE); - let DATEONLY = - /*#__PURE__*/ - function (_BaseTypes$DATEONLY) { + let DATEONLY = /*#__PURE__*/function (_BaseTypes$DATEONLY) { _inherits(DATEONLY, _BaseTypes$DATEONLY); + var _super3 = _createSuper(DATEONLY); + function DATEONLY() { _classCallCheck(this, DATEONLY); - return _possibleConstructorReturn(this, _getPrototypeOf(DATEONLY).apply(this, arguments)); + return _super3.apply(this, arguments); } _createClass(DATEONLY, null, [{ @@ -126,15 +129,15 @@ module.exports = BaseTypes => { return DATEONLY; }(BaseTypes.DATEONLY); - let STRING = - /*#__PURE__*/ - function (_BaseTypes$STRING) { + let STRING = /*#__PURE__*/function (_BaseTypes$STRING) { _inherits(STRING, _BaseTypes$STRING); + var _super4 = _createSuper(STRING); + function STRING() { _classCallCheck(this, STRING); - return _possibleConstructorReturn(this, _getPrototypeOf(STRING).apply(this, arguments)); + return _super4.apply(this, arguments); } _createClass(STRING, [{ @@ -151,15 +154,15 @@ module.exports = BaseTypes => { return STRING; }(BaseTypes.STRING); - let TEXT = - /*#__PURE__*/ - function (_BaseTypes$TEXT) { + let TEXT = /*#__PURE__*/function (_BaseTypes$TEXT) { _inherits(TEXT, _BaseTypes$TEXT); + var _super5 = _createSuper(TEXT); + function TEXT() { _classCallCheck(this, TEXT); - return _possibleConstructorReturn(this, _getPrototypeOf(TEXT).apply(this, arguments)); + return _super5.apply(this, arguments); } _createClass(TEXT, [{ @@ -177,15 +180,15 @@ module.exports = BaseTypes => { return TEXT; }(BaseTypes.TEXT); - let CITEXT = - /*#__PURE__*/ - function (_BaseTypes$CITEXT) { + let CITEXT = /*#__PURE__*/function (_BaseTypes$CITEXT) { _inherits(CITEXT, _BaseTypes$CITEXT); + var _super6 = _createSuper(CITEXT); + function CITEXT() { _classCallCheck(this, CITEXT); - return _possibleConstructorReturn(this, _getPrototypeOf(CITEXT).apply(this, arguments)); + return _super6.apply(this, arguments); } _createClass(CITEXT, [{ @@ -198,15 +201,15 @@ module.exports = BaseTypes => { return CITEXT; }(BaseTypes.CITEXT); - let CHAR = - /*#__PURE__*/ - function (_BaseTypes$CHAR) { + let CHAR = /*#__PURE__*/function (_BaseTypes$CHAR) { _inherits(CHAR, _BaseTypes$CHAR); + var _super7 = _createSuper(CHAR); + function CHAR() { _classCallCheck(this, CHAR); - return _possibleConstructorReturn(this, _getPrototypeOf(CHAR).apply(this, arguments)); + return _super7.apply(this, arguments); } _createClass(CHAR, [{ @@ -223,15 +226,15 @@ module.exports = BaseTypes => { return CHAR; }(BaseTypes.CHAR); - let NUMBER = - /*#__PURE__*/ - function (_BaseTypes$NUMBER) { + let NUMBER = /*#__PURE__*/function (_BaseTypes$NUMBER) { _inherits(NUMBER, _BaseTypes$NUMBER); + var _super8 = _createSuper(NUMBER); + function NUMBER() { _classCallCheck(this, NUMBER); - return _possibleConstructorReturn(this, _getPrototypeOf(NUMBER).apply(this, arguments)); + return _super8.apply(this, arguments); } _createClass(NUMBER, [{ @@ -264,17 +267,17 @@ module.exports = BaseTypes => { return NUMBER; }(BaseTypes.NUMBER); - let TINYINT = - /*#__PURE__*/ - function (_BaseTypes$TINYINT) { + let TINYINT = /*#__PURE__*/function (_BaseTypes$TINYINT) { _inherits(TINYINT, _BaseTypes$TINYINT); + var _super9 = _createSuper(TINYINT); + function TINYINT(length) { var _this; _classCallCheck(this, TINYINT); - _this = _possibleConstructorReturn(this, _getPrototypeOf(TINYINT).call(this, length)); + _this = _super9.call(this, length); removeUnsupportedIntegerOptions(_assertThisInitialized(_this)); return _this; } @@ -282,17 +285,17 @@ module.exports = BaseTypes => { return TINYINT; }(BaseTypes.TINYINT); - let SMALLINT = - /*#__PURE__*/ - function (_BaseTypes$SMALLINT) { + let SMALLINT = /*#__PURE__*/function (_BaseTypes$SMALLINT) { _inherits(SMALLINT, _BaseTypes$SMALLINT); + var _super10 = _createSuper(SMALLINT); + function SMALLINT(length) { var _this2; _classCallCheck(this, SMALLINT); - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(SMALLINT).call(this, length)); + _this2 = _super10.call(this, length); removeUnsupportedIntegerOptions(_assertThisInitialized(_this2)); return _this2; } @@ -300,17 +303,17 @@ module.exports = BaseTypes => { return SMALLINT; }(BaseTypes.SMALLINT); - let MEDIUMINT = - /*#__PURE__*/ - function (_BaseTypes$MEDIUMINT) { + let MEDIUMINT = /*#__PURE__*/function (_BaseTypes$MEDIUMINT) { _inherits(MEDIUMINT, _BaseTypes$MEDIUMINT); + var _super11 = _createSuper(MEDIUMINT); + function MEDIUMINT(length) { var _this3; _classCallCheck(this, MEDIUMINT); - _this3 = _possibleConstructorReturn(this, _getPrototypeOf(MEDIUMINT).call(this, length)); + _this3 = _super11.call(this, length); removeUnsupportedIntegerOptions(_assertThisInitialized(_this3)); return _this3; } @@ -318,17 +321,17 @@ module.exports = BaseTypes => { return MEDIUMINT; }(BaseTypes.MEDIUMINT); - let INTEGER = - /*#__PURE__*/ - function (_BaseTypes$INTEGER) { + let INTEGER = /*#__PURE__*/function (_BaseTypes$INTEGER) { _inherits(INTEGER, _BaseTypes$INTEGER); + var _super12 = _createSuper(INTEGER); + function INTEGER(length) { var _this4; _classCallCheck(this, INTEGER); - _this4 = _possibleConstructorReturn(this, _getPrototypeOf(INTEGER).call(this, length)); + _this4 = _super12.call(this, length); removeUnsupportedIntegerOptions(_assertThisInitialized(_this4)); return _this4; } @@ -336,17 +339,17 @@ module.exports = BaseTypes => { return INTEGER; }(BaseTypes.INTEGER); - let BIGINT = - /*#__PURE__*/ - function (_BaseTypes$BIGINT) { + let BIGINT = /*#__PURE__*/function (_BaseTypes$BIGINT) { _inherits(BIGINT, _BaseTypes$BIGINT); + var _super13 = _createSuper(BIGINT); + function BIGINT(length) { var _this5; _classCallCheck(this, BIGINT); - _this5 = _possibleConstructorReturn(this, _getPrototypeOf(BIGINT).call(this, length)); + _this5 = _super13.call(this, length); removeUnsupportedIntegerOptions(_assertThisInitialized(_this5)); return _this5; } @@ -354,43 +357,43 @@ module.exports = BaseTypes => { return BIGINT; }(BaseTypes.BIGINT); - let FLOAT = - /*#__PURE__*/ - function (_BaseTypes$FLOAT) { + let FLOAT = /*#__PURE__*/function (_BaseTypes$FLOAT) { _inherits(FLOAT, _BaseTypes$FLOAT); + var _super14 = _createSuper(FLOAT); + function FLOAT() { _classCallCheck(this, FLOAT); - return _possibleConstructorReturn(this, _getPrototypeOf(FLOAT).apply(this, arguments)); + return _super14.apply(this, arguments); } return FLOAT; }(BaseTypes.FLOAT); - let DOUBLE = - /*#__PURE__*/ - function (_BaseTypes$DOUBLE) { + let DOUBLE = /*#__PURE__*/function (_BaseTypes$DOUBLE) { _inherits(DOUBLE, _BaseTypes$DOUBLE); + var _super15 = _createSuper(DOUBLE); + function DOUBLE() { _classCallCheck(this, DOUBLE); - return _possibleConstructorReturn(this, _getPrototypeOf(DOUBLE).apply(this, arguments)); + return _super15.apply(this, arguments); } return DOUBLE; }(BaseTypes.DOUBLE); - let REAL = - /*#__PURE__*/ - function (_BaseTypes$REAL) { + let REAL = /*#__PURE__*/function (_BaseTypes$REAL) { _inherits(REAL, _BaseTypes$REAL); + var _super16 = _createSuper(REAL); + function REAL() { _classCallCheck(this, REAL); - return _possibleConstructorReturn(this, _getPrototypeOf(REAL).apply(this, arguments)); + return _super16.apply(this, arguments); } return REAL; @@ -422,15 +425,15 @@ module.exports = BaseTypes => { num.prototype.toSql = NUMBER.prototype.toSql; } - let ENUM = - /*#__PURE__*/ - function (_BaseTypes$ENUM) { + let ENUM = /*#__PURE__*/function (_BaseTypes$ENUM) { _inherits(ENUM, _BaseTypes$ENUM); + var _super17 = _createSuper(ENUM); + function ENUM() { _classCallCheck(this, ENUM); - return _possibleConstructorReturn(this, _getPrototypeOf(ENUM).apply(this, arguments)); + return _super17.apply(this, arguments); } _createClass(ENUM, [{ @@ -463,4 +466,4 @@ module.exports = BaseTypes => { CITEXT }; }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvZGF0YS10eXBlcy5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiQmFzZVR5cGVzIiwid2FybiIsIkFCU1RSQUNUIiwiYmluZCIsInVuZGVmaW5lZCIsInJlbW92ZVVuc3VwcG9ydGVkSW50ZWdlck9wdGlvbnMiLCJkYXRhVHlwZSIsIl96ZXJvZmlsbCIsIl91bnNpZ25lZCIsImtleSIsIkRBVEUiLCJ0eXBlcyIsInNxbGl0ZSIsIlNUUklORyIsIkNIQVIiLCJURVhUIiwiVElOWUlOVCIsIlNNQUxMSU5UIiwiTUVESVVNSU5UIiwiSU5URUdFUiIsIkJJR0lOVCIsIkZMT0FUIiwiVElNRSIsIkRBVEVPTkxZIiwiQk9PTEVBTiIsIkJMT0IiLCJERUNJTUFMIiwiVVVJRCIsIkVOVU0iLCJSRUFMIiwiRE9VQkxFIiwiR0VPTUVUUlkiLCJKU09OIiwiSlNPTlRZUEUiLCJkYXRhIiwicGFyc2UiLCJkYXRlIiwib3B0aW9ucyIsIkRhdGUiLCJyZXBsYWNlIiwidGltZXpvbmUiLCJfYmluYXJ5IiwiX2xlbmd0aCIsIkNJVEVYVCIsIk5VTUJFUiIsInJlc3VsdCIsIl9kZWNpbWFscyIsImxlbmd0aCIsInBhcnNlRmxvYXRpbmciLCJ2YWx1ZSIsIk5hTiIsIkluZmluaXR5IiwiZmxvYXRpbmciLCJudW0iLCJwcm90b3R5cGUiLCJ0b1NxbCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQUEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCQyxTQUFTLElBQUk7QUFDNUIsUUFBTUMsSUFBSSxHQUFHRCxTQUFTLENBQUNFLFFBQVYsQ0FBbUJELElBQW5CLENBQXdCRSxJQUF4QixDQUNYQyxTQURXLEVBRVgsdUNBRlcsQ0FBYjtBQUtBOzs7Ozs7O0FBTUEsV0FBU0MsK0JBQVQsQ0FBeUNDLFFBQXpDLEVBQW1EO0FBQ2pELFFBQUlBLFFBQVEsQ0FBQ0MsU0FBVCxJQUFzQkQsUUFBUSxDQUFD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RCxJQUhnQixFQUloQmIsT0FKZ0IsRUFLaEJDLFFBTGdCLEVBTWhCQyxTQU5nQixFQU9oQkMsT0FQZ0IsRUFRaEJDLE1BUmdCLENBQWxCLEVBU0c7QUFDRGlDLElBQUFBLEdBQUcsQ0FBQ0MsU0FBSixDQUFjQyxLQUFkLEdBQXNCWCxNQUFNLENBQUNVLFNBQVAsQ0FBaUJDLEtBQXZDO0FBQ0Q7O0FBbE0yQixNQW9NdEIzQixJQXBNc0I7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSw4QkFxTWxCO0FBQ04sZUFBTyxNQUFQO0FBQ0Q7QUF2TXlCOztBQUFBO0FBQUEsSUFvTVQ1QixTQUFTLENBQUM0QixJQXBNRDs7QUEwTTVCLFNBQU87QUFDTGxCLElBQUFBLElBREs7QUFFTGEsSUFBQUEsUUFGSztBQUdMVixJQUFBQSxNQUhLO0FBSUxDLElBQUFBLElBSks7QUFLTDhCLElBQUFBLE1BTEs7QUFNTHZCLElBQUFBLEtBTks7QUFPTFEsSUFBQUEsSUFQSztBQVFMLHdCQUFvQkMsTUFSZjtBQVNMZCxJQUFBQSxPQVRLO0FBVUxDLElBQUFBLFFBVks7QUFXTEMsSUFBQUEsU0FYSztBQVlMQyxJQUFBQSxPQVpLO0FBYUxDLElBQUFBLE1BYks7QUFjTEwsSUFBQUEsSUFkSztBQWVMYSxJQUFBQSxJQWZLO0FBZ0JMSSxJQUFBQSxJQUFJLEVBQUVDLFFBaEJEO0FBaUJMVSxJQUFBQTtBQWpCSyxHQUFQO0FBbUJELENBN05EIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VUeXBlcyA9PiB7XHJcbiAgY29uc3Qgd2FybiA9IEJhc2VUeXBlcy5BQlNUUkFDVC53YXJuLmJpbmQoXHJcbiAgICB1bmRlZmluZWQsXHJcbiAgICBcImh0dHBzOi8vd3d3LnNxbGl0ZS5vcmcvZGF0YXR5cGUzLmh0bWxcIlxyXG4gICk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgdW5zdXBwb3J0ZWQgU1FMaXRlIG9wdGlvbnMsIGkuZS4sIFVOU0lHTkVEIGFuZCBaRVJPRklMTCwgZm9yIHRoZSBpbnRlZ2VyIGRhdGEgdHlwZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVR5cGUgVGhlIGJhc2UgaW50ZWdlciBkYXRhIHR5cGUuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBmdW5jdGlvbiByZW1vdmVVbnN1cHBvcnRlZEludGVnZXJPcHRpb25zKGRhdGFUeXBlKSB7XHJcbiAgICBpZiAoZGF0YVR5cGUuX3plcm9maWxsIHx8IGRhdGFUeXBlLl91bnNpZ25lZCkge1xyXG4gICAgICB3YXJuKFxyXG4gICAgICAgIGBTUUxpdGUgZG9lcyBub3Qgc3VwcG9ydCAnJHtkYXRhVHlwZS5rZXl9JyB3aXRoIFVOU0lHTkVEIG9yIFpFUk9GSUxMLiBQbGFpbiAnJHtkYXRhVHlwZS5rZXl9JyB3aWxsIGJlIHVzZWQgaW5zdGVhZC5gXHJcbiAgICAgICk7XHJcbiAgICAgIGRhdGFUeXBlLl91bnNpZ25lZCA9IHVuZGVmaW5lZDtcclxuICAgICAgZGF0YVR5cGUuX3plcm9maWxsID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHNlZSBodHRwczovL3NxbGl0ZS5vcmcvZGF0YXR5cGUzLmh0bWxcclxuICAgKi9cclxuXHJcbiAgQmFzZVR5cGVzLkRBVEUudHlwZXMuc3FsaXRlID0gW1wiREFURVRJTUVcIl07XHJcbiAgQmFzZVR5cGVzLlNUUklORy50eXBlcy5zcWxpdGUgPSBbXCJWQVJDSEFSXCIsIFwiVkFSQ0hBUiBCSU5BUllcIl07XHJcbiAgQmFzZVR5cGVzLkNIQVIudHlwZXMuc3FsaXRlID0gW1wiQ0hBUlwiLCBcIkNIQVIgQklOQVJZXCJdO1xyXG4gIEJhc2VUeXBlcy5URVhULnR5cGVzLnNxbGl0ZSA9IFtcIlRFWFRcIl07XHJcbiAgQmFzZVR5cGVzLlRJTllJTlQudHlwZXMuc3FsaXRlID0gW1wiVElOWUlOVFwiXTtcclxuICBCYXNlVHlwZXMuU01BTExJTlQudHlwZXMuc3FsaXRlID0gW1wiU01BTExJTlRcIl07XHJcbiAgQmFzZVR5cGVzLk1FRElVTUlOVC50eXBlcy5zcWxpdGUgPSBbXCJNRURJVU1JTlRcIl07XHJcbiAgQmFzZVR5cGVzLklOVEVHRVIudHlwZXMuc3FsaXRlID0gW1wiSU5URUdFUlwiXTtcclxuICBCYXNlVHlwZXMuQklHSU5ULnR5cGVzLnNxbGl0ZSA9IFtcIkJJR0lOVFwiXTtcclxuICBCYXNlVHlwZXMuRkxPQVQudHlwZXMuc3FsaXRlID0gW1wiRkxPQVRcIl07XHJcbiAgQmFzZVR5cGVzLlRJTUUudHlwZXMuc3FsaXRlID0gW1wiVElNRVwiXTtcclxuICBCYXNlVHlwZXMuREFURU9OTFkudHlwZXMuc3FsaXRlID0gW1wiREFURVwiXTtcclxuICBCYXNlVHlwZXMuQk9PTEVBTi50eXBlcy5zcWxpdGUgPSBbXCJUSU5ZSU5UXCJdO1xyXG4gIEJhc2VUeXBlcy5CTE9CLnR5cGVzLnNxbGl0ZSA9IFtcIlRJTllCTE9CXCIsIFwiQkxPQlwiLCBcIkxPTkdCTE9CXCJdO1xyXG4gIEJhc2VUeXBlcy5ERUNJTUFMLnR5cGVzLnNxbGl0ZSA9IFtcIkRFQ0lNQUxcIl07XHJcbiAgQmFzZVR5cGVzLlVVSUQudHlwZXMuc3FsaXRlID0gW1wiVVVJRFwiXTtcclxuICBCYXNlVHlwZXMuRU5VTS50eXBlcy5zcWxpdGUgPSBmYWxzZTtcclxuICBCYXNlVHlwZXMuUkVBTC50eXBlcy5zcWxpdGUgPSBbXCJSRUFMXCJdO1xyXG4gIEJhc2VUeXBlcy5ET1VCTEUudHlwZXMuc3FsaXRlID0gW1wiRE9VQkxFIFBSRUNJU0lPTlwiXTtcclxuICBCYXNlVHlwZXMuR0VPTUVUUlkudHlwZXMuc3FsaXRlID0gZmFsc2U7XHJcbiAgQmFzZVR5cGVzLkpTT04udHlwZXMuc3FsaXRlID0gW1wiSlNPTlwiLCBcIkpTT05CXCJdO1xyXG5cclxuICBjbGFzcyBKU09OVFlQRSBleHRlbmRzIEJhc2VUeXBlcy5KU09OIHtcclxuICAgIHN0YXRpYyBwYXJzZShkYXRhKSB7XHJcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xhc3MgREFURSBleHRlbmRzIEJhc2VUeXBlcy5EQVRFIHtcclxuICAgIHN0YXRpYyBwYXJzZShkYXRlLCBvcHRpb25zKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZShcclxuICAgICAgICBkYXRlLnJlcGxhY2UoXCIgXCIsIFwiVFwiKS5yZXBsYWNlKFwiIFwiICsgb3B0aW9ucy50aW1lem9uZSwgXCIrMDAwMFwiKVxyXG4gICAgICApOyAvLyBXZSBhbHJlYWR5IGhhdmUgYSB0aW1lem9uZSBzdG9yZWQgaW4gdGhlIHN0cmluZ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xhc3MgREFURU9OTFkgZXh0ZW5kcyBCYXNlVHlwZXMuREFURU9OTFkge1xyXG4gICAgc3RhdGljIHBhcnNlKGRhdGUpIHtcclxuICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGFzcyBTVFJJTkcgZXh0ZW5kcyBCYXNlVHlwZXMuU1RSSU5HIHtcclxuICAgIHRvU3FsKCkge1xyXG4gICAgICBpZiAodGhpcy5fYmluYXJ5KSB7XHJcbiAgICAgICAgcmV0dXJuIGBWQVJDSEFSIEJJTkFSWSgke3RoaXMuX2xlbmd0aH0pYDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3VwZXIudG9TcWwodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGFzcyBURVhUIGV4dGVuZHMgQmFzZVR5cGVzLlRFWFQge1xyXG4gICAgdG9TcWwoKSB7XHJcbiAgICAgIGlmICh0aGlzLl9sZW5ndGgpIHtcclxuICAgICAgICB3YXJuKFxyXG4gICAgICAgICAgXCJTUUxpdGUgZG9lcyBub3Qgc3VwcG9ydCBURVhUIHdpdGggb3B0aW9ucy4gUGxhaW4gYFRFWFRgIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9sZW5ndGggPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFwiVEVYVFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xhc3MgQ0lURVhUIGV4dGVuZHMgQmFzZVR5cGVzLkNJVEVYVCB7XHJcbiAgICB0b1NxbCgpIHtcclxuICAgICAgcmV0dXJuIFwiVEVYVCBDT0xMQVRFIE5PQ0FTRVwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xhc3MgQ0hBUiBleHRlbmRzIEJhc2VUeXBlcy5DSEFSIHtcclxuICAgIHRvU3FsKCkge1xyXG4gICAgICBpZiAodGhpcy5fYmluYXJ5KSB7XHJcbiAgICAgICAgcmV0dXJuIGBDSEFSIEJJTkFSWSgke3RoaXMuX2xlbmd0aH0pYDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3VwZXIudG9TcWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsYXNzIE5VTUJFUiBleHRlbmRzIEJhc2VUeXBlcy5OVU1CRVIge1xyXG4gICAgdG9TcWwoKSB7XHJcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmtleTtcclxuICAgICAgaWYgKHRoaXMuX3Vuc2lnbmVkKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IFwiIFVOU0lHTkVEXCI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX3plcm9maWxsKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IFwiIFpFUk9GSUxMXCI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX2xlbmd0aCkge1xyXG4gICAgICAgIHJlc3VsdCArPSBgKCR7dGhpcy5fbGVuZ3RofWA7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9kZWNpbWFscyA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgcmVzdWx0ICs9IGAsJHt0aGlzLl9kZWNpbWFsc31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQgKz0gXCIpXCI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsYXNzIFRJTllJTlQgZXh0ZW5kcyBCYXNlVHlwZXMuVElOWUlOVCB7XHJcbiAgICBjb25zdHJ1Y3RvcihsZW5ndGgpIHtcclxuICAgICAgc3VwZXIobGVuZ3RoKTtcclxuICAgICAgcmVtb3ZlVW5zdXBwb3J0ZWRJbnRlZ2VyT3B0aW9ucyh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsYXNzIFNNQUxMSU5UIGV4dGVuZHMgQmFzZVR5cGVzLlNNQUxMSU5UIHtcclxuICAgIGNvbnN0cnVjdG9yKGxlbmd0aCkge1xyXG4gICAgICBzdXBlcihsZW5ndGgpO1xyXG4gICAgICByZW1vdmVVbnN1cHBvcnRlZEludGVnZXJPcHRpb25zKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xhc3MgTUVESVVNSU5UIGV4dGVuZHMgQmFzZVR5cGVzLk1FRElVTUlOVCB7XHJcbiAgICBjb25zdHJ1Y3RvcihsZW5ndGgpIHtcclxuICAgICAgc3VwZXIobGVuZ3RoKTtcclxuICAgICAgcmVtb3ZlVW5zdXBwb3J0ZWRJbnRlZ2VyT3B0aW9ucyh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsYXNzIElOVEVHRVIgZXh0ZW5kcyBCYXNlVHlwZXMuSU5URUdFUiB7XHJcbiAgICBjb25zdHJ1Y3RvcihsZW5ndGgpIHtcclxuICAgICAgc3VwZXIobGVuZ3RoKTtcclxuICAgICAgcmVtb3ZlVW5zdXBwb3J0ZWRJbnRlZ2VyT3B0aW9ucyh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsYXNzIEJJR0lOVCBleHRlbmRzIEJhc2VUeXBlcy5CSUdJTlQge1xyXG4gICAgY29uc3RydWN0b3IobGVuZ3RoKSB7XHJcbiAgICAgIHN1cGVyKGxlbmd0aCk7XHJcbiAgICAgIHJlbW92ZVVuc3VwcG9ydGVkSW50ZWdlck9wdGlvbnModGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGFzcyBGTE9BVCBleHRlbmRzIEJhc2VUeXBlcy5GTE9BVCB7fVxyXG5cclxuICBjbGFzcyBET1VCTEUgZXh0ZW5kcyBCYXNlVHlwZXMuRE9VQkxFIHt9XHJcblxyXG4gIGNsYXNzIFJFQUwgZXh0ZW5kcyBCYXNlVHlwZXMuUkVBTCB7fVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZUZsb2F0aW5nKHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSA9PT0gXCJOYU5cIikge1xyXG4gICAgICByZXR1cm4gTmFOO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlID09PSBcIkluZmluaXR5XCIpIHtcclxuICAgICAgcmV0dXJuIEluZmluaXR5O1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlID09PSBcIi1JbmZpbml0eVwiKSB7XHJcbiAgICAgIHJldHVybiAtSW5maW5pdHk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGZvciAoY29uc3QgZmxvYXRpbmcgb2YgW0ZMT0FULCBET1VCTEUsIFJFQUxdKSB7XHJcbiAgICBmbG9hdGluZy5wYXJzZSA9IHBhcnNlRmxvYXRpbmc7XHJcbiAgfVxyXG5cclxuICBmb3IgKGNvbnN0IG51bSBvZiBbXHJcbiAgICBGTE9BVCxcclxuICAgIERPVUJMRSxcclxuICAgIFJFQUwsXHJcbiAgICBUSU5ZSU5ULFxyXG4gICAgU01BTExJTlQsXHJcbiAgICBNRURJVU1JTlQsXHJcbiAgICBJTlRFR0VSLFxyXG4gICAgQklHSU5UXHJcbiAgXSkge1xyXG4gICAgbnVtLnByb3RvdHlwZS50b1NxbCA9IE5VTUJFUi5wcm90b3R5cGUudG9TcWw7XHJcbiAgfVxyXG5cclxuICBjbGFzcyBFTlVNIGV4dGVuZHMgQmFzZVR5cGVzLkVOVU0ge1xyXG4gICAgdG9TcWwoKSB7XHJcbiAgICAgIHJldHVybiBcIlRFWFRcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBEQVRFLFxyXG4gICAgREFURU9OTFksXHJcbiAgICBTVFJJTkcsXHJcbiAgICBDSEFSLFxyXG4gICAgTlVNQkVSLFxyXG4gICAgRkxPQVQsXHJcbiAgICBSRUFMLFxyXG4gICAgXCJET1VCTEUgUFJFQ0lTSU9OXCI6IERPVUJMRSxcclxuICAgIFRJTllJTlQsXHJcbiAgICBTTUFMTElOVCxcclxuICAgIE1FRElVTUlOVCxcclxuICAgIElOVEVHRVIsXHJcbiAgICBCSUdJTlQsXHJcbiAgICBURVhULFxyXG4gICAgRU5VTSxcclxuICAgIEpTT046IEpTT05UWVBFLFxyXG4gICAgQ0lURVhUXHJcbiAgfTtcclxufTtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvZGF0YS10eXBlcy5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiQmFzZVR5cGVzIiwid2FybiIsIkFCU1RSQUNUIiwiYmluZCIsInVuZGVmaW5lZCIsInJlbW92ZVVuc3VwcG9ydGVkSW50ZWdlck9wdGlvbnMiLCJkYXRhVHlwZSIsIl96ZXJvZmlsbCIsIl91bnNpZ25lZCIsImtleSIsIkRBVEUiLCJ0eXBlcyIsInNxbGl0ZSIsIlNUUklORyIsIkNIQVIiLCJURVhUIiwiVElOWUlOVCIsIlNNQUxMSU5UIiwiTUVESVVNSU5UIiwiSU5URUdFUiIsIkJJR0lOVCIsIkZMT0FUIiwiVElNRSIsIkRBVEVPTkxZIiwiQk9PTEVBTiIsIkJMT0IiLCJERUNJTUFMIiwiVVVJRCIsIkVOVU0iLCJSRUFMIiwiRE9VQkxFIiwiSlNPTiIsIkpTT05UWVBFIiwiZGF0YSIsInBhcnNlIiwiZGF0ZSIsIm9wdGlvbnMiLCJEYXRlIiwicmVwbGFjZSIsIl9iaW5hcnkiLCJfbGVuZ3RoIiwiQ0lURVhUIiwiTlVNQkVSIiwicmVzdWx0IiwiX2RlY2ltYWxzIiwibGVuZ3RoIiwicGFyc2VGbG9hdGluZyIsInZhbHVlIiwiTmFOIiwiSW5maW5pdHkiLCJmbG9hdGluZyIsIm51bSIsInByb3RvdHlwZSIsInRvU3FsIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQUEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCQyxTQUFTLElBQUk7QUFDNUIsUUFBTUMsSUFBSSxHQUFHRCxTQUFTLENBQUNFLFFBQVYsQ0FBbUJELElBQW5CLENBQXdCRSxJQUF4QixDQUNYQyxTQURXLEVBRVgsdUNBRlcsQ0FBYjtBQUtBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDRSxXQUFTQywrQkFBVCxDQUF5Q0MsUUFBekMsRUFBbUQ7QUFDakQsUUFBSUEsUUFBUSxDQUFDQyxTQUFULElBQXNCRCxRQUFRLENB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QUNVLFNBQVAsQ0FBaUJDLEtBQXZDO0FBQ0Q7O0FBL0wyQixNQWlNdEJ6QixJQWpNc0I7QUFBQTs7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBLDhCQWtNbEI7QUFDTixlQUFPLE1BQVA7QUFDRDtBQXBNeUI7O0FBQUE7QUFBQSxJQWlNVDVCLFNBQVMsQ0FBQzRCLElBak1EOztBQXVNNUIsU0FBTztBQUNMbEIsSUFBQUEsSUFESztBQUVMYSxJQUFBQSxRQUZLO0FBR0xWLElBQUFBLE1BSEs7QUFJTEMsSUFBQUEsSUFKSztBQUtMNEIsSUFBQUEsTUFMSztBQU1MckIsSUFBQUEsS0FOSztBQU9MUSxJQUFBQSxJQVBLO0FBUUwsd0JBQW9CQyxNQVJmO0FBU0xkLElBQUFBLE9BVEs7QUFVTEMsSUFBQUEsUUFWSztBQVdMQyxJQUFBQSxTQVhLO0FBWUxDLElBQUFBLE9BWks7QUFhTEMsSUFBQUEsTUFiSztBQWNMTCxJQUFBQSxJQWRLO0FBZUxhLElBQUFBLElBZks7QUFnQkxHLElBQUFBLElBQUksRUFBRUMsUUFoQkQ7QUFpQkxTLElBQUFBO0FBakJLLEdBQVA7QUFtQkQsQ0ExTkQiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBCYXNlVHlwZXMgPT4ge1xuICBjb25zdCB3YXJuID0gQmFzZVR5cGVzLkFCU1RSQUNULndhcm4uYmluZChcbiAgICB1bmRlZmluZWQsXG4gICAgXCJodHRwczovL3d3dy5zcWxpdGUub3JnL2RhdGF0eXBlMy5odG1sXCJcbiAgKTtcblxuICAvKipcbiAgICogUmVtb3ZlcyB1bnN1cHBvcnRlZCBTUUxpdGUgb3B0aW9ucywgaS5lLiwgVU5TSUdORUQgYW5kIFpFUk9GSUxMLCBmb3IgdGhlIGludGVnZXIgZGF0YSB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFUeXBlIFRoZSBiYXNlIGludGVnZXIgZGF0YSB0eXBlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlVW5zdXBwb3J0ZWRJbnRlZ2VyT3B0aW9ucyhkYXRhVHlwZSkge1xuICAgIGlmIChkYXRhVHlwZS5femVyb2ZpbGwgfHwgZGF0YVR5cGUuX3Vuc2lnbmVkKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBgU1FMaXRlIGRvZXMgbm90IHN1cHBvcnQgJyR7ZGF0YVR5cGUua2V5fScgd2l0aCBVTlNJR05FRCBvciBaRVJPRklMTC4gUGxhaW4gJyR7ZGF0YVR5cGUua2V5fScgd2lsbCBiZSB1c2VkIGluc3RlYWQuYFxuICAgICAgKTtcbiAgICAgIGRhdGFUeXBlLl91bnNpZ25lZCA9IHVuZGVmaW5lZDtcbiAgICAgIGRhdGFUeXBlLl96ZXJvZmlsbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3NxbGl0ZS5vcmcvZGF0YXR5cGUzLmh0bWxcbiAgICovXG5cbiAgQmFzZVR5cGVzLkRBVEUudHlwZXMuc3FsaXRlID0gW1wiREFURVRJTUVcIl07XG4gIEJhc2VUeXBlcy5TVFJJTkcudHlwZXMuc3FsaXRlID0gW1wiVkFSQ0hBUlwiLCBcIlZBUkNIQVIgQklOQVJZXCJdO1xuICBCYXNlVHlwZXMuQ0hBUi50eXBlcy5zcWxpdGUgPSBbXCJDSEFSXCIsIFwiQ0hBUiBCSU5BUllcIl07XG4gIEJhc2VUeXBlcy5URVhULnR5cGVzLnNxbGl0ZSA9IFtcIlRFWFRcIl07XG4gIEJhc2VUeXBlcy5USU5ZSU5ULnR5cGVzLnNxbGl0ZSA9IFtcIlRJTllJTlRcIl07XG4gIEJhc2VUeXBlcy5TTUFMTElOVC50eXBlcy5zcWxpdGUgPSBbXCJTTUFMTElOVFwiXTtcbiAgQmFzZVR5cGVzLk1FRElVTUlOVC50eXBlcy5zcWxpdGUgPSBbXCJNRURJVU1JTlRcIl07XG4gIEJhc2VUeXBlcy5JTlRFR0VSLnR5cGVzLnNxbGl0ZSA9IFtcIklOVEVHRVJcIl07XG4gIEJhc2VUeXBlcy5CSUdJTlQudHlwZXMuc3FsaXRlID0gW1wiQklHSU5UXCJdO1xuICBCYXNlVHlwZXMuRkxPQVQudHlwZXMuc3FsaXRlID0gW1wiRkxPQVRcIl07XG4gIEJhc2VUeXBlcy5USU1FLnR5cGVzLnNxbGl0ZSA9IFtcIlRJTUVcIl07XG4gIEJhc2VUeXBlcy5EQVRFT05MWS50eXBlcy5zcWxpdGUgPSBbXCJEQVRFXCJdO1xuICBCYXNlVHlwZXMuQk9PTEVBTi50eXBlcy5zcWxpdGUgPSBbXCJUSU5ZSU5UXCJdO1xuICBCYXNlVHlwZXMuQkxPQi50eXBlcy5zcWxpdGUgPSBbXCJUSU5ZQkxPQlwiLCBcIkJMT0JcIiwgXCJMT05HQkxPQlwiXTtcbiAgQmFzZVR5cGVzLkRFQ0lNQUwudHlwZXMuc3FsaXRlID0gW1wiREVDSU1BTFwiXTtcbiAgQmFzZVR5cGVzLlVVSUQudHlwZXMuc3FsaXRlID0gW1wiVVVJRFwiXTtcbiAgQmFzZVR5cGVzLkVOVU0udHlwZXMuc3FsaXRlID0gZmFsc2U7XG4gIEJhc2VUeXBlcy5SRUFMLnR5cGVzLnNxbGl0ZSA9IFtcIlJFQUxcIl07XG4gIEJhc2VUeXBlcy5ET1VCTEUudHlwZXMuc3FsaXRlID0gW1wiRE9VQkxFIFBSRUNJU0lPTlwiXTtcbiAgQmFzZVR5cGVzLkpTT04udHlwZXMuc3FsaXRlID0gW1wiSlNPTlwiLCBcIkpTT05CXCJdO1xuXG4gIGNsYXNzIEpTT05UWVBFIGV4dGVuZHMgQmFzZVR5cGVzLkpTT04ge1xuICAgIHN0YXRpYyBwYXJzZShkYXRhKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICB9XG4gIH1cblxuICBjbGFzcyBEQVRFIGV4dGVuZHMgQmFzZVR5cGVzLkRBVEUge1xuICAgIHN0YXRpYyBwYXJzZShkYXRlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5yZXBsYWNlKCcgJywnVCcpLnJlcGxhY2UoJyArMDA6MDAnLCdaJykpOyAvLyBXZSBhbHJlYWR5IGhhdmUgYSB0aW1lem9uZSBzdG9yZWQgaW4gdGhlIHN0cmluZ1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzIERBVEVPTkxZIGV4dGVuZHMgQmFzZVR5cGVzLkRBVEVPTkxZIHtcbiAgICBzdGF0aWMgcGFyc2UoZGF0ZSkge1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XG5cbiAgY2xhc3MgU1RSSU5HIGV4dGVuZHMgQmFzZVR5cGVzLlNUUklORyB7XG4gICAgdG9TcWwoKSB7XG4gICAgICBpZiAodGhpcy5fYmluYXJ5KSB7XG4gICAgICAgIHJldHVybiBgVkFSQ0hBUiBCSU5BUlkoJHt0aGlzLl9sZW5ndGh9KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VwZXIudG9TcWwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3MgVEVYVCBleHRlbmRzIEJhc2VUeXBlcy5URVhUIHtcbiAgICB0b1NxbCgpIHtcbiAgICAgIGlmICh0aGlzLl9sZW5ndGgpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBcIlNRTGl0ZSBkb2VzIG5vdCBzdXBwb3J0IFRFWFQgd2l0aCBvcHRpb25zLiBQbGFpbiBgVEVYVGAgd2lsbCBiZSB1c2VkIGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiVEVYVFwiO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzIENJVEVYVCBleHRlbmRzIEJhc2VUeXBlcy5DSVRFWFQge1xuICAgIHRvU3FsKCkge1xuICAgICAgcmV0dXJuIFwiVEVYVCBDT0xMQVRFIE5PQ0FTRVwiO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzIENIQVIgZXh0ZW5kcyBCYXNlVHlwZXMuQ0hBUiB7XG4gICAgdG9TcWwoKSB7XG4gICAgICBpZiAodGhpcy5fYmluYXJ5KSB7XG4gICAgICAgIHJldHVybiBgQ0hBUiBCSU5BUlkoJHt0aGlzLl9sZW5ndGh9KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VwZXIudG9TcWwoKTtcbiAgICB9XG4gIH1cblxuICBjbGFzcyBOVU1CRVIgZXh0ZW5kcyBCYXNlVHlwZXMuTlVNQkVSIHtcbiAgICB0b1NxbCgpIHtcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmtleTtcbiAgICAgIGlmICh0aGlzLl91bnNpZ25lZCkge1xuICAgICAgICByZXN1bHQgKz0gXCIgVU5TSUdORURcIjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl96ZXJvZmlsbCkge1xuICAgICAgICByZXN1bHQgKz0gXCIgWkVST0ZJTExcIjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ICs9IGAoJHt0aGlzLl9sZW5ndGh9YDtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9kZWNpbWFscyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHJlc3VsdCArPSBgLCR7dGhpcy5fZGVjaW1hbHN9YDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gXCIpXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzIFRJTllJTlQgZXh0ZW5kcyBCYXNlVHlwZXMuVElOWUlOVCB7XG4gICAgY29uc3RydWN0b3IobGVuZ3RoKSB7XG4gICAgICBzdXBlcihsZW5ndGgpO1xuICAgICAgcmVtb3ZlVW5zdXBwb3J0ZWRJbnRlZ2VyT3B0aW9ucyh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBjbGFzcyBTTUFMTElOVCBleHRlbmRzIEJhc2VUeXBlcy5TTUFMTElOVCB7XG4gICAgY29uc3RydWN0b3IobGVuZ3RoKSB7XG4gICAgICBzdXBlcihsZW5ndGgpO1xuICAgICAgcmVtb3ZlVW5zdXBwb3J0ZWRJbnRlZ2VyT3B0aW9ucyh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBjbGFzcyBNRURJVU1JTlQgZXh0ZW5kcyBCYXNlVHlwZXMuTUVESVVNSU5UIHtcbiAgICBjb25zdHJ1Y3RvcihsZW5ndGgpIHtcbiAgICAgIHN1cGVyKGxlbmd0aCk7XG4gICAgICByZW1vdmVVbnN1cHBvcnRlZEludGVnZXJPcHRpb25zKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzIElOVEVHRVIgZXh0ZW5kcyBCYXNlVHlwZXMuSU5URUdFUiB7XG4gICAgY29uc3RydWN0b3IobGVuZ3RoKSB7XG4gICAgICBzdXBlcihsZW5ndGgpO1xuICAgICAgcmVtb3ZlVW5zdXBwb3J0ZWRJbnRlZ2VyT3B0aW9ucyh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBjbGFzcyBCSUdJTlQgZXh0ZW5kcyBCYXNlVHlwZXMuQklHSU5UIHtcbiAgICBjb25zdHJ1Y3RvcihsZW5ndGgpIHtcbiAgICAgIHN1cGVyKGxlbmd0aCk7XG4gICAgICByZW1vdmVVbnN1cHBvcnRlZEludGVnZXJPcHRpb25zKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzIEZMT0FUIGV4dGVuZHMgQmFzZVR5cGVzLkZMT0FUIHt9XG5cbiAgY2xhc3MgRE9VQkxFIGV4dGVuZHMgQmFzZVR5cGVzLkRPVUJMRSB7fVxuXG4gIGNsYXNzIFJFQUwgZXh0ZW5kcyBCYXNlVHlwZXMuUkVBTCB7fVxuXG4gIGZ1bmN0aW9uIHBhcnNlRmxvYXRpbmcodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gXCJOYU5cIikge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBcIkluZmluaXR5XCIpIHtcbiAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBcIi1JbmZpbml0eVwiKSB7XG4gICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGZsb2F0aW5nIG9mIFtGTE9BVCwgRE9VQkxFLCBSRUFMXSkge1xuICAgIGZsb2F0aW5nLnBhcnNlID0gcGFyc2VGbG9hdGluZztcbiAgfVxuXG4gIGZvciAoY29uc3QgbnVtIG9mIFtcbiAgICBGTE9BVCxcbiAgICBET1VCTEUsXG4gICAgUkVBTCxcbiAgICBUSU5ZSU5ULFxuICAgIFNNQUxMSU5ULFxuICAgIE1FRElVTUlOVCxcbiAgICBJTlRFR0VSLFxuICAgIEJJR0lOVFxuICBdKSB7XG4gICAgbnVtLnByb3RvdHlwZS50b1NxbCA9IE5VTUJFUi5wcm90b3R5cGUudG9TcWw7XG4gIH1cblxuICBjbGFzcyBFTlVNIGV4dGVuZHMgQmFzZVR5cGVzLkVOVU0ge1xuICAgIHRvU3FsKCkge1xuICAgICAgcmV0dXJuIFwiVEVYVFwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgREFURSxcbiAgICBEQVRFT05MWSxcbiAgICBTVFJJTkcsXG4gICAgQ0hBUixcbiAgICBOVU1CRVIsXG4gICAgRkxPQVQsXG4gICAgUkVBTCxcbiAgICBcIkRPVUJMRSBQUkVDSVNJT05cIjogRE9VQkxFLFxuICAgIFRJTllJTlQsXG4gICAgU01BTExJTlQsXG4gICAgTUVESVVNSU5ULFxuICAgIElOVEVHRVIsXG4gICAgQklHSU5ULFxuICAgIFRFWFQsXG4gICAgRU5VTSxcbiAgICBKU09OOiBKU09OVFlQRSxcbiAgICBDSVRFWFRcbiAgfTtcbn07XG4iXX0= \ No newline at end of file diff --git a/dist/dialects/sqlite/index.js b/dist/dialects/sqlite/index.js index 62f5b6e..b25c3a4 100644 --- a/dist/dialects/sqlite/index.js +++ b/dist/dialects/sqlite/index.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const _ = require('lodash'); @@ -24,17 +28,17 @@ const QueryGenerator = require('./query-generator'); const DataTypes = require('../../data-types').sqlite; -let SqliteDialect = -/*#__PURE__*/ -function (_AbstractDialect) { +let SqliteDialect = /*#__PURE__*/function (_AbstractDialect) { _inherits(SqliteDialect, _AbstractDialect); + var _super = _createSuper(SqliteDialect); + function SqliteDialect(sequelize) { var _this; _classCallCheck(this, SqliteDialect); - _this = _possibleConstructorReturn(this, _getPrototypeOf(SqliteDialect).call(this)); + _this = _super.call(this); _this.sequelize = sequelize; _this.connectionManager = new ConnectionManager(_assertThisInitialized(_this), sequelize); _this.QueryGenerator = new QueryGenerator({ @@ -82,4 +86,4 @@ SqliteDialect.prototype.TICK_CHAR_RIGHT = SqliteDialect.prototype.TICK_CHAR; module.exports = SqliteDialect; module.exports.SqliteDialect = SqliteDialect; module.exports.default = SqliteDialect; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvaW5kZXguanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJBYnN0cmFjdERpYWxlY3QiLCJDb25uZWN0aW9uTWFuYWdlciIsIlF1ZXJ5IiwiUXVlcnlHZW5lcmF0b3IiLCJEYXRhVHlwZXMiLCJzcWxpdGUiLCJTcWxpdGVEaWFsZWN0Iiwic2VxdWVsaXplIiwiY29ubmVjdGlvbk1hbmFnZXIiLCJfZGlhbGVjdCIsInByb3RvdHlwZSIsInN1cHBvcnRzIiwibWVyZ2UiLCJjbG9uZURlZXAiLCJpbnNlcnRzIiwiaWdub3JlRHVwbGljYXRlcyIsInVwZGF0ZU9uRHVwbGljYXRlIiwiaW5kZXgiLCJ1c2luZyIsIndoZXJlIiwiZnVuY3Rpb25CYXNlZCIsInRyYW5zYWN0aW9uT3B0aW9ucyIsInR5cGUiLCJjb25zdHJhaW50cyIsImFkZENvbnN0cmFpbnQiLCJkcm9wQ29uc3RyYWludCIsImpvaW5UYWJsZURlcGVuZGVudCIsImdyb3VwZWRMaW1pdCIsIkpTT04iLCJkZWZhdWx0VmVyc2lvbiIsIm5hbWUiLCJUSUNLX0NIQVIiLCJUSUNLX0NIQVJfTEVGVCIsIlRJQ0tfQ0hBUl9SSUdIVCIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxDQUFDLEdBQUdDLE9BQU8sQ0FBQyxRQUFELENBQWpCOztBQUNBLE1BQU1DLGVBQWUsR0FBR0QsT0FBTyxDQUFDLGFBQUQsQ0FBL0I7O0FBQ0EsTUFBTUUsaUJBQWlCLEdBQUdGLE9BQU8sQ0FBQyxzQkFBRCxDQUFqQzs7QUFDQSxNQUFNRyxLQUFLLEdBQUdILE9BQU8sQ0FBQyxTQUFELENBQXJCOztBQUNBLE1BQU1JLGNBQWMsR0FBR0osT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLE1BQU1LLFNBQVMsR0FBR0wsT0FBTyxDQUFDLGtCQUFELENBQVAsQ0FBNEJNLE1BQTlDOztJQUVNQyxhOzs7OztBQUNKLHlCQUFZQyxTQUFaLEVBQXVCO0FBQUE7O0FBQUE7O0FBQ3JCO0FBQ0EsVUFBS0EsU0FBTCxHQUFpQkEsU0FBakI7QUFDQSxVQUFLQyxpQkFBTCxHQUF5QixJQUFJUCxpQkFBSixnQ0FBNEJNLFNBQTVCLENBQXpCO0FBQ0EsVUFBS0osY0FBTCxHQUFzQixJQUFJQSxjQUFKLENBQW1CO0FBQ3ZDTSxNQUFBQSxRQUFRLCtCQUQrQjtBQUV2Q0YsTUFBQUE7QUFGdUMsS0FBbkIsQ0FBdEI7QUFKcUI7QUFRdEI7OztFQVR5QlAsZTs7QUFZNUJNLGFBQWEsQ0FBQ0ksU0FBZCxDQUF3QkMsUUFBeEIsR0FBbUNiLENBQUMsQ0FBQ2MsS0FBRixDQUFRZCxDQUFDLENBQUNlLFNBQUYsQ0FBWWIsZUFBZSxDQUFDVSxTQUFoQixDQUEwQkMsUUFBdEMsQ0FBUixFQUF5RDtBQUMxRixhQUFXLEtBRCtFO0FBRTFGLG9CQUFrQixJQUZ3RTtBQUcxRixlQUFhLEtBSDZFO0FBSTFGLGdCQUFjLEtBSjRFO0FBSzFGRyxFQUFBQSxPQUFPLEVBQUU7QUFDUEMsSUFBQUEsZ0JBQWdCLEVBQUUsWUFEWDtBQUVQQyxJQUFBQSxpQkFBaUIsRUFBRTtBQUZaLEdBTGlGO0FBUzFGQyxFQUFBQSxLQUFLLEVBQUU7QUFDTEMsSUFBQUEsS0FBSyxFQUFFLEtBREY7QUFFTEMsSUFBQUEsS0FBSyxFQUFFLElBRkY7QUFHTEMsSUFBQUEsYUFBYSxFQUFFO0FBSFYsR0FUbUY7QUFjMUZDLEVBQUFBLGtCQUFrQixFQUFFO0FBQ2xCQyxJQUFBQSxJQUFJLEVBQUU7QUFEWSxHQWRzRTtBQWlCMUZDLEVBQUFBLFdBQVcsRUFBRTtBQUNYQyxJQUFBQSxhQUFhLEVBQUUsS0FESjtBQUVYQyxJQUFBQSxjQUFjLEVBQUU7QUFGTCxHQWpCNkU7QUFxQjFGQyxFQUFBQSxrQkFBa0IsRUFBRSxLQXJCc0U7QUFzQjFGQyxFQUFBQSxZQUFZLEVBQUUsS0F0QjRFO0FBdUIxRkMsRUFBQUEsSUFBSSxFQUFFO0FBdkJvRixDQUF6RCxDQUFuQztBQTBCQTNCLGlCQUFpQixDQUFDUyxTQUFsQixDQUE0Qm1CLGNBQTVCLEdBQTZDLE9BQTdDO0FBQ0F2QixhQUFhLENBQUNJLFNBQWQsQ0FBd0JSLEtBQXhCLEdBQWdDQSxLQUFoQztBQUNBSSxhQUFhLENBQUNJLFNBQWQsQ0FBd0JOLFNBQXhCLEdBQW9DQSxTQUFwQztBQUNBRSxhQUFhLENBQUNJLFNBQWQsQ0FBd0JvQixJQUF4QixHQUErQixRQUEvQjtBQUNBeEIsYUFBYSxDQUFDSSxTQUFkLENBQXdCcUIsU0FBeEIsR0FBb0MsR0FBcEM7QUFDQXpCLGFBQWEsQ0FBQ0ksU0FBZCxDQUF3QnNCLGNBQXhCLEdBQXlDMUIsYUFBYSxDQUFDSSxTQUFkLENBQXdCcUIsU0FBakU7QUFDQXpCLGFBQWEsQ0FBQ0ksU0FBZCxDQUF3QnVCLGVBQXhCLEdBQTBDM0IsYUFBYSxDQUFDSSxTQUFkLENBQXdCcUIsU0FBbEU7QUFFQUcsTUFBTSxDQUFDQyxPQUFQLEdBQWlCN0IsYUFBakI7QUFDQTRCLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlN0IsYUFBZixHQUErQkEsYUFBL0I7QUFDQTRCLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCOUIsYUFBekIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IEFic3RyYWN0RGlhbGVjdCA9IHJlcXVpcmUoJy4uL2Fic3RyYWN0Jyk7XHJcbmNvbnN0IENvbm5lY3Rpb25NYW5hZ2VyID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uLW1hbmFnZXInKTtcclxuY29uc3QgUXVlcnkgPSByZXF1aXJlKCcuL3F1ZXJ5Jyk7XHJcbmNvbnN0IFF1ZXJ5R2VuZXJhdG9yID0gcmVxdWlyZSgnLi9xdWVyeS1nZW5lcmF0b3InKTtcclxuY29uc3QgRGF0YVR5cGVzID0gcmVxdWlyZSgnLi4vLi4vZGF0YS10eXBlcycpLnNxbGl0ZTtcclxuXHJcbmNsYXNzIFNxbGl0ZURpYWxlY3QgZXh0ZW5kcyBBYnN0cmFjdERpYWxlY3Qge1xyXG4gIGNvbnN0cnVjdG9yKHNlcXVlbGl6ZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuc2VxdWVsaXplID0gc2VxdWVsaXplO1xyXG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBDb25uZWN0aW9uTWFuYWdlcih0aGlzLCBzZXF1ZWxpemUpO1xyXG4gICAgdGhpcy5RdWVyeUdlbmVyYXRvciA9IG5ldyBRdWVyeUdlbmVyYXRvcih7XHJcbiAgICAgIF9kaWFsZWN0OiB0aGlzLFxyXG4gICAgICBzZXF1ZWxpemVcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuU3FsaXRlRGlhbGVjdC5wcm90b3R5cGUuc3VwcG9ydHMgPSBfLm1lcmdlKF8uY2xvbmVEZWVwKEFic3RyYWN0RGlhbGVjdC5wcm90b3R5cGUuc3VwcG9ydHMpLCB7XHJcbiAgJ0RFRkFVTFQnOiBmYWxzZSxcclxuICAnREVGQVVMVCBWQUxVRVMnOiB0cnVlLFxyXG4gICdVTklPTiBBTEwnOiBmYWxzZSxcclxuICAnUklHSFQgSk9JTic6IGZhbHNlLFxyXG4gIGluc2VydHM6IHtcclxuICAgIGlnbm9yZUR1cGxpY2F0ZXM6ICcgT1IgSUdOT1JFJyxcclxuICAgIHVwZGF0ZU9uRHVwbGljYXRlOiAnIE9OIENPTkZMSUNUIERPIFVQREFURSBTRVQnXHJcbiAgfSxcclxuICBpbmRleDoge1xyXG4gICAgdXNpbmc6IGZhbHNlLFxyXG4gICAgd2hlcmU6IHRydWUsXHJcbiAgICBmdW5jdGlvbkJhc2VkOiB0cnVlXHJcbiAgfSxcclxuICB0cmFuc2FjdGlvbk9wdGlvbnM6IHtcclxuICAgIHR5cGU6IHRydWVcclxuICB9LFxyXG4gIGNvbnN0cmFpbnRzOiB7XHJcbiAgICBhZGRDb25zdHJhaW50OiBmYWxzZSxcclxuICAgIGRyb3BDb25zdHJhaW50OiBmYWxzZVxyXG4gIH0sXHJcbiAgam9pblRhYmxlRGVwZW5kZW50OiBmYWxzZSxcclxuICBncm91cGVkTGltaXQ6IGZhbHNlLFxyXG4gIEpTT046IHRydWVcclxufSk7XHJcblxyXG5Db25uZWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVmYXVsdFZlcnNpb24gPSAnMy44LjAnO1xyXG5TcWxpdGVEaWFsZWN0LnByb3RvdHlwZS5RdWVyeSA9IFF1ZXJ5O1xyXG5TcWxpdGVEaWFsZWN0LnByb3RvdHlwZS5EYXRhVHlwZXMgPSBEYXRhVHlwZXM7XHJcblNxbGl0ZURpYWxlY3QucHJvdG90eXBlLm5hbWUgPSAnc3FsaXRlJztcclxuU3FsaXRlRGlhbGVjdC5wcm90b3R5cGUuVElDS19DSEFSID0gJ2AnO1xyXG5TcWxpdGVEaWFsZWN0LnByb3RvdHlwZS5USUNLX0NIQVJfTEVGVCA9IFNxbGl0ZURpYWxlY3QucHJvdG90eXBlLlRJQ0tfQ0hBUjtcclxuU3FsaXRlRGlhbGVjdC5wcm90b3R5cGUuVElDS19DSEFSX1JJR0hUID0gU3FsaXRlRGlhbGVjdC5wcm90b3R5cGUuVElDS19DSEFSO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTcWxpdGVEaWFsZWN0O1xyXG5tb2R1bGUuZXhwb3J0cy5TcWxpdGVEaWFsZWN0ID0gU3FsaXRlRGlhbGVjdDtcclxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IFNxbGl0ZURpYWxlY3Q7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvaW5kZXguanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJBYnN0cmFjdERpYWxlY3QiLCJDb25uZWN0aW9uTWFuYWdlciIsIlF1ZXJ5IiwiUXVlcnlHZW5lcmF0b3IiLCJEYXRhVHlwZXMiLCJzcWxpdGUiLCJTcWxpdGVEaWFsZWN0Iiwic2VxdWVsaXplIiwiY29ubmVjdGlvbk1hbmFnZXIiLCJfZGlhbGVjdCIsInByb3RvdHlwZSIsInN1cHBvcnRzIiwibWVyZ2UiLCJjbG9uZURlZXAiLCJpbnNlcnRzIiwiaWdub3JlRHVwbGljYXRlcyIsInVwZGF0ZU9uRHVwbGljYXRlIiwiaW5kZXgiLCJ1c2luZyIsIndoZXJlIiwiZnVuY3Rpb25CYXNlZCIsInRyYW5zYWN0aW9uT3B0aW9ucyIsInR5cGUiLCJjb25zdHJhaW50cyIsImFkZENvbnN0cmFpbnQiLCJkcm9wQ29uc3RyYWludCIsImpvaW5UYWJsZURlcGVuZGVudCIsImdyb3VwZWRMaW1pdCIsIkpTT04iLCJkZWZhdWx0VmVyc2lvbiIsIm5hbWUiLCJUSUNLX0NIQVIiLCJUSUNLX0NIQVJfTEVGVCIsIlRJQ0tfQ0hBUl9SSUdIVCIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsQ0FBQyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNQyxlQUFlLEdBQUdELE9BQU8sQ0FBQyxhQUFELENBQS9COztBQUNBLE1BQU1FLGlCQUFpQixHQUFHRixPQUFPLENBQUMsc0JBQUQsQ0FBakM7O0FBQ0EsTUFBTUcsS0FBSyxHQUFHSCxPQUFPLENBQUMsU0FBRCxDQUFyQjs7QUFDQSxNQUFNSSxjQUFjLEdBQUdKLE9BQU8sQ0FBQyxtQkFBRCxDQUE5Qjs7QUFDQSxNQUFNSyxTQUFTLEdBQUdMLE9BQU8sQ0FBQyxrQkFBRCxDQUFQLENBQTRCTSxNQUE5Qzs7SUFFTUMsYTs7Ozs7QUFDSix5QkFBWUMsU0FBWixFQUF1QjtBQUFBOztBQUFBOztBQUNyQjtBQUNBLFVBQUtBLFNBQUwsR0FBaUJBLFNBQWpCO0FBQ0EsVUFBS0MsaUJBQUwsR0FBeUIsSUFBSVAsaUJBQUosZ0NBQTRCTSxTQUE1QixDQUF6QjtBQUNBLFVBQUtKLGNBQUwsR0FBc0IsSUFBSUEsY0FBSixDQUFtQjtBQUN2Q00sTUFBQUEsUUFBUSwrQkFEK0I7QUFFdkNGLE1BQUFBO0FBRnVDLEtBQW5CLENBQXRCO0FBSnFCO0FBUXRCOzs7RUFUeUJQLGU7O0FBWTVCTSxhQUFhLENBQUNJLFNBQWQsQ0FBd0JDLFFBQXhCLEdBQW1DYixDQUFDLENBQUNjLEtBQUYsQ0FBUWQsQ0FBQyxDQUFDZSxTQUFGLENBQVliLGVBQWUsQ0FBQ1UsU0FBaEIsQ0FBMEJDLFFBQXRDLENBQVIsRUFBeUQ7QUFDMUYsYUFBVyxLQUQrRTtBQUUxRixvQkFBa0IsSUFGd0U7QUFHMUYsZUFBYSxLQUg2RTtBQUkxRixnQkFBYyxLQUo0RTtBQUsxRkcsRUFBQUEsT0FBTyxFQUFFO0FBQ1BDLElBQUFBLGdCQUFnQixFQUFFLFlBRFg7QUFFUEMsSUFBQUEsaUJBQWlCLEVBQUU7QUFGWixHQUxpRjtBQVMxRkMsRUFBQUEsS0FBSyxFQUFFO0FBQ0xDLElBQUFBLEtBQUssRUFBRSxLQURGO0FBRUxDLElBQUFBLEtBQUssRUFBRSxJQUZGO0FBR0xDLElBQUFBLGFBQWEsRUFBRTtBQUhWLEdBVG1GO0FBYzFGQyxFQUFBQSxrQkFBa0IsRUFBRTtBQUNsQkMsSUFBQUEsSUFBSSxFQUFFO0FBRFksR0Fkc0U7QUFpQjFGQyxFQUFBQSxXQUFXLEVBQUU7QUFDWEMsSUFBQUEsYUFBYSxFQUFFLEtBREo7QUFFWEMsSUFBQUEsY0FBYyxFQUFFO0FBRkwsR0FqQjZFO0FBcUIxRkMsRUFBQUEsa0JBQWtCLEVBQUUsS0FyQnNFO0FBc0IxRkMsRUFBQUEsWUFBWSxFQUFFLEtBdEI0RTtBQXVCMUZDLEVBQUFBLElBQUksRUFBRTtBQXZCb0YsQ0FBekQsQ0FBbkM7QUEwQkEzQixpQkFBaUIsQ0FBQ1MsU0FBbEIsQ0FBNEJtQixjQUE1QixHQUE2QyxPQUE3QztBQUNBdkIsYUFBYSxDQUFDSSxTQUFkLENBQXdCUixLQUF4QixHQUFnQ0EsS0FBaEM7QUFDQUksYUFBYSxDQUFDSSxTQUFkLENBQXdCTixTQUF4QixHQUFvQ0EsU0FBcEM7QUFDQUUsYUFBYSxDQUFDSSxTQUFkLENBQXdCb0IsSUFBeEIsR0FBK0IsUUFBL0I7QUFDQXhCLGFBQWEsQ0FBQ0ksU0FBZCxDQUF3QnFCLFNBQXhCLEdBQW9DLEdBQXBDO0FBQ0F6QixhQUFhLENBQUNJLFNBQWQsQ0FBd0JzQixjQUF4QixHQUF5QzFCLGFBQWEsQ0FBQ0ksU0FBZCxDQUF3QnFCLFNBQWpFO0FBQ0F6QixhQUFhLENBQUNJLFNBQWQsQ0FBd0J1QixlQUF4QixHQUEwQzNCLGFBQWEsQ0FBQ0ksU0FBZCxDQUF3QnFCLFNBQWxFO0FBRUFHLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjdCLGFBQWpCO0FBQ0E0QixNQUFNLENBQUNDLE9BQVAsQ0FBZTdCLGFBQWYsR0FBK0JBLGFBQS9CO0FBQ0E0QixNQUFNLENBQUNDLE9BQVAsQ0FBZUMsT0FBZixHQUF5QjlCLGFBQXpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBBYnN0cmFjdERpYWxlY3QgPSByZXF1aXJlKCcuLi9hYnN0cmFjdCcpO1xuY29uc3QgQ29ubmVjdGlvbk1hbmFnZXIgPSByZXF1aXJlKCcuL2Nvbm5lY3Rpb24tbWFuYWdlcicpO1xuY29uc3QgUXVlcnkgPSByZXF1aXJlKCcuL3F1ZXJ5Jyk7XG5jb25zdCBRdWVyeUdlbmVyYXRvciA9IHJlcXVpcmUoJy4vcXVlcnktZ2VuZXJhdG9yJyk7XG5jb25zdCBEYXRhVHlwZXMgPSByZXF1aXJlKCcuLi8uLi9kYXRhLXR5cGVzJykuc3FsaXRlO1xuXG5jbGFzcyBTcWxpdGVEaWFsZWN0IGV4dGVuZHMgQWJzdHJhY3REaWFsZWN0IHtcbiAgY29uc3RydWN0b3Ioc2VxdWVsaXplKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNlcXVlbGl6ZSA9IHNlcXVlbGl6ZTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKHRoaXMsIHNlcXVlbGl6ZSk7XG4gICAgdGhpcy5RdWVyeUdlbmVyYXRvciA9IG5ldyBRdWVyeUdlbmVyYXRvcih7XG4gICAgICBfZGlhbGVjdDogdGhpcyxcbiAgICAgIHNlcXVlbGl6ZVxuICAgIH0pO1xuICB9XG59XG5cblNxbGl0ZURpYWxlY3QucHJvdG90eXBlLnN1cHBvcnRzID0gXy5tZXJnZShfLmNsb25lRGVlcChBYnN0cmFjdERpYWxlY3QucHJvdG90eXBlLnN1cHBvcnRzKSwge1xuICAnREVGQVVMVCc6IGZhbHNlLFxuICAnREVGQVVMVCBWQUxVRVMnOiB0cnVlLFxuICAnVU5JT04gQUxMJzogZmFsc2UsXG4gICdSSUdIVCBKT0lOJzogZmFsc2UsXG4gIGluc2VydHM6IHtcbiAgICBpZ25vcmVEdXBsaWNhdGVzOiAnIE9SIElHTk9SRScsXG4gICAgdXBkYXRlT25EdXBsaWNhdGU6ICcgT04gQ09ORkxJQ1QgRE8gVVBEQVRFIFNFVCdcbiAgfSxcbiAgaW5kZXg6IHtcbiAgICB1c2luZzogZmFsc2UsXG4gICAgd2hlcmU6IHRydWUsXG4gICAgZnVuY3Rpb25CYXNlZDogdHJ1ZVxuICB9LFxuICB0cmFuc2FjdGlvbk9wdGlvbnM6IHtcbiAgICB0eXBlOiB0cnVlXG4gIH0sXG4gIGNvbnN0cmFpbnRzOiB7XG4gICAgYWRkQ29uc3RyYWludDogZmFsc2UsXG4gICAgZHJvcENvbnN0cmFpbnQ6IGZhbHNlXG4gIH0sXG4gIGpvaW5UYWJsZURlcGVuZGVudDogZmFsc2UsXG4gIGdyb3VwZWRMaW1pdDogZmFsc2UsXG4gIEpTT046IHRydWVcbn0pO1xuXG5Db25uZWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGVmYXVsdFZlcnNpb24gPSAnMy44LjAnO1xuU3FsaXRlRGlhbGVjdC5wcm90b3R5cGUuUXVlcnkgPSBRdWVyeTtcblNxbGl0ZURpYWxlY3QucHJvdG90eXBlLkRhdGFUeXBlcyA9IERhdGFUeXBlcztcblNxbGl0ZURpYWxlY3QucHJvdG90eXBlLm5hbWUgPSAnc3FsaXRlJztcblNxbGl0ZURpYWxlY3QucHJvdG90eXBlLlRJQ0tfQ0hBUiA9ICdgJztcblNxbGl0ZURpYWxlY3QucHJvdG90eXBlLlRJQ0tfQ0hBUl9MRUZUID0gU3FsaXRlRGlhbGVjdC5wcm90b3R5cGUuVElDS19DSEFSO1xuU3FsaXRlRGlhbGVjdC5wcm90b3R5cGUuVElDS19DSEFSX1JJR0hUID0gU3FsaXRlRGlhbGVjdC5wcm90b3R5cGUuVElDS19DSEFSO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNxbGl0ZURpYWxlY3Q7XG5tb2R1bGUuZXhwb3J0cy5TcWxpdGVEaWFsZWN0ID0gU3FsaXRlRGlhbGVjdDtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBTcWxpdGVEaWFsZWN0O1xuIl19 \ No newline at end of file diff --git a/dist/dialects/sqlite/query-generator.js b/dist/dialects/sqlite/query-generator.js index 8060172..4493267 100644 --- a/dist/dialects/sqlite/query-generator.js +++ b/dist/dialects/sqlite/query-generator.js @@ -6,20 +6,24 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + const Utils = require('../../utils'); const Transaction = require('../../transaction'); @@ -30,15 +34,15 @@ const MySqlQueryGenerator = require('../mysql/query-generator'); const AbstractQueryGenerator = require('../abstract/query-generator'); -let SQLiteQueryGenerator = -/*#__PURE__*/ -function (_MySqlQueryGenerator) { +let SQLiteQueryGenerator = /*#__PURE__*/function (_MySqlQueryGenerator) { _inherits(SQLiteQueryGenerator, _MySqlQueryGenerator); + var _super = _createSuper(SQLiteQueryGenerator); + function SQLiteQueryGenerator() { _classCallCheck(this, SQLiteQueryGenerator); - return _possibleConstructorReturn(this, _getPrototypeOf(SQLiteQueryGenerator).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(SQLiteQueryGenerator, [{ @@ -541,4 +545,4 @@ function (_MySqlQueryGenerator) { }(MySqlQueryGenerator); module.exports = SQLiteQueryGenerator; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnktZ2VuZXJhdG9yLmpzIl0sIm5hbWVzIjpbIlV0aWxzIiwicmVxdWlyZSIsIlRyYW5zYWN0aW9uIiwiXyIsIk15U3FsUXVlcnlHZW5lcmF0b3IiLCJBYnN0cmFjdFF1ZXJ5R2VuZXJhdG9yIiwiU1FMaXRlUXVlcnlHZW5lcmF0b3IiLCJ0YWJsZU5hbWUiLCJhdHRyaWJ1dGVzIiwib3B0aW9ucyIsInByaW1hcnlLZXlzIiwibmVlZHNNdWx0aXBsZVByaW1hcnlLZXlzIiwidmFsdWVzIiwiZmlsdGVyIiwiZGVmaW5pdGlvbiIsImluY2x1ZGVzIiwibGVuZ3RoIiwiYXR0ckFycmF5IiwiYXR0ciIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRhdGFUeXBlIiwiY29udGFpbnNBdXRvSW5jcmVtZW50IiwiZGF0YVR5cGVTdHJpbmciLCJzdWJzdHIiLCJpbmRleE9mIiwicHVzaCIsInJlcGxhY2UiLCJxdW90ZUlkZW50aWZpZXIiLCJ0YWJsZSIsInF1b3RlVGFibGUiLCJhdHRyU3RyIiwiam9pbiIsInBrU3RyaW5nIiwibWFwIiwicGsiLCJ1bmlxdWVLZXlzIiwiZWFjaCIsImNvbHVtbnMiLCJjdXN0b21JbmRleCIsImZpZWxkcyIsImZpZWxkIiwic3FsIiwicmVwbGFjZUJvb2xlYW5EZWZhdWx0cyIsInZhbHVlIiwic3RtdCIsImpzb25GdW5jdGlvblJlZ2V4IiwidG9rZW5DYXB0dXJlUmVnZXgiLCJjdXJyZW50SW5kZXgiLCJvcGVuaW5nQnJhY2tldHMiLCJjbG9zaW5nQnJhY2tldHMiLCJoYXNKc29uRnVuY3Rpb24iLCJoYXNJbnZhbGlkVG9rZW4iLCJzdHJpbmciLCJmdW5jdGlvbk1hdGNoZXMiLCJleGVjIiwidG9rZW5NYXRjaGVzIiwiY2FwdHVyZWRUb2tlbiIsIkVycm9yIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwidmFsIiwic210aCIsImZhY3RvcnkiLCJwcmVwZW5kIiwiSnNvbiIsIkNhc3QiLCJ0ZXN0IiwidHlwZSIsImhhbmRsZVNlcXVlbGl6ZU1ldGhvZCIsImtleSIsImF0dHJpYnV0ZXNUb1NRTCIsImNvbnRleHQiLCJhdHRyaWJ1dGUiLCJpbnNlcnRWYWx1ZXMiLCJ1cGRhdGVWYWx1ZXMiLCJ3aGVyZSIsIm1vZGVsIiwiaWdub3JlRHVwbGljYXRlcyIsImJpbmQiLCJiaW5kUGFyYW0iLCJ1cHNlcnRPcHRpb25zIiwiZGVmYXVsdHMiLCJpbnNlcnQiLCJpbnNlcnRRdWVyeSIsInJhd0F0dHJpYnV0ZXMiLCJ1cGRhdGUiLCJ1cGRhdGVRdWVyeSIsInF1ZXJ5IiwiYXR0clZhbHVlSGFzaCIsInJlbW92ZU51bGxWYWx1ZXNGcm9tSGFzaCIsIm9taXROdWxsIiwibW9kZWxBdHRyaWJ1dGVNYXAiLCJTZXF1ZWxpemVNZXRob2QiLCJlc2NhcGUiLCJ1bmRlZmluZWQiLCJmb3JtYXQiLCJ3aGVyZU9wdGlvbnMiLCJsaW1pdCIsIndoZXJlUXVlcnkiLCJyZXN0YXJ0SWRlbnRpdHkiLCJhZGRUaWNrcyIsInJlbW92ZVRpY2tzIiwid2hlcmVDbGF1c2UiLCJnZXRXaGVyZUNvbmRpdGlvbnMiLCJyZXN1bHQiLCJuYW1lIiwiZmllbGROYW1lIiwiaXNPYmplY3QiLCJ0b1N0cmluZyIsImFsbG93TnVsbCIsImRlZmF1bHRWYWx1ZVNjaGVtYWJsZSIsImRlZmF1bHRWYWx1ZSIsInVuaXF1ZSIsInByaW1hcnlLZXkiLCJhdXRvSW5jcmVtZW50IiwicmVmZXJlbmNlcyIsInJlZmVyZW5jZXNUYWJsZSIsInJlZmVyZW5jZXNLZXkiLCJvbkRlbGV0ZSIsInRvVXBwZXJDYXNlIiwib25VcGRhdGUiLCJjb25zdHJhaW50TmFtZSIsImluZGV4TmFtZU9yQXR0cmlidXRlcyIsImluZGV4TmFtZSIsInVuZGVyc2NvcmUiLCJzY2hlbWEiLCJzY2hlbWFEZWxpbWl0ZXIiLCJfc2NoZW1hIiwiX3NjaGVtYURlbGltaXRlciIsImFkZFNjaGVtYSIsImJhY2t1cFRhYmxlTmFtZSIsInF1b3RlZFRhYmxlTmFtZSIsInF1b3RlZEJhY2t1cFRhYmxlTmFtZSIsImF0dHJpYnV0ZU5hbWVzIiwia2V5cyIsImNyZWF0ZVRhYmxlUXVlcnkiLCJjcmVhdGVUYWJsZVNxbCIsImF0dHJOYW1lQmVmb3JlIiwiYXR0ck5hbWVBZnRlciIsImF0dHJpYnV0ZU5hbWVzSW1wb3J0IiwiYXR0cmlidXRlTmFtZXNFeHBvcnQiLCJ0cmFuc2FjdGlvbiIsInBhcmVudCIsIklTT0xBVElPTl9MRVZFTFMiLCJSRVBFQVRBQkxFX1JFQUQiLCJSRUFEX1VOQ09NTUlUVEVEIiwiUkVBRF9DT01NSVRURUQiLCJTRVJJQUxJWkFCTEUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLGFBQUQsQ0FBckI7O0FBQ0EsTUFBTUMsV0FBVyxHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBM0I7O0FBQ0EsTUFBTUUsQ0FBQyxHQUFHRixPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNRyxtQkFBbUIsR0FBR0gsT0FBTyxDQUFDLDBCQUFELENBQW5DOztBQUNBLE1BQU1JLHNCQUFzQixHQUFHSixPQUFPLENBQUMsNkJBQUQsQ0FBdEM7O0lBRU1LLG9COzs7Ozs7Ozs7Ozs7O21DQUNXO0FBQ2IsYUFBTyxrRkFBUDtBQUNEOzs7dUNBRWtCO0FBQ2pCLGFBQU8sa0ZBQVA7QUFDRDs7O21DQUVjO0FBQ2IsYUFBTyxzQ0FBUDtBQUNEOzs7cUNBRWdCQyxTLEVBQVdDLFUsRUFBWUMsTyxFQUFTO0FBQy9DQSxNQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxFQUFyQjtBQUVBLFlBQU1DLFdBQVcsR0FBRyxFQUFwQjtBQUNBLFlBQU1DLHdCQUF3QixHQUFHUixDQUFDLENBQUNTLE1BQUYsQ0FBU0osVUFBVCxFQUFxQkssTUFBckIsQ0FBNEJDLFVBQVUsSUFBSUEsVUFBVSxDQUFDQyxRQUFYLENB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LGFBQVEsMkJBQTBCQSxTQUFVLEdBQTVDO0FBQ0Q7Ozs7RUFwZGdDSCxtQjs7QUF1ZG5DcUosTUFBTSxDQUFDQyxPQUFQLEdBQWlCcEosb0JBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xyXG5jb25zdCBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4uLy4uL3RyYW5zYWN0aW9uJyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgTXlTcWxRdWVyeUdlbmVyYXRvciA9IHJlcXVpcmUoJy4uL215c3FsL3F1ZXJ5LWdlbmVyYXRvcicpO1xyXG5jb25zdCBBYnN0cmFjdFF1ZXJ5R2VuZXJhdG9yID0gcmVxdWlyZSgnLi4vYWJzdHJhY3QvcXVlcnktZ2VuZXJhdG9yJyk7XHJcblxyXG5jbGFzcyBTUUxpdGVRdWVyeUdlbmVyYXRvciBleHRlbmRzIE15U3FsUXVlcnlHZW5lcmF0b3Ige1xyXG4gIGNyZWF0ZVNjaGVtYSgpIHtcclxuICAgIHJldHVybiBcIlNFTEVDVCBuYW1lIEZST00gYHNxbGl0ZV9tYXN0ZXJgIFdIRVJFIHR5cGU9J3RhYmxlJyBhbmQgbmFtZSE9J3NxbGl0ZV9zZXF1ZW5jZSc7XCI7XHJcbiAgfVxyXG5cclxuICBzaG93U2NoZW1hc1F1ZXJ5KCkge1xyXG4gICAgcmV0dXJuIFwiU0VMRUNUIG5hbWUgRlJPTSBgc3FsaXRlX21hc3RlcmAgV0hFUkUgdHlwZT0ndGFibGUnIGFuZCBuYW1lIT0nc3FsaXRlX3NlcXVlbmNlJztcIjtcclxuICB9XHJcblxyXG4gIHZlcnNpb25RdWVyeSgpIHtcclxuICAgIHJldHVybiAnU0VMRUNUIHNxbGl0ZV92ZXJzaW9uKCkgYXMgYHZlcnNpb25gJztcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRhYmxlUXVlcnkodGFibGVOYW1lLCBhdHRyaWJ1dGVzLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICBjb25zdCBwcmltYXJ5S2V5cyA9IFtdO1xyXG4gICAgY29uc3QgbmVlZHNNdWx0aXBsZVByaW1hcnlLZXlzID0gXy52YWx1ZXMoYXR0cmlidXRlcykuZmlsdGVyKGRlZmluaXRpb24gPT4gZGVmaW5pdGlvbi5pbmNsdWRlcygnUFJJTUFSWSBLRVknKSkubGVuZ3RoID4gMTtcclxuICAgIGNvbnN0IGF0dHJBcnJheSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgYXR0ciBpbiBhdHRyaWJ1dGVzKSB7XHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXR0cmlidXRlcywgYXR0cikpIHtcclxuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IGF0dHJpYnV0ZXNbYXR0cl07XHJcbiAgICAgICAgY29uc3QgY29udGFpbnNBdXRvSW5jcmVtZW50ID0gZGF0YVR5cGUuaW5jbHVkZXMoJ0FVVE9JTkNSRU1FTlQnKTtcclxuXHJcbiAgICAgICAgbGV0IGRhdGFUeXBlU3RyaW5nID0gZGF0YVR5cGU7XHJcbiAgICAgICAgaWYgKGRhdGFUeXBlLmluY2x1ZGVzKCdQUklNQVJZIEtFWScpKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YVR5cGUuaW5jbHVkZXMoJ0lOVCcpKSB7XHJcbiAgICAgICAgICAgIC8vIE9ubHkgSU5URUdFUiBpcyBhbGxvd2VkIGZvciBwcmltYXJ5IGtleSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zZXF1ZWxpemUvc2VxdWVsaXplL2lzc3Vlcy85NjkgKG5vIGxlbmdodCwgdW5zaWduZWQgZXRjKVxyXG4gICAgICAgICAgICBkYXRhVHlwZVN0cmluZyA9IGNvbnRhaW5zQXV0b0luY3JlbWVudCA/ICdJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQnIDogJ0lOVEVHRVIgUFJJTUFSWSBLRVknO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGFUeXBlLmluY2x1ZGVzKCcgUkVGRVJFTkNFUycpKSB7XHJcbiAgICAgICAgICAgICAgZGF0YVR5cGVTdHJpbmcgKz0gZGF0YVR5cGUuc3Vic3RyKGRhdGFUeXBlLmluZGV4T2YoJyBSRUZFUkVOQ0VTJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG5lZWRzTXVsdGlwbGVQcmltYXJ5S2V5cykge1xyXG4gICAgICAgICAgICBwcmltYXJ5S2V5cy5wdXNoKGF0dHIpO1xyXG4gICAgICAgICAgICBkYXRhVHlwZVN0cmluZyA9IGRhdGFUeXBlLnJlcGxhY2UoJ1BSSU1BUlkgS0VZJywgJ05PVCBOVUxMJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dHJBcnJheS5wdXNoKGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHIpfSAke2RhdGFUeXBlU3RyaW5nfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKTtcclxuICAgIGxldCBhdHRyU3RyID0gYXR0ckFycmF5LmpvaW4oJywgJyk7XHJcbiAgICBjb25zdCBwa1N0cmluZyA9IHByaW1hcnlLZXlzLm1hcChwayA9PiB0aGlzLnF1b3RlSWRlbnRpZmllcihwaykpLmpvaW4oJywgJyk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMudW5pcXVlS2V5cykge1xyXG4gICAgICBfLmVhY2gob3B0aW9ucy51bmlxdWVLZXlzLCBjb2x1bW5zID0+IHtcclxuICAgICAgICBpZiAoY29sdW1ucy5jdXN0b21JbmRleCkge1xyXG4gICAgICAgICAgYXR0clN0ciArPSBgLCBVTklRVUUgKCR7Y29sdW1ucy5maWVsZHMubWFwKGZpZWxkID0+IHRoaXMucXVvdGVJZGVudGlmaWVyKGZpZWxkKSkuam9pbignLCAnKX0pYDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwa1N0cmluZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGF0dHJTdHIgKz0gYCwgUFJJTUFSWSBLRVkgKCR7cGtTdHJpbmd9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3FsID0gYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICR7dGFibGV9ICgke2F0dHJTdHJ9KTtgO1xyXG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZUJvb2xlYW5EZWZhdWx0cyhzcWwpO1xyXG4gIH1cclxuXHJcbiAgYm9vbGVhblZhbHVlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgPyAxIDogMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHN0YXRtZW1lbnQgaXMganNvbiBmdW5jdGlvbiBvciBzaW1wbGUgcGF0aFxyXG4gICAqXHJcbiAgICogQHBhcmFtICAge3N0cmluZ30gIHN0bXQgIFRoZSBzdGF0ZW1lbnQgdG8gdmFsaWRhdGVcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gICAgICAgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RhdGVtZW50IGlzIGpzb24gZnVuY3Rpb25cclxuICAgKiBAdGhyb3dzICB7RXJyb3J9ICAgICAgICAgdGhyb3cgaWYgdGhlIHN0YXRlbWVudCBsb29rcyBsaWtlIGpzb24gZnVuY3Rpb24gYnV0IGhhcyBpbnZhbGlkIHRva2VuXHJcbiAgICovXHJcbiAgX2NoZWNrVmFsaWRKc29uU3RhdGVtZW50KHN0bXQpIHtcclxuICAgIGlmICh0eXBlb2Ygc3RtdCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGh0dHBzOi8vc3FsaXRlLm9yZy9qc29uMS5odG1sXHJcbiAgICBjb25zdCBqc29uRnVuY3Rpb25SZWdleCA9IC9eXFxzKihqc29uKD86X1thLXpdKyl7MCwyfSlcXChbXildKlxcKS9pO1xyXG4gICAgY29uc3QgdG9rZW5DYXB0dXJlUmVnZXggPSAvXlxccyooKD86KFtgXCInXSkoPzooPyFcXDIpLnxcXDJ7Mn0pKlxcMil8W1xcd1xcZFxcc10rfFsoKS4sOystXSkvaTtcclxuXHJcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcclxuICAgIGxldCBvcGVuaW5nQnJhY2tldHMgPSAwO1xyXG4gICAgbGV0IGNsb3NpbmdCcmFja2V0cyA9IDA7XHJcbiAgICBsZXQgaGFzSnNvbkZ1bmN0aW9uID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzSW52YWxpZFRva2VuID0gZmFsc2U7XHJcblxyXG4gICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IHN0bXQubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHN0cmluZyA9IHN0bXQuc3Vic3RyKGN1cnJlbnRJbmRleCk7XHJcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTWF0Y2hlcyA9IGpzb25GdW5jdGlvblJlZ2V4LmV4ZWMoc3RyaW5nKTtcclxuICAgICAgaWYgKGZ1bmN0aW9uTWF0Y2hlcykge1xyXG4gICAgICAgIGN1cnJlbnRJbmRleCArPSBmdW5jdGlvbk1hdGNoZXNbMF0uaW5kZXhPZignKCcpO1xyXG4gICAgICAgIGhhc0pzb25GdW5jdGlvbiA9IHRydWU7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHRva2VuTWF0Y2hlcyA9IHRva2VuQ2FwdHVyZVJlZ2V4LmV4ZWMoc3RyaW5nKTtcclxuICAgICAgaWYgKHRva2VuTWF0Y2hlcykge1xyXG4gICAgICAgIGNvbnN0IGNhcHR1cmVkVG9rZW4gPSB0b2tlbk1hdGNoZXNbMV07XHJcbiAgICAgICAgaWYgKGNhcHR1cmVkVG9rZW4gPT09ICcoJykge1xyXG4gICAgICAgICAgb3BlbmluZ0JyYWNrZXRzKys7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjYXB0dXJlZFRva2VuID09PSAnKScpIHtcclxuICAgICAgICAgIGNsb3NpbmdCcmFja2V0cysrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2FwdHVyZWRUb2tlbiA9PT0gJzsnKSB7XHJcbiAgICAgICAgICBoYXNJbnZhbGlkVG9rZW4gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRJbmRleCArPSB0b2tlbk1hdGNoZXNbMF0ubGVuZ3RoO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpbnZhbGlkIGpzb24gc3RhdGVtZW50XHJcbiAgICBoYXNJbnZhbGlkVG9rZW4gfD0gb3BlbmluZ0JyYWNrZXRzICE9PSBjbG9zaW5nQnJhY2tldHM7XHJcbiAgICBpZiAoaGFzSnNvbkZ1bmN0aW9uICYmIGhhc0ludmFsaWRUb2tlbikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQganNvbiBzdGF0ZW1lbnQ6ICR7c3RtdH1gKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RhdGVtZW50IGhhcyB2YWxpZCBqc29uIGZ1bmN0aW9uXHJcbiAgICByZXR1cm4gaGFzSnNvbkZ1bmN0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy9zcWxpdGUgY2FuJ3QgY2FzdCB0byBkYXRldGltZSBzbyB3ZSBuZWVkIHRvIGNvbnZlcnQgZGF0ZSB2YWx1ZXMgdG8gdGhlaXIgSVNPIHN0cmluZ3NcclxuICBfdG9KU09OVmFsdWUodmFsdWUpIHtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWVbMF0gaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAodmFsID0+IHZhbC50b0lTT1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG5cclxuICBoYW5kbGVTZXF1ZWxpemVNZXRob2Qoc210aCwgdGFibGVOYW1lLCBmYWN0b3J5LCBvcHRpb25zLCBwcmVwZW5kKSB7XHJcbiAgICBpZiAoc210aCBpbnN0YW5jZW9mIFV0aWxzLkpzb24pIHtcclxuICAgICAgcmV0dXJuIHN1cGVyLmhhbmRsZVNlcXVlbGl6ZU1ldGhvZChzbXRoLCB0YWJsZU5hbWUsIGZhY3RvcnksIG9wdGlvbnMsIHByZXBlbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzbXRoIGluc3RhbmNlb2YgVXRpbHMuQ2FzdCkge1xyXG4gICAgICBpZiAoL3RpbWVzdGFtcC9pLnRlc3Qoc210aC50eXBlKSkge1xyXG4gICAgICAgIHNtdGgudHlwZSA9ICdkYXRldGltZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gQWJzdHJhY3RRdWVyeUdlbmVyYXRvci5wcm90b3R5cGUuaGFuZGxlU2VxdWVsaXplTWV0aG9kLmNhbGwodGhpcywgc210aCwgdGFibGVOYW1lLCBmYWN0b3J5LCBvcHRpb25zLCBwcmVwZW5kKTtcclxuICB9XHJcblxyXG4gIGFkZENvbHVtblF1ZXJ5KHRhYmxlLCBrZXksIGRhdGFUeXBlKSB7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XHJcbiAgICBhdHRyaWJ1dGVzW2tleV0gPSBkYXRhVHlwZTtcclxuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuYXR0cmlidXRlc1RvU1FMKGF0dHJpYnV0ZXMsIHsgY29udGV4dDogJ2FkZENvbHVtbicgfSk7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihrZXkpfSAke2ZpZWxkc1trZXldfWA7XHJcblxyXG4gICAgY29uc3Qgc3FsID0gYEFMVEVSIFRBQkxFICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlKX0gQUREICR7YXR0cmlidXRlfTtgO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnJlcGxhY2VCb29sZWFuRGVmYXVsdHMoc3FsKTtcclxuICB9XHJcblxyXG4gIHNob3dUYWJsZXNRdWVyeSgpIHtcclxuICAgIHJldHVybiAnU0VMRUNUIG5hbWUgRlJPTSBgc3FsaXRlX21hc3RlcmAgV0hFUkUgdHlwZT1cXCd0YWJsZVxcJyBhbmQgbmFtZSE9XFwnc3FsaXRlX3NlcXVlbmNlXFwnOyc7XHJcbiAgfVxyXG5cclxuICB1cHNlcnRRdWVyeSh0YWJsZU5hbWUsIGluc2VydFZhbHVlcywgdXBkYXRlVmFsdWVzLCB3aGVyZSwgbW9kZWwsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMuaWdub3JlRHVwbGljYXRlcyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgYmluZCA9IFtdO1xyXG4gICAgY29uc3QgYmluZFBhcmFtID0gdGhpcy5iaW5kUGFyYW0oYmluZCk7XHJcblxyXG4gICAgY29uc3QgdXBzZXJ0T3B0aW9ucyA9IF8uZGVmYXVsdHMoeyBiaW5kUGFyYW0gfSwgb3B0aW9ucyk7XHJcbiAgICBjb25zdCBpbnNlcnQgPSB0aGlzLmluc2VydFF1ZXJ5KHRhYmxlTmFtZSwgaW5zZXJ0VmFsdWVzLCBtb2RlbC5yYXdBdHRyaWJ1dGVzLCB1cHNlcnRPcHRpb25zKTtcclxuICAgIGNvbnN0IHVwZGF0ZSA9IHRoaXMudXBkYXRlUXVlcnkodGFibGVOYW1lLCB1cGRhdGVWYWx1ZXMsIHdoZXJlLCB1cHNlcnRPcHRpb25zLCBtb2RlbC5yYXdBdHRyaWJ1dGVzKTtcclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IGAke2luc2VydC5xdWVyeX0gJHt1cGRhdGUucXVlcnl9YDtcclxuXHJcbiAgICByZXR1cm4geyBxdWVyeSwgYmluZCB9O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUXVlcnkodGFibGVOYW1lLCBhdHRyVmFsdWVIYXNoLCB3aGVyZSwgb3B0aW9ucywgYXR0cmlidXRlcykge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICBfLmRlZmF1bHRzKG9wdGlvbnMsIHRoaXMub3B0aW9ucyk7XHJcblxyXG4gICAgYXR0clZhbHVlSGFzaCA9IFV0aWxzLnJlbW92ZU51bGxWYWx1ZXNGcm9tSGFzaChhdHRyVmFsdWVIYXNoLCBvcHRpb25zLm9taXROdWxsLCBvcHRpb25zKTtcclxuXHJcbiAgICBjb25zdCBtb2RlbEF0dHJpYnV0ZU1hcCA9IHt9O1xyXG4gICAgY29uc3QgdmFsdWVzID0gW107XHJcbiAgICBjb25zdCBiaW5kID0gW107XHJcbiAgICBjb25zdCBiaW5kUGFyYW0gPSBvcHRpb25zLmJpbmRQYXJhbSB8fCB0aGlzLmJpbmRQYXJhbShiaW5kKTtcclxuXHJcbiAgICBpZiAoYXR0cmlidXRlcykge1xyXG4gICAgICBfLmVhY2goYXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgbW9kZWxBdHRyaWJ1dGVNYXBba2V5XSA9IGF0dHJpYnV0ZTtcclxuICAgICAgICBpZiAoYXR0cmlidXRlLmZpZWxkKSB7XHJcbiAgICAgICAgICBtb2RlbEF0dHJpYnV0ZU1hcFthdHRyaWJ1dGUuZmllbGRdID0gYXR0cmlidXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0clZhbHVlSGFzaCkge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGF0dHJWYWx1ZUhhc2hba2V5XTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCB8fCBvcHRpb25zLmJpbmRQYXJhbSA9PT0gZmFsc2UpIHtcclxuICAgICAgICB2YWx1ZXMucHVzaChgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihrZXkpfT0ke3RoaXMuZXNjYXBlKHZhbHVlLCBtb2RlbEF0dHJpYnV0ZU1hcCAmJiBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldIHx8IHVuZGVmaW5lZCwgeyBjb250ZXh0OiAnVVBEQVRFJyB9KX1gKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWx1ZXMucHVzaChgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihrZXkpfT0ke3RoaXMuZm9ybWF0KHZhbHVlLCBtb2RlbEF0dHJpYnV0ZU1hcCAmJiBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldIHx8IHVuZGVmaW5lZCwgeyBjb250ZXh0OiAnVVBEQVRFJyB9LCBiaW5kUGFyYW0pfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHF1ZXJ5O1xyXG4gICAgY29uc3Qgd2hlcmVPcHRpb25zID0gXy5kZWZhdWx0cyh7IGJpbmRQYXJhbSB9LCBvcHRpb25zKTtcclxuXHJcbiAgICBpZiAob3B0aW9ucy5saW1pdCkge1xyXG4gICAgICBxdWVyeSA9IGBVUERBVEUgJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX0gU0VUICR7dmFsdWVzLmpvaW4oJywnKX0gV0hFUkUgcm93aWQgSU4gKFNFTEVDVCByb3dpZCBGUk9NICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9ICR7dGhpcy53aGVyZVF1ZXJ5KHdoZXJlLCB3aGVyZU9wdGlvbnMpfSBMSU1JVCAke3RoaXMuZXNjYXBlKG9wdGlvbnMubGltaXQpfSlgO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcXVlcnkgPSBgVVBEQVRFICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9IFNFVCAke3ZhbHVlcy5qb2luKCcsJyl9ICR7dGhpcy53aGVyZVF1ZXJ5KHdoZXJlLCB3aGVyZU9wdGlvbnMpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgcXVlcnksIGJpbmQgfTtcclxuICB9XHJcblxyXG4gIHRydW5jYXRlVGFibGVRdWVyeSh0YWJsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgYERFTEVURSBGUk9NICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9YCxcclxuICAgICAgb3B0aW9ucy5yZXN0YXJ0SWRlbnRpdHkgPyBgOyBERUxFVEUgRlJPTSAke3RoaXMucXVvdGVUYWJsZSgnc3FsaXRlX3NlcXVlbmNlJyl9IFdIRVJFICR7dGhpcy5xdW90ZUlkZW50aWZpZXIoJ25hbWUnKX0gPSAke1V0aWxzLmFkZFRpY2tzKFV0aWxzLnJlbW92ZVRpY2tzKHRoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpLCAnYCcpLCBcIidcIil9O2AgOiAnJ1xyXG4gICAgXS5qb2luKCcnKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVF1ZXJ5KHRhYmxlTmFtZSwgd2hlcmUsIG9wdGlvbnMgPSB7fSwgbW9kZWwpIHtcclxuICAgIF8uZGVmYXVsdHMob3B0aW9ucywgdGhpcy5vcHRpb25zKTtcclxuXHJcbiAgICBsZXQgd2hlcmVDbGF1c2UgPSB0aGlzLmdldFdoZXJlQ29uZGl0aW9ucyh3aGVyZSwgbnVsbCwgbW9kZWwsIG9wdGlvbnMpO1xyXG5cclxuICAgIGlmICh3aGVyZUNsYXVzZSkge1xyXG4gICAgICB3aGVyZUNsYXVzZSA9IGBXSEVSRSAke3doZXJlQ2xhdXNlfWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMubGltaXQpIHtcclxuICAgICAgd2hlcmVDbGF1c2UgPSBgV0hFUkUgcm93aWQgSU4gKFNFTEVDVCByb3dpZCBGUk9NICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9ICR7d2hlcmVDbGF1c2V9IExJTUlUICR7dGhpcy5lc2NhcGUob3B0aW9ucy5saW1pdCl9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGBERUxFVEUgRlJPTSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfSAke3doZXJlQ2xhdXNlfWA7XHJcbiAgfVxyXG5cclxuICBhdHRyaWJ1dGVzVG9TUUwoYXR0cmlidXRlcykge1xyXG4gICAgY29uc3QgcmVzdWx0ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBuYW1lIGluIGF0dHJpYnV0ZXMpIHtcclxuICAgICAgY29uc3QgZGF0YVR5cGUgPSBhdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBkYXRhVHlwZS5maWVsZCB8fCBuYW1lO1xyXG5cclxuICAgICAgaWYgKF8uaXNPYmplY3QoZGF0YVR5cGUpKSB7XHJcbiAgICAgICAgbGV0IHNxbCA9IGRhdGFUeXBlLnR5cGUudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhVHlwZSwgJ2FsbG93TnVsbCcpICYmICFkYXRhVHlwZS5hbGxvd051bGwpIHtcclxuICAgICAgICAgIHNxbCArPSAnIE5PVCBOVUxMJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChVdGlscy5kZWZhdWx0VmFsdWVTY2hlbWFibGUoZGF0YVR5cGUuZGVmYXVsdFZhbHVlKSkge1xyXG4gICAgICAgICAgLy8gVE9ETyB0aG9yb3VnaGx5IGNoZWNrIHRoYXQgRGF0YVR5cGVzLk5PVyB3aWxsIHByb3Blcmx5XHJcbiAgICAgICAgICAvLyBnZXQgcG9wdWxhdGVkIG9uIGFsbCBkYXRhYmFzZXMgYXMgREVGQVVMVCB2YWx1ZVxyXG4gICAgICAgICAgLy8gaS5lLiBteXNxbCByZXF1aXJlczogREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUFxyXG4gICAgICAgICAgc3FsICs9IGAgREVGQVVMVCAke3RoaXMuZXNjYXBlKGRhdGFUeXBlLmRlZmF1bHRWYWx1ZSwgZGF0YVR5cGUpfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGF0YVR5cGUudW5pcXVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBzcWwgKz0gJyBVTklRVUUnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGFUeXBlLnByaW1hcnlLZXkpIHtcclxuICAgICAgICAgIHNxbCArPSAnIFBSSU1BUlkgS0VZJztcclxuXHJcbiAgICAgICAgICBpZiAoZGF0YVR5cGUuYXV0b0luY3JlbWVudCkge1xyXG4gICAgICAgICAgICBzcWwgKz0gJyBBVVRPSU5DUkVNRU5UJztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkYXRhVHlwZS5yZWZlcmVuY2VzKSB7XHJcbiAgICAgICAgICBjb25zdCByZWZlcmVuY2VzVGFibGUgPSB0aGlzLnF1b3RlVGFibGUoZGF0YVR5cGUucmVmZXJlbmNlcy5tb2RlbCk7XHJcblxyXG4gICAgICAgICAgbGV0IHJlZmVyZW5jZXNLZXk7XHJcbiAgICAgICAgICBpZiAoZGF0YVR5cGUucmVmZXJlbmNlcy5rZXkpIHtcclxuICAgICAgICAgICAgcmVmZXJlbmNlc0tleSA9IHRoaXMucXVvdGVJZGVudGlmaWVyKGRhdGFUeXBlLnJlZmVyZW5jZXMua2V5KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlZmVyZW5jZXNLZXkgPSB0aGlzLnF1b3RlSWRlbnRpZmllcignaWQnKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzcWwgKz0gYCBSRUZFUkVOQ0VTICR7cmVmZXJlbmNlc1RhYmxlfSAoJHtyZWZlcmVuY2VzS2V5fSlgO1xyXG5cclxuICAgICAgICAgIGlmIChkYXRhVHlwZS5vbkRlbGV0ZSkge1xyXG4gICAgICAgICAgICBzcWwgKz0gYCBPTiBERUxFVEUgJHtkYXRhVHlwZS5vbkRlbGV0ZS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGFUeXBlLm9uVXBkYXRlKSB7XHJcbiAgICAgICAgICAgIHNxbCArPSBgIE9OIFVQREFURSAke2RhdGFUeXBlLm9uVXBkYXRlLnRvVXBwZXJDYXNlKCl9YDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXN1bHRbZmllbGROYW1lXSA9IHNxbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHRbZmllbGROYW1lXSA9IGRhdGFUeXBlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHNob3dJbmRleGVzUXVlcnkodGFibGVOYW1lKSB7XHJcbiAgICByZXR1cm4gYFBSQUdNQSBJTkRFWF9MSVNUKCR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9KWA7XHJcbiAgfVxyXG5cclxuICBzaG93Q29uc3RyYWludHNRdWVyeSh0YWJsZU5hbWUsIGNvbnN0cmFpbnROYW1lKSB7XHJcbiAgICBsZXQgc3FsID0gYFNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPScke3RhYmxlTmFtZX0nYDtcclxuXHJcbiAgICBpZiAoY29uc3RyYWludE5hbWUpIHtcclxuICAgICAgc3FsICs9IGAgQU5EIHNxbCBMSUtFICclJHtjb25zdHJhaW50TmFtZX0lJ2A7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGAke3NxbH07YDtcclxuICB9XHJcblxyXG4gIHJlbW92ZUluZGV4UXVlcnkodGFibGVOYW1lLCBpbmRleE5hbWVPckF0dHJpYnV0ZXMpIHtcclxuICAgIGxldCBpbmRleE5hbWUgPSBpbmRleE5hbWVPckF0dHJpYnV0ZXM7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpbmRleE5hbWUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGluZGV4TmFtZSA9IFV0aWxzLnVuZGVyc2NvcmUoYCR7dGFibGVOYW1lfV8ke2luZGV4TmFtZU9yQXR0cmlidXRlcy5qb2luKCdfJyl9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGBEUk9QIElOREVYIElGIEVYSVNUUyAke3RoaXMucXVvdGVJZGVudGlmaWVyKGluZGV4TmFtZSl9YDtcclxuICB9XHJcblxyXG4gIGRlc2NyaWJlVGFibGVRdWVyeSh0YWJsZU5hbWUsIHNjaGVtYSwgc2NoZW1hRGVsaW1pdGVyKSB7XHJcbiAgICBjb25zdCB0YWJsZSA9IHtcclxuICAgICAgX3NjaGVtYTogc2NoZW1hLFxyXG4gICAgICBfc2NoZW1hRGVsaW1pdGVyOiBzY2hlbWFEZWxpbWl0ZXIsXHJcbiAgICAgIHRhYmxlTmFtZVxyXG4gICAgfTtcclxuICAgIHJldHVybiBgUFJBR01BIFRBQkxFX0lORk8oJHt0aGlzLnF1b3RlVGFibGUodGhpcy5hZGRTY2hlbWEodGFibGUpKX0pO2A7XHJcbiAgfVxyXG5cclxuICBkZXNjcmliZUNyZWF0ZVRhYmxlUXVlcnkodGFibGVOYW1lKSB7XHJcbiAgICByZXR1cm4gYFNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPScke3RhYmxlTmFtZX0nO2A7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDb2x1bW5RdWVyeSh0YWJsZU5hbWUsIGF0dHJpYnV0ZXMpIHtcclxuXHJcbiAgICBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzVG9TUUwoYXR0cmlidXRlcyk7XHJcblxyXG4gICAgbGV0IGJhY2t1cFRhYmxlTmFtZTtcclxuICAgIGlmICh0eXBlb2YgdGFibGVOYW1lID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBiYWNrdXBUYWJsZU5hbWUgPSB7XHJcbiAgICAgICAgdGFibGVOYW1lOiBgJHt0YWJsZU5hbWUudGFibGVOYW1lfV9iYWNrdXBgLFxyXG4gICAgICAgIHNjaGVtYTogdGFibGVOYW1lLnNjaGVtYVxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYmFja3VwVGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV9iYWNrdXBgO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHF1b3RlZFRhYmxlTmFtZSA9IHRoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpO1xyXG4gICAgY29uc3QgcXVvdGVkQmFja3VwVGFibGVOYW1lID0gdGhpcy5xdW90ZVRhYmxlKGJhY2t1cFRhYmxlTmFtZSk7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLm1hcChhdHRyID0+IHRoaXMucXVvdGVJZGVudGlmaWVyKGF0dHIpKS5qb2luKCcsICcpO1xyXG5cclxuICAgIC8vIFRlbXBvcmFyeSB0YWJsZSBjYW5ub3Qgd29yayBmb3IgZm9yZWlnbiBrZXlzLlxyXG4gICAgcmV0dXJuIGAke3RoaXMuY3JlYXRlVGFibGVRdWVyeShiYWNrdXBUYWJsZU5hbWUsIGF0dHJpYnV0ZXMpXHJcbiAgICB9SU5TRVJUIElOVE8gJHtxdW90ZWRCYWNrdXBUYWJsZU5hbWV9IFNFTEVDVCAke2F0dHJpYnV0ZU5hbWVzfSBGUk9NICR7cXVvdGVkVGFibGVOYW1lfTtgXHJcbiAgICAgICsgYERST1AgVEFCTEUgJHtxdW90ZWRUYWJsZU5hbWV9OyR7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSwgYXR0cmlidXRlcylcclxuICAgICAgfUlOU0VSVCBJTlRPICR7cXVvdGVkVGFibGVOYW1lfSBTRUxFQ1QgJHthdHRyaWJ1dGVOYW1lc30gRlJPTSAke3F1b3RlZEJhY2t1cFRhYmxlTmFtZX07YFxyXG4gICAgICArIGBEUk9QIFRBQkxFICR7cXVvdGVkQmFja3VwVGFibGVOYW1lfTtgO1xyXG4gIH1cclxuXHJcbiAgX2FsdGVyQ29uc3RyYWludFF1ZXJ5KHRhYmxlTmFtZSwgYXR0cmlidXRlcywgY3JlYXRlVGFibGVTcWwpIHtcclxuICAgIGxldCBiYWNrdXBUYWJsZU5hbWU7XHJcblxyXG4gICAgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlc1RvU1FMKGF0dHJpYnV0ZXMpO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdGFibGVOYW1lID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBiYWNrdXBUYWJsZU5hbWUgPSB7XHJcbiAgICAgICAgdGFibGVOYW1lOiBgJHt0YWJsZU5hbWUudGFibGVOYW1lfV9iYWNrdXBgLFxyXG4gICAgICAgIHNjaGVtYTogdGFibGVOYW1lLnNjaGVtYVxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYmFja3VwVGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV9iYWNrdXBgO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcXVvdGVkVGFibGVOYW1lID0gdGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSk7XHJcbiAgICBjb25zdCBxdW90ZWRCYWNrdXBUYWJsZU5hbWUgPSB0aGlzLnF1b3RlVGFibGUoYmFja3VwVGFibGVOYW1lKTtcclxuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWVzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlcykubWFwKGF0dHIgPT4gdGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cikpLmpvaW4oJywgJyk7XHJcblxyXG4gICAgcmV0dXJuIGAke2NyZWF0ZVRhYmxlU3FsXHJcbiAgICAgIC5yZXBsYWNlKGBDUkVBVEUgVEFCTEUgJHtxdW90ZWRUYWJsZU5hbWV9YCwgYENSRUFURSBUQUJMRSAke3F1b3RlZEJhY2t1cFRhYmxlTmFtZX1gKVxyXG4gICAgICAucmVwbGFjZShgQ1JFQVRFIFRBQkxFICR7cXVvdGVkVGFibGVOYW1lLnJlcGxhY2UoL2AvZywgJ1wiJyl9YCwgYENSRUFURSBUQUJMRSAke3F1b3RlZEJhY2t1cFRhYmxlTmFtZX1gKVxyXG4gICAgfUlOU0VSVCBJTlRPICR7cXVvdGVkQmFja3VwVGFibGVOYW1lfSBTRUxFQ1QgJHthdHRyaWJ1dGVOYW1lc30gRlJPTSAke3F1b3RlZFRhYmxlTmFtZX07YFxyXG4gICAgICArIGBEUk9QIFRBQkxFICR7cXVvdGVkVGFibGVOYW1lfTtgXHJcbiAgICAgICsgYEFMVEVSIFRBQkxFICR7cXVvdGVkQmFja3VwVGFibGVOYW1lfSBSRU5BTUUgVE8gJHtxdW90ZWRUYWJsZU5hbWV9O2A7XHJcbiAgfVxyXG5cclxuICByZW5hbWVDb2x1bW5RdWVyeSh0YWJsZU5hbWUsIGF0dHJOYW1lQmVmb3JlLCBhdHRyTmFtZUFmdGVyLCBhdHRyaWJ1dGVzKSB7XHJcblxyXG4gICAgbGV0IGJhY2t1cFRhYmxlTmFtZTtcclxuXHJcbiAgICBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzVG9TUUwoYXR0cmlidXRlcyk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0YWJsZU5hbWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGJhY2t1cFRhYmxlTmFtZSA9IHtcclxuICAgICAgICB0YWJsZU5hbWU6IGAke3RhYmxlTmFtZS50YWJsZU5hbWV9X2JhY2t1cGAsXHJcbiAgICAgICAgc2NoZW1hOiB0YWJsZU5hbWUuc2NoZW1hXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiYWNrdXBUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2JhY2t1cGA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcXVvdGVkVGFibGVOYW1lID0gdGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSk7XHJcbiAgICBjb25zdCBxdW90ZWRCYWNrdXBUYWJsZU5hbWUgPSB0aGlzLnF1b3RlVGFibGUoYmFja3VwVGFibGVOYW1lKTtcclxuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWVzSW1wb3J0ID0gT2JqZWN0LmtleXMoYXR0cmlidXRlcykubWFwKGF0dHIgPT5cclxuICAgICAgYXR0ck5hbWVBZnRlciA9PT0gYXR0ciA/IGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHJOYW1lQmVmb3JlKX0gQVMgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKX1gIDogdGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cilcclxuICAgICkuam9pbignLCAnKTtcclxuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWVzRXhwb3J0ID0gT2JqZWN0LmtleXMoYXR0cmlidXRlcykubWFwKGF0dHIgPT4gdGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cikpLmpvaW4oJywgJyk7XHJcblxyXG4gICAgcmV0dXJuIGAke3RoaXMuY3JlYXRlVGFibGVRdWVyeShiYWNrdXBUYWJsZU5hbWUsIGF0dHJpYnV0ZXMpLnJlcGxhY2UoJ0NSRUFURSBUQUJMRScsICdDUkVBVEUgVEVNUE9SQVJZIFRBQkxFJylcclxuICAgIH1JTlNFUlQgSU5UTyAke3F1b3RlZEJhY2t1cFRhYmxlTmFtZX0gU0VMRUNUICR7YXR0cmlidXRlTmFtZXNJbXBvcnR9IEZST00gJHtxdW90ZWRUYWJsZU5hbWV9O2BcclxuICAgICAgKyBgRFJPUCBUQUJMRSAke3F1b3RlZFRhYmxlTmFtZX07JHtcclxuICAgICAgICB0aGlzLmNyZWF0ZVRhYmxlUXVlcnkodGFibGVOYW1lLCBhdHRyaWJ1dGVzKVxyXG4gICAgICB9SU5TRVJUIElOVE8gJHtxdW90ZWRUYWJsZU5hbWV9IFNFTEVDVCAke2F0dHJpYnV0ZU5hbWVzRXhwb3J0fSBGUk9NICR7cXVvdGVkQmFja3VwVGFibGVOYW1lfTtgXHJcbiAgICAgICsgYERST1AgVEFCTEUgJHtxdW90ZWRCYWNrdXBUYWJsZU5hbWV9O2A7XHJcbiAgfVxyXG5cclxuICBzdGFydFRyYW5zYWN0aW9uUXVlcnkodHJhbnNhY3Rpb24pIHtcclxuICAgIGlmICh0cmFuc2FjdGlvbi5wYXJlbnQpIHtcclxuICAgICAgcmV0dXJuIGBTQVZFUE9JTlQgJHt0aGlzLnF1b3RlSWRlbnRpZmllcih0cmFuc2FjdGlvbi5uYW1lKX07YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYEJFR0lOICR7dHJhbnNhY3Rpb24ub3B0aW9ucy50eXBlfSBUUkFOU0FDVElPTjtgO1xyXG4gIH1cclxuXHJcbiAgc2V0SXNvbGF0aW9uTGV2ZWxRdWVyeSh2YWx1ZSkge1xyXG4gICAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uLklTT0xBVElPTl9MRVZFTFMuUkVQRUFUQUJMRV9SRUFEOlxyXG4gICAgICAgIHJldHVybiAnLS0gU1FMaXRlIGlzIG5vdCBhYmxlIHRvIGNob29zZSB0aGUgaXNvbGF0aW9uIGxldmVsIFJFUEVBVEFCTEUgUkVBRC4nO1xyXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uLklTT0xBVElPTl9MRVZFTFMuUkVBRF9VTkNPTU1JVFRFRDpcclxuICAgICAgICByZXR1cm4gJ1BSQUdNQSByZWFkX3VuY29tbWl0dGVkID0gT047JztcclxuICAgICAgY2FzZSBUcmFuc2FjdGlvbi5JU09MQVRJT05fTEVWRUxTLlJFQURfQ09NTUlUVEVEOlxyXG4gICAgICAgIHJldHVybiAnUFJBR01BIHJlYWRfdW5jb21taXR0ZWQgPSBPRkY7JztcclxuICAgICAgY2FzZSBUcmFuc2FjdGlvbi5JU09MQVRJT05fTEVWRUxTLlNFUklBTElaQUJMRTpcclxuICAgICAgICByZXR1cm4gJy0tIFNRTGl0ZVxcJ3MgZGVmYXVsdCBpc29sYXRpb24gbGV2ZWwgaXMgU0VSSUFMSVpBQkxFLiBOb3RoaW5nIHRvIGRvLic7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGlzb2xhdGlvbiBsZXZlbDogJHt2YWx1ZX1gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlcGxhY2VCb29sZWFuRGVmYXVsdHMoc3FsKSB7XHJcbiAgICByZXR1cm4gc3FsLnJlcGxhY2UoL0RFRkFVTFQgJz9mYWxzZSc/L2csICdERUZBVUxUIDAnKS5yZXBsYWNlKC9ERUZBVUxUICc/dHJ1ZSc/L2csICdERUZBVUxUIDEnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyBhbiBTUUwgcXVlcnkgdGhhdCByZXR1cm5zIGFsbCBmb3JlaWduIGtleXMgb2YgYSB0YWJsZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gdGFibGVOYW1lICBUaGUgbmFtZSBvZiB0aGUgdGFibGUuXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gICAgICAgICAgICBUaGUgZ2VuZXJhdGVkIHNxbCBxdWVyeS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGdldEZvcmVpZ25LZXlzUXVlcnkodGFibGVOYW1lKSB7XHJcbiAgICByZXR1cm4gYFBSQUdNQSBmb3JlaWduX2tleV9saXN0KCR7dGFibGVOYW1lfSlgO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTUUxpdGVRdWVyeUdlbmVyYXRvcjtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnktZ2VuZXJhdG9yLmpzIl0sIm5hbWVzIjpbIlV0aWxzIiwicmVxdWlyZSIsIlRyYW5zYWN0aW9uIiwiXyIsIk15U3FsUXVlcnlHZW5lcmF0b3IiLCJBYnN0cmFjdFF1ZXJ5R2VuZXJhdG9yIiwiU1FMaXRlUXVlcnlHZW5lcmF0b3IiLCJ0YWJsZU5hbWUiLCJhdHRyaWJ1dGVzIiwib3B0aW9ucyIsInByaW1hcnlLZXlzIiwibmVlZHNNdWx0aXBsZVByaW1hcnlLZXlzIiwidmFsdWVzIiwiZmlsdGVyIiwiZGVmaW5pdGlvbiIsImluY2x1ZGVzIiwibGVuZ3RoIiwiYXR0ckFycmF5IiwiYXR0ciIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRhdGFUeXBlIiwiY29udGFpbnNBdXRvSW5jcmVtZW50IiwiZGF0YVR5cGVTdHJpbmciLCJzdWJzdHIiLCJpbmRleE9mIiwicHVzaCIsInJlcGxhY2UiLCJxdW90ZUlkZW50aWZpZXIiLCJ0YWJsZSIsInF1b3RlVGFibGUiLCJhdHRyU3RyIiwiam9pbiIsInBrU3RyaW5nIiwibWFwIiwicGsiLCJ1bmlxdWVLZXlzIiwiZWFjaCIsImNvbHVtbnMiLCJjdXN0b21JbmRleCIsImZpZWxkcyIsImZpZWxkIiwic3FsIiwicmVwbGFjZUJvb2xlYW5EZWZhdWx0cyIsInZhbHVlIiwic3RtdCIsImpzb25GdW5jdGlvblJlZ2V4IiwidG9rZW5DYXB0dXJlUmVnZXgiLCJjdXJyZW50SW5kZXgiLCJvcGVuaW5nQnJhY2tldHMiLCJjbG9zaW5nQnJhY2tldHMiLCJoYXNKc29uRnVuY3Rpb24iLCJoYXNJbnZhbGlkVG9rZW4iLCJzdHJpbmciLCJmdW5jdGlvbk1hdGNoZXMiLCJleGVjIiwidG9rZW5NYXRjaGVzIiwiY2FwdHVyZWRUb2tlbiIsIkVycm9yIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwidmFsIiwic210aCIsImZhY3RvcnkiLCJwcmVwZW5kIiwiSnNvbiIsIkNhc3QiLCJ0ZXN0IiwidHlwZSIsImhhbmRsZVNlcXVlbGl6ZU1ldGhvZCIsImtleSIsImF0dHJpYnV0ZXNUb1NRTCIsImNvbnRleHQiLCJhdHRyaWJ1dGUiLCJpbnNlcnRWYWx1ZXMiLCJ1cGRhdGVWYWx1ZXMiLCJ3aGVyZSIsIm1vZGVsIiwiaWdub3JlRHVwbGljYXRlcyIsImJpbmQiLCJiaW5kUGFyYW0iLCJ1cHNlcnRPcHRpb25zIiwiZGVmYXVsdHMiLCJpbnNlcnQiLCJpbnNlcnRRdWVyeSIsInJhd0F0dHJpYnV0ZXMiLCJ1cGRhdGUiLCJ1cGRhdGVRdWVyeSIsInF1ZXJ5IiwiYXR0clZhbHVlSGFzaCIsInJlbW92ZU51bGxWYWx1ZXNGcm9tSGFzaCIsIm9taXROdWxsIiwibW9kZWxBdHRyaWJ1dGVNYXAiLCJTZXF1ZWxpemVNZXRob2QiLCJlc2NhcGUiLCJ1bmRlZmluZWQiLCJmb3JtYXQiLCJ3aGVyZU9wdGlvbnMiLCJsaW1pdCIsIndoZXJlUXVlcnkiLCJyZXN0YXJ0SWRlbnRpdHkiLCJhZGRUaWNrcyIsInJlbW92ZVRpY2tzIiwid2hlcmVDbGF1c2UiLCJnZXRXaGVyZUNvbmRpdGlvbnMiLCJyZXN1bHQiLCJuYW1lIiwiZmllbGROYW1lIiwiaXNPYmplY3QiLCJ0b1N0cmluZyIsImFsbG93TnVsbCIsImRlZmF1bHRWYWx1ZVNjaGVtYWJsZSIsImRlZmF1bHRWYWx1ZSIsInVuaXF1ZSIsInByaW1hcnlLZXkiLCJhdXRvSW5jcmVtZW50IiwicmVmZXJlbmNlcyIsInJlZmVyZW5jZXNUYWJsZSIsInJlZmVyZW5jZXNLZXkiLCJvbkRlbGV0ZSIsInRvVXBwZXJDYXNlIiwib25VcGRhdGUiLCJjb25zdHJhaW50TmFtZSIsImluZGV4TmFtZU9yQXR0cmlidXRlcyIsImluZGV4TmFtZSIsInVuZGVyc2NvcmUiLCJzY2hlbWEiLCJzY2hlbWFEZWxpbWl0ZXIiLCJfc2NoZW1hIiwiX3NjaGVtYURlbGltaXRlciIsImFkZFNjaGVtYSIsImJhY2t1cFRhYmxlTmFtZSIsInF1b3RlZFRhYmxlTmFtZSIsInF1b3RlZEJhY2t1cFRhYmxlTmFtZSIsImF0dHJpYnV0ZU5hbWVzIiwia2V5cyIsImNyZWF0ZVRhYmxlUXVlcnkiLCJjcmVhdGVUYWJsZVNxbCIsImF0dHJOYW1lQmVmb3JlIiwiYXR0ck5hbWVBZnRlciIsImF0dHJpYnV0ZU5hbWVzSW1wb3J0IiwiYXR0cmlidXRlTmFtZXNFeHBvcnQiLCJ0cmFuc2FjdGlvbiIsInBhcmVudCIsIklTT0xBVElPTl9MRVZFTFMiLCJSRVBFQVRBQkxFX1JFQUQiLCJSRUFEX1VOQ09NTUlUVEVEIiwiUkVBRF9DT01NSVRURUQiLCJTRVJJQUxJWkFCTEUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxhQUFELENBQXJCOztBQUNBLE1BQU1DLFdBQVcsR0FBR0QsT0FBTyxDQUFDLG1CQUFELENBQTNCOztBQUNBLE1BQU1FLENBQUMsR0FBR0YsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUcsbUJBQW1CLEdBQUdILE9BQU8sQ0FBQywwQkFBRCxDQUFuQzs7QUFDQSxNQUFNSSxzQkFBc0IsR0FBR0osT0FBTyxDQUFDLDZCQUFELENBQXRDOztJQUVNSyxvQjs7Ozs7Ozs7Ozs7OzttQ0FDVztBQUNiLGFBQU8sa0ZBQVA7QUFDRDs7O3VDQUVrQjtBQUNqQixhQUFPLGtGQUFQO0FBQ0Q7OzttQ0FFYztBQUNiLGFBQU8sc0NBQVA7QUFDRDs7O3FDQUVnQkMsUyxFQUFXQyxVLEVBQVlDLE8sRUFBUztBQUMvQ0EsTUFBQUEsT0FBTyxHQUFHQSxPQUFPLElBQUksRUFBckI7QUFFQSxZQUFNQyxXQUFXLEdBQUcsRUFBcEI7QUFDQSxZQUFNQyx3QkFBd0IsR0FBR1IsQ0FBQyxDQUFDUyxNQUFGLENBQVNKLFVBQVQsRUFBcUJLLE1BQXJCLENBQTRCQyxVQUFVLElBQUlBLFVBQVUsQ0FBQ0MsUUFB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Q0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O3dDQUNzQnRCLFMsRUFBVztBQUM3QixhQUFRLDJCQUEwQkEsU0FBVSxHQUE1QztBQUNEOzs7O0VBcGRnQ0gsbUI7O0FBdWRuQ3FKLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnBKLG9CQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuY29uc3QgVHJhbnNhY3Rpb24gPSByZXF1aXJlKCcuLi8uLi90cmFuc2FjdGlvbicpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgTXlTcWxRdWVyeUdlbmVyYXRvciA9IHJlcXVpcmUoJy4uL215c3FsL3F1ZXJ5LWdlbmVyYXRvcicpO1xuY29uc3QgQWJzdHJhY3RRdWVyeUdlbmVyYXRvciA9IHJlcXVpcmUoJy4uL2Fic3RyYWN0L3F1ZXJ5LWdlbmVyYXRvcicpO1xuXG5jbGFzcyBTUUxpdGVRdWVyeUdlbmVyYXRvciBleHRlbmRzIE15U3FsUXVlcnlHZW5lcmF0b3Ige1xuICBjcmVhdGVTY2hlbWEoKSB7XG4gICAgcmV0dXJuIFwiU0VMRUNUIG5hbWUgRlJPTSBgc3FsaXRlX21hc3RlcmAgV0hFUkUgdHlwZT0ndGFibGUnIGFuZCBuYW1lIT0nc3FsaXRlX3NlcXVlbmNlJztcIjtcbiAgfVxuXG4gIHNob3dTY2hlbWFzUXVlcnkoKSB7XG4gICAgcmV0dXJuIFwiU0VMRUNUIG5hbWUgRlJPTSBgc3FsaXRlX21hc3RlcmAgV0hFUkUgdHlwZT0ndGFibGUnIGFuZCBuYW1lIT0nc3FsaXRlX3NlcXVlbmNlJztcIjtcbiAgfVxuXG4gIHZlcnNpb25RdWVyeSgpIHtcbiAgICByZXR1cm4gJ1NFTEVDVCBzcWxpdGVfdmVyc2lvbigpIGFzIGB2ZXJzaW9uYCc7XG4gIH1cblxuICBjcmVhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSwgYXR0cmlidXRlcywgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgcHJpbWFyeUtleXMgPSBbXTtcbiAgICBjb25zdCBuZWVkc011bHRpcGxlUHJpbWFyeUtleXMgPSBfLnZhbHVlcyhhdHRyaWJ1dGVzKS5maWx0ZXIoZGVmaW5pdGlvbiA9PiBkZWZpbml0aW9uLmluY2x1ZGVzKCdQUklNQVJZIEtFWScpKS5sZW5ndGggPiAxO1xuICAgIGNvbnN0IGF0dHJBcnJheSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBhdHRyIGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSBhdHRyaWJ1dGVzW2F0dHJdO1xuICAgICAgICBjb25zdCBjb250YWluc0F1dG9JbmNyZW1lbnQgPSBkYXRhVHlwZS5pbmNsdWRlcygnQVVUT0lOQ1JFTUVOVCcpO1xuXG4gICAgICAgIGxldCBkYXRhVHlwZVN0cmluZyA9IGRhdGFUeXBlO1xuICAgICAgICBpZiAoZGF0YVR5cGUuaW5jbHVkZXMoJ1BSSU1BUlkgS0VZJykpIHtcbiAgICAgICAgICBpZiAoZGF0YVR5cGUuaW5jbHVkZXMoJ0lOVCcpKSB7XG4gICAgICAgICAgICAvLyBPbmx5IElOVEVHRVIgaXMgYWxsb3dlZCBmb3IgcHJpbWFyeSBrZXksIHNlZSBodHRwczovL2dpdGh1Yi5jb20vc2VxdWVsaXplL3NlcXVlbGl6ZS9pc3N1ZXMvOTY5IChubyBsZW5naHQsIHVuc2lnbmVkIGV0YylcbiAgICAgICAgICAgIGRhdGFUeXBlU3RyaW5nID0gY29udGFpbnNBdXRvSW5jcmVtZW50ID8gJ0lOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCcgOiAnSU5URUdFUiBQUklNQVJZIEtFWSc7XG5cbiAgICAgICAgICAgIGlmIChkYXRhVHlwZS5pbmNsdWRlcygnIFJFRkVSRU5DRVMnKSkge1xuICAgICAgICAgICAgICBkYXRhVHlwZVN0cmluZyArPSBkYXRhVHlwZS5zdWJzdHIoZGF0YVR5cGUuaW5kZXhPZignIFJFRkVSRU5DRVMnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5lZWRzTXVsdGlwbGVQcmltYXJ5S2V5cykge1xuICAgICAgICAgICAgcHJpbWFyeUtleXMucHVzaChhdHRyKTtcbiAgICAgICAgICAgIGRhdGFUeXBlU3RyaW5nID0gZGF0YVR5cGUucmVwbGFjZSgnUFJJTUFSWSBLRVknLCAnTk9UIE5VTEwnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXR0ckFycmF5LnB1c2goYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cil9ICR7ZGF0YVR5cGVTdHJpbmd9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKTtcbiAgICBsZXQgYXR0clN0ciA9IGF0dHJBcnJheS5qb2luKCcsICcpO1xuICAgIGNvbnN0IHBrU3RyaW5nID0gcHJpbWFyeUtleXMubWFwKHBrID0+IHRoaXMucXVvdGVJZGVudGlmaWVyKHBrKSkuam9pbignLCAnKTtcblxuICAgIGlmIChvcHRpb25zLnVuaXF1ZUtleXMpIHtcbiAgICAgIF8uZWFjaChvcHRpb25zLnVuaXF1ZUtleXMsIGNvbHVtbnMgPT4ge1xuICAgICAgICBpZiAoY29sdW1ucy5jdXN0b21JbmRleCkge1xuICAgICAgICAgIGF0dHJTdHIgKz0gYCwgVU5JUVVFICgke2NvbHVtbnMuZmllbGRzLm1hcChmaWVsZCA9PiB0aGlzLnF1b3RlSWRlbnRpZmllcihmaWVsZCkpLmpvaW4oJywgJyl9KWA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwa1N0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICBhdHRyU3RyICs9IGAsIFBSSU1BUlkgS0VZICgke3BrU3RyaW5nfSlgO1xuICAgIH1cblxuICAgIGNvbnN0IHNxbCA9IGBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAke3RhYmxlfSAoJHthdHRyU3RyfSk7YDtcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlQm9vbGVhbkRlZmF1bHRzKHNxbCk7XG4gIH1cblxuICBib29sZWFuVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPyAxIDogMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBzdGF0bWVtZW50IGlzIGpzb24gZnVuY3Rpb24gb3Igc2ltcGxlIHBhdGhcbiAgICpcbiAgICogQHBhcmFtICAge3N0cmluZ30gIHN0bXQgIFRoZSBzdGF0ZW1lbnQgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICAgIHRydWUgaWYgdGhlIGdpdmVuIHN0YXRlbWVudCBpcyBqc29uIGZ1bmN0aW9uXG4gICAqIEB0aHJvd3MgIHtFcnJvcn0gICAgICAgICB0aHJvdyBpZiB0aGUgc3RhdGVtZW50IGxvb2tzIGxpa2UganNvbiBmdW5jdGlvbiBidXQgaGFzIGludmFsaWQgdG9rZW5cbiAgICovXG4gIF9jaGVja1ZhbGlkSnNvblN0YXRlbWVudChzdG10KSB7XG4gICAgaWYgKHR5cGVvZiBzdG10ICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vc3FsaXRlLm9yZy9qc29uMS5odG1sXG4gICAgY29uc3QganNvbkZ1bmN0aW9uUmVnZXggPSAvXlxccyooanNvbig/Ol9bYS16XSspezAsMn0pXFwoW14pXSpcXCkvaTtcbiAgICBjb25zdCB0b2tlbkNhcHR1cmVSZWdleCA9IC9eXFxzKigoPzooW2BcIiddKSg/Oig/IVxcMikufFxcMnsyfSkqXFwyKXxbXFx3XFxkXFxzXSt8WygpLiw7Ky1dKS9pO1xuXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG4gICAgbGV0IG9wZW5pbmdCcmFja2V0cyA9IDA7XG4gICAgbGV0IGNsb3NpbmdCcmFja2V0cyA9IDA7XG4gICAgbGV0IGhhc0pzb25GdW5jdGlvbiA9IGZhbHNlO1xuICAgIGxldCBoYXNJbnZhbGlkVG9rZW4gPSBmYWxzZTtcblxuICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBzdG10Lmxlbmd0aCkge1xuICAgICAgY29uc3Qgc3RyaW5nID0gc3RtdC5zdWJzdHIoY3VycmVudEluZGV4KTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTWF0Y2hlcyA9IGpzb25GdW5jdGlvblJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChmdW5jdGlvbk1hdGNoZXMpIHtcbiAgICAgICAgY3VycmVudEluZGV4ICs9IGZ1bmN0aW9uTWF0Y2hlc1swXS5pbmRleE9mKCcoJyk7XG4gICAgICAgIGhhc0pzb25GdW5jdGlvbiA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2tlbk1hdGNoZXMgPSB0b2tlbkNhcHR1cmVSZWdleC5leGVjKHN0cmluZyk7XG4gICAgICBpZiAodG9rZW5NYXRjaGVzKSB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmVkVG9rZW4gPSB0b2tlbk1hdGNoZXNbMV07XG4gICAgICAgIGlmIChjYXB0dXJlZFRva2VuID09PSAnKCcpIHtcbiAgICAgICAgICBvcGVuaW5nQnJhY2tldHMrKztcbiAgICAgICAgfSBlbHNlIGlmIChjYXB0dXJlZFRva2VuID09PSAnKScpIHtcbiAgICAgICAgICBjbG9zaW5nQnJhY2tldHMrKztcbiAgICAgICAgfSBlbHNlIGlmIChjYXB0dXJlZFRva2VuID09PSAnOycpIHtcbiAgICAgICAgICBoYXNJbnZhbGlkVG9rZW4gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRJbmRleCArPSB0b2tlbk1hdGNoZXNbMF0ubGVuZ3RoO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaW52YWxpZCBqc29uIHN0YXRlbWVudFxuICAgIGhhc0ludmFsaWRUb2tlbiB8PSBvcGVuaW5nQnJhY2tldHMgIT09IGNsb3NpbmdCcmFja2V0cztcbiAgICBpZiAoaGFzSnNvbkZ1bmN0aW9uICYmIGhhc0ludmFsaWRUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGpzb24gc3RhdGVtZW50OiAke3N0bXR9YCk7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHRydWUgaWYgdGhlIHN0YXRlbWVudCBoYXMgdmFsaWQganNvbiBmdW5jdGlvblxuICAgIHJldHVybiBoYXNKc29uRnVuY3Rpb247XG4gIH1cblxuICAvL3NxbGl0ZSBjYW4ndCBjYXN0IHRvIGRhdGV0aW1lIHNvIHdlIG5lZWQgdG8gY29udmVydCBkYXRlIHZhbHVlcyB0byB0aGVpciBJU08gc3RyaW5nc1xuICBfdG9KU09OVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlWzBdIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcCh2YWwgPT4gdmFsLnRvSVNPU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuXG4gIGhhbmRsZVNlcXVlbGl6ZU1ldGhvZChzbXRoLCB0YWJsZU5hbWUsIGZhY3RvcnksIG9wdGlvbnMsIHByZXBlbmQpIHtcbiAgICBpZiAoc210aCBpbnN0YW5jZW9mIFV0aWxzLkpzb24pIHtcbiAgICAgIHJldHVybiBzdXBlci5oYW5kbGVTZXF1ZWxpemVNZXRob2Qoc210aCwgdGFibGVOYW1lLCBmYWN0b3J5LCBvcHRpb25zLCBwcmVwZW5kKTtcbiAgICB9XG5cbiAgICBpZiAoc210aCBpbnN0YW5jZW9mIFV0aWxzLkNhc3QpIHtcbiAgICAgIGlmICgvdGltZXN0YW1wL2kudGVzdChzbXRoLnR5cGUpKSB7XG4gICAgICAgIHNtdGgudHlwZSA9ICdkYXRldGltZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFic3RyYWN0UXVlcnlHZW5lcmF0b3IucHJvdG90eXBlLmhhbmRsZVNlcXVlbGl6ZU1ldGhvZC5jYWxsKHRoaXMsIHNtdGgsIHRhYmxlTmFtZSwgZmFjdG9yeSwgb3B0aW9ucywgcHJlcGVuZCk7XG4gIH1cblxuICBhZGRDb2x1bW5RdWVyeSh0YWJsZSwga2V5LCBkYXRhVHlwZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICBhdHRyaWJ1dGVzW2tleV0gPSBkYXRhVHlwZTtcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmF0dHJpYnV0ZXNUb1NRTChhdHRyaWJ1dGVzLCB7IGNvbnRleHQ6ICdhZGRDb2x1bW4nIH0pO1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGtleSl9ICR7ZmllbGRzW2tleV19YDtcblxuICAgIGNvbnN0IHNxbCA9IGBBTFRFUiBUQUJMRSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZSl9IEFERCAke2F0dHJpYnV0ZX07YDtcblxuICAgIHJldHVybiB0aGlzLnJlcGxhY2VCb29sZWFuRGVmYXVsdHMoc3FsKTtcbiAgfVxuXG4gIHNob3dUYWJsZXNRdWVyeSgpIHtcbiAgICByZXR1cm4gJ1NFTEVDVCBuYW1lIEZST00gYHNxbGl0ZV9tYXN0ZXJgIFdIRVJFIHR5cGU9XFwndGFibGVcXCcgYW5kIG5hbWUhPVxcJ3NxbGl0ZV9zZXF1ZW5jZVxcJzsnO1xuICB9XG5cbiAgdXBzZXJ0UXVlcnkodGFibGVOYW1lLCBpbnNlcnRWYWx1ZXMsIHVwZGF0ZVZhbHVlcywgd2hlcmUsIG1vZGVsLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucy5pZ25vcmVEdXBsaWNhdGVzID0gdHJ1ZTtcblxuICAgIGNvbnN0IGJpbmQgPSBbXTtcbiAgICBjb25zdCBiaW5kUGFyYW0gPSB0aGlzLmJpbmRQYXJhbShiaW5kKTtcblxuICAgIGNvbnN0IHVwc2VydE9wdGlvbnMgPSBfLmRlZmF1bHRzKHsgYmluZFBhcmFtIH0sIG9wdGlvbnMpO1xuICAgIGNvbnN0IGluc2VydCA9IHRoaXMuaW5zZXJ0UXVlcnkodGFibGVOYW1lLCBpbnNlcnRWYWx1ZXMsIG1vZGVsLnJhd0F0dHJpYnV0ZXMsIHVwc2VydE9wdGlvbnMpO1xuICAgIGNvbnN0IHVwZGF0ZSA9IHRoaXMudXBkYXRlUXVlcnkodGFibGVOYW1lLCB1cGRhdGVWYWx1ZXMsIHdoZXJlLCB1cHNlcnRPcHRpb25zLCBtb2RlbC5yYXdBdHRyaWJ1dGVzKTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gYCR7aW5zZXJ0LnF1ZXJ5fSAke3VwZGF0ZS5xdWVyeX1gO1xuXG4gICAgcmV0dXJuIHsgcXVlcnksIGJpbmQgfTtcbiAgfVxuXG4gIHVwZGF0ZVF1ZXJ5KHRhYmxlTmFtZSwgYXR0clZhbHVlSGFzaCwgd2hlcmUsIG9wdGlvbnMsIGF0dHJpYnV0ZXMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBfLmRlZmF1bHRzKG9wdGlvbnMsIHRoaXMub3B0aW9ucyk7XG5cbiAgICBhdHRyVmFsdWVIYXNoID0gVXRpbHMucmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoKGF0dHJWYWx1ZUhhc2gsIG9wdGlvbnMub21pdE51bGwsIG9wdGlvbnMpO1xuXG4gICAgY29uc3QgbW9kZWxBdHRyaWJ1dGVNYXAgPSB7fTtcbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICBjb25zdCBiaW5kID0gW107XG4gICAgY29uc3QgYmluZFBhcmFtID0gb3B0aW9ucy5iaW5kUGFyYW0gfHwgdGhpcy5iaW5kUGFyYW0oYmluZCk7XG5cbiAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgXy5lYWNoKGF0dHJpYnV0ZXMsIChhdHRyaWJ1dGUsIGtleSkgPT4ge1xuICAgICAgICBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldID0gYXR0cmlidXRlO1xuICAgICAgICBpZiAoYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgbW9kZWxBdHRyaWJ1dGVNYXBbYXR0cmlidXRlLmZpZWxkXSA9IGF0dHJpYnV0ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0clZhbHVlSGFzaCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBhdHRyVmFsdWVIYXNoW2tleV07XG5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCB8fCBvcHRpb25zLmJpbmRQYXJhbSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdmFsdWVzLnB1c2goYCR7dGhpcy5xdW90ZUlkZW50aWZpZXIoa2V5KX09JHt0aGlzLmVzY2FwZSh2YWx1ZSwgbW9kZWxBdHRyaWJ1dGVNYXAgJiYgbW9kZWxBdHRyaWJ1dGVNYXBba2V5XSB8fCB1bmRlZmluZWQsIHsgY29udGV4dDogJ1VQREFURScgfSl9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXMucHVzaChgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihrZXkpfT0ke3RoaXMuZm9ybWF0KHZhbHVlLCBtb2RlbEF0dHJpYnV0ZU1hcCAmJiBtb2RlbEF0dHJpYnV0ZU1hcFtrZXldIHx8IHVuZGVmaW5lZCwgeyBjb250ZXh0OiAnVVBEQVRFJyB9LCBiaW5kUGFyYW0pfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBxdWVyeTtcbiAgICBjb25zdCB3aGVyZU9wdGlvbnMgPSBfLmRlZmF1bHRzKHsgYmluZFBhcmFtIH0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnMubGltaXQpIHtcbiAgICAgIHF1ZXJ5ID0gYFVQREFURSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfSBTRVQgJHt2YWx1ZXMuam9pbignLCcpfSBXSEVSRSByb3dpZCBJTiAoU0VMRUNUIHJvd2lkIEZST00gJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX0gJHt0aGlzLndoZXJlUXVlcnkod2hlcmUsIHdoZXJlT3B0aW9ucyl9IExJTUlUICR7dGhpcy5lc2NhcGUob3B0aW9ucy5saW1pdCl9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5ID0gYFVQREFURSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfSBTRVQgJHt2YWx1ZXMuam9pbignLCcpfSAke3RoaXMud2hlcmVRdWVyeSh3aGVyZSwgd2hlcmVPcHRpb25zKX1gO1xuICAgIH1cblxuICAgIHJldHVybiB7IHF1ZXJ5LCBiaW5kIH07XG4gIH1cblxuICB0cnVuY2F0ZVRhYmxlUXVlcnkodGFibGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gW1xuICAgICAgYERFTEVURSBGUk9NICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9YCxcbiAgICAgIG9wdGlvbnMucmVzdGFydElkZW50aXR5ID8gYDsgREVMRVRFIEZST00gJHt0aGlzLnF1b3RlVGFibGUoJ3NxbGl0ZV9zZXF1ZW5jZScpfSBXSEVSRSAke3RoaXMucXVvdGVJZGVudGlmaWVyKCduYW1lJyl9ID0gJHtVdGlscy5hZGRUaWNrcyhVdGlscy5yZW1vdmVUaWNrcyh0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKSwgJ2AnKSwgXCInXCIpfTtgIDogJydcbiAgICBdLmpvaW4oJycpO1xuICB9XG5cbiAgZGVsZXRlUXVlcnkodGFibGVOYW1lLCB3aGVyZSwgb3B0aW9ucyA9IHt9LCBtb2RlbCkge1xuICAgIF8uZGVmYXVsdHMob3B0aW9ucywgdGhpcy5vcHRpb25zKTtcblxuICAgIGxldCB3aGVyZUNsYXVzZSA9IHRoaXMuZ2V0V2hlcmVDb25kaXRpb25zKHdoZXJlLCBudWxsLCBtb2RlbCwgb3B0aW9ucyk7XG5cbiAgICBpZiAod2hlcmVDbGF1c2UpIHtcbiAgICAgIHdoZXJlQ2xhdXNlID0gYFdIRVJFICR7d2hlcmVDbGF1c2V9YDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5saW1pdCkge1xuICAgICAgd2hlcmVDbGF1c2UgPSBgV0hFUkUgcm93aWQgSU4gKFNFTEVDVCByb3dpZCBGUk9NICR7dGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9ICR7d2hlcmVDbGF1c2V9IExJTUlUICR7dGhpcy5lc2NhcGUob3B0aW9ucy5saW1pdCl9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBERUxFVEUgRlJPTSAke3RoaXMucXVvdGVUYWJsZSh0YWJsZU5hbWUpfSAke3doZXJlQ2xhdXNlfWA7XG4gIH1cblxuICBhdHRyaWJ1dGVzVG9TUUwoYXR0cmlidXRlcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBuYW1lIGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvbnN0IGRhdGFUeXBlID0gYXR0cmlidXRlc1tuYW1lXTtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGRhdGFUeXBlLmZpZWxkIHx8IG5hbWU7XG5cbiAgICAgIGlmIChfLmlzT2JqZWN0KGRhdGFUeXBlKSkge1xuICAgICAgICBsZXQgc3FsID0gZGF0YVR5cGUudHlwZS50b1N0cmluZygpO1xuXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YVR5cGUsICdhbGxvd051bGwnKSAmJiAhZGF0YVR5cGUuYWxsb3dOdWxsKSB7XG4gICAgICAgICAgc3FsICs9ICcgTk9UIE5VTEwnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFV0aWxzLmRlZmF1bHRWYWx1ZVNjaGVtYWJsZShkYXRhVHlwZS5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgLy8gVE9ETyB0aG9yb3VnaGx5IGNoZWNrIHRoYXQgRGF0YVR5cGVzLk5PVyB3aWxsIHByb3Blcmx5XG4gICAgICAgICAgLy8gZ2V0IHBvcHVsYXRlZCBvbiBhbGwgZGF0YWJhc2VzIGFzIERFRkFVTFQgdmFsdWVcbiAgICAgICAgICAvLyBpLmUuIG15c3FsIHJlcXVpcmVzOiBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QXG4gICAgICAgICAgc3FsICs9IGAgREVGQVVMVCAke3RoaXMuZXNjYXBlKGRhdGFUeXBlLmRlZmF1bHRWYWx1ZSwgZGF0YVR5cGUpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YVR5cGUudW5pcXVlID09PSB0cnVlKSB7XG4gICAgICAgICAgc3FsICs9ICcgVU5JUVVFJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhVHlwZS5wcmltYXJ5S2V5KSB7XG4gICAgICAgICAgc3FsICs9ICcgUFJJTUFSWSBLRVknO1xuXG4gICAgICAgICAgaWYgKGRhdGFUeXBlLmF1dG9JbmNyZW1lbnQpIHtcbiAgICAgICAgICAgIHNxbCArPSAnIEFVVE9JTkNSRU1FTlQnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhVHlwZS5yZWZlcmVuY2VzKSB7XG4gICAgICAgICAgY29uc3QgcmVmZXJlbmNlc1RhYmxlID0gdGhpcy5xdW90ZVRhYmxlKGRhdGFUeXBlLnJlZmVyZW5jZXMubW9kZWwpO1xuXG4gICAgICAgICAgbGV0IHJlZmVyZW5jZXNLZXk7XG4gICAgICAgICAgaWYgKGRhdGFUeXBlLnJlZmVyZW5jZXMua2V5KSB7XG4gICAgICAgICAgICByZWZlcmVuY2VzS2V5ID0gdGhpcy5xdW90ZUlkZW50aWZpZXIoZGF0YVR5cGUucmVmZXJlbmNlcy5rZXkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWZlcmVuY2VzS2V5ID0gdGhpcy5xdW90ZUlkZW50aWZpZXIoJ2lkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3FsICs9IGAgUkVGRVJFTkNFUyAke3JlZmVyZW5jZXNUYWJsZX0gKCR7cmVmZXJlbmNlc0tleX0pYDtcblxuICAgICAgICAgIGlmIChkYXRhVHlwZS5vbkRlbGV0ZSkge1xuICAgICAgICAgICAgc3FsICs9IGAgT04gREVMRVRFICR7ZGF0YVR5cGUub25EZWxldGUudG9VcHBlckNhc2UoKX1gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkYXRhVHlwZS5vblVwZGF0ZSkge1xuICAgICAgICAgICAgc3FsICs9IGAgT04gVVBEQVRFICR7ZGF0YVR5cGUub25VcGRhdGUudG9VcHBlckNhc2UoKX1gO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W2ZpZWxkTmFtZV0gPSBzcWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbZmllbGROYW1lXSA9IGRhdGFUeXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzaG93SW5kZXhlc1F1ZXJ5KHRhYmxlTmFtZSkge1xuICAgIHJldHVybiBgUFJBR01BIElOREVYX0xJU1QoJHt0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKX0pYDtcbiAgfVxuXG4gIHNob3dDb25zdHJhaW50c1F1ZXJ5KHRhYmxlTmFtZSwgY29uc3RyYWludE5hbWUpIHtcbiAgICBsZXQgc3FsID0gYFNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPScke3RhYmxlTmFtZX0nYDtcblxuICAgIGlmIChjb25zdHJhaW50TmFtZSkge1xuICAgICAgc3FsICs9IGAgQU5EIHNxbCBMSUtFICclJHtjb25zdHJhaW50TmFtZX0lJ2A7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke3NxbH07YDtcbiAgfVxuXG4gIHJlbW92ZUluZGV4UXVlcnkodGFibGVOYW1lLCBpbmRleE5hbWVPckF0dHJpYnV0ZXMpIHtcbiAgICBsZXQgaW5kZXhOYW1lID0gaW5kZXhOYW1lT3JBdHRyaWJ1dGVzO1xuXG4gICAgaWYgKHR5cGVvZiBpbmRleE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBpbmRleE5hbWUgPSBVdGlscy51bmRlcnNjb3JlKGAke3RhYmxlTmFtZX1fJHtpbmRleE5hbWVPckF0dHJpYnV0ZXMuam9pbignXycpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBgRFJPUCBJTkRFWCBJRiBFWElTVFMgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihpbmRleE5hbWUpfWA7XG4gIH1cblxuICBkZXNjcmliZVRhYmxlUXVlcnkodGFibGVOYW1lLCBzY2hlbWEsIHNjaGVtYURlbGltaXRlcikge1xuICAgIGNvbnN0IHRhYmxlID0ge1xuICAgICAgX3NjaGVtYTogc2NoZW1hLFxuICAgICAgX3NjaGVtYURlbGltaXRlcjogc2NoZW1hRGVsaW1pdGVyLFxuICAgICAgdGFibGVOYW1lXG4gICAgfTtcbiAgICByZXR1cm4gYFBSQUdNQSBUQUJMRV9JTkZPKCR7dGhpcy5xdW90ZVRhYmxlKHRoaXMuYWRkU2NoZW1hKHRhYmxlKSl9KTtgO1xuICB9XG5cbiAgZGVzY3JpYmVDcmVhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSkge1xuICAgIHJldHVybiBgU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyR7dGFibGVOYW1lfSc7YDtcbiAgfVxuXG4gIHJlbW92ZUNvbHVtblF1ZXJ5KHRhYmxlTmFtZSwgYXR0cmlidXRlcykge1xuXG4gICAgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlc1RvU1FMKGF0dHJpYnV0ZXMpO1xuXG4gICAgbGV0IGJhY2t1cFRhYmxlTmFtZTtcbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGJhY2t1cFRhYmxlTmFtZSA9IHtcbiAgICAgICAgdGFibGVOYW1lOiBgJHt0YWJsZU5hbWUudGFibGVOYW1lfV9iYWNrdXBgLFxuICAgICAgICBzY2hlbWE6IHRhYmxlTmFtZS5zY2hlbWFcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhY2t1cFRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fYmFja3VwYDtcbiAgICB9XG5cbiAgICBjb25zdCBxdW90ZWRUYWJsZU5hbWUgPSB0aGlzLnF1b3RlVGFibGUodGFibGVOYW1lKTtcbiAgICBjb25zdCBxdW90ZWRCYWNrdXBUYWJsZU5hbWUgPSB0aGlzLnF1b3RlVGFibGUoYmFja3VwVGFibGVOYW1lKTtcbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLm1hcChhdHRyID0+IHRoaXMucXVvdGVJZGVudGlmaWVyKGF0dHIpKS5qb2luKCcsICcpO1xuXG4gICAgLy8gVGVtcG9yYXJ5IHRhYmxlIGNhbm5vdCB3b3JrIGZvciBmb3JlaWduIGtleXMuXG4gICAgcmV0dXJuIGAke3RoaXMuY3JlYXRlVGFibGVRdWVyeShiYWNrdXBUYWJsZU5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgfUlOU0VSVCBJTlRPICR7cXVvdGVkQmFja3VwVGFibGVOYW1lfSBTRUxFQ1QgJHthdHRyaWJ1dGVOYW1lc30gRlJPTSAke3F1b3RlZFRhYmxlTmFtZX07YFxuICAgICAgKyBgRFJPUCBUQUJMRSAke3F1b3RlZFRhYmxlTmFtZX07JHtcbiAgICAgICAgdGhpcy5jcmVhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSwgYXR0cmlidXRlcylcbiAgICAgIH1JTlNFUlQgSU5UTyAke3F1b3RlZFRhYmxlTmFtZX0gU0VMRUNUICR7YXR0cmlidXRlTmFtZXN9IEZST00gJHtxdW90ZWRCYWNrdXBUYWJsZU5hbWV9O2BcbiAgICAgICsgYERST1AgVEFCTEUgJHtxdW90ZWRCYWNrdXBUYWJsZU5hbWV9O2A7XG4gIH1cblxuICBfYWx0ZXJDb25zdHJhaW50UXVlcnkodGFibGVOYW1lLCBhdHRyaWJ1dGVzLCBjcmVhdGVUYWJsZVNxbCkge1xuICAgIGxldCBiYWNrdXBUYWJsZU5hbWU7XG5cbiAgICBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzVG9TUUwoYXR0cmlidXRlcyk7XG5cbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGJhY2t1cFRhYmxlTmFtZSA9IHtcbiAgICAgICAgdGFibGVOYW1lOiBgJHt0YWJsZU5hbWUudGFibGVOYW1lfV9iYWNrdXBgLFxuICAgICAgICBzY2hlbWE6IHRhYmxlTmFtZS5zY2hlbWFcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhY2t1cFRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fYmFja3VwYDtcbiAgICB9XG4gICAgY29uc3QgcXVvdGVkVGFibGVOYW1lID0gdGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSk7XG4gICAgY29uc3QgcXVvdGVkQmFja3VwVGFibGVOYW1lID0gdGhpcy5xdW90ZVRhYmxlKGJhY2t1cFRhYmxlTmFtZSk7XG4gICAgY29uc3QgYXR0cmlidXRlTmFtZXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5tYXAoYXR0ciA9PiB0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKSkuam9pbignLCAnKTtcblxuICAgIHJldHVybiBgJHtjcmVhdGVUYWJsZVNxbFxuICAgICAgLnJlcGxhY2UoYENSRUFURSBUQUJMRSAke3F1b3RlZFRhYmxlTmFtZX1gLCBgQ1JFQVRFIFRBQkxFICR7cXVvdGVkQmFja3VwVGFibGVOYW1lfWApXG4gICAgICAucmVwbGFjZShgQ1JFQVRFIFRBQkxFICR7cXVvdGVkVGFibGVOYW1lLnJlcGxhY2UoL2AvZywgJ1wiJyl9YCwgYENSRUFURSBUQUJMRSAke3F1b3RlZEJhY2t1cFRhYmxlTmFtZX1gKVxuICAgIH1JTlNFUlQgSU5UTyAke3F1b3RlZEJhY2t1cFRhYmxlTmFtZX0gU0VMRUNUICR7YXR0cmlidXRlTmFtZXN9IEZST00gJHtxdW90ZWRUYWJsZU5hbWV9O2BcbiAgICAgICsgYERST1AgVEFCTEUgJHtxdW90ZWRUYWJsZU5hbWV9O2BcbiAgICAgICsgYEFMVEVSIFRBQkxFICR7cXVvdGVkQmFja3VwVGFibGVOYW1lfSBSRU5BTUUgVE8gJHtxdW90ZWRUYWJsZU5hbWV9O2A7XG4gIH1cblxuICByZW5hbWVDb2x1bW5RdWVyeSh0YWJsZU5hbWUsIGF0dHJOYW1lQmVmb3JlLCBhdHRyTmFtZUFmdGVyLCBhdHRyaWJ1dGVzKSB7XG5cbiAgICBsZXQgYmFja3VwVGFibGVOYW1lO1xuXG4gICAgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlc1RvU1FMKGF0dHJpYnV0ZXMpO1xuXG4gICAgaWYgKHR5cGVvZiB0YWJsZU5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBiYWNrdXBUYWJsZU5hbWUgPSB7XG4gICAgICAgIHRhYmxlTmFtZTogYCR7dGFibGVOYW1lLnRhYmxlTmFtZX1fYmFja3VwYCxcbiAgICAgICAgc2NoZW1hOiB0YWJsZU5hbWUuc2NoZW1hXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBiYWNrdXBUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2JhY2t1cGA7XG4gICAgfVxuXG4gICAgY29uc3QgcXVvdGVkVGFibGVOYW1lID0gdGhpcy5xdW90ZVRhYmxlKHRhYmxlTmFtZSk7XG4gICAgY29uc3QgcXVvdGVkQmFja3VwVGFibGVOYW1lID0gdGhpcy5xdW90ZVRhYmxlKGJhY2t1cFRhYmxlTmFtZSk7XG4gICAgY29uc3QgYXR0cmlidXRlTmFtZXNJbXBvcnQgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5tYXAoYXR0ciA9PlxuICAgICAgYXR0ck5hbWVBZnRlciA9PT0gYXR0ciA/IGAke3RoaXMucXVvdGVJZGVudGlmaWVyKGF0dHJOYW1lQmVmb3JlKX0gQVMgJHt0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKX1gIDogdGhpcy5xdW90ZUlkZW50aWZpZXIoYXR0cilcbiAgICApLmpvaW4oJywgJyk7XG4gICAgY29uc3QgYXR0cmlidXRlTmFtZXNFeHBvcnQgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5tYXAoYXR0ciA9PiB0aGlzLnF1b3RlSWRlbnRpZmllcihhdHRyKSkuam9pbignLCAnKTtcblxuICAgIHJldHVybiBgJHt0aGlzLmNyZWF0ZVRhYmxlUXVlcnkoYmFja3VwVGFibGVOYW1lLCBhdHRyaWJ1dGVzKS5yZXBsYWNlKCdDUkVBVEUgVEFCTEUnLCAnQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRScpXG4gICAgfUlOU0VSVCBJTlRPICR7cXVvdGVkQmFja3VwVGFibGVOYW1lfSBTRUxFQ1QgJHthdHRyaWJ1dGVOYW1lc0ltcG9ydH0gRlJPTSAke3F1b3RlZFRhYmxlTmFtZX07YFxuICAgICAgKyBgRFJPUCBUQUJMRSAke3F1b3RlZFRhYmxlTmFtZX07JHtcbiAgICAgICAgdGhpcy5jcmVhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSwgYXR0cmlidXRlcylcbiAgICAgIH1JTlNFUlQgSU5UTyAke3F1b3RlZFRhYmxlTmFtZX0gU0VMRUNUICR7YXR0cmlidXRlTmFtZXNFeHBvcnR9IEZST00gJHtxdW90ZWRCYWNrdXBUYWJsZU5hbWV9O2BcbiAgICAgICsgYERST1AgVEFCTEUgJHtxdW90ZWRCYWNrdXBUYWJsZU5hbWV9O2A7XG4gIH1cblxuICBzdGFydFRyYW5zYWN0aW9uUXVlcnkodHJhbnNhY3Rpb24pIHtcbiAgICBpZiAodHJhbnNhY3Rpb24ucGFyZW50KSB7XG4gICAgICByZXR1cm4gYFNBVkVQT0lOVCAke3RoaXMucXVvdGVJZGVudGlmaWVyKHRyYW5zYWN0aW9uLm5hbWUpfTtgO1xuICAgIH1cblxuICAgIHJldHVybiBgQkVHSU4gJHt0cmFuc2FjdGlvbi5vcHRpb25zLnR5cGV9IFRSQU5TQUNUSU9OO2A7XG4gIH1cblxuICBzZXRJc29sYXRpb25MZXZlbFF1ZXJ5KHZhbHVlKSB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvbi5JU09MQVRJT05fTEVWRUxTLlJFUEVBVEFCTEVfUkVBRDpcbiAgICAgICAgcmV0dXJuICctLSBTUUxpdGUgaXMgbm90IGFibGUgdG8gY2hvb3NlIHRoZSBpc29sYXRpb24gbGV2ZWwgUkVQRUFUQUJMRSBSRUFELic7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uLklTT0xBVElPTl9MRVZFTFMuUkVBRF9VTkNPTU1JVFRFRDpcbiAgICAgICAgcmV0dXJuICdQUkFHTUEgcmVhZF91bmNvbW1pdHRlZCA9IE9OOyc7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uLklTT0xBVElPTl9MRVZFTFMuUkVBRF9DT01NSVRURUQ6XG4gICAgICAgIHJldHVybiAnUFJBR01BIHJlYWRfdW5jb21taXR0ZWQgPSBPRkY7JztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb24uSVNPTEFUSU9OX0xFVkVMUy5TRVJJQUxJWkFCTEU6XG4gICAgICAgIHJldHVybiAnLS0gU1FMaXRlXFwncyBkZWZhdWx0IGlzb2xhdGlvbiBsZXZlbCBpcyBTRVJJQUxJWkFCTEUuIE5vdGhpbmcgdG8gZG8uJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBpc29sYXRpb24gbGV2ZWw6ICR7dmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVwbGFjZUJvb2xlYW5EZWZhdWx0cyhzcWwpIHtcbiAgICByZXR1cm4gc3FsLnJlcGxhY2UoL0RFRkFVTFQgJz9mYWxzZSc/L2csICdERUZBVUxUIDAnKS5yZXBsYWNlKC9ERUZBVUxUICc/dHJ1ZSc/L2csICdERUZBVUxUIDEnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gU1FMIHF1ZXJ5IHRoYXQgcmV0dXJucyBhbGwgZm9yZWlnbiBrZXlzIG9mIGEgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gdGFibGVOYW1lICBUaGUgbmFtZSBvZiB0aGUgdGFibGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICAgICAgICAgVGhlIGdlbmVyYXRlZCBzcWwgcXVlcnkuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRGb3JlaWduS2V5c1F1ZXJ5KHRhYmxlTmFtZSkge1xuICAgIHJldHVybiBgUFJBR01BIGZvcmVpZ25fa2V5X2xpc3QoJHt0YWJsZU5hbWV9KWA7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTUUxpdGVRdWVyeUdlbmVyYXRvcjtcbiJdfQ== \ No newline at end of file diff --git a/dist/dialects/sqlite/query-interface.js b/dist/dialects/sqlite/query-interface.js index 7e42cfd..9d09032 100644 --- a/dist/dialects/sqlite/query-interface.js +++ b/dist/dialects/sqlite/query-interface.js @@ -211,4 +211,4 @@ function getForeignKeyReferencesForTable(qi, tableName, options) { } exports.getForeignKeyReferencesForTable = getForeignKeyReferencesForTable; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnktaW50ZXJmYWNlLmpzIl0sIm5hbWVzIjpbIl8iLCJyZXF1aXJlIiwiUHJvbWlzZSIsInNlcXVlbGl6ZUVycm9ycyIsIlF1ZXJ5VHlwZXMiLCJyZW1vdmVDb2x1bW4iLCJxaSIsInRhYmxlTmFtZSIsImF0dHJpYnV0ZU5hbWUiLCJvcHRpb25zIiwiZGVzY3JpYmVUYWJsZSIsInRoZW4iLCJmaWVsZHMiLCJzcWwiLCJRdWVyeUdlbmVyYXRvciIsInJlbW92ZUNvbHVtblF1ZXJ5Iiwic3ViUXVlcmllcyIsInNwbGl0IiwiZmlsdGVyIiwicSIsImVhY2giLCJzdWJRdWVyeSIsInNlcXVlbGl6ZSIsInF1ZXJ5IiwiT2JqZWN0IiwiYXNzaWduIiwicmF3IiwiZXhwb3J0cyIsImNoYW5nZUNvbHVtbiIsImF0dHJpYnV0ZXMiLCJrZXlzIiwicmVuYW1lQ29sdW1uIiwiYXR0ck5hbWVCZWZvcmUiLCJhdHRyTmFtZUFmdGVyIiwiY2xvbmUiLCJyZW5hbWVDb2x1bW5RdWVyeSIsInJlbW92ZUNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNyZWF0ZVRhYmxlU3FsIiwic2hvd0NvbnN0cmFpbnQiLCJjb25zdHJhaW50cyIsImNvbnN0cmFpbnQiLCJmaW5kIiwiY29uc3RhaW50IiwicXVvdGVJZGVudGlmaWVyIiwiY29uc3RyYWludFNuaXBwZXQiLCJjb25zdHJhaW50VHlwZSIsImNvbnN0cmFpbnRDb25kaXRpb24iLCJyZWZlcmVuY2VUYWJsZU5hbWUiLCJxdW90ZVRhYmxlIiwicmVmZXJlbmNlVGFibGVLZXlzIiwibWFwIiwiY29sdW1uTmFtZSIsImpvaW4iLCJ1cGRhdGVBY3Rpb24iLCJkZWxldGVBY3Rpb24iLCJyZXBsYWNlIiwiVW5rbm93bkNvbnN0cmFpbnRFcnJvciIsIm1lc3NhZ2UiLCJ0YWJsZSIsIl9hbHRlckNvbnN0cmFpbnRRdWVyeSIsImFkZENvbnN0cmFpbnQiLCJnZXRDb25zdHJhaW50U25pcHBldCIsImRlc2NyaWJlQ3JlYXRlVGFibGVTcWwiLCJkZXNjcmliZUNyZWF0ZVRhYmxlUXVlcnkiLCJ0eXBlIiwiU0VMRUNUIiwiaW5kZXgiLCJsZW5ndGgiLCJzdWJzdHIiLCJnZXRGb3JlaWduS2V5UmVmZXJlbmNlc0ZvclRhYmxlIiwiZGF0YWJhc2UiLCJjb25maWciLCJnZXRGb3JlaWduS2V5c1F1ZXJ5IiwicmVzdWx0Iiwicm93IiwiZnJvbSIsInJlZmVyZW5jZWRUYWJsZU5hbWUiLCJyZWZlcmVuY2VkQ29sdW1uTmFtZSIsInRvIiwidGFibGVDYXRhbG9nIiwicmVmZXJlbmNlZFRhYmxlQ2F0YWxvZyJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsQ0FBQyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNQyxPQUFPLEdBQUdELE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1FLGVBQWUsR0FBR0YsT0FBTyxDQUFDLGNBQUQsQ0FBL0I7O0FBQ0EsTUFBTUcsVUFBVSxHQUFHSCxPQUFPLENBQUMsbUJBQUQsQ0FBMUI7QUFFQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVNJLFlBQVQsQ0FBc0JDLEVBQXRCLEVBQTBCQyxTQUExQixFQUFxQ0MsYUFBckMsRUFBb0RDLE9BQXBELEVBQTZEO0FBQzNEQSxFQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxFQUFyQjtBQUVBLFNBQU9ILEVBQUUsQ0FBQ0ksYUFBSCxDQUFpQkgsU0FBakIsRUFBNEJFLE9BQTVCLEVBQXFDRSxJQUFyQyxDQUEwQ0MsTUFBTSxJQUFJO0FBQ3pELFdBQU9BLE1BQU0sQ0FBQ0osYUFBRCxDQUFiO0FBRUEsVUFBTUssR0FBRyxHQUFHUCxFQUFFLENBQUNRLGNBQUgsQ0FBa0JDLGlCQUFsQixDQUFvQ1IsU0FBcEMsRUFBK0NLLE1BQS9DLENBQVo7QUFDQSxVQUFNSSxVQUFVLEdBQUdILEdBQUcsQ0FBQ0ksS0FBSixDQUFVLEdBQVYsRUFBZUMsTUFBZixDQUFzQkMsQ0FB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S0FBbkIsRUFBMEJkLE9BQTFCLEVBQ0pFLElBREksQ0FDQytELE1BQU0sSUFBSTtBQUNkLFdBQU9BLE1BQU0sQ0FBQ3ZCLEdBQVAsQ0FBV3dCLEdBQUcsS0FBSztBQUN4QnBFLE1BQUFBLFNBRHdCO0FBRXhCNkMsTUFBQUEsVUFBVSxFQUFFdUIsR0FBRyxDQUFDQyxJQUZRO0FBR3hCQyxNQUFBQSxtQkFBbUIsRUFBRUYsR0FBRyxDQUFDaEIsS0FIRDtBQUl4Qm1CLE1BQUFBLG9CQUFvQixFQUFFSCxHQUFHLENBQUNJLEVBSkY7QUFLeEJDLE1BQUFBLFlBQVksRUFBRVQsUUFMVTtBQU14QlUsTUFBQUEsc0JBQXNCLEVBQUVWO0FBTkEsS0FBTCxDQUFkLENBQVA7QUFRRCxHQVZJLENBQVA7QUFXRDs7QUFFRDVDLE9BQU8sQ0FBQzJDLCtCQUFSLEdBQTBDQSwrQkFBMUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCcuLi8uLi9wcm9taXNlJyk7XHJcbmNvbnN0IHNlcXVlbGl6ZUVycm9ycyA9IHJlcXVpcmUoJy4uLy4uL2Vycm9ycycpO1xyXG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZSgnLi4vLi4vcXVlcnktdHlwZXMnKTtcclxuXHJcbi8qKlxyXG4gUmV0dXJucyBhbiBvYmplY3QgdGhhdCB0cmVhdHMgU1FMaXRlJ3MgaW5hYmlsaXRpZXMgdG8gZG8gY2VydGFpbiBxdWVyaWVzLlxyXG5cclxuIEBjbGFzcyBRdWVyeUludGVyZmFjZVxyXG4gQHN0YXRpY1xyXG4gQHByaXZhdGVcclxuICovXHJcblxyXG4vKipcclxuICBBIHdyYXBwZXIgdGhhdCBmaXhlcyBTUUxpdGUncyBpbmFiaWxpdHkgdG8gcmVtb3ZlIGNvbHVtbnMgZnJvbSBleGlzdGluZyB0YWJsZXMuXHJcbiAgSXQgd2lsbCBjcmVhdGUgYSBiYWNrdXAgb2YgdGhlIHRhYmxlLCBkcm9wIHRoZSB0YWJsZSBhZnRlcndhcmRzIGFuZCBjcmVhdGUgYVxyXG4gIG5ldyB0YWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IHdpdGhvdXQgdGhlIG9ic29sZXRlIGNvbHVtbi5cclxuXHJcbiAgQHBhcmFtICB7UXVlcnlJbnRlcmZhY2V9IHFpXHJcbiAgQHBhcmFtICB7c3RyaW5nfSB0YWJsZU5hbWUgICAgIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS5cclxuICBAcGFyYW0gIHtzdHJpbmd9IGF0dHJpYnV0ZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0aGF0IHdlIHdhbnQgdG8gcmVtb3ZlLlxyXG4gIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xyXG4gIEBwYXJhbSAge2Jvb2xlYW58RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmddIEEgZnVuY3Rpb24gdGhhdCBsb2dzIHRoZSBzcWwgcXVlcmllcywgb3IgZmFsc2UgZm9yIGV4cGxpY2l0bHkgbm90IGxvZ2dpbmcgdGhlc2UgcXVlcmllc1xyXG5cclxuICBAc2luY2UgMS42LjBcclxuICBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ29sdW1uKHFpLCB0YWJsZU5hbWUsIGF0dHJpYnV0ZU5hbWUsIG9wdGlvbnMpIHtcclxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgcmV0dXJuIHFpLmRlc2NyaWJlVGFibGUodGFibGVOYW1lLCBvcHRpb25zKS50aGVuKGZpZWxkcyA9PiB7XHJcbiAgICBkZWxldGUgZmllbGRzW2F0dHJpYnV0ZU5hbWVdO1xyXG5cclxuICAgIGNvbnN0IHNxbCA9IHFpLlF1ZXJ5R2VuZXJhdG9yLnJlbW92ZUNvbHVtblF1ZXJ5KHRhYmxlTmFtZSwgZmllbGRzKTtcclxuICAgIGNvbnN0IHN1YlF1ZXJpZXMgPSBzcWwuc3BsaXQoJzsnKS5maWx0ZXIocSA9PiBxICE9PSAnJyk7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UuZWFjaChzdWJRdWVyaWVzLCBzdWJRdWVyeSA9PiBxaS5zZXF1ZWxpemUucXVlcnkoYCR7c3ViUXVlcnl9O2AsIE9iamVjdC5hc3NpZ24oeyByYXc6IHRydWUgfSwgb3B0aW9ucykpKTtcclxuICB9KTtcclxufVxyXG5leHBvcnRzLnJlbW92ZUNvbHVtbiA9IHJlbW92ZUNvbHVtbjtcclxuXHJcbi8qKlxyXG4gIEEgd3JhcHBlciB0aGF0IGZpeGVzIFNRTGl0ZSdzIGluYWJpbGl0eSB0byBjaGFuZ2UgY29sdW1ucyBmcm9tIGV4aXN0aW5nIHRhYmxlcy5cclxuICBJdCB3aWxsIGNyZWF0ZSBhIGJhY2t1cCBvZiB0aGUgdGFibGUsIGRyb3AgdGhlIHRhYmxlIGFmdGVyd2FyZHMgYW5kIGNyZWF0ZSBhXHJcbiAgbmV3IHRhYmxlIHdpdGggdGhlIHNhbWUgbmFtZSBidXQgd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIHJlc3BlY3RpdmUgY29sdW1uLlxyXG5cclxuICBAcGFyYW0gIHtRdWVyeUludGVyZmFjZX0gcWlcclxuICBAcGFyYW0gIHtzdHJpbmd9IHRhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFibGUuXHJcbiAgQHBhcmFtICB7T2JqZWN0fSBhdHRyaWJ1dGVzIEFuIG9iamVjdCB3aXRoIHRoZSBhdHRyaWJ1dGUncyBuYW1lIGFzIGtleSBhbmQgaXRzIG9wdGlvbnMgYXMgdmFsdWUgb2JqZWN0LlxyXG4gIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xyXG4gIEBwYXJhbSAge2Jvb2xlYW58RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmddIEEgZnVuY3Rpb24gdGhhdCBsb2dzIHRoZSBzcWwgcXVlcmllcywgb3IgZmFsc2UgZm9yIGV4cGxpY2l0bHkgbm90IGxvZ2dpbmcgdGhlc2UgcXVlcmllc1xyXG5cclxuICBAc2luY2UgMS42LjBcclxuICBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uKHFpLCB0YWJsZU5hbWUsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpIHtcclxuICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gT2JqZWN0LmtleXMoYXR0cmlidXRlcylbMF07XHJcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIHJldHVybiBxaS5kZXNjcmliZVRhYmxlKHRhYmxlTmFtZSwgb3B0aW9ucykudGhlbihmaWVsZHMgPT4ge1xyXG4gICAgZmllbGRzW2F0dHJpYnV0ZU5hbWVdID0gYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXTtcclxuXHJcbiAgICBjb25zdCBzcWwgPSBxaS5RdWVyeUdlbmVyYXRvci5yZW1vdmVDb2x1bW5RdWVyeSh0YWJsZU5hbWUsIGZpZWxkcyk7XHJcbiAgICBjb25zdCBzdWJRdWVyaWVzID0gc3FsLnNwbGl0KCc7JykuZmlsdGVyKHEgPT4gcSAhPT0gJycpO1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLmVhY2goc3ViUXVlcmllcywgc3ViUXVlcnkgPT4gcWkuc2VxdWVsaXplLnF1ZXJ5KGAke3N1YlF1ZXJ5fTtgLCBPYmplY3QuYXNzaWduKHsgcmF3OiB0cnVlIH0sIG9wdGlvbnMpKSk7XHJcbiAgfSk7XHJcbn1cclxuZXhwb3J0cy5jaGFuZ2VDb2x1bW4gPSBjaGFuZ2VDb2x1bW47XHJcblxyXG4vKipcclxuICBBIHdyYXBwZXIgdGhhdCBmaXhlcyBTUUxpdGUncyBpbmFiaWxpdHkgdG8gcmVuYW1lIGNvbHVtbnMgZnJvbSBleGlzdGluZyB0YWJsZXMuXHJcbiAgSXQgd2lsbCBjcmVhdGUgYSBiYWNrdXAgb2YgdGhlIHRhYmxlLCBkcm9wIHRoZSB0YWJsZSBhZnRlcndhcmRzIGFuZCBjcmVhdGUgYVxyXG4gIG5ldyB0YWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IHdpdGggYSByZW5hbWVkIHZlcnNpb24gb2YgdGhlIHJlc3BlY3RpdmUgY29sdW1uLlxyXG5cclxuICBAcGFyYW0gIHtRdWVyeUludGVyZmFjZX0gcWlcclxuICBAcGFyYW0gIHtzdHJpbmd9IHRhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFibGUuXHJcbiAgQHBhcmFtICB7c3RyaW5nfSBhdHRyTmFtZUJlZm9yZSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIGJlZm9yZSBpdCB3YXMgcmVuYW1lZC5cclxuICBAcGFyYW0gIHtzdHJpbmd9IGF0dHJOYW1lQWZ0ZXIgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBhZnRlciBpdCB3YXMgcmVuYW1lZC5cclxuICBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcclxuICBAcGFyYW0gIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nXSBBIGZ1bmN0aW9uIHRoYXQgbG9ncyB0aGUgc3FsIHF1ZXJpZXMsIG9yIGZhbHNlIGZvciBleHBsaWNpdGx5IG5vdCBsb2dnaW5nIHRoZXNlIHF1ZXJpZXNcclxuXHJcbiAgQHNpbmNlIDEuNi4wXHJcbiAgQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIHJlbmFtZUNvbHVtbihxaSwgdGFibGVOYW1lLCBhdHRyTmFtZUJlZm9yZSwgYXR0ck5hbWVBZnRlciwgb3B0aW9ucykge1xyXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICByZXR1cm4gcWkuZGVzY3JpYmVUYWJsZSh0YWJsZU5hbWUsIG9wdGlvbnMpLnRoZW4oZmllbGRzID0+IHtcclxuICAgIGZpZWxkc1thdHRyTmFtZUFmdGVyXSA9IF8uY2xvbmUoZmllbGRzW2F0dHJOYW1lQmVmb3JlXSk7XHJcbiAgICBkZWxldGUgZmllbGRzW2F0dHJOYW1lQmVmb3JlXTtcclxuXHJcbiAgICBjb25zdCBzcWwgPSBxaS5RdWVyeUdlbmVyYXRvci5yZW5hbWVDb2x1bW5RdWVyeSh0YWJsZU5hbWUsIGF0dHJOYW1lQmVmb3JlLCBhdHRyTmFtZUFmdGVyLCBmaWVsZHMpO1xyXG4gICAgY29uc3Qgc3ViUXVlcmllcyA9IHNxbC5zcGxpdCgnOycpLmZpbHRlcihxID0+IHEgIT09ICcnKTtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5lYWNoKHN1YlF1ZXJpZXMsIHN1YlF1ZXJ5ID0+IHFpLnNlcXVlbGl6ZS5xdWVyeShgJHtzdWJRdWVyeX07YCwgT2JqZWN0LmFzc2lnbih7IHJhdzogdHJ1ZSB9LCBvcHRpb25zKSkpO1xyXG4gIH0pO1xyXG59XHJcbmV4cG9ydHMucmVuYW1lQ29sdW1uID0gcmVuYW1lQ29sdW1uO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7UXVlcnlJbnRlcmZhY2V9IHFpXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWVcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnN0cmFpbnROYW1lXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXHJcbiAqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiByZW1vdmVDb25zdHJhaW50KHFpLCB0YWJsZU5hbWUsIGNvbnN0cmFpbnROYW1lLCBvcHRpb25zKSB7XHJcbiAgbGV0IGNyZWF0ZVRhYmxlU3FsO1xyXG5cclxuICByZXR1cm4gcWkuc2hvd0NvbnN0cmFpbnQodGFibGVOYW1lLCBjb25zdHJhaW50TmFtZSlcclxuICAgIC50aGVuKGNvbnN0cmFpbnRzID0+IHtcclxuICAgICAgLy8gc3FsaXRlIGNhbid0IHNob3cgb25seSBvbmUgY29uc3RyYWludCwgc28gd2UgZmluZCBoZXJlIHRoZSBvbmUgdG8gcmVtb3ZlXHJcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBjb25zdHJhaW50cy5maW5kKGNvbnN0YWludCA9PiBjb25zdGFpbnQuY29uc3RyYWludE5hbWUgPT09IGNvbnN0cmFpbnROYW1lKTtcclxuXHJcbiAgICAgIGlmIChjb25zdHJhaW50KSB7XHJcbiAgICAgICAgY3JlYXRlVGFibGVTcWwgPSBjb25zdHJhaW50LnNxbDtcclxuICAgICAgICBjb25zdHJhaW50LmNvbnN0cmFpbnROYW1lID0gcWkuUXVlcnlHZW5lcmF0b3IucXVvdGVJZGVudGlmaWVyKGNvbnN0cmFpbnQuY29uc3RyYWludE5hbWUpO1xyXG4gICAgICAgIGxldCBjb25zdHJhaW50U25pcHBldCA9IGAsIENPTlNUUkFJTlQgJHtjb25zdHJhaW50LmNvbnN0cmFpbnROYW1lfSAke2NvbnN0cmFpbnQuY29uc3RyYWludFR5cGV9ICR7Y29uc3RyYWludC5jb25zdHJhaW50Q29uZGl0aW9ufWA7XHJcblxyXG4gICAgICAgIGlmIChjb25zdHJhaW50LmNvbnN0cmFpbnRUeXBlID09PSAnRk9SRUlHTiBLRVknKSB7XHJcbiAgICAgICAgICBjb25zdCByZWZlcmVuY2VUYWJsZU5hbWUgPSBxaS5RdWVyeUdlbmVyYXRvci5xdW90ZVRhYmxlKGNvbnN0cmFpbnQucmVmZXJlbmNlVGFibGVOYW1lKTtcclxuICAgICAgICAgIGNvbnN0cmFpbnQucmVmZXJlbmNlVGFibGVLZXlzID0gY29uc3RyYWludC5yZWZlcmVuY2VUYWJsZUtleXMubWFwKGNvbHVtbk5hbWUgPT4gcWkuUXVlcnlHZW5lcmF0b3IucXVvdGVJZGVudGlmaWVyKGNvbHVtbk5hbWUpKTtcclxuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZVRhYmxlS2V5cyA9IGNvbnN0cmFpbnQucmVmZXJlbmNlVGFibGVLZXlzLmpvaW4oJywgJyk7XHJcbiAgICAgICAgICBjb25zdHJhaW50U25pcHBldCArPSBgIFJFRkVSRU5DRVMgJHtyZWZlcmVuY2VUYWJsZU5hbWV9ICgke3JlZmVyZW5jZVRhYmxlS2V5c30pYDtcclxuICAgICAgICAgIGNvbnN0cmFpbnRTbmlwcGV0ICs9IGAgT04gVVBEQVRFICR7Y29uc3RyYWludC51cGRhdGVBY3Rpb259YDtcclxuICAgICAgICAgIGNvbnN0cmFpbnRTbmlwcGV0ICs9IGAgT04gREVMRVRFICR7Y29uc3RyYWludC5kZWxldGVBY3Rpb259YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNyZWF0ZVRhYmxlU3FsID0gY3JlYXRlVGFibGVTcWwucmVwbGFjZShjb25zdHJhaW50U25pcHBldCwgJycpO1xyXG4gICAgICAgIGNyZWF0ZVRhYmxlU3FsICs9ICc7JztcclxuXHJcbiAgICAgICAgcmV0dXJuIHFpLmRlc2NyaWJlVGFibGUodGFibGVOYW1lLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlVua25vd25Db25zdHJhaW50RXJyb3Ioe1xyXG4gICAgICAgIG1lc3NhZ2U6IGBDb25zdHJhaW50ICR7Y29uc3RyYWludE5hbWV9IG9uIHRhYmxlICR7dGFibGVOYW1lfSBkb2VzIG5vdCBleGlzdGAsXHJcbiAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludE5hbWUsXHJcbiAgICAgICAgdGFibGU6IHRhYmxlTmFtZVxyXG4gICAgICB9KTtcclxuICAgIH0pXHJcbiAgICAudGhlbihmaWVsZHMgPT4ge1xyXG4gICAgICBjb25zdCBzcWwgPSBxaS5RdWVyeUdlbmVyYXRvci5fYWx0ZXJDb25zdHJhaW50UXVlcnkodGFibGVOYW1lLCBmaWVsZHMsIGNyZWF0ZVRhYmxlU3FsKTtcclxuICAgICAgY29uc3Qgc3ViUXVlcmllcyA9IHNxbC5zcGxpdCgnOycpLmZpbHRlcihxID0+IHEgIT09ICcnKTtcclxuXHJcbiAgICAgIHJldHVybiBQcm9taXNlLmVhY2goc3ViUXVlcmllcywgc3ViUXVlcnkgPT4gcWkuc2VxdWVsaXplLnF1ZXJ5KGAke3N1YlF1ZXJ5fTtgLCBPYmplY3QuYXNzaWduKHsgcmF3OiB0cnVlIH0sIG9wdGlvbnMpKSk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLnJlbW92ZUNvbnN0cmFpbnQgPSByZW1vdmVDb25zdHJhaW50O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7UXVlcnlJbnRlcmZhY2V9IHFpXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWVcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcclxuICpcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGFkZENvbnN0cmFpbnQocWksIHRhYmxlTmFtZSwgb3B0aW9ucykge1xyXG4gIGNvbnN0IGNvbnN0cmFpbnRTbmlwcGV0ID0gcWkuUXVlcnlHZW5lcmF0b3IuZ2V0Q29uc3RyYWludFNuaXBwZXQodGFibGVOYW1lLCBvcHRpb25zKTtcclxuICBjb25zdCBkZXNjcmliZUNyZWF0ZVRhYmxlU3FsID0gcWkuUXVlcnlHZW5lcmF0b3IuZGVzY3JpYmVDcmVhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSk7XHJcbiAgbGV0IGNyZWF0ZVRhYmxlU3FsO1xyXG5cclxuICByZXR1cm4gcWkuc2VxdWVsaXplLnF1ZXJ5KGRlc2NyaWJlQ3JlYXRlVGFibGVTcWwsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgdHlwZTogUXVlcnlUeXBlcy5TRUxFQ1QsIHJhdzogdHJ1ZSB9KSlcclxuICAgIC50aGVuKGNvbnN0cmFpbnRzID0+IHtcclxuICAgICAgY29uc3Qgc3FsID0gY29uc3RyYWludHNbMF0uc3FsO1xyXG4gICAgICBjb25zdCBpbmRleCA9IHNxbC5sZW5ndGggLSAxO1xyXG4gICAgICAvL1JlcGxhY2UgZW5kaW5nICcpJyB3aXRoIGNvbnN0cmFpbnQgc25pcHBldCAtIFNpbXVsYXRlcyBTdHJpbmcucmVwbGFjZUF0XHJcbiAgICAgIC8vaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNDMxMDk0XHJcbiAgICAgIGNyZWF0ZVRhYmxlU3FsID0gYCR7c3FsLnN1YnN0cigwLCBpbmRleCl9LCAke2NvbnN0cmFpbnRTbmlwcGV0fSkke3NxbC5zdWJzdHIoaW5kZXggKyAxKX07YDtcclxuXHJcbiAgICAgIHJldHVybiBxaS5kZXNjcmliZVRhYmxlKHRhYmxlTmFtZSwgb3B0aW9ucyk7XHJcbiAgICB9KVxyXG4gICAgLnRoZW4oZmllbGRzID0+IHtcclxuICAgICAgY29uc3Qgc3FsID0gcWkuUXVlcnlHZW5lcmF0b3IuX2FsdGVyQ29uc3RyYWludFF1ZXJ5KHRhYmxlTmFtZSwgZmllbGRzLCBjcmVhdGVUYWJsZVNxbCk7XHJcbiAgICAgIGNvbnN0IHN1YlF1ZXJpZXMgPSBzcWwuc3BsaXQoJzsnKS5maWx0ZXIocSA9PiBxICE9PSAnJyk7XHJcblxyXG4gICAgICByZXR1cm4gUHJvbWlzZS5lYWNoKHN1YlF1ZXJpZXMsIHN1YlF1ZXJ5ID0+IHFpLnNlcXVlbGl6ZS5xdWVyeShgJHtzdWJRdWVyeX07YCwgT2JqZWN0LmFzc2lnbih7IHJhdzogdHJ1ZSB9LCBvcHRpb25zKSkpO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5hZGRDb25zdHJhaW50ID0gYWRkQ29uc3RyYWludDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge1F1ZXJ5SW50ZXJmYWNlfSBxaVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBRdWVyeSBPcHRpb25zXHJcbiAqXHJcbiAqIEBwcml2YXRlXHJcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0Rm9yZWlnbktleVJlZmVyZW5jZXNGb3JUYWJsZShxaSwgdGFibGVOYW1lLCBvcHRpb25zKSB7XHJcbiAgY29uc3QgZGF0YWJhc2UgPSBxaS5zZXF1ZWxpemUuY29uZmlnLmRhdGFiYXNlO1xyXG4gIGNvbnN0IHF1ZXJ5ID0gcWkuUXVlcnlHZW5lcmF0b3IuZ2V0Rm9yZWlnbktleXNRdWVyeSh0YWJsZU5hbWUsIGRhdGFiYXNlKTtcclxuICByZXR1cm4gcWkuc2VxdWVsaXplLnF1ZXJ5KHF1ZXJ5LCBvcHRpb25zKVxyXG4gICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgcmV0dXJuIHJlc3VsdC5tYXAocm93ID0+ICh7XHJcbiAgICAgICAgdGFibGVOYW1lLFxyXG4gICAgICAgIGNvbHVtbk5hbWU6IHJvdy5mcm9tLFxyXG4gICAgICAgIHJlZmVyZW5jZWRUYWJsZU5hbWU6IHJvdy50YWJsZSxcclxuICAgICAgICByZWZlcmVuY2VkQ29sdW1uTmFtZTogcm93LnRvLFxyXG4gICAgICAgIHRhYmxlQ2F0YWxvZzogZGF0YWJhc2UsXHJcbiAgICAgICAgcmVmZXJlbmNlZFRhYmxlQ2F0YWxvZzogZGF0YWJhc2VcclxuICAgICAgfSkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydHMuZ2V0Rm9yZWlnbktleVJlZmVyZW5jZXNGb3JUYWJsZSA9IGdldEZvcmVpZ25LZXlSZWZlcmVuY2VzRm9yVGFibGU7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnktaW50ZXJmYWNlLmpzIl0sIm5hbWVzIjpbIl8iLCJyZXF1aXJlIiwiUHJvbWlzZSIsInNlcXVlbGl6ZUVycm9ycyIsIlF1ZXJ5VHlwZXMiLCJyZW1vdmVDb2x1bW4iLCJxaSIsInRhYmxlTmFtZSIsImF0dHJpYnV0ZU5hbWUiLCJvcHRpb25zIiwiZGVzY3JpYmVUYWJsZSIsInRoZW4iLCJmaWVsZHMiLCJzcWwiLCJRdWVyeUdlbmVyYXRvciIsInJlbW92ZUNvbHVtblF1ZXJ5Iiwic3ViUXVlcmllcyIsInNwbGl0IiwiZmlsdGVyIiwicSIsImVhY2giLCJzdWJRdWVyeSIsInNlcXVlbGl6ZSIsInF1ZXJ5IiwiT2JqZWN0IiwiYXNzaWduIiwicmF3IiwiZXhwb3J0cyIsImNoYW5nZUNvbHVtbiIsImF0dHJpYnV0ZXMiLCJrZXlzIiwicmVuYW1lQ29sdW1uIiwiYXR0ck5hbWVCZWZvcmUiLCJhdHRyTmFtZUFmdGVyIiwiY2xvbmUiLCJyZW5hbWVDb2x1bW5RdWVyeSIsInJlbW92ZUNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNyZWF0ZVRhYmxlU3FsIiwic2hvd0NvbnN0cmFpbnQiLCJjb25zdHJhaW50cyIsImNvbnN0cmFpbnQiLCJmaW5kIiwiY29uc3RhaW50IiwicXVvdGVJZGVudGlmaWVyIiwiY29uc3RyYWludFNuaXBwZXQiLCJjb25zdHJhaW50VHlwZSIsImNvbnN0cmFpbnRDb25kaXRpb24iLCJyZWZlcmVuY2VUYWJsZU5hbWUiLCJxdW90ZVRhYmxlIiwicmVmZXJlbmNlVGFibGVLZXlzIiwibWFwIiwiY29sdW1uTmFtZSIsImpvaW4iLCJ1cGRhdGVBY3Rpb24iLCJkZWxldGVBY3Rpb24iLCJyZXBsYWNlIiwiVW5rbm93bkNvbnN0cmFpbnRFcnJvciIsIm1lc3NhZ2UiLCJ0YWJsZSIsIl9hbHRlckNvbnN0cmFpbnRRdWVyeSIsImFkZENvbnN0cmFpbnQiLCJnZXRDb25zdHJhaW50U25pcHBldCIsImRlc2NyaWJlQ3JlYXRlVGFibGVTcWwiLCJkZXNjcmliZUNyZWF0ZVRhYmxlUXVlcnkiLCJ0eXBlIiwiU0VMRUNUIiwiaW5kZXgiLCJsZW5ndGgiLCJzdWJzdHIiLCJnZXRGb3JlaWduS2V5UmVmZXJlbmNlc0ZvclRhYmxlIiwiZGF0YWJhc2UiLCJjb25maWciLCJnZXRGb3JlaWduS2V5c1F1ZXJ5IiwicmVzdWx0Iiwicm93IiwiZnJvbSIsInJlZmVyZW5jZWRUYWJsZU5hbWUiLCJyZWZlcmVuY2VkQ29sdW1uTmFtZSIsInRvIiwidGFibGVDYXRhbG9nIiwicmVmZXJlbmNlZFRhYmxlQ2F0YWxvZyJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsQ0FBQyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNQyxPQUFPLEdBQUdELE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1FLGVBQWUsR0FBR0YsT0FBTyxDQUFDLGNBQUQsQ0FBL0I7O0FBQ0EsTUFBTUcsVUFBVSxHQUFHSCxPQUFPLENBQUMsbUJBQUQsQ0FBMUI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTSSxZQUFULENBQXNCQyxFQUF0QixFQUEwQkMsU0FBMUIsRUFBcUNDLGFBQXJDLEVBQW9EQyxPQUFwRCxFQUE2RDtBQUMzREEsRUFBQUEsT0FBTyxHQUFHQSxPQUFPLElBQUksRUFBckI7QUFFQSxTQUFPSCxFQUFFLENBQUNJLGFBQUgsQ0FBaUJILFNBQWpCLEVBQTRCRSxPQUE1QixFQUFxQ0UsSUFBckMsQ0FBMENDLE1BQU0sSUFBSTtBQUN6RCxXQUFPQSxNQUFNLENBQUNKLGFBQUQsQ0FBYjtBQUVBLFVBQU1LLEdBQUcsR0FBR1AsRUFBRSxDQUFDUSxjQUFILENBQWtCQyxpQkFBbEIsQ0FBb0NSLFNBQXBDLEVBQStDSyxNQUEv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QUNBLFNBQVNTLCtCQUFULENBQXlDaEUsRUFBekMsRUFBNkNDLFNBQTdDLEVBQXdERSxPQUF4RCxFQUFpRTtBQUMvRCxRQUFNOEQsUUFBUSxHQUFHakUsRUFBRSxDQUFDZ0IsU0FBSCxDQUFha0QsTUFBYixDQUFvQkQsUUFBckM7QUFDQSxRQUFNaEQsS0FBSyxHQUFHakIsRUFBRSxDQUFDUSxjQUFILENBQWtCMkQsbUJBQWxCLENBQXNDbEUsU0FBdEMsRUFBaURnRSxRQUFqRCxDQUFkO0FBQ0EsU0FBT2pFLEVBQUUsQ0FBQ2dCLFNBQUgsQ0FBYUMsS0FBYixDQUFtQkEsS0FBbkIsRUFBMEJkLE9BQTFCLEVBQ0pFLElBREksQ0FDQytELE1BQU0sSUFBSTtBQUNkLFdBQU9BLE1BQU0sQ0FBQ3ZCLEdBQVAsQ0FBV3dCLEdBQUcsS0FBSztBQUN4QnBFLE1BQUFBLFNBRHdCO0FBRXhCNkMsTUFBQUEsVUFBVSxFQUFFdUIsR0FBRyxDQUFDQyxJQUZRO0FBR3hCQyxNQUFBQSxtQkFBbUIsRUFBRUYsR0FBRyxDQUFDaEIsS0FIRDtBQUl4Qm1CLE1BQUFBLG9CQUFvQixFQUFFSCxHQUFHLENBQUNJLEVBSkY7QUFLeEJDLE1BQUFBLFlBQVksRUFBRVQsUUFMVTtBQU14QlUsTUFBQUEsc0JBQXNCLEVBQUVWO0FBTkEsS0FBTCxDQUFkLENBQVA7QUFRRCxHQVZJLENBQVA7QUFXRDs7QUFFRDVDLE9BQU8sQ0FBQzJDLCtCQUFSLEdBQTBDQSwrQkFBMUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCcuLi8uLi9wcm9taXNlJyk7XG5jb25zdCBzZXF1ZWxpemVFcnJvcnMgPSByZXF1aXJlKCcuLi8uLi9lcnJvcnMnKTtcbmNvbnN0IFF1ZXJ5VHlwZXMgPSByZXF1aXJlKCcuLi8uLi9xdWVyeS10eXBlcycpO1xuXG4vKipcbiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IHRyZWF0cyBTUUxpdGUncyBpbmFiaWxpdGllcyB0byBkbyBjZXJ0YWluIHF1ZXJpZXMuXG5cbiBAY2xhc3MgUXVlcnlJbnRlcmZhY2VcbiBAc3RhdGljXG4gQHByaXZhdGVcbiAqL1xuXG4vKipcbiAgQSB3cmFwcGVyIHRoYXQgZml4ZXMgU1FMaXRlJ3MgaW5hYmlsaXR5IHRvIHJlbW92ZSBjb2x1bW5zIGZyb20gZXhpc3RpbmcgdGFibGVzLlxuICBJdCB3aWxsIGNyZWF0ZSBhIGJhY2t1cCBvZiB0aGUgdGFibGUsIGRyb3AgdGhlIHRhYmxlIGFmdGVyd2FyZHMgYW5kIGNyZWF0ZSBhXG4gIG5ldyB0YWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IHdpdGhvdXQgdGhlIG9ic29sZXRlIGNvbHVtbi5cblxuICBAcGFyYW0gIHtRdWVyeUludGVyZmFjZX0gcWlcbiAgQHBhcmFtICB7c3RyaW5nfSB0YWJsZU5hbWUgICAgIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS5cbiAgQHBhcmFtICB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdGhhdCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAgQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gIEBwYXJhbSAge2Jvb2xlYW58RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmddIEEgZnVuY3Rpb24gdGhhdCBsb2dzIHRoZSBzcWwgcXVlcmllcywgb3IgZmFsc2UgZm9yIGV4cGxpY2l0bHkgbm90IGxvZ2dpbmcgdGhlc2UgcXVlcmllc1xuXG4gIEBzaW5jZSAxLjYuMFxuICBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZW1vdmVDb2x1bW4ocWksIHRhYmxlTmFtZSwgYXR0cmlidXRlTmFtZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICByZXR1cm4gcWkuZGVzY3JpYmVUYWJsZSh0YWJsZU5hbWUsIG9wdGlvbnMpLnRoZW4oZmllbGRzID0+IHtcbiAgICBkZWxldGUgZmllbGRzW2F0dHJpYnV0ZU5hbWVdO1xuXG4gICAgY29uc3Qgc3FsID0gcWkuUXVlcnlHZW5lcmF0b3IucmVtb3ZlQ29sdW1uUXVlcnkodGFibGVOYW1lLCBmaWVsZHMpO1xuICAgIGNvbnN0IHN1YlF1ZXJpZXMgPSBzcWwuc3BsaXQoJzsnKS5maWx0ZXIocSA9PiBxICE9PSAnJyk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5lYWNoKHN1YlF1ZXJpZXMsIHN1YlF1ZXJ5ID0+IHFpLnNlcXVlbGl6ZS5xdWVyeShgJHtzdWJRdWVyeX07YCwgT2JqZWN0LmFzc2lnbih7IHJhdzogdHJ1ZSB9LCBvcHRpb25zKSkpO1xuICB9KTtcbn1cbmV4cG9ydHMucmVtb3ZlQ29sdW1uID0gcmVtb3ZlQ29sdW1uO1xuXG4vKipcbiAgQSB3cmFwcGVyIHRoYXQgZml4ZXMgU1FMaXRlJ3MgaW5hYmlsaXR5IHRvIGNoYW5nZSBjb2x1bW5zIGZyb20gZXhpc3RpbmcgdGFibGVzLlxuICBJdCB3aWxsIGNyZWF0ZSBhIGJhY2t1cCBvZiB0aGUgdGFibGUsIGRyb3AgdGhlIHRhYmxlIGFmdGVyd2FyZHMgYW5kIGNyZWF0ZSBhXG4gIG5ldyB0YWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSByZXNwZWN0aXZlIGNvbHVtbi5cblxuICBAcGFyYW0gIHtRdWVyeUludGVyZmFjZX0gcWlcbiAgQHBhcmFtICB7c3RyaW5nfSB0YWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhYmxlLlxuICBAcGFyYW0gIHtPYmplY3R9IGF0dHJpYnV0ZXMgQW4gb2JqZWN0IHdpdGggdGhlIGF0dHJpYnV0ZSdzIG5hbWUgYXMga2V5IGFuZCBpdHMgb3B0aW9ucyBhcyB2YWx1ZSBvYmplY3QuXG4gIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICBAcGFyYW0gIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nXSBBIGZ1bmN0aW9uIHRoYXQgbG9ncyB0aGUgc3FsIHF1ZXJpZXMsIG9yIGZhbHNlIGZvciBleHBsaWNpdGx5IG5vdCBsb2dnaW5nIHRoZXNlIHF1ZXJpZXNcblxuICBAc2luY2UgMS42LjBcbiAgQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hhbmdlQ29sdW1uKHFpLCB0YWJsZU5hbWUsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpIHtcbiAgY29uc3QgYXR0cmlidXRlTmFtZSA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpWzBdO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICByZXR1cm4gcWkuZGVzY3JpYmVUYWJsZSh0YWJsZU5hbWUsIG9wdGlvbnMpLnRoZW4oZmllbGRzID0+IHtcbiAgICBmaWVsZHNbYXR0cmlidXRlTmFtZV0gPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdO1xuXG4gICAgY29uc3Qgc3FsID0gcWkuUXVlcnlHZW5lcmF0b3IucmVtb3ZlQ29sdW1uUXVlcnkodGFibGVOYW1lLCBmaWVsZHMpO1xuICAgIGNvbnN0IHN1YlF1ZXJpZXMgPSBzcWwuc3BsaXQoJzsnKS5maWx0ZXIocSA9PiBxICE9PSAnJyk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5lYWNoKHN1YlF1ZXJpZXMsIHN1YlF1ZXJ5ID0+IHFpLnNlcXVlbGl6ZS5xdWVyeShgJHtzdWJRdWVyeX07YCwgT2JqZWN0LmFzc2lnbih7IHJhdzogdHJ1ZSB9LCBvcHRpb25zKSkpO1xuICB9KTtcbn1cbmV4cG9ydHMuY2hhbmdlQ29sdW1uID0gY2hhbmdlQ29sdW1uO1xuXG4vKipcbiAgQSB3cmFwcGVyIHRoYXQgZml4ZXMgU1FMaXRlJ3MgaW5hYmlsaXR5IHRvIHJlbmFtZSBjb2x1bW5zIGZyb20gZXhpc3RpbmcgdGFibGVzLlxuICBJdCB3aWxsIGNyZWF0ZSBhIGJhY2t1cCBvZiB0aGUgdGFibGUsIGRyb3AgdGhlIHRhYmxlIGFmdGVyd2FyZHMgYW5kIGNyZWF0ZSBhXG4gIG5ldyB0YWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IHdpdGggYSByZW5hbWVkIHZlcnNpb24gb2YgdGhlIHJlc3BlY3RpdmUgY29sdW1uLlxuXG4gIEBwYXJhbSAge1F1ZXJ5SW50ZXJmYWNlfSBxaVxuICBAcGFyYW0gIHtzdHJpbmd9IHRhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFibGUuXG4gIEBwYXJhbSAge3N0cmluZ30gYXR0ck5hbWVCZWZvcmUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBiZWZvcmUgaXQgd2FzIHJlbmFtZWQuXG4gIEBwYXJhbSAge3N0cmluZ30gYXR0ck5hbWVBZnRlciBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIGFmdGVyIGl0IHdhcyByZW5hbWVkLlxuICBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAgQHBhcmFtICB7Ym9vbGVhbnxGdW5jdGlvbn0gW29wdGlvbnMubG9nZ2luZ10gQSBmdW5jdGlvbiB0aGF0IGxvZ3MgdGhlIHNxbCBxdWVyaWVzLCBvciBmYWxzZSBmb3IgZXhwbGljaXRseSBub3QgbG9nZ2luZyB0aGVzZSBxdWVyaWVzXG5cbiAgQHNpbmNlIDEuNi4wXG4gIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlbmFtZUNvbHVtbihxaSwgdGFibGVOYW1lLCBhdHRyTmFtZUJlZm9yZSwgYXR0ck5hbWVBZnRlciwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICByZXR1cm4gcWkuZGVzY3JpYmVUYWJsZSh0YWJsZU5hbWUsIG9wdGlvbnMpLnRoZW4oZmllbGRzID0+IHtcbiAgICBmaWVsZHNbYXR0ck5hbWVBZnRlcl0gPSBfLmNsb25lKGZpZWxkc1thdHRyTmFtZUJlZm9yZV0pO1xuICAgIGRlbGV0ZSBmaWVsZHNbYXR0ck5hbWVCZWZvcmVdO1xuXG4gICAgY29uc3Qgc3FsID0gcWkuUXVlcnlHZW5lcmF0b3IucmVuYW1lQ29sdW1uUXVlcnkodGFibGVOYW1lLCBhdHRyTmFtZUJlZm9yZSwgYXR0ck5hbWVBZnRlciwgZmllbGRzKTtcbiAgICBjb25zdCBzdWJRdWVyaWVzID0gc3FsLnNwbGl0KCc7JykuZmlsdGVyKHEgPT4gcSAhPT0gJycpO1xuXG4gICAgcmV0dXJuIFByb21pc2UuZWFjaChzdWJRdWVyaWVzLCBzdWJRdWVyeSA9PiBxaS5zZXF1ZWxpemUucXVlcnkoYCR7c3ViUXVlcnl9O2AsIE9iamVjdC5hc3NpZ24oeyByYXc6IHRydWUgfSwgb3B0aW9ucykpKTtcbiAgfSk7XG59XG5leHBvcnRzLnJlbmFtZUNvbHVtbiA9IHJlbmFtZUNvbHVtbjtcblxuLyoqXG4gKiBAcGFyYW0ge1F1ZXJ5SW50ZXJmYWNlfSBxaVxuICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnN0cmFpbnROYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNvbnN0cmFpbnQocWksIHRhYmxlTmFtZSwgY29uc3RyYWludE5hbWUsIG9wdGlvbnMpIHtcbiAgbGV0IGNyZWF0ZVRhYmxlU3FsO1xuXG4gIHJldHVybiBxaS5zaG93Q29uc3RyYWludCh0YWJsZU5hbWUsIGNvbnN0cmFpbnROYW1lKVxuICAgIC50aGVuKGNvbnN0cmFpbnRzID0+IHtcbiAgICAgIC8vIHNxbGl0ZSBjYW4ndCBzaG93IG9ubHkgb25lIGNvbnN0cmFpbnQsIHNvIHdlIGZpbmQgaGVyZSB0aGUgb25lIHRvIHJlbW92ZVxuICAgICAgY29uc3QgY29uc3RyYWludCA9IGNvbnN0cmFpbnRzLmZpbmQoY29uc3RhaW50ID0+IGNvbnN0YWludC5jb25zdHJhaW50TmFtZSA9PT0gY29uc3RyYWludE5hbWUpO1xuXG4gICAgICBpZiAoY29uc3RyYWludCkge1xuICAgICAgICBjcmVhdGVUYWJsZVNxbCA9IGNvbnN0cmFpbnQuc3FsO1xuICAgICAgICBjb25zdHJhaW50LmNvbnN0cmFpbnROYW1lID0gcWkuUXVlcnlHZW5lcmF0b3IucXVvdGVJZGVudGlmaWVyKGNvbnN0cmFpbnQuY29uc3RyYWludE5hbWUpO1xuICAgICAgICBsZXQgY29uc3RyYWludFNuaXBwZXQgPSBgLCBDT05TVFJBSU5UICR7Y29uc3RyYWludC5jb25zdHJhaW50TmFtZX0gJHtjb25zdHJhaW50LmNvbnN0cmFpbnRUeXBlfSAke2NvbnN0cmFpbnQuY29uc3RyYWludENvbmRpdGlvbn1gO1xuXG4gICAgICAgIGlmIChjb25zdHJhaW50LmNvbnN0cmFpbnRUeXBlID09PSAnRk9SRUlHTiBLRVknKSB7XG4gICAgICAgICAgY29uc3QgcmVmZXJlbmNlVGFibGVOYW1lID0gcWkuUXVlcnlHZW5lcmF0b3IucXVvdGVUYWJsZShjb25zdHJhaW50LnJlZmVyZW5jZVRhYmxlTmFtZSk7XG4gICAgICAgICAgY29uc3RyYWludC5yZWZlcmVuY2VUYWJsZUtleXMgPSBjb25zdHJhaW50LnJlZmVyZW5jZVRhYmxlS2V5cy5tYXAoY29sdW1uTmFtZSA9PiBxaS5RdWVyeUdlbmVyYXRvci5xdW90ZUlkZW50aWZpZXIoY29sdW1uTmFtZSkpO1xuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZVRhYmxlS2V5cyA9IGNvbnN0cmFpbnQucmVmZXJlbmNlVGFibGVLZXlzLmpvaW4oJywgJyk7XG4gICAgICAgICAgY29uc3RyYWludFNuaXBwZXQgKz0gYCBSRUZFUkVOQ0VTICR7cmVmZXJlbmNlVGFibGVOYW1lfSAoJHtyZWZlcmVuY2VUYWJsZUtleXN9KWA7XG4gICAgICAgICAgY29uc3RyYWludFNuaXBwZXQgKz0gYCBPTiBVUERBVEUgJHtjb25zdHJhaW50LnVwZGF0ZUFjdGlvbn1gO1xuICAgICAgICAgIGNvbnN0cmFpbnRTbmlwcGV0ICs9IGAgT04gREVMRVRFICR7Y29uc3RyYWludC5kZWxldGVBY3Rpb259YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWF0ZVRhYmxlU3FsID0gY3JlYXRlVGFibGVTcWwucmVwbGFjZShjb25zdHJhaW50U25pcHBldCwgJycpO1xuICAgICAgICBjcmVhdGVUYWJsZVNxbCArPSAnOyc7XG5cbiAgICAgICAgcmV0dXJuIHFpLmRlc2NyaWJlVGFibGUodGFibGVOYW1lLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuVW5rbm93bkNvbnN0cmFpbnRFcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6IGBDb25zdHJhaW50ICR7Y29uc3RyYWludE5hbWV9IG9uIHRhYmxlICR7dGFibGVOYW1lfSBkb2VzIG5vdCBleGlzdGAsXG4gICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnROYW1lLFxuICAgICAgICB0YWJsZTogdGFibGVOYW1lXG4gICAgICB9KTtcbiAgICB9KVxuICAgIC50aGVuKGZpZWxkcyA9PiB7XG4gICAgICBjb25zdCBzcWwgPSBxaS5RdWVyeUdlbmVyYXRvci5fYWx0ZXJDb25zdHJhaW50UXVlcnkodGFibGVOYW1lLCBmaWVsZHMsIGNyZWF0ZVRhYmxlU3FsKTtcbiAgICAgIGNvbnN0IHN1YlF1ZXJpZXMgPSBzcWwuc3BsaXQoJzsnKS5maWx0ZXIocSA9PiBxICE9PSAnJyk7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmVhY2goc3ViUXVlcmllcywgc3ViUXVlcnkgPT4gcWkuc2VxdWVsaXplLnF1ZXJ5KGAke3N1YlF1ZXJ5fTtgLCBPYmplY3QuYXNzaWduKHsgcmF3OiB0cnVlIH0sIG9wdGlvbnMpKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJlbW92ZUNvbnN0cmFpbnQgPSByZW1vdmVDb25zdHJhaW50O1xuXG4vKipcbiAqIEBwYXJhbSB7UXVlcnlJbnRlcmZhY2V9IHFpXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZENvbnN0cmFpbnQocWksIHRhYmxlTmFtZSwgb3B0aW9ucykge1xuICBjb25zdCBjb25zdHJhaW50U25pcHBldCA9IHFpLlF1ZXJ5R2VuZXJhdG9yLmdldENvbnN0cmFpbnRTbmlwcGV0KHRhYmxlTmFtZSwgb3B0aW9ucyk7XG4gIGNvbnN0IGRlc2NyaWJlQ3JlYXRlVGFibGVTcWwgPSBxaS5RdWVyeUdlbmVyYXRvci5kZXNjcmliZUNyZWF0ZVRhYmxlUXVlcnkodGFibGVOYW1lKTtcbiAgbGV0IGNyZWF0ZVRhYmxlU3FsO1xuXG4gIHJldHVybiBxaS5zZXF1ZWxpemUucXVlcnkoZGVzY3JpYmVDcmVhdGVUYWJsZVNxbCwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyB0eXBlOiBRdWVyeVR5cGVzLlNFTEVDVCwgcmF3OiB0cnVlIH0pKVxuICAgIC50aGVuKGNvbnN0cmFpbnRzID0+IHtcbiAgICAgIGNvbnN0IHNxbCA9IGNvbnN0cmFpbnRzWzBdLnNxbDtcbiAgICAgIGNvbnN0IGluZGV4ID0gc3FsLmxlbmd0aCAtIDE7XG4gICAgICAvL1JlcGxhY2UgZW5kaW5nICcpJyB3aXRoIGNvbnN0cmFpbnQgc25pcHBldCAtIFNpbXVsYXRlcyBTdHJpbmcucmVwbGFjZUF0XG4gICAgICAvL2h0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTQzMTA5NFxuICAgICAgY3JlYXRlVGFibGVTcWwgPSBgJHtzcWwuc3Vic3RyKDAsIGluZGV4KX0sICR7Y29uc3RyYWludFNuaXBwZXR9KSR7c3FsLnN1YnN0cihpbmRleCArIDEpfTtgO1xuXG4gICAgICByZXR1cm4gcWkuZGVzY3JpYmVUYWJsZSh0YWJsZU5hbWUsIG9wdGlvbnMpO1xuICAgIH0pXG4gICAgLnRoZW4oZmllbGRzID0+IHtcbiAgICAgIGNvbnN0IHNxbCA9IHFpLlF1ZXJ5R2VuZXJhdG9yLl9hbHRlckNvbnN0cmFpbnRRdWVyeSh0YWJsZU5hbWUsIGZpZWxkcywgY3JlYXRlVGFibGVTcWwpO1xuICAgICAgY29uc3Qgc3ViUXVlcmllcyA9IHNxbC5zcGxpdCgnOycpLmZpbHRlcihxID0+IHEgIT09ICcnKTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuZWFjaChzdWJRdWVyaWVzLCBzdWJRdWVyeSA9PiBxaS5zZXF1ZWxpemUucXVlcnkoYCR7c3ViUXVlcnl9O2AsIE9iamVjdC5hc3NpZ24oeyByYXc6IHRydWUgfSwgb3B0aW9ucykpKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuYWRkQ29uc3RyYWludCA9IGFkZENvbnN0cmFpbnQ7XG5cbi8qKlxuICogQHBhcmFtIHtRdWVyeUludGVyZmFjZX0gcWlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBRdWVyeSBPcHRpb25zXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5mdW5jdGlvbiBnZXRGb3JlaWduS2V5UmVmZXJlbmNlc0ZvclRhYmxlKHFpLCB0YWJsZU5hbWUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGF0YWJhc2UgPSBxaS5zZXF1ZWxpemUuY29uZmlnLmRhdGFiYXNlO1xuICBjb25zdCBxdWVyeSA9IHFpLlF1ZXJ5R2VuZXJhdG9yLmdldEZvcmVpZ25LZXlzUXVlcnkodGFibGVOYW1lLCBkYXRhYmFzZSk7XG4gIHJldHVybiBxaS5zZXF1ZWxpemUucXVlcnkocXVlcnksIG9wdGlvbnMpXG4gICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIHJldHVybiByZXN1bHQubWFwKHJvdyA9PiAoe1xuICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgIGNvbHVtbk5hbWU6IHJvdy5mcm9tLFxuICAgICAgICByZWZlcmVuY2VkVGFibGVOYW1lOiByb3cudGFibGUsXG4gICAgICAgIHJlZmVyZW5jZWRDb2x1bW5OYW1lOiByb3cudG8sXG4gICAgICAgIHRhYmxlQ2F0YWxvZzogZGF0YWJhc2UsXG4gICAgICAgIHJlZmVyZW5jZWRUYWJsZUNhdGFsb2c6IGRhdGFiYXNlXG4gICAgICB9KSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydHMuZ2V0Rm9yZWlnbktleVJlZmVyZW5jZXNGb3JUYWJsZSA9IGdldEZvcmVpZ25LZXlSZWZlcmVuY2VzRm9yVGFibGU7XG4iXX0= \ No newline at end of file diff --git a/dist/dialects/sqlite/query.js b/dist/dialects/sqlite/query.js index 2c2296a..ee64954 100644 --- a/dist/dialects/sqlite/query.js +++ b/dist/dialects/sqlite/query.js @@ -6,15 +6,19 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const _ = require("lodash"); @@ -47,15 +51,15 @@ const getMethods = obj => { return [...properties.keys()].filter(item => typeof obj[item] === "function"); }; -let Query = -/*#__PURE__*/ -function (_AbstractQuery) { +let Query = /*#__PURE__*/function (_AbstractQuery) { _inherits(Query, _AbstractQuery); + var _super = _createSuper(Query); + function Query() { _classCallCheck(this, Query); - return _possibleConstructorReturn(this, _getPrototypeOf(Query).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Query, [{ @@ -364,7 +368,7 @@ function (_AbstractQuery) { return null; }; - if (method === "all" && typeof conn.exec === "function") { + if (method === "all") { let tableNames = []; if (this.options && this.options.tableNames) { @@ -420,8 +424,11 @@ function (_AbstractQuery) { } } //console.log(columnTypes) + + if (index === tableNames.length - 1) resolve(); + }, function (_, error) { + if (index === tableNames.length - 1) resolve(); }); - if (index === tableNames.length - 1) resolve(); }); }); } @@ -647,4 +654,4 @@ function (_AbstractQuery) { module.exports = Query; module.exports.Query = Query; module.exports.default = Query; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnkuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIlByb21pc2UiLCJBYnN0cmFjdFF1ZXJ5IiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsInBhcnNlclN0b3JlIiwibG9nZ2VyIiwiZGVidWciLCJkZWJ1Z0NvbnRleHQiLCJnZXRNZXRob2RzIiwib2JqIiwicHJvcGVydGllcyIsIlNldCIsImN1cnJlbnRPYmoiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibWFwIiwiaXRlbSIsImFkZCIsImdldFByb3RvdHlwZU9mIiwia2V5cyIsImZpbHRlciIsIlF1ZXJ5IiwiaW5jbHVkZSIsInByZWZpeCIsInJldCIsIl9pbmNsdWRlIiwia2V5IiwiYXMiLCJtb2RlbCIsIm1lcmdlIiwiX2NvbGxlY3RNb2RlbHMiLCJtZXRhRGF0YSIsImNvbHVtblR5cGVzIiwiZXJyIiwicmVzdWx0cyIsInNxbCIsImZvcm1hdEVycm9yIiwicmVzdWx0IiwiaW5zdGFuY2UiLCJpc0luc2VydFF1ZXJ5IiwiaGFuZGxlSW5zZXJ0UXVlcnkiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsInJhd0F0dHJpYnV0ZXMiLCJzdGFydElkIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImNoYW5nZXMiLCJpIiwicHVzaCIsImZpZWxkIiwiaXNTaG93VGFibGVzUXVlcnkiLCJyb3ciLCJuYW1lIiwiaXNTaG93Q29uc3RyYWludHNRdWVyeSIsInBhcnNlQ29uc3RyYWludHNGcm9tU3FsIiwiaXNTZWxlY3RRdWVyeSIsIm9wdGlvbnMiLCJyYXciLCJoYW5kbGVTZWxlY3RRdWVyeSIsInByZWZpeGVzIiwibWFwVmFsdWVzIiwidmFsdWUiLCJpbmNsdWRlcyIsImxhc3RpbmQiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsInRvU3RyaW5nIiwicmVwbGFjZSIsInRhYmxlVHlwZXMiLCJmb3JPd24iLCJhdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseVBhcnNlcnMiLCJpc1Nob3dPckRlc2NyaWJlUXVlcnkiLCJoYW5kbGVTaG93SW5kZXhlc1F1ZXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiX3Jlc3VsdCIsImRmbHRfdmFsdWUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwiYWxsb3dOdWxsIiwibm90bnVsbCIsInByaW1hcnlLZXkiLCJwayIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsInZlcnNpb24iLCJSQVciLCJpc1VwZGF0ZVF1ZXJ5IiwicGFyYW1ldGVycyIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiYmluZCIsImRpYWxlY3QiLCJza2lwVW5lc2NhcGUiLCJtZXRob2QiLCJnZXREYXRhYmFzZU1ldGhvZCIsImNvbXBsZXRlIiwiX2xvZ1F1ZXJ5IiwicXVlcnkiLCJzZWxmIiwiY29ubiIsImNvbm5lY3Rpb24iLCJyZXNvbHZlIiwiZXhlY3V0ZVNxbCIsInN0YXJ0c1dpdGgiLCJyZWplY3QiLCJleGVjIiwiYXJncyIsImV4ZWN1dGlvbkVycm9yIiwiY29udmVydFRvQXJyYXkiLCJfaGFuZGxlUXVlcnlSZXNwb25zZSIsImVycm9yIiwidHJhbnNhY3Rpb24iLCJ0Iiwic3VjY2Vzc0NhbGxiYWNrIiwicm93c0FmZmVjdGVkIiwiaW5zZXJ0SWQiLCJlIiwiZXJyb3JDYWxsYmFjayIsInRhYmxlTmFtZXMiLCJsZW5ndGgiLCJzcWxDb21tYW5kcyIsInNxbENtZCIsInJvd3MiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0YWJsZSIsImNvbHVtbnMiLCJtYXRjaCIsImNvbCIsImNvbE5hbWUiLCJjb2xUeXBlIiwidHJpbSIsInNwbGl0IiwidGhlbiIsImNvbnN0cmFpbnRzIiwicmVmZXJlbmNlVGFibGVOYW1lIiwicmVmZXJlbmNlVGFibGVLZXlzIiwidXBkYXRlQWN0aW9uIiwiZGVsZXRlQWN0aW9uIiwic3BsaWNlIiwiY29uc3RyYWludFNxbCIsInJlZmVyZW5jZXNSZWdleCIsInJlZmVyZW5jZUNvbmRpdGlvbnMiLCJyZW1vdmVUaWNrcyIsImNvbHVtbk5hbWVzIiwiY29sdW1uIiwiY29uc3RyYWludENvbmRpdGlvbiIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNvbnN0cmFpbnRUeXBlIiwiaW5kZXhPZiIsInRvVXBwZXJDYXNlIiwicGFyc2UiLCJnZXQiLCJ0aW1lem9uZSIsInNlcXVlbGl6ZSIsImNvZGUiLCJtZXNzYWdlIiwiRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvciIsInBhcmVudCIsImZpZWxkcyIsImNvbHVtbldpdGhUYWJsZSIsImVycm9ycyIsIlZhbGlkYXRpb25FcnJvckl0ZW0iLCJnZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlIiwidW5pcXVlS2V5cyIsImlzRXF1YWwiLCJtc2ciLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJEYXRhYmFzZUVycm9yIiwiZGF0YSIsInJldmVyc2UiLCJwcmltYXJ5IiwidW5pcXVlIiwicnVuIiwic2Vxbm8iLCJvcmRlciIsImlzQnVsa1VwZGF0ZVF1ZXJ5IiwidG9Mb3dlckNhc2UiLCJhcnJheSIsIl9hcnJheSIsInZhbHVlcyIsImJpbmRQYXJhbSIsInYiLCJza2lwVmFsdWVSZXBsYWNlIiwiayIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsQ0FBQyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNQyxLQUFLLEdBQUdELE9BQU8sQ0FBQyxhQUFELENBQXJCOztBQUNBLE1BQU1FLE9BQU8sR0FBR0YsT0FBTyxDQUFDLGVBQUQsQ0FBdkI7O0FBQ0EsTUFBTUcsYUFBYSxHQUFHSCxPQUFPLENBQUMsbUJBQUQsQ0FBN0I7O0FBQ0EsTUFBTUksVUFBVSxHQUFHSixPQUFPLENBQUMsbUJBQUQsQ0FBMUI7O0FBQ0EsTUFBTUssZUFBZSxHQUFHTCxPQUFPLENBQUMsY0FBRCxDQUEvQjs7QUFDQSxNQUFNTSxXQUFXLEdBQUdOLE9BQU8sQ0FBQyxnQkFBRCxDQUFQLENBQTBCLFFBQTFCLENBQXBCOztBQUNBLE1BQU07QUFBRU8sRUFBQUE7QUFBRixJQUFhUCxPQUFPLENBQUMsb0JBQUQsQ0FBMUI7O0FBRUEsTUFBTVEsS0FBSyxHQUFHRCxNQUFNLENBQUNFLFlBQVAsQ0FBb0IsWUFBcEIsQ0FBZDs7QUFDQSxNQUFNQyxVQUFVLEdBQUdDLEdBQUcsSUFBSTtBQUN4QixNQUFJQyxVQUFVLEdBQUcsSUFBSUMsR0FBSixFQUFqQjtBQUNBLE1BQUlDLFVBQVUsR0FBR0gsR0FBakI7O0FBQ0EsS0FBRztBQUNESSxJQUFBQSxNQUFNLENBQUNDLG1CQUFQLENBQTJCRixVQUEzQixFQUF1Q0csR0FBdkMsQ0FBMkNDLElBQUksSUFBSU4sVUFBVSxDQUFDTyxHQUFYLENBQWVELElBQWYsQ0FBbkQ7QUFDRCxHQUZELFFBRVVKLFVBQVUsR0FBR0MsTUFBTSxDQUFDSyxjQUFQLENBQXNCTixVQUF0QixDQUZ2Qjs7QUFHQSxTQUFPLENBQUMsR0FBR0YsVUFBVSxDQUFDUyxJQUFYLEVBQUosRUFBdUJDLE1BQXZCLENBQThCSixJQUFJLElBQUksT0FBT1AsR0FBRyxDQUFDTyxJQUFELENBQVYsS0FBcUIsVUFBM0QsQ0FBUDtBQUNELENBUEQ7O0lBUU1LLEs7Ozs7Ozs7Ozs7Ozs7dUNBQ2U7QUFDakIsYUFBTyxRQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7bUNBZ0NlQyxPLEVBQVNDLE0sRUFBUTtBQUM5QixZQUFNQyxHQUFHLEdBQUcsRUFBWjs7QUFFQSxVQUFJRixPQUFKLEVBQWE7QUFDWCxhQUFLLE1BQU1HLFFBQVgsSUFBdUJILE9BQXZCLEVBQWdDO0FBQzlCLGNBQUlJLEdBQUo7O0FBQ0EsY0FBSSxDQUFDSCxNQUFMLEVBQWE7QUFDWEcsWUFBQUEsR0FBRyxHQUFHRCxRQUFRLENBQUNFLEVBQWY7QUFDRCxXQUZELE1BRU87QUFDTEQsWUFBQUEsR0FBRyxHQUFJLEdBQUVILE1BQU8sSUFBR0UsUUFBUSxDQUFDRSxFQUFHLEVBQS9CO0FBQ0Q7O0FBQ0RILFVBQUFBLEdBQUcsQ0FBQ0UsR0FBRCxDQUFILEdBQVdELFFBQVEsQ0FBQ0csS0FBcEI7O0FBRUEsY0FBSUgsUUFBUSxDQUFDSCxPQUFiLEVBQXNCO0FBQ3BCekIsWUFBQUEsQ0FBQyxDQUFDZ0MsS0FBRixDQUFRTCxHQUFSLEVBQWEsS0FBS00sY0FBTCxDQUFvQkwsUUFBUSxDQUFDSCxPQUE3QixFQUFzQ0ksR0FBdEMsQ0FBYjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxhQUFPRixHQUFQO0FBQ0Q7Ozt5Q0FFb0JPLFEsRUFBVUMsVyxFQUFhQyxHLEVBQUtDLE8sRUFBUztBQUN4RCxVQUFJRCxHQUFKLEVBQVM7QUFDUEEsUUFBQUEsR0FBRyxDQUFDRSxHQUFKLEdBQVUsS0FBS0EsR0FBZjtBQUNBLGNBQU0sS0FBS0MsV0FBTCxDQUFpQkgsR0FBakIsQ0FBTjtBQUNEOztBQUNELFVBQUlJLE1BQU0sR0FBRyxLQUFLQyxRQUFsQixDQUx3RCxDQU14RDs7QUFDQSxVQUFJLEtBQUtDLGFBQUwsQ0FBbUJMLE9BQW5CLEVBQTRCSCxRQUE1QixDQUFKLEVBQTJDO0FBQ3pDLGFBQUtTLGlCQUFMLENBQXVCTixPQUF2QixFQUFnQ0gsUUFBaEM7O0FBQ0EsWUFBSSxDQUFDLEtBQUtPLFFBQVYsRUFBb0I7QUFDbEI7QUFDQTtBQUNFO0FBQ0EsZUFBS1YsS0FBTCxJQUNBLEtBQUtBLEtBQUwsQ0FBV2Esc0JBRFgsSUFFQSxLQUFLYixLQUFMLENBQVdhLHNCQUFYLEtBQ0UsS0FBS2IsS0FBTCxDQUFXYyxtQkFIYixJQUlBLEtBQUtkLEtBQUwsQ0FBV2UsYUFBWCxDQUF5QixLQUFLZixLQUFMLENBQVdjLG1CQUFwQyxDQU5GLEVBT0U7QUFDQSxrQkFBTUUsT0FBTyxHQUNYYixRQUFRLENBQUMsS0FBS2MsZ0JBQUwsRUFBRCxDQUFSLEdBQW9DZCxRQUFRLENBQUNlLE9BQTdDLEdBQXVELENBRHpEO0FBR0FULFlBQUFBLE1BQU0sR0FBRyxFQUFUOztBQUNBLGlCQUFLLElBQUlVLENBQUMsR0FBR0gsT0FBYixFQUFzQkcsQ0FBQyxHQUFHSCxPQUFPLEdBQUdiLFFBQVEsQ0FBQ2UsT0FBN0MsRUFBc0RDLENBQUMsRUFBdkQsRUFBMkQ7QUFDekRWLGNBQUFBLE1BQU0sQ0FBQ1csSUFBUCxDQUFZO0FBQ1YsaUJBQUMsS0FBS3BCLEtBQUwsQ0FBV2UsYUFBWCxDQUF5QixLQUFLZixLQUFMLENBQVdjLG1CQUFwQyxFQUNFTyxLQURILEdBQ1dGO0FBRkQsZUFBWjtBQUlEO0FBQ0YsV0FsQkQsTUFrQk87QUFDTFYsWUFBQUEsTUFBTSxHQUFHTixRQUFRLENBQUMsS0FBS2MsZ0JBQUwsRUFBRCxDQUFqQjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxVQUFJLEtBQUtLLGlCQUFMLEVBQUosRUFBOEI7QUFDNUIsZUFBT2hCLE9BQU8sQ0FBQ25CLEdBQVIsQ0FBWW9DLEdBQUcsSUFBSUEsR0FBRyxDQUFDQyxJQUF2QixDQUFQO0FBQ0Q7O0FBQ0QsVUFBSSxLQUFLQyxzQkFBTCxFQUFKLEVBQW1DO0FBQ2pDaEIsUUFBQUEsTUFBTSxHQUFHSCxPQUFUOztBQUNBLFlBQUlBLE9BQU8sSUFBSUEsT0FBTyxDQUFDLENBQUQsQ0FBbEIsSUFBeUJBLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBV0MsR0FBeEMsRUFBNkM7QUFDM0NFLFVBQUFBLE1BQU0sR0FBRyxLQUFLaUIsdUJBQUwsQ0FBNkJwQixPQUFPLENBQUMsQ0FBRCxDQUFQLENBQVdDLEdBQXhDLENBQVQ7QUFDRDs7QUFDRCxlQUFPRSxNQUFQO0FBQ0Q7O0FBQ0QsVUFBSSxLQUFLa0IsYUFBTCxFQUFKLEVBQTBCO0FBQ3hCLFlBQUksS0FBS0MsT0FBTCxDQUFhQyxHQUFqQixFQUFzQjtBQUNwQixpQkFBTyxLQUFLQyxpQkFBTCxDQUF1QnhCLE9BQXZCLENBQVA7QUFDRCxTQUh1QixDQUl4Qjs7O0FBQ0EsY0FBTXlCLFFBQVEsR0FBRyxLQUFLN0IsY0FBTCxDQUFvQixLQUFLMEIsT0FBTCxDQUFhbEMsT0FBakMsQ0FBakI7O0FBRUFZLFFBQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDbkIsR0FBUixDQUFZc0IsTUFBTSxJQUFJO0FBQzlCLGlCQUFPeEMsQ0FBQyxDQUFDK0QsU0FBRixDQUFZdkIsTUFBWixFQUFvQixDQUFDd0IsS0FBRCxFQUFRVCxJQUFSLEtBQWlCO0FBQzFDLGdCQUFJeEIsS0FBSjs7QUFDQSxnQkFBSXdCLElBQUksQ0FBQ1UsUUFBTCxDQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUN0QixvQkFBTUMsT0FBTyxHQUFHWCxJQUFJLENBQUNZLFdBQUwsQ0FBaUIsR0FBakIsQ0FBaEI7QUFFQXBDLGNBQUFBLEtBQUssR0FBRytCLFFBQVEsQ0FBQ1AsSUFBSSxDQUFDYSxNQUFMLENBQVksQ0FBWixFQUFlRixPQUFmLENBQUQsQ0FBaEI7QUFFQVgsY0FBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNhLE1BQUwsQ0FBWUYsT0FBTyxHQUFHLENBQXRCLENBQVA7QUFDRCxhQU5ELE1BTU87QUFDTG5DLGNBQUFBLEtBQUssR0FBRyxLQUFLNEIsT0FBTCxDQUFhNUIsS0FBckI7QUFDRDs7QUFFRCxrQkFBTXNDLFNBQVMsR0FBR3RDLEtBQUssQ0FDcEJ1QyxZQURlLEdBRWZDLFFBRmUsR0FHZkMsT0FIZSxDQUdQLElBSE8sRUFHRCxFQUhDLENBQWxCO0FBSUEsa0JBQU1DLFVBQVUsR0FBR3RDLFdBQVcsQ0FBQ2tDLFNBQUQsQ0FBWCxJQUEwQixFQUE3Qzs7QUFFQSxnQkFBSUksVUFBVSxJQUFJLEVBQUVsQixJQUFJLElBQUlrQixVQUFWLENBQWxCLEVBQXlDO0FBQ3ZDO0FBQ0F6RSxjQUFBQSxDQUFDLENBQUMwRSxNQUFGLENBQVMzQyxLQUFLLENBQUNlLGFBQWYsRUFBOEIsQ0FBQzZCLFNBQUQsRUFBWTlDLEdBQVosS0FBb0I7QUFDaEQsb0JBQUkwQixJQUFJLEtBQUsxQixHQUFULElBQWdCOEMsU0FBUyxDQUFDdkIsS0FBOUIsRUFBcUM7QUFDbkNHLGtCQUFBQSxJQUFJLEdBQUdvQixTQUFTLENBQUN2QixLQUFqQjtBQUNBLHlCQUFPLEtBQVA7QUFDRDtBQUNGLGVBTEQ7QUFNRDs7QUFFRCxtQkFBT3BDLE1BQU0sQ0FBQzRELFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ0wsVUFBckMsRUFBaURsQixJQUFqRCxJQUNILEtBQUt3QixZQUFMLENBQWtCTixVQUFVLENBQUNsQixJQUFELENBQTVCLEVBQW9DUyxLQUFwQyxDQURHLEdBRUhBLEtBRko7QUFHRCxXQS9CTSxDQUFQO0FBZ0NELFNBakNTLENBQVY7QUFtQ0EsZUFBTyxLQUFLSCxpQkFBTCxDQUF1QnhCLE9BQXZCLENBQVA7QUFDRDs7QUFDRCxVQUFJLEtBQUsyQyxxQkFBTCxFQUFKLEVBQWtDO0FBQ2hDLGVBQU8zQyxPQUFQO0FBQ0Q7O0FBQ0QsVUFBSSxLQUFLQyxHQUFMLENBQVMyQixRQUFULENBQWtCLG1CQUFsQixDQUFKLEVBQTRDO0FBQzFDLGVBQU8sS0FBS2dCLHNCQUFMLENBQTRCNUMsT0FBNUIsQ0FBUDtBQUNEOztBQUNELFVBQUksS0FBS0MsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQixtQkFBbEIsQ0FBSixFQUE0QztBQUMxQyxlQUFPNUIsT0FBUDtBQUNEOztBQUNELFVBQUksS0FBS0MsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQixtQkFBbEIsQ0FBSixFQUE0QztBQUMxQztBQUNBekIsUUFBQUEsTUFBTSxHQUFHLEVBQVQ7O0FBRUEsWUFBSTBDLEtBQUssQ0FBQ0MsT0FBTixDQUFjOUMsT0FBZCxDQUFKLEVBQTRCO0FBQzFCLGNBQUkrQyxZQUFKOztBQUNBLGVBQUssTUFBTUMsT0FBWCxJQUFzQmhELE9BQXRCLEVBQStCO0FBQzdCLGdCQUFJZ0QsT0FBTyxDQUFDQyxVQUFSLEtBQXVCLElBQTNCLEVBQWlDO0FBQy9CO0FBQ0FGLGNBQUFBLFlBQVksR0FBR0csU0FBZjtBQUNELGFBSEQsTUFHTyxJQUFJRixPQUFPLENBQUNDLFVBQVIsS0FBdUIsTUFBM0IsRUFBbUM7QUFDeEM7QUFDQUYsY0FBQUEsWUFBWSxHQUFHLElBQWY7QUFDRCxhQUhNLE1BR0E7QUFDTEEsY0FBQUEsWUFBWSxHQUFHQyxPQUFPLENBQUNDLFVBQXZCO0FBQ0Q7O0FBRUQ5QyxZQUFBQSxNQUFNLENBQUM2QyxPQUFPLENBQUM5QixJQUFULENBQU4sR0FBdUI7QUFDckJpQyxjQUFBQSxJQUFJLEVBQUVILE9BQU8sQ0FBQ0csSUFETztBQUVyQkMsY0FBQUEsU0FBUyxFQUFFSixPQUFPLENBQUNLLE9BQVIsS0FBb0IsQ0FGVjtBQUdyQk4sY0FBQUEsWUFIcUI7QUFJckJPLGNBQUFBLFVBQVUsRUFBRU4sT0FBTyxDQUFDTyxFQUFSLEtBQWU7QUFKTixhQUF2Qjs7QUFPQSxnQkFBSXBELE1BQU0sQ0FBQzZDLE9BQU8sQ0FBQzlCLElBQVQsQ0FBTixDQUFxQmlDLElBQXJCLEtBQThCLFlBQWxDLEVBQWdEO0FBQzlDaEQsY0FBQUEsTUFBTSxDQUFDNkMsT0FBTyxDQUFDOUIsSUFBVCxDQUFOLENBQXFCNkIsWUFBckIsR0FBb0M7QUFBRSxxQkFBSyxLQUFQO0FBQWMscUJBQUs7QUFBbkIsZ0JBQ2xDNUMsTUFBTSxDQUFDNkMsT0FBTyxDQUFDOUIsSUFBVCxDQUFOLENBQXFCNkIsWUFEYSxDQUFwQztBQUdEOztBQUVELGdCQUFJLE9BQU81QyxNQUFNLENBQUM2QyxPQUFPLENBQUM5QixJQUFULENBQU4sQ0FBcUI2QixZQUE1QixLQUE2QyxRQUFqRCxFQUEyRDtBQUN6RDVDLGNBQUFBLE1BQU0sQ0FBQzZDLE9BQU8sQ0FBQzlCLElBQVQsQ0FBTixDQUFxQjZCLFlBQXJCLEdBQW9DNUMsTUFBTSxDQUN4QzZDLE9BQU8sQ0FBQzlCLElBRGdDLENBQU4sQ0FFbEM2QixZQUZrQyxDQUVyQlosT0FGcUIsQ0FFYixJQUZhLEVBRVAsRUFGTyxDQUFwQztBQUdEO0FBQ0Y7QUFDRjs7QUFFRCxlQUFPaEMsTUFBUDtBQUNEOztBQUNELFVBQUksS0FBS0YsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQixzQkFBbEIsQ0FBSixFQUErQztBQUM3QyxlQUFPNUIsT0FBTyxDQUFDLENBQUQsQ0FBZDtBQUNEOztBQUNELFVBQUksS0FBS0MsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQixxQkFBbEIsQ0FBSixFQUE4QztBQUM1QyxlQUFPNUIsT0FBUDtBQUNEOztBQUNELFVBQUksS0FBS0MsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQix5QkFBbEIsQ0FBSixFQUFrRDtBQUNoRCxlQUFPNUIsT0FBUDtBQUNEOztBQUNELFVBQ0UsQ0FBQ2hDLFVBQVUsQ0FBQ3dGLFVBQVosRUFBd0J4RixVQUFVLENBQUN5RixVQUFuQyxFQUErQzdCLFFBQS9DLENBQXdELEtBQUtOLE9BQUwsQ0FBYTZCLElBQXJFLENBREYsRUFFRTtBQUNBLGVBQU90RCxRQUFRLENBQUNlLE9BQWhCO0FBQ0Q7O0FBQ0QsVUFBSSxLQUFLVSxPQUFMLENBQWE2QixJQUFiLEtBQXNCbkYsVUFBVSxDQUFDMEYsTUFBckMsRUFBNkM7QUFDM0MsZUFBT1IsU0FBUDtBQUNEOztBQUNELFVBQUksS0FBSzVCLE9BQUwsQ0FBYTZCLElBQWIsS0FBc0JuRixVQUFVLENBQUMyRixPQUFyQyxFQUE4QztBQUM1QyxlQUFPM0QsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXNEQsT0FBbEI7QUFDRDs7QUFDRCxVQUFJLEtBQUt0QyxPQUFMLENBQWE2QixJQUFiLEtBQXNCbkYsVUFBVSxDQUFDNkYsR0FBckMsRUFBMEM7QUFDeEMsZUFBTyxDQUFDN0QsT0FBRCxFQUFVSCxRQUFWLENBQVA7QUFDRDs7QUFDRCxVQUFJLEtBQUtpRSxhQUFMLE1BQXdCLEtBQUt6RCxhQUFMLEVBQTVCLEVBQWtEO0FBQ2hELGVBQU8sQ0FBQ0YsTUFBRCxFQUFTTixRQUFRLENBQUNlLE9BQWxCLENBQVA7QUFDRDs7QUFDRCxhQUFPVCxNQUFQO0FBQ0QsSyxDQUNEOzs7O3dCQUNJRixHLEVBQUs4RCxVLEVBQVk7QUFDbkI7QUFDQSxXQUFLOUQsR0FBTCxHQUFXbEMsYUFBYSxDQUFDaUcsb0JBQWQsQ0FDVC9ELEdBRFMsRUFFVCxLQUFLcUIsT0FBTCxDQUFhMkMsSUFGSixFQUdULEtBQUszQyxPQUFMLENBQWE0QyxPQUFiLElBQXdCLFFBSGYsRUFJVDtBQUFFQyxRQUFBQSxZQUFZLEVBQUU7QUFBaEIsT0FKUyxFQUtULENBTFMsQ0FBWDtBQU1BLFlBQU1DLE1BQU0sR0FBRyxLQUFLQyxpQkFBTCxFQUFmOztBQUNBLFlBQU1DLFFBQVEsR0FBRyxLQUFLQyxTQUFMLENBQWUsS0FBS3RFLEdBQXBCLEVBQXlCN0IsS0FBekIsRUFBZ0MyRixVQUFoQyxDQUFqQjs7QUFDQSxZQUFNUyxLQUFLLEdBQUcsSUFBZDtBQUNBLFlBQU1DLElBQUksR0FBRyxJQUFiO0FBQ0EsWUFBTUMsSUFBSSxHQUFHLEtBQUtDLFVBQWxCO0FBRUEsYUFBTyxJQUFJN0csT0FBSixDQUFZOEcsT0FBTyxJQUFJO0FBQzVCLGNBQU05RSxXQUFXLEdBQUcsRUFBcEIsQ0FENEIsQ0FFNUI7O0FBQ0EsY0FBTStFLFVBQVUsR0FBRyxNQUFNO0FBQ3ZCLGNBQUk1RSxHQUFHLENBQUM2RSxVQUFKLENBQWUsS0FBZixDQUFKLEVBQTJCO0FBQ3pCLG1CQUFPRixPQUFPLEVBQWQ7QUFDRDs7QUFDREEsVUFBQUEsT0FBTyxDQUNMLElBQUk5RyxPQUFKLENBQVksQ0FBQzhHLE9BQUQsRUFBVUcsTUFBVixLQUFxQjtBQUMvQixnQkFBSVgsTUFBTSxLQUFLLE1BQWYsRUFBdUI7QUFDckIsa0JBQUksT0FBT00sSUFBSSxDQUFDTSxJQUFaLEtBQXFCLFVBQXpCLEVBQXFDO0FBQ25DTixnQkFBQUEsSUFBSSxDQUFDTSxJQUFMLENBQ0UsQ0FBQztBQUFFL0Usa0JBQUFBLEdBQUcsRUFBRXdFLElBQUksQ0FBQ3hFLEdBQVo7QUFBaUJnRixrQkFBQUEsSUFBSSxFQUFFO0FBQXZCLGlCQUFELENBREYsRUFFRSxLQUZGLEVBR0UsQ0FBQ0MsY0FBRCxFQUFpQmxGLE9BQWpCLEtBQTZCO0FBQzNCLHNCQUFJO0FBQ0ZzRSxvQkFBQUEsUUFBUSxHQUROLENBRUY7O0FBQ0F0RSxvQkFBQUEsT0FBTyxHQUFHd0UsS0FBSyxDQUFDVyxjQUFOLENBQXFCbkYsT0FBTyxDQUFDLENBQUQsQ0FBNUIsQ0FBVixDQUhFLENBSUY7QUFDQTs7QUFDQTRFLG9CQUFBQSxPQUFPLENBQ0xKLEtBQUssQ0FBQ1ksb0JBQU4sQ0FDRVgsSUFERixFQUVFM0UsV0FGRixFQUdFb0YsY0FIRixFQUlFbEYsT0FKRixDQURLLENBQVA7QUFRQTtBQUNELG1CQWZELENBZUUsT0FBT3FGLEtBQVAsRUFBYztBQUNkTixvQkFBQUEsTUFBTSxDQUFDTSxLQUFELENBQU47QUFDRDtBQUNGLGlCQXRCSDtBQXdCRCxlQXpCRCxNQXlCTztBQUNMVCxnQkFBQUEsT0FBTztBQUNSO0FBQ0YsYUE3QkQsTUE2Qk87QUFDTEYsY0FBQUEsSUFBSSxDQUFDWSxXQUFMLENBQWlCLFVBQVNDLENBQVQsRUFBWTtBQUMzQjtBQUNBO0FBQ0Esb0JBQUlDLGVBQWUsR0FBRyxVQUFTN0gsQ0FBVCxFQUFZcUMsT0FBWixFQUFxQjtBQUN6QyxzQkFBSTtBQUNGc0Usb0JBQUFBLFFBQVEsR0FETixDQUVGO0FBQ0E7O0FBQ0Esd0JBQUl0RSxPQUFPLENBQUN5RixZQUFaLEVBQTBCO0FBQ3hCLDBCQUFJO0FBQ0ZoQix3QkFBQUEsSUFBSSxDQUFDQSxJQUFJLENBQUM5RCxnQkFBTCxFQUFELENBQUosR0FBZ0NYLE9BQU8sQ0FBQzBGLFFBQXhDO0FBQ0QsdUJBRkQsQ0FFRSxPQUFPQyxDQUFQLEVBQVU7QUFDViwrQkFBT2xCLElBQUksQ0FBQ0EsSUFBSSxDQUFDOUQsZ0JBQUwsRUFBRCxDQUFYO0FBQ0Q7QUFDRjs7QUFDRDhELG9CQUFBQSxJQUFJLENBQUM3RCxPQUFMLEdBQWVaLE9BQU8sQ0FBQ3lGLFlBQXZCO0FBQ0F6RixvQkFBQUEsT0FBTyxHQUFHd0UsS0FBSyxDQUFDVyxjQUFOLENBQXFCbkYsT0FBckIsQ0FBVjtBQUNBNEUsb0JBQUFBLE9BQU8sQ0FDTEosS0FBSyxDQUFDWSxvQkFBTixDQUNFWCxJQURGLEVBRUUzRSxXQUZGLEVBR0VvRCxTQUhGLEVBSUVsRCxPQUpGLENBREssQ0FBUDtBQVFBO0FBQ0QsbUJBdEJELENBc0JFLE9BQU9xRixLQUFQLEVBQWM7QUFDZGpILG9CQUFBQSxLQUFLLENBQUNpSCxLQUFELENBQUw7QUFDQU4sb0JBQUFBLE1BQU0sQ0FBQ00sS0FBRCxDQUFOO0FBQ0Q7QUFDRixpQkEzQkQsQ0FIMkIsQ0ErQjNCOzs7QUFDQSxvQkFBSU8sYUFBYSxHQUFHLFVBQVNqSSxDQUFULEVBQVlvQyxHQUFaLEVBQWlCO0FBQ25DLHNCQUFJO0FBQ0Z1RSxvQkFBQUEsUUFBUSxHQUROLENBRUY7QUFDQTs7QUFDQU0sb0JBQUFBLE9BQU8sQ0FBQ0osS0FBSyxDQUFDWSxvQkFBTixDQUEyQlgsSUFBM0IsRUFBaUMzRSxXQUFqQyxFQUE4Q0MsR0FBOUMsQ0FBRCxDQUFQO0FBQ0QsbUJBTEQsQ0FLRSxPQUFPc0YsS0FBUCxFQUFjO0FBQ2ROLG9CQUFBQSxNQUFNLENBQUNNLEtBQUQsQ0FBTjtBQUNEO0FBQ0YsaUJBVEQ7O0FBVUEsb0JBQUksT0FBT1gsSUFBSSxDQUFDTSxJQUFaLEtBQXFCLFVBQXpCLEVBQXFDO0FBQ25DakIsa0JBQUFBLFVBQVUsR0FBR0EsVUFBVSxJQUFJLEVBQTNCO0FBQ0QsaUJBRkQsTUFFT0EsVUFBVSxHQUFHLEVBQWI7O0FBQ1B3QixnQkFBQUEsQ0FBQyxDQUFDVixVQUFGLENBQ0VKLElBQUksQ0FBQ3hFLEdBRFAsRUFFRThELFVBRkYsRUFHRXlCLGVBSEYsRUFJRUksYUFKRjtBQU1ELGVBbkREO0FBb0REO0FBQ0YsV0FwRkQsQ0FESyxDQUFQO0FBdUZBLGlCQUFPLElBQVA7QUFDRCxTQTVGRDs7QUE4RkEsWUFBSXhCLE1BQU0sS0FBSyxLQUFYLElBQW9CLE9BQU9NLElBQUksQ0FBQ00sSUFBWixLQUFxQixVQUE3QyxFQUF5RDtBQUN2RCxjQUFJYSxVQUFVLEdBQUcsRUFBakI7O0FBQ0EsY0FBSSxLQUFLdkUsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWF1RSxVQUFqQyxFQUE2QztBQUMzQ0EsWUFBQUEsVUFBVSxHQUFHLEtBQUt2RSxPQUFMLENBQWF1RSxVQUExQjtBQUNELFdBRkQsTUFFTyxJQUFJLGdCQUFnQmIsSUFBaEIsQ0FBcUIsS0FBSy9FLEdBQTFCLENBQUosRUFBb0M7QUFDekM0RixZQUFBQSxVQUFVLENBQUMvRSxJQUFYLENBQWdCLGdCQUFnQmtFLElBQWhCLENBQXFCLEtBQUsvRSxHQUExQixFQUErQixDQUEvQixDQUFoQjtBQUNELFdBTnNELENBUXZEOzs7QUFDQTRGLFVBQUFBLFVBQVUsR0FBR0EsVUFBVSxDQUFDM0csTUFBWCxDQUNYOEMsU0FBUyxJQUNQLEVBQUVBLFNBQVMsSUFBSWxDLFdBQWYsS0FBK0JrQyxTQUFTLEtBQUssZUFGcEMsQ0FBYjs7QUFJQSxjQUFJLENBQUM2RCxVQUFVLENBQUNDLE1BQWhCLEVBQXdCO0FBQ3RCLG1CQUFPakIsVUFBVSxFQUFqQjtBQUNEOztBQUNELGlCQUFPLElBQUkvRyxPQUFKLENBQVk4RyxPQUFPLElBQUk7QUFDNUIsZ0JBQUksT0FBT0YsSUFBSSxDQUFDTSxJQUFaLEtBQXFCLFVBQXpCLEVBQXFDO0FBQ25DLG9CQUFNZSxXQUFXLEdBQUdGLFVBQVUsQ0FBQ2hILEdBQVgsQ0FBZW1ELFNBQVMsSUFBSTtBQUM5Q0EsZ0JBQUFBLFNBQVMsR0FBR0EsU0FBUyxDQUFDRyxPQUFWLENBQWtCLElBQWxCLEVBQXdCLEVBQXhCLENBQVo7QUFDQXJDLGdCQUFBQSxXQUFXLENBQUNrQyxTQUFELENBQVgsR0FBeUIsRUFBekI7QUFDQSx1QkFBTyxDQUFFLHVCQUFzQkEsU0FBVSxLQUFsQyxFQUF3Q0EsU0FBeEMsQ0FBUDtBQUNELGVBSm1CLENBQXBCO0FBS0EwQyxjQUFBQSxJQUFJLENBQUNNLElBQUwsQ0FDRWUsV0FBVyxDQUFDbEgsR0FBWixDQUFnQm1ILE1BQU0sS0FBSztBQUN6Qi9GLGdCQUFBQSxHQUFHLEVBQUUrRixNQUFNLENBQUMsQ0FBRCxDQURjO0FBRXpCZixnQkFBQUEsSUFBSSxFQUFFO0FBRm1CLGVBQUwsQ0FBdEIsQ0FERixFQUtFLEtBTEYsRUFNRSxDQUFDbEYsR0FBRCxFQUFNQyxPQUFOLEtBQWtCO0FBQ2hCLG9CQUFJLENBQUNELEdBQUwsRUFBVTtBQUNSLHVCQUFLLElBQUljLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdrRixXQUFXLENBQUNELE1BQWhDLEVBQXdDakYsQ0FBQyxFQUF6QyxFQUE2QztBQUMzQywwQkFBTW1CLFNBQVMsR0FBRytELFdBQVcsQ0FBQ2xGLENBQUQsQ0FBWCxDQUFlLENBQWYsQ0FBbEI7O0FBQ0EseUJBQUssTUFBTVYsTUFBWCxJQUFxQkgsT0FBTyxDQUFDYSxDQUFELENBQVAsQ0FBV29GLElBQWhDLEVBQXNDO0FBQ3BDbkcsc0JBQUFBLFdBQVcsQ0FBQ2tDLFNBQUQsQ0FBWCxDQUF1QjdCLE1BQU0sQ0FBQ2UsSUFBOUIsSUFBc0NmLE1BQU0sQ0FBQ2dELElBQTdDO0FBQ0Q7QUFDRjtBQUNGOztBQUNEeUIsZ0JBQUFBLE9BQU87QUFDUixlQWhCSDtBQWtCRCxhQXhCRCxNQXdCTztBQUNMRixjQUFBQSxJQUFJLENBQUNZLFdBQUwsQ0FBaUIsVUFBU0MsQ0FBVCxFQUFZO0FBQzNCTSxnQkFBQUEsVUFBVSxDQUFDSyxPQUFYLENBQW1CLENBQUNsRSxTQUFELEVBQVltRSxLQUFaLEtBQXNCO0FBQ3ZDWixrQkFBQUEsQ0FBQyxDQUFDVixVQUFGLENBQ0csaURBQWdEN0MsU0FBVSxvQkFEN0QsRUFFRSxFQUZGLEVBR0UsVUFBU3JFLENBQVQsRUFBWXdDLE1BQVosRUFBb0I7QUFDbEIsMEJBQU1pRyxLQUFLLEdBQUdqRyxNQUFNLENBQUM4RixJQUFQLENBQVluSCxJQUFaLENBQWlCLENBQWpCLENBQWQ7O0FBQ0Esd0JBQ0UsT0FBT3NILEtBQVAsS0FBaUIsUUFBakIsSUFDQSxTQUFTQSxLQURULElBRUEsT0FBT0EsS0FBSyxDQUFDbkcsR0FBYixLQUFxQixRQUh2QixFQUlFO0FBQ0FILHNCQUFBQSxXQUFXLENBQUNrQyxTQUFELENBQVgsR0FBeUIsRUFBekIsQ0FEQSxDQUVBOztBQUNBLDRCQUFNcUUsT0FBTyxHQUFHRCxLQUFLLENBQUNuRyxHQUFOLENBQVVxRyxLQUFWLENBQ2Qsb0NBRGMsQ0FBaEIsQ0FIQSxDQU1BOztBQUNBLDJCQUFLLE1BQU1DLEdBQVgsSUFBa0JGLE9BQWxCLEVBQTJCO0FBQ3pCLDhCQUFNLENBQUNHLE9BQUQsRUFBVUMsT0FBVixJQUFxQkYsR0FBRyxDQUMzQkcsSUFEd0IsR0FFeEJ2RSxPQUZ3QixDQUVoQixNQUZnQixFQUVSLEdBRlEsRUFHeEJBLE9BSHdCLENBR2hCLElBSGdCLEVBR1YsRUFIVSxFQUl4QndFLEtBSndCLENBSWxCLEdBSmtCLENBQTNCO0FBS0E3Ryx3QkFBQUEsV0FBVyxDQUFDa0MsU0FBRCxDQUFYLENBQXVCd0UsT0FBdkIsSUFBa0NDLE9BQU8sQ0FBQ0MsSUFBUixFQUFsQztBQUNEO0FBQ0YscUJBckJpQixDQXNCbEI7O0FBQ0QsbUJBMUJIO0FBNEJBLHNCQUFJUCxLQUFLLEtBQUtOLFVBQVUsQ0FBQ0MsTUFBWCxHQUFvQixDQUFsQyxFQUFxQ2xCLE9BQU87QUFDN0MsaUJBOUJEO0FBK0JELGVBaENEO0FBaUNEO0FBQ0YsV0E1RE0sRUE0REpnQyxJQTVESSxDQTREQy9CLFVBNURELENBQVA7QUE2REQ7O0FBQ0QsZUFBT0EsVUFBVSxFQUFqQjtBQUNELE9BaExNLENBQVA7QUFpTEQ7Ozs0Q0FFdUI1RSxHLEVBQUs7QUFDM0IsVUFBSTRHLFdBQVcsR0FBRzVHLEdBQUcsQ0FBQzBHLEtBQUosQ0FBVSxhQUFWLENBQWxCO0FBQ0EsVUFBSUcsa0JBQUosRUFBd0JDLGtCQUF4QixFQUE0Q0MsWUFBNUMsRUFBMERDLFlBQTFEO0FBQ0FKLE1BQUFBLFdBQVcsQ0FBQ0ssTUFBWixDQUFtQixDQUFuQixFQUFzQixDQUF0QjtBQUNBTCxNQUFBQSxXQUFXLEdBQUdBLFdBQVcsQ0FBQ2hJLEdBQVosQ0FBZ0JzSSxhQUFhLElBQUk7QUFDN0M7QUFDQSxZQUFJQSxhQUFhLENBQUN2RixRQUFkLENBQXVCLFlBQXZCLENBQUosRUFBMEM7QUFDeEM7QUFDQW9GLFVBQUFBLFlBQVksR0FBR0csYUFBYSxDQUFDYixLQUFkLENBQ2IsZ0VBRGEsQ0FBZjtBQUdBVyxVQUFBQSxZQUFZLEdBQUdFLGFBQWEsQ0FBQ2IsS0FBZCxDQUNiLGdFQURhLENBQWY7O0FBSUEsY0FBSVUsWUFBSixFQUFrQjtBQUNoQkEsWUFBQUEsWUFBWSxHQUFHQSxZQUFZLENBQUMsQ0FBRCxDQUEzQjtBQUNEOztBQUVELGNBQUlDLFlBQUosRUFBa0I7QUFDaEJBLFlBQUFBLFlBQVksR0FBR0EsWUFBWSxDQUFDLENBQUQsQ0FBM0I7QUFDRDs7QUFFRCxnQkFBTUcsZUFBZSxHQUFHLHdEQUF4QjtBQUNBLGdCQUFNQyxtQkFBbUIsR0FBR0YsYUFBYSxDQUN0Q2IsS0FEeUIsQ0FDbkJjLGVBRG1CLEVBQ0YsQ0FERSxFQUV6QlQsS0FGeUIsQ0FFbkIsR0FGbUIsQ0FBNUI7QUFHQUcsVUFBQUEsa0JBQWtCLEdBQUdqSixLQUFLLENBQUN5SixXQUFOLENBQWtCRCxtQkFBbUIsQ0FBQyxDQUFELENBQXJDLENBQXJCO0FBQ0EsY0FBSUUsV0FBVyxHQUFHRixtQkFBbUIsQ0FBQyxDQUFELENBQXJDO0FBQ0FFLFVBQUFBLFdBQVcsR0FBR0EsV0FBVyxDQUFDcEYsT0FBWixDQUFvQixRQUFwQixFQUE4QixFQUE5QixFQUFrQ3dFLEtBQWxDLENBQXdDLElBQXhDLENBQWQ7QUFDQUksVUFBQUEsa0JBQWtCLEdBQUdRLFdBQVcsQ0FBQzFJLEdBQVosQ0FBZ0IySSxNQUFNLElBQ3pDM0osS0FBSyxDQUFDeUosV0FBTixDQUFrQkUsTUFBbEIsQ0FEbUIsQ0FBckI7QUFHRDs7QUFFRCxjQUFNQyxtQkFBbUIsR0FBR04sYUFBYSxDQUFDYixLQUFkLENBQzFCLDRDQUQwQixFQUUxQixDQUYwQixDQUE1QjtBQUdBYSxRQUFBQSxhQUFhLEdBQUdBLGFBQWEsQ0FBQ2hGLE9BQWQsQ0FBc0IsUUFBdEIsRUFBZ0MsRUFBaEMsQ0FBaEI7QUFDQSxjQUFNdUYsVUFBVSxHQUFHUCxhQUFhLENBQUNSLEtBQWQsQ0FBb0IsR0FBcEIsQ0FBbkI7O0FBRUEsWUFBSWUsVUFBVSxDQUFDLENBQUQsQ0FBVixLQUFrQixTQUFsQixJQUErQkEsVUFBVSxDQUFDLENBQUQsQ0FBVixLQUFrQixTQUFyRCxFQUFnRTtBQUM5REEsVUFBQUEsVUFBVSxDQUFDLENBQUQsQ0FBVixJQUFpQixNQUFqQjtBQUNEOztBQUVELGVBQU87QUFDTEMsVUFBQUEsY0FBYyxFQUFFOUosS0FBSyxDQUFDeUosV0FBTixDQUFrQkksVUFBVSxDQUFDLENBQUQsQ0FBNUIsQ0FEWDtBQUVMRSxVQUFBQSxjQUFjLEVBQUVGLFVBQVUsQ0FBQyxDQUFELENBRnJCO0FBR0xWLFVBQUFBLFlBSEs7QUFJTEMsVUFBQUEsWUFKSztBQUtMaEgsVUFBQUEsR0FBRyxFQUFFQSxHQUFHLENBQUNrQyxPQUFKLENBQVksSUFBWixFQUFrQixHQUFsQixDQUxBO0FBS3dCO0FBQzdCc0YsVUFBQUEsbUJBTks7QUFPTFgsVUFBQUEsa0JBUEs7QUFRTEMsVUFBQUE7QUFSSyxTQUFQO0FBVUQsT0FuRGEsQ0FBZDtBQXFEQSxhQUFPRixXQUFQO0FBQ0Q7OztpQ0FFWTFELEksRUFBTXhCLEssRUFBTztBQUN4QixVQUFJd0IsSUFBSSxDQUFDdkIsUUFBTCxDQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUN0QjtBQUNBdUIsUUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNwQixNQUFMLENBQVksQ0FBWixFQUFlb0IsSUFBSSxDQUFDMEUsT0FBTCxDQUFhLEdBQWIsQ0FBZixDQUFQO0FBQ0Q7O0FBQ0QxRSxNQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ2hCLE9BQUwsQ0FBYSxVQUFiLEVBQXlCLEVBQXpCLEVBQTZCQSxPQUE3QixDQUFxQyxVQUFyQyxFQUFpRCxFQUFqRCxDQUFQO0FBQ0FnQixNQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ3VELElBQUwsR0FBWW9CLFdBQVosRUFBUDtBQUNBLFlBQU1DLEtBQUssR0FBRzdKLFdBQVcsQ0FBQzhKLEdBQVosQ0FBZ0I3RSxJQUFoQixDQUFkOztBQUNBLFVBQUl4QixLQUFLLEtBQUssSUFBVixJQUFrQm9HLEtBQXRCLEVBQTZCO0FBQzNCLGVBQU9BLEtBQUssQ0FBQ3BHLEtBQUQsRUFBUTtBQUFFc0csVUFBQUEsUUFBUSxFQUFFLEtBQUtDLFNBQUwsQ0FBZTVHLE9BQWYsQ0FBdUIyRztBQUFuQyxTQUFSLENBQVo7QUFDRDs7QUFDRCxhQUFPdEcsS0FBUDtBQUNEOzs7Z0NBRVc1QixHLEVBQUs7QUFDZixjQUFRQSxHQUFHLENBQUNvSSxJQUFaO0FBQ0UsYUFBSyxtQkFBTDtBQUEwQjtBQUN4QixnQkFBSXBJLEdBQUcsQ0FBQ3FJLE9BQUosQ0FBWXhHLFFBQVosQ0FBcUIsK0JBQXJCLENBQUosRUFBMkQ7QUFDekQscUJBQU8sSUFBSTNELGVBQWUsQ0FBQ29LLHlCQUFwQixDQUE4QztBQUNuREMsZ0JBQUFBLE1BQU0sRUFBRXZJO0FBRDJDLGVBQTlDLENBQVA7QUFHRDs7QUFFRCxnQkFBSXdJLE1BQU0sR0FBRyxFQUFiLENBUHdCLENBU3hCOztBQUNBLGdCQUFJakMsS0FBSyxHQUFHdkcsR0FBRyxDQUFDcUksT0FBSixDQUFZOUIsS0FBWixDQUFrQixtQkFBbEIsQ0FBWjs7QUFDQSxnQkFBSUEsS0FBSyxLQUFLLElBQVYsSUFBa0JBLEtBQUssQ0FBQ1IsTUFBTixJQUFnQixDQUF0QyxFQUF5QztBQUN2Q3lDLGNBQUFBLE1BQU0sR0FBR2pDLEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU0ssS0FBVCxDQUFlLElBQWYsQ0FBVDtBQUNELGFBRkQsTUFFTztBQUNMO0FBQ0FMLGNBQUFBLEtBQUssR0FBR3ZHLEdBQUcsQ0FBQ3FJLE9BQUosQ0FBWTlCLEtBQVosQ0FBa0IsZ0NBQWxCLENBQVI7O0FBQ0Esa0JBQUlBLEtBQUssS0FBSyxJQUFWLElBQWtCQSxLQUFLLENBQUNSLE1BQU4sSUFBZ0IsQ0FBdEMsRUFBeUM7QUFDdkN5QyxnQkFBQUEsTUFBTSxHQUFHakMsS0FBSyxDQUFDLENBQUQsQ0FBTCxDQUNOSyxLQURNLENBQ0EsSUFEQSxFQUVOOUgsR0FGTSxDQUVGMkosZUFBZSxJQUFJQSxlQUFlLENBQUM3QixLQUFoQixDQUFzQixHQUF0QixFQUEyQixDQUEzQixDQUZqQixDQUFUO0FBR0Q7QUFDRjs7QUFFRCxrQkFBTThCLE1BQU0sR0FBRyxFQUFmO0FBQ0EsZ0JBQUlMLE9BQU8sR0FBRyxrQkFBZDs7QUFFQSxpQkFBSyxNQUFNckgsS0FBWCxJQUFvQndILE1BQXBCLEVBQTRCO0FBQzFCRSxjQUFBQSxNQUFNLENBQUMzSCxJQUFQLENBQ0UsSUFBSTdDLGVBQWUsQ0FBQ3lLLG1CQUFwQixDQUNFLEtBQUtDLCtCQUFMLENBQXFDNUgsS0FBckMsQ0FERixFQUVFLGtCQUZGLEVBRXNCO0FBQ3BCQSxjQUFBQSxLQUhGLEVBSUUsS0FBS1gsUUFBTCxJQUFpQixLQUFLQSxRQUFMLENBQWNXLEtBQWQsQ0FKbkIsRUFLRSxLQUFLWCxRQUxQLEVBTUUsWUFORixDQURGO0FBVUQ7O0FBRUQsZ0JBQUksS0FBS1YsS0FBVCxFQUFnQjtBQUNkL0IsY0FBQUEsQ0FBQyxDQUFDMEUsTUFBRixDQUFTLEtBQUszQyxLQUFMLENBQVdrSixVQUFwQixFQUFnQ2xCLFVBQVUsSUFBSTtBQUM1QyxvQkFBSS9KLENBQUMsQ0FBQ2tMLE9BQUYsQ0FBVW5CLFVBQVUsQ0FBQ2EsTUFBckIsRUFBNkJBLE1BQTdCLEtBQXdDLENBQUMsQ0FBQ2IsVUFBVSxDQUFDb0IsR0FBekQsRUFBOEQ7QUFDNURWLGtCQUFBQSxPQUFPLEdBQUdWLFVBQVUsQ0FBQ29CLEdBQXJCO0FBQ0EseUJBQU8sS0FBUDtBQUNEO0FBQ0YsZUFMRDtBQU1EOztBQUVELG1CQUFPLElBQUk3SyxlQUFlLENBQUM4SyxxQkFBcEIsQ0FBMEM7QUFDL0NYLGNBQUFBLE9BRCtDO0FBRS9DSyxjQUFBQSxNQUYrQztBQUcvQ0gsY0FBQUEsTUFBTSxFQUFFdkksR0FIdUM7QUFJL0N3SSxjQUFBQTtBQUorQyxhQUExQyxDQUFQO0FBTUQ7O0FBQ0QsYUFBSyxhQUFMO0FBQ0UsaUJBQU8sSUFBSXRLLGVBQWUsQ0FBQytLLFlBQXBCLENBQWlDakosR0FBakMsQ0FBUDs7QUFFRjtBQUNFLGlCQUFPLElBQUk5QixlQUFlLENBQUNnTCxhQUFwQixDQUFrQ2xKLEdBQWxDLENBQVA7QUE1REo7QUE4REQ7OzsyQ0FFc0JtSixJLEVBQU07QUFDM0I7QUFDQSxhQUFPcEwsT0FBTyxDQUFDZSxHQUFSLENBQVlxSyxJQUFJLENBQUNDLE9BQUwsRUFBWixFQUE0QnJLLElBQUksSUFBSTtBQUN6Q0EsUUFBQUEsSUFBSSxDQUFDeUosTUFBTCxHQUFjLEVBQWQ7QUFDQXpKLFFBQUFBLElBQUksQ0FBQ3NLLE9BQUwsR0FBZSxLQUFmO0FBQ0F0SyxRQUFBQSxJQUFJLENBQUN1SyxNQUFMLEdBQWMsQ0FBQyxDQUFDdkssSUFBSSxDQUFDdUssTUFBckI7QUFDQXZLLFFBQUFBLElBQUksQ0FBQzZJLGNBQUwsR0FBc0I3SSxJQUFJLENBQUNvQyxJQUEzQjtBQUNBLGVBQU8sS0FBS29JLEdBQUwsQ0FBVSx1QkFBc0J4SyxJQUFJLENBQUNvQyxJQUFLLEtBQTFDLEVBQWdEMEYsSUFBaEQsQ0FBcURQLE9BQU8sSUFBSTtBQUNyRSxlQUFLLE1BQU1tQixNQUFYLElBQXFCbkIsT0FBckIsRUFBOEI7QUFDNUJ2SCxZQUFBQSxJQUFJLENBQUN5SixNQUFMLENBQVlmLE1BQU0sQ0FBQytCLEtBQW5CLElBQTRCO0FBQzFCakgsY0FBQUEsU0FBUyxFQUFFa0YsTUFBTSxDQUFDdEcsSUFEUTtBQUUxQjRFLGNBQUFBLE1BQU0sRUFBRTVDLFNBRmtCO0FBRzFCc0csY0FBQUEsS0FBSyxFQUFFdEc7QUFIbUIsYUFBNUI7QUFLRDs7QUFFRCxpQkFBT3BFLElBQVA7QUFDRCxTQVZNLENBQVA7QUFXRCxPQWhCTSxDQUFQO0FBaUJEOzs7d0NBRW1CO0FBQ2xCLFVBQ0UsS0FBS21CLEdBQUwsQ0FBUzJCLFFBQVQsQ0FBa0IsUUFBbEIsS0FDQSxLQUFLM0IsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQixRQUFsQixDQURBLElBRUEsS0FBSzNCLEdBQUwsQ0FBUzJCLFFBQVQsQ0FBa0IsVUFBbEIsQ0FGQSxJQUdBLEtBQUszQixHQUFMLENBQVMyQixRQUFULENBQWtCLGFBQWxCLENBSkYsRUFLRTtBQUNBLGVBQU8sTUFBUCxDQURBLENBQ2U7QUFDaEI7O0FBQ0QsVUFDRSxLQUFLdkIsYUFBTCxNQUNBLEtBQUt5RCxhQUFMLEVBREEsSUFFQSxLQUFLMkYsaUJBQUwsRUFGQSxJQUdBLEtBQUt4SixHQUFMLENBQVN5SixXQUFULEdBQXVCOUgsUUFBdkIsQ0FBZ0MseUJBQXlCOEgsV0FBekIsRUFBaEMsQ0FIQSxJQUlBLEtBQUtwSSxPQUFMLENBQWE2QixJQUFiLEtBQXNCbkYsVUFBVSxDQUFDeUYsVUFMbkMsRUFNRTtBQUNBLGVBQU8sS0FBUDtBQUNEOztBQUNELGFBQU8sS0FBUDtBQUNEOzs7bUNBQ2N6RCxPLEVBQVM7QUFDdEIsVUFBSSxDQUFDQSxPQUFPLENBQUNpRyxJQUFiLEVBQW1CLE9BQU8sRUFBUDtBQUNuQixVQUFJLFdBQVdqRyxPQUFYLElBQXNCLFlBQVlBLE9BQU8sQ0FBQ2lHLElBQTlDLEVBQ0UsT0FBT2pHLE9BQU8sQ0FBQzJKLEtBQVIsSUFBaUIzSixPQUFPLENBQUNpRyxJQUFSLENBQWEyRCxNQUFyQztBQUNGLFVBQUksQ0FBQzVKLE9BQU8sQ0FBQ2lHLElBQVIsQ0FBYW5ILElBQWxCLEVBQXdCLE9BQU9rQixPQUFPLENBQUNpRyxJQUFmO0FBQ3hCLFlBQU1pRCxJQUFJLEdBQUcsSUFBSXJHLEtBQUosQ0FBVTdDLE9BQU8sQ0FBQ2lHLElBQVIsQ0FBYUgsTUFBdkIsQ0FBYjs7QUFDQSxXQUFLLElBQUlqRixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHYixPQUFPLENBQUNpRyxJQUFSLENBQWFILE1BQWpDLEVBQXlDakYsQ0FBQyxFQUExQyxFQUE4QztBQUM1Q3FJLFFBQUFBLElBQUksQ0FBQ3JJLENBQUQsQ0FBSixHQUFVYixPQUFPLENBQUNpRyxJQUFSLENBQWFuSCxJQUFiLENBQWtCK0IsQ0FBbEIsQ0FBVjtBQUNEOztBQUNELGFBQU9xSSxJQUFQO0FBQ0Q7Ozt5Q0FwbEIyQmpKLEcsRUFBSzRKLE0sRUFBUTNGLE8sRUFBUztBQUNoRCxVQUFJNEYsU0FBSjs7QUFDQSxVQUFJakgsS0FBSyxDQUFDQyxPQUFOLENBQWMrRyxNQUFkLENBQUosRUFBMkI7QUFDekJDLFFBQUFBLFNBQVMsR0FBRyxFQUFaO0FBQ0FELFFBQUFBLE1BQU0sQ0FBQzNELE9BQVAsQ0FBZSxDQUFDNkQsQ0FBRCxFQUFJbEosQ0FBSixLQUFVO0FBQ3ZCaUosVUFBQUEsU0FBUyxDQUFFLElBQUdqSixDQUFDLEdBQUcsQ0FBRSxFQUFYLENBQVQsR0FBeUJrSixDQUF6QjtBQUNELFNBRkQ7QUFHQTlKLFFBQUFBLEdBQUcsR0FBR2xDLGFBQWEsQ0FBQ2lHLG9CQUFkLENBQW1DL0QsR0FBbkMsRUFBd0M0SixNQUF4QyxFQUFnRDNGLE9BQWhELEVBQXlEO0FBQzdEOEYsVUFBQUEsZ0JBQWdCLEVBQUU7QUFEMkMsU0FBekQsRUFFSCxDQUZHLENBQU47QUFHRCxPQVJELE1BUU87QUFDTEYsUUFBQUEsU0FBUyxHQUFHLEVBQVo7O0FBQ0EsWUFBSSxPQUFPRCxNQUFQLEtBQWtCLFFBQXRCLEVBQWdDO0FBQzlCLGVBQUssTUFBTUksQ0FBWCxJQUFnQnRMLE1BQU0sQ0FBQ00sSUFBUCxDQUFZNEssTUFBWixDQUFoQixFQUFxQztBQUNuQ0MsWUFBQUEsU0FBUyxDQUFFLElBQUdHLENBQUUsRUFBUCxDQUFULEdBQXFCSixNQUFNLENBQUNJLENBQUQsQ0FBM0I7QUFDRDtBQUNGOztBQUNEaEssUUFBQUEsR0FBRyxHQUFHbEMsYUFBYSxDQUFDaUcsb0JBQWQsQ0FBbUMvRCxHQUFuQyxFQUF3QzRKLE1BQXhDLEVBQWdEM0YsT0FBaEQsRUFBeUQ7QUFDN0Q4RixVQUFBQSxnQkFBZ0IsRUFBRTtBQUQyQyxTQUF6RCxFQUVILENBRkcsQ0FBTjtBQUdEOztBQUNELGFBQU8sQ0FBQy9KLEdBQUQsRUFBTTZKLFNBQU4sQ0FBUDtBQUNEOzs7O0VBbkNpQi9MLGE7O0FBb21CcEJtTSxNQUFNLENBQUNDLE9BQVAsR0FBaUJoTCxLQUFqQjtBQUNBK0ssTUFBTSxDQUFDQyxPQUFQLENBQWVoTCxLQUFmLEdBQXVCQSxLQUF2QjtBQUNBK0ssTUFBTSxDQUFDQyxPQUFQLENBQWVDLE9BQWYsR0FBeUJqTCxLQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XHJcbmNvbnN0IFV0aWxzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xyXG5jb25zdCBQcm9taXNlID0gcmVxdWlyZShcIi4uLy4uL3Byb21pc2VcIik7XHJcbmNvbnN0IEFic3RyYWN0UXVlcnkgPSByZXF1aXJlKFwiLi4vYWJzdHJhY3QvcXVlcnlcIik7XHJcbmNvbnN0IFF1ZXJ5VHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vcXVlcnktdHlwZXNcIik7XHJcbmNvbnN0IHNlcXVlbGl6ZUVycm9ycyA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvcnNcIik7XHJcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xyXG5jb25zdCB7IGxvZ2dlciB9ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xvZ2dlclwiKTtcclxuXHJcbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcInNxbDpzcWxpdGVcIik7XHJcbmNvbnN0IGdldE1ldGhvZHMgPSBvYmogPT4ge1xyXG4gIGxldCBwcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xyXG4gIGxldCBjdXJyZW50T2JqID0gb2JqO1xyXG4gIGRvIHtcclxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnRPYmopLm1hcChpdGVtID0+IHByb3BlcnRpZXMuYWRkKGl0ZW0pKTtcclxuICB9IHdoaWxlICgoY3VycmVudE9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50T2JqKSkpO1xyXG4gIHJldHVybiBbLi4ucHJvcGVydGllcy5rZXlzKCldLmZpbHRlcihpdGVtID0+IHR5cGVvZiBvYmpbaXRlbV0gPT09IFwiZnVuY3Rpb25cIik7XHJcbn07XHJcbmNsYXNzIFF1ZXJ5IGV4dGVuZHMgQWJzdHJhY3RRdWVyeSB7XHJcbiAgZ2V0SW5zZXJ0SWRGaWVsZCgpIHtcclxuICAgIHJldHVybiBcImxhc3RJRFwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV3cml0ZSBxdWVyeSB3aXRoIHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3FsXHJcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHZhbHVlc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaWFsZWN0XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBzdGF0aWMgZm9ybWF0QmluZFBhcmFtZXRlcnMoc3FsLCB2YWx1ZXMsIGRpYWxlY3QpIHtcclxuICAgIGxldCBiaW5kUGFyYW07XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XHJcbiAgICAgIGJpbmRQYXJhbSA9IHt9O1xyXG4gICAgICB2YWx1ZXMuZm9yRWFjaCgodiwgaSkgPT4ge1xyXG4gICAgICAgIGJpbmRQYXJhbVtgJCR7aSArIDF9YF0gPSB2O1xyXG4gICAgICB9KTtcclxuICAgICAgc3FsID0gQWJzdHJhY3RRdWVyeS5mb3JtYXRCaW5kUGFyYW1ldGVycyhzcWwsIHZhbHVlcywgZGlhbGVjdCwge1xyXG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcclxuICAgICAgfSlbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiaW5kUGFyYW0gPSB7fTtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZXMgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModmFsdWVzKSkge1xyXG4gICAgICAgICAgYmluZFBhcmFtW2AkJHtrfWBdID0gdmFsdWVzW2tdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XHJcbiAgICAgICAgc2tpcFZhbHVlUmVwbGFjZTogdHJ1ZVxyXG4gICAgICB9KVswXTtcclxuICAgIH1cclxuICAgIHJldHVybiBbc3FsLCBiaW5kUGFyYW1dO1xyXG4gIH1cclxuXHJcbiAgX2NvbGxlY3RNb2RlbHMoaW5jbHVkZSwgcHJlZml4KSB7XHJcbiAgICBjb25zdCByZXQgPSB7fTtcclxuXHJcbiAgICBpZiAoaW5jbHVkZSkge1xyXG4gICAgICBmb3IgKGNvbnN0IF9pbmNsdWRlIG9mIGluY2x1ZGUpIHtcclxuICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgIGlmICghcHJlZml4KSB7XHJcbiAgICAgICAgICBrZXkgPSBfaW5jbHVkZS5hcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAga2V5ID0gYCR7cHJlZml4fS4ke19pbmNsdWRlLmFzfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldFtrZXldID0gX2luY2x1ZGUubW9kZWw7XHJcblxyXG4gICAgICAgIGlmIChfaW5jbHVkZS5pbmNsdWRlKSB7XHJcbiAgICAgICAgICBfLm1lcmdlKHJldCwgdGhpcy5fY29sbGVjdE1vZGVscyhfaW5jbHVkZS5pbmNsdWRlLCBrZXkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgX2hhbmRsZVF1ZXJ5UmVzcG9uc2UobWV0YURhdGEsIGNvbHVtblR5cGVzLCBlcnIsIHJlc3VsdHMpIHtcclxuICAgIGlmIChlcnIpIHtcclxuICAgICAgZXJyLnNxbCA9IHRoaXMuc3FsO1xyXG4gICAgICB0aHJvdyB0aGlzLmZvcm1hdEVycm9yKGVycik7XHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5pbnN0YW5jZTtcclxuICAgIC8vIGFkZCB0aGUgaW5zZXJ0ZWQgcm93IGlkIHRvIHRoZSBpbnN0YW5jZVxyXG4gICAgaWYgKHRoaXMuaXNJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSkpIHtcclxuICAgICAgdGhpcy5oYW5kbGVJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSk7XHJcbiAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICAgIC8vIGhhbmRsZSBidWxrQ3JlYXRlIEFJIHByaW1hcnkga2V5XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgLyogIG1ldGFEYXRhLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiU3RhdGVtZW50XCIgJiYgKi9cclxuICAgICAgICAgIHRoaXMubW9kZWwgJiZcclxuICAgICAgICAgIHRoaXMubW9kZWwuYXV0b0luY3JlbWVudEF0dHJpYnV0ZSAmJlxyXG4gICAgICAgICAgdGhpcy5tb2RlbC5hdXRvSW5jcmVtZW50QXR0cmlidXRlID09PVxyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiZcclxuICAgICAgICAgIHRoaXMubW9kZWwucmF3QXR0cmlidXRlc1t0aGlzLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGVdXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zdCBzdGFydElkID1cclxuICAgICAgICAgICAgbWV0YURhdGFbdGhpcy5nZXRJbnNlcnRJZEZpZWxkKCldIC0gbWV0YURhdGEuY2hhbmdlcyArIDE7XHJcblxyXG4gICAgICAgICAgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRJZDsgaSA8IHN0YXJ0SWQgKyBtZXRhRGF0YS5jaGFuZ2VzOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgICAgICAgIFt0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxyXG4gICAgICAgICAgICAgICAgLmZpZWxkXTogaVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0ID0gbWV0YURhdGFbdGhpcy5nZXRJbnNlcnRJZEZpZWxkKCldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzU2hvd1RhYmxlc1F1ZXJ5KCkpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKHJvdyA9PiByb3cubmFtZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1Nob3dDb25zdHJhaW50c1F1ZXJ5KCkpIHtcclxuICAgICAgcmVzdWx0ID0gcmVzdWx0cztcclxuICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnNxbCkge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMucGFyc2VDb25zdHJhaW50c0Zyb21TcWwocmVzdWx0c1swXS5zcWwpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1NlbGVjdFF1ZXJ5KCkpIHtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYXcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZWxlY3RRdWVyeShyZXN1bHRzKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBUaGlzIGlzIGEgbWFwIG9mIHByZWZpeCBzdHJpbmdzIHRvIG1vZGVscywgZS5nLiB1c2VyLnByb2plY3RzIC0+IFByb2plY3QgbW9kZWxcclxuICAgICAgY29uc3QgcHJlZml4ZXMgPSB0aGlzLl9jb2xsZWN0TW9kZWxzKHRoaXMub3B0aW9ucy5pbmNsdWRlKTtcclxuXHJcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xyXG4gICAgICAgIHJldHVybiBfLm1hcFZhbHVlcyhyZXN1bHQsICh2YWx1ZSwgbmFtZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IG1vZGVsO1xyXG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RpbmQgPSBuYW1lLmxhc3RJbmRleE9mKFwiLlwiKTtcclxuXHJcbiAgICAgICAgICAgIG1vZGVsID0gcHJlZml4ZXNbbmFtZS5zdWJzdHIoMCwgbGFzdGluZCldO1xyXG5cclxuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKGxhc3RpbmQgKyAxKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1vZGVsID0gdGhpcy5vcHRpb25zLm1vZGVsO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IG1vZGVsXHJcbiAgICAgICAgICAgIC5nZXRUYWJsZU5hbWUoKVxyXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvYC9nLCBcIlwiKTtcclxuICAgICAgICAgIGNvbnN0IHRhYmxlVHlwZXMgPSBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdIHx8IHt9O1xyXG5cclxuICAgICAgICAgIGlmICh0YWJsZVR5cGVzICYmICEobmFtZSBpbiB0YWJsZVR5cGVzKSkge1xyXG4gICAgICAgICAgICAvLyBUaGUgY29sdW1uIGlzIGFsaWFzZWRcclxuICAgICAgICAgICAgXy5mb3JPd24obW9kZWwucmF3QXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGtleSAmJiBhdHRyaWJ1dGUuZmllbGQpIHtcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBhdHRyaWJ1dGUuZmllbGQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhYmxlVHlwZXMsIG5hbWUpXHJcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVBhcnNlcnModGFibGVUeXBlc1tuYW1lXSwgdmFsdWUpXHJcbiAgICAgICAgICAgIDogdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VsZWN0UXVlcnkocmVzdWx0cyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1Nob3dPckRlc2NyaWJlUXVlcnkoKSkge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNxbC5pbmNsdWRlcyhcIlBSQUdNQSBJTkRFWF9MSVNUXCIpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNob3dJbmRleGVzUXVlcnkocmVzdWx0cyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgSU5ERVhfSU5GT1wiKSkge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNxbC5pbmNsdWRlcyhcIlBSQUdNQSBUQUJMRV9JTkZPXCIpKSB7XHJcbiAgICAgIC8vIHRoaXMgaXMgdGhlIHNxbGl0ZSB3YXkgb2YgZ2V0dGluZyB0aGUgbWV0YWRhdGEgb2YgYSB0YWJsZVxyXG4gICAgICByZXN1bHQgPSB7fTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICBmb3IgKGNvbnN0IF9yZXN1bHQgb2YgcmVzdWx0cykge1xyXG4gICAgICAgICAgaWYgKF9yZXN1bHQuZGZsdF92YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBDb2x1bW4gc2NoZW1hIG9taXRzIGFueSBcIkRFRkFVTFQgLi4uXCJcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChfcmVzdWx0LmRmbHRfdmFsdWUgPT09IFwiTlVMTFwiKSB7XHJcbiAgICAgICAgICAgIC8vIENvbHVtbiBzY2hlbWEgaXMgYSBcIkRFRkFVTFQgTlVMTFwiXHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVzdWx0LmRmbHRfdmFsdWU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0gPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IF9yZXN1bHQudHlwZSxcclxuICAgICAgICAgICAgYWxsb3dOdWxsOiBfcmVzdWx0Lm5vdG51bGwgPT09IDAsXHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcclxuICAgICAgICAgICAgcHJpbWFyeUtleTogX3Jlc3VsdC5wayAhPT0gMFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0W19yZXN1bHQubmFtZV0udHlwZSA9PT0gXCJUSU5ZSU5UKDEpXCIpIHtcclxuICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlID0geyBcIjBcIjogZmFsc2UsIFwiMVwiOiB0cnVlIH1bXHJcbiAgICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlID0gcmVzdWx0W1xyXG4gICAgICAgICAgICAgIF9yZXN1bHQubmFtZVxyXG4gICAgICAgICAgICBdLmRlZmF1bHRWYWx1ZS5yZXBsYWNlKC8nL2csIFwiXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNxbC5pbmNsdWRlcyhcIlBSQUdNQSBmb3JlaWduX2tleXM7XCIpKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5c1wiKSkge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNxbC5pbmNsdWRlcyhcIlBSQUdNQSBmb3JlaWduX2tleV9saXN0XCIpKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBbUXVlcnlUeXBlcy5CVUxLVVBEQVRFLCBRdWVyeVR5cGVzLkJVTEtERUxFVEVdLmluY2x1ZGVzKHRoaXMub3B0aW9ucy50eXBlKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBtZXRhRGF0YS5jaGFuZ2VzO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy50eXBlID09PSBRdWVyeVR5cGVzLlVQU0VSVCkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy50eXBlID09PSBRdWVyeVR5cGVzLlZFUlNJT04pIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHNbMF0udmVyc2lvbjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5SQVcpIHtcclxuICAgICAgcmV0dXJuIFtyZXN1bHRzLCBtZXRhRGF0YV07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1VwZGF0ZVF1ZXJ5KCkgfHwgdGhpcy5pc0luc2VydFF1ZXJ5KCkpIHtcclxuICAgICAgcmV0dXJuIFtyZXN1bHQsIG1ldGFEYXRhLmNoYW5nZXNdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgLy8gd2Vic3FsIDogcG9seWZpbGwgZm9yZWlnbiBrZXkgaHR0cHM6Ly9qdXN0YXRoZW9yeS5jb20vMjAwNC8xMS9zcWxpdGUtZm9yZWlnbi1rZXktdHJpZ2dlcnMvXHJcbiAgcnVuKHNxbCwgcGFyYW1ldGVycykge1xyXG4gICAgLy8gZXhlYyBkb2VzIG5vdCBzdXBwb3J0IGJpbmQgcGFyYW1ldGVyXHJcbiAgICB0aGlzLnNxbCA9IEFic3RyYWN0UXVlcnkuZm9ybWF0QmluZFBhcmFtZXRlcnMoXHJcbiAgICAgIHNxbCxcclxuICAgICAgdGhpcy5vcHRpb25zLmJpbmQsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0IHx8IFwic3FsaXRlXCIsXHJcbiAgICAgIHsgc2tpcFVuZXNjYXBlOiBmYWxzZSB9XHJcbiAgICApWzBdO1xyXG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXREYXRhYmFzZU1ldGhvZCgpO1xyXG4gICAgY29uc3QgY29tcGxldGUgPSB0aGlzLl9sb2dRdWVyeSh0aGlzLnNxbCwgZGVidWcsIHBhcmFtZXRlcnMpO1xyXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzO1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zdCBjb25uID0gdGhpcy5jb25uZWN0aW9uO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgY29uc3QgY29sdW1uVHlwZXMgPSB7fTtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgICAgIGNvbnN0IGV4ZWN1dGVTcWwgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHNxbC5zdGFydHNXaXRoKFwiLS0gXCIpKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImV4ZWNcIikge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbm4uZXhlYyhcclxuICAgICAgICAgICAgICAgICAgW3sgc3FsOiBzZWxmLnNxbCwgYXJnczogW10gfV0sXHJcbiAgICAgICAgICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAoZXhlY3V0aW9uRXJyb3IsIHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IENoZWNrIHJldHVybiBQUkFHTUEgSU5ERVhfTElTVCBhbmQgSU5ERVhfSU5GT1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gYHRoaXNgIGlzIHBhc3NlZCBmcm9tIHNxbGl0ZSwgd2UgaGF2ZSBubyBjb250cm9sIG92ZXIgdGhpcy5cclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uRXJyb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNhbm5vdCB1c2UgYXJyb3cgZnVuY3Rpb24gaGVyZSBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBib3VuZCB0byB0aGUgc3RhdGVtZW50XHJcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCByZXN1bHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBgc2VsZmAgaXMgcGFzc2VkIGZyb20gc3FsaXRlLCB3ZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciB0aGlzLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0cy5yb3dzQWZmZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldID0gcmVzdWx0cy5pbnNlcnRJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VsZltzZWxmLmdldEluc2VydElkRmllbGQoKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlcyA9IHJlc3VsdHMucm93c0FmZmVjdGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBxdWVyeS5jb252ZXJ0VG9BcnJheShyZXN1bHRzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgcXVlcnkuX2hhbmRsZVF1ZXJ5UmVzcG9uc2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocXVlcnkuX2hhbmRsZVF1ZXJ5UmVzcG9uc2Uoc2VsZiwgY29sdW1uVHlwZXMsIGVycikpO1xyXG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbChcclxuICAgICAgICAgICAgICAgICAgc2VsZi5zcWwsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayxcclxuICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFja1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJhbGxcIiAmJiB0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBsZXQgdGFibGVOYW1lcyA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnRhYmxlTmFtZXMpIHtcclxuICAgICAgICAgIHRhYmxlTmFtZXMgPSB0aGlzLm9wdGlvbnMudGFibGVOYW1lcztcclxuICAgICAgICB9IGVsc2UgaWYgKC9GUk9NIGAoLio/KWAvaS5leGVjKHRoaXMuc3FsKSkge1xyXG4gICAgICAgICAgdGFibGVOYW1lcy5wdXNoKC9GUk9NIGAoLio/KWAvaS5leGVjKHRoaXMuc3FsKVsxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIG1ldGFkYXRhIGZvciB0aGUgdGFibGUsIHRoZXJlJ3Mgbm8gbmVlZCB0byBhc2sgZm9yIGl0IGFnYWluXHJcbiAgICAgICAgdGFibGVOYW1lcyA9IHRhYmxlTmFtZXMuZmlsdGVyKFxyXG4gICAgICAgICAgdGFibGVOYW1lID0+XHJcbiAgICAgICAgICAgICEodGFibGVOYW1lIGluIGNvbHVtblR5cGVzKSAmJiB0YWJsZU5hbWUgIT09IFwic3FsaXRlX21hc3RlclwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXRhYmxlTmFtZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gZXhlY3V0ZVNxbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNxbENvbW1hbmRzID0gdGFibGVOYW1lcy5tYXAodGFibGVOYW1lID0+IHtcclxuICAgICAgICAgICAgICB0YWJsZU5hbWUgPSB0YWJsZU5hbWUucmVwbGFjZSgvYC9nLCBcIlwiKTtcclxuICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdID0ge307XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtgUFJBR01BIHRhYmxlX2luZm8oXFxgJHt0YWJsZU5hbWV9XFxgKWAsIHRhYmxlTmFtZV07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25uLmV4ZWMoXHJcbiAgICAgICAgICAgICAgc3FsQ29tbWFuZHMubWFwKHNxbENtZCA9PiAoe1xyXG4gICAgICAgICAgICAgICAgc3FsOiBzcWxDbWRbMF0sXHJcbiAgICAgICAgICAgICAgICBhcmdzOiBbXVxyXG4gICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgICAgICAoZXJyLCByZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVycikge1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNxbENvbW1hbmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gc3FsQ29tbWFuZHNbaV1bMV07XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0c1tpXS5yb3dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdW3Jlc3VsdC5uYW1lXSA9IHJlc3VsdC50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbm4udHJhbnNhY3Rpb24oZnVuY3Rpb24odCkge1xyXG4gICAgICAgICAgICAgIHRhYmxlTmFtZXMuZm9yRWFjaCgodGFibGVOYW1lLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdC5leGVjdXRlU3FsKFxyXG4gICAgICAgICAgICAgICAgICBgU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyR7dGFibGVOYW1lfScgYW5kIHR5cGU9J3RhYmxlJ2AsXHJcbiAgICAgICAgICAgICAgICAgIFtdLFxyXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbihfLCByZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZSA9IHJlc3VsdC5yb3dzLml0ZW0oMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRhYmxlID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiIGluIHRhYmxlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUuc3FsID09PSBcInN0cmluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAvL21hdGNoIGNvbHVtbiBuYW1lIHdpdGggZGF0YSB0eXBlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlLnNxbC5tYXRjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyhgXFx3K2ApKChcXHMoW0EtWl0rKSgoXFwoXFxkK1xcKSkpPykpL2dcclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBzcGxpdCBjb2x1bW4gbmFtZXMgd2l0aCBkYXRhIHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbE5hbWUsIGNvbFR5cGVdID0gY29sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9gL2csIFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXVtjb2xOYW1lXSA9IGNvbFR5cGUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbHVtblR5cGVzKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkudGhlbihleGVjdXRlU3FsKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZXhlY3V0ZVNxbCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwYXJzZUNvbnN0cmFpbnRzRnJvbVNxbChzcWwpIHtcclxuICAgIGxldCBjb25zdHJhaW50cyA9IHNxbC5zcGxpdChcIkNPTlNUUkFJTlQgXCIpO1xyXG4gICAgbGV0IHJlZmVyZW5jZVRhYmxlTmFtZSwgcmVmZXJlbmNlVGFibGVLZXlzLCB1cGRhdGVBY3Rpb24sIGRlbGV0ZUFjdGlvbjtcclxuICAgIGNvbnN0cmFpbnRzLnNwbGljZSgwLCAxKTtcclxuICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHMubWFwKGNvbnN0cmFpbnRTcWwgPT4ge1xyXG4gICAgICAvL1BhcnNlIGZvcmVpZ24ga2V5IHNuaXBwZXRzXHJcbiAgICAgIGlmIChjb25zdHJhaW50U3FsLmluY2x1ZGVzKFwiUkVGRVJFTkNFU1wiKSkge1xyXG4gICAgICAgIC8vUGFyc2Ugb3V0IHRoZSBjb25zdHJhaW50IGNvbmRpdGlvbiBmb3JtIHNxbCBzdHJpbmdcclxuICAgICAgICB1cGRhdGVBY3Rpb24gPSBjb25zdHJhaW50U3FsLm1hdGNoKFxyXG4gICAgICAgICAgL09OIFVQREFURSAoQ0FTQ0FERXxTRVQgTlVMTHxSRVNUUklDVHxOTyBBQ1RJT058U0VUIERFRkFVTFQpezF9L1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgZGVsZXRlQWN0aW9uID0gY29uc3RyYWludFNxbC5tYXRjaChcclxuICAgICAgICAgIC9PTiBERUxFVEUgKENBU0NBREV8U0VUIE5VTEx8UkVTVFJJQ1R8Tk8gQUNUSU9OfFNFVCBERUZBVUxUKXsxfS9cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAodXBkYXRlQWN0aW9uKSB7XHJcbiAgICAgICAgICB1cGRhdGVBY3Rpb24gPSB1cGRhdGVBY3Rpb25bMV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVsZXRlQWN0aW9uKSB7XHJcbiAgICAgICAgICBkZWxldGVBY3Rpb24gPSBkZWxldGVBY3Rpb25bMV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZWZlcmVuY2VzUmVnZXggPSAvUkVGRVJFTkNFUy4rXFwoKD86W14pKF0rfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqXFwpLztcclxuICAgICAgICBjb25zdCByZWZlcmVuY2VDb25kaXRpb25zID0gY29uc3RyYWludFNxbFxyXG4gICAgICAgICAgLm1hdGNoKHJlZmVyZW5jZXNSZWdleClbMF1cclxuICAgICAgICAgIC5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgcmVmZXJlbmNlVGFibGVOYW1lID0gVXRpbHMucmVtb3ZlVGlja3MocmVmZXJlbmNlQ29uZGl0aW9uc1sxXSk7XHJcbiAgICAgICAgbGV0IGNvbHVtbk5hbWVzID0gcmVmZXJlbmNlQ29uZGl0aW9uc1syXTtcclxuICAgICAgICBjb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzLnJlcGxhY2UoL1xcKHxcXCkvZywgXCJcIikuc3BsaXQoXCIsIFwiKTtcclxuICAgICAgICByZWZlcmVuY2VUYWJsZUtleXMgPSBjb2x1bW5OYW1lcy5tYXAoY29sdW1uID0+XHJcbiAgICAgICAgICBVdGlscy5yZW1vdmVUaWNrcyhjb2x1bW4pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29uc3RyYWludENvbmRpdGlvbiA9IGNvbnN0cmFpbnRTcWwubWF0Y2goXHJcbiAgICAgICAgL1xcKCg/OlteKShdK3xcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKlxcKS9cclxuICAgICAgKVswXTtcclxuICAgICAgY29uc3RyYWludFNxbCA9IGNvbnN0cmFpbnRTcWwucmVwbGFjZSgvXFwoLitcXCkvLCBcIlwiKTtcclxuICAgICAgY29uc3QgY29uc3RyYWludCA9IGNvbnN0cmFpbnRTcWwuc3BsaXQoXCIgXCIpO1xyXG5cclxuICAgICAgaWYgKGNvbnN0cmFpbnRbMV0gPT09IFwiUFJJTUFSWVwiIHx8IGNvbnN0cmFpbnRbMV0gPT09IFwiRk9SRUlHTlwiKSB7XHJcbiAgICAgICAgY29uc3RyYWludFsxXSArPSBcIiBLRVlcIjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb25zdHJhaW50TmFtZTogVXRpbHMucmVtb3ZlVGlja3MoY29uc3RyYWludFswXSksXHJcbiAgICAgICAgY29uc3RyYWludFR5cGU6IGNvbnN0cmFpbnRbMV0sXHJcbiAgICAgICAgdXBkYXRlQWN0aW9uLFxyXG4gICAgICAgIGRlbGV0ZUFjdGlvbixcclxuICAgICAgICBzcWw6IHNxbC5yZXBsYWNlKC9cIi9nLCBcImBcIiksIC8vU3FsaXRlIHJldHVybnMgZG91YmxlIHF1b3RlcyBmb3IgdGFibGUgbmFtZVxyXG4gICAgICAgIGNvbnN0cmFpbnRDb25kaXRpb24sXHJcbiAgICAgICAgcmVmZXJlbmNlVGFibGVOYW1lLFxyXG4gICAgICAgIHJlZmVyZW5jZVRhYmxlS2V5c1xyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlQYXJzZXJzKHR5cGUsIHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZS5pbmNsdWRlcyhcIihcIikpIHtcclxuICAgICAgLy8gUmVtb3ZlIHRoZSBsZW5ndGggcGFydFxyXG4gICAgICB0eXBlID0gdHlwZS5zdWJzdHIoMCwgdHlwZS5pbmRleE9mKFwiKFwiKSk7XHJcbiAgICB9XHJcbiAgICB0eXBlID0gdHlwZS5yZXBsYWNlKFwiVU5TSUdORURcIiwgXCJcIikucmVwbGFjZShcIlpFUk9GSUxMXCIsIFwiXCIpO1xyXG4gICAgdHlwZSA9IHR5cGUudHJpbSgpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICBjb25zdCBwYXJzZSA9IHBhcnNlclN0b3JlLmdldCh0eXBlKTtcclxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiBwYXJzZSkge1xyXG4gICAgICByZXR1cm4gcGFyc2UodmFsdWUsIHsgdGltZXpvbmU6IHRoaXMuc2VxdWVsaXplLm9wdGlvbnMudGltZXpvbmUgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRFcnJvcihlcnIpIHtcclxuICAgIHN3aXRjaCAoZXJyLmNvZGUpIHtcclxuICAgICAgY2FzZSBcIlNRTElURV9DT05TVFJBSU5UXCI6IHtcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoXCJGT1JFSUdOIEtFWSBjb25zdHJhaW50IGZhaWxlZFwiKSkge1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBzZXF1ZWxpemVFcnJvcnMuRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvcih7XHJcbiAgICAgICAgICAgIHBhcmVudDogZXJyXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmaWVsZHMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gU3FsaXRlIHByZSAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IGNvbHVtbnMgeCwgeSBhcmUgbm90IHVuaXF1ZVxyXG4gICAgICAgIGxldCBtYXRjaCA9IGVyci5tZXNzYWdlLm1hdGNoKC9jb2x1bW5zICguKj8pIGFyZS8pO1xyXG4gICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiBtYXRjaC5sZW5ndGggPj0gMikge1xyXG4gICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV0uc3BsaXQoXCIsIFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gU3FsaXRlIHBvc3QgMi4yIGJlaGF2aW9yIC0gRXJyb3I6IFNRTElURV9DT05TVFJBSU5UOiBVTklRVUUgY29uc3RyYWludCBmYWlsZWQ6IHRhYmxlLngsIHRhYmxlLnlcclxuICAgICAgICAgIG1hdGNoID0gZXJyLm1lc3NhZ2UubWF0Y2goL1VOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogKC4qKS8pO1xyXG4gICAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmIG1hdGNoLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgICAgIGZpZWxkcyA9IG1hdGNoWzFdXHJcbiAgICAgICAgICAgICAgLnNwbGl0KFwiLCBcIilcclxuICAgICAgICAgICAgICAubWFwKGNvbHVtbldpdGhUYWJsZSA9PiBjb2x1bW5XaXRoVGFibGUuc3BsaXQoXCIuXCIpWzFdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xyXG4gICAgICAgIGxldCBtZXNzYWdlID0gXCJWYWxpZGF0aW9uIGVycm9yXCI7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XHJcbiAgICAgICAgICBlcnJvcnMucHVzaChcclxuICAgICAgICAgICAgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3JJdGVtKFxyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VW5pcXVlQ29uc3RyYWludEVycm9yTWVzc2FnZShmaWVsZCksXHJcbiAgICAgICAgICAgICAgXCJ1bmlxdWUgdmlvbGF0aW9uXCIsIC8vIHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnMuREIsXHJcbiAgICAgICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlW2ZpZWxkXSxcclxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxyXG4gICAgICAgICAgICAgIFwibm90X3VuaXF1ZVwiXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xyXG4gICAgICAgICAgXy5mb3JPd24odGhpcy5tb2RlbC51bmlxdWVLZXlzLCBjb25zdHJhaW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKF8uaXNFcXVhbChjb25zdHJhaW50LmZpZWxkcywgZmllbGRzKSAmJiAhIWNvbnN0cmFpbnQubXNnKSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGNvbnN0cmFpbnQubXNnO1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5VbmlxdWVDb25zdHJhaW50RXJyb3Ioe1xyXG4gICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgIGVycm9ycyxcclxuICAgICAgICAgIHBhcmVudDogZXJyLFxyXG4gICAgICAgICAgZmllbGRzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBcIlNRTElURV9CVVNZXCI6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBzZXF1ZWxpemVFcnJvcnMuVGltZW91dEVycm9yKGVycik7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBuZXcgc2VxdWVsaXplRXJyb3JzLkRhdGFiYXNlRXJyb3IoZXJyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVNob3dJbmRleGVzUXVlcnkoZGF0YSkge1xyXG4gICAgLy8gU3FsaXRlIHJldHVybnMgaW5kZXhlcyBzbyB0aGUgb25lIHRoYXQgd2FzIGRlZmluZWQgbGFzdCBpcyByZXR1cm5lZCBmaXJzdC4gTGV0cyByZXZlcnNlIHRoYXQhXHJcbiAgICByZXR1cm4gUHJvbWlzZS5tYXAoZGF0YS5yZXZlcnNlKCksIGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLmZpZWxkcyA9IFtdO1xyXG4gICAgICBpdGVtLnByaW1hcnkgPSBmYWxzZTtcclxuICAgICAgaXRlbS51bmlxdWUgPSAhIWl0ZW0udW5pcXVlO1xyXG4gICAgICBpdGVtLmNvbnN0cmFpbnROYW1lID0gaXRlbS5uYW1lO1xyXG4gICAgICByZXR1cm4gdGhpcy5ydW4oYFBSQUdNQSBJTkRFWF9JTkZPKFxcYCR7aXRlbS5uYW1lfVxcYClgKS50aGVuKGNvbHVtbnMgPT4ge1xyXG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAgICAgICAgIGl0ZW0uZmllbGRzW2NvbHVtbi5zZXFub10gPSB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZTogY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBvcmRlcjogdW5kZWZpbmVkXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXREYXRhYmFzZU1ldGhvZCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUFcIikgfHxcclxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJDT01NSVRcIikgfHxcclxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJST0xMQkFDS1wiKSB8fFxyXG4gICAgICB0aGlzLnNxbC5pbmNsdWRlcyhcIlRSQU5TQUNUSU9OXCIpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIFwiZXhlY1wiOyAvLyBOZWVkZWQgdG8gcnVuIG5vLW9wIHRyYW5zYWN0aW9uXHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuaXNJbnNlcnRRdWVyeSgpIHx8XHJcbiAgICAgIHRoaXMuaXNVcGRhdGVRdWVyeSgpIHx8XHJcbiAgICAgIHRoaXMuaXNCdWxrVXBkYXRlUXVlcnkoKSB8fFxyXG4gICAgICB0aGlzLnNxbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRVwiLnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgIHRoaXMub3B0aW9ucy50eXBlID09PSBRdWVyeVR5cGVzLkJVTEtERUxFVEVcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gXCJydW5cIjtcclxuICAgIH1cclxuICAgIHJldHVybiBcImFsbFwiO1xyXG4gIH1cclxuICBjb252ZXJ0VG9BcnJheShyZXN1bHRzKSB7XHJcbiAgICBpZiAoIXJlc3VsdHMucm93cykgcmV0dXJuIFtdO1xyXG4gICAgaWYgKFwiYXJyYXlcIiBpbiByZXN1bHRzIHx8IFwiX2FycmF5XCIgaW4gcmVzdWx0cy5yb3dzKVxyXG4gICAgICByZXR1cm4gcmVzdWx0cy5hcnJheSB8fCByZXN1bHRzLnJvd3MuX2FycmF5O1xyXG4gICAgaWYgKCFyZXN1bHRzLnJvd3MuaXRlbSkgcmV0dXJuIHJlc3VsdHMucm93cztcclxuICAgIGNvbnN0IGRhdGEgPSBuZXcgQXJyYXkocmVzdWx0cy5yb3dzLmxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMucm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBkYXRhW2ldID0gcmVzdWx0cy5yb3dzLml0ZW0oaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUXVlcnk7XHJcbm1vZHVsZS5leHBvcnRzLlF1ZXJ5ID0gUXVlcnk7XHJcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBRdWVyeTtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnkuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIlByb21pc2UiLCJBYnN0cmFjdFF1ZXJ5IiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsInBhcnNlclN0b3JlIiwibG9nZ2VyIiwiZGVidWciLCJkZWJ1Z0NvbnRleHQiLCJnZXRNZXRob2RzIiwib2JqIiwicHJvcGVydGllcyIsIlNldCIsImN1cnJlbnRPYmoiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibWFwIiwiaXRlbSIsImFkZCIsImdldFByb3RvdHlwZU9mIiwia2V5cyIsImZpbHRlciIsIlF1ZXJ5IiwiaW5jbHVkZSIsInByZWZpeCIsInJldCIsIl9pbmNsdWRlIiwia2V5IiwiYXMiLCJtb2RlbCIsIm1lcmdlIiwiX2NvbGxlY3RNb2RlbHMiLCJtZXRhRGF0YSIsImNvbHVtblR5cGVzIiwiZXJyIiwicmVzdWx0cyIsInNxbCIsImZvcm1hdEVycm9yIiwicmVzdWx0IiwiaW5zdGFuY2UiLCJpc0luc2VydFF1ZXJ5IiwiaGFuZGxlSW5zZXJ0UXVlcnkiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsInJhd0F0dHJpYnV0ZXMiLCJzdGFydElkIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImNoYW5nZXMiLCJpIiwicHVzaCIsImZpZWxkIiwiaXNTaG93VGFibGVzUXVlcnkiLCJyb3ciLCJuYW1lIiwiaXNTaG93Q29uc3RyYWludHNRdWVyeSIsInBhcnNlQ29uc3RyYWludHNGcm9tU3FsIiwiaXNTZWxlY3RRdWVyeSIsIm9wdGlvbnMiLCJyYXciLCJoYW5kbGVTZWxlY3RRdWVyeSIsInByZWZpeGVzIiwibWFwVmFsdWVzIiwidmFsdWUiLCJpbmNsdWRlcyIsImxhc3RpbmQiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsInRvU3RyaW5nIiwicmVwbGFjZSIsInRhYmxlVHlwZXMiLCJmb3JPd24iLCJhdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseVBhcnNlcnMiLCJpc1Nob3dPckRlc2NyaWJlUXVlcnkiLCJoYW5kbGVTaG93SW5kZXhlc1F1ZXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiX3Jlc3VsdCIsImRmbHRfdmFsdWUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwiYWxsb3dOdWxsIiwibm90bnVsbCIsInByaW1hcnlLZXkiLCJwayIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsInZlcnNpb24iLCJSQVciLCJpc1VwZGF0ZVF1ZXJ5IiwicGFyYW1ldGVycyIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiYmluZCIsImRpYWxlY3QiLCJza2lwVW5lc2NhcGUiLCJtZXRob2QiLCJnZXREYXRhYmFzZU1ldGhvZCIsImNvbXBsZXRlIiwiX2xvZ1F1ZXJ5IiwicXVlcnkiLCJzZWxmIiwiY29ubiIsImNvbm5lY3Rpb24iLCJyZXNvbHZlIiwiZXhlY3V0ZVNxbCIsInN0YXJ0c1dpdGgiLCJyZWplY3QiLCJleGVjIiwiYXJncyIsImV4ZWN1dGlvbkVycm9yIiwiY29udmVydFRvQXJyYXkiLCJfaGFuZGxlUXVlcnlSZXNwb25zZSIsImVycm9yIiwidHJhbnNhY3Rpb24iLCJ0Iiwic3VjY2Vzc0NhbGxiYWNrIiwicm93c0FmZmVjdGVkIiwiaW5zZXJ0SWQiLCJlIiwiZXJyb3JDYWxsYmFjayIsInRhYmxlTmFtZXMiLCJsZW5ndGgiLCJzcWxDb21tYW5kcyIsInNxbENtZCIsInJvd3MiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0YWJsZSIsImNvbHVtbnMiLCJtYXRjaCIsImNvbCIsImNvbE5hbWUiLCJjb2xUeXBlIiwidHJpbSIsInNwbGl0IiwidGhlbiIsImNvbnN0cmFpbnRzIiwicmVmZXJlbmNlVGFibGVOYW1lIiwicmVmZXJlbmNlVGFibGVLZXlzIiwidXBkYXRlQWN0aW9uIiwiZGVsZXRlQWN0aW9uIiwic3BsaWNlIiwiY29uc3RyYWludFNxbCIsInJlZmVyZW5jZXNSZWdleCIsInJlZmVyZW5jZUNvbmRpdGlvbnMiLCJyZW1vdmVUaWNrcyIsImNvbHVtbk5hbWVzIiwiY29sdW1uIiwiY29uc3RyYWludENvbmRpdGlvbiIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNvbnN0cmFpbnRUeXBlIiwiaW5kZXhPZiIsInRvVXBwZXJDYXNlIiwicGFyc2UiLCJnZXQiLCJ0aW1lem9uZSIsInNlcXVlbGl6ZSIsImNvZGUiLCJtZXNzYWdlIiwiRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvciIsInBhcmVudCIsImZpZWxkcyIsImNvbHVtbldpdGhUYWJsZSIsImVycm9ycyIsIlZhbGlkYXRpb25FcnJvckl0ZW0iLCJnZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlIiwidW5pcXVlS2V5cyIsImlzRXF1YWwiLCJtc2ciLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJEYXRhYmFzZUVycm9yIiwiZGF0YSIsInJldmVyc2UiLCJwcmltYXJ5IiwidW5pcXVlIiwicnVuIiwic2Vxbm8iLCJvcmRlciIsImlzQnVsa1VwZGF0ZVF1ZXJ5IiwidG9Mb3dlckNhc2UiLCJhcnJheSIsIl9hcnJheSIsInZhbHVlcyIsImJpbmRQYXJhbSIsInYiLCJza2lwVmFsdWVSZXBsYWNlIiwiayIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1HLGFBQWEsR0FBR0gsT0FBTyxDQUFDLG1CQUFELENBQTdCOztB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SixHQUFELEVBQU02SixTQUFOLENBQVA7QUFDRDs7OztFQW5DaUIvTCxhOztBQXVtQnBCbU0sTUFBTSxDQUFDQyxPQUFQLEdBQWlCaEwsS0FBakI7QUFDQStLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlaEwsS0FBZixHQUF1QkEsS0FBdkI7QUFDQStLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCakwsS0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZVwiKTtcbmNvbnN0IEFic3RyYWN0UXVlcnkgPSByZXF1aXJlKFwiLi4vYWJzdHJhY3QvcXVlcnlcIik7XG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3F1ZXJ5LXR5cGVzXCIpO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dnZXJcIik7XG5cbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcInNxbDpzcWxpdGVcIik7XG5jb25zdCBnZXRNZXRob2RzID0gb2JqID0+IHtcbiAgbGV0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG4gIGxldCBjdXJyZW50T2JqID0gb2JqO1xuICBkbyB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudE9iaikubWFwKGl0ZW0gPT4gcHJvcGVydGllcy5hZGQoaXRlbSkpO1xuICB9IHdoaWxlICgoY3VycmVudE9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50T2JqKSkpO1xuICByZXR1cm4gWy4uLnByb3BlcnRpZXMua2V5cygpXS5maWx0ZXIoaXRlbSA9PiB0eXBlb2Ygb2JqW2l0ZW1dID09PSBcImZ1bmN0aW9uXCIpO1xufTtcbmNsYXNzIFF1ZXJ5IGV4dGVuZHMgQWJzdHJhY3RRdWVyeSB7XG4gIGdldEluc2VydElkRmllbGQoKSB7XG4gICAgcmV0dXJuIFwibGFzdElEXCI7XG4gIH1cblxuICAvKipcbiAgICogcmV3cml0ZSBxdWVyeSB3aXRoIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlhbGVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0KSB7XG4gICAgbGV0IGJpbmRQYXJhbTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICAgIGJpbmRQYXJhbVtgJCR7aSArIDF9YF0gPSB2O1xuICAgICAgfSk7XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpKSB7XG4gICAgICAgICAgYmluZFBhcmFtW2AkJHtrfWBdID0gdmFsdWVzW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH1cbiAgICByZXR1cm4gW3NxbCwgYmluZFBhcmFtXTtcbiAgfVxuXG4gIF9jb2xsZWN0TW9kZWxzKGluY2x1ZGUsIHByZWZpeCkge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuXG4gICAgaWYgKGluY2x1ZGUpIHtcbiAgICAgIGZvciAoY29uc3QgX2luY2x1ZGUgb2YgaW5jbHVkZSkge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBpZiAoIXByZWZpeCkge1xuICAgICAgICAgIGtleSA9IF9pbmNsdWRlLmFzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IGAke3ByZWZpeH0uJHtfaW5jbHVkZS5hc31gO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXldID0gX2luY2x1ZGUubW9kZWw7XG5cbiAgICAgICAgaWYgKF9pbmNsdWRlLmluY2x1ZGUpIHtcbiAgICAgICAgICBfLm1lcmdlKHJldCwgdGhpcy5fY29sbGVjdE1vZGVscyhfaW5jbHVkZS5pbmNsdWRlLCBrZXkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBfaGFuZGxlUXVlcnlSZXNwb25zZShtZXRhRGF0YSwgY29sdW1uVHlwZXMsIGVyciwgcmVzdWx0cykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci5zcWwgPSB0aGlzLnNxbDtcbiAgICAgIHRocm93IHRoaXMuZm9ybWF0RXJyb3IoZXJyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuaW5zdGFuY2U7XG4gICAgLy8gYWRkIHRoZSBpbnNlcnRlZCByb3cgaWQgdG8gdGhlIGluc3RhbmNlXG4gICAgaWYgKHRoaXMuaXNJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5zZXJ0UXVlcnkocmVzdWx0cywgbWV0YURhdGEpO1xuICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgIC8vIGhhbmRsZSBidWxrQ3JlYXRlIEFJIHByaW1hcnkga2V5XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvKiAgbWV0YURhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdGF0ZW1lbnRcIiAmJiAqL1xuICAgICAgICAgIHRoaXMubW9kZWwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgPT09XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzdGFydElkID1cbiAgICAgICAgICAgIG1ldGFEYXRhW3RoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpXSAtIG1ldGFEYXRhLmNoYW5nZXMgKyAxO1xuXG4gICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SWQ7IGkgPCBzdGFydElkICsgbWV0YURhdGEuY2hhbmdlczsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgIFt0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICAgICAgICAgIC5maWVsZF06IGlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBtZXRhRGF0YVt0aGlzLmdldEluc2VydElkRmllbGQoKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Nob3dUYWJsZXNRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAocm93ID0+IHJvdy5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93Q29uc3RyYWludHNRdWVyeSgpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRzO1xuICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnNxbCkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHJlc3VsdHNbMF0uc3FsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0UXVlcnkoKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYXcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VsZWN0UXVlcnkocmVzdWx0cyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGlzIGEgbWFwIG9mIHByZWZpeCBzdHJpbmdzIHRvIG1vZGVscywgZS5nLiB1c2VyLnByb2plY3RzIC0+IFByb2plY3QgbW9kZWxcbiAgICAgIGNvbnN0IHByZWZpeGVzID0gdGhpcy5fY29sbGVjdE1vZGVscyh0aGlzLm9wdGlvbnMuaW5jbHVkZSk7XG5cbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMocmVzdWx0LCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0aW5kID0gbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG5cbiAgICAgICAgICAgIG1vZGVsID0gcHJlZml4ZXNbbmFtZS5zdWJzdHIoMCwgbGFzdGluZCldO1xuXG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIobGFzdGluZCArIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IHRoaXMub3B0aW9ucy5tb2RlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbFxuICAgICAgICAgICAgLmdldFRhYmxlTmFtZSgpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgY29uc3QgdGFibGVUeXBlcyA9IGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gfHwge307XG5cbiAgICAgICAgICBpZiAodGFibGVUeXBlcyAmJiAhKG5hbWUgaW4gdGFibGVUeXBlcykpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb2x1bW4gaXMgYWxpYXNlZFxuICAgICAgICAgICAgXy5mb3JPd24obW9kZWwucmF3QXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSBrZXkgJiYgYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJpYnV0ZS5maWVsZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFibGVUeXBlcywgbmFtZSlcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVBhcnNlcnModGFibGVUeXBlc1tuYW1lXSwgdmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZWxlY3RRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93T3JEZXNjcmliZVF1ZXJ5KCkpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgSU5ERVhfTElTVFwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2hvd0luZGV4ZXNRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIElOREVYX0lORk9cIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgVEFCTEVfSU5GT1wiKSkge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgc3FsaXRlIHdheSBvZiBnZXR0aW5nIHRoZSBtZXRhZGF0YSBvZiBhIHRhYmxlXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgZm9yIChjb25zdCBfcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAoX3Jlc3VsdC5kZmx0X3ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDb2x1bW4gc2NoZW1hIG9taXRzIGFueSBcIkRFRkFVTFQgLi4uXCJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9yZXN1bHQuZGZsdF92YWx1ZSA9PT0gXCJOVUxMXCIpIHtcbiAgICAgICAgICAgIC8vIENvbHVtbiBzY2hlbWEgaXMgYSBcIkRFRkFVTFQgTlVMTFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVzdWx0LmRmbHRfdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBfcmVzdWx0LnR5cGUsXG4gICAgICAgICAgICBhbGxvd051bGw6IF9yZXN1bHQubm90bnVsbCA9PT0gMCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IF9yZXN1bHQucGsgIT09IDBcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlc3VsdFtfcmVzdWx0Lm5hbWVdLnR5cGUgPT09IFwiVElOWUlOVCgxKVwiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSB7IFwiMFwiOiBmYWxzZSwgXCIxXCI6IHRydWUgfVtcbiAgICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSByZXN1bHRbXG4gICAgICAgICAgICAgIF9yZXN1bHQubmFtZVxuICAgICAgICAgICAgXS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvJy9nLCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5cztcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgZm9yZWlnbl9rZXlzXCIpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5X2xpc3RcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBbUXVlcnlUeXBlcy5CVUxLVVBEQVRFLCBRdWVyeVR5cGVzLkJVTEtERUxFVEVdLmluY2x1ZGVzKHRoaXMub3B0aW9ucy50eXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuIG1ldGFEYXRhLmNoYW5nZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5VUFNFUlQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5WRVJTSU9OKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1swXS52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuUkFXKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdHMsIG1ldGFEYXRhXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVRdWVyeSgpIHx8IHRoaXMuaXNJbnNlcnRRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0YURhdGEuY2hhbmdlc107XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gd2Vic3FsIDogcG9seWZpbGwgZm9yZWlnbiBrZXkgaHR0cHM6Ly9qdXN0YXRoZW9yeS5jb20vMjAwNC8xMS9zcWxpdGUtZm9yZWlnbi1rZXktdHJpZ2dlcnMvXG4gIHJ1bihzcWwsIHBhcmFtZXRlcnMpIHtcbiAgICAvLyBleGVjIGRvZXMgbm90IHN1cHBvcnQgYmluZCBwYXJhbWV0ZXJcbiAgICB0aGlzLnNxbCA9IEFic3RyYWN0UXVlcnkuZm9ybWF0QmluZFBhcmFtZXRlcnMoXG4gICAgICBzcWwsXG4gICAgICB0aGlzLm9wdGlvbnMuYmluZCxcbiAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0IHx8IFwic3FsaXRlXCIsXG4gICAgICB7IHNraXBVbmVzY2FwZTogZmFsc2UgfVxuICAgIClbMF07XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXREYXRhYmFzZU1ldGhvZCgpO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gdGhpcy5fbG9nUXVlcnkodGhpcy5zcWwsIGRlYnVnLCBwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXM7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29ubiA9IHRoaXMuY29ubmVjdGlvbjtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtblR5cGVzID0ge307XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGV4ZWN1dGVTcWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzcWwuc3RhcnRzV2l0aChcIi0tIFwiKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImV4ZWNcIikge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY29ubi5leGVjKFxuICAgICAgICAgICAgICAgICAgW3sgc3FsOiBzZWxmLnNxbCwgYXJnczogW10gfV0sXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIChleGVjdXRpb25FcnJvciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgcmV0dXJuIFBSQUdNQSBJTkRFWF9MSVNUIGFuZCBJTkRFWF9JTkZPXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGB0aGlzYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW5ub3QgdXNlIGFycm93IGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgYm91bmQgdG8gdGhlIHN0YXRlbWVudFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBgc2VsZmAgaXMgcGFzc2VkIGZyb20gc3FsaXRlLCB3ZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciB0aGlzLlxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXSA9IHJlc3VsdHMuaW5zZXJ0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZXMgPSByZXN1bHRzLnJvd3NBZmZlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShzZWxmLCBjb2x1bW5UeXBlcywgZXJyKSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25uLmV4ZWMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgICBzZWxmLnNxbCxcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBpZiAobWV0aG9kID09PSBcImFsbFwiKSB7XG4gICAgICAgIGxldCB0YWJsZU5hbWVzID0gW107XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnRhYmxlTmFtZXMpIHtcbiAgICAgICAgICB0YWJsZU5hbWVzID0gdGhpcy5vcHRpb25zLnRhYmxlTmFtZXM7XG4gICAgICAgIH0gZWxzZSBpZiAoL0ZST00gYCguKj8pYC9pLmV4ZWModGhpcy5zcWwpKSB7XG4gICAgICAgICAgdGFibGVOYW1lcy5wdXNoKC9GUk9NIGAoLio/KWAvaS5leGVjKHRoaXMuc3FsKVsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIG1ldGFkYXRhIGZvciB0aGUgdGFibGUsIHRoZXJlJ3Mgbm8gbmVlZCB0byBhc2sgZm9yIGl0IGFnYWluXG4gICAgICAgIHRhYmxlTmFtZXMgPSB0YWJsZU5hbWVzLmZpbHRlcihcbiAgICAgICAgICB0YWJsZU5hbWUgPT5cbiAgICAgICAgICAgICEodGFibGVOYW1lIGluIGNvbHVtblR5cGVzKSAmJiB0YWJsZU5hbWUgIT09IFwic3FsaXRlX21hc3RlclwiXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGFibGVOYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZXhlY3V0ZVNxbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zdCBzcWxDb21tYW5kcyA9IHRhYmxlTmFtZXMubWFwKHRhYmxlTmFtZSA9PiB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZSA9IHRhYmxlTmFtZS5yZXBsYWNlKC9gL2csIFwiXCIpO1xuICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICAgIHJldHVybiBbYFBSQUdNQSB0YWJsZV9pbmZvKFxcYCR7dGFibGVOYW1lfVxcYClgLCB0YWJsZU5hbWVdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25uLmV4ZWMoXG4gICAgICAgICAgICAgIHNxbENvbW1hbmRzLm1hcChzcWxDbWQgPT4gKHtcbiAgICAgICAgICAgICAgICBzcWw6IHNxbENtZFswXSxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXVxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAoZXJyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3FsQ29tbWFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gc3FsQ29tbWFuZHNbaV1bMV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHNbaV0ucm93cykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV1bcmVzdWx0Lm5hbWVdID0gcmVzdWx0LnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgdGFibGVOYW1lcy5mb3JFYWNoKCh0YWJsZU5hbWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgdC5leGVjdXRlU3FsKFxuICAgICAgICAgICAgICAgICAgYFNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPScke3RhYmxlTmFtZX0nIGFuZCB0eXBlPSd0YWJsZSdgLFxuICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbihfLCByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGUgPSByZXN1bHQucm93cy5pdGVtKDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRhYmxlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgXCJzcWxcIiBpbiB0YWJsZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0YWJsZS5zcWwgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgIC8vbWF0Y2ggY29sdW1uIG5hbWUgd2l0aCBkYXRhIHR5cGVzXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlLnNxbC5tYXRjaChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8oYFxcdytgKSgoXFxzKFtBLVpdKykoKFxcKFxcZCtcXCkpKT8pKS9nXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBzcGxpdCBjb2x1bW4gbmFtZXMgd2l0aCBkYXRhIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbY29sTmFtZSwgY29sVHlwZV0gPSBjb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIiBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV1bY29sTmFtZV0gPSBjb2xUeXBlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjb2x1bW5UeXBlcylcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbihfLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRhYmxlTmFtZXMubGVuZ3RoIC0gMSkgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKGV4ZWN1dGVTcWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4ZWN1dGVTcWwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHNxbCkge1xuICAgIGxldCBjb25zdHJhaW50cyA9IHNxbC5zcGxpdChcIkNPTlNUUkFJTlQgXCIpO1xuICAgIGxldCByZWZlcmVuY2VUYWJsZU5hbWUsIHJlZmVyZW5jZVRhYmxlS2V5cywgdXBkYXRlQWN0aW9uLCBkZWxldGVBY3Rpb247XG4gICAgY29uc3RyYWludHMuc3BsaWNlKDAsIDEpO1xuICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHMubWFwKGNvbnN0cmFpbnRTcWwgPT4ge1xuICAgICAgLy9QYXJzZSBmb3JlaWduIGtleSBzbmlwcGV0c1xuICAgICAgaWYgKGNvbnN0cmFpbnRTcWwuaW5jbHVkZXMoXCJSRUZFUkVOQ0VTXCIpKSB7XG4gICAgICAgIC8vUGFyc2Ugb3V0IHRoZSBjb25zdHJhaW50IGNvbmRpdGlvbiBmb3JtIHNxbCBzdHJpbmdcbiAgICAgICAgdXBkYXRlQWN0aW9uID0gY29uc3RyYWludFNxbC5tYXRjaChcbiAgICAgICAgICAvT04gVVBEQVRFIChDQVNDQURFfFNFVCBOVUxMfFJFU1RSSUNUfE5PIEFDVElPTnxTRVQgREVGQVVMVCl7MX0vXG4gICAgICAgICk7XG4gICAgICAgIGRlbGV0ZUFjdGlvbiA9IGNvbnN0cmFpbnRTcWwubWF0Y2goXG4gICAgICAgICAgL09OIERFTEVURSAoQ0FTQ0FERXxTRVQgTlVMTHxSRVNUUklDVHxOTyBBQ1RJT058U0VUIERFRkFVTFQpezF9L1xuICAgICAgICApO1xuXG4gICAgICAgIGlmICh1cGRhdGVBY3Rpb24pIHtcbiAgICAgICAgICB1cGRhdGVBY3Rpb24gPSB1cGRhdGVBY3Rpb25bMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsZXRlQWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlQWN0aW9uID0gZGVsZXRlQWN0aW9uWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlc1JlZ2V4ID0gL1JFRkVSRU5DRVMuK1xcKCg/OlteKShdK3xcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKlxcKS87XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUNvbmRpdGlvbnMgPSBjb25zdHJhaW50U3FsXG4gICAgICAgICAgLm1hdGNoKHJlZmVyZW5jZXNSZWdleClbMF1cbiAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICByZWZlcmVuY2VUYWJsZU5hbWUgPSBVdGlscy5yZW1vdmVUaWNrcyhyZWZlcmVuY2VDb25kaXRpb25zWzFdKTtcbiAgICAgICAgbGV0IGNvbHVtbk5hbWVzID0gcmVmZXJlbmNlQ29uZGl0aW9uc1syXTtcbiAgICAgICAgY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lcy5yZXBsYWNlKC9cXCh8XFwpL2csIFwiXCIpLnNwbGl0KFwiLCBcIik7XG4gICAgICAgIHJlZmVyZW5jZVRhYmxlS2V5cyA9IGNvbHVtbk5hbWVzLm1hcChjb2x1bW4gPT5cbiAgICAgICAgICBVdGlscy5yZW1vdmVUaWNrcyhjb2x1bW4pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRDb25kaXRpb24gPSBjb25zdHJhaW50U3FsLm1hdGNoKFxuICAgICAgICAvXFwoKD86W14pKF0rfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqXFwpL1xuICAgICAgKVswXTtcbiAgICAgIGNvbnN0cmFpbnRTcWwgPSBjb25zdHJhaW50U3FsLnJlcGxhY2UoL1xcKC4rXFwpLywgXCJcIik7XG4gICAgICBjb25zdCBjb25zdHJhaW50ID0gY29uc3RyYWludFNxbC5zcGxpdChcIiBcIik7XG5cbiAgICAgIGlmIChjb25zdHJhaW50WzFdID09PSBcIlBSSU1BUllcIiB8fCBjb25zdHJhaW50WzFdID09PSBcIkZPUkVJR05cIikge1xuICAgICAgICBjb25zdHJhaW50WzFdICs9IFwiIEtFWVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb25zdHJhaW50TmFtZTogVXRpbHMucmVtb3ZlVGlja3MoY29uc3RyYWludFswXSksXG4gICAgICAgIGNvbnN0cmFpbnRUeXBlOiBjb25zdHJhaW50WzFdLFxuICAgICAgICB1cGRhdGVBY3Rpb24sXG4gICAgICAgIGRlbGV0ZUFjdGlvbixcbiAgICAgICAgc3FsOiBzcWwucmVwbGFjZSgvXCIvZywgXCJgXCIpLCAvL1NxbGl0ZSByZXR1cm5zIGRvdWJsZSBxdW90ZXMgZm9yIHRhYmxlIG5hbWVcbiAgICAgICAgY29uc3RyYWludENvbmRpdGlvbixcbiAgICAgICAgcmVmZXJlbmNlVGFibGVOYW1lLFxuICAgICAgICByZWZlcmVuY2VUYWJsZUtleXNcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludHM7XG4gIH1cblxuICBhcHBseVBhcnNlcnModHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZS5pbmNsdWRlcyhcIihcIikpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgbGVuZ3RoIHBhcnRcbiAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cigwLCB0eXBlLmluZGV4T2YoXCIoXCIpKTtcbiAgICB9XG4gICAgdHlwZSA9IHR5cGUucmVwbGFjZShcIlVOU0lHTkVEXCIsIFwiXCIpLnJlcGxhY2UoXCJaRVJPRklMTFwiLCBcIlwiKTtcbiAgICB0eXBlID0gdHlwZS50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBwYXJzZSA9IHBhcnNlclN0b3JlLmdldCh0eXBlKTtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgcGFyc2UpIHtcbiAgICAgIHJldHVybiBwYXJzZSh2YWx1ZSwgeyB0aW1lem9uZTogdGhpcy5zZXF1ZWxpemUub3B0aW9ucy50aW1lem9uZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZm9ybWF0RXJyb3IoZXJyKSB7XG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBcIlNRTElURV9DT05TVFJBSU5UXCI6IHtcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiRk9SRUlHTiBLRVkgY29uc3RyYWludCBmYWlsZWRcIikpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5Gb3JlaWduS2V5Q29uc3RyYWludEVycm9yKHtcbiAgICAgICAgICAgIHBhcmVudDogZXJyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmllbGRzID0gW107XG5cbiAgICAgICAgLy8gU3FsaXRlIHByZSAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IGNvbHVtbnMgeCwgeSBhcmUgbm90IHVuaXF1ZVxuICAgICAgICBsZXQgbWF0Y2ggPSBlcnIubWVzc2FnZS5tYXRjaCgvY29sdW1ucyAoLio/KSBhcmUvKTtcbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmIG1hdGNoLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV0uc3BsaXQoXCIsIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTcWxpdGUgcG9zdCAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IFVOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogdGFibGUueCwgdGFibGUueVxuICAgICAgICAgIG1hdGNoID0gZXJyLm1lc3NhZ2UubWF0Y2goL1VOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogKC4qKS8pO1xuICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiBtYXRjaC5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV1cbiAgICAgICAgICAgICAgLnNwbGl0KFwiLCBcIilcbiAgICAgICAgICAgICAgLm1hcChjb2x1bW5XaXRoVGFibGUgPT4gY29sdW1uV2l0aFRhYmxlLnNwbGl0KFwiLlwiKVsxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGxldCBtZXNzYWdlID0gXCJWYWxpZGF0aW9uIGVycm9yXCI7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAgIG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9ySXRlbShcbiAgICAgICAgICAgICAgdGhpcy5nZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlKGZpZWxkKSxcbiAgICAgICAgICAgICAgXCJ1bmlxdWUgdmlvbGF0aW9uXCIsIC8vIHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnMuREIsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2VbZmllbGRdLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICBcIm5vdF91bmlxdWVcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgIF8uZm9yT3duKHRoaXMubW9kZWwudW5pcXVlS2V5cywgY29uc3RyYWludCA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pc0VxdWFsKGNvbnN0cmFpbnQuZmllbGRzLCBmaWVsZHMpICYmICEhY29uc3RyYWludC5tc2cpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGNvbnN0cmFpbnQubXNnO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5VbmlxdWVDb25zdHJhaW50RXJyb3Ioe1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgZXJyb3JzLFxuICAgICAgICAgIHBhcmVudDogZXJyLFxuICAgICAgICAgIGZpZWxkc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJTUUxJVEVfQlVTWVwiOlxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5UaW1lb3V0RXJyb3IoZXJyKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBzZXF1ZWxpemVFcnJvcnMuRGF0YWJhc2VFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNob3dJbmRleGVzUXVlcnkoZGF0YSkge1xuICAgIC8vIFNxbGl0ZSByZXR1cm5zIGluZGV4ZXMgc28gdGhlIG9uZSB0aGF0IHdhcyBkZWZpbmVkIGxhc3QgaXMgcmV0dXJuZWQgZmlyc3QuIExldHMgcmV2ZXJzZSB0aGF0IVxuICAgIHJldHVybiBQcm9taXNlLm1hcChkYXRhLnJldmVyc2UoKSwgaXRlbSA9PiB7XG4gICAgICBpdGVtLmZpZWxkcyA9IFtdO1xuICAgICAgaXRlbS5wcmltYXJ5ID0gZmFsc2U7XG4gICAgICBpdGVtLnVuaXF1ZSA9ICEhaXRlbS51bmlxdWU7XG4gICAgICBpdGVtLmNvbnN0cmFpbnROYW1lID0gaXRlbS5uYW1lO1xuICAgICAgcmV0dXJuIHRoaXMucnVuKGBQUkFHTUEgSU5ERVhfSU5GTyhcXGAke2l0ZW0ubmFtZX1cXGApYCkudGhlbihjb2x1bW5zID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICAgIGl0ZW0uZmllbGRzW2NvbHVtbi5zZXFub10gPSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmRlcjogdW5kZWZpbmVkXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhYmFzZU1ldGhvZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNxbC5pbmNsdWRlcyhcIlBSQUdNQVwiKSB8fFxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJDT01NSVRcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiUk9MTEJBQ0tcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiVFJBTlNBQ1RJT05cIilcbiAgICApIHtcbiAgICAgIHJldHVybiBcImV4ZWNcIjsgLy8gTmVlZGVkIHRvIHJ1biBuby1vcCB0cmFuc2FjdGlvblxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmlzSW5zZXJ0UXVlcnkoKSB8fFxuICAgICAgdGhpcy5pc1VwZGF0ZVF1ZXJ5KCkgfHxcbiAgICAgIHRoaXMuaXNCdWxrVXBkYXRlUXVlcnkoKSB8fFxuICAgICAgdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURSBURU1QT1JBUlkgVEFCTEVcIi50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuQlVMS0RFTEVURVxuICAgICkge1xuICAgICAgcmV0dXJuIFwicnVuXCI7XG4gICAgfVxuICAgIHJldHVybiBcImFsbFwiO1xuICB9XG4gIGNvbnZlcnRUb0FycmF5KHJlc3VsdHMpIHtcbiAgICBpZiAoIXJlc3VsdHMucm93cykgcmV0dXJuIFtdO1xuICAgIGlmIChcImFycmF5XCIgaW4gcmVzdWx0cyB8fCBcIl9hcnJheVwiIGluIHJlc3VsdHMucm93cylcbiAgICAgIHJldHVybiByZXN1bHRzLmFycmF5IHx8IHJlc3VsdHMucm93cy5fYXJyYXk7XG4gICAgaWYgKCFyZXN1bHRzLnJvd3MuaXRlbSkgcmV0dXJuIHJlc3VsdHMucm93cztcbiAgICBjb25zdCBkYXRhID0gbmV3IEFycmF5KHJlc3VsdHMucm93cy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkYXRhW2ldID0gcmVzdWx0cy5yb3dzLml0ZW0oaSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUXVlcnk7XG5tb2R1bGUuZXhwb3J0cy5RdWVyeSA9IFF1ZXJ5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IFF1ZXJ5O1xuIl19 \ No newline at end of file diff --git a/dist/errors/association-error.js b/dist/errors/association-error.js index 4759e37..a7dcbbe 100644 --- a/dist/errors/association-error.js +++ b/dist/errors/association-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const BaseError = require('./base-error'); /** @@ -18,17 +22,17 @@ const BaseError = require('./base-error'); */ -let AssociationError = -/*#__PURE__*/ -function (_BaseError) { +let AssociationError = /*#__PURE__*/function (_BaseError) { _inherits(AssociationError, _BaseError); + var _super = _createSuper(AssociationError); + function AssociationError(message) { var _this; _classCallCheck(this, AssociationError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(AssociationError).call(this, message)); + _this = _super.call(this, message); _this.name = 'SequelizeAssociationError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_BaseError) { }(BaseError); module.exports = AssociationError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvYXNzb2NpYXRpb24tZXJyb3IuanMiXSwibmFtZXMiOlsiQmFzZUVycm9yIiwicmVxdWlyZSIsIkFzc29jaWF0aW9uRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7QUFFQTs7Ozs7SUFHTUMsZ0I7Ozs7O0FBQ0osNEJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFBQTs7QUFDbkIsMEZBQU1BLE9BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksMkJBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIbUI7QUFJcEI7OztFQUw0QlAsUzs7QUFRL0JRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsZ0JBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgQmFzZUVycm9yID0gcmVxdWlyZSgnLi9iYXNlLWVycm9yJyk7XHJcblxyXG4vKipcclxuICogVGhyb3duIHdoZW4gYW4gYXNzb2NpYXRpb24gaXMgaW1wcm9wZXJseSBjb25zdHJ1Y3RlZCAoc2VlIG1lc3NhZ2UgZm9yIGRldGFpbHMpXHJcbiAqL1xyXG5jbGFzcyBBc3NvY2lhdGlvbkVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVBc3NvY2lhdGlvbkVycm9yJztcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBc3NvY2lhdGlvbkVycm9yO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvYXNzb2NpYXRpb24tZXJyb3IuanMiXSwibmFtZXMiOlsiQmFzZUVycm9yIiwicmVxdWlyZSIsIkFzc29jaWF0aW9uRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsZ0I7Ozs7O0FBQ0osNEJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFBQTs7QUFDbkIsOEJBQU1BLE9BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksMkJBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIbUI7QUFJcEI7OztFQUw0QlAsUzs7QUFRL0JRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsZ0JBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBCYXNlRXJyb3IgPSByZXF1aXJlKCcuL2Jhc2UtZXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhbiBhc3NvY2lhdGlvbiBpcyBpbXByb3Blcmx5IGNvbnN0cnVjdGVkIChzZWUgbWVzc2FnZSBmb3IgZGV0YWlscylcbiAqL1xuY2xhc3MgQXNzb2NpYXRpb25FcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplQXNzb2NpYXRpb25FcnJvcic7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBc3NvY2lhdGlvbkVycm9yO1xuIl19 \ No newline at end of file diff --git a/dist/errors/base-error.js b/dist/errors/base-error.js index 8cdc812..d87c0d8 100644 --- a/dist/errors/base-error.js +++ b/dist/errors/base-error.js @@ -9,17 +9,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } -function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } -function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } @@ -27,24 +29,24 @@ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || func function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } -let BaseError = -/*#__PURE__*/ -function (_Error) { +let BaseError = /*#__PURE__*/function (_Error) { _inherits(BaseError, _Error); + var _super = _createSuper(BaseError); + function BaseError(message) { var _this; _classCallCheck(this, BaseError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(BaseError).call(this, message)); + _this = _super.call(this, message); _this.name = 'SequelizeBaseError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; } return BaseError; -}(_wrapNativeSuper(Error)); +}( /*#__PURE__*/_wrapNativeSuper(Error)); module.exports = BaseError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvYmFzZS1lcnJvci5qcyJdLCJuYW1lcyI6WyJCYXNlRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFPTUEsUzs7Ozs7QUFDSixxQkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQixtRkFBTUEsT0FBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSxvQkFBWjtBQUNBQyxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQUhtQjtBQUlwQjs7O21CQUxxQkYsSzs7QUFReEJHLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsU0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogU2VxdWVsaXplIHByb3ZpZGVzIGEgaG9zdCBvZiBjdXN0b20gZXJyb3IgY2xhc3NlcywgdG8gYWxsb3cgeW91IHRvIGRvIGVhc2llciBkZWJ1Z2dpbmcuIEFsbCBvZiB0aGVzZSBlcnJvcnMgYXJlIGV4cG9zZWQgb24gdGhlIHNlcXVlbGl6ZSBvYmplY3QgYW5kIHRoZSBzZXF1ZWxpemUgY29uc3RydWN0b3IuXHJcbiAqIEFsbCBzZXF1ZWxpemUgZXJyb3JzIGluaGVyaXQgZnJvbSB0aGUgYmFzZSBKUyBlcnJvciBvYmplY3QuXHJcbiAqXHJcbiAqIFRoaXMgbWVhbnMgdGhhdCBlcnJvcnMgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIGBTZXF1ZWxpemUuVmFsaWRhdGlvbkVycm9yYFxyXG4gKiBUaGUgQmFzZSBFcnJvciBhbGwgU2VxdWVsaXplIEVycm9ycyBpbmhlcml0IGZyb20uXHJcbiAqL1xyXG5jbGFzcyBCYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xyXG4gICAgc3VwZXIobWVzc2FnZSk7XHJcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplQmFzZUVycm9yJztcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCYXNlRXJyb3I7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvYmFzZS1lcnJvci5qcyJdLCJuYW1lcyI6WyJCYXNlRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUNNQSxTOzs7OztBQUNKLHFCQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ25CLDhCQUFNQSxPQUFOO0FBQ0EsVUFBS0MsSUFBTCxHQUFZLG9CQUFaO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBSG1CO0FBSXBCOzs7aUNBTHFCRixLOztBQVF4QkcsTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxTQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTZXF1ZWxpemUgcHJvdmlkZXMgYSBob3N0IG9mIGN1c3RvbSBlcnJvciBjbGFzc2VzLCB0byBhbGxvdyB5b3UgdG8gZG8gZWFzaWVyIGRlYnVnZ2luZy4gQWxsIG9mIHRoZXNlIGVycm9ycyBhcmUgZXhwb3NlZCBvbiB0aGUgc2VxdWVsaXplIG9iamVjdCBhbmQgdGhlIHNlcXVlbGl6ZSBjb25zdHJ1Y3Rvci5cbiAqIEFsbCBzZXF1ZWxpemUgZXJyb3JzIGluaGVyaXQgZnJvbSB0aGUgYmFzZSBKUyBlcnJvciBvYmplY3QuXG4gKlxuICogVGhpcyBtZWFucyB0aGF0IGVycm9ycyBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgYFNlcXVlbGl6ZS5WYWxpZGF0aW9uRXJyb3JgXG4gKiBUaGUgQmFzZSBFcnJvciBhbGwgU2VxdWVsaXplIEVycm9ycyBpbmhlcml0IGZyb20uXG4gKi9cbmNsYXNzIEJhc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVCYXNlRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmFzZUVycm9yO1xuIl19 \ No newline at end of file diff --git a/dist/errors/bulk-record-error.js b/dist/errors/bulk-record-error.js index f8a819e..bbd9680 100644 --- a/dist/errors/bulk-record-error.js +++ b/dist/errors/bulk-record-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const BaseError = require('./base-error'); /** @@ -22,17 +26,17 @@ const BaseError = require('./base-error'); */ -let BulkRecordError = -/*#__PURE__*/ -function (_BaseError) { +let BulkRecordError = /*#__PURE__*/function (_BaseError) { _inherits(BulkRecordError, _BaseError); + var _super = _createSuper(BulkRecordError); + function BulkRecordError(error, record) { var _this; _classCallCheck(this, BulkRecordError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(BulkRecordError).call(this, error.message)); + _this = _super.call(this, error.message); _this.name = 'SequelizeBulkRecordError'; _this.errors = error; _this.record = record; @@ -44,4 +48,4 @@ function (_BaseError) { }(BaseError); module.exports = BulkRecordError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvYnVsay1yZWNvcmQtZXJyb3IuanMiXSwibmFtZXMiOlsiQmFzZUVycm9yIiwicmVxdWlyZSIsIkJ1bGtSZWNvcmRFcnJvciIsImVycm9yIiwicmVjb3JkIiwibWVzc2FnZSIsIm5hbWUiLCJlcnJvcnMiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCO0FBRUE7Ozs7Ozs7OztJQU9NQyxlOzs7OztBQUNKLDJCQUFZQyxLQUFaLEVBQW1CQyxNQUFuQixFQUEyQjtBQUFBOztBQUFBOztBQUN6Qix5RkFBTUQsS0FBSyxDQUFDRSxPQUFaO0FBQ0EsVUFBS0MsSUFBTCxHQUFZLDBCQUFaO0FBQ0EsVUFBS0MsTUFBTCxHQUFjSixLQUFkO0FBQ0EsVUFBS0MsTUFBTCxHQUFjQSxNQUFkO0FBQ0FJLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBTHlCO0FBTTFCOzs7RUFQMkJWLFM7O0FBVTlCVyxNQUFNLENBQUNDLE9BQVAsR0FBaUJWLGVBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgQmFzZUVycm9yID0gcmVxdWlyZSgnLi9iYXNlLWVycm9yJyk7XHJcblxyXG4vKipcclxuICogVGhyb3duIHdoZW4gYnVsayBvcGVyYXRpb24gZmFpbHMsIGl0IHJlcHJlc2VudCBwZXIgcmVjb3JkIGxldmVsIGVycm9yLlxyXG4gKiBVc2VkIHdpdGggUHJvbWlzZS5BZ2dyZWdhdGVFcnJvclxyXG4gKlxyXG4gKiBAcGFyYW0ge0Vycm9yfSAgZXJyb3IgICBFcnJvciBmb3IgYSBnaXZlbiByZWNvcmQvaW5zdGFuY2VcclxuICogQHBhcmFtIHtPYmplY3R9IHJlY29yZCAgREFPIGluc3RhbmNlIHRoYXQgZXJyb3IgYmVsb25ncyB0b1xyXG4gKi9cclxuY2xhc3MgQnVsa1JlY29yZEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihlcnJvciwgcmVjb3JkKSB7XHJcbiAgICBzdXBlcihlcnJvci5tZXNzYWdlKTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVCdWxrUmVjb3JkRXJyb3InO1xyXG4gICAgdGhpcy5lcnJvcnMgPSBlcnJvcjtcclxuICAgIHRoaXMucmVjb3JkID0gcmVjb3JkO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJ1bGtSZWNvcmRFcnJvcjtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvYnVsay1yZWNvcmQtZXJyb3IuanMiXSwibmFtZXMiOlsiQmFzZUVycm9yIiwicmVxdWlyZSIsIkJ1bGtSZWNvcmRFcnJvciIsImVycm9yIiwicmVjb3JkIiwibWVzc2FnZSIsIm5hbWUiLCJlcnJvcnMiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsY0FBRCxDQUF6QjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7SUFDTUMsZTs7Ozs7QUFDSiwyQkFBWUMsS0FBWixFQUFtQkMsTUFBbkIsRUFBMkI7QUFBQTs7QUFBQTs7QUFDekIsOEJBQU1ELEtBQUssQ0FBQ0UsT0FBWjtBQUNBLFVBQUtDLElBQUwsR0FBWSwwQkFBWjtBQUNBLFVBQUtDLE1BQUwsR0FBY0osS0FBZDtBQUNBLFVBQUtDLE1BQUwsR0FBY0EsTUFBZDtBQUNBSSxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQUx5QjtBQU0xQjs7O0VBUDJCVixTOztBQVU5QlcsTUFBTSxDQUFDQyxPQUFQLEdBQWlCVixlQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQmFzZUVycm9yID0gcmVxdWlyZSgnLi9iYXNlLWVycm9yJyk7XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYnVsayBvcGVyYXRpb24gZmFpbHMsIGl0IHJlcHJlc2VudCBwZXIgcmVjb3JkIGxldmVsIGVycm9yLlxuICogVXNlZCB3aXRoIFByb21pc2UuQWdncmVnYXRlRXJyb3JcbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSAgZXJyb3IgICBFcnJvciBmb3IgYSBnaXZlbiByZWNvcmQvaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWNvcmQgIERBTyBpbnN0YW5jZSB0aGF0IGVycm9yIGJlbG9uZ3MgdG9cbiAqL1xuY2xhc3MgQnVsa1JlY29yZEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IoZXJyb3IsIHJlY29yZCkge1xuICAgIHN1cGVyKGVycm9yLm1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVCdWxrUmVjb3JkRXJyb3InO1xuICAgIHRoaXMuZXJyb3JzID0gZXJyb3I7XG4gICAgdGhpcy5yZWNvcmQgPSByZWNvcmQ7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCdWxrUmVjb3JkRXJyb3I7XG4iXX0= \ No newline at end of file diff --git a/dist/errors/connection-error.js b/dist/errors/connection-error.js index 2d64537..3e958f4 100644 --- a/dist/errors/connection-error.js +++ b/dist/errors/connection-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const BaseError = require('./base-error'); /** @@ -18,17 +22,17 @@ const BaseError = require('./base-error'); */ -let ConnectionError = -/*#__PURE__*/ -function (_BaseError) { +let ConnectionError = /*#__PURE__*/function (_BaseError) { _inherits(ConnectionError, _BaseError); + var _super = _createSuper(ConnectionError); + function ConnectionError(parent) { var _this; _classCallCheck(this, ConnectionError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectionError).call(this, parent ? parent.message : '')); + _this = _super.call(this, parent ? parent.message : ''); _this.name = 'SequelizeConnectionError'; /** * The connection specific error which triggered this one @@ -45,4 +49,4 @@ function (_BaseError) { }(BaseError); module.exports = ConnectionError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi1lcnJvci5qcyJdLCJuYW1lcyI6WyJCYXNlRXJyb3IiLCJyZXF1aXJlIiwiQ29ubmVjdGlvbkVycm9yIiwicGFyZW50IiwibWVzc2FnZSIsIm5hbWUiLCJvcmlnaW5hbCIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7QUFFQTs7Ozs7SUFHTUMsZTs7Ozs7QUFDSiwyQkFBWUMsTUFBWixFQUFvQjtBQUFBOztBQUFBOztBQUNsQix5RkFBTUEsTUFBTSxHQUFHQSxNQUFNLENBQUNDLE9BQVYsR0FBb0IsRUFBaEM7QUFDQSxVQUFLQyxJQUFMLEdBQVksMEJBQVo7QUFDQTs7Ozs7QUFJQSxVQUFLRixNQUFMLEdBQWNBLE1BQWQ7QUFDQSxVQUFLRyxRQUFMLEdBQWdCSCxNQUFoQjtBQUNBSSxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQVRrQjtBQVVuQjs7O0VBWDJCVCxTOztBQWM5QlUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCVCxlQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IEJhc2VFcnJvciA9IHJlcXVpcmUoJy4vYmFzZS1lcnJvcicpO1xyXG5cclxuLyoqXHJcbiAqIEEgYmFzZSBjbGFzcyBmb3IgYWxsIGNvbm5lY3Rpb24gcmVsYXRlZCBlcnJvcnMuXHJcbiAqL1xyXG5jbGFzcyBDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKHBhcmVudCkge1xyXG4gICAgc3VwZXIocGFyZW50ID8gcGFyZW50Lm1lc3NhZ2UgOiAnJyk7XHJcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplQ29ubmVjdGlvbkVycm9yJztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbm5lY3Rpb24gc3BlY2lmaWMgZXJyb3Igd2hpY2ggdHJpZ2dlcmVkIHRoaXMgb25lXHJcbiAgICAgKiBAdHlwZSB7RXJyb3J9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xyXG4gICAgdGhpcy5vcmlnaW5hbCA9IHBhcmVudDtcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb25uZWN0aW9uRXJyb3I7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi1lcnJvci5qcyJdLCJuYW1lcyI6WyJCYXNlRXJyb3IiLCJyZXF1aXJlIiwiQ29ubmVjdGlvbkVycm9yIiwicGFyZW50IiwibWVzc2FnZSIsIm5hbWUiLCJvcmlnaW5hbCIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsZTs7Ozs7QUFDSiwyQkFBWUMsTUFBWixFQUFvQjtBQUFBOztBQUFBOztBQUNsQiw4QkFBTUEsTUFBTSxHQUFHQSxNQUFNLENBQUNDLE9BQVYsR0FBb0IsRUFBaEM7QUFDQSxVQUFLQyxJQUFMLEdBQVksMEJBQVo7QUFDQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxVQUFLRixNQUFMLEdBQWNBLE1BQWQ7QUFDQSxVQUFLRyxRQUFMLEdBQWdCSCxNQUFoQjtBQUNBSSxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQVRrQjtBQVVuQjs7O0VBWDJCVCxTOztBQWM5QlUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCVCxlQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQmFzZUVycm9yID0gcmVxdWlyZSgnLi9iYXNlLWVycm9yJyk7XG5cbi8qKlxuICogQSBiYXNlIGNsYXNzIGZvciBhbGwgY29ubmVjdGlvbiByZWxhdGVkIGVycm9ycy5cbiAqL1xuY2xhc3MgQ29ubmVjdGlvbkVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgc3VwZXIocGFyZW50ID8gcGFyZW50Lm1lc3NhZ2UgOiAnJyk7XG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZUNvbm5lY3Rpb25FcnJvcic7XG4gICAgLyoqXG4gICAgICogVGhlIGNvbm5lY3Rpb24gc3BlY2lmaWMgZXJyb3Igd2hpY2ggdHJpZ2dlcmVkIHRoaXMgb25lXG4gICAgICogQHR5cGUge0Vycm9yfVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMub3JpZ2luYWwgPSBwYXJlbnQ7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25uZWN0aW9uRXJyb3I7XG4iXX0= \ No newline at end of file diff --git a/dist/errors/connection/access-denied-error.js b/dist/errors/connection/access-denied-error.js index c45047e..d91d821 100644 --- a/dist/errors/connection/access-denied-error.js +++ b/dist/errors/connection/access-denied-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const ConnectionError = require('./../connection-error'); /** @@ -18,17 +22,17 @@ const ConnectionError = require('./../connection-error'); */ -let AccessDeniedError = -/*#__PURE__*/ -function (_ConnectionError) { +let AccessDeniedError = /*#__PURE__*/function (_ConnectionError) { _inherits(AccessDeniedError, _ConnectionError); + var _super = _createSuper(AccessDeniedError); + function AccessDeniedError(parent) { var _this; _classCallCheck(this, AccessDeniedError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(AccessDeniedError).call(this, parent)); + _this = _super.call(this, parent); _this.name = 'SequelizeAccessDeniedError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_ConnectionError) { }(ConnectionError); module.exports = AccessDeniedError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9hY2Nlc3MtZGVuaWVkLWVycm9yLmpzIl0sIm5hbWVzIjpbIkNvbm5lY3Rpb25FcnJvciIsInJlcXVpcmUiLCJBY2Nlc3NEZW5pZWRFcnJvciIsInBhcmVudCIsIm5hbWUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxlQUFlLEdBQUdDLE9BQU8sQ0FBQyx1QkFBRCxDQUEvQjtBQUVBOzs7OztJQUdNQyxpQjs7Ozs7QUFDSiw2QkFBWUMsTUFBWixFQUFvQjtBQUFBOztBQUFBOztBQUNsQiwyRkFBTUEsTUFBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSw0QkFBWjtBQUNBQyxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQUhrQjtBQUluQjs7O0VBTDZCUCxlOztBQVFoQ1EsTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxpQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBDb25uZWN0aW9uRXJyb3IgPSByZXF1aXJlKCcuLy4uL2Nvbm5lY3Rpb24tZXJyb3InKTtcclxuXHJcbi8qKlxyXG4gKiBUaHJvd24gd2hlbiBhIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSBpcyByZWZ1c2VkIGR1ZSB0byBpbnN1ZmZpY2llbnQgcHJpdmlsZWdlc1xyXG4gKi9cclxuY2xhc3MgQWNjZXNzRGVuaWVkRXJyb3IgZXh0ZW5kcyBDb25uZWN0aW9uRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKHBhcmVudCkge1xyXG4gICAgc3VwZXIocGFyZW50KTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVBY2Nlc3NEZW5pZWRFcnJvcic7XHJcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzRGVuaWVkRXJyb3I7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9hY2Nlc3MtZGVuaWVkLWVycm9yLmpzIl0sIm5hbWVzIjpbIkNvbm5lY3Rpb25FcnJvciIsInJlcXVpcmUiLCJBY2Nlc3NEZW5pZWRFcnJvciIsInBhcmVudCIsIm5hbWUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsZUFBZSxHQUFHQyxPQUFPLENBQUMsdUJBQUQsQ0FBL0I7QUFFQTtBQUNBO0FBQ0E7OztJQUNNQyxpQjs7Ozs7QUFDSiw2QkFBWUMsTUFBWixFQUFvQjtBQUFBOztBQUFBOztBQUNsQiw4QkFBTUEsTUFBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSw0QkFBWjtBQUNBQyxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQUhrQjtBQUluQjs7O0VBTDZCUCxlOztBQVFoQ1EsTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxpQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IENvbm5lY3Rpb25FcnJvciA9IHJlcXVpcmUoJy4vLi4vY29ubmVjdGlvbi1lcnJvcicpO1xuXG4vKipcbiAqIFRocm93biB3aGVuIGEgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIGlzIHJlZnVzZWQgZHVlIHRvIGluc3VmZmljaWVudCBwcml2aWxlZ2VzXG4gKi9cbmNsYXNzIEFjY2Vzc0RlbmllZEVycm9yIGV4dGVuZHMgQ29ubmVjdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgc3VwZXIocGFyZW50KTtcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplQWNjZXNzRGVuaWVkRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzRGVuaWVkRXJyb3I7XG4iXX0= \ No newline at end of file diff --git a/dist/errors/connection/connection-acquire-timeout-error.js b/dist/errors/connection/connection-acquire-timeout-error.js index 5caabd9..be81d90 100644 --- a/dist/errors/connection/connection-acquire-timeout-error.js +++ b/dist/errors/connection/connection-acquire-timeout-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const ConnectionError = require('./../connection-error'); /** @@ -18,17 +22,17 @@ const ConnectionError = require('./../connection-error'); */ -let ConnectionAcquireTimeoutError = -/*#__PURE__*/ -function (_ConnectionError) { +let ConnectionAcquireTimeoutError = /*#__PURE__*/function (_ConnectionError) { _inherits(ConnectionAcquireTimeoutError, _ConnectionError); + var _super = _createSuper(ConnectionAcquireTimeoutError); + function ConnectionAcquireTimeoutError(parent) { var _this; _classCallCheck(this, ConnectionAcquireTimeoutError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectionAcquireTimeoutError).call(this, parent)); + _this = _super.call(this, parent); _this.name = 'SequelizeConnectionAcquireTimeoutError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_ConnectionError) { }(ConnectionError); module.exports = ConnectionAcquireTimeoutError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9jb25uZWN0aW9uLWFjcXVpcmUtdGltZW91dC1lcnJvci5qcyJdLCJuYW1lcyI6WyJDb25uZWN0aW9uRXJyb3IiLCJyZXF1aXJlIiwiQ29ubmVjdGlvbkFjcXVpcmVUaW1lb3V0RXJyb3IiLCJwYXJlbnQiLCJuYW1lIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsZUFBZSxHQUFHQyxPQUFPLENBQUMsdUJBQUQsQ0FBL0I7QUFFQTs7Ozs7SUFHTUMsNkI7Ozs7O0FBQ0oseUNBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsdUdBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksd0NBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUx5Q1AsZTs7QUFRNUNRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsNkJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgQ29ubmVjdGlvbkVycm9yID0gcmVxdWlyZSgnLi8uLi9jb25uZWN0aW9uLWVycm9yJyk7XHJcblxyXG4vKipcclxuICogVGhyb3duIHdoZW4gY29ubmVjdGlvbiBpcyBub3QgYWNxdWlyZWQgZHVlIHRvIHRpbWVvdXRcclxuICovXHJcbmNsYXNzIENvbm5lY3Rpb25BY3F1aXJlVGltZW91dEVycm9yIGV4dGVuZHMgQ29ubmVjdGlvbkVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcclxuICAgIHN1cGVyKHBhcmVudCk7XHJcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplQ29ubmVjdGlvbkFjcXVpcmVUaW1lb3V0RXJyb3InO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbm5lY3Rpb25BY3F1aXJlVGltZW91dEVycm9yO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9jb25uZWN0aW9uLWFjcXVpcmUtdGltZW91dC1lcnJvci5qcyJdLCJuYW1lcyI6WyJDb25uZWN0aW9uRXJyb3IiLCJyZXF1aXJlIiwiQ29ubmVjdGlvbkFjcXVpcmVUaW1lb3V0RXJyb3IiLCJwYXJlbnQiLCJuYW1lIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLGVBQWUsR0FBR0MsT0FBTyxDQUFDLHVCQUFELENBQS9CO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsNkI7Ozs7O0FBQ0oseUNBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsOEJBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksd0NBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUx5Q1AsZTs7QUFRNUNRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsNkJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBDb25uZWN0aW9uRXJyb3IgPSByZXF1aXJlKCcuLy4uL2Nvbm5lY3Rpb24tZXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd24gd2hlbiBjb25uZWN0aW9uIGlzIG5vdCBhY3F1aXJlZCBkdWUgdG8gdGltZW91dFxuICovXG5jbGFzcyBDb25uZWN0aW9uQWNxdWlyZVRpbWVvdXRFcnJvciBleHRlbmRzIENvbm5lY3Rpb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHBhcmVudCkge1xuICAgIHN1cGVyKHBhcmVudCk7XG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZUNvbm5lY3Rpb25BY3F1aXJlVGltZW91dEVycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbm5lY3Rpb25BY3F1aXJlVGltZW91dEVycm9yO1xuIl19 \ No newline at end of file diff --git a/dist/errors/connection/connection-refused-error.js b/dist/errors/connection/connection-refused-error.js index 8bcf487..7c38063 100644 --- a/dist/errors/connection/connection-refused-error.js +++ b/dist/errors/connection/connection-refused-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const ConnectionError = require('./../connection-error'); /** @@ -18,17 +22,17 @@ const ConnectionError = require('./../connection-error'); */ -let ConnectionRefusedError = -/*#__PURE__*/ -function (_ConnectionError) { +let ConnectionRefusedError = /*#__PURE__*/function (_ConnectionError) { _inherits(ConnectionRefusedError, _ConnectionError); + var _super = _createSuper(ConnectionRefusedError); + function ConnectionRefusedError(parent) { var _this; _classCallCheck(this, ConnectionRefusedError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectionRefusedError).call(this, parent)); + _this = _super.call(this, parent); _this.name = 'SequelizeConnectionRefusedError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_ConnectionError) { }(ConnectionError); module.exports = ConnectionRefusedError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9jb25uZWN0aW9uLXJlZnVzZWQtZXJyb3IuanMiXSwibmFtZXMiOlsiQ29ubmVjdGlvbkVycm9yIiwicmVxdWlyZSIsIkNvbm5lY3Rpb25SZWZ1c2VkRXJyb3IiLCJwYXJlbnQiLCJuYW1lIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsZUFBZSxHQUFHQyxPQUFPLENBQUMsdUJBQUQsQ0FBL0I7QUFFQTs7Ozs7SUFHTUMsc0I7Ozs7O0FBQ0osa0NBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsZ0dBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksaUNBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUxrQ1AsZTs7QUFRckNRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsc0JBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgQ29ubmVjdGlvbkVycm9yID0gcmVxdWlyZSgnLi8uLi9jb25uZWN0aW9uLWVycm9yJyk7XHJcblxyXG4vKipcclxuICogVGhyb3duIHdoZW4gYSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UgaXMgcmVmdXNlZFxyXG4gKi9cclxuY2xhc3MgQ29ubmVjdGlvblJlZnVzZWRFcnJvciBleHRlbmRzIENvbm5lY3Rpb25FcnJvciB7XHJcbiAgY29uc3RydWN0b3IocGFyZW50KSB7XHJcbiAgICBzdXBlcihwYXJlbnQpO1xyXG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZUNvbm5lY3Rpb25SZWZ1c2VkRXJyb3InO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3I7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9jb25uZWN0aW9uLXJlZnVzZWQtZXJyb3IuanMiXSwibmFtZXMiOlsiQ29ubmVjdGlvbkVycm9yIiwicmVxdWlyZSIsIkNvbm5lY3Rpb25SZWZ1c2VkRXJyb3IiLCJwYXJlbnQiLCJuYW1lIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLGVBQWUsR0FBR0MsT0FBTyxDQUFDLHVCQUFELENBQS9CO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsc0I7Ozs7O0FBQ0osa0NBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsOEJBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksaUNBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUxrQ1AsZTs7QUFRckNRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsc0JBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBDb25uZWN0aW9uRXJyb3IgPSByZXF1aXJlKCcuLy4uL2Nvbm5lY3Rpb24tZXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSBpcyByZWZ1c2VkXG4gKi9cbmNsYXNzIENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IgZXh0ZW5kcyBDb25uZWN0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICBzdXBlcihwYXJlbnQpO1xuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVDb25uZWN0aW9uUmVmdXNlZEVycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3I7XG4iXX0= \ No newline at end of file diff --git a/dist/errors/connection/connection-timed-out-error.js b/dist/errors/connection/connection-timed-out-error.js index 8ae3b70..0cfc57f 100644 --- a/dist/errors/connection/connection-timed-out-error.js +++ b/dist/errors/connection/connection-timed-out-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const ConnectionError = require('./../connection-error'); /** @@ -18,17 +22,17 @@ const ConnectionError = require('./../connection-error'); */ -let ConnectionTimedOutError = -/*#__PURE__*/ -function (_ConnectionError) { +let ConnectionTimedOutError = /*#__PURE__*/function (_ConnectionError) { _inherits(ConnectionTimedOutError, _ConnectionError); + var _super = _createSuper(ConnectionTimedOutError); + function ConnectionTimedOutError(parent) { var _this; _classCallCheck(this, ConnectionTimedOutError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectionTimedOutError).call(this, parent)); + _this = _super.call(this, parent); _this.name = 'SequelizeConnectionTimedOutError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_ConnectionError) { }(ConnectionError); module.exports = ConnectionTimedOutError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9jb25uZWN0aW9uLXRpbWVkLW91dC1lcnJvci5qcyJdLCJuYW1lcyI6WyJDb25uZWN0aW9uRXJyb3IiLCJyZXF1aXJlIiwiQ29ubmVjdGlvblRpbWVkT3V0RXJyb3IiLCJwYXJlbnQiLCJuYW1lIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsZUFBZSxHQUFHQyxPQUFPLENBQUMsdUJBQUQsQ0FBL0I7QUFFQTs7Ozs7SUFHTUMsdUI7Ozs7O0FBQ0osbUNBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsaUdBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksa0NBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUxtQ1AsZTs7QUFRdENRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsdUJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgQ29ubmVjdGlvbkVycm9yID0gcmVxdWlyZSgnLi8uLi9jb25uZWN0aW9uLWVycm9yJyk7XHJcblxyXG4vKipcclxuICogVGhyb3duIHdoZW4gYSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UgdGltZXMgb3V0XHJcbiAqL1xyXG5jbGFzcyBDb25uZWN0aW9uVGltZWRPdXRFcnJvciBleHRlbmRzIENvbm5lY3Rpb25FcnJvciB7XHJcbiAgY29uc3RydWN0b3IocGFyZW50KSB7XHJcbiAgICBzdXBlcihwYXJlbnQpO1xyXG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZUNvbm5lY3Rpb25UaW1lZE91dEVycm9yJztcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb25uZWN0aW9uVGltZWRPdXRFcnJvcjtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9jb25uZWN0aW9uLXRpbWVkLW91dC1lcnJvci5qcyJdLCJuYW1lcyI6WyJDb25uZWN0aW9uRXJyb3IiLCJyZXF1aXJlIiwiQ29ubmVjdGlvblRpbWVkT3V0RXJyb3IiLCJwYXJlbnQiLCJuYW1lIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLGVBQWUsR0FBR0MsT0FBTyxDQUFDLHVCQUFELENBQS9CO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsdUI7Ozs7O0FBQ0osbUNBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsOEJBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksa0NBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUxtQ1AsZTs7QUFRdENRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsdUJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBDb25uZWN0aW9uRXJyb3IgPSByZXF1aXJlKCcuLy4uL2Nvbm5lY3Rpb24tZXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSB0aW1lcyBvdXRcbiAqL1xuY2xhc3MgQ29ubmVjdGlvblRpbWVkT3V0RXJyb3IgZXh0ZW5kcyBDb25uZWN0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICBzdXBlcihwYXJlbnQpO1xuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVDb25uZWN0aW9uVGltZWRPdXRFcnJvcic7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25uZWN0aW9uVGltZWRPdXRFcnJvcjtcbiJdfQ== \ No newline at end of file diff --git a/dist/errors/connection/host-not-found-error.js b/dist/errors/connection/host-not-found-error.js index 5399ce6..4af4455 100644 --- a/dist/errors/connection/host-not-found-error.js +++ b/dist/errors/connection/host-not-found-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const ConnectionError = require('./../connection-error'); /** @@ -18,17 +22,17 @@ const ConnectionError = require('./../connection-error'); */ -let HostNotFoundError = -/*#__PURE__*/ -function (_ConnectionError) { +let HostNotFoundError = /*#__PURE__*/function (_ConnectionError) { _inherits(HostNotFoundError, _ConnectionError); + var _super = _createSuper(HostNotFoundError); + function HostNotFoundError(parent) { var _this; _classCallCheck(this, HostNotFoundError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(HostNotFoundError).call(this, parent)); + _this = _super.call(this, parent); _this.name = 'SequelizeHostNotFoundError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_ConnectionError) { }(ConnectionError); module.exports = HostNotFoundError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9ob3N0LW5vdC1mb3VuZC1lcnJvci5qcyJdLCJuYW1lcyI6WyJDb25uZWN0aW9uRXJyb3IiLCJyZXF1aXJlIiwiSG9zdE5vdEZvdW5kRXJyb3IiLCJwYXJlbnQiLCJuYW1lIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsZUFBZSxHQUFHQyxPQUFPLENBQUMsdUJBQUQsQ0FBL0I7QUFFQTs7Ozs7SUFHTUMsaUI7Ozs7O0FBQ0osNkJBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsMkZBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksNEJBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUw2QlAsZTs7QUFRaENRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsaUJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgQ29ubmVjdGlvbkVycm9yID0gcmVxdWlyZSgnLi8uLi9jb25uZWN0aW9uLWVycm9yJyk7XHJcblxyXG4vKipcclxuICogVGhyb3duIHdoZW4gYSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UgaGFzIGEgaG9zdG5hbWUgdGhhdCB3YXMgbm90IGZvdW5kXHJcbiAqL1xyXG5jbGFzcyBIb3N0Tm90Rm91bmRFcnJvciBleHRlbmRzIENvbm5lY3Rpb25FcnJvciB7XHJcbiAgY29uc3RydWN0b3IocGFyZW50KSB7XHJcbiAgICBzdXBlcihwYXJlbnQpO1xyXG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZUhvc3ROb3RGb3VuZEVycm9yJztcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBIb3N0Tm90Rm91bmRFcnJvcjtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9ob3N0LW5vdC1mb3VuZC1lcnJvci5qcyJdLCJuYW1lcyI6WyJDb25uZWN0aW9uRXJyb3IiLCJyZXF1aXJlIiwiSG9zdE5vdEZvdW5kRXJyb3IiLCJwYXJlbnQiLCJuYW1lIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLGVBQWUsR0FBR0MsT0FBTyxDQUFDLHVCQUFELENBQS9CO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsaUI7Ozs7O0FBQ0osNkJBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsOEJBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksNEJBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUw2QlAsZTs7QUFRaENRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsaUJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBDb25uZWN0aW9uRXJyb3IgPSByZXF1aXJlKCcuLy4uL2Nvbm5lY3Rpb24tZXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSBoYXMgYSBob3N0bmFtZSB0aGF0IHdhcyBub3QgZm91bmRcbiAqL1xuY2xhc3MgSG9zdE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBDb25uZWN0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICBzdXBlcihwYXJlbnQpO1xuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVIb3N0Tm90Rm91bmRFcnJvcic7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIb3N0Tm90Rm91bmRFcnJvcjtcbiJdfQ== \ No newline at end of file diff --git a/dist/errors/connection/host-not-reachable-error.js b/dist/errors/connection/host-not-reachable-error.js index 2493ac9..3bf13b1 100644 --- a/dist/errors/connection/host-not-reachable-error.js +++ b/dist/errors/connection/host-not-reachable-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const ConnectionError = require('./../connection-error'); /** @@ -18,17 +22,17 @@ const ConnectionError = require('./../connection-error'); */ -let HostNotReachableError = -/*#__PURE__*/ -function (_ConnectionError) { +let HostNotReachableError = /*#__PURE__*/function (_ConnectionError) { _inherits(HostNotReachableError, _ConnectionError); + var _super = _createSuper(HostNotReachableError); + function HostNotReachableError(parent) { var _this; _classCallCheck(this, HostNotReachableError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(HostNotReachableError).call(this, parent)); + _this = _super.call(this, parent); _this.name = 'SequelizeHostNotReachableError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_ConnectionError) { }(ConnectionError); module.exports = HostNotReachableError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9ob3N0LW5vdC1yZWFjaGFibGUtZXJyb3IuanMiXSwibmFtZXMiOlsiQ29ubmVjdGlvbkVycm9yIiwicmVxdWlyZSIsIkhvc3ROb3RSZWFjaGFibGVFcnJvciIsInBhcmVudCIsIm5hbWUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxlQUFlLEdBQUdDLE9BQU8sQ0FBQyx1QkFBRCxDQUEvQjtBQUVBOzs7OztJQUdNQyxxQjs7Ozs7QUFDSixpQ0FBWUMsTUFBWixFQUFvQjtBQUFBOztBQUFBOztBQUNsQiwrRkFBTUEsTUFBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSxnQ0FBWjtBQUNBQyxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQUhrQjtBQUluQjs7O0VBTGlDUCxlOztBQVFwQ1EsTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxxQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBDb25uZWN0aW9uRXJyb3IgPSByZXF1aXJlKCcuLy4uL2Nvbm5lY3Rpb24tZXJyb3InKTtcclxuXHJcbi8qKlxyXG4gKiBUaHJvd24gd2hlbiBhIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSBoYXMgYSBob3N0bmFtZSB0aGF0IHdhcyBub3QgcmVhY2hhYmxlXHJcbiAqL1xyXG5jbGFzcyBIb3N0Tm90UmVhY2hhYmxlRXJyb3IgZXh0ZW5kcyBDb25uZWN0aW9uRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKHBhcmVudCkge1xyXG4gICAgc3VwZXIocGFyZW50KTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVIb3N0Tm90UmVhY2hhYmxlRXJyb3InO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEhvc3ROb3RSZWFjaGFibGVFcnJvcjtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9ob3N0LW5vdC1yZWFjaGFibGUtZXJyb3IuanMiXSwibmFtZXMiOlsiQ29ubmVjdGlvbkVycm9yIiwicmVxdWlyZSIsIkhvc3ROb3RSZWFjaGFibGVFcnJvciIsInBhcmVudCIsIm5hbWUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsZUFBZSxHQUFHQyxPQUFPLENBQUMsdUJBQUQsQ0FBL0I7QUFFQTtBQUNBO0FBQ0E7OztJQUNNQyxxQjs7Ozs7QUFDSixpQ0FBWUMsTUFBWixFQUFvQjtBQUFBOztBQUFBOztBQUNsQiw4QkFBTUEsTUFBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSxnQ0FBWjtBQUNBQyxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQUhrQjtBQUluQjs7O0VBTGlDUCxlOztBQVFwQ1EsTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxxQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IENvbm5lY3Rpb25FcnJvciA9IHJlcXVpcmUoJy4vLi4vY29ubmVjdGlvbi1lcnJvcicpO1xuXG4vKipcbiAqIFRocm93biB3aGVuIGEgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIGhhcyBhIGhvc3RuYW1lIHRoYXQgd2FzIG5vdCByZWFjaGFibGVcbiAqL1xuY2xhc3MgSG9zdE5vdFJlYWNoYWJsZUVycm9yIGV4dGVuZHMgQ29ubmVjdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgc3VwZXIocGFyZW50KTtcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplSG9zdE5vdFJlYWNoYWJsZUVycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhvc3ROb3RSZWFjaGFibGVFcnJvcjtcbiJdfQ== \ No newline at end of file diff --git a/dist/errors/connection/invalid-connection-error.js b/dist/errors/connection/invalid-connection-error.js index 52bd6b8..f88526b 100644 --- a/dist/errors/connection/invalid-connection-error.js +++ b/dist/errors/connection/invalid-connection-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const ConnectionError = require('./../connection-error'); /** @@ -18,17 +22,17 @@ const ConnectionError = require('./../connection-error'); */ -let InvalidConnectionError = -/*#__PURE__*/ -function (_ConnectionError) { +let InvalidConnectionError = /*#__PURE__*/function (_ConnectionError) { _inherits(InvalidConnectionError, _ConnectionError); + var _super = _createSuper(InvalidConnectionError); + function InvalidConnectionError(parent) { var _this; _classCallCheck(this, InvalidConnectionError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(InvalidConnectionError).call(this, parent)); + _this = _super.call(this, parent); _this.name = 'SequelizeInvalidConnectionError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_ConnectionError) { }(ConnectionError); module.exports = InvalidConnectionError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9pbnZhbGlkLWNvbm5lY3Rpb24tZXJyb3IuanMiXSwibmFtZXMiOlsiQ29ubmVjdGlvbkVycm9yIiwicmVxdWlyZSIsIkludmFsaWRDb25uZWN0aW9uRXJyb3IiLCJwYXJlbnQiLCJuYW1lIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsZUFBZSxHQUFHQyxPQUFPLENBQUMsdUJBQUQsQ0FBL0I7QUFFQTs7Ozs7SUFHTUMsc0I7Ozs7O0FBQ0osa0NBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsZ0dBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksaUNBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUxrQ1AsZTs7QUFRckNRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsc0JBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgQ29ubmVjdGlvbkVycm9yID0gcmVxdWlyZSgnLi8uLi9jb25uZWN0aW9uLWVycm9yJyk7XHJcblxyXG4vKipcclxuICogVGhyb3duIHdoZW4gYSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UgaGFzIGludmFsaWQgdmFsdWVzIGZvciBhbnkgb2YgdGhlIGNvbm5lY3Rpb24gcGFyYW1ldGVyc1xyXG4gKi9cclxuY2xhc3MgSW52YWxpZENvbm5lY3Rpb25FcnJvciBleHRlbmRzIENvbm5lY3Rpb25FcnJvciB7XHJcbiAgY29uc3RydWN0b3IocGFyZW50KSB7XHJcbiAgICBzdXBlcihwYXJlbnQpO1xyXG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZUludmFsaWRDb25uZWN0aW9uRXJyb3InO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEludmFsaWRDb25uZWN0aW9uRXJyb3I7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvY29ubmVjdGlvbi9pbnZhbGlkLWNvbm5lY3Rpb24tZXJyb3IuanMiXSwibmFtZXMiOlsiQ29ubmVjdGlvbkVycm9yIiwicmVxdWlyZSIsIkludmFsaWRDb25uZWN0aW9uRXJyb3IiLCJwYXJlbnQiLCJuYW1lIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLGVBQWUsR0FBR0MsT0FBTyxDQUFDLHVCQUFELENBQS9CO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsc0I7Ozs7O0FBQ0osa0NBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsOEJBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksaUNBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUxrQ1AsZTs7QUFRckNRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsc0JBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBDb25uZWN0aW9uRXJyb3IgPSByZXF1aXJlKCcuLy4uL2Nvbm5lY3Rpb24tZXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSBoYXMgaW52YWxpZCB2YWx1ZXMgZm9yIGFueSBvZiB0aGUgY29ubmVjdGlvbiBwYXJhbWV0ZXJzXG4gKi9cbmNsYXNzIEludmFsaWRDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBDb25uZWN0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICBzdXBlcihwYXJlbnQpO1xuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVJbnZhbGlkQ29ubmVjdGlvbkVycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEludmFsaWRDb25uZWN0aW9uRXJyb3I7XG4iXX0= \ No newline at end of file diff --git a/dist/errors/database-error.js b/dist/errors/database-error.js index 04bb451..264c25e 100644 --- a/dist/errors/database-error.js +++ b/dist/errors/database-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const BaseError = require('./base-error'); /** @@ -18,17 +22,17 @@ const BaseError = require('./base-error'); */ -let DatabaseError = -/*#__PURE__*/ -function (_BaseError) { +let DatabaseError = /*#__PURE__*/function (_BaseError) { _inherits(DatabaseError, _BaseError); + var _super = _createSuper(DatabaseError); + function DatabaseError(parent) { var _this; _classCallCheck(this, DatabaseError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(DatabaseError).call(this, parent.message)); + _this = _super.call(this, parent.message); _this.name = 'SequelizeDatabaseError'; /** * @type {Error} @@ -60,4 +64,4 @@ function (_BaseError) { }(BaseError); module.exports = DatabaseError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvZGF0YWJhc2UtZXJyb3IuanMiXSwibmFtZXMiOlsiQmFzZUVycm9yIiwicmVxdWlyZSIsIkRhdGFiYXNlRXJyb3IiLCJwYXJlbnQiLCJtZXNzYWdlIiwibmFtZSIsIm9yaWdpbmFsIiwic3FsIiwicGFyYW1ldGVycyIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7QUFFQTs7Ozs7SUFHTUMsYTs7Ozs7QUFDSix5QkFBWUMsTUFBWixFQUFvQjtBQUFBOztBQUFBOztBQUNsQix1RkFBTUEsTUFBTSxDQUFDQyxPQUFiO0FBQ0EsVUFBS0MsSUFBTCxHQUFZLHdCQUFaO0FBQ0E7Ozs7QUFHQSxVQUFLRixNQUFMLEdBQWNBLE1BQWQ7QUFDQTs7OztBQUdBLFVBQUtHLFFBQUwsR0FBZ0JILE1BQWhCO0FBQ0E7Ozs7O0FBSUEsVUFBS0ksR0FBTCxHQUFXSixNQUFNLENBQUNJLEdBQWxCO0FBQ0E7Ozs7O0FBSUEsVUFBS0MsVUFBTCxHQUFrQkwsTUFBTSxDQUFDSyxVQUF6QjtBQUNBQyxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQXJCa0I7QUFzQm5COzs7RUF2QnlCWCxTOztBQTBCNUJZLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlgsYUFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBCYXNlRXJyb3IgPSByZXF1aXJlKCcuL2Jhc2UtZXJyb3InKTtcclxuXHJcbi8qKlxyXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGFsbCBkYXRhYmFzZSByZWxhdGVkIGVycm9ycy5cclxuICovXHJcbmNsYXNzIERhdGFiYXNlRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKHBhcmVudCkge1xyXG4gICAgc3VwZXIocGFyZW50Lm1lc3NhZ2UpO1xyXG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZURhdGFiYXNlRXJyb3InO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7RXJyb3J9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7RXJyb3J9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3JpZ2luYWwgPSBwYXJlbnQ7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTUUwgdGhhdCB0cmlnZ2VyZWQgdGhlIGVycm9yXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNxbCA9IHBhcmVudC5zcWw7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgc3FsIHRoYXQgdHJpZ2dlcmVkIHRoZSBlcnJvclxyXG4gICAgICogQHR5cGUge0FycmF5PGFueT59XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGFyYW1ldGVycyA9IHBhcmVudC5wYXJhbWV0ZXJzO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFiYXNlRXJyb3I7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvZGF0YWJhc2UtZXJyb3IuanMiXSwibmFtZXMiOlsiQmFzZUVycm9yIiwicmVxdWlyZSIsIkRhdGFiYXNlRXJyb3IiLCJwYXJlbnQiLCJtZXNzYWdlIiwibmFtZSIsIm9yaWdpbmFsIiwic3FsIiwicGFyYW1ldGVycyIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsYTs7Ozs7QUFDSix5QkFBWUMsTUFBWixFQUFvQjtBQUFBOztBQUFBOztBQUNsQiw4QkFBTUEsTUFBTSxDQUFDQyxPQUFiO0FBQ0EsVUFBS0MsSUFBTCxHQUFZLHdCQUFaO0FBQ0E7QUFDSjtBQUNBOztBQUNJLFVBQUtGLE1BQUwsR0FBY0EsTUFBZDtBQUNBO0FBQ0o7QUFDQTs7QUFDSSxVQUFLRyxRQUFMLEdBQWdCSCxNQUFoQjtBQUNBO0FBQ0o7QUFDQTtBQUNBOztBQUNJLFVBQUtJLEdBQUwsR0FBV0osTUFBTSxDQUFDSSxHQUFsQjtBQUNBO0FBQ0o7QUFDQTtBQUNBOztBQUNJLFVBQUtDLFVBQUwsR0FBa0JMLE1BQU0sQ0FBQ0ssVUFBekI7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFyQmtCO0FBc0JuQjs7O0VBdkJ5QlgsUzs7QUEwQjVCWSxNQUFNLENBQUNDLE9BQVAsR0FBaUJYLGFBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBCYXNlRXJyb3IgPSByZXF1aXJlKCcuL2Jhc2UtZXJyb3InKTtcblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGFsbCBkYXRhYmFzZSByZWxhdGVkIGVycm9ycy5cbiAqL1xuY2xhc3MgRGF0YWJhc2VFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHBhcmVudCkge1xuICAgIHN1cGVyKHBhcmVudC5tZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplRGF0YWJhc2VFcnJvcic7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0Vycm9yfVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtFcnJvcn1cbiAgICAgKi9cbiAgICB0aGlzLm9yaWdpbmFsID0gcGFyZW50O1xuICAgIC8qKlxuICAgICAqIFRoZSBTUUwgdGhhdCB0cmlnZ2VyZWQgdGhlIGVycm9yXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnNxbCA9IHBhcmVudC5zcWw7XG4gICAgLyoqXG4gICAgICogVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBzcWwgdGhhdCB0cmlnZ2VyZWQgdGhlIGVycm9yXG4gICAgICogQHR5cGUge0FycmF5PGFueT59XG4gICAgICovXG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyZW50LnBhcmFtZXRlcnM7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhYmFzZUVycm9yO1xuIl19 \ No newline at end of file diff --git a/dist/errors/database/exclusion-constraint-error.js b/dist/errors/database/exclusion-constraint-error.js index 96734f3..8f065cd 100644 --- a/dist/errors/database/exclusion-constraint-error.js +++ b/dist/errors/database/exclusion-constraint-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const DatabaseError = require('./../database-error'); /** @@ -18,11 +22,11 @@ const DatabaseError = require('./../database-error'); */ -let ExclusionConstraintError = -/*#__PURE__*/ -function (_DatabaseError) { +let ExclusionConstraintError = /*#__PURE__*/function (_DatabaseError) { _inherits(ExclusionConstraintError, _DatabaseError); + var _super = _createSuper(ExclusionConstraintError); + function ExclusionConstraintError(options) { var _this; @@ -32,7 +36,7 @@ function (_DatabaseError) { options.parent = options.parent || { sql: '' }; - _this = _possibleConstructorReturn(this, _getPrototypeOf(ExclusionConstraintError).call(this, options.parent)); + _this = _super.call(this, options.parent); _this.name = 'SequelizeExclusionConstraintError'; _this.message = options.message || options.parent.message || ''; _this.constraint = options.constraint; @@ -46,4 +50,4 @@ function (_DatabaseError) { }(DatabaseError); module.exports = ExclusionConstraintError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvZGF0YWJhc2UvZXhjbHVzaW9uLWNvbnN0cmFpbnQtZXJyb3IuanMiXSwibmFtZXMiOlsiRGF0YWJhc2VFcnJvciIsInJlcXVpcmUiLCJFeGNsdXNpb25Db25zdHJhaW50RXJyb3IiLCJvcHRpb25zIiwicGFyZW50Iiwic3FsIiwibmFtZSIsIm1lc3NhZ2UiLCJjb25zdHJhaW50IiwiZmllbGRzIiwidGFibGUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxhQUFhLEdBQUdDLE9BQU8sQ0FBQyxxQkFBRCxDQUE3QjtBQUVBOzs7OztJQUdNQyx3Qjs7Ozs7QUFDSixvQ0FBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQkEsSUFBQUEsT0FBTyxHQUFHQSxPQUFPLElBQUksRUFBckI7QUFDQUEsSUFBQUEsT0FBTyxDQUFDQyxNQUFSLEdBQWlCRCxPQUFPLENBQUNDLE1BQVIsSUFBa0I7QUFBRUMsTUFBQUEsR0FBRyxFQUFFO0FBQVAsS0FBbkM7QUFFQSxrR0FBTUYsT0FBTyxDQUFDQyxNQUFkO0FBQ0EsVUFBS0UsSUFBTCxHQUFZLG1DQUFaO0FBRUEsVUFBS0MsT0FBTCxHQUFlSixPQUFPLENBQUNJLE9BQVIsSUFBbUJKLE9BQU8sQ0FBQ0MsTUFBUixDQUFlRyxPQUFsQyxJQUE2QyxFQUE1RDtBQUNBLFVBQUtDLFVBQUwsR0FBa0JMLE9BQU8sQ0FBQ0ssVUFBMUI7QUFDQSxVQUFLQyxNQUFMLEdBQWNOLE9BQU8sQ0FBQ00sTUFBdEI7QUFDQSxVQUFLQyxLQUFMLEdBQWFQLE9BQU8sQ0FBQ08sS0FBckI7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFYbUI7QUFZcEI7OztFQWJvQ2IsYTs7QUFnQnZDYyxNQUFNLENBQUNDLE9BQVAsR0FBaUJiLHdCQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IERhdGFiYXNlRXJyb3IgPSByZXF1aXJlKCcuLy4uL2RhdGFiYXNlLWVycm9yJyk7XHJcblxyXG4vKipcclxuICogVGhyb3duIHdoZW4gYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQgaW4gdGhlIGRhdGFiYXNlXHJcbiAqL1xyXG5jbGFzcyBFeGNsdXNpb25Db25zdHJhaW50RXJyb3IgZXh0ZW5kcyBEYXRhYmFzZUVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIG9wdGlvbnMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQgfHwgeyBzcWw6ICcnIH07XHJcblxyXG4gICAgc3VwZXIob3B0aW9ucy5wYXJlbnQpO1xyXG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZUV4Y2x1c2lvbkNvbnN0cmFpbnRFcnJvcic7XHJcblxyXG4gICAgdGhpcy5tZXNzYWdlID0gb3B0aW9ucy5tZXNzYWdlIHx8IG9wdGlvbnMucGFyZW50Lm1lc3NhZ2UgfHwgJyc7XHJcbiAgICB0aGlzLmNvbnN0cmFpbnQgPSBvcHRpb25zLmNvbnN0cmFpbnQ7XHJcbiAgICB0aGlzLmZpZWxkcyA9IG9wdGlvbnMuZmllbGRzO1xyXG4gICAgdGhpcy50YWJsZSA9IG9wdGlvbnMudGFibGU7XHJcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXhjbHVzaW9uQ29uc3RyYWludEVycm9yO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvZGF0YWJhc2UvZXhjbHVzaW9uLWNvbnN0cmFpbnQtZXJyb3IuanMiXSwibmFtZXMiOlsiRGF0YWJhc2VFcnJvciIsInJlcXVpcmUiLCJFeGNsdXNpb25Db25zdHJhaW50RXJyb3IiLCJvcHRpb25zIiwicGFyZW50Iiwic3FsIiwibmFtZSIsIm1lc3NhZ2UiLCJjb25zdHJhaW50IiwiZmllbGRzIiwidGFibGUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsYUFBYSxHQUFHQyxPQUFPLENBQUMscUJBQUQsQ0FBN0I7QUFFQTtBQUNBO0FBQ0E7OztJQUNNQyx3Qjs7Ozs7QUFDSixvQ0FBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQkEsSUFBQUEsT0FBTyxHQUFHQSxPQUFPLElBQUksRUFBckI7QUFDQUEsSUFBQUEsT0FBTyxDQUFDQyxNQUFSLEdBQWlCRCxPQUFPLENBQUNDLE1BQVIsSUFBa0I7QUFBRUMsTUFBQUEsR0FBRyxFQUFFO0FBQVAsS0FBbkM7QUFFQSw4QkFBTUYsT0FBTyxDQUFDQyxNQUFkO0FBQ0EsVUFBS0UsSUFBTCxHQUFZLG1DQUFaO0FBRUEsVUFBS0MsT0FBTCxHQUFlSixPQUFPLENBQUNJLE9BQVIsSUFBbUJKLE9BQU8sQ0FBQ0MsTUFBUixDQUFlRyxPQUFsQyxJQUE2QyxFQUE1RDtBQUNBLFVBQUtDLFVBQUwsR0FBa0JMLE9BQU8sQ0FBQ0ssVUFBMUI7QUFDQSxVQUFLQyxNQUFMLEdBQWNOLE9BQU8sQ0FBQ00sTUFBdEI7QUFDQSxVQUFLQyxLQUFMLEdBQWFQLE9BQU8sQ0FBQ08sS0FBckI7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFYbUI7QUFZcEI7OztFQWJvQ2IsYTs7QUFnQnZDYyxNQUFNLENBQUNDLE9BQVAsR0FBaUJiLHdCQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0YWJhc2VFcnJvciA9IHJlcXVpcmUoJy4vLi4vZGF0YWJhc2UtZXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhbiBleGNsdXNpb24gY29uc3RyYWludCBpcyB2aW9sYXRlZCBpbiB0aGUgZGF0YWJhc2VcbiAqL1xuY2xhc3MgRXhjbHVzaW9uQ29uc3RyYWludEVycm9yIGV4dGVuZHMgRGF0YWJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLnBhcmVudCA9IG9wdGlvbnMucGFyZW50IHx8IHsgc3FsOiAnJyB9O1xuXG4gICAgc3VwZXIob3B0aW9ucy5wYXJlbnQpO1xuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVFeGNsdXNpb25Db25zdHJhaW50RXJyb3InO1xuXG4gICAgdGhpcy5tZXNzYWdlID0gb3B0aW9ucy5tZXNzYWdlIHx8IG9wdGlvbnMucGFyZW50Lm1lc3NhZ2UgfHwgJyc7XG4gICAgdGhpcy5jb25zdHJhaW50ID0gb3B0aW9ucy5jb25zdHJhaW50O1xuICAgIHRoaXMuZmllbGRzID0gb3B0aW9ucy5maWVsZHM7XG4gICAgdGhpcy50YWJsZSA9IG9wdGlvbnMudGFibGU7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFeGNsdXNpb25Db25zdHJhaW50RXJyb3I7XG4iXX0= \ No newline at end of file diff --git a/dist/errors/database/foreign-key-constraint-error.js b/dist/errors/database/foreign-key-constraint-error.js index 066b972..59bddc7 100644 --- a/dist/errors/database/foreign-key-constraint-error.js +++ b/dist/errors/database/foreign-key-constraint-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const DatabaseError = require('./../database-error'); /** @@ -18,11 +22,11 @@ const DatabaseError = require('./../database-error'); */ -let ForeignKeyConstraintError = -/*#__PURE__*/ -function (_DatabaseError) { +let ForeignKeyConstraintError = /*#__PURE__*/function (_DatabaseError) { _inherits(ForeignKeyConstraintError, _DatabaseError); + var _super = _createSuper(ForeignKeyConstraintError); + function ForeignKeyConstraintError(options) { var _this; @@ -32,7 +36,7 @@ function (_DatabaseError) { options.parent = options.parent || { sql: '' }; - _this = _possibleConstructorReturn(this, _getPrototypeOf(ForeignKeyConstraintError).call(this, options.parent)); + _this = _super.call(this, options.parent); _this.name = 'SequelizeForeignKeyConstraintError'; _this.message = options.message || options.parent.message || 'Database Error'; _this.fields = options.fields; @@ -48,4 +52,4 @@ function (_DatabaseError) { }(DatabaseError); module.exports = ForeignKeyConstraintError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvZGF0YWJhc2UvZm9yZWlnbi1rZXktY29uc3RyYWludC1lcnJvci5qcyJdLCJuYW1lcyI6WyJEYXRhYmFzZUVycm9yIiwicmVxdWlyZSIsIkZvcmVpZ25LZXlDb25zdHJhaW50RXJyb3IiLCJvcHRpb25zIiwicGFyZW50Iiwic3FsIiwibmFtZSIsIm1lc3NhZ2UiLCJmaWVsZHMiLCJ0YWJsZSIsInZhbHVlIiwiaW5kZXgiLCJyZWx0eXBlIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsYUFBYSxHQUFHQyxPQUFPLENBQUMscUJBQUQsQ0FBN0I7QUFFQTs7Ozs7SUFHTUMseUI7Ozs7O0FBQ0oscUNBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFBQTs7QUFDbkJBLElBQUFBLE9BQU8sR0FBR0EsT0FBTyxJQUFJLEVBQXJCO0FBQ0FBLElBQUFBLE9BQU8sQ0FBQ0MsTUFBUixHQUFpQkQsT0FBTyxDQUFDQyxNQUFSLElBQWtCO0FBQUVDLE1BQUFBLEdBQUcsRUFBRTtBQUFQLEtBQW5DO0FBRUEsbUdBQU1GLE9BQU8sQ0FBQ0MsTUFBZDtBQUNBLFVBQUtFLElBQUwsR0FBWSxvQ0FBWjtBQUVBLFVBQUtDLE9BQUwsR0FBZUosT0FBTyxDQUFDSSxPQUFSLElBQW1CSixPQUFPLENBQUNDLE1BQVIsQ0FBZUcsT0FBbEMsSUFBNkMsZ0JBQTVEO0FBQ0EsVUFBS0MsTUFBTCxHQUFjTCxPQUFPLENBQUNLLE1BQXRCO0FBQ0EsVUFBS0MsS0FBTCxHQUFhTixPQUFPLENBQUNNLEtBQXJCO0FBQ0EsVUFBS0MsS0FBTCxHQUFhUCxPQUFPLENBQUNPLEtBQXJCO0FBQ0EsVUFBS0MsS0FBTCxHQUFhUixPQUFPLENBQUNRLEtBQXJCO0FBQ0EsVUFBS0MsT0FBTCxHQUFlVCxPQUFPLENBQUNTLE9BQXZCO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBYm1CO0FBY3BCOzs7RUFmcUNmLGE7O0FBa0J4Q2dCLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQmYseUJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgRGF0YWJhc2VFcnJvciA9IHJlcXVpcmUoJy4vLi4vZGF0YWJhc2UtZXJyb3InKTtcclxuXHJcbi8qKlxyXG4gKiBUaHJvd24gd2hlbiBhIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQgaW4gdGhlIGRhdGFiYXNlXHJcbiAqL1xyXG5jbGFzcyBGb3JlaWduS2V5Q29uc3RyYWludEVycm9yIGV4dGVuZHMgRGF0YWJhc2VFcnJvciB7XHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICBvcHRpb25zLnBhcmVudCA9IG9wdGlvbnMucGFyZW50IHx8IHsgc3FsOiAnJyB9O1xyXG5cclxuICAgIHN1cGVyKG9wdGlvbnMucGFyZW50KTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVGb3JlaWduS2V5Q29uc3RyYWludEVycm9yJztcclxuXHJcbiAgICB0aGlzLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2UgfHwgb3B0aW9ucy5wYXJlbnQubWVzc2FnZSB8fCAnRGF0YWJhc2UgRXJyb3InO1xyXG4gICAgdGhpcy5maWVsZHMgPSBvcHRpb25zLmZpZWxkcztcclxuICAgIHRoaXMudGFibGUgPSBvcHRpb25zLnRhYmxlO1xyXG4gICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XHJcbiAgICB0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleDtcclxuICAgIHRoaXMucmVsdHlwZSA9IG9wdGlvbnMucmVsdHlwZTtcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGb3JlaWduS2V5Q29uc3RyYWludEVycm9yO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvZGF0YWJhc2UvZm9yZWlnbi1rZXktY29uc3RyYWludC1lcnJvci5qcyJdLCJuYW1lcyI6WyJEYXRhYmFzZUVycm9yIiwicmVxdWlyZSIsIkZvcmVpZ25LZXlDb25zdHJhaW50RXJyb3IiLCJvcHRpb25zIiwicGFyZW50Iiwic3FsIiwibmFtZSIsIm1lc3NhZ2UiLCJmaWVsZHMiLCJ0YWJsZSIsInZhbHVlIiwiaW5kZXgiLCJyZWx0eXBlIiwiRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImNvbnN0cnVjdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLGFBQWEsR0FBR0MsT0FBTyxDQUFDLHFCQUFELENBQTdCO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMseUI7Ozs7O0FBQ0oscUNBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFBQTs7QUFDbkJBLElBQUFBLE9BQU8sR0FBR0EsT0FBTyxJQUFJLEVBQXJCO0FBQ0FBLElBQUFBLE9BQU8sQ0FBQ0MsTUFBUixHQUFpQkQsT0FBTyxDQUFDQyxNQUFSLElBQWtCO0FBQUVDLE1BQUFBLEdBQUcsRUFBRTtBQUFQLEtBQW5DO0FBRUEsOEJBQU1GLE9BQU8sQ0FBQ0MsTUFBZDtBQUNBLFVBQUtFLElBQUwsR0FBWSxvQ0FBWjtBQUVBLFVBQUtDLE9BQUwsR0FBZUosT0FBTyxDQUFDSSxPQUFSLElBQW1CSixPQUFPLENBQUNDLE1BQVIsQ0FBZUcsT0FBbEMsSUFBNkMsZ0JBQTVEO0FBQ0EsVUFBS0MsTUFBTCxHQUFjTCxPQUFPLENBQUNLLE1BQXRCO0FBQ0EsVUFBS0MsS0FBTCxHQUFhTixPQUFPLENBQUNNLEtBQXJCO0FBQ0EsVUFBS0MsS0FBTCxHQUFhUCxPQUFPLENBQUNPLEtBQXJCO0FBQ0EsVUFBS0MsS0FBTCxHQUFhUixPQUFPLENBQUNRLEtBQXJCO0FBQ0EsVUFBS0MsT0FBTCxHQUFlVCxPQUFPLENBQUNTLE9BQXZCO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBYm1CO0FBY3BCOzs7RUFmcUNmLGE7O0FBa0J4Q2dCLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQmYseUJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRhYmFzZUVycm9yID0gcmVxdWlyZSgnLi8uLi9kYXRhYmFzZS1lcnJvcicpO1xuXG4vKipcbiAqIFRocm93biB3aGVuIGEgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyB2aW9sYXRlZCBpbiB0aGUgZGF0YWJhc2VcbiAqL1xuY2xhc3MgRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvciBleHRlbmRzIERhdGFiYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudCB8fCB7IHNxbDogJycgfTtcblxuICAgIHN1cGVyKG9wdGlvbnMucGFyZW50KTtcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvcic7XG5cbiAgICB0aGlzLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2UgfHwgb3B0aW9ucy5wYXJlbnQubWVzc2FnZSB8fCAnRGF0YWJhc2UgRXJyb3InO1xuICAgIHRoaXMuZmllbGRzID0gb3B0aW9ucy5maWVsZHM7XG4gICAgdGhpcy50YWJsZSA9IG9wdGlvbnMudGFibGU7XG4gICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgdGhpcy5yZWx0eXBlID0gb3B0aW9ucy5yZWx0eXBlO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvcjtcbiJdfQ== \ No newline at end of file diff --git a/dist/errors/database/timeout-error.js b/dist/errors/database/timeout-error.js index 91f27c1..49325ca 100644 --- a/dist/errors/database/timeout-error.js +++ b/dist/errors/database/timeout-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const DatabaseError = require('./../database-error'); /** @@ -18,17 +22,17 @@ const DatabaseError = require('./../database-error'); */ -let TimeoutError = -/*#__PURE__*/ -function (_DatabaseError) { +let TimeoutError = /*#__PURE__*/function (_DatabaseError) { _inherits(TimeoutError, _DatabaseError); + var _super = _createSuper(TimeoutError); + function TimeoutError(parent) { var _this; _classCallCheck(this, TimeoutError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(TimeoutError).call(this, parent)); + _this = _super.call(this, parent); _this.name = 'SequelizeTimeoutError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_DatabaseError) { }(DatabaseError); module.exports = TimeoutError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvZGF0YWJhc2UvdGltZW91dC1lcnJvci5qcyJdLCJuYW1lcyI6WyJEYXRhYmFzZUVycm9yIiwicmVxdWlyZSIsIlRpbWVvdXRFcnJvciIsInBhcmVudCIsIm5hbWUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxhQUFhLEdBQUdDLE9BQU8sQ0FBQyxxQkFBRCxDQUE3QjtBQUVBOzs7OztJQUdNQyxZOzs7OztBQUNKLHdCQUFZQyxNQUFaLEVBQW9CO0FBQUE7O0FBQUE7O0FBQ2xCLHNGQUFNQSxNQUFOO0FBQ0EsVUFBS0MsSUFBTCxHQUFZLHVCQUFaO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBSGtCO0FBSW5COzs7RUFMd0JQLGE7O0FBUTNCUSxNQUFNLENBQUNDLE9BQVAsR0FBaUJQLFlBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgRGF0YWJhc2VFcnJvciA9IHJlcXVpcmUoJy4vLi4vZGF0YWJhc2UtZXJyb3InKTtcclxuXHJcbi8qKlxyXG4gKiBUaHJvd24gd2hlbiBhIGRhdGFiYXNlIHF1ZXJ5IHRpbWVzIG91dCBiZWNhdXNlIG9mIGEgZGVhZGxvY2tcclxuICovXHJcbmNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIERhdGFiYXNlRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKHBhcmVudCkge1xyXG4gICAgc3VwZXIocGFyZW50KTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVUaW1lb3V0RXJyb3InO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbWVvdXRFcnJvcjtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvZGF0YWJhc2UvdGltZW91dC1lcnJvci5qcyJdLCJuYW1lcyI6WyJEYXRhYmFzZUVycm9yIiwicmVxdWlyZSIsIlRpbWVvdXRFcnJvciIsInBhcmVudCIsIm5hbWUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsYUFBYSxHQUFHQyxPQUFPLENBQUMscUJBQUQsQ0FBN0I7QUFFQTtBQUNBO0FBQ0E7OztJQUNNQyxZOzs7OztBQUNKLHdCQUFZQyxNQUFaLEVBQW9CO0FBQUE7O0FBQUE7O0FBQ2xCLDhCQUFNQSxNQUFOO0FBQ0EsVUFBS0MsSUFBTCxHQUFZLHVCQUFaO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBSGtCO0FBSW5COzs7RUFMd0JQLGE7O0FBUTNCUSxNQUFNLENBQUNDLE9BQVAsR0FBaUJQLFlBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRhYmFzZUVycm9yID0gcmVxdWlyZSgnLi8uLi9kYXRhYmFzZS1lcnJvcicpO1xuXG4vKipcbiAqIFRocm93biB3aGVuIGEgZGF0YWJhc2UgcXVlcnkgdGltZXMgb3V0IGJlY2F1c2Ugb2YgYSBkZWFkbG9ja1xuICovXG5jbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBEYXRhYmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgc3VwZXIocGFyZW50KTtcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplVGltZW91dEVycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRpbWVvdXRFcnJvcjtcbiJdfQ== \ No newline at end of file diff --git a/dist/errors/database/unknown-constraint-error.js b/dist/errors/database/unknown-constraint-error.js index c9d7a10..4d5c2f0 100644 --- a/dist/errors/database/unknown-constraint-error.js +++ b/dist/errors/database/unknown-constraint-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const DatabaseError = require('./../database-error'); /** @@ -18,11 +22,11 @@ const DatabaseError = require('./../database-error'); */ -let UnknownConstraintError = -/*#__PURE__*/ -function (_DatabaseError) { +let UnknownConstraintError = /*#__PURE__*/function (_DatabaseError) { _inherits(UnknownConstraintError, _DatabaseError); + var _super = _createSuper(UnknownConstraintError); + function UnknownConstraintError(options) { var _this; @@ -32,7 +36,7 @@ function (_DatabaseError) { options.parent = options.parent || { sql: '' }; - _this = _possibleConstructorReturn(this, _getPrototypeOf(UnknownConstraintError).call(this, options.parent)); + _this = _super.call(this, options.parent); _this.name = 'SequelizeUnknownConstraintError'; _this.message = options.message || 'The specified constraint does not exist'; _this.constraint = options.constraint; @@ -46,4 +50,4 @@ function (_DatabaseError) { }(DatabaseError); module.exports = UnknownConstraintError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvZGF0YWJhc2UvdW5rbm93bi1jb25zdHJhaW50LWVycm9yLmpzIl0sIm5hbWVzIjpbIkRhdGFiYXNlRXJyb3IiLCJyZXF1aXJlIiwiVW5rbm93bkNvbnN0cmFpbnRFcnJvciIsIm9wdGlvbnMiLCJwYXJlbnQiLCJzcWwiLCJuYW1lIiwibWVzc2FnZSIsImNvbnN0cmFpbnQiLCJmaWVsZHMiLCJ0YWJsZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLGFBQWEsR0FBR0MsT0FBTyxDQUFDLHFCQUFELENBQTdCO0FBRUE7Ozs7O0lBR01DLHNCOzs7OztBQUNKLGtDQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ25CQSxJQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxFQUFyQjtBQUNBQSxJQUFBQSxPQUFPLENBQUNDLE1BQVIsR0FBaUJELE9BQU8sQ0FBQ0MsTUFBUixJQUFrQjtBQUFFQyxNQUFBQSxHQUFHLEVBQUU7QUFBUCxLQUFuQztBQUVBLGdHQUFNRixPQUFPLENBQUNDLE1BQWQ7QUFDQSxVQUFLRSxJQUFMLEdBQVksaUNBQVo7QUFFQSxVQUFLQyxPQUFMLEdBQWVKLE9BQU8sQ0FBQ0ksT0FBUixJQUFtQix5Q0FBbEM7QUFDQSxVQUFLQyxVQUFMLEdBQWtCTCxPQUFPLENBQUNLLFVBQTFCO0FBQ0EsVUFBS0MsTUFBTCxHQUFjTixPQUFPLENBQUNNLE1BQXRCO0FBQ0EsVUFBS0MsS0FBTCxHQUFhUCxPQUFPLENBQUNPLEtBQXJCO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBWG1CO0FBWXBCOzs7RUFia0NiLGE7O0FBZ0JyQ2MsTUFBTSxDQUFDQyxPQUFQLEdBQWlCYixzQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBEYXRhYmFzZUVycm9yID0gcmVxdWlyZSgnLi8uLi9kYXRhYmFzZS1lcnJvcicpO1xyXG5cclxuLyoqXHJcbiAqIFRocm93biB3aGVuIGNvbnN0cmFpbnQgbmFtZSBpcyBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlXHJcbiAqL1xyXG5jbGFzcyBVbmtub3duQ29uc3RyYWludEVycm9yIGV4dGVuZHMgRGF0YWJhc2VFcnJvciB7XHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICBvcHRpb25zLnBhcmVudCA9IG9wdGlvbnMucGFyZW50IHx8IHsgc3FsOiAnJyB9O1xyXG5cclxuICAgIHN1cGVyKG9wdGlvbnMucGFyZW50KTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVVbmtub3duQ29uc3RyYWludEVycm9yJztcclxuXHJcbiAgICB0aGlzLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2UgfHwgJ1RoZSBzcGVjaWZpZWQgY29uc3RyYWludCBkb2VzIG5vdCBleGlzdCc7XHJcbiAgICB0aGlzLmNvbnN0cmFpbnQgPSBvcHRpb25zLmNvbnN0cmFpbnQ7XHJcbiAgICB0aGlzLmZpZWxkcyA9IG9wdGlvbnMuZmllbGRzO1xyXG4gICAgdGhpcy50YWJsZSA9IG9wdGlvbnMudGFibGU7XHJcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVW5rbm93bkNvbnN0cmFpbnRFcnJvcjtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvZGF0YWJhc2UvdW5rbm93bi1jb25zdHJhaW50LWVycm9yLmpzIl0sIm5hbWVzIjpbIkRhdGFiYXNlRXJyb3IiLCJyZXF1aXJlIiwiVW5rbm93bkNvbnN0cmFpbnRFcnJvciIsIm9wdGlvbnMiLCJwYXJlbnQiLCJzcWwiLCJuYW1lIiwibWVzc2FnZSIsImNvbnN0cmFpbnQiLCJmaWVsZHMiLCJ0YWJsZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxhQUFhLEdBQUdDLE9BQU8sQ0FBQyxxQkFBRCxDQUE3QjtBQUVBO0FBQ0E7QUFDQTs7O0lBQ01DLHNCOzs7OztBQUNKLGtDQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ25CQSxJQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxFQUFyQjtBQUNBQSxJQUFBQSxPQUFPLENBQUNDLE1BQVIsR0FBaUJELE9BQU8sQ0FBQ0MsTUFBUixJQUFrQjtBQUFFQyxNQUFBQSxHQUFHLEVBQUU7QUFBUCxLQUFuQztBQUVBLDhCQUFNRixPQUFPLENBQUNDLE1BQWQ7QUFDQSxVQUFLRSxJQUFMLEdBQVksaUNBQVo7QUFFQSxVQUFLQyxPQUFMLEdBQWVKLE9BQU8sQ0FBQ0ksT0FBUixJQUFtQix5Q0FBbEM7QUFDQSxVQUFLQyxVQUFMLEdBQWtCTCxPQUFPLENBQUNLLFVBQTFCO0FBQ0EsVUFBS0MsTUFBTCxHQUFjTixPQUFPLENBQUNNLE1BQXRCO0FBQ0EsVUFBS0MsS0FBTCxHQUFhUCxPQUFPLENBQUNPLEtBQXJCO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBWG1CO0FBWXBCOzs7RUFia0NiLGE7O0FBZ0JyQ2MsTUFBTSxDQUFDQyxPQUFQLEdBQWlCYixzQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGFiYXNlRXJyb3IgPSByZXF1aXJlKCcuLy4uL2RhdGFiYXNlLWVycm9yJyk7XG5cbi8qKlxuICogVGhyb3duIHdoZW4gY29uc3RyYWludCBuYW1lIGlzIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2VcbiAqL1xuY2xhc3MgVW5rbm93bkNvbnN0cmFpbnRFcnJvciBleHRlbmRzIERhdGFiYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudCB8fCB7IHNxbDogJycgfTtcblxuICAgIHN1cGVyKG9wdGlvbnMucGFyZW50KTtcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplVW5rbm93bkNvbnN0cmFpbnRFcnJvcic7XG5cbiAgICB0aGlzLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2UgfHwgJ1RoZSBzcGVjaWZpZWQgY29uc3RyYWludCBkb2VzIG5vdCBleGlzdCc7XG4gICAgdGhpcy5jb25zdHJhaW50ID0gb3B0aW9ucy5jb25zdHJhaW50O1xuICAgIHRoaXMuZmllbGRzID0gb3B0aW9ucy5maWVsZHM7XG4gICAgdGhpcy50YWJsZSA9IG9wdGlvbnMudGFibGU7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBVbmtub3duQ29uc3RyYWludEVycm9yO1xuIl19 \ No newline at end of file diff --git a/dist/errors/eager-loading-error.js b/dist/errors/eager-loading-error.js index 05ce691..82b6c2f 100644 --- a/dist/errors/eager-loading-error.js +++ b/dist/errors/eager-loading-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const BaseError = require('./base-error'); /** @@ -18,17 +22,17 @@ const BaseError = require('./base-error'); */ -let EagerLoadingError = -/*#__PURE__*/ -function (_BaseError) { +let EagerLoadingError = /*#__PURE__*/function (_BaseError) { _inherits(EagerLoadingError, _BaseError); + var _super = _createSuper(EagerLoadingError); + function EagerLoadingError(message) { var _this; _classCallCheck(this, EagerLoadingError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(EagerLoadingError).call(this, message)); + _this = _super.call(this, message); _this.name = 'SequelizeEagerLoadingError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_BaseError) { }(BaseError); module.exports = EagerLoadingError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvZWFnZXItbG9hZGluZy1lcnJvci5qcyJdLCJuYW1lcyI6WyJCYXNlRXJyb3IiLCJyZXF1aXJlIiwiRWFnZXJMb2FkaW5nRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7QUFFQTs7Ozs7SUFHTUMsaUI7Ozs7O0FBQ0osNkJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFBQTs7QUFDbkIsMkZBQU1BLE9BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksNEJBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIbUI7QUFJcEI7OztFQUw2QlAsUzs7QUFRaENRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsaUJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgQmFzZUVycm9yID0gcmVxdWlyZSgnLi9iYXNlLWVycm9yJyk7XHJcblxyXG4vKipcclxuICogVGhyb3duIHdoZW4gYW4gaW5jbHVkZSBzdGF0ZW1lbnQgaXMgaW1wcm9wZXJseSBjb25zdHJ1Y3RlZCAoc2VlIG1lc3NhZ2UgZm9yIGRldGFpbHMpXHJcbiAqL1xyXG5jbGFzcyBFYWdlckxvYWRpbmdFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XHJcbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xyXG4gICAgc3VwZXIobWVzc2FnZSk7XHJcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplRWFnZXJMb2FkaW5nRXJyb3InO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVhZ2VyTG9hZGluZ0Vycm9yO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvZWFnZXItbG9hZGluZy1lcnJvci5qcyJdLCJuYW1lcyI6WyJCYXNlRXJyb3IiLCJyZXF1aXJlIiwiRWFnZXJMb2FkaW5nRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsaUI7Ozs7O0FBQ0osNkJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFBQTs7QUFDbkIsOEJBQU1BLE9BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksNEJBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIbUI7QUFJcEI7OztFQUw2QlAsUzs7QUFRaENRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsaUJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBCYXNlRXJyb3IgPSByZXF1aXJlKCcuL2Jhc2UtZXJyb3InKTtcblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhbiBpbmNsdWRlIHN0YXRlbWVudCBpcyBpbXByb3Blcmx5IGNvbnN0cnVjdGVkIChzZWUgbWVzc2FnZSBmb3IgZGV0YWlscylcbiAqL1xuY2xhc3MgRWFnZXJMb2FkaW5nRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZUVhZ2VyTG9hZGluZ0Vycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVhZ2VyTG9hZGluZ0Vycm9yO1xuIl19 \ No newline at end of file diff --git a/dist/errors/empty-result-error.js b/dist/errors/empty-result-error.js index 357f379..707d8dd 100644 --- a/dist/errors/empty-result-error.js +++ b/dist/errors/empty-result-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const BaseError = require('./base-error'); /** @@ -18,17 +22,17 @@ const BaseError = require('./base-error'); */ -let EmptyResultError = -/*#__PURE__*/ -function (_BaseError) { +let EmptyResultError = /*#__PURE__*/function (_BaseError) { _inherits(EmptyResultError, _BaseError); + var _super = _createSuper(EmptyResultError); + function EmptyResultError(message) { var _this; _classCallCheck(this, EmptyResultError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(EmptyResultError).call(this, message)); + _this = _super.call(this, message); _this.name = 'SequelizeEmptyResultError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_BaseError) { }(BaseError); module.exports = EmptyResultError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvZW1wdHktcmVzdWx0LWVycm9yLmpzIl0sIm5hbWVzIjpbIkJhc2VFcnJvciIsInJlcXVpcmUiLCJFbXB0eVJlc3VsdEVycm9yIiwibWVzc2FnZSIsIm5hbWUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCO0FBRUE7Ozs7O0lBR01DLGdCOzs7OztBQUNKLDRCQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ25CLDBGQUFNQSxPQUFOO0FBQ0EsVUFBS0MsSUFBTCxHQUFZLDJCQUFaO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBSG1CO0FBSXBCOzs7RUFMNEJQLFM7O0FBUS9CUSxNQUFNLENBQUNDLE9BQVAsR0FBaUJQLGdCQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IEJhc2VFcnJvciA9IHJlcXVpcmUoJy4vYmFzZS1lcnJvcicpO1xyXG5cclxuLyoqXHJcbiAqIFRocm93biB3aGVuIGEgcmVjb3JkIHdhcyBub3QgZm91bmQsIFVzdWFsbHkgdXNlZCB3aXRoIHJlamVjdE9uRW1wdHkgbW9kZSAoc2VlIG1lc3NhZ2UgZm9yIGRldGFpbHMpXHJcbiAqL1xyXG5jbGFzcyBFbXB0eVJlc3VsdEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVFbXB0eVJlc3VsdEVycm9yJztcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbXB0eVJlc3VsdEVycm9yO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvZW1wdHktcmVzdWx0LWVycm9yLmpzIl0sIm5hbWVzIjpbIkJhc2VFcnJvciIsInJlcXVpcmUiLCJFbXB0eVJlc3VsdEVycm9yIiwibWVzc2FnZSIsIm5hbWUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsY0FBRCxDQUF6QjtBQUVBO0FBQ0E7QUFDQTs7O0lBQ01DLGdCOzs7OztBQUNKLDRCQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ25CLDhCQUFNQSxPQUFOO0FBQ0EsVUFBS0MsSUFBTCxHQUFZLDJCQUFaO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBSG1CO0FBSXBCOzs7RUFMNEJQLFM7O0FBUS9CUSxNQUFNLENBQUNDLE9BQVAsR0FBaUJQLGdCQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQmFzZUVycm9yID0gcmVxdWlyZSgnLi9iYXNlLWVycm9yJyk7XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSByZWNvcmQgd2FzIG5vdCBmb3VuZCwgVXN1YWxseSB1c2VkIHdpdGggcmVqZWN0T25FbXB0eSBtb2RlIChzZWUgbWVzc2FnZSBmb3IgZGV0YWlscylcbiAqL1xuY2xhc3MgRW1wdHlSZXN1bHRFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplRW1wdHlSZXN1bHRFcnJvcic7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFbXB0eVJlc3VsdEVycm9yO1xuIl19 \ No newline at end of file diff --git a/dist/errors/index.js b/dist/errors/index.js index 87c0beb..c3dcdbc 100644 --- a/dist/errors/index.js +++ b/dist/errors/index.js @@ -25,4 +25,4 @@ exports.ForeignKeyConstraintError = require('./database/foreign-key-constraint-e exports.TimeoutError = require('./database/timeout-error'); exports.UnknownConstraintError = require('./database/unknown-constraint-error'); exports.UniqueConstraintError = require('./validation/unique-constraint-error'); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvaW5kZXguanMiXSwibmFtZXMiOlsiZXhwb3J0cyIsIkJhc2VFcnJvciIsInJlcXVpcmUiLCJBc3NvY2lhdGlvbkVycm9yIiwiQnVsa1JlY29yZEVycm9yIiwiQ29ubmVjdGlvbkVycm9yIiwiRGF0YWJhc2VFcnJvciIsIkVhZ2VyTG9hZGluZ0Vycm9yIiwiRW1wdHlSZXN1bHRFcnJvciIsIkluc3RhbmNlRXJyb3IiLCJPcHRpbWlzdGljTG9ja0Vycm9yIiwiUXVlcnlFcnJvciIsIlNlcXVlbGl6ZVNjb3BlRXJyb3IiLCJWYWxpZGF0aW9uRXJyb3IiLCJWYWxpZGF0aW9uRXJyb3JJdGVtIiwiQWNjZXNzRGVuaWVkRXJyb3IiLCJDb25uZWN0aW9uQWNxdWlyZVRpbWVvdXRFcnJvciIsIkNvbm5lY3Rpb25SZWZ1c2VkRXJyb3IiLCJDb25uZWN0aW9uVGltZWRPdXRFcnJvciIsIkhvc3ROb3RGb3VuZEVycm9yIiwiSG9zdE5vdFJlYWNoYWJsZUVycm9yIiwiSW52YWxpZENvbm5lY3Rpb25FcnJvciIsIkV4Y2x1c2lvbkNvbnN0cmFpbnRFcnJvciIsIkZvcmVpZ25LZXlDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJVbmtub3duQ29uc3RyYWludEVycm9yIiwiVW5pcXVlQ29uc3RyYWludEVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQUEsT0FBTyxDQUFDQyxTQUFSLEdBQW9CQyxPQUFPLENBQUMsY0FBRCxDQUEzQjtBQUVBRixPQUFPLENBQUNHLGdCQUFSLEdBQTJCRCxPQUFPLENBQUMscUJBQUQsQ0FBbEM7QUFDQUYsT0FBTyxDQUFDSSxlQUFSLEdBQTBCRixPQUFPLENBQUMscUJBQUQsQ0FBakM7QUFDQUYsT0FBTyxDQUFDSyxlQUFSLEdBQTBCSCxPQUFPLENBQUMsb0JBQUQsQ0FBakM7QUFDQUYsT0FBTyxDQUFDTSxhQUFSLEdBQXdCSixPQUFPLENBQUMsa0JBQUQsQ0FBL0I7QUFDQUYsT0FBTyxDQUFDTyxpQkFBUixHQUE0QkwsT0FBTyxDQUFDLHVCQUFELENBQW5DO0FBQ0FGLE9BQU8sQ0FBQ1EsZ0JBQVIsR0FBMkJOLE9BQU8sQ0FBQyxzQkFBRCxDQUFsQztBQUNBRixPQUFPLENBQUNTLGFBQVIsR0FBd0JQLE9BQU8sQ0FBQyxrQkFBRCxDQUEvQjtBQUNBRixPQUFPLENBQUNVLG1CQUFSLEdBQThCUixPQUFPLENBQUMseUJBQUQsQ0FBckM7QUFDQUYsT0FBTyxDQUFDVyxVQUFSLEdBQXFCVCxPQUFPLENBQUMsZUFBRCxDQUE1QjtBQUNBRixPQUFPLENBQUNZLG1CQUFSLEdBQThCVixPQUFPLENBQUMseUJBQUQsQ0FBckM7QUFDQUYsT0FBTyxDQUFDYSxlQUFSLEdBQTBCWCxPQUFPLENBQUMsb0JBQUQsQ0FBakM7QUFDQUYsT0FBTyxDQUFDYyxtQkFBUixHQUE4QmQsT0FBTyxDQUFDYSxlQUFSLENBQXdCQyxtQkFBdEQ7QUFFQWQsT0FBTyxDQUFDZSxpQkFBUixHQUE0QmIsT0FBTyxDQUFDLGtDQUFELENBQW5DO0FBQ0FGLE9BQU8sQ0FBQ2dCLDZCQUFSLEdBQXdDZCxPQUFPLENBQUMsK0NBQUQsQ0FBL0M7QUFDQUYsT0FBTyxDQUFDaUIsc0JBQVIsR0FBaUNmLE9BQU8sQ0FBQyx1Q0FBRCxDQUF4QztBQUNBRixPQUFPLENBQUNrQix1QkFBUixHQUFrQ2hCLE9BQU8sQ0FBQyx5Q0FBRCxDQUF6QztBQUNBRixPQUFPLENBQUNtQixpQkFBUixHQUE0QmpCLE9BQU8sQ0FBQyxtQ0FBRCxDQUFuQztBQUNBRixPQUFPLENBQUNvQixxQkFBUixHQUFnQ2xCLE9BQU8sQ0FBQyx1Q0FBRCxDQUF2QztBQUNBRixPQUFPLENBQUNxQixzQkFBUixHQUFpQ25CLE9BQU8sQ0FBQyx1Q0FBRCxDQUF4QztBQUVBRixPQUFPLENBQUNzQix3QkFBUixHQUFtQ3BCLE9BQU8sQ0FBQyx1Q0FBRCxDQUExQztBQUNBRixPQUFPLENBQUN1Qix5QkFBUixHQUFvQ3JCLE9BQU8sQ0FBQyx5Q0FBRCxDQUEzQztBQUNBRixPQUFPLENBQUN3QixZQUFSLEdBQXVCdEIsT0FBTyxDQUFDLDBCQUFELENBQTlCO0FBQ0FGLE9BQU8sQ0FBQ3lCLHNCQUFSLEdBQWlDdkIsT0FBTyxDQUFDLHFDQUFELENBQXhDO0FBRUFGLE9BQU8sQ0FBQzBCLHFCQUFSLEdBQWdDeEIsT0FBTyxDQUFDLHNDQUFELENBQXZDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0cy5CYXNlRXJyb3IgPSByZXF1aXJlKCcuL2Jhc2UtZXJyb3InKTtcclxuXHJcbmV4cG9ydHMuQXNzb2NpYXRpb25FcnJvciA9IHJlcXVpcmUoJy4vYXNzb2NpYXRpb24tZXJyb3InKTtcclxuZXhwb3J0cy5CdWxrUmVjb3JkRXJyb3IgPSByZXF1aXJlKCcuL2J1bGstcmVjb3JkLWVycm9yJyk7XHJcbmV4cG9ydHMuQ29ubmVjdGlvbkVycm9yID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uLWVycm9yJyk7XHJcbmV4cG9ydHMuRGF0YWJhc2VFcnJvciA9IHJlcXVpcmUoJy4vZGF0YWJhc2UtZXJyb3InKTtcclxuZXhwb3J0cy5FYWdlckxvYWRpbmdFcnJvciA9IHJlcXVpcmUoJy4vZWFnZXItbG9hZGluZy1lcnJvcicpO1xyXG5leHBvcnRzLkVtcHR5UmVzdWx0RXJyb3IgPSByZXF1aXJlKCcuL2VtcHR5LXJlc3VsdC1lcnJvcicpO1xyXG5leHBvcnRzLkluc3RhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2luc3RhbmNlLWVycm9yJyk7XHJcbmV4cG9ydHMuT3B0aW1pc3RpY0xvY2tFcnJvciA9IHJlcXVpcmUoJy4vb3B0aW1pc3RpYy1sb2NrLWVycm9yJyk7XHJcbmV4cG9ydHMuUXVlcnlFcnJvciA9IHJlcXVpcmUoJy4vcXVlcnktZXJyb3InKTtcclxuZXhwb3J0cy5TZXF1ZWxpemVTY29wZUVycm9yID0gcmVxdWlyZSgnLi9zZXF1ZWxpemUtc2NvcGUtZXJyb3InKTtcclxuZXhwb3J0cy5WYWxpZGF0aW9uRXJyb3IgPSByZXF1aXJlKCcuL3ZhbGlkYXRpb24tZXJyb3InKTtcclxuZXhwb3J0cy5WYWxpZGF0aW9uRXJyb3JJdGVtID0gZXhwb3J0cy5WYWxpZGF0aW9uRXJyb3IuVmFsaWRhdGlvbkVycm9ySXRlbTtcclxuXHJcbmV4cG9ydHMuQWNjZXNzRGVuaWVkRXJyb3IgPSByZXF1aXJlKCcuL2Nvbm5lY3Rpb24vYWNjZXNzLWRlbmllZC1lcnJvcicpO1xyXG5leHBvcnRzLkNvbm5lY3Rpb25BY3F1aXJlVGltZW91dEVycm9yID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uL2Nvbm5lY3Rpb24tYWNxdWlyZS10aW1lb3V0LWVycm9yJyk7XHJcbmV4cG9ydHMuQ29ubmVjdGlvblJlZnVzZWRFcnJvciA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbi9jb25uZWN0aW9uLXJlZnVzZWQtZXJyb3InKTtcclxuZXhwb3J0cy5Db25uZWN0aW9uVGltZWRPdXRFcnJvciA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbi9jb25uZWN0aW9uLXRpbWVkLW91dC1lcnJvcicpO1xyXG5leHBvcnRzLkhvc3ROb3RGb3VuZEVycm9yID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uL2hvc3Qtbm90LWZvdW5kLWVycm9yJyk7XHJcbmV4cG9ydHMuSG9zdE5vdFJlYWNoYWJsZUVycm9yID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uL2hvc3Qtbm90LXJlYWNoYWJsZS1lcnJvcicpO1xyXG5leHBvcnRzLkludmFsaWRDb25uZWN0aW9uRXJyb3IgPSByZXF1aXJlKCcuL2Nvbm5lY3Rpb24vaW52YWxpZC1jb25uZWN0aW9uLWVycm9yJyk7XHJcblxyXG5leHBvcnRzLkV4Y2x1c2lvbkNvbnN0cmFpbnRFcnJvciA9IHJlcXVpcmUoJy4vZGF0YWJhc2UvZXhjbHVzaW9uLWNvbnN0cmFpbnQtZXJyb3InKTtcclxuZXhwb3J0cy5Gb3JlaWduS2V5Q29uc3RyYWludEVycm9yID0gcmVxdWlyZSgnLi9kYXRhYmFzZS9mb3JlaWduLWtleS1jb25zdHJhaW50LWVycm9yJyk7XHJcbmV4cG9ydHMuVGltZW91dEVycm9yID0gcmVxdWlyZSgnLi9kYXRhYmFzZS90aW1lb3V0LWVycm9yJyk7XHJcbmV4cG9ydHMuVW5rbm93bkNvbnN0cmFpbnRFcnJvciA9IHJlcXVpcmUoJy4vZGF0YWJhc2UvdW5rbm93bi1jb25zdHJhaW50LWVycm9yJyk7XHJcblxyXG5leHBvcnRzLlVuaXF1ZUNvbnN0cmFpbnRFcnJvciA9IHJlcXVpcmUoJy4vdmFsaWRhdGlvbi91bmlxdWUtY29uc3RyYWludC1lcnJvcicpO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvaW5kZXguanMiXSwibmFtZXMiOlsiZXhwb3J0cyIsIkJhc2VFcnJvciIsInJlcXVpcmUiLCJBc3NvY2lhdGlvbkVycm9yIiwiQnVsa1JlY29yZEVycm9yIiwiQ29ubmVjdGlvbkVycm9yIiwiRGF0YWJhc2VFcnJvciIsIkVhZ2VyTG9hZGluZ0Vycm9yIiwiRW1wdHlSZXN1bHRFcnJvciIsIkluc3RhbmNlRXJyb3IiLCJPcHRpbWlzdGljTG9ja0Vycm9yIiwiUXVlcnlFcnJvciIsIlNlcXVlbGl6ZVNjb3BlRXJyb3IiLCJWYWxpZGF0aW9uRXJyb3IiLCJWYWxpZGF0aW9uRXJyb3JJdGVtIiwiQWNjZXNzRGVuaWVkRXJyb3IiLCJDb25uZWN0aW9uQWNxdWlyZVRpbWVvdXRFcnJvciIsIkNvbm5lY3Rpb25SZWZ1c2VkRXJyb3IiLCJDb25uZWN0aW9uVGltZWRPdXRFcnJvciIsIkhvc3ROb3RGb3VuZEVycm9yIiwiSG9zdE5vdFJlYWNoYWJsZUVycm9yIiwiSW52YWxpZENvbm5lY3Rpb25FcnJvciIsIkV4Y2x1c2lvbkNvbnN0cmFpbnRFcnJvciIsIkZvcmVpZ25LZXlDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJVbmtub3duQ29uc3RyYWludEVycm9yIiwiVW5pcXVlQ29uc3RyYWludEVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQUEsT0FBTyxDQUFDQyxTQUFSLEdBQW9CQyxPQUFPLENBQUMsY0FBRCxDQUEzQjtBQUVBRixPQUFPLENBQUNHLGdCQUFSLEdBQTJCRCxPQUFPLENBQUMscUJBQUQsQ0FBbEM7QUFDQUYsT0FBTyxDQUFDSSxlQUFSLEdBQTBCRixPQUFPLENBQUMscUJBQUQsQ0FBakM7QUFDQUYsT0FBTyxDQUFDSyxlQUFSLEdBQTBCSCxPQUFPLENBQUMsb0JBQUQsQ0FBakM7QUFDQUYsT0FBTyxDQUFDTSxhQUFSLEdBQXdCSixPQUFPLENBQUMsa0JBQUQsQ0FBL0I7QUFDQUYsT0FBTyxDQUFDTyxpQkFBUixHQUE0QkwsT0FBTyxDQUFDLHVCQUFELENBQW5DO0FBQ0FGLE9BQU8sQ0FBQ1EsZ0JBQVIsR0FBMkJOLE9BQU8sQ0FBQyxzQkFBRCxDQUFsQztBQUNBRixPQUFPLENBQUNTLGFBQVIsR0FBd0JQLE9BQU8sQ0FBQyxrQkFBRCxDQUEvQjtBQUNBRixPQUFPLENBQUNVLG1CQUFSLEdBQThCUixPQUFPLENBQUMseUJBQUQsQ0FBckM7QUFDQUYsT0FBTyxDQUFDVyxVQUFSLEdBQXFCVCxPQUFPLENBQUMsZUFBRCxDQUE1QjtBQUNBRixPQUFPLENBQUNZLG1CQUFSLEdBQThCVixPQUFPLENBQUMseUJBQUQsQ0FBckM7QUFDQUYsT0FBTyxDQUFDYSxlQUFSLEdBQTBCWCxPQUFPLENBQUMsb0JBQUQsQ0FBakM7QUFDQUYsT0FBTyxDQUFDYyxtQkFBUixHQUE4QmQsT0FBTyxDQUFDYSxlQUFSLENBQXdCQyxtQkFBdEQ7QUFFQWQsT0FBTyxDQUFDZSxpQkFBUixHQUE0QmIsT0FBTyxDQUFDLGtDQUFELENBQW5DO0FBQ0FGLE9BQU8sQ0FBQ2dCLDZCQUFSLEdBQXdDZCxPQUFPLENBQUMsK0NBQUQsQ0FBL0M7QUFDQUYsT0FBTyxDQUFDaUIsc0JBQVIsR0FBaUNmLE9BQU8sQ0FBQyx1Q0FBRCxDQUF4QztBQUNBRixPQUFPLENBQUNrQix1QkFBUixHQUFrQ2hCLE9BQU8sQ0FBQyx5Q0FBRCxDQUF6QztBQUNBRixPQUFPLENBQUNtQixpQkFBUixHQUE0QmpCLE9BQU8sQ0FBQyxtQ0FBRCxDQUFuQztBQUNBRixPQUFPLENBQUNvQixxQkFBUixHQUFnQ2xCLE9BQU8sQ0FBQyx1Q0FBRCxDQUF2QztBQUNBRixPQUFPLENBQUNxQixzQkFBUixHQUFpQ25CLE9BQU8sQ0FBQyx1Q0FBRCxDQUF4QztBQUVBRixPQUFPLENBQUNzQix3QkFBUixHQUFtQ3BCLE9BQU8sQ0FBQyx1Q0FBRCxDQUExQztBQUNBRixPQUFPLENBQUN1Qix5QkFBUixHQUFvQ3JCLE9BQU8sQ0FBQyx5Q0FBRCxDQUEzQztBQUNBRixPQUFPLENBQUN3QixZQUFSLEdBQXVCdEIsT0FBTyxDQUFDLDBCQUFELENBQTlCO0FBQ0FGLE9BQU8sQ0FBQ3lCLHNCQUFSLEdBQWlDdkIsT0FBTyxDQUFDLHFDQUFELENBQXhDO0FBRUFGLE9BQU8sQ0FBQzBCLHFCQUFSLEdBQWdDeEIsT0FBTyxDQUFDLHNDQUFELENBQXZDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLkJhc2VFcnJvciA9IHJlcXVpcmUoJy4vYmFzZS1lcnJvcicpO1xuXG5leHBvcnRzLkFzc29jaWF0aW9uRXJyb3IgPSByZXF1aXJlKCcuL2Fzc29jaWF0aW9uLWVycm9yJyk7XG5leHBvcnRzLkJ1bGtSZWNvcmRFcnJvciA9IHJlcXVpcmUoJy4vYnVsay1yZWNvcmQtZXJyb3InKTtcbmV4cG9ydHMuQ29ubmVjdGlvbkVycm9yID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uLWVycm9yJyk7XG5leHBvcnRzLkRhdGFiYXNlRXJyb3IgPSByZXF1aXJlKCcuL2RhdGFiYXNlLWVycm9yJyk7XG5leHBvcnRzLkVhZ2VyTG9hZGluZ0Vycm9yID0gcmVxdWlyZSgnLi9lYWdlci1sb2FkaW5nLWVycm9yJyk7XG5leHBvcnRzLkVtcHR5UmVzdWx0RXJyb3IgPSByZXF1aXJlKCcuL2VtcHR5LXJlc3VsdC1lcnJvcicpO1xuZXhwb3J0cy5JbnN0YW5jZUVycm9yID0gcmVxdWlyZSgnLi9pbnN0YW5jZS1lcnJvcicpO1xuZXhwb3J0cy5PcHRpbWlzdGljTG9ja0Vycm9yID0gcmVxdWlyZSgnLi9vcHRpbWlzdGljLWxvY2stZXJyb3InKTtcbmV4cG9ydHMuUXVlcnlFcnJvciA9IHJlcXVpcmUoJy4vcXVlcnktZXJyb3InKTtcbmV4cG9ydHMuU2VxdWVsaXplU2NvcGVFcnJvciA9IHJlcXVpcmUoJy4vc2VxdWVsaXplLXNjb3BlLWVycm9yJyk7XG5leHBvcnRzLlZhbGlkYXRpb25FcnJvciA9IHJlcXVpcmUoJy4vdmFsaWRhdGlvbi1lcnJvcicpO1xuZXhwb3J0cy5WYWxpZGF0aW9uRXJyb3JJdGVtID0gZXhwb3J0cy5WYWxpZGF0aW9uRXJyb3IuVmFsaWRhdGlvbkVycm9ySXRlbTtcblxuZXhwb3J0cy5BY2Nlc3NEZW5pZWRFcnJvciA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbi9hY2Nlc3MtZGVuaWVkLWVycm9yJyk7XG5leHBvcnRzLkNvbm5lY3Rpb25BY3F1aXJlVGltZW91dEVycm9yID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uL2Nvbm5lY3Rpb24tYWNxdWlyZS10aW1lb3V0LWVycm9yJyk7XG5leHBvcnRzLkNvbm5lY3Rpb25SZWZ1c2VkRXJyb3IgPSByZXF1aXJlKCcuL2Nvbm5lY3Rpb24vY29ubmVjdGlvbi1yZWZ1c2VkLWVycm9yJyk7XG5leHBvcnRzLkNvbm5lY3Rpb25UaW1lZE91dEVycm9yID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uL2Nvbm5lY3Rpb24tdGltZWQtb3V0LWVycm9yJyk7XG5leHBvcnRzLkhvc3ROb3RGb3VuZEVycm9yID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uL2hvc3Qtbm90LWZvdW5kLWVycm9yJyk7XG5leHBvcnRzLkhvc3ROb3RSZWFjaGFibGVFcnJvciA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbi9ob3N0LW5vdC1yZWFjaGFibGUtZXJyb3InKTtcbmV4cG9ydHMuSW52YWxpZENvbm5lY3Rpb25FcnJvciA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbi9pbnZhbGlkLWNvbm5lY3Rpb24tZXJyb3InKTtcblxuZXhwb3J0cy5FeGNsdXNpb25Db25zdHJhaW50RXJyb3IgPSByZXF1aXJlKCcuL2RhdGFiYXNlL2V4Y2x1c2lvbi1jb25zdHJhaW50LWVycm9yJyk7XG5leHBvcnRzLkZvcmVpZ25LZXlDb25zdHJhaW50RXJyb3IgPSByZXF1aXJlKCcuL2RhdGFiYXNlL2ZvcmVpZ24ta2V5LWNvbnN0cmFpbnQtZXJyb3InKTtcbmV4cG9ydHMuVGltZW91dEVycm9yID0gcmVxdWlyZSgnLi9kYXRhYmFzZS90aW1lb3V0LWVycm9yJyk7XG5leHBvcnRzLlVua25vd25Db25zdHJhaW50RXJyb3IgPSByZXF1aXJlKCcuL2RhdGFiYXNlL3Vua25vd24tY29uc3RyYWludC1lcnJvcicpO1xuXG5leHBvcnRzLlVuaXF1ZUNvbnN0cmFpbnRFcnJvciA9IHJlcXVpcmUoJy4vdmFsaWRhdGlvbi91bmlxdWUtY29uc3RyYWludC1lcnJvcicpO1xuIl19 \ No newline at end of file diff --git a/dist/errors/instance-error.js b/dist/errors/instance-error.js index 899c3d4..60cd94f 100644 --- a/dist/errors/instance-error.js +++ b/dist/errors/instance-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const BaseError = require('./base-error'); /** @@ -18,17 +22,17 @@ const BaseError = require('./base-error'); */ -let InstanceError = -/*#__PURE__*/ -function (_BaseError) { +let InstanceError = /*#__PURE__*/function (_BaseError) { _inherits(InstanceError, _BaseError); + var _super = _createSuper(InstanceError); + function InstanceError(message) { var _this; _classCallCheck(this, InstanceError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(InstanceError).call(this, message)); + _this = _super.call(this, message); _this.name = 'SequelizeInstanceError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_BaseError) { }(BaseError); module.exports = InstanceError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvaW5zdGFuY2UtZXJyb3IuanMiXSwibmFtZXMiOlsiQmFzZUVycm9yIiwicmVxdWlyZSIsIkluc3RhbmNlRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7QUFFQTs7Ozs7SUFHTUMsYTs7Ozs7QUFDSix5QkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQix1RkFBTUEsT0FBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSx3QkFBWjtBQUNBQyxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQUhtQjtBQUlwQjs7O0VBTHlCUCxTOztBQVE1QlEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxhQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IEJhc2VFcnJvciA9IHJlcXVpcmUoJy4vYmFzZS1lcnJvcicpO1xyXG5cclxuLyoqXHJcbiAqIFRocm93biB3aGVuIGEgc29tZSBwcm9ibGVtIG9jY3VycmVkIHdpdGggSW5zdGFuY2UgbWV0aG9kcyAoc2VlIG1lc3NhZ2UgZm9yIGRldGFpbHMpXHJcbiAqL1xyXG5jbGFzcyBJbnN0YW5jZUVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVJbnN0YW5jZUVycm9yJztcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnN0YW5jZUVycm9yO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvaW5zdGFuY2UtZXJyb3IuanMiXSwibmFtZXMiOlsiQmFzZUVycm9yIiwicmVxdWlyZSIsIkluc3RhbmNlRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsYTs7Ozs7QUFDSix5QkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQiw4QkFBTUEsT0FBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSx3QkFBWjtBQUNBQyxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQUhtQjtBQUlwQjs7O0VBTHlCUCxTOztBQVE1QlEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxhQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQmFzZUVycm9yID0gcmVxdWlyZSgnLi9iYXNlLWVycm9yJyk7XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzb21lIHByb2JsZW0gb2NjdXJyZWQgd2l0aCBJbnN0YW5jZSBtZXRob2RzIChzZWUgbWVzc2FnZSBmb3IgZGV0YWlscylcbiAqL1xuY2xhc3MgSW5zdGFuY2VFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplSW5zdGFuY2VFcnJvcic7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBJbnN0YW5jZUVycm9yO1xuIl19 \ No newline at end of file diff --git a/dist/errors/optimistic-lock-error.js b/dist/errors/optimistic-lock-error.js index a783938..f4dc678 100644 --- a/dist/errors/optimistic-lock-error.js +++ b/dist/errors/optimistic-lock-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const BaseError = require('./base-error'); /** @@ -18,11 +22,11 @@ const BaseError = require('./base-error'); */ -let OptimisticLockError = -/*#__PURE__*/ -function (_BaseError) { +let OptimisticLockError = /*#__PURE__*/function (_BaseError) { _inherits(OptimisticLockError, _BaseError); + var _super = _createSuper(OptimisticLockError); + function OptimisticLockError(options) { var _this; @@ -30,7 +34,7 @@ function (_BaseError) { options = options || {}; options.message = options.message || `Attempting to update a stale model instance: ${options.modelName}`; - _this = _possibleConstructorReturn(this, _getPrototypeOf(OptimisticLockError).call(this, options.message)); + _this = _super.call(this, options.message); _this.name = 'SequelizeOptimisticLockError'; /** * The name of the model on which the update was attempted @@ -58,4 +62,4 @@ function (_BaseError) { }(BaseError); module.exports = OptimisticLockError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvb3B0aW1pc3RpYy1sb2NrLWVycm9yLmpzIl0sIm5hbWVzIjpbIkJhc2VFcnJvciIsInJlcXVpcmUiLCJPcHRpbWlzdGljTG9ja0Vycm9yIiwib3B0aW9ucyIsIm1lc3NhZ2UiLCJtb2RlbE5hbWUiLCJuYW1lIiwidmFsdWVzIiwid2hlcmUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCO0FBRUE7Ozs7O0lBR01DLG1COzs7OztBQUNKLCtCQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ25CQSxJQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxFQUFyQjtBQUNBQSxJQUFBQSxPQUFPLENBQUNDLE9BQVIsR0FBa0JELE9BQU8sQ0FBQ0MsT0FBUixJQUFvQixnREFBK0NELE9BQU8sQ0FBQ0UsU0FBVSxFQUF2RztBQUNBLDZGQUFNRixPQUFPLENBQUNDLE9BQWQ7QUFDQSxVQUFLRSxJQUFMLEdBQVksOEJBQVo7QUFDQTs7Ozs7QUFJQSxVQUFLRCxTQUFMLEdBQWlCRixPQUFPLENBQUNFLFNBQXpCO0FBQ0E7Ozs7O0FBSUEsVUFBS0UsTUFBTCxHQUFjSixPQUFPLENBQUNJLE1BQXRCO0FBQ0E7Ozs7O0FBSUEsVUFBS0MsS0FBTCxHQUFhTCxPQUFPLENBQUNLLEtBQXJCO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBcEJtQjtBQXFCcEI7OztFQXRCK0JYLFM7O0FBeUJsQ1ksTUFBTSxDQUFDQyxPQUFQLEdBQWlCWCxtQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBCYXNlRXJyb3IgPSByZXF1aXJlKCcuL2Jhc2UtZXJyb3InKTtcclxuXHJcbi8qKlxyXG4gKiBUaHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIHVwZGF0ZSBhIHN0YWxlIG1vZGVsIGluc3RhbmNlXHJcbiAqL1xyXG5jbGFzcyBPcHRpbWlzdGljTG9ja0Vycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIG9wdGlvbnMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZSB8fCBgQXR0ZW1wdGluZyB0byB1cGRhdGUgYSBzdGFsZSBtb2RlbCBpbnN0YW5jZTogJHtvcHRpb25zLm1vZGVsTmFtZX1gO1xyXG4gICAgc3VwZXIob3B0aW9ucy5tZXNzYWdlKTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVPcHRpbWlzdGljTG9ja0Vycm9yJztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIG1vZGVsIG9uIHdoaWNoIHRoZSB1cGRhdGUgd2FzIGF0dGVtcHRlZFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5tb2RlbE5hbWUgPSBvcHRpb25zLm1vZGVsTmFtZTtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlcyBvZiB0aGUgYXR0ZW1wdGVkIHVwZGF0ZVxyXG4gICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAqL1xyXG4gICAgdGhpcy52YWx1ZXMgPSBvcHRpb25zLnZhbHVlcztcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgKi9cclxuICAgIHRoaXMud2hlcmUgPSBvcHRpb25zLndoZXJlO1xyXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9wdGltaXN0aWNMb2NrRXJyb3I7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvb3B0aW1pc3RpYy1sb2NrLWVycm9yLmpzIl0sIm5hbWVzIjpbIkJhc2VFcnJvciIsInJlcXVpcmUiLCJPcHRpbWlzdGljTG9ja0Vycm9yIiwib3B0aW9ucyIsIm1lc3NhZ2UiLCJtb2RlbE5hbWUiLCJuYW1lIiwidmFsdWVzIiwid2hlcmUiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsY0FBRCxDQUF6QjtBQUVBO0FBQ0E7QUFDQTs7O0lBQ01DLG1COzs7OztBQUNKLCtCQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ25CQSxJQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxFQUFyQjtBQUNBQSxJQUFBQSxPQUFPLENBQUNDLE9BQVIsR0FBa0JELE9BQU8sQ0FBQ0MsT0FBUixJQUFvQixnREFBK0NELE9BQU8sQ0FBQ0UsU0FBVSxFQUF2RztBQUNBLDhCQUFNRixPQUFPLENBQUNDLE9BQWQ7QUFDQSxVQUFLRSxJQUFMLEdBQVksOEJBQVo7QUFDQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxVQUFLRCxTQUFMLEdBQWlCRixPQUFPLENBQUNFLFNBQXpCO0FBQ0E7QUFDSjtBQUNBO0FBQ0E7O0FBQ0ksVUFBS0UsTUFBTCxHQUFjSixPQUFPLENBQUNJLE1BQXRCO0FBQ0E7QUFDSjtBQUNBO0FBQ0E7O0FBQ0ksVUFBS0MsS0FBTCxHQUFhTCxPQUFPLENBQUNLLEtBQXJCO0FBQ0FDLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBcEJtQjtBQXFCcEI7OztFQXRCK0JYLFM7O0FBeUJsQ1ksTUFBTSxDQUFDQyxPQUFQLEdBQWlCWCxtQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IEJhc2VFcnJvciA9IHJlcXVpcmUoJy4vYmFzZS1lcnJvcicpO1xuXG4vKipcbiAqIFRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gdXBkYXRlIGEgc3RhbGUgbW9kZWwgaW5zdGFuY2VcbiAqL1xuY2xhc3MgT3B0aW1pc3RpY0xvY2tFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2UgfHwgYEF0dGVtcHRpbmcgdG8gdXBkYXRlIGEgc3RhbGUgbW9kZWwgaW5zdGFuY2U6ICR7b3B0aW9ucy5tb2RlbE5hbWV9YDtcbiAgICBzdXBlcihvcHRpb25zLm1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVPcHRpbWlzdGljTG9ja0Vycm9yJztcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgbW9kZWwgb24gd2hpY2ggdGhlIHVwZGF0ZSB3YXMgYXR0ZW1wdGVkXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLm1vZGVsTmFtZSA9IG9wdGlvbnMubW9kZWxOYW1lO1xuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZXMgb2YgdGhlIGF0dGVtcHRlZCB1cGRhdGVcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXM7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMud2hlcmUgPSBvcHRpb25zLndoZXJlO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT3B0aW1pc3RpY0xvY2tFcnJvcjtcbiJdfQ== \ No newline at end of file diff --git a/dist/errors/query-error.js b/dist/errors/query-error.js index 98bfcea..1f80913 100644 --- a/dist/errors/query-error.js +++ b/dist/errors/query-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const BaseError = require('./base-error'); /** @@ -18,17 +22,17 @@ const BaseError = require('./base-error'); */ -let QueryError = -/*#__PURE__*/ -function (_BaseError) { +let QueryError = /*#__PURE__*/function (_BaseError) { _inherits(QueryError, _BaseError); + var _super = _createSuper(QueryError); + function QueryError(message) { var _this; _classCallCheck(this, QueryError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(QueryError).call(this, message)); + _this = _super.call(this, message); _this.name = 'SequelizeQueryError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_BaseError) { }(BaseError); module.exports = QueryError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvcXVlcnktZXJyb3IuanMiXSwibmFtZXMiOlsiQmFzZUVycm9yIiwicmVxdWlyZSIsIlF1ZXJ5RXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7QUFFQTs7Ozs7SUFHTUMsVTs7Ozs7QUFDSixzQkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQixvRkFBTUEsT0FBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSxxQkFBWjtBQUNBQyxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQUhtQjtBQUlwQjs7O0VBTHNCUCxTOztBQVF6QlEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxVQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IEJhc2VFcnJvciA9IHJlcXVpcmUoJy4vYmFzZS1lcnJvcicpO1xyXG5cclxuLyoqXHJcbiAqIFRocm93biB3aGVuIGEgcXVlcnkgaXMgcGFzc2VkIGludmFsaWQgb3B0aW9ucyAoc2VlIG1lc3NhZ2UgZm9yIGRldGFpbHMpXHJcbiAqL1xyXG5jbGFzcyBRdWVyeUVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVRdWVyeUVycm9yJztcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBRdWVyeUVycm9yO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvcXVlcnktZXJyb3IuanMiXSwibmFtZXMiOlsiQmFzZUVycm9yIiwicmVxdWlyZSIsIlF1ZXJ5RXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsVTs7Ozs7QUFDSixzQkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQiw4QkFBTUEsT0FBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSxxQkFBWjtBQUNBQyxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLGdDQUE4QixNQUFLQyxXQUFuQztBQUhtQjtBQUlwQjs7O0VBTHNCUCxTOztBQVF6QlEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxVQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQmFzZUVycm9yID0gcmVxdWlyZSgnLi9iYXNlLWVycm9yJyk7XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBxdWVyeSBpcyBwYXNzZWQgaW52YWxpZCBvcHRpb25zIChzZWUgbWVzc2FnZSBmb3IgZGV0YWlscylcbiAqL1xuY2xhc3MgUXVlcnlFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplUXVlcnlFcnJvcic7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBRdWVyeUVycm9yO1xuIl19 \ No newline at end of file diff --git a/dist/errors/sequelize-scope-error.js b/dist/errors/sequelize-scope-error.js index 7772803..1753f54 100644 --- a/dist/errors/sequelize-scope-error.js +++ b/dist/errors/sequelize-scope-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const BaseError = require('./base-error'); /** @@ -18,17 +22,17 @@ const BaseError = require('./base-error'); */ -let SequelizeScopeError = -/*#__PURE__*/ -function (_BaseError) { +let SequelizeScopeError = /*#__PURE__*/function (_BaseError) { _inherits(SequelizeScopeError, _BaseError); + var _super = _createSuper(SequelizeScopeError); + function SequelizeScopeError(parent) { var _this; _classCallCheck(this, SequelizeScopeError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(SequelizeScopeError).call(this, parent)); + _this = _super.call(this, parent); _this.name = 'SequelizeScopeError'; Error.captureStackTrace(_assertThisInitialized(_this), _this.constructor); return _this; @@ -38,4 +42,4 @@ function (_BaseError) { }(BaseError); module.exports = SequelizeScopeError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvc2VxdWVsaXplLXNjb3BlLWVycm9yLmpzIl0sIm5hbWVzIjpbIkJhc2VFcnJvciIsInJlcXVpcmUiLCJTZXF1ZWxpemVTY29wZUVycm9yIiwicGFyZW50IiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7QUFFQTs7Ozs7SUFHTUMsbUI7Ozs7O0FBQ0osK0JBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsNkZBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVkscUJBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUwrQlAsUzs7QUFRbENRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsbUJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgQmFzZUVycm9yID0gcmVxdWlyZSgnLi9iYXNlLWVycm9yJyk7XHJcblxyXG4vKipcclxuICogU2NvcGUgRXJyb3IuIFRocm93biB3aGVuIHRoZSBzZXF1ZWxpemUgY2Fubm90IHF1ZXJ5IHRoZSBzcGVjaWZpZWQgc2NvcGUuXHJcbiAqL1xyXG5jbGFzcyBTZXF1ZWxpemVTY29wZUVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcclxuICAgIHN1cGVyKHBhcmVudCk7XHJcbiAgICB0aGlzLm5hbWUgPSAnU2VxdWVsaXplU2NvcGVFcnJvcic7XHJcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2VxdWVsaXplU2NvcGVFcnJvcjtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvc2VxdWVsaXplLXNjb3BlLWVycm9yLmpzIl0sIm5hbWVzIjpbIkJhc2VFcnJvciIsInJlcXVpcmUiLCJTZXF1ZWxpemVTY29wZUVycm9yIiwicGFyZW50IiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCO0FBRUE7QUFDQTtBQUNBOzs7SUFDTUMsbUI7Ozs7O0FBQ0osK0JBQVlDLE1BQVosRUFBb0I7QUFBQTs7QUFBQTs7QUFDbEIsOEJBQU1BLE1BQU47QUFDQSxVQUFLQyxJQUFMLEdBQVkscUJBQVo7QUFDQUMsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixnQ0FBOEIsTUFBS0MsV0FBbkM7QUFIa0I7QUFJbkI7OztFQUwrQlAsUzs7QUFRbENRLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlAsbUJBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBCYXNlRXJyb3IgPSByZXF1aXJlKCcuL2Jhc2UtZXJyb3InKTtcblxuLyoqXG4gKiBTY29wZSBFcnJvci4gVGhyb3duIHdoZW4gdGhlIHNlcXVlbGl6ZSBjYW5ub3QgcXVlcnkgdGhlIHNwZWNpZmllZCBzY29wZS5cbiAqL1xuY2xhc3MgU2VxdWVsaXplU2NvcGVFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHBhcmVudCkge1xuICAgIHN1cGVyKHBhcmVudCk7XG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZVNjb3BlRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VxdWVsaXplU2NvcGVFcnJvcjtcbiJdfQ== \ No newline at end of file diff --git a/dist/errors/validation-error.js b/dist/errors/validation-error.js index 8668853..952dab8 100644 --- a/dist/errors/validation-error.js +++ b/dist/errors/validation-error.js @@ -6,15 +6,19 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const BaseError = require('./base-error'); /** @@ -28,17 +32,17 @@ const BaseError = require('./base-error'); */ -let ValidationError = -/*#__PURE__*/ -function (_BaseError) { +let ValidationError = /*#__PURE__*/function (_BaseError) { _inherits(ValidationError, _BaseError); + var _super = _createSuper(ValidationError); + function ValidationError(message, errors) { var _this; _classCallCheck(this, ValidationError); - _this = _possibleConstructorReturn(this, _getPrototypeOf(ValidationError).call(this, message)); + _this = _super.call(this, message); _this.name = 'SequelizeValidationError'; _this.message = 'Validation Error'; /** @@ -87,9 +91,7 @@ function (_BaseError) { */ -let ValidationErrorItem = -/*#__PURE__*/ -function () { +let ValidationErrorItem = /*#__PURE__*/function () { /** * Creates new validation error item * @@ -247,4 +249,4 @@ ValidationErrorItem.TypeStringMap = { }; module.exports = ValidationError; module.exports.ValidationErrorItem = ValidationErrorItem; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvdmFsaWRhdGlvbi1lcnJvci5qcyJdLCJuYW1lcyI6WyJCYXNlRXJyb3IiLCJyZXF1aXJlIiwiVmFsaWRhdGlvbkVycm9yIiwibWVzc2FnZSIsImVycm9ycyIsIm5hbWUiLCJsZW5ndGgiLCJtYXAiLCJlcnIiLCJ0eXBlIiwib3JpZ2luIiwiam9pbiIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsInBhdGgiLCJyZWR1Y2UiLCJyZWR1Y2VkIiwiZXJyb3IiLCJwdXNoIiwiVmFsaWRhdGlvbkVycm9ySXRlbSIsInZhbHVlIiwiaW5zdCIsInZhbGlkYXRvcktleSIsImZuTmFtZSIsImZuQXJncyIsInVuZGVmaW5lZCIsImluc3RhbmNlIiwidmFsaWRhdG9yTmFtZSIsInZhbGlkYXRvckFyZ3MiLCJPcmlnaW5zIiwibG93ZXJjYXNlVHlwZSIsInRvTG93ZXJDYXNlIiwidHJpbSIsInJlYWxUeXBlIiwiVHlwZVN0cmluZ01hcCIsInVzZVR5cGVBc05TIiwiTlNTZXBhcmF0b3IiLCJ1c2VUQU5TIiwiTlNTZXAiLCJrZXkiLCJ1c2VOUyIsIkNPUkUiLCJEQiIsIkZVTkNUSU9OIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7QUFFQTs7Ozs7Ozs7Ozs7SUFTTUMsZTs7Ozs7QUFDSiwyQkFBWUMsT0FBWixFQUFxQkMsTUFBckIsRUFBNkI7QUFBQTs7QUFBQTs7QUFDM0IseUZBQU1ELE9BQU47QUFDQSxVQUFLRSxJQUFMLEdBQVksMEJBQVo7QUFDQSxVQUFLRixPQUFMLEdBQWUsa0JBQWY7QUFDQTs7Ozs7QUFJQSxVQUFLQyxNQUFMLEdBQWNBLE1BQU0sSUFBSSxFQUF4QixDQVIyQixDQVUzQjs7QUFDQSxRQUFJRCxPQUFKLEVBQWE7QUFDWCxZQUFLQSxPQUFMLEdBQWVBLE9BQWYs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cXVpcmUoJy4vYmFzZS1lcnJvcicpO1xyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRpb24gRXJyb3IuIFRocm93biB3aGVuIHRoZSBzZXF1ZWxpemUgdmFsaWRhdGlvbiBoYXMgZmFpbGVkLiBUaGUgZXJyb3IgY29udGFpbnMgYW4gYGVycm9yc2AgcHJvcGVydHksXHJcbiAqIHdoaWNoIGlzIGFuIGFycmF5IHdpdGggMSBvciBtb3JlIFZhbGlkYXRpb25FcnJvckl0ZW1zLCBvbmUgZm9yIGVhY2ggdmFsaWRhdGlvbiB0aGF0IGZhaWxlZC5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgRXJyb3IgbWVzc2FnZVxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZXJyb3JzXSBBcnJheSBvZiBWYWxpZGF0aW9uRXJyb3JJdGVtIG9iamVjdHMgZGVzY3JpYmluZyB0aGUgdmFsaWRhdGlvbiBlcnJvcnNcclxuICpcclxuICogQHByb3BlcnR5IGVycm9ycyB7VmFsaWRhdGlvbkVycm9ySXRlbXNbXX1cclxuICovXHJcbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XHJcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgZXJyb3JzKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgIHRoaXMubmFtZSA9ICdTZXF1ZWxpemVWYWxpZGF0aW9uRXJyb3InO1xyXG4gICAgdGhpcy5tZXNzYWdlID0gJ1ZhbGlkYXRpb24gRXJyb3InO1xyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge1ZhbGlkYXRpb25FcnJvckl0ZW1bXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5lcnJvcnMgPSBlcnJvcnMgfHwgW107XHJcblxyXG4gICAgLy8gVXNlIHByb3ZpZGVkIGVycm9yIG1lc3NhZ2UgaWYgYXZhaWxhYmxlLi4uXHJcbiAgICBpZiAobWVzc2FnZSkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xyXG5cclxuICAgICAgLy8gLi4uIG90aGVyd2lzZSBjcmVhdGUgYSBjb25jYXRlbmF0ZWQgbWVzc2FnZSBvdXQgb2YgZXhpc3RpbmcgZXJyb3JzLlxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPiAwICYmIHRoaXMuZXJyb3JzWzBdLm1lc3NhZ2UpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy5lcnJvcnMubWFwKGVyciA9PiBgJHtlcnIudHlwZSB8fCBlcnIub3JpZ2lufTogJHtlcnIubWVzc2FnZX1gKS5qb2luKCcsXFxuJyk7XHJcbiAgICB9XHJcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYWxsIHZhbGlkYXRpb24gZXJyb3IgaXRlbXMgZm9yIHRoZSBwYXRoIC8gZmllbGQgc3BlY2lmaWVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gYmUgY2hlY2tlZCBmb3IgZXJyb3IgaXRlbXNcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheTxWYWxpZGF0aW9uRXJyb3JJdGVtPn0gVmFsaWRhdGlvbiBlcnJvciBpdGVtcyBmb3IgdGhlIHNwZWNpZmllZCBwYXRoXHJcbiAgICovXHJcbiAgZ2V0KHBhdGgpIHtcclxuICAgIHJldHVybiB0aGlzLmVycm9ycy5yZWR1Y2UoKHJlZHVjZWQsIGVycm9yKSA9PiB7XHJcbiAgICAgIGlmIChlcnJvci5wYXRoID09PSBwYXRoKSB7XHJcbiAgICAgICAgcmVkdWNlZC5wdXNoKGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVkdWNlZDtcclxuICAgIH0sIFtdKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0aW9uIEVycm9yIEl0ZW1cclxuICogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGluY2x1ZGVkIGluIHRoZSBgVmFsaWRhdGlvbkVycm9yLmVycm9yc2AgcHJvcGVydHkuXHJcbiAqL1xyXG5jbGFzcyBWYWxpZGF0aW9uRXJyb3JJdGVtIHtcclxuICAvKipcclxuICAgKiBDcmVhdGVzIG5ldyB2YWxpZGF0aW9uIGVycm9yIGl0ZW1cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIEFuIGVycm9yIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgdHlwZS9vcmlnaW4gb2YgdGhlIHZhbGlkYXRpb24gZXJyb3JcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgZmllbGQgdGhhdCB0cmlnZ2VyZWQgdGhlIHZhbGlkYXRpb24gZXJyb3JcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVGhlIHZhbHVlIHRoYXQgZ2VuZXJhdGVkIHRoZSBlcnJvclxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbaW5zdF0gdGhlIERBTyBpbnN0YW5jZSB0aGF0IGNhdXNlZCB0aGUgdmFsaWRhdGlvbiBlcnJvclxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbdmFsaWRhdG9yS2V5XSBhIHZhbGlkYXRpb24gXCJrZXlcIiwgdXNlZCBmb3IgaWRlbnRpZmljYXRpb25cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZuTmFtZV0gcHJvcGVydHkgbmFtZSBvZiB0aGUgQlVJTFQtSU4gdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSB2YWxpZGF0aW9uIGVycm9yIChlLmcuIFwiaW5cIiBvciBcImxlblwiKSwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm5BcmdzXSBwYXJhbWV0ZXJzIHVzZWQgd2l0aCB0aGUgQlVJTFQtSU4gdmFsaWRhdG9yIGZ1bmN0aW9uLCBpZiBhcHBsaWNhYmxlXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgdHlwZSwgcGF0aCwgdmFsdWUsIGluc3QsIHZhbGlkYXRvcktleSwgZm5OYW1lLCBmbkFyZ3MpIHtcclxuICAgIC8qKlxyXG4gICAgICogQW4gZXJyb3IgbWVzc2FnZVxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9IG1lc3NhZ2VcclxuICAgICAqL1xyXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0eXBlL29yaWdpbiBvZiB0aGUgdmFsaWRhdGlvbiBlcnJvclxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudHlwZSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZmllbGQgdGhhdCB0cmlnZ2VyZWQgdGhlIHZhbGlkYXRpb24gZXJyb3JcclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBhdGggPSBwYXRoIHx8IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmFsdWUgdGhhdCBnZW5lcmF0ZWQgdGhlIGVycm9yXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5vcmlnaW4gPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIERBTyBpbnN0YW5jZSB0aGF0IGNhdXNlZCB0aGUgdmFsaWRhdGlvbiBlcnJvclxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtNb2RlbH1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnN0YW5jZSA9IGluc3QgfHwgbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgdmFsaWRhdGlvbiBcImtleVwiLCB1c2VkIGZvciBpZGVudGlmaWNhdGlvblxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmFsaWRhdG9yS2V5ID0gdmFsaWRhdG9yS2V5IHx8IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBCVUlMVC1JTiB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjYXVzZWQgdGhlIHZhbGlkYXRpb24gZXJyb3IgKGUuZy4gXCJpblwiIG9yIFwibGVuXCIpLCBpZiBhcHBsaWNhYmxlXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy52YWxpZGF0b3JOYW1lID0gZm5OYW1lIHx8IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJhbWV0ZXJzIHVzZWQgd2l0aCB0aGUgQlVJTFQtSU4gdmFsaWRhdG9yIGZ1bmN0aW9uLCBpZiBhcHBsaWNhYmxlXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy52YWxpZGF0b3JBcmdzID0gZm5BcmdzIHx8IFtdO1xyXG5cclxuICAgIGlmICh0eXBlKSB7XHJcbiAgICAgIGlmIChWYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnNbIHR5cGUgXSkge1xyXG4gICAgICAgIHRoaXMub3JpZ2luID0gdHlwZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBsb3dlcmNhc2VUeXBlID0gYCR7dHlwZX1gLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgICAgIGNvbnN0IHJlYWxUeXBlID0gVmFsaWRhdGlvbkVycm9ySXRlbS5UeXBlU3RyaW5nTWFwWyBsb3dlcmNhc2VUeXBlIF07XHJcblxyXG4gICAgICAgIGlmIChyZWFsVHlwZSAmJiBWYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnNbIHJlYWxUeXBlIF0pIHtcclxuICAgICAgICAgIHRoaXMub3JpZ2luID0gcmVhbFR5cGU7XHJcbiAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgZG9lc24ndCBuZWVkIGNhcHR1cmVTdGFja1RyYWNlIGJlY2F1c2UgaXQncyBub3QgYSBzdWJjbGFzcyBvZiBFcnJvclxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV0dXJuIGEgbG93ZXJjYXNlLCB0cmltbWVkIHN0cmluZyBcImtleVwiIHRoYXQgaWRlbnRpZmllcyB0aGUgdmFsaWRhdG9yLlxyXG4gICAqXHJcbiAgICogTm90ZTogdGhlIHN0cmluZyB3aWxsIGJlIGVtcHR5IGlmIHRoZSBpbnN0YW5jZSBoYXMgbmVpdGhlciBhIHZhbGlkIGB2YWxpZGF0b3JLZXlgIHByb3BlcnR5IG5vciBhIHZhbGlkIGB2YWxpZGF0b3JOYW1lYCBwcm9wZXJ0eVxyXG4gICAqXHJcbiAgICogQHBhcmFtICAge2Jvb2xlYW59IFt1c2VUeXBlQXNOUz10cnVlXSAgICAgIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHJldHVybmVkIHZhbHVlIGlzIFwibmFtZXNwYWNlXCIsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaWYgdGhlIHZhbGlkYXRvcidzIGB0eXBlYCBpcyBub3Qgb25lIG9mIFZhbGlkYXRpb25FcnJvckl0ZW0uT3JpZ2luc1xyXG4gICAqIEBwYXJhbSAgIHtzdHJpbmd9ICBbTlNTZXBhcmF0b3I9Jy4nXSAgICAgICBhIHNlcGFyYXRvciBzdHJpbmcgZm9yIGNvbmNhdGVuYXRpbmcgdGhlIG5hbWVzcGFjZSwgbXVzdCBiZSBub3QgYmUgZW1wdHksXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIFwiLlwiIChmdWxsc3RvcCkuIG9ubHkgdXNlZCBhbmQgdmFsaWRhdGVkIGlmIHVzZVR5cGVBc05TIGlzIFRSVUUuXHJcbiAgICogQHRocm93cyAge0Vycm9yfSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93biBpZiBOU1NlcGFyYXRvciBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLlxyXG4gICAqIEByZXR1cm5zICB7c3RyaW5nfVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBnZXRWYWxpZGF0b3JLZXkodXNlVHlwZUFzTlMsIE5TU2VwYXJhdG9yKSB7XHJcbiAgICBjb25zdCB1c2VUQU5TID0gdXNlVHlwZUFzTlMgPT09IHVuZGVmaW5lZCB8fCAhIXVzZVR5cGVBc05TO1xyXG4gICAgY29uc3QgTlNTZXAgPSBOU1NlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJy4nIDogTlNTZXBhcmF0b3I7XHJcblxyXG4gICAgY29uc3QgdHlwZSA9IHRoaXMub3JpZ2luO1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy52YWxpZGF0b3JLZXkgfHwgdGhpcy52YWxpZGF0b3JOYW1lO1xyXG4gICAgY29uc3QgdXNlTlMgPSB1c2VUQU5TICYmIHR5cGUgJiYgVmFsaWRhdGlvbkVycm9ySXRlbS5PcmlnaW5zWyB0eXBlIF07XHJcblxyXG4gICAgaWYgKHVzZU5TICYmICh0eXBlb2YgTlNTZXAgIT09ICdzdHJpbmcnIHx8ICFOU1NlcC5sZW5ndGgpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBuYW1lc3BhY2Ugc2VwYXJhdG9yIGdpdmVuLCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleS5sZW5ndGgpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKHVzZU5TID8gW3R5cGUsIGtleV0uam9pbihOU1NlcCkgOiBrZXkpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGVudW0gdGhhdCBkZWZpbmVzIHZhbGlkIFZhbGlkYXRpb25FcnJvckl0ZW0gYG9yaWdpbmAgdmFsdWVzXHJcbiAqXHJcbiAqIEB0eXBlIHtPYmplY3R9XHJcbiAqIEBwcm9wZXJ0eSBDT1JFICAgICAgIHtzdHJpbmd9ICBzcGVjaWZpZXMgZXJyb3JzIHRoYXQgb3JpZ2luYXRlIGZyb20gdGhlIHNlcXVlbGl6ZSBcImNvcmVcIlxyXG4gKiBAcHJvcGVydHkgREIgICAgICAgICB7c3RyaW5nfSAgc3BlY2lmaWVzIHZhbGlkYXRpb24gZXJyb3JzIHRoYXQgb3JpZ2luYXRlIGZyb20gdGhlIHN0b3JhZ2UgZW5naW5lXHJcbiAqIEBwcm9wZXJ0eSBGVU5DVElPTiAgIHtzdHJpbmd9ICBzcGVjaWZpZXMgdmFsaWRhdGlvbiBlcnJvcnMgdGhhdCBvcmlnaW5hdGUgZnJvbSB2YWxpZGF0b3IgZnVuY3Rpb25zIChib3RoIGJ1aWx0LWluIGFuZCBjdXN0b20pIGRlZmluZWQgZm9yIGEgZ2l2ZW4gYXR0cmlidXRlXHJcbiAqL1xyXG5WYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnMgPSB7XHJcbiAgQ09SRTogJ0NPUkUnLFxyXG4gIERCOiAnREInLFxyXG4gIEZVTkNUSU9OOiAnRlVOQ1RJT04nXHJcbn07XHJcblxyXG4vKipcclxuICogQW4gb2JqZWN0IHRoYXQgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBgVmFsaWRhdGlvbkVycm9ySXRlbWAgY2xhc3NcclxuICogdGhhdCBtYXBzIGN1cnJlbnQgYHR5cGVgIHN0cmluZ3MgKGFzIGdpdmVuIHRvIFZhbGlkYXRpb25FcnJvckl0ZW0uY29uc3RydWN0b3IoKSkgdG9cclxuICogb3VyIG5ldyBgb3JpZ2luYCB2YWx1ZXMuXHJcbiAqXHJcbiAqIEB0eXBlIHtPYmplY3R9XHJcbiAqL1xyXG5WYWxpZGF0aW9uRXJyb3JJdGVtLlR5cGVTdHJpbmdNYXAgPSB7XHJcbiAgJ25vdG51bGwgdmlvbGF0aW9uJzogJ0NPUkUnLFxyXG4gICdzdHJpbmcgdmlvbGF0aW9uJzogJ0NPUkUnLFxyXG4gICd1bmlxdWUgdmlvbGF0aW9uJzogJ0RCJyxcclxuICAndmFsaWRhdGlvbiBlcnJvcic6ICdGVU5DVElPTidcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVmFsaWRhdGlvbkVycm9yO1xyXG5tb2R1bGUuZXhwb3J0cy5WYWxpZGF0aW9uRXJyb3JJdGVtID0gVmFsaWRhdGlvbkVycm9ySXRlbTtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcnJvcnMvdmFsaWRhdGlvbi1lcnJvci5qcyJdLCJuYW1lcyI6WyJCYXNlRXJyb3IiLCJyZXF1aXJlIiwiVmFsaWRhdGlvbkVycm9yIiwibWVzc2FnZSIsImVycm9ycyIsIm5hbWUiLCJsZW5ndGgiLCJtYXAiLCJlcnIiLCJ0eXBlIiwib3JpZ2luIiwiam9pbiIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjb25zdHJ1Y3RvciIsInBhdGgiLCJyZWR1Y2UiLCJyZWR1Y2VkIiwiZXJyb3IiLCJwdXNoIiwiVmFsaWRhdGlvbkVycm9ySXRlbSIsInZhbHVlIiwiaW5zdCIsInZhbGlkYXRvcktleSIsImZuTmFtZSIsImZuQXJncyIsInVuZGVmaW5lZCIsImluc3RhbmNlIiwidmFsaWRhdG9yTmFtZSIsInZhbGlkYXRvckFyZ3MiLCJPcmlnaW5zIiwibG93ZXJjYXNlVHlwZSIsInRvTG93ZXJDYXNlIiwidHJpbSIsInJlYWxUeXBlIiwiVHlwZVN0cmluZ01hcCIsInVzZVR5cGVBc05TIiwiTlNTZXBhcmF0b3IiLCJ1c2VUQU5TIiwiTlNTZXAiLCJrZXkiLCJ1c2VOUyIsIkNPUkUiLCJEQiIsIkZVTkNUSU9OIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7SUFDTUMsZTs7Ozs7QUFDSiwyQkFBWUMsT0FBWixFQUFxQkMsTUFBckIsRUFBNkI7QUFBQTs7QUFBQTs7QUFDM0IsOEJBQU1ELE9BQU47QUFDQSxVQUFLRSxJQUFMLEdBQVksMEJBQVo7QUFDQSxVQUFLRixPQUFMLEdBQWUsa0JBQWY7QUFDQTtBQUNKO0FBQ0E7QUFDQTs7QUFDSSxVQUFLQyxNQUFMLEdBQWNBLE1BQU0sSUFBSSxFQUF4QixDQVIyQixDQVUzQjs7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O0FBRTVCQyxFQUFBQSxFQUFFLEVBQUUsSUFGd0I7QUFHNUJDLEVBQUFBLFFBQVEsRUFBRTtBQUhrQixDQUE5QjtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBeEIsbUJBQW1CLENBQUNlLGFBQXBCLEdBQW9DO0FBQ2xDLHVCQUFxQixNQURhO0FBRWxDLHNCQUFvQixNQUZjO0FBR2xDLHNCQUFvQixJQUhjO0FBSWxDLHNCQUFvQjtBQUpjLENBQXBDO0FBT0FVLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjVDLGVBQWpCO0FBQ0EyQyxNQUFNLENBQUNDLE9BQVAsQ0FBZTFCLG1CQUFmLEdBQXFDQSxtQkFBckMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IEJhc2VFcnJvciA9IHJlcXVpcmUoJy4vYmFzZS1lcnJvcicpO1xuXG4vKipcbiAqIFZhbGlkYXRpb24gRXJyb3IuIFRocm93biB3aGVuIHRoZSBzZXF1ZWxpemUgdmFsaWRhdGlvbiBoYXMgZmFpbGVkLiBUaGUgZXJyb3IgY29udGFpbnMgYW4gYGVycm9yc2AgcHJvcGVydHksXG4gKiB3aGljaCBpcyBhbiBhcnJheSB3aXRoIDEgb3IgbW9yZSBWYWxpZGF0aW9uRXJyb3JJdGVtcywgb25lIGZvciBlYWNoIHZhbGlkYXRpb24gdGhhdCBmYWlsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgRXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtBcnJheX0gW2Vycm9yc10gQXJyYXkgb2YgVmFsaWRhdGlvbkVycm9ySXRlbSBvYmplY3RzIGRlc2NyaWJpbmcgdGhlIHZhbGlkYXRpb24gZXJyb3JzXG4gKlxuICogQHByb3BlcnR5IGVycm9ycyB7VmFsaWRhdGlvbkVycm9ySXRlbXNbXX1cbiAqL1xuY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgZXJyb3JzKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZVZhbGlkYXRpb25FcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ1ZhbGlkYXRpb24gRXJyb3InO1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHR5cGUge1ZhbGlkYXRpb25FcnJvckl0ZW1bXX1cbiAgICAgKi9cbiAgICB0aGlzLmVycm9ycyA9IGVycm9ycyB8fCBbXTtcblxuICAgIC8vIFVzZSBwcm92aWRlZCBlcnJvciBtZXNzYWdlIGlmIGF2YWlsYWJsZS4uLlxuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXG4gICAgICAvLyAuLi4gb3RoZXJ3aXNlIGNyZWF0ZSBhIGNvbmNhdGVuYXRlZCBtZXNzYWdlIG91dCBvZiBleGlzdGluZyBlcnJvcnMuXG4gICAgfSBlbHNlIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPiAwICYmIHRoaXMuZXJyb3JzWzBdLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubWVzc2FnZSA9IHRoaXMuZXJyb3JzLm1hcChlcnIgPT4gYCR7ZXJyLnR5cGUgfHwgZXJyLm9yaWdpbn06ICR7ZXJyLm1lc3NhZ2V9YCkuam9pbignLFxcbicpO1xuICAgIH1cbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCB2YWxpZGF0aW9uIGVycm9yIGl0ZW1zIGZvciB0aGUgcGF0aCAvIGZpZWxkIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gYmUgY2hlY2tlZCBmb3IgZXJyb3IgaXRlbXNcbiAgICpcbiAgICogQHJldHVybnMge0FycmF5PFZhbGlkYXRpb25FcnJvckl0ZW0+fSBWYWxpZGF0aW9uIGVycm9yIGl0ZW1zIGZvciB0aGUgc3BlY2lmaWVkIHBhdGhcbiAgICovXG4gIGdldChwYXRoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLnJlZHVjZSgocmVkdWNlZCwgZXJyb3IpID0+IHtcbiAgICAgIGlmIChlcnJvci5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgIHJlZHVjZWQucHVzaChlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVkdWNlZDtcbiAgICB9LCBbXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0aW9uIEVycm9yIEl0ZW1cbiAqIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBpbmNsdWRlZCBpbiB0aGUgYFZhbGlkYXRpb25FcnJvci5lcnJvcnNgIHByb3BlcnR5LlxuICovXG5jbGFzcyBWYWxpZGF0aW9uRXJyb3JJdGVtIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgbmV3IHZhbGlkYXRpb24gZXJyb3IgaXRlbVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBBbiBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSB0eXBlL29yaWdpbiBvZiB0aGUgdmFsaWRhdGlvbiBlcnJvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgZmllbGQgdGhhdCB0cmlnZ2VyZWQgdGhlIHZhbGlkYXRpb24gZXJyb3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFRoZSB2YWx1ZSB0aGF0IGdlbmVyYXRlZCB0aGUgZXJyb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IFtpbnN0XSB0aGUgREFPIGluc3RhbmNlIHRoYXQgY2F1c2VkIHRoZSB2YWxpZGF0aW9uIGVycm9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbdmFsaWRhdG9yS2V5XSBhIHZhbGlkYXRpb24gXCJrZXlcIiwgdXNlZCBmb3IgaWRlbnRpZmljYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmbk5hbWVdIHByb3BlcnR5IG5hbWUgb2YgdGhlIEJVSUxULUlOIHZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNhdXNlZCB0aGUgdmFsaWRhdGlvbiBlcnJvciAoZS5nLiBcImluXCIgb3IgXCJsZW5cIiksIGlmIGFwcGxpY2FibGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmbkFyZ3NdIHBhcmFtZXRlcnMgdXNlZCB3aXRoIHRoZSBCVUlMVC1JTiB2YWxpZGF0b3IgZnVuY3Rpb24sIGlmIGFwcGxpY2FibGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHR5cGUsIHBhdGgsIHZhbHVlLCBpbnN0LCB2YWxpZGF0b3JLZXksIGZuTmFtZSwgZm5BcmdzKSB7XG4gICAgLyoqXG4gICAgICogQW4gZXJyb3IgbWVzc2FnZVxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ30gbWVzc2FnZVxuICAgICAqL1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZS9vcmlnaW4gb2YgdGhlIHZhbGlkYXRpb24gZXJyb3JcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmaWVsZCB0aGF0IHRyaWdnZXJlZCB0aGUgdmFsaWRhdGlvbiBlcnJvclxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnBhdGggPSBwYXRoIHx8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgdGhhdCBnZW5lcmF0ZWQgdGhlIGVycm9yXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBudWxsO1xuXG4gICAgdGhpcy5vcmlnaW4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERBTyBpbnN0YW5jZSB0aGF0IGNhdXNlZCB0aGUgdmFsaWRhdGlvbiBlcnJvclxuICAgICAqXG4gICAgICogQHR5cGUge01vZGVsfVxuICAgICAqL1xuICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0IHx8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBIHZhbGlkYXRpb24gXCJrZXlcIiwgdXNlZCBmb3IgaWRlbnRpZmljYXRpb25cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52YWxpZGF0b3JLZXkgPSB2YWxpZGF0b3JLZXkgfHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByb3BlcnR5IG5hbWUgb2YgdGhlIEJVSUxULUlOIHZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNhdXNlZCB0aGUgdmFsaWRhdGlvbiBlcnJvciAoZS5nLiBcImluXCIgb3IgXCJsZW5cIiksIGlmIGFwcGxpY2FibGVcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52YWxpZGF0b3JOYW1lID0gZm5OYW1lIHx8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQYXJhbWV0ZXJzIHVzZWQgd2l0aCB0aGUgQlVJTFQtSU4gdmFsaWRhdG9yIGZ1bmN0aW9uLCBpZiBhcHBsaWNhYmxlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMudmFsaWRhdG9yQXJncyA9IGZuQXJncyB8fCBbXTtcblxuICAgIGlmICh0eXBlKSB7XG4gICAgICBpZiAoVmFsaWRhdGlvbkVycm9ySXRlbS5PcmlnaW5zWyB0eXBlIF0pIHtcbiAgICAgICAgdGhpcy5vcmlnaW4gPSB0eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbG93ZXJjYXNlVHlwZSA9IGAke3R5cGV9YC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgY29uc3QgcmVhbFR5cGUgPSBWYWxpZGF0aW9uRXJyb3JJdGVtLlR5cGVTdHJpbmdNYXBbIGxvd2VyY2FzZVR5cGUgXTtcblxuICAgICAgICBpZiAocmVhbFR5cGUgJiYgVmFsaWRhdGlvbkVycm9ySXRlbS5PcmlnaW5zWyByZWFsVHlwZSBdKSB7XG4gICAgICAgICAgdGhpcy5vcmlnaW4gPSByZWFsVHlwZTtcbiAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBkb2Vzbid0IG5lZWQgY2FwdHVyZVN0YWNrVHJhY2UgYmVjYXVzZSBpdCdzIG5vdCBhIHN1YmNsYXNzIG9mIEVycm9yXG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGEgbG93ZXJjYXNlLCB0cmltbWVkIHN0cmluZyBcImtleVwiIHRoYXQgaWRlbnRpZmllcyB0aGUgdmFsaWRhdG9yLlxuICAgKlxuICAgKiBOb3RlOiB0aGUgc3RyaW5nIHdpbGwgYmUgZW1wdHkgaWYgdGhlIGluc3RhbmNlIGhhcyBuZWl0aGVyIGEgdmFsaWQgYHZhbGlkYXRvcktleWAgcHJvcGVydHkgbm9yIGEgdmFsaWQgYHZhbGlkYXRvck5hbWVgIHByb3BlcnR5XG4gICAqXG4gICAqIEBwYXJhbSAgIHtib29sZWFufSBbdXNlVHlwZUFzTlM9dHJ1ZV0gICAgICBjb250cm9scyB3aGV0aGVyIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBcIm5hbWVzcGFjZVwiLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiB0aGUgdmFsaWRhdG9yJ3MgYHR5cGVgIGlzIG5vdCBvbmUgb2YgVmFsaWRhdGlvbkVycm9ySXRlbS5PcmlnaW5zXG4gICAqIEBwYXJhbSAgIHtzdHJpbmd9ICBbTlNTZXBhcmF0b3I9Jy4nXSAgICAgICBhIHNlcGFyYXRvciBzdHJpbmcgZm9yIGNvbmNhdGVuYXRpbmcgdGhlIG5hbWVzcGFjZSwgbXVzdCBiZSBub3QgYmUgZW1wdHksXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byBcIi5cIiAoZnVsbHN0b3ApLiBvbmx5IHVzZWQgYW5kIHZhbGlkYXRlZCBpZiB1c2VUeXBlQXNOUyBpcyBUUlVFLlxuICAgKiBAdGhyb3dzICB7RXJyb3J9ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3duIGlmIE5TU2VwYXJhdG9yIGlzIGZvdW5kIHRvIGJlIGludmFsaWQuXG4gICAqIEByZXR1cm5zICB7c3RyaW5nfVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0VmFsaWRhdG9yS2V5KHVzZVR5cGVBc05TLCBOU1NlcGFyYXRvcikge1xuICAgIGNvbnN0IHVzZVRBTlMgPSB1c2VUeXBlQXNOUyA9PT0gdW5kZWZpbmVkIHx8ICEhdXNlVHlwZUFzTlM7XG4gICAgY29uc3QgTlNTZXAgPSBOU1NlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJy4nIDogTlNTZXBhcmF0b3I7XG5cbiAgICBjb25zdCB0eXBlID0gdGhpcy5vcmlnaW47XG4gICAgY29uc3Qga2V5ID0gdGhpcy52YWxpZGF0b3JLZXkgfHwgdGhpcy52YWxpZGF0b3JOYW1lO1xuICAgIGNvbnN0IHVzZU5TID0gdXNlVEFOUyAmJiB0eXBlICYmIFZhbGlkYXRpb25FcnJvckl0ZW0uT3JpZ2luc1sgdHlwZSBdO1xuXG4gICAgaWYgKHVzZU5TICYmICh0eXBlb2YgTlNTZXAgIT09ICdzdHJpbmcnIHx8ICFOU1NlcC5sZW5ndGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbmFtZXNwYWNlIHNlcGFyYXRvciBnaXZlbiwgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiAodXNlTlMgPyBbdHlwZSwga2V5XS5qb2luKE5TU2VwKSA6IGtleSkudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBlbnVtIHRoYXQgZGVmaW5lcyB2YWxpZCBWYWxpZGF0aW9uRXJyb3JJdGVtIGBvcmlnaW5gIHZhbHVlc1xuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkgQ09SRSAgICAgICB7c3RyaW5nfSAgc3BlY2lmaWVzIGVycm9ycyB0aGF0IG9yaWdpbmF0ZSBmcm9tIHRoZSBzZXF1ZWxpemUgXCJjb3JlXCJcbiAqIEBwcm9wZXJ0eSBEQiAgICAgICAgIHtzdHJpbmd9ICBzcGVjaWZpZXMgdmFsaWRhdGlvbiBlcnJvcnMgdGhhdCBvcmlnaW5hdGUgZnJvbSB0aGUgc3RvcmFnZSBlbmdpbmVcbiAqIEBwcm9wZXJ0eSBGVU5DVElPTiAgIHtzdHJpbmd9ICBzcGVjaWZpZXMgdmFsaWRhdGlvbiBlcnJvcnMgdGhhdCBvcmlnaW5hdGUgZnJvbSB2YWxpZGF0b3IgZnVuY3Rpb25zIChib3RoIGJ1aWx0LWluIGFuZCBjdXN0b20pIGRlZmluZWQgZm9yIGEgZ2l2ZW4gYXR0cmlidXRlXG4gKi9cblZhbGlkYXRpb25FcnJvckl0ZW0uT3JpZ2lucyA9IHtcbiAgQ09SRTogJ0NPUkUnLFxuICBEQjogJ0RCJyxcbiAgRlVOQ1RJT046ICdGVU5DVElPTidcbn07XG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBgVmFsaWRhdGlvbkVycm9ySXRlbWAgY2xhc3NcbiAqIHRoYXQgbWFwcyBjdXJyZW50IGB0eXBlYCBzdHJpbmdzIChhcyBnaXZlbiB0byBWYWxpZGF0aW9uRXJyb3JJdGVtLmNvbnN0cnVjdG9yKCkpIHRvXG4gKiBvdXIgbmV3IGBvcmlnaW5gIHZhbHVlcy5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5WYWxpZGF0aW9uRXJyb3JJdGVtLlR5cGVTdHJpbmdNYXAgPSB7XG4gICdub3RudWxsIHZpb2xhdGlvbic6ICdDT1JFJyxcbiAgJ3N0cmluZyB2aW9sYXRpb24nOiAnQ09SRScsXG4gICd1bmlxdWUgdmlvbGF0aW9uJzogJ0RCJyxcbiAgJ3ZhbGlkYXRpb24gZXJyb3InOiAnRlVOQ1RJT04nXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZhbGlkYXRpb25FcnJvcjtcbm1vZHVsZS5leHBvcnRzLlZhbGlkYXRpb25FcnJvckl0ZW0gPSBWYWxpZGF0aW9uRXJyb3JJdGVtO1xuIl19 \ No newline at end of file diff --git a/dist/errors/validation/unique-constraint-error.js b/dist/errors/validation/unique-constraint-error.js index bd5d058..e17475a 100644 --- a/dist/errors/validation/unique-constraint-error.js +++ b/dist/errors/validation/unique-constraint-error.js @@ -2,15 +2,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } const ValidationError = require('./../validation-error'); /** @@ -18,11 +22,11 @@ const ValidationError = require('./../validation-error'); */ -let UniqueConstraintError = -/*#__PURE__*/ -function (_ValidationError) { +let UniqueConstraintError = /*#__PURE__*/function (_ValidationError) { _inherits(UniqueConstraintError, _ValidationError); + var _super = _createSuper(UniqueConstraintError); + function UniqueConstraintError(options) { var _this; @@ -34,7 +38,7 @@ function (_ValidationError) { }; options.message = options.message || options.parent.message || 'Validation Error'; options.errors = options.errors || {}; - _this = _possibleConstructorReturn(this, _getPrototypeOf(UniqueConstraintError).call(this, options.message, options.errors)); + _this = _super.call(this, options.message, options.errors); _this.name = 'SequelizeUniqueConstraintError'; _this.errors = options.errors; _this.fields = options.fields; @@ -49,4 +53,4 @@ function (_ValidationError) { }(ValidationError); module.exports = UniqueConstraintError; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvdmFsaWRhdGlvbi91bmlxdWUtY29uc3RyYWludC1lcnJvci5qcyJdLCJuYW1lcyI6WyJWYWxpZGF0aW9uRXJyb3IiLCJyZXF1aXJlIiwiVW5pcXVlQ29uc3RyYWludEVycm9yIiwib3B0aW9ucyIsInBhcmVudCIsInNxbCIsIm1lc3NhZ2UiLCJlcnJvcnMiLCJuYW1lIiwiZmllbGRzIiwib3JpZ2luYWwiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxlQUFlLEdBQUdDLE9BQU8sQ0FBQyx1QkFBRCxDQUEvQjtBQUVBOzs7OztJQUdNQyxxQjs7Ozs7QUFDSixpQ0FBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQkEsSUFBQUEsT0FBTyxHQUFHQSxPQUFPLElBQUksRUFBckI7QUFDQUEsSUFBQUEsT0FBTyxDQUFDQyxNQUFSLEdBQWlCRCxPQUFPLENBQUNDLE1BQVIsSUFBa0I7QUFBRUMsTUFBQUEsR0FBRyxFQUFFO0FBQVAsS0FBbkM7QUFDQUYsSUFBQUEsT0FBTyxDQUFDRyxPQUFSLEdBQWtCSCxPQUFPLENBQUNHLE9BQVIsSUFBbUJILE9BQU8sQ0FBQ0MsTUFBUixDQUFlRSxPQUFsQyxJQUE2QyxrQkFBL0Q7QUFDQUgsSUFBQUEsT0FBTyxDQUFDSSxNQUFSLEdBQWlCSixPQUFPLENBQUNJLE1BQVIsSUFBa0IsRUFBbkM7QUFDQSwrRkFBTUosT0FBTyxDQUFDRyxPQUFkLEVBQXVCSCxPQUFPLENBQUNJLE1BQS9CO0FBRUEsVUFBS0MsSUFBTCxHQUFZLGdDQUFaO0FBQ0EsVUFBS0QsTUFBTCxHQUFjSixPQUFPLENBQUNJLE1BQXRCO0FBQ0EsVUFBS0UsTUFBTCxHQUFjTixPQUFPLENBQUNNLE1BQXRCO0FBQ0EsVUFBS0wsTUFBTCxHQUFjRCxPQUFPLENBQUNDLE1BQXRCO0FBQ0EsVUFBS00sUUFBTCxHQUFnQlAsT0FBTyxDQUFDQyxNQUF4QjtBQUNBLFVBQUtDLEdBQUwsR0FBV0YsT0FBTyxDQUFDQyxNQUFSLENBQWVDLEdBQTFCO0FBQ0FNLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBYm1CO0FBY3BCOzs7RUFmaUNiLGU7O0FBa0JwQ2MsTUFBTSxDQUFDQyxPQUFQLEdBQWlCYixxQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBWYWxpZGF0aW9uRXJyb3IgPSByZXF1aXJlKCcuLy4uL3ZhbGlkYXRpb24tZXJyb3InKTtcclxuXHJcbi8qKlxyXG4gKiBUaHJvd24gd2hlbiBhIHVuaXF1ZSBjb25zdHJhaW50IGlzIHZpb2xhdGVkIGluIHRoZSBkYXRhYmFzZVxyXG4gKi9cclxuY2xhc3MgVW5pcXVlQ29uc3RyYWludEVycm9yIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIG9wdGlvbnMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQgfHwgeyBzcWw6ICcnIH07XHJcbiAgICBvcHRpb25zLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2UgfHwgb3B0aW9ucy5wYXJlbnQubWVzc2FnZSB8fCAnVmFsaWRhdGlvbiBFcnJvcic7XHJcbiAgICBvcHRpb25zLmVycm9ycyA9IG9wdGlvbnMuZXJyb3JzIHx8IHt9O1xyXG4gICAgc3VwZXIob3B0aW9ucy5tZXNzYWdlLCBvcHRpb25zLmVycm9ycyk7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZVVuaXF1ZUNvbnN0cmFpbnRFcnJvcic7XHJcbiAgICB0aGlzLmVycm9ycyA9IG9wdGlvbnMuZXJyb3JzO1xyXG4gICAgdGhpcy5maWVsZHMgPSBvcHRpb25zLmZpZWxkcztcclxuICAgIHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcbiAgICB0aGlzLm9yaWdpbmFsID0gb3B0aW9ucy5wYXJlbnQ7XHJcbiAgICB0aGlzLnNxbCA9IG9wdGlvbnMucGFyZW50LnNxbDtcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBVbmlxdWVDb25zdHJhaW50RXJyb3I7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcnJvcnMvdmFsaWRhdGlvbi91bmlxdWUtY29uc3RyYWludC1lcnJvci5qcyJdLCJuYW1lcyI6WyJWYWxpZGF0aW9uRXJyb3IiLCJyZXF1aXJlIiwiVW5pcXVlQ29uc3RyYWludEVycm9yIiwib3B0aW9ucyIsInBhcmVudCIsInNxbCIsIm1lc3NhZ2UiLCJlcnJvcnMiLCJuYW1lIiwiZmllbGRzIiwib3JpZ2luYWwiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsZUFBZSxHQUFHQyxPQUFPLENBQUMsdUJBQUQsQ0FBL0I7QUFFQTtBQUNBO0FBQ0E7OztJQUNNQyxxQjs7Ozs7QUFDSixpQ0FBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQkEsSUFBQUEsT0FBTyxHQUFHQSxPQUFPLElBQUksRUFBckI7QUFDQUEsSUFBQUEsT0FBTyxDQUFDQyxNQUFSLEdBQWlCRCxPQUFPLENBQUNDLE1BQVIsSUFBa0I7QUFBRUMsTUFBQUEsR0FBRyxFQUFFO0FBQVAsS0FBbkM7QUFDQUYsSUFBQUEsT0FBTyxDQUFDRyxPQUFSLEdBQWtCSCxPQUFPLENBQUNHLE9BQVIsSUFBbUJILE9BQU8sQ0FBQ0MsTUFBUixDQUFlRSxPQUFsQyxJQUE2QyxrQkFBL0Q7QUFDQUgsSUFBQUEsT0FBTyxDQUFDSSxNQUFSLEdBQWlCSixPQUFPLENBQUNJLE1BQVIsSUFBa0IsRUFBbkM7QUFDQSw4QkFBTUosT0FBTyxDQUFDRyxPQUFkLEVBQXVCSCxPQUFPLENBQUNJLE1BQS9CO0FBRUEsVUFBS0MsSUFBTCxHQUFZLGdDQUFaO0FBQ0EsVUFBS0QsTUFBTCxHQUFjSixPQUFPLENBQUNJLE1BQXRCO0FBQ0EsVUFBS0UsTUFBTCxHQUFjTixPQUFPLENBQUNNLE1BQXRCO0FBQ0EsVUFBS0wsTUFBTCxHQUFjRCxPQUFPLENBQUNDLE1BQXRCO0FBQ0EsVUFBS00sUUFBTCxHQUFnQlAsT0FBTyxDQUFDQyxNQUF4QjtBQUNBLFVBQUtDLEdBQUwsR0FBV0YsT0FBTyxDQUFDQyxNQUFSLENBQWVDLEdBQTFCO0FBQ0FNLElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sZ0NBQThCLE1BQUtDLFdBQW5DO0FBYm1CO0FBY3BCOzs7RUFmaUNiLGU7O0FBa0JwQ2MsTUFBTSxDQUFDQyxPQUFQLEdBQWlCYixxQkFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFZhbGlkYXRpb25FcnJvciA9IHJlcXVpcmUoJy4vLi4vdmFsaWRhdGlvbi1lcnJvcicpO1xuXG4vKipcbiAqIFRocm93biB3aGVuIGEgdW5pcXVlIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQgaW4gdGhlIGRhdGFiYXNlXG4gKi9cbmNsYXNzIFVuaXF1ZUNvbnN0cmFpbnRFcnJvciBleHRlbmRzIFZhbGlkYXRpb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLnBhcmVudCA9IG9wdGlvbnMucGFyZW50IHx8IHsgc3FsOiAnJyB9O1xuICAgIG9wdGlvbnMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZSB8fCBvcHRpb25zLnBhcmVudC5tZXNzYWdlIHx8ICdWYWxpZGF0aW9uIEVycm9yJztcbiAgICBvcHRpb25zLmVycm9ycyA9IG9wdGlvbnMuZXJyb3JzIHx8IHt9O1xuICAgIHN1cGVyKG9wdGlvbnMubWVzc2FnZSwgb3B0aW9ucy5lcnJvcnMpO1xuXG4gICAgdGhpcy5uYW1lID0gJ1NlcXVlbGl6ZVVuaXF1ZUNvbnN0cmFpbnRFcnJvcic7XG4gICAgdGhpcy5lcnJvcnMgPSBvcHRpb25zLmVycm9ycztcbiAgICB0aGlzLmZpZWxkcyA9IG9wdGlvbnMuZmllbGRzO1xuICAgIHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gICAgdGhpcy5vcmlnaW5hbCA9IG9wdGlvbnMucGFyZW50O1xuICAgIHRoaXMuc3FsID0gb3B0aW9ucy5wYXJlbnQuc3FsO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVW5pcXVlQ29uc3RyYWludEVycm9yO1xuIl19 \ No newline at end of file diff --git a/dist/hooks.js b/dist/hooks.js index 5275748..a8b52e5 100644 --- a/dist/hooks.js +++ b/dist/hooks.js @@ -662,4 +662,4 @@ exports.applyTo = applyTo; * @name afterBulkSync * @memberof Sequelize */ -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9ob29rcy5qcyJdLCJuYW1lcyI6WyJfIiwicmVxdWlyZSIsImxvZ2dlciIsIlByb21pc2UiLCJkZWJ1ZyIsImRlYnVnQ29udGV4dCIsImhvb2tUeXBlcyIsImJlZm9yZVZhbGlkYXRlIiwicGFyYW1zIiwiYWZ0ZXJWYWxpZGF0ZSIsInZhbGlkYXRpb25GYWlsZWQiLCJiZWZvcmVDcmVhdGUiLCJhZnRlckNyZWF0ZSIsImJlZm9yZURlc3Ryb3kiLCJhZnRlckRlc3Ryb3kiLCJiZWZvcmVSZXN0b3JlIiwiYWZ0ZXJSZXN0b3JlIiwiYmVmb3JlVXBkYXRlIiwiYWZ0ZXJVcGRhdGUiLCJiZWZvcmVTYXZlIiwicHJveGllcyIsImFmdGVyU2F2ZSIsImJlZm9yZVVwc2VydCIsImFmdGVyVXBzZXJ0IiwiYmVmb3JlQnVsa0NyZWF0ZSIsImFmdGVyQnVsa0NyZWF0ZSIsImJlZm9yZUJ1bGtEZXN0cm95IiwiYWZ0ZXJCdWxrRGVzdHJveSIsImJlZm9yZUJ1bGtSZXN0b3JlIiwiYWZ0ZXJCdWxrUmVzdG9yZSIsImJlZm9yZUJ1bGtVcGRhdGUiLCJhZnRlckJ1bGtVcGRhdGUiLCJiZWZvcmVGaW5kIiwiYmVmb3JlRmluZEFmdGVyRXhwYW5kSW5jbHVkZUFsbCIsImJlZm9yZUZpbmRBZnRlck9wdGlvbnMiLCJhZnRlckZpbmQiLCJiZWZvcmVDb3VudCIsImJlZm9yZURlZmluZSIsInN5bmMiLCJub01vZGVsIiwiYWZ0ZXJEZWZpbmUiLCJiZWZvcmVJbml0IiwiYWZ0ZXJJbml0IiwiYmVmb3JlQXNzb2NpYXRlIiwiYWZ0ZXJBc3NvY2lhdGUiLCJiZWZvcmVDb25uZWN0IiwiYWZ0ZXJDb25uZWN0IiwiYmVmb3JlRGlzY29ubmVjdCIsImFmdGVyRGlzY29ubmVjdCIsImJlZm9yZVN5bmMiLCJhZnRlclN5bmMiLCJiZWZvcmVCdWxrU3luYyIsImFmdGVyQnVsa1N5bmMiLCJiZWZvcmVRdWVyeSIsImFmdGVyUXVlcnkiLCJleHBvcnRzIiwiaG9va3MiLCJnZXRQcm94aWVkSG9va3MiLCJob29rVHlwZSIsImNvbmNhdCIsImdldEhvb2tzIiwiaG9va2VkIiwib3B0aW9ucyIsIkhvb2tzIiwiX3NldHVwSG9va3MiLCJtYXAiLCJob29rc0FycmF5IiwiaG9va05hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiaG9va0ZuIiwiYWRkSG9vayIsInJ1bkhvb2tzIiwiaG9va0FyZ3MiLCJFcnJvciIsInNlcXVlbGl6ZSIsImhvb2siLCJmbiIsImFwcGx5IiwiZWFjaCIsInJldHVybiIsIm5hbWUiLCJ0eXBlIiwicHVzaCIsInJlbW92ZUhvb2siLCJpc1JlZmVyZW5jZSIsImhhc0hvb2siLCJmaWx0ZXIiLCJsZW5ndGgiLCJoYXNIb29rcyIsImFwcGx5VG8iLCJ0YXJnZXQiLCJpc01vZGVsIiwibWl4aW4iLCJPYmplY3QiLCJrZXlzIiwiY2FsbGJhY2siXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWFELE9BQU8sQ0FBQyxnQkFBRCxDQUExQjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxXQUFELENBQXZCOztBQUNBLE1BQU1HLEtBQUssR0FBR0YsTUFBTSxDQUFDRyxZQUFQLENBQW9CLE9BQXBCLENBQWQ7QUFFQSxNQUFNQyxTQUFTLEdBQUc7QUFDaEJDLEVBQUFBLGNBQWMsRUFBRTtBQUFFQyxJQUFBQSxNQUFNLEVBQUU7QUFBVixHQURBO0FBRWhCQyxFQUFBQSxhQUFhLEVBQUU7QUFBRUQsSUFBQUEsTUFBTSxFQUFFO0FBQVYsR0FGQztBQUdoQkUsRUFBQUEsZ0JBQWdCLEVBQUU7QUFBRUYsSUFBQUEsTUFBTSxFQUFFO0FBQVYsR0FIRjtBQUloQkcsRUFBQUEsWUFBWSxFQUFFO0FBQUVILElBQUFBLE1BQU0sRUFBRTtBQUFWLEdBSkU7QUFLaEJJLEVBQUFBLFdBQVcsRUFBRTtBQUFFSixJQUFBQSxNQUFNLEVBQUU7QUFBVixH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N0IsS0FBaEI7O0FBRUEsT0FBSyxNQUFNYyxJQUFYLElBQW1Ca0IsTUFBTSxDQUFDQyxJQUFQLENBQVkxRixTQUFaLENBQW5CLEVBQTJDO0FBQ3pDLFFBQUl1RixPQUFPLElBQUl2RixTQUFTLENBQUN1RSxJQUFELENBQVQsQ0FBZ0J0QyxPQUEvQixFQUF3QztBQUN0QztBQUNEOztBQUNEcUQsSUFBQUEsTUFBTSxDQUFDZixJQUFELENBQU4sR0FBZSxVQUFTSyxJQUFULEVBQWVlLFFBQWYsRUFBeUI7QUFDdEMsYUFBTyxLQUFLekIsT0FBTCxDQUFhSyxJQUFiLEVBQW1CSyxJQUFuQixFQUF5QmUsUUFBekIsQ0FBUDtBQUNELEtBRkQ7QUFHRDtBQUNGOztBQUNEMUMsT0FBTyxDQUFDb0MsT0FBUixHQUFrQkEsT0FBbEI7QUFFQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7O0FBU0E7Ozs7Ozs7O0FBUUE7Ozs7Ozs7O0FBUUE7Ozs7Ozs7O0FBUUE7Ozs7Ozs7O0FBUUE7Ozs7Ozs7O0FBUUE7Ozs7Ozs7O0FBUUE7Ozs7Ozs7OztBQVNBOzs7Ozs7Ozs7QUFTQTs7Ozs7Ozs7O0FBU0E7Ozs7Ozs7OztBQVNBOzs7Ozs7OztBQVFBOzs7Ozs7OztBQVFBOzs7Ozs7OztBQVFBOzs7Ozs7OztBQVFBOzs7Ozs7Ozs7QUFTQTs7Ozs7Ozs7O0FBU0E7Ozs7Ozs7OztBQVNBOzs7Ozs7Ozs7QUFTQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7QUFRQSIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoJy4vdXRpbHMvbG9nZ2VyJyk7XHJcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCcuL3Byb21pc2UnKTtcclxuY29uc3QgZGVidWcgPSBsb2dnZXIuZGVidWdDb250ZXh0KCdob29rcycpO1xyXG5cclxuY29uc3QgaG9va1R5cGVzID0ge1xyXG4gIGJlZm9yZVZhbGlkYXRlOiB7IHBhcmFtczogMiB9LFxyXG4gIGFmdGVyVmFsaWRhdGU6IHsgcGFyYW1zOiAyIH0sXHJcbiAgdmFsaWRhdGlvbkZhaWxlZDogeyBwYXJhbXM6IDMgfSxcclxuICBiZWZvcmVDcmVhdGU6IHsgcGFyYW1zOiAyIH0sXHJcbiAgYWZ0ZXJDcmVhdGU6IHsgcGFyYW1zOiAyIH0sXHJcbiAgYmVmb3JlRGVzdHJveTogeyBwYXJhbXM6IDIgfSxcclxuICBhZnRlckRlc3Ryb3k6IHsgcGFyYW1zOiAyIH0sXHJcbiAgYmVmb3JlUmVzdG9yZTogeyBwYXJhbXM6IDIgfSxcclxuICBhZnRlclJlc3RvcmU6IHsgcGFyYW1zOiAyIH0sXHJcbiAgYmVmb3JlVXBkYXRlOiB7IHBhcmFtczogMiB9LFxyXG4gIGFmdGVyVXBkYXRlOiB7IHBhcmFtczogMiB9LFxyXG4gIGJlZm9yZVNhdmU6IHsgcGFyYW1zOiAyLCBwcm94aWVzOiBbJ2JlZm9yZVVwZGF0ZScsICdiZWZvcmVDcmVhdGUnXSB9LFxyXG4gIGFmdGVyU2F2ZTogeyBwYXJhbXM6IDIsIHByb3hpZXM6IFsnYWZ0ZXJVcGRhdGUnLCAnYWZ0ZXJDcmVhdGUnXSB9LFxyXG4gIGJlZm9yZVVwc2VydDogeyBwYXJhbXM6IDIgfSxcclxuICBhZnRlclVwc2VydDogeyBwYXJhbXM6IDIgfSxcclxuICBiZWZvcmVCdWxrQ3JlYXRlOiB7IHBhcmFtczogMiB9LFxyXG4gIGFmdGVyQnVsa0NyZWF0ZTogeyBwYXJhbXM6IDIgfSxcclxuICBiZWZvcmVCdWxrRGVzdHJveTogeyBwYXJhbXM6IDEgfSxcclxuICBhZnRlckJ1bGtEZXN0cm95OiB7IHBhcmFtczogMSB9LFxyXG4gIGJlZm9yZUJ1bGtSZXN0b3JlOiB7IHBhcmFtczogMSB9LFxyXG4gIGFmdGVyQnVsa1Jlc3RvcmU6IHsgcGFyYW1zOiAxIH0sXHJcbiAgYmVmb3JlQnVsa1VwZGF0ZTogeyBwYXJhbXM6IDEgfSxcclxuICBhZnRlckJ1bGtVcGRhdGU6IHsgcGFyYW1zOiAxIH0sXHJcbiAgYmVmb3JlRmluZDogeyBwYXJhbXM6IDEgfSxcclxuICBiZWZvcmVGaW5kQWZ0ZXJFeHBhbmRJbmNsdWRlQWxsOiB7IHBhcmFtczogMSB9LFxyXG4gIGJlZm9yZUZpbmRBZnRlck9wdGlvbnM6IHsgcGFyYW1zOiAxIH0sXHJcbiAgYWZ0ZXJGaW5kOiB7IHBhcmFtczogMiB9LFxyXG4gIGJlZm9yZUNvdW50OiB7IHBhcmFtczogMSB9LFxyXG4gIGJlZm9yZURlZmluZTogeyBwYXJhbXM6IDIsIHN5bmM6IHRydWUsIG5vTW9kZWw6IHRydWUgfSxcclxuICBhZnRlckRlZmluZTogeyBwYXJhbXM6IDEsIHN5bmM6IHRydWUsIG5vTW9kZWw6IHRydWUgfSxcclxuICBiZWZvcmVJbml0OiB7IHBhcmFtczogMiwgc3luYzogdHJ1ZSwgbm9Nb2RlbDogdHJ1ZSB9LFxyXG4gIGFmdGVySW5pdDogeyBwYXJhbXM6IDEsIHN5bmM6IHRydWUsIG5vTW9kZWw6IHRydWUgfSxcclxuICBiZWZvcmVBc3NvY2lhdGU6IHsgcGFyYW1zOiAyLCBzeW5jOiB0cnVlIH0sXHJcbiAgYWZ0ZXJBc3NvY2lhdGU6IHsgcGFyYW1zOiAyLCBzeW5jOiB0cnVlIH0sXHJcbiAgYmVmb3JlQ29ubmVjdDogeyBwYXJhbXM6IDEsIG5vTW9kZWw6IHRydWUgfSxcclxuICBhZnRlckNvbm5lY3Q6IHsgcGFyYW1zOiAyLCBub01vZGVsOiB0cnVlIH0sXHJcbiAgYmVmb3JlRGlzY29ubmVjdDogeyBwYXJhbXM6IDEsIG5vTW9kZWw6IHRydWUgfSxcclxuICBhZnRlckRpc2Nvbm5lY3Q6IHsgcGFyYW1zOiAxLCBub01vZGVsOiB0cnVlIH0sXHJcbiAgYmVmb3JlU3luYzogeyBwYXJhbXM6IDEgfSxcclxuICBhZnRlclN5bmM6IHsgcGFyYW1zOiAxIH0sXHJcbiAgYmVmb3JlQnVsa1N5bmM6IHsgcGFyYW1zOiAxIH0sXHJcbiAgYWZ0ZXJCdWxrU3luYzogeyBwYXJhbXM6IDEgfSxcclxuICBiZWZvcmVRdWVyeTogeyBwYXJhbXM6IDIgfSxcclxuICBhZnRlclF1ZXJ5OiB7IHBhcmFtczogMiB9XHJcbn07XHJcbmV4cG9ydHMuaG9va3MgPSBob29rVHlwZXM7XHJcblxyXG5cclxuLyoqXHJcbiAqIGdldCBhcnJheSBvZiBjdXJyZW50IGhvb2sgYW5kIGl0cyBwcm94aWVzIGNvbWJpbmVkXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBob29rVHlwZSBhbnkgaG9vayB0eXBlIEBzZWUge0BsaW5rIGhvb2tUeXBlc31cclxuICpcclxuICogQHByaXZhdGVcclxuICovXHJcbmNvbnN0IGdldFByb3hpZWRIb29rcyA9IGhvb2tUeXBlID0+XHJcbiAgaG9va1R5cGVzW2hvb2tUeXBlXS5wcm94aWVzXHJcbiAgICA/IGhvb2tUeXBlc1tob29rVHlwZV0ucHJveGllcy5jb25jYXQoaG9va1R5cGUpXHJcbiAgICA6IFtob29rVHlwZV1cclxuO1xyXG5cclxuZnVuY3Rpb24gZ2V0SG9va3MoaG9va2VkLCBob29rVHlwZSkge1xyXG4gIHJldHVybiAoaG9va2VkLm9wdGlvbnMuaG9va3MgfHwge30pW2hvb2tUeXBlXSB8fCBbXTtcclxufVxyXG5cclxuY29uc3QgSG9va3MgPSB7XHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyB1c2VyIHN1cHBsaWVkIGhvb2tzIGRlZmluaXRpb25cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBob29rcyBob29rcyBkZWZpbml0aW9uXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcclxuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAgICovXHJcbiAgX3NldHVwSG9va3MoaG9va3MpIHtcclxuICAgIHRoaXMub3B0aW9ucy5ob29rcyA9IHt9O1xyXG4gICAgXy5tYXAoaG9va3MgfHwge30sIChob29rc0FycmF5LCBob29rTmFtZSkgPT4ge1xyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaG9va3NBcnJheSkpIGhvb2tzQXJyYXkgPSBbaG9va3NBcnJheV07XHJcbiAgICAgIGhvb2tzQXJyYXkuZm9yRWFjaChob29rRm4gPT4gdGhpcy5hZGRIb29rKGhvb2tOYW1lLCBob29rRm4pKTtcclxuICAgIH0pO1xyXG4gIH0sXHJcblxyXG4gIHJ1bkhvb2tzKGhvb2tzLCAuLi5ob29rQXJncykge1xyXG4gICAgaWYgKCFob29rcykgdGhyb3cgbmV3IEVycm9yKCdydW5Ib29rcyByZXF1aXJlcyBhdCBsZWFzdCAxIGFyZ3VtZW50Jyk7XHJcblxyXG4gICAgbGV0IGhvb2tUeXBlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgaG9va3MgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGhvb2tUeXBlID0gaG9va3M7XHJcbiAgICAgIGhvb2tzID0gZ2V0SG9va3ModGhpcywgaG9va1R5cGUpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VxdWVsaXplKSB7XHJcbiAgICAgICAgaG9va3MgPSBob29rcy5jb25jYXQoZ2V0SG9va3ModGhpcy5zZXF1ZWxpemUsIGhvb2tUeXBlKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaG9va3MpKSB7XHJcbiAgICAgIGhvb2tzID0gW2hvb2tzXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzeW5jaHJvbm91cyBob29rc1xyXG4gICAgaWYgKGhvb2tUeXBlc1tob29rVHlwZV0gJiYgaG9va1R5cGVzW2hvb2tUeXBlXS5zeW5jKSB7XHJcbiAgICAgIGZvciAobGV0IGhvb2sgb2YgaG9va3MpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGhvb2sgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBob29rID0gaG9vay5mbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlYnVnKGBydW5uaW5nIGhvb2soc3luYykgJHtob29rVHlwZX1gKTtcclxuICAgICAgICBob29rLmFwcGx5KHRoaXMsIGhvb2tBcmdzKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXN5bmNocm9ub3VzIGhvb2tzIChkZWZhdWx0KVxyXG4gICAgcmV0dXJuIFByb21pc2UuZWFjaChob29rcywgaG9vayA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgaG9vayA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBob29rID0gaG9vay5mbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgZGVidWcoYHJ1bm5pbmcgaG9vayAke2hvb2tUeXBlfWApO1xyXG4gICAgICByZXR1cm4gaG9vay5hcHBseSh0aGlzLCBob29rQXJncyk7XHJcbiAgICB9KS5yZXR1cm4oKTtcclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBob29rIHRvIHRoZSBtb2RlbFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIGhvb2tUeXBlIGhvb2sgbmFtZSBAc2VlIHtAbGluayBob29rVHlwZXN9XHJcbiAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtuYW1lXSBQcm92aWRlIGEgbmFtZSBmb3IgdGhlIGhvb2sgZnVuY3Rpb24uIEl0IGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgaG9vayBsYXRlciBvciB0byBvcmRlciBob29rcyBiYXNlZCBvbiBzb21lIHNvcnQgb2YgcHJpb3JpdHkgc3lzdGVtIGluIHRoZSBmdXR1cmUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gICAgICAgIGZuIFRoZSBob29rIGZ1bmN0aW9uXHJcbiAgICpcclxuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXHJcbiAgICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxyXG4gICAqL1xyXG4gIGFkZEhvb2soaG9va1R5cGUsIG5hbWUsIGZuKSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgZm4gPSBuYW1lO1xyXG4gICAgICBuYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBkZWJ1ZyhgYWRkaW5nIGhvb2sgJHtob29rVHlwZX1gKTtcclxuICAgIC8vIGNoZWNrIGZvciBwcm94aWVzLCBhZGQgdGhlbSB0b29cclxuICAgIGhvb2tUeXBlID0gZ2V0UHJveGllZEhvb2tzKGhvb2tUeXBlKTtcclxuXHJcbiAgICBob29rVHlwZS5mb3JFYWNoKHR5cGUgPT4ge1xyXG4gICAgICBjb25zdCBob29rcyA9IGdldEhvb2tzKHRoaXMsIHR5cGUpO1xyXG4gICAgICBob29rcy5wdXNoKG5hbWUgPyB7IG5hbWUsIGZuIH0gOiBmbik7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5ob29rc1t0eXBlXSA9IGhvb2tzO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGhvb2sgZnJvbSB0aGUgbW9kZWxcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBob29rVHlwZSBAc2VlIHtAbGluayBob29rVHlwZXN9XHJcbiAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IG5hbWUgbmFtZSBvZiBob29rIG9yIGZ1bmN0aW9uIHJlZmVyZW5jZSB3aGljaCB3YXMgYXR0YWNoZWRcclxuICAgKlxyXG4gICAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcclxuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAgICovXHJcbiAgcmVtb3ZlSG9vayhob29rVHlwZSwgbmFtZSkge1xyXG4gICAgY29uc3QgaXNSZWZlcmVuY2UgPSB0eXBlb2YgbmFtZSA9PT0gJ2Z1bmN0aW9uJyA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaGFzSG9vayhob29rVHlwZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZGVidWcoYHJlbW92aW5nIGhvb2sgJHtob29rVHlwZX1gKTtcclxuXHJcbiAgICAvLyBjaGVjayBmb3IgcHJveGllcywgYWRkIHRoZW0gdG9vXHJcbiAgICBob29rVHlwZSA9IGdldFByb3hpZWRIb29rcyhob29rVHlwZSk7XHJcblxyXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIGhvb2tUeXBlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5ob29rc1t0eXBlXSA9IHRoaXMub3B0aW9ucy5ob29rc1t0eXBlXS5maWx0ZXIoaG9vayA9PiB7XHJcbiAgICAgICAgaWYgKGlzUmVmZXJlbmNlICYmIHR5cGVvZiBob29rID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICByZXR1cm4gaG9vayAhPT0gbmFtZTsgLy8gY2hlY2sgaWYgc2FtZSBtZXRob2RcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1JlZmVyZW5jZSAmJiB0eXBlb2YgaG9vayA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIHJldHVybiBob29rLm5hbWUgIT09IG5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGhhcyBhbnkgaG9va3Mgb2YgdGhpcyB0eXBlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaG9va1R5cGUgQHNlZSB7QGxpbmsgaG9va1R5cGVzfVxyXG4gICAqXHJcbiAgICogQGFsaWFzIGhhc0hvb2tzXHJcbiAgICpcclxuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXHJcbiAgICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxyXG4gICAqL1xyXG4gIGhhc0hvb2soaG9va1R5cGUpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaG9va3NbaG9va1R5cGVdICYmICEhdGhpcy5vcHRpb25zLmhvb2tzW2hvb2tUeXBlXS5sZW5ndGg7XHJcbiAgfVxyXG59O1xyXG5Ib29rcy5oYXNIb29rcyA9IEhvb2tzLmhhc0hvb2s7XHJcblxyXG5cclxuZnVuY3Rpb24gYXBwbHlUbyh0YXJnZXQsIGlzTW9kZWwgPSBmYWxzZSkge1xyXG4gIF8ubWl4aW4odGFyZ2V0LCBIb29rcyk7XHJcblxyXG4gIGZvciAoY29uc3QgaG9vayBvZiBPYmplY3Qua2V5cyhob29rVHlwZXMpKSB7XHJcbiAgICBpZiAoaXNNb2RlbCAmJiBob29rVHlwZXNbaG9va10ubm9Nb2RlbCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuICAgIHRhcmdldFtob29rXSA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFkZEhvb2soaG9vaywgbmFtZSwgY2FsbGJhY2spO1xyXG4gICAgfTtcclxuICB9XHJcbn1cclxuZXhwb3J0cy5hcHBseVRvID0gYXBwbHlUbztcclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIHZhbGlkYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBpbnN0YW5jZSwgb3B0aW9uc1xyXG4gKiBAbmFtZSBiZWZvcmVWYWxpZGF0ZVxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciB2YWxpZGF0aW9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggaW5zdGFuY2UsIG9wdGlvbnNcclxuICogQG5hbWUgYWZ0ZXJWYWxpZGF0ZVxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biB3aGVuIHZhbGlkYXRpb24gZmFpbHNcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBpbnN0YW5jZSwgb3B0aW9ucywgZXJyb3IuIEVycm9yIGlzIHRoZVxyXG4gKiBTZXF1ZWxpemVWYWxpZGF0aW9uRXJyb3IuIElmIHRoZSBjYWxsYmFjayB0aHJvd3MgYW4gZXJyb3IsIGl0IHdpbGwgcmVwbGFjZSB0aGUgb3JpZ2luYWwgdmFsaWRhdGlvbiBlcnJvci5cclxuICogQG5hbWUgdmFsaWRhdGlvbkZhaWxlZFxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgY3JlYXRpbmcgYSBzaW5nbGUgaW5zdGFuY2VcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBhdHRyaWJ1dGVzLCBvcHRpb25zXHJcbiAqIEBuYW1lIGJlZm9yZUNyZWF0ZVxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciBjcmVhdGluZyBhIHNpbmdsZSBpbnN0YW5jZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGF0dHJpYnV0ZXMsIG9wdGlvbnNcclxuICogQG5hbWUgYWZ0ZXJDcmVhdGVcclxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIGNyZWF0aW5nIG9yIHVwZGF0aW5nIGEgc2luZ2xlIGluc3RhbmNlLCBJdCBwcm94aWVzIGBiZWZvcmVDcmVhdGVgIGFuZCBgYmVmb3JlVXBkYXRlYFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGF0dHJpYnV0ZXMsIG9wdGlvbnNcclxuICogQG5hbWUgYmVmb3JlU2F2ZVxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgdXBzZXJ0aW5nXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggYXR0cmlidXRlcywgb3B0aW9uc1xyXG4gKiBAbmFtZSBiZWZvcmVVcHNlcnRcclxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgdXBzZXJ0aW5nXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiB1cHNlcnQoKSwgb3B0aW9uc1xyXG4gKiBAbmFtZSBhZnRlclVwc2VydFxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAgKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgY3JlYXRpbmcgb3IgdXBkYXRpbmcgYSBzaW5nbGUgaW5zdGFuY2UsIEl0IHByb3hpZXMgYGFmdGVyQ3JlYXRlYCBhbmQgYGFmdGVyVXBkYXRlYFxyXG4gICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggYXR0cmlidXRlcywgb3B0aW9uc1xyXG4gICogQG5hbWUgYWZ0ZXJTYXZlXHJcbiAgKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAgKi9cclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIGRlc3Ryb3lpbmcgYSBzaW5nbGUgaW5zdGFuY2VcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBpbnN0YW5jZSwgb3B0aW9uc1xyXG4gKlxyXG4gKiBAbmFtZSBiZWZvcmVEZXN0cm95XHJcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcclxuICovXHJcblxyXG4vKipcclxuICogQSBob29rIHRoYXQgaXMgcnVuIGFmdGVyIGRlc3Ryb3lpbmcgYSBzaW5nbGUgaW5zdGFuY2VcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBpbnN0YW5jZSwgb3B0aW9uc1xyXG4gKlxyXG4gKiBAbmFtZSBhZnRlckRlc3Ryb3lcclxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIHJlc3RvcmluZyBhIHNpbmdsZSBpbnN0YW5jZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGluc3RhbmNlLCBvcHRpb25zXHJcbiAqXHJcbiAqIEBuYW1lIGJlZm9yZVJlc3RvcmVcclxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgcmVzdG9yaW5nIGEgc2luZ2xlIGluc3RhbmNlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggaW5zdGFuY2UsIG9wdGlvbnNcclxuICpcclxuICogQG5hbWUgYWZ0ZXJSZXN0b3JlXHJcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcclxuICovXHJcblxyXG4vKipcclxuICogQSBob29rIHRoYXQgaXMgcnVuIGJlZm9yZSB1cGRhdGluZyBhIHNpbmdsZSBpbnN0YW5jZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGluc3RhbmNlLCBvcHRpb25zXHJcbiAqIEBuYW1lIGJlZm9yZVVwZGF0ZVxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciB1cGRhdGluZyBhIHNpbmdsZSBpbnN0YW5jZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGluc3RhbmNlLCBvcHRpb25zXHJcbiAqIEBuYW1lIGFmdGVyVXBkYXRlXHJcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcclxuICovXHJcblxyXG4vKipcclxuICogQSBob29rIHRoYXQgaXMgcnVuIGJlZm9yZSBjcmVhdGluZyBpbnN0YW5jZXMgaW4gYnVsa1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGluc3RhbmNlcywgb3B0aW9uc1xyXG4gKiBAbmFtZSBiZWZvcmVCdWxrQ3JlYXRlXHJcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcclxuICovXHJcblxyXG4vKipcclxuICogQSBob29rIHRoYXQgaXMgcnVuIGFmdGVyIGNyZWF0aW5nIGluc3RhbmNlcyBpbiBidWxrXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggaW5zdGFuY2VzLCBvcHRpb25zXHJcbiAqIEBuYW1lIGFmdGVyQnVsa0NyZWF0ZVxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgZGVzdHJveWluZyBpbnN0YW5jZXMgaW4gYnVsa1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIG9wdGlvbnNcclxuICpcclxuICogQG5hbWUgYmVmb3JlQnVsa0Rlc3Ryb3lcclxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgZGVzdHJveWluZyBpbnN0YW5jZXMgaW4gYnVsa1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIG9wdGlvbnNcclxuICpcclxuICogQG5hbWUgYWZ0ZXJCdWxrRGVzdHJveVxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgcmVzdG9yaW5nIGluc3RhbmNlcyBpbiBidWxrXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggb3B0aW9uc1xyXG4gKlxyXG4gKiBAbmFtZSBiZWZvcmVCdWxrUmVzdG9yZVxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciByZXN0b3JpbmcgaW5zdGFuY2VzIGluIGJ1bGtcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBvcHRpb25zXHJcbiAqXHJcbiAqIEBuYW1lIGFmdGVyQnVsa1Jlc3RvcmVcclxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIHVwZGF0aW5nIGluc3RhbmNlcyBpbiBidWxrXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggb3B0aW9uc1xyXG4gKiBAbmFtZSBiZWZvcmVCdWxrVXBkYXRlXHJcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcclxuICovXHJcblxyXG4vKipcclxuICogQSBob29rIHRoYXQgaXMgcnVuIGFmdGVyIHVwZGF0aW5nIGluc3RhbmNlcyBpbiBidWxrXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggb3B0aW9uc1xyXG4gKiBAbmFtZSBhZnRlckJ1bGtVcGRhdGVcclxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIGEgZmluZCAoc2VsZWN0KSBxdWVyeVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIG9wdGlvbnNcclxuICogQG5hbWUgYmVmb3JlRmluZFxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgYSBmaW5kIChzZWxlY3QpIHF1ZXJ5LCBhZnRlciBhbnkgeyBpbmNsdWRlOiB7YWxsOiAuLi59IH0gb3B0aW9ucyBhcmUgZXhwYW5kZWRcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBvcHRpb25zXHJcbiAqIEBuYW1lIGJlZm9yZUZpbmRBZnRlckV4cGFuZEluY2x1ZGVBbGxcclxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIGEgZmluZCAoc2VsZWN0KSBxdWVyeSwgYWZ0ZXIgYWxsIG9wdGlvbiBwYXJzaW5nIGlzIGNvbXBsZXRlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggb3B0aW9uc1xyXG4gKiBAbmFtZSBiZWZvcmVGaW5kQWZ0ZXJPcHRpb25zXHJcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcclxuICovXHJcblxyXG4vKipcclxuICogQSBob29rIHRoYXQgaXMgcnVuIGFmdGVyIGEgZmluZCAoc2VsZWN0KSBxdWVyeVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGluc3RhbmNlKHMpLCBvcHRpb25zXHJcbiAqIEBuYW1lIGFmdGVyRmluZFxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgYSBjb3VudCBxdWVyeVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIG9wdGlvbnNcclxuICogQG5hbWUgYmVmb3JlQ291bnRcclxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIGEgZGVmaW5lIGNhbGxcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBhdHRyaWJ1dGVzLCBvcHRpb25zXHJcbiAqIEBuYW1lIGJlZm9yZURlZmluZVxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciBhIGRlZmluZSBjYWxsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggZmFjdG9yeVxyXG4gKiBAbmFtZSBhZnRlckRlZmluZVxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgU2VxdWVsaXplKCkgY2FsbFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGNvbmZpZywgb3B0aW9uc1xyXG4gKiBAbmFtZSBiZWZvcmVJbml0XHJcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcclxuICovXHJcblxyXG4vKipcclxuICogQSBob29rIHRoYXQgaXMgcnVuIGFmdGVyIFNlcXVlbGl6ZSgpIGNhbGxcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBzZXF1ZWxpemVcclxuICogQG5hbWUgYWZ0ZXJJbml0XHJcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcclxuICovXHJcblxyXG4vKipcclxuICogQSBob29rIHRoYXQgaXMgcnVuIGJlZm9yZSBhIGNvbm5lY3Rpb24gaXMgY3JlYXRlZFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGNvbmZpZyBwYXNzZWQgdG8gY29ubmVjdGlvblxyXG4gKiBAbmFtZSBiZWZvcmVDb25uZWN0XHJcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcclxuICovXHJcblxyXG4vKipcclxuICogQSBob29rIHRoYXQgaXMgcnVuIGFmdGVyIGEgY29ubmVjdGlvbiBpcyBjcmVhdGVkXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggdGhlIGNvbm5lY3Rpb24gb2JqZWN0IGFuZCB0aGUgY29uZmlnIHBhc3NlZCB0byBjb25uZWN0aW9uXHJcbiAqIEBuYW1lIGFmdGVyQ29ubmVjdFxyXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgYSBjb25uZWN0aW9uIGlzIGRpc2Nvbm5lY3RlZFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIHRoZSBjb25uZWN0aW9uIG9iamVjdFxyXG4gKiBAbmFtZSBiZWZvcmVEaXNjb25uZWN0XHJcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcclxuICovXHJcblxyXG4vKipcclxuICogQSBob29rIHRoYXQgaXMgcnVuIGFmdGVyIGEgY29ubmVjdGlvbiBpcyBkaXNjb25uZWN0ZWRcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCB0aGUgY29ubmVjdGlvbiBvYmplY3RcclxuICogQG5hbWUgYWZ0ZXJEaXNjb25uZWN0XHJcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcclxuICovXHJcblxyXG4vKipcclxuICogQSBob29rIHRoYXQgaXMgcnVuIGJlZm9yZSBNb2RlbC5zeW5jIGNhbGxcclxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBvcHRpb25zIHBhc3NlZCB0byBNb2RlbC5zeW5jXHJcbiAqIEBuYW1lIGJlZm9yZVN5bmNcclxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgTW9kZWwuc3luYyBjYWxsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggb3B0aW9ucyBwYXNzZWQgdG8gTW9kZWwuc3luY1xyXG4gKiBAbmFtZSBhZnRlclN5bmNcclxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gICogQSBob29rIHRoYXQgaXMgcnVuIGJlZm9yZSBzZXF1ZWxpemUuc3luYyBjYWxsXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXHJcbiAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBvcHRpb25zIHBhc3NlZCB0byBzZXF1ZWxpemUuc3luY1xyXG4gICogQG5hbWUgYmVmb3JlQnVsa1N5bmNcclxuICAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcclxuICAqL1xyXG5cclxuLyoqXHJcbiAgKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgc2VxdWVsaXplLnN5bmMgY2FsbFxyXG4gICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxyXG4gICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggb3B0aW9ucyBwYXNzZWQgdG8gc2VxdWVsaXplLnN5bmNcclxuICAqIEBuYW1lIGFmdGVyQnVsa1N5bmNcclxuICAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcclxuICAqL1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9ob29rcy5qcyJdLCJuYW1lcyI6WyJfIiwicmVxdWlyZSIsImxvZ2dlciIsIlByb21pc2UiLCJkZWJ1ZyIsImRlYnVnQ29udGV4dCIsImhvb2tUeXBlcyIsImJlZm9yZVZhbGlkYXRlIiwicGFyYW1zIiwiYWZ0ZXJWYWxpZGF0ZSIsInZhbGlkYXRpb25GYWlsZWQiLCJiZWZvcmVDcmVhdGUiLCJhZnRlckNyZWF0ZSIsImJlZm9yZURlc3Ryb3kiLCJhZnRlckRlc3Ryb3kiLCJiZWZvcmVSZXN0b3JlIiwiYWZ0ZXJSZXN0b3JlIiwiYmVmb3JlVXBkYXRlIiwiYWZ0ZXJVcGRhdGUiLCJiZWZvcmVTYXZlIiwicHJveGllcyIsImFmdGVyU2F2ZSIsImJlZm9yZVVwc2VydCIsImFmdGVyVXBzZXJ0IiwiYmVmb3JlQnVsa0NyZWF0ZSIsImFmdGVyQnVsa0NyZWF0ZSIsImJlZm9yZUJ1bGtEZXN0cm95IiwiYWZ0ZXJCdWxrRGVzdHJveSIsImJlZm9yZUJ1bGtSZXN0b3JlIiwiYWZ0ZXJCdWxrUmVzdG9yZSIsImJlZm9yZUJ1bGtVcGRhdGUiLCJhZnRlckJ1bGtVcGRhdGUiLCJiZWZvcmVGaW5kIiwiYmVmb3JlRmluZEFmdGVyRXhwYW5kSW5jbHVkZUFsbCIsImJlZm9yZUZpbmRBZnRlck9wdGlvbnMiLCJhZnRlckZpbmQiLCJiZWZvcmVDb3VudCIsImJlZm9yZURlZmluZSIsInN5bmMiLCJub01vZGVsIiwiYWZ0ZXJEZWZpbmUiLCJiZWZvcmVJbml0IiwiYWZ0ZXJJbml0IiwiYmVmb3JlQXNzb2NpYXRlIiwiYWZ0ZXJBc3NvY2lhdGUiLCJiZWZvcmVDb25uZWN0IiwiYWZ0ZXJDb25uZWN0IiwiYmVmb3JlRGlzY29ubmVjdCIsImFmdGVyRGlzY29ubmVjdCIsImJlZm9yZVN5bmMiLCJhZnRlclN5bmMiLCJiZWZvcmVCdWxrU3luYyIsImFmdGVyQnVsa1N5bmMiLCJiZWZvcmVRdWVyeSIsImFmdGVyUXVlcnkiLCJleHBvcnRzIiwiaG9va3MiLCJnZXRQcm94aWVkSG9va3MiLCJob29rVHlwZSIsImNvbmNhdCIsImdldEhvb2tzIiwiaG9va2VkIiwib3B0aW9ucyIsIkhvb2tzIiwiX3NldHVwSG9va3MiLCJtYXAiLCJob29rc0FycmF5IiwiaG9va05hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiaG9va0ZuIiwiYWRkSG9vayIsInJ1bkhvb2tzIiwiaG9va0FyZ3MiLCJFcnJvciIsInNlcXVlbGl6ZSIsImhvb2siLCJmbiIsImFwcGx5IiwiZWFjaCIsInJldHVybiIsIm5hbWUiLCJ0eXBlIiwicHVzaCIsInJlbW92ZUhvb2siLCJpc1JlZmVyZW5jZSIsImhhc0hvb2siLCJmaWx0ZXIiLCJsZW5ndGgiLCJoYXNIb29rcyIsImFwcGx5VG8iLCJ0YXJnZXQiLCJpc01vZGVsIiwibWl4aW4iLCJPYmplY3QiLCJrZXlzIiwiY2FsbGJhY2siXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWFELE9BQU8sQ0FBQyxnQkFBRCxDQUExQjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxXQUFELENBQXZCOztBQUNBLE1BQU1HLEtBQUssR0FBR0YsTUFBTSxDQUFDRyxZQUFQLENBQW9CLE9BQXBCLENBQWQ7QUFFQSxNQUFNQyxTQUFTLEdBQUc7QUFDaEJDLEVBQUFBLGNBQWMsRUFBRTtBQUFFQyxJQUFBQSxNQUFNLEVBQUU7QUFBVixHQURBO0FBRWhCQyxFQUFBQSxhQUFhLEVBQUU7QUFBRUQsSUFBQUEsTUFBTSxFQUFFO0FBQVYsR0FGQztBQUdoQkUsRUFBQUEsZ0JBQWdCLEVBQUU7QUFBRUYsSUFBQUEsTUFBTSxFQUFFO0FBQVYsR0FIRjtBQUloQkcsRUFBQUEsWUFBWSxFQUFFO0FBQUVILElBQUFBLE1BQU0sRUFBRTtBQUFWLEdBSkU7QUFLaEJJLEVBQUFBLFdBQVcsRUFBRTtBQUFFSixJQUFBQSxNQUFNLEVBQUU7QUFBVixH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Q0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbmNvbnN0IHsgbG9nZ2VyIH0gPSByZXF1aXJlKCcuL3V0aWxzL2xvZ2dlcicpO1xuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJy4vcHJvbWlzZScpO1xuY29uc3QgZGVidWcgPSBsb2dnZXIuZGVidWdDb250ZXh0KCdob29rcycpO1xuXG5jb25zdCBob29rVHlwZXMgPSB7XG4gIGJlZm9yZVZhbGlkYXRlOiB7IHBhcmFtczogMiB9LFxuICBhZnRlclZhbGlkYXRlOiB7IHBhcmFtczogMiB9LFxuICB2YWxpZGF0aW9uRmFpbGVkOiB7IHBhcmFtczogMyB9LFxuICBiZWZvcmVDcmVhdGU6IHsgcGFyYW1zOiAyIH0sXG4gIGFmdGVyQ3JlYXRlOiB7IHBhcmFtczogMiB9LFxuICBiZWZvcmVEZXN0cm95OiB7IHBhcmFtczogMiB9LFxuICBhZnRlckRlc3Ryb3k6IHsgcGFyYW1zOiAyIH0sXG4gIGJlZm9yZVJlc3RvcmU6IHsgcGFyYW1zOiAyIH0sXG4gIGFmdGVyUmVzdG9yZTogeyBwYXJhbXM6IDIgfSxcbiAgYmVmb3JlVXBkYXRlOiB7IHBhcmFtczogMiB9LFxuICBhZnRlclVwZGF0ZTogeyBwYXJhbXM6IDIgfSxcbiAgYmVmb3JlU2F2ZTogeyBwYXJhbXM6IDIsIHByb3hpZXM6IFsnYmVmb3JlVXBkYXRlJywgJ2JlZm9yZUNyZWF0ZSddIH0sXG4gIGFmdGVyU2F2ZTogeyBwYXJhbXM6IDIsIHByb3hpZXM6IFsnYWZ0ZXJVcGRhdGUnLCAnYWZ0ZXJDcmVhdGUnXSB9LFxuICBiZWZvcmVVcHNlcnQ6IHsgcGFyYW1zOiAyIH0sXG4gIGFmdGVyVXBzZXJ0OiB7IHBhcmFtczogMiB9LFxuICBiZWZvcmVCdWxrQ3JlYXRlOiB7IHBhcmFtczogMiB9LFxuICBhZnRlckJ1bGtDcmVhdGU6IHsgcGFyYW1zOiAyIH0sXG4gIGJlZm9yZUJ1bGtEZXN0cm95OiB7IHBhcmFtczogMSB9LFxuICBhZnRlckJ1bGtEZXN0cm95OiB7IHBhcmFtczogMSB9LFxuICBiZWZvcmVCdWxrUmVzdG9yZTogeyBwYXJhbXM6IDEgfSxcbiAgYWZ0ZXJCdWxrUmVzdG9yZTogeyBwYXJhbXM6IDEgfSxcbiAgYmVmb3JlQnVsa1VwZGF0ZTogeyBwYXJhbXM6IDEgfSxcbiAgYWZ0ZXJCdWxrVXBkYXRlOiB7IHBhcmFtczogMSB9LFxuICBiZWZvcmVGaW5kOiB7IHBhcmFtczogMSB9LFxuICBiZWZvcmVGaW5kQWZ0ZXJFeHBhbmRJbmNsdWRlQWxsOiB7IHBhcmFtczogMSB9LFxuICBiZWZvcmVGaW5kQWZ0ZXJPcHRpb25zOiB7IHBhcmFtczogMSB9LFxuICBhZnRlckZpbmQ6IHsgcGFyYW1zOiAyIH0sXG4gIGJlZm9yZUNvdW50OiB7IHBhcmFtczogMSB9LFxuICBiZWZvcmVEZWZpbmU6IHsgcGFyYW1zOiAyLCBzeW5jOiB0cnVlLCBub01vZGVsOiB0cnVlIH0sXG4gIGFmdGVyRGVmaW5lOiB7IHBhcmFtczogMSwgc3luYzogdHJ1ZSwgbm9Nb2RlbDogdHJ1ZSB9LFxuICBiZWZvcmVJbml0OiB7IHBhcmFtczogMiwgc3luYzogdHJ1ZSwgbm9Nb2RlbDogdHJ1ZSB9LFxuICBhZnRlckluaXQ6IHsgcGFyYW1zOiAxLCBzeW5jOiB0cnVlLCBub01vZGVsOiB0cnVlIH0sXG4gIGJlZm9yZUFzc29jaWF0ZTogeyBwYXJhbXM6IDIsIHN5bmM6IHRydWUgfSxcbiAgYWZ0ZXJBc3NvY2lhdGU6IHsgcGFyYW1zOiAyLCBzeW5jOiB0cnVlIH0sXG4gIGJlZm9yZUNvbm5lY3Q6IHsgcGFyYW1zOiAxLCBub01vZGVsOiB0cnVlIH0sXG4gIGFmdGVyQ29ubmVjdDogeyBwYXJhbXM6IDIsIG5vTW9kZWw6IHRydWUgfSxcbiAgYmVmb3JlRGlzY29ubmVjdDogeyBwYXJhbXM6IDEsIG5vTW9kZWw6IHRydWUgfSxcbiAgYWZ0ZXJEaXNjb25uZWN0OiB7IHBhcmFtczogMSwgbm9Nb2RlbDogdHJ1ZSB9LFxuICBiZWZvcmVTeW5jOiB7IHBhcmFtczogMSB9LFxuICBhZnRlclN5bmM6IHsgcGFyYW1zOiAxIH0sXG4gIGJlZm9yZUJ1bGtTeW5jOiB7IHBhcmFtczogMSB9LFxuICBhZnRlckJ1bGtTeW5jOiB7IHBhcmFtczogMSB9LFxuICBiZWZvcmVRdWVyeTogeyBwYXJhbXM6IDIgfSxcbiAgYWZ0ZXJRdWVyeTogeyBwYXJhbXM6IDIgfVxufTtcbmV4cG9ydHMuaG9va3MgPSBob29rVHlwZXM7XG5cblxuLyoqXG4gKiBnZXQgYXJyYXkgb2YgY3VycmVudCBob29rIGFuZCBpdHMgcHJveGllcyBjb21iaW5lZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBob29rVHlwZSBhbnkgaG9vayB0eXBlIEBzZWUge0BsaW5rIGhvb2tUeXBlc31cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBnZXRQcm94aWVkSG9va3MgPSBob29rVHlwZSA9PlxuICBob29rVHlwZXNbaG9va1R5cGVdLnByb3hpZXNcbiAgICA/IGhvb2tUeXBlc1tob29rVHlwZV0ucHJveGllcy5jb25jYXQoaG9va1R5cGUpXG4gICAgOiBbaG9va1R5cGVdXG47XG5cbmZ1bmN0aW9uIGdldEhvb2tzKGhvb2tlZCwgaG9va1R5cGUpIHtcbiAgcmV0dXJuIChob29rZWQub3B0aW9ucy5ob29rcyB8fCB7fSlbaG9va1R5cGVdIHx8IFtdO1xufVxuXG5jb25zdCBIb29rcyA9IHtcbiAgLyoqXG4gICAqIFByb2Nlc3MgdXNlciBzdXBwbGllZCBob29rcyBkZWZpbml0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBob29rcyBob29rcyBkZWZpbml0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcbiAgICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxuICAgKi9cbiAgX3NldHVwSG9va3MoaG9va3MpIHtcbiAgICB0aGlzLm9wdGlvbnMuaG9va3MgPSB7fTtcbiAgICBfLm1hcChob29rcyB8fCB7fSwgKGhvb2tzQXJyYXksIGhvb2tOYW1lKSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaG9va3NBcnJheSkpIGhvb2tzQXJyYXkgPSBbaG9va3NBcnJheV07XG4gICAgICBob29rc0FycmF5LmZvckVhY2goaG9va0ZuID0+IHRoaXMuYWRkSG9vayhob29rTmFtZSwgaG9va0ZuKSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgcnVuSG9va3MoaG9va3MsIC4uLmhvb2tBcmdzKSB7XG4gICAgaWYgKCFob29rcykgdGhyb3cgbmV3IEVycm9yKCdydW5Ib29rcyByZXF1aXJlcyBhdCBsZWFzdCAxIGFyZ3VtZW50Jyk7XG5cbiAgICBsZXQgaG9va1R5cGU7XG5cbiAgICBpZiAodHlwZW9mIGhvb2tzID09PSAnc3RyaW5nJykge1xuICAgICAgaG9va1R5cGUgPSBob29rcztcbiAgICAgIGhvb2tzID0gZ2V0SG9va3ModGhpcywgaG9va1R5cGUpO1xuXG4gICAgICBpZiAodGhpcy5zZXF1ZWxpemUpIHtcbiAgICAgICAgaG9va3MgPSBob29rcy5jb25jYXQoZ2V0SG9va3ModGhpcy5zZXF1ZWxpemUsIGhvb2tUeXBlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGhvb2tzKSkge1xuICAgICAgaG9va3MgPSBbaG9va3NdO1xuICAgIH1cblxuICAgIC8vIHN5bmNocm9ub3VzIGhvb2tzXG4gICAgaWYgKGhvb2tUeXBlc1tob29rVHlwZV0gJiYgaG9va1R5cGVzW2hvb2tUeXBlXS5zeW5jKSB7XG4gICAgICBmb3IgKGxldCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaG9vayA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBob29rID0gaG9vay5mbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlYnVnKGBydW5uaW5nIGhvb2soc3luYykgJHtob29rVHlwZX1gKTtcbiAgICAgICAgaG9vay5hcHBseSh0aGlzLCBob29rQXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYXN5bmNocm9ub3VzIGhvb2tzIChkZWZhdWx0KVxuICAgIHJldHVybiBQcm9taXNlLmVhY2goaG9va3MsIGhvb2sgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBob29rID09PSAnb2JqZWN0Jykge1xuICAgICAgICBob29rID0gaG9vay5mbjtcbiAgICAgIH1cblxuICAgICAgZGVidWcoYHJ1bm5pbmcgaG9vayAke2hvb2tUeXBlfWApO1xuICAgICAgcmV0dXJuIGhvb2suYXBwbHkodGhpcywgaG9va0FyZ3MpO1xuICAgIH0pLnJldHVybigpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYSBob29rIHRvIHRoZSBtb2RlbFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgaG9va1R5cGUgaG9vayBuYW1lIEBzZWUge0BsaW5rIGhvb2tUeXBlc31cbiAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtuYW1lXSBQcm92aWRlIGEgbmFtZSBmb3IgdGhlIGhvb2sgZnVuY3Rpb24uIEl0IGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgaG9vayBsYXRlciBvciB0byBvcmRlciBob29rcyBiYXNlZCBvbiBzb21lIHNvcnQgb2YgcHJpb3JpdHkgc3lzdGVtIGluIHRoZSBmdXR1cmUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259ICAgICAgICBmbiBUaGUgaG9vayBmdW5jdGlvblxuICAgKlxuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXG4gICAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAgICovXG4gIGFkZEhvb2soaG9va1R5cGUsIG5hbWUsIGZuKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmbiA9IG5hbWU7XG4gICAgICBuYW1lID0gbnVsbDtcbiAgICB9XG5cbiAgICBkZWJ1ZyhgYWRkaW5nIGhvb2sgJHtob29rVHlwZX1gKTtcbiAgICAvLyBjaGVjayBmb3IgcHJveGllcywgYWRkIHRoZW0gdG9vXG4gICAgaG9va1R5cGUgPSBnZXRQcm94aWVkSG9va3MoaG9va1R5cGUpO1xuXG4gICAgaG9va1R5cGUuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgIGNvbnN0IGhvb2tzID0gZ2V0SG9va3ModGhpcywgdHlwZSk7XG4gICAgICBob29rcy5wdXNoKG5hbWUgPyB7IG5hbWUsIGZuIH0gOiBmbik7XG4gICAgICB0aGlzLm9wdGlvbnMuaG9va3NbdHlwZV0gPSBob29rcztcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaG9vayBmcm9tIHRoZSBtb2RlbFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaG9va1R5cGUgQHNlZSB7QGxpbmsgaG9va1R5cGVzfVxuICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gbmFtZSBuYW1lIG9mIGhvb2sgb3IgZnVuY3Rpb24gcmVmZXJlbmNlIHdoaWNoIHdhcyBhdHRhY2hlZFxuICAgKlxuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXG4gICAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAgICovXG4gIHJlbW92ZUhvb2soaG9va1R5cGUsIG5hbWUpIHtcbiAgICBjb25zdCBpc1JlZmVyZW5jZSA9IHR5cGVvZiBuYW1lID09PSAnZnVuY3Rpb24nID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmhhc0hvb2soaG9va1R5cGUpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBkZWJ1ZyhgcmVtb3ZpbmcgaG9vayAke2hvb2tUeXBlfWApO1xuXG4gICAgLy8gY2hlY2sgZm9yIHByb3hpZXMsIGFkZCB0aGVtIHRvb1xuICAgIGhvb2tUeXBlID0gZ2V0UHJveGllZEhvb2tzKGhvb2tUeXBlKTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiBob29rVHlwZSkge1xuICAgICAgdGhpcy5vcHRpb25zLmhvb2tzW3R5cGVdID0gdGhpcy5vcHRpb25zLmhvb2tzW3R5cGVdLmZpbHRlcihob29rID0+IHtcbiAgICAgICAgaWYgKGlzUmVmZXJlbmNlICYmIHR5cGVvZiBob29rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGhvb2sgIT09IG5hbWU7IC8vIGNoZWNrIGlmIHNhbWUgbWV0aG9kXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1JlZmVyZW5jZSAmJiB0eXBlb2YgaG9vayA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICByZXR1cm4gaG9vay5uYW1lICE9PSBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaGFzIGFueSBob29rcyBvZiB0aGlzIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvb2tUeXBlIEBzZWUge0BsaW5rIGhvb2tUeXBlc31cbiAgICpcbiAgICogQGFsaWFzIGhhc0hvb2tzXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcbiAgICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxuICAgKi9cbiAgaGFzSG9vayhob29rVHlwZSkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaG9va3NbaG9va1R5cGVdICYmICEhdGhpcy5vcHRpb25zLmhvb2tzW2hvb2tUeXBlXS5sZW5ndGg7XG4gIH1cbn07XG5Ib29rcy5oYXNIb29rcyA9IEhvb2tzLmhhc0hvb2s7XG5cblxuZnVuY3Rpb24gYXBwbHlUbyh0YXJnZXQsIGlzTW9kZWwgPSBmYWxzZSkge1xuICBfLm1peGluKHRhcmdldCwgSG9va3MpO1xuXG4gIGZvciAoY29uc3QgaG9vayBvZiBPYmplY3Qua2V5cyhob29rVHlwZXMpKSB7XG4gICAgaWYgKGlzTW9kZWwgJiYgaG9va1R5cGVzW2hvb2tdLm5vTW9kZWwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0YXJnZXRbaG9va10gPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkSG9vayhob29rLCBuYW1lLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgfVxufVxuZXhwb3J0cy5hcHBseVRvID0gYXBwbHlUbztcblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIHZhbGlkYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGluc3RhbmNlLCBvcHRpb25zXG4gKiBAbmFtZSBiZWZvcmVWYWxpZGF0ZVxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxuICovXG5cbi8qKlxuICogQSBob29rIHRoYXQgaXMgcnVuIGFmdGVyIHZhbGlkYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGluc3RhbmNlLCBvcHRpb25zXG4gKiBAbmFtZSBhZnRlclZhbGlkYXRlXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXG4gKi9cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gd2hlbiB2YWxpZGF0aW9uIGZhaWxzXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBpbnN0YW5jZSwgb3B0aW9ucywgZXJyb3IuIEVycm9yIGlzIHRoZVxuICogU2VxdWVsaXplVmFsaWRhdGlvbkVycm9yLiBJZiB0aGUgY2FsbGJhY2sgdGhyb3dzIGFuIGVycm9yLCBpdCB3aWxsIHJlcGxhY2UgdGhlIG9yaWdpbmFsIHZhbGlkYXRpb24gZXJyb3IuXG4gKiBAbmFtZSB2YWxpZGF0aW9uRmFpbGVkXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXG4gKi9cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIGNyZWF0aW5nIGEgc2luZ2xlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBhdHRyaWJ1dGVzLCBvcHRpb25zXG4gKiBAbmFtZSBiZWZvcmVDcmVhdGVcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciBjcmVhdGluZyBhIHNpbmdsZSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggYXR0cmlidXRlcywgb3B0aW9uc1xuICogQG5hbWUgYWZ0ZXJDcmVhdGVcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgY3JlYXRpbmcgb3IgdXBkYXRpbmcgYSBzaW5nbGUgaW5zdGFuY2UsIEl0IHByb3hpZXMgYGJlZm9yZUNyZWF0ZWAgYW5kIGBiZWZvcmVVcGRhdGVgXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBhdHRyaWJ1dGVzLCBvcHRpb25zXG4gKiBAbmFtZSBiZWZvcmVTYXZlXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXG4gKi9cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIHVwc2VydGluZ1xuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggYXR0cmlidXRlcywgb3B0aW9uc1xuICogQG5hbWUgYmVmb3JlVXBzZXJ0XG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXG4gKi9cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgdXBzZXJ0aW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHVwc2VydCgpLCBvcHRpb25zXG4gKiBAbmFtZSBhZnRlclVwc2VydFxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxuICovXG5cbi8qKlxuICAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciBjcmVhdGluZyBvciB1cGRhdGluZyBhIHNpbmdsZSBpbnN0YW5jZSwgSXQgcHJveGllcyBgYWZ0ZXJDcmVhdGVgIGFuZCBgYWZ0ZXJVcGRhdGVgXG4gICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGF0dHJpYnV0ZXMsIG9wdGlvbnNcbiAgKiBAbmFtZSBhZnRlclNhdmVcbiAgKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXG4gICovXG5cbi8qKlxuICogQSBob29rIHRoYXQgaXMgcnVuIGJlZm9yZSBkZXN0cm95aW5nIGEgc2luZ2xlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBpbnN0YW5jZSwgb3B0aW9uc1xuICpcbiAqIEBuYW1lIGJlZm9yZURlc3Ryb3lcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciBkZXN0cm95aW5nIGEgc2luZ2xlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBpbnN0YW5jZSwgb3B0aW9uc1xuICpcbiAqIEBuYW1lIGFmdGVyRGVzdHJveVxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxuICovXG5cbi8qKlxuICogQSBob29rIHRoYXQgaXMgcnVuIGJlZm9yZSByZXN0b3JpbmcgYSBzaW5nbGUgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGluc3RhbmNlLCBvcHRpb25zXG4gKlxuICogQG5hbWUgYmVmb3JlUmVzdG9yZVxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxuICovXG5cbi8qKlxuICogQSBob29rIHRoYXQgaXMgcnVuIGFmdGVyIHJlc3RvcmluZyBhIHNpbmdsZSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggaW5zdGFuY2UsIG9wdGlvbnNcbiAqXG4gKiBAbmFtZSBhZnRlclJlc3RvcmVcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgdXBkYXRpbmcgYSBzaW5nbGUgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGluc3RhbmNlLCBvcHRpb25zXG4gKiBAbmFtZSBiZWZvcmVVcGRhdGVcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciB1cGRhdGluZyBhIHNpbmdsZSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggaW5zdGFuY2UsIG9wdGlvbnNcbiAqIEBuYW1lIGFmdGVyVXBkYXRlXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXG4gKi9cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIGNyZWF0aW5nIGluc3RhbmNlcyBpbiBidWxrXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBpbnN0YW5jZXMsIG9wdGlvbnNcbiAqIEBuYW1lIGJlZm9yZUJ1bGtDcmVhdGVcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciBjcmVhdGluZyBpbnN0YW5jZXMgaW4gYnVsa1xuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggaW5zdGFuY2VzLCBvcHRpb25zXG4gKiBAbmFtZSBhZnRlckJ1bGtDcmVhdGVcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgZGVzdHJveWluZyBpbnN0YW5jZXMgaW4gYnVsa1xuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggb3B0aW9uc1xuICpcbiAqIEBuYW1lIGJlZm9yZUJ1bGtEZXN0cm95XG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXG4gKi9cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgZGVzdHJveWluZyBpbnN0YW5jZXMgaW4gYnVsa1xuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggb3B0aW9uc1xuICpcbiAqIEBuYW1lIGFmdGVyQnVsa0Rlc3Ryb3lcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgcmVzdG9yaW5nIGluc3RhbmNlcyBpbiBidWxrXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBvcHRpb25zXG4gKlxuICogQG5hbWUgYmVmb3JlQnVsa1Jlc3RvcmVcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciByZXN0b3JpbmcgaW5zdGFuY2VzIGluIGJ1bGtcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAbmFtZSBhZnRlckJ1bGtSZXN0b3JlXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXG4gKi9cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYmVmb3JlIHVwZGF0aW5nIGluc3RhbmNlcyBpbiBidWxrXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBvcHRpb25zXG4gKiBAbmFtZSBiZWZvcmVCdWxrVXBkYXRlXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplLk1vZGVsXG4gKi9cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgdXBkYXRpbmcgaW5zdGFuY2VzIGluIGJ1bGtcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIG9wdGlvbnNcbiAqIEBuYW1lIGFmdGVyQnVsa1VwZGF0ZVxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5Nb2RlbFxuICovXG5cbi8qKlxuICogQSBob29rIHRoYXQgaXMgcnVuIGJlZm9yZSBhIGZpbmQgKHNlbGVjdCkgcXVlcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIG9wdGlvbnNcbiAqIEBuYW1lIGJlZm9yZUZpbmRcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgYSBmaW5kIChzZWxlY3QpIHF1ZXJ5LCBhZnRlciBhbnkgeyBpbmNsdWRlOiB7YWxsOiAuLi59IH0gb3B0aW9ucyBhcmUgZXhwYW5kZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIG9wdGlvbnNcbiAqIEBuYW1lIGJlZm9yZUZpbmRBZnRlckV4cGFuZEluY2x1ZGVBbGxcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgYSBmaW5kIChzZWxlY3QpIHF1ZXJ5LCBhZnRlciBhbGwgb3B0aW9uIHBhcnNpbmcgaXMgY29tcGxldGVcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIG9wdGlvbnNcbiAqIEBuYW1lIGJlZm9yZUZpbmRBZnRlck9wdGlvbnNcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciBhIGZpbmQgKHNlbGVjdCkgcXVlcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGluc3RhbmNlKHMpLCBvcHRpb25zXG4gKiBAbmFtZSBhZnRlckZpbmRcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgYSBjb3VudCBxdWVyeVxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggb3B0aW9uc1xuICogQG5hbWUgYmVmb3JlQ291bnRcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemUuTW9kZWxcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgYSBkZWZpbmUgY2FsbFxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggYXR0cmlidXRlcywgb3B0aW9uc1xuICogQG5hbWUgYmVmb3JlRGVmaW5lXG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplXG4gKi9cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgYSBkZWZpbmUgY2FsbFxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggZmFjdG9yeVxuICogQG5hbWUgYWZ0ZXJEZWZpbmVcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgU2VxdWVsaXplKCkgY2FsbFxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggY29uZmlnLCBvcHRpb25zXG4gKiBAbmFtZSBiZWZvcmVJbml0XG4gKiBAbWVtYmVyb2YgU2VxdWVsaXplXG4gKi9cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgU2VxdWVsaXplKCkgY2FsbFxuICogQHBhcmFtIHtzdHJpbmd9ICAgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggc2VxdWVsaXplXG4gKiBAbmFtZSBhZnRlckluaXRcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgYSBjb25uZWN0aW9uIGlzIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGNvbmZpZyBwYXNzZWQgdG8gY29ubmVjdGlvblxuICogQG5hbWUgYmVmb3JlQ29ubmVjdFxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxuICovXG5cbi8qKlxuICogQSBob29rIHRoYXQgaXMgcnVuIGFmdGVyIGEgY29ubmVjdGlvbiBpcyBjcmVhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCB0aGUgY29ubmVjdGlvbiBvYmplY3QgYW5kIHRoZSBjb25maWcgcGFzc2VkIHRvIGNvbm5lY3Rpb25cbiAqIEBuYW1lIGFmdGVyQ29ubmVjdFxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxuICovXG5cbi8qKlxuICogQSBob29rIHRoYXQgaXMgcnVuIGJlZm9yZSBhIGNvbm5lY3Rpb24gaXMgZGlzY29ubmVjdGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCB0aGUgY29ubmVjdGlvbiBvYmplY3RcbiAqIEBuYW1lIGJlZm9yZURpc2Nvbm5lY3RcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciBhIGNvbm5lY3Rpb24gaXMgZGlzY29ubmVjdGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gICBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCB0aGUgY29ubmVjdGlvbiBvYmplY3RcbiAqIEBuYW1lIGFmdGVyRGlzY29ubmVjdFxuICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxuICovXG5cbi8qKlxuICogQSBob29rIHRoYXQgaXMgcnVuIGJlZm9yZSBNb2RlbC5zeW5jIGNhbGxcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIG9wdGlvbnMgcGFzc2VkIHRvIE1vZGVsLnN5bmNcbiAqIEBuYW1lIGJlZm9yZVN5bmNcbiAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcbiAqL1xuXG4vKipcbiAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciBNb2RlbC5zeW5jIGNhbGxcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIG9wdGlvbnMgcGFzc2VkIHRvIE1vZGVsLnN5bmNcbiAqIEBuYW1lIGFmdGVyU3luY1xuICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxuICovXG5cbi8qKlxuICAqIEEgaG9vayB0aGF0IGlzIHJ1biBiZWZvcmUgc2VxdWVsaXplLnN5bmMgY2FsbFxuICAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBvcHRpb25zIHBhc3NlZCB0byBzZXF1ZWxpemUuc3luY1xuICAqIEBuYW1lIGJlZm9yZUJ1bGtTeW5jXG4gICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxuICAqL1xuXG4vKipcbiAgKiBBIGhvb2sgdGhhdCBpcyBydW4gYWZ0ZXIgc2VxdWVsaXplLnN5bmMgY2FsbFxuICAqIEBwYXJhbSB7c3RyaW5nfSAgIG5hbWVcbiAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBvcHRpb25zIHBhc3NlZCB0byBzZXF1ZWxpemUuc3luY1xuICAqIEBuYW1lIGFmdGVyQnVsa1N5bmNcbiAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXG4gICovXG4iXX0= \ No newline at end of file diff --git a/dist/index-hints.js b/dist/index-hints.js index 73abb6a..ab0af97 100644 --- a/dist/index-hints.js +++ b/dist/index-hints.js @@ -13,4 +13,4 @@ const IndexHints = module.exports = { FORCE: 'FORCE', IGNORE: 'IGNORE' }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC1oaW50cy5qcyJdLCJuYW1lcyI6WyJJbmRleEhpbnRzIiwibW9kdWxlIiwiZXhwb3J0cyIsIlVTRSIsIkZPUkNFIiwiSUdOT1JFIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUVBOzs7Ozs7OztBQU9BLE1BQU1BLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxPQUFQLEdBQWlCO0FBQUU7QUFDcENDLEVBQUFBLEdBQUcsRUFBRSxLQUQ2QjtBQUVsQ0MsRUFBQUEsS0FBSyxFQUFFLE9BRjJCO0FBR2xDQyxFQUFBQSxNQUFNLEVBQUU7QUFIMEIsQ0FBcEMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogQW4gZW51bSBvZiBpbmRleCBoaW50cyB0byBiZSB1c2VkIGluIG15c3FsIGZvciBxdWVyeWluZyB3aXRoIGluZGV4IGhpbnRzXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSBVU0VcclxuICogQHByb3BlcnR5IEZPUkNFXHJcbiAqIEBwcm9wZXJ0eSBJR05PUkVcclxuICovXHJcbmNvbnN0IEluZGV4SGludHMgPSBtb2R1bGUuZXhwb3J0cyA9IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxyXG4gIFVTRTogJ1VTRScsXHJcbiAgRk9SQ0U6ICdGT1JDRScsXHJcbiAgSUdOT1JFOiAnSUdOT1JFJ1xyXG59O1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC1oaW50cy5qcyJdLCJuYW1lcyI6WyJJbmRleEhpbnRzIiwibW9kdWxlIiwiZXhwb3J0cyIsIlVTRSIsIkZPUkNFIiwiSUdOT1JFIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE1BQU1BLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxPQUFQLEdBQWlCO0FBQUU7QUFDcENDLEVBQUFBLEdBQUcsRUFBRSxLQUQ2QjtBQUVsQ0MsRUFBQUEsS0FBSyxFQUFFLE9BRjJCO0FBR2xDQyxFQUFBQSxNQUFNLEVBQUU7QUFIMEIsQ0FBcEMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQW4gZW51bSBvZiBpbmRleCBoaW50cyB0byBiZSB1c2VkIGluIG15c3FsIGZvciBxdWVyeWluZyB3aXRoIGluZGV4IGhpbnRzXG4gKlxuICogQHByb3BlcnR5IFVTRVxuICogQHByb3BlcnR5IEZPUkNFXG4gKiBAcHJvcGVydHkgSUdOT1JFXG4gKi9cbmNvbnN0IEluZGV4SGludHMgPSBtb2R1bGUuZXhwb3J0cyA9IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICBVU0U6ICdVU0UnLFxuICBGT1JDRTogJ0ZPUkNFJyxcbiAgSUdOT1JFOiAnSUdOT1JFJ1xufTtcbiJdfQ== \ No newline at end of file diff --git a/dist/instance-validator.js b/dist/instance-validator.js index 7f66c7d..ed7b822 100644 --- a/dist/instance-validator.js +++ b/dist/instance-validator.js @@ -29,9 +29,7 @@ const validator = require('./utils/validator-extras').validator; */ -let InstanceValidator = -/*#__PURE__*/ -function () { +let InstanceValidator = /*#__PURE__*/function () { function InstanceValidator(modelInstance, options) { _classCallCheck(this, InstanceValidator); @@ -446,4 +444,4 @@ InstanceValidator.RAW_KEY_NAME = 'original'; module.exports = InstanceValidator; module.exports.InstanceValidator = InstanceValidator; module.exports.default = InstanceValidator; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbnN0YW5jZS12YWxpZGF0b3IuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsInNlcXVlbGl6ZUVycm9yIiwiUHJvbWlzZSIsIkRhdGFUeXBlcyIsIkJlbG9uZ3NUbyIsInZhbGlkYXRvciIsIkluc3RhbmNlVmFsaWRhdG9yIiwibW9kZWxJbnN0YW5jZSIsIm9wdGlvbnMiLCJjbG9uZSIsImZpZWxkcyIsInNraXAiLCJkaWZmZXJlbmNlIiwiT2JqZWN0Iiwia2V5cyIsImNvbnN0cnVjdG9yIiwicmF3QXR0cmlidXRlcyIsImRlZmF1bHRzIiwiaG9va3MiLCJlcnJvcnMiLCJpblByb2dyZXNzIiwiRXJyb3IiLCJhbGwiLCJfcGVyQXR0cmlidXRlVmFsaWRhdG9ycyIsInJlZmxlY3QiLCJfY3VzdG9tVmFsaWRhdG9ycyIsInRoZW4iLCJsZW5ndGgiLCJWYWxpZGF0aW9uRXJyb3IiLCJfdmFsaWRhdGVBbmRSdW5Ib29rcyIsIl92YWxpZGF0ZSIsInJ1bkhvb2tzIiwiYmluZCIsImNhdGNoIiwiZXJyb3IiLCJuZXdFcnJvciIsInJldHVybiIsInZhbGlkYXRvcnMiLCJmb3JJbiIsInJhd0F0dHJpYnV0ZSIsImZpZWxkIiwiaW5jbHVkZXMiLCJ2YWx1ZSIsImRhdGFWYWx1ZXMiLCJTZXF1ZWxpemVNZXRob2QiLCJfYXV0b0dlbmVyYXRlZCIsImF1dG9JbmNyZW1lbnQiLCJfdmFsaWRhdGVTY2hlbWEiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJwdXNoIiwiX3NpbmdsZUF0dHJWYWxpZGF0ZSIsImFsbG93TnVsbCIsImVhY2giLCJfbW9kZWxPcHRpb25zIiwidmFsaWRhdGUiLCJ2YWxpZGF0b3JUeXBlIiwidmFscHJvbSIsIl9pbnZva2VDdXN0b21WYWxpZGF0b3IiLCJ1bmRlZmluZWQiLCJyZXNvbHZlIiwidGVzdCIsIm1zZyIsInZhbGlkYXRvclByb21pc2UiLCJfaW52b2tlQnVpbHRpblZhbGlkYXRvciIsInJlc3VsdHMiLCJfaGFuZGxlUmVmbGVjdGVkUmVzdWx0Iiwib3B0QXR0ckRlZmluZWQiLCJvcHRWYWx1ZSIsIm9wdEZpZWxkIiwidmFsaWRhdG9yRnVuY3Rpb24iLCJpc0FzeW5jIiwidmFsaWRhdG9yQXJpdHkiLCJhc3luY0FyaXR5IiwiZXJyb3JLZXkiLCJpbnZva2VBcmdzIiwicHJvbWlzaWZ5IiwiZSIsIl9wdXNoRXJyb3IiLCJ0cnkiLCJ2YWx1ZVN0cmluZyIsIlN0cmluZyIsInZhbGlkYXRvckFyZ3MiLCJfZXh0cmFjdFZhbGlkYXRvckFyZ3MiLCJhc3NpZ24iLCJ2YWxpZGF0b3JOYW1lIiwiYXJncyIsImlzTG9jYWxpemVkVmFsaWRhdG9yIiwiQXJyYXkiLCJpc0FycmF5Iiwic2xpY2UiLCJhc3NvY2lhdGlvbiIsInZhbHVlcyIsImFzc29jaWF0aW9ucyIsImZpbmQiLCJmb3JlaWduS2V5IiwiZmllbGROYW1lIiwiZ2V0IiwiYXNzb2NpYXRpb25BY2Nlc3NvciIsImVyck1zZyIsIm5hbWUiLCJWYWxpZGF0aW9uRXJyb3JJdGVtIiwidHlwZSIsIlNUUklORyIsIlRFWFQiLCJDSVRFWFQiLCJpc09iamVjdCIsIkJ1ZmZlciIsImlzQnVmZmVyIiwicHJvbWlzZUluc3BlY3Rpb25zIiwicHJvbWlzZUluc3BlY3Rpb24iLCJpc1JlamVjdGVkIiwicmVqZWN0aW9uIiwiaXNCdWlsdEluIiwiaXNCdWlsdGluIiwicmF3RXJyb3IiLCJmbk5hbWUiLCJmbkFyZ3MiLCJtZXNzYWdlIiwiUkFXX0tFWV9OQU1FIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsU0FBRCxDQUFyQjs7QUFDQSxNQUFNRSxjQUFjLEdBQUdGLE9BQU8sQ0FBQyxVQUFELENBQTlCOztBQUNBLE1BQU1HLE9BQU8sR0FBR0gsT0FBTyxDQUFDLFdB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QW1ILE1BQU0sQ0FBQ0MsT0FBUCxDQUFlcEgsaUJBQWYsR0FBbUNBLGlCQUFuQztBQUNBbUgsTUFBTSxDQUFDQyxPQUFQLENBQWVDLE9BQWYsR0FBeUJySCxpQkFBekIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xyXG5jb25zdCBzZXF1ZWxpemVFcnJvciA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XHJcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCcuL3Byb21pc2UnKTtcclxuY29uc3QgRGF0YVR5cGVzID0gcmVxdWlyZSgnLi9kYXRhLXR5cGVzJyk7XHJcbmNvbnN0IEJlbG9uZ3NUbyA9IHJlcXVpcmUoJy4vYXNzb2NpYXRpb25zL2JlbG9uZ3MtdG8nKTtcclxuY29uc3QgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi91dGlscy92YWxpZGF0b3ItZXh0cmFzJykudmFsaWRhdG9yO1xyXG5cclxuLyoqXHJcbiAqIEluc3RhbmNlIFZhbGlkYXRvci5cclxuICpcclxuICogQHBhcmFtIHtJbnN0YW5jZX0gbW9kZWxJbnN0YW5jZSBUaGUgbW9kZWwgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEEgZGljdGlvbmFyeSB3aXRoIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jbGFzcyBJbnN0YW5jZVZhbGlkYXRvciB7XHJcbiAgY29uc3RydWN0b3IobW9kZWxJbnN0YW5jZSwgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IF8uY2xvbmUob3B0aW9ucykgfHwge307XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuZmllbGRzICYmICFvcHRpb25zLnNraXApIHtcclxuICAgICAgb3B0aW9ucy5za2lwID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IucmF3QXR0cmlidXRlcyksIG9wdGlvbnMuZmllbGRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhc3NpZ24gZGVmaW5lZCBhbmQgZGVmYXVsdCBvcHRpb25zXHJcbiAgICB0aGlzLm9wdGlvbnMgPSBfLmRlZmF1bHRzKG9wdGlvbnMsIHtcclxuICAgICAgc2tpcDogW10sXHJcbiAgICAgIGhvb2tzOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm1vZGVsSW5zdGFuY2UgPSBtb2RlbEluc3RhbmNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwb3NlcyBhIHJlZmVyZW5jZSB0byB2YWxpZGF0b3IuanMuIFRoaXMgYWxsb3dzIHlvdSB0byBhZGQgY3VzdG9tIHZhbGlkYXRpb25zIHVzaW5nIGB2YWxpZGF0b3IuZXh0ZW5kYFxyXG4gICAgICogQG5hbWUgdmFsaWRhdG9yXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqICBBbGwgZXJyb3JzIHdpbGwgYmUgc3RvcmVkIGhlcmUgZnJvbSB0aGUgdmFsaWRhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge0FycmF5fSBXaWxsIGNvbnRhaW4ga2V5cyB0aGF0IGNvcnJlc3BvbmQgdG8gYXR0cmlidXRlcyB3aGljaCB3aWxsXHJcbiAgICAgKiAgIGJlIEFycmF5cyBvZiBFcnJvcnMuXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59IEluZGljYXRlcyBpZiB2YWxpZGF0aW9ucyBhcmUgaW4gcHJvZ3Jlc3NcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBWYWxpZGF0aW9uIG1vZHVsZSwgaW52b2tlIHRvIHN0YXJ0IHRoZSBkYW5jZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlKCkge1xyXG4gICAgaWYgKHRoaXMuaW5Qcm9ncmVzcykgdGhyb3cgbmV3IEVycm9yKCdWYWxpZGF0aW9ucyBhbHJlYWR5IGluIHByb2dyZXNzLicpO1xyXG5cclxuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcclxuICAgICAgdGhpcy5fcGVyQXR0cmlidXRlVmFsaWRhdG9ycygpLnJlZmxlY3QoKSxcclxuICAgICAgdGhpcy5fY3VzdG9tVmFsaWRhdG9ycygpLnJlZmxlY3QoKVxyXG4gICAgXSkudGhlbigoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGgpIHtcclxuICAgICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3IuVmFsaWRhdGlvbkVycm9yKG51bGwsIHRoaXMuZXJyb3JzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnZva2UgdGhlIFZhbGlkYXRpb24gc2VxdWVuY2UgYW5kIHJ1biB2YWxpZGF0aW9uIGhvb2tzIGlmIGRlZmluZWRcclxuICAgKiAgIC0gQmVmb3JlIFZhbGlkYXRpb24gTW9kZWwgSG9va3NcclxuICAgKiAgIC0gVmFsaWRhdGlvblxyXG4gICAqICAgLSBPbiB2YWxpZGF0aW9uIHN1Y2Nlc3M6IEFmdGVyIFZhbGlkYXRpb24gTW9kZWwgSG9va3NcclxuICAgKiAgIC0gT24gdmFsaWRhdGlvbiBmYWlsdXJlOiBWYWxpZGF0aW9uIEZhaWxlZCBNb2RlbCBIb29rc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaG9va3MgPyB0aGlzLl92YWxpZGF0ZUFuZFJ1bkhvb2tzKCkgOiB0aGlzLl92YWxpZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW52b2tlIHRoZSBWYWxpZGF0aW9uIHNlcXVlbmNlIGFuZCBydW4gaG9va3NcclxuICAgKiAgIC0gQmVmb3JlIFZhbGlkYXRpb24gTW9kZWwgSG9va3NcclxuICAgKiAgIC0gVmFsaWRhdGlvblxyXG4gICAqICAgLSBPbiB2YWxpZGF0aW9uIHN1Y2Nlc3M6IEFmdGVyIFZhbGlkYXRpb24gTW9kZWwgSG9va3NcclxuICAgKiAgIC0gT24gdmFsaWRhdGlvbiBmYWlsdXJlOiBWYWxpZGF0aW9uIEZhaWxlZCBNb2RlbCBIb29rc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfdmFsaWRhdGVBbmRSdW5Ib29rcygpIHtcclxuICAgIGNvbnN0IHJ1bkhvb2tzID0gdGhpcy5tb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yLnJ1bkhvb2tzLmJpbmQodGhpcy5tb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yKTtcclxuICAgIHJldHVybiBydW5Ib29rcygnYmVmb3JlVmFsaWRhdGUnLCB0aGlzLm1vZGVsSW5zdGFuY2UsIHRoaXMub3B0aW9ucylcclxuICAgICAgLnRoZW4oKCkgPT5cclxuICAgICAgICB0aGlzLl92YWxpZGF0ZSgpXHJcbiAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gcnVuSG9va3MoJ3ZhbGlkYXRpb25GYWlsZWQnLCB0aGlzLm1vZGVsSW5zdGFuY2UsIHRoaXMub3B0aW9ucywgZXJyb3IpXHJcbiAgICAgICAgICAgIC50aGVuKG5ld0Vycm9yID0+IHsgdGhyb3cgbmV3RXJyb3IgfHwgZXJyb3I7IH0pKVxyXG4gICAgICApXHJcbiAgICAgIC50aGVuKCgpID0+IHJ1bkhvb2tzKCdhZnRlclZhbGlkYXRlJywgdGhpcy5tb2RlbEluc3RhbmNlLCB0aGlzLm9wdGlvbnMpKVxyXG4gICAgICAucmV0dXJuKHRoaXMubW9kZWxJbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaWxsIHJ1biBhbGwgdGhlIHZhbGlkYXRvcnMgZGVmaW5lZCBwZXIgYXR0cmlidXRlIChidWlsdC1pbiB2YWxpZGF0b3JzIGFuZCBjdXN0b20gdmFsaWRhdG9ycylcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5LjxQcm9taXNlLlByb21pc2VJbnNwZWN0aW9uPj59IEEgcHJvbWlzZSBmcm9tIC5yZWZsZWN0KCkuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfcGVyQXR0cmlidXRlVmFsaWRhdG9ycygpIHtcclxuICAgIC8vIHByb21pc2lmeSBhbGwgYXR0cmlidXRlIGludm9jYXRpb25zXHJcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XHJcblxyXG4gICAgXy5mb3JJbih0aGlzLm1vZGVsSW5zdGFuY2UucmF3QXR0cmlidXRlcywgKHJhd0F0dHJpYnV0ZSwgZmllbGQpID0+IHtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5za2lwLmluY2x1ZGVzKGZpZWxkKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm1vZGVsSW5zdGFuY2UuZGF0YVZhbHVlc1tmaWVsZF07XHJcblxyXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghcmF3QXR0cmlidXRlLl9hdXRvR2VuZXJhdGVkICYmICFyYXdBdHRyaWJ1dGUuYXV0b0luY3JlbWVudCkge1xyXG4gICAgICAgIC8vIHBlcmZvcm0gdmFsaWRhdGlvbnMgYmFzZWQgb24gc2NoZW1hXHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVTY2hlbWEocmF3QXR0cmlidXRlLCBmaWVsZCwgdmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMubW9kZWxJbnN0YW5jZS52YWxpZGF0b3JzLCBmaWVsZCkpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5fc2luZ2xlQXR0clZhbGlkYXRlKHZhbHVlLCBmaWVsZCwgcmF3QXR0cmlidXRlLmFsbG93TnVsbCkucmVmbGVjdCgpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHZhbGlkYXRvcnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2lsbCBydW4gYWxsIHRoZSBjdXN0b20gdmFsaWRhdG9ycyBkZWZpbmVkIGluIHRoZSBtb2RlbCdzIG9wdGlvbnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheS48UHJvbWlzZS5Qcm9taXNlSW5zcGVjdGlvbj4+fSBBIHByb21pc2UgZnJvbSAucmVmbGVjdCgpLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX2N1c3RvbVZhbGlkYXRvcnMoKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XHJcbiAgICBfLmVhY2godGhpcy5tb2RlbEluc3RhbmNlLl9tb2RlbE9wdGlvbnMudmFsaWRhdGUsICh2YWxpZGF0b3IsIHZhbGlkYXRvclR5cGUpID0+IHtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5za2lwLmluY2x1ZGVzKHZhbGlkYXRvclR5cGUpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB2YWxwcm9tID0gdGhpcy5faW52b2tlQ3VzdG9tVmFsaWRhdG9yKHZhbGlkYXRvciwgdmFsaWRhdG9yVHlwZSlcclxuICAgICAgICAvLyBlcnJvcnMgYXJlIGhhbmRsZWQgaW4gc2V0dGxpbmcsIHN0dWIgdGhpc1xyXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7fSlcclxuICAgICAgICAucmVmbGVjdCgpO1xyXG5cclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKHZhbHByb20pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHZhbGlkYXRvcnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGUgYSBzaW5nbGUgYXR0cmlidXRlIHdpdGggYWxsIHRoZSBkZWZpbmVkIGJ1aWx0LWluIHZhbGlkYXRvcnMgYW5kIGN1c3RvbSB2YWxpZGF0b3JzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55dGhpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIFRoZSBmaWVsZCBuYW1lLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWxsb3dOdWxsIFdoZXRoZXIgb3Igbm90IHRoZSBzY2hlbWEgYWxsb3dzIG51bGwgdmFsdWVzXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gQSBwcm9taXNlLCB3aWxsIGFsd2F5cyByZXNvbHZlLCBhdXRvIHBvcHVsYXRlcyBlcnJvciBvbiB0aGlzLmVycm9yIGxvY2FsIG9iamVjdC5cclxuICAgKi9cclxuICBfc2luZ2xlQXR0clZhbGlkYXRlKHZhbHVlLCBmaWVsZCwgYWxsb3dOdWxsKSB7XHJcbiAgICAvLyBJZiB2YWx1ZSBpcyBudWxsIGFuZCBhbGxvd051bGwgaXMgZmFsc2UsIG5vIHZhbGlkYXRvcnMgc2hvdWxkIHJ1biAoc2VlICM5MTQzKVxyXG4gICAgaWYgKCh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSAmJiAhYWxsb3dOdWxsKSB7XHJcbiAgICAgIC8vIFRoZSBzY2hlbWEgdmFsaWRhdG9yIChfdmFsaWRhdGVTY2hlbWEpIGhhcyBhbHJlYWR5IGdlbmVyYXRlZCB0aGUgdmFsaWRhdGlvbiBlcnJvci4gTm90aGluZyB0byBkbyBoZXJlLlxyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUHJvbWlzaWZ5IGVhY2ggdmFsaWRhdG9yXHJcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XHJcbiAgICBfLmZvckluKHRoaXMubW9kZWxJbnN0YW5jZS52YWxpZGF0b3JzW2ZpZWxkXSwgKHRlc3QsIHZhbGlkYXRvclR5cGUpID0+IHtcclxuXHJcbiAgICAgIGlmICh2YWxpZGF0b3JUeXBlID09PSAnaXNVcmwnIHx8IHZhbGlkYXRvclR5cGUgPT09ICdpc1VSTCcgfHwgdmFsaWRhdG9yVHlwZSA9PT0gJ2lzRW1haWwnKSB7XHJcbiAgICAgICAgLy8gUHJlc2VydmUgYmFja3dhcmRzIGNvbXBhdC4gVmFsaWRhdG9yLmpzIG5vdyBleHBlY3RzIHRoZSBzZWNvbmQgcGFyYW0gdG8gaXNVUkwgYW5kIGlzRW1haWwgdG8gYmUgYW4gb2JqZWN0XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnb2JqZWN0JyAmJiB0ZXN0ICE9PSBudWxsICYmIHRlc3QubXNnKSB7XHJcbiAgICAgICAgICB0ZXN0ID0ge1xyXG4gICAgICAgICAgICBtc2c6IHRlc3QubXNnXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGVzdCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGVzdCA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ3VzdG9tIHZhbGlkYXRvcnMgc2hvdWxkIGFsd2F5cyBydW4sIGV4Y2VwdCBpZiB2YWx1ZSBpcyBudWxsIGFuZCBhbGxvd051bGwgaXMgZmFsc2UgKHNlZSAjOTE0MylcclxuICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMuX2ludm9rZUN1c3RvbVZhbGlkYXRvcih0ZXN0LCB2YWxpZGF0b3JUeXBlLCB0cnVlLCB2YWx1ZSwgZmllbGQpLnJlZmxlY3QoKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiB2YWx1ZSBpcyBudWxsLCBidWlsdC1pbiB2YWxpZGF0b3JzIHNob3VsZCBub3QgcnVuIChvbmx5IGN1c3RvbSB2YWxpZGF0b3JzIGhhdmUgdG8gcnVuKSAoc2VlICM5MTM0KS5cclxuICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHZhbGlkYXRvclByb21pc2UgPSB0aGlzLl9pbnZva2VCdWlsdGluVmFsaWRhdG9yKHZhbHVlLCB0ZXN0LCB2YWxpZGF0b3JUeXBlLCBmaWVsZCk7XHJcbiAgICAgIC8vIGVycm9ycyBhcmUgaGFuZGxlZCBpbiBzZXR0bGluZywgc3R1YiB0aGlzXHJcbiAgICAgIHZhbGlkYXRvclByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2godmFsaWRhdG9yUHJvbWlzZS5yZWZsZWN0KCkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2VcclxuICAgICAgLmFsbCh2YWxpZGF0b3JzKVxyXG4gICAgICAudGhlbihyZXN1bHRzID0+IHRoaXMuX2hhbmRsZVJlZmxlY3RlZFJlc3VsdChmaWVsZCwgdmFsdWUsIHJlc3VsdHMpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXBhcmUgYW5kIGludm9rZSBhIGN1c3RvbSB2YWxpZGF0b3IuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gdmFsaWRhdG9yIFRoZSBjdXN0b20gdmFsaWRhdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxpZGF0b3JUeXBlIHRoZSBjdXN0b20gdmFsaWRhdG9yIHR5cGUgKG5hbWUpLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0QXR0ckRlZmluZWQgU2V0IHRvIHRydWUgaWYgY3VzdG9tIHZhbGlkYXRvciB3YXMgZGVmaW5lZCBmcm9tIHRoZSBhdHRyaWJ1dGVcclxuICAgKiBAcGFyYW0geyp9IG9wdFZhbHVlIHZhbHVlIGZvciBhdHRyaWJ1dGVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0RmllbGQgZmllbGQgZm9yIGF0dHJpYnV0ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IEEgcHJvbWlzZS5cclxuICAgKi9cclxuICBfaW52b2tlQ3VzdG9tVmFsaWRhdG9yKHZhbGlkYXRvciwgdmFsaWRhdG9yVHlwZSwgb3B0QXR0ckRlZmluZWQsIG9wdFZhbHVlLCBvcHRGaWVsZCkge1xyXG4gICAgbGV0IHZhbGlkYXRvckZ1bmN0aW9uID0gbnVsbDsgLy8gdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gdG8gY2FsbFxyXG4gICAgbGV0IGlzQXN5bmMgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCB2YWxpZGF0b3JBcml0eSA9IHZhbGlkYXRvci5sZW5ndGg7XHJcbiAgICAvLyBjaGVjayBpZiB2YWxpZGF0b3IgaXMgYXN5bmMgYW5kIHJlcXVpcmVzIGEgY2FsbGJhY2tcclxuICAgIGxldCBhc3luY0FyaXR5ID0gMTtcclxuICAgIGxldCBlcnJvcktleSA9IHZhbGlkYXRvclR5cGU7XHJcbiAgICBsZXQgaW52b2tlQXJncztcclxuICAgIGlmIChvcHRBdHRyRGVmaW5lZCkge1xyXG4gICAgICBhc3luY0FyaXR5ID0gMjtcclxuICAgICAgaW52b2tlQXJncyA9IG9wdFZhbHVlO1xyXG4gICAgICBlcnJvcktleSA9IG9wdEZpZWxkO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbGlkYXRvckFyaXR5ID09PSBhc3luY0FyaXR5KSB7XHJcbiAgICAgIGlzQXN5bmMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0FzeW5jKSB7XHJcbiAgICAgIGlmIChvcHRBdHRyRGVmaW5lZCkge1xyXG4gICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uID0gUHJvbWlzZS5wcm9taXNpZnkodmFsaWRhdG9yLmJpbmQodGhpcy5tb2RlbEluc3RhbmNlLCBpbnZva2VBcmdzKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb24gPSBQcm9taXNlLnByb21pc2lmeSh2YWxpZGF0b3IuYmluZCh0aGlzLm1vZGVsSW5zdGFuY2UpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdmFsaWRhdG9yRnVuY3Rpb24oKVxyXG4gICAgICAgIC5jYXRjaChlID0+IHRoaXMuX3B1c2hFcnJvcihmYWxzZSwgZXJyb3JLZXksIGUsIG9wdFZhbHVlLCB2YWxpZGF0b3JUeXBlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZVxyXG4gICAgICAudHJ5KCgpID0+IHZhbGlkYXRvci5jYWxsKHRoaXMubW9kZWxJbnN0YW5jZSwgaW52b2tlQXJncykpXHJcbiAgICAgIC5jYXRjaChlID0+IHRoaXMuX3B1c2hFcnJvcihmYWxzZSwgZXJyb3JLZXksIGUsIG9wdFZhbHVlLCB2YWxpZGF0b3JUeXBlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmVwYXJlIGFuZCBpbnZva2UgYSBidWlsZC1pbiB2YWxpZGF0b3IuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBBbnl0aGluZy5cclxuICAgKiBAcGFyYW0geyp9IHRlc3QgVGhlIHRlc3QgY2FzZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsaWRhdG9yVHlwZSBPbmUgb2Yga25vd24gdG8gU2VxdWVsaXplIHZhbGlkYXRvcnMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIFRoZSBmaWVsZCB0aGF0IGlzIGJlaW5nIHZhbGlkYXRlZFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IHdpdGggc3BlY2lmaWMga2V5cyB0byBpbnZva2UgdGhlIHZhbGlkYXRvci5cclxuICAgKi9cclxuICBfaW52b2tlQnVpbHRpblZhbGlkYXRvcih2YWx1ZSwgdGVzdCwgdmFsaWRhdG9yVHlwZSwgZmllbGQpIHtcclxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XHJcbiAgICAgIC8vIENhc3QgdmFsdWUgYXMgc3RyaW5nIHRvIHBhc3MgbmV3IFZhbGlkYXRvci5qcyBzdHJpbmcgcmVxdWlyZW1lbnRcclxuICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSBTdHJpbmcodmFsdWUpO1xyXG4gICAgICAvLyBjaGVjayBpZiBWYWxpZGF0b3Iga25vd3MgdGhhdCBraW5kIG9mIHZhbGlkYXRpb24gdGVzdFxyXG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRvclt2YWxpZGF0b3JUeXBlXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWxpZGF0b3IgZnVuY3Rpb246ICR7dmFsaWRhdG9yVHlwZX1gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdmFsaWRhdG9yQXJncyA9IHRoaXMuX2V4dHJhY3RWYWxpZGF0b3JBcmdzKHRlc3QsIHZhbGlkYXRvclR5cGUsIGZpZWxkKTtcclxuXHJcbiAgICAgIGlmICghdmFsaWRhdG9yW3ZhbGlkYXRvclR5cGVdKHZhbHVlU3RyaW5nLCAuLi52YWxpZGF0b3JBcmdzKSkge1xyXG4gICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHRlc3QubXNnIHx8IGBWYWxpZGF0aW9uICR7dmFsaWRhdG9yVHlwZX0gb24gJHtmaWVsZH0gZmFpbGVkYCksIHsgdmFsaWRhdG9yTmFtZTogdmFsaWRhdG9yVHlwZSwgdmFsaWRhdG9yQXJncyB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaWxsIGV4dHJhY3QgYXJndW1lbnRzIGZvciB0aGUgdmFsaWRhdG9yLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsqfSB0ZXN0IFRoZSB0ZXN0IGNhc2UuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbGlkYXRvclR5cGUgT25lIG9mIGtub3duIHRvIFNlcXVlbGl6ZSB2YWxpZGF0b3JzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCBUaGUgZmllbGQgdGhhdCBpcyBiZWluZyB2YWxpZGF0ZWQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9leHRyYWN0VmFsaWRhdG9yQXJncyh0ZXN0LCB2YWxpZGF0b3JUeXBlLCBmaWVsZCkge1xyXG4gICAgbGV0IHZhbGlkYXRvckFyZ3MgPSB0ZXN0LmFyZ3MgfHwgdGVzdDtcclxuICAgIGNvbnN0IGlzTG9jYWxpemVkVmFsaWRhdG9yID0gdHlwZW9mIHZhbGlkYXRvckFyZ3MgIT09ICdzdHJpbmcnICYmICh2YWxpZGF0b3JUeXBlID09PSAnaXNBbHBoYScgfHwgdmFsaWRhdG9yVHlwZSA9PT0gJ2lzQWxwaGFudW1lcmljJyB8fCB2YWxpZGF0b3JUeXBlID09PSAnaXNNb2JpbGVQaG9uZScpO1xyXG5cclxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JBcmdzKSkge1xyXG4gICAgICBpZiAodmFsaWRhdG9yVHlwZSA9PT0gJ2lzSW1tdXRhYmxlJykge1xyXG4gICAgICAgIHZhbGlkYXRvckFyZ3MgPSBbdmFsaWRhdG9yQXJncywgZmllbGQsIHRoaXMubW9kZWxJbnN0YW5jZV07XHJcbiAgICAgIH0gZWxzZSBpZiAoaXNMb2NhbGl6ZWRWYWxpZGF0b3IgfHwgdmFsaWRhdG9yVHlwZSA9PT0gJ2lzSVAnKSB7XHJcbiAgICAgICAgdmFsaWRhdG9yQXJncyA9IFtdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbGlkYXRvckFyZ3MgPSBbdmFsaWRhdG9yQXJnc107XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhbGlkYXRvckFyZ3MgPSB2YWxpZGF0b3JBcmdzLnNsaWNlKDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbGlkYXRvckFyZ3M7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaWxsIHZhbGlkYXRlIGEgc2luZ2xlIGZpZWxkIGFnYWluc3QgaXRzIHNjaGVtYSBkZWZpbml0aW9uIChpc251bGwpLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHJhd0F0dHJpYnV0ZSBBcyBkZWZpbmVkIGluIHRoZSBTY2hlbWEuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIFRoZSBmaWVsZCBuYW1lLlxyXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgYW55dGhpbmcuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZVNjaGVtYShyYXdBdHRyaWJ1dGUsIGZpZWxkLCB2YWx1ZSkge1xyXG4gICAgaWYgKHJhd0F0dHJpYnV0ZS5hbGxvd051bGwgPT09IGZhbHNlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICBjb25zdCBhc3NvY2lhdGlvbiA9IF8udmFsdWVzKHRoaXMubW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3Rvci5hc3NvY2lhdGlvbnMpLmZpbmQoYXNzb2NpYXRpb24gPT4gYXNzb2NpYXRpb24gaW5zdGFuY2VvZiBCZWxvbmdzVG8gJiYgYXNzb2NpYXRpb24uZm9yZWlnbktleSA9PT0gcmF3QXR0cmlidXRlLmZpZWxkTmFtZSk7XHJcbiAgICAgIGlmICghYXNzb2NpYXRpb24gfHwgIXRoaXMubW9kZWxJbnN0YW5jZS5nZXQoYXNzb2NpYXRpb24uYXNzb2NpYXRpb25BY2Nlc3NvcikpIHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5tb2RlbEluc3RhbmNlLnZhbGlkYXRvcnNbZmllbGRdO1xyXG4gICAgICAgIGNvbnN0IGVyck1zZyA9IF8uZ2V0KHZhbGlkYXRvcnMsICdub3ROdWxsLm1zZycsIGAke3RoaXMubW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3Rvci5uYW1lfS4ke2ZpZWxkfSBjYW5ub3QgYmUgbnVsbGApO1xyXG5cclxuICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBzZXF1ZWxpemVFcnJvci5WYWxpZGF0aW9uRXJyb3JJdGVtKFxyXG4gICAgICAgICAgZXJyTXNnLFxyXG4gICAgICAgICAgJ25vdE51bGwgVmlvbGF0aW9uJywgLy8gc2VxdWVsaXplRXJyb3IuVmFsaWRhdGlvbkVycm9ySXRlbS5PcmlnaW5zLkNPUkUsXHJcbiAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgdGhpcy5tb2RlbEluc3RhbmNlLFxyXG4gICAgICAgICAgJ2lzX251bGwnXHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocmF3QXR0cmlidXRlLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuU1RSSU5HIHx8IHJhd0F0dHJpYnV0ZS50eXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLlRFWFQgfHwgcmF3QXR0cmlidXRlLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuQ0lURVhUKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBfLmlzT2JqZWN0KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSAmJiAhQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IHNlcXVlbGl6ZUVycm9yLlZhbGlkYXRpb25FcnJvckl0ZW0oXHJcbiAgICAgICAgICBgJHtmaWVsZH0gY2Fubm90IGJlIGFuIGFycmF5IG9yIGFuIG9iamVjdGAsXHJcbiAgICAgICAgICAnc3RyaW5nIHZpb2xhdGlvbicsIC8vIHNlcXVlbGl6ZUVycm9yLlZhbGlkYXRpb25FcnJvckl0ZW0uT3JpZ2lucy5DT1JFLFxyXG4gICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgIHRoaXMubW9kZWxJbnN0YW5jZSxcclxuICAgICAgICAgICdub3RfYV9zdHJpbmcnXHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSByZXR1cm5lZCByZXN1bHQgb2YgYSBQcm9taXNlLnJlZmxlY3QuXHJcbiAgICpcclxuICAgKiBJZiBlcnJvcnMgYXJlIGZvdW5kIGl0IHBvcHVsYXRlcyB0aGlzLmVycm9yLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIFRoZSBhdHRyaWJ1dGUgbmFtZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHZhbHVlIFRoZSBkYXRhIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8UHJvbWlzZS5Qcm9taXNlSW5zcGVjdGlvbj59IHByb21pc2VJbnNwZWN0aW9ucyBvYmplY3RzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfaGFuZGxlUmVmbGVjdGVkUmVzdWx0KGZpZWxkLCB2YWx1ZSwgcHJvbWlzZUluc3BlY3Rpb25zKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb21pc2VJbnNwZWN0aW9uIG9mIHByb21pc2VJbnNwZWN0aW9ucykge1xyXG4gICAgICBpZiAocHJvbWlzZUluc3BlY3Rpb24uaXNSZWplY3RlZCgpKSB7XHJcbiAgICAgICAgY29uc3QgcmVqZWN0aW9uID0gcHJvbWlzZUluc3BlY3Rpb24uZXJyb3IoKTtcclxuICAgICAgICBjb25zdCBpc0J1aWx0SW4gPSAhIXJlamVjdGlvbi52YWxpZGF0b3JOYW1lO1xyXG5cclxuICAgICAgICB0aGlzLl9wdXNoRXJyb3IoaXNCdWlsdEluLCBmaWVsZCwgcmVqZWN0aW9uLCB2YWx1ZSwgcmVqZWN0aW9uLnZhbGlkYXRvck5hbWUsIHJlamVjdGlvbi52YWxpZGF0b3JBcmdzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2lnbnMgYWxsIGVycm9ycyByZXRhaW5pbmcgdGhlIG9yaWdpbmFsLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICBpc0J1aWx0aW4gICAtIERldGVybWluZXMgaWYgZXJyb3IgaXMgZnJvbSBidWlsdGluIHZhbGlkYXRvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgIGVycm9yS2V5ICAgIC0gbmFtZSBvZiBpbnZhbGlkIGF0dHJpYnV0ZS5cclxuICAgKiBAcGFyYW0ge0Vycm9yfHN0cmluZ30gIHJhd0Vycm9yICAgIC0gVGhlIG9yaWdpbmFsIGVycm9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdmFsdWUgICAgICAgLSBUaGUgZGF0YSB0aGF0IHRyaWdnZXJlZCB0aGUgZXJyb3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBmbk5hbWUgICAgICAtIE5hbWUgb2YgdGhlIHZhbGlkYXRvciwgaWYgYW55XHJcbiAgICogQHBhcmFtIHtBcnJheX0gICAgICAgICBmbkFyZ3MgICAgICAtIEFyZ3VtZW50cyBmb3IgdGhlIHZhbGlkYXRvciBbZnVuY3Rpb25dLCBpZiBhbnlcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3B1c2hFcnJvcihpc0J1aWx0aW4sIGVycm9yS2V5LCByYXdFcnJvciwgdmFsdWUsIGZuTmFtZSwgZm5BcmdzKSB7XHJcbiAgICBjb25zdCBtZXNzYWdlID0gcmF3RXJyb3IubWVzc2FnZSB8fCByYXdFcnJvciB8fCAnVmFsaWRhdGlvbiBlcnJvcic7XHJcbiAgICBjb25zdCBlcnJvciA9IG5ldyBzZXF1ZWxpemVFcnJvci5WYWxpZGF0aW9uRXJyb3JJdGVtKFxyXG4gICAgICBtZXNzYWdlLFxyXG4gICAgICAnVmFsaWRhdGlvbiBlcnJvcicsIC8vIHNlcXVlbGl6ZUVycm9yLlZhbGlkYXRpb25FcnJvckl0ZW0uT3JpZ2lucy5GVU5DVElPTixcclxuICAgICAgZXJyb3JLZXksXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgICB0aGlzLm1vZGVsSW5zdGFuY2UsXHJcbiAgICAgIGZuTmFtZSxcclxuICAgICAgaXNCdWlsdGluID8gZm5OYW1lIDogdW5kZWZpbmVkLFxyXG4gICAgICBpc0J1aWx0aW4gPyBmbkFyZ3MgOiB1bmRlZmluZWRcclxuICAgICk7XHJcblxyXG4gICAgZXJyb3JbSW5zdGFuY2VWYWxpZGF0b3IuUkFXX0tFWV9OQU1FXSA9IHJhd0Vycm9yO1xyXG5cclxuICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogQGRlZmluZSB7c3RyaW5nfSBUaGUgZXJyb3Iga2V5IGZvciBhcmd1bWVudHMgYXMgcGFzc2VkIGJ5IGN1c3RvbSB2YWxpZGF0b3JzXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5JbnN0YW5jZVZhbGlkYXRvci5SQVdfS0VZX05BTUUgPSAnb3JpZ2luYWwnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnN0YW5jZVZhbGlkYXRvcjtcclxubW9kdWxlLmV4cG9ydHMuSW5zdGFuY2VWYWxpZGF0b3IgPSBJbnN0YW5jZVZhbGlkYXRvcjtcclxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEluc3RhbmNlVmFsaWRhdG9yO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbnN0YW5jZS12YWxpZGF0b3IuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsInNlcXVlbGl6ZUVycm9yIiwiUHJvbWlzZSIsIkRhdGFUeXBlcyIsIkJlbG9uZ3NUbyIsInZhbGlkYXRvciIsIkluc3RhbmNlVmFsaWRhdG9yIiwibW9kZWxJbnN0YW5jZSIsIm9wdGlvbnMiLCJjbG9uZSIsImZpZWxkcyIsInNraXAiLCJkaWZmZXJlbmNlIiwiT2JqZWN0Iiwia2V5cyIsImNvbnN0cnVjdG9yIiwicmF3QXR0cmlidXRlcyIsImRlZmF1bHRzIiwiaG9va3MiLCJlcnJvcnMiLCJpblByb2dyZXNzIiwiRXJyb3IiLCJhbGwiLCJfcGVyQXR0cmlidXRlVmFsaWRhdG9ycyIsInJlZmxlY3QiLCJfY3VzdG9tVmFsaWRhdG9ycyIsInRoZW4iLCJsZW5ndGgiLCJWYWxpZGF0aW9uRXJyb3IiLCJfdmFsaWRhdGVBbmRSdW5Ib29rcyIsIl92YWxpZGF0ZSIsInJ1bkhvb2tzIiwiYmluZCIsImNhdGNoIiwiZXJyb3IiLCJuZXdFcnJvciIsInJldHVybiIsInZhbGlkYXRvcnMiLCJmb3JJbiIsInJhd0F0dHJpYnV0ZSIsImZpZWxkIiwiaW5jbHVkZXMiLCJ2YWx1ZSIsImRhdGFWYWx1ZXMiLCJTZXF1ZWxpemVNZXRob2QiLCJfYXV0b0dlbmVyYXRlZCIsImF1dG9JbmNyZW1lbnQiLCJfdmFsaWRhdGVTY2hlbWEiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJwdXNoIiwiX3NpbmdsZUF0dHJWYWxpZGF0ZSIsImFsbG93TnVsbCIsImVhY2giLCJfbW9kZWxPcHRpb25zIiwidmFsaWRhdGUiLCJ2YWxpZGF0b3JUeXBlIiwidmFscHJvbSIsIl9pbnZva2VDdXN0b21WYWxpZGF0b3IiLCJ1bmRlZmluZWQiLCJyZXNvbHZlIiwidGVzdCIsIm1zZyIsInZhbGlkYXRvclByb21pc2UiLCJfaW52b2tlQnVpbHRpblZhbGlkYXRvciIsInJlc3VsdHMiLCJfaGFuZGxlUmVmbGVjdGVkUmVzdWx0Iiwib3B0QXR0ckRlZmluZWQiLCJvcHRWYWx1ZSIsIm9wdEZpZWxkIiwidmFsaWRhdG9yRnVuY3Rpb24iLCJpc0FzeW5jIiwidmFsaWRhdG9yQXJpdHkiLCJhc3luY0FyaXR5IiwiZXJyb3JLZXkiLCJpbnZva2VBcmdzIiwicHJvbWlzaWZ5IiwiZSIsIl9wdXNoRXJyb3IiLCJ0cnkiLCJ2YWx1ZVN0cmluZyIsIlN0cmluZyIsInZhbGlkYXRvckFyZ3MiLCJfZXh0cmFjdFZhbGlkYXRvckFyZ3MiLCJhc3NpZ24iLCJ2YWxpZGF0b3JOYW1lIiwiYXJncyIsImlzTG9jYWxpemVkVmFsaWRhdG9yIiwiQXJyYXkiLCJpc0FycmF5Iiwic2xpY2UiLCJhc3NvY2lhdGlvbiIsInZhbHVlcyIsImFzc29jaWF0aW9ucyIsImZpbmQiLCJmb3JlaWduS2V5IiwiZmllbGROYW1lIiwiZ2V0IiwiYXNzb2NpYXRpb25BY2Nlc3NvciIsImVyck1zZyIsIm5hbWUiLCJWYWxpZGF0aW9uRXJyb3JJdGVtIiwidHlwZSIsIlNUUklORyIsIlRFWFQiLCJDSVRFWFQiLCJpc09iamVjdCIsIkJ1ZmZlciIsImlzQnVmZmVyIiwicHJvbWlzZUluc3BlY3Rpb25zIiwicHJvbWlzZUluc3BlY3Rpb24iLCJpc1JlamVjdGVkIiwicmVqZWN0aW9uIiwiaXNCdWlsdEluIiwiaXNCdWlsdGluIiwicmF3RXJyb3IiLCJmbk5hbWUiLCJmbkFyZ3MiLCJtZXNzYWdlIiwiUkFXX0tFWV9OQU1FIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsU0FBRCxDQUFyQjs7QUFDQSxNQUFNRSxjQUFjLEdBQUdGLE9BQU8sQ0FBQyxVQUFELENBQTlCOztBQUNBLE1BQU1HLE9BQU8sR0FBR0gsT0FBTyxDQUFDLFdB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QVFDLE0sRUFBUTtBQUMvRCxZQUFNQyxPQUFPLEdBQUdILFFBQVEsQ0FBQ0csT0FBVCxJQUFvQkgsUUFBcEIsSUFBZ0Msa0JBQWhEO0FBQ0EsWUFBTWxGLEtBQUssR0FBRyxJQUFJakMsY0FBYyxDQUFDcUcsbUJBQW5CLENBQ1ppQixPQURZLEVBRVosa0JBRlksRUFFUTtBQUNwQjVDLE1BQUFBLFFBSFksRUFJWmpDLEtBSlksRUFLWixLQUFLbkMsYUFMTyxFQU1aOEcsTUFOWSxFQU9aRixTQUFTLEdBQUdFLE1BQUgsR0FBWXpELFNBUFQsRUFRWnVELFNBQVMsR0FBR0csTUFBSCxHQUFZMUQsU0FSVCxDQUFkO0FBV0ExQixNQUFBQSxLQUFLLENBQUM1QixpQkFBaUIsQ0FBQ2tILFlBQW5CLENBQUwsR0FBd0NKLFFBQXhDO0FBRUEsV0FBS2pHLE1BQUwsQ0FBWWdDLElBQVosQ0FBaUJqQixLQUFqQjtBQUNEOzs7OztBQUVIO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTVCLGlCQUFpQixDQUFDa0gsWUFBbEIsR0FBaUMsVUFBakM7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCcEgsaUJBQWpCO0FBQ0FtSCxNQUFNLENBQUNDLE9BQVAsQ0FBZXBILGlCQUFmLEdBQW1DQSxpQkFBbkM7QUFDQW1ILE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCckgsaUJBQXpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbmNvbnN0IHNlcXVlbGl6ZUVycm9yID0gcmVxdWlyZSgnLi9lcnJvcnMnKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCcuL3Byb21pc2UnKTtcbmNvbnN0IERhdGFUeXBlcyA9IHJlcXVpcmUoJy4vZGF0YS10eXBlcycpO1xuY29uc3QgQmVsb25nc1RvID0gcmVxdWlyZSgnLi9hc3NvY2lhdGlvbnMvYmVsb25ncy10bycpO1xuY29uc3QgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi91dGlscy92YWxpZGF0b3ItZXh0cmFzJykudmFsaWRhdG9yO1xuXG4vKipcbiAqIEluc3RhbmNlIFZhbGlkYXRvci5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbmNlfSBtb2RlbEluc3RhbmNlIFRoZSBtb2RlbCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEEgZGljdGlvbmFyeSB3aXRoIG9wdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgSW5zdGFuY2VWYWxpZGF0b3Ige1xuICBjb25zdHJ1Y3Rvcihtb2RlbEluc3RhbmNlLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IF8uY2xvbmUob3B0aW9ucykgfHwge307XG5cbiAgICBpZiAob3B0aW9ucy5maWVsZHMgJiYgIW9wdGlvbnMuc2tpcCkge1xuICAgICAgb3B0aW9ucy5za2lwID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IucmF3QXR0cmlidXRlcyksIG9wdGlvbnMuZmllbGRzKTtcbiAgICB9XG5cbiAgICAvLyBhc3NpZ24gZGVmaW5lZCBhbmQgZGVmYXVsdCBvcHRpb25zXG4gICAgdGhpcy5vcHRpb25zID0gXy5kZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgICBza2lwOiBbXSxcbiAgICAgIGhvb2tzOiB0cnVlXG4gICAgfSk7XG5cbiAgICB0aGlzLm1vZGVsSW5zdGFuY2UgPSBtb2RlbEluc3RhbmNlO1xuXG4gICAgLyoqXG4gICAgICogRXhwb3NlcyBhIHJlZmVyZW5jZSB0byB2YWxpZGF0b3IuanMuIFRoaXMgYWxsb3dzIHlvdSB0byBhZGQgY3VzdG9tIHZhbGlkYXRpb25zIHVzaW5nIGB2YWxpZGF0b3IuZXh0ZW5kYFxuICAgICAqIEBuYW1lIHZhbGlkYXRvclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52YWxpZGF0b3IgPSB2YWxpZGF0b3I7XG5cbiAgICAvKipcbiAgICAgKiAgQWxsIGVycm9ycyB3aWxsIGJlIHN0b3JlZCBoZXJlIGZyb20gdGhlIHZhbGlkYXRpb25zLlxuICAgICAqXG4gICAgICogQHR5cGUge0FycmF5fSBXaWxsIGNvbnRhaW4ga2V5cyB0aGF0IGNvcnJlc3BvbmQgdG8gYXR0cmlidXRlcyB3aGljaCB3aWxsXG4gICAgICogICBiZSBBcnJheXMgb2YgRXJyb3JzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufSBJbmRpY2F0ZXMgaWYgdmFsaWRhdGlvbnMgYXJlIGluIHByb2dyZXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIFZhbGlkYXRpb24gbW9kdWxlLCBpbnZva2UgdG8gc3RhcnQgdGhlIGRhbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF92YWxpZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5pblByb2dyZXNzKSB0aHJvdyBuZXcgRXJyb3IoJ1ZhbGlkYXRpb25zIGFscmVhZHkgaW4gcHJvZ3Jlc3MuJyk7XG5cbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuX3BlckF0dHJpYnV0ZVZhbGlkYXRvcnMoKS5yZWZsZWN0KCksXG4gICAgICB0aGlzLl9jdXN0b21WYWxpZGF0b3JzKCkucmVmbGVjdCgpXG4gICAgXSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvci5WYWxpZGF0aW9uRXJyb3IobnVsbCwgdGhpcy5lcnJvcnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGUgVmFsaWRhdGlvbiBzZXF1ZW5jZSBhbmQgcnVuIHZhbGlkYXRpb24gaG9va3MgaWYgZGVmaW5lZFxuICAgKiAgIC0gQmVmb3JlIFZhbGlkYXRpb24gTW9kZWwgSG9va3NcbiAgICogICAtIFZhbGlkYXRpb25cbiAgICogICAtIE9uIHZhbGlkYXRpb24gc3VjY2VzczogQWZ0ZXIgVmFsaWRhdGlvbiBNb2RlbCBIb29rc1xuICAgKiAgIC0gT24gdmFsaWRhdGlvbiBmYWlsdXJlOiBWYWxpZGF0aW9uIEZhaWxlZCBNb2RlbCBIb29rc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaG9va3MgPyB0aGlzLl92YWxpZGF0ZUFuZFJ1bkhvb2tzKCkgOiB0aGlzLl92YWxpZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGUgVmFsaWRhdGlvbiBzZXF1ZW5jZSBhbmQgcnVuIGhvb2tzXG4gICAqICAgLSBCZWZvcmUgVmFsaWRhdGlvbiBNb2RlbCBIb29rc1xuICAgKiAgIC0gVmFsaWRhdGlvblxuICAgKiAgIC0gT24gdmFsaWRhdGlvbiBzdWNjZXNzOiBBZnRlciBWYWxpZGF0aW9uIE1vZGVsIEhvb2tzXG4gICAqICAgLSBPbiB2YWxpZGF0aW9uIGZhaWx1cmU6IFZhbGlkYXRpb24gRmFpbGVkIE1vZGVsIEhvb2tzXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ZhbGlkYXRlQW5kUnVuSG9va3MoKSB7XG4gICAgY29uc3QgcnVuSG9va3MgPSB0aGlzLm1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IucnVuSG9va3MuYmluZCh0aGlzLm1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IpO1xuICAgIHJldHVybiBydW5Ib29rcygnYmVmb3JlVmFsaWRhdGUnLCB0aGlzLm1vZGVsSW5zdGFuY2UsIHRoaXMub3B0aW9ucylcbiAgICAgIC50aGVuKCgpID0+XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlKClcbiAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gcnVuSG9va3MoJ3ZhbGlkYXRpb25GYWlsZWQnLCB0aGlzLm1vZGVsSW5zdGFuY2UsIHRoaXMub3B0aW9ucywgZXJyb3IpXG4gICAgICAgICAgICAudGhlbihuZXdFcnJvciA9PiB7IHRocm93IG5ld0Vycm9yIHx8IGVycm9yOyB9KSlcbiAgICAgIClcbiAgICAgIC50aGVuKCgpID0+IHJ1bkhvb2tzKCdhZnRlclZhbGlkYXRlJywgdGhpcy5tb2RlbEluc3RhbmNlLCB0aGlzLm9wdGlvbnMpKVxuICAgICAgLnJldHVybih0aGlzLm1vZGVsSW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpbGwgcnVuIGFsbCB0aGUgdmFsaWRhdG9ycyBkZWZpbmVkIHBlciBhdHRyaWJ1dGUgKGJ1aWx0LWluIHZhbGlkYXRvcnMgYW5kIGN1c3RvbSB2YWxpZGF0b3JzKVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheS48UHJvbWlzZS5Qcm9taXNlSW5zcGVjdGlvbj4+fSBBIHByb21pc2UgZnJvbSAucmVmbGVjdCgpLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BlckF0dHJpYnV0ZVZhbGlkYXRvcnMoKSB7XG4gICAgLy8gcHJvbWlzaWZ5IGFsbCBhdHRyaWJ1dGUgaW52b2NhdGlvbnNcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XG5cbiAgICBfLmZvckluKHRoaXMubW9kZWxJbnN0YW5jZS5yYXdBdHRyaWJ1dGVzLCAocmF3QXR0cmlidXRlLCBmaWVsZCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5za2lwLmluY2x1ZGVzKGZpZWxkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5tb2RlbEluc3RhbmNlLmRhdGFWYWx1ZXNbZmllbGRdO1xuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJhd0F0dHJpYnV0ZS5fYXV0b0dlbmVyYXRlZCAmJiAhcmF3QXR0cmlidXRlLmF1dG9JbmNyZW1lbnQpIHtcbiAgICAgICAgLy8gcGVyZm9ybSB2YWxpZGF0aW9ucyBiYXNlZCBvbiBzY2hlbWFcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVTY2hlbWEocmF3QXR0cmlidXRlLCBmaWVsZCwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMubW9kZWxJbnN0YW5jZS52YWxpZGF0b3JzLCBmaWVsZCkpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMuX3NpbmdsZUF0dHJWYWxpZGF0ZSh2YWx1ZSwgZmllbGQsIHJhd0F0dHJpYnV0ZS5hbGxvd051bGwpLnJlZmxlY3QoKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodmFsaWRhdG9ycyk7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCBydW4gYWxsIHRoZSBjdXN0b20gdmFsaWRhdG9ycyBkZWZpbmVkIGluIHRoZSBtb2RlbCdzIG9wdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5LjxQcm9taXNlLlByb21pc2VJbnNwZWN0aW9uPj59IEEgcHJvbWlzZSBmcm9tIC5yZWZsZWN0KCkuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3VzdG9tVmFsaWRhdG9ycygpIHtcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XG4gICAgXy5lYWNoKHRoaXMubW9kZWxJbnN0YW5jZS5fbW9kZWxPcHRpb25zLnZhbGlkYXRlLCAodmFsaWRhdG9yLCB2YWxpZGF0b3JUeXBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNraXAuaW5jbHVkZXModmFsaWRhdG9yVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWxwcm9tID0gdGhpcy5faW52b2tlQ3VzdG9tVmFsaWRhdG9yKHZhbGlkYXRvciwgdmFsaWRhdG9yVHlwZSlcbiAgICAgICAgLy8gZXJyb3JzIGFyZSBoYW5kbGVkIGluIHNldHRsaW5nLCBzdHViIHRoaXNcbiAgICAgICAgLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAucmVmbGVjdCgpO1xuXG4gICAgICB2YWxpZGF0b3JzLnB1c2godmFscHJvbSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodmFsaWRhdG9ycyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYSBzaW5nbGUgYXR0cmlidXRlIHdpdGggYWxsIHRoZSBkZWZpbmVkIGJ1aWx0LWluIHZhbGlkYXRvcnMgYW5kIGN1c3RvbSB2YWxpZGF0b3JzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIEFueXRoaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgVGhlIGZpZWxkIG5hbWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWxsb3dOdWxsIFdoZXRoZXIgb3Igbm90IHRoZSBzY2hlbWEgYWxsb3dzIG51bGwgdmFsdWVzXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBBIHByb21pc2UsIHdpbGwgYWx3YXlzIHJlc29sdmUsIGF1dG8gcG9wdWxhdGVzIGVycm9yIG9uIHRoaXMuZXJyb3IgbG9jYWwgb2JqZWN0LlxuICAgKi9cbiAgX3NpbmdsZUF0dHJWYWxpZGF0ZSh2YWx1ZSwgZmllbGQsIGFsbG93TnVsbCkge1xuICAgIC8vIElmIHZhbHVlIGlzIG51bGwgYW5kIGFsbG93TnVsbCBpcyBmYWxzZSwgbm8gdmFsaWRhdG9ycyBzaG91bGQgcnVuIChzZWUgIzkxNDMpXG4gICAgaWYgKCh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSAmJiAhYWxsb3dOdWxsKSB7XG4gICAgICAvLyBUaGUgc2NoZW1hIHZhbGlkYXRvciAoX3ZhbGlkYXRlU2NoZW1hKSBoYXMgYWxyZWFkeSBnZW5lcmF0ZWQgdGhlIHZhbGlkYXRpb24gZXJyb3IuIE5vdGhpbmcgdG8gZG8gaGVyZS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICAvLyBQcm9taXNpZnkgZWFjaCB2YWxpZGF0b3JcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XG4gICAgXy5mb3JJbih0aGlzLm1vZGVsSW5zdGFuY2UudmFsaWRhdG9yc1tmaWVsZF0sICh0ZXN0LCB2YWxpZGF0b3JUeXBlKSA9PiB7XG5cbiAgICAgIGlmICh2YWxpZGF0b3JUeXBlID09PSAnaXNVcmwnIHx8IHZhbGlkYXRvclR5cGUgPT09ICdpc1VSTCcgfHwgdmFsaWRhdG9yVHlwZSA9PT0gJ2lzRW1haWwnKSB7XG4gICAgICAgIC8vIFByZXNlcnZlIGJhY2t3YXJkcyBjb21wYXQuIFZhbGlkYXRvci5qcyBub3cgZXhwZWN0cyB0aGUgc2Vjb25kIHBhcmFtIHRvIGlzVVJMIGFuZCBpc0VtYWlsIHRvIGJlIGFuIG9iamVjdFxuICAgICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICdvYmplY3QnICYmIHRlc3QgIT09IG51bGwgJiYgdGVzdC5tc2cpIHtcbiAgICAgICAgICB0ZXN0ID0ge1xuICAgICAgICAgICAgbXNnOiB0ZXN0Lm1zZ1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAodGVzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRlc3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDdXN0b20gdmFsaWRhdG9ycyBzaG91bGQgYWx3YXlzIHJ1biwgZXhjZXB0IGlmIHZhbHVlIGlzIG51bGwgYW5kIGFsbG93TnVsbCBpcyBmYWxzZSAoc2VlICM5MTQzKVxuICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLl9pbnZva2VDdXN0b21WYWxpZGF0b3IodGVzdCwgdmFsaWRhdG9yVHlwZSwgdHJ1ZSwgdmFsdWUsIGZpZWxkKS5yZWZsZWN0KCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHZhbHVlIGlzIG51bGwsIGJ1aWx0LWluIHZhbGlkYXRvcnMgc2hvdWxkIG5vdCBydW4gKG9ubHkgY3VzdG9tIHZhbGlkYXRvcnMgaGF2ZSB0byBydW4pIChzZWUgIzkxMzQpLlxuICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWxpZGF0b3JQcm9taXNlID0gdGhpcy5faW52b2tlQnVpbHRpblZhbGlkYXRvcih2YWx1ZSwgdGVzdCwgdmFsaWRhdG9yVHlwZSwgZmllbGQpO1xuICAgICAgLy8gZXJyb3JzIGFyZSBoYW5kbGVkIGluIHNldHRsaW5nLCBzdHViIHRoaXNcbiAgICAgIHZhbGlkYXRvclByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKHZhbGlkYXRvclByb21pc2UucmVmbGVjdCgpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBQcm9taXNlXG4gICAgICAuYWxsKHZhbGlkYXRvcnMpXG4gICAgICAudGhlbihyZXN1bHRzID0+IHRoaXMuX2hhbmRsZVJlZmxlY3RlZFJlc3VsdChmaWVsZCwgdmFsdWUsIHJlc3VsdHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGFuZCBpbnZva2UgYSBjdXN0b20gdmFsaWRhdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB2YWxpZGF0b3IgVGhlIGN1c3RvbSB2YWxpZGF0b3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxpZGF0b3JUeXBlIHRoZSBjdXN0b20gdmFsaWRhdG9yIHR5cGUgKG5hbWUpLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdEF0dHJEZWZpbmVkIFNldCB0byB0cnVlIGlmIGN1c3RvbSB2YWxpZGF0b3Igd2FzIGRlZmluZWQgZnJvbSB0aGUgYXR0cmlidXRlXG4gICAqIEBwYXJhbSB7Kn0gb3B0VmFsdWUgdmFsdWUgZm9yIGF0dHJpYnV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0RmllbGQgZmllbGQgZm9yIGF0dHJpYnV0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gQSBwcm9taXNlLlxuICAgKi9cbiAgX2ludm9rZUN1c3RvbVZhbGlkYXRvcih2YWxpZGF0b3IsIHZhbGlkYXRvclR5cGUsIG9wdEF0dHJEZWZpbmVkLCBvcHRWYWx1ZSwgb3B0RmllbGQpIHtcbiAgICBsZXQgdmFsaWRhdG9yRnVuY3Rpb24gPSBudWxsOyAvLyB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiB0byBjYWxsXG4gICAgbGV0IGlzQXN5bmMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHZhbGlkYXRvckFyaXR5ID0gdmFsaWRhdG9yLmxlbmd0aDtcbiAgICAvLyBjaGVjayBpZiB2YWxpZGF0b3IgaXMgYXN5bmMgYW5kIHJlcXVpcmVzIGEgY2FsbGJhY2tcbiAgICBsZXQgYXN5bmNBcml0eSA9IDE7XG4gICAgbGV0IGVycm9yS2V5ID0gdmFsaWRhdG9yVHlwZTtcbiAgICBsZXQgaW52b2tlQXJncztcbiAgICBpZiAob3B0QXR0ckRlZmluZWQpIHtcbiAgICAgIGFzeW5jQXJpdHkgPSAyO1xuICAgICAgaW52b2tlQXJncyA9IG9wdFZhbHVlO1xuICAgICAgZXJyb3JLZXkgPSBvcHRGaWVsZDtcbiAgICB9XG4gICAgaWYgKHZhbGlkYXRvckFyaXR5ID09PSBhc3luY0FyaXR5KSB7XG4gICAgICBpc0FzeW5jID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNBc3luYykge1xuICAgICAgaWYgKG9wdEF0dHJEZWZpbmVkKSB7XG4gICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uID0gUHJvbWlzZS5wcm9taXNpZnkodmFsaWRhdG9yLmJpbmQodGhpcy5tb2RlbEluc3RhbmNlLCBpbnZva2VBcmdzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbiA9IFByb21pc2UucHJvbWlzaWZ5KHZhbGlkYXRvci5iaW5kKHRoaXMubW9kZWxJbnN0YW5jZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRvckZ1bmN0aW9uKClcbiAgICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fcHVzaEVycm9yKGZhbHNlLCBlcnJvcktleSwgZSwgb3B0VmFsdWUsIHZhbGlkYXRvclR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2VcbiAgICAgIC50cnkoKCkgPT4gdmFsaWRhdG9yLmNhbGwodGhpcy5tb2RlbEluc3RhbmNlLCBpbnZva2VBcmdzKSlcbiAgICAgIC5jYXRjaChlID0+IHRoaXMuX3B1c2hFcnJvcihmYWxzZSwgZXJyb3JLZXksIGUsIG9wdFZhbHVlLCB2YWxpZGF0b3JUeXBlKSk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBhbmQgaW52b2tlIGEgYnVpbGQtaW4gdmFsaWRhdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIEFueXRoaW5nLlxuICAgKiBAcGFyYW0geyp9IHRlc3QgVGhlIHRlc3QgY2FzZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbGlkYXRvclR5cGUgT25lIG9mIGtub3duIHRvIFNlcXVlbGl6ZSB2YWxpZGF0b3JzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgVGhlIGZpZWxkIHRoYXQgaXMgYmVpbmcgdmFsaWRhdGVkXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCB3aXRoIHNwZWNpZmljIGtleXMgdG8gaW52b2tlIHRoZSB2YWxpZGF0b3IuXG4gICAqL1xuICBfaW52b2tlQnVpbHRpblZhbGlkYXRvcih2YWx1ZSwgdGVzdCwgdmFsaWRhdG9yVHlwZSwgZmllbGQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xuICAgICAgLy8gQ2FzdCB2YWx1ZSBhcyBzdHJpbmcgdG8gcGFzcyBuZXcgVmFsaWRhdG9yLmpzIHN0cmluZyByZXF1aXJlbWVudFxuICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSBTdHJpbmcodmFsdWUpO1xuICAgICAgLy8gY2hlY2sgaWYgVmFsaWRhdG9yIGtub3dzIHRoYXQga2luZCBvZiB2YWxpZGF0aW9uIHRlc3RcbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yW3ZhbGlkYXRvclR5cGVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWxpZGF0b3IgZnVuY3Rpb246ICR7dmFsaWRhdG9yVHlwZX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdG9yQXJncyA9IHRoaXMuX2V4dHJhY3RWYWxpZGF0b3JBcmdzKHRlc3QsIHZhbGlkYXRvclR5cGUsIGZpZWxkKTtcblxuICAgICAgaWYgKCF2YWxpZGF0b3JbdmFsaWRhdG9yVHlwZV0odmFsdWVTdHJpbmcsIC4uLnZhbGlkYXRvckFyZ3MpKSB7XG4gICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHRlc3QubXNnIHx8IGBWYWxpZGF0aW9uICR7dmFsaWRhdG9yVHlwZX0gb24gJHtmaWVsZH0gZmFpbGVkYCksIHsgdmFsaWRhdG9yTmFtZTogdmFsaWRhdG9yVHlwZSwgdmFsaWRhdG9yQXJncyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIGV4dHJhY3QgYXJndW1lbnRzIGZvciB0aGUgdmFsaWRhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHRlc3QgVGhlIHRlc3QgY2FzZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbGlkYXRvclR5cGUgT25lIG9mIGtub3duIHRvIFNlcXVlbGl6ZSB2YWxpZGF0b3JzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgVGhlIGZpZWxkIHRoYXQgaXMgYmVpbmcgdmFsaWRhdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V4dHJhY3RWYWxpZGF0b3JBcmdzKHRlc3QsIHZhbGlkYXRvclR5cGUsIGZpZWxkKSB7XG4gICAgbGV0IHZhbGlkYXRvckFyZ3MgPSB0ZXN0LmFyZ3MgfHwgdGVzdDtcbiAgICBjb25zdCBpc0xvY2FsaXplZFZhbGlkYXRvciA9IHR5cGVvZiB2YWxpZGF0b3JBcmdzICE9PSAnc3RyaW5nJyAmJiAodmFsaWRhdG9yVHlwZSA9PT0gJ2lzQWxwaGEnIHx8IHZhbGlkYXRvclR5cGUgPT09ICdpc0FscGhhbnVtZXJpYycgfHwgdmFsaWRhdG9yVHlwZSA9PT0gJ2lzTW9iaWxlUGhvbmUnKTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JBcmdzKSkge1xuICAgICAgaWYgKHZhbGlkYXRvclR5cGUgPT09ICdpc0ltbXV0YWJsZScpIHtcbiAgICAgICAgdmFsaWRhdG9yQXJncyA9IFt2YWxpZGF0b3JBcmdzLCBmaWVsZCwgdGhpcy5tb2RlbEluc3RhbmNlXTtcbiAgICAgIH0gZWxzZSBpZiAoaXNMb2NhbGl6ZWRWYWxpZGF0b3IgfHwgdmFsaWRhdG9yVHlwZSA9PT0gJ2lzSVAnKSB7XG4gICAgICAgIHZhbGlkYXRvckFyZ3MgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvckFyZ3MgPSBbdmFsaWRhdG9yQXJnc107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRvckFyZ3MgPSB2YWxpZGF0b3JBcmdzLnNsaWNlKDApO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdG9yQXJncztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHZhbGlkYXRlIGEgc2luZ2xlIGZpZWxkIGFnYWluc3QgaXRzIHNjaGVtYSBkZWZpbml0aW9uIChpc251bGwpLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmF3QXR0cmlidXRlIEFzIGRlZmluZWQgaW4gdGhlIFNjaGVtYS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIFRoZSBmaWVsZCBuYW1lLlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIGFueXRoaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ZhbGlkYXRlU2NoZW1hKHJhd0F0dHJpYnV0ZSwgZmllbGQsIHZhbHVlKSB7XG4gICAgaWYgKHJhd0F0dHJpYnV0ZS5hbGxvd051bGwgPT09IGZhbHNlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgY29uc3QgYXNzb2NpYXRpb24gPSBfLnZhbHVlcyh0aGlzLm1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IuYXNzb2NpYXRpb25zKS5maW5kKGFzc29jaWF0aW9uID0+IGFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvICYmIGFzc29jaWF0aW9uLmZvcmVpZ25LZXkgPT09IHJhd0F0dHJpYnV0ZS5maWVsZE5hbWUpO1xuICAgICAgaWYgKCFhc3NvY2lhdGlvbiB8fCAhdGhpcy5tb2RlbEluc3RhbmNlLmdldChhc3NvY2lhdGlvbi5hc3NvY2lhdGlvbkFjY2Vzc29yKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5tb2RlbEluc3RhbmNlLnZhbGlkYXRvcnNbZmllbGRdO1xuICAgICAgICBjb25zdCBlcnJNc2cgPSBfLmdldCh2YWxpZGF0b3JzLCAnbm90TnVsbC5tc2cnLCBgJHt0aGlzLm1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IubmFtZX0uJHtmaWVsZH0gY2Fubm90IGJlIG51bGxgKTtcblxuICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBzZXF1ZWxpemVFcnJvci5WYWxpZGF0aW9uRXJyb3JJdGVtKFxuICAgICAgICAgIGVyck1zZyxcbiAgICAgICAgICAnbm90TnVsbCBWaW9sYXRpb24nLCAvLyBzZXF1ZWxpemVFcnJvci5WYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnMuQ09SRSxcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB0aGlzLm1vZGVsSW5zdGFuY2UsXG4gICAgICAgICAgJ2lzX251bGwnXG4gICAgICAgICkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyYXdBdHRyaWJ1dGUudHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5TVFJJTkcgfHwgcmF3QXR0cmlidXRlLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuVEVYVCB8fCByYXdBdHRyaWJ1dGUudHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5DSVRFWFQpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBfLmlzT2JqZWN0KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSAmJiAhQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBzZXF1ZWxpemVFcnJvci5WYWxpZGF0aW9uRXJyb3JJdGVtKFxuICAgICAgICAgIGAke2ZpZWxkfSBjYW5ub3QgYmUgYW4gYXJyYXkgb3IgYW4gb2JqZWN0YCxcbiAgICAgICAgICAnc3RyaW5nIHZpb2xhdGlvbicsIC8vIHNlcXVlbGl6ZUVycm9yLlZhbGlkYXRpb25FcnJvckl0ZW0uT3JpZ2lucy5DT1JFLFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHRoaXMubW9kZWxJbnN0YW5jZSxcbiAgICAgICAgICAnbm90X2Ffc3RyaW5nJ1xuICAgICAgICApKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSByZXR1cm5lZCByZXN1bHQgb2YgYSBQcm9taXNlLnJlZmxlY3QuXG4gICAqXG4gICAqIElmIGVycm9ycyBhcmUgZm91bmQgaXQgcG9wdWxhdGVzIHRoaXMuZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCBUaGUgYXR0cmlidXRlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdmFsdWUgVGhlIGRhdGEgdmFsdWUuXG4gICAqIEBwYXJhbSB7QXJyYXk8UHJvbWlzZS5Qcm9taXNlSW5zcGVjdGlvbj59IHByb21pc2VJbnNwZWN0aW9ucyBvYmplY3RzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZVJlZmxlY3RlZFJlc3VsdChmaWVsZCwgdmFsdWUsIHByb21pc2VJbnNwZWN0aW9ucykge1xuICAgIGZvciAoY29uc3QgcHJvbWlzZUluc3BlY3Rpb24gb2YgcHJvbWlzZUluc3BlY3Rpb25zKSB7XG4gICAgICBpZiAocHJvbWlzZUluc3BlY3Rpb24uaXNSZWplY3RlZCgpKSB7XG4gICAgICAgIGNvbnN0IHJlamVjdGlvbiA9IHByb21pc2VJbnNwZWN0aW9uLmVycm9yKCk7XG4gICAgICAgIGNvbnN0IGlzQnVpbHRJbiA9ICEhcmVqZWN0aW9uLnZhbGlkYXRvck5hbWU7XG5cbiAgICAgICAgdGhpcy5fcHVzaEVycm9yKGlzQnVpbHRJbiwgZmllbGQsIHJlamVjdGlvbiwgdmFsdWUsIHJlamVjdGlvbi52YWxpZGF0b3JOYW1lLCByZWplY3Rpb24udmFsaWRhdG9yQXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIGFsbCBlcnJvcnMgcmV0YWluaW5nIHRoZSBvcmlnaW5hbC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICBpc0J1aWx0aW4gICAtIERldGVybWluZXMgaWYgZXJyb3IgaXMgZnJvbSBidWlsdGluIHZhbGlkYXRvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBlcnJvcktleSAgICAtIG5hbWUgb2YgaW52YWxpZCBhdHRyaWJ1dGUuXG4gICAqIEBwYXJhbSB7RXJyb3J8c3RyaW5nfSAgcmF3RXJyb3IgICAgLSBUaGUgb3JpZ2luYWwgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdmFsdWUgICAgICAgLSBUaGUgZGF0YSB0aGF0IHRyaWdnZXJlZCB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgZm5OYW1lICAgICAgLSBOYW1lIG9mIHRoZSB2YWxpZGF0b3IsIGlmIGFueVxuICAgKiBAcGFyYW0ge0FycmF5fSAgICAgICAgIGZuQXJncyAgICAgIC0gQXJndW1lbnRzIGZvciB0aGUgdmFsaWRhdG9yIFtmdW5jdGlvbl0sIGlmIGFueVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3B1c2hFcnJvcihpc0J1aWx0aW4sIGVycm9yS2V5LCByYXdFcnJvciwgdmFsdWUsIGZuTmFtZSwgZm5BcmdzKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHJhd0Vycm9yLm1lc3NhZ2UgfHwgcmF3RXJyb3IgfHwgJ1ZhbGlkYXRpb24gZXJyb3InO1xuICAgIGNvbnN0IGVycm9yID0gbmV3IHNlcXVlbGl6ZUVycm9yLlZhbGlkYXRpb25FcnJvckl0ZW0oXG4gICAgICBtZXNzYWdlLFxuICAgICAgJ1ZhbGlkYXRpb24gZXJyb3InLCAvLyBzZXF1ZWxpemVFcnJvci5WYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnMuRlVOQ1RJT04sXG4gICAgICBlcnJvcktleSxcbiAgICAgIHZhbHVlLFxuICAgICAgdGhpcy5tb2RlbEluc3RhbmNlLFxuICAgICAgZm5OYW1lLFxuICAgICAgaXNCdWlsdGluID8gZm5OYW1lIDogdW5kZWZpbmVkLFxuICAgICAgaXNCdWlsdGluID8gZm5BcmdzIDogdW5kZWZpbmVkXG4gICAgKTtcblxuICAgIGVycm9yW0luc3RhbmNlVmFsaWRhdG9yLlJBV19LRVlfTkFNRV0gPSByYXdFcnJvcjtcblxuICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xuICB9XG59XG4vKipcbiAqIEBkZWZpbmUge3N0cmluZ30gVGhlIGVycm9yIGtleSBmb3IgYXJndW1lbnRzIGFzIHBhc3NlZCBieSBjdXN0b20gdmFsaWRhdG9yc1xuICogQHByaXZhdGVcbiAqL1xuSW5zdGFuY2VWYWxpZGF0b3IuUkFXX0tFWV9OQU1FID0gJ29yaWdpbmFsJztcblxubW9kdWxlLmV4cG9ydHMgPSBJbnN0YW5jZVZhbGlkYXRvcjtcbm1vZHVsZS5leHBvcnRzLkluc3RhbmNlVmFsaWRhdG9yID0gSW5zdGFuY2VWYWxpZGF0b3I7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gSW5zdGFuY2VWYWxpZGF0b3I7XG4iXX0= \ No newline at end of file diff --git a/dist/model-manager.js b/dist/model-manager.js index 1f0fcf0..47181ff 100644 --- a/dist/model-manager.js +++ b/dist/model-manager.js @@ -10,9 +10,7 @@ const Toposort = require('toposort-class'); const _ = require('lodash'); -let ModelManager = -/*#__PURE__*/ -function () { +let ModelManager = /*#__PURE__*/function () { function ModelManager(sequelize) { _classCallCheck(this, ModelManager); @@ -114,4 +112,4 @@ function () { module.exports = ModelManager; module.exports.ModelManager = ModelManager; module.exports.default = ModelManager; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbC1tYW5hZ2VyLmpzIl0sIm5hbWVzIjpbIlRvcG9zb3J0IiwicmVxdWlyZSIsIl8iLCJNb2RlbE1hbmFnZXIiLCJzZXF1ZWxpemUiLCJtb2RlbHMiLCJtb2RlbCIsInB1c2giLCJuYW1lIiwibW9kZWxUb1JlbW92ZSIsImZpbHRlciIsImFnYWluc3QiLCJvcHRpb25zIiwiZGVmYXVsdHMiLCJhdHRyaWJ1dGUiLCJmaW5kIiwiaXRlcmF0b3IiLCJzb3J0ZXIiLCJzb3J0ZWQiLCJkZXAiLCJyZXZlcnNlIiwiZGVwcyIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsImlzT2JqZWN0Iiwic2NoZW1hIiwiYXR0ck5hbWUiLCJyYXdBdHRyaWJ1dGVzIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVmZXJlbmNlcyIsImFkZCIsInNvcnQiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUEsTUFBTUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsZ0JBQUQsQ0FBeEI7O0FBQ0EsTUFBTUMsQ0FBQyxHQUFHRCxPQUFPLENBQUMsUUFBRCxDQUFqQjs7SUFFTUUsWTs7O0FBQ0osd0JBQVlDLFNBQVosRUFBdUI7QUFBQTs7QUFDckIsU0FBS0MsTUFBTCxHQUFjLEVBQWQ7QUFDQSxTQUFLRCxTQUFMLEdBQWlCQSxTQUFqQjtBQUNEOzs7OzZCQUVRRSxLLEVBQU87QUFDZCxXQUFLRCxNQUFMLENBQVlFLElBQVosQ0FBaUJELEtBQWpCO0FBQ0EsV0FBS0YsU0FBTCxDQUFlQyxNQUFmLENBQXNCQyxLQUFLLENBQUNFLElBQTVCLElBQW9DRixLQUFwQztBQUVBLGFBQU9BLEtBQVA7QUFDRDs7O2dDQUVXRyxhLEVBQWU7QUFDekIsV0FBS0osTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWUssTUFBWixDQUFtQkosS0FBSyxJQUFJQSxLQUFLLENBQUNFLElBQU4sS0FBZUMs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QyxPQUFQLEdBQWlCakMsWUFBakI7QUFDQWdDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlakMsWUFBZixHQUE4QkEsWUFBOUI7QUFDQWdDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCbEMsWUFBekIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBUb3Bvc29ydCA9IHJlcXVpcmUoJ3RvcG9zb3J0LWNsYXNzJyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbmNsYXNzIE1vZGVsTWFuYWdlciB7XHJcbiAgY29uc3RydWN0b3Ioc2VxdWVsaXplKSB7XHJcbiAgICB0aGlzLm1vZGVscyA9IFtdO1xyXG4gICAgdGhpcy5zZXF1ZWxpemUgPSBzZXF1ZWxpemU7XHJcbiAgfVxyXG5cclxuICBhZGRNb2RlbChtb2RlbCkge1xyXG4gICAgdGhpcy5tb2RlbHMucHVzaChtb2RlbCk7XHJcbiAgICB0aGlzLnNlcXVlbGl6ZS5tb2RlbHNbbW9kZWwubmFtZV0gPSBtb2RlbDtcclxuXHJcbiAgICByZXR1cm4gbW9kZWw7XHJcbiAgfVxyXG5cclxuICByZW1vdmVNb2RlbChtb2RlbFRvUmVtb3ZlKSB7XHJcbiAgICB0aGlzLm1vZGVscyA9IHRoaXMubW9kZWxzLmZpbHRlcihtb2RlbCA9PiBtb2RlbC5uYW1lICE9PSBtb2RlbFRvUmVtb3ZlLm5hbWUpO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLnNlcXVlbGl6ZS5tb2RlbHNbbW9kZWxUb1JlbW92ZS5uYW1lXTtcclxuICB9XHJcblxyXG4gIGdldE1vZGVsKGFnYWluc3QsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBfLmRlZmF1bHRzKG9wdGlvbnMgfHwge30sIHtcclxuICAgICAgYXR0cmlidXRlOiAnbmFtZSdcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLm1vZGVscy5maW5kKG1vZGVsID0+IG1vZGVsW29wdGlvbnMuYXR0cmlidXRlXSA9PT0gYWdhaW5zdCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYWxsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZWxzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXRlcmF0ZSBvdmVyIE1vZGVscyBpbiBhbiBvcmRlciBzdWl0YWJsZSBmb3IgZS5nLiBjcmVhdGluZyB0YWJsZXMuXHJcbiAgICogV2lsbCB0YWtlIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzIGludG8gYWNjb3VudCBzbyB0aGF0IGRlcGVuZGVuY2llcyBhcmUgdmlzaXRlZCBiZWZvcmUgZGVwZW5kZW50cy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yIG1ldGhvZCB0byBleGVjdXRlIG9uIGVhY2ggbW9kZWxcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIGl0ZXJhdG9yIG9wdGlvbnNcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGZvckVhY2hNb2RlbChpdGVyYXRvciwgb3B0aW9ucykge1xyXG4gICAgY29uc3QgbW9kZWxzID0ge307XHJcbiAgICBjb25zdCBzb3J0ZXIgPSBuZXcgVG9wb3NvcnQoKTtcclxuICAgIGxldCBzb3J0ZWQ7XHJcbiAgICBsZXQgZGVwO1xyXG5cclxuICAgIG9wdGlvbnMgPSBfLmRlZmF1bHRzKG9wdGlvbnMgfHwge30sIHtcclxuICAgICAgcmV2ZXJzZTogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiB0aGlzLm1vZGVscykge1xyXG4gICAgICBsZXQgZGVwcyA9IFtdO1xyXG4gICAgICBsZXQgdGFibGVOYW1lID0gbW9kZWwuZ2V0VGFibGVOYW1lKCk7XHJcblxyXG4gICAgICBpZiAoXy5pc09iamVjdCh0YWJsZU5hbWUpKSB7XHJcbiAgICAgICAgdGFibGVOYW1lID0gYCR7dGFibGVOYW1lLnNjaGVtYX0uJHt0YWJsZU5hbWUudGFibGVOYW1lfWA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1vZGVsc1t0YWJsZU5hbWVdID0gbW9kZWw7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGF0dHJOYW1lIGluIG1vZGVsLnJhd0F0dHJpYnV0ZXMpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZGVsLnJhd0F0dHJpYnV0ZXMsIGF0dHJOYW1lKSkge1xyXG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbW9kZWwucmF3QXR0cmlidXRlc1thdHRyTmFtZV07XHJcblxyXG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZS5yZWZlcmVuY2VzKSB7XHJcbiAgICAgICAgICAgIGRlcCA9IGF0dHJpYnV0ZS5yZWZlcmVuY2VzLm1vZGVsO1xyXG5cclxuICAgICAgICAgICAgaWYgKF8uaXNPYmplY3QoZGVwKSkge1xyXG4gICAgICAgICAgICAgIGRlcCA9IGAke2RlcC5zY2hlbWF9LiR7ZGVwLnRhYmxlTmFtZX1gO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkZXBzLnB1c2goZGVwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRlcHMgPSBkZXBzLmZpbHRlcihkZXAgPT4gdGFibGVOYW1lICE9PSBkZXApO1xyXG5cclxuICAgICAgc29ydGVyLmFkZCh0YWJsZU5hbWUsIGRlcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnRlZCA9IHNvcnRlci5zb3J0KCk7XHJcbiAgICBpZiAob3B0aW9ucy5yZXZlcnNlKSB7XHJcbiAgICAgIHNvcnRlZCA9IHNvcnRlZC5yZXZlcnNlKCk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygc29ydGVkKSB7XHJcbiAgICAgIGl0ZXJhdG9yKG1vZGVsc1tuYW1lXSwgbmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1vZGVsTWFuYWdlcjtcclxubW9kdWxlLmV4cG9ydHMuTW9kZWxNYW5hZ2VyID0gTW9kZWxNYW5hZ2VyO1xyXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gTW9kZWxNYW5hZ2VyO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbC1tYW5hZ2VyLmpzIl0sIm5hbWVzIjpbIlRvcG9zb3J0IiwicmVxdWlyZSIsIl8iLCJNb2RlbE1hbmFnZXIiLCJzZXF1ZWxpemUiLCJtb2RlbHMiLCJtb2RlbCIsInB1c2giLCJuYW1lIiwibW9kZWxUb1JlbW92ZSIsImZpbHRlciIsImFnYWluc3QiLCJvcHRpb25zIiwiZGVmYXVsdHMiLCJhdHRyaWJ1dGUiLCJmaW5kIiwiaXRlcmF0b3IiLCJzb3J0ZXIiLCJzb3J0ZWQiLCJkZXAiLCJyZXZlcnNlIiwiZGVwcyIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsImlzT2JqZWN0Iiwic2NoZW1hIiwiYXR0ck5hbWUiLCJyYXdBdHRyaWJ1dGVzIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVmZXJlbmNlcyIsImFkZCIsInNvcnQiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUEsTUFBTUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsZ0JBQUQsQ0FBeEI7O0FBQ0EsTUFBTUMsQ0FBQyxHQUFHRCxPQUFPLENBQUMsUUFBRCxDQUFqQjs7SUFFTUUsWTtBQUNKLHdCQUFZQyxTQUFaLEVBQXVCO0FBQUE7O0FBQ3JCLFNBQUtDLE1BQUwsR0FBYyxFQUFkO0FBQ0EsU0FBS0QsU0FBTCxHQUFpQkEsU0FBakI7QUFDRDs7Ozs2QkFFUUUsSyxFQUFPO0FBQ2QsV0FBS0QsTUFBTCxDQUFZRSxJQUFaLENBQWlCRCxLQUFqQjtBQUNBLFdBQUtGLFNBQUwsQ0FBZUMsTUFBZixDQUFzQkMsS0FBSyxDQUFDRSxJQUE1QixJQUFvQ0YsS0FBcEM7QUFFQSxhQUFPQSxLQUFQO0FBQ0Q7OztnQ0FFV0csYSxFQUFlO0FBQ3pCLFdBQUtKLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVlLLE1BQVosQ0FBbUJKLEtBQUssSUFBSUEsS0FBSyxDQUFDRSxJQUFOLEtBQWVDLGFB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QUNEOzs7Ozs7QUE2REg4QixNQUFNLENBQUNDLE9BQVAsR0FBaUJqQyxZQUFqQjtBQUNBZ0MsTUFBTSxDQUFDQyxPQUFQLENBQWVqQyxZQUFmLEdBQThCQSxZQUE5QjtBQUNBZ0MsTUFBTSxDQUFDQyxPQUFQLENBQWVDLE9BQWYsR0FBeUJsQyxZQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgVG9wb3NvcnQgPSByZXF1aXJlKCd0b3Bvc29ydC1jbGFzcycpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG5jbGFzcyBNb2RlbE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcihzZXF1ZWxpemUpIHtcbiAgICB0aGlzLm1vZGVscyA9IFtdO1xuICAgIHRoaXMuc2VxdWVsaXplID0gc2VxdWVsaXplO1xuICB9XG5cbiAgYWRkTW9kZWwobW9kZWwpIHtcbiAgICB0aGlzLm1vZGVscy5wdXNoKG1vZGVsKTtcbiAgICB0aGlzLnNlcXVlbGl6ZS5tb2RlbHNbbW9kZWwubmFtZV0gPSBtb2RlbDtcblxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIHJlbW92ZU1vZGVsKG1vZGVsVG9SZW1vdmUpIHtcbiAgICB0aGlzLm1vZGVscyA9IHRoaXMubW9kZWxzLmZpbHRlcihtb2RlbCA9PiBtb2RlbC5uYW1lICE9PSBtb2RlbFRvUmVtb3ZlLm5hbWUpO1xuXG4gICAgZGVsZXRlIHRoaXMuc2VxdWVsaXplLm1vZGVsc1ttb2RlbFRvUmVtb3ZlLm5hbWVdO1xuICB9XG5cbiAgZ2V0TW9kZWwoYWdhaW5zdCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBfLmRlZmF1bHRzKG9wdGlvbnMgfHwge30sIHtcbiAgICAgIGF0dHJpYnV0ZTogJ25hbWUnXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5tb2RlbHMuZmluZChtb2RlbCA9PiBtb2RlbFtvcHRpb25zLmF0dHJpYnV0ZV0gPT09IGFnYWluc3QpO1xuICB9XG5cbiAgZ2V0IGFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbHM7XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIE1vZGVscyBpbiBhbiBvcmRlciBzdWl0YWJsZSBmb3IgZS5nLiBjcmVhdGluZyB0YWJsZXMuXG4gICAqIFdpbGwgdGFrZSBmb3JlaWduIGtleSBjb25zdHJhaW50cyBpbnRvIGFjY291bnQgc28gdGhhdCBkZXBlbmRlbmNpZXMgYXJlIHZpc2l0ZWQgYmVmb3JlIGRlcGVuZGVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yIG1ldGhvZCB0byBleGVjdXRlIG9uIGVhY2ggbW9kZWxcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBpdGVyYXRvciBvcHRpb25zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmb3JFYWNoTW9kZWwoaXRlcmF0b3IsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBtb2RlbHMgPSB7fTtcbiAgICBjb25zdCBzb3J0ZXIgPSBuZXcgVG9wb3NvcnQoKTtcbiAgICBsZXQgc29ydGVkO1xuICAgIGxldCBkZXA7XG5cbiAgICBvcHRpb25zID0gXy5kZWZhdWx0cyhvcHRpb25zIHx8IHt9LCB7XG4gICAgICByZXZlcnNlOiB0cnVlXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMubW9kZWxzKSB7XG4gICAgICBsZXQgZGVwcyA9IFtdO1xuICAgICAgbGV0IHRhYmxlTmFtZSA9IG1vZGVsLmdldFRhYmxlTmFtZSgpO1xuXG4gICAgICBpZiAoXy5pc09iamVjdCh0YWJsZU5hbWUpKSB7XG4gICAgICAgIHRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZS5zY2hlbWF9LiR7dGFibGVOYW1lLnRhYmxlTmFtZX1gO1xuICAgICAgfVxuXG4gICAgICBtb2RlbHNbdGFibGVOYW1lXSA9IG1vZGVsO1xuXG4gICAgICBmb3IgKGNvbnN0IGF0dHJOYW1lIGluIG1vZGVsLnJhd0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2RlbC5yYXdBdHRyaWJ1dGVzLCBhdHRyTmFtZSkpIHtcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBtb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJOYW1lXTtcblxuICAgICAgICAgIGlmIChhdHRyaWJ1dGUucmVmZXJlbmNlcykge1xuICAgICAgICAgICAgZGVwID0gYXR0cmlidXRlLnJlZmVyZW5jZXMubW9kZWw7XG5cbiAgICAgICAgICAgIGlmIChfLmlzT2JqZWN0KGRlcCkpIHtcbiAgICAgICAgICAgICAgZGVwID0gYCR7ZGVwLnNjaGVtYX0uJHtkZXAudGFibGVOYW1lfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlcHMucHVzaChkZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkZXBzID0gZGVwcy5maWx0ZXIoZGVwID0+IHRhYmxlTmFtZSAhPT0gZGVwKTtcblxuICAgICAgc29ydGVyLmFkZCh0YWJsZU5hbWUsIGRlcHMpO1xuICAgIH1cblxuICAgIHNvcnRlZCA9IHNvcnRlci5zb3J0KCk7XG4gICAgaWYgKG9wdGlvbnMucmV2ZXJzZSkge1xuICAgICAgc29ydGVkID0gc29ydGVkLnJldmVyc2UoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHNvcnRlZCkge1xuICAgICAgaXRlcmF0b3IobW9kZWxzW25hbWVdLCBuYW1lKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2RlbE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cy5Nb2RlbE1hbmFnZXIgPSBNb2RlbE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gTW9kZWxNYW5hZ2VyO1xuIl19 \ No newline at end of file diff --git a/dist/model.js b/dist/model.js index cdec9f5..22607de 100644 --- a/dist/model.js +++ b/dist/model.js @@ -1,14 +1,18 @@ 'use strict'; +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -82,9 +86,7 @@ const nonCascadingOptions = ['include', 'attributes', 'originalAttributes', 'ord * @mixes Hooks */ -let Model = -/*#__PURE__*/ -function () { +let Model = /*#__PURE__*/function () { _createClass(Model, [{ key: "sequelize", @@ -2541,15 +2543,15 @@ function () { }, { key: "schema", value: function schema(_schema, options) { - const clone = - /*#__PURE__*/ - function (_this) { + const clone = /*#__PURE__*/function (_this) { _inherits(clone, _this); + var _super = _createSuper(clone); + function clone() { _classCallCheck(this, clone); - return _possibleConstructorReturn(this, _getPrototypeOf(clone).apply(this, arguments)); + return _super.apply(this, arguments); } return clone; @@ -2670,15 +2672,15 @@ function () { }, { key: "scope", value: function scope(option) { - const self = - /*#__PURE__*/ - function (_this2) { + const self = /*#__PURE__*/function (_this2) { _inherits(self, _this2); + var _super2 = _createSuper(self); + function self() { _classCallCheck(this, self); - return _possibleConstructorReturn(this, _getPrototypeOf(self).apply(this, arguments)); + return _super2.apply(this, arguments); } return self; @@ -3352,7 +3354,7 @@ function () { } /** * Builds a new model instance and calls save on it. - * @see + * @see * {@link Model.build} * @see * {@link Model.save} @@ -4595,7 +4597,7 @@ function () { * @see * {@link Model#reload} * @since 4.36.0 - * @returns {Promise} returns an array of affected rows and affected count with `options.returning: true`, whenever supported by dialect + * @returns {Promise} returns an array of affected rows and affected count with `options.returning: true`, whenever supported by dialect */ }, { @@ -4711,4 +4713,4 @@ function () { Object.assign(Model, associationsMixin); Hooks.applyTo(Model, true); module.exports = Model; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbC5qcyJdLCJuYW1lcyI6WyJhc3NlcnQiLCJyZXF1aXJlIiwiXyIsIkRvdHRpZSIsIlV0aWxzIiwibG9nZ2VyIiwiQmVsb25nc1RvIiwiQmVsb25nc1RvTWFueSIsIkluc3RhbmNlVmFsaWRhdG9yIiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsIlByb21pc2UiLCJBc3NvY2lhdGlvbiIsIkhhc01hbnkiLCJEYXRhVHlwZXMiLCJIb29rcyIsImFzc29jaWF0aW9uc01peGluIiwiT3AiLCJub0RvdWJsZU5lc3RlZEdyb3VwIiwidmFsaWRRdWVyeUtleXdvcmRzIiwiU2V0Iiwibm9uQ2FzY2FkaW5nT3B0aW9ucyIsIk1vZGVsIiwiY29uc3RydWN0b3IiLCJzZXF1ZWxpemUiLCJnZXRRdWVyeUludGVyZmFjZSIsIlF1ZXJ5SW50ZXJmYWNlIiwiUXVlcnlHZW5lcmF0b3IiLCJ2YWx1ZXMiLCJvcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwiaXNOZXdSZWNvcmQiLCJfc2NoZW1hIiwiX3NjaGVtYURlbGltaXRlciIsImF0dHJpYnV0ZXMiLCJtYXAiLCJhdHRyaWJ1dGUiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlVmFsaWRhdGVkIiwiX2NvbmZvcm1JbmNsdWRlcyIsImluY2x1ZGUiLCJfZXhwYW5kSW5jbHVkZUFsbCIsIl92YWxpZGF0ZUluY2x1ZGVkRWxlbWVudHMiLCJkYXRhVmFsdWVzIiwiX3ByZXZpb3VzRGF0YVZhbHVlcyIsIl9jaGFuZ2VkIiwiX21vZGVsT3B0aW9ucyIsIl9vcHRpb25zIiwiX2luaXRWYWx1ZXMiLCJkZWZhdWx0cyIsImtleSIsImNsb25lIiwiX2hhc0RlZmF1bHRWYWx1ZXMiLCJtYXBWYWx1ZXMiLCJfZGVmYXVsdFZhbHVlcyIsInZhbHVlRm4iLCJ2YWx1ZSIsIlNlcXVlbGl6ZU1ldGhvZCIsImNsb25lRGVlcCIsInByaW1hcnlLZXlBdHRyaWJ1dGVzIiwibGVuZ3RoIiwiZm9yRWFjaCIsInByaW1hcnlLZXlBdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJfdGltZXN0YW1wQXR0cmlidXRlcyIsImNyZWF0ZWRBdCIsInRvRGVmYXVsdFZhbHVlIiwiZGlhbGVjdCIsInVwZGF0ZWRBdCIsImRlbGV0ZWRBdCIsImtleXMiLCJ1bmRlZmluZWQiLCJzZXQiLCJyYXciLCJjaGVja1ZlcnNpb24iLCJ3aGVyZSIsInJlZHVjZSIsInJlc3VsdCIsImdldCIsInNpemUiLCJ3aGVyZUNvbGxlY3Rpb24iLCJ2ZXJzaW9uQXR0ciIsIl92ZXJzaW9uQXR0cmlidXRlIiwibWFwV2hlcmVGaWVsZE5hbWVzIiwibmFtZSIsIm9yaWdpbmFsVmFsdWUiLCJpc1ByaW1pdGl2ZSIsImNoYW5nZWQiLCJfY3VzdG9tR2V0dGVycyIsInBsYWluIiwiaW5jbHVkZU5hbWVzIiwiaW5jbHVkZXMiLCJpbnN0YW5jZSIsIl9oYXNDdXN0b21HZXR0ZXJzIiwiX2tleSIsInJlc2V0IiwiX2hhc0RhdGVBdHRyaWJ1dGVzIiwiX2hhc0Jvb2xlYW5BdHRyaWJ1dGVzIiwic2V0S2V5cyIsImRhdGEiLCJrIiwiX2hhc1ZpcnR1YWxBdHRyaWJ1dGVzIiwiX3ZpcnR1YWxBdHRyaWJ1dGVzIiwiX2N1c3RvbVNldHRlcnMiLCJuZXdWYWx1ZSIsIl9zZXRJbmNsdWRlIiwiX2lzQXR0cmlidXRlIiwiX2pzb25BdHRyaWJ1dGVzIiwiaGFzIiwic3BsaXQiLCJwcmV2aW91c05lc3RlZFZhbHVlIiwiaXNFcXVhbCIsIl9oYXNQcmltYXJ5S2V5cyIsIl9pc1ByaW1hcnlLZXkiLCJfaGFzUmVhZE9ubHlBdHRyaWJ1dGVzIiwiX3JlYWRPbmx5QXR0cmlidXRlcyIsIl9kYXRhVHlwZVNhbml0aXplcnMiLCJfZGF0YVR5cGVDaGFuZ2VzIiwidXBkYXRlcyIsImZpbHRlciIsInBpY2tCeSIsImluY2x1ZGVNYXAiLCJhc3NvY2lhdGlvbiIsImFjY2Vzc29yIiwibW9kZWwiLCJjaGlsZE9wdGlvbnMiLCJvcmlnaW5hbEF0dHJpYnV0ZXMiLCJpc0VtcHR5IiwiaXNTaW5nbGVBc3NvY2lhdGlvbiIsImJ1aWxkIiwiYnVsa0J1aWxkIiwiYXJndW1lbnRzIiwiRXJyb3IiLCJob29rcyIsInZhbGlkYXRlIiwiZmllbGRzIiwicmF3QXR0cmlidXRlcyIsImludGVyc2VjdGlvbiIsImRlZmF1bHRGaWVsZHMiLCJyZXR1cm5pbmciLCJwcmltYXJ5S2V5TmFtZSIsImNyZWF0ZWRBdEF0dHIiLCJob29rIiwid2FzTmV3UmVjb3JkIiwibm93IiwidXBkYXRlZEF0QXR0ciIsInB1c2giLCJzaWxlbnQiLCJyZW1vdmUiLCJ2YWwiLCJkZWZhdWx0VmFsdWUiLCJ1bnNoaWZ0IiwiX2dldERlZmF1bHRUaW1lc3RhbXAiLCJ0cnkiLCJ0aGVuIiwiYmVmb3JlSG9va1ZhbHVlcyIsInBpY2siLCJpZ25vcmVDaGFuZ2VkIiwiZGlmZmVyZW5jZSIsImhvb2tDaGFuZ2VkIiwiYWZ0ZXJIb29rVmFsdWVzIiwid2l0aG91dCIsInJ1bkhvb2tzIiwidW5pcSIsImNvbmNhdCIsInNraXAiLCJhcyIsInJlc29sdmUiLCJpbmNsdWRlT3B0aW9ucyIsIm9taXQiLCJ0cmFuc2FjdGlvbiIsImxvZ2dpbmciLCJwYXJlbnRSZWNvcmQiLCJzYXZlIiwiYWNjZXNzb3JzIiwicmVhbEZpZWxkcyIsImZpZWxkIiwidmVyc2lvbkZpZWxkTmFtZSIsIm1hcFZhbHVlRmllbGROYW1lcyIsInF1ZXJ5IiwiYXJncyIsImdldFRhYmxlTmFtZSIsInBhcnNlSW50Iiwicm93c1VwZGF0ZWQiLCJPcHRpbWlzdGljTG9ja0Vycm9yIiwibW9kZWxOYW1lIiwiYXR0ciIsInRhcCIsInBhcmVudCIsImluc3RhbmNlcyIsImZvcmVpZ25LZXkiLCJvdGhlcktleSIsInRocm91Z2giLCJzY29wZSIsIl9hdXRvR2VuZXJhdGVkIiwidGhyb3VnaE1vZGVsIiwiY3JlYXRlIiwic291cmNlS2V5IiwiZmluZE9uZSIsInJlbG9hZCIsIkluc3RhbmNlRXJyb3IiLCJvbWl0QnkiLCJjaGFuZ2VkQmVmb3JlIiwic2V0T3B0aW9ucyIsInNpZGVFZmZlY3RzIiwidW5pb24iLCJmb3JjZSIsImF0dHJpYnV0ZU5hbWUiLCJjdXJyZW50VmFsdWUiLCJnZXREYXRhVmFsdWUiLCJ1bmRlZmluZWRPck51bGwiLCJzZXREYXRhVmFsdWUiLCJEYXRlIiwiZGVsZXRlIiwidHlwZSIsIkRFTEVURSIsImxpbWl0IiwiZGVsZXRlZEF0QXR0cmlidXRlIiwiaXNTZXQiLCJkZWxldGVkQXRDb2wiLCJkZWxldGVkQXREZWZhdWx0VmFsdWUiLCJvbWl0TnVsbCIsImlkZW50aWZpZXIiLCJpbmNyZW1lbnQiLCJyZXR1cm4iLCJieSIsIm90aGVyIiwiZXZlcnkiLCJvdGhlcnMiLCJzb21lIiwiZXF1YWxzIiwidmFsaWRhdG9ycyIsIl9wYXJhbm9pZENsYXVzZSIsImdyb3VwZWRMaW1pdCIsInRpbWVzdGFtcHMiLCJwYXJhbm9pZCIsImRlbGV0ZWRBdE9iamVjdCIsImVxIiwiaXNXaGVyZUVtcHR5IiwiYW5kIiwidGFpbCIsImhlYWQiLCJ0YWJsZU5hbWUiLCJpZCIsIklOVEVHRVIiLCJhbGxvd051bGwiLCJwcmltYXJ5S2V5IiwiYXV0b0luY3JlbWVudCIsIkRBVEUiLCJleGlzdGluZ0F0dHJpYnV0ZXMiLCJlYWNoIiwicHJpbWFyeUtleXMiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwiZGVmaW5pdGlvbiIsInNlbGYiLCJfY29uZm9ybUluY2x1ZGUiLCJhc3NvY2lhdGlvbnMiLCJfcHNldWRvIiwiX3RyYW5zZm9ybVN0cmluZ0Fzc29jaWF0aW9uIiwidGFyZ2V0Iiwic291cmNlIiwiaXNQbGFpbk9iamVjdCIsImFsbCIsInZhbGlkVHlwZXMiLCJIYXNPbmUiLCJPbmUiLCJIYXMiLCJNYW55IiwiaSIsInR5cGVzIiwiRWFnZXJMb2FkaW5nRXJyb3IiLCJzcGxpY2UiLCJqIiwibmVzdGVkIiwidXNlZCIsImFkZEFsbEluY2x1ZGVzIiwiYXNzb2NpYXRpb25UeXBlIiwicHJlZGljYXRlIiwidGhpc0luY2x1ZGUiLCJwb3AiLCJ0YWJsZU5hbWVzIiwiaGFzU2luZ2xlQXNzb2NpYXRpb24iLCJoYXNNdWx0aUFzc29jaWF0aW9uIiwidG9wTW9kZWwiLCJ0b3BMaW1pdCIsIl92YWxpZGF0ZUluY2x1ZGVkRWxlbWVudCIsImR1cGxpY2F0aW5nIiwiaXNNdWx0aUFzc29jaWF0aW9uIiwiaGFzRHVwbGljYXRpbmciLCJoYXNSZXF1aXJlZCIsInJlcXVpcmVkIiwiaGFzV2hlcmUiLCJoYXNQYXJlbnRXaGVyZSIsImhhc1BhcmVudFJlcXVpcmVkIiwic3ViUXVlcnkiLCJzdWJRdWVyeUZpbHRlciIsImhhc0luY2x1ZGVXaGVyZSIsImhhc0luY2x1ZGVSZXF1aXJlZCIsIl9leHBhbmRBdHRyaWJ1dGVzIiwiX2luamVjdERlcGVuZGVudFZpcnR1YWxBdHRyaWJ1dGVzIiwibWFwRmluZGVyT3B0aW9ucyIsImluY2x1ZGVBdHRyIiwidGFibGVBdHRyaWJ1dGVzIiwiX2dldEluY2x1ZGVkQXNzb2NpYXRpb24iLCJzY29wZWQiLCJfaW5qZWN0U2NvcGUiLCJzZXBhcmF0ZSIsImZsYXR0ZW5EZXB0aCIsInRhcmdldE1vZGVsIiwidGFyZ2V0QWxpYXMiLCJnZXRBc3NvY2lhdGlvbnMiLCJnZXRBc3NvY2lhdGlvbkZvckFsaWFzIiwiZXhpc3RpbmdBbGlhc2VzIiwiam9pbiIsImluZGV4IiwiX2V4cGFuZEluY2x1ZGVBbGxFbGVtZW50IiwicGFyc2VyIiwidG9Mb3dlckNhc2UiLCJ1bmlxdWUiLCJncm91cEJ5IiwiX2Fzc2lnbk9wdGlvbnMiLCJhc3NpZ25XaXRoIiwiX3VuaXFJbmNsdWRlcyIsIm9ialZhbHVlIiwic3JjVmFsdWUiLCJfYmFzZU1lcmdlIiwiX21lcmdlRnVuY3Rpb24iLCJvcHRzIiwiZ2xvYmFsT3B0aW9ucyIsIm1lcmdlIiwiZGVmaW5lIiwicGx1cmFsIiwicGx1cmFsaXplIiwic2luZ3VsYXIiLCJzaW5ndWxhcml6ZSIsImluZGV4ZXMiLCJzY2hlbWEiLCJkZWZpbmVQcm9wZXJ0eSIsImZyZWV6ZVRhYmxlTmFtZSIsInVuZGVyc2NvcmVkIiwicmVqZWN0T25FbXB0eSIsInNjaGVtYURlbGltaXRlciIsImRlZmF1bHRTY29wZSIsInNjb3BlcyIsImlzRGVmaW5lZCIsIm1vZGVsTWFuYWdlciIsInJlbW92ZU1vZGVsIiwiZ2V0TW9kZWwiLCJfc2V0dXBIb29rcyIsInVuZGVyc2NvcmVkSWYiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0b3JUeXBlIiwibm9ybWFsaXplQXR0cmlidXRlIiwicmVmZXJlbmNlcyIsIl9pbmRleGVzIiwibmFtZUluZGV4IiwiX2NvbmZvcm1JbmRleCIsImFkZCIsInZlcnNpb24iLCJfYWRkRGVmYXVsdEF0dHJpYnV0ZXMiLCJyZWZyZXNoQXR0cmlidXRlcyIsIl9maW5kQXV0b0luY3JlbWVudEF0dHJpYnV0ZSIsIl9zY29wZSIsIl9zY29wZU5hbWVzIiwiYWRkTW9kZWwiLCJhdHRyaWJ1dGVNYW5pcHVsYXRpb24iLCJvcHQiLCJmdW5jcyIsImlzT2JqZWN0IiwiX2N1c3RvbSIsIm1ldGhvZCIsImZjdCIsImNvbmZpZ3VyYWJsZSIsImZpZWxkUmF3QXR0cmlidXRlc01hcCIsInVuaXF1ZUtleXMiLCJub3JtYWxpemVEYXRhVHlwZSIsImZpZWxkTmFtZSIsIl9tb2RlbEF0dHJpYnV0ZSIsIl9zYW5pdGl6ZSIsIl9pc0NoYW5nZWQiLCJCT09MRUFOIiwiREFURU9OTFkiLCJKU09OIiwiVklSVFVBTCIsImlkeE5hbWUiLCJpZHgiLCJtc2ciLCJjb2x1bW4iLCJjdXN0b21JbmRleCIsIkpTT05CIiwidXNpbmciLCJmaWVsZEF0dHJpYnV0ZU1hcCIsIl9oYXNKc29uQXR0cmlidXRlcyIsIl9hIiwiX2hhc0N1c3RvbVNldHRlcnMiLCJsb2ciLCJwcmltYXJ5S2V5RmllbGQiLCJkcm9wIiwiY3JlYXRlVGFibGUiLCJhbHRlciIsImRlc2NyaWJlVGFibGUiLCJnZXRGb3JlaWduS2V5UmVmZXJlbmNlc0ZvclRhYmxlIiwidGFibGVJbmZvcyIsImNvbHVtbnMiLCJmb3JlaWduS2V5UmVmZXJlbmNlcyIsImNoYW5nZXMiLCJyZW1vdmVkQ29uc3RyYWludHMiLCJjb2x1bW5EZXNjIiwiY29sdW1uTmFtZSIsImFkZENvbHVtbiIsImN1cnJlbnRBdHRyaWJ1dGUiLCJyZW1vdmVDb2x1bW4iLCJkYXRhYmFzZSIsImNvbmZpZyIsImZvcmVpZ25LZXlSZWZlcmVuY2UiLCJjb25zdHJhaW50TmFtZSIsInRhYmxlQ2F0YWxvZyIsInRhYmxlU2NoZW1hIiwicmVmZXJlbmNlZFRhYmxlTmFtZSIsInJlZmVyZW5jZWRDb2x1bW5OYW1lIiwicmVmZXJlbmNlZFRhYmxlU2NoZW1hIiwicmVtb3ZlQ29uc3RyYWludCIsImNoYW5nZUNvbHVtbiIsImYiLCJzaG93SW5kZXgiLCJpdGVtMSIsIml0ZW0yIiwic29ydCIsImluZGV4MSIsImluZGV4MiIsImNvbmN1cnJlbnRseSIsImFkZEluZGV4IiwiYmVuY2htYXJrIiwiZHJvcFRhYmxlIiwiZHJvcFNjaGVtYSIsImFkZFNjaGVtYSIsIm92ZXJyaWRlIiwib3B0aW9uIiwic2NvcGVOYW1lIiwiZmxhdHRlbiIsImFwcGx5Iiwic2xpY2UiLCJTZXF1ZWxpemVTY29wZUVycm9yIiwiUXVlcnlFcnJvciIsIndhcm5PbkludmFsaWRPcHRpb25zIiwiaGFzSm9pbiIsImdyb3VwIiwic2VsZWN0T3B0aW9ucyIsInNlbGVjdCIsInJlc3VsdHMiLCJFbXB0eVJlc3VsdEVycm9yIiwiX2ZpbmRTZXBhcmF0ZSIsInZhbGlkQ29sdW1uTmFtZXMiLCJ1bnJlY29nbml6ZWRPcHRpb25zIiwidW5leHBlY3RlZE1vZGVsQXR0cmlidXRlcyIsIndhcm4iLCJvcmlnaW5hbCIsIm1lbW8iLCJsZW4iLCJwYXJhbSIsIkJ1ZmZlciIsImlzQnVmZmVyIiwidW5pcXVlU2luZ2xlQ29sdW1ucyIsImNoYWluIiwiYyIsImZpbmRBbGwiLCJhZ2dyZWdhdGVGdW5jdGlvbiIsInByZXZBdHRyaWJ1dGVzIiwiYXR0ck9wdGlvbnMiLCJhZ2dyZWdhdGVDb2x1bW4iLCJjb2wiLCJkaXN0aW5jdCIsImZuIiwidW5pb25CeSIsImEiLCJkYXRhVHlwZSIsIkZMT0FUIiwibWFwT3B0aW9uRmllbGROYW1lcyIsInJhd1NlbGVjdCIsImluY2x1ZGVJZ25vcmVBdHRyaWJ1dGVzIiwib2Zmc2V0Iiwib3JkZXIiLCJhZ2dyZWdhdGUiLCJjb3VudE9wdGlvbnMiLCJjb3VudCIsInJvd3MiLCJ2YWx1ZVNldHMiLCJ1bmtub3duRGVmYXVsdHMiLCJfY2xzIiwidCIsImludGVybmFsVHJhbnNhY3Rpb24iLCJleGNlcHRpb24iLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJjYXRjaCIsImVyciIsImZsYXR0ZW5lZFdoZXJlIiwiZmxhdHRlbk9iamVjdERlZXAiLCJmbGF0dGVuZWRXaGVyZUtleXMiLCJsYXN0Iiwid2hlcmVGaWVsZHMiLCJlcnJGaWVsZEtleXMiLCJlcnJGaWVsZHNXaGVyZUludGVyc2VjdHMiLCJpbnRlcnNlY3RzIiwidG9TdHJpbmciLCJmaW5hbGx5IiwiY29tbWl0IiwiaGFzUHJpbWFyeSIsInVwZGF0ZWREYXRhVmFsdWVzIiwiaW5zZXJ0VmFsdWVzIiwidXBkYXRlVmFsdWVzIiwidXBzZXJ0IiwiY3JlYXRlZCIsImZpbmRCeVBrIiwicmVjb3JkIiwicmVjb3JkcyIsInJlY3Vyc2l2ZUJ1bGtDcmVhdGUiLCJpbmRpdmlkdWFsSG9va3MiLCJpZ25vcmVEdXBsaWNhdGVzIiwicmVqZWN0IiwidXBkYXRlT25EdXBsaWNhdGUiLCJlcnJvcnMiLCJBZ2dyZWdhdGVFcnJvciIsInZhbGlkYXRlT3B0aW9ucyIsIkJ1bGtSZWNvcmRFcnJvciIsImluZGl2aWR1YWxPcHRpb25zIiwiYXNzb2NpYXRpb25JbnN0YW5jZXMiLCJhc3NvY2lhdGlvbkluc3RhbmNlSW5kZXhUb0luc3RhbmNlTWFwIiwiYXNzb2NpYXRpb25JbnN0YW5jZSIsIm91dCIsImZpZWxkTWFwcGVkQXR0cmlidXRlcyIsInVwc2VydEtleXMiLCJidWxrSW5zZXJ0IiwiZmluZCIsImFzc29jaWF0ZWQiLCJ0aHJvdWdoT3B0aW9ucyIsInRocm91Z2hJbnN0YW5jZXMiLCJ0cnVuY2F0ZSIsImRlc3Ryb3kiLCJjYXNjYWRlIiwicmVzdGFydElkZW50aXR5IiwiQlVMS0RFTEVURSIsIl9pbnN0YW5jZXMiLCJCVUxLVVBEQVRFIiwiYXR0clZhbHVlSGFzaCIsImJ1bGtVcGRhdGUiLCJidWxrRGVsZXRlIiwiUkFXIiwiX29wdGlvbnNNdXN0Q29udGFpbldoZXJlIiwidmFsdWVzVXNlIiwiY2hhbmdlZFZhbHVlcyIsImRpZmZlcmVudCIsImZvckluIiwidGhpc0NoYW5nZWRWYWx1ZXMiLCJoYXNUcmlnZ2VyIiwiYWZmZWN0ZWRSb3dzIiwiZXhjbHVkZSIsImVsZW0iLCJfZGVmYXVsdHNPcHRpb25zIiwiU3ltYm9sIiwiZm9yIiwiYWxpYXMiLCJ1cGRhdGVkQXRBdHRyaWJ1dGUiLCJwcm9taXNlIiwiZGVjcmVtZW50IiwiYXBwbHlUbyIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxNQUFNLEdBQUdDLE9BQU8sQ0FBQyxRQUFELENBQXRCOztBQUNBLE1BQU1DLENBQUMsR0FBR0QsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUUsTUFBTSxHQUFHRixPQUFPLENBQUMsUUFBRCxDQUF0Qjs7QUFFQSxNQUFNRyxLQUFLLEdBQUdILE9BQU8sQ0FBQyxTQUFELENBQXJCOztBQUNBLE1BQU07QUFBRUksRUFBQUE7QUFBRixJQUFhSixPQUFPLENBQUMsZ0JBQUQsQ0FBMUI7O0FBQ0EsTUFBTUssU0FBUyxHQUFHTCxPQUFPLENBQUMsMkJBQUQsQ0FBekI7O0FBQ0EsTUFBTU0sYUFBYSxHQUFHTixPQUFPLENBQUMsZ0NBQUQsQ0FBN0I7O0FBQ0EsTUFBTU8saUJBQWlCLEdBQUdQLE9BQU8sQ0FBQyxzQkFBRCxDQUFqQzs7QUFDQSxNQUFNUSxVQUFVLEdBQUdSLE9BQU8sQ0FBQyxlQUFELENBQTFCOztBQUNBLE1BQU1TLGVBQWUsR0FBR1QsT0FBTyxDQUFDLFVBQUQsQ0FBL0I7O0FBQ0EsTUFBTVUsT0FBTyxHQUFHVixPQUFPLENBQUMsV0FBRCxD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QUFTLEVBQUU7QUFBYixPQUFYLEVBQWlDdE0sT0FBakMsRUFBMEM7QUFDbER3TSxRQUFBQSxFQUFFLEVBQUU7QUFEOEMsT0FBMUMsQ0FBVjtBQUlBLGFBQU8sS0FBS0YsU0FBTCxDQUFleEYsTUFBZixFQUF1QjlHLE9BQXZCLENBQVA7QUFDRDs7OzZDQUUrQkEsTyxFQUFTO0FBQ3ZDN0IsTUFBQUEsTUFBTSxDQUFDNkIsT0FBTyxJQUFJQSxPQUFPLENBQUNrRCxLQUFwQixFQUEyQixrREFBM0IsQ0FBTjtBQUNBL0UsTUFBQUEsTUFBTSxDQUFDRSxDQUFDLENBQUN1USxhQUFGLENBQWdCNU8sT0FBTyxDQUFDa0QsS0FBeEIsS0FBa0N6QyxLQUFLLENBQUNDLE9BQU4sQ0FBY1YsT0FBTyxDQUFDa0QsS0FBdEIsQ0FBbEMsSUFBa0VsRCxPQUFPLENBQUNrRCxLQUFSLFlBQXlCM0UsS0FBSyxDQUFDdUQsZUFBbEcsRUFDSixpRkFESSxDQUFOO0FBRUQ7Ozs0QkE2K0JjNE0sTSxFQUFRMU8sTyxFQUFTLENBQUUsQyxDQUFDOztBQUVuQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQWlDcUIwTyxNLEVBQVExTyxPLEVBQVMsQ0FBRSxDLENBQUM7O0FBRXpDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJCQW1CYzBPLE0sRUFBUTFPLE8sRUFBUyxDQUFFLEMsQ0FBQzs7QUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4QkFrQmlCME8sTSxFQUFRMU8sTyxFQUFTLENBQUUsQyxDQUFDOzs7Ozs7O0FBR3ZDQyxNQUFNLENBQUNDLE1BQVAsQ0FBY1QsS0FBZCxFQUFxQk4saUJBQXJCO0FBQ0FELEtBQUssQ0FBQ3lpQixPQUFOLENBQWNsaUIsS0FBZCxFQUFxQixJQUFyQjtBQUVBbWlCLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnBpQixLQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IERvdHRpZSA9IHJlcXVpcmUoJ2RvdHRpZScpO1xyXG5cclxuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XHJcbmNvbnN0IHsgbG9nZ2VyIH0gPSByZXF1aXJlKCcuL3V0aWxzL2xvZ2dlcicpO1xyXG5jb25zdCBCZWxvbmdzVG8gPSByZXF1aXJlKCcuL2Fzc29jaWF0aW9ucy9iZWxvbmdzLXRvJyk7XHJcbmNvbnN0IEJlbG9uZ3NUb01hbnkgPSByZXF1aXJlKCcuL2Fzc29jaWF0aW9ucy9iZWxvbmdzLXRvLW1hbnknKTtcclxuY29uc3QgSW5zdGFuY2VWYWxpZGF0b3IgPSByZXF1aXJlKCcuL2luc3RhbmNlLXZhbGlkYXRvcicpO1xyXG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZSgnLi9xdWVyeS10eXBlcycpO1xyXG5jb25zdCBzZXF1ZWxpemVFcnJvcnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xyXG5jb25zdCBQcm9taXNlID0gcmVxdWlyZSgnLi9wcm9taXNlJyk7XHJcbmNvbnN0IEFzc29jaWF0aW9uID0gcmVxdWlyZSgnLi9hc3NvY2lhdGlvbnMvYmFzZScpO1xyXG5jb25zdCBIYXNNYW55ID0gcmVxdWlyZSgnLi9hc3NvY2lhdGlvbnMvaGFzLW1hbnknKTtcclxuY29uc3QgRGF0YVR5cGVzID0gcmVxdWlyZSgnLi9kYXRhLXR5cGVzJyk7XHJcbmNvbnN0IEhvb2tzID0gcmVxdWlyZSgnLi9ob29rcycpO1xyXG5jb25zdCBhc3NvY2lhdGlvbnNNaXhpbiA9IHJlcXVpcmUoJy4vYXNzb2NpYXRpb25zL21peGluJyk7XHJcbmNvbnN0IE9wID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMnKTtcclxuY29uc3QgeyBub0RvdWJsZU5lc3RlZEdyb3VwIH0gPSByZXF1aXJlKCcuL3V0aWxzL2RlcHJlY2F0aW9ucycpO1xyXG5cclxuXHJcbi8vIFRoaXMgbGlzdCB3aWxsIHF1aWNrbHkgYmVjb21lIGRhdGVkLCBidXQgZmFpbGluZyB0byBtYWludGFpbiB0aGlzIGxpc3QganVzdCBtZWFuc1xyXG4vLyB3ZSB3b24ndCB0aHJvdyBhIHdhcm5pbmcgd2hlbiB3ZSBzaG91bGQuIEF0IGxlYXN0IG1vc3QgY29tbW9uIGNhc2VzIHdpbGwgZm9yZXZlciBiZSBjb3ZlcmVkXHJcbi8vIHNvIHdlIHN0b3AgdGhyb3dpbmcgZXJyb25lb3VzIHdhcm5pbmdzIHdoZW4gd2Ugc2hvdWxkbid0LlxyXG5jb25zdCB2YWxpZFF1ZXJ5S2V5d29yZHMgPSBuZXcgU2V0KFsnd2hlcmUnLCAnYXR0cmlidXRlcycsICdwYXJhbm9pZCcsICdpbmNsdWRlJywgJ29yZGVyJywgJ2xpbWl0JywgJ29mZnNldCcsXHJcbiAgJ3RyYW5zYWN0aW9uJywgJ2xvY2snLCAncmF3JywgJ2xvZ2dpbmcnLCAnYmVuY2htYXJrJywgJ2hhdmluZycsICdzZWFyY2hQYXRoJywgJ3JlamVjdE9uRW1wdHknLCAncGxhaW4nLFxyXG4gICdzY29wZScsICdncm91cCcsICd0aHJvdWdoJywgJ2RlZmF1bHRzJywgJ2Rpc3RpbmN0JywgJ3ByaW1hcnknLCAnZXhjZXB0aW9uJywgJ3R5cGUnLCAnaG9va3MnLCAnZm9yY2UnLFxyXG4gICduYW1lJ10pO1xyXG5cclxuLy8gTGlzdCBvZiBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIG5vdCBiZSBpbXBsaWNpdGx5IHBhc3NlZCBpbnRvIHN1YnF1ZXJpZXMvaW5jbHVkZXMuXHJcbmNvbnN0IG5vbkNhc2NhZGluZ09wdGlvbnMgPSBbJ2luY2x1ZGUnLCAnYXR0cmlidXRlcycsICdvcmlnaW5hbEF0dHJpYnV0ZXMnLCAnb3JkZXInLCAnd2hlcmUnLCAnbGltaXQnLCAnb2Zmc2V0JywgJ3BsYWluJywgJ2dyb3VwJywgJ2hhdmluZyddO1xyXG5cclxuLyoqXHJcbiAqIEEgTW9kZWwgcmVwcmVzZW50cyBhIHRhYmxlIGluIHRoZSBkYXRhYmFzZS4gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgZGF0YWJhc2Ugcm93LlxyXG4gKlxyXG4gKiBNb2RlbCBpbnN0YW5jZXMgb3BlcmF0ZSB3aXRoIHRoZSBjb25jZXB0IG9mIGEgYGRhdGFWYWx1ZXNgIHByb3BlcnR5LCB3aGljaCBzdG9yZXMgdGhlIGFjdHVhbCB2YWx1ZXMgcmVwcmVzZW50ZWQgYnkgdGhlIGluc3RhbmNlLlxyXG4gKiBCeSBkZWZhdWx0LCB0aGUgdmFsdWVzIGZyb20gZGF0YVZhbHVlcyBjYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIHRoZSBJbnN0YW5jZSwgdGhhdCBpczpcclxuICogYGBganNcclxuICogaW5zdGFuY2UuZmllbGRcclxuICogLy8gaXMgdGhlIHNhbWUgYXNcclxuICogaW5zdGFuY2UuZ2V0KCdmaWVsZCcpXHJcbiAqIC8vIGlzIHRoZSBzYW1lIGFzXHJcbiAqIGluc3RhbmNlLmdldERhdGFWYWx1ZSgnZmllbGQnKVxyXG4gKiBgYGBcclxuICogSG93ZXZlciwgaWYgZ2V0dGVycyBhbmQvb3Igc2V0dGVycyBhcmUgZGVmaW5lZCBmb3IgYGZpZWxkYCB0aGV5IHdpbGwgYmUgaW52b2tlZCwgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHZhbHVlIGZyb20gYGRhdGFWYWx1ZXNgLlxyXG4gKiBBY2Nlc3NpbmcgcHJvcGVydGllcyBkaXJlY3RseSBvciB1c2luZyBgZ2V0YCBpcyBwcmVmZXJyZWQgZm9yIHJlZ3VsYXIgdXNlLCBgZ2V0RGF0YVZhbHVlYCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjdXN0b20gZ2V0dGVycy5cclxuICpcclxuICogQHNlZVxyXG4gICAqIHtAbGluayBTZXF1ZWxpemUjZGVmaW5lfSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBnZXR0ZXJzIGFuZCBzZXR0ZXJzXHJcbiAqIEBtaXhlcyBIb29rc1xyXG4gKi9cclxuY2xhc3MgTW9kZWwge1xyXG4gIHN0YXRpYyBnZXQgUXVlcnlJbnRlcmZhY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUuZ2V0UXVlcnlJbnRlcmZhY2UoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgUXVlcnlHZW5lcmF0b3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5RdWVyeUludGVyZmFjZS5RdWVyeUdlbmVyYXRvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBzZXF1ZWxpemUgaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgU2VxdWVsaXplfVxyXG4gICAqXHJcbiAgICogQHByb3BlcnR5IHNlcXVlbGl6ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1NlcXVlbGl6ZX1cclxuICAgKi9cclxuICBnZXQgc2VxdWVsaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3Iuc2VxdWVsaXplO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGRzIGEgbmV3IG1vZGVsIGluc3RhbmNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICBbdmFsdWVzPXt9XSBhbiBvYmplY3Qgb2Yga2V5IHZhbHVlIHBhaXJzXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICBbb3B0aW9uc10gaW5zdGFuY2UgY29uc3RydWN0aW9uIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJhdz1mYWxzZV0gSWYgc2V0IHRvIHRydWUsIHZhbHVlcyB3aWxsIGlnbm9yZSBmaWVsZCBhbmQgdmlydHVhbCBzZXR0ZXJzLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaXNOZXdSZWNvcmQ9dHJ1ZV0gSXMgdGhpcyBhIG5ldyByZWNvcmRcclxuICAgKiBAcGFyYW0ge0FycmF5fSAgIFtvcHRpb25zLmluY2x1ZGVdIGFuIGFycmF5IG9mIGluY2x1ZGUgb3B0aW9ucyAtIFVzZWQgdG8gYnVpbGQgcHJlZmV0Y2hlZC9pbmNsdWRlZCBtb2RlbCBpbnN0YW5jZXMuIFNlZSBgc2V0YFxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHZhbHVlcyA9IHt9LCBvcHRpb25zID0ge30pIHtcclxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcclxuICAgICAgaXNOZXdSZWNvcmQ6IHRydWUsXHJcbiAgICAgIF9zY2hlbWE6IHRoaXMuY29uc3RydWN0b3IuX3NjaGVtYSxcclxuICAgICAgX3NjaGVtYURlbGltaXRlcjogdGhpcy5jb25zdHJ1Y3Rvci5fc2NoZW1hRGVsaW1pdGVyXHJcbiAgICB9LCBvcHRpb25zIHx8IHt9KTtcclxuXHJcbiAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcy5tYXAoYXR0cmlidXRlID0+IEFycmF5LmlzQXJyYXkoYXR0cmlidXRlKSA/IGF0dHJpYnV0ZVsxXSA6IGF0dHJpYnV0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLmluY2x1ZGVWYWxpZGF0ZWQpIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5fY29uZm9ybUluY2x1ZGVzKG9wdGlvbnMsIHRoaXMuY29uc3RydWN0b3IpO1xyXG4gICAgICBpZiAob3B0aW9ucy5pbmNsdWRlKSB7XHJcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5fZXhwYW5kSW5jbHVkZUFsbChvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLl92YWxpZGF0ZUluY2x1ZGVkRWxlbWVudHMob3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFWYWx1ZXMgPSB7fTtcclxuICAgIHRoaXMuX3ByZXZpb3VzRGF0YVZhbHVlcyA9IHt9O1xyXG4gICAgdGhpcy5fY2hhbmdlZCA9IHt9O1xyXG4gICAgdGhpcy5fbW9kZWxPcHRpb25zID0gdGhpcy5jb25zdHJ1Y3Rvci5vcHRpb25zO1xyXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpbnN0YW5jZSBoYXMgbm90IHlldCBiZWVuIHBlcnNpc3RlZCB0byB0aGUgZGF0YWJhc2VcclxuICAgICAqIEBwcm9wZXJ0eSBpc05ld1JlY29yZFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHRoaXMuaXNOZXdSZWNvcmQgPSBvcHRpb25zLmlzTmV3UmVjb3JkO1xyXG5cclxuICAgIHRoaXMuX2luaXRWYWx1ZXModmFsdWVzLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIF9pbml0VmFsdWVzKHZhbHVlcywgb3B0aW9ucykge1xyXG4gICAgbGV0IGRlZmF1bHRzO1xyXG4gICAgbGV0IGtleTtcclxuXHJcbiAgICB2YWx1ZXMgPSB2YWx1ZXMgJiYgXy5jbG9uZSh2YWx1ZXMpIHx8IHt9O1xyXG5cclxuICAgIGlmIChvcHRpb25zLmlzTmV3UmVjb3JkKSB7XHJcbiAgICAgIGRlZmF1bHRzID0ge307XHJcblxyXG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5faGFzRGVmYXVsdFZhbHVlcykge1xyXG4gICAgICAgIGRlZmF1bHRzID0gXy5tYXBWYWx1ZXModGhpcy5jb25zdHJ1Y3Rvci5fZGVmYXVsdFZhbHVlcywgdmFsdWVGbiA9PiB7XHJcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlRm4oKTtcclxuICAgICAgICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCA/IHZhbHVlIDogXy5jbG9uZURlZXAodmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzZXQgaWQgdG8gbnVsbCBpZiBub3QgcGFzc2VkIGFzIHZhbHVlLCBhIG5ld2x5IGNyZWF0ZWQgZGFvIGhhcyBubyBpZFxyXG4gICAgICAvLyByZW1vdmluZyB0aGlzIGJyZWFrcyBidWxrQ3JlYXRlXHJcbiAgICAgIC8vIGRvIGFmdGVyIGRlZmF1bHQgdmFsdWVzIHNpbmNlIGl0IG1pZ2h0IGhhdmUgVVVJRCBhcyBhIGRlZmF1bHQgdmFsdWVcclxuICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IucHJpbWFyeUtleUF0dHJpYnV0ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5wcmltYXJ5S2V5QXR0cmlidXRlcy5mb3JFYWNoKHByaW1hcnlLZXlBdHRyaWJ1dGUgPT4ge1xyXG4gICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVmYXVsdHMsIHByaW1hcnlLZXlBdHRyaWJ1dGUpKSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRzW3ByaW1hcnlLZXlBdHRyaWJ1dGVdID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuY3JlYXRlZEF0ICYmIGRlZmF1bHRzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuY3JlYXRlZEF0XSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVZhbHVlc1t0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmNyZWF0ZWRBdF0gPSBVdGlscy50b0RlZmF1bHRWYWx1ZShkZWZhdWx0c1t0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmNyZWF0ZWRBdF0sIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCk7XHJcbiAgICAgICAgZGVsZXRlIGRlZmF1bHRzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuY3JlYXRlZEF0XTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0ICYmIGRlZmF1bHRzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0XSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVZhbHVlc1t0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdF0gPSBVdGlscy50b0RlZmF1bHRWYWx1ZShkZWZhdWx0c1t0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdF0sIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCk7XHJcbiAgICAgICAgZGVsZXRlIGRlZmF1bHRzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0XTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0ICYmIGRlZmF1bHRzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0XSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVZhbHVlc1t0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdF0gPSBVdGlscy50b0RlZmF1bHRWYWx1ZShkZWZhdWx0c1t0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdF0sIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCk7XHJcbiAgICAgICAgZGVsZXRlIGRlZmF1bHRzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0XTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKE9iamVjdC5rZXlzKGRlZmF1bHRzKS5sZW5ndGgpIHtcclxuICAgICAgICBmb3IgKGtleSBpbiBkZWZhdWx0cykge1xyXG4gICAgICAgICAgaWYgKHZhbHVlc1trZXldID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCBVdGlscy50b0RlZmF1bHRWYWx1ZShkZWZhdWx0c1trZXldLCB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QpLCB7IHJhdzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgZGVsZXRlIHZhbHVlc1trZXldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0KHZhbHVlcywgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvLyB2YWxpZGF0ZUluY2x1ZGVkRWxlbWVudHMgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlIHRoaXMgbWV0aG9kXHJcbiAgc3RhdGljIF9wYXJhbm9pZENsYXVzZShtb2RlbCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAvLyBBcHBseSBvbiBlYWNoIGluY2x1ZGVcclxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYmVmb3JlIGhhbmRsaW5nIHdoZXJlIGNvbmRpdGlvbnMgYmVjYXVzZSBvZiBsb2dpYyB3aXRoIHJldHVybnNcclxuICAgIC8vIG90aGVyd2lzZSB0aGlzIGNvZGUgd2lsbCBuZXZlciBydW4gb24gaW5jbHVkZXMgb2YgYSBhbHJlYWR5IGNvbmRpdGlvbmFibGUgd2hlcmVcclxuICAgIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcclxuICAgICAgZm9yIChjb25zdCBpbmNsdWRlIG9mIG9wdGlvbnMuaW5jbHVkZSkge1xyXG4gICAgICAgIHRoaXMuX3BhcmFub2lkQ2xhdXNlKGluY2x1ZGUubW9kZWwsIGluY2x1ZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXBwbHkgcGFyYW5vaWQgd2hlbiBncm91cGVkTGltaXQgaXMgdXNlZFxyXG4gICAgaWYgKF8uZ2V0KG9wdGlvbnMsICdncm91cGVkTGltaXQub24ub3B0aW9ucy5wYXJhbm9pZCcpKSB7XHJcbiAgICAgIGNvbnN0IHRocm91Z2hNb2RlbCA9IF8uZ2V0KG9wdGlvbnMsICdncm91cGVkTGltaXQub24udGhyb3VnaC5tb2RlbCcpO1xyXG4gICAgICBpZiAodGhyb3VnaE1vZGVsKSB7XHJcbiAgICAgICAgb3B0aW9ucy5ncm91cGVkTGltaXQudGhyb3VnaCA9IHRoaXMuX3BhcmFub2lkQ2xhdXNlKHRocm91Z2hNb2RlbCwgb3B0aW9ucy5ncm91cGVkTGltaXQudGhyb3VnaCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW1vZGVsLm9wdGlvbnMudGltZXN0YW1wcyB8fCAhbW9kZWwub3B0aW9ucy5wYXJhbm9pZCB8fCBvcHRpb25zLnBhcmFub2lkID09PSBmYWxzZSkge1xyXG4gICAgICAvLyBUaGlzIG1vZGVsIGlzIG5vdCBwYXJhbm9pZCwgbm90aGluZyB0byBkbyBoZXJlO1xyXG4gICAgICByZXR1cm4gb3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZWxldGVkQXRDb2wgPSBtb2RlbC5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXQ7XHJcbiAgICBjb25zdCBkZWxldGVkQXRBdHRyaWJ1dGUgPSBtb2RlbC5yYXdBdHRyaWJ1dGVzW2RlbGV0ZWRBdENvbF07XHJcbiAgICBjb25zdCBkZWxldGVkQXRPYmplY3QgPSB7fTtcclxuXHJcbiAgICBsZXQgZGVsZXRlZEF0RGVmYXVsdFZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlbGV0ZWRBdEF0dHJpYnV0ZSwgJ2RlZmF1bHRWYWx1ZScpID8gZGVsZXRlZEF0QXR0cmlidXRlLmRlZmF1bHRWYWx1ZSA6IG51bGw7XHJcblxyXG4gICAgZGVsZXRlZEF0RGVmYXVsdFZhbHVlID0gZGVsZXRlZEF0RGVmYXVsdFZhbHVlIHx8IHtcclxuICAgICAgW09wLmVxXTogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICBkZWxldGVkQXRPYmplY3RbZGVsZXRlZEF0QXR0cmlidXRlLmZpZWxkIHx8IGRlbGV0ZWRBdENvbF0gPSBkZWxldGVkQXREZWZhdWx0VmFsdWU7XHJcblxyXG4gICAgaWYgKFV0aWxzLmlzV2hlcmVFbXB0eShvcHRpb25zLndoZXJlKSkge1xyXG4gICAgICBvcHRpb25zLndoZXJlID0gZGVsZXRlZEF0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3B0aW9ucy53aGVyZSA9IHsgW09wLmFuZF06IFtkZWxldGVkQXRPYmplY3QsIG9wdGlvbnMud2hlcmVdIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2FkZERlZmF1bHRBdHRyaWJ1dGVzKCkge1xyXG4gICAgY29uc3QgdGFpbCA9IHt9O1xyXG4gICAgbGV0IGhlYWQgPSB7fTtcclxuXHJcbiAgICAvLyBBZGQgaWQgaWYgbm8gcHJpbWFyeSBrZXkgd2FzIG1hbnVhbGx5IGFkZGVkIHRvIGRlZmluaXRpb25cclxuICAgIC8vIENhbid0IHVzZSB0aGlzLnByaW1hcnlLZXlzIGhlcmUsIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBQS3MgYXJlIGlkZW50aWZpZWRcclxuICAgIGlmICghXy5zb21lKHRoaXMucmF3QXR0cmlidXRlcywgJ3ByaW1hcnlLZXknKSkge1xyXG4gICAgICBpZiAoJ2lkJyBpbiB0aGlzLnJhd0F0dHJpYnV0ZXMpIHtcclxuICAgICAgICAvLyBTb21ldGhpbmcgaXMgZmlzaHkgaGVyZSFcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgY29sdW1uIGNhbGxlZCAnaWQnIHdhcyBhZGRlZCB0byB0aGUgYXR0cmlidXRlcyBvZiAnJHt0aGlzLnRhYmxlTmFtZX0nIGJ1dCBub3QgbWFya2VkIHdpdGggJ3ByaW1hcnlLZXk6IHRydWUnYCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGhlYWQgPSB7XHJcbiAgICAgICAgaWQ6IHtcclxuICAgICAgICAgIHR5cGU6IG5ldyBEYXRhVHlwZXMuSU5URUdFUigpLFxyXG4gICAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcclxuICAgICAgICAgIHByaW1hcnlLZXk6IHRydWUsXHJcbiAgICAgICAgICBhdXRvSW5jcmVtZW50OiB0cnVlLFxyXG4gICAgICAgICAgX2F1dG9HZW5lcmF0ZWQ6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuY3JlYXRlZEF0KSB7XHJcbiAgICAgIHRhaWxbdGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy5jcmVhdGVkQXRdID0ge1xyXG4gICAgICAgIHR5cGU6IERhdGFUeXBlcy5EQVRFLFxyXG4gICAgICAgIGFsbG93TnVsbDogZmFsc2UsXHJcbiAgICAgICAgX2F1dG9HZW5lcmF0ZWQ6IHRydWVcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy51cGRhdGVkQXQpIHtcclxuICAgICAgdGFpbFt0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdF0gPSB7XHJcbiAgICAgICAgdHlwZTogRGF0YVR5cGVzLkRBVEUsXHJcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcclxuICAgICAgICBfYXV0b0dlbmVyYXRlZDogdHJ1ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdCkge1xyXG4gICAgICB0YWlsW3RoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0XSA9IHtcclxuICAgICAgICB0eXBlOiBEYXRhVHlwZXMuREFURSxcclxuICAgICAgICBfYXV0b0dlbmVyYXRlZDogdHJ1ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl92ZXJzaW9uQXR0cmlidXRlKSB7XHJcbiAgICAgIHRhaWxbdGhpcy5fdmVyc2lvbkF0dHJpYnV0ZV0gPSB7XHJcbiAgICAgICAgdHlwZTogRGF0YVR5cGVzLklOVEVHRVIsXHJcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcclxuICAgICAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICAgICAgX2F1dG9HZW5lcmF0ZWQ6IHRydWVcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBleGlzdGluZ0F0dHJpYnV0ZXMgPSBfLmNsb25lKHRoaXMucmF3QXR0cmlidXRlcyk7XHJcbiAgICB0aGlzLnJhd0F0dHJpYnV0ZXMgPSB7fTtcclxuXHJcbiAgICBfLmVhY2goaGVhZCwgKHZhbHVlLCBhdHRyKSA9PiB7XHJcbiAgICAgIHRoaXMucmF3QXR0cmlidXRlc1thdHRyXSA9IHZhbHVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgXy5lYWNoKGV4aXN0aW5nQXR0cmlidXRlcywgKHZhbHVlLCBhdHRyKSA9PiB7XHJcbiAgICAgIHRoaXMucmF3QXR0cmlidXRlc1thdHRyXSA9IHZhbHVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgXy5lYWNoKHRhaWwsICh2YWx1ZSwgYXR0cikgPT4ge1xyXG4gICAgICBpZiAodGhpcy5yYXdBdHRyaWJ1dGVzW2F0dHJdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cl0gPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLnByaW1hcnlLZXlzKS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5wcmltYXJ5S2V5cy5pZCA9IHRoaXMucmF3QXR0cmlidXRlcy5pZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBfZmluZEF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUoKSB7XHJcbiAgICB0aGlzLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgPSBudWxsO1xyXG5cclxuICAgIGZvciAoY29uc3QgbmFtZSBpbiB0aGlzLnJhd0F0dHJpYnV0ZXMpIHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnJhd0F0dHJpYnV0ZXMsIG5hbWUpKSB7XHJcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMucmF3QXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICBpZiAoZGVmaW5pdGlvbiAmJiBkZWZpbml0aW9uLmF1dG9JbmNyZW1lbnQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEluc3RhbmNlIGRlZmluaXRpb24uIE9ubHkgb25lIGF1dG9pbmNyZW1lbnQgZmllbGQgYWxsb3dlZC4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuYXV0b0luY3JlbWVudEF0dHJpYnV0ZSA9IG5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2NvbmZvcm1JbmNsdWRlcyhvcHRpb25zLCBzZWxmKSB7XHJcbiAgICBpZiAoIW9wdGlvbnMuaW5jbHVkZSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIGlmIGluY2x1ZGUgaXMgbm90IGFuIGFycmF5LCB3cmFwIGluIGFuIGFycmF5XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5pbmNsdWRlKSkge1xyXG4gICAgICBvcHRpb25zLmluY2x1ZGUgPSBbb3B0aW9ucy5pbmNsdWRlXTtcclxuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuaW5jbHVkZS5sZW5ndGgpIHtcclxuICAgICAgZGVsZXRlIG9wdGlvbnMuaW5jbHVkZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnZlcnQgYWxsIGluY2x1ZGVkIGVsZW1lbnRzIHRvIHsgbW9kZWw6IE1vZGVsIH0gZm9ybVxyXG4gICAgb3B0aW9ucy5pbmNsdWRlID0gb3B0aW9ucy5pbmNsdWRlLm1hcChpbmNsdWRlID0+IHRoaXMuX2NvbmZvcm1JbmNsdWRlKGluY2x1ZGUsIHNlbGYpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfdHJhbnNmb3JtU3RyaW5nQXNzb2NpYXRpb24oaW5jbHVkZSwgc2VsZikge1xyXG4gICAgaWYgKHNlbGYgJiYgdHlwZW9mIGluY2x1ZGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlbGYuYXNzb2NpYXRpb25zLCBpbmNsdWRlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzb2NpYXRpb24gd2l0aCBhbGlhcyBcIiR7aW5jbHVkZX1cIiBkb2VzIG5vdCBleGlzdCBvbiAke3NlbGYubmFtZX1gKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc2VsZi5hc3NvY2lhdGlvbnNbaW5jbHVkZV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW5jbHVkZTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfY29uZm9ybUluY2x1ZGUoaW5jbHVkZSwgc2VsZikge1xyXG4gICAgaWYgKGluY2x1ZGUpIHtcclxuICAgICAgbGV0IG1vZGVsO1xyXG5cclxuICAgICAgaWYgKGluY2x1ZGUuX3BzZXVkbykgcmV0dXJuIGluY2x1ZGU7XHJcblxyXG4gICAgICBpbmNsdWRlID0gdGhpcy5fdHJhbnNmb3JtU3RyaW5nQXNzb2NpYXRpb24oaW5jbHVkZSwgc2VsZik7XHJcblxyXG4gICAgICBpZiAoaW5jbHVkZSBpbnN0YW5jZW9mIEFzc29jaWF0aW9uKSB7XHJcbiAgICAgICAgaWYgKHNlbGYgJiYgaW5jbHVkZS50YXJnZXQubmFtZSA9PT0gc2VsZi5uYW1lKSB7XHJcbiAgICAgICAgICBtb2RlbCA9IGluY2x1ZGUuc291cmNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBtb2RlbCA9IGluY2x1ZGUudGFyZ2V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbW9kZWwsIGFzc29jaWF0aW9uOiBpbmNsdWRlLCBhczogaW5jbHVkZS5hcyB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaW5jbHVkZS5wcm90b3R5cGUgJiYgaW5jbHVkZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBNb2RlbCkge1xyXG4gICAgICAgIHJldHVybiB7IG1vZGVsOiBpbmNsdWRlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QoaW5jbHVkZSkpIHtcclxuICAgICAgICBpZiAoaW5jbHVkZS5hc3NvY2lhdGlvbikge1xyXG4gICAgICAgICAgaW5jbHVkZS5hc3NvY2lhdGlvbiA9IHRoaXMuX3RyYW5zZm9ybVN0cmluZ0Fzc29jaWF0aW9uKGluY2x1ZGUuYXNzb2NpYXRpb24sIHNlbGYpO1xyXG5cclxuICAgICAgICAgIGlmIChzZWxmICYmIGluY2x1ZGUuYXNzb2NpYXRpb24udGFyZ2V0Lm5hbWUgPT09IHNlbGYubmFtZSkge1xyXG4gICAgICAgICAgICBtb2RlbCA9IGluY2x1ZGUuYXNzb2NpYXRpb24uc291cmNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbW9kZWwgPSBpbmNsdWRlLmFzc29jaWF0aW9uLnRhcmdldDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIWluY2x1ZGUubW9kZWwpIGluY2x1ZGUubW9kZWwgPSBtb2RlbDtcclxuICAgICAgICAgIGlmICghaW5jbHVkZS5hcykgaW5jbHVkZS5hcyA9IGluY2x1ZGUuYXNzb2NpYXRpb24uYXM7XHJcblxyXG4gICAgICAgICAgdGhpcy5fY29uZm9ybUluY2x1ZGVzKGluY2x1ZGUsIG1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiBpbmNsdWRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGluY2x1ZGUubW9kZWwpIHtcclxuICAgICAgICAgIHRoaXMuX2NvbmZvcm1JbmNsdWRlcyhpbmNsdWRlLCBpbmNsdWRlLm1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiBpbmNsdWRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGluY2x1ZGUuYWxsKSB7XHJcbiAgICAgICAgICB0aGlzLl9jb25mb3JtSW5jbHVkZXMoaW5jbHVkZSk7XHJcbiAgICAgICAgICByZXR1cm4gaW5jbHVkZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luY2x1ZGUgdW5leHBlY3RlZC4gRWxlbWVudCBoYXMgdG8gYmUgZWl0aGVyIGEgTW9kZWwsIGFuIEFzc29jaWF0aW9uIG9yIGFuIG9iamVjdC4nKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfZXhwYW5kSW5jbHVkZUFsbEVsZW1lbnQoaW5jbHVkZXMsIGluY2x1ZGUpIHtcclxuICAgIC8vIGNoZWNrICdhbGwnIGF0dHJpYnV0ZSBwcm92aWRlZCBpcyB2YWxpZFxyXG4gICAgbGV0IGFsbCA9IGluY2x1ZGUuYWxsO1xyXG4gICAgZGVsZXRlIGluY2x1ZGUuYWxsO1xyXG5cclxuICAgIGlmIChhbGwgIT09IHRydWUpIHtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFsbCkpIHtcclxuICAgICAgICBhbGwgPSBbYWxsXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IHtcclxuICAgICAgICBCZWxvbmdzVG86IHRydWUsXHJcbiAgICAgICAgSGFzT25lOiB0cnVlLFxyXG4gICAgICAgIEhhc01hbnk6IHRydWUsXHJcbiAgICAgICAgT25lOiBbJ0JlbG9uZ3NUbycsICdIYXNPbmUnXSxcclxuICAgICAgICBIYXM6IFsnSGFzT25lJywgJ0hhc01hbnknXSxcclxuICAgICAgICBNYW55OiBbJ0hhc01hbnknXVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB0eXBlID0gYWxsW2ldO1xyXG4gICAgICAgIGlmICh0eXBlID09PSAnQWxsJykge1xyXG4gICAgICAgICAgYWxsID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdHlwZXMgPSB2YWxpZFR5cGVzW3R5cGVdO1xyXG4gICAgICAgIGlmICghdHlwZXMpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuRWFnZXJMb2FkaW5nRXJyb3IoYGluY2x1ZGUgYWxsICcke3R5cGV9JyBpcyBub3QgdmFsaWQgLSBtdXN0IGJlIEJlbG9uZ3NUbywgSGFzT25lLCBIYXNNYW55LCBPbmUsIEhhcywgTWFueSBvciBBbGxgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlcyAhPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgLy8gcmVwbGFjZSB0eXBlIHBsYWNlaG9sZGVyIGUuZy4gJ09uZScgd2l0aCBpdHMgY29uc3RpdHVlbnQgdHlwZXMgZS5nLiAnSGFzT25lJywgJ0JlbG9uZ3NUbydcclxuICAgICAgICAgIGFsbC5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICBpLS07XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHR5cGVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGlmICghYWxsLmluY2x1ZGVzKHR5cGVzW2pdKSkge1xyXG4gICAgICAgICAgICAgIGFsbC51bnNoaWZ0KHR5cGVzW2pdKTtcclxuICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgYWxsIGFzc29jaWF0aW9ucyBvZiB0eXBlcyBzcGVjaWZpZWQgdG8gaW5jbHVkZXNcclxuICAgIGNvbnN0IG5lc3RlZCA9IGluY2x1ZGUubmVzdGVkO1xyXG4gICAgaWYgKG5lc3RlZCkge1xyXG4gICAgICBkZWxldGUgaW5jbHVkZS5uZXN0ZWQ7XHJcblxyXG4gICAgICBpZiAoIWluY2x1ZGUuaW5jbHVkZSkge1xyXG4gICAgICAgIGluY2x1ZGUuaW5jbHVkZSA9IFtdO1xyXG4gICAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGluY2x1ZGUuaW5jbHVkZSkpIHtcclxuICAgICAgICBpbmNsdWRlLmluY2x1ZGUgPSBbaW5jbHVkZS5pbmNsdWRlXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVzZWQgPSBbXTtcclxuICAgIChmdW5jdGlvbiBhZGRBbGxJbmNsdWRlcyhwYXJlbnQsIGluY2x1ZGVzKSB7XHJcbiAgICAgIF8uZm9yRWFjaChwYXJlbnQuYXNzb2NpYXRpb25zLCBhc3NvY2lhdGlvbiA9PiB7XHJcbiAgICAgICAgaWYgKGFsbCAhPT0gdHJ1ZSAmJiAhYWxsLmluY2x1ZGVzKGFzc29jaWF0aW9uLmFzc29jaWF0aW9uVHlwZSkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGlmIG1vZGVsIGFscmVhZHkgaW5jbHVkZWQsIGFuZCBza2lwIGlmIHNvXHJcbiAgICAgICAgY29uc3QgbW9kZWwgPSBhc3NvY2lhdGlvbi50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgYXMgPSBhc3NvY2lhdGlvbi5vcHRpb25zLmFzO1xyXG5cclxuICAgICAgICBjb25zdCBwcmVkaWNhdGUgPSB7IG1vZGVsIH07XHJcbiAgICAgICAgaWYgKGFzKSB7XHJcbiAgICAgICAgICAvLyBXZSBvbmx5IGFkZCAnYXMnIHRvIHRoZSBwcmVkaWNhdGUgaWYgaXQgYWN0dWFsbHkgZXhpc3RzXHJcbiAgICAgICAgICBwcmVkaWNhdGUuYXMgPSBhcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLnNvbWUoaW5jbHVkZXMsIHByZWRpY2F0ZSkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNraXAgaWYgcmVjdXJzaW5nIG92ZXIgYSBtb2RlbCBhbHJlYWR5IG5lc3RlZFxyXG4gICAgICAgIGlmIChuZXN0ZWQgJiYgdXNlZC5pbmNsdWRlcyhtb2RlbCkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdXNlZC5wdXNoKHBhcmVudCk7XHJcblxyXG4gICAgICAgIC8vIGluY2x1ZGUgdGhpcyBtb2RlbFxyXG4gICAgICAgIGNvbnN0IHRoaXNJbmNsdWRlID0gVXRpbHMuY2xvbmVEZWVwKGluY2x1ZGUpO1xyXG4gICAgICAgIHRoaXNJbmNsdWRlLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgaWYgKGFzKSB7XHJcbiAgICAgICAgICB0aGlzSW5jbHVkZS5hcyA9IGFzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbmNsdWRlcy5wdXNoKHRoaXNJbmNsdWRlKTtcclxuXHJcbiAgICAgICAgLy8gcnVuIHJlY3Vyc2l2ZWx5IGlmIG5lc3RlZFxyXG4gICAgICAgIGlmIChuZXN0ZWQpIHtcclxuICAgICAgICAgIGFkZEFsbEluY2x1ZGVzKG1vZGVsLCB0aGlzSW5jbHVkZS5pbmNsdWRlKTtcclxuICAgICAgICAgIGlmICh0aGlzSW5jbHVkZS5pbmNsdWRlLmxlbmd0aCA9PT0gMCkgZGVsZXRlIHRoaXNJbmNsdWRlLmluY2x1ZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdXNlZC5wb3AoKTtcclxuICAgIH0pKHRoaXMsIGluY2x1ZGVzKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzKG9wdGlvbnMsIHRhYmxlTmFtZXMpIHtcclxuICAgIGlmICghb3B0aW9ucy5tb2RlbCkgb3B0aW9ucy5tb2RlbCA9IHRoaXM7XHJcblxyXG4gICAgdGFibGVOYW1lcyA9IHRhYmxlTmFtZXMgfHwge307XHJcbiAgICBvcHRpb25zLmluY2x1ZGVOYW1lcyA9IFtdO1xyXG4gICAgb3B0aW9ucy5pbmNsdWRlTWFwID0ge307XHJcblxyXG4gICAgLyogTGVnYWN5ICovXHJcbiAgICBvcHRpb25zLmhhc1NpbmdsZUFzc29jaWF0aW9uID0gZmFsc2U7XHJcbiAgICBvcHRpb25zLmhhc011bHRpQXNzb2NpYXRpb24gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIW9wdGlvbnMucGFyZW50KSB7XHJcbiAgICAgIG9wdGlvbnMudG9wTW9kZWwgPSBvcHRpb25zLm1vZGVsO1xyXG4gICAgICBvcHRpb25zLnRvcExpbWl0ID0gb3B0aW9ucy5saW1pdDtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25zLmluY2x1ZGUgPSBvcHRpb25zLmluY2x1ZGUubWFwKGluY2x1ZGUgPT4ge1xyXG4gICAgICBpbmNsdWRlID0gdGhpcy5fY29uZm9ybUluY2x1ZGUoaW5jbHVkZSk7XHJcbiAgICAgIGluY2x1ZGUucGFyZW50ID0gb3B0aW9ucztcclxuICAgICAgaW5jbHVkZS50b3BMaW1pdCA9IG9wdGlvbnMudG9wTGltaXQ7XHJcblxyXG4gICAgICB0aGlzLl92YWxpZGF0ZUluY2x1ZGVkRWxlbWVudC5jYWxsKG9wdGlvbnMubW9kZWwsIGluY2x1ZGUsIHRhYmxlTmFtZXMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgaWYgKGluY2x1ZGUuZHVwbGljYXRpbmcgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGluY2x1ZGUuZHVwbGljYXRpbmcgPSBpbmNsdWRlLmFzc29jaWF0aW9uLmlzTXVsdGlBc3NvY2lhdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaW5jbHVkZS5oYXNEdXBsaWNhdGluZyA9IGluY2x1ZGUuaGFzRHVwbGljYXRpbmcgfHwgaW5jbHVkZS5kdXBsaWNhdGluZztcclxuICAgICAgaW5jbHVkZS5oYXNSZXF1aXJlZCA9IGluY2x1ZGUuaGFzUmVxdWlyZWQgfHwgaW5jbHVkZS5yZXF1aXJlZDtcclxuXHJcbiAgICAgIG9wdGlvbnMuaGFzRHVwbGljYXRpbmcgPSBvcHRpb25zLmhhc0R1cGxpY2F0aW5nIHx8IGluY2x1ZGUuaGFzRHVwbGljYXRpbmc7XHJcbiAgICAgIG9wdGlvbnMuaGFzUmVxdWlyZWQgPSBvcHRpb25zLmhhc1JlcXVpcmVkIHx8IGluY2x1ZGUucmVxdWlyZWQ7XHJcblxyXG4gICAgICBvcHRpb25zLmhhc1doZXJlID0gb3B0aW9ucy5oYXNXaGVyZSB8fCBpbmNsdWRlLmhhc1doZXJlIHx8ICEhaW5jbHVkZS53aGVyZTtcclxuICAgICAgcmV0dXJuIGluY2x1ZGU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGluY2x1ZGUgb2Ygb3B0aW9ucy5pbmNsdWRlKSB7XHJcbiAgICAgIGluY2x1ZGUuaGFzUGFyZW50V2hlcmUgPSBvcHRpb25zLmhhc1BhcmVudFdoZXJlIHx8ICEhb3B0aW9ucy53aGVyZTtcclxuICAgICAgaW5jbHVkZS5oYXNQYXJlbnRSZXF1aXJlZCA9IG9wdGlvbnMuaGFzUGFyZW50UmVxdWlyZWQgfHwgISFvcHRpb25zLnJlcXVpcmVkO1xyXG5cclxuICAgICAgaWYgKGluY2x1ZGUuc3ViUXVlcnkgIT09IGZhbHNlICYmIG9wdGlvbnMuaGFzRHVwbGljYXRpbmcgJiYgb3B0aW9ucy50b3BMaW1pdCkge1xyXG4gICAgICAgIGlmIChpbmNsdWRlLmR1cGxpY2F0aW5nKSB7XHJcbiAgICAgICAgICBpbmNsdWRlLnN1YlF1ZXJ5ID0gZmFsc2U7XHJcbiAgICAgICAgICBpbmNsdWRlLnN1YlF1ZXJ5RmlsdGVyID0gaW5jbHVkZS5oYXNSZXF1aXJlZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW5jbHVkZS5zdWJRdWVyeSA9IGluY2x1ZGUuaGFzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBpbmNsdWRlLnN1YlF1ZXJ5RmlsdGVyID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGluY2x1ZGUuc3ViUXVlcnkgPSBpbmNsdWRlLnN1YlF1ZXJ5IHx8IGZhbHNlO1xyXG4gICAgICAgIGlmIChpbmNsdWRlLmR1cGxpY2F0aW5nKSB7XHJcbiAgICAgICAgICBpbmNsdWRlLnN1YlF1ZXJ5RmlsdGVyID0gaW5jbHVkZS5zdWJRdWVyeTtcclxuICAgICAgICAgIGluY2x1ZGUuc3ViUXVlcnkgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW5jbHVkZS5zdWJRdWVyeUZpbHRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgaW5jbHVkZS5zdWJRdWVyeSA9IGluY2x1ZGUuc3ViUXVlcnkgfHwgaW5jbHVkZS5oYXNQYXJlbnRSZXF1aXJlZCAmJiBpbmNsdWRlLmhhc1JlcXVpcmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgb3B0aW9ucy5pbmNsdWRlTWFwW2luY2x1ZGUuYXNdID0gaW5jbHVkZTtcclxuICAgICAgb3B0aW9ucy5pbmNsdWRlTmFtZXMucHVzaChpbmNsdWRlLmFzKTtcclxuXHJcbiAgICAgIC8vIFNldCB0b3AgbGV2ZWwgb3B0aW9uc1xyXG4gICAgICBpZiAob3B0aW9ucy50b3BNb2RlbCA9PT0gb3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLnN1YlF1ZXJ5ID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50b3BMaW1pdCkge1xyXG4gICAgICAgIGlmIChpbmNsdWRlLnN1YlF1ZXJ5KSB7XHJcbiAgICAgICAgICBvcHRpb25zLnN1YlF1ZXJ5ID0gaW5jbHVkZS5zdWJRdWVyeTtcclxuICAgICAgICB9IGVsc2UgaWYgKGluY2x1ZGUuaGFzRHVwbGljYXRpbmcpIHtcclxuICAgICAgICAgIG9wdGlvbnMuc3ViUXVlcnkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLyogTGVnYWN5ICovXHJcbiAgICAgIG9wdGlvbnMuaGFzSW5jbHVkZVdoZXJlID0gb3B0aW9ucy5oYXNJbmNsdWRlV2hlcmUgfHwgaW5jbHVkZS5oYXNJbmNsdWRlV2hlcmUgfHwgISFpbmNsdWRlLndoZXJlO1xyXG4gICAgICBvcHRpb25zLmhhc0luY2x1ZGVSZXF1aXJlZCA9IG9wdGlvbnMuaGFzSW5jbHVkZVJlcXVpcmVkIHx8IGluY2x1ZGUuaGFzSW5jbHVkZVJlcXVpcmVkIHx8ICEhaW5jbHVkZS5yZXF1aXJlZDtcclxuXHJcbiAgICAgIGlmIChpbmNsdWRlLmFzc29jaWF0aW9uLmlzTXVsdGlBc3NvY2lhdGlvbiB8fCBpbmNsdWRlLmhhc011bHRpQXNzb2NpYXRpb24pIHtcclxuICAgICAgICBvcHRpb25zLmhhc011bHRpQXNzb2NpYXRpb24gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpbmNsdWRlLmFzc29jaWF0aW9uLmlzU2luZ2xlQXNzb2NpYXRpb24gfHwgaW5jbHVkZS5oYXNTaW5nbGVBc3NvY2lhdGlvbikge1xyXG4gICAgICAgIG9wdGlvbnMuaGFzU2luZ2xlQXNzb2NpYXRpb24gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMudG9wTW9kZWwgPT09IG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5zdWJRdWVyeSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIG9wdGlvbnMuc3ViUXVlcnkgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIF92YWxpZGF0ZUluY2x1ZGVkRWxlbWVudChpbmNsdWRlLCB0YWJsZU5hbWVzLCBvcHRpb25zKSB7XHJcbiAgICB0YWJsZU5hbWVzW2luY2x1ZGUubW9kZWwuZ2V0VGFibGVOYW1lKCldID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoaW5jbHVkZS5hdHRyaWJ1dGVzICYmICFvcHRpb25zLnJhdykge1xyXG4gICAgICBpbmNsdWRlLm1vZGVsLl9leHBhbmRBdHRyaWJ1dGVzKGluY2x1ZGUpO1xyXG5cclxuICAgICAgaW5jbHVkZS5vcmlnaW5hbEF0dHJpYnV0ZXMgPSB0aGlzLl9pbmplY3REZXBlbmRlbnRWaXJ0dWFsQXR0cmlidXRlcyhpbmNsdWRlLmF0dHJpYnV0ZXMpO1xyXG5cclxuICAgICAgaW5jbHVkZSA9IFV0aWxzLm1hcEZpbmRlck9wdGlvbnMoaW5jbHVkZSwgaW5jbHVkZS5tb2RlbCk7XHJcblxyXG4gICAgICBpZiAoaW5jbHVkZS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xyXG4gICAgICAgIF8uZWFjaChpbmNsdWRlLm1vZGVsLnByaW1hcnlLZXlzLCAoYXR0ciwga2V5KSA9PiB7XHJcbiAgICAgICAgICAvLyBJbmNsdWRlIHRoZSBwcmltYXJ5IGtleSBpZiBpdCdzIG5vdCBhbHJlYWR5IGluY2x1ZGVkIC0gdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGUgcGsgbWlnaHQgYmUgYWxpYXNlZCAoZHVlIHRvIGEgLmZpZWxkIHByb3ApXHJcbiAgICAgICAgICBpZiAoIWluY2x1ZGUuYXR0cmlidXRlcy5zb21lKGluY2x1ZGVBdHRyID0+IHtcclxuICAgICAgICAgICAgaWYgKGF0dHIuZmllbGQgIT09IGtleSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGluY2x1ZGVBdHRyKSAmJiBpbmNsdWRlQXR0clswXSA9PT0gYXR0ci5maWVsZCAmJiBpbmNsdWRlQXR0clsxXSA9PT0ga2V5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpbmNsdWRlQXR0ciA9PT0ga2V5O1xyXG4gICAgICAgICAgfSkpIHtcclxuICAgICAgICAgICAgaW5jbHVkZS5hdHRyaWJ1dGVzLnVuc2hpZnQoa2V5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5jbHVkZSA9IFV0aWxzLm1hcEZpbmRlck9wdGlvbnMoaW5jbHVkZSwgaW5jbHVkZS5tb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHNldWRvIGluY2x1ZGUganVzdCBuZWVkZWQgdGhlIGF0dHJpYnV0ZSBsb2dpYywgcmV0dXJuXHJcbiAgICBpZiAoaW5jbHVkZS5fcHNldWRvKSB7XHJcbiAgICAgIGluY2x1ZGUuYXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKGluY2x1ZGUubW9kZWwudGFibGVBdHRyaWJ1dGVzKTtcclxuICAgICAgcmV0dXJuIFV0aWxzLm1hcEZpbmRlck9wdGlvbnMoaW5jbHVkZSwgaW5jbHVkZS5tb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgTW9kZWwgaXMgYWN0dWFsbHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXNzZWQgTW9kZWwgLSBvciBpdCdzIGEgcHNldWRvIGluY2x1ZGVcclxuICAgIGNvbnN0IGFzc29jaWF0aW9uID0gaW5jbHVkZS5hc3NvY2lhdGlvbiB8fCB0aGlzLl9nZXRJbmNsdWRlZEFzc29jaWF0aW9uKGluY2x1ZGUubW9kZWwsIGluY2x1ZGUuYXMpO1xyXG5cclxuICAgIGluY2x1ZGUuYXNzb2NpYXRpb24gPSBhc3NvY2lhdGlvbjtcclxuICAgIGluY2x1ZGUuYXMgPSBhc3NvY2lhdGlvbi5hcztcclxuXHJcbiAgICAvLyBJZiB0aHJvdWdoLCB3ZSBjcmVhdGUgYSBwc2V1ZG8gY2hpbGQgaW5jbHVkZSwgdG8gZWFzZSBvdXIgcGFyc2luZyBsYXRlciBvblxyXG4gICAgaWYgKGluY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaCAmJiBPYmplY3QoaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsKSA9PT0gaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsKSB7XHJcbiAgICAgIGlmICghaW5jbHVkZS5pbmNsdWRlKSBpbmNsdWRlLmluY2x1ZGUgPSBbXTtcclxuICAgICAgY29uc3QgdGhyb3VnaCA9IGluY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaDtcclxuXHJcbiAgICAgIGluY2x1ZGUudGhyb3VnaCA9IF8uZGVmYXVsdHMoaW5jbHVkZS50aHJvdWdoIHx8IHt9LCB7XHJcbiAgICAgICAgbW9kZWw6IHRocm91Z2gubW9kZWwsXHJcbiAgICAgICAgYXM6IHRocm91Z2gubW9kZWwubmFtZSxcclxuICAgICAgICBhc3NvY2lhdGlvbjoge1xyXG4gICAgICAgICAgaXNTaW5nbGVBc3NvY2lhdGlvbjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX3BzZXVkbzogdHJ1ZSxcclxuICAgICAgICBwYXJlbnQ6IGluY2x1ZGVcclxuICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgaWYgKHRocm91Z2guc2NvcGUpIHtcclxuICAgICAgICBpbmNsdWRlLnRocm91Z2gud2hlcmUgPSBpbmNsdWRlLnRocm91Z2gud2hlcmUgPyB7IFtPcC5hbmRdOiBbaW5jbHVkZS50aHJvdWdoLndoZXJlLCB0aHJvdWdoLnNjb3BlXSB9IDogdGhyb3VnaC5zY29wZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaW5jbHVkZS5pbmNsdWRlLnB1c2goaW5jbHVkZS50aHJvdWdoKTtcclxuICAgICAgdGFibGVOYW1lc1t0aHJvdWdoLnRhYmxlTmFtZV0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluY2x1ZGUubW9kZWwgbWF5IGJlIHRoZSBtYWluIG1vZGVsLCB3aGlsZSB0aGUgYXNzb2NpYXRpb24gdGFyZ2V0IG1heSBiZSBzY29wZWQgLSB0aHVzIHdlIG5lZWQgdG8gbG9vayBhdCBhc3NvY2lhdGlvbi50YXJnZXQvc291cmNlXHJcbiAgICBsZXQgbW9kZWw7XHJcbiAgICBpZiAoaW5jbHVkZS5tb2RlbC5zY29wZWQgPT09IHRydWUpIHtcclxuICAgICAgLy8gSWYgdGhlIHBhc3NlZCBtb2RlbCBpcyBhbHJlYWR5IHNjb3BlZCwga2VlcCB0aGF0XHJcbiAgICAgIG1vZGVsID0gaW5jbHVkZS5tb2RlbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIG1vZGVsIHRoYXQgd2FzIG9yaWdpbmFsbHkgcGFzc2VkIHRvIHRoZSBhc3NvY2lhdGlvblxyXG4gICAgICBtb2RlbCA9IGluY2x1ZGUuYXNzb2NpYXRpb24udGFyZ2V0Lm5hbWUgPT09IGluY2x1ZGUubW9kZWwubmFtZSA/IGluY2x1ZGUuYXNzb2NpYXRpb24udGFyZ2V0IDogaW5jbHVkZS5hc3NvY2lhdGlvbi5zb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kZWwuX2luamVjdFNjb3BlKGluY2x1ZGUpO1xyXG5cclxuICAgIC8vIFRoaXMgY2hlY2sgc2hvdWxkIGhhcHBlbiBhZnRlciBpbmplY3RpbmcgdGhlIHNjb3BlLCBzaW5jZSB0aGUgc2NvcGUgbWF5IGNvbnRhaW4gYSAuYXR0cmlidXRlc1xyXG4gICAgaWYgKCFpbmNsdWRlLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgaW5jbHVkZS5hdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMoaW5jbHVkZS5tb2RlbC50YWJsZUF0dHJpYnV0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGluY2x1ZGUgPSBVdGlscy5tYXBGaW5kZXJPcHRpb25zKGluY2x1ZGUsIGluY2x1ZGUubW9kZWwpO1xyXG5cclxuICAgIGlmIChpbmNsdWRlLnJlcXVpcmVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgaW5jbHVkZS5yZXF1aXJlZCA9ICEhaW5jbHVkZS53aGVyZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5jbHVkZS5hc3NvY2lhdGlvbi5zY29wZSkge1xyXG4gICAgICBpbmNsdWRlLndoZXJlID0gaW5jbHVkZS53aGVyZSA/IHsgW09wLmFuZF06IFtpbmNsdWRlLndoZXJlLCBpbmNsdWRlLmFzc29jaWF0aW9uLnNjb3BlXSB9IDogaW5jbHVkZS5hc3NvY2lhdGlvbi5zY29wZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5jbHVkZS5saW1pdCAmJiBpbmNsdWRlLnNlcGFyYXRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgaW5jbHVkZS5zZXBhcmF0ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluY2x1ZGUuc2VwYXJhdGUgPT09IHRydWUpIHtcclxuICAgICAgaWYgKCEoaW5jbHVkZS5hc3NvY2lhdGlvbiBpbnN0YW5jZW9mIEhhc01hbnkpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IEhhc01hbnkgYXNzb2NpYXRpb25zIHN1cHBvcnQgaW5jbHVkZS5zZXBhcmF0ZScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbmNsdWRlLmR1cGxpY2F0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzXHJcbiAgICAgICAgJiYgb3B0aW9ucy5hdHRyaWJ1dGVzLmxlbmd0aFxyXG4gICAgICAgICYmICFfLmZsYXR0ZW5EZXB0aChvcHRpb25zLmF0dHJpYnV0ZXMsIDIpLmluY2x1ZGVzKGFzc29jaWF0aW9uLnNvdXJjZUtleSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzLnB1c2goYXNzb2NpYXRpb24uc291cmNlS2V5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGluY2x1ZGUuYXR0cmlidXRlc1xyXG4gICAgICAgICYmIGluY2x1ZGUuYXR0cmlidXRlcy5sZW5ndGhcclxuICAgICAgICAmJiAhXy5mbGF0dGVuRGVwdGgoaW5jbHVkZS5hdHRyaWJ1dGVzLCAyKS5pbmNsdWRlcyhhc3NvY2lhdGlvbi5mb3JlaWduS2V5KVxyXG4gICAgICApIHtcclxuICAgICAgICBpbmNsdWRlLmF0dHJpYnV0ZXMucHVzaChhc3NvY2lhdGlvbi5mb3JlaWduS2V5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFZhbGlkYXRlIGNoaWxkIGluY2x1ZGVzXHJcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluY2x1ZGUsICdpbmNsdWRlJykpIHtcclxuICAgICAgdGhpcy5fdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzLmNhbGwoaW5jbHVkZS5tb2RlbCwgaW5jbHVkZSwgdGFibGVOYW1lcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGluY2x1ZGU7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2dldEluY2x1ZGVkQXNzb2NpYXRpb24odGFyZ2V0TW9kZWwsIHRhcmdldEFsaWFzKSB7XHJcbiAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSB0aGlzLmdldEFzc29jaWF0aW9ucyh0YXJnZXRNb2RlbCk7XHJcbiAgICBsZXQgYXNzb2NpYXRpb24gPSBudWxsO1xyXG4gICAgaWYgKGFzc29jaWF0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5FYWdlckxvYWRpbmdFcnJvcihgJHt0YXJnZXRNb2RlbC5uYW1lfSBpcyBub3QgYXNzb2NpYXRlZCB0byAke3RoaXMubmFtZX0hYCk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXNzb2NpYXRpb25zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBhc3NvY2lhdGlvbiA9IHRoaXMuZ2V0QXNzb2NpYXRpb25Gb3JBbGlhcyh0YXJnZXRNb2RlbCwgdGFyZ2V0QWxpYXMpO1xyXG4gICAgICBpZiAoYXNzb2NpYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gYXNzb2NpYXRpb247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhcmdldEFsaWFzKSB7XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdBbGlhc2VzID0gdGhpcy5nZXRBc3NvY2lhdGlvbnModGFyZ2V0TW9kZWwpLm1hcChhc3NvY2lhdGlvbiA9PiBhc3NvY2lhdGlvbi5hcyk7XHJcbiAgICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5FYWdlckxvYWRpbmdFcnJvcihgJHt0YXJnZXRNb2RlbC5uYW1lfSBpcyBhc3NvY2lhdGVkIHRvICR7dGhpcy5uYW1lfSB1c2luZyBhbiBhbGlhcy4gYCArXHJcbiAgICAgICAgICBgWW91J3ZlIGluY2x1ZGVkIGFuIGFsaWFzICgke3RhcmdldEFsaWFzfSksIGJ1dCBpdCBkb2VzIG5vdCBtYXRjaCB0aGUgYWxpYXMoZXMpIGRlZmluZWQgaW4geW91ciBhc3NvY2lhdGlvbiAoJHtleGlzdGluZ0FsaWFzZXMuam9pbignLCAnKX0pLmApO1xyXG4gICAgICB9XHJcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuRWFnZXJMb2FkaW5nRXJyb3IoYCR7dGFyZ2V0TW9kZWwubmFtZX0gaXMgYXNzb2NpYXRlZCB0byAke3RoaXMubmFtZX0gdXNpbmcgYW4gYWxpYXMuIGAgK1xyXG4gICAgICAgICdZb3UgbXVzdCB1c2UgdGhlIFxcJ2FzXFwnIGtleXdvcmQgdG8gc3BlY2lmeSB0aGUgYWxpYXMgd2l0aGluIHlvdXIgaW5jbHVkZSBzdGF0ZW1lbnQuJyk7XHJcbiAgICB9XHJcbiAgICBhc3NvY2lhdGlvbiA9IHRoaXMuZ2V0QXNzb2NpYXRpb25Gb3JBbGlhcyh0YXJnZXRNb2RlbCwgdGFyZ2V0QWxpYXMpO1xyXG4gICAgaWYgKCFhc3NvY2lhdGlvbikge1xyXG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLkVhZ2VyTG9hZGluZ0Vycm9yKGAke3RhcmdldE1vZGVsLm5hbWV9IGlzIGFzc29jaWF0ZWQgdG8gJHt0aGlzLm5hbWV9IG11bHRpcGxlIHRpbWVzLiBgICtcclxuICAgICAgICAnVG8gaWRlbnRpZnkgdGhlIGNvcnJlY3QgYXNzb2NpYXRpb24sIHlvdSBtdXN0IHVzZSB0aGUgXFwnYXNcXCcga2V5d29yZCB0byBzcGVjaWZ5IHRoZSBhbGlhcyBvZiB0aGUgYXNzb2NpYXRpb24geW91IHdhbnQgdG8gaW5jbHVkZS4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhc3NvY2lhdGlvbjtcclxuICB9XHJcblxyXG5cclxuICBzdGF0aWMgX2V4cGFuZEluY2x1ZGVBbGwob3B0aW9ucykge1xyXG4gICAgY29uc3QgaW5jbHVkZXMgPSBvcHRpb25zLmluY2x1ZGU7XHJcbiAgICBpZiAoIWluY2x1ZGVzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaW5jbHVkZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGluY2x1ZGUgPSBpbmNsdWRlc1tpbmRleF07XHJcblxyXG4gICAgICBpZiAoaW5jbHVkZS5hbGwpIHtcclxuICAgICAgICBpbmNsdWRlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIGluZGV4LS07XHJcblxyXG4gICAgICAgIHRoaXMuX2V4cGFuZEluY2x1ZGVBbGxFbGVtZW50KGluY2x1ZGVzLCBpbmNsdWRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluY2x1ZGVzLmZvckVhY2goaW5jbHVkZSA9PiB7XHJcbiAgICAgIHRoaXMuX2V4cGFuZEluY2x1ZGVBbGwuY2FsbChpbmNsdWRlLm1vZGVsLCBpbmNsdWRlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIF9jb25mb3JtSW5kZXgoaW5kZXgpIHtcclxuICAgIGlmICghaW5kZXguZmllbGRzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBcImZpZWxkc1wiIHByb3BlcnR5IGZvciBpbmRleCBkZWZpbml0aW9uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5kZXggPSBfLmRlZmF1bHRzKGluZGV4LCB7XHJcbiAgICAgIHR5cGU6ICcnLFxyXG4gICAgICBwYXJzZXI6IG51bGxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpbmRleC50eXBlICYmIGluZGV4LnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ3VuaXF1ZScpIHtcclxuICAgICAgaW5kZXgudW5pcXVlID0gdHJ1ZTtcclxuICAgICAgZGVsZXRlIGluZGV4LnR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxuXHJcblxyXG4gIHN0YXRpYyBfdW5pcUluY2x1ZGVzKG9wdGlvbnMpIHtcclxuICAgIGlmICghb3B0aW9ucy5pbmNsdWRlKSByZXR1cm47XHJcblxyXG4gICAgb3B0aW9ucy5pbmNsdWRlID0gXyhvcHRpb25zLmluY2x1ZGUpXHJcbiAgICAgIC5ncm91cEJ5KGluY2x1ZGUgPT4gYCR7aW5jbHVkZS5tb2RlbCAmJiBpbmNsdWRlLm1vZGVsLm5hbWV9LSR7aW5jbHVkZS5hc31gKVxyXG4gICAgICAubWFwKGluY2x1ZGVzID0+IHRoaXMuX2Fzc2lnbk9wdGlvbnMoLi4uaW5jbHVkZXMpKVxyXG4gICAgICAudmFsdWUoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfYmFzZU1lcmdlKC4uLmFyZ3MpIHtcclxuICAgIF8uYXNzaWduV2l0aCguLi5hcmdzKTtcclxuICAgIHRoaXMuX2NvbmZvcm1JbmNsdWRlcyhhcmdzWzBdLCB0aGlzKTtcclxuICAgIHRoaXMuX3VuaXFJbmNsdWRlcyhhcmdzWzBdKTtcclxuICAgIHJldHVybiBhcmdzWzBdO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIF9tZXJnZUZ1bmN0aW9uKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5KSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmpWYWx1ZSkgJiYgQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIF8udW5pb24ob2JqVmFsdWUsIHNyY1ZhbHVlKTtcclxuICAgIH1cclxuICAgIGlmIChrZXkgPT09ICd3aGVyZScgfHwga2V5ID09PSAnaGF2aW5nJykge1xyXG4gICAgICBpZiAoc3JjVmFsdWUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcclxuICAgICAgICBzcmNWYWx1ZSA9IHsgW09wLmFuZF06IHNyY1ZhbHVlIH07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChvYmpWYWx1ZSkgJiYgXy5pc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9ialZhbHVlLCBzcmNWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYXR0cmlidXRlcycgJiYgXy5pc1BsYWluT2JqZWN0KG9ialZhbHVlKSAmJiBfLmlzUGxhaW5PYmplY3Qoc3JjVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBfLmFzc2lnbldpdGgob2JqVmFsdWUsIHNyY1ZhbHVlLCAob2JqVmFsdWUsIHNyY1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqVmFsdWUpICYmIEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gXy51bmlvbihvYmpWYWx1ZSwgc3JjVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBJZiB3ZSBoYXZlIGEgcG9zc2libGUgb2JqZWN0L2FycmF5IHRvIGNsb25lLCB3ZSB0cnkgaXQuXHJcbiAgICAvLyBPdGhlcndpc2UsIHdlIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUgd2hlbiBpdCdzIG5vdCB1bmRlZmluZWQsXHJcbiAgICAvLyBvciB0aGUgcmVzdWx0aW5nIG9iamVjdCBpbiB0aGF0IGNhc2UuXHJcbiAgICBpZiAoc3JjVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIFV0aWxzLmNsb25lRGVlcChzcmNWYWx1ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3JjVmFsdWUgPT09IHVuZGVmaW5lZCA/IG9ialZhbHVlIDogc3JjVmFsdWU7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2Fzc2lnbk9wdGlvbnMoLi4uYXJncykge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jhc2VNZXJnZSguLi5hcmdzLCB0aGlzLl9tZXJnZUZ1bmN0aW9uKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfZGVmYXVsdHNPcHRpb25zKHRhcmdldCwgb3B0cykge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jhc2VNZXJnZSh0YXJnZXQsIG9wdHMsIChzcmNWYWx1ZSwgb2JqVmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbWVyZ2VGdW5jdGlvbihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgYSBtb2RlbCwgcmVwcmVzZW50aW5nIGEgdGFibGUgaW4gdGhlIERCLCB3aXRoIGF0dHJpYnV0ZXMgYW5kIG9wdGlvbnMuXHJcbiAgICpcclxuICAgKiBUaGUgdGFibGUgY29sdW1ucyBhcmUgZGVmaW5lZCBieSB0aGUgaGFzaCB0aGF0IGlzIGdpdmVuIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgKiBFYWNoIGF0dHJpYnV0ZSBvZiB0aGUgaGFzaCByZXByZXNlbnRzIGEgY29sdW1uLlxyXG4gICAqXHJcbiAgICogRm9yIG1vcmUgYWJvdXQgPGEgaHJlZj1cIi9tYW51YWwvdHV0b3JpYWwvbW9kZWxzLWRlZmluaXRpb24uaHRtbCN2YWxpZGF0aW9uc1wiLz5WYWxpZGF0aW9uczwvYT5cclxuICAgKlxyXG4gICAqIE1vcmUgZXhhbXBsZXMsIDxhIGhyZWY9XCIvbWFudWFsL3R1dG9yaWFsL21vZGVscy1kZWZpbml0aW9uLmh0bWxcIi8+TW9kZWwgRGVmaW5pdGlvbjwvYT5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogUHJvamVjdC5pbml0KHtcclxuICAgKiAgIGNvbHVtbkE6IHtcclxuICAgKiAgICAgdHlwZTogU2VxdWVsaXplLkJPT0xFQU4sXHJcbiAgICogICAgIHZhbGlkYXRlOiB7XHJcbiAgICogICAgICAgaXM6IFsnW2Etel0nLCdpJ10sICAgICAgICAvLyB3aWxsIG9ubHkgYWxsb3cgbGV0dGVyc1xyXG4gICAqICAgICAgIG1heDogMjMsICAgICAgICAgICAgICAgICAgLy8gb25seSBhbGxvdyB2YWx1ZXMgPD0gMjNcclxuICAgKiAgICAgICBpc0luOiB7XHJcbiAgICogICAgICAgICBhcmdzOiBbWydlbicsICd6aCddXSxcclxuICAgKiAgICAgICAgIG1zZzogXCJNdXN0IGJlIEVuZ2xpc2ggb3IgQ2hpbmVzZVwiXHJcbiAgICogICAgICAgfVxyXG4gICAqICAgICB9LFxyXG4gICAqICAgICBmaWVsZDogJ2NvbHVtbl9hJ1xyXG4gICAqICAgICAvLyBPdGhlciBhdHRyaWJ1dGVzIGhlcmVcclxuICAgKiAgIH0sXHJcbiAgICogICBjb2x1bW5COiBTZXF1ZWxpemUuU1RSSU5HLFxyXG4gICAqICAgY29sdW1uQzogJ01ZIFZFUlkgT1dOIENPTFVNTiBUWVBFJ1xyXG4gICAqIH0sIHtzZXF1ZWxpemV9KVxyXG4gICAqXHJcbiAgICogc2VxdWVsaXplLm1vZGVscy5tb2RlbE5hbWUgLy8gVGhlIG1vZGVsIHdpbGwgbm93IGJlIGF2YWlsYWJsZSBpbiBtb2RlbHMgdW5kZXIgdGhlIGNsYXNzIG5hbWVcclxuICAgKlxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgRGF0YVR5cGVzfVxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgSG9va3N9XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIEFuIG9iamVjdCwgd2hlcmUgZWFjaCBhdHRyaWJ1dGUgaXMgYSBjb2x1bW4gb2YgdGhlIHRhYmxlLiBFYWNoIGNvbHVtbiBjYW4gYmUgZWl0aGVyIGEgRGF0YVR5cGUsIGEgc3RyaW5nIG9yIGEgdHlwZS1kZXNjcmlwdGlvbiBvYmplY3QsIHdpdGggdGhlIHByb3BlcnRpZXMgZGVzY3JpYmVkIGJlbG93OlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfERhdGFUeXBlc3xPYmplY3R9IGF0dHJpYnV0ZXMuY29sdW1uIFRoZSBkZXNjcmlwdGlvbiBvZiBhIGRhdGFiYXNlIGNvbHVtblxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfERhdGFUeXBlc30gICAgICAgIGF0dHJpYnV0ZXMuY29sdW1uLnR5cGUgQSBzdHJpbmcgb3IgYSBkYXRhIHR5cGVcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4uYWxsb3dOdWxsPXRydWVdIElmIGZhbHNlLCB0aGUgY29sdW1uIHdpbGwgaGF2ZSBhIE5PVCBOVUxMIGNvbnN0cmFpbnQsIGFuZCBhIG5vdCBudWxsIHZhbGlkYXRpb24gd2lsbCBiZSBydW4gYmVmb3JlIGFuIGluc3RhbmNlIGlzIHNhdmVkLlxyXG4gICAqIEBwYXJhbSB7YW55fSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbHVtbi5kZWZhdWx0VmFsdWU9bnVsbF0gQSBsaXRlcmFsIGRlZmF1bHQgdmFsdWUsIGEgSmF2YVNjcmlwdCBmdW5jdGlvbiwgb3IgYW4gU1FMIGZ1bmN0aW9uIChzZWUgYHNlcXVlbGl6ZS5mbmApXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gICAgICAgICAgW2F0dHJpYnV0ZXMuY29sdW1uLnVuaXF1ZT1mYWxzZV0gSWYgdHJ1ZSwgdGhlIGNvbHVtbiB3aWxsIGdldCBhIHVuaXF1ZSBjb25zdHJhaW50LiBJZiBhIHN0cmluZyBpcyBwcm92aWRlZCwgdGhlIGNvbHVtbiB3aWxsIGJlIHBhcnQgb2YgYSBjb21wb3NpdGUgdW5pcXVlIGluZGV4LiBJZiBtdWx0aXBsZSBjb2x1bW5zIGhhdmUgdGhlIHNhbWUgc3RyaW5nLCB0aGV5IHdpbGwgYmUgcGFydCBvZiB0aGUgc2FtZSB1bmlxdWUgaW5kZXhcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4ucHJpbWFyeUtleT1mYWxzZV0gSWYgdHJ1ZSwgdGhpcyBhdHRyaWJ1dGUgd2lsbCBiZSBtYXJrZWQgYXMgcHJpbWFyeSBrZXlcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4uZmllbGQ9bnVsbF0gSWYgc2V0LCBzZXF1ZWxpemUgd2lsbCBtYXAgdGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGEgZGlmZmVyZW50IG5hbWUgaW4gdGhlIGRhdGFiYXNlXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29sdW1uLmF1dG9JbmNyZW1lbnQ9ZmFsc2VdIElmIHRydWUsIHRoaXMgY29sdW1uIHdpbGwgYmUgc2V0IHRvIGF1dG8gaW5jcmVtZW50XHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29sdW1uLmF1dG9JbmNyZW1lbnRJZGVudGl0eT1mYWxzZV0gSWYgdHJ1ZSwgY29tYmluZWQgd2l0aCBhdXRvSW5jcmVtZW50PXRydWUsIHdpbGwgdXNlIFBvc3RncmVzIGBHRU5FUkFURUQgQlkgREVGQVVMVCBBUyBJREVOVElUWWAgaW5zdGVhZCBvZiBgU0VSSUFMYC4gUG9zdGdyZXMgMTArIG9ubHkuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29sdW1uLmNvbW1lbnQ9bnVsbF0gQ29tbWVudCBmb3IgdGhpcyBjb2x1bW5cclxuICAgKiBAcGFyYW0ge3N0cmluZ3xNb2RlbH0gICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4ucmVmZXJlbmNlcz1udWxsXSBBbiBvYmplY3Qgd2l0aCByZWZlcmVuY2UgY29uZmlndXJhdGlvbnNcclxuICAgKiBAcGFyYW0ge3N0cmluZ3xNb2RlbH0gICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4ucmVmZXJlbmNlcy5tb2RlbF0gSWYgdGhpcyBjb2x1bW4gcmVmZXJlbmNlcyBhbm90aGVyIHRhYmxlLCBwcm92aWRlIGl0IGhlcmUgYXMgYSBNb2RlbCwgb3IgYSBzdHJpbmdcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4ucmVmZXJlbmNlcy5rZXk9J2lkJ10gVGhlIGNvbHVtbiBvZiB0aGUgZm9yZWlnbiB0YWJsZSB0aGF0IHRoaXMgY29sdW1uIHJlZmVyZW5jZXNcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4ub25VcGRhdGVdIFdoYXQgc2hvdWxkIGhhcHBlbiB3aGVuIHRoZSByZWZlcmVuY2VkIGtleSBpcyB1cGRhdGVkLiBPbmUgb2YgQ0FTQ0FERSwgUkVTVFJJQ1QsIFNFVCBERUZBVUxULCBTRVQgTlVMTCBvciBOTyBBQ1RJT05cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4ub25EZWxldGVdIFdoYXQgc2hvdWxkIGhhcHBlbiB3aGVuIHRoZSByZWZlcmVuY2VkIGtleSBpcyBkZWxldGVkLiBPbmUgb2YgQ0FTQ0FERSwgUkVTVFJJQ1QsIFNFVCBERUZBVUxULCBTRVQgTlVMTCBvciBOTyBBQ1RJT05cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4uZ2V0XSBQcm92aWRlIGEgY3VzdG9tIGdldHRlciBmb3IgdGhpcyBjb2x1bW4uIFVzZSBgdGhpcy5nZXREYXRhVmFsdWUoU3RyaW5nKWAgdG8gbWFuaXB1bGF0ZSB0aGUgdW5kZXJseWluZyB2YWx1ZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29sdW1uLnNldF0gUHJvdmlkZSBhIGN1c3RvbSBzZXR0ZXIgZm9yIHRoaXMgY29sdW1uLiBVc2UgYHRoaXMuc2V0RGF0YVZhbHVlKFN0cmluZywgVmFsdWUpYCB0byBtYW5pcHVsYXRlIHRoZSB1bmRlcmx5aW5nIHZhbHVlcy5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4udmFsaWRhdGVdIEFuIG9iamVjdCBvZiB2YWxpZGF0aW9ucyB0byBleGVjdXRlIGZvciB0aGlzIGNvbHVtbiBldmVyeSB0aW1lIHRoZSBtb2RlbCBpcyBzYXZlZC4gQ2FuIGJlIGVpdGhlciB0aGUgbmFtZSBvZiBhIHZhbGlkYXRpb24gcHJvdmlkZWQgYnkgdmFsaWRhdG9yLmpzLCBhIHZhbGlkYXRpb24gZnVuY3Rpb24gcHJvdmlkZWQgYnkgZXh0ZW5kaW5nIHZhbGlkYXRvci5qcyAoc2VlIHRoZSBgREFPVmFsaWRhdG9yYCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzKSwgb3IgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbi4gQ3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGFuZCB0aGUgaW5zdGFuY2UgaXRzZWxmIGFzIHRoZSBgdGhpc2AgYmluZGluZywgYW5kIGNhbiBwb3NzaWJseSB0YWtlIGEgc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LCB0byBzaWduYWwgdGhhdCB0aGV5IGFyZSBhc3luY2hyb25vdXMuIElmIHRoZSB2YWxpZGF0b3IgaXMgc3luYywgaXQgc2hvdWxkIHRocm93IGluIHRoZSBjYXNlIG9mIGEgZmFpbGVkIHZhbGlkYXRpb247IGlmIGl0IGlzIGFzeW5jLCB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBlcnJvciB0ZXh0LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgICAgIG9wdGlvbnMgVGhlc2Ugb3B0aW9ucyBhcmUgbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHQgZGVmaW5lIG9wdGlvbnMgcHJvdmlkZWQgdG8gdGhlIFNlcXVlbGl6ZSBjb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2VxdWVsaXplIERlZmluZSB0aGUgc2VxdWVsaXplIGluc3RhbmNlIHRvIGF0dGFjaCB0byB0aGUgbmV3IE1vZGVsLiBUaHJvdyBlcnJvciBpZiBub25lIGlzIHByb3ZpZGVkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLm1vZGVsTmFtZV0gU2V0IG5hbWUgb2YgdGhlIG1vZGVsLiBCeSBkZWZhdWx0IGl0cyBzYW1lIGFzIENsYXNzIG5hbWUuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMuZGVmYXVsdFNjb3BlPXt9XSBEZWZpbmUgdGhlIGRlZmF1bHQgc2VhcmNoIHNjb3BlIHRvIHVzZSBmb3IgdGhpcyBtb2RlbC4gU2NvcGVzIGhhdmUgdGhlIHNhbWUgZm9ybSBhcyB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gZmluZCAvIGZpbmRBbGxcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBbb3B0aW9ucy5zY29wZXNdIE1vcmUgc2NvcGVzLCBkZWZpbmVkIGluIHRoZSBzYW1lIHdheSBhcyBkZWZhdWx0U2NvcGUgYWJvdmUuIFNlZSBgTW9kZWwuc2NvcGVgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyBzY29wZXMgYXJlIGRlZmluZWQsIGFuZCB3aGF0IHlvdSBjYW4gZG8gd2l0aCB0aGVtXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgW29wdGlvbnMub21pdE51bGxdIERvbid0IHBlcnNpc3QgbnVsbCB2YWx1ZXMuIFRoaXMgbWVhbnMgdGhhdCBhbGwgY29sdW1ucyB3aXRoIG51bGwgdmFsdWVzIHdpbGwgbm90IGJlIHNhdmVkXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgW29wdGlvbnMudGltZXN0YW1wcz10cnVlXSBBZGRzIGNyZWF0ZWRBdCBhbmQgdXBkYXRlZEF0IHRpbWVzdGFtcHMgdG8gdGhlIG1vZGVsLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgIFtvcHRpb25zLnBhcmFub2lkPWZhbHNlXSBDYWxsaW5nIGBkZXN0cm95YCB3aWxsIG5vdCBkZWxldGUgdGhlIG1vZGVsLCBidXQgaW5zdGVhZCBzZXQgYSBgZGVsZXRlZEF0YCB0aW1lc3RhbXAgaWYgdGhpcyBpcyB0cnVlLiBOZWVkcyBgdGltZXN0YW1wcz10cnVlYCB0byB3b3JrXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgW29wdGlvbnMudW5kZXJzY29yZWQ9ZmFsc2VdIEFkZCB1bmRlcnNjb3JlZCBmaWVsZCB0byBhbGwgYXR0cmlidXRlcywgdGhpcyBjb3ZlcnMgdXNlciBkZWZpbmVkIGF0dHJpYnV0ZXMsIHRpbWVzdGFtcHMgYW5kIGZvcmVpZ24ga2V5cy4gV2lsbCBub3QgYWZmZWN0IGF0dHJpYnV0ZXMgd2l0aCBleHBsaWNpdGx5IHNldCBgZmllbGRgIG9wdGlvblxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgIFtvcHRpb25zLmZyZWV6ZVRhYmxlTmFtZT1mYWxzZV0gSWYgZnJlZXplVGFibGVOYW1lIGlzIHRydWUsIHNlcXVlbGl6ZSB3aWxsIG5vdCB0cnkgdG8gYWx0ZXIgdGhlIG1vZGVsIG5hbWUgdG8gZ2V0IHRoZSB0YWJsZSBuYW1lLiBPdGhlcndpc2UsIHRoZSBtb2RlbCBuYW1lIHdpbGwgYmUgcGx1cmFsaXplZFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLm5hbWVdIEFuIG9iamVjdCB3aXRoIHR3byBhdHRyaWJ1dGVzLCBgc2luZ3VsYXJgIGFuZCBgcGx1cmFsYCwgd2hpY2ggYXJlIHVzZWQgd2hlbiB0aGlzIG1vZGVsIGlzIGFzc29jaWF0ZWQgdG8gb3RoZXJzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLm5hbWUuc2luZ3VsYXI9VXRpbHMuc2luZ3VsYXJpemUobW9kZWxOYW1lKV0gU2luZ3VsYXIgbmFtZSBmb3IgbW9kZWxcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbb3B0aW9ucy5uYW1lLnBsdXJhbD1VdGlscy5wbHVyYWxpemUobW9kZWxOYW1lKV0gUGx1cmFsIG5hbWUgZm9yIG1vZGVsXHJcbiAgICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSAgICAgICAgICAgW29wdGlvbnMuaW5kZXhlc10gaW5kZXhlcyBkZWZpbml0aW9uc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluZGV4ZXNbXS5uYW1lXSBUaGUgbmFtZSBvZiB0aGUgaW5kZXguIERlZmF1bHRzIHRvIG1vZGVsIG5hbWUgKyBfICsgZmllbGRzIGNvbmNhdGVuYXRlZFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluZGV4ZXNbXS50eXBlXSBJbmRleCB0eXBlLiBPbmx5IHVzZWQgYnkgbXlzcWwuIE9uZSBvZiBgVU5JUVVFYCwgYEZVTExURVhUYCBhbmQgYFNQQVRJQUxgXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5kZXhlc1tdLnVzaW5nXSBUaGUgbWV0aG9kIHRvIGNyZWF0ZSB0aGUgaW5kZXggYnkgKGBVU0lOR2Agc3RhdGVtZW50IGluIFNRTCkuIEJUUkVFIGFuZCBIQVNIIGFyZSBzdXBwb3J0ZWQgYnkgbXlzcWwgYW5kIHBvc3RncmVzLCBhbmQgcG9zdGdyZXMgYWRkaXRpb25hbGx5IHN1cHBvcnRzIEdJU1QgYW5kIEdJTi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbmRleGVzW10ub3BlcmF0b3JdIFNwZWNpZnkgaW5kZXggb3BlcmF0b3IuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5kZXhlc1tdLnVuaXF1ZT1mYWxzZV0gU2hvdWxkIHRoZSBpbmRleCBieSB1bmlxdWU/IENhbiBhbHNvIGJlIHRyaWdnZXJlZCBieSBzZXR0aW5nIHR5cGUgdG8gYFVOSVFVRWBcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbmRleGVzW10uY29uY3VycmVudGx5PWZhbHNlXSBQb3N0Z3Jlc1NRTCB3aWxsIGJ1aWxkIHRoZSBpbmRleCB3aXRob3V0IHRha2luZyBhbnkgd3JpdGUgbG9ja3MuIFBvc3RncmVzIG9ubHlcclxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZ3xPYmplY3Q+fSAgICBbb3B0aW9ucy5pbmRleGVzW10uZmllbGRzXSBBbiBhcnJheSBvZiB0aGUgZmllbGRzIHRvIGluZGV4LiBFYWNoIGZpZWxkIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgZmllbGQsIGEgc2VxdWVsaXplIG9iamVjdCAoZS5nIGBzZXF1ZWxpemUuZm5gKSwgb3IgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOiBgYXR0cmlidXRlYCAoZmllbGQgbmFtZSksIGBsZW5ndGhgIChjcmVhdGUgYSBwcmVmaXggaW5kZXggb2YgbGVuZ3RoIGNoYXJzKSwgYG9yZGVyYCAodGhlIGRpcmVjdGlvbiB0aGUgY29sdW1uIHNob3VsZCBiZSBzb3J0ZWQgaW4pLCBgY29sbGF0ZWAgKHRoZSBjb2xsYXRpb24gKHNvcnQgb3JkZXIpIGZvciB0aGUgY29sdW1uKVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59ICAgICAgICAgIFtvcHRpb25zLmNyZWF0ZWRBdF0gT3ZlcnJpZGUgdGhlIG5hbWUgb2YgdGhlIGNyZWF0ZWRBdCBhdHRyaWJ1dGUgaWYgYSBzdHJpbmcgaXMgcHJvdmlkZWQsIG9yIGRpc2FibGUgaXQgaWYgZmFsc2UuIFRpbWVzdGFtcHMgbXVzdCBiZSB0cnVlLiBVbmRlcnNjb3JlZCBmaWVsZCB3aWxsIGJlIHNldCB3aXRoIHVuZGVyc2NvcmVkIHNldHRpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gICAgICAgICAgW29wdGlvbnMudXBkYXRlZEF0XSBPdmVycmlkZSB0aGUgbmFtZSBvZiB0aGUgdXBkYXRlZEF0IGF0dHJpYnV0ZSBpZiBhIHN0cmluZyBpcyBwcm92aWRlZCwgb3IgZGlzYWJsZSBpdCBpZiBmYWxzZS4gVGltZXN0YW1wcyBtdXN0IGJlIHRydWUuIFVuZGVyc2NvcmVkIGZpZWxkIHdpbGwgYmUgc2V0IHdpdGggdW5kZXJzY29yZWQgc2V0dGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ3xib29sZWFufSAgICAgICAgICBbb3B0aW9ucy5kZWxldGVkQXRdIE92ZXJyaWRlIHRoZSBuYW1lIG9mIHRoZSBkZWxldGVkQXQgYXR0cmlidXRlIGlmIGEgc3RyaW5nIGlzIHByb3ZpZGVkLCBvciBkaXNhYmxlIGl0IGlmIGZhbHNlLiBUaW1lc3RhbXBzIG11c3QgYmUgdHJ1ZS4gVW5kZXJzY29yZWQgZmllbGQgd2lsbCBiZSBzZXQgd2l0aCB1bmRlcnNjb3JlZCBzZXR0aW5nLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLnRhYmxlTmFtZV0gRGVmYXVsdHMgdG8gcGx1cmFsaXplZCBtb2RlbCBuYW1lLCB1bmxlc3MgZnJlZXplVGFibGVOYW1lIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgaXQgdXNlcyBtb2RlbCBuYW1lIHZlcmJhdGltXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMuc2NoZW1hPSdwdWJsaWMnXSBzY2hlbWFcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbb3B0aW9ucy5lbmdpbmVdIFNwZWNpZnkgZW5naW5lIGZvciBtb2RlbCdzIHRhYmxlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMuY2hhcnNldF0gU3BlY2lmeSBjaGFyc2V0IGZvciBtb2RlbCdzIHRhYmxlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMuY29tbWVudF0gU3BlY2lmeSBjb21tZW50IGZvciBtb2RlbCdzIHRhYmxlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMuY29sbGF0ZV0gU3BlY2lmeSBjb2xsYXRpb24gZm9yIG1vZGVsJ3MgdGFibGVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbml0aWFsQXV0b0luY3JlbWVudF0gU2V0IHRoZSBpbml0aWFsIEFVVE9fSU5DUkVNRU5UIHZhbHVlIGZvciB0aGUgdGFibGUgaW4gTXlTUUwuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaG9va3NdIEFuIG9iamVjdCBvZiBob29rIGZ1bmN0aW9uIHRoYXQgYXJlIGNhbGxlZCBiZWZvcmUgYW5kIGFmdGVyIGNlcnRhaW4gbGlmZWN5Y2xlIGV2ZW50cy4gVGhlIHBvc3NpYmxlIGhvb2tzIGFyZTogYmVmb3JlVmFsaWRhdGUsIGFmdGVyVmFsaWRhdGUsIHZhbGlkYXRpb25GYWlsZWQsIGJlZm9yZUJ1bGtDcmVhdGUsIGJlZm9yZUJ1bGtEZXN0cm95LCBiZWZvcmVCdWxrVXBkYXRlLCBiZWZvcmVDcmVhdGUsIGJlZm9yZURlc3Ryb3ksIGJlZm9yZVVwZGF0ZSwgYWZ0ZXJDcmVhdGUsIGJlZm9yZVNhdmUsIGFmdGVyRGVzdHJveSwgYWZ0ZXJVcGRhdGUsIGFmdGVyQnVsa0NyZWF0ZSwgYWZ0ZXJTYXZlLCBhZnRlckJ1bGtEZXN0cm95IGFuZCBhZnRlckJ1bGtVcGRhdGUuIFNlZSBIb29rcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob29rIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc2lnbmF0dXJlcy4gRWFjaCBwcm9wZXJ0eSBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24sIG9yIGFuIGFycmF5IG9mIGZ1bmN0aW9ucy5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBbb3B0aW9ucy52YWxpZGF0ZV0gQW4gb2JqZWN0IG9mIG1vZGVsIHdpZGUgdmFsaWRhdGlvbnMuIFZhbGlkYXRpb25zIGhhdmUgYWNjZXNzIHRvIGFsbCBtb2RlbCB2YWx1ZXMgdmlhIGB0aGlzYC4gSWYgdGhlIHZhbGlkYXRvciBmdW5jdGlvbiB0YWtlcyBhbiBhcmd1bWVudCwgaXQgaXMgYXNzdW1lZCB0byBiZSBhc3luYywgYW5kIGlzIGNhbGxlZCB3aXRoIGEgY2FsbGJhY2sgdGhhdCBhY2NlcHRzIGFuIG9wdGlvbmFsIGVycm9yLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge01vZGVsfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBpbml0KGF0dHJpYnV0ZXMsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgaWYgKCFvcHRpb25zLnNlcXVlbGl6ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNlcXVlbGl6ZSBpbnN0YW5jZSBwYXNzZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlcXVlbGl6ZSA9IG9wdGlvbnMuc2VxdWVsaXplO1xyXG5cclxuICAgIGNvbnN0IGdsb2JhbE9wdGlvbnMgPSB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zO1xyXG5cclxuICAgIG9wdGlvbnMgPSBVdGlscy5tZXJnZShfLmNsb25lRGVlcChnbG9iYWxPcHRpb25zLmRlZmluZSksIG9wdGlvbnMpO1xyXG5cclxuICAgIGlmICghb3B0aW9ucy5tb2RlbE5hbWUpIHtcclxuICAgICAgb3B0aW9ucy5tb2RlbE5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IFV0aWxzLm1lcmdlKHtcclxuICAgICAgbmFtZToge1xyXG4gICAgICAgIHBsdXJhbDogVXRpbHMucGx1cmFsaXplKG9wdGlvbnMubW9kZWxOYW1lKSxcclxuICAgICAgICBzaW5ndWxhcjogVXRpbHMuc2luZ3VsYXJpemUob3B0aW9ucy5tb2RlbE5hbWUpXHJcbiAgICAgIH0sXHJcbiAgICAgIGluZGV4ZXM6IFtdLFxyXG4gICAgICBvbWl0TnVsbDogZ2xvYmFsT3B0aW9ucy5vbWl0TnVsbCxcclxuICAgICAgc2NoZW1hOiBnbG9iYWxPcHRpb25zLnNjaGVtYVxyXG4gICAgfSwgb3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5zZXF1ZWxpemUucnVuSG9va3MoJ2JlZm9yZURlZmluZScsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpO1xyXG5cclxuICAgIGlmIChvcHRpb25zLm1vZGVsTmFtZSAhPT0gdGhpcy5uYW1lKSB7XHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbmFtZScsIHsgdmFsdWU6IG9wdGlvbnMubW9kZWxOYW1lIH0pO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIG9wdGlvbnMubW9kZWxOYW1lO1xyXG5cclxuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICB0aW1lc3RhbXBzOiB0cnVlLFxyXG4gICAgICB2YWxpZGF0ZToge30sXHJcbiAgICAgIGZyZWV6ZVRhYmxlTmFtZTogZmFsc2UsXHJcbiAgICAgIHVuZGVyc2NvcmVkOiBmYWxzZSxcclxuICAgICAgcGFyYW5vaWQ6IGZhbHNlLFxyXG4gICAgICByZWplY3RPbkVtcHR5OiBmYWxzZSxcclxuICAgICAgd2hlcmVDb2xsZWN0aW9uOiBudWxsLFxyXG4gICAgICBzY2hlbWE6IG51bGwsXHJcbiAgICAgIHNjaGVtYURlbGltaXRlcjogJycsXHJcbiAgICAgIGRlZmF1bHRTY29wZToge30sXHJcbiAgICAgIHNjb3Blczoge30sXHJcbiAgICAgIGluZGV4ZXM6IFtdXHJcbiAgICB9LCBvcHRpb25zKTtcclxuXHJcbiAgICAvLyBpZiB5b3UgY2FsbCBcImRlZmluZVwiIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZSBtb2RlbE5hbWUsIGRvIG5vdCBjbHV0dGVyIHRoZSBmYWN0b3J5XHJcbiAgICBpZiAodGhpcy5zZXF1ZWxpemUuaXNEZWZpbmVkKHRoaXMubmFtZSkpIHtcclxuICAgICAgdGhpcy5zZXF1ZWxpemUubW9kZWxNYW5hZ2VyLnJlbW92ZU1vZGVsKHRoaXMuc2VxdWVsaXplLm1vZGVsTWFuYWdlci5nZXRNb2RlbCh0aGlzLm5hbWUpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFzc29jaWF0aW9ucyA9IHt9O1xyXG4gICAgdGhpcy5fc2V0dXBIb29rcyhvcHRpb25zLmhvb2tzKTtcclxuXHJcbiAgICB0aGlzLnVuZGVyc2NvcmVkID0gdGhpcy5vcHRpb25zLnVuZGVyc2NvcmVkO1xyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLnRhYmxlTmFtZSkge1xyXG4gICAgICB0aGlzLnRhYmxlTmFtZSA9IHRoaXMub3B0aW9ucy5mcmVlemVUYWJsZU5hbWUgPyB0aGlzLm5hbWUgOiBVdGlscy51bmRlcnNjb3JlZElmKFV0aWxzLnBsdXJhbGl6ZSh0aGlzLm5hbWUpLCB0aGlzLnVuZGVyc2NvcmVkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGFibGVOYW1lID0gdGhpcy5vcHRpb25zLnRhYmxlTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zY2hlbWEgPSB0aGlzLm9wdGlvbnMuc2NoZW1hO1xyXG4gICAgdGhpcy5fc2NoZW1hRGVsaW1pdGVyID0gdGhpcy5vcHRpb25zLnNjaGVtYURlbGltaXRlcjtcclxuXHJcbiAgICAvLyBlcnJvciBjaGVjayBvcHRpb25zXHJcbiAgICBfLmVhY2gob3B0aW9ucy52YWxpZGF0ZSwgKHZhbGlkYXRvciwgdmFsaWRhdG9yVHlwZSkgPT4ge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGF0dHJpYnV0ZXMsIHZhbGlkYXRvclR5cGUpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIG1vZGVsIHZhbGlkYXRvciBmdW5jdGlvbiBtdXN0IG5vdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgYSBmaWVsZC4gTW9kZWw6ICR7dGhpcy5uYW1lfSwgZmllbGQvdmFsaWRhdGlvbiBuYW1lOiAke3ZhbGlkYXRvclR5cGV9YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZW1iZXJzIG9mIHRoZSB2YWxpZGF0ZSBvcHRpb24gbXVzdCBiZSBmdW5jdGlvbnMuIE1vZGVsOiAke3RoaXMubmFtZX0sIGVycm9yIHdpdGggdmFsaWRhdGUgbWVtYmVyICR7dmFsaWRhdG9yVHlwZX1gKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yYXdBdHRyaWJ1dGVzID0gXy5tYXBWYWx1ZXMoYXR0cmlidXRlcywgKGF0dHJpYnV0ZSwgbmFtZSkgPT4ge1xyXG4gICAgICBhdHRyaWJ1dGUgPSB0aGlzLnNlcXVlbGl6ZS5ub3JtYWxpemVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcclxuXHJcbiAgICAgIGlmIChhdHRyaWJ1dGUudHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgZGF0YXR5cGUgZm9yIGF0dHJpYnV0ZSBcIiR7dGhpcy5uYW1lfS4ke25hbWV9XCJgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGF0dHJpYnV0ZS5hbGxvd051bGwgIT09IGZhbHNlICYmIF8uZ2V0KGF0dHJpYnV0ZSwgJ3ZhbGlkYXRlLm5vdE51bGwnKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkZWZpbml0aW9uIGZvciBcIiR7dGhpcy5uYW1lfS4ke25hbWV9XCIsIFwibm90TnVsbFwiIHZhbGlkYXRvciBpcyBvbmx5IGFsbG93ZWQgd2l0aCBcImFsbG93TnVsbDpmYWxzZVwiYCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChfLmdldChhdHRyaWJ1dGUsICdyZWZlcmVuY2VzLm1vZGVsLnByb3RvdHlwZScpIGluc3RhbmNlb2YgTW9kZWwpIHtcclxuICAgICAgICBhdHRyaWJ1dGUucmVmZXJlbmNlcy5tb2RlbCA9IGF0dHJpYnV0ZS5yZWZlcmVuY2VzLm1vZGVsLmdldFRhYmxlTmFtZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYXR0cmlidXRlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdGFibGVOYW1lID0gdGhpcy5nZXRUYWJsZU5hbWUoKTtcclxuICAgIHRoaXMuX2luZGV4ZXMgPSB0aGlzLm9wdGlvbnMuaW5kZXhlc1xyXG4gICAgICAubWFwKGluZGV4ID0+IFV0aWxzLm5hbWVJbmRleCh0aGlzLl9jb25mb3JtSW5kZXgoaW5kZXgpLCB0YWJsZU5hbWUpKTtcclxuXHJcbiAgICB0aGlzLnByaW1hcnlLZXlzID0ge307XHJcbiAgICB0aGlzLl9yZWFkT25seUF0dHJpYnV0ZXMgPSBuZXcgU2V0KCk7XHJcbiAgICB0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzID0ge307XHJcblxyXG4gICAgLy8gc2V0dXAgbmFtZXMgb2YgdGltZXN0YW1wIGF0dHJpYnV0ZXNcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudGltZXN0YW1wcykge1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNyZWF0ZWRBdCAhPT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmNyZWF0ZWRBdCA9IHRoaXMub3B0aW9ucy5jcmVhdGVkQXQgfHwgJ2NyZWF0ZWRBdCc7XHJcbiAgICAgICAgdGhpcy5fcmVhZE9ubHlBdHRyaWJ1dGVzLmFkZCh0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmNyZWF0ZWRBdCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy51cGRhdGVkQXQgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy51cGRhdGVkQXQgPSB0aGlzLm9wdGlvbnMudXBkYXRlZEF0IHx8ICd1cGRhdGVkQXQnO1xyXG4gICAgICAgIHRoaXMuX3JlYWRPbmx5QXR0cmlidXRlcy5hZGQodGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy51cGRhdGVkQXQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucGFyYW5vaWQgJiYgdGhpcy5vcHRpb25zLmRlbGV0ZWRBdCAhPT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdCA9IHRoaXMub3B0aW9ucy5kZWxldGVkQXQgfHwgJ2RlbGV0ZWRBdCc7XHJcbiAgICAgICAgdGhpcy5fcmVhZE9ubHlBdHRyaWJ1dGVzLmFkZCh0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXR1cCBuYW1lIGZvciB2ZXJzaW9uIGF0dHJpYnV0ZVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy52ZXJzaW9uKSB7XHJcbiAgICAgIHRoaXMuX3ZlcnNpb25BdHRyaWJ1dGUgPSB0eXBlb2YgdGhpcy5vcHRpb25zLnZlcnNpb24gPT09ICdzdHJpbmcnID8gdGhpcy5vcHRpb25zLnZlcnNpb24gOiAndmVyc2lvbic7XHJcbiAgICAgIHRoaXMuX3JlYWRPbmx5QXR0cmlidXRlcy5hZGQodGhpcy5fdmVyc2lvbkF0dHJpYnV0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faGFzUmVhZE9ubHlBdHRyaWJ1dGVzID0gdGhpcy5fcmVhZE9ubHlBdHRyaWJ1dGVzLnNpemUgPiAwO1xyXG5cclxuICAgIC8vIEFkZCBoZWFkIGFuZCB0YWlsIGRlZmF1bHQgYXR0cmlidXRlcyAoaWQsIHRpbWVzdGFtcHMpXHJcbiAgICB0aGlzLl9hZGREZWZhdWx0QXR0cmlidXRlcygpO1xyXG4gICAgdGhpcy5yZWZyZXNoQXR0cmlidXRlcygpO1xyXG4gICAgdGhpcy5fZmluZEF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUoKTtcclxuXHJcbiAgICB0aGlzLl9zY29wZSA9IHRoaXMub3B0aW9ucy5kZWZhdWx0U2NvcGU7XHJcbiAgICB0aGlzLl9zY29wZU5hbWVzID0gWydkZWZhdWx0U2NvcGUnXTtcclxuXHJcbiAgICB0aGlzLnNlcXVlbGl6ZS5tb2RlbE1hbmFnZXIuYWRkTW9kZWwodGhpcyk7XHJcbiAgICB0aGlzLnNlcXVlbGl6ZS5ydW5Ib29rcygnYWZ0ZXJEZWZpbmUnLCB0aGlzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHN0YXRpYyByZWZyZXNoQXR0cmlidXRlcygpIHtcclxuICAgIGNvbnN0IGF0dHJpYnV0ZU1hbmlwdWxhdGlvbiA9IHt9O1xyXG5cclxuICAgIHRoaXMucHJvdG90eXBlLl9jdXN0b21HZXR0ZXJzID0ge307XHJcbiAgICB0aGlzLnByb3RvdHlwZS5fY3VzdG9tU2V0dGVycyA9IHt9O1xyXG5cclxuICAgIFsnZ2V0JywgJ3NldCddLmZvckVhY2godHlwZSA9PiB7XHJcbiAgICAgIGNvbnN0IG9wdCA9IGAke3R5cGV9dGVyTWV0aG9kc2A7XHJcbiAgICAgIGNvbnN0IGZ1bmNzID0gXy5jbG9uZShfLmlzT2JqZWN0KHRoaXMub3B0aW9uc1tvcHRdKSA/IHRoaXMub3B0aW9uc1tvcHRdIDoge30pO1xyXG4gICAgICBjb25zdCBfY3VzdG9tID0gdHlwZSA9PT0gJ2dldCcgPyB0aGlzLnByb3RvdHlwZS5fY3VzdG9tR2V0dGVycyA6IHRoaXMucHJvdG90eXBlLl9jdXN0b21TZXR0ZXJzO1xyXG5cclxuICAgICAgXy5lYWNoKGZ1bmNzLCAobWV0aG9kLCBhdHRyaWJ1dGUpID0+IHtcclxuICAgICAgICBfY3VzdG9tW2F0dHJpYnV0ZV0gPSBtZXRob2Q7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSAnZ2V0Jykge1xyXG4gICAgICAgICAgZnVuY3NbYXR0cmlidXRlXSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoYXR0cmlidXRlKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlID09PSAnc2V0Jykge1xyXG4gICAgICAgICAgZnVuY3NbYXR0cmlidXRlXSA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldChhdHRyaWJ1dGUsIHZhbHVlKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIF8uZWFjaCh0aGlzLnJhd0F0dHJpYnV0ZXMsIChvcHRpb25zLCBhdHRyaWJ1dGUpID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIHR5cGUpKSB7XHJcbiAgICAgICAgICBfY3VzdG9tW2F0dHJpYnV0ZV0gPSBvcHRpb25zW3R5cGVdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdnZXQnKSB7XHJcbiAgICAgICAgICBmdW5jc1thdHRyaWJ1dGVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzZXQnKSB7XHJcbiAgICAgICAgICBmdW5jc1thdHRyaWJ1dGVdID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0KGF0dHJpYnV0ZSwgdmFsdWUpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgXy5lYWNoKGZ1bmNzLCAoZmN0LCBuYW1lKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVNYW5pcHVsYXRpb25bbmFtZV0pIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZU1hbmlwdWxhdGlvbltuYW1lXSA9IHtcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBhdHRyaWJ1dGVNYW5pcHVsYXRpb25bbmFtZV1bdHlwZV0gPSBmY3Q7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fZGF0YVR5cGVDaGFuZ2VzID0ge307XHJcbiAgICB0aGlzLl9kYXRhVHlwZVNhbml0aXplcnMgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9oYXNCb29sZWFuQXR0cmlidXRlcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5faGFzRGF0ZUF0dHJpYnV0ZXMgPSBmYWxzZTtcclxuICAgIHRoaXMuX2pzb25BdHRyaWJ1dGVzID0gbmV3IFNldCgpO1xyXG4gICAgdGhpcy5fdmlydHVhbEF0dHJpYnV0ZXMgPSBuZXcgU2V0KCk7XHJcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWVzID0ge307XHJcbiAgICB0aGlzLnByb3RvdHlwZS52YWxpZGF0b3JzID0ge307XHJcblxyXG4gICAgdGhpcy5maWVsZFJhd0F0dHJpYnV0ZXNNYXAgPSB7fTtcclxuXHJcbiAgICB0aGlzLnByaW1hcnlLZXlzID0ge307XHJcbiAgICB0aGlzLnVuaXF1ZUtleXMgPSB7fTtcclxuXHJcbiAgICBfLmVhY2godGhpcy5yYXdBdHRyaWJ1dGVzLCAoZGVmaW5pdGlvbiwgbmFtZSkgPT4ge1xyXG4gICAgICBkZWZpbml0aW9uLnR5cGUgPSB0aGlzLnNlcXVlbGl6ZS5ub3JtYWxpemVEYXRhVHlwZShkZWZpbml0aW9uLnR5cGUpO1xyXG5cclxuICAgICAgZGVmaW5pdGlvbi5Nb2RlbCA9IHRoaXM7XHJcbiAgICAgIGRlZmluaXRpb24uZmllbGROYW1lID0gbmFtZTtcclxuICAgICAgZGVmaW5pdGlvbi5fbW9kZWxBdHRyaWJ1dGUgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKGRlZmluaXRpb24uZmllbGQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGRlZmluaXRpb24uZmllbGQgPSBVdGlscy51bmRlcnNjb3JlZElmKG5hbWUsIHRoaXMudW5kZXJzY29yZWQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZGVmaW5pdGlvbi5wcmltYXJ5S2V5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5S2V5c1tuYW1lXSA9IGRlZmluaXRpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZmllbGRSYXdBdHRyaWJ1dGVzTWFwW2RlZmluaXRpb24uZmllbGRdID0gZGVmaW5pdGlvbjtcclxuXHJcbiAgICAgIGlmIChkZWZpbml0aW9uLnR5cGUuX3Nhbml0aXplKSB7XHJcbiAgICAgICAgdGhpcy5fZGF0YVR5cGVTYW5pdGl6ZXJzW25hbWVdID0gZGVmaW5pdGlvbi50eXBlLl9zYW5pdGl6ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRlZmluaXRpb24udHlwZS5faXNDaGFuZ2VkKSB7XHJcbiAgICAgICAgdGhpcy5fZGF0YVR5cGVDaGFuZ2VzW25hbWVdID0gZGVmaW5pdGlvbi50eXBlLl9pc0NoYW5nZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkZWZpbml0aW9uLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuQk9PTEVBTikge1xyXG4gICAgICAgIHRoaXMuX2hhc0Jvb2xlYW5BdHRyaWJ1dGVzID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkZWZpbml0aW9uLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuREFURSB8fCBkZWZpbml0aW9uLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuREFURU9OTFkpIHtcclxuICAgICAgICB0aGlzLl9oYXNEYXRlQXR0cmlidXRlcyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGVmaW5pdGlvbi50eXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLkpTT04pIHtcclxuICAgICAgICB0aGlzLl9qc29uQXR0cmlidXRlcy5hZGQobmFtZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGVmaW5pdGlvbi50eXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLlZJUlRVQUwpIHtcclxuICAgICAgICB0aGlzLl92aXJ0dWFsQXR0cmlidXRlcy5hZGQobmFtZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVmaW5pdGlvbiwgJ2RlZmF1bHRWYWx1ZScpKSB7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlc1tuYW1lXSA9ICgpID0+IFV0aWxzLnRvRGVmYXVsdFZhbHVlKGRlZmluaXRpb24uZGVmYXVsdFZhbHVlLCB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmluaXRpb24sICd1bmlxdWUnKSAmJiBkZWZpbml0aW9uLnVuaXF1ZSkge1xyXG4gICAgICAgIGxldCBpZHhOYW1lO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHR5cGVvZiBkZWZpbml0aW9uLnVuaXF1ZSA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZWZpbml0aW9uLnVuaXF1ZSwgJ25hbWUnKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWR4TmFtZSA9IGRlZmluaXRpb24udW5pcXVlLm5hbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5pdGlvbi51bmlxdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBpZHhOYW1lID0gZGVmaW5pdGlvbi51bmlxdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlkeE5hbWUgPSBgJHt0aGlzLnRhYmxlTmFtZX1fJHtuYW1lfV91bmlxdWVgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy51bmlxdWVLZXlzW2lkeE5hbWVdIHx8IHsgZmllbGRzOiBbXSB9O1xyXG5cclxuICAgICAgICBpZHguZmllbGRzLnB1c2goZGVmaW5pdGlvbi5maWVsZCk7XHJcbiAgICAgICAgaWR4Lm1zZyA9IGlkeC5tc2cgfHwgZGVmaW5pdGlvbi51bmlxdWUubXNnIHx8IG51bGw7XHJcbiAgICAgICAgaWR4Lm5hbWUgPSBpZHhOYW1lIHx8IGZhbHNlO1xyXG4gICAgICAgIGlkeC5jb2x1bW4gPSBuYW1lO1xyXG4gICAgICAgIGlkeC5jdXN0b21JbmRleCA9IGRlZmluaXRpb24udW5pcXVlICE9PSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnVuaXF1ZUtleXNbaWR4TmFtZV0gPSBpZHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVmaW5pdGlvbiwgJ3ZhbGlkYXRlJykpIHtcclxuICAgICAgICB0aGlzLnByb3RvdHlwZS52YWxpZGF0b3JzW25hbWVdID0gZGVmaW5pdGlvbi52YWxpZGF0ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRlZmluaXRpb24uaW5kZXggPT09IHRydWUgJiYgZGVmaW5pdGlvbi50eXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLkpTT05CKSB7XHJcbiAgICAgICAgdGhpcy5faW5kZXhlcy5wdXNoKFxyXG4gICAgICAgICAgVXRpbHMubmFtZUluZGV4KFxyXG4gICAgICAgICAgICB0aGlzLl9jb25mb3JtSW5kZXgoe1xyXG4gICAgICAgICAgICAgIGZpZWxkczogW2RlZmluaXRpb24uZmllbGQgfHwgbmFtZV0sXHJcbiAgICAgICAgICAgICAgdXNpbmc6ICdnaW4nXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB0aGlzLmdldFRhYmxlTmFtZSgpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZGVsZXRlIGRlZmluaXRpb24uaW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhIG1hcCBvZiBmaWVsZCB0byBhdHRyaWJ1dGUgbmFtZXNcclxuICAgIHRoaXMuZmllbGRBdHRyaWJ1dGVNYXAgPSBfLnJlZHVjZSh0aGlzLmZpZWxkUmF3QXR0cmlidXRlc01hcCwgKG1hcCwgdmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICBpZiAoa2V5ICE9PSB2YWx1ZS5maWVsZE5hbWUpIHtcclxuICAgICAgICBtYXBba2V5XSA9IHZhbHVlLmZpZWxkTmFtZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWFwO1xyXG4gICAgfSwge30pO1xyXG5cclxuICAgIHRoaXMuX2hhc0pzb25BdHRyaWJ1dGVzID0gISF0aGlzLl9qc29uQXR0cmlidXRlcy5zaXplO1xyXG5cclxuICAgIHRoaXMuX2hhc1ZpcnR1YWxBdHRyaWJ1dGVzID0gISF0aGlzLl92aXJ0dWFsQXR0cmlidXRlcy5zaXplO1xyXG5cclxuICAgIHRoaXMuX2hhc0RlZmF1bHRWYWx1ZXMgPSAhXy5pc0VtcHR5KHRoaXMuX2RlZmF1bHRWYWx1ZXMpO1xyXG5cclxuICAgIHRoaXMudGFibGVBdHRyaWJ1dGVzID0gXy5vbWl0QnkodGhpcy5yYXdBdHRyaWJ1dGVzLCAoX2EsIGtleSkgPT4gdGhpcy5fdmlydHVhbEF0dHJpYnV0ZXMuaGFzKGtleSkpO1xyXG5cclxuICAgIHRoaXMucHJvdG90eXBlLl9oYXNDdXN0b21HZXR0ZXJzID0gT2JqZWN0LmtleXModGhpcy5wcm90b3R5cGUuX2N1c3RvbUdldHRlcnMpLmxlbmd0aDtcclxuICAgIHRoaXMucHJvdG90eXBlLl9oYXNDdXN0b21TZXR0ZXJzID0gT2JqZWN0LmtleXModGhpcy5wcm90b3R5cGUuX2N1c3RvbVNldHRlcnMpLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYW5pcHVsYXRpb24pKSB7XHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTW9kZWwucHJvdG90eXBlLCBrZXkpKSB7XHJcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUubG9nKGBOb3Qgb3ZlcnJpZGluZyBidWlsdC1pbiBtZXRob2QgZnJvbSBtb2RlbCBhdHRyaWJ1dGU6ICR7a2V5fWApO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSwga2V5LCBhdHRyaWJ1dGVNYW5pcHVsYXRpb25ba2V5XSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm90b3R5cGUucmF3QXR0cmlidXRlcyA9IHRoaXMucmF3QXR0cmlidXRlcztcclxuICAgIHRoaXMucHJvdG90eXBlLl9pc0F0dHJpYnV0ZSA9IGtleSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wcm90b3R5cGUucmF3QXR0cmlidXRlcywga2V5KTtcclxuXHJcbiAgICAvLyBQcmltYXJ5IGtleSBjb252ZW5pZW5jZSBjb25zdGlhYmxlc1xyXG4gICAgdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKHRoaXMucHJpbWFyeUtleXMpO1xyXG4gICAgdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlID0gdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlc1swXTtcclxuICAgIGlmICh0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGUpIHtcclxuICAgICAgdGhpcy5wcmltYXJ5S2V5RmllbGQgPSB0aGlzLnJhd0F0dHJpYnV0ZXNbdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlXS5maWVsZCB8fCB0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faGFzUHJpbWFyeUtleXMgPSB0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGVzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLl9pc1ByaW1hcnlLZXkgPSBrZXkgPT4gdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlcy5pbmNsdWRlcyhrZXkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGF0dHJpYnV0ZSBmcm9tIG1vZGVsIGRlZmluaXRpb25cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgbmFtZSBvZiBhdHRyaWJ1dGUgdG8gcmVtb3ZlXHJcbiAgICovXHJcbiAgc3RhdGljIHJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpIHtcclxuICAgIGRlbGV0ZSB0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cmlidXRlXTtcclxuICAgIHRoaXMucmVmcmVzaEF0dHJpYnV0ZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN5bmMgdGhpcyBNb2RlbCB0byB0aGUgREIsIHRoYXQgaXMgY3JlYXRlIHRoZSB0YWJsZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gc3luYyBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIFNlcXVlbGl6ZSNzeW5jfSBmb3Igb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWw+fVxyXG4gICAqL1xyXG4gIHN0YXRpYyBzeW5jKG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5ob29rcyA9IG9wdGlvbnMuaG9va3MgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhIW9wdGlvbnMuaG9va3M7XHJcblxyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMudGFibGVBdHRyaWJ1dGVzO1xyXG4gICAgY29uc3QgcmF3QXR0cmlidXRlcyA9IHRoaXMuZmllbGRSYXdBdHRyaWJ1dGVzTWFwO1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoJ2JlZm9yZVN5bmMnLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb25zLmZvcmNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJvcChvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5RdWVyeUludGVyZmFjZS5jcmVhdGVUYWJsZSh0aGlzLmdldFRhYmxlTmFtZShvcHRpb25zKSwgYXR0cmlidXRlcywgb3B0aW9ucywgdGhpcykpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICBpZiAoIW9wdGlvbnMuYWx0ZXIpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtcclxuICAgICAgICAgIHRoaXMuUXVlcnlJbnRlcmZhY2UuZGVzY3JpYmVUYWJsZSh0aGlzLmdldFRhYmxlTmFtZShvcHRpb25zKSksXHJcbiAgICAgICAgICB0aGlzLlF1ZXJ5SW50ZXJmYWNlLmdldEZvcmVpZ25LZXlSZWZlcmVuY2VzRm9yVGFibGUodGhpcy5nZXRUYWJsZU5hbWUob3B0aW9ucykpXHJcbiAgICAgICAgXSlcclxuICAgICAgICAgIC50aGVuKHRhYmxlSW5mb3MgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGVJbmZvc1swXTtcclxuICAgICAgICAgICAgLy8gVXNlIGZvciBhbHRlciBmb3JlaWduIGtleXNcclxuICAgICAgICAgICAgY29uc3QgZm9yZWlnbktleVJlZmVyZW5jZXMgPSB0YWJsZUluZm9zWzFdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IFtdOyAvLyBhcnJheSBvZiBwcm9taXNlcyB0byBydW5cclxuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZENvbnN0cmFpbnRzID0ge307XHJcblxyXG4gICAgICAgICAgICBfLmVhY2goYXR0cmlidXRlcywgKGNvbHVtbkRlc2MsIGNvbHVtbk5hbWUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWNvbHVtbnNbY29sdW1uTmFtZV0gJiYgIWNvbHVtbnNbYXR0cmlidXRlc1tjb2x1bW5OYW1lXS5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaCgoKSA9PiB0aGlzLlF1ZXJ5SW50ZXJmYWNlLmFkZENvbHVtbih0aGlzLmdldFRhYmxlTmFtZShvcHRpb25zKSwgYXR0cmlidXRlc1tjb2x1bW5OYW1lXS5maWVsZCB8fCBjb2x1bW5OYW1lLCBhdHRyaWJ1dGVzW2NvbHVtbk5hbWVdKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgXy5lYWNoKGNvbHVtbnMsIChjb2x1bW5EZXNjLCBjb2x1bW5OYW1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEF0dHJpYnV0ZSA9IHJhd0F0dHJpYnV0ZXNbY29sdW1uTmFtZV07XHJcbiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50QXR0cmlidXRlKSB7XHJcbiAgICAgICAgICAgICAgICBjaGFuZ2VzLnB1c2goKCkgPT4gdGhpcy5RdWVyeUludGVyZmFjZS5yZW1vdmVDb2x1bW4odGhpcy5nZXRUYWJsZU5hbWUob3B0aW9ucyksIGNvbHVtbk5hbWUsIG9wdGlvbnMpKTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFjdXJyZW50QXR0cmlidXRlLnByaW1hcnlLZXkpIHtcclxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvcmVpZ24ga2V5cy4gSWYgaXQncyBhIGZvcmVpZ24ga2V5LCBpdCBzaG91bGQgcmVtb3ZlIGNvbnN0cmFpbnQgZmlyc3QuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gY3VycmVudEF0dHJpYnV0ZS5yZWZlcmVuY2VzO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRBdHRyaWJ1dGUucmVmZXJlbmNlcykge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRhYmFzZSA9IHRoaXMuc2VxdWVsaXplLmNvbmZpZy5kYXRhYmFzZTtcclxuICAgICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5zZXF1ZWxpemUuY29uZmlnLnNjaGVtYTtcclxuICAgICAgICAgICAgICAgICAgLy8gRmluZCBleGlzdGVkIGZvcmVpZ24ga2V5c1xyXG4gICAgICAgICAgICAgICAgICBfLmVhY2goZm9yZWlnbktleVJlZmVyZW5jZXMsIGZvcmVpZ25LZXlSZWZlcmVuY2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnROYW1lID0gZm9yZWlnbktleVJlZmVyZW5jZS5jb25zdHJhaW50TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISFjb25zdHJhaW50TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgJiYgZm9yZWlnbktleVJlZmVyZW5jZS50YWJsZUNhdGFsb2cgPT09IGRhdGFiYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAmJiAoc2NoZW1hID8gZm9yZWlnbktleVJlZmVyZW5jZS50YWJsZVNjaGVtYSA9PT0gc2NoZW1hIDogdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICYmIGZvcmVpZ25LZXlSZWZlcmVuY2UucmVmZXJlbmNlZFRhYmxlTmFtZSA9PT0gcmVmZXJlbmNlcy5tb2RlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgJiYgZm9yZWlnbktleVJlZmVyZW5jZS5yZWZlcmVuY2VkQ29sdW1uTmFtZSA9PT0gcmVmZXJlbmNlcy5rZXlcclxuICAgICAgICAgICAgICAgICAgICAgICYmIChzY2hlbWEgPyBmb3JlaWduS2V5UmVmZXJlbmNlLnJlZmVyZW5jZWRUYWJsZVNjaGVtYSA9PT0gc2NoZW1hIDogdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICYmICFyZW1vdmVkQ29uc3RyYWludHNbY29uc3RyYWludE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgY29uc3RyYWludCBvbiBmb3JlaWduIGtleXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnB1c2goKCkgPT4gdGhpcy5RdWVyeUludGVyZmFjZS5yZW1vdmVDb25zdHJhaW50KHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCBjb25zdHJhaW50TmFtZSwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZENvbnN0cmFpbnRzW2NvbnN0cmFpbnROYW1lXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaCgoKSA9PiB0aGlzLlF1ZXJ5SW50ZXJmYWNlLmNoYW5nZUNvbHVtbih0aGlzLmdldFRhYmxlTmFtZShvcHRpb25zKSwgY29sdW1uTmFtZSwgY3VycmVudEF0dHJpYnV0ZSkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmVhY2goY2hhbmdlcywgZiA9PiBmKCkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuUXVlcnlJbnRlcmZhY2Uuc2hvd0luZGV4KHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCBvcHRpb25zKSlcclxuICAgICAgLnRoZW4oaW5kZXhlcyA9PiB7XHJcbiAgICAgICAgaW5kZXhlcyA9IHRoaXMuX2luZGV4ZXMuZmlsdGVyKGl0ZW0xID0+XHJcbiAgICAgICAgICAhaW5kZXhlcy5zb21lKGl0ZW0yID0+IGl0ZW0xLm5hbWUgPT09IGl0ZW0yLm5hbWUpXHJcbiAgICAgICAgKS5zb3J0KChpbmRleDEsIGluZGV4MikgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCA9PT0gJ3Bvc3RncmVzJykge1xyXG4gICAgICAgICAgLy8gbW92ZSBjb25jdXJyZW50IGluZGV4ZXMgdG8gdGhlIGJvdHRvbSB0byBhdm9pZCB3ZWlyZCBkZWFkbG9ja3NcclxuICAgICAgICAgICAgaWYgKGluZGV4MS5jb25jdXJyZW50bHkgPT09IHRydWUpIHJldHVybiAxO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXgyLmNvbmN1cnJlbnRseSA9PT0gdHJ1ZSkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5lYWNoKGluZGV4ZXMsIGluZGV4ID0+IHRoaXMuUXVlcnlJbnRlcmZhY2UuYWRkSW5kZXgoXHJcbiAgICAgICAgICB0aGlzLmdldFRhYmxlTmFtZShvcHRpb25zKSxcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICBsb2dnaW5nOiBvcHRpb25zLmxvZ2dpbmcsXHJcbiAgICAgICAgICAgIGJlbmNobWFyazogb3B0aW9ucy5iZW5jaG1hcmssXHJcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uOiBvcHRpb25zLnRyYW5zYWN0aW9uLFxyXG4gICAgICAgICAgICBzY2hlbWE6IG9wdGlvbnMuc2NoZW1hXHJcbiAgICAgICAgICB9LCBpbmRleCksXHJcbiAgICAgICAgICB0aGlzLnRhYmxlTmFtZVxyXG4gICAgICAgICkpO1xyXG4gICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICBpZiAob3B0aW9ucy5ob29rcykge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoJ2FmdGVyU3luYycsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkucmV0dXJuKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRHJvcCB0aGUgdGFibGUgcmVwcmVzZW50ZWQgYnkgdGhpcyBNb2RlbFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnNdIGRyb3Agb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIFtvcHRpb25zLmNhc2NhZGU9ZmFsc2VdICAgQWxzbyBkcm9wIGFsbCBvYmplY3RzIGRlcGVuZGluZyBvbiB0aGlzIHRhYmxlLCBzdWNoIGFzIHZpZXdzLiBPbmx5IHdvcmtzIGluIHBvc3RncmVzXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gICBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCB3aGlsZSBydW5uaW5nIHRoZSBxdWVyeSB0byBsb2cgdGhlIHNxbC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgc3RhdGljIGRyb3Aob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMuUXVlcnlJbnRlcmZhY2UuZHJvcFRhYmxlKHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkcm9wU2NoZW1hKHNjaGVtYSkge1xyXG4gICAgcmV0dXJuIHRoaXMuUXVlcnlJbnRlcmZhY2UuZHJvcFNjaGVtYShzY2hlbWEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgYSBzY2hlbWEgdG8gdGhpcyBtb2RlbC4gRm9yIHBvc3RncmVzLCB0aGlzIHdpbGwgYWN0dWFsbHkgcGxhY2UgdGhlIHNjaGVtYSBpbiBmcm9udCBvZiB0aGUgdGFibGUgbmFtZSAtIGBcInNjaGVtYVwiLlwidGFibGVOYW1lXCJgLFxyXG4gICAqIHdoaWxlIHRoZSBzY2hlbWEgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIHRhYmxlIG5hbWUgZm9yIG15c3FsIGFuZCBzcWxpdGUgLSBgJ3NjaGVtYS50YWJsZW5hbWUnYC5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciB1c2UgY2FzZXMgd2hlcmUgdGhlIHNhbWUgbW9kZWwgaXMgbmVlZGVkIGluIG11bHRpcGxlIHNjaGVtYXMuIEluIHN1Y2ggYSB1c2UgY2FzZSBpdCBpcyBpbXBvcnRhbnRcclxuICAgKiB0byBjYWxsIGBtb2RlbC5zY2hlbWEoc2NoZW1hLCBbb3B0aW9uc10pLnN5bmMoKWAgZm9yIGVhY2ggbW9kZWwgdG8gZW5zdXJlIHRoZSBtb2RlbHMgYXJlIGNyZWF0ZWQgaW4gdGhlIGNvcnJlY3Qgc2NoZW1hLlxyXG4gICAqXHJcbiAgICogSWYgYSBzaW5nbGUgZGVmYXVsdCBzY2hlbWEgcGVyIG1vZGVsIGlzIG5lZWRlZCwgc2V0IHRoZSBgb3B0aW9ucy5zY2hlbWE9J3NjaGVtYSdgIHBhcmFtZXRlciBkdXJpbmcgdGhlIGBkZWZpbmUoKWAgY2FsbFxyXG4gICAqIGZvciB0aGUgbW9kZWwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBzY2hlbWEgVGhlIG5hbWUgb2YgdGhlIHNjaGVtYVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIFtvcHRpb25zXSBzY2hlbWEgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLnNjaGVtYURlbGltaXRlcj0nLiddIFRoZSBjaGFyYWN0ZXIocykgdGhhdCBzZXBhcmF0ZXMgdGhlIHNjaGVtYSBuYW1lIGZyb20gdGhlIHRhYmxlIG5hbWVcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nPWZhbHNlXSBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCB3aGlsZSBydW5uaW5nIHRoZSBxdWVyeSB0byBsb2cgdGhlIHNxbC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBTZXF1ZWxpemUjZGVmaW5lfSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzZXR0aW5nIGEgZGVmYXVsdCBzY2hlbWEuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7TW9kZWx9XHJcbiAgICovXHJcbiAgc3RhdGljIHNjaGVtYShzY2hlbWEsIG9wdGlvbnMpIHtcclxuXHJcbiAgICBjb25zdCBjbG9uZSA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7fTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9uZSwgJ25hbWUnLCB7IHZhbHVlOiB0aGlzLm5hbWUgfSk7XHJcblxyXG4gICAgY2xvbmUuX3NjaGVtYSA9IHNjaGVtYTtcclxuXHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY2xvbmUuX3NjaGVtYURlbGltaXRlciA9IG9wdGlvbnM7XHJcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zY2hlbWFEZWxpbWl0ZXIpIHtcclxuICAgICAgICBjbG9uZS5fc2NoZW1hRGVsaW1pdGVyID0gb3B0aW9ucy5zY2hlbWFEZWxpbWl0ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRhYmxlIG5hbWUgb2YgdGhlIG1vZGVsLCB0YWtpbmcgc2NoZW1hIGludG8gYWNjb3VudC4gVGhlIG1ldGhvZCB3aWxsIHJldHVybiBUaGUgbmFtZSBhcyBhIHN0cmluZyBpZiB0aGUgbW9kZWwgaGFzIG5vIHNjaGVtYSxcclxuICAgKiBvciBhbiBvYmplY3Qgd2l0aCBgdGFibGVOYW1lYCwgYHNjaGVtYWAgYW5kIGBkZWxpbWl0ZXJgIHByb3BlcnRpZXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfE9iamVjdH1cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0VGFibGVOYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuUXVlcnlHZW5lcmF0b3IuYWRkU2NoZW1hKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHVuLXNjb3BlZCBtb2RlbFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge01vZGVsfVxyXG4gICAqL1xyXG4gIHN0YXRpYyB1bnNjb3BlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNjb3BlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBuZXcgc2NvcGUgdG8gdGhlIG1vZGVsLiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBhZGRpbmcgc2NvcGVzIHdpdGggaW5jbHVkZXMsIHdoZW4gdGhlIG1vZGVsIHlvdSB3YW50IHRvIGluY2x1ZGUgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0aGlzIG1vZGVsIGlzIGRlZmluZWQuXHJcbiAgICpcclxuICAgKiBCeSBkZWZhdWx0IHRoaXMgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiBhIHNjb3BlIHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzLiBQYXNzIGBvdmVycmlkZTogdHJ1ZWAgaW4gdGhlIG9wdGlvbnMgb2JqZWN0IHRvIHNpbGVuY2UgdGhpcyBlcnJvci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzY29wZS4gVXNlIGBkZWZhdWx0U2NvcGVgIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNjb3BlXHJcbiAgICogQHBhcmFtIHtPYmplY3R8RnVuY3Rpb259IHNjb3BlIHNjb3BlIG9yIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgW29wdGlvbnNdIHNjb3BlIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMub3ZlcnJpZGU9ZmFsc2VdIG92ZXJyaWRlIG9sZCBzY29wZSBpZiBhbHJlYWR5IGRlZmluZWRcclxuICAgKi9cclxuICBzdGF0aWMgYWRkU2NvcGUobmFtZSwgc2NvcGUsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcclxuICAgICAgb3ZlcnJpZGU6IGZhbHNlXHJcbiAgICB9LCBvcHRpb25zKTtcclxuXHJcbiAgICBpZiAoKG5hbWUgPT09ICdkZWZhdWx0U2NvcGUnICYmIE9iamVjdC5rZXlzKHRoaXMub3B0aW9ucy5kZWZhdWx0U2NvcGUpLmxlbmd0aCA+IDAgfHwgbmFtZSBpbiB0aGlzLm9wdGlvbnMuc2NvcGVzKSAmJiBvcHRpb25zLm92ZXJyaWRlID09PSBmYWxzZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzY29wZSAke25hbWV9IGFscmVhZHkgZXhpc3RzLiBQYXNzIHsgb3ZlcnJpZGU6IHRydWUgfSBhcyBvcHRpb25zIHRvIHNpbGVuY2UgdGhpcyBlcnJvcmApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChuYW1lID09PSAnZGVmYXVsdFNjb3BlJykge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuZGVmYXVsdFNjb3BlID0gdGhpcy5fc2NvcGUgPSBzY29wZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zY29wZXNbbmFtZV0gPSBzY29wZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGEgc2NvcGUgY3JlYXRlZCBpbiBgZGVmaW5lYCB0byB0aGUgbW9kZWwuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5ob3cgdG8gY3JlYXRlIHNjb3BlczwvY2FwdGlvbj5cclxuICAgKiBjb25zdCBNb2RlbCA9IHNlcXVlbGl6ZS5kZWZpbmUoJ21vZGVsJywgYXR0cmlidXRlcywge1xyXG4gICAqICAgZGVmYXVsdFNjb3BlOiB7XHJcbiAgICogICAgIHdoZXJlOiB7XHJcbiAgICogICAgICAgdXNlcm5hbWU6ICdkYW4nXHJcbiAgICogICAgIH0sXHJcbiAgICogICAgIGxpbWl0OiAxMlxyXG4gICAqICAgfSxcclxuICAgKiAgIHNjb3Blczoge1xyXG4gICAqICAgICBpc0FMaWU6IHtcclxuICAgKiAgICAgICB3aGVyZToge1xyXG4gICAqICAgICAgICAgc3R1ZmY6ICdjYWtlJ1xyXG4gICAqICAgICAgIH1cclxuICAgKiAgICAgfSxcclxuICAgKiAgICAgY29tcGxleEZ1bmN0aW9uOiBmdW5jdGlvbihlbWFpbCwgYWNjZXNzTGV2ZWwpIHtcclxuICAgKiAgICAgICByZXR1cm4ge1xyXG4gICAqICAgICAgICAgd2hlcmU6IHtcclxuICAgKiAgICAgICAgICAgZW1haWw6IHtcclxuICAgKiAgICAgICAgICAgICBbT3AubGlrZV06IGVtYWlsXHJcbiAgICogICAgICAgICAgIH0sXHJcbiAgICogICAgICAgICAgIGFjY2Vzc19sZXZlbCB7XHJcbiAgICogICAgICAgICAgICAgW09wLmd0ZV06IGFjY2Vzc0xldmVsXHJcbiAgICogICAgICAgICAgIH1cclxuICAgKiAgICAgICAgIH1cclxuICAgKiAgICAgICB9XHJcbiAgICogICAgIH1cclxuICAgKiAgIH1cclxuICAgKiB9KVxyXG4gICAqXHJcbiAgICogIyBBcyB5b3UgaGF2ZSBkZWZpbmVkIGEgZGVmYXVsdCBzY29wZSwgZXZlcnkgdGltZSB5b3UgZG8gTW9kZWwuZmluZCwgdGhlIGRlZmF1bHQgc2NvcGUgaXMgYXBwZW5kZWQgdG8geW91ciBxdWVyeS4gSGVyZSdzIGEgY291cGxlIG9mIGV4YW1wbGVzOlxyXG4gICAqXHJcbiAgICogTW9kZWwuZmluZEFsbCgpIC8vIFdIRVJFIHVzZXJuYW1lID0gJ2RhbidcclxuICAgKiBNb2RlbC5maW5kQWxsKHsgd2hlcmU6IHsgYWdlOiB7IFtPcC5ndF06IDEyIH0gfSB9KSAvLyBXSEVSRSBhZ2UgPiAxMiBBTkQgdXNlcm5hbWUgPSAnZGFuJ1xyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+VG8gaW52b2tlIHNjb3BlIGZ1bmN0aW9ucyB5b3UgY2FuIGRvPC9jYXB0aW9uPlxyXG4gICAqIE1vZGVsLnNjb3BlKHsgbWV0aG9kOiBbJ2NvbXBsZXhGdW5jdGlvbicsICdkYW5Ac2VxdWVsaXplLmNvbScsIDQyXX0pLmZpbmRBbGwoKVxyXG4gICAqIC8vIFdIRVJFIGVtYWlsIGxpa2UgJ2RhbkBzZXF1ZWxpemUuY29tJScgQU5EIGFjY2Vzc19sZXZlbCA+PSA0MlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHs/QXJyYXl8T2JqZWN0fHN0cmluZ30gW29wdGlvbl0gVGhlIHNjb3BlKHMpIHRvIGFwcGx5LiBTY29wZXMgY2FuIGVpdGhlciBiZSBwYXNzZWQgYXMgY29uc2VjdXRpdmUgYXJndW1lbnRzLCBvciBhcyBhbiBhcnJheSBvZiBhcmd1bWVudHMuIFRvIGFwcGx5IHNpbXBsZSBzY29wZXMgYW5kIHNjb3BlIGZ1bmN0aW9ucyB3aXRoIG5vIGFyZ3VtZW50cywgcGFzcyB0aGVtIGFzIHN0cmluZ3MuIEZvciBzY29wZSBmdW5jdGlvbiwgcGFzcyBhbiBvYmplY3QsIHdpdGggYSBgbWV0aG9kYCBwcm9wZXJ0eS4gVGhlIHZhbHVlIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcsIGlmIHRoZSBtZXRob2QgZG9lcyBub3QgdGFrZSBhbnkgYXJndW1lbnRzLCBvciBhbiBhcnJheSwgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZCwgYW5kIGNvbnNlY3V0aXZlIGVsZW1lbnRzIGFyZSBhcmd1bWVudHMgdG8gdGhhdCBtZXRob2QuIFBhc3MgbnVsbCB0byByZW1vdmUgYWxsIHNjb3BlcywgaW5jbHVkaW5nIHRoZSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge01vZGVsfSBBIHJlZmVyZW5jZSB0byB0aGUgbW9kZWwsIHdpdGggdGhlIHNjb3BlKHMpIGFwcGxpZWQuIENhbGxpbmcgc2NvcGUgYWdhaW4gb24gdGhlIHJldHVybmVkIG1vZGVsIHdpbGwgY2xlYXIgdGhlIHByZXZpb3VzIHNjb3BlLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzY29wZShvcHRpb24pIHtcclxuICAgIGNvbnN0IHNlbGYgPSBjbGFzcyBleHRlbmRzIHRoaXMge307XHJcbiAgICBsZXQgc2NvcGU7XHJcbiAgICBsZXQgc2NvcGVOYW1lO1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLCAnbmFtZScsIHsgdmFsdWU6IHRoaXMubmFtZSB9KTtcclxuXHJcbiAgICBzZWxmLl9zY29wZSA9IHt9O1xyXG4gICAgc2VsZi5fc2NvcGVOYW1lcyA9IFtdO1xyXG4gICAgc2VsZi5zY29wZWQgPSB0cnVlO1xyXG5cclxuICAgIGlmICghb3B0aW9uKSB7XHJcbiAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9wdGlvbnMgPSBfLmZsYXR0ZW4oYXJndW1lbnRzKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XHJcbiAgICAgIHNjb3BlID0gbnVsbDtcclxuICAgICAgc2NvcGVOYW1lID0gbnVsbDtcclxuXHJcbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3Qob3B0aW9uKSkge1xyXG4gICAgICAgIGlmIChvcHRpb24ubWV0aG9kKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24ubWV0aG9kKSAmJiAhIXNlbGYub3B0aW9ucy5zY29wZXNbb3B0aW9uLm1ldGhvZFswXV0pIHtcclxuICAgICAgICAgICAgc2NvcGVOYW1lID0gb3B0aW9uLm1ldGhvZFswXTtcclxuICAgICAgICAgICAgc2NvcGUgPSBzZWxmLm9wdGlvbnMuc2NvcGVzW3Njb3BlTmFtZV0uYXBwbHkoc2VsZiwgb3B0aW9uLm1ldGhvZC5zbGljZSgxKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChzZWxmLm9wdGlvbnMuc2NvcGVzW29wdGlvbi5tZXRob2RdKSB7XHJcbiAgICAgICAgICAgIHNjb3BlTmFtZSA9IG9wdGlvbi5tZXRob2Q7XHJcbiAgICAgICAgICAgIHNjb3BlID0gc2VsZi5vcHRpb25zLnNjb3Blc1tzY29wZU5hbWVdLmFwcGx5KHNlbGYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzY29wZSA9IG9wdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uID09PSAnZGVmYXVsdFNjb3BlJyAmJiBfLmlzUGxhaW5PYmplY3Qoc2VsZi5vcHRpb25zLmRlZmF1bHRTY29wZSkpIHtcclxuICAgICAgICBzY29wZSA9IHNlbGYub3B0aW9ucy5kZWZhdWx0U2NvcGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2NvcGVOYW1lID0gb3B0aW9uO1xyXG4gICAgICAgIHNjb3BlID0gc2VsZi5vcHRpb25zLnNjb3Blc1tzY29wZU5hbWVdO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHNjb3BlID0gc2NvcGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzY29wZSkge1xyXG4gICAgICAgIHRoaXMuX2NvbmZvcm1JbmNsdWRlcyhzY29wZSwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5fYXNzaWduT3B0aW9ucyhzZWxmLl9zY29wZSwgc2NvcGUpO1xyXG4gICAgICAgIHNlbGYuX3Njb3BlTmFtZXMucHVzaChzY29wZU5hbWUgPyBzY29wZU5hbWUgOiAnZGVmYXVsdFNjb3BlJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5TZXF1ZWxpemVTY29wZUVycm9yKGBJbnZhbGlkIHNjb3BlICR7c2NvcGVOYW1lfSBjYWxsZWQuYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VsZjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlYXJjaCBmb3IgbXVsdGlwbGUgaW5zdGFuY2VzLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+U2ltcGxlIHNlYXJjaCB1c2luZyBBTkQgYW5kID08L2NhcHRpb24+XHJcbiAgICogTW9kZWwuZmluZEFsbCh7XHJcbiAgICogICB3aGVyZToge1xyXG4gICAqICAgICBhdHRyMTogNDIsXHJcbiAgICogICAgIGF0dHIyOiAnY2FrZSdcclxuICAgKiAgIH1cclxuICAgKiB9KVxyXG4gICAqXHJcbiAgICogIyBXSEVSRSBhdHRyMSA9IDQyIEFORCBhdHRyMiA9ICdjYWtlJ1xyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+VXNpbmcgZ3JlYXRlciB0aGFuLCBsZXNzIHRoYW4gZXRjLjwvY2FwdGlvbj5cclxuICAgKiBjb25zdCB7Z3QsIGx0ZSwgbmUsIGluOiBvcElufSA9IFNlcXVlbGl6ZS5PcDtcclxuICAgKlxyXG4gICAqIE1vZGVsLmZpbmRBbGwoe1xyXG4gICAqICAgd2hlcmU6IHtcclxuICAgKiAgICAgYXR0cjE6IHtcclxuICAgKiAgICAgICBbZ3RdOiA1MFxyXG4gICAqICAgICB9LFxyXG4gICAqICAgICBhdHRyMjoge1xyXG4gICAqICAgICAgIFtsdGVdOiA0NVxyXG4gICAqICAgICB9LFxyXG4gICAqICAgICBhdHRyMzoge1xyXG4gICAqICAgICAgIFtvcEluXTogWzEsMiwzXVxyXG4gICAqICAgICB9LFxyXG4gICAqICAgICBhdHRyNDoge1xyXG4gICAqICAgICAgIFtuZV06IDVcclxuICAgKiAgICAgfVxyXG4gICAqICAgfVxyXG4gICAqIH0pXHJcbiAgICpcclxuICAgKiAjIFdIRVJFIGF0dHIxID4gNTAgQU5EIGF0dHIyIDw9IDQ1IEFORCBhdHRyMyBJTiAoMSwyLDMpIEFORCBhdHRyNCAhPSA1XHJcbiAgICpcclxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5RdWVyaWVzIHVzaW5nIE9SPC9jYXB0aW9uPlxyXG4gICAqIGNvbnN0IHtvciwgYW5kLCBndCwgbHR9ID0gU2VxdWVsaXplLk9wO1xyXG4gICAqXHJcbiAgICogTW9kZWwuZmluZEFsbCh7XHJcbiAgICogICB3aGVyZToge1xyXG4gICAqICAgICBuYW1lOiAnYSBwcm9qZWN0JyxcclxuICAgKiAgICAgW29yXTogW1xyXG4gICAqICAgICAgIHtpZDogWzEsIDIsIDNdfSxcclxuICAgKiAgICAgICB7XHJcbiAgICogICAgICAgICBbYW5kXTogW1xyXG4gICAqICAgICAgICAgICB7aWQ6IHtbZ3RdOiAxMH19LFxyXG4gICAqICAgICAgICAgICB7aWQ6IHtbbHRdOiAxMDB9fVxyXG4gICAqICAgICAgICAgXVxyXG4gICAqICAgICAgIH1cclxuICAgKiAgICAgXVxyXG4gICAqICAgfVxyXG4gICAqIH0pO1xyXG4gICAqXHJcbiAgICogIyBXSEVSRSBgTW9kZWxgLmBuYW1lYCA9ICdhIHByb2plY3QnIEFORCAoYE1vZGVsYC5gaWRgIElOICgxLCAyLCAzKSBPUiAoYE1vZGVsYC5gaWRgID4gMTAgQU5EIGBNb2RlbGAuYGlkYCA8IDEwMCkpO1xyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBPcGVyYXRvcnN9IGZvciBwb3NzaWJsZSBvcGVyYXRvcnNcclxuICAgKiBfX0FsaWFzX186IF9hbGxfXHJcbiAgICpcclxuICAgKiBUaGUgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIGFuIGFycmF5IG9mIE1vZGVsIGluc3RhbmNlcyBpZiB0aGUgcXVlcnkgc3VjY2VlZHMuX1xyXG4gICAqXHJcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc10gQSBoYXNoIG9mIG9wdGlvbnMgdG8gZGVzY3JpYmUgdGhlIHNjb3BlIG9mIHRoZSBzZWFyY2hcclxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLndoZXJlXSBBIGhhc2ggb2YgYXR0cmlidXRlcyB0byBkZXNjcmliZSB5b3VyIHNlYXJjaC4gU2VlIGFib3ZlIGZvciBleGFtcGxlcy5cclxuICAgKiBAcGFyYW0gIHtBcnJheTxzdHJpbmc+fE9iamVjdH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmF0dHJpYnV0ZXNdIEEgbGlzdCBvZiB0aGUgYXR0cmlidXRlcyB0aGF0IHlvdSB3YW50IHRvIHNlbGVjdCwgb3IgYW4gb2JqZWN0IHdpdGggYGluY2x1ZGVgIGFuZCBgZXhjbHVkZWAga2V5cy4gVG8gcmVuYW1lIGFuIGF0dHJpYnV0ZSwgeW91IGNhbiBwYXNzIGFuIGFycmF5LCB3aXRoIHR3byBlbGVtZW50cyAtIHRoZSBmaXJzdCBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIGluIHRoZSBEQiAob3Igc29tZSBraW5kIG9mIGV4cHJlc3Npb24gc3VjaCBhcyBgU2VxdWVsaXplLmxpdGVyYWxgLCBgU2VxdWVsaXplLmZuYCBhbmQgc28gb24pLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgbmFtZSB5b3Ugd2FudCB0aGUgYXR0cmlidXRlIHRvIGhhdmUgaW4gdGhlIHJldHVybmVkIGluc3RhbmNlXHJcbiAgICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5hdHRyaWJ1dGVzLmluY2x1ZGVdIFNlbGVjdCBhbGwgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG1vZGVsLCBwbHVzIHNvbWUgYWRkaXRpb25hbCBvbmVzLiBVc2VmdWwgZm9yIGFnZ3JlZ2F0aW9ucywgZS5nLiBgeyBhdHRyaWJ1dGVzOiB7IGluY2x1ZGU6IFtbc2VxdWVsaXplLmZuKCdDT1VOVCcsIHNlcXVlbGl6ZS5jb2woJ2lkJykpLCAndG90YWwnXV0gfWBcclxuICAgKiBAcGFyYW0gIHtBcnJheTxzdHJpbmc+fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmF0dHJpYnV0ZXMuZXhjbHVkZV0gU2VsZWN0IGFsbCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgbW9kZWwsIGV4Y2VwdCBzb21lIGZldy4gVXNlZnVsIGZvciBzZWN1cml0eSBwdXJwb3NlcyBlLmcuIGB7IGF0dHJpYnV0ZXM6IHsgZXhjbHVkZTogWydwYXNzd29yZCddIH0gfWBcclxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLnBhcmFub2lkPXRydWVdIElmIHRydWUsIG9ubHkgbm9uLWRlbGV0ZWQgcmVjb3JkcyB3aWxsIGJlIHJldHVybmVkLiBJZiBmYWxzZSwgYm90aCBkZWxldGVkIGFuZCBub24tZGVsZXRlZCByZWNvcmRzIHdpbGwgYmUgcmV0dXJuZWQuIE9ubHkgYXBwbGllcyBpZiBgb3B0aW9ucy5wYXJhbm9pZGAgaXMgdHJ1ZSBmb3IgdGhlIG1vZGVsLlxyXG4gICAqIEBwYXJhbSAge0FycmF5PE9iamVjdHxNb2RlbHxzdHJpbmc+fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZV0gQSBsaXN0IG9mIGFzc29jaWF0aW9ucyB0byBlYWdlcmx5IGxvYWQgdXNpbmcgYSBsZWZ0IGpvaW4uIFN1cHBvcnRlZCBpcyBlaXRoZXIgYHsgaW5jbHVkZTogWyBNb2RlbDEsIE1vZGVsMiwgLi4uXX1gIG9yIGB7IGluY2x1ZGU6IFt7IG1vZGVsOiBNb2RlbDEsIGFzOiAnQWxpYXMnIH1dfWAgb3IgYHsgaW5jbHVkZTogWydBbGlhcyddfWAuIElmIHlvdXIgYXNzb2NpYXRpb24gYXJlIHNldCB1cCB3aXRoIGFuIGBhc2AgKGVnLiBgWC5oYXNNYW55KFksIHsgYXM6ICdaIH1gLCB5b3UgbmVlZCB0byBzcGVjaWZ5IFogaW4gdGhlIGFzIGF0dHJpYnV0ZSB3aGVuIGVhZ2VyIGxvYWRpbmcgWSkuXHJcbiAgICogQHBhcmFtICB7TW9kZWx9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbmNsdWRlW10ubW9kZWxdIFRoZSBtb2RlbCB5b3Ugd2FudCB0byBlYWdlcmx5IGxvYWRcclxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVbXS5hc10gVGhlIGFsaWFzIG9mIHRoZSByZWxhdGlvbiwgaW4gY2FzZSB0aGUgbW9kZWwgeW91IHdhbnQgdG8gZWFnZXJseSBsb2FkIGlzIGFsaWFzZWQuIEZvciBgaGFzT25lYCAvIGBiZWxvbmdzVG9gLCB0aGlzIHNob3VsZCBiZSB0aGUgc2luZ3VsYXIgbmFtZSwgYW5kIGZvciBgaGFzTWFueWAsIGl0IHNob3VsZCBiZSB0aGUgcGx1cmFsXHJcbiAgICogQHBhcmFtICB7QXNzb2NpYXRpb259ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbmNsdWRlW10uYXNzb2NpYXRpb25dIFRoZSBhc3NvY2lhdGlvbiB5b3Ugd2FudCB0byBlYWdlcmx5IGxvYWQuIChUaGlzIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgcHJvdmlkaW5nIGEgbW9kZWwvYXMgcGFpcilcclxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVbXS53aGVyZV0gV2hlcmUgY2xhdXNlcyB0byBhcHBseSB0byB0aGUgY2hpbGQgbW9kZWxzLiBOb3RlIHRoYXQgdGhpcyBjb252ZXJ0cyB0aGUgZWFnZXIgbG9hZCB0byBhbiBpbm5lciBqb2luLCB1bmxlc3MgeW91IGV4cGxpY2l0bHkgc2V0IGByZXF1aXJlZDogZmFsc2VgXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbmNsdWRlW10ub3I9ZmFsc2VdIFdoZXRoZXIgdG8gYmluZCB0aGUgT04gYW5kIFdIRVJFIGNsYXVzZSB0b2dldGhlciBieSBPUiBpbnN0ZWFkIG9mIEFORC5cclxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVbXS5vbl0gU3VwcGx5IHlvdXIgb3duIE9OIGNvbmRpdGlvbiBmb3IgdGhlIGpvaW4uXHJcbiAgICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbmNsdWRlW10uYXR0cmlidXRlc10gQSBsaXN0IG9mIGF0dHJpYnV0ZXMgdG8gc2VsZWN0IGZyb20gdGhlIGNoaWxkIG1vZGVsXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbmNsdWRlW10ucmVxdWlyZWRdIElmIHRydWUsIGNvbnZlcnRzIHRvIGFuIGlubmVyIGpvaW4sIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHBhcmVudCBtb2RlbCB3aWxsIG9ubHkgYmUgbG9hZGVkIGlmIGl0IGhhcyBhbnkgbWF0Y2hpbmcgY2hpbGRyZW4uIFRydWUgaWYgYGluY2x1ZGUud2hlcmVgIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZVtdLnJpZ2h0XSBJZiB0cnVlLCBjb252ZXJ0cyB0byBhIHJpZ2h0IGpvaW4gaWYgZGlhbGVjdCBzdXBwb3J0IGl0LiBJZ25vcmVkIGlmIGBpbmNsdWRlLnJlcXVpcmVkYCBpcyB0cnVlLlxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZVtdLnNlcGFyYXRlXSBJZiB0cnVlLCBydW5zIGEgc2VwYXJhdGUgcXVlcnkgdG8gZmV0Y2ggdGhlIGFzc29jaWF0ZWQgaW5zdGFuY2VzLCBvbmx5IHN1cHBvcnRlZCBmb3IgaGFzTWFueSBhc3NvY2lhdGlvbnNcclxuICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVbXS5saW1pdF0gTGltaXQgdGhlIGpvaW5lZCByb3dzLCBvbmx5IHN1cHBvcnRlZCB3aXRoIGluY2x1ZGUuc2VwYXJhdGU9dHJ1ZVxyXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZVtdLnRocm91Z2gud2hlcmVdIEZpbHRlciBvbiB0aGUgam9pbiBtb2RlbCBmb3IgYmVsb25nc1RvTWFueSByZWxhdGlvbnNcclxuICAgKiBAcGFyYW0gIHtBcnJheX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVbXS50aHJvdWdoLmF0dHJpYnV0ZXNdIEEgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHNlbGVjdCBmcm9tIHRoZSBqb2luIG1vZGVsIGZvciBiZWxvbmdzVG9NYW55IHJlbGF0aW9uc1xyXG4gICAqIEBwYXJhbSAge0FycmF5PE9iamVjdHxNb2RlbHxzdHJpbmc+fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZVtdLmluY2x1ZGVdIExvYWQgZnVydGhlciBuZXN0ZWQgcmVsYXRlZCBtb2RlbHNcclxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVbXS5kdXBsaWNhdGluZ10gTWFyayB0aGUgaW5jbHVkZSBhcyBkdXBsaWNhdGluZywgd2lsbCBwcmV2ZW50IGEgc3VicXVlcnkgZnJvbSBiZWluZyB1c2VkLlxyXG4gICAqIEBwYXJhbSAge0FycmF5fFNlcXVlbGl6ZS5mbnxTZXF1ZWxpemUuY29sfFNlcXVlbGl6ZS5saXRlcmFsfSAgICAgICAgW29wdGlvbnMub3JkZXJdIFNwZWNpZmllcyBhbiBvcmRlcmluZy4gVXNpbmcgYW4gYXJyYXksIHlvdSBjYW4gcHJvdmlkZSBzZXZlcmFsIGNvbHVtbnMgLyBmdW5jdGlvbnMgdG8gb3JkZXIgYnkuIEVhY2ggZWxlbWVudCBjYW4gYmUgZnVydGhlciB3cmFwcGVkIGluIGEgdHdvLWVsZW1lbnQgYXJyYXkuIFRoZSBmaXJzdCBlbGVtZW50IGlzIHRoZSBjb2x1bW4gLyBmdW5jdGlvbiB0byBvcmRlciBieSwgdGhlIHNlY29uZCBpcyB0aGUgZGlyZWN0aW9uLiBGb3IgZXhhbXBsZTogYG9yZGVyOiBbWyduYW1lJywgJ0RFU0MnXV1gLiBJbiB0aGlzIHdheSB0aGUgY29sdW1uIHdpbGwgYmUgZXNjYXBlZCwgYnV0IHRoZSBkaXJlY3Rpb24gd2lsbCBub3QuXHJcbiAgICogQHBhcmFtICB7bnVtYmVyfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5saW1pdF0gTGltaXQgZm9yIHJlc3VsdFxyXG4gICAqIEBwYXJhbSAge251bWJlcn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMub2Zmc2V0XSBPZmZzZXQgZm9yIHJlc3VsdFxyXG4gICAqIEBwYXJhbSAge1RyYW5zYWN0aW9ufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMudHJhbnNhY3Rpb25dIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxyXG4gICAqIEBwYXJhbSAge3N0cmluZ3xPYmplY3R9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMubG9ja10gTG9jayB0aGUgc2VsZWN0ZWQgcm93cy4gUG9zc2libGUgb3B0aW9ucyBhcmUgdHJhbnNhY3Rpb24uTE9DSy5VUERBVEUgYW5kIHRyYW5zYWN0aW9uLkxPQ0suU0hBUkUuIFBvc3RncmVzIGFsc28gc3VwcG9ydHMgdHJhbnNhY3Rpb24uTE9DSy5LRVlfU0hBUkUsIHRyYW5zYWN0aW9uLkxPQ0suTk9fS0VZX1VQREFURSBhbmQgc3BlY2lmaWMgbW9kZWwgbG9ja3Mgd2l0aCBqb2lucy4gU2VlIFt0cmFuc2FjdGlvbi5MT0NLIGZvciBhbiBleGFtcGxlXSh0cmFuc2FjdGlvbiNsb2NrKVxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuc2tpcExvY2tlZF0gU2tpcCBsb2NrZWQgcm93cy4gT25seSBzdXBwb3J0ZWQgaW4gUG9zdGdyZXMuXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5yYXddIFJldHVybiByYXcgcmVzdWx0LiBTZWUgc2VxdWVsaXplLnF1ZXJ5IGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gICAqIEBwYXJhbSAge0Z1bmN0aW9ufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxyXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaGF2aW5nXSBIYXZpbmcgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW58RXJyb3J9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMucmVqZWN0T25FbXB0eT1mYWxzZV0gVGhyb3dzIGFuIGVycm9yIHdoZW4gbm8gcmVjb3JkcyBmb3VuZFxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBTZXF1ZWxpemUjcXVlcnl9XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxNb2RlbD4+fVxyXG4gICAqL1xyXG4gIHN0YXRpYyBmaW5kQWxsKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgIV8uaXNQbGFpbk9iamVjdChvcHRpb25zKSkge1xyXG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlF1ZXJ5RXJyb3IoJ1RoZSBhcmd1bWVudCBwYXNzZWQgdG8gZmluZEFsbCBtdXN0IGJlIGFuIG9wdGlvbnMgb2JqZWN0LCB1c2UgZmluZEJ5UGsgaWYgeW91IHdpc2ggdG8gcGFzcyBhIHNpbmdsZSBwcmltYXJ5IGtleSB2YWx1ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zLmF0dHJpYnV0ZXMpICYmICFfLmlzUGxhaW5PYmplY3Qob3B0aW9ucy5hdHRyaWJ1dGVzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuUXVlcnlFcnJvcignVGhlIGF0dHJpYnV0ZXMgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgb2YgY29sdW1uIG5hbWVzIG9yIGFuIG9iamVjdCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy53YXJuT25JbnZhbGlkT3B0aW9ucyhvcHRpb25zLCBPYmplY3Qua2V5cyh0aGlzLnJhd0F0dHJpYnV0ZXMpKTtcclxuXHJcbiAgICBjb25zdCB0YWJsZU5hbWVzID0ge307XHJcblxyXG4gICAgdGFibGVOYW1lc1t0aGlzLmdldFRhYmxlTmFtZShvcHRpb25zKV0gPSB0cnVlO1xyXG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKTtcclxuXHJcbiAgICBfLmRlZmF1bHRzKG9wdGlvbnMsIHsgaG9va3M6IHRydWUgfSk7XHJcblxyXG4gICAgLy8gc2V0IHJlamVjdE9uRW1wdHkgb3B0aW9uLCBkZWZhdWx0cyB0byBtb2RlbCBvcHRpb25zXHJcbiAgICBvcHRpb25zLnJlamVjdE9uRW1wdHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3JlamVjdE9uRW1wdHknKVxyXG4gICAgICA/IG9wdGlvbnMucmVqZWN0T25FbXB0eVxyXG4gICAgICA6IHRoaXMub3B0aW9ucy5yZWplY3RPbkVtcHR5O1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2luamVjdFNjb3BlKG9wdGlvbnMpO1xyXG5cclxuICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcygnYmVmb3JlRmluZCcsIG9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgdGhpcy5fY29uZm9ybUluY2x1ZGVzKG9wdGlvbnMsIHRoaXMpO1xyXG4gICAgICB0aGlzLl9leHBhbmRBdHRyaWJ1dGVzKG9wdGlvbnMpO1xyXG4gICAgICB0aGlzLl9leHBhbmRJbmNsdWRlQWxsKG9wdGlvbnMpO1xyXG5cclxuICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcygnYmVmb3JlRmluZEFmdGVyRXhwYW5kSW5jbHVkZUFsbCcsIG9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgb3B0aW9ucy5vcmlnaW5hbEF0dHJpYnV0ZXMgPSB0aGlzLl9pbmplY3REZXBlbmRlbnRWaXJ0dWFsQXR0cmlidXRlcyhvcHRpb25zLmF0dHJpYnV0ZXMpO1xyXG5cclxuICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZSkge1xyXG4gICAgICAgIG9wdGlvbnMuaGFzSm9pbiA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlSW5jbHVkZWRFbGVtZW50cyhvcHRpb25zLCB0YWJsZU5hbWVzKTtcclxuXHJcbiAgICAgICAgLy8gSWYgd2UncmUgbm90IHJhdywgd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgaW5jbHVkZSB0aGUgcHJpbWFyeSBrZXkgZm9yIGRlLWR1cGxpY2F0aW9uXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzXHJcbiAgICAgICAgICAmJiAhb3B0aW9ucy5yYXdcclxuICAgICAgICAgICYmIHRoaXMucHJpbWFyeUtleUF0dHJpYnV0ZVxyXG4gICAgICAgICAgJiYgIW9wdGlvbnMuYXR0cmlidXRlcy5pbmNsdWRlcyh0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGUpXHJcbiAgICAgICAgICAmJiAoIW9wdGlvbnMuZ3JvdXAgfHwgIW9wdGlvbnMuaGFzU2luZ2xlQXNzb2NpYXRpb24gfHwgb3B0aW9ucy5oYXNNdWx0aUFzc29jaWF0aW9uKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gW3RoaXMucHJpbWFyeUtleUF0dHJpYnV0ZV0uY29uY2F0KG9wdGlvbnMuYXR0cmlidXRlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIW9wdGlvbnMuYXR0cmlidXRlcykge1xyXG4gICAgICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKHRoaXMucmF3QXR0cmlidXRlcyk7XHJcbiAgICAgICAgb3B0aW9ucy5vcmlnaW5hbEF0dHJpYnV0ZXMgPSB0aGlzLl9pbmplY3REZXBlbmRlbnRWaXJ0dWFsQXR0cmlidXRlcyhvcHRpb25zLmF0dHJpYnV0ZXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB3aGVyZUNvbGxlY3Rpb24gaXMgdXNlZCBmb3Igbm9uLXByaW1hcnkga2V5IHVwZGF0ZXNcclxuICAgICAgdGhpcy5vcHRpb25zLndoZXJlQ29sbGVjdGlvbiA9IG9wdGlvbnMud2hlcmUgfHwgbnVsbDtcclxuXHJcbiAgICAgIFV0aWxzLm1hcEZpbmRlck9wdGlvbnMob3B0aW9ucywgdGhpcyk7XHJcblxyXG4gICAgICBvcHRpb25zID0gdGhpcy5fcGFyYW5vaWRDbGF1c2UodGhpcywgb3B0aW9ucyk7XHJcblxyXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVGaW5kQWZ0ZXJPcHRpb25zJywgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyB0YWJsZU5hbWVzOiBPYmplY3Qua2V5cyh0YWJsZU5hbWVzKSB9KTtcclxuICAgICAgcmV0dXJuIHRoaXMuUXVlcnlJbnRlcmZhY2Uuc2VsZWN0KHRoaXMsIHRoaXMuZ2V0VGFibGVOYW1lKHNlbGVjdE9wdGlvbnMpLCBzZWxlY3RPcHRpb25zKTtcclxuICAgIH0pLnRhcChyZXN1bHRzID0+IHtcclxuICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcygnYWZ0ZXJGaW5kJywgcmVzdWx0cywgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pLnRoZW4ocmVzdWx0cyA9PiB7XHJcblxyXG4gICAgICAvL3JlamVjdE9uRW1wdHkgbW9kZVxyXG4gICAgICBpZiAoXy5pc0VtcHR5KHJlc3VsdHMpICYmIG9wdGlvbnMucmVqZWN0T25FbXB0eSkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWplY3RPbkVtcHR5ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgb3B0aW9ucy5yZWplY3RPbkVtcHR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWplY3RPbkVtcHR5ID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgdGhyb3cgb3B0aW9ucy5yZWplY3RPbkVtcHR5O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLkVtcHR5UmVzdWx0RXJyb3IoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIE1vZGVsLl9maW5kU2VwYXJhdGUocmVzdWx0cywgb3B0aW9ucyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB3YXJuT25JbnZhbGlkT3B0aW9ucyhvcHRpb25zLCB2YWxpZENvbHVtbk5hbWVzKSB7XHJcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChvcHRpb25zKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdW5yZWNvZ25pemVkT3B0aW9ucyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpLmZpbHRlcihrID0+ICF2YWxpZFF1ZXJ5S2V5d29yZHMuaGFzKGspKTtcclxuICAgIGNvbnN0IHVuZXhwZWN0ZWRNb2RlbEF0dHJpYnV0ZXMgPSBfLmludGVyc2VjdGlvbih1bnJlY29nbml6ZWRPcHRpb25zLCB2YWxpZENvbHVtbk5hbWVzKTtcclxuICAgIGlmICghb3B0aW9ucy53aGVyZSAmJiB1bmV4cGVjdGVkTW9kZWxBdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbG9nZ2VyLndhcm4oYE1vZGVsIGF0dHJpYnV0ZXMgKCR7dW5leHBlY3RlZE1vZGVsQXR0cmlidXRlcy5qb2luKCcsICcpfSkgcGFzc2VkIGludG8gZmluZGVyIG1ldGhvZCBvcHRpb25zIG9mIG1vZGVsICR7dGhpcy5uYW1lfSwgYnV0IHRoZSBvcHRpb25zLndoZXJlIG9iamVjdCBpcyBlbXB0eS4gRGlkIHlvdSBmb3JnZXQgdG8gdXNlIG9wdGlvbnMud2hlcmU/YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2luamVjdERlcGVuZGVudFZpcnR1YWxBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcclxuICAgIGlmICghdGhpcy5faGFzVmlydHVhbEF0dHJpYnV0ZXMpIHJldHVybiBhdHRyaWJ1dGVzO1xyXG4gICAgaWYgKCFhdHRyaWJ1dGVzIHx8ICFBcnJheS5pc0FycmF5KGF0dHJpYnV0ZXMpKSByZXR1cm4gYXR0cmlidXRlcztcclxuXHJcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLl92aXJ0dWFsQXR0cmlidXRlcy5oYXMoYXR0cmlidXRlKVxyXG4gICAgICAgICYmIHRoaXMucmF3QXR0cmlidXRlc1thdHRyaWJ1dGVdLnR5cGUuZmllbGRzXHJcbiAgICAgICkge1xyXG4gICAgICAgIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmNvbmNhdCh0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cmlidXRlXS50eXBlLmZpZWxkcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhdHRyaWJ1dGVzID0gXy51bmlxKGF0dHJpYnV0ZXMpO1xyXG5cclxuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIF9maW5kU2VwYXJhdGUocmVzdWx0cywgb3B0aW9ucykge1xyXG4gICAgaWYgKCFvcHRpb25zLmluY2x1ZGUgfHwgb3B0aW9ucy5yYXcgfHwgIXJlc3VsdHMpIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0cyk7XHJcblxyXG4gICAgY29uc3Qgb3JpZ2luYWwgPSByZXN1bHRzO1xyXG4gICAgaWYgKG9wdGlvbnMucGxhaW4pIHJlc3VsdHMgPSBbcmVzdWx0c107XHJcblxyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG9yaWdpbmFsO1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLm1hcChvcHRpb25zLmluY2x1ZGUsIGluY2x1ZGUgPT4ge1xyXG4gICAgICBpZiAoIWluY2x1ZGUuc2VwYXJhdGUpIHtcclxuICAgICAgICByZXR1cm4gTW9kZWwuX2ZpbmRTZXBhcmF0ZShcclxuICAgICAgICAgIHJlc3VsdHMucmVkdWNlKChtZW1vLCByZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgbGV0IGFzc29jaWF0aW9ucyA9IHJlc3VsdC5nZXQoaW5jbHVkZS5hc3NvY2lhdGlvbi5hcyk7XHJcblxyXG4gICAgICAgICAgICAvLyBNaWdodCBiZSBhbiBlbXB0eSBiZWxvbmdzVG8gcmVsYXRpb25cclxuICAgICAgICAgICAgaWYgKCFhc3NvY2lhdGlvbnMpIHJldHVybiBtZW1vO1xyXG5cclxuICAgICAgICAgICAgLy8gRm9yY2UgYXJyYXkgc28gd2UgY2FuIGNvbmNhdCBubyBtYXR0ZXIgaWYgaXQncyAxOjEgb3IgOk1cclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9ucykpIGFzc29jaWF0aW9ucyA9IFthc3NvY2lhdGlvbnNdO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFzc29jaWF0aW9ucy5sZW5ndGg7IGkgIT09IGxlbjsgKytpKSB7XHJcbiAgICAgICAgICAgICAgbWVtby5wdXNoKGFzc29jaWF0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG1lbW87XHJcbiAgICAgICAgICB9LCBbXSksXHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgXy5vbWl0KG9wdGlvbnMsICdpbmNsdWRlJywgJ2F0dHJpYnV0ZXMnLCAnb3JkZXInLCAnd2hlcmUnLCAnbGltaXQnLCAnb2Zmc2V0JywgJ3BsYWluJywgJ3Njb3BlJyksXHJcbiAgICAgICAgICAgIHsgaW5jbHVkZTogaW5jbHVkZS5pbmNsdWRlIHx8IFtdIH1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gaW5jbHVkZS5hc3NvY2lhdGlvbi5nZXQocmVzdWx0cywgT2JqZWN0LmFzc2lnbihcclxuICAgICAgICB7fSxcclxuICAgICAgICBfLm9taXQob3B0aW9ucywgbm9uQ2FzY2FkaW5nT3B0aW9ucyksXHJcbiAgICAgICAgXy5vbWl0KGluY2x1ZGUsIFsncGFyZW50JywgJ2Fzc29jaWF0aW9uJywgJ2FzJywgJ29yaWdpbmFsQXR0cmlidXRlcyddKVxyXG4gICAgICApKS50aGVuKG1hcCA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xyXG4gICAgICAgICAgcmVzdWx0LnNldChcclxuICAgICAgICAgICAgaW5jbHVkZS5hc3NvY2lhdGlvbi5hcyxcclxuICAgICAgICAgICAgbWFwW3Jlc3VsdC5nZXQoaW5jbHVkZS5hc3NvY2lhdGlvbi5zb3VyY2VLZXkpXSxcclxuICAgICAgICAgICAgeyByYXc6IHRydWUgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSkucmV0dXJuKG9yaWdpbmFsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlYXJjaCBmb3IgYSBzaW5nbGUgaW5zdGFuY2UgYnkgaXRzIHByaW1hcnkga2V5Ll9cclxuICAgKlxyXG4gICAqIEBwYXJhbSAge251bWJlcnxzdHJpbmd8QnVmZmVyfSAgICAgIHBhcmFtIFRoZSB2YWx1ZSBvZiB0aGUgZGVzaXJlZCBpbnN0YW5jZSdzIHByaW1hcnkga2V5LlxyXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXSBmaW5kIG9wdGlvbnNcclxuICAgKiBAcGFyYW0gIHtUcmFuc2FjdGlvbn0gICAgICAgICAgICAgICBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbC5maW5kQWxsfSAgICAgICAgICAgZm9yIGEgZnVsbCBleHBsYW5hdGlvbiBvZiBvcHRpb25zLCBOb3RlIHRoYXQgb3B0aW9ucy53aGVyZSBpcyBub3Qgc3VwcG9ydGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWw+fVxyXG4gICAqL1xyXG4gIHN0YXRpYyBmaW5kQnlQayhwYXJhbSwgb3B0aW9ucykge1xyXG4gICAgLy8gcmV0dXJuIFByb21pc2UgcmVzb2x2ZWQgd2l0aCBudWxsIGlmIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkXHJcbiAgICBpZiAoW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXMocGFyYW0pKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKSB8fCB7fTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnIHx8IEJ1ZmZlci5pc0J1ZmZlcihwYXJhbSkpIHtcclxuICAgICAgb3B0aW9ucy53aGVyZSA9IHtcclxuICAgICAgICBbdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlXTogcGFyYW1cclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXJndW1lbnQgcGFzc2VkIHRvIGZpbmRCeVBrIGlzIGludmFsaWQ6ICR7cGFyYW19YCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQnlwYXNzIGEgcG9zc2libGUgb3ZlcmxvYWRlZCBmaW5kT25lXHJcbiAgICByZXR1cm4gdGhpcy5maW5kT25lKG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VhcmNoIGZvciBhIHNpbmdsZSBpbnN0YW5jZS4gVGhpcyBhcHBsaWVzIExJTUlUIDEsIHNvIHRoZSBsaXN0ZW5lciB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBhIHNpbmdsZSBpbnN0YW5jZS5cclxuICAgKlxyXG4gICAqIF9fQWxpYXNfXzogX2ZpbmRfXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgIFtvcHRpb25zXSBBIGhhc2ggb2Ygb3B0aW9ucyB0byBkZXNjcmliZSB0aGUgc2NvcGUgb2YgdGhlIHNlYXJjaFxyXG4gICAqIEBwYXJhbSAge1RyYW5zYWN0aW9ufSAgW29wdGlvbnMudHJhbnNhY3Rpb25dIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbC5maW5kQWxsfSBmb3IgYW4gZXhwbGFuYXRpb24gb2Ygb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWw+fVxyXG4gICAqL1xyXG4gIHN0YXRpYyBmaW5kT25lKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgIV8uaXNQbGFpbk9iamVjdChvcHRpb25zKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBwYXNzZWQgdG8gZmluZE9uZSBtdXN0IGJlIGFuIG9wdGlvbnMgb2JqZWN0LCB1c2UgZmluZEJ5UGsgaWYgeW91IHdpc2ggdG8gcGFzcyBhIHNpbmdsZSBwcmltYXJ5IGtleSB2YWx1ZScpO1xyXG4gICAgfVxyXG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKTtcclxuXHJcbiAgICBpZiAob3B0aW9ucy5saW1pdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IHVuaXF1ZVNpbmdsZUNvbHVtbnMgPSBfLmNoYWluKHRoaXMudW5pcXVlS2V5cykudmFsdWVzKCkuZmlsdGVyKGMgPT4gYy5maWVsZHMubGVuZ3RoID09PSAxKS5tYXAoJ2NvbHVtbicpLnZhbHVlKCk7XHJcblxyXG4gICAgICAvLyBEb24ndCBhZGQgbGltaXQgaWYgcXVlcnlpbmcgZGlyZWN0bHkgb24gdGhlIHBrIG9yIGEgdW5pcXVlIGNvbHVtblxyXG4gICAgICBpZiAoIW9wdGlvbnMud2hlcmUgfHwgIV8uc29tZShvcHRpb25zLndoZXJlLCAodmFsdWUsIGtleSkgPT5cclxuICAgICAgICAoa2V5ID09PSB0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGUgfHwgdW5pcXVlU2luZ2xlQ29sdW1ucy5pbmNsdWRlcyhrZXkpKSAmJlxyXG4gICAgICAgICAgKFV0aWxzLmlzUHJpbWl0aXZlKHZhbHVlKSB8fCBCdWZmZXIuaXNCdWZmZXIodmFsdWUpKVxyXG4gICAgICApKSB7XHJcbiAgICAgICAgb3B0aW9ucy5saW1pdCA9IDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBCeXBhc3MgYSBwb3NzaWJsZSBvdmVybG9hZGVkIGZpbmRBbGwuXHJcbiAgICByZXR1cm4gdGhpcy5maW5kQWxsKF8uZGVmYXVsdHMob3B0aW9ucywge1xyXG4gICAgICBwbGFpbjogdHJ1ZVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUnVuIGFuIGFnZ3JlZ2F0aW9uIG1ldGhvZCBvbiB0aGUgc3BlY2lmaWVkIGZpZWxkXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgYXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgdG8gYWdncmVnYXRlIG92ZXIuIENhbiBiZSBhIGZpZWxkIG5hbWUgb3IgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICBhZ2dyZWdhdGVGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gdXNlIGZvciBhZ2dyZWdhdGlvbiwgZS5nLiBzdW0sIG1heCBldGMuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgIFtvcHRpb25zXSBRdWVyeSBvcHRpb25zLiBTZWUgc2VxdWVsaXplLnF1ZXJ5IGZvciBmdWxsIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgW29wdGlvbnMud2hlcmVdIEEgaGFzaCBvZiBzZWFyY2ggYXR0cmlidXRlcy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgICAgICAgW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgIFtvcHRpb25zLmJlbmNobWFyaz1mYWxzZV0gUGFzcyBxdWVyeSBleGVjdXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMgYXMgc2Vjb25kIGFyZ3VtZW50IHRvIGxvZ2dpbmcgZnVuY3Rpb24gKG9wdGlvbnMubG9nZ2luZykuXHJcbiAgICogQHBhcmFtIHtEYXRhVHlwZXN8c3RyaW5nfSBbb3B0aW9ucy5kYXRhVHlwZV0gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdC4gSWYgYGZpZWxkYCBpcyBhIGZpZWxkIGluIHRoaXMgTW9kZWwsIHRoZSBkZWZhdWx0IHdpbGwgYmUgdGhlIHR5cGUgb2YgdGhhdCBmaWVsZCwgb3RoZXJ3aXNlIGRlZmF1bHRzIHRvIGZsb2F0LlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICBbb3B0aW9ucy5kaXN0aW5jdF0gQXBwbGllcyBESVNUSU5DVCB0byB0aGUgZmllbGQgYmVpbmcgYWdncmVnYXRlZCBvdmVyXHJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gICAgIFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMucGxhaW5dIFdoZW4gYHRydWVgLCB0aGUgZmlyc3QgcmV0dXJuZWQgdmFsdWUgb2YgYGFnZ3JlZ2F0ZUZ1bmN0aW9uYCBpcyBjYXN0IHRvIGBkYXRhVHlwZWAgYW5kIHJldHVybmVkLiBJZiBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgYXJlIHNwZWNpZmllZCwgYWxvbmcgd2l0aCBgZ3JvdXBgIGNsYXVzZXMsIHNldCBgcGxhaW5gIHRvIGBmYWxzZWAgdG8gcmV0dXJuIGFsbCB2YWx1ZXMgb2YgYWxsIHJldHVybmVkIHJvd3MuICBEZWZhdWx0cyB0byBgdHJ1ZWBcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERhdGFUeXBlc3xPYmplY3Q+fSBSZXR1cm5zIHRoZSBhZ2dyZWdhdGUgcmVzdWx0IGNhc3QgdG8gYG9wdGlvbnMuZGF0YVR5cGVgLCB1bmxlc3MgYG9wdGlvbnMucGxhaW5gIGlzIGZhbHNlLCBpbiB3aGljaCBjYXNlIHRoZSBjb21wbGV0ZSBkYXRhIHJlc3VsdCBpcyByZXR1cm5lZC5cclxuICAgKi9cclxuICBzdGF0aWMgYWdncmVnYXRlKGF0dHJpYnV0ZSwgYWdncmVnYXRlRnVuY3Rpb24sIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XHJcblxyXG4gICAgLy8gV2UgbmVlZCB0byBwcmVzZXJ2ZSBhdHRyaWJ1dGVzIGhlcmUgYXMgdGhlIGBpbmplY3RTY29wZWAgY2FsbCB3b3VsZCBpbmplY3Qgbm9uIGFnZ3JlZ2F0ZSBjb2x1bW5zLlxyXG4gICAgY29uc3QgcHJldkF0dHJpYnV0ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXM7XHJcbiAgICB0aGlzLl9pbmplY3RTY29wZShvcHRpb25zKTtcclxuICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IHByZXZBdHRyaWJ1dGVzO1xyXG4gICAgdGhpcy5fY29uZm9ybUluY2x1ZGVzKG9wdGlvbnMsIHRoaXMpO1xyXG5cclxuICAgIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcclxuICAgICAgdGhpcy5fZXhwYW5kSW5jbHVkZUFsbChvcHRpb25zKTtcclxuICAgICAgdGhpcy5fdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzKG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGF0dHJPcHRpb25zID0gdGhpcy5yYXdBdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XHJcbiAgICBjb25zdCBmaWVsZCA9IGF0dHJPcHRpb25zICYmIGF0dHJPcHRpb25zLmZpZWxkIHx8IGF0dHJpYnV0ZTtcclxuICAgIGxldCBhZ2dyZWdhdGVDb2x1bW4gPSB0aGlzLnNlcXVlbGl6ZS5jb2woZmllbGQpO1xyXG5cclxuICAgIGlmIChvcHRpb25zLmRpc3RpbmN0KSB7XHJcbiAgICAgIGFnZ3JlZ2F0ZUNvbHVtbiA9IHRoaXMuc2VxdWVsaXplLmZuKCdESVNUSU5DVCcsIGFnZ3JlZ2F0ZUNvbHVtbik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHsgZ3JvdXAgfSA9IG9wdGlvbnM7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShncm91cCkgJiYgQXJyYXkuaXNBcnJheShncm91cFswXSkpIHtcclxuICAgICAgbm9Eb3VibGVOZXN0ZWRHcm91cCgpO1xyXG4gICAgICBncm91cCA9IF8uZmxhdHRlbihncm91cCk7XHJcbiAgICB9XHJcbiAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBfLnVuaW9uQnkoXHJcbiAgICAgIG9wdGlvbnMuYXR0cmlidXRlcyxcclxuICAgICAgZ3JvdXAsXHJcbiAgICAgIFtbdGhpcy5zZXF1ZWxpemUuZm4oYWdncmVnYXRlRnVuY3Rpb24sIGFnZ3JlZ2F0ZUNvbHVtbiksIGFnZ3JlZ2F0ZUZ1bmN0aW9uXV0sXHJcbiAgICAgIGEgPT4gQXJyYXkuaXNBcnJheShhKSA/IGFbMV0gOiBhXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghb3B0aW9ucy5kYXRhVHlwZSkge1xyXG4gICAgICBpZiAoYXR0ck9wdGlvbnMpIHtcclxuICAgICAgICBvcHRpb25zLmRhdGFUeXBlID0gYXR0ck9wdGlvbnMudHlwZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBVc2UgRkxPQVQgYXMgZmFsbGJhY2tcclxuICAgICAgICBvcHRpb25zLmRhdGFUeXBlID0gbmV3IERhdGFUeXBlcy5GTE9BVCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvcHRpb25zLmRhdGFUeXBlID0gdGhpcy5zZXF1ZWxpemUubm9ybWFsaXplRGF0YVR5cGUob3B0aW9ucy5kYXRhVHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgVXRpbHMubWFwT3B0aW9uRmllbGROYW1lcyhvcHRpb25zLCB0aGlzKTtcclxuICAgIG9wdGlvbnMgPSB0aGlzLl9wYXJhbm9pZENsYXVzZSh0aGlzLCBvcHRpb25zKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5RdWVyeUludGVyZmFjZS5yYXdTZWxlY3QodGhpcy5nZXRUYWJsZU5hbWUob3B0aW9ucyksIG9wdGlvbnMsIGFnZ3JlZ2F0ZUZ1bmN0aW9uLCB0aGlzKS50aGVuKCB2YWx1ZSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ291bnQgdGhlIG51bWJlciBvZiByZWNvcmRzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCB3aGVyZSBjbGF1c2UuXHJcbiAgICpcclxuICAgKiBJZiB5b3UgcHJvdmlkZSBhbiBgaW5jbHVkZWAgb3B0aW9uLCB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIGFzc29jaWF0aW9ucyB3aWxsIGJlIGNvdW50ZWQgaW5zdGVhZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgW29wdGlvbnNdIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgIFtvcHRpb25zLndoZXJlXSBBIGhhc2ggb2Ygc2VhcmNoIGF0dHJpYnV0ZXMuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICBbb3B0aW9ucy5pbmNsdWRlXSBJbmNsdWRlIG9wdGlvbnMuIFNlZSBgZmluZGAgZm9yIGRldGFpbHNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgIFtvcHRpb25zLnBhcmFub2lkPXRydWVdIFNldCBgdHJ1ZWAgdG8gY291bnQgb25seSBub24tZGVsZXRlZCByZWNvcmRzLiBDYW4gYmUgdXNlZCBvbiBtb2RlbHMgd2l0aCBgcGFyYW5vaWRgIGVuYWJsZWRcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgIFtvcHRpb25zLmRpc3RpbmN0XSBBcHBseSBDT1VOVChESVNUSU5DVChjb2wpKSBvbiBwcmltYXJ5IGtleSBvciBvbiBvcHRpb25zLmNvbC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgIFtvcHRpb25zLmNvbF0gQ29sdW1uIG9uIHdoaWNoIENPVU5UKCkgc2hvdWxkIGJlIGFwcGxpZWRcclxuICAgKiBAcGFyYW0ge0FycmF5fSAgICAgICAgIFtvcHRpb25zLmF0dHJpYnV0ZXNdIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgZ3JvdXBgXHJcbiAgICogQHBhcmFtIHtBcnJheX0gICAgICAgICBbb3B0aW9ucy5ncm91cF0gRm9yIGNyZWF0aW5nIGNvbXBsZXggY291bnRzLiBXaWxsIHJldHVybiBtdWx0aXBsZSByb3dzIGFzIG5lZWRlZC5cclxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSAgIFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgICAgIFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgW29wdGlvbnMuYmVuY2htYXJrPWZhbHNlXSBQYXNzIHF1ZXJ5IGV4ZWN1dGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcyBhcyBzZWNvbmQgYXJndW1lbnQgdG8gbG9nZ2luZyBmdW5jdGlvbiAob3B0aW9ucy5sb2dnaW5nKS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgIFtvcHRpb25zLnNlYXJjaFBhdGg9REVGQVVMVF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHNjaGVtYSBzZWFyY2hfcGF0aCAoUG9zdGdyZXMgb25seSlcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59XHJcbiAgICovXHJcbiAgc3RhdGljIGNvdW50KG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XHJcbiAgICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XHJcbiAgICAgIG9wdGlvbnMgPSBfLmRlZmF1bHRzKG9wdGlvbnMsIHsgaG9va3M6IHRydWUgfSk7XHJcbiAgICAgIG9wdGlvbnMucmF3ID0gdHJ1ZTtcclxuICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcygnYmVmb3JlQ291bnQnLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIGxldCBjb2wgPSBvcHRpb25zLmNvbCB8fCAnKic7XHJcbiAgICAgIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcclxuICAgICAgICBjb2wgPSBgJHt0aGlzLm5hbWV9LiR7b3B0aW9ucy5jb2wgfHwgdGhpcy5wcmltYXJ5S2V5RmllbGR9YDtcclxuICAgICAgfVxyXG5cclxuICAgICAgb3B0aW9ucy5wbGFpbiA9ICFvcHRpb25zLmdyb3VwO1xyXG4gICAgICBvcHRpb25zLmRhdGFUeXBlID0gbmV3IERhdGFUeXBlcy5JTlRFR0VSKCk7XHJcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUlnbm9yZUF0dHJpYnV0ZXMgPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vIE5vIGxpbWl0LCBvZmZzZXQgb3Igb3JkZXIgZm9yIHRoZSBvcHRpb25zIG1heCBiZSBnaXZlbiB0byBjb3VudCgpXHJcbiAgICAgIC8vIFNldCB0aGVtIHRvIG51bGwgdG8gcHJldmVudCBzY29wZXMgc2V0dGluZyB0aG9zZSB2YWx1ZXNcclxuICAgICAgb3B0aW9ucy5saW1pdCA9IG51bGw7XHJcbiAgICAgIG9wdGlvbnMub2Zmc2V0ID0gbnVsbDtcclxuICAgICAgb3B0aW9ucy5vcmRlciA9IG51bGw7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5hZ2dyZWdhdGUoY29sLCAnY291bnQnLCBvcHRpb25zKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZCBhbGwgdGhlIHJvd3MgbWF0Y2hpbmcgeW91ciBxdWVyeSwgd2l0aGluIGEgc3BlY2lmaWVkIG9mZnNldCAvIGxpbWl0LCBhbmQgZ2V0IHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyBtYXRjaGluZyB5b3VyIHF1ZXJ5LiBUaGlzIGlzIHZlcnkgdXNlZnVsIGZvciBwYWdpbmdcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogTW9kZWwuZmluZEFuZENvdW50QWxsKHtcclxuICAgKiAgIHdoZXJlOiAuLi4sXHJcbiAgICogICBsaW1pdDogMTIsXHJcbiAgICogICBvZmZzZXQ6IDEyXHJcbiAgICogfSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAqICAgLi4uXHJcbiAgICogfSlcclxuICAgKlxyXG4gICAqICMgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIGByZXN1bHQucm93c2Agd2lsbCBjb250YWluIHJvd3MgMTMgdGhyb3VnaCAyNCwgd2hpbGUgYHJlc3VsdC5jb3VudGAgd2lsbCByZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIHRoYXQgbWF0Y2hlZCB5b3VyIHF1ZXJ5LlxyXG4gICAqXHJcbiAgICogIyBXaGVuIHlvdSBhZGQgaW5jbHVkZXMsIG9ubHkgdGhvc2Ugd2hpY2ggYXJlIHJlcXVpcmVkIChlaXRoZXIgYmVjYXVzZSB0aGV5IGhhdmUgYSB3aGVyZSBjbGF1c2UsIG9yIGJlY2F1c2UgYHJlcXVpcmVkYCBpcyBleHBsaWNpdGx5IHNldCB0byB0cnVlIG9uIHRoZSBpbmNsdWRlKSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjb3VudCBwYXJ0LlxyXG4gICAqXHJcbiAgICogIyBTdXBwb3NlIHlvdSB3YW50IHRvIGZpbmQgYWxsIHVzZXJzIHdobyBoYXZlIGEgcHJvZmlsZSBhdHRhY2hlZDpcclxuICAgKlxyXG4gICAqIFVzZXIuZmluZEFuZENvdW50QWxsKHtcclxuICAgKiAgIGluY2x1ZGU6IFtcclxuICAgKiAgICAgIHsgbW9kZWw6IFByb2ZpbGUsIHJlcXVpcmVkOiB0cnVlfVxyXG4gICAqICAgXSxcclxuICAgKiAgIGxpbWl0IDNcclxuICAgKiB9KTtcclxuICAgKlxyXG4gICAqICMgQmVjYXVzZSB0aGUgaW5jbHVkZSBmb3IgYFByb2ZpbGVgIGhhcyBgcmVxdWlyZWRgIHNldCBpdCB3aWxsIHJlc3VsdCBpbiBhbiBpbm5lciBqb2luLCBhbmQgb25seSB0aGUgdXNlcnMgd2hvIGhhdmUgYSBwcm9maWxlIHdpbGwgYmUgY291bnRlZC4gSWYgd2UgcmVtb3ZlIGByZXF1aXJlZGAgZnJvbSB0aGUgaW5jbHVkZSwgYm90aCB1c2VycyB3aXRoIGFuZCB3aXRob3V0IHByb2ZpbGVzIHdpbGwgYmUgY291bnRlZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBTZWUgZmluZEFsbCBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRBbGx9IGZvciBhIHNwZWNpZmljYXRpb24gb2YgZmluZCBhbmQgcXVlcnkgb3B0aW9uc1xyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgTW9kZWwuY291bnR9IGZvciBhIHNwZWNpZmljYXRpb24gb2YgY291bnQgb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8e2NvdW50OiBudW1iZXIsIHJvd3M6IE1vZGVsW119Pn1cclxuICAgKi9cclxuICBzdGF0aWMgZmluZEFuZENvdW50QWxsKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgIV8uaXNQbGFpbk9iamVjdChvcHRpb25zKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBwYXNzZWQgdG8gZmluZEFuZENvdW50QWxsIG11c3QgYmUgYW4gb3B0aW9ucyBvYmplY3QsIHVzZSBmaW5kQnlQayBpZiB5b3Ugd2lzaCB0byBwYXNzIGEgc2luZ2xlIHByaW1hcnkga2V5IHZhbHVlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY291bnRPcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xyXG5cclxuICAgIGlmIChjb3VudE9wdGlvbnMuYXR0cmlidXRlcykge1xyXG4gICAgICBjb3VudE9wdGlvbnMuYXR0cmlidXRlcyA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xyXG4gICAgICB0aGlzLmNvdW50KGNvdW50T3B0aW9ucyksXHJcbiAgICAgIHRoaXMuZmluZEFsbChvcHRpb25zKVxyXG4gICAgXSlcclxuICAgICAgLnRoZW4oKFtjb3VudCwgcm93c10pID0+ICh7XHJcbiAgICAgICAgY291bnQsXHJcbiAgICAgICAgcm93czogY291bnQgPT09IDAgPyBbXSA6IHJvd3NcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZCB0aGUgbWF4aW11bSB2YWx1ZSBvZiBmaWVsZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIGF0dHJpYnV0ZSAvIGZpZWxkIG5hbWVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFNlZSBhZ2dyZWdhdGVcclxuICAgKlxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgTW9kZWwuYWdncmVnYXRlfSBmb3Igb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8Kj59XHJcbiAgICovXHJcbiAgc3RhdGljIG1heChmaWVsZCwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMuYWdncmVnYXRlKGZpZWxkLCAnbWF4Jywgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaW5kIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGZpZWxkXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgYXR0cmlidXRlIC8gZmllbGQgbmFtZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gU2VlIGFnZ3JlZ2F0ZVxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbC5hZ2dyZWdhdGV9IGZvciBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTwqPn1cclxuICAgKi9cclxuICBzdGF0aWMgbWluKGZpZWxkLCBvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hZ2dyZWdhdGUoZmllbGQsICdtaW4nLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmQgdGhlIHN1bSBvZiBmaWVsZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIGF0dHJpYnV0ZSAvIGZpZWxkIG5hbWVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFNlZSBhZ2dyZWdhdGVcclxuICAgKlxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgTW9kZWwuYWdncmVnYXRlfSBmb3Igb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn1cclxuICAgKi9cclxuICBzdGF0aWMgc3VtKGZpZWxkLCBvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hZ2dyZWdhdGUoZmllbGQsICdzdW0nLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkcyBhIG5ldyBtb2RlbCBpbnN0YW5jZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSB2YWx1ZXMgQW4gb2JqZWN0IG9mIGtleSB2YWx1ZSBwYWlycyBvciBhbiBhcnJheSBvZiBzdWNoLiBJZiBhbiBhcnJheSwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIGluc3RhbmNlcy5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gIFtvcHRpb25zXSBJbnN0YW5jZSBidWlsZCBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yYXc9ZmFsc2VdIElmIHNldCB0byB0cnVlLCB2YWx1ZXMgd2lsbCBpZ25vcmUgZmllbGQgYW5kIHZpcnR1YWwgc2V0dGVycy5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmlzTmV3UmVjb3JkPXRydWVdIElzIHRoaXMgbmV3IHJlY29yZFxyXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgW29wdGlvbnMuaW5jbHVkZV0gYW4gYXJyYXkgb2YgaW5jbHVkZSBvcHRpb25zIC0gVXNlZCB0byBidWlsZCBwcmVmZXRjaGVkL2luY2x1ZGVkIG1vZGVsIGluc3RhbmNlcy4gU2VlIGBzZXRgXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7TW9kZWx8QXJyYXk8TW9kZWw+fVxyXG4gICAqL1xyXG4gIHN0YXRpYyBidWlsZCh2YWx1ZXMsIG9wdGlvbnMpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYnVsa0J1aWxkKHZhbHVlcywgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWVzLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBidWxrQnVpbGQodmFsdWVTZXRzLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgIGlzTmV3UmVjb3JkOiB0cnVlXHJcbiAgICB9LCBvcHRpb25zIHx8IHt9KTtcclxuXHJcbiAgICBpZiAoIW9wdGlvbnMuaW5jbHVkZVZhbGlkYXRlZCkge1xyXG4gICAgICB0aGlzLl9jb25mb3JtSW5jbHVkZXMob3B0aW9ucywgdGhpcyk7XHJcbiAgICAgIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcclxuICAgICAgICB0aGlzLl9leHBhbmRJbmNsdWRlQWxsKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlSW5jbHVkZWRFbGVtZW50cyhvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zLmF0dHJpYnV0ZXMpIHtcclxuICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzLm1hcChhdHRyaWJ1dGUgPT4gQXJyYXkuaXNBcnJheShhdHRyaWJ1dGUpID8gYXR0cmlidXRlWzFdIDogYXR0cmlidXRlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWVTZXRzLm1hcCh2YWx1ZXMgPT4gdGhpcy5idWlsZCh2YWx1ZXMsIG9wdGlvbnMpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkcyBhIG5ldyBtb2RlbCBpbnN0YW5jZSBhbmQgY2FsbHMgc2F2ZSBvbiBpdC5cclxuXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbC5idWlsZH1cclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsLnNhdmV9XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgIHZhbHVlcyBoYXNoIG9mIGRhdGEgdmFsdWVzIHRvIGNyZWF0ZSBuZXcgcmVjb3JkIHdpdGhcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgIFtvcHRpb25zXSBidWlsZCBhbmQgcXVlcnkgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgW29wdGlvbnMucmF3PWZhbHNlXSBJZiBzZXQgdG8gdHJ1ZSwgdmFsdWVzIHdpbGwgaWdub3JlIGZpZWxkIGFuZCB2aXJ0dWFsIHNldHRlcnMuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICBbb3B0aW9ucy5pc05ld1JlY29yZD10cnVlXSBJcyB0aGlzIG5ldyByZWNvcmRcclxuICAgKiBAcGFyYW0ge0FycmF5fSAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVdIGFuIGFycmF5IG9mIGluY2x1ZGUgb3B0aW9ucyAtIFVzZWQgdG8gYnVpbGQgcHJlZmV0Y2hlZC9pbmNsdWRlZCBtb2RlbCBpbnN0YW5jZXMuIFNlZSBgc2V0YFxyXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgICAgICAgW29wdGlvbnMuZmllbGRzXSBJZiBzZXQsIG9ubHkgY29sdW1ucyBtYXRjaGluZyB0aG9zZSBpbiBmaWVsZHMgd2lsbCBiZSBzYXZlZFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119ICAgICAgW29wdGlvbnMuZmllbGRzXSBBbiBvcHRpb25hbCBhcnJheSBvZiBzdHJpbmdzLCByZXByZXNlbnRpbmcgZGF0YWJhc2UgY29sdW1ucy4gSWYgZmllbGRzIGlzIHByb3ZpZGVkLCBvbmx5IHRob3NlIGNvbHVtbnMgd2lsbCBiZSB2YWxpZGF0ZWQgYW5kIHNhdmVkLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgW29wdGlvbnMuc2lsZW50PWZhbHNlXSBJZiB0cnVlLCB0aGUgdXBkYXRlZEF0IHRpbWVzdGFtcCB3aWxsIG5vdCBiZSB1cGRhdGVkLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gSWYgZmFsc2UsIHZhbGlkYXRpb25zIHdvbid0IGJlIHJ1bi5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgIFtvcHRpb25zLmhvb2tzPXRydWVdIFJ1biBiZWZvcmUgYW5kIGFmdGVyIGNyZWF0ZSAvIHVwZGF0ZSArIHZhbGlkYXRlIGhvb2tzXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gICAgICBbb3B0aW9ucy5sb2dnaW5nPWZhbHNlXSBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCB3aGlsZSBydW5uaW5nIHRoZSBxdWVyeSB0byBsb2cgdGhlIHNxbC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgIFtvcHRpb25zLmJlbmNobWFyaz1mYWxzZV0gUGFzcyBxdWVyeSBleGVjdXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMgYXMgc2Vjb25kIGFyZ3VtZW50IHRvIGxvZ2dpbmcgZnVuY3Rpb24gKG9wdGlvbnMubG9nZ2luZykuXHJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gICBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBbb3B0aW9ucy5zZWFyY2hQYXRoPURFRkFVTFRdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBzY2hlbWEgc2VhcmNoX3BhdGggKFBvc3RncmVzIG9ubHkpXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICBbb3B0aW9ucy5yZXR1cm5pbmc9dHJ1ZV0gUmV0dXJuIHRoZSBhZmZlY3RlZCByb3dzIChvbmx5IGZvciBwb3N0Z3JlcylcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsPn1cclxuICAgKlxyXG4gICAqL1xyXG4gIHN0YXRpYyBjcmVhdGUodmFsdWVzLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMgfHwge30pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmJ1aWxkKHZhbHVlcywge1xyXG4gICAgICBpc05ld1JlY29yZDogdHJ1ZSxcclxuICAgICAgYXR0cmlidXRlczogb3B0aW9ucy5maWVsZHMsXHJcbiAgICAgIGluY2x1ZGU6IG9wdGlvbnMuaW5jbHVkZSxcclxuICAgICAgcmF3OiBvcHRpb25zLnJhdyxcclxuICAgICAgc2lsZW50OiBvcHRpb25zLnNpbGVudFxyXG4gICAgfSkuc2F2ZShvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmQgYSByb3cgdGhhdCBtYXRjaGVzIHRoZSBxdWVyeSwgb3IgYnVpbGQgKGJ1dCBkb24ndCBzYXZlKSB0aGUgcm93IGlmIG5vbmUgaXMgZm91bmQuXHJcbiAgICogVGhlIHN1Y2Nlc3NmdWwgcmVzdWx0IG9mIHRoZSBwcm9taXNlIHdpbGwgYmUgKGluc3RhbmNlLCBidWlsdClcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIG9wdGlvbnMgZmluZCBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgb3B0aW9ucy53aGVyZSBBIGhhc2ggb2Ygc2VhcmNoIGF0dHJpYnV0ZXMuIElmIGB3aGVyZWAgaXMgYSBwbGFpbiBvYmplY3QgaXQgd2lsbCBiZSBhcHBlbmRlZCB3aXRoIGRlZmF1bHRzIHRvIGJ1aWxkIGEgbmV3IGluc3RhbmNlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIFtvcHRpb25zLmRlZmF1bHRzXSBEZWZhdWx0IHZhbHVlcyB0byB1c2UgaWYgYnVpbGRpbmcgYSBuZXcgaW5zdGFuY2VcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbCxib29sZWFuPn1cclxuICAgKi9cclxuICBzdGF0aWMgZmluZE9yQnVpbGQob3B0aW9ucykge1xyXG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLndoZXJlIHx8IGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnTWlzc2luZyB3aGVyZSBhdHRyaWJ1dGUgaW4gdGhlIG9wdGlvbnMgcGFyYW1ldGVyIHBhc3NlZCB0byBmaW5kT3JCdWlsZC4gJyArXHJcbiAgICAgICAgJ1BsZWFzZSBub3RlIHRoYXQgdGhlIEFQSSBoYXMgY2hhbmdlZCwgYW5kIGlzIG5vdyBvcHRpb25zIG9ubHkgKGFuIG9iamVjdCB3aXRoIHdoZXJlLCBkZWZhdWx0cyBrZXlzLCB0cmFuc2FjdGlvbiBldGMuKSdcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdmFsdWVzO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmZpbmRPbmUob3B0aW9ucykudGhlbihpbnN0YW5jZSA9PiB7XHJcbiAgICAgIGlmIChpbnN0YW5jZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHZhbHVlcyA9IF8uY2xvbmUob3B0aW9ucy5kZWZhdWx0cykgfHwge307XHJcbiAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChvcHRpb25zLndoZXJlKSkge1xyXG4gICAgICAgICAgdmFsdWVzID0gVXRpbHMuZGVmYXVsdHModmFsdWVzLCBvcHRpb25zLndoZXJlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5idWlsZCh2YWx1ZXMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtpbnN0YW5jZSwgdHJ1ZV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtpbnN0YW5jZSwgZmFsc2VdKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZCBhIHJvdyB0aGF0IG1hdGNoZXMgdGhlIHF1ZXJ5LCBvciBidWlsZCBhbmQgc2F2ZSB0aGUgcm93IGlmIG5vbmUgaXMgZm91bmRcclxuICAgKiBUaGUgc3VjY2Vzc2Z1bCByZXN1bHQgb2YgdGhlIHByb21pc2Ugd2lsbCBiZSAoaW5zdGFuY2UsIGNyZWF0ZWQpXHJcbiAgICpcclxuICAgKiBJZiBubyB0cmFuc2FjdGlvbiBpcyBwYXNzZWQgaW4gdGhlIGBvcHRpb25zYCBvYmplY3QsIGEgbmV3IHRyYW5zYWN0aW9uIHdpbGwgYmUgY3JlYXRlZCBpbnRlcm5hbGx5LCB0byBwcmV2ZW50IHRoZSByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIG1hdGNoaW5nIHJvdyBpcyBjcmVhdGVkIGJ5IGFub3RoZXIgY29ubmVjdGlvbiBhZnRlciB0aGUgZmluZCBidXQgYmVmb3JlIHRoZSBpbnNlcnQgY2FsbC5cclxuICAgKiBIb3dldmVyLCBpdCBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGhhbmRsZSB0aGlzIGNhc2UgaW4gU1FMaXRlLCBzcGVjaWZpY2FsbHkgaWYgb25lIHRyYW5zYWN0aW9uIGluc2VydHMgYW5kIGFub3RoZXIgdHJpZXMgdG8gc2VsZWN0IGJlZm9yZSB0aGUgZmlyc3Qgb25lIGhhcyBjb21taXR0ZWQuIEluIHRoaXMgY2FzZSwgYW4gaW5zdGFuY2Ugb2Ygc2VxdWVsaXplLiBUaW1lb3V0RXJyb3Igd2lsbCBiZSB0aHJvd24gaW5zdGVhZC5cclxuICAgKiBJZiBhIHRyYW5zYWN0aW9uIGlzIGNyZWF0ZWQsIGEgc2F2ZXBvaW50IHdpbGwgYmUgY3JlYXRlZCBpbnN0ZWFkLCBhbmQgYW55IHVuaXF1ZSBjb25zdHJhaW50IHZpb2xhdGlvbiB3aWxsIGJlIGhhbmRsZWQgaW50ZXJuYWxseS5cclxuICAgKlxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgTW9kZWwuZmluZEFsbH0gZm9yIGEgZnVsbCBzcGVjaWZpY2F0aW9uIG9mIGZpbmQgYW5kIG9wdGlvbnNcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgIG9wdGlvbnMgZmluZCBhbmQgY3JlYXRlIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICBvcHRpb25zLndoZXJlIHdoZXJlIEEgaGFzaCBvZiBzZWFyY2ggYXR0cmlidXRlcy4gSWYgYHdoZXJlYCBpcyBhIHBsYWluIG9iamVjdCBpdCB3aWxsIGJlIGFwcGVuZGVkIHdpdGggZGVmYXVsdHMgdG8gYnVpbGQgYSBuZXcgaW5zdGFuY2UuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgW29wdGlvbnMuZGVmYXVsdHNdIERlZmF1bHQgdmFsdWVzIHRvIHVzZSBpZiBjcmVhdGluZyBhIG5ldyBpbnN0YW5jZVxyXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsLGJvb2xlYW4+fVxyXG4gICAqL1xyXG4gIHN0YXRpYyBmaW5kT3JDcmVhdGUob3B0aW9ucykge1xyXG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLndoZXJlIHx8IGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnTWlzc2luZyB3aGVyZSBhdHRyaWJ1dGUgaW4gdGhlIG9wdGlvbnMgcGFyYW1ldGVyIHBhc3NlZCB0byBmaW5kT3JDcmVhdGUuICcgK1xyXG4gICAgICAgICdQbGVhc2Ugbm90ZSB0aGF0IHRoZSBBUEkgaGFzIGNoYW5nZWQsIGFuZCBpcyBub3cgb3B0aW9ucyBvbmx5IChhbiBvYmplY3Qgd2l0aCB3aGVyZSwgZGVmYXVsdHMga2V5cywgdHJhbnNhY3Rpb24gZXRjLiknXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xyXG5cclxuICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XHJcbiAgICAgIGNvbnN0IGRlZmF1bHRzID0gT2JqZWN0LmtleXMob3B0aW9ucy5kZWZhdWx0cyk7XHJcbiAgICAgIGNvbnN0IHVua25vd25EZWZhdWx0cyA9IGRlZmF1bHRzLmZpbHRlcihuYW1lID0+ICF0aGlzLnJhd0F0dHJpYnV0ZXNbbmFtZV0pO1xyXG5cclxuICAgICAgaWYgKHVua25vd25EZWZhdWx0cy5sZW5ndGgpIHtcclxuICAgICAgICBsb2dnZXIud2FybihgVW5rbm93biBhdHRyaWJ1dGVzICgke3Vua25vd25EZWZhdWx0c30pIHBhc3NlZCB0byBkZWZhdWx0cyBvcHRpb24gb2YgZmluZE9yQ3JlYXRlYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucy50cmFuc2FjdGlvbiA9PT0gdW5kZWZpbmVkICYmIHRoaXMuc2VxdWVsaXplLmNvbnN0cnVjdG9yLl9jbHMpIHtcclxuICAgICAgY29uc3QgdCA9IHRoaXMuc2VxdWVsaXplLmNvbnN0cnVjdG9yLl9jbHMuZ2V0KCd0cmFuc2FjdGlvbicpO1xyXG4gICAgICBpZiAodCkge1xyXG4gICAgICAgIG9wdGlvbnMudHJhbnNhY3Rpb24gPSB0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50ZXJuYWxUcmFuc2FjdGlvbiA9ICFvcHRpb25zLnRyYW5zYWN0aW9uO1xyXG4gICAgbGV0IHZhbHVlcztcclxuICAgIGxldCB0cmFuc2FjdGlvbjtcclxuXHJcbiAgICAvLyBDcmVhdGUgYSB0cmFuc2FjdGlvbiBvciBhIHNhdmVwb2ludCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSB0cmFuc2FjdGlvbiB3YXMgcGFzc2VkIGluXHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUudHJhbnNhY3Rpb24ob3B0aW9ucykudGhlbih0ID0+IHtcclxuICAgICAgdHJhbnNhY3Rpb24gPSB0O1xyXG4gICAgICBvcHRpb25zLnRyYW5zYWN0aW9uID0gdDtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmZpbmRPbmUoVXRpbHMuZGVmYXVsdHMoeyB0cmFuc2FjdGlvbiB9LCBvcHRpb25zKSk7XHJcbiAgICB9KS50aGVuKGluc3RhbmNlID0+IHtcclxuICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIFtpbnN0YW5jZSwgZmFsc2VdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YWx1ZXMgPSBfLmNsb25lKG9wdGlvbnMuZGVmYXVsdHMpIHx8IHt9O1xyXG4gICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMud2hlcmUpKSB7XHJcbiAgICAgICAgdmFsdWVzID0gVXRpbHMuZGVmYXVsdHModmFsdWVzLCBvcHRpb25zLndoZXJlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgb3B0aW9ucy5leGNlcHRpb24gPSB0cnVlO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHZhbHVlcywgb3B0aW9ucykudGhlbihpbnN0YW5jZSA9PiB7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlLmdldCh0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGUsIHsgcmF3OiB0cnVlIH0pID09PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyBJZiB0aGUgcXVlcnkgcmV0dXJuZWQgYW4gZW1wdHkgcmVzdWx0IGZvciB0aGUgcHJpbWFyeSBrZXksIHdlIGtub3cgdGhhdCB0aGlzIHdhcyBhY3R1YWxseSBhIHVuaXF1ZSBjb25zdHJhaW50IHZpb2xhdGlvblxyXG4gICAgICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5VbmlxdWVDb25zdHJhaW50RXJyb3IoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbaW5zdGFuY2UsIHRydWVdO1xyXG4gICAgICB9KS5jYXRjaChzZXF1ZWxpemVFcnJvcnMuVW5pcXVlQ29uc3RyYWludEVycm9yLCBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZFdoZXJlID0gVXRpbHMuZmxhdHRlbk9iamVjdERlZXAob3B0aW9ucy53aGVyZSk7XHJcbiAgICAgICAgY29uc3QgZmxhdHRlbmVkV2hlcmVLZXlzID0gT2JqZWN0LmtleXMoZmxhdHRlbmVkV2hlcmUpLm1hcChuYW1lID0+IF8ubGFzdChuYW1lLnNwbGl0KCcuJykpKTtcclxuICAgICAgICBjb25zdCB3aGVyZUZpZWxkcyA9IGZsYXR0ZW5lZFdoZXJlS2V5cy5tYXAobmFtZSA9PiBfLmdldCh0aGlzLnJhd0F0dHJpYnV0ZXMsIGAke25hbWV9LmZpZWxkYCwgbmFtZSkpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRGaWVsZHMgPSBvcHRpb25zLmRlZmF1bHRzICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZGVmYXVsdHMpXHJcbiAgICAgICAgICAuZmlsdGVyKG5hbWUgPT4gdGhpcy5yYXdBdHRyaWJ1dGVzW25hbWVdKVxyXG4gICAgICAgICAgLm1hcChuYW1lID0+IHRoaXMucmF3QXR0cmlidXRlc1tuYW1lXS5maWVsZCB8fCBuYW1lKTtcclxuXHJcbiAgICAgICAgY29uc3QgZXJyRmllbGRLZXlzID0gT2JqZWN0LmtleXMoZXJyLmZpZWxkcyk7XHJcbiAgICAgICAgY29uc3QgZXJyRmllbGRzV2hlcmVJbnRlcnNlY3RzID0gVXRpbHMuaW50ZXJzZWN0cyhlcnJGaWVsZEtleXMsIHdoZXJlRmllbGRzKTtcclxuICAgICAgICBpZiAoZGVmYXVsdEZpZWxkcyAmJiAhZXJyRmllbGRzV2hlcmVJbnRlcnNlY3RzICYmIFV0aWxzLmludGVyc2VjdHMoZXJyRmllbGRLZXlzLCBkZWZhdWx0RmllbGRzKSkge1xyXG4gICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVyckZpZWxkc1doZXJlSW50ZXJzZWN0cykge1xyXG4gICAgICAgICAgXy5lYWNoKGVyci5maWVsZHMsICh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmZpZWxkUmF3QXR0cmlidXRlc01hcFtrZXldLmZpZWxkTmFtZTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLnRvU3RyaW5nKCkgIT09IG9wdGlvbnMud2hlcmVbbmFtZV0udG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm5hbWV9I2ZpbmRPckNyZWF0ZTogdmFsdWUgdXNlZCBmb3IgJHtuYW1lfSB3YXMgbm90IGVxdWFsIGZvciBib3RoIHRoZSBmaW5kIGFuZCB0aGUgY3JlYXRlIGNhbGxzLCAnJHtvcHRpb25zLndoZXJlW25hbWVdfScgdnMgJyR7dmFsdWV9J2ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNvbWVvbmUgbXVzdCBoYXZlIGNyZWF0ZWQgYSBtYXRjaGluZyBpbnN0YW5jZSBpbnNpZGUgdGhlIHNhbWUgdHJhbnNhY3Rpb24gc2luY2Ugd2UgbGFzdCBkaWQgYSBmaW5kLiBMZXQncyBmaW5kIGl0IVxyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRPbmUoVXRpbHMuZGVmYXVsdHMoe1xyXG4gICAgICAgICAgdHJhbnNhY3Rpb246IGludGVybmFsVHJhbnNhY3Rpb24gPyBudWxsIDogdHJhbnNhY3Rpb25cclxuICAgICAgICB9LCBvcHRpb25zKSkudGhlbihpbnN0YW5jZSA9PiB7XHJcbiAgICAgICAgICAvLyBTYW5pdHkgY2hlY2ssIGlkZWFsbHkgd2UgY2F1Z2h0IHRoaXMgYXQgdGhlIGRlZmF1bHRGZWlsZHMvZXJyLmZpZWxkcyBjaGVja1xyXG4gICAgICAgICAgLy8gQnV0IGlmIHdlIGRpZG4ndCBhbmQgaW5zdGFuY2UgaXMgbnVsbCwgd2Ugd2lsbCB0aHJvd1xyXG4gICAgICAgICAgaWYgKGluc3RhbmNlID09PSBudWxsKSB0aHJvdyBlcnI7XHJcbiAgICAgICAgICByZXR1cm4gW2luc3RhbmNlLCBmYWxzZV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgIGlmIChpbnRlcm5hbFRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uKSB7XHJcbiAgICAgICAgLy8gSWYgd2UgY3JlYXRlZCBhIHRyYW5zYWN0aW9uIGludGVybmFsbHkgKGFuZCBub3QganVzdCBhIHNhdmVwb2ludCksIHdlIHNob3VsZCBjbGVhbiBpdCB1cFxyXG4gICAgICAgIHJldHVybiB0cmFuc2FjdGlvbi5jb21taXQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIG1vcmUgcGVyZm9ybWFudCBmaW5kT3JDcmVhdGUgdGhhdCB3aWxsIG5vdCB3b3JrIHVuZGVyIGEgdHJhbnNhY3Rpb24gKGF0IGxlYXN0IG5vdCBpbiBwb3N0Z3JlcylcclxuICAgKiBXaWxsIGV4ZWN1dGUgYSBmaW5kIGNhbGwsIGlmIGVtcHR5IHRoZW4gYXR0ZW1wdCB0byBjcmVhdGUsIGlmIHVuaXF1ZSBjb25zdHJhaW50IHRoZW4gYXR0ZW1wdCB0byBmaW5kIGFnYWluXHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRBbGx9IGZvciBhIGZ1bGwgc3BlY2lmaWNhdGlvbiBvZiBmaW5kIGFuZCBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBmaW5kIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy53aGVyZSBBIGhhc2ggb2Ygc2VhcmNoIGF0dHJpYnV0ZXMuIElmIGB3aGVyZWAgaXMgYSBwbGFpbiBvYmplY3QgaXQgd2lsbCBiZSBhcHBlbmRlZCB3aXRoIGRlZmF1bHRzIHRvIGJ1aWxkIGEgbmV3IGluc3RhbmNlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5kZWZhdWx0c10gRGVmYXVsdCB2YWx1ZXMgdG8gdXNlIGlmIGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbCxib29sZWFuPn1cclxuICAgKi9cclxuICBzdGF0aWMgZmluZENyZWF0ZUZpbmQob3B0aW9ucykge1xyXG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLndoZXJlKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnTWlzc2luZyB3aGVyZSBhdHRyaWJ1dGUgaW4gdGhlIG9wdGlvbnMgcGFyYW1ldGVyIHBhc3NlZCB0byBmaW5kQ3JlYXRlRmluZC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHZhbHVlcyA9IF8uY2xvbmUob3B0aW9ucy5kZWZhdWx0cykgfHwge307XHJcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMud2hlcmUpKSB7XHJcbiAgICAgIHZhbHVlcyA9IFV0aWxzLmRlZmF1bHRzKHZhbHVlcywgb3B0aW9ucy53aGVyZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHJldHVybiB0aGlzLmZpbmRPbmUob3B0aW9ucykudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSByZXR1cm4gW3Jlc3VsdCwgZmFsc2VdO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHZhbHVlcywgb3B0aW9ucylcclxuICAgICAgICAudGhlbihyZXN1bHQgPT4gW3Jlc3VsdCwgdHJ1ZV0pXHJcbiAgICAgICAgLmNhdGNoKHNlcXVlbGl6ZUVycm9ycy5VbmlxdWVDb25zdHJhaW50RXJyb3IsICgpID0+IHRoaXMuZmluZE9uZShvcHRpb25zKS50aGVuKHJlc3VsdCA9PiBbcmVzdWx0LCBmYWxzZV0pKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zZXJ0IG9yIHVwZGF0ZSBhIHNpbmdsZSByb3cuIEFuIHVwZGF0ZSB3aWxsIGJlIGV4ZWN1dGVkIGlmIGEgcm93IHdoaWNoIG1hdGNoZXMgdGhlIHN1cHBsaWVkIHZhbHVlcyBvbiBlaXRoZXIgdGhlIHByaW1hcnkga2V5IG9yIGEgdW5pcXVlIGtleSBpcyBmb3VuZC4gTm90ZSB0aGF0IHRoZSB1bmlxdWUgaW5kZXggbXVzdCBiZSBkZWZpbmVkIGluIHlvdXIgc2VxdWVsaXplIG1vZGVsIGFuZCBub3QganVzdCBpbiB0aGUgdGFibGUuIE90aGVyd2lzZSB5b3UgbWF5IGV4cGVyaWVuY2UgYSB1bmlxdWUgY29uc3RyYWludCB2aW9sYXRpb24sIGJlY2F1c2Ugc2VxdWVsaXplIGZhaWxzIHRvIGlkZW50aWZ5IHRoZSByb3cgdGhhdCBzaG91bGQgYmUgdXBkYXRlZC5cclxuICAgKlxyXG4gICAqICoqSW1wbGVtZW50YXRpb24gZGV0YWlsczoqKlxyXG4gICAqXHJcbiAgICogKiBNeVNRTCAtIEltcGxlbWVudGVkIGFzIGEgc2luZ2xlIHF1ZXJ5IGBJTlNFUlQgdmFsdWVzIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIHZhbHVlc2BcclxuICAgKiAqIFBvc3RncmVTUUwgLSBJbXBsZW1lbnRlZCBhcyBhIHRlbXBvcmFyeSBmdW5jdGlvbiB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZzogSU5TRVJUIEVYQ0VQVElPTiBXSEVOIHVuaXF1ZV9jb25zdHJhaW50IFVQREFURVxyXG4gICAqICogU1FMaXRlIC0gSW1wbGVtZW50ZWQgYXMgdHdvIHF1ZXJpZXMgYElOU0VSVDsgVVBEQVRFYC4gVGhpcyBtZWFucyB0aGF0IHRoZSB1cGRhdGUgaXMgZXhlY3V0ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSByb3cgYWxyZWFkeSBleGlzdGVkIG9yIG5vdFxyXG4gICAqICogTVNTUUwgLSBJbXBsZW1lbnRlZCBhcyBhIHNpbmdsZSBxdWVyeSB1c2luZyBgTUVSR0VgIGFuZCBgV0hFTiAoTk9UKSBNQVRDSEVEIFRIRU5gXHJcbiAgICogKipOb3RlKiogdGhhdCBTUUxpdGUgcmV0dXJucyB1bmRlZmluZWQgZm9yIGNyZWF0ZWQsIG5vIG1hdHRlciBpZiB0aGUgcm93IHdhcyBjcmVhdGVkIG9yIHVwZGF0ZWQuIFRoaXMgaXMgYmVjYXVzZSBTUUxpdGUgYWx3YXlzIHJ1bnMgSU5TRVJUIE9SIElHTk9SRSArIFVQREFURSwgaW4gYSBzaW5nbGUgcXVlcnksIHNvIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IHdoZXRoZXIgdGhlIHJvdyB3YXMgaW5zZXJ0ZWQgb3Igbm90LlxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICB2YWx1ZXMgaGFzaCBvZiB2YWx1ZXMgdG8gdXBzZXJ0XHJcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICBbb3B0aW9uc10gdXBzZXJ0IG9wdGlvbnNcclxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFJ1biB2YWxpZGF0aW9ucyBiZWZvcmUgdGhlIHJvdyBpcyBpbnNlcnRlZFxyXG4gICAqIEBwYXJhbSAge0FycmF5fSAgICAgICAgW29wdGlvbnMuZmllbGRzPU9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcyldIFRoZSBmaWVsZHMgdG8gaW5zZXJ0IC8gdXBkYXRlLiBEZWZhdWx0cyB0byBhbGwgY2hhbmdlZCBmaWVsZHNcclxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLmhvb2tzPXRydWVdICBSdW4gYmVmb3JlIC8gYWZ0ZXIgdXBzZXJ0IGhvb2tzP1xyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMucmV0dXJuaW5nPWZhbHNlXSBBcHBlbmQgUkVUVVJOSU5HICogdG8gZ2V0IGJhY2sgYXV0byBnZW5lcmF0ZWQgdmFsdWVzIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqIEBwYXJhbSAge1RyYW5zYWN0aW9ufSAgW29wdGlvbnMudHJhbnNhY3Rpb25dIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxyXG4gICAqIEBwYXJhbSAge0Z1bmN0aW9ufSAgICAgW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgcm93IHdhcyBjcmVhdGVkIG9yIHVwZGF0ZWQuIEZvciBNeVNRTC9NYXJpYURCLCBpdCByZXR1cm5zIGB0cnVlYCB3aGVuIGluc2VydGVkIGFuZCBgZmFsc2VgIHdoZW4gdXBkYXRlZC4gRm9yIFBvc3RncmVzL01TU1FMIHdpdGggKG9wdGlvbnMucmV0dXJuaW5nPXRydWUpLCBpdCByZXR1cm5zIHJlY29yZCBhbmQgY3JlYXRlZCBib29sZWFuIHdpdGggc2lnbmF0dXJlIGA8TW9kZWwsIGNyZWF0ZWQ+YC5cclxuICAgKi9cclxuICBzdGF0aWMgdXBzZXJ0KHZhbHVlcywgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICBob29rczogdHJ1ZSxcclxuICAgICAgcmV0dXJuaW5nOiBmYWxzZSxcclxuICAgICAgdmFsaWRhdGU6IHRydWVcclxuICAgIH0sIFV0aWxzLmNsb25lRGVlcChvcHRpb25zIHx8IHt9KSk7XHJcblxyXG4gICAgb3B0aW9ucy5tb2RlbCA9IHRoaXM7XHJcblxyXG4gICAgY29uc3QgY3JlYXRlZEF0QXR0ciA9IHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuY3JlYXRlZEF0O1xyXG4gICAgY29uc3QgdXBkYXRlZEF0QXR0ciA9IHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0O1xyXG4gICAgY29uc3QgaGFzUHJpbWFyeSA9IHRoaXMucHJpbWFyeUtleUZpZWxkIGluIHZhbHVlcyB8fCB0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGUgaW4gdmFsdWVzO1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmJ1aWxkKHZhbHVlcyk7XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLmZpZWxkcykge1xyXG4gICAgICBvcHRpb25zLmZpZWxkcyA9IE9iamVjdC5rZXlzKGluc3RhbmNlLl9jaGFuZ2VkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucy52YWxpZGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS52YWxpZGF0ZShvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIC8vIE1hcCBmaWVsZCBuYW1lc1xyXG4gICAgICBjb25zdCB1cGRhdGVkRGF0YVZhbHVlcyA9IF8ucGljayhpbnN0YW5jZS5kYXRhVmFsdWVzLCBPYmplY3Qua2V5cyhpbnN0YW5jZS5fY2hhbmdlZCkpO1xyXG4gICAgICBjb25zdCBpbnNlcnRWYWx1ZXMgPSBVdGlscy5tYXBWYWx1ZUZpZWxkTmFtZXMoaW5zdGFuY2UuZGF0YVZhbHVlcywgT2JqZWN0LmtleXMoaW5zdGFuY2UucmF3QXR0cmlidXRlcyksIHRoaXMpO1xyXG4gICAgICBjb25zdCB1cGRhdGVWYWx1ZXMgPSBVdGlscy5tYXBWYWx1ZUZpZWxkTmFtZXModXBkYXRlZERhdGFWYWx1ZXMsIG9wdGlvbnMuZmllbGRzLCB0aGlzKTtcclxuICAgICAgY29uc3Qgbm93ID0gVXRpbHMubm93KHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCk7XHJcblxyXG4gICAgICAvLyBBdHRhY2ggY3JlYXRlZEF0XHJcbiAgICAgIGlmIChjcmVhdGVkQXRBdHRyICYmICF1cGRhdGVWYWx1ZXNbY3JlYXRlZEF0QXR0cl0pIHtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMucmF3QXR0cmlidXRlc1tjcmVhdGVkQXRBdHRyXS5maWVsZCB8fCBjcmVhdGVkQXRBdHRyO1xyXG4gICAgICAgIGluc2VydFZhbHVlc1tmaWVsZF0gPSB0aGlzLl9nZXREZWZhdWx0VGltZXN0YW1wKGNyZWF0ZWRBdEF0dHIpIHx8IG5vdztcclxuICAgICAgfVxyXG4gICAgICBpZiAodXBkYXRlZEF0QXR0ciAmJiAhaW5zZXJ0VmFsdWVzW3VwZGF0ZWRBdEF0dHJdKSB7XHJcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLnJhd0F0dHJpYnV0ZXNbdXBkYXRlZEF0QXR0cl0uZmllbGQgfHwgdXBkYXRlZEF0QXR0cjtcclxuICAgICAgICBpbnNlcnRWYWx1ZXNbZmllbGRdID0gdXBkYXRlVmFsdWVzW2ZpZWxkXSA9IHRoaXMuX2dldERlZmF1bHRUaW1lc3RhbXAodXBkYXRlZEF0QXR0cikgfHwgbm93O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBCdWlsZCBhZGRzIGEgbnVsbCB2YWx1ZSBmb3IgdGhlIHByaW1hcnkga2V5LCBpZiBub25lIHdhcyBnaXZlbiBieSB0aGUgdXNlci5cclxuICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhhdCBiZWNhdXNlIG9mIHNvbWUgUG9zdGdyZXMgdGVjaG5pY2FsaXRpZXMuXHJcbiAgICAgIGlmICghaGFzUHJpbWFyeSAmJiB0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiYgIXRoaXMucmF3QXR0cmlidXRlc1t0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGVdLmRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGRlbGV0ZSBpbnNlcnRWYWx1ZXNbdGhpcy5wcmltYXJ5S2V5RmllbGRdO1xyXG4gICAgICAgIGRlbGV0ZSB1cGRhdGVWYWx1ZXNbdGhpcy5wcmltYXJ5S2V5RmllbGRdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xyXG4gICAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcygnYmVmb3JlVXBzZXJ0JywgdmFsdWVzLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuUXVlcnlJbnRlcmZhY2UudXBzZXJ0KHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCBpbnNlcnRWYWx1ZXMsIHVwZGF0ZVZhbHVlcywgaW5zdGFuY2Uud2hlcmUoKSwgdGhpcywgb3B0aW9ucyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAudGhlbigoW2NyZWF0ZWQsIHByaW1hcnlLZXldKSA9PiB7XHJcbiAgICAgICAgICBpZiAob3B0aW9ucy5yZXR1cm5pbmcgPT09IHRydWUgJiYgcHJpbWFyeUtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kQnlQayhwcmltYXJ5S2V5LCBvcHRpb25zKS50aGVuKHJlY29yZCA9PiBbcmVjb3JkLCBjcmVhdGVkXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZWQ7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAudGFwKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICBpZiAob3B0aW9ucy5ob29rcykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcygnYWZ0ZXJVcHNlcnQnLCByZXN1bHQsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW5kIGluc2VydCBtdWx0aXBsZSBpbnN0YW5jZXMgaW4gYnVsay5cclxuICAgKlxyXG4gICAqIFRoZSBzdWNjZXNzIGhhbmRsZXIgaXMgcGFzc2VkIGFuIGFycmF5IG9mIGluc3RhbmNlcywgYnV0IHBsZWFzZSBub3RpY2UgdGhhdCB0aGVzZSBtYXkgbm90IGNvbXBsZXRlbHkgcmVwcmVzZW50IHRoZSBzdGF0ZSBvZiB0aGUgcm93cyBpbiB0aGUgREIuIFRoaXMgaXMgYmVjYXVzZSBNeVNRTFxyXG4gICAqIGFuZCBTUUxpdGUgZG8gbm90IG1ha2UgaXQgZWFzeSB0byBvYnRhaW4gYmFjayBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBJRHMgYW5kIG90aGVyIGRlZmF1bHQgdmFsdWVzIGluIGEgd2F5IHRoYXQgY2FuIGJlIG1hcHBlZCB0byBtdWx0aXBsZSByZWNvcmRzLlxyXG4gICAqIFRvIG9idGFpbiBJbnN0YW5jZXMgZm9yIHRoZSBuZXdseSBjcmVhdGVkIHZhbHVlcywgeW91IHdpbGwgbmVlZCB0byBxdWVyeSBmb3IgdGhlbSBhZ2Fpbi5cclxuICAgKlxyXG4gICAqIElmIHZhbGlkYXRpb24gZmFpbHMsIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIHdpdGggYW4gYXJyYXktbGlrZSBbQWdncmVnYXRlRXJyb3JdKGh0dHA6Ly9ibHVlYmlyZGpzLmNvbS9kb2NzL2FwaS9hZ2dyZWdhdGVlcnJvci5odG1sKVxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7QXJyYXl9ICAgICAgICByZWNvcmRzICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIG9iamVjdHMgKGtleS92YWx1ZSBwYWlycykgdG8gY3JlYXRlIGluc3RhbmNlcyBmcm9tXHJcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICBbb3B0aW9uc10gICAgICAgICAgICAgICAgICAgICAgICBCdWxrIGNyZWF0ZSBvcHRpb25zXHJcbiAgICogQHBhcmFtICB7QXJyYXl9ICAgICAgICBbb3B0aW9ucy5maWVsZHNdICAgICAgICAgICAgICAgICBGaWVsZHMgdG8gaW5zZXJ0IChkZWZhdWx0cyB0byBhbGwgZmllbGRzKVxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMudmFsaWRhdGU9ZmFsc2VdICAgICAgICAgU2hvdWxkIGVhY2ggcm93IGJlIHN1YmplY3QgdG8gdmFsaWRhdGlvbiBiZWZvcmUgaXQgaXMgaW5zZXJ0ZWQuIFRoZSB3aG9sZSBpbnNlcnQgd2lsbCBmYWlsIGlmIG9uZSByb3cgZmFpbHMgdmFsaWRhdGlvblxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuaG9va3M9dHJ1ZV0gICAgICAgICAgICAgUnVuIGJlZm9yZSAvIGFmdGVyIGJ1bGsgY3JlYXRlIGhvb2tzP1xyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuaW5kaXZpZHVhbEhvb2tzPWZhbHNlXSAgUnVuIGJlZm9yZSAvIGFmdGVyIGNyZWF0ZSBob29rcyBmb3IgZWFjaCBpbmRpdmlkdWFsIEluc3RhbmNlPyBCdWxrQ3JlYXRlIGhvb2tzIHdpbGwgc3RpbGwgYmUgcnVuIGlmIG9wdGlvbnMuaG9va3MgaXMgdHJ1ZS5cclxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLmlnbm9yZUR1cGxpY2F0ZXM9ZmFsc2VdIElnbm9yZSBkdXBsaWNhdGUgdmFsdWVzIGZvciBwcmltYXJ5IGtleXM/IChub3Qgc3VwcG9ydGVkIGJ5IE1TU1FMIG9yIFBvc3RncmVzIDwgOS41KVxyXG4gICAqIEBwYXJhbSAge0FycmF5fSAgICAgICAgW29wdGlvbnMudXBkYXRlT25EdXBsaWNhdGVdICAgICAgRmllbGRzIHRvIHVwZGF0ZSBpZiByb3cga2V5IGFscmVhZHkgZXhpc3RzIChvbiBkdXBsaWNhdGUga2V5IHVwZGF0ZSk/IChvbmx5IHN1cHBvcnRlZCBieSBNeVNRTCwgTWFyaWFEQiwgU1FMaXRlID49IDMuMjQuMCAmIFBvc3RncmVzID49IDkuNSkuIEJ5IGRlZmF1bHQsIGFsbCBmaWVsZHMgYXJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtICB7VHJhbnNhY3Rpb259ICBbb3B0aW9ucy50cmFuc2FjdGlvbl0gICAgICAgICAgICBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcclxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gICAgIFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdICAgICAgICAgIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuYmVuY2htYXJrPWZhbHNlXSAgICAgICAgUGFzcyBxdWVyeSBleGVjdXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMgYXMgc2Vjb25kIGFyZ3VtZW50IHRvIGxvZ2dpbmcgZnVuY3Rpb24gKG9wdGlvbnMubG9nZ2luZykuXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbnxBcnJheX0gW29wdGlvbnMucmV0dXJuaW5nPWZhbHNlXSAgICAgICBJZiB0cnVlLCBhcHBlbmQgUkVUVVJOSU5HICogdG8gZ2V0IGJhY2sgYWxsIHZhbHVlczsgaWYgYW4gYXJyYXkgb2YgY29sdW1uIG5hbWVzLCBhcHBlbmQgUkVUVVJOSU5HIDxjb2x1bW5zPiB0byBnZXQgYmFjayBzcGVjaWZpYyBjb2x1bW5zIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSAgICAgQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHNjaGVtYSBzZWFyY2hfcGF0aCAoUG9zdGdyZXMgb25seSlcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PE1vZGVsPj59XHJcbiAgICovXHJcbiAgc3RhdGljIGJ1bGtDcmVhdGUocmVjb3Jkcywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBpZiAoIXJlY29yZHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRpYWxlY3QgPSB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3Q7XHJcbiAgICBjb25zdCBub3cgPSBVdGlscy5ub3codGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KTtcclxuXHJcbiAgICBvcHRpb25zLm1vZGVsID0gdGhpcztcclxuXHJcbiAgICBpZiAoIW9wdGlvbnMuaW5jbHVkZVZhbGlkYXRlZCkge1xyXG4gICAgICB0aGlzLl9jb25mb3JtSW5jbHVkZXMob3B0aW9ucywgdGhpcyk7XHJcbiAgICAgIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcclxuICAgICAgICB0aGlzLl9leHBhbmRJbmNsdWRlQWxsKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlSW5jbHVkZWRFbGVtZW50cyhvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGluc3RhbmNlcyA9IHJlY29yZHMubWFwKHZhbHVlcyA9PiB0aGlzLmJ1aWxkKHZhbHVlcywgeyBpc05ld1JlY29yZDogdHJ1ZSwgaW5jbHVkZTogb3B0aW9ucy5pbmNsdWRlIH0pKTtcclxuXHJcbiAgICBjb25zdCByZWN1cnNpdmVCdWxrQ3JlYXRlID0gKGluc3RhbmNlcywgb3B0aW9ucykgPT4ge1xyXG4gICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgdmFsaWRhdGU6IGZhbHNlLFxyXG4gICAgICAgIGhvb2tzOiB0cnVlLFxyXG4gICAgICAgIGluZGl2aWR1YWxIb29rczogZmFsc2UsXHJcbiAgICAgICAgaWdub3JlRHVwbGljYXRlczogZmFsc2VcclxuICAgICAgfSwgb3B0aW9ucyk7XHJcblxyXG4gICAgICBpZiAob3B0aW9ucy5yZXR1cm5pbmcgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChvcHRpb25zLmFzc29jaWF0aW9uKSB7XHJcbiAgICAgICAgICBvcHRpb25zLnJldHVybmluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvcHRpb25zLnJldHVybmluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob3B0aW9ucy5pZ25vcmVEdXBsaWNhdGVzICYmIFsnbXNzcWwnXS5pbmNsdWRlcyhkaWFsZWN0KSkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYCR7ZGlhbGVjdH0gZG9lcyBub3Qgc3VwcG9ydCB0aGUgaWdub3JlRHVwbGljYXRlcyBvcHRpb24uYCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLnVwZGF0ZU9uRHVwbGljYXRlICYmIChkaWFsZWN0ICE9PSAnbXlzcWwnICYmIGRpYWxlY3QgIT09ICdtYXJpYWRiJyAmJiBkaWFsZWN0ICE9PSAnc3FsaXRlJyAmJiBkaWFsZWN0ICE9PSAncG9zdGdyZXMnKSkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYCR7ZGlhbGVjdH0gZG9lcyBub3Qgc3VwcG9ydCB0aGUgdXBkYXRlT25EdXBsaWNhdGUgb3B0aW9uLmApKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbW9kZWwgPSBvcHRpb25zLm1vZGVsO1xyXG5cclxuICAgICAgb3B0aW9ucy5maWVsZHMgPSBvcHRpb25zLmZpZWxkcyB8fCBPYmplY3Qua2V5cyhtb2RlbC5yYXdBdHRyaWJ1dGVzKTtcclxuICAgICAgY29uc3QgY3JlYXRlZEF0QXR0ciA9IG1vZGVsLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmNyZWF0ZWRBdDtcclxuICAgICAgY29uc3QgdXBkYXRlZEF0QXR0ciA9IG1vZGVsLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdDtcclxuXHJcbiAgICAgIGlmIChvcHRpb25zLnVwZGF0ZU9uRHVwbGljYXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnVwZGF0ZU9uRHVwbGljYXRlKSAmJiBvcHRpb25zLnVwZGF0ZU9uRHVwbGljYXRlLmxlbmd0aCkge1xyXG4gICAgICAgICAgb3B0aW9ucy51cGRhdGVPbkR1cGxpY2F0ZSA9IF8uaW50ZXJzZWN0aW9uKFxyXG4gICAgICAgICAgICBfLndpdGhvdXQoT2JqZWN0LmtleXMobW9kZWwudGFibGVBdHRyaWJ1dGVzKSwgY3JlYXRlZEF0QXR0ciksXHJcbiAgICAgICAgICAgIG9wdGlvbnMudXBkYXRlT25EdXBsaWNhdGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ3VwZGF0ZU9uRHVwbGljYXRlIG9wdGlvbiBvbmx5IHN1cHBvcnRzIG5vbi1lbXB0eSBhcnJheS4nKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xyXG4gICAgICAgIC8vIFJ1biBiZWZvcmUgaG9va1xyXG4gICAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XHJcbiAgICAgICAgICByZXR1cm4gbW9kZWwucnVuSG9va3MoJ2JlZm9yZUJ1bGtDcmVhdGUnLCBpbnN0YW5jZXMsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgLy8gVmFsaWRhdGVcclxuICAgICAgICBpZiAob3B0aW9ucy52YWxpZGF0ZSkge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JzID0gbmV3IFByb21pc2UuQWdncmVnYXRlRXJyb3IoKTtcclxuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlT3B0aW9ucyA9IF8uY2xvbmUob3B0aW9ucyk7XHJcbiAgICAgICAgICB2YWxpZGF0ZU9wdGlvbnMuaG9va3MgPSBvcHRpb25zLmluZGl2aWR1YWxIb29rcztcclxuXHJcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5tYXAoaW5zdGFuY2VzLCBpbnN0YW5jZSA9PlxyXG4gICAgICAgICAgICBpbnN0YW5jZS52YWxpZGF0ZSh2YWxpZGF0ZU9wdGlvbnMpLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IHNlcXVlbGl6ZUVycm9ycy5CdWxrUmVjb3JkRXJyb3IoZXJyLCBpbnN0YW5jZSkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnMuc2tpcDtcclxuICAgICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlcnJvcnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5kaXZpZHVhbEhvb2tzKSB7XHJcbiAgICAgICAgICAvLyBDcmVhdGUgZWFjaCBpbnN0YW5jZSBpbmRpdmlkdWFsbHlcclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLm1hcChpbnN0YW5jZXMsIGluc3RhbmNlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5kaXZpZHVhbE9wdGlvbnMgPSBfLmNsb25lKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBkZWxldGUgaW5kaXZpZHVhbE9wdGlvbnMuZmllbGRzO1xyXG4gICAgICAgICAgICBkZWxldGUgaW5kaXZpZHVhbE9wdGlvbnMuaW5kaXZpZHVhbEhvb2tzO1xyXG4gICAgICAgICAgICBkZWxldGUgaW5kaXZpZHVhbE9wdGlvbnMuaWdub3JlRHVwbGljYXRlcztcclxuICAgICAgICAgICAgaW5kaXZpZHVhbE9wdGlvbnMudmFsaWRhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaW5kaXZpZHVhbE9wdGlvbnMuaG9va3MgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnNhdmUoaW5kaXZpZHVhbE9wdGlvbnMpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuaW5jbHVkZSB8fCAhb3B0aW9ucy5pbmNsdWRlLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIC8vIE5lc3RlZCBjcmVhdGlvbiBmb3IgQmVsb25nc1RvIHJlbGF0aW9uc1xyXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UubWFwKG9wdGlvbnMuaW5jbHVkZS5maWx0ZXIoaW5jbHVkZSA9PiBpbmNsdWRlLmFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvKSwgaW5jbHVkZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uSW5zdGFuY2VzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uSW5zdGFuY2VJbmRleFRvSW5zdGFuY2VNYXAgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRpb25JbnN0YW5jZSA9IGluc3RhbmNlLmdldChpbmNsdWRlLmFzKTtcclxuICAgICAgICAgICAgICBpZiAoYXNzb2NpYXRpb25JbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgYXNzb2NpYXRpb25JbnN0YW5jZXMucHVzaChhc3NvY2lhdGlvbkluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGFzc29jaWF0aW9uSW5zdGFuY2VJbmRleFRvSW5zdGFuY2VNYXAucHVzaChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWFzc29jaWF0aW9uSW5zdGFuY2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5jbHVkZU9wdGlvbnMgPSBfKFV0aWxzLmNsb25lRGVlcChpbmNsdWRlKSlcclxuICAgICAgICAgICAgICAub21pdChbJ2Fzc29jaWF0aW9uJ10pXHJcbiAgICAgICAgICAgICAgLmRlZmF1bHRzKHtcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uOiBvcHRpb25zLnRyYW5zYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgbG9nZ2luZzogb3B0aW9ucy5sb2dnaW5nXHJcbiAgICAgICAgICAgICAgfSkudmFsdWUoKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZWN1cnNpdmVCdWxrQ3JlYXRlKGFzc29jaWF0aW9uSW5zdGFuY2VzLCBpbmNsdWRlT3B0aW9ucykudGhlbihhc3NvY2lhdGlvbkluc3RhbmNlcyA9PiB7XHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpZHggaW4gYXNzb2NpYXRpb25JbnN0YW5jZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uSW5zdGFuY2UgPSBhc3NvY2lhdGlvbkluc3RhbmNlc1tpZHhdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBhc3NvY2lhdGlvbkluc3RhbmNlSW5kZXhUb0luc3RhbmNlTWFwW2lkeF07XHJcblxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VbaW5jbHVkZS5hc3NvY2lhdGlvbi5hY2Nlc3NvcnMuc2V0XShhc3NvY2lhdGlvbkluc3RhbmNlLCB7IHNhdmU6IGZhbHNlLCBsb2dnaW5nOiBvcHRpb25zLmxvZ2dpbmcgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgLy8gQ3JlYXRlIGFsbCBpbiBvbmUgcXVlcnlcclxuICAgICAgICAgIC8vIFJlY3JlYXRlIHJlY29yZHMgZnJvbSBpbnN0YW5jZXMgdG8gcmVwcmVzZW50IGFueSBjaGFuZ2VzIG1hZGUgaW4gaG9va3Mgb3IgdmFsaWRhdGlvblxyXG4gICAgICAgICAgcmVjb3JkcyA9IGluc3RhbmNlcy5tYXAoaW5zdGFuY2UgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBpbnN0YW5jZS5kYXRhVmFsdWVzO1xyXG5cclxuICAgICAgICAgICAgLy8gc2V0IGNyZWF0ZWRBdC91cGRhdGVkQXQgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICBpZiAoY3JlYXRlZEF0QXR0ciAmJiAhdmFsdWVzW2NyZWF0ZWRBdEF0dHJdKSB7XHJcbiAgICAgICAgICAgICAgdmFsdWVzW2NyZWF0ZWRBdEF0dHJdID0gbm93O1xyXG4gICAgICAgICAgICAgIGlmICghb3B0aW9ucy5maWVsZHMuaW5jbHVkZXMoY3JlYXRlZEF0QXR0cikpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMuZmllbGRzLnB1c2goY3JlYXRlZEF0QXR0cik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGVkQXRBdHRyICYmICF2YWx1ZXNbdXBkYXRlZEF0QXR0cl0pIHtcclxuICAgICAgICAgICAgICB2YWx1ZXNbdXBkYXRlZEF0QXR0cl0gPSBub3c7XHJcbiAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmZpZWxkcy5pbmNsdWRlcyh1cGRhdGVkQXRBdHRyKSkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWVsZHMucHVzaCh1cGRhdGVkQXRBdHRyKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG91dCA9IE9iamVjdC5hc3NpZ24oe30sIFV0aWxzLm1hcFZhbHVlRmllbGROYW1lcyh2YWx1ZXMsIG9wdGlvbnMuZmllbGRzLCBtb2RlbCkpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBtb2RlbC5fdmlydHVhbEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICBkZWxldGUgb3V0W2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIE1hcCBhdHRyaWJ1dGVzIHRvIGZpZWxkcyBmb3Igc2VyaWFsIGlkZW50aWZpY2F0aW9uXHJcbiAgICAgICAgICBjb25zdCBmaWVsZE1hcHBlZEF0dHJpYnV0ZXMgPSB7fTtcclxuICAgICAgICAgIGZvciAoY29uc3QgYXR0ciBpbiBtb2RlbC50YWJsZUF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgZmllbGRNYXBwZWRBdHRyaWJ1dGVzW21vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGQgfHwgYXR0cl0gPSBtb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJdO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE1hcCB1cGRhdGVPbkR1cGxpY2F0ZSBhdHRyaWJ1dGVzIHRvIGZpZWxkc1xyXG4gICAgICAgICAgaWYgKG9wdGlvbnMudXBkYXRlT25EdXBsaWNhdGUpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy51cGRhdGVPbkR1cGxpY2F0ZSA9IG9wdGlvbnMudXBkYXRlT25EdXBsaWNhdGUubWFwKGF0dHIgPT4gbW9kZWwucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZCB8fCBhdHRyKTtcclxuICAgICAgICAgICAgLy8gR2V0IHByaW1hcnkga2V5cyBmb3IgcG9zdGdyZXMgdG8gZW5hYmxlIHVwZGF0ZU9uRHVwbGljYXRlXHJcbiAgICAgICAgICAgIG9wdGlvbnMudXBzZXJ0S2V5cyA9IF8uY2hhaW4obW9kZWwucHJpbWFyeUtleXMpLnZhbHVlcygpLm1hcCgnZmllbGQnKS52YWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMobW9kZWwudW5pcXVlS2V5cykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIG9wdGlvbnMudXBzZXJ0S2V5cyA9IF8uY2hhaW4obW9kZWwudW5pcXVlS2V5cykudmFsdWVzKCkuZmlsdGVyKGMgPT4gYy5maWVsZHMubGVuZ3RoID09PSAxKS5tYXAoJ2NvbHVtbicpLnZhbHVlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBNYXAgcmV0dXJuaW5nIGF0dHJpYnV0ZXMgdG8gZmllbGRzXHJcbiAgICAgICAgICBpZiAob3B0aW9ucy5yZXR1cm5pbmcgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLnJldHVybmluZykpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5yZXR1cm5pbmcgPSBvcHRpb25zLnJldHVybmluZy5tYXAoYXR0ciA9PiBtb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJdLmZpZWxkIHx8IGF0dHIpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBtb2RlbC5RdWVyeUludGVyZmFjZS5idWxrSW5zZXJ0KG1vZGVsLmdldFRhYmxlTmFtZShvcHRpb25zKSwgcmVjb3Jkcywgb3B0aW9ucywgZmllbGRNYXBwZWRBdHRyaWJ1dGVzKS50aGVuKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xyXG4gICAgICAgICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZSB8fCBrZXkgPT09IG1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiZcclxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXQobW9kZWwucHJpbWFyeUtleUF0dHJpYnV0ZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICBbJ215c3FsJywgJ21hcmlhZGInLCAnc3FsaXRlJ10uaW5jbHVkZXMoZGlhbGVjdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcXVlcnkuanMgZm9yIHRoZXNlIERCcyBpcyBibGluZCwgaXQgYXV0b2luY3JlbWVudHMgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJpbWFyeWtleSB2YWx1ZSwgZXZlbiBpZiBpdCB3YXMgc2V0IG1hbnVhbGx5LiBBbHNvLCBpdCBjYW5cclxuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gbW9yZSByZXN1bHRzIHRoYW4gaW5zdGFuY2VzLCBidWc/LlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gcmVzdWx0W2tleV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBfLmZpbmQobW9kZWwucmF3QXR0cmlidXRlcywgYXR0cmlidXRlID0+IGF0dHJpYnV0ZS5maWVsZE5hbWUgPT09IGtleSB8fCBhdHRyaWJ1dGUuZmllbGQgPT09IGtleSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmRhdGFWYWx1ZXNbYXR0ciAmJiBhdHRyLmZpZWxkTmFtZSB8fCBrZXldID0gcmVjb3JkO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFvcHRpb25zLmluY2x1ZGUgfHwgIW9wdGlvbnMuaW5jbHVkZS5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gTmVzdGVkIGNyZWF0aW9uIGZvciBIYXNPbmUvSGFzTWFueS9CZWxvbmdzVG9NYW55IHJlbGF0aW9uc1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLm1hcChvcHRpb25zLmluY2x1ZGUuZmlsdGVyKGluY2x1ZGUgPT4gIShpbmNsdWRlLmFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvIHx8XHJcbiAgICAgICAgICBpbmNsdWRlLnBhcmVudCAmJiBpbmNsdWRlLnBhcmVudC5hc3NvY2lhdGlvbiBpbnN0YW5jZW9mIEJlbG9uZ3NUb01hbnkpKSwgaW5jbHVkZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBhc3NvY2lhdGlvbkluc3RhbmNlcyA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgYXNzb2NpYXRpb25JbnN0YW5jZUluZGV4VG9JbnN0YW5jZU1hcCA9IFtdO1xyXG5cclxuICAgICAgICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7XHJcbiAgICAgICAgICAgIGxldCBhc3NvY2lhdGVkID0gaW5zdGFuY2UuZ2V0KGluY2x1ZGUuYXMpO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXNzb2NpYXRlZCkpIGFzc29jaWF0ZWQgPSBbYXNzb2NpYXRlZF07XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFzc29jaWF0aW9uSW5zdGFuY2Ugb2YgYXNzb2NpYXRlZCkge1xyXG4gICAgICAgICAgICAgIGlmIChhc3NvY2lhdGlvbkluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShpbmNsdWRlLmFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvTWFueSkpIHtcclxuICAgICAgICAgICAgICAgICAgYXNzb2NpYXRpb25JbnN0YW5jZS5zZXQoaW5jbHVkZS5hc3NvY2lhdGlvbi5mb3JlaWduS2V5LCBpbnN0YW5jZS5nZXQoaW5jbHVkZS5hc3NvY2lhdGlvbi5zb3VyY2VLZXkgfHwgaW5zdGFuY2UuY29uc3RydWN0b3IucHJpbWFyeUtleUF0dHJpYnV0ZSwgeyByYXc6IHRydWUgfSksIHsgcmF3OiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGFzc29jaWF0aW9uSW5zdGFuY2UsIGluY2x1ZGUuYXNzb2NpYXRpb24uc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXNzb2NpYXRpb25JbnN0YW5jZXMucHVzaChhc3NvY2lhdGlvbkluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGFzc29jaWF0aW9uSW5zdGFuY2VJbmRleFRvSW5zdGFuY2VNYXAucHVzaChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCFhc3NvY2lhdGlvbkluc3RhbmNlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGluY2x1ZGVPcHRpb25zID0gXyhVdGlscy5jbG9uZURlZXAoaW5jbHVkZSkpXHJcbiAgICAgICAgICAgIC5vbWl0KFsnYXNzb2NpYXRpb24nXSlcclxuICAgICAgICAgICAgLmRlZmF1bHRzKHtcclxuICAgICAgICAgICAgICB0cmFuc2FjdGlvbjogb3B0aW9ucy50cmFuc2FjdGlvbixcclxuICAgICAgICAgICAgICBsb2dnaW5nOiBvcHRpb25zLmxvZ2dpbmdcclxuICAgICAgICAgICAgfSkudmFsdWUoKTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gcmVjdXJzaXZlQnVsa0NyZWF0ZShhc3NvY2lhdGlvbkluc3RhbmNlcywgaW5jbHVkZU9wdGlvbnMpLnRoZW4oYXNzb2NpYXRpb25JbnN0YW5jZXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5jbHVkZS5hc3NvY2lhdGlvbiBpbnN0YW5jZW9mIEJlbG9uZ3NUb01hbnkpIHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWx1ZVNldHMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpZHggaW4gYXNzb2NpYXRpb25JbnN0YW5jZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uSW5zdGFuY2UgPSBhc3NvY2lhdGlvbkluc3RhbmNlc1tpZHhdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBhc3NvY2lhdGlvbkluc3RhbmNlSW5kZXhUb0luc3RhbmNlTWFwW2lkeF07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0ge307XHJcbiAgICAgICAgICAgICAgICB2YWx1ZXNbaW5jbHVkZS5hc3NvY2lhdGlvbi5mb3JlaWduS2V5XSA9IGluc3RhbmNlLmdldChpbnN0YW5jZS5jb25zdHJ1Y3Rvci5wcmltYXJ5S2V5QXR0cmlidXRlLCB7IHJhdzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIHZhbHVlc1tpbmNsdWRlLmFzc29jaWF0aW9uLm90aGVyS2V5XSA9IGFzc29jaWF0aW9uSW5zdGFuY2UuZ2V0KGFzc29jaWF0aW9uSW5zdGFuY2UuY29uc3RydWN0b3IucHJpbWFyeUtleUF0dHJpYnV0ZSwgeyByYXc6IHRydWUgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSW5jbHVkZSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgYXNzb2NpYXRpb25cclxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odmFsdWVzLCBpbmNsdWRlLmFzc29jaWF0aW9uLnRocm91Z2guc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFzc29jaWF0aW9uSW5zdGFuY2VbaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBPYmplY3Qua2V5cyhpbmNsdWRlLmFzc29jaWF0aW9uLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlcykpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uX2F1dG9HZW5lcmF0ZWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgIGF0dHIgPT09IGluY2x1ZGUuYXNzb2NpYXRpb24uZm9yZWlnbktleSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgYXR0ciA9PT0gaW5jbHVkZS5hc3NvY2lhdGlvbi5vdGhlcktleSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGFzc29jaWF0aW9uSW5zdGFuY2VbaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLm5hbWVdW2F0dHJdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbYXR0cl0gPSBhc3NvY2lhdGlvbkluc3RhbmNlW2luY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbC5uYW1lXVthdHRyXTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhbHVlU2V0cy5wdXNoKHZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCB0aHJvdWdoT3B0aW9ucyA9IF8oVXRpbHMuY2xvbmVEZWVwKGluY2x1ZGUpKVxyXG4gICAgICAgICAgICAgICAgLm9taXQoWydhc3NvY2lhdGlvbicsICdhdHRyaWJ1dGVzJ10pXHJcbiAgICAgICAgICAgICAgICAuZGVmYXVsdHMoe1xyXG4gICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbjogb3B0aW9ucy50cmFuc2FjdGlvbixcclxuICAgICAgICAgICAgICAgICAgbG9nZ2luZzogb3B0aW9ucy5sb2dnaW5nXHJcbiAgICAgICAgICAgICAgICB9KS52YWx1ZSgpO1xyXG4gICAgICAgICAgICAgIHRocm91Z2hPcHRpb25zLm1vZGVsID0gaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoTW9kZWw7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGhyb3VnaEluc3RhbmNlcyA9IGluY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaE1vZGVsLmJ1bGtCdWlsZCh2YWx1ZVNldHMsIHRocm91Z2hPcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZUJ1bGtDcmVhdGUodGhyb3VnaEluc3RhbmNlcywgdGhyb3VnaE9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgLy8gbWFwIGZpZWxkcyBiYWNrIHRvIGF0dHJpYnV0ZXNcclxuICAgICAgICBpbnN0YW5jZXMuZm9yRWFjaChpbnN0YW5jZSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGF0dHIgaW4gbW9kZWwucmF3QXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBpZiAobW9kZWwucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZCAmJlxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZGF0YVZhbHVlc1ttb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJdLmZpZWxkXSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICBtb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJdLmZpZWxkICE9PSBhdHRyXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGluc3RhbmNlLmRhdGFWYWx1ZXNbYXR0cl0gPSBpbnN0YW5jZS5kYXRhVmFsdWVzW21vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGRdO1xyXG4gICAgICAgICAgICAgIGRlbGV0ZSBpbnN0YW5jZS5kYXRhVmFsdWVzW21vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluc3RhbmNlLl9wcmV2aW91c0RhdGFWYWx1ZXNbYXR0cl0gPSBpbnN0YW5jZS5kYXRhVmFsdWVzW2F0dHJdO1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5jaGFuZ2VkKGF0dHIsIGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGluc3RhbmNlLmlzTmV3UmVjb3JkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFJ1biBhZnRlciBob29rXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcclxuICAgICAgICAgIHJldHVybiBtb2RlbC5ydW5Ib29rcygnYWZ0ZXJCdWxrQ3JlYXRlJywgaW5zdGFuY2VzLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLnRoZW4oKCkgPT4gaW5zdGFuY2VzKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJlY3Vyc2l2ZUJ1bGtDcmVhdGUoaW5zdGFuY2VzLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydW5jYXRlIGFsbCBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLiBUaGlzIGlzIGEgY29udmVuaWVudCBtZXRob2QgZm9yIE1vZGVsLmRlc3Ryb3koeyB0cnVuY2F0ZTogdHJ1ZSB9KS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgW29wdGlvbnNdIFRoZSBvcHRpb25zIHBhc3NlZCB0byBNb2RlbC5kZXN0cm95IGluIGFkZGl0aW9uIHRvIHRydW5jYXRlXHJcbiAgICogQHBhcmFtIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5jYXNjYWRlID0gZmFsc2VdIFRydW5jYXRlcyBhbGwgdGFibGVzIHRoYXQgaGF2ZSBmb3JlaWduLWtleSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lZCB0YWJsZSwgb3IgdG8gYW55IHRhYmxlcyBhZGRlZCB0byB0aGUgZ3JvdXAgZHVlIHRvIENBU0NBREUuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICBbb3B0aW9ucy5yZXN0YXJ0SWRlbnRpdHk9ZmFsc2VdIEF1dG9tYXRpY2FsbHkgcmVzdGFydCBzZXF1ZW5jZXMgb3duZWQgYnkgY29sdW1ucyBvZiB0aGUgdHJ1bmNhdGVkIHRhYmxlLlxyXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259ICAgICAgW29wdGlvbnMudHJhbnNhY3Rpb25dIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnxGdW5jdGlvbn0gW29wdGlvbnMubG9nZ2luZ10gQSBmdW5jdGlvbiB0aGF0IGxvZ3Mgc3FsIHF1ZXJpZXMsIG9yIGZhbHNlIGZvciBubyBsb2dnaW5nXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsLmRlc3Ryb3l9IGZvciBtb3JlIGluZm9ybWF0aW9uXHJcbiAgICovXHJcbiAgc3RhdGljIHRydW5jYXRlKG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucykgfHwge307XHJcbiAgICBvcHRpb25zLnRydW5jYXRlID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzLmRlc3Ryb3kob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgbXVsdGlwbGUgaW5zdGFuY2VzLCBvciBzZXQgdGhlaXIgZGVsZXRlZEF0IHRpbWVzdGFtcCB0byB0aGUgY3VycmVudCB0aW1lIGlmIGBwYXJhbm9pZGAgaXMgZW5hYmxlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95IG9wdGlvbnNcclxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgIFtvcHRpb25zLndoZXJlXSAgICAgICAgICAgICAgICAgRmlsdGVyIHRoZSBkZXN0cm95XHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5ob29rcz10cnVlXSAgICAgICAgICAgIFJ1biBiZWZvcmUgLyBhZnRlciBidWxrIGRlc3Ryb3kgaG9va3M/XHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5pbmRpdmlkdWFsSG9va3M9ZmFsc2VdIElmIHNldCB0byB0cnVlLCBkZXN0cm95IHdpbGwgU0VMRUNUIGFsbCByZWNvcmRzIG1hdGNoaW5nIHRoZSB3aGVyZSBwYXJhbWV0ZXIgYW5kIHdpbGwgZXhlY3V0ZSBiZWZvcmUgLyBhZnRlciBkZXN0cm95IGhvb2tzIG9uIGVhY2ggcm93XHJcbiAgICogQHBhcmFtICB7bnVtYmVyfSAgICAgICBbb3B0aW9ucy5saW1pdF0gICAgICAgICAgICAgICAgIEhvdyBtYW55IHJvd3MgdG8gZGVsZXRlXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5mb3JjZT1mYWxzZV0gICAgICAgICAgIERlbGV0ZSBpbnN0ZWFkIG9mIHNldHRpbmcgZGVsZXRlZEF0IHRvIGN1cnJlbnQgdGltZXN0YW1wIChvbmx5IGFwcGxpY2FibGUgaWYgYHBhcmFub2lkYCBpcyBlbmFibGVkKVxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMudHJ1bmNhdGU9ZmFsc2VdICAgICAgICBJZiBzZXQgdG8gdHJ1ZSwgZGlhbGVjdHMgdGhhdCBzdXBwb3J0IGl0IHdpbGwgdXNlIFRSVU5DQVRFIGluc3RlYWQgb2YgREVMRVRFIEZST00uIElmIGEgdGFibGUgaXMgdHJ1bmNhdGVkIHRoZSB3aGVyZSBhbmQgbGltaXQgb3B0aW9ucyBhcmUgaWdub3JlZFxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuY2FzY2FkZT1mYWxzZV0gICAgICAgICBPbmx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBUUlVOQ0FURS4gVHJ1bmNhdGVzICBhbGwgdGFibGVzIHRoYXQgaGF2ZSBmb3JlaWduLWtleSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lZCB0YWJsZSwgb3IgdG8gYW55IHRhYmxlcyBhZGRlZCB0byB0aGUgZ3JvdXAgZHVlIHRvIENBU0NBREUuXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5yZXN0YXJ0SWRlbnRpdHk9ZmFsc2VdIE9ubHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIFRSVU5DQVRFLiBBdXRvbWF0aWNhbGx5IHJlc3RhcnQgc2VxdWVuY2VzIG93bmVkIGJ5IGNvbHVtbnMgb2YgdGhlIHRydW5jYXRlZCB0YWJsZS5cclxuICAgKiBAcGFyYW0gIHtUcmFuc2FjdGlvbn0gIFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcclxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gICAgIFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdICAgICAgICAgQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdICAgICAgIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gVGhlIG51bWJlciBvZiBkZXN0cm95ZWQgcm93c1xyXG4gICAqL1xyXG4gIHN0YXRpYyBkZXN0cm95KG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5faW5qZWN0U2NvcGUob3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKCFvcHRpb25zIHx8ICEob3B0aW9ucy53aGVyZSB8fCBvcHRpb25zLnRydW5jYXRlKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgd2hlcmUgb3IgdHJ1bmNhdGUgYXR0cmlidXRlIGluIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiBtb2RlbC5kZXN0cm95LicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb3B0aW9ucy50cnVuY2F0ZSAmJiAhXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMud2hlcmUpICYmICFBcnJheS5pc0FycmF5KG9wdGlvbnMud2hlcmUpICYmICEob3B0aW9ucy53aGVyZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwbGFpbiBvYmplY3QsIGFycmF5IG9yIHNlcXVlbGl6ZSBtZXRob2QgaW4gdGhlIG9wdGlvbnMud2hlcmUgcGFyYW1ldGVyIG9mIG1vZGVsLmRlc3Ryb3kuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IF8uZGVmYXVsdHMob3B0aW9ucywge1xyXG4gICAgICBob29rczogdHJ1ZSxcclxuICAgICAgaW5kaXZpZHVhbEhvb2tzOiBmYWxzZSxcclxuICAgICAgZm9yY2U6IGZhbHNlLFxyXG4gICAgICBjYXNjYWRlOiBmYWxzZSxcclxuICAgICAgcmVzdGFydElkZW50aXR5OiBmYWxzZVxyXG4gICAgfSk7XHJcblxyXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5CVUxLREVMRVRFO1xyXG5cclxuICAgIFV0aWxzLm1hcE9wdGlvbkZpZWxkTmFtZXMob3B0aW9ucywgdGhpcyk7XHJcbiAgICBvcHRpb25zLm1vZGVsID0gdGhpcztcclxuXHJcbiAgICBsZXQgaW5zdGFuY2VzO1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XHJcbiAgICAgIC8vIFJ1biBiZWZvcmUgaG9va1xyXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVCdWxrRGVzdHJveScsIG9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgLy8gR2V0IGRhb3MgYW5kIHJ1biBiZWZvcmVEZXN0cm95IGhvb2sgb24gZWFjaCByZWNvcmQgaW5kaXZpZHVhbGx5XHJcbiAgICAgIGlmIChvcHRpb25zLmluZGl2aWR1YWxIb29rcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRBbGwoeyB3aGVyZTogb3B0aW9ucy53aGVyZSwgdHJhbnNhY3Rpb246IG9wdGlvbnMudHJhbnNhY3Rpb24sIGxvZ2dpbmc6IG9wdGlvbnMubG9nZ2luZywgYmVuY2htYXJrOiBvcHRpb25zLmJlbmNobWFyayB9KVxyXG4gICAgICAgICAgLm1hcChpbnN0YW5jZSA9PiB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVEZXN0cm95JywgaW5zdGFuY2UsIG9wdGlvbnMpLnRoZW4oKCkgPT4gaW5zdGFuY2UpKVxyXG4gICAgICAgICAgLnRoZW4oX2luc3RhbmNlcyA9PiB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlcyA9IF9pbnN0YW5jZXM7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIC8vIFJ1biBkZWxldGUgcXVlcnkgKG9yIHVwZGF0ZSBpZiBwYXJhbm9pZClcclxuICAgICAgaWYgKHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0ICYmICFvcHRpb25zLmZvcmNlKSB7XHJcbiAgICAgICAgLy8gU2V0IHF1ZXJ5IHR5cGUgYXBwcm9wcmlhdGVseSB3aGVuIHJ1bm5pbmcgc29mdCBkZWxldGVcclxuICAgICAgICBvcHRpb25zLnR5cGUgPSBRdWVyeVR5cGVzLkJVTEtVUERBVEU7XHJcblxyXG4gICAgICAgIGNvbnN0IGF0dHJWYWx1ZUhhc2ggPSB7fTtcclxuICAgICAgICBjb25zdCBkZWxldGVkQXRBdHRyaWJ1dGUgPSB0aGlzLnJhd0F0dHJpYnV0ZXNbdGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXRdO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5yYXdBdHRyaWJ1dGVzW3RoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0XS5maWVsZDtcclxuICAgICAgICBjb25zdCB3aGVyZSA9IHtcclxuICAgICAgICAgIFtmaWVsZF06IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZWxldGVkQXRBdHRyaWJ1dGUsICdkZWZhdWx0VmFsdWUnKSA/IGRlbGV0ZWRBdEF0dHJpYnV0ZS5kZWZhdWx0VmFsdWUgOiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcblxyXG4gICAgICAgIGF0dHJWYWx1ZUhhc2hbZmllbGRdID0gVXRpbHMubm93KHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuUXVlcnlJbnRlcmZhY2UuYnVsa1VwZGF0ZSh0aGlzLmdldFRhYmxlTmFtZShvcHRpb25zKSwgYXR0clZhbHVlSGFzaCwgT2JqZWN0LmFzc2lnbih3aGVyZSwgb3B0aW9ucy53aGVyZSksIG9wdGlvbnMsIHRoaXMucmF3QXR0cmlidXRlcyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuUXVlcnlJbnRlcmZhY2UuYnVsa0RlbGV0ZSh0aGlzLmdldFRhYmxlTmFtZShvcHRpb25zKSwgb3B0aW9ucy53aGVyZSwgb3B0aW9ucywgdGhpcyk7XHJcbiAgICB9KS50YXAoKCkgPT4ge1xyXG4gICAgICAvLyBSdW4gYWZ0ZXJEZXN0cm95IGhvb2sgb24gZWFjaCByZWNvcmQgaW5kaXZpZHVhbGx5XHJcbiAgICAgIGlmIChvcHRpb25zLmluZGl2aWR1YWxIb29rcykge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLm1hcChpbnN0YW5jZXMsIGluc3RhbmNlID0+IHRoaXMucnVuSG9va3MoJ2FmdGVyRGVzdHJveScsIGluc3RhbmNlLCBvcHRpb25zKSk7XHJcbiAgICAgIH1cclxuICAgIH0pLnRhcCgoKSA9PiB7XHJcbiAgICAgIC8vIFJ1biBhZnRlciBob29rXHJcbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoJ2FmdGVyQnVsa0Rlc3Ryb3knLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN0b3JlIG11bHRpcGxlIGluc3RhbmNlcyBpZiBgcGFyYW5vaWRgIGlzIGVuYWJsZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgIG9wdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSBvcHRpb25zXHJcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICBbb3B0aW9ucy53aGVyZV0gICAgICAgICAgICAgICAgIEZpbHRlciB0aGUgcmVzdG9yZVxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuaG9va3M9dHJ1ZV0gICAgICAgICAgICBSdW4gYmVmb3JlIC8gYWZ0ZXIgYnVsayByZXN0b3JlIGhvb2tzP1xyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuaW5kaXZpZHVhbEhvb2tzPWZhbHNlXSBJZiBzZXQgdG8gdHJ1ZSwgcmVzdG9yZSB3aWxsIGZpbmQgYWxsIHJlY29yZHMgd2l0aGluIHRoZSB3aGVyZSBwYXJhbWV0ZXIgYW5kIHdpbGwgZXhlY3V0ZSBiZWZvcmUgLyBhZnRlciBidWxrUmVzdG9yZSBob29rcyBvbiBlYWNoIHJvd1xyXG4gICAqIEBwYXJhbSAge251bWJlcn0gICAgICAgW29wdGlvbnMubGltaXRdICAgICAgICAgICAgICAgICBIb3cgbWFueSByb3dzIHRvIHVuZGVsZXRlIChvbmx5IGZvciBteXNxbClcclxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gICAgIFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdICAgICAgICAgQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdICAgICAgIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxyXG4gICAqIEBwYXJhbSAge1RyYW5zYWN0aW9ufSAgW29wdGlvbnMudHJhbnNhY3Rpb25dICAgICAgICAgICBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIHN0YXRpYyByZXN0b3JlKG9wdGlvbnMpIHtcclxuICAgIGlmICghdGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXQpIHRocm93IG5ldyBFcnJvcignTW9kZWwgaXMgbm90IHBhcmFub2lkJyk7XHJcblxyXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICBob29rczogdHJ1ZSxcclxuICAgICAgaW5kaXZpZHVhbEhvb2tzOiBmYWxzZVxyXG4gICAgfSwgb3B0aW9ucyB8fCB7fSk7XHJcblxyXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5SQVc7XHJcbiAgICBvcHRpb25zLm1vZGVsID0gdGhpcztcclxuXHJcbiAgICBsZXQgaW5zdGFuY2VzO1xyXG5cclxuICAgIFV0aWxzLm1hcE9wdGlvbkZpZWxkTmFtZXMob3B0aW9ucywgdGhpcyk7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UudHJ5KCgpID0+IHtcclxuICAgICAgLy8gUnVuIGJlZm9yZSBob29rXHJcbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoJ2JlZm9yZUJ1bGtSZXN0b3JlJywgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyBHZXQgZGFvcyBhbmQgcnVuIGJlZm9yZVJlc3RvcmUgaG9vayBvbiBlYWNoIHJlY29yZCBpbmRpdmlkdWFsbHlcclxuICAgICAgaWYgKG9wdGlvbnMuaW5kaXZpZHVhbEhvb2tzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEFsbCh7IHdoZXJlOiBvcHRpb25zLndoZXJlLCB0cmFuc2FjdGlvbjogb3B0aW9ucy50cmFuc2FjdGlvbiwgbG9nZ2luZzogb3B0aW9ucy5sb2dnaW5nLCBiZW5jaG1hcms6IG9wdGlvbnMuYmVuY2htYXJrLCBwYXJhbm9pZDogZmFsc2UgfSlcclxuICAgICAgICAgIC5tYXAoaW5zdGFuY2UgPT4gdGhpcy5ydW5Ib29rcygnYmVmb3JlUmVzdG9yZScsIGluc3RhbmNlLCBvcHRpb25zKS50aGVuKCgpID0+IGluc3RhbmNlKSlcclxuICAgICAgICAgIC50aGVuKF9pbnN0YW5jZXMgPT4ge1xyXG4gICAgICAgICAgICBpbnN0YW5jZXMgPSBfaW5zdGFuY2VzO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyBSdW4gdW5kZWxldGUgcXVlcnlcclxuICAgICAgY29uc3QgYXR0clZhbHVlSGFzaCA9IHt9O1xyXG4gICAgICBjb25zdCBkZWxldGVkQXRDb2wgPSB0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdDtcclxuICAgICAgY29uc3QgZGVsZXRlZEF0QXR0cmlidXRlID0gdGhpcy5yYXdBdHRyaWJ1dGVzW2RlbGV0ZWRBdENvbF07XHJcbiAgICAgIGNvbnN0IGRlbGV0ZWRBdERlZmF1bHRWYWx1ZSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZWxldGVkQXRBdHRyaWJ1dGUsICdkZWZhdWx0VmFsdWUnKSA/IGRlbGV0ZWRBdEF0dHJpYnV0ZS5kZWZhdWx0VmFsdWUgOiBudWxsO1xyXG5cclxuICAgICAgYXR0clZhbHVlSGFzaFtkZWxldGVkQXRBdHRyaWJ1dGUuZmllbGQgfHwgZGVsZXRlZEF0Q29sXSA9IGRlbGV0ZWRBdERlZmF1bHRWYWx1ZTtcclxuICAgICAgb3B0aW9ucy5vbWl0TnVsbCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gdGhpcy5RdWVyeUludGVyZmFjZS5idWxrVXBkYXRlKHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCBhdHRyVmFsdWVIYXNoLCBvcHRpb25zLndoZXJlLCBvcHRpb25zLCB0aGlzLnJhd0F0dHJpYnV0ZXMpO1xyXG4gICAgfSkudGFwKCgpID0+IHtcclxuICAgICAgLy8gUnVuIGFmdGVyRGVzdHJveSBob29rIG9uIGVhY2ggcmVjb3JkIGluZGl2aWR1YWxseVxyXG4gICAgICBpZiAob3B0aW9ucy5pbmRpdmlkdWFsSG9va3MpIHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5tYXAoaW5zdGFuY2VzLCBpbnN0YW5jZSA9PiB0aGlzLnJ1bkhvb2tzKCdhZnRlclJlc3RvcmUnLCBpbnN0YW5jZSwgb3B0aW9ucykpO1xyXG4gICAgICB9XHJcbiAgICB9KS50YXAoKCkgPT4ge1xyXG4gICAgICAvLyBSdW4gYWZ0ZXIgaG9va1xyXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdhZnRlckJ1bGtSZXN0b3JlJywgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIG11bHRpcGxlIGluc3RhbmNlcyB0aGF0IG1hdGNoIHRoZSB3aGVyZSBvcHRpb25zLlxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICB2YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2ggb2YgdmFsdWVzIHRvIHVwZGF0ZVxyXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgb3B0aW9ucy53aGVyZSAgICAgICAgICAgICAgICAgICBPcHRpb25zIHRvIGRlc2NyaWJlIHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoLlxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMucGFyYW5vaWQ9dHJ1ZV0gICAgICAgICBJZiB0cnVlLCBvbmx5IG5vbi1kZWxldGVkIHJlY29yZHMgd2lsbCBiZSB1cGRhdGVkLiBJZiBmYWxzZSwgYm90aCBkZWxldGVkIGFuZCBub24tZGVsZXRlZCByZWNvcmRzIHdpbGwgYmUgdXBkYXRlZC4gT25seSBhcHBsaWVzIGlmIGBvcHRpb25zLnBhcmFub2lkYCBpcyB0cnVlIGZvciB0aGUgbW9kZWwuXHJcbiAgICogQHBhcmFtICB7QXJyYXl9ICAgICAgICBbb3B0aW9ucy5maWVsZHNdICAgICAgICAgICAgICAgIEZpZWxkcyB0byB1cGRhdGUgKGRlZmF1bHRzIHRvIGFsbCBmaWVsZHMpXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy52YWxpZGF0ZT10cnVlXSAgICAgICAgIFNob3VsZCBlYWNoIHJvdyBiZSBzdWJqZWN0IHRvIHZhbGlkYXRpb24gYmVmb3JlIGl0IGlzIGluc2VydGVkLiBUaGUgd2hvbGUgaW5zZXJ0IHdpbGwgZmFpbCBpZiBvbmUgcm93IGZhaWxzIHZhbGlkYXRpb25cclxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLmhvb2tzPXRydWVdICAgICAgICAgICAgUnVuIGJlZm9yZSAvIGFmdGVyIGJ1bGsgdXBkYXRlIGhvb2tzP1xyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuc2lkZUVmZmVjdHM9dHJ1ZV0gICAgICBXaGV0aGVyIG9yIG5vdCB0byB1cGRhdGUgdGhlIHNpZGUgZWZmZWN0cyBvZiBhbnkgdmlydHVhbCBzZXR0ZXJzLlxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuaW5kaXZpZHVhbEhvb2tzPWZhbHNlXSBSdW4gYmVmb3JlIC8gYWZ0ZXIgdXBkYXRlIGhvb2tzPy4gSWYgdHJ1ZSwgdGhpcyB3aWxsIGV4ZWN1dGUgYSBTRUxFQ1QgZm9sbG93ZWQgYnkgaW5kaXZpZHVhbCBVUERBVEVzLiBBIHNlbGVjdCBpcyBuZWVkZWQsIGJlY2F1c2UgdGhlIHJvdyBkYXRhIG5lZWRzIHRvIGJlIHBhc3NlZCB0byB0aGUgaG9va3NcclxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLnJldHVybmluZz1mYWxzZV0gICAgICAgUmV0dXJuIHRoZSBhZmZlY3RlZCByb3dzIChvbmx5IGZvciBwb3N0Z3JlcylcclxuICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgICAgIFtvcHRpb25zLmxpbWl0XSAgICAgICAgICAgICAgICAgSG93IG1hbnkgcm93cyB0byB1cGRhdGUgKG9ubHkgZm9yIG15c3FsIGFuZCBtYXJpYWRiLCBpbXBsZW1lbnRlZCBhcyBUT1AobikgZm9yIE1TU1FMOyBmb3Igc3FsaXRlIGl0IGlzIHN1cHBvcnRlZCBvbmx5IHdoZW4gcm93aWQgaXMgcHJlc2VudClcclxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gICAgIFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdICAgICAgICAgQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXHJcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdICAgICAgIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxyXG4gICAqIEBwYXJhbSAge1RyYW5zYWN0aW9ufSAgW29wdGlvbnMudHJhbnNhY3Rpb25dICAgICAgICAgICBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcclxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLnNpbGVudD1mYWxzZV0gICAgICAgICAgSWYgdHJ1ZSwgdGhlIHVwZGF0ZWRBdCB0aW1lc3RhbXAgd2lsbCBub3QgYmUgdXBkYXRlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PG51bWJlcixudW1iZXI+Pn0gIFRoZSBwcm9taXNlIHJldHVybnMgYW4gYXJyYXkgd2l0aCBvbmUgb3IgdHdvIGVsZW1lbnRzLiBUaGUgZmlyc3QgZWxlbWVudCBpcyBhbHdheXMgdGhlIG51bWJlclxyXG4gICAqIG9mIGFmZmVjdGVkIHJvd3MsIHdoaWxlIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgYWN0dWFsIGFmZmVjdGVkIHJvd3MgKG9ubHkgc3VwcG9ydGVkIGluIHBvc3RncmVzIHdpdGggYG9wdGlvbnMucmV0dXJuaW5nYCB0cnVlLilcclxuICAgKlxyXG4gICAqL1xyXG4gIHN0YXRpYyB1cGRhdGUodmFsdWVzLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuX2luamVjdFNjb3BlKG9wdGlvbnMpO1xyXG4gICAgdGhpcy5fb3B0aW9uc011c3RDb250YWluV2hlcmUob3B0aW9ucyk7XHJcblxyXG4gICAgb3B0aW9ucyA9IHRoaXMuX3BhcmFub2lkQ2xhdXNlKHRoaXMsIF8uZGVmYXVsdHMob3B0aW9ucywge1xyXG4gICAgICB2YWxpZGF0ZTogdHJ1ZSxcclxuICAgICAgaG9va3M6IHRydWUsXHJcbiAgICAgIGluZGl2aWR1YWxIb29rczogZmFsc2UsXHJcbiAgICAgIHJldHVybmluZzogZmFsc2UsXHJcbiAgICAgIGZvcmNlOiBmYWxzZSxcclxuICAgICAgc2lkZUVmZmVjdHM6IHRydWVcclxuICAgIH0pKTtcclxuXHJcbiAgICBvcHRpb25zLnR5cGUgPSBRdWVyeVR5cGVzLkJVTEtVUERBVEU7XHJcblxyXG4gICAgLy8gQ2xvbmUgdmFsdWVzIHNvIGl0IGRvZXNuJ3QgZ2V0IG1vZGlmaWVkIGZvciBjYWxsZXIgc2NvcGUgYW5kIGlnbm9yZSB1bmRlZmluZWQgdmFsdWVzXHJcbiAgICB2YWx1ZXMgPSBfLm9taXRCeSh2YWx1ZXMsIHZhbHVlID0+IHZhbHVlID09PSB1bmRlZmluZWQpO1xyXG5cclxuICAgIC8vIFJlbW92ZSB2YWx1ZXMgdGhhdCBhcmUgbm90IGluIHRoZSBvcHRpb25zLmZpZWxkc1xyXG4gICAgaWYgKG9wdGlvbnMuZmllbGRzICYmIG9wdGlvbnMuZmllbGRzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWVzKSkge1xyXG4gICAgICAgIGlmICghb3B0aW9ucy5maWVsZHMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgZGVsZXRlIHZhbHVlc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdXBkYXRlZEF0QXR0ciA9IHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0O1xyXG4gICAgICBvcHRpb25zLmZpZWxkcyA9IF8uaW50ZXJzZWN0aW9uKE9iamVjdC5rZXlzKHZhbHVlcyksIE9iamVjdC5rZXlzKHRoaXMudGFibGVBdHRyaWJ1dGVzKSk7XHJcbiAgICAgIGlmICh1cGRhdGVkQXRBdHRyICYmICFvcHRpb25zLmZpZWxkcy5pbmNsdWRlcyh1cGRhdGVkQXRBdHRyKSkge1xyXG4gICAgICAgIG9wdGlvbnMuZmllbGRzLnB1c2godXBkYXRlZEF0QXR0cik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy51cGRhdGVkQXQgJiYgIW9wdGlvbnMuc2lsZW50KSB7XHJcbiAgICAgIHZhbHVlc1t0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdF0gPSB0aGlzLl9nZXREZWZhdWx0VGltZXN0YW1wKHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0KSB8fCBVdGlscy5ub3codGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25zLm1vZGVsID0gdGhpcztcclxuXHJcbiAgICBsZXQgaW5zdGFuY2VzO1xyXG4gICAgbGV0IHZhbHVlc1VzZTtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xyXG4gICAgICAvLyBWYWxpZGF0ZVxyXG4gICAgICBpZiAob3B0aW9ucy52YWxpZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGJ1aWxkID0gdGhpcy5idWlsZCh2YWx1ZXMpO1xyXG4gICAgICAgIGJ1aWxkLnNldCh0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdCwgdmFsdWVzW3RoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0XSwgeyByYXc6IHRydWUgfSk7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLnNpZGVFZmZlY3RzKSB7XHJcbiAgICAgICAgICB2YWx1ZXMgPSBPYmplY3QuYXNzaWduKHZhbHVlcywgXy5waWNrKGJ1aWxkLmdldCgpLCBidWlsZC5jaGFuZ2VkKCkpKTtcclxuICAgICAgICAgIG9wdGlvbnMuZmllbGRzID0gXy51bmlvbihvcHRpb25zLmZpZWxkcywgT2JqZWN0LmtleXModmFsdWVzKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXZSB3YW50IHRvIHNraXAgdmFsaWRhdGlvbnMgZm9yIGFsbCBvdGhlciBmaWVsZHNcclxuICAgICAgICBvcHRpb25zLnNraXAgPSBfLmRpZmZlcmVuY2UoT2JqZWN0LmtleXModGhpcy5yYXdBdHRyaWJ1dGVzKSwgT2JqZWN0LmtleXModmFsdWVzKSk7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkLnZhbGlkYXRlKG9wdGlvbnMpLnRoZW4oYXR0cmlidXRlcyA9PiB7XHJcbiAgICAgICAgICBvcHRpb25zLnNraXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmRhdGFWYWx1ZXMpIHtcclxuICAgICAgICAgICAgdmFsdWVzID0gXy5waWNrKGF0dHJpYnV0ZXMuZGF0YVZhbHVlcywgT2JqZWN0LmtleXModmFsdWVzKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgLy8gUnVuIGJlZm9yZSBob29rXHJcbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XHJcbiAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gdmFsdWVzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVCdWxrVXBkYXRlJywgb3B0aW9ucykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICB2YWx1ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICBkZWxldGUgb3B0aW9ucy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHZhbHVlc1VzZSA9IHZhbHVlcztcclxuXHJcbiAgICAgIC8vIEdldCBpbnN0YW5jZXMgYW5kIHJ1biBiZWZvcmVVcGRhdGUgaG9vayBvbiBlYWNoIHJlY29yZCBpbmRpdmlkdWFsbHlcclxuICAgICAgaWYgKG9wdGlvbnMuaW5kaXZpZHVhbEhvb2tzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEFsbCh7XHJcbiAgICAgICAgICB3aGVyZTogb3B0aW9ucy53aGVyZSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uOiBvcHRpb25zLnRyYW5zYWN0aW9uLFxyXG4gICAgICAgICAgbG9nZ2luZzogb3B0aW9ucy5sb2dnaW5nLFxyXG4gICAgICAgICAgYmVuY2htYXJrOiBvcHRpb25zLmJlbmNobWFyayxcclxuICAgICAgICAgIHBhcmFub2lkOiBvcHRpb25zLnBhcmFub2lkXHJcbiAgICAgICAgfSkudGhlbihfaW5zdGFuY2VzID0+IHtcclxuICAgICAgICAgIGluc3RhbmNlcyA9IF9pbnN0YW5jZXM7XHJcbiAgICAgICAgICBpZiAoIWluc3RhbmNlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJ1biBiZWZvcmVVcGRhdGUgaG9va3Mgb24gZWFjaCByZWNvcmQgYW5kIGNoZWNrIHdoZXRoZXIgYmVmb3JlVXBkYXRlIGhvb2sgY2hhbmdlcyB2YWx1ZXMgdW5pZm9ybWx5XHJcbiAgICAgICAgICAvLyBpLmUuIHdoZXRoZXIgdGhleSBjaGFuZ2UgdmFsdWVzIGZvciBlYWNoIHJlY29yZCBpbiB0aGUgc2FtZSB3YXlcclxuICAgICAgICAgIGxldCBjaGFuZ2VkVmFsdWVzO1xyXG4gICAgICAgICAgbGV0IGRpZmZlcmVudCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLm1hcChpbnN0YW5jZXMsIGluc3RhbmNlID0+IHtcclxuICAgICAgICAgICAgLy8gUmVjb3JkIHVwZGF0ZXMgaW4gaW5zdGFuY2VzIGRhdGFWYWx1ZXNcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpbnN0YW5jZS5kYXRhVmFsdWVzLCB2YWx1ZXMpO1xyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIGNoYW5nZWQgZmllbGRzIG9uIHRoZSBpbnN0YW5jZVxyXG4gICAgICAgICAgICBfLmZvckluKHZhbHVlc1VzZSwgKG5ld1ZhbHVlLCBhdHRyKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBpbnN0YW5jZS5fcHJldmlvdXNEYXRhVmFsdWVzW2F0dHJdKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5zZXREYXRhVmFsdWUoYXR0ciwgbmV3VmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBSdW4gYmVmb3JlVXBkYXRlIGhvb2tcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoJ2JlZm9yZVVwZGF0ZScsIGluc3RhbmNlLCBvcHRpb25zKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWRpZmZlcmVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGhpc0NoYW5nZWRWYWx1ZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIF8uZm9ySW4oaW5zdGFuY2UuZGF0YVZhbHVlcywgKG5ld1ZhbHVlLCBhdHRyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gaW5zdGFuY2UuX3ByZXZpb3VzRGF0YVZhbHVlc1thdHRyXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNDaGFuZ2VkVmFsdWVzW2F0dHJdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghY2hhbmdlZFZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICBjaGFuZ2VkVmFsdWVzID0gdGhpc0NoYW5nZWRWYWx1ZXM7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgPSAhXy5pc0VxdWFsKGNoYW5nZWRWYWx1ZXMsIHRoaXNDaGFuZ2VkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KS50aGVuKF9pbnN0YW5jZXMgPT4ge1xyXG4gICAgICAgICAgICBpbnN0YW5jZXMgPSBfaW5zdGFuY2VzO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFkaWZmZXJlbnQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY2hhbmdlZFZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgLy8gSG9va3MgZG8gbm90IGNoYW5nZSB2YWx1ZXMgb3IgY2hhbmdlIHRoZW0gdW5pZm9ybWx5XHJcbiAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBIb29rcyBjaGFuZ2UgdmFsdWVzIC0gcmVjb3JkIGNoYW5nZXMgaW4gdmFsdWVzVXNlIHNvIHRoZXkgYXJlIGV4ZWN1dGVkXHJcbiAgICAgICAgICAgICAgICB2YWx1ZXNVc2UgPSBjaGFuZ2VkVmFsdWVzO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWVsZHMgPSBfLnVuaW9uKG9wdGlvbnMuZmllbGRzLCBrZXlzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEhvb2tzIGNoYW5nZSB2YWx1ZXMgaW4gYSBkaWZmZXJlbnQgd2F5IGZvciBlYWNoIHJlY29yZFxyXG4gICAgICAgICAgICAvLyBEbyBub3QgcnVuIG9yaWdpbmFsIHF1ZXJ5IGJ1dCBzYXZlIGVhY2ggcmVjb3JkIGluZGl2aWR1YWxseVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5tYXAoaW5zdGFuY2VzLCBpbnN0YW5jZSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5kaXZpZHVhbE9wdGlvbnMgPSBfLmNsb25lKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgIGRlbGV0ZSBpbmRpdmlkdWFsT3B0aW9ucy5pbmRpdmlkdWFsSG9va3M7XHJcbiAgICAgICAgICAgICAgaW5kaXZpZHVhbE9wdGlvbnMuaG9va3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBpbmRpdmlkdWFsT3B0aW9ucy52YWxpZGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2Uuc2F2ZShpbmRpdmlkdWFsT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH0pLnRhcChfaW5zdGFuY2VzID0+IHtcclxuICAgICAgICAgICAgICBpbnN0YW5jZXMgPSBfaW5zdGFuY2VzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KS50aGVuKHJlc3VsdHMgPT4ge1xyXG4gICAgICAvLyBVcGRhdGUgYWxyZWFkeSBkb25lIHJvdy1ieS1yb3cgLSBleGl0XHJcbiAgICAgIGlmIChyZXN1bHRzKSB7XHJcbiAgICAgICAgcmV0dXJuIFtyZXN1bHRzLmxlbmd0aCwgcmVzdWx0c107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIG9ubHkgdXBkYXRlZEF0IGlzIGJlaW5nIHBhc3NlZCwgdGhlbiBza2lwIHVwZGF0ZVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgXy5pc0VtcHR5KHZhbHVlc1VzZSlcclxuICAgICAgICAgfHwgT2JqZWN0LmtleXModmFsdWVzVXNlKS5sZW5ndGggPT09IDEgJiYgdmFsdWVzVXNlW3RoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0XVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gWzBdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YWx1ZXNVc2UgPSBVdGlscy5tYXBWYWx1ZUZpZWxkTmFtZXModmFsdWVzVXNlLCBvcHRpb25zLmZpZWxkcywgdGhpcyk7XHJcbiAgICAgIG9wdGlvbnMgPSBVdGlscy5tYXBPcHRpb25GaWVsZE5hbWVzKG9wdGlvbnMsIHRoaXMpO1xyXG4gICAgICBvcHRpb25zLmhhc1RyaWdnZXIgPSB0aGlzLm9wdGlvbnMgPyB0aGlzLm9wdGlvbnMuaGFzVHJpZ2dlciA6IGZhbHNlO1xyXG5cclxuICAgICAgLy8gUnVuIHF1ZXJ5IHRvIHVwZGF0ZSBhbGwgcm93c1xyXG4gICAgICByZXR1cm4gdGhpcy5RdWVyeUludGVyZmFjZS5idWxrVXBkYXRlKHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCB2YWx1ZXNVc2UsIG9wdGlvbnMud2hlcmUsIG9wdGlvbnMsIHRoaXMudGFibGVBdHRyaWJ1dGVzKS50aGVuKGFmZmVjdGVkUm93cyA9PiB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMucmV0dXJuaW5nKSB7XHJcbiAgICAgICAgICBpbnN0YW5jZXMgPSBhZmZlY3RlZFJvd3M7XHJcbiAgICAgICAgICByZXR1cm4gW2FmZmVjdGVkUm93cy5sZW5ndGgsIGFmZmVjdGVkUm93c107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW2FmZmVjdGVkUm93c107XHJcbiAgICAgIH0pO1xyXG4gICAgfSkudGFwKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChvcHRpb25zLmluZGl2aWR1YWxIb29rcykge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLm1hcChpbnN0YW5jZXMsIGluc3RhbmNlID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdhZnRlclVwZGF0ZScsIGluc3RhbmNlLCBvcHRpb25zKTtcclxuICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHJlc3VsdFsxXSA9IGluc3RhbmNlcztcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSkudGFwKCgpID0+IHtcclxuICAgICAgLy8gUnVuIGFmdGVyIGhvb2tcclxuICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcclxuICAgICAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSB2YWx1ZXM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoJ2FmdGVyQnVsa1VwZGF0ZScsIG9wdGlvbnMpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnMuYXR0cmlidXRlcztcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSdW4gYSBkZXNjcmliZSBxdWVyeSBvbiB0aGUgdGFibGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NjaGVtYV0gc2NoZW1hIG5hbWUgdG8gc2VhcmNoIHRhYmxlIGluXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBxdWVyeSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gaGFzaCBvZiBhdHRyaWJ1dGVzIGFuZCB0aGVpciB0eXBlc1xyXG4gICAqL1xyXG4gIHN0YXRpYyBkZXNjcmliZShzY2hlbWEsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLlF1ZXJ5SW50ZXJmYWNlLmRlc2NyaWJlVGFibGUodGhpcy50YWJsZU5hbWUsIE9iamVjdC5hc3NpZ24oeyBzY2hlbWE6IHNjaGVtYSB8fCB0aGlzLl9zY2hlbWEgfHwgdW5kZWZpbmVkIH0sIG9wdGlvbnMpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfZ2V0RGVmYXVsdFRpbWVzdGFtcChhdHRyKSB7XHJcbiAgICBpZiAoISF0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cl0gJiYgISF0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBVdGlscy50b0RlZmF1bHRWYWx1ZSh0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZGVmYXVsdFZhbHVlLCB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfZXhwYW5kQXR0cmlidXRlcyhvcHRpb25zKSB7XHJcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChvcHRpb25zLmF0dHJpYnV0ZXMpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBhdHRyaWJ1dGVzID0gT2JqZWN0LmtleXModGhpcy5yYXdBdHRyaWJ1dGVzKTtcclxuXHJcbiAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGVzLmV4Y2x1ZGUpIHtcclxuICAgICAgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZmlsdGVyKGVsZW0gPT4gIW9wdGlvbnMuYXR0cmlidXRlcy5leGNsdWRlLmluY2x1ZGVzKGVsZW0pKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGVzLmluY2x1ZGUpIHtcclxuICAgICAgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuY29uY2F0KG9wdGlvbnMuYXR0cmlidXRlcy5pbmNsdWRlKTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xyXG4gIH1cclxuXHJcbiAgLy8gSW5qZWN0IF9zY29wZSBpbnRvIG9wdGlvbnMuXHJcbiAgc3RhdGljIF9pbmplY3RTY29wZShvcHRpb25zKSB7XHJcbiAgICBjb25zdCBzY29wZSA9IFV0aWxzLmNsb25lRGVlcCh0aGlzLl9zY29wZSk7XHJcbiAgICB0aGlzLl9kZWZhdWx0c09wdGlvbnMob3B0aW9ucywgc2NvcGUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSgpIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaW5zcGVjdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaGFzQWxpYXMoYWxpYXMpIHtcclxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hc3NvY2lhdGlvbnMsIGFsaWFzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluY3JlbWVudCB0aGUgdmFsdWUgb2Ygb25lIG9yIG1vcmUgY29sdW1ucy4gVGhpcyBpcyBkb25lIGluIHRoZSBkYXRhYmFzZSwgd2hpY2ggbWVhbnMgaXQgZG9lcyBub3QgdXNlIHRoZSB2YWx1ZXMgY3VycmVudGx5IHN0b3JlZCBvbiB0aGUgSW5zdGFuY2UuIFRoZSBpbmNyZW1lbnQgaXMgZG9uZSB1c2luZyBhXHJcbiAgICogYGBgIFNFVCBjb2x1bW4gPSBjb2x1bW4gKyBYIFdIRVJFIGZvbyA9ICdiYXInIGBgYCBxdWVyeS4gVG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlIGFmdGVyIGFuIGluY3JlbWVudCBpbnRvIHRoZSBJbnN0YW5jZSB5b3Ugc2hvdWxkIGRvIGEgcmVsb2FkLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+aW5jcmVtZW50IG51bWJlciBieSAxPC9jYXB0aW9uPlxyXG4gICAqIE1vZGVsLmluY3JlbWVudCgnbnVtYmVyJywgeyB3aGVyZTogeyBmb286ICdiYXInIH0pO1xyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+aW5jcmVtZW50IG51bWJlciBhbmQgY291bnQgYnkgMjwvY2FwdGlvbj5cclxuICAgKiBNb2RlbC5pbmNyZW1lbnQoWydudW1iZXInLCAnY291bnQnXSwgeyBieTogMiwgd2hlcmU6IHsgZm9vOiAnYmFyJyB9IH0pO1xyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+aW5jcmVtZW50IGFuc3dlciBieSA0MiwgYW5kIGRlY3JlbWVudCB0cmllcyBieSAxPC9jYXB0aW9uPlxyXG4gICAqIC8vIGBieWAgaXMgaWdub3JlZCwgYXMgZWFjaCBjb2x1bW4gaGFzIGl0cyBvd24gdmFsdWVcclxuICAgKiBNb2RlbC5pbmNyZW1lbnQoeyBhbnN3ZXI6IDQyLCB0cmllczogLTF9LCB7IGJ5OiAyLCB3aGVyZTogeyBmb286ICdiYXInIH0gfSk7XHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsI3JlbG9hZH1cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfEFycmF5fE9iamVjdH0gZmllbGRzIElmIGEgc3RyaW5nIGlzIHByb3ZpZGVkLCB0aGF0IGNvbHVtbiBpcyBpbmNyZW1lbnRlZCBieSB0aGUgdmFsdWUgb2YgYGJ5YCBnaXZlbiBpbiBvcHRpb25zLiBJZiBhbiBhcnJheSBpcyBwcm92aWRlZCwgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgZWFjaCBjb2x1bW4uIElmIGFuZCBvYmplY3QgaXMgcHJvdmlkZWQsIGVhY2ggY29sdW1uIGlzIGluY3JlbWVudGVkIGJ5IHRoZSB2YWx1ZSBnaXZlbi5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBpbmNyZW1lbnQgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLndoZXJlIGNvbmRpdGlvbnMgaGFzaFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ieT0xXSBUaGUgbnVtYmVyIHRvIGluY3JlbWVudCBieVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuc2lsZW50PWZhbHNlXSBJZiB0cnVlLCB0aGUgdXBkYXRlZEF0IHRpbWVzdGFtcCB3aWxsIG5vdCBiZSB1cGRhdGVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxyXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxbXSw/bnVtYmVyPn0gcmV0dXJucyBhbiBhcnJheSBvZiBhZmZlY3RlZCByb3dzIGFuZCBhZmZlY3RlZCBjb3VudCB3aXRoIGBvcHRpb25zLnJldHVybmluZzogdHJ1ZWAsIHdoZW5ldmVyIHN1cHBvcnRlZCBieSBkaWFsZWN0XHJcbiAgICovXHJcbiAgc3RhdGljIGluY3JlbWVudChmaWVsZHMsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIHRoaXMuX2luamVjdFNjb3BlKG9wdGlvbnMpO1xyXG4gICAgdGhpcy5fb3B0aW9uc011c3RDb250YWluV2hlcmUob3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlZEF0QXR0ciA9IHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0O1xyXG4gICAgY29uc3QgdmVyc2lvbkF0dHIgPSB0aGlzLl92ZXJzaW9uQXR0cmlidXRlO1xyXG4gICAgY29uc3QgdXBkYXRlZEF0QXR0cmlidXRlID0gdGhpcy5yYXdBdHRyaWJ1dGVzW3VwZGF0ZWRBdEF0dHJdO1xyXG4gICAgb3B0aW9ucyA9IFV0aWxzLmRlZmF1bHRzKHt9LCBvcHRpb25zLCB7XHJcbiAgICAgIGJ5OiAxLFxyXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcclxuICAgICAgd2hlcmU6IHt9LFxyXG4gICAgICBpbmNyZW1lbnQ6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIFV0aWxzLm1hcE9wdGlvbkZpZWxkTmFtZXMob3B0aW9ucywgdGhpcyk7XHJcblxyXG4gICAgY29uc3Qgd2hlcmUgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLndoZXJlKTtcclxuICAgIGxldCB2YWx1ZXMgPSB7fTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGZpZWxkcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdmFsdWVzW2ZpZWxkc10gPSBvcHRpb25zLmJ5O1xyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZpZWxkcykpIHtcclxuICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgIHZhbHVlc1tmaWVsZF0gPSBvcHRpb25zLmJ5O1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7IC8vIEFzc3VtZSBmaWVsZHMgaXMga2V5LXZhbHVlIHBhaXJzXHJcbiAgICAgIHZhbHVlcyA9IGZpZWxkcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW9wdGlvbnMuc2lsZW50ICYmIHVwZGF0ZWRBdEF0dHIgJiYgIXZhbHVlc1t1cGRhdGVkQXRBdHRyXSkge1xyXG4gICAgICBvcHRpb25zLmF0dHJpYnV0ZXNbdXBkYXRlZEF0QXR0cmlidXRlLmZpZWxkIHx8IHVwZGF0ZWRBdEF0dHJdID0gdGhpcy5fZ2V0RGVmYXVsdFRpbWVzdGFtcCh1cGRhdGVkQXRBdHRyKSB8fCBVdGlscy5ub3codGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KTtcclxuICAgIH1cclxuICAgIGlmICh2ZXJzaW9uQXR0cikge1xyXG4gICAgICB2YWx1ZXNbdmVyc2lvbkF0dHJdID0gb3B0aW9ucy5pbmNyZW1lbnQgPyAxIDogLTE7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBhdHRyIG9mIE9iamVjdC5rZXlzKHZhbHVlcykpIHtcclxuICAgICAgLy8gRmllbGQgbmFtZSBtYXBwaW5nXHJcbiAgICAgIGlmICh0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cl0gJiYgdGhpcy5yYXdBdHRyaWJ1dGVzW2F0dHJdLmZpZWxkICYmIHRoaXMucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZCAhPT0gYXR0cikge1xyXG4gICAgICAgIHZhbHVlc1t0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGRdID0gdmFsdWVzW2F0dHJdO1xyXG4gICAgICAgIGRlbGV0ZSB2YWx1ZXNbYXR0cl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJvbWlzZTtcclxuICAgIGlmICghb3B0aW9ucy5pbmNyZW1lbnQpIHtcclxuICAgICAgcHJvbWlzZSA9IHRoaXMuUXVlcnlJbnRlcmZhY2UuZGVjcmVtZW50KHRoaXMsIHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCB2YWx1ZXMsIHdoZXJlLCBvcHRpb25zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHByb21pc2UgPSB0aGlzLlF1ZXJ5SW50ZXJmYWNlLmluY3JlbWVudCh0aGlzLCB0aGlzLmdldFRhYmxlTmFtZShvcHRpb25zKSwgdmFsdWVzLCB3aGVyZSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHByb21pc2UudGhlbihhZmZlY3RlZFJvd3MgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucy5yZXR1cm5pbmcpIHtcclxuICAgICAgICByZXR1cm4gW2FmZmVjdGVkUm93cywgYWZmZWN0ZWRSb3dzLmxlbmd0aF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBbYWZmZWN0ZWRSb3dzXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVjcmVtZW50IHRoZSB2YWx1ZSBvZiBvbmUgb3IgbW9yZSBjb2x1bW5zLiBUaGlzIGlzIGRvbmUgaW4gdGhlIGRhdGFiYXNlLCB3aGljaCBtZWFucyBpdCBkb2VzIG5vdCB1c2UgdGhlIHZhbHVlcyBjdXJyZW50bHkgc3RvcmVkIG9uIHRoZSBJbnN0YW5jZS4gVGhlIGRlY3JlbWVudCBpcyBkb25lIHVzaW5nIGFcclxuICAgKiBgYGBzcWwgU0VUIGNvbHVtbiA9IGNvbHVtbiAtIFggV0hFUkUgZm9vID0gJ2JhcidgYGAgcXVlcnkuIFRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZSBhZnRlciBhIGRlY3JlbWVudCBpbnRvIHRoZSBJbnN0YW5jZSB5b3Ugc2hvdWxkIGRvIGEgcmVsb2FkLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+ZGVjcmVtZW50IG51bWJlciBieSAxPC9jYXB0aW9uPlxyXG4gICAqIE1vZGVsLmRlY3JlbWVudCgnbnVtYmVyJywgeyB3aGVyZTogeyBmb286ICdiYXInIH0pO1xyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+ZGVjcmVtZW50IG51bWJlciBhbmQgY291bnQgYnkgMjwvY2FwdGlvbj5cclxuICAgKiBNb2RlbC5kZWNyZW1lbnQoWydudW1iZXInLCAnY291bnQnXSwgeyBieTogMiwgd2hlcmU6IHsgZm9vOiAnYmFyJyB9IH0pO1xyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+ZGVjcmVtZW50IGFuc3dlciBieSA0MiwgYW5kIGRlY3JlbWVudCB0cmllcyBieSAtMTwvY2FwdGlvbj5cclxuICAgKiAvLyBgYnlgIGlzIGlnbm9yZWQsIHNpbmNlIGVhY2ggY29sdW1uIGhhcyBpdHMgb3duIHZhbHVlXHJcbiAgICogTW9kZWwuZGVjcmVtZW50KHsgYW5zd2VyOiA0MiwgdHJpZXM6IC0xfSwgeyBieTogMiwgd2hlcmU6IHsgZm9vOiAnYmFyJyB9IH0pO1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8QXJyYXl8T2JqZWN0fSBmaWVsZHMgSWYgYSBzdHJpbmcgaXMgcHJvdmlkZWQsIHRoYXQgY29sdW1uIGlzIGluY3JlbWVudGVkIGJ5IHRoZSB2YWx1ZSBvZiBgYnlgIGdpdmVuIGluIG9wdGlvbnMuIElmIGFuIGFycmF5IGlzIHByb3ZpZGVkLCB0aGUgc2FtZSBpcyB0cnVlIGZvciBlYWNoIGNvbHVtbi4gSWYgYW5kIG9iamVjdCBpcyBwcm92aWRlZCwgZWFjaCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgdGhlIHZhbHVlIGdpdmVuLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGRlY3JlbWVudCBvcHRpb25zLCBzaW1pbGFyIHRvIGluY3JlbWVudFxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbC5pbmNyZW1lbnR9XHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbCNyZWxvYWR9XHJcbiAgICogQHNpbmNlIDQuMzYuMFxyXG5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbFtdLD9udW1iZXI+fSByZXR1cm5zIGFuIGFycmF5IG9mIGFmZmVjdGVkIHJvd3MgYW5kIGFmZmVjdGVkIGNvdW50IHdpdGggYG9wdGlvbnMucmV0dXJuaW5nOiB0cnVlYCwgd2hlbmV2ZXIgc3VwcG9ydGVkIGJ5IGRpYWxlY3RcclxuICAgKi9cclxuICBzdGF0aWMgZGVjcmVtZW50KGZpZWxkcywgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IF8uZGVmYXVsdHMoeyBpbmNyZW1lbnQ6IGZhbHNlIH0sIG9wdGlvbnMsIHtcclxuICAgICAgYnk6IDFcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmluY3JlbWVudChmaWVsZHMsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIF9vcHRpb25zTXVzdENvbnRhaW5XaGVyZShvcHRpb25zKSB7XHJcbiAgICBhc3NlcnQob3B0aW9ucyAmJiBvcHRpb25zLndoZXJlLCAnTWlzc2luZyB3aGVyZSBhdHRyaWJ1dGUgaW4gdGhlIG9wdGlvbnMgcGFyYW1ldGVyJyk7XHJcbiAgICBhc3NlcnQoXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMud2hlcmUpIHx8IEFycmF5LmlzQXJyYXkob3B0aW9ucy53aGVyZSkgfHwgb3B0aW9ucy53aGVyZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCxcclxuICAgICAgJ0V4cGVjdGVkIHBsYWluIG9iamVjdCwgYXJyYXkgb3Igc2VxdWVsaXplIG1ldGhvZCBpbiB0aGUgb3B0aW9ucy53aGVyZSBwYXJhbWV0ZXInKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBxdWVyeSBmb3IgdGhpcyBpbnN0YW5jZSwgdXNlIHdpdGggYG9wdGlvbnMud2hlcmVgXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGVja1ZlcnNpb249ZmFsc2VdIGluY2x1ZGUgdmVyc2lvbiBhdHRyaWJ1dGUgaW4gd2hlcmUgaGFzaFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICB3aGVyZShjaGVja1ZlcnNpb24pIHtcclxuICAgIGNvbnN0IHdoZXJlID0gdGhpcy5jb25zdHJ1Y3Rvci5wcmltYXJ5S2V5QXR0cmlidXRlcy5yZWR1Y2UoKHJlc3VsdCwgYXR0cmlidXRlKSA9PiB7XHJcbiAgICAgIHJlc3VsdFthdHRyaWJ1dGVdID0gdGhpcy5nZXQoYXR0cmlidXRlLCB7IHJhdzogdHJ1ZSB9KTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0sIHt9KTtcclxuXHJcbiAgICBpZiAoXy5zaXplKHdoZXJlKSA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbW9kZWxPcHRpb25zLndoZXJlQ29sbGVjdGlvbjtcclxuICAgIH1cclxuICAgIGNvbnN0IHZlcnNpb25BdHRyID0gdGhpcy5jb25zdHJ1Y3Rvci5fdmVyc2lvbkF0dHJpYnV0ZTtcclxuICAgIGlmIChjaGVja1ZlcnNpb24gJiYgdmVyc2lvbkF0dHIpIHtcclxuICAgICAgd2hlcmVbdmVyc2lvbkF0dHJdID0gdGhpcy5nZXQodmVyc2lvbkF0dHIsIHsgcmF3OiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFV0aWxzLm1hcFdoZXJlRmllbGROYW1lcyh3aGVyZSwgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZygpIHtcclxuICAgIHJldHVybiBgW29iamVjdCBTZXF1ZWxpemVJbnN0YW5jZToke3RoaXMuY29uc3RydWN0b3IubmFtZX1dYDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIHVuZGVybHlpbmcgZGF0YSB2YWx1ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBrZXkgdG8gbG9vayBpbiBpbnN0YW5jZSBkYXRhIHN0b3JlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7YW55fVxyXG4gICAqL1xyXG4gIGdldERhdGFWYWx1ZShrZXkpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFWYWx1ZXNba2V5XTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIHZhbHVlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IGtleSB0byBzZXQgaW4gaW5zdGFuY2UgZGF0YSBzdG9yZVxyXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSBuZXcgdmFsdWUgZm9yIGdpdmVuIGtleVxyXG4gICAqXHJcbiAgICovXHJcbiAgc2V0RGF0YVZhbHVlKGtleSwgdmFsdWUpIHtcclxuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLl9wcmV2aW91c0RhdGFWYWx1ZXNba2V5XTtcclxuXHJcbiAgICBpZiAoIVV0aWxzLmlzUHJpbWl0aXZlKHZhbHVlKSAmJiB2YWx1ZSAhPT0gbnVsbCB8fCB2YWx1ZSAhPT0gb3JpZ2luYWxWYWx1ZSkge1xyXG4gICAgICB0aGlzLmNoYW5nZWQoa2V5LCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFWYWx1ZXNba2V5XSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgbm8ga2V5IGlzIGdpdmVuLCByZXR1cm5zIGFsbCB2YWx1ZXMgb2YgdGhlIGluc3RhbmNlLCBhbHNvIGludm9raW5nIHZpcnR1YWwgZ2V0dGVycy5cclxuICAgKlxyXG4gICAqIElmIGtleSBpcyBnaXZlbiBhbmQgYSBmaWVsZCBvciB2aXJ0dWFsIGdldHRlciBpcyBwcmVzZW50IGZvciB0aGUga2V5IGl0IHdpbGwgY2FsbCB0aGF0IGdldHRlciAtIGVsc2UgaXQgd2lsbCByZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gIFtrZXldIGtleSB0byBnZXQgdmFsdWUgb2ZcclxuICAgKiBAcGFyYW0ge09iamVjdH0gIFtvcHRpb25zXSBnZXQgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucGxhaW49ZmFsc2VdIElmIHNldCB0byB0cnVlLCBpbmNsdWRlZCBpbnN0YW5jZXMgd2lsbCBiZSByZXR1cm5lZCBhcyBwbGFpbiBvYmplY3RzXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yYXc9ZmFsc2VdIElmIHNldCB0byB0cnVlLCBmaWVsZCBhbmQgdmlydHVhbCBzZXR0ZXJzIHdpbGwgYmUgaWdub3JlZFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdHxhbnl9XHJcbiAgICovXHJcbiAgZ2V0KGtleSwgb3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBvcHRpb25zID0ga2V5O1xyXG4gICAgICBrZXkgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2N1c3RvbUdldHRlcnMsIGtleSkgJiYgIW9wdGlvbnMucmF3KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbUdldHRlcnNba2V5XS5jYWxsKHRoaXMsIGtleSwgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChvcHRpb25zLnBsYWluICYmIHRoaXMuX29wdGlvbnMuaW5jbHVkZSAmJiB0aGlzLl9vcHRpb25zLmluY2x1ZGVOYW1lcy5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhVmFsdWVzW2tleV0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmFsdWVzW2tleV0ubWFwKGluc3RhbmNlID0+IGluc3RhbmNlLmdldChvcHRpb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGFWYWx1ZXNba2V5XSBpbnN0YW5jZW9mIE1vZGVsKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmFsdWVzW2tleV0uZ2V0KG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmFsdWVzW2tleV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFWYWx1ZXNba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2hhc0N1c3RvbUdldHRlcnNcclxuICAgICAgfHwgb3B0aW9ucy5wbGFpbiAmJiB0aGlzLl9vcHRpb25zLmluY2x1ZGVcclxuICAgICAgfHwgb3B0aW9ucy5jbG9uZVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHt9O1xyXG4gICAgICBsZXQgX2tleTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9oYXNDdXN0b21HZXR0ZXJzKSB7XHJcbiAgICAgICAgZm9yIChfa2V5IGluIHRoaXMuX2N1c3RvbUdldHRlcnMpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5hdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgICYmICF0aGlzLl9vcHRpb25zLmF0dHJpYnV0ZXMuaW5jbHVkZXMoX2tleSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2N1c3RvbUdldHRlcnMsIF9rZXkpKSB7XHJcbiAgICAgICAgICAgIHZhbHVlc1tfa2V5XSA9IHRoaXMuZ2V0KF9rZXksIG9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChfa2V5IGluIHRoaXMuZGF0YVZhbHVlcykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWVzLCBfa2V5KVxyXG4gICAgICAgICAgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZGF0YVZhbHVlcywgX2tleSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHZhbHVlc1tfa2V5XSA9IHRoaXMuZ2V0KF9rZXksIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5kYXRhVmFsdWVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGlzIHVzZWQgdG8gdXBkYXRlIHZhbHVlcyBvbiB0aGUgaW5zdGFuY2UgKHRoZSBzZXF1ZWxpemUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGluc3RhbmNlIHRoYXQgaXMsIHJlbWVtYmVyIHRoYXQgbm90aGluZyB3aWxsIGJlIHBlcnNpc3RlZCBiZWZvcmUgeW91IGFjdHVhbGx5IGNhbGwgYHNhdmVgKS5cclxuICAgKiBJbiBpdHMgbW9zdCBiYXNpYyBmb3JtIGBzZXRgIHdpbGwgdXBkYXRlIGEgdmFsdWUgc3RvcmVkIGluIHRoZSB1bmRlcmx5aW5nIGBkYXRhVmFsdWVzYCBvYmplY3QuIEhvd2V2ZXIsIGlmIGEgY3VzdG9tIHNldHRlciBmdW5jdGlvbiBpcyBkZWZpbmVkIGZvciB0aGUga2V5LCB0aGF0IGZ1bmN0aW9uXHJcbiAgICogd2lsbCBiZSBjYWxsZWQgaW5zdGVhZC4gVG8gYnlwYXNzIHRoZSBzZXR0ZXIsIHlvdSBjYW4gcGFzcyBgcmF3OiB0cnVlYCBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAgICpcclxuICAgKiBJZiBzZXQgaXMgY2FsbGVkIHdpdGggYW4gb2JqZWN0LCBpdCB3aWxsIGxvb3Agb3ZlciB0aGUgb2JqZWN0LCBhbmQgY2FsbCBzZXQgcmVjdXJzaXZlbHkgZm9yIGVhY2gga2V5LCB2YWx1ZSBwYWlyLiBJZiB5b3Ugc2V0IHJhdyB0byB0cnVlLCB0aGUgdW5kZXJseWluZyBkYXRhVmFsdWVzIHdpbGwgZWl0aGVyIGJlXHJcbiAgICogc2V0IGRpcmVjdGx5IHRvIHRoZSBvYmplY3QgcGFzc2VkLCBvciB1c2VkIHRvIGV4dGVuZCBkYXRhVmFsdWVzLCBpZiBkYXRhVmFsdWVzIGFscmVhZHkgY29udGFpbiB2YWx1ZXMuXHJcbiAgICpcclxuICAgKiBXaGVuIHNldCBpcyBjYWxsZWQsIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgZmllbGQgaXMgc3RvcmVkIGFuZCBzZXRzIGEgY2hhbmdlZCBmbGFnKHNlZSBgY2hhbmdlZGApLlxyXG4gICAqXHJcbiAgICogU2V0IGNhbiBhbHNvIGJlIHVzZWQgdG8gYnVpbGQgaW5zdGFuY2VzIGZvciBhc3NvY2lhdGlvbnMsIGlmIHlvdSBoYXZlIHZhbHVlcyBmb3IgdGhvc2UuXHJcbiAgICogV2hlbiB1c2luZyBzZXQgd2l0aCBhc3NvY2lhdGlvbnMgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwcm9wZXJ0eSBrZXkgbWF0Y2hlcyB0aGUgYWxpYXMgb2YgdGhlIGFzc29jaWF0aW9uXHJcbiAgICogd2hpbGUgYWxzbyBtYWtpbmcgc3VyZSB0aGF0IHRoZSBwcm9wZXIgaW5jbHVkZSBvcHRpb25zIGhhdmUgYmVlbiBzZXQgKGZyb20gLmJ1aWxkKCkgb3IgLmZpbmRPbmUoKSlcclxuICAgKlxyXG4gICAqIElmIGNhbGxlZCB3aXRoIGEgZG90LnNlcGFyYXRlZCBrZXkgb24gYSBKU09OL0pTT05CIGF0dHJpYnV0ZSBpdCB3aWxsIHNldCB0aGUgdmFsdWUgbmVzdGVkIGFuZCBmbGFnIHRoZSBlbnRpcmUgb2JqZWN0IGFzIGNoYW5nZWQuXHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRBbGx9IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGluY2x1ZGVzXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IGtleSBrZXkgdG8gc2V0LCBpdCBjYW4gYmUgc3RyaW5nIG9yIG9iamVjdC4gV2hlbiBzdHJpbmcgaXQgd2lsbCBzZXQgdGhhdCBrZXksIGZvciBvYmplY3QgaXQgd2lsbCBsb29wIG92ZXIgYWxsIG9iamVjdCBwcm9wZXJ0aWVzIG5kIHNldCB0aGVtLlxyXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSB2YWx1ZSB0byBzZXRcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHNldCBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yYXc9ZmFsc2VdIElmIHNldCB0byB0cnVlLCBmaWVsZCBhbmQgdmlydHVhbCBzZXR0ZXJzIHdpbGwgYmUgaWdub3JlZFxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucmVzZXQ9ZmFsc2VdIENsZWFyIGFsbCBwcmV2aW91c2x5IHNldCBkYXRhIHZhbHVlc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge01vZGVsfVxyXG4gICAqL1xyXG4gIHNldChrZXksIHZhbHVlLCBvcHRpb25zKSB7XHJcbiAgICBsZXQgdmFsdWVzO1xyXG4gICAgbGV0IG9yaWdpbmFsVmFsdWU7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmIGtleSAhPT0gbnVsbCkge1xyXG4gICAgICB2YWx1ZXMgPSBrZXk7XHJcbiAgICAgIG9wdGlvbnMgPSB2YWx1ZSB8fCB7fTtcclxuXHJcbiAgICAgIGlmIChvcHRpb25zLnJlc2V0KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhVmFsdWVzID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWQoa2V5LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiByYXcsIGFuZCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGluY2x1ZGVzIG9yIHNwZWNpYWwgYXR0cmlidXRlcywganVzdCBzZXQgaXQgc3RyYWlnaHQgb24gdGhlIGRhdGFWYWx1ZXMgb2JqZWN0XHJcbiAgICAgIGlmIChvcHRpb25zLnJhdyAmJiAhKHRoaXMuX29wdGlvbnMgJiYgdGhpcy5fb3B0aW9ucy5pbmNsdWRlKSAmJiAhKG9wdGlvbnMgJiYgb3B0aW9ucy5hdHRyaWJ1dGVzKSAmJiAhdGhpcy5jb25zdHJ1Y3Rvci5faGFzRGF0ZUF0dHJpYnV0ZXMgJiYgIXRoaXMuY29uc3RydWN0b3IuX2hhc0Jvb2xlYW5BdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZGF0YVZhbHVlcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFWYWx1ZXMgPSBPYmplY3QuYXNzaWduKHRoaXMuZGF0YVZhbHVlcywgdmFsdWVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kYXRhVmFsdWVzID0gdmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiByYXcsIC5jaGFuZ2VkKCkgc2hvdWxkbid0IGJlIHRydWVcclxuICAgICAgICB0aGlzLl9wcmV2aW91c0RhdGFWYWx1ZXMgPSBfLmNsb25lKHRoaXMuZGF0YVZhbHVlcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gTG9vcCBhbmQgY2FsbCBzZXRcclxuICAgICAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb25zdCBzZXRLZXlzID0gZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlc1trXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXQoaywgdmFsdWVzW2tdLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHNldEtleXMob3B0aW9ucy5hdHRyaWJ1dGVzKTtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLl9oYXNWaXJ0dWFsQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBzZXRLZXlzKHRoaXMuY29uc3RydWN0b3IuX3ZpcnR1YWxBdHRyaWJ1dGVzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmluY2x1ZGVOYW1lcykge1xyXG4gICAgICAgICAgICBzZXRLZXlzKHRoaXMuX29wdGlvbnMuaW5jbHVkZU5hbWVzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgdmFsdWVzW2tleV0sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMucmF3KSB7XHJcbiAgICAgICAgICAvLyBJZiByYXcsIC5jaGFuZ2VkKCkgc2hvdWxkbid0IGJlIHRydWVcclxuICAgICAgICAgIHRoaXMuX3ByZXZpb3VzRGF0YVZhbHVlcyA9IF8uY2xvbmUodGhpcy5kYXRhVmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBpZiAoIW9wdGlvbnMpXHJcbiAgICAgIG9wdGlvbnMgPSB7fTtcclxuICAgIGlmICghb3B0aW9ucy5yYXcpIHtcclxuICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuZGF0YVZhbHVlc1trZXldO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIG5vdCByYXcsIGFuZCB0aGVyZSdzIGEgY3VzdG9tIHNldHRlclxyXG4gICAgaWYgKCFvcHRpb25zLnJhdyAmJiB0aGlzLl9jdXN0b21TZXR0ZXJzW2tleV0pIHtcclxuICAgICAgdGhpcy5fY3VzdG9tU2V0dGVyc1trZXldLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XHJcbiAgICAgIC8vIGN1c3RvbSBzZXR0ZXIgc2hvdWxkIGhhdmUgY2hhbmdlZCB2YWx1ZSwgZ2V0IHRoYXQgY2hhbmdlZCB2YWx1ZVxyXG4gICAgICAvLyBUT0RPOiB2NSBtYWtlIHNldHRlcnMgcmV0dXJuIG5ldyB2YWx1ZSBpbnN0ZWFkIG9mIGNoYW5naW5nIGludGVybmFsIHN0b3JlXHJcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5kYXRhVmFsdWVzW2tleV07XHJcbiAgICAgIGlmICghVXRpbHMuaXNQcmltaXRpdmUobmV3VmFsdWUpICYmIG5ld1ZhbHVlICE9PSBudWxsIHx8IG5ld1ZhbHVlICE9PSBvcmlnaW5hbFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNEYXRhVmFsdWVzW2tleV0gPSBvcmlnaW5hbFZhbHVlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZChrZXksIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGluY2x1ZGVkIG1vZGVscywgYW5kIGlmIHRoaXMga2V5IG1hdGNoZXMgdGhlIGluY2x1ZGUgbW9kZWwgbmFtZXMvYWxpYXNlc1xyXG4gICAgICBpZiAodGhpcy5fb3B0aW9ucyAmJiB0aGlzLl9vcHRpb25zLmluY2x1ZGUgJiYgdGhpcy5fb3B0aW9ucy5pbmNsdWRlTmFtZXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgIC8vIFBhc3MgaXQgb24gdG8gdGhlIGluY2x1ZGUgaGFuZGxlclxyXG4gICAgICAgIHRoaXMuX3NldEluY2x1ZGUoa2V5LCB2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH1cclxuICAgICAgLy8gQnVuY2ggb2Ygc3R1ZmYgd2Ugd29uJ3QgZG8gd2hlbiBpdCdzIHJhd1xyXG4gICAgICBpZiAoIW9wdGlvbnMucmF3KSB7XHJcbiAgICAgICAgLy8gSWYgYXR0cmlidXRlIGlzIG5vdCBpbiBtb2RlbCBkZWZpbml0aW9uLCByZXR1cm5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzQXR0cmlidXRlKGtleSkpIHtcclxuICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJy4nKSAmJiB0aGlzLmNvbnN0cnVjdG9yLl9qc29uQXR0cmlidXRlcy5oYXMoa2V5LnNwbGl0KCcuJylbMF0pKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzTmVzdGVkVmFsdWUgPSBEb3R0aWUuZ2V0KHRoaXMuZGF0YVZhbHVlcywga2V5KTtcclxuICAgICAgICAgICAgaWYgKCFfLmlzRXF1YWwocHJldmlvdXNOZXN0ZWRWYWx1ZSwgdmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgRG90dGllLnNldCh0aGlzLmRhdGFWYWx1ZXMsIGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZChrZXkuc3BsaXQoJy4nKVswXSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgYXR0ZW1wdGluZyB0byBzZXQgcHJpbWFyeSBrZXkgYW5kIHByaW1hcnkga2V5IGlzIGFscmVhZHkgZGVmaW5lZCwgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuX2hhc1ByaW1hcnlLZXlzICYmIG9yaWdpbmFsVmFsdWUgJiYgdGhpcy5jb25zdHJ1Y3Rvci5faXNQcmltYXJ5S2V5KGtleSkpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgYXR0ZW1wdGluZyB0byBzZXQgcmVhZCBvbmx5IGF0dHJpYnV0ZXMsIHJldHVyblxyXG4gICAgICAgIGlmICghdGhpcy5pc05ld1JlY29yZCAmJiB0aGlzLmNvbnN0cnVjdG9yLl9oYXNSZWFkT25seUF0dHJpYnV0ZXMgJiYgdGhpcy5jb25zdHJ1Y3Rvci5fcmVhZE9ubHlBdHRyaWJ1dGVzLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIElmIHRoZXJlJ3MgYSBkYXRhIHR5cGUgc2FuaXRpemVyXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKVxyXG4gICAgICAgICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbnN0cnVjdG9yLl9kYXRhVHlwZVNhbml0aXplcnMsIGtleSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLmNvbnN0cnVjdG9yLl9kYXRhVHlwZVNhbml0aXplcnNba2V5XS5jYWxsKHRoaXMsIHZhbHVlLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2V0IHdoZW4gdGhlIHZhbHVlIGhhcyBjaGFuZ2VkIGFuZCBub3QgcmF3XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhb3B0aW9ucy5yYXcgJiZcclxuICAgICAgICAoXHJcbiAgICAgICAgICAvLyBUcnVlIHdoZW4gc2VxdWVsaXplIG1ldGhvZFxyXG4gICAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QgfHxcclxuICAgICAgICAgIC8vIENoZWNrIGZvciBkYXRhIHR5cGUgdHlwZSBjb21wYXJhdG9yc1xyXG4gICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCkgJiYgdGhpcy5jb25zdHJ1Y3Rvci5fZGF0YVR5cGVDaGFuZ2VzW2tleV0gJiYgdGhpcy5jb25zdHJ1Y3Rvci5fZGF0YVR5cGVDaGFuZ2VzW2tleV0uY2FsbCh0aGlzLCB2YWx1ZSwgb3JpZ2luYWxWYWx1ZSwgb3B0aW9ucykgfHxcclxuICAgICAgICAgIC8vIENoZWNrIGRlZmF1bHRcclxuICAgICAgICAgICF0aGlzLmNvbnN0cnVjdG9yLl9kYXRhVHlwZUNoYW5nZXNba2V5XSAmJiAoIVV0aWxzLmlzUHJpbWl0aXZlKHZhbHVlKSAmJiB2YWx1ZSAhPT0gbnVsbCB8fCB2YWx1ZSAhPT0gb3JpZ2luYWxWYWx1ZSlcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzRGF0YVZhbHVlc1trZXldID0gb3JpZ2luYWxWYWx1ZTtcclxuICAgICAgICB0aGlzLmNoYW5nZWQoa2V5LCB0cnVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc2V0IGRhdGEgdmFsdWVcclxuICAgICAgdGhpcy5kYXRhVmFsdWVzW2tleV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgc2V0QXR0cmlidXRlcyh1cGRhdGVzKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXQodXBkYXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBjaGFuZ2VkIGlzIGNhbGxlZCB3aXRoIGEgc3RyaW5nIGl0IHdpbGwgcmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHZhbHVlIG9mIHRoYXQga2V5IGluIGBkYXRhVmFsdWVzYCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgdmFsdWUgaW4gYF9wcmV2aW91c0RhdGFWYWx1ZXNgLlxyXG4gICAqXHJcbiAgICogSWYgY2hhbmdlZCBpcyBjYWxsZWQgd2l0aG91dCBhbiBhcmd1bWVudCwgaXQgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2Yga2V5cyB0aGF0IGhhdmUgY2hhbmdlZC5cclxuICAgKlxyXG4gICAqIElmIGNoYW5nZWQgaXMgY2FsbGVkIHdpdGhvdXQgYW4gYXJndW1lbnQgYW5kIG5vIGtleXMgaGF2ZSBjaGFuZ2VkLCBpdCB3aWxsIHJldHVybiBgZmFsc2VgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIGtleSB0byBjaGVjayBvciBjaGFuZ2Ugc3RhdHVzIG9mXHJcbiAgICogQHBhcmFtIHthbnl9IFt2YWx1ZV0gdmFsdWUgdG8gc2V0XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxBcnJheX1cclxuICAgKi9cclxuICBjaGFuZ2VkKGtleSwgdmFsdWUpIHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9jaGFuZ2VkW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5fY2hhbmdlZFtrZXldIHx8IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNoYW5nZWQgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGFWYWx1ZXMpLmZpbHRlcihrZXkgPT4gdGhpcy5jaGFuZ2VkKGtleSkpO1xyXG5cclxuICAgIHJldHVybiBjaGFuZ2VkLmxlbmd0aCA/IGNoYW5nZWQgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHByZXZpb3VzIHZhbHVlIGZvciBrZXkgZnJvbSBgX3ByZXZpb3VzRGF0YVZhbHVlc2AuXHJcbiAgICpcclxuICAgKiBJZiBjYWxsZWQgd2l0aG91dCBhIGtleSwgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWVzIGZvciBhbGwgdmFsdWVzIHdoaWNoIGhhdmUgY2hhbmdlZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIGtleSB0byBnZXQgcHJldmlvdXMgdmFsdWUgb2ZcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHthbnl8QXJyYXk8YW55Pn1cclxuICAgKi9cclxuICBwcmV2aW91cyhrZXkpIHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzRGF0YVZhbHVlc1trZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBfLnBpY2tCeSh0aGlzLl9wcmV2aW91c0RhdGFWYWx1ZXMsICh2YWx1ZSwga2V5KSA9PiB0aGlzLmNoYW5nZWQoa2V5KSk7XHJcbiAgfVxyXG5cclxuICBfc2V0SW5jbHVkZShrZXksIHZhbHVlLCBvcHRpb25zKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB2YWx1ZSA9IFt2YWx1ZV07XHJcbiAgICBpZiAodmFsdWVbMF0gaW5zdGFuY2VvZiBNb2RlbCkge1xyXG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChpbnN0YW5jZSA9PiBpbnN0YW5jZS5kYXRhVmFsdWVzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbmNsdWRlID0gdGhpcy5fb3B0aW9ucy5pbmNsdWRlTWFwW2tleV07XHJcbiAgICBjb25zdCBhc3NvY2lhdGlvbiA9IGluY2x1ZGUuYXNzb2NpYXRpb247XHJcbiAgICBjb25zdCBhY2Nlc3NvciA9IGtleTtcclxuICAgIGNvbnN0IHByaW1hcnlLZXlBdHRyaWJ1dGUgPSBpbmNsdWRlLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGU7XHJcbiAgICBjb25zdCBjaGlsZE9wdGlvbnMgPSB7XHJcbiAgICAgIGlzTmV3UmVjb3JkOiB0aGlzLmlzTmV3UmVjb3JkLFxyXG4gICAgICBpbmNsdWRlOiBpbmNsdWRlLmluY2x1ZGUsXHJcbiAgICAgIGluY2x1ZGVOYW1lczogaW5jbHVkZS5pbmNsdWRlTmFtZXMsXHJcbiAgICAgIGluY2x1ZGVNYXA6IGluY2x1ZGUuaW5jbHVkZU1hcCxcclxuICAgICAgaW5jbHVkZVZhbGlkYXRlZDogdHJ1ZSxcclxuICAgICAgcmF3OiBvcHRpb25zLnJhdyxcclxuICAgICAgYXR0cmlidXRlczogaW5jbHVkZS5vcmlnaW5hbEF0dHJpYnV0ZXNcclxuICAgIH07XHJcbiAgICBsZXQgaXNFbXB0eTtcclxuXHJcbiAgICBpZiAoaW5jbHVkZS5vcmlnaW5hbEF0dHJpYnV0ZXMgPT09IHVuZGVmaW5lZCB8fCBpbmNsdWRlLm9yaWdpbmFsQXR0cmlidXRlcy5sZW5ndGgpIHtcclxuICAgICAgaWYgKGFzc29jaWF0aW9uLmlzU2luZ2xlQXNzb2NpYXRpb24pIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgIHZhbHVlID0gdmFsdWVbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlzRW1wdHkgPSB2YWx1ZSAmJiB2YWx1ZVtwcmltYXJ5S2V5QXR0cmlidXRlXSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gbnVsbDtcclxuICAgICAgICB0aGlzW2FjY2Vzc29yXSA9IHRoaXMuZGF0YVZhbHVlc1thY2Nlc3Nvcl0gPSBpc0VtcHR5ID8gbnVsbCA6IGluY2x1ZGUubW9kZWwuYnVpbGQodmFsdWUsIGNoaWxkT3B0aW9ucyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXNFbXB0eSA9IHZhbHVlWzBdICYmIHZhbHVlWzBdW3ByaW1hcnlLZXlBdHRyaWJ1dGVdID09PSBudWxsO1xyXG4gICAgICAgIHRoaXNbYWNjZXNzb3JdID0gdGhpcy5kYXRhVmFsdWVzW2FjY2Vzc29yXSA9IGlzRW1wdHkgPyBbXSA6IGluY2x1ZGUubW9kZWwuYnVsa0J1aWxkKHZhbHVlLCBjaGlsZE9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSB0aGlzIGluc3RhbmNlLCBhbmQgaWYgdGhlIHZhbGlkYXRpb24gcGFzc2VzLCBwZXJzaXN0IGl0IHRvIHRoZSBkYXRhYmFzZS4gSXQgd2lsbCBvbmx5IHNhdmUgY2hhbmdlZCBmaWVsZHMsIGFuZCBkbyBub3RoaW5nIGlmIG5vIGZpZWxkcyBoYXZlIGNoYW5nZWQuXHJcbiAgICpcclxuICAgKiBPbiBzdWNjZXNzLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGlzIGluc3RhbmNlLiBPbiB2YWxpZGF0aW9uIGVycm9yLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiBgU2VxdWVsaXplLlZhbGlkYXRpb25FcnJvcmAuXHJcbiAgICogVGhpcyBlcnJvciB3aWxsIGhhdmUgYSBwcm9wZXJ0eSBmb3IgZWFjaCBvZiB0aGUgZmllbGRzIGZvciB3aGljaCB2YWxpZGF0aW9uIGZhaWxlZCwgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhhdCBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgIFtvcHRpb25zXSBzYXZlIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSAgICBbb3B0aW9ucy5maWVsZHNdIEFuIG9wdGlvbmFsIGFycmF5IG9mIHN0cmluZ3MsIHJlcHJlc2VudGluZyBkYXRhYmFzZSBjb2x1bW5zLiBJZiBmaWVsZHMgaXMgcHJvdmlkZWQsIG9ubHkgdGhvc2UgY29sdW1ucyB3aWxsIGJlIHZhbGlkYXRlZCBhbmQgc2F2ZWQuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgW29wdGlvbnMuc2lsZW50PWZhbHNlXSBJZiB0cnVlLCB0aGUgdXBkYXRlZEF0IHRpbWVzdGFtcCB3aWxsIG5vdCBiZSB1cGRhdGVkLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgIFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIElmIGZhbHNlLCB2YWxpZGF0aW9ucyB3b24ndCBiZSBydW4uXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgW29wdGlvbnMuaG9va3M9dHJ1ZV0gUnVuIGJlZm9yZSBhbmQgYWZ0ZXIgY3JlYXRlIC8gdXBkYXRlICsgdmFsaWRhdGUgaG9va3NcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgICBbb3B0aW9ucy5sb2dnaW5nPWZhbHNlXSBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCB3aGlsZSBydW5uaW5nIHRoZSBxdWVyeSB0byBsb2cgdGhlIHNxbC5cclxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgIFtvcHRpb25zLnJldHVybmluZ10gQXBwZW5kIFJFVFVSTklORyAqIHRvIGdldCBiYWNrIGF1dG8gZ2VuZXJhdGVkIHZhbHVlcyAoUG9zdGdyZXMgb25seSlcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsPn1cclxuICAgKi9cclxuICBzYXZlKG9wdGlvbnMpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzZWNvbmQgYXJndW1lbnQgd2FzIHJlbW92ZWQgaW4gZmF2b3Igb2YgdGhlIG9wdGlvbnMgb2JqZWN0LicpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XHJcbiAgICBvcHRpb25zID0gXy5kZWZhdWx0cyhvcHRpb25zLCB7XHJcbiAgICAgIGhvb2tzOiB0cnVlLFxyXG4gICAgICB2YWxpZGF0ZTogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLmZpZWxkcykge1xyXG4gICAgICBpZiAodGhpcy5pc05ld1JlY29yZCkge1xyXG4gICAgICAgIG9wdGlvbnMuZmllbGRzID0gT2JqZWN0LmtleXModGhpcy5jb25zdHJ1Y3Rvci5yYXdBdHRyaWJ1dGVzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcHRpb25zLmZpZWxkcyA9IF8uaW50ZXJzZWN0aW9uKHRoaXMuY2hhbmdlZCgpLCBPYmplY3Qua2V5cyh0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXMpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgb3B0aW9ucy5kZWZhdWx0RmllbGRzID0gb3B0aW9ucy5maWVsZHM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMucmV0dXJuaW5nID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKG9wdGlvbnMuYXNzb2NpYXRpb24pIHtcclxuICAgICAgICBvcHRpb25zLnJldHVybmluZyA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNOZXdSZWNvcmQpIHtcclxuICAgICAgICBvcHRpb25zLnJldHVybmluZyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmltYXJ5S2V5TmFtZSA9IHRoaXMuY29uc3RydWN0b3IucHJpbWFyeUtleUF0dHJpYnV0ZTtcclxuICAgIGNvbnN0IHByaW1hcnlLZXlBdHRyaWJ1dGUgPSBwcmltYXJ5S2V5TmFtZSAmJiB0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXNbcHJpbWFyeUtleU5hbWVdO1xyXG4gICAgY29uc3QgY3JlYXRlZEF0QXR0ciA9IHRoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuY3JlYXRlZEF0O1xyXG4gICAgY29uc3QgdmVyc2lvbkF0dHIgPSB0aGlzLmNvbnN0cnVjdG9yLl92ZXJzaW9uQXR0cmlidXRlO1xyXG4gICAgY29uc3QgaG9vayA9IHRoaXMuaXNOZXdSZWNvcmQgPyAnQ3JlYXRlJyA6ICdVcGRhdGUnO1xyXG4gICAgY29uc3Qgd2FzTmV3UmVjb3JkID0gdGhpcy5pc05ld1JlY29yZDtcclxuICAgIGNvbnN0IG5vdyA9IFV0aWxzLm5vdyh0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QpO1xyXG4gICAgbGV0IHVwZGF0ZWRBdEF0dHIgPSB0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdDtcclxuXHJcbiAgICBpZiAodXBkYXRlZEF0QXR0ciAmJiBvcHRpb25zLmZpZWxkcy5sZW5ndGggPj0gMSAmJiAhb3B0aW9ucy5maWVsZHMuaW5jbHVkZXModXBkYXRlZEF0QXR0cikpIHtcclxuICAgICAgb3B0aW9ucy5maWVsZHMucHVzaCh1cGRhdGVkQXRBdHRyKTtcclxuICAgIH1cclxuICAgIGlmICh2ZXJzaW9uQXR0ciAmJiBvcHRpb25zLmZpZWxkcy5sZW5ndGggPj0gMSAmJiAhb3B0aW9ucy5maWVsZHMuaW5jbHVkZXModmVyc2lvbkF0dHIpKSB7XHJcbiAgICAgIG9wdGlvbnMuZmllbGRzLnB1c2godmVyc2lvbkF0dHIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zLnNpbGVudCA9PT0gdHJ1ZSAmJiAhKHRoaXMuaXNOZXdSZWNvcmQgJiYgdGhpcy5nZXQodXBkYXRlZEF0QXR0ciwgeyByYXc6IHRydWUgfSkpKSB7XHJcbiAgICAgIC8vIFVwZGF0ZUF0QXR0ciBtaWdodCBoYXZlIGJlZW4gYWRkZWQgYXMgYSByZXN1bHQgb2YgT2JqZWN0LmtleXMoTW9kZWwucmF3QXR0cmlidXRlcykuIEluIHRoYXQgY2FzZSB3ZSBoYXZlIHRvIHJlbW92ZSBpdCBhZ2FpblxyXG4gICAgICBfLnJlbW92ZShvcHRpb25zLmZpZWxkcywgdmFsID0+IHZhbCA9PT0gdXBkYXRlZEF0QXR0cik7XHJcbiAgICAgIHVwZGF0ZWRBdEF0dHIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc05ld1JlY29yZCA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAoY3JlYXRlZEF0QXR0ciAmJiAhb3B0aW9ucy5maWVsZHMuaW5jbHVkZXMoY3JlYXRlZEF0QXR0cikpIHtcclxuICAgICAgICBvcHRpb25zLmZpZWxkcy5wdXNoKGNyZWF0ZWRBdEF0dHIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocHJpbWFyeUtleUF0dHJpYnV0ZSAmJiBwcmltYXJ5S2V5QXR0cmlidXRlLmRlZmF1bHRWYWx1ZSAmJiAhb3B0aW9ucy5maWVsZHMuaW5jbHVkZXMocHJpbWFyeUtleU5hbWUpKSB7XHJcbiAgICAgICAgb3B0aW9ucy5maWVsZHMudW5zaGlmdChwcmltYXJ5S2V5TmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc05ld1JlY29yZCA9PT0gZmFsc2UpIHtcclxuICAgICAgaWYgKHByaW1hcnlLZXlOYW1lICYmIHRoaXMuZ2V0KHByaW1hcnlLZXlOYW1lLCB7IHJhdzogdHJ1ZSB9KSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgYXR0ZW1wdGVkIHRvIHNhdmUgYW4gaW5zdGFuY2Ugd2l0aCBubyBwcmltYXJ5IGtleSwgdGhpcyBpcyBub3QgYWxsb3dlZCBzaW5jZSBpdCB3b3VsZCByZXN1bHQgaW4gYSBnbG9iYWwgdXBkYXRlJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodXBkYXRlZEF0QXR0ciAmJiAhb3B0aW9ucy5zaWxlbnQgJiYgb3B0aW9ucy5maWVsZHMuaW5jbHVkZXModXBkYXRlZEF0QXR0cikpIHtcclxuICAgICAgdGhpcy5kYXRhVmFsdWVzW3VwZGF0ZWRBdEF0dHJdID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0RGVmYXVsdFRpbWVzdGFtcCh1cGRhdGVkQXRBdHRyKSB8fCBub3c7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNOZXdSZWNvcmQgJiYgY3JlYXRlZEF0QXR0ciAmJiAhdGhpcy5kYXRhVmFsdWVzW2NyZWF0ZWRBdEF0dHJdKSB7XHJcbiAgICAgIHRoaXMuZGF0YVZhbHVlc1tjcmVhdGVkQXRBdHRyXSA9IHRoaXMuY29uc3RydWN0b3IuX2dldERlZmF1bHRUaW1lc3RhbXAoY3JlYXRlZEF0QXR0cikgfHwgbm93O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XHJcbiAgICAgIC8vIFZhbGlkYXRlXHJcbiAgICAgIGlmIChvcHRpb25zLnZhbGlkYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUob3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyBSdW4gYmVmb3JlIGhvb2tcclxuICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcclxuICAgICAgICBjb25zdCBiZWZvcmVIb29rVmFsdWVzID0gXy5waWNrKHRoaXMuZGF0YVZhbHVlcywgb3B0aW9ucy5maWVsZHMpO1xyXG4gICAgICAgIGxldCBpZ25vcmVDaGFuZ2VkID0gXy5kaWZmZXJlbmNlKHRoaXMuY2hhbmdlZCgpLCBvcHRpb25zLmZpZWxkcyk7IC8vIEluIGNhc2Ugb2YgdXBkYXRlIHdoZXJlIGl0J3Mgb25seSBzdXBwb3NlZCB0byB1cGRhdGUgdGhlIHBhc3NlZCB2YWx1ZXMgYW5kIHRoZSBob29rIHZhbHVlc1xyXG4gICAgICAgIGxldCBob29rQ2hhbmdlZDtcclxuICAgICAgICBsZXQgYWZ0ZXJIb29rVmFsdWVzO1xyXG5cclxuICAgICAgICBpZiAodXBkYXRlZEF0QXR0ciAmJiBvcHRpb25zLmZpZWxkcy5pbmNsdWRlcyh1cGRhdGVkQXRBdHRyKSkge1xyXG4gICAgICAgICAgaWdub3JlQ2hhbmdlZCA9IF8ud2l0aG91dChpZ25vcmVDaGFuZ2VkLCB1cGRhdGVkQXRBdHRyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnJ1bkhvb2tzKGBiZWZvcmUke2hvb2t9YCwgdGhpcywgb3B0aW9ucylcclxuICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdEZpZWxkcyAmJiAhdGhpcy5pc05ld1JlY29yZCkge1xyXG4gICAgICAgICAgICAgIGFmdGVySG9va1ZhbHVlcyA9IF8ucGljayh0aGlzLmRhdGFWYWx1ZXMsIF8uZGlmZmVyZW5jZSh0aGlzLmNoYW5nZWQoKSwgaWdub3JlQ2hhbmdlZCkpO1xyXG5cclxuICAgICAgICAgICAgICBob29rQ2hhbmdlZCA9IFtdO1xyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFmdGVySG9va1ZhbHVlcykpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhZnRlckhvb2tWYWx1ZXNba2V5XSAhPT0gYmVmb3JlSG9va1ZhbHVlc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhvb2tDaGFuZ2VkLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmllbGRzID0gXy51bmlxKG9wdGlvbnMuZmllbGRzLmNvbmNhdChob29rQ2hhbmdlZCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaG9va0NoYW5nZWQpIHtcclxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52YWxpZGF0ZSkge1xyXG4gICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGFnYWluXHJcblxyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5za2lwID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKHRoaXMuY29uc3RydWN0b3IucmF3QXR0cmlidXRlcyksIGhvb2tDaGFuZ2VkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKG9wdGlvbnMpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBkZWxldGUgb3B0aW9ucy5za2lwO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIGlmICghb3B0aW9ucy5maWVsZHMubGVuZ3RoKSByZXR1cm4gdGhpcztcclxuICAgICAgaWYgKCF0aGlzLmlzTmV3UmVjb3JkKSByZXR1cm4gdGhpcztcclxuICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLmluY2x1ZGUgfHwgIXRoaXMuX29wdGlvbnMuaW5jbHVkZS5sZW5ndGgpIHJldHVybiB0aGlzO1xyXG5cclxuICAgICAgLy8gTmVzdGVkIGNyZWF0aW9uIGZvciBCZWxvbmdzVG8gcmVsYXRpb25zXHJcbiAgICAgIHJldHVybiBQcm9taXNlLm1hcCh0aGlzLl9vcHRpb25zLmluY2x1ZGUuZmlsdGVyKGluY2x1ZGUgPT4gaW5jbHVkZS5hc3NvY2lhdGlvbiBpbnN0YW5jZW9mIEJlbG9uZ3NUbyksIGluY2x1ZGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5nZXQoaW5jbHVkZS5hcyk7XHJcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG5cclxuICAgICAgICBjb25zdCBpbmNsdWRlT3B0aW9ucyA9IF8oVXRpbHMuY2xvbmVEZWVwKGluY2x1ZGUpKVxyXG4gICAgICAgICAgLm9taXQoWydhc3NvY2lhdGlvbiddKVxyXG4gICAgICAgICAgLmRlZmF1bHRzKHtcclxuICAgICAgICAgICAgdHJhbnNhY3Rpb246IG9wdGlvbnMudHJhbnNhY3Rpb24sXHJcbiAgICAgICAgICAgIGxvZ2dpbmc6IG9wdGlvbnMubG9nZ2luZyxcclxuICAgICAgICAgICAgcGFyZW50UmVjb3JkOiB0aGlzXHJcbiAgICAgICAgICB9KS52YWx1ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gaW5zdGFuY2Uuc2F2ZShpbmNsdWRlT3B0aW9ucykudGhlbigoKSA9PiB0aGlzW2luY2x1ZGUuYXNzb2NpYXRpb24uYWNjZXNzb3JzLnNldF0oaW5zdGFuY2UsIHsgc2F2ZTogZmFsc2UsIGxvZ2dpbmc6IG9wdGlvbnMubG9nZ2luZyB9KSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlYWxGaWVsZHMgPSBvcHRpb25zLmZpZWxkcy5maWx0ZXIoZmllbGQgPT4gIXRoaXMuY29uc3RydWN0b3IuX3ZpcnR1YWxBdHRyaWJ1dGVzLmhhcyhmaWVsZCkpO1xyXG4gICAgICBpZiAoIXJlYWxGaWVsZHMubGVuZ3RoKSByZXR1cm4gdGhpcztcclxuICAgICAgaWYgKCF0aGlzLmNoYW5nZWQoKSAmJiAhdGhpcy5pc05ld1JlY29yZCkgcmV0dXJuIHRoaXM7XHJcblxyXG4gICAgICBjb25zdCB2ZXJzaW9uRmllbGROYW1lID0gXy5nZXQodGhpcy5jb25zdHJ1Y3Rvci5yYXdBdHRyaWJ1dGVzW3ZlcnNpb25BdHRyXSwgJ2ZpZWxkJykgfHwgdmVyc2lvbkF0dHI7XHJcbiAgICAgIGxldCB2YWx1ZXMgPSBVdGlscy5tYXBWYWx1ZUZpZWxkTmFtZXModGhpcy5kYXRhVmFsdWVzLCBvcHRpb25zLmZpZWxkcywgdGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgIGxldCBxdWVyeSA9IG51bGw7XHJcbiAgICAgIGxldCBhcmdzID0gW107XHJcbiAgICAgIGxldCB3aGVyZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzTmV3UmVjb3JkKSB7XHJcbiAgICAgICAgcXVlcnkgPSAnaW5zZXJ0JztcclxuICAgICAgICBhcmdzID0gW3RoaXMsIHRoaXMuY29uc3RydWN0b3IuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCB2YWx1ZXMsIG9wdGlvbnNdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHdoZXJlID0gdGhpcy53aGVyZSh0cnVlKTtcclxuICAgICAgICBpZiAodmVyc2lvbkF0dHIpIHtcclxuICAgICAgICAgIHZhbHVlc1t2ZXJzaW9uRmllbGROYW1lXSA9IHBhcnNlSW50KHZhbHVlc1t2ZXJzaW9uRmllbGROYW1lXSwgMTApICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcXVlcnkgPSAndXBkYXRlJztcclxuICAgICAgICBhcmdzID0gW3RoaXMsIHRoaXMuY29uc3RydWN0b3IuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCB2YWx1ZXMsIHdoZXJlLCBvcHRpb25zXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuUXVlcnlJbnRlcmZhY2VbcXVlcnldKC4uLmFyZ3MpXHJcbiAgICAgICAgLnRoZW4oKFtyZXN1bHQsIHJvd3NVcGRhdGVkXSk9PiB7XHJcbiAgICAgICAgICBpZiAodmVyc2lvbkF0dHIpIHtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIHRoYXQgYSByb3cgd2FzIHVwZGF0ZWQsIG90aGVyd2lzZSBpdCdzIGFuIG9wdGltaXN0aWMgbG9ja2luZyBlcnJvci5cclxuICAgICAgICAgICAgaWYgKHJvd3NVcGRhdGVkIDwgMSkge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuT3B0aW1pc3RpY0xvY2tFcnJvcih7XHJcbiAgICAgICAgICAgICAgICBtb2RlbE5hbWU6IHRoaXMuY29uc3RydWN0b3IubmFtZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlcyxcclxuICAgICAgICAgICAgICAgIHdoZXJlXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0LmRhdGFWYWx1ZXNbdmVyc2lvbkF0dHJdID0gdmFsdWVzW3ZlcnNpb25GaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gVHJhbnNmZXIgZGF0YWJhc2UgZ2VuZXJhdGVkIHZhbHVlcyAoZGVmYXVsdHMsIGF1dG9pbmNyZW1lbnQsIGV0YylcclxuICAgICAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXMpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGQgJiZcclxuICAgICAgICAgICAgICAgIHZhbHVlc1t0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGRdICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZCAhPT0gYXR0clxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB2YWx1ZXNbYXR0cl0gPSB2YWx1ZXNbdGhpcy5jb25zdHJ1Y3Rvci5yYXdBdHRyaWJ1dGVzW2F0dHJdLmZpZWxkXTtcclxuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVzW3RoaXMuY29uc3RydWN0b3IucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5hc3NpZ24odmFsdWVzLCByZXN1bHQuZGF0YVZhbHVlcyk7XHJcblxyXG4gICAgICAgICAgcmVzdWx0LmRhdGFWYWx1ZXMgPSBPYmplY3QuYXNzaWduKHJlc3VsdC5kYXRhVmFsdWVzLCB2YWx1ZXMpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC50YXAoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF3YXNOZXdSZWNvcmQpIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLmluY2x1ZGUgfHwgIXRoaXMuX29wdGlvbnMuaW5jbHVkZS5sZW5ndGgpIHJldHVybiB0aGlzO1xyXG5cclxuICAgICAgICAgIC8vIE5lc3RlZCBjcmVhdGlvbiBmb3IgSGFzT25lL0hhc01hbnkvQmVsb25nc1RvTWFueSByZWxhdGlvbnNcclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLm1hcCh0aGlzLl9vcHRpb25zLmluY2x1ZGUuZmlsdGVyKGluY2x1ZGUgPT4gIShpbmNsdWRlLmFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvIHx8XHJcbiAgICAgICAgICAgIGluY2x1ZGUucGFyZW50ICYmIGluY2x1ZGUucGFyZW50LmFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvTWFueSkpLCBpbmNsdWRlID0+IHtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlcyA9IHRoaXMuZ2V0KGluY2x1ZGUuYXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZXMpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGluc3RhbmNlcykpIGluc3RhbmNlcyA9IFtpbnN0YW5jZXNdO1xyXG4gICAgICAgICAgICBpZiAoIWluc3RhbmNlcy5sZW5ndGgpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVPcHRpb25zID0gXyhVdGlscy5jbG9uZURlZXAoaW5jbHVkZSkpXHJcbiAgICAgICAgICAgICAgLm9taXQoWydhc3NvY2lhdGlvbiddKVxyXG4gICAgICAgICAgICAgIC5kZWZhdWx0cyh7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbjogb3B0aW9ucy50cmFuc2FjdGlvbixcclxuICAgICAgICAgICAgICAgIGxvZ2dpbmc6IG9wdGlvbnMubG9nZ2luZyxcclxuICAgICAgICAgICAgICAgIHBhcmVudFJlY29yZDogdGhpc1xyXG4gICAgICAgICAgICAgIH0pLnZhbHVlKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJbnN0YW5jZXMgd2lsbCBiZSB1cGRhdGVkIGluIHBsYWNlIHNvIHdlIGNhbiBzYWZlbHkgdHJlYXQgSGFzT25lIGxpa2UgYSBIYXNNYW55XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLm1hcChpbnN0YW5jZXMsIGluc3RhbmNlID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaW5jbHVkZS5hc3NvY2lhdGlvbiBpbnN0YW5jZW9mIEJlbG9uZ3NUb01hbnkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5zYXZlKGluY2x1ZGVPcHRpb25zKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0ge307XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlc1tpbmNsdWRlLmFzc29jaWF0aW9uLmZvcmVpZ25LZXldID0gdGhpcy5nZXQodGhpcy5jb25zdHJ1Y3Rvci5wcmltYXJ5S2V5QXR0cmlidXRlLCB7IHJhdzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgdmFsdWVzW2luY2x1ZGUuYXNzb2NpYXRpb24ub3RoZXJLZXldID0gaW5zdGFuY2UuZ2V0KGluc3RhbmNlLmNvbnN0cnVjdG9yLnByaW1hcnlLZXlBdHRyaWJ1dGUsIHsgcmF3OiB0cnVlIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gSW5jbHVkZSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgYXNzb2NpYXRpb25cclxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih2YWx1ZXMsIGluY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaC5zY29wZSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZVtpbmNsdWRlLmFzc29jaWF0aW9uLnRocm91Z2gubW9kZWwubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgT2JqZWN0LmtleXMoaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uX2F1dG9HZW5lcmF0ZWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0ciA9PT0gaW5jbHVkZS5hc3NvY2lhdGlvbi5mb3JlaWduS2V5IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgPT09IGluY2x1ZGUuYXNzb2NpYXRpb24ub3RoZXJLZXkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluc3RhbmNlW2luY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbC5uYW1lXVthdHRyXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2F0dHJdID0gaW5zdGFuY2VbaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLm5hbWVdW2F0dHJdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaE1vZGVsLmNyZWF0ZSh2YWx1ZXMsIGluY2x1ZGVPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpbnN0YW5jZS5zZXQoaW5jbHVkZS5hc3NvY2lhdGlvbi5mb3JlaWduS2V5LCB0aGlzLmdldChpbmNsdWRlLmFzc29jaWF0aW9uLnNvdXJjZUtleSB8fCB0aGlzLmNvbnN0cnVjdG9yLnByaW1hcnlLZXlBdHRyaWJ1dGUsIHsgcmF3OiB0cnVlIH0pLCB7IHJhdzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGluc3RhbmNlLCBpbmNsdWRlLmFzc29jaWF0aW9uLnNjb3BlKTtcclxuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2Uuc2F2ZShpbmNsdWRlT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAudGFwKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAvLyBSdW4gYWZ0ZXIgaG9va1xyXG4gICAgICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IucnVuSG9va3MoYGFmdGVyJHtob29rfWAsIHJlc3VsdCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBvcHRpb25zLmZpZWxkcykge1xyXG4gICAgICAgICAgICByZXN1bHQuX3ByZXZpb3VzRGF0YVZhbHVlc1tmaWVsZF0gPSByZXN1bHQuZGF0YVZhbHVlc1tmaWVsZF07XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZChmaWVsZCwgZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pc05ld1JlY29yZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVmcmVzaCB0aGUgY3VycmVudCBpbnN0YW5jZSBpbi1wbGFjZSwgaS5lLiB1cGRhdGUgdGhlIG9iamVjdCB3aXRoIGN1cnJlbnQgZGF0YSBmcm9tIHRoZSBEQiBhbmQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdC5cclxuICAgKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGRvaW5nIGEgYGZpbmQoSW5zdGFuY2UuaWQpYCwgYmVjYXVzZSB0aGF0IHdvdWxkIGNyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGluc3RhbmNlLiBXaXRoIHRoaXMgbWV0aG9kLFxyXG4gICAqIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBJbnN0YW5jZSBhcmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgZGF0YSBhbmQgbm8gbmV3IG9iamVjdHMgYXJlIGNyZWF0ZWQuXHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRBbGx9XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIG9uIHRvIGBNb2RlbC5maW5kYFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWw+fVxyXG4gICAqL1xyXG4gIHJlbG9hZChvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gVXRpbHMuZGVmYXVsdHMoe30sIG9wdGlvbnMsIHtcclxuICAgICAgd2hlcmU6IHRoaXMud2hlcmUoKSxcclxuICAgICAgaW5jbHVkZTogdGhpcy5fb3B0aW9ucy5pbmNsdWRlIHx8IG51bGxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmZpbmRPbmUob3B0aW9ucylcclxuICAgICAgLnRhcChyZWxvYWQgPT4ge1xyXG4gICAgICAgIGlmICghcmVsb2FkKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLkluc3RhbmNlRXJyb3IoXHJcbiAgICAgICAgICAgICdJbnN0YW5jZSBjb3VsZCBub3QgYmUgcmVsb2FkZWQgYmVjYXVzZSBpdCBkb2VzIG5vdCBleGlzdCBhbnltb3JlIChmaW5kIGNhbGwgcmV0dXJuZWQgbnVsbCknXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLnRoZW4ocmVsb2FkID0+IHtcclxuICAgICAgLy8gdXBkYXRlIHRoZSBpbnRlcm5hbCBvcHRpb25zIG9mIHRoZSBpbnN0YW5jZVxyXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSByZWxvYWQuX29wdGlvbnM7XHJcbiAgICAgICAgLy8gcmUtc2V0IGluc3RhbmNlIHZhbHVlc1xyXG4gICAgICAgIHRoaXMuc2V0KHJlbG9hZC5kYXRhVmFsdWVzLCB7XHJcbiAgICAgICAgICByYXc6IHRydWUsXHJcbiAgICAgICAgICByZXNldDogdHJ1ZSAmJiAhb3B0aW9ucy5hdHRyaWJ1dGVzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBWYWxpZGF0ZSB0aGUgYXR0cmlidXRlcyBvZiB0aGlzIGluc3RhbmNlIGFjY29yZGluZyB0byB2YWxpZGF0aW9uIHJ1bGVzIHNldCBpbiB0aGUgbW9kZWwgZGVmaW5pdGlvbi5cclxuICAqXHJcbiAgKiBUaGUgcHJvbWlzZSBmdWxmaWxscyBpZiBhbmQgb25seSBpZiB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBpdCByZWplY3RzIGFuIEVycm9yIGluc3RhbmNlIGNvbnRhaW5pbmcgeyBmaWVsZCBuYW1lIDogW2Vycm9yIG1zZ3NdIH0gZW50cmllcy5cclxuICAqXHJcbiAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSB2YWxpZGF0b3JcclxuICAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLnNraXBdIEFuIGFycmF5IG9mIHN0cmluZ3MuIEFsbCBwcm9wZXJ0aWVzIHRoYXQgYXJlIGluIHRoaXMgYXJyYXkgd2lsbCBub3QgYmUgdmFsaWRhdGVkXHJcbiAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5maWVsZHNdIEFuIGFycmF5IG9mIHN0cmluZ3MuIE9ubHkgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgaW4gdGhpcyBhcnJheSB3aWxsIGJlIHZhbGlkYXRlZFxyXG4gICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5ob29rcz10cnVlXSBSdW4gYmVmb3JlIGFuZCBhZnRlciB2YWxpZGF0ZSBob29rc1xyXG4gICpcclxuICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICovXHJcbiAgdmFsaWRhdGUob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG5ldyBJbnN0YW5jZVZhbGlkYXRvcih0aGlzLCBvcHRpb25zKS52YWxpZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIGBzZXRgIGFuZCB0aGVuIGNhbGxpbmcgYHNhdmVgIGJ1dCBpdCBvbmx5IHNhdmVzIHRoZVxyXG4gICAqIGV4YWN0IHZhbHVlcyBwYXNzZWQgdG8gaXQsIG1ha2luZyBpdCBtb3JlIGF0b21pYyBhbmQgc2FmZXIuXHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsI3NldH1cclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsI3NhdmV9XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIFNlZSBgc2V0YFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFNlZSBgc2F2ZWBcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsPn1cclxuICAgKi9cclxuICB1cGRhdGUodmFsdWVzLCBvcHRpb25zKSB7XHJcbiAgICAvLyBDbG9uZSB2YWx1ZXMgc28gaXQgZG9lc24ndCBnZXQgbW9kaWZpZWQgZm9yIGNhbGxlciBzY29wZSBhbmQgaWdub3JlIHVuZGVmaW5lZCB2YWx1ZXNcclxuICAgIHZhbHVlcyA9IF8ub21pdEJ5KHZhbHVlcywgdmFsdWUgPT4gdmFsdWUgPT09IHVuZGVmaW5lZCk7XHJcblxyXG4gICAgY29uc3QgY2hhbmdlZEJlZm9yZSA9IHRoaXMuY2hhbmdlZCgpIHx8IFtdO1xyXG5cclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIG9wdGlvbnMgPSB7IGZpZWxkczogb3B0aW9ucyB9O1xyXG5cclxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XHJcbiAgICBjb25zdCBzZXRPcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xyXG4gICAgc2V0T3B0aW9ucy5hdHRyaWJ1dGVzID0gb3B0aW9ucy5maWVsZHM7XHJcbiAgICB0aGlzLnNldCh2YWx1ZXMsIHNldE9wdGlvbnMpO1xyXG5cclxuICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZmllbGRzIHdlcmUgYWN0dWFsbHkgYWZmZWN0ZWQgYnkgdGhlIHNldHRlci5cclxuICAgIGNvbnN0IHNpZGVFZmZlY3RzID0gXy53aXRob3V0KHRoaXMuY2hhbmdlZCgpLCAuLi5jaGFuZ2VkQmVmb3JlKTtcclxuICAgIGNvbnN0IGZpZWxkcyA9IF8udW5pb24oT2JqZWN0LmtleXModmFsdWVzKSwgc2lkZUVmZmVjdHMpO1xyXG5cclxuICAgIGlmICghb3B0aW9ucy5maWVsZHMpIHtcclxuICAgICAgb3B0aW9ucy5maWVsZHMgPSBfLmludGVyc2VjdGlvbihmaWVsZHMsIHRoaXMuY2hhbmdlZCgpKTtcclxuICAgICAgb3B0aW9ucy5kZWZhdWx0RmllbGRzID0gb3B0aW9ucy5maWVsZHM7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2F2ZShvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc3Ryb3kgdGhlIHJvdyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgaW5zdGFuY2UuIERlcGVuZGluZyBvbiB5b3VyIHNldHRpbmcgZm9yIHBhcmFub2lkLCB0aGUgcm93IHdpbGwgZWl0aGVyIGJlIGNvbXBsZXRlbHkgZGVsZXRlZCwgb3IgaGF2ZSBpdHMgZGVsZXRlZEF0IHRpbWVzdGFtcCBzZXQgdG8gdGhlIGN1cnJlbnQgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgIFtvcHRpb25zPXt9XSBkZXN0cm95IG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICBbb3B0aW9ucy5mb3JjZT1mYWxzZV0gSWYgc2V0IHRvIHRydWUsIHBhcmFub2lkIG1vZGVscyB3aWxsIGFjdHVhbGx5IGJlIGRlbGV0ZWRcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgICBbb3B0aW9ucy5sb2dnaW5nPWZhbHNlXSBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCB3aGlsZSBydW5uaW5nIHRoZSBxdWVyeSB0byBsb2cgdGhlIHNxbC5cclxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgZGVzdHJveShvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgIGhvb2tzOiB0cnVlLFxyXG4gICAgICBmb3JjZTogZmFsc2VcclxuICAgIH0sIG9wdGlvbnMpO1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XHJcbiAgICAgIC8vIFJ1biBiZWZvcmUgaG9va1xyXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnJ1bkhvb2tzKCdiZWZvcmVEZXN0cm95JywgdGhpcywgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zdCB3aGVyZSA9IHRoaXMud2hlcmUodHJ1ZSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXQgJiYgb3B0aW9ucy5mb3JjZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXQ7XHJcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gdGhpcy5jb25zdHJ1Y3Rvci5yYXdBdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhdHRyaWJ1dGUsICdkZWZhdWx0VmFsdWUnKVxyXG4gICAgICAgICAgPyBhdHRyaWJ1dGUuZGVmYXVsdFZhbHVlXHJcbiAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5nZXREYXRhVmFsdWUoYXR0cmlidXRlTmFtZSk7XHJcbiAgICAgICAgY29uc3QgdW5kZWZpbmVkT3JOdWxsID0gY3VycmVudFZhbHVlID09IG51bGwgJiYgZGVmYXVsdFZhbHVlID09IG51bGw7XHJcbiAgICAgICAgaWYgKHVuZGVmaW5lZE9yTnVsbCB8fCBfLmlzRXF1YWwoY3VycmVudFZhbHVlLCBkZWZhdWx0VmFsdWUpKSB7XHJcbiAgICAgICAgICAvLyBvbmx5IHVwZGF0ZSB0aW1lc3RhbXAgaWYgaXQgd2Fzbid0IGFscmVhZHkgc2V0XHJcbiAgICAgICAgICB0aGlzLnNldERhdGFWYWx1ZShhdHRyaWJ1dGVOYW1lLCBuZXcgRGF0ZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNhdmUoXy5kZWZhdWx0cyh7IGhvb2tzOiBmYWxzZSB9LCBvcHRpb25zKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuUXVlcnlJbnRlcmZhY2UuZGVsZXRlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCB3aGVyZSwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFF1ZXJ5VHlwZXMuREVMRVRFLCBsaW1pdDogbnVsbCB9LCBvcHRpb25zKSk7XHJcbiAgICB9KS50YXAoKCkgPT4ge1xyXG4gICAgICAvLyBSdW4gYWZ0ZXIgaG9va1xyXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnJ1bkhvb2tzKCdhZnRlckRlc3Ryb3knLCB0aGlzLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGRldGVybWluZSBpZiBhIGluc3RhbmNlIGlzIFwic29mdCBkZWxldGVkXCIuICBUaGlzIGlzXHJcbiAgICogcGFydGljdWxhcmx5IHVzZWZ1bCBpZiB0aGUgaW1wbGVtZW50ZXIgcmVuYW1lZCB0aGUgYGRlbGV0ZWRBdGAgYXR0cmlidXRlXHJcbiAgICogdG8gc29tZXRoaW5nIGRpZmZlcmVudC4gIFRoaXMgbWV0aG9kIHJlcXVpcmVzIGBwYXJhbm9pZGAgdG8gYmUgZW5hYmxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGlzU29mdERlbGV0ZWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kZWwgaXMgbm90IHBhcmFub2lkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGVsZXRlZEF0QXR0cmlidXRlID0gdGhpcy5jb25zdHJ1Y3Rvci5yYXdBdHRyaWJ1dGVzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0XTtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZWxldGVkQXRBdHRyaWJ1dGUsICdkZWZhdWx0VmFsdWUnKSA/IGRlbGV0ZWRBdEF0dHJpYnV0ZS5kZWZhdWx0VmFsdWUgOiBudWxsO1xyXG4gICAgY29uc3QgZGVsZXRlZEF0ID0gdGhpcy5nZXQodGhpcy5jb25zdHJ1Y3Rvci5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXQpIHx8IG51bGw7XHJcbiAgICBjb25zdCBpc1NldCA9IGRlbGV0ZWRBdCAhPT0gZGVmYXVsdFZhbHVlO1xyXG5cclxuICAgIHJldHVybiBpc1NldDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3RvcmUgdGhlIHJvdyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgaW5zdGFuY2UuIE9ubHkgYXZhaWxhYmxlIGZvciBwYXJhbm9pZCBtb2RlbHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICBbb3B0aW9ucz17fV0gcmVzdG9yZSBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gICAgW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXHJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gW29wdGlvbnMudHJhbnNhY3Rpb25dIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgcmVzdG9yZShvcHRpb25zKSB7XHJcbiAgICBpZiAoIXRoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0KSB0aHJvdyBuZXcgRXJyb3IoJ01vZGVsIGlzIG5vdCBwYXJhbm9pZCcpO1xyXG5cclxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcclxuICAgICAgaG9va3M6IHRydWUsXHJcbiAgICAgIGZvcmNlOiBmYWxzZVxyXG4gICAgfSwgb3B0aW9ucyk7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UudHJ5KCgpID0+IHtcclxuICAgICAgLy8gUnVuIGJlZm9yZSBob29rXHJcbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IucnVuSG9va3MoJ2JlZm9yZVJlc3RvcmUnLCB0aGlzLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRlbGV0ZWRBdENvbCA9IHRoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0O1xyXG4gICAgICBjb25zdCBkZWxldGVkQXRBdHRyaWJ1dGUgPSB0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXNbZGVsZXRlZEF0Q29sXTtcclxuICAgICAgY29uc3QgZGVsZXRlZEF0RGVmYXVsdFZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlbGV0ZWRBdEF0dHJpYnV0ZSwgJ2RlZmF1bHRWYWx1ZScpID8gZGVsZXRlZEF0QXR0cmlidXRlLmRlZmF1bHRWYWx1ZSA6IG51bGw7XHJcblxyXG4gICAgICB0aGlzLnNldERhdGFWYWx1ZShkZWxldGVkQXRDb2wsIGRlbGV0ZWRBdERlZmF1bHRWYWx1ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLnNhdmUoT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyBob29rczogZmFsc2UsIG9taXROdWxsOiBmYWxzZSB9KSk7XHJcbiAgICB9KS50YXAoKCkgPT4ge1xyXG4gICAgICAvLyBSdW4gYWZ0ZXIgaG9va1xyXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnJ1bkhvb2tzKCdhZnRlclJlc3RvcmUnLCB0aGlzLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmNyZW1lbnQgdGhlIHZhbHVlIG9mIG9uZSBvciBtb3JlIGNvbHVtbnMuIFRoaXMgaXMgZG9uZSBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIG1lYW5zIGl0IGRvZXMgbm90IHVzZSB0aGUgdmFsdWVzIGN1cnJlbnRseSBzdG9yZWQgb24gdGhlIEluc3RhbmNlLiBUaGUgaW5jcmVtZW50IGlzIGRvbmUgdXNpbmcgYVxyXG4gICAqIGBgYHNxbFxyXG4gICAqIFNFVCBjb2x1bW4gPSBjb2x1bW4gKyBYXHJcbiAgICogYGBgXHJcbiAgICogcXVlcnkuIFRoZSB1cGRhdGVkIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgYnkgZGVmYXVsdCBpbiBQb3N0Z3Jlcy4gSG93ZXZlciwgaW4gb3RoZXIgZGlhbGVjdHMsIHlvdSB3aWxsIG5lZWQgdG8gZG8gYSByZWxvYWQgdG8gZ2V0IHRoZSBuZXcgdmFsdWVzLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBpbnN0YW5jZS5pbmNyZW1lbnQoJ251bWJlcicpIC8vIGluY3JlbWVudCBudW1iZXIgYnkgMVxyXG4gICAqXHJcbiAgICogaW5zdGFuY2UuaW5jcmVtZW50KFsnbnVtYmVyJywgJ2NvdW50J10sIHsgYnk6IDIgfSkgLy8gaW5jcmVtZW50IG51bWJlciBhbmQgY291bnQgYnkgMlxyXG4gICAqXHJcbiAgICogLy8gaW5jcmVtZW50IGFuc3dlciBieSA0MiwgYW5kIHRyaWVzIGJ5IDEuXHJcbiAgICogLy8gYGJ5YCBpcyBpZ25vcmVkLCBzaW5jZSBlYWNoIGNvbHVtbiBoYXMgaXRzIG93biB2YWx1ZVxyXG4gICAqIGluc3RhbmNlLmluY3JlbWVudCh7IGFuc3dlcjogNDIsIHRyaWVzOiAxfSwgeyBieTogMiB9KVxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbCNyZWxvYWR9XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ3xBcnJheXxPYmplY3R9IGZpZWxkcyBJZiBhIHN0cmluZyBpcyBwcm92aWRlZCwgdGhhdCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgdGhlIHZhbHVlIG9mIGBieWAgZ2l2ZW4gaW4gb3B0aW9ucy4gSWYgYW4gYXJyYXkgaXMgcHJvdmlkZWQsIHRoZSBzYW1lIGlzIHRydWUgZm9yIGVhY2ggY29sdW1uLiBJZiBhbmQgb2JqZWN0IGlzIHByb3ZpZGVkLCBlYWNoIGNvbHVtbiBpcyBpbmNyZW1lbnRlZCBieSB0aGUgdmFsdWUgZ2l2ZW4uXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJ5PTFdIFRoZSBudW1iZXIgdG8gaW5jcmVtZW50IGJ5XHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5zaWxlbnQ9ZmFsc2VdIElmIHRydWUsIHRoZSB1cGRhdGVkQXQgdGltZXN0YW1wIHdpbGwgbm90IGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXHJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gW29wdGlvbnMudHJhbnNhY3Rpb25dIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zZWFyY2hQYXRoPURFRkFVTFRdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBzY2hlbWEgc2VhcmNoX3BhdGggKFBvc3RncmVzIG9ubHkpXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yZXR1cm5pbmc9dHJ1ZV0gQXBwZW5kIFJFVFVSTklORyAqIHRvIGdldCBiYWNrIGF1dG8gZ2VuZXJhdGVkIHZhbHVlcyAoUG9zdGdyZXMgb25seSlcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsPn1cclxuICAgKiBAc2luY2UgNC4wLjBcclxuICAgKi9cclxuICBpbmNyZW1lbnQoZmllbGRzLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy53aGVyZSgpO1xyXG5cclxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XHJcbiAgICBvcHRpb25zLndoZXJlID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy53aGVyZSwgaWRlbnRpZmllcik7XHJcbiAgICBvcHRpb25zLmluc3RhbmNlID0gdGhpcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5pbmNyZW1lbnQoZmllbGRzLCBvcHRpb25zKS5yZXR1cm4odGhpcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWNyZW1lbnQgdGhlIHZhbHVlIG9mIG9uZSBvciBtb3JlIGNvbHVtbnMuIFRoaXMgaXMgZG9uZSBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIG1lYW5zIGl0IGRvZXMgbm90IHVzZSB0aGUgdmFsdWVzIGN1cnJlbnRseSBzdG9yZWQgb24gdGhlIEluc3RhbmNlLiBUaGUgZGVjcmVtZW50IGlzIGRvbmUgdXNpbmcgYVxyXG4gICAqIGBgYHNxbFxyXG4gICAqIFNFVCBjb2x1bW4gPSBjb2x1bW4gLSBYXHJcbiAgICogYGBgXHJcbiAgICogcXVlcnkuIFRoZSB1cGRhdGVkIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgYnkgZGVmYXVsdCBpbiBQb3N0Z3Jlcy4gSG93ZXZlciwgaW4gb3RoZXIgZGlhbGVjdHMsIHlvdSB3aWxsIG5lZWQgdG8gZG8gYSByZWxvYWQgdG8gZ2V0IHRoZSBuZXcgdmFsdWVzLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBpbnN0YW5jZS5kZWNyZW1lbnQoJ251bWJlcicpIC8vIGRlY3JlbWVudCBudW1iZXIgYnkgMVxyXG4gICAqXHJcbiAgICogaW5zdGFuY2UuZGVjcmVtZW50KFsnbnVtYmVyJywgJ2NvdW50J10sIHsgYnk6IDIgfSkgLy8gZGVjcmVtZW50IG51bWJlciBhbmQgY291bnQgYnkgMlxyXG4gICAqXHJcbiAgICogLy8gZGVjcmVtZW50IGFuc3dlciBieSA0MiwgYW5kIHRyaWVzIGJ5IDEuXHJcbiAgICogLy8gYGJ5YCBpcyBpZ25vcmVkLCBzaW5jZSBlYWNoIGNvbHVtbiBoYXMgaXRzIG93biB2YWx1ZVxyXG4gICAqIGluc3RhbmNlLmRlY3JlbWVudCh7IGFuc3dlcjogNDIsIHRyaWVzOiAxfSwgeyBieTogMiB9KVxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbCNyZWxvYWR9XHJcbiAgICogQHBhcmFtIHtzdHJpbmd8QXJyYXl8T2JqZWN0fSBmaWVsZHMgSWYgYSBzdHJpbmcgaXMgcHJvdmlkZWQsIHRoYXQgY29sdW1uIGlzIGRlY3JlbWVudGVkIGJ5IHRoZSB2YWx1ZSBvZiBgYnlgIGdpdmVuIGluIG9wdGlvbnMuIElmIGFuIGFycmF5IGlzIHByb3ZpZGVkLCB0aGUgc2FtZSBpcyB0cnVlIGZvciBlYWNoIGNvbHVtbi4gSWYgYW5kIG9iamVjdCBpcyBwcm92aWRlZCwgZWFjaCBjb2x1bW4gaXMgZGVjcmVtZW50ZWQgYnkgdGhlIHZhbHVlIGdpdmVuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgW29wdGlvbnNdIGRlY3JlbWVudCBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9ICAgICAgW29wdGlvbnMuYnk9MV0gVGhlIG51bWJlciB0byBkZWNyZW1lbnQgYnlcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICBbb3B0aW9ucy5zaWxlbnQ9ZmFsc2VdIElmIHRydWUsIHRoZSB1cGRhdGVkQXQgdGltZXN0YW1wIHdpbGwgbm90IGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gICAgW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXHJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gW29wdGlvbnMudHJhbnNhY3Rpb25dIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgIFtvcHRpb25zLnNlYXJjaFBhdGg9REVGQVVMVF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHNjaGVtYSBzZWFyY2hfcGF0aCAoUG9zdGdyZXMgb25seSlcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICBbb3B0aW9ucy5yZXR1cm5pbmc9dHJ1ZV0gQXBwZW5kIFJFVFVSTklORyAqIHRvIGdldCBiYWNrIGF1dG8gZ2VuZXJhdGVkIHZhbHVlcyAoUG9zdGdyZXMgb25seSlcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIGRlY3JlbWVudChmaWVsZHMsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBfLmRlZmF1bHRzKHsgaW5jcmVtZW50OiBmYWxzZSB9LCBvcHRpb25zLCB7XHJcbiAgICAgIGJ5OiAxXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5pbmNyZW1lbnQoZmllbGRzLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIHdoZXRoZXIgdGhpcyBhbmQgYG90aGVyYCBJbnN0YW5jZSByZWZlciB0byB0aGUgc2FtZSByb3dcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW9kZWx9IG90aGVyIE90aGVyIGluc3RhbmNlIHRvIGNvbXBhcmUgYWdhaW5zdFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZXF1YWxzKG90aGVyKSB7XHJcbiAgICBpZiAoIW90aGVyIHx8ICFvdGhlci5jb25zdHJ1Y3Rvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IucHJpbWFyeUtleUF0dHJpYnV0ZXMuZXZlcnkoYXR0cmlidXRlID0+IHRoaXMuZ2V0KGF0dHJpYnV0ZSwgeyByYXc6IHRydWUgfSkgPT09IG90aGVyLmdldChhdHRyaWJ1dGUsIHsgcmF3OiB0cnVlIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoaXMgaXMgZXF1YWwgdG8gb25lIG9mIGBvdGhlcnNgIGJ5IGNhbGxpbmcgZXF1YWxzXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5PE1vZGVsPn0gb3RoZXJzIEFuIGFycmF5IG9mIGluc3RhbmNlcyB0byBjaGVjayBhZ2FpbnN0XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBlcXVhbHNPbmVPZihvdGhlcnMpIHtcclxuICAgIHJldHVybiBvdGhlcnMuc29tZShvdGhlciA9PiB0aGlzLmVxdWFscyhvdGhlcikpO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsaWRhdG9ycyhhdHRyaWJ1dGUsIHZhbGlkYXRvcnMpIHtcclxuICAgIHRoaXMudmFsaWRhdG9yc1thdHRyaWJ1dGVdID0gdmFsaWRhdG9ycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnQgdGhlIGluc3RhbmNlIHRvIGEgSlNPTiByZXByZXNlbnRhdGlvbi5cclxuICAgKiBQcm94aWVzIHRvIGNhbGxpbmcgYGdldGAgd2l0aCBubyBrZXlzLlxyXG4gICAqIFRoaXMgbWVhbnMgZ2V0IGFsbCB2YWx1ZXMgZ290dGVuIGZyb20gdGhlIERCLCBhbmQgYXBwbHkgYWxsIGN1c3RvbSBnZXR0ZXJzLlxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbCNnZXR9XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIHRvSlNPTigpIHtcclxuICAgIHJldHVybiBfLmNsb25lRGVlcChcclxuICAgICAgdGhpcy5nZXQoe1xyXG4gICAgICAgIHBsYWluOiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIDE6bSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoaXMgKHRoZSBzb3VyY2UpIGFuZCB0aGUgcHJvdmlkZWQgdGFyZ2V0LlxyXG4gICAqIFRoZSBmb3JlaWduIGtleSBpcyBhZGRlZCBvbiB0aGUgdGFyZ2V0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb2RlbH0gICAgICAgICAgICAgICB0YXJnZXQgVGFyZ2V0IG1vZGVsXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICBbb3B0aW9uc10gaGFzTWFueSBhc3NvY2lhdGlvbiBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICBbb3B0aW9ucy5ob29rcz1mYWxzZV0gU2V0IHRvIHRydWUgdG8gcnVuIGJlZm9yZS0vYWZ0ZXJEZXN0cm95IGhvb2tzIHdoZW4gYW4gYXNzb2NpYXRlZCBtb2RlbCBpcyBkZWxldGVkIGJlY2F1c2Ugb2YgYSBjYXNjYWRlLiBGb3IgZXhhbXBsZSBpZiBgVXNlci5oYXNPbmUoUHJvZmlsZSwge29uRGVsZXRlOiAnY2FzY2FkZScsIGhvb2tzOnRydWV9KWAsIHRoZSBiZWZvcmUtL2FmdGVyRGVzdHJveSBob29rcyBmb3IgcHJvZmlsZSB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgdXNlciBpcyBkZWxldGVkLiBPdGhlcndpc2UgdGhlIHByb2ZpbGUgd2lsbCBiZSBkZWxldGVkIHdpdGhvdXQgaW52b2tpbmcgYW55IGhvb2tzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSAgICAgICBbb3B0aW9ucy5hc10gVGhlIGFsaWFzIG9mIHRoaXMgbW9kZWwuIElmIHlvdSBwcm92aWRlIGEgc3RyaW5nLCBpdCBzaG91bGQgYmUgcGx1cmFsLCBhbmQgd2lsbCBiZSBzaW5ndWxhcml6ZWQgdXNpbmcgbm9kZS5pbmZsZWN0aW9uLiBJZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBzaW5ndWxhciB2ZXJzaW9uIHlvdXJzZWxmLCBwcm92aWRlIGFuIG9iamVjdCB3aXRoIGBwbHVyYWxgIGFuZCBgc2luZ3VsYXJgIGtleXMuIFNlZSBhbHNvIHRoZSBgbmFtZWAgb3B0aW9uIHBhc3NlZCB0byBgc2VxdWVsaXplLmRlZmluZWAuIElmIHlvdSBjcmVhdGUgbXVsdGlwbGUgYXNzb2NpYXRpb25zIGJldHdlZW4gdGhlIHNhbWUgdGFibGVzLCB5b3Ugc2hvdWxkIHByb3ZpZGUgYW4gYWxpYXMgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0uIElmIHlvdSBwcm92aWRlIGFuIGFsaWFzIHdoZW4gY3JlYXRpbmcgdGhlIGFzc29jaWF0aW9uLCB5b3Ugc2hvdWxkIHByb3ZpZGUgdGhlIHNhbWUgYWxpYXMgd2hlbiBlYWdlciBsb2FkaW5nIGFuZCB3aGVuIGdldHRpbmcgYXNzb2NpYXRlZCBtb2RlbHMuIERlZmF1bHRzIHRvIHRoZSBwbHVyYWxpemVkIG5hbWUgb2YgdGFyZ2V0XHJcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSAgICAgICBbb3B0aW9ucy5mb3JlaWduS2V5XSBUaGUgbmFtZSBvZiB0aGUgZm9yZWlnbiBrZXkgaW4gdGhlIHRhcmdldCB0YWJsZSBvciBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmb3JlaWduIGNvbHVtbiAoc2VlIGBTZXF1ZWxpemUuZGVmaW5lYCBmb3Igc3ludGF4KS4gV2hlbiB1c2luZyBhbiBvYmplY3QsIHlvdSBjYW4gYWRkIGEgYG5hbWVgIHByb3BlcnR5IHRvIHNldCB0aGUgbmFtZSBvZiB0aGUgY29sdW1uLiBEZWZhdWx0cyB0byB0aGUgbmFtZSBvZiBzb3VyY2UgKyBwcmltYXJ5IGtleSBvZiBzb3VyY2VcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgIFtvcHRpb25zLnNvdXJjZUtleV0gVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHVzZSBhcyB0aGUga2V5IGZvciB0aGUgYXNzb2NpYXRpb24gaW4gdGhlIHNvdXJjZSB0YWJsZS4gRGVmYXVsdHMgdG8gdGhlIHByaW1hcnkga2V5IG9mIHRoZSBzb3VyY2UgdGFibGVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgIFtvcHRpb25zLnNjb3BlXSBBIGtleS92YWx1ZSBzZXQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGFzc29jaWF0aW9uIGNyZWF0ZSBhbmQgZmluZCBkZWZhdWx0cyBvbiB0aGUgdGFyZ2V0LiAoc3FsaXRlIG5vdCBzdXBwb3J0ZWQgZm9yIE46TSlcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgIFtvcHRpb25zLm9uRGVsZXRlPSdTRVQmbmJzcDtOVUxMfENBU0NBREUnXSBTRVQgTlVMTCBpZiBmb3JlaWduS2V5IGFsbG93cyBudWxscywgQ0FTQ0FERSBpZiBvdGhlcndpc2VcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgIFtvcHRpb25zLm9uVXBkYXRlPSdDQVNDQURFJ10gU2V0IGBPTiBVUERBVEVgXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICBbb3B0aW9ucy5jb25zdHJhaW50cz10cnVlXSBTaG91bGQgb24gdXBkYXRlIGFuZCBvbiBkZWxldGUgY29uc3RyYWludHMgYmUgZW5hYmxlZCBvbiB0aGUgZm9yZWlnbiBrZXkuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7SGFzTWFueX1cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogVXNlci5oYXNNYW55KFByb2ZpbGUpIC8vIFRoaXMgd2lsbCBhZGQgdXNlcklkIHRvIHRoZSBwcm9maWxlIHRhYmxlXHJcbiAgICovXHJcbiAgc3RhdGljIGhhc01hbnkodGFyZ2V0LCBvcHRpb25zKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhbiBOOk0gYXNzb2NpYXRpb24gd2l0aCBhIGpvaW4gdGFibGUuIERlZmluaW5nIGB0aHJvdWdoYCBpcyByZXF1aXJlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW9kZWx9ICAgICAgICAgICAgICAgdGFyZ2V0IFRhcmdldCBtb2RlbFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgb3B0aW9ucyBiZWxvbmdzVG9NYW55IGFzc29jaWF0aW9uIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgIFtvcHRpb25zLmhvb2tzPWZhbHNlXSBTZXQgdG8gdHJ1ZSB0byBydW4gYmVmb3JlLS9hZnRlckRlc3Ryb3kgaG9va3Mgd2hlbiBhbiBhc3NvY2lhdGVkIG1vZGVsIGlzIGRlbGV0ZWQgYmVjYXVzZSBvZiBhIGNhc2NhZGUuIEZvciBleGFtcGxlIGlmIGBVc2VyLmhhc09uZShQcm9maWxlLCB7b25EZWxldGU6ICdjYXNjYWRlJywgaG9va3M6dHJ1ZX0pYCwgdGhlIGJlZm9yZS0vYWZ0ZXJEZXN0cm95IGhvb2tzIGZvciBwcm9maWxlIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSB1c2VyIGlzIGRlbGV0ZWQuIE90aGVyd2lzZSB0aGUgcHJvZmlsZSB3aWxsIGJlIGRlbGV0ZWQgd2l0aG91dCBpbnZva2luZyBhbnkgaG9va3NcclxuICAgKiBAcGFyYW0ge01vZGVsfHN0cmluZ3xPYmplY3R9IG9wdGlvbnMudGhyb3VnaCBUaGUgbmFtZSBvZiB0aGUgdGFibGUgdGhhdCBpcyB1c2VkIHRvIGpvaW4gc291cmNlIGFuZCB0YXJnZXQgaW4gbjptIGFzc29jaWF0aW9ucy4gQ2FuIGFsc28gYmUgYSBzZXF1ZWxpemUgbW9kZWwgaWYgeW91IHdhbnQgdG8gZGVmaW5lIHRoZSBqdW5jdGlvbiB0YWJsZSB5b3Vyc2VsZiBhbmQgYWRkIGV4dHJhIGF0dHJpYnV0ZXMgdG8gaXQuXHJcbiAgICogQHBhcmFtIHtNb2RlbH0gICAgICAgICAgICAgICBbb3B0aW9ucy50aHJvdWdoLm1vZGVsXSBUaGUgbW9kZWwgdXNlZCB0byBqb2luIGJvdGggc2lkZXMgb2YgdGhlIE46TSBhc3NvY2lhdGlvbi5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgIFtvcHRpb25zLnRocm91Z2guc2NvcGVdIEEga2V5L3ZhbHVlIHNldCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYXNzb2NpYXRpb24gY3JlYXRlIGFuZCBmaW5kIGRlZmF1bHRzIG9uIHRoZSB0aHJvdWdoIG1vZGVsLiAoUmVtZW1iZXIgdG8gYWRkIHRoZSBhdHRyaWJ1dGVzIHRvIHRoZSB0aHJvdWdoIG1vZGVsKVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgW29wdGlvbnMudGhyb3VnaC51bmlxdWU9dHJ1ZV0gSWYgdHJ1ZSBhIHVuaXF1ZSBrZXkgd2lsbCBiZSBnZW5lcmF0ZWQgZnJvbSB0aGUgZm9yZWlnbiBrZXlzIHVzZWQgKG1pZ2h0IHdhbnQgdG8gdHVybiB0aGlzIG9mZiBhbmQgY3JlYXRlIHNwZWNpZmljIHVuaXF1ZSBrZXlzIHdoZW4gdXNpbmcgc2NvcGVzKVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gICAgICAgW29wdGlvbnMuYXNdIFRoZSBhbGlhcyBvZiB0aGlzIGFzc29jaWF0aW9uLiBJZiB5b3UgcHJvdmlkZSBhIHN0cmluZywgaXQgc2hvdWxkIGJlIHBsdXJhbCwgYW5kIHdpbGwgYmUgc2luZ3VsYXJpemVkIHVzaW5nIG5vZGUuaW5mbGVjdGlvbi4gSWYgeW91IHdhbnQgdG8gY29udHJvbCB0aGUgc2luZ3VsYXIgdmVyc2lvbiB5b3Vyc2VsZiwgcHJvdmlkZSBhbiBvYmplY3Qgd2l0aCBgcGx1cmFsYCBhbmQgYHNpbmd1bGFyYCBrZXlzLiBTZWUgYWxzbyB0aGUgYG5hbWVgIG9wdGlvbiBwYXNzZWQgdG8gYHNlcXVlbGl6ZS5kZWZpbmVgLiBJZiB5b3UgY3JlYXRlIG11bHRpcGxlIGFzc29jaWF0aW9ucyBiZXR3ZWVuIHRoZSBzYW1lIHRhYmxlcywgeW91IHNob3VsZCBwcm92aWRlIGFuIGFsaWFzIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtLiBJZiB5b3UgcHJvdmlkZSBhbiBhbGlhcyB3aGVuIGNyZWF0aW5nIHRoZSBhc3NvY2lhdGlvbiwgeW91IHNob3VsZCBwcm92aWRlIHRoZSBzYW1lIGFsaWFzIHdoZW4gZWFnZXIgbG9hZGluZyBhbmQgd2hlbiBnZXR0aW5nIGFzc29jaWF0ZWQgbW9kZWxzLiBEZWZhdWx0cyB0byB0aGUgcGx1cmFsaXplZCBuYW1lIG9mIHRhcmdldFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gICAgICAgW29wdGlvbnMuZm9yZWlnbktleV0gVGhlIG5hbWUgb2YgdGhlIGZvcmVpZ24ga2V5IGluIHRoZSBqb2luIHRhYmxlIChyZXByZXNlbnRpbmcgdGhlIHNvdXJjZSBtb2RlbCkgb3IgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgZm9yZWlnbiBjb2x1bW4gKHNlZSBgU2VxdWVsaXplLmRlZmluZWAgZm9yIHN5bnRheCkuIFdoZW4gdXNpbmcgYW4gb2JqZWN0LCB5b3UgY2FuIGFkZCBhIGBuYW1lYCBwcm9wZXJ0eSB0byBzZXQgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbi4gRGVmYXVsdHMgdG8gdGhlIG5hbWUgb2Ygc291cmNlICsgcHJpbWFyeSBrZXkgb2Ygc291cmNlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSAgICAgICBbb3B0aW9ucy5vdGhlcktleV0gVGhlIG5hbWUgb2YgdGhlIGZvcmVpZ24ga2V5IGluIHRoZSBqb2luIHRhYmxlIChyZXByZXNlbnRpbmcgdGhlIHRhcmdldCBtb2RlbCkgb3IgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgb3RoZXIgY29sdW1uIChzZWUgYFNlcXVlbGl6ZS5kZWZpbmVgIGZvciBzeW50YXgpLiBXaGVuIHVzaW5nIGFuIG9iamVjdCwgeW91IGNhbiBhZGQgYSBgbmFtZWAgcHJvcGVydHkgdG8gc2V0IHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4uIERlZmF1bHRzIHRvIHRoZSBuYW1lIG9mIHRhcmdldCArIHByaW1hcnkga2V5IG9mIHRhcmdldFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgW29wdGlvbnMuc2NvcGVdIEEga2V5L3ZhbHVlIHNldCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYXNzb2NpYXRpb24gY3JlYXRlIGFuZCBmaW5kIGRlZmF1bHRzIG9uIHRoZSB0YXJnZXQuIChzcWxpdGUgbm90IHN1cHBvcnRlZCBmb3IgTjpNKVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgW29wdGlvbnMudGltZXN0YW1wcz1zZXF1ZWxpemUub3B0aW9ucy50aW1lc3RhbXBzXSBTaG91bGQgdGhlIGpvaW4gbW9kZWwgaGF2ZSB0aW1lc3RhbXBzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICBbb3B0aW9ucy5vbkRlbGV0ZT0nU0VUJm5ic3A7TlVMTHxDQVNDQURFJ10gQ2FzY2FkZSBpZiB0aGlzIGlzIGEgbjptLCBhbmQgc2V0IG51bGwgaWYgaXQgaXMgYSAxOm1cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgIFtvcHRpb25zLm9uVXBkYXRlPSdDQVNDQURFJ10gU2V0cyBgT04gVVBEQVRFYFxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgW29wdGlvbnMuY29uc3RyYWludHM9dHJ1ZV0gU2hvdWxkIG9uIHVwZGF0ZSBhbmQgb24gZGVsZXRlIGNvbnN0cmFpbnRzIGJlIGVuYWJsZWQgb24gdGhlIGZvcmVpZ24ga2V5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JlbG9uZ3NUb01hbnl9XHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIC8vIEF1dG9tYWdpY2FsbHkgZ2VuZXJhdGVkIGpvaW4gbW9kZWxcclxuICAgKiBVc2VyLmJlbG9uZ3NUb01hbnkoUHJvamVjdCwgeyB0aHJvdWdoOiAnVXNlclByb2plY3RzJyB9KVxyXG4gICAqIFByb2plY3QuYmVsb25nc1RvTWFueShVc2VyLCB7IHRocm91Z2g6ICdVc2VyUHJvamVjdHMnIH0pXHJcbiAgICpcclxuICAgKiAvLyBKb2luIG1vZGVsIHdpdGggYWRkaXRpb25hbCBhdHRyaWJ1dGVzXHJcbiAgICogY29uc3QgVXNlclByb2plY3RzID0gc2VxdWVsaXplLmRlZmluZSgnVXNlclByb2plY3RzJywge1xyXG4gICAqICAgc3RhcnRlZDogU2VxdWVsaXplLkJPT0xFQU5cclxuICAgKiB9KVxyXG4gICAqIFVzZXIuYmVsb25nc1RvTWFueShQcm9qZWN0LCB7IHRocm91Z2g6IFVzZXJQcm9qZWN0cyB9KVxyXG4gICAqIFByb2plY3QuYmVsb25nc1RvTWFueShVc2VyLCB7IHRocm91Z2g6IFVzZXJQcm9qZWN0cyB9KVxyXG4gICAqL1xyXG4gIHN0YXRpYyBiZWxvbmdzVG9NYW55KHRhcmdldCwgb3B0aW9ucykge30gLy8gZXNsaW50LWRpc2FibGUtbGluZVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gdGhpcyAodGhlIHNvdXJjZSkgYW5kIHRoZSBwcm92aWRlZCB0YXJnZXQuIFRoZSBmb3JlaWduIGtleSBpcyBhZGRlZCBvbiB0aGUgdGFyZ2V0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb2RlbH0gICAgICAgICAgIHRhcmdldCBUYXJnZXQgbW9kZWxcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgW29wdGlvbnNdIGhhc09uZSBhc3NvY2lhdGlvbiBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgIFtvcHRpb25zLmhvb2tzPWZhbHNlXSBTZXQgdG8gdHJ1ZSB0byBydW4gYmVmb3JlLS9hZnRlckRlc3Ryb3kgaG9va3Mgd2hlbiBhbiBhc3NvY2lhdGVkIG1vZGVsIGlzIGRlbGV0ZWQgYmVjYXVzZSBvZiBhIGNhc2NhZGUuIEZvciBleGFtcGxlIGlmIGBVc2VyLmhhc09uZShQcm9maWxlLCB7b25EZWxldGU6ICdjYXNjYWRlJywgaG9va3M6dHJ1ZX0pYCwgdGhlIGJlZm9yZS0vYWZ0ZXJEZXN0cm95IGhvb2tzIGZvciBwcm9maWxlIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSB1c2VyIGlzIGRlbGV0ZWQuIE90aGVyd2lzZSB0aGUgcHJvZmlsZSB3aWxsIGJlIGRlbGV0ZWQgd2l0aG91dCBpbnZva2luZyBhbnkgaG9va3NcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgW29wdGlvbnMuYXNdIFRoZSBhbGlhcyBvZiB0aGlzIG1vZGVsLCBpbiBzaW5ndWxhciBmb3JtLiBTZWUgYWxzbyB0aGUgYG5hbWVgIG9wdGlvbiBwYXNzZWQgdG8gYHNlcXVlbGl6ZS5kZWZpbmVgLiBJZiB5b3UgY3JlYXRlIG11bHRpcGxlIGFzc29jaWF0aW9ucyBiZXR3ZWVuIHRoZSBzYW1lIHRhYmxlcywgeW91IHNob3VsZCBwcm92aWRlIGFuIGFsaWFzIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtLiBJZiB5b3UgcHJvdmlkZSBhbiBhbGlhcyB3aGVuIGNyZWF0aW5nIHRoZSBhc3NvY2lhdGlvbiwgeW91IHNob3VsZCBwcm92aWRlIHRoZSBzYW1lIGFsaWFzIHdoZW4gZWFnZXIgbG9hZGluZyBhbmQgd2hlbiBnZXR0aW5nIGFzc29jaWF0ZWQgbW9kZWxzLiBEZWZhdWx0cyB0byB0aGUgc2luZ3VsYXJpemVkIG5hbWUgb2YgdGFyZ2V0XHJcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSAgIFtvcHRpb25zLmZvcmVpZ25LZXldIFRoZSBuYW1lIG9mIHRoZSBmb3JlaWduIGtleSBhdHRyaWJ1dGUgaW4gdGhlIHRhcmdldCBtb2RlbCBvciBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmb3JlaWduIGNvbHVtbiAoc2VlIGBTZXF1ZWxpemUuZGVmaW5lYCBmb3Igc3ludGF4KS4gV2hlbiB1c2luZyBhbiBvYmplY3QsIHlvdSBjYW4gYWRkIGEgYG5hbWVgIHByb3BlcnR5IHRvIHNldCB0aGUgbmFtZSBvZiB0aGUgY29sdW1uLiBEZWZhdWx0cyB0byB0aGUgbmFtZSBvZiBzb3VyY2UgKyBwcmltYXJ5IGtleSBvZiBzb3VyY2VcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgW29wdGlvbnMuc291cmNlS2V5XSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHVzZSBhcyB0aGUga2V5IGZvciB0aGUgYXNzb2NpYXRpb24gaW4gdGhlIHNvdXJjZSB0YWJsZS4gRGVmYXVsdHMgdG8gdGhlIHByaW1hcnkga2V5IG9mIHRoZSBzb3VyY2UgdGFibGVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgW29wdGlvbnMub25EZWxldGU9J1NFVCZuYnNwO05VTEx8Q0FTQ0FERSddIFNFVCBOVUxMIGlmIGZvcmVpZ25LZXkgYWxsb3dzIG51bGxzLCBDQVNDQURFIGlmIG90aGVyd2lzZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICBbb3B0aW9ucy5vblVwZGF0ZT0nQ0FTQ0FERSddIFNldHMgJ09OIFVQREFURSdcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMuY29uc3RyYWludHM9dHJ1ZV0gU2hvdWxkIG9uIHVwZGF0ZSBhbmQgb24gZGVsZXRlIGNvbnN0cmFpbnRzIGJlIGVuYWJsZWQgb24gdGhlIGZvcmVpZ24ga2V5LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICBbb3B0aW9ucy51bmlxdWVLZXldIFRoZSBjdXN0b20gbmFtZSBmb3IgdW5pcXVlIGNvbnN0cmFpbnQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7SGFzT25lfVxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBVc2VyLmhhc09uZShQcm9maWxlKSAvLyBUaGlzIHdpbGwgYWRkIHVzZXJJZCB0byB0aGUgcHJvZmlsZSB0YWJsZVxyXG4gICAqL1xyXG4gIHN0YXRpYyBoYXNPbmUodGFyZ2V0LCBvcHRpb25zKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbiB0aGlzICh0aGUgc291cmNlKSBhbmQgdGhlIHByb3ZpZGVkIHRhcmdldC4gVGhlIGZvcmVpZ24ga2V5IGlzIGFkZGVkIG9uIHRoZSBzb3VyY2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsfSAgICAgICAgICAgdGFyZ2V0IFRoZSB0YXJnZXQgbW9kZWxcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgW29wdGlvbnNdIGJlbG9uZ3NUbyBhc3NvY2lhdGlvbiBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgIFtvcHRpb25zLmhvb2tzPWZhbHNlXSBTZXQgdG8gdHJ1ZSB0byBydW4gYmVmb3JlLS9hZnRlckRlc3Ryb3kgaG9va3Mgd2hlbiBhbiBhc3NvY2lhdGVkIG1vZGVsIGlzIGRlbGV0ZWQgYmVjYXVzZSBvZiBhIGNhc2NhZGUuIEZvciBleGFtcGxlIGlmIGBVc2VyLmhhc09uZShQcm9maWxlLCB7b25EZWxldGU6ICdjYXNjYWRlJywgaG9va3M6dHJ1ZX0pYCwgdGhlIGJlZm9yZS0vYWZ0ZXJEZXN0cm95IGhvb2tzIGZvciBwcm9maWxlIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSB1c2VyIGlzIGRlbGV0ZWQuIE90aGVyd2lzZSB0aGUgcHJvZmlsZSB3aWxsIGJlIGRlbGV0ZWQgd2l0aG91dCBpbnZva2luZyBhbnkgaG9va3NcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgW29wdGlvbnMuYXNdIFRoZSBhbGlhcyBvZiB0aGlzIG1vZGVsLCBpbiBzaW5ndWxhciBmb3JtLiBTZWUgYWxzbyB0aGUgYG5hbWVgIG9wdGlvbiBwYXNzZWQgdG8gYHNlcXVlbGl6ZS5kZWZpbmVgLiBJZiB5b3UgY3JlYXRlIG11bHRpcGxlIGFzc29jaWF0aW9ucyBiZXR3ZWVuIHRoZSBzYW1lIHRhYmxlcywgeW91IHNob3VsZCBwcm92aWRlIGFuIGFsaWFzIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtLiBJZiB5b3UgcHJvdmlkZSBhbiBhbGlhcyB3aGVuIGNyZWF0aW5nIHRoZSBhc3NvY2lhdGlvbiwgeW91IHNob3VsZCBwcm92aWRlIHRoZSBzYW1lIGFsaWFzIHdoZW4gZWFnZXIgbG9hZGluZyBhbmQgd2hlbiBnZXR0aW5nIGFzc29jaWF0ZWQgbW9kZWxzLiBEZWZhdWx0cyB0byB0aGUgc2luZ3VsYXJpemVkIG5hbWUgb2YgdGFyZ2V0XHJcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSAgIFtvcHRpb25zLmZvcmVpZ25LZXldIFRoZSBuYW1lIG9mIHRoZSBmb3JlaWduIGtleSBhdHRyaWJ1dGUgaW4gdGhlIHNvdXJjZSB0YWJsZSBvciBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmb3JlaWduIGNvbHVtbiAoc2VlIGBTZXF1ZWxpemUuZGVmaW5lYCBmb3Igc3ludGF4KS4gV2hlbiB1c2luZyBhbiBvYmplY3QsIHlvdSBjYW4gYWRkIGEgYG5hbWVgIHByb3BlcnR5IHRvIHNldCB0aGUgbmFtZSBvZiB0aGUgY29sdW1uLiBEZWZhdWx0cyB0byB0aGUgbmFtZSBvZiB0YXJnZXQgKyBwcmltYXJ5IGtleSBvZiB0YXJnZXRcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgW29wdGlvbnMudGFyZ2V0S2V5XSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHVzZSBhcyB0aGUga2V5IGZvciB0aGUgYXNzb2NpYXRpb24gaW4gdGhlIHRhcmdldCB0YWJsZS4gRGVmYXVsdHMgdG8gdGhlIHByaW1hcnkga2V5IG9mIHRoZSB0YXJnZXQgdGFibGVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgW29wdGlvbnMub25EZWxldGU9J1NFVCZuYnNwO05VTEx8Tk8mbmJzcDtBQ1RJT04nXSBTRVQgTlVMTCBpZiBmb3JlaWduS2V5IGFsbG93cyBudWxscywgTk8gQUNUSU9OIGlmIG90aGVyd2lzZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICBbb3B0aW9ucy5vblVwZGF0ZT0nQ0FTQ0FERSddIFNldHMgJ09OIFVQREFURSdcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMuY29uc3RyYWludHM9dHJ1ZV0gU2hvdWxkIG9uIHVwZGF0ZSBhbmQgb24gZGVsZXRlIGNvbnN0cmFpbnRzIGJlIGVuYWJsZWQgb24gdGhlIGZvcmVpZ24ga2V5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JlbG9uZ3NUb31cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogUHJvZmlsZS5iZWxvbmdzVG8oVXNlcikgLy8gVGhpcyB3aWxsIGFkZCB1c2VySWQgdG8gdGhlIHByb2ZpbGUgdGFibGVcclxuICAgKi9cclxuICBzdGF0aWMgYmVsb25nc1RvKHRhcmdldCwgb3B0aW9ucykge30gLy8gZXNsaW50LWRpc2FibGUtbGluZVxyXG59XHJcblxyXG5PYmplY3QuYXNzaWduKE1vZGVsLCBhc3NvY2lhdGlvbnNNaXhpbik7XHJcbkhvb2tzLmFwcGx5VG8oTW9kZWwsIHRydWUpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNb2RlbDtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbC5qcyJdLCJuYW1lcyI6WyJhc3NlcnQiLCJyZXF1aXJlIiwiXyIsIkRvdHRpZSIsIlV0aWxzIiwibG9nZ2VyIiwiQmVsb25nc1RvIiwiQmVsb25nc1RvTWFueSIsIkluc3RhbmNlVmFsaWRhdG9yIiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsIlByb21pc2UiLCJBc3NvY2lhdGlvbiIsIkhhc01hbnkiLCJEYXRhVHlwZXMiLCJIb29rcyIsImFzc29jaWF0aW9uc01peGluIiwiT3AiLCJub0RvdWJsZU5lc3RlZEdyb3VwIiwidmFsaWRRdWVyeUtleXdvcmRzIiwiU2V0Iiwibm9uQ2FzY2FkaW5nT3B0aW9ucyIsIk1vZGVsIiwiY29uc3RydWN0b3IiLCJzZXF1ZWxpemUiLCJnZXRRdWVyeUludGVyZmFjZSIsIlF1ZXJ5SW50ZXJmYWNlIiwiUXVlcnlHZW5lcmF0b3IiLCJ2YWx1ZXMiLCJvcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwiaXNOZXdSZWNvcmQiLCJfc2NoZW1hIiwiX3NjaGVtYURlbGltaXRlciIsImF0dHJpYnV0ZXMiLCJtYXAiLCJhdHRyaWJ1dGUiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlVmFsaWRhdGVkIiwiX2NvbmZvcm1JbmNsdWRlcyIsImluY2x1ZGUiLCJfZXhwYW5kSW5jbHVkZUFsbCIsIl92YWxpZGF0ZUluY2x1ZGVkRWxlbWVudHMiLCJkYXRhVmFsdWVzIiwiX3ByZXZpb3VzRGF0YVZhbHVlcyIsIl9jaGFuZ2VkIiwiX21vZGVsT3B0aW9ucyIsIl9vcHRpb25zIiwiX2luaXRWYWx1ZXMiLCJkZWZhdWx0cyIsImtleSIsImNsb25lIiwiX2hhc0RlZmF1bHRWYWx1ZXMiLCJtYXBWYWx1ZXMiLCJfZGVmYXVsdFZhbHVlcyIsInZhbHVlRm4iLCJ2YWx1ZSIsIlNlcXVlbGl6ZU1ldGhvZCIsImNsb25lRGVlcCIsInByaW1hcnlLZXlBdHRyaWJ1dGVzIiwibGVuZ3RoIiwiZm9yRWFjaCIsInByaW1hcnlLZXlBdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJfdGltZXN0YW1wQXR0cmlidXRlcyIsImNyZWF0ZWRBdCIsInRvRGVmYXVsdFZhbHVlIiwiZGlhbGVjdCIsInVwZGF0ZWRBdCIsImRlbGV0ZWRBdCIsImtleXMiLCJ1bmRlZmluZWQiLCJzZXQiLCJyYXciLCJjaGVja1ZlcnNpb24iLCJ3aGVyZSIsInJlZHVjZSIsInJlc3VsdCIsImdldCIsInNpemUiLCJ3aGVyZUNvbGxlY3Rpb24iLCJ2ZXJzaW9uQXR0ciIsIl92ZXJzaW9uQXR0cmlidXRlIiwibWFwV2hlcmVGaWVsZE5hbWVzIiwibmFtZSIsIm9yaWdpbmFsVmFsdWUiLCJpc1ByaW1pdGl2ZSIsImNoYW5nZWQiLCJfY3VzdG9tR2V0dGVycyIsInBsYWluIiwiaW5jbHVkZU5hbWVzIiwiaW5jbHVkZXMiLCJpbnN0YW5jZSIsIl9oYXNDdXN0b21HZXR0ZXJzIiwiX2tleSIsInJlc2V0IiwiX2hhc0RhdGVBdHRyaWJ1dGVzIiwiX2hhc0Jvb2xlYW5BdHRyaWJ1dGVzIiwic2V0S2V5cyIsImRhdGEiLCJrIiwiX2hhc1ZpcnR1YWxBdHRyaWJ1dGVzIiwiX3ZpcnR1YWxBdHRyaWJ1dGVzIiwiX2N1c3RvbVNldHRlcnMiLCJuZXdWYWx1ZSIsIl9zZXRJbmNsdWRlIiwiX2lzQXR0cmlidXRlIiwiX2pzb25BdHRyaWJ1dGVzIiwiaGFzIiwic3BsaXQiLCJwcmV2aW91c05lc3RlZFZhbHVlIiwiaXNFcXVhbCIsIl9oYXNQcmltYXJ5S2V5cyIsIl9pc1ByaW1hcnlLZXkiLCJfaGFzUmVhZE9ubHlBdHRyaWJ1dGVzIiwiX3JlYWRPbmx5QXR0cmlidXRlcyIsIl9kYXRhVHlwZVNhbml0aXplcnMiLCJfZGF0YVR5cGVDaGFuZ2VzIiwidXBkYXRlcyIsImZpbHRlciIsInBpY2tCeSIsImluY2x1ZGVNYXAiLCJhc3NvY2lhdGlvbiIsImFjY2Vzc29yIiwibW9kZWwiLCJjaGlsZE9wdGlvbnMiLCJvcmlnaW5hbEF0dHJpYnV0ZXMiLCJpc0VtcHR5IiwiaXNTaW5nbGVBc3NvY2lhdGlvbiIsImJ1aWxkIiwiYnVsa0J1aWxkIiwiYXJndW1lbnRzIiwiRXJyb3IiLCJob29rcyIsInZhbGlkYXRlIiwiZmllbGRzIiwicmF3QXR0cmlidXRlcyIsImludGVyc2VjdGlvbiIsImRlZmF1bHRGaWVsZHMiLCJyZXR1cm5pbmciLCJwcmltYXJ5S2V5TmFtZSIsImNyZWF0ZWRBdEF0dHIiLCJob29rIiwid2FzTmV3UmVjb3JkIiwibm93IiwidXBkYXRlZEF0QXR0ciIsInB1c2giLCJzaWxlbnQiLCJyZW1vdmUiLCJ2YWwiLCJkZWZhdWx0VmFsdWUiLCJ1bnNoaWZ0IiwiX2dldERlZmF1bHRUaW1lc3RhbXAiLCJ0cnkiLCJ0aGVuIiwiYmVmb3JlSG9va1ZhbHVlcyIsInBpY2siLCJpZ25vcmVDaGFuZ2VkIiwiZGlmZmVyZW5jZSIsImhvb2tDaGFuZ2VkIiwiYWZ0ZXJIb29rVmFsdWVzIiwid2l0aG91dCIsInJ1bkhvb2tzIiwidW5pcSIsImNvbmNhdCIsInNraXAiLCJhcyIsInJlc29sdmUiLCJpbmNsdWRlT3B0aW9ucyIsIm9taXQiLCJ0cmFuc2FjdGlvbiIsImxvZ2dpbmciLCJwYXJlbnRSZWNvcmQiLCJzYXZlIiwiYWNjZXNzb3JzIiwicmVhbEZpZWxkcyIsImZpZWxkIiwidmVyc2lvbkZpZWxkTmFtZSIsIm1hcFZhbHVlRmllbGROYW1lcyIsInF1ZXJ5IiwiYXJncyIsImdldFRhYmxlTmFtZSIsInBhcnNlSW50Iiwicm93c1VwZGF0ZWQiLCJPcHRpbWlzdGljTG9ja0Vycm9yIiwibW9kZWxOYW1lIiwiYXR0ciIsInRhcCIsInBhcmVudCIsImluc3RhbmNlcyIsImZvcmVpZ25LZXkiLCJvdGhlcktleSIsInRocm91Z2giLCJzY29wZSIsIl9hdXRvR2VuZXJhdGVkIiwidGhyb3VnaE1vZGVsIiwiY3JlYXRlIiwic291cmNlS2V5IiwiZmluZE9uZSIsInJlbG9hZCIsIkluc3RhbmNlRXJyb3IiLCJvbWl0QnkiLCJjaGFuZ2VkQmVmb3JlIiwic2V0T3B0aW9ucyIsInNpZGVFZmZlY3RzIiwidW5pb24iLCJmb3JjZSIsImF0dHJpYnV0ZU5hbWUiLCJjdXJyZW50VmFsdWUiLCJnZXREYXRhVmFsdWUiLCJ1bmRlZmluZWRPck51bGwiLCJzZXREYXRhVmFsdWUiLCJEYXRlIiwiZGVsZXRlIiwidHlwZSIsIkRFTEVURSIsImxpbWl0IiwiZGVsZXRlZEF0QXR0cmlidXRlIiwiaXNTZXQiLCJkZWxldGVkQXRDb2wiLCJkZWxldGVkQXREZWZhdWx0VmFsdWUiLCJvbWl0TnVsbCIsImlkZW50aWZpZXIiLCJpbmNyZW1lbnQiLCJyZXR1cm4iLCJieSIsIm90aGVyIiwiZXZlcnkiLCJvdGhlcnMiLCJzb21lIiwiZXF1YWxzIiwidmFsaWRhdG9ycyIsIl9wYXJhbm9pZENsYXVzZSIsImdyb3VwZWRMaW1pdCIsInRpbWVzdGFtcHMiLCJwYXJhbm9pZCIsImRlbGV0ZWRBdE9iamVjdCIsImVxIiwiaXNXaGVyZUVtcHR5IiwiYW5kIiwidGFpbCIsImhlYWQiLCJ0YWJsZU5hbWUiLCJpZCIsIklOVEVHRVIiLCJhbGxvd051bGwiLCJwcmltYXJ5S2V5IiwiYXV0b0luY3JlbWVudCIsIkRBVEUiLCJleGlzdGluZ0F0dHJpYnV0ZXMiLCJlYWNoIiwicHJpbWFyeUtleXMiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwiZGVmaW5pdGlvbiIsInNlbGYiLCJfY29uZm9ybUluY2x1ZGUiLCJhc3NvY2lhdGlvbnMiLCJfcHNldWRvIiwiX3RyYW5zZm9ybVN0cmluZ0Fzc29jaWF0aW9uIiwidGFyZ2V0Iiwic291cmNlIiwiaXNQbGFpbk9iamVjdCIsImFsbCIsInZhbGlkVHlwZXMiLCJIYXNPbmUiLCJPbmUiLCJIYXMiLCJNYW55IiwiaSIsInR5cGVzIiwiRWFnZXJMb2FkaW5nRXJyb3IiLCJzcGxpY2UiLCJqIiwibmVzdGVkIiwidXNlZCIsImFkZEFsbEluY2x1ZGVzIiwiYXNzb2NpYXRpb25UeXBlIiwicHJlZGljYXRlIiwidGhpc0luY2x1ZGUiLCJwb3AiLCJ0YWJsZU5hbWVzIiwiaGFzU2luZ2xlQXNzb2NpYXRpb24iLCJoYXNNdWx0aUFzc29jaWF0aW9uIiwidG9wTW9kZWwiLCJ0b3BMaW1pdCIsIl92YWxpZGF0ZUluY2x1ZGVkRWxlbWVudCIsImR1cGxpY2F0aW5nIiwiaXNNdWx0aUFzc29jaWF0aW9uIiwiaGFzRHVwbGljYXRpbmciLCJoYXNSZXF1aXJlZCIsInJlcXVpcmVkIiwiaGFzV2hlcmUiLCJoYXNQYXJlbnRXaGVyZSIsImhhc1BhcmVudFJlcXVpcmVkIiwic3ViUXVlcnkiLCJzdWJRdWVyeUZpbHRlciIsImhhc0luY2x1ZGVXaGVyZSIsImhhc0luY2x1ZGVSZXF1aXJlZCIsIl9leHBhbmRBdHRyaWJ1dGVzIiwiX2luamVjdERlcGVuZGVudFZpcnR1YWxBdHRyaWJ1dGVzIiwibWFwRmluZGVyT3B0aW9ucyIsImluY2x1ZGVBdHRyIiwidGFibGVBdHRyaWJ1dGVzIiwiX2dldEluY2x1ZGVkQXNzb2NpYXRpb24iLCJzY29wZWQiLCJfaW5qZWN0U2NvcGUiLCJzZXBhcmF0ZSIsImZsYXR0ZW5EZXB0aCIsInRhcmdldE1vZGVsIiwidGFyZ2V0QWxpYXMiLCJnZXRBc3NvY2lhdGlvbnMiLCJnZXRBc3NvY2lhdGlvbkZvckFsaWFzIiwiZXhpc3RpbmdBbGlhc2VzIiwiam9pbiIsImluZGV4IiwiX2V4cGFuZEluY2x1ZGVBbGxFbGVtZW50IiwicGFyc2VyIiwidG9Mb3dlckNhc2UiLCJ1bmlxdWUiLCJncm91cEJ5IiwiX2Fzc2lnbk9wdGlvbnMiLCJhc3NpZ25XaXRoIiwiX3VuaXFJbmNsdWRlcyIsIm9ialZhbHVlIiwic3JjVmFsdWUiLCJfYmFzZU1lcmdlIiwiX21lcmdlRnVuY3Rpb24iLCJvcHRzIiwiZ2xvYmFsT3B0aW9ucyIsIm1lcmdlIiwiZGVmaW5lIiwicGx1cmFsIiwicGx1cmFsaXplIiwic2luZ3VsYXIiLCJzaW5ndWxhcml6ZSIsImluZGV4ZXMiLCJzY2hlbWEiLCJkZWZpbmVQcm9wZXJ0eSIsImZyZWV6ZVRhYmxlTmFtZSIsInVuZGVyc2NvcmVkIiwicmVqZWN0T25FbXB0eSIsInNjaGVtYURlbGltaXRlciIsImRlZmF1bHRTY29wZSIsInNjb3BlcyIsImlzRGVmaW5lZCIsIm1vZGVsTWFuYWdlciIsInJlbW92ZU1vZGVsIiwiZ2V0TW9kZWwiLCJfc2V0dXBIb29rcyIsInVuZGVyc2NvcmVkSWYiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0b3JUeXBlIiwibm9ybWFsaXplQXR0cmlidXRlIiwicmVmZXJlbmNlcyIsIl9pbmRleGVzIiwibmFtZUluZGV4IiwiX2NvbmZvcm1JbmRleCIsImFkZCIsInZlcnNpb24iLCJfYWRkRGVmYXVsdEF0dHJpYnV0ZXMiLCJyZWZyZXNoQXR0cmlidXRlcyIsIl9maW5kQXV0b0luY3JlbWVudEF0dHJpYnV0ZSIsIl9zY29wZSIsIl9zY29wZU5hbWVzIiwiYWRkTW9kZWwiLCJhdHRyaWJ1dGVNYW5pcHVsYXRpb24iLCJvcHQiLCJmdW5jcyIsImlzT2JqZWN0IiwiX2N1c3RvbSIsIm1ldGhvZCIsImZjdCIsImNvbmZpZ3VyYWJsZSIsImZpZWxkUmF3QXR0cmlidXRlc01hcCIsInVuaXF1ZUtleXMiLCJub3JtYWxpemVEYXRhVHlwZSIsImZpZWxkTmFtZSIsIl9tb2RlbEF0dHJpYnV0ZSIsIl9zYW5pdGl6ZSIsIl9pc0NoYW5nZWQiLCJCT09MRUFOIiwiREFURU9OTFkiLCJKU09OIiwiVklSVFVBTCIsImlkeE5hbWUiLCJpZHgiLCJtc2ciLCJjb2x1bW4iLCJjdXN0b21JbmRleCIsIkpTT05CIiwidXNpbmciLCJmaWVsZEF0dHJpYnV0ZU1hcCIsIl9oYXNKc29uQXR0cmlidXRlcyIsIl9hIiwiX2hhc0N1c3RvbVNldHRlcnMiLCJsb2ciLCJwcmltYXJ5S2V5RmllbGQiLCJkcm9wIiwiY3JlYXRlVGFibGUiLCJhbHRlciIsImRlc2NyaWJlVGFibGUiLCJnZXRGb3JlaWduS2V5UmVmZXJlbmNlc0ZvclRhYmxlIiwidGFibGVJbmZvcyIsImNvbHVtbnMiLCJmb3JlaWduS2V5UmVmZXJlbmNlcyIsImNoYW5nZXMiLCJyZW1vdmVkQ29uc3RyYWludHMiLCJjb2x1bW5EZXNjIiwiY29sdW1uTmFtZSIsImFkZENvbHVtbiIsImN1cnJlbnRBdHRyaWJ1dGUiLCJyZW1vdmVDb2x1bW4iLCJkYXRhYmFzZSIsImNvbmZpZyIsImZvcmVpZ25LZXlSZWZlcmVuY2UiLCJjb25zdHJhaW50TmFtZSIsInRhYmxlQ2F0YWxvZyIsInRhYmxlU2NoZW1hIiwicmVmZXJlbmNlZFRhYmxlTmFtZSIsInJlZmVyZW5jZWRDb2x1bW5OYW1lIiwicmVmZXJlbmNlZFRhYmxlU2NoZW1hIiwicmVtb3ZlQ29uc3RyYWludCIsImNoYW5nZUNvbHVtbiIsImYiLCJzaG93SW5kZXgiLCJpdGVtMSIsIml0ZW0yIiwic29ydCIsImluZGV4MSIsImluZGV4MiIsImNvbmN1cnJlbnRseSIsImFkZEluZGV4IiwiYmVuY2htYXJrIiwiZHJvcFRhYmxlIiwiZHJvcFNjaGVtYSIsImFkZFNjaGVtYSIsIm92ZXJyaWRlIiwib3B0aW9uIiwic2NvcGVOYW1lIiwiZmxhdHRlbiIsImFwcGx5Iiwic2xpY2UiLCJTZXF1ZWxpemVTY29wZUVycm9yIiwiUXVlcnlFcnJvciIsIndhcm5PbkludmFsaWRPcHRpb25zIiwiaGFzSm9pbiIsImdyb3VwIiwic2VsZWN0T3B0aW9ucyIsInNlbGVjdCIsInJlc3VsdHMiLCJFbXB0eVJlc3VsdEVycm9yIiwiX2ZpbmRTZXBhcmF0ZSIsInZhbGlkQ29sdW1uTmFtZXMiLCJ1bnJlY29nbml6ZWRPcHRpb25zIiwidW5leHBlY3RlZE1vZGVsQXR0cmlidXRlcyIsIndhcm4iLCJvcmlnaW5hbCIsIm1lbW8iLCJsZW4iLCJwYXJhbSIsIkJ1ZmZlciIsImlzQnVmZmVyIiwidW5pcXVlU2luZ2xlQ29sdW1ucyIsImNoYWluIiwiYyIsImZpbmRBbGwiLCJhZ2dyZWdhdGVGdW5jdGlvbiIsInByZXZBdHRyaWJ1dGVzIiwiYXR0ck9wdGlvbnMiLCJhZ2dyZWdhdGVDb2x1bW4iLCJjb2wiLCJkaXN0aW5jdCIsImZuIiwidW5pb25CeSIsImEiLCJkYXRhVHlwZSIsIkZMT0FUIiwibWFwT3B0aW9uRmllbGROYW1lcyIsInJhd1NlbGVjdCIsImluY2x1ZGVJZ25vcmVBdHRyaWJ1dGVzIiwib2Zmc2V0Iiwib3JkZXIiLCJhZ2dyZWdhdGUiLCJjb3VudE9wdGlvbnMiLCJjb3VudCIsInJvd3MiLCJ2YWx1ZVNldHMiLCJ1bmtub3duRGVmYXVsdHMiLCJfY2xzIiwidCIsImludGVybmFsVHJhbnNhY3Rpb24iLCJleGNlcHRpb24iLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJjYXRjaCIsImVyciIsImZsYXR0ZW5lZFdoZXJlIiwiZmxhdHRlbk9iamVjdERlZXAiLCJmbGF0dGVuZWRXaGVyZUtleXMiLCJsYXN0Iiwid2hlcmVGaWVsZHMiLCJlcnJGaWVsZEtleXMiLCJlcnJGaWVsZHNXaGVyZUludGVyc2VjdHMiLCJpbnRlcnNlY3RzIiwidG9TdHJpbmciLCJmaW5hbGx5IiwiY29tbWl0IiwiaGFzUHJpbWFyeSIsInVwZGF0ZWREYXRhVmFsdWVzIiwiaW5zZXJ0VmFsdWVzIiwidXBkYXRlVmFsdWVzIiwidXBzZXJ0IiwiY3JlYXRlZCIsImZpbmRCeVBrIiwicmVjb3JkIiwicmVjb3JkcyIsInJlY3Vyc2l2ZUJ1bGtDcmVhdGUiLCJpbmRpdmlkdWFsSG9va3MiLCJpZ25vcmVEdXBsaWNhdGVzIiwicmVqZWN0IiwidXBkYXRlT25EdXBsaWNhdGUiLCJlcnJvcnMiLCJBZ2dyZWdhdGVFcnJvciIsInZhbGlkYXRlT3B0aW9ucyIsIkJ1bGtSZWNvcmRFcnJvciIsImluZGl2aWR1YWxPcHRpb25zIiwiYXNzb2NpYXRpb25JbnN0YW5jZXMiLCJhc3NvY2lhdGlvbkluc3RhbmNlSW5kZXhUb0luc3RhbmNlTWFwIiwiYXNzb2NpYXRpb25JbnN0YW5jZSIsIm91dCIsImZpZWxkTWFwcGVkQXR0cmlidXRlcyIsInVwc2VydEtleXMiLCJidWxrSW5zZXJ0IiwiZmluZCIsImFzc29jaWF0ZWQiLCJ0aHJvdWdoT3B0aW9ucyIsInRocm91Z2hJbnN0YW5jZXMiLCJ0cnVuY2F0ZSIsImRlc3Ryb3kiLCJjYXNjYWRlIiwicmVzdGFydElkZW50aXR5IiwiQlVMS0RFTEVURSIsIl9pbnN0YW5jZXMiLCJCVUxLVVBEQVRFIiwiYXR0clZhbHVlSGFzaCIsImJ1bGtVcGRhdGUiLCJidWxrRGVsZXRlIiwiUkFXIiwiX29wdGlvbnNNdXN0Q29udGFpbldoZXJlIiwidmFsdWVzVXNlIiwiY2hhbmdlZFZhbHVlcyIsImRpZmZlcmVudCIsImZvckluIiwidGhpc0NoYW5nZWRWYWx1ZXMiLCJoYXNUcmlnZ2VyIiwiYWZmZWN0ZWRSb3dzIiwiZXhjbHVkZSIsImVsZW0iLCJfZGVmYXVsdHNPcHRpb25zIiwiU3ltYm9sIiwiZm9yIiwiYWxpYXMiLCJ1cGRhdGVkQXRBdHRyaWJ1dGUiLCJwcm9taXNlIiwiZGVjcmVtZW50IiwiYXBwbHlUbyIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsTUFBTSxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUF0Qjs7QUFDQSxNQUFNQyxDQUFDLEdBQUdELE9BQU8sQ0FBQyxRQUFELENBQWpCOztBQUNBLE1BQU1FLE1BQU0sR0FBR0YsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBRUEsTUFBTUcsS0FBSyxHQUFHSCxPQUFPLENBQUMsU0FBRCxDQUFyQjs7QUFDQSxNQUFNO0FBQUVJLEVBQUFBO0FBQUYsSUFBYUosT0FBTyxDQUFDLGdCQUFELENBQTFCOztBQUNBLE1BQU1LLFNBQVMsR0FBR0wsT0FBTyxDQUFDLDJCQUFELENBQXpCOztBQUNBLE1BQU1NLGFBQWEsR0FBR04sT0FBTyxDQUFDLGdDQUFELENBQTdCOztBQUNBLE1BQU1PLGlCQUFpQixHQUFHUCxPQUFPLENBQUMsc0JBQUQsQ0FBakM7O0FBQ0EsTUFBTVEsVUFBVSxHQUFHUixPQUFPLENBQUMsZUFBRCxDQUExQjs7QUFDQSxNQUFNUyxlQUFlLEdBQUdULE9BQU8sQ0FBQyxVQUFELENBQS9COztBQUNBLE1BQU1VLE9BQU8sR0FBR1YsT0FBTyxDQUFDLFdB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzJCQUNnQjBPLE0sRUFBUTFPLE8sRUFBUyxDQUFFLEMsQ0FBQzs7QUFFbEM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzhCQUNtQjBPLE0sRUFBUTFPLE8sRUFBUyxDQUFFLEMsQ0FBQzs7Ozs7OztBQUd2Q0MsTUFBTSxDQUFDQyxNQUFQLENBQWNULEtBQWQsRUFBcUJOLGlCQUFyQjtBQUNBRCxLQUFLLENBQUN5aUIsT0FBTixDQUFjbGlCLEtBQWQsRUFBcUIsSUFBckI7QUFFQW1pQixNQUFNLENBQUNDLE9BQVAsR0FBaUJwaUIsS0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgRG90dGllID0gcmVxdWlyZSgnZG90dGllJyk7XG5cbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoJy4vdXRpbHMvbG9nZ2VyJyk7XG5jb25zdCBCZWxvbmdzVG8gPSByZXF1aXJlKCcuL2Fzc29jaWF0aW9ucy9iZWxvbmdzLXRvJyk7XG5jb25zdCBCZWxvbmdzVG9NYW55ID0gcmVxdWlyZSgnLi9hc3NvY2lhdGlvbnMvYmVsb25ncy10by1tYW55Jyk7XG5jb25zdCBJbnN0YW5jZVZhbGlkYXRvciA9IHJlcXVpcmUoJy4vaW5zdGFuY2UtdmFsaWRhdG9yJyk7XG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZSgnLi9xdWVyeS10eXBlcycpO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZSgnLi9lcnJvcnMnKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCcuL3Byb21pc2UnKTtcbmNvbnN0IEFzc29jaWF0aW9uID0gcmVxdWlyZSgnLi9hc3NvY2lhdGlvbnMvYmFzZScpO1xuY29uc3QgSGFzTWFueSA9IHJlcXVpcmUoJy4vYXNzb2NpYXRpb25zL2hhcy1tYW55Jyk7XG5jb25zdCBEYXRhVHlwZXMgPSByZXF1aXJlKCcuL2RhdGEtdHlwZXMnKTtcbmNvbnN0IEhvb2tzID0gcmVxdWlyZSgnLi9ob29rcycpO1xuY29uc3QgYXNzb2NpYXRpb25zTWl4aW4gPSByZXF1aXJlKCcuL2Fzc29jaWF0aW9ucy9taXhpbicpO1xuY29uc3QgT3AgPSByZXF1aXJlKCcuL29wZXJhdG9ycycpO1xuY29uc3QgeyBub0RvdWJsZU5lc3RlZEdyb3VwIH0gPSByZXF1aXJlKCcuL3V0aWxzL2RlcHJlY2F0aW9ucycpO1xuXG5cbi8vIFRoaXMgbGlzdCB3aWxsIHF1aWNrbHkgYmVjb21lIGRhdGVkLCBidXQgZmFpbGluZyB0byBtYWludGFpbiB0aGlzIGxpc3QganVzdCBtZWFuc1xuLy8gd2Ugd29uJ3QgdGhyb3cgYSB3YXJuaW5nIHdoZW4gd2Ugc2hvdWxkLiBBdCBsZWFzdCBtb3N0IGNvbW1vbiBjYXNlcyB3aWxsIGZvcmV2ZXIgYmUgY292ZXJlZFxuLy8gc28gd2Ugc3RvcCB0aHJvd2luZyBlcnJvbmVvdXMgd2FybmluZ3Mgd2hlbiB3ZSBzaG91bGRuJ3QuXG5jb25zdCB2YWxpZFF1ZXJ5S2V5d29yZHMgPSBuZXcgU2V0KFsnd2hlcmUnLCAnYXR0cmlidXRlcycsICdwYXJhbm9pZCcsICdpbmNsdWRlJywgJ29yZGVyJywgJ2xpbWl0JywgJ29mZnNldCcsXG4gICd0cmFuc2FjdGlvbicsICdsb2NrJywgJ3JhdycsICdsb2dnaW5nJywgJ2JlbmNobWFyaycsICdoYXZpbmcnLCAnc2VhcmNoUGF0aCcsICdyZWplY3RPbkVtcHR5JywgJ3BsYWluJyxcbiAgJ3Njb3BlJywgJ2dyb3VwJywgJ3Rocm91Z2gnLCAnZGVmYXVsdHMnLCAnZGlzdGluY3QnLCAncHJpbWFyeScsICdleGNlcHRpb24nLCAndHlwZScsICdob29rcycsICdmb3JjZScsXG4gICduYW1lJ10pO1xuXG4vLyBMaXN0IG9mIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgbm90IGJlIGltcGxpY2l0bHkgcGFzc2VkIGludG8gc3VicXVlcmllcy9pbmNsdWRlcy5cbmNvbnN0IG5vbkNhc2NhZGluZ09wdGlvbnMgPSBbJ2luY2x1ZGUnLCAnYXR0cmlidXRlcycsICdvcmlnaW5hbEF0dHJpYnV0ZXMnLCAnb3JkZXInLCAnd2hlcmUnLCAnbGltaXQnLCAnb2Zmc2V0JywgJ3BsYWluJywgJ2dyb3VwJywgJ2hhdmluZyddO1xuXG4vKipcbiAqIEEgTW9kZWwgcmVwcmVzZW50cyBhIHRhYmxlIGluIHRoZSBkYXRhYmFzZS4gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgZGF0YWJhc2Ugcm93LlxuICpcbiAqIE1vZGVsIGluc3RhbmNlcyBvcGVyYXRlIHdpdGggdGhlIGNvbmNlcHQgb2YgYSBgZGF0YVZhbHVlc2AgcHJvcGVydHksIHdoaWNoIHN0b3JlcyB0aGUgYWN0dWFsIHZhbHVlcyByZXByZXNlbnRlZCBieSB0aGUgaW5zdGFuY2UuXG4gKiBCeSBkZWZhdWx0LCB0aGUgdmFsdWVzIGZyb20gZGF0YVZhbHVlcyBjYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIHRoZSBJbnN0YW5jZSwgdGhhdCBpczpcbiAqIGBgYGpzXG4gKiBpbnN0YW5jZS5maWVsZFxuICogLy8gaXMgdGhlIHNhbWUgYXNcbiAqIGluc3RhbmNlLmdldCgnZmllbGQnKVxuICogLy8gaXMgdGhlIHNhbWUgYXNcbiAqIGluc3RhbmNlLmdldERhdGFWYWx1ZSgnZmllbGQnKVxuICogYGBgXG4gKiBIb3dldmVyLCBpZiBnZXR0ZXJzIGFuZC9vciBzZXR0ZXJzIGFyZSBkZWZpbmVkIGZvciBgZmllbGRgIHRoZXkgd2lsbCBiZSBpbnZva2VkLCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgdmFsdWUgZnJvbSBgZGF0YVZhbHVlc2AuXG4gKiBBY2Nlc3NpbmcgcHJvcGVydGllcyBkaXJlY3RseSBvciB1c2luZyBgZ2V0YCBpcyBwcmVmZXJyZWQgZm9yIHJlZ3VsYXIgdXNlLCBgZ2V0RGF0YVZhbHVlYCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjdXN0b20gZ2V0dGVycy5cbiAqXG4gKiBAc2VlXG4gICAqIHtAbGluayBTZXF1ZWxpemUjZGVmaW5lfSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBnZXR0ZXJzIGFuZCBzZXR0ZXJzXG4gKiBAbWl4ZXMgSG9va3NcbiAqL1xuY2xhc3MgTW9kZWwge1xuICBzdGF0aWMgZ2V0IFF1ZXJ5SW50ZXJmYWNlKCkge1xuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5nZXRRdWVyeUludGVyZmFjZSgpO1xuICB9XG5cbiAgc3RhdGljIGdldCBRdWVyeUdlbmVyYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5RdWVyeUludGVyZmFjZS5RdWVyeUdlbmVyYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgc2VxdWVsaXplIGluc3RhbmNlXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIFNlcXVlbGl6ZX1cbiAgICpcbiAgICogQHByb3BlcnR5IHNlcXVlbGl6ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VxdWVsaXplfVxuICAgKi9cbiAgZ2V0IHNlcXVlbGl6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5zZXF1ZWxpemU7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgbmV3IG1vZGVsIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gIFt2YWx1ZXM9e31dIGFuIG9iamVjdCBvZiBrZXkgdmFsdWUgcGFpcnNcbiAgICogQHBhcmFtIHtPYmplY3R9ICBbb3B0aW9uc10gaW5zdGFuY2UgY29uc3RydWN0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yYXc9ZmFsc2VdIElmIHNldCB0byB0cnVlLCB2YWx1ZXMgd2lsbCBpZ25vcmUgZmllbGQgYW5kIHZpcnR1YWwgc2V0dGVycy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5pc05ld1JlY29yZD10cnVlXSBJcyB0aGlzIGEgbmV3IHJlY29yZFxuICAgKiBAcGFyYW0ge0FycmF5fSAgIFtvcHRpb25zLmluY2x1ZGVdIGFuIGFycmF5IG9mIGluY2x1ZGUgb3B0aW9ucyAtIFVzZWQgdG8gYnVpbGQgcHJlZmV0Y2hlZC9pbmNsdWRlZCBtb2RlbCBpbnN0YW5jZXMuIFNlZSBgc2V0YFxuICAgKi9cbiAgY29uc3RydWN0b3IodmFsdWVzID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGlzTmV3UmVjb3JkOiB0cnVlLFxuICAgICAgX3NjaGVtYTogdGhpcy5jb25zdHJ1Y3Rvci5fc2NoZW1hLFxuICAgICAgX3NjaGVtYURlbGltaXRlcjogdGhpcy5jb25zdHJ1Y3Rvci5fc2NoZW1hRGVsaW1pdGVyXG4gICAgfSwgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGVzKSB7XG4gICAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXMubWFwKGF0dHJpYnV0ZSA9PiBBcnJheS5pc0FycmF5KGF0dHJpYnV0ZSkgPyBhdHRyaWJ1dGVbMV0gOiBhdHRyaWJ1dGUpO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5pbmNsdWRlVmFsaWRhdGVkKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yLl9jb25mb3JtSW5jbHVkZXMob3B0aW9ucywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgICBpZiAob3B0aW9ucy5pbmNsdWRlKSB7XG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IuX2V4cGFuZEluY2x1ZGVBbGwob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IuX3ZhbGlkYXRlSW5jbHVkZWRFbGVtZW50cyhvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRhdGFWYWx1ZXMgPSB7fTtcbiAgICB0aGlzLl9wcmV2aW91c0RhdGFWYWx1ZXMgPSB7fTtcbiAgICB0aGlzLl9jaGFuZ2VkID0ge307XG4gICAgdGhpcy5fbW9kZWxPcHRpb25zID0gdGhpcy5jb25zdHJ1Y3Rvci5vcHRpb25zO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdGFuY2UgaGFzIG5vdCB5ZXQgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIGRhdGFiYXNlXG4gICAgICogQHByb3BlcnR5IGlzTmV3UmVjb3JkXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc05ld1JlY29yZCA9IG9wdGlvbnMuaXNOZXdSZWNvcmQ7XG5cbiAgICB0aGlzLl9pbml0VmFsdWVzKHZhbHVlcywgb3B0aW9ucyk7XG4gIH1cblxuICBfaW5pdFZhbHVlcyh2YWx1ZXMsIG9wdGlvbnMpIHtcbiAgICBsZXQgZGVmYXVsdHM7XG4gICAgbGV0IGtleTtcblxuICAgIHZhbHVlcyA9IHZhbHVlcyAmJiBfLmNsb25lKHZhbHVlcykgfHwge307XG5cbiAgICBpZiAob3B0aW9ucy5pc05ld1JlY29yZCkge1xuICAgICAgZGVmYXVsdHMgPSB7fTtcblxuICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuX2hhc0RlZmF1bHRWYWx1ZXMpIHtcbiAgICAgICAgZGVmYXVsdHMgPSBfLm1hcFZhbHVlcyh0aGlzLmNvbnN0cnVjdG9yLl9kZWZhdWx0VmFsdWVzLCB2YWx1ZUZuID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlRm4oKTtcbiAgICAgICAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QgPyB2YWx1ZSA6IF8uY2xvbmVEZWVwKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCBpZCB0byBudWxsIGlmIG5vdCBwYXNzZWQgYXMgdmFsdWUsIGEgbmV3bHkgY3JlYXRlZCBkYW8gaGFzIG5vIGlkXG4gICAgICAvLyByZW1vdmluZyB0aGlzIGJyZWFrcyBidWxrQ3JlYXRlXG4gICAgICAvLyBkbyBhZnRlciBkZWZhdWx0IHZhbHVlcyBzaW5jZSBpdCBtaWdodCBoYXZlIFVVSUQgYXMgYSBkZWZhdWx0IHZhbHVlXG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5wcmltYXJ5S2V5QXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5wcmltYXJ5S2V5QXR0cmlidXRlcy5mb3JFYWNoKHByaW1hcnlLZXlBdHRyaWJ1dGUgPT4ge1xuICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmF1bHRzLCBwcmltYXJ5S2V5QXR0cmlidXRlKSkge1xuICAgICAgICAgICAgZGVmYXVsdHNbcHJpbWFyeUtleUF0dHJpYnV0ZV0gPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmNyZWF0ZWRBdCAmJiBkZWZhdWx0c1t0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmNyZWF0ZWRBdF0pIHtcbiAgICAgICAgdGhpcy5kYXRhVmFsdWVzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuY3JlYXRlZEF0XSA9IFV0aWxzLnRvRGVmYXVsdFZhbHVlKGRlZmF1bHRzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuY3JlYXRlZEF0XSwgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KTtcbiAgICAgICAgZGVsZXRlIGRlZmF1bHRzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuY3JlYXRlZEF0XTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0ICYmIGRlZmF1bHRzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0XSkge1xuICAgICAgICB0aGlzLmRhdGFWYWx1ZXNbdGhpcy5jb25zdHJ1Y3Rvci5fdGltZXN0YW1wQXR0cmlidXRlcy51cGRhdGVkQXRdID0gVXRpbHMudG9EZWZhdWx0VmFsdWUoZGVmYXVsdHNbdGhpcy5jb25zdHJ1Y3Rvci5fdGltZXN0YW1wQXR0cmlidXRlcy51cGRhdGVkQXRdLCB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QpO1xuICAgICAgICBkZWxldGUgZGVmYXVsdHNbdGhpcy5jb25zdHJ1Y3Rvci5fdGltZXN0YW1wQXR0cmlidXRlcy51cGRhdGVkQXRdO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXQgJiYgZGVmYXVsdHNbdGhpcy5jb25zdHJ1Y3Rvci5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXRdKSB7XG4gICAgICAgIHRoaXMuZGF0YVZhbHVlc1t0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdF0gPSBVdGlscy50b0RlZmF1bHRWYWx1ZShkZWZhdWx0c1t0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdF0sIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCk7XG4gICAgICAgIGRlbGV0ZSBkZWZhdWx0c1t0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdF07XG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhkZWZhdWx0cykubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoa2V5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgaWYgKHZhbHVlc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgVXRpbHMudG9EZWZhdWx0VmFsdWUoZGVmYXVsdHNba2V5XSwgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KSwgeyByYXc6IHRydWUgfSk7XG4gICAgICAgICAgICBkZWxldGUgdmFsdWVzW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXQodmFsdWVzLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIHZhbGlkYXRlSW5jbHVkZWRFbGVtZW50cyBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBiZWZvcmUgdGhpcyBtZXRob2RcbiAgc3RhdGljIF9wYXJhbm9pZENsYXVzZShtb2RlbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gQXBwbHkgb24gZWFjaCBpbmNsdWRlXG4gICAgLy8gVGhpcyBzaG91bGQgYmUgaGFuZGxlZCBiZWZvcmUgaGFuZGxpbmcgd2hlcmUgY29uZGl0aW9ucyBiZWNhdXNlIG9mIGxvZ2ljIHdpdGggcmV0dXJuc1xuICAgIC8vIG90aGVyd2lzZSB0aGlzIGNvZGUgd2lsbCBuZXZlciBydW4gb24gaW5jbHVkZXMgb2YgYSBhbHJlYWR5IGNvbmRpdGlvbmFibGUgd2hlcmVcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlKSB7XG4gICAgICBmb3IgKGNvbnN0IGluY2x1ZGUgb2Ygb3B0aW9ucy5pbmNsdWRlKSB7XG4gICAgICAgIHRoaXMuX3BhcmFub2lkQ2xhdXNlKGluY2x1ZGUubW9kZWwsIGluY2x1ZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFwcGx5IHBhcmFub2lkIHdoZW4gZ3JvdXBlZExpbWl0IGlzIHVzZWRcbiAgICBpZiAoXy5nZXQob3B0aW9ucywgJ2dyb3VwZWRMaW1pdC5vbi5vcHRpb25zLnBhcmFub2lkJykpIHtcbiAgICAgIGNvbnN0IHRocm91Z2hNb2RlbCA9IF8uZ2V0KG9wdGlvbnMsICdncm91cGVkTGltaXQub24udGhyb3VnaC5tb2RlbCcpO1xuICAgICAgaWYgKHRocm91Z2hNb2RlbCkge1xuICAgICAgICBvcHRpb25zLmdyb3VwZWRMaW1pdC50aHJvdWdoID0gdGhpcy5fcGFyYW5vaWRDbGF1c2UodGhyb3VnaE1vZGVsLCBvcHRpb25zLmdyb3VwZWRMaW1pdC50aHJvdWdoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW1vZGVsLm9wdGlvbnMudGltZXN0YW1wcyB8fCAhbW9kZWwub3B0aW9ucy5wYXJhbm9pZCB8fCBvcHRpb25zLnBhcmFub2lkID09PSBmYWxzZSkge1xuICAgICAgLy8gVGhpcyBtb2RlbCBpcyBub3QgcGFyYW5vaWQsIG5vdGhpbmcgdG8gZG8gaGVyZTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIGNvbnN0IGRlbGV0ZWRBdENvbCA9IG1vZGVsLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdDtcbiAgICBjb25zdCBkZWxldGVkQXRBdHRyaWJ1dGUgPSBtb2RlbC5yYXdBdHRyaWJ1dGVzW2RlbGV0ZWRBdENvbF07XG4gICAgY29uc3QgZGVsZXRlZEF0T2JqZWN0ID0ge307XG5cbiAgICBsZXQgZGVsZXRlZEF0RGVmYXVsdFZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlbGV0ZWRBdEF0dHJpYnV0ZSwgJ2RlZmF1bHRWYWx1ZScpID8gZGVsZXRlZEF0QXR0cmlidXRlLmRlZmF1bHRWYWx1ZSA6IG51bGw7XG5cbiAgICBkZWxldGVkQXREZWZhdWx0VmFsdWUgPSBkZWxldGVkQXREZWZhdWx0VmFsdWUgfHwge1xuICAgICAgW09wLmVxXTogbnVsbFxuICAgIH07XG5cbiAgICBkZWxldGVkQXRPYmplY3RbZGVsZXRlZEF0QXR0cmlidXRlLmZpZWxkIHx8IGRlbGV0ZWRBdENvbF0gPSBkZWxldGVkQXREZWZhdWx0VmFsdWU7XG5cbiAgICBpZiAoVXRpbHMuaXNXaGVyZUVtcHR5KG9wdGlvbnMud2hlcmUpKSB7XG4gICAgICBvcHRpb25zLndoZXJlID0gZGVsZXRlZEF0T2JqZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLndoZXJlID0geyBbT3AuYW5kXTogW2RlbGV0ZWRBdE9iamVjdCwgb3B0aW9ucy53aGVyZV0gfTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBfYWRkRGVmYXVsdEF0dHJpYnV0ZXMoKSB7XG4gICAgY29uc3QgdGFpbCA9IHt9O1xuICAgIGxldCBoZWFkID0ge307XG5cbiAgICAvLyBBZGQgaWQgaWYgbm8gcHJpbWFyeSBrZXkgd2FzIG1hbnVhbGx5IGFkZGVkIHRvIGRlZmluaXRpb25cbiAgICAvLyBDYW4ndCB1c2UgdGhpcy5wcmltYXJ5S2V5cyBoZXJlLCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgUEtzIGFyZSBpZGVudGlmaWVkXG4gICAgaWYgKCFfLnNvbWUodGhpcy5yYXdBdHRyaWJ1dGVzLCAncHJpbWFyeUtleScpKSB7XG4gICAgICBpZiAoJ2lkJyBpbiB0aGlzLnJhd0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgLy8gU29tZXRoaW5nIGlzIGZpc2h5IGhlcmUhXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQSBjb2x1bW4gY2FsbGVkICdpZCcgd2FzIGFkZGVkIHRvIHRoZSBhdHRyaWJ1dGVzIG9mICcke3RoaXMudGFibGVOYW1lfScgYnV0IG5vdCBtYXJrZWQgd2l0aCAncHJpbWFyeUtleTogdHJ1ZSdgKTtcbiAgICAgIH1cblxuICAgICAgaGVhZCA9IHtcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICB0eXBlOiBuZXcgRGF0YVR5cGVzLklOVEVHRVIoKSxcbiAgICAgICAgICBhbGxvd051bGw6IGZhbHNlLFxuICAgICAgICAgIHByaW1hcnlLZXk6IHRydWUsXG4gICAgICAgICAgYXV0b0luY3JlbWVudDogdHJ1ZSxcbiAgICAgICAgICBfYXV0b0dlbmVyYXRlZDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmNyZWF0ZWRBdCkge1xuICAgICAgdGFpbFt0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmNyZWF0ZWRBdF0gPSB7XG4gICAgICAgIHR5cGU6IERhdGFUeXBlcy5EQVRFLFxuICAgICAgICBhbGxvd051bGw6IGZhbHNlLFxuICAgICAgICBfYXV0b0dlbmVyYXRlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy51cGRhdGVkQXQpIHtcbiAgICAgIHRhaWxbdGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy51cGRhdGVkQXRdID0ge1xuICAgICAgICB0eXBlOiBEYXRhVHlwZXMuREFURSxcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgICAgX2F1dG9HZW5lcmF0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0KSB7XG4gICAgICB0YWlsW3RoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0XSA9IHtcbiAgICAgICAgdHlwZTogRGF0YVR5cGVzLkRBVEUsXG4gICAgICAgIF9hdXRvR2VuZXJhdGVkOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl92ZXJzaW9uQXR0cmlidXRlKSB7XG4gICAgICB0YWlsW3RoaXMuX3ZlcnNpb25BdHRyaWJ1dGVdID0ge1xuICAgICAgICB0eXBlOiBEYXRhVHlwZXMuSU5URUdFUixcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgICBfYXV0b0dlbmVyYXRlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ0F0dHJpYnV0ZXMgPSBfLmNsb25lKHRoaXMucmF3QXR0cmlidXRlcyk7XG4gICAgdGhpcy5yYXdBdHRyaWJ1dGVzID0ge307XG5cbiAgICBfLmVhY2goaGVhZCwgKHZhbHVlLCBhdHRyKSA9PiB7XG4gICAgICB0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cl0gPSB2YWx1ZTtcbiAgICB9KTtcblxuICAgIF8uZWFjaChleGlzdGluZ0F0dHJpYnV0ZXMsICh2YWx1ZSwgYXR0cikgPT4ge1xuICAgICAgdGhpcy5yYXdBdHRyaWJ1dGVzW2F0dHJdID0gdmFsdWU7XG4gICAgfSk7XG5cbiAgICBfLmVhY2godGFpbCwgKHZhbHVlLCBhdHRyKSA9PiB7XG4gICAgICBpZiAodGhpcy5yYXdBdHRyaWJ1dGVzW2F0dHJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yYXdBdHRyaWJ1dGVzW2F0dHJdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIU9iamVjdC5rZXlzKHRoaXMucHJpbWFyeUtleXMpLmxlbmd0aCkge1xuICAgICAgdGhpcy5wcmltYXJ5S2V5cy5pZCA9IHRoaXMucmF3QXR0cmlidXRlcy5pZDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgX2ZpbmRBdXRvSW5jcmVtZW50QXR0cmlidXRlKCkge1xuICAgIHRoaXMuYXV0b0luY3JlbWVudEF0dHJpYnV0ZSA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5yYXdBdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucmF3QXR0cmlidXRlcywgbmFtZSkpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMucmF3QXR0cmlidXRlc1tuYW1lXTtcbiAgICAgICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5hdXRvSW5jcmVtZW50KSB7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b0luY3JlbWVudEF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEluc3RhbmNlIGRlZmluaXRpb24uIE9ubHkgb25lIGF1dG9pbmNyZW1lbnQgZmllbGQgYWxsb3dlZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5hdXRvSW5jcmVtZW50QXR0cmlidXRlID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBfY29uZm9ybUluY2x1ZGVzKG9wdGlvbnMsIHNlbGYpIHtcbiAgICBpZiAoIW9wdGlvbnMuaW5jbHVkZSkgcmV0dXJuO1xuXG4gICAgLy8gaWYgaW5jbHVkZSBpcyBub3QgYW4gYXJyYXksIHdyYXAgaW4gYW4gYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5pbmNsdWRlKSkge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlID0gW29wdGlvbnMuaW5jbHVkZV07XG4gICAgfSBlbHNlIGlmICghb3B0aW9ucy5pbmNsdWRlLmxlbmd0aCkge1xuICAgICAgZGVsZXRlIG9wdGlvbnMuaW5jbHVkZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFsbCBpbmNsdWRlZCBlbGVtZW50cyB0byB7IG1vZGVsOiBNb2RlbCB9IGZvcm1cbiAgICBvcHRpb25zLmluY2x1ZGUgPSBvcHRpb25zLmluY2x1ZGUubWFwKGluY2x1ZGUgPT4gdGhpcy5fY29uZm9ybUluY2x1ZGUoaW5jbHVkZSwgc2VsZikpO1xuICB9XG5cbiAgc3RhdGljIF90cmFuc2Zvcm1TdHJpbmdBc3NvY2lhdGlvbihpbmNsdWRlLCBzZWxmKSB7XG4gICAgaWYgKHNlbGYgJiYgdHlwZW9mIGluY2x1ZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZWxmLmFzc29jaWF0aW9ucywgaW5jbHVkZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NvY2lhdGlvbiB3aXRoIGFsaWFzIFwiJHtpbmNsdWRlfVwiIGRvZXMgbm90IGV4aXN0IG9uICR7c2VsZi5uYW1lfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGYuYXNzb2NpYXRpb25zW2luY2x1ZGVdO1xuICAgIH1cbiAgICByZXR1cm4gaW5jbHVkZTtcbiAgfVxuXG4gIHN0YXRpYyBfY29uZm9ybUluY2x1ZGUoaW5jbHVkZSwgc2VsZikge1xuICAgIGlmIChpbmNsdWRlKSB7XG4gICAgICBsZXQgbW9kZWw7XG5cbiAgICAgIGlmIChpbmNsdWRlLl9wc2V1ZG8pIHJldHVybiBpbmNsdWRlO1xuXG4gICAgICBpbmNsdWRlID0gdGhpcy5fdHJhbnNmb3JtU3RyaW5nQXNzb2NpYXRpb24oaW5jbHVkZSwgc2VsZik7XG5cbiAgICAgIGlmIChpbmNsdWRlIGluc3RhbmNlb2YgQXNzb2NpYXRpb24pIHtcbiAgICAgICAgaWYgKHNlbGYgJiYgaW5jbHVkZS50YXJnZXQubmFtZSA9PT0gc2VsZi5uYW1lKSB7XG4gICAgICAgICAgbW9kZWwgPSBpbmNsdWRlLnNvdXJjZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtb2RlbCA9IGluY2x1ZGUudGFyZ2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgbW9kZWwsIGFzc29jaWF0aW9uOiBpbmNsdWRlLCBhczogaW5jbHVkZS5hcyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5jbHVkZS5wcm90b3R5cGUgJiYgaW5jbHVkZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBNb2RlbCkge1xuICAgICAgICByZXR1cm4geyBtb2RlbDogaW5jbHVkZSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGluY2x1ZGUpKSB7XG4gICAgICAgIGlmIChpbmNsdWRlLmFzc29jaWF0aW9uKSB7XG4gICAgICAgICAgaW5jbHVkZS5hc3NvY2lhdGlvbiA9IHRoaXMuX3RyYW5zZm9ybVN0cmluZ0Fzc29jaWF0aW9uKGluY2x1ZGUuYXNzb2NpYXRpb24sIHNlbGYpO1xuXG4gICAgICAgICAgaWYgKHNlbGYgJiYgaW5jbHVkZS5hc3NvY2lhdGlvbi50YXJnZXQubmFtZSA9PT0gc2VsZi5uYW1lKSB7XG4gICAgICAgICAgICBtb2RlbCA9IGluY2x1ZGUuYXNzb2NpYXRpb24uc291cmNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IGluY2x1ZGUuYXNzb2NpYXRpb24udGFyZ2V0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaW5jbHVkZS5tb2RlbCkgaW5jbHVkZS5tb2RlbCA9IG1vZGVsO1xuICAgICAgICAgIGlmICghaW5jbHVkZS5hcykgaW5jbHVkZS5hcyA9IGluY2x1ZGUuYXNzb2NpYXRpb24uYXM7XG5cbiAgICAgICAgICB0aGlzLl9jb25mb3JtSW5jbHVkZXMoaW5jbHVkZSwgbW9kZWwpO1xuICAgICAgICAgIHJldHVybiBpbmNsdWRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluY2x1ZGUubW9kZWwpIHtcbiAgICAgICAgICB0aGlzLl9jb25mb3JtSW5jbHVkZXMoaW5jbHVkZSwgaW5jbHVkZS5tb2RlbCk7XG4gICAgICAgICAgcmV0dXJuIGluY2x1ZGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5jbHVkZS5hbGwpIHtcbiAgICAgICAgICB0aGlzLl9jb25mb3JtSW5jbHVkZXMoaW5jbHVkZSk7XG4gICAgICAgICAgcmV0dXJuIGluY2x1ZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luY2x1ZGUgdW5leHBlY3RlZC4gRWxlbWVudCBoYXMgdG8gYmUgZWl0aGVyIGEgTW9kZWwsIGFuIEFzc29jaWF0aW9uIG9yIGFuIG9iamVjdC4nKTtcbiAgfVxuXG4gIHN0YXRpYyBfZXhwYW5kSW5jbHVkZUFsbEVsZW1lbnQoaW5jbHVkZXMsIGluY2x1ZGUpIHtcbiAgICAvLyBjaGVjayAnYWxsJyBhdHRyaWJ1dGUgcHJvdmlkZWQgaXMgdmFsaWRcbiAgICBsZXQgYWxsID0gaW5jbHVkZS5hbGw7XG4gICAgZGVsZXRlIGluY2x1ZGUuYWxsO1xuXG4gICAgaWYgKGFsbCAhPT0gdHJ1ZSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFsbCkpIHtcbiAgICAgICAgYWxsID0gW2FsbF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbGlkVHlwZXMgPSB7XG4gICAgICAgIEJlbG9uZ3NUbzogdHJ1ZSxcbiAgICAgICAgSGFzT25lOiB0cnVlLFxuICAgICAgICBIYXNNYW55OiB0cnVlLFxuICAgICAgICBPbmU6IFsnQmVsb25nc1RvJywgJ0hhc09uZSddLFxuICAgICAgICBIYXM6IFsnSGFzT25lJywgJ0hhc01hbnknXSxcbiAgICAgICAgTWFueTogWydIYXNNYW55J11cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhbGxbaV07XG4gICAgICAgIGlmICh0eXBlID09PSAnQWxsJykge1xuICAgICAgICAgIGFsbCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eXBlcyA9IHZhbGlkVHlwZXNbdHlwZV07XG4gICAgICAgIGlmICghdHlwZXMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLkVhZ2VyTG9hZGluZ0Vycm9yKGBpbmNsdWRlIGFsbCAnJHt0eXBlfScgaXMgbm90IHZhbGlkIC0gbXVzdCBiZSBCZWxvbmdzVG8sIEhhc09uZSwgSGFzTWFueSwgT25lLCBIYXMsIE1hbnkgb3IgQWxsYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZXMgIT09IHRydWUpIHtcbiAgICAgICAgICAvLyByZXBsYWNlIHR5cGUgcGxhY2Vob2xkZXIgZS5nLiAnT25lJyB3aXRoIGl0cyBjb25zdGl0dWVudCB0eXBlcyBlLmcuICdIYXNPbmUnLCAnQmVsb25nc1RvJ1xuICAgICAgICAgIGFsbC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgaS0tO1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdHlwZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmICghYWxsLmluY2x1ZGVzKHR5cGVzW2pdKSkge1xuICAgICAgICAgICAgICBhbGwudW5zaGlmdCh0eXBlc1tqXSk7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGQgYWxsIGFzc29jaWF0aW9ucyBvZiB0eXBlcyBzcGVjaWZpZWQgdG8gaW5jbHVkZXNcbiAgICBjb25zdCBuZXN0ZWQgPSBpbmNsdWRlLm5lc3RlZDtcbiAgICBpZiAobmVzdGVkKSB7XG4gICAgICBkZWxldGUgaW5jbHVkZS5uZXN0ZWQ7XG5cbiAgICAgIGlmICghaW5jbHVkZS5pbmNsdWRlKSB7XG4gICAgICAgIGluY2x1ZGUuaW5jbHVkZSA9IFtdO1xuICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShpbmNsdWRlLmluY2x1ZGUpKSB7XG4gICAgICAgIGluY2x1ZGUuaW5jbHVkZSA9IFtpbmNsdWRlLmluY2x1ZGVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVzZWQgPSBbXTtcbiAgICAoZnVuY3Rpb24gYWRkQWxsSW5jbHVkZXMocGFyZW50LCBpbmNsdWRlcykge1xuICAgICAgXy5mb3JFYWNoKHBhcmVudC5hc3NvY2lhdGlvbnMsIGFzc29jaWF0aW9uID0+IHtcbiAgICAgICAgaWYgKGFsbCAhPT0gdHJ1ZSAmJiAhYWxsLmluY2x1ZGVzKGFzc29jaWF0aW9uLmFzc29jaWF0aW9uVHlwZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBpZiBtb2RlbCBhbHJlYWR5IGluY2x1ZGVkLCBhbmQgc2tpcCBpZiBzb1xuICAgICAgICBjb25zdCBtb2RlbCA9IGFzc29jaWF0aW9uLnRhcmdldDtcbiAgICAgICAgY29uc3QgYXMgPSBhc3NvY2lhdGlvbi5vcHRpb25zLmFzO1xuXG4gICAgICAgIGNvbnN0IHByZWRpY2F0ZSA9IHsgbW9kZWwgfTtcbiAgICAgICAgaWYgKGFzKSB7XG4gICAgICAgICAgLy8gV2Ugb25seSBhZGQgJ2FzJyB0byB0aGUgcHJlZGljYXRlIGlmIGl0IGFjdHVhbGx5IGV4aXN0c1xuICAgICAgICAgIHByZWRpY2F0ZS5hcyA9IGFzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8uc29tZShpbmNsdWRlcywgcHJlZGljYXRlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNraXAgaWYgcmVjdXJzaW5nIG92ZXIgYSBtb2RlbCBhbHJlYWR5IG5lc3RlZFxuICAgICAgICBpZiAobmVzdGVkICYmIHVzZWQuaW5jbHVkZXMobW9kZWwpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHVzZWQucHVzaChwYXJlbnQpO1xuXG4gICAgICAgIC8vIGluY2x1ZGUgdGhpcyBtb2RlbFxuICAgICAgICBjb25zdCB0aGlzSW5jbHVkZSA9IFV0aWxzLmNsb25lRGVlcChpbmNsdWRlKTtcbiAgICAgICAgdGhpc0luY2x1ZGUubW9kZWwgPSBtb2RlbDtcbiAgICAgICAgaWYgKGFzKSB7XG4gICAgICAgICAgdGhpc0luY2x1ZGUuYXMgPSBhcztcbiAgICAgICAgfVxuICAgICAgICBpbmNsdWRlcy5wdXNoKHRoaXNJbmNsdWRlKTtcblxuICAgICAgICAvLyBydW4gcmVjdXJzaXZlbHkgaWYgbmVzdGVkXG4gICAgICAgIGlmIChuZXN0ZWQpIHtcbiAgICAgICAgICBhZGRBbGxJbmNsdWRlcyhtb2RlbCwgdGhpc0luY2x1ZGUuaW5jbHVkZSk7XG4gICAgICAgICAgaWYgKHRoaXNJbmNsdWRlLmluY2x1ZGUubGVuZ3RoID09PSAwKSBkZWxldGUgdGhpc0luY2x1ZGUuaW5jbHVkZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB1c2VkLnBvcCgpO1xuICAgIH0pKHRoaXMsIGluY2x1ZGVzKTtcbiAgfVxuXG4gIHN0YXRpYyBfdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzKG9wdGlvbnMsIHRhYmxlTmFtZXMpIHtcbiAgICBpZiAoIW9wdGlvbnMubW9kZWwpIG9wdGlvbnMubW9kZWwgPSB0aGlzO1xuXG4gICAgdGFibGVOYW1lcyA9IHRhYmxlTmFtZXMgfHwge307XG4gICAgb3B0aW9ucy5pbmNsdWRlTmFtZXMgPSBbXTtcbiAgICBvcHRpb25zLmluY2x1ZGVNYXAgPSB7fTtcblxuICAgIC8qIExlZ2FjeSAqL1xuICAgIG9wdGlvbnMuaGFzU2luZ2xlQXNzb2NpYXRpb24gPSBmYWxzZTtcbiAgICBvcHRpb25zLmhhc011bHRpQXNzb2NpYXRpb24gPSBmYWxzZTtcblxuICAgIGlmICghb3B0aW9ucy5wYXJlbnQpIHtcbiAgICAgIG9wdGlvbnMudG9wTW9kZWwgPSBvcHRpb25zLm1vZGVsO1xuICAgICAgb3B0aW9ucy50b3BMaW1pdCA9IG9wdGlvbnMubGltaXQ7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5pbmNsdWRlID0gb3B0aW9ucy5pbmNsdWRlLm1hcChpbmNsdWRlID0+IHtcbiAgICAgIGluY2x1ZGUgPSB0aGlzLl9jb25mb3JtSW5jbHVkZShpbmNsdWRlKTtcbiAgICAgIGluY2x1ZGUucGFyZW50ID0gb3B0aW9ucztcbiAgICAgIGluY2x1ZGUudG9wTGltaXQgPSBvcHRpb25zLnRvcExpbWl0O1xuXG4gICAgICB0aGlzLl92YWxpZGF0ZUluY2x1ZGVkRWxlbWVudC5jYWxsKG9wdGlvbnMubW9kZWwsIGluY2x1ZGUsIHRhYmxlTmFtZXMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoaW5jbHVkZS5kdXBsaWNhdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluY2x1ZGUuZHVwbGljYXRpbmcgPSBpbmNsdWRlLmFzc29jaWF0aW9uLmlzTXVsdGlBc3NvY2lhdGlvbjtcbiAgICAgIH1cblxuICAgICAgaW5jbHVkZS5oYXNEdXBsaWNhdGluZyA9IGluY2x1ZGUuaGFzRHVwbGljYXRpbmcgfHwgaW5jbHVkZS5kdXBsaWNhdGluZztcbiAgICAgIGluY2x1ZGUuaGFzUmVxdWlyZWQgPSBpbmNsdWRlLmhhc1JlcXVpcmVkIHx8IGluY2x1ZGUucmVxdWlyZWQ7XG5cbiAgICAgIG9wdGlvbnMuaGFzRHVwbGljYXRpbmcgPSBvcHRpb25zLmhhc0R1cGxpY2F0aW5nIHx8IGluY2x1ZGUuaGFzRHVwbGljYXRpbmc7XG4gICAgICBvcHRpb25zLmhhc1JlcXVpcmVkID0gb3B0aW9ucy5oYXNSZXF1aXJlZCB8fCBpbmNsdWRlLnJlcXVpcmVkO1xuXG4gICAgICBvcHRpb25zLmhhc1doZXJlID0gb3B0aW9ucy5oYXNXaGVyZSB8fCBpbmNsdWRlLmhhc1doZXJlIHx8ICEhaW5jbHVkZS53aGVyZTtcbiAgICAgIHJldHVybiBpbmNsdWRlO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBpbmNsdWRlIG9mIG9wdGlvbnMuaW5jbHVkZSkge1xuICAgICAgaW5jbHVkZS5oYXNQYXJlbnRXaGVyZSA9IG9wdGlvbnMuaGFzUGFyZW50V2hlcmUgfHwgISFvcHRpb25zLndoZXJlO1xuICAgICAgaW5jbHVkZS5oYXNQYXJlbnRSZXF1aXJlZCA9IG9wdGlvbnMuaGFzUGFyZW50UmVxdWlyZWQgfHwgISFvcHRpb25zLnJlcXVpcmVkO1xuXG4gICAgICBpZiAoaW5jbHVkZS5zdWJRdWVyeSAhPT0gZmFsc2UgJiYgb3B0aW9ucy5oYXNEdXBsaWNhdGluZyAmJiBvcHRpb25zLnRvcExpbWl0KSB7XG4gICAgICAgIGlmIChpbmNsdWRlLmR1cGxpY2F0aW5nKSB7XG4gICAgICAgICAgaW5jbHVkZS5zdWJRdWVyeSA9IGZhbHNlO1xuICAgICAgICAgIGluY2x1ZGUuc3ViUXVlcnlGaWx0ZXIgPSBpbmNsdWRlLmhhc1JlcXVpcmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluY2x1ZGUuc3ViUXVlcnkgPSBpbmNsdWRlLmhhc1JlcXVpcmVkO1xuICAgICAgICAgIGluY2x1ZGUuc3ViUXVlcnlGaWx0ZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jbHVkZS5zdWJRdWVyeSA9IGluY2x1ZGUuc3ViUXVlcnkgfHwgZmFsc2U7XG4gICAgICAgIGlmIChpbmNsdWRlLmR1cGxpY2F0aW5nKSB7XG4gICAgICAgICAgaW5jbHVkZS5zdWJRdWVyeUZpbHRlciA9IGluY2x1ZGUuc3ViUXVlcnk7XG4gICAgICAgICAgaW5jbHVkZS5zdWJRdWVyeSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluY2x1ZGUuc3ViUXVlcnlGaWx0ZXIgPSBmYWxzZTtcbiAgICAgICAgICBpbmNsdWRlLnN1YlF1ZXJ5ID0gaW5jbHVkZS5zdWJRdWVyeSB8fCBpbmNsdWRlLmhhc1BhcmVudFJlcXVpcmVkICYmIGluY2x1ZGUuaGFzUmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb3B0aW9ucy5pbmNsdWRlTWFwW2luY2x1ZGUuYXNdID0gaW5jbHVkZTtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZU5hbWVzLnB1c2goaW5jbHVkZS5hcyk7XG5cbiAgICAgIC8vIFNldCB0b3AgbGV2ZWwgb3B0aW9uc1xuICAgICAgaWYgKG9wdGlvbnMudG9wTW9kZWwgPT09IG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5zdWJRdWVyeSA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudG9wTGltaXQpIHtcbiAgICAgICAgaWYgKGluY2x1ZGUuc3ViUXVlcnkpIHtcbiAgICAgICAgICBvcHRpb25zLnN1YlF1ZXJ5ID0gaW5jbHVkZS5zdWJRdWVyeTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmNsdWRlLmhhc0R1cGxpY2F0aW5nKSB7XG4gICAgICAgICAgb3B0aW9ucy5zdWJRdWVyeSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogTGVnYWN5ICovXG4gICAgICBvcHRpb25zLmhhc0luY2x1ZGVXaGVyZSA9IG9wdGlvbnMuaGFzSW5jbHVkZVdoZXJlIHx8IGluY2x1ZGUuaGFzSW5jbHVkZVdoZXJlIHx8ICEhaW5jbHVkZS53aGVyZTtcbiAgICAgIG9wdGlvbnMuaGFzSW5jbHVkZVJlcXVpcmVkID0gb3B0aW9ucy5oYXNJbmNsdWRlUmVxdWlyZWQgfHwgaW5jbHVkZS5oYXNJbmNsdWRlUmVxdWlyZWQgfHwgISFpbmNsdWRlLnJlcXVpcmVkO1xuXG4gICAgICBpZiAoaW5jbHVkZS5hc3NvY2lhdGlvbi5pc011bHRpQXNzb2NpYXRpb24gfHwgaW5jbHVkZS5oYXNNdWx0aUFzc29jaWF0aW9uKSB7XG4gICAgICAgIG9wdGlvbnMuaGFzTXVsdGlBc3NvY2lhdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaW5jbHVkZS5hc3NvY2lhdGlvbi5pc1NpbmdsZUFzc29jaWF0aW9uIHx8IGluY2x1ZGUuaGFzU2luZ2xlQXNzb2NpYXRpb24pIHtcbiAgICAgICAgb3B0aW9ucy5oYXNTaW5nbGVBc3NvY2lhdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudG9wTW9kZWwgPT09IG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5zdWJRdWVyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLnN1YlF1ZXJ5ID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgc3RhdGljIF92YWxpZGF0ZUluY2x1ZGVkRWxlbWVudChpbmNsdWRlLCB0YWJsZU5hbWVzLCBvcHRpb25zKSB7XG4gICAgdGFibGVOYW1lc1tpbmNsdWRlLm1vZGVsLmdldFRhYmxlTmFtZSgpXSA9IHRydWU7XG5cbiAgICBpZiAoaW5jbHVkZS5hdHRyaWJ1dGVzICYmICFvcHRpb25zLnJhdykge1xuICAgICAgaW5jbHVkZS5tb2RlbC5fZXhwYW5kQXR0cmlidXRlcyhpbmNsdWRlKTtcblxuICAgICAgaW5jbHVkZS5vcmlnaW5hbEF0dHJpYnV0ZXMgPSB0aGlzLl9pbmplY3REZXBlbmRlbnRWaXJ0dWFsQXR0cmlidXRlcyhpbmNsdWRlLmF0dHJpYnV0ZXMpO1xuXG4gICAgICBpbmNsdWRlID0gVXRpbHMubWFwRmluZGVyT3B0aW9ucyhpbmNsdWRlLCBpbmNsdWRlLm1vZGVsKTtcblxuICAgICAgaWYgKGluY2x1ZGUuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgXy5lYWNoKGluY2x1ZGUubW9kZWwucHJpbWFyeUtleXMsIChhdHRyLCBrZXkpID0+IHtcbiAgICAgICAgICAvLyBJbmNsdWRlIHRoZSBwcmltYXJ5IGtleSBpZiBpdCdzIG5vdCBhbHJlYWR5IGluY2x1ZGVkIC0gdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGUgcGsgbWlnaHQgYmUgYWxpYXNlZCAoZHVlIHRvIGEgLmZpZWxkIHByb3ApXG4gICAgICAgICAgaWYgKCFpbmNsdWRlLmF0dHJpYnV0ZXMuc29tZShpbmNsdWRlQXR0ciA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0ci5maWVsZCAhPT0ga2V5KSB7XG4gICAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGluY2x1ZGVBdHRyKSAmJiBpbmNsdWRlQXR0clswXSA9PT0gYXR0ci5maWVsZCAmJiBpbmNsdWRlQXR0clsxXSA9PT0ga2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGVBdHRyID09PSBrZXk7XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgIGluY2x1ZGUuYXR0cmlidXRlcy51bnNoaWZ0KGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5jbHVkZSA9IFV0aWxzLm1hcEZpbmRlck9wdGlvbnMoaW5jbHVkZSwgaW5jbHVkZS5tb2RlbCk7XG4gICAgfVxuXG4gICAgLy8gcHNldWRvIGluY2x1ZGUganVzdCBuZWVkZWQgdGhlIGF0dHJpYnV0ZSBsb2dpYywgcmV0dXJuXG4gICAgaWYgKGluY2x1ZGUuX3BzZXVkbykge1xuICAgICAgaW5jbHVkZS5hdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMoaW5jbHVkZS5tb2RlbC50YWJsZUF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIFV0aWxzLm1hcEZpbmRlck9wdGlvbnMoaW5jbHVkZSwgaW5jbHVkZS5tb2RlbCk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgTW9kZWwgaXMgYWN0dWFsbHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXNzZWQgTW9kZWwgLSBvciBpdCdzIGEgcHNldWRvIGluY2x1ZGVcbiAgICBjb25zdCBhc3NvY2lhdGlvbiA9IGluY2x1ZGUuYXNzb2NpYXRpb24gfHwgdGhpcy5fZ2V0SW5jbHVkZWRBc3NvY2lhdGlvbihpbmNsdWRlLm1vZGVsLCBpbmNsdWRlLmFzKTtcblxuICAgIGluY2x1ZGUuYXNzb2NpYXRpb24gPSBhc3NvY2lhdGlvbjtcbiAgICBpbmNsdWRlLmFzID0gYXNzb2NpYXRpb24uYXM7XG5cbiAgICAvLyBJZiB0aHJvdWdoLCB3ZSBjcmVhdGUgYSBwc2V1ZG8gY2hpbGQgaW5jbHVkZSwgdG8gZWFzZSBvdXIgcGFyc2luZyBsYXRlciBvblxuICAgIGlmIChpbmNsdWRlLmFzc29jaWF0aW9uLnRocm91Z2ggJiYgT2JqZWN0KGluY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbCkgPT09IGluY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbCkge1xuICAgICAgaWYgKCFpbmNsdWRlLmluY2x1ZGUpIGluY2x1ZGUuaW5jbHVkZSA9IFtdO1xuICAgICAgY29uc3QgdGhyb3VnaCA9IGluY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaDtcblxuICAgICAgaW5jbHVkZS50aHJvdWdoID0gXy5kZWZhdWx0cyhpbmNsdWRlLnRocm91Z2ggfHwge30sIHtcbiAgICAgICAgbW9kZWw6IHRocm91Z2gubW9kZWwsXG4gICAgICAgIGFzOiB0aHJvdWdoLm1vZGVsLm5hbWUsXG4gICAgICAgIGFzc29jaWF0aW9uOiB7XG4gICAgICAgICAgaXNTaW5nbGVBc3NvY2lhdGlvbjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBfcHNldWRvOiB0cnVlLFxuICAgICAgICBwYXJlbnQ6IGluY2x1ZGVcbiAgICAgIH0pO1xuXG5cbiAgICAgIGlmICh0aHJvdWdoLnNjb3BlKSB7XG4gICAgICAgIGluY2x1ZGUudGhyb3VnaC53aGVyZSA9IGluY2x1ZGUudGhyb3VnaC53aGVyZSA/IHsgW09wLmFuZF06IFtpbmNsdWRlLnRocm91Z2gud2hlcmUsIHRocm91Z2guc2NvcGVdIH0gOiB0aHJvdWdoLnNjb3BlO1xuICAgICAgfVxuXG4gICAgICBpbmNsdWRlLmluY2x1ZGUucHVzaChpbmNsdWRlLnRocm91Z2gpO1xuICAgICAgdGFibGVOYW1lc1t0aHJvdWdoLnRhYmxlTmFtZV0gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGluY2x1ZGUubW9kZWwgbWF5IGJlIHRoZSBtYWluIG1vZGVsLCB3aGlsZSB0aGUgYXNzb2NpYXRpb24gdGFyZ2V0IG1heSBiZSBzY29wZWQgLSB0aHVzIHdlIG5lZWQgdG8gbG9vayBhdCBhc3NvY2lhdGlvbi50YXJnZXQvc291cmNlXG4gICAgbGV0IG1vZGVsO1xuICAgIGlmIChpbmNsdWRlLm1vZGVsLnNjb3BlZCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gSWYgdGhlIHBhc3NlZCBtb2RlbCBpcyBhbHJlYWR5IHNjb3BlZCwga2VlcCB0aGF0XG4gICAgICBtb2RlbCA9IGluY2x1ZGUubW9kZWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIG1vZGVsIHRoYXQgd2FzIG9yaWdpbmFsbHkgcGFzc2VkIHRvIHRoZSBhc3NvY2lhdGlvblxuICAgICAgbW9kZWwgPSBpbmNsdWRlLmFzc29jaWF0aW9uLnRhcmdldC5uYW1lID09PSBpbmNsdWRlLm1vZGVsLm5hbWUgPyBpbmNsdWRlLmFzc29jaWF0aW9uLnRhcmdldCA6IGluY2x1ZGUuYXNzb2NpYXRpb24uc291cmNlO1xuICAgIH1cblxuICAgIG1vZGVsLl9pbmplY3RTY29wZShpbmNsdWRlKTtcblxuICAgIC8vIFRoaXMgY2hlY2sgc2hvdWxkIGhhcHBlbiBhZnRlciBpbmplY3RpbmcgdGhlIHNjb3BlLCBzaW5jZSB0aGUgc2NvcGUgbWF5IGNvbnRhaW4gYSAuYXR0cmlidXRlc1xuICAgIGlmICghaW5jbHVkZS5hdHRyaWJ1dGVzKSB7XG4gICAgICBpbmNsdWRlLmF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhpbmNsdWRlLm1vZGVsLnRhYmxlQXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgaW5jbHVkZSA9IFV0aWxzLm1hcEZpbmRlck9wdGlvbnMoaW5jbHVkZSwgaW5jbHVkZS5tb2RlbCk7XG5cbiAgICBpZiAoaW5jbHVkZS5yZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmNsdWRlLnJlcXVpcmVkID0gISFpbmNsdWRlLndoZXJlO1xuICAgIH1cblxuICAgIGlmIChpbmNsdWRlLmFzc29jaWF0aW9uLnNjb3BlKSB7XG4gICAgICBpbmNsdWRlLndoZXJlID0gaW5jbHVkZS53aGVyZSA/IHsgW09wLmFuZF06IFtpbmNsdWRlLndoZXJlLCBpbmNsdWRlLmFzc29jaWF0aW9uLnNjb3BlXSB9IDogaW5jbHVkZS5hc3NvY2lhdGlvbi5zY29wZTtcbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZS5saW1pdCAmJiBpbmNsdWRlLnNlcGFyYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGluY2x1ZGUuc2VwYXJhdGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpbmNsdWRlLnNlcGFyYXRlID09PSB0cnVlKSB7XG4gICAgICBpZiAoIShpbmNsdWRlLmFzc29jaWF0aW9uIGluc3RhbmNlb2YgSGFzTWFueSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IEhhc01hbnkgYXNzb2NpYXRpb25zIHN1cHBvcnQgaW5jbHVkZS5zZXBhcmF0ZScpO1xuICAgICAgfVxuXG4gICAgICBpbmNsdWRlLmR1cGxpY2F0aW5nID0gZmFsc2U7XG5cbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzXG4gICAgICAgICYmIG9wdGlvbnMuYXR0cmlidXRlcy5sZW5ndGhcbiAgICAgICAgJiYgIV8uZmxhdHRlbkRlcHRoKG9wdGlvbnMuYXR0cmlidXRlcywgMikuaW5jbHVkZXMoYXNzb2NpYXRpb24uc291cmNlS2V5KVxuICAgICAgKSB7XG4gICAgICAgIG9wdGlvbnMuYXR0cmlidXRlcy5wdXNoKGFzc29jaWF0aW9uLnNvdXJjZUtleSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgaW5jbHVkZS5hdHRyaWJ1dGVzXG4gICAgICAgICYmIGluY2x1ZGUuYXR0cmlidXRlcy5sZW5ndGhcbiAgICAgICAgJiYgIV8uZmxhdHRlbkRlcHRoKGluY2x1ZGUuYXR0cmlidXRlcywgMikuaW5jbHVkZXMoYXNzb2NpYXRpb24uZm9yZWlnbktleSlcbiAgICAgICkge1xuICAgICAgICBpbmNsdWRlLmF0dHJpYnV0ZXMucHVzaChhc3NvY2lhdGlvbi5mb3JlaWduS2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBjaGlsZCBpbmNsdWRlc1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5jbHVkZSwgJ2luY2x1ZGUnKSkge1xuICAgICAgdGhpcy5fdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzLmNhbGwoaW5jbHVkZS5tb2RlbCwgaW5jbHVkZSwgdGFibGVOYW1lcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluY2x1ZGU7XG4gIH1cblxuICBzdGF0aWMgX2dldEluY2x1ZGVkQXNzb2NpYXRpb24odGFyZ2V0TW9kZWwsIHRhcmdldEFsaWFzKSB7XG4gICAgY29uc3QgYXNzb2NpYXRpb25zID0gdGhpcy5nZXRBc3NvY2lhdGlvbnModGFyZ2V0TW9kZWwpO1xuICAgIGxldCBhc3NvY2lhdGlvbiA9IG51bGw7XG4gICAgaWYgKGFzc29jaWF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuRWFnZXJMb2FkaW5nRXJyb3IoYCR7dGFyZ2V0TW9kZWwubmFtZX0gaXMgbm90IGFzc29jaWF0ZWQgdG8gJHt0aGlzLm5hbWV9IWApO1xuICAgIH1cbiAgICBpZiAoYXNzb2NpYXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgYXNzb2NpYXRpb24gPSB0aGlzLmdldEFzc29jaWF0aW9uRm9yQWxpYXModGFyZ2V0TW9kZWwsIHRhcmdldEFsaWFzKTtcbiAgICAgIGlmIChhc3NvY2lhdGlvbikge1xuICAgICAgICByZXR1cm4gYXNzb2NpYXRpb247XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0QWxpYXMpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdBbGlhc2VzID0gdGhpcy5nZXRBc3NvY2lhdGlvbnModGFyZ2V0TW9kZWwpLm1hcChhc3NvY2lhdGlvbiA9PiBhc3NvY2lhdGlvbi5hcyk7XG4gICAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuRWFnZXJMb2FkaW5nRXJyb3IoYCR7dGFyZ2V0TW9kZWwubmFtZX0gaXMgYXNzb2NpYXRlZCB0byAke3RoaXMubmFtZX0gdXNpbmcgYW4gYWxpYXMuIGAgK1xuICAgICAgICAgIGBZb3UndmUgaW5jbHVkZWQgYW4gYWxpYXMgKCR7dGFyZ2V0QWxpYXN9KSwgYnV0IGl0IGRvZXMgbm90IG1hdGNoIHRoZSBhbGlhcyhlcykgZGVmaW5lZCBpbiB5b3VyIGFzc29jaWF0aW9uICgke2V4aXN0aW5nQWxpYXNlcy5qb2luKCcsICcpfSkuYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLkVhZ2VyTG9hZGluZ0Vycm9yKGAke3RhcmdldE1vZGVsLm5hbWV9IGlzIGFzc29jaWF0ZWQgdG8gJHt0aGlzLm5hbWV9IHVzaW5nIGFuIGFsaWFzLiBgICtcbiAgICAgICAgJ1lvdSBtdXN0IHVzZSB0aGUgXFwnYXNcXCcga2V5d29yZCB0byBzcGVjaWZ5IHRoZSBhbGlhcyB3aXRoaW4geW91ciBpbmNsdWRlIHN0YXRlbWVudC4nKTtcbiAgICB9XG4gICAgYXNzb2NpYXRpb24gPSB0aGlzLmdldEFzc29jaWF0aW9uRm9yQWxpYXModGFyZ2V0TW9kZWwsIHRhcmdldEFsaWFzKTtcbiAgICBpZiAoIWFzc29jaWF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLkVhZ2VyTG9hZGluZ0Vycm9yKGAke3RhcmdldE1vZGVsLm5hbWV9IGlzIGFzc29jaWF0ZWQgdG8gJHt0aGlzLm5hbWV9IG11bHRpcGxlIHRpbWVzLiBgICtcbiAgICAgICAgJ1RvIGlkZW50aWZ5IHRoZSBjb3JyZWN0IGFzc29jaWF0aW9uLCB5b3UgbXVzdCB1c2UgdGhlIFxcJ2FzXFwnIGtleXdvcmQgdG8gc3BlY2lmeSB0aGUgYWxpYXMgb2YgdGhlIGFzc29jaWF0aW9uIHlvdSB3YW50IHRvIGluY2x1ZGUuJyk7XG4gICAgfVxuICAgIHJldHVybiBhc3NvY2lhdGlvbjtcbiAgfVxuXG5cbiAgc3RhdGljIF9leHBhbmRJbmNsdWRlQWxsKG9wdGlvbnMpIHtcbiAgICBjb25zdCBpbmNsdWRlcyA9IG9wdGlvbnMuaW5jbHVkZTtcbiAgICBpZiAoIWluY2x1ZGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGluY2x1ZGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgaW5jbHVkZSA9IGluY2x1ZGVzW2luZGV4XTtcblxuICAgICAgaWYgKGluY2x1ZGUuYWxsKSB7XG4gICAgICAgIGluY2x1ZGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGluZGV4LS07XG5cbiAgICAgICAgdGhpcy5fZXhwYW5kSW5jbHVkZUFsbEVsZW1lbnQoaW5jbHVkZXMsIGluY2x1ZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluY2x1ZGVzLmZvckVhY2goaW5jbHVkZSA9PiB7XG4gICAgICB0aGlzLl9leHBhbmRJbmNsdWRlQWxsLmNhbGwoaW5jbHVkZS5tb2RlbCwgaW5jbHVkZSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2NvbmZvcm1JbmRleChpbmRleCkge1xuICAgIGlmICghaW5kZXguZmllbGRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgXCJmaWVsZHNcIiBwcm9wZXJ0eSBmb3IgaW5kZXggZGVmaW5pdGlvbicpO1xuICAgIH1cblxuICAgIGluZGV4ID0gXy5kZWZhdWx0cyhpbmRleCwge1xuICAgICAgdHlwZTogJycsXG4gICAgICBwYXJzZXI6IG51bGxcbiAgICB9KTtcblxuICAgIGlmIChpbmRleC50eXBlICYmIGluZGV4LnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ3VuaXF1ZScpIHtcbiAgICAgIGluZGV4LnVuaXF1ZSA9IHRydWU7XG4gICAgICBkZWxldGUgaW5kZXgudHlwZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuXG4gIHN0YXRpYyBfdW5pcUluY2x1ZGVzKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMuaW5jbHVkZSkgcmV0dXJuO1xuXG4gICAgb3B0aW9ucy5pbmNsdWRlID0gXyhvcHRpb25zLmluY2x1ZGUpXG4gICAgICAuZ3JvdXBCeShpbmNsdWRlID0+IGAke2luY2x1ZGUubW9kZWwgJiYgaW5jbHVkZS5tb2RlbC5uYW1lfS0ke2luY2x1ZGUuYXN9YClcbiAgICAgIC5tYXAoaW5jbHVkZXMgPT4gdGhpcy5fYXNzaWduT3B0aW9ucyguLi5pbmNsdWRlcykpXG4gICAgICAudmFsdWUoKTtcbiAgfVxuXG4gIHN0YXRpYyBfYmFzZU1lcmdlKC4uLmFyZ3MpIHtcbiAgICBfLmFzc2lnbldpdGgoLi4uYXJncyk7XG4gICAgdGhpcy5fY29uZm9ybUluY2x1ZGVzKGFyZ3NbMF0sIHRoaXMpO1xuICAgIHRoaXMuX3VuaXFJbmNsdWRlcyhhcmdzWzBdKTtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHN0YXRpYyBfbWVyZ2VGdW5jdGlvbihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9ialZhbHVlKSAmJiBBcnJheS5pc0FycmF5KHNyY1ZhbHVlKSkge1xuICAgICAgcmV0dXJuIF8udW5pb24ob2JqVmFsdWUsIHNyY1ZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGtleSA9PT0gJ3doZXJlJyB8fCBrZXkgPT09ICdoYXZpbmcnKSB7XG4gICAgICBpZiAoc3JjVmFsdWUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QpIHtcbiAgICAgICAgc3JjVmFsdWUgPSB7IFtPcC5hbmRdOiBzcmNWYWx1ZSB9O1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChvYmpWYWx1ZSkgJiYgXy5pc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvYmpWYWx1ZSwgc3JjVmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYXR0cmlidXRlcycgJiYgXy5pc1BsYWluT2JqZWN0KG9ialZhbHVlKSAmJiBfLmlzUGxhaW5PYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICByZXR1cm4gXy5hc3NpZ25XaXRoKG9ialZhbHVlLCBzcmNWYWx1ZSwgKG9ialZhbHVlLCBzcmNWYWx1ZSkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmpWYWx1ZSkgJiYgQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gXy51bmlvbihvYmpWYWx1ZSwgc3JjVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gSWYgd2UgaGF2ZSBhIHBvc3NpYmxlIG9iamVjdC9hcnJheSB0byBjbG9uZSwgd2UgdHJ5IGl0LlxuICAgIC8vIE90aGVyd2lzZSwgd2UgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZSB3aGVuIGl0J3Mgbm90IHVuZGVmaW5lZCxcbiAgICAvLyBvciB0aGUgcmVzdWx0aW5nIG9iamVjdCBpbiB0aGF0IGNhc2UuXG4gICAgaWYgKHNyY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gVXRpbHMuY2xvbmVEZWVwKHNyY1ZhbHVlLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHNyY1ZhbHVlID09PSB1bmRlZmluZWQgPyBvYmpWYWx1ZSA6IHNyY1ZhbHVlO1xuICB9XG5cbiAgc3RhdGljIF9hc3NpZ25PcHRpb25zKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5fYmFzZU1lcmdlKC4uLmFyZ3MsIHRoaXMuX21lcmdlRnVuY3Rpb24pO1xuICB9XG5cbiAgc3RhdGljIF9kZWZhdWx0c09wdGlvbnModGFyZ2V0LCBvcHRzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Jhc2VNZXJnZSh0YXJnZXQsIG9wdHMsIChzcmNWYWx1ZSwgb2JqVmFsdWUsIGtleSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX21lcmdlRnVuY3Rpb24ob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBtb2RlbCwgcmVwcmVzZW50aW5nIGEgdGFibGUgaW4gdGhlIERCLCB3aXRoIGF0dHJpYnV0ZXMgYW5kIG9wdGlvbnMuXG4gICAqXG4gICAqIFRoZSB0YWJsZSBjb2x1bW5zIGFyZSBkZWZpbmVkIGJ5IHRoZSBoYXNoIHRoYXQgaXMgZ2l2ZW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuICAgKiBFYWNoIGF0dHJpYnV0ZSBvZiB0aGUgaGFzaCByZXByZXNlbnRzIGEgY29sdW1uLlxuICAgKlxuICAgKiBGb3IgbW9yZSBhYm91dCA8YSBocmVmPVwiL21hbnVhbC90dXRvcmlhbC9tb2RlbHMtZGVmaW5pdGlvbi5odG1sI3ZhbGlkYXRpb25zXCIvPlZhbGlkYXRpb25zPC9hPlxuICAgKlxuICAgKiBNb3JlIGV4YW1wbGVzLCA8YSBocmVmPVwiL21hbnVhbC90dXRvcmlhbC9tb2RlbHMtZGVmaW5pdGlvbi5odG1sXCIvPk1vZGVsIERlZmluaXRpb248L2E+XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIFByb2plY3QuaW5pdCh7XG4gICAqICAgY29sdW1uQToge1xuICAgKiAgICAgdHlwZTogU2VxdWVsaXplLkJPT0xFQU4sXG4gICAqICAgICB2YWxpZGF0ZToge1xuICAgKiAgICAgICBpczogWydbYS16XScsJ2knXSwgICAgICAgIC8vIHdpbGwgb25seSBhbGxvdyBsZXR0ZXJzXG4gICAqICAgICAgIG1heDogMjMsICAgICAgICAgICAgICAgICAgLy8gb25seSBhbGxvdyB2YWx1ZXMgPD0gMjNcbiAgICogICAgICAgaXNJbjoge1xuICAgKiAgICAgICAgIGFyZ3M6IFtbJ2VuJywgJ3poJ11dLFxuICAgKiAgICAgICAgIG1zZzogXCJNdXN0IGJlIEVuZ2xpc2ggb3IgQ2hpbmVzZVwiXG4gICAqICAgICAgIH1cbiAgICogICAgIH0sXG4gICAqICAgICBmaWVsZDogJ2NvbHVtbl9hJ1xuICAgKiAgICAgLy8gT3RoZXIgYXR0cmlidXRlcyBoZXJlXG4gICAqICAgfSxcbiAgICogICBjb2x1bW5COiBTZXF1ZWxpemUuU1RSSU5HLFxuICAgKiAgIGNvbHVtbkM6ICdNWSBWRVJZIE9XTiBDT0xVTU4gVFlQRSdcbiAgICogfSwge3NlcXVlbGl6ZX0pXG4gICAqXG4gICAqIHNlcXVlbGl6ZS5tb2RlbHMubW9kZWxOYW1lIC8vIFRoZSBtb2RlbCB3aWxsIG5vdyBiZSBhdmFpbGFibGUgaW4gbW9kZWxzIHVuZGVyIHRoZSBjbGFzcyBuYW1lXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIERhdGFUeXBlc31cbiAgICogQHNlZVxuICAgKiB7QGxpbmsgSG9va3N9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgQW4gb2JqZWN0LCB3aGVyZSBlYWNoIGF0dHJpYnV0ZSBpcyBhIGNvbHVtbiBvZiB0aGUgdGFibGUuIEVhY2ggY29sdW1uIGNhbiBiZSBlaXRoZXIgYSBEYXRhVHlwZSwgYSBzdHJpbmcgb3IgYSB0eXBlLWRlc2NyaXB0aW9uIG9iamVjdCwgd2l0aCB0aGUgcHJvcGVydGllcyBkZXNjcmliZWQgYmVsb3c6XG4gICAqIEBwYXJhbSB7c3RyaW5nfERhdGFUeXBlc3xPYmplY3R9IGF0dHJpYnV0ZXMuY29sdW1uIFRoZSBkZXNjcmlwdGlvbiBvZiBhIGRhdGFiYXNlIGNvbHVtblxuICAgKiBAcGFyYW0ge3N0cmluZ3xEYXRhVHlwZXN9ICAgICAgICBhdHRyaWJ1dGVzLmNvbHVtbi50eXBlIEEgc3RyaW5nIG9yIGEgZGF0YSB0eXBlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbHVtbi5hbGxvd051bGw9dHJ1ZV0gSWYgZmFsc2UsIHRoZSBjb2x1bW4gd2lsbCBoYXZlIGEgTk9UIE5VTEwgY29uc3RyYWludCwgYW5kIGEgbm90IG51bGwgdmFsaWRhdGlvbiB3aWxsIGJlIHJ1biBiZWZvcmUgYW4gaW5zdGFuY2UgaXMgc2F2ZWQuXG4gICAqIEBwYXJhbSB7YW55fSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbHVtbi5kZWZhdWx0VmFsdWU9bnVsbF0gQSBsaXRlcmFsIGRlZmF1bHQgdmFsdWUsIGEgSmF2YVNjcmlwdCBmdW5jdGlvbiwgb3IgYW4gU1FMIGZ1bmN0aW9uIChzZWUgYHNlcXVlbGl6ZS5mbmApXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59ICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbHVtbi51bmlxdWU9ZmFsc2VdIElmIHRydWUsIHRoZSBjb2x1bW4gd2lsbCBnZXQgYSB1bmlxdWUgY29uc3RyYWludC4gSWYgYSBzdHJpbmcgaXMgcHJvdmlkZWQsIHRoZSBjb2x1bW4gd2lsbCBiZSBwYXJ0IG9mIGEgY29tcG9zaXRlIHVuaXF1ZSBpbmRleC4gSWYgbXVsdGlwbGUgY29sdW1ucyBoYXZlIHRoZSBzYW1lIHN0cmluZywgdGhleSB3aWxsIGJlIHBhcnQgb2YgdGhlIHNhbWUgdW5pcXVlIGluZGV4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbHVtbi5wcmltYXJ5S2V5PWZhbHNlXSBJZiB0cnVlLCB0aGlzIGF0dHJpYnV0ZSB3aWxsIGJlIG1hcmtlZCBhcyBwcmltYXJ5IGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4uZmllbGQ9bnVsbF0gSWYgc2V0LCBzZXF1ZWxpemUgd2lsbCBtYXAgdGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGEgZGlmZmVyZW50IG5hbWUgaW4gdGhlIGRhdGFiYXNlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbHVtbi5hdXRvSW5jcmVtZW50PWZhbHNlXSBJZiB0cnVlLCB0aGlzIGNvbHVtbiB3aWxsIGJlIHNldCB0byBhdXRvIGluY3JlbWVudFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4uYXV0b0luY3JlbWVudElkZW50aXR5PWZhbHNlXSBJZiB0cnVlLCBjb21iaW5lZCB3aXRoIGF1dG9JbmNyZW1lbnQ9dHJ1ZSwgd2lsbCB1c2UgUG9zdGdyZXMgYEdFTkVSQVRFRCBCWSBERUZBVUxUIEFTIElERU5USVRZYCBpbnN0ZWFkIG9mIGBTRVJJQUxgLiBQb3N0Z3JlcyAxMCsgb25seS5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29sdW1uLmNvbW1lbnQ9bnVsbF0gQ29tbWVudCBmb3IgdGhpcyBjb2x1bW5cbiAgICogQHBhcmFtIHtzdHJpbmd8TW9kZWx9ICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29sdW1uLnJlZmVyZW5jZXM9bnVsbF0gQW4gb2JqZWN0IHdpdGggcmVmZXJlbmNlIGNvbmZpZ3VyYXRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfE1vZGVsfSAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbHVtbi5yZWZlcmVuY2VzLm1vZGVsXSBJZiB0aGlzIGNvbHVtbiByZWZlcmVuY2VzIGFub3RoZXIgdGFibGUsIHByb3ZpZGUgaXQgaGVyZSBhcyBhIE1vZGVsLCBvciBhIHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4ucmVmZXJlbmNlcy5rZXk9J2lkJ10gVGhlIGNvbHVtbiBvZiB0aGUgZm9yZWlnbiB0YWJsZSB0aGF0IHRoaXMgY29sdW1uIHJlZmVyZW5jZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29sdW1uLm9uVXBkYXRlXSBXaGF0IHNob3VsZCBoYXBwZW4gd2hlbiB0aGUgcmVmZXJlbmNlZCBrZXkgaXMgdXBkYXRlZC4gT25lIG9mIENBU0NBREUsIFJFU1RSSUNULCBTRVQgREVGQVVMVCwgU0VUIE5VTEwgb3IgTk8gQUNUSU9OXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbHVtbi5vbkRlbGV0ZV0gV2hhdCBzaG91bGQgaGFwcGVuIHdoZW4gdGhlIHJlZmVyZW5jZWQga2V5IGlzIGRlbGV0ZWQuIE9uZSBvZiBDQVNDQURFLCBSRVNUUklDVCwgU0VUIERFRkFVTFQsIFNFVCBOVUxMIG9yIE5PIEFDVElPTlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb2x1bW4uZ2V0XSBQcm92aWRlIGEgY3VzdG9tIGdldHRlciBmb3IgdGhpcyBjb2x1bW4uIFVzZSBgdGhpcy5nZXREYXRhVmFsdWUoU3RyaW5nKWAgdG8gbWFuaXB1bGF0ZSB0aGUgdW5kZXJseWluZyB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259ICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbHVtbi5zZXRdIFByb3ZpZGUgYSBjdXN0b20gc2V0dGVyIGZvciB0aGlzIGNvbHVtbi4gVXNlIGB0aGlzLnNldERhdGFWYWx1ZShTdHJpbmcsIFZhbHVlKWAgdG8gbWFuaXB1bGF0ZSB0aGUgdW5kZXJseWluZyB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbHVtbi52YWxpZGF0ZV0gQW4gb2JqZWN0IG9mIHZhbGlkYXRpb25zIHRvIGV4ZWN1dGUgZm9yIHRoaXMgY29sdW1uIGV2ZXJ5IHRpbWUgdGhlIG1vZGVsIGlzIHNhdmVkLiBDYW4gYmUgZWl0aGVyIHRoZSBuYW1lIG9mIGEgdmFsaWRhdGlvbiBwcm92aWRlZCBieSB2YWxpZGF0b3IuanMsIGEgdmFsaWRhdGlvbiBmdW5jdGlvbiBwcm92aWRlZCBieSBleHRlbmRpbmcgdmFsaWRhdG9yLmpzIChzZWUgdGhlIGBEQU9WYWxpZGF0b3JgIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMpLCBvciBhIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBDdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgYW5kIHRoZSBpbnN0YW5jZSBpdHNlbGYgYXMgdGhlIGB0aGlzYCBiaW5kaW5nLCBhbmQgY2FuIHBvc3NpYmx5IHRha2UgYSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQsIHRvIHNpZ25hbCB0aGF0IHRoZXkgYXJlIGFzeW5jaHJvbm91cy4gSWYgdGhlIHZhbGlkYXRvciBpcyBzeW5jLCBpdCBzaG91bGQgdGhyb3cgaW4gdGhlIGNhc2Ugb2YgYSBmYWlsZWQgdmFsaWRhdGlvbjsgaWYgaXQgaXMgYXN5bmMsIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGVycm9yIHRleHQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgICAgIG9wdGlvbnMgVGhlc2Ugb3B0aW9ucyBhcmUgbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHQgZGVmaW5lIG9wdGlvbnMgcHJvdmlkZWQgdG8gdGhlIFNlcXVlbGl6ZSBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBvcHRpb25zLnNlcXVlbGl6ZSBEZWZpbmUgdGhlIHNlcXVlbGl6ZSBpbnN0YW5jZSB0byBhdHRhY2ggdG8gdGhlIG5ldyBNb2RlbC4gVGhyb3cgZXJyb3IgaWYgbm9uZSBpcyBwcm92aWRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMubW9kZWxOYW1lXSBTZXQgbmFtZSBvZiB0aGUgbW9kZWwuIEJ5IGRlZmF1bHQgaXRzIHNhbWUgYXMgQ2xhc3MgbmFtZS5cbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMuZGVmYXVsdFNjb3BlPXt9XSBEZWZpbmUgdGhlIGRlZmF1bHQgc2VhcmNoIHNjb3BlIHRvIHVzZSBmb3IgdGhpcyBtb2RlbC4gU2NvcGVzIGhhdmUgdGhlIHNhbWUgZm9ybSBhcyB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gZmluZCAvIGZpbmRBbGxcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMuc2NvcGVzXSBNb3JlIHNjb3BlcywgZGVmaW5lZCBpbiB0aGUgc2FtZSB3YXkgYXMgZGVmYXVsdFNjb3BlIGFib3ZlLiBTZWUgYE1vZGVsLnNjb3BlYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgc2NvcGVzIGFyZSBkZWZpbmVkLCBhbmQgd2hhdCB5b3UgY2FuIGRvIHdpdGggdGhlbVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICBbb3B0aW9ucy5vbWl0TnVsbF0gRG9uJ3QgcGVyc2lzdCBudWxsIHZhbHVlcy4gVGhpcyBtZWFucyB0aGF0IGFsbCBjb2x1bW5zIHdpdGggbnVsbCB2YWx1ZXMgd2lsbCBub3QgYmUgc2F2ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgW29wdGlvbnMudGltZXN0YW1wcz10cnVlXSBBZGRzIGNyZWF0ZWRBdCBhbmQgdXBkYXRlZEF0IHRpbWVzdGFtcHMgdG8gdGhlIG1vZGVsLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICBbb3B0aW9ucy5wYXJhbm9pZD1mYWxzZV0gQ2FsbGluZyBgZGVzdHJveWAgd2lsbCBub3QgZGVsZXRlIHRoZSBtb2RlbCwgYnV0IGluc3RlYWQgc2V0IGEgYGRlbGV0ZWRBdGAgdGltZXN0YW1wIGlmIHRoaXMgaXMgdHJ1ZS4gTmVlZHMgYHRpbWVzdGFtcHM9dHJ1ZWAgdG8gd29ya1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICBbb3B0aW9ucy51bmRlcnNjb3JlZD1mYWxzZV0gQWRkIHVuZGVyc2NvcmVkIGZpZWxkIHRvIGFsbCBhdHRyaWJ1dGVzLCB0aGlzIGNvdmVycyB1c2VyIGRlZmluZWQgYXR0cmlidXRlcywgdGltZXN0YW1wcyBhbmQgZm9yZWlnbiBrZXlzLiBXaWxsIG5vdCBhZmZlY3QgYXR0cmlidXRlcyB3aXRoIGV4cGxpY2l0bHkgc2V0IGBmaWVsZGAgb3B0aW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgIFtvcHRpb25zLmZyZWV6ZVRhYmxlTmFtZT1mYWxzZV0gSWYgZnJlZXplVGFibGVOYW1lIGlzIHRydWUsIHNlcXVlbGl6ZSB3aWxsIG5vdCB0cnkgdG8gYWx0ZXIgdGhlIG1vZGVsIG5hbWUgdG8gZ2V0IHRoZSB0YWJsZSBuYW1lLiBPdGhlcndpc2UsIHRoZSBtb2RlbCBuYW1lIHdpbGwgYmUgcGx1cmFsaXplZFxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBbb3B0aW9ucy5uYW1lXSBBbiBvYmplY3Qgd2l0aCB0d28gYXR0cmlidXRlcywgYHNpbmd1bGFyYCBhbmQgYHBsdXJhbGAsIHdoaWNoIGFyZSB1c2VkIHdoZW4gdGhpcyBtb2RlbCBpcyBhc3NvY2lhdGVkIHRvIG90aGVycy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMubmFtZS5zaW5ndWxhcj1VdGlscy5zaW5ndWxhcml6ZShtb2RlbE5hbWUpXSBTaW5ndWxhciBuYW1lIGZvciBtb2RlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbb3B0aW9ucy5uYW1lLnBsdXJhbD1VdGlscy5wbHVyYWxpemUobW9kZWxOYW1lKV0gUGx1cmFsIG5hbWUgZm9yIG1vZGVsXG4gICAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gICAgICAgICAgIFtvcHRpb25zLmluZGV4ZXNdIGluZGV4ZXMgZGVmaW5pdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5kZXhlc1tdLm5hbWVdIFRoZSBuYW1lIG9mIHRoZSBpbmRleC4gRGVmYXVsdHMgdG8gbW9kZWwgbmFtZSArIF8gKyBmaWVsZHMgY29uY2F0ZW5hdGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluZGV4ZXNbXS50eXBlXSBJbmRleCB0eXBlLiBPbmx5IHVzZWQgYnkgbXlzcWwuIE9uZSBvZiBgVU5JUVVFYCwgYEZVTExURVhUYCBhbmQgYFNQQVRJQUxgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluZGV4ZXNbXS51c2luZ10gVGhlIG1ldGhvZCB0byBjcmVhdGUgdGhlIGluZGV4IGJ5IChgVVNJTkdgIHN0YXRlbWVudCBpbiBTUUwpLiBCVFJFRSBhbmQgSEFTSCBhcmUgc3VwcG9ydGVkIGJ5IG15c3FsIGFuZCBwb3N0Z3JlcywgYW5kIHBvc3RncmVzIGFkZGl0aW9uYWxseSBzdXBwb3J0cyBHSVNUIGFuZCBHSU4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluZGV4ZXNbXS5vcGVyYXRvcl0gU3BlY2lmeSBpbmRleCBvcGVyYXRvci5cbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5kZXhlc1tdLnVuaXF1ZT1mYWxzZV0gU2hvdWxkIHRoZSBpbmRleCBieSB1bmlxdWU/IENhbiBhbHNvIGJlIHRyaWdnZXJlZCBieSBzZXR0aW5nIHR5cGUgdG8gYFVOSVFVRWBcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5kZXhlc1tdLmNvbmN1cnJlbnRseT1mYWxzZV0gUG9zdGdyZXNTUUwgd2lsbCBidWlsZCB0aGUgaW5kZXggd2l0aG91dCB0YWtpbmcgYW55IHdyaXRlIGxvY2tzLiBQb3N0Z3JlcyBvbmx5XG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nfE9iamVjdD59ICAgIFtvcHRpb25zLmluZGV4ZXNbXS5maWVsZHNdIEFuIGFycmF5IG9mIHRoZSBmaWVsZHMgdG8gaW5kZXguIEVhY2ggZmllbGQgY2FuIGVpdGhlciBiZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCwgYSBzZXF1ZWxpemUgb2JqZWN0IChlLmcgYHNlcXVlbGl6ZS5mbmApLCBvciBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6IGBhdHRyaWJ1dGVgIChmaWVsZCBuYW1lKSwgYGxlbmd0aGAgKGNyZWF0ZSBhIHByZWZpeCBpbmRleCBvZiBsZW5ndGggY2hhcnMpLCBgb3JkZXJgICh0aGUgZGlyZWN0aW9uIHRoZSBjb2x1bW4gc2hvdWxkIGJlIHNvcnRlZCBpbiksIGBjb2xsYXRlYCAodGhlIGNvbGxhdGlvbiAoc29ydCBvcmRlcikgZm9yIHRoZSBjb2x1bW4pXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59ICAgICAgICAgIFtvcHRpb25zLmNyZWF0ZWRBdF0gT3ZlcnJpZGUgdGhlIG5hbWUgb2YgdGhlIGNyZWF0ZWRBdCBhdHRyaWJ1dGUgaWYgYSBzdHJpbmcgaXMgcHJvdmlkZWQsIG9yIGRpc2FibGUgaXQgaWYgZmFsc2UuIFRpbWVzdGFtcHMgbXVzdCBiZSB0cnVlLiBVbmRlcnNjb3JlZCBmaWVsZCB3aWxsIGJlIHNldCB3aXRoIHVuZGVyc2NvcmVkIHNldHRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59ICAgICAgICAgIFtvcHRpb25zLnVwZGF0ZWRBdF0gT3ZlcnJpZGUgdGhlIG5hbWUgb2YgdGhlIHVwZGF0ZWRBdCBhdHRyaWJ1dGUgaWYgYSBzdHJpbmcgaXMgcHJvdmlkZWQsIG9yIGRpc2FibGUgaXQgaWYgZmFsc2UuIFRpbWVzdGFtcHMgbXVzdCBiZSB0cnVlLiBVbmRlcnNjb3JlZCBmaWVsZCB3aWxsIGJlIHNldCB3aXRoIHVuZGVyc2NvcmVkIHNldHRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59ICAgICAgICAgIFtvcHRpb25zLmRlbGV0ZWRBdF0gT3ZlcnJpZGUgdGhlIG5hbWUgb2YgdGhlIGRlbGV0ZWRBdCBhdHRyaWJ1dGUgaWYgYSBzdHJpbmcgaXMgcHJvdmlkZWQsIG9yIGRpc2FibGUgaXQgaWYgZmFsc2UuIFRpbWVzdGFtcHMgbXVzdCBiZSB0cnVlLiBVbmRlcnNjb3JlZCBmaWVsZCB3aWxsIGJlIHNldCB3aXRoIHVuZGVyc2NvcmVkIHNldHRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLnRhYmxlTmFtZV0gRGVmYXVsdHMgdG8gcGx1cmFsaXplZCBtb2RlbCBuYW1lLCB1bmxlc3MgZnJlZXplVGFibGVOYW1lIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgaXQgdXNlcyBtb2RlbCBuYW1lIHZlcmJhdGltXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLnNjaGVtYT0ncHVibGljJ10gc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmVuZ2luZV0gU3BlY2lmeSBlbmdpbmUgZm9yIG1vZGVsJ3MgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW29wdGlvbnMuY2hhcnNldF0gU3BlY2lmeSBjaGFyc2V0IGZvciBtb2RlbCdzIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmNvbW1lbnRdIFNwZWNpZnkgY29tbWVudCBmb3IgbW9kZWwncyB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbb3B0aW9ucy5jb2xsYXRlXSBTcGVjaWZ5IGNvbGxhdGlvbiBmb3IgbW9kZWwncyB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbml0aWFsQXV0b0luY3JlbWVudF0gU2V0IHRoZSBpbml0aWFsIEFVVE9fSU5DUkVNRU5UIHZhbHVlIGZvciB0aGUgdGFibGUgaW4gTXlTUUwuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmhvb2tzXSBBbiBvYmplY3Qgb2YgaG9vayBmdW5jdGlvbiB0aGF0IGFyZSBjYWxsZWQgYmVmb3JlIGFuZCBhZnRlciBjZXJ0YWluIGxpZmVjeWNsZSBldmVudHMuIFRoZSBwb3NzaWJsZSBob29rcyBhcmU6IGJlZm9yZVZhbGlkYXRlLCBhZnRlclZhbGlkYXRlLCB2YWxpZGF0aW9uRmFpbGVkLCBiZWZvcmVCdWxrQ3JlYXRlLCBiZWZvcmVCdWxrRGVzdHJveSwgYmVmb3JlQnVsa1VwZGF0ZSwgYmVmb3JlQ3JlYXRlLCBiZWZvcmVEZXN0cm95LCBiZWZvcmVVcGRhdGUsIGFmdGVyQ3JlYXRlLCBiZWZvcmVTYXZlLCBhZnRlckRlc3Ryb3ksIGFmdGVyVXBkYXRlLCBhZnRlckJ1bGtDcmVhdGUsIGFmdGVyU2F2ZSwgYWZ0ZXJCdWxrRGVzdHJveSBhbmQgYWZ0ZXJCdWxrVXBkYXRlLiBTZWUgSG9va3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG9vayBmdW5jdGlvbnMgYW5kIHRoZWlyIHNpZ25hdHVyZXMuIEVhY2ggcHJvcGVydHkgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uLCBvciBhbiBhcnJheSBvZiBmdW5jdGlvbnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgICAgIFtvcHRpb25zLnZhbGlkYXRlXSBBbiBvYmplY3Qgb2YgbW9kZWwgd2lkZSB2YWxpZGF0aW9ucy4gVmFsaWRhdGlvbnMgaGF2ZSBhY2Nlc3MgdG8gYWxsIG1vZGVsIHZhbHVlcyB2aWEgYHRoaXNgLiBJZiB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uIHRha2VzIGFuIGFyZ3VtZW50LCBpdCBpcyBhc3N1bWVkIHRvIGJlIGFzeW5jLCBhbmQgaXMgY2FsbGVkIHdpdGggYSBjYWxsYmFjayB0aGF0IGFjY2VwdHMgYW4gb3B0aW9uYWwgZXJyb3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtNb2RlbH1cbiAgICovXG4gIHN0YXRpYyBpbml0KGF0dHJpYnV0ZXMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghb3B0aW9ucy5zZXF1ZWxpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU2VxdWVsaXplIGluc3RhbmNlIHBhc3NlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuc2VxdWVsaXplID0gb3B0aW9ucy5zZXF1ZWxpemU7XG5cbiAgICBjb25zdCBnbG9iYWxPcHRpb25zID0gdGhpcy5zZXF1ZWxpemUub3B0aW9ucztcblxuICAgIG9wdGlvbnMgPSBVdGlscy5tZXJnZShfLmNsb25lRGVlcChnbG9iYWxPcHRpb25zLmRlZmluZSksIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFvcHRpb25zLm1vZGVsTmFtZSkge1xuICAgICAgb3B0aW9ucy5tb2RlbE5hbWUgPSB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IFV0aWxzLm1lcmdlKHtcbiAgICAgIG5hbWU6IHtcbiAgICAgICAgcGx1cmFsOiBVdGlscy5wbHVyYWxpemUob3B0aW9ucy5tb2RlbE5hbWUpLFxuICAgICAgICBzaW5ndWxhcjogVXRpbHMuc2luZ3VsYXJpemUob3B0aW9ucy5tb2RlbE5hbWUpXG4gICAgICB9LFxuICAgICAgaW5kZXhlczogW10sXG4gICAgICBvbWl0TnVsbDogZ2xvYmFsT3B0aW9ucy5vbWl0TnVsbCxcbiAgICAgIHNjaGVtYTogZ2xvYmFsT3B0aW9ucy5zY2hlbWFcbiAgICB9LCBvcHRpb25zKTtcblxuICAgIHRoaXMuc2VxdWVsaXplLnJ1bkhvb2tzKCdiZWZvcmVEZWZpbmUnLCBhdHRyaWJ1dGVzLCBvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zLm1vZGVsTmFtZSAhPT0gdGhpcy5uYW1lKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25hbWUnLCB7IHZhbHVlOiBvcHRpb25zLm1vZGVsTmFtZSB9KTtcbiAgICB9XG4gICAgZGVsZXRlIG9wdGlvbnMubW9kZWxOYW1lO1xuXG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICB0aW1lc3RhbXBzOiB0cnVlLFxuICAgICAgdmFsaWRhdGU6IHt9LFxuICAgICAgZnJlZXplVGFibGVOYW1lOiBmYWxzZSxcbiAgICAgIHVuZGVyc2NvcmVkOiBmYWxzZSxcbiAgICAgIHBhcmFub2lkOiBmYWxzZSxcbiAgICAgIHJlamVjdE9uRW1wdHk6IGZhbHNlLFxuICAgICAgd2hlcmVDb2xsZWN0aW9uOiBudWxsLFxuICAgICAgc2NoZW1hOiBudWxsLFxuICAgICAgc2NoZW1hRGVsaW1pdGVyOiAnJyxcbiAgICAgIGRlZmF1bHRTY29wZToge30sXG4gICAgICBzY29wZXM6IHt9LFxuICAgICAgaW5kZXhlczogW11cbiAgICB9LCBvcHRpb25zKTtcblxuICAgIC8vIGlmIHlvdSBjYWxsIFwiZGVmaW5lXCIgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lIG1vZGVsTmFtZSwgZG8gbm90IGNsdXR0ZXIgdGhlIGZhY3RvcnlcbiAgICBpZiAodGhpcy5zZXF1ZWxpemUuaXNEZWZpbmVkKHRoaXMubmFtZSkpIHtcbiAgICAgIHRoaXMuc2VxdWVsaXplLm1vZGVsTWFuYWdlci5yZW1vdmVNb2RlbCh0aGlzLnNlcXVlbGl6ZS5tb2RlbE1hbmFnZXIuZ2V0TW9kZWwodGhpcy5uYW1lKSk7XG4gICAgfVxuXG4gICAgdGhpcy5hc3NvY2lhdGlvbnMgPSB7fTtcbiAgICB0aGlzLl9zZXR1cEhvb2tzKG9wdGlvbnMuaG9va3MpO1xuXG4gICAgdGhpcy51bmRlcnNjb3JlZCA9IHRoaXMub3B0aW9ucy51bmRlcnNjb3JlZDtcblxuICAgIGlmICghdGhpcy5vcHRpb25zLnRhYmxlTmFtZSkge1xuICAgICAgdGhpcy50YWJsZU5hbWUgPSB0aGlzLm9wdGlvbnMuZnJlZXplVGFibGVOYW1lID8gdGhpcy5uYW1lIDogVXRpbHMudW5kZXJzY29yZWRJZihVdGlscy5wbHVyYWxpemUodGhpcy5uYW1lKSwgdGhpcy51bmRlcnNjb3JlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFibGVOYW1lID0gdGhpcy5vcHRpb25zLnRhYmxlTmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLl9zY2hlbWEgPSB0aGlzLm9wdGlvbnMuc2NoZW1hO1xuICAgIHRoaXMuX3NjaGVtYURlbGltaXRlciA9IHRoaXMub3B0aW9ucy5zY2hlbWFEZWxpbWl0ZXI7XG5cbiAgICAvLyBlcnJvciBjaGVjayBvcHRpb25zXG4gICAgXy5lYWNoKG9wdGlvbnMudmFsaWRhdGUsICh2YWxpZGF0b3IsIHZhbGlkYXRvclR5cGUpID0+IHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXR0cmlidXRlcywgdmFsaWRhdG9yVHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIG1vZGVsIHZhbGlkYXRvciBmdW5jdGlvbiBtdXN0IG5vdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgYSBmaWVsZC4gTW9kZWw6ICR7dGhpcy5uYW1lfSwgZmllbGQvdmFsaWRhdGlvbiBuYW1lOiAke3ZhbGlkYXRvclR5cGV9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWVtYmVycyBvZiB0aGUgdmFsaWRhdGUgb3B0aW9uIG11c3QgYmUgZnVuY3Rpb25zLiBNb2RlbDogJHt0aGlzLm5hbWV9LCBlcnJvciB3aXRoIHZhbGlkYXRlIG1lbWJlciAke3ZhbGlkYXRvclR5cGV9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJhd0F0dHJpYnV0ZXMgPSBfLm1hcFZhbHVlcyhhdHRyaWJ1dGVzLCAoYXR0cmlidXRlLCBuYW1lKSA9PiB7XG4gICAgICBhdHRyaWJ1dGUgPSB0aGlzLnNlcXVlbGl6ZS5ub3JtYWxpemVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcblxuICAgICAgaWYgKGF0dHJpYnV0ZS50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgZGF0YXR5cGUgZm9yIGF0dHJpYnV0ZSBcIiR7dGhpcy5uYW1lfS4ke25hbWV9XCJgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJpYnV0ZS5hbGxvd051bGwgIT09IGZhbHNlICYmIF8uZ2V0KGF0dHJpYnV0ZSwgJ3ZhbGlkYXRlLm5vdE51bGwnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGVmaW5pdGlvbiBmb3IgXCIke3RoaXMubmFtZX0uJHtuYW1lfVwiLCBcIm5vdE51bGxcIiB2YWxpZGF0b3IgaXMgb25seSBhbGxvd2VkIHdpdGggXCJhbGxvd051bGw6ZmFsc2VcImApO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5nZXQoYXR0cmlidXRlLCAncmVmZXJlbmNlcy5tb2RlbC5wcm90b3R5cGUnKSBpbnN0YW5jZW9mIE1vZGVsKSB7XG4gICAgICAgIGF0dHJpYnV0ZS5yZWZlcmVuY2VzLm1vZGVsID0gYXR0cmlidXRlLnJlZmVyZW5jZXMubW9kZWwuZ2V0VGFibGVOYW1lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0YWJsZU5hbWUgPSB0aGlzLmdldFRhYmxlTmFtZSgpO1xuICAgIHRoaXMuX2luZGV4ZXMgPSB0aGlzLm9wdGlvbnMuaW5kZXhlc1xuICAgICAgLm1hcChpbmRleCA9PiBVdGlscy5uYW1lSW5kZXgodGhpcy5fY29uZm9ybUluZGV4KGluZGV4KSwgdGFibGVOYW1lKSk7XG5cbiAgICB0aGlzLnByaW1hcnlLZXlzID0ge307XG4gICAgdGhpcy5fcmVhZE9ubHlBdHRyaWJ1dGVzID0gbmV3IFNldCgpO1xuICAgIHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIC8vIHNldHVwIG5hbWVzIG9mIHRpbWVzdGFtcCBhdHRyaWJ1dGVzXG4gICAgaWYgKHRoaXMub3B0aW9ucy50aW1lc3RhbXBzKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNyZWF0ZWRBdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy5jcmVhdGVkQXQgPSB0aGlzLm9wdGlvbnMuY3JlYXRlZEF0IHx8ICdjcmVhdGVkQXQnO1xuICAgICAgICB0aGlzLl9yZWFkT25seUF0dHJpYnV0ZXMuYWRkKHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuY3JlYXRlZEF0KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBkYXRlZEF0ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdCA9IHRoaXMub3B0aW9ucy51cGRhdGVkQXQgfHwgJ3VwZGF0ZWRBdCc7XG4gICAgICAgIHRoaXMuX3JlYWRPbmx5QXR0cmlidXRlcy5hZGQodGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy51cGRhdGVkQXQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wYXJhbm9pZCAmJiB0aGlzLm9wdGlvbnMuZGVsZXRlZEF0ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdCA9IHRoaXMub3B0aW9ucy5kZWxldGVkQXQgfHwgJ2RlbGV0ZWRBdCc7XG4gICAgICAgIHRoaXMuX3JlYWRPbmx5QXR0cmlidXRlcy5hZGQodGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldHVwIG5hbWUgZm9yIHZlcnNpb24gYXR0cmlidXRlXG4gICAgaWYgKHRoaXMub3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICB0aGlzLl92ZXJzaW9uQXR0cmlidXRlID0gdHlwZW9mIHRoaXMub3B0aW9ucy52ZXJzaW9uID09PSAnc3RyaW5nJyA/IHRoaXMub3B0aW9ucy52ZXJzaW9uIDogJ3ZlcnNpb24nO1xuICAgICAgdGhpcy5fcmVhZE9ubHlBdHRyaWJ1dGVzLmFkZCh0aGlzLl92ZXJzaW9uQXR0cmlidXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYXNSZWFkT25seUF0dHJpYnV0ZXMgPSB0aGlzLl9yZWFkT25seUF0dHJpYnV0ZXMuc2l6ZSA+IDA7XG5cbiAgICAvLyBBZGQgaGVhZCBhbmQgdGFpbCBkZWZhdWx0IGF0dHJpYnV0ZXMgKGlkLCB0aW1lc3RhbXBzKVxuICAgIHRoaXMuX2FkZERlZmF1bHRBdHRyaWJ1dGVzKCk7XG4gICAgdGhpcy5yZWZyZXNoQXR0cmlidXRlcygpO1xuICAgIHRoaXMuX2ZpbmRBdXRvSW5jcmVtZW50QXR0cmlidXRlKCk7XG5cbiAgICB0aGlzLl9zY29wZSA9IHRoaXMub3B0aW9ucy5kZWZhdWx0U2NvcGU7XG4gICAgdGhpcy5fc2NvcGVOYW1lcyA9IFsnZGVmYXVsdFNjb3BlJ107XG5cbiAgICB0aGlzLnNlcXVlbGl6ZS5tb2RlbE1hbmFnZXIuYWRkTW9kZWwodGhpcyk7XG4gICAgdGhpcy5zZXF1ZWxpemUucnVuSG9va3MoJ2FmdGVyRGVmaW5lJywgdGhpcyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXRpYyByZWZyZXNoQXR0cmlidXRlcygpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVNYW5pcHVsYXRpb24gPSB7fTtcblxuICAgIHRoaXMucHJvdG90eXBlLl9jdXN0b21HZXR0ZXJzID0ge307XG4gICAgdGhpcy5wcm90b3R5cGUuX2N1c3RvbVNldHRlcnMgPSB7fTtcblxuICAgIFsnZ2V0JywgJ3NldCddLmZvckVhY2godHlwZSA9PiB7XG4gICAgICBjb25zdCBvcHQgPSBgJHt0eXBlfXRlck1ldGhvZHNgO1xuICAgICAgY29uc3QgZnVuY3MgPSBfLmNsb25lKF8uaXNPYmplY3QodGhpcy5vcHRpb25zW29wdF0pID8gdGhpcy5vcHRpb25zW29wdF0gOiB7fSk7XG4gICAgICBjb25zdCBfY3VzdG9tID0gdHlwZSA9PT0gJ2dldCcgPyB0aGlzLnByb3RvdHlwZS5fY3VzdG9tR2V0dGVycyA6IHRoaXMucHJvdG90eXBlLl9jdXN0b21TZXR0ZXJzO1xuXG4gICAgICBfLmVhY2goZnVuY3MsIChtZXRob2QsIGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICBfY3VzdG9tW2F0dHJpYnV0ZV0gPSBtZXRob2Q7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdnZXQnKSB7XG4gICAgICAgICAgZnVuY3NbYXR0cmlidXRlXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGF0dHJpYnV0ZSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ3NldCcpIHtcbiAgICAgICAgICBmdW5jc1thdHRyaWJ1dGVdID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldChhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgXy5lYWNoKHRoaXMucmF3QXR0cmlidXRlcywgKG9wdGlvbnMsIGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIHR5cGUpKSB7XG4gICAgICAgICAgX2N1c3RvbVthdHRyaWJ1dGVdID0gb3B0aW9uc1t0eXBlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnZ2V0Jykge1xuICAgICAgICAgIGZ1bmNzW2F0dHJpYnV0ZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChhdHRyaWJ1dGUpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdzZXQnKSB7XG4gICAgICAgICAgZnVuY3NbYXR0cmlidXRlXSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXQoYXR0cmlidXRlLCB2YWx1ZSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIF8uZWFjaChmdW5jcywgKGZjdCwgbmFtZSkgPT4ge1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZU1hbmlwdWxhdGlvbltuYW1lXSkge1xuICAgICAgICAgIGF0dHJpYnV0ZU1hbmlwdWxhdGlvbltuYW1lXSA9IHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlTWFuaXB1bGF0aW9uW25hbWVdW3R5cGVdID0gZmN0O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kYXRhVHlwZUNoYW5nZXMgPSB7fTtcbiAgICB0aGlzLl9kYXRhVHlwZVNhbml0aXplcnMgPSB7fTtcblxuICAgIHRoaXMuX2hhc0Jvb2xlYW5BdHRyaWJ1dGVzID0gZmFsc2U7XG4gICAgdGhpcy5faGFzRGF0ZUF0dHJpYnV0ZXMgPSBmYWxzZTtcbiAgICB0aGlzLl9qc29uQXR0cmlidXRlcyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLl92aXJ0dWFsQXR0cmlidXRlcyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWVzID0ge307XG4gICAgdGhpcy5wcm90b3R5cGUudmFsaWRhdG9ycyA9IHt9O1xuXG4gICAgdGhpcy5maWVsZFJhd0F0dHJpYnV0ZXNNYXAgPSB7fTtcblxuICAgIHRoaXMucHJpbWFyeUtleXMgPSB7fTtcbiAgICB0aGlzLnVuaXF1ZUtleXMgPSB7fTtcblxuICAgIF8uZWFjaCh0aGlzLnJhd0F0dHJpYnV0ZXMsIChkZWZpbml0aW9uLCBuYW1lKSA9PiB7XG4gICAgICBkZWZpbml0aW9uLnR5cGUgPSB0aGlzLnNlcXVlbGl6ZS5ub3JtYWxpemVEYXRhVHlwZShkZWZpbml0aW9uLnR5cGUpO1xuXG4gICAgICBkZWZpbml0aW9uLk1vZGVsID0gdGhpcztcbiAgICAgIGRlZmluaXRpb24uZmllbGROYW1lID0gbmFtZTtcbiAgICAgIGRlZmluaXRpb24uX21vZGVsQXR0cmlidXRlID0gdHJ1ZTtcblxuICAgICAgaWYgKGRlZmluaXRpb24uZmllbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWZpbml0aW9uLmZpZWxkID0gVXRpbHMudW5kZXJzY29yZWRJZihuYW1lLCB0aGlzLnVuZGVyc2NvcmVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmluaXRpb24ucHJpbWFyeUtleSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnByaW1hcnlLZXlzW25hbWVdID0gZGVmaW5pdGlvbjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWVsZFJhd0F0dHJpYnV0ZXNNYXBbZGVmaW5pdGlvbi5maWVsZF0gPSBkZWZpbml0aW9uO1xuXG4gICAgICBpZiAoZGVmaW5pdGlvbi50eXBlLl9zYW5pdGl6ZSkge1xuICAgICAgICB0aGlzLl9kYXRhVHlwZVNhbml0aXplcnNbbmFtZV0gPSBkZWZpbml0aW9uLnR5cGUuX3Nhbml0aXplO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmaW5pdGlvbi50eXBlLl9pc0NoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5fZGF0YVR5cGVDaGFuZ2VzW25hbWVdID0gZGVmaW5pdGlvbi50eXBlLl9pc0NoYW5nZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZpbml0aW9uLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuQk9PTEVBTikge1xuICAgICAgICB0aGlzLl9oYXNCb29sZWFuQXR0cmlidXRlcyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGRlZmluaXRpb24udHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5EQVRFIHx8IGRlZmluaXRpb24udHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5EQVRFT05MWSkge1xuICAgICAgICB0aGlzLl9oYXNEYXRlQXR0cmlidXRlcyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGRlZmluaXRpb24udHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5KU09OKSB7XG4gICAgICAgIHRoaXMuX2pzb25BdHRyaWJ1dGVzLmFkZChuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoZGVmaW5pdGlvbi50eXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLlZJUlRVQUwpIHtcbiAgICAgICAgdGhpcy5fdmlydHVhbEF0dHJpYnV0ZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmluaXRpb24sICdkZWZhdWx0VmFsdWUnKSkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0VmFsdWVzW25hbWVdID0gKCkgPT4gVXRpbHMudG9EZWZhdWx0VmFsdWUoZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUsIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVmaW5pdGlvbiwgJ3VuaXF1ZScpICYmIGRlZmluaXRpb24udW5pcXVlKSB7XG4gICAgICAgIGxldCBpZHhOYW1lO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGRlZmluaXRpb24udW5pcXVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZWZpbml0aW9uLnVuaXF1ZSwgJ25hbWUnKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZHhOYW1lID0gZGVmaW5pdGlvbi51bmlxdWUubmFtZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5pdGlvbi51bmlxdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWR4TmFtZSA9IGRlZmluaXRpb24udW5pcXVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlkeE5hbWUgPSBgJHt0aGlzLnRhYmxlTmFtZX1fJHtuYW1lfV91bmlxdWVgO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy51bmlxdWVLZXlzW2lkeE5hbWVdIHx8IHsgZmllbGRzOiBbXSB9O1xuXG4gICAgICAgIGlkeC5maWVsZHMucHVzaChkZWZpbml0aW9uLmZpZWxkKTtcbiAgICAgICAgaWR4Lm1zZyA9IGlkeC5tc2cgfHwgZGVmaW5pdGlvbi51bmlxdWUubXNnIHx8IG51bGw7XG4gICAgICAgIGlkeC5uYW1lID0gaWR4TmFtZSB8fCBmYWxzZTtcbiAgICAgICAgaWR4LmNvbHVtbiA9IG5hbWU7XG4gICAgICAgIGlkeC5jdXN0b21JbmRleCA9IGRlZmluaXRpb24udW5pcXVlICE9PSB0cnVlO1xuXG4gICAgICAgIHRoaXMudW5pcXVlS2V5c1tpZHhOYW1lXSA9IGlkeDtcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZWZpbml0aW9uLCAndmFsaWRhdGUnKSkge1xuICAgICAgICB0aGlzLnByb3RvdHlwZS52YWxpZGF0b3JzW25hbWVdID0gZGVmaW5pdGlvbi52YWxpZGF0ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmluaXRpb24uaW5kZXggPT09IHRydWUgJiYgZGVmaW5pdGlvbi50eXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLkpTT05CKSB7XG4gICAgICAgIHRoaXMuX2luZGV4ZXMucHVzaChcbiAgICAgICAgICBVdGlscy5uYW1lSW5kZXgoXG4gICAgICAgICAgICB0aGlzLl9jb25mb3JtSW5kZXgoe1xuICAgICAgICAgICAgICBmaWVsZHM6IFtkZWZpbml0aW9uLmZpZWxkIHx8IG5hbWVdLFxuICAgICAgICAgICAgICB1c2luZzogJ2dpbidcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy5nZXRUYWJsZU5hbWUoKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBkZWxldGUgZGVmaW5pdGlvbi5pbmRleDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBhIG1hcCBvZiBmaWVsZCB0byBhdHRyaWJ1dGUgbmFtZXNcbiAgICB0aGlzLmZpZWxkQXR0cmlidXRlTWFwID0gXy5yZWR1Y2UodGhpcy5maWVsZFJhd0F0dHJpYnV0ZXNNYXAsIChtYXAsIHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgIT09IHZhbHVlLmZpZWxkTmFtZSkge1xuICAgICAgICBtYXBba2V5XSA9IHZhbHVlLmZpZWxkTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXA7XG4gICAgfSwge30pO1xuXG4gICAgdGhpcy5faGFzSnNvbkF0dHJpYnV0ZXMgPSAhIXRoaXMuX2pzb25BdHRyaWJ1dGVzLnNpemU7XG5cbiAgICB0aGlzLl9oYXNWaXJ0dWFsQXR0cmlidXRlcyA9ICEhdGhpcy5fdmlydHVhbEF0dHJpYnV0ZXMuc2l6ZTtcblxuICAgIHRoaXMuX2hhc0RlZmF1bHRWYWx1ZXMgPSAhXy5pc0VtcHR5KHRoaXMuX2RlZmF1bHRWYWx1ZXMpO1xuXG4gICAgdGhpcy50YWJsZUF0dHJpYnV0ZXMgPSBfLm9taXRCeSh0aGlzLnJhd0F0dHJpYnV0ZXMsIChfYSwga2V5KSA9PiB0aGlzLl92aXJ0dWFsQXR0cmlidXRlcy5oYXMoa2V5KSk7XG5cbiAgICB0aGlzLnByb3RvdHlwZS5faGFzQ3VzdG9tR2V0dGVycyA9IE9iamVjdC5rZXlzKHRoaXMucHJvdG90eXBlLl9jdXN0b21HZXR0ZXJzKS5sZW5ndGg7XG4gICAgdGhpcy5wcm90b3R5cGUuX2hhc0N1c3RvbVNldHRlcnMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3RvdHlwZS5fY3VzdG9tU2V0dGVycykubGVuZ3RoO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYXR0cmlidXRlTWFuaXB1bGF0aW9uKSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChNb2RlbC5wcm90b3R5cGUsIGtleSkpIHtcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUubG9nKGBOb3Qgb3ZlcnJpZGluZyBidWlsdC1pbiBtZXRob2QgZnJvbSBtb2RlbCBhdHRyaWJ1dGU6ICR7a2V5fWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSwga2V5LCBhdHRyaWJ1dGVNYW5pcHVsYXRpb25ba2V5XSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm90b3R5cGUucmF3QXR0cmlidXRlcyA9IHRoaXMucmF3QXR0cmlidXRlcztcbiAgICB0aGlzLnByb3RvdHlwZS5faXNBdHRyaWJ1dGUgPSBrZXkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucHJvdG90eXBlLnJhd0F0dHJpYnV0ZXMsIGtleSk7XG5cbiAgICAvLyBQcmltYXJ5IGtleSBjb252ZW5pZW5jZSBjb25zdGlhYmxlc1xuICAgIHRoaXMucHJpbWFyeUtleUF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyh0aGlzLnByaW1hcnlLZXlzKTtcbiAgICB0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGUgPSB0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGVzWzBdO1xuICAgIGlmICh0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGUpIHtcbiAgICAgIHRoaXMucHJpbWFyeUtleUZpZWxkID0gdGhpcy5yYXdBdHRyaWJ1dGVzW3RoaXMucHJpbWFyeUtleUF0dHJpYnV0ZV0uZmllbGQgfHwgdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlO1xuICAgIH1cblxuICAgIHRoaXMuX2hhc1ByaW1hcnlLZXlzID0gdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlcy5sZW5ndGggPiAwO1xuICAgIHRoaXMuX2lzUHJpbWFyeUtleSA9IGtleSA9PiB0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGVzLmluY2x1ZGVzKGtleSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGF0dHJpYnV0ZSBmcm9tIG1vZGVsIGRlZmluaXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSBuYW1lIG9mIGF0dHJpYnV0ZSB0byByZW1vdmVcbiAgICovXG4gIHN0YXRpYyByZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKSB7XG4gICAgZGVsZXRlIHRoaXMucmF3QXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuICAgIHRoaXMucmVmcmVzaEF0dHJpYnV0ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIHRoaXMgTW9kZWwgdG8gdGhlIERCLCB0aGF0IGlzIGNyZWF0ZSB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gc3luYyBvcHRpb25zXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIFNlcXVlbGl6ZSNzeW5jfSBmb3Igb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbD59XG4gICAqL1xuICBzdGF0aWMgc3luYyhvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgb3B0aW9ucy5ob29rcyA9IG9wdGlvbnMuaG9va3MgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhIW9wdGlvbnMuaG9va3M7XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy50YWJsZUF0dHJpYnV0ZXM7XG4gICAgY29uc3QgcmF3QXR0cmlidXRlcyA9IHRoaXMuZmllbGRSYXdBdHRyaWJ1dGVzTWFwO1xuXG4gICAgcmV0dXJuIFByb21pc2UudHJ5KCgpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVTeW5jJywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5mb3JjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcm9wKG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB0aGlzLlF1ZXJ5SW50ZXJmYWNlLmNyZWF0ZVRhYmxlKHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCBhdHRyaWJ1dGVzLCBvcHRpb25zLCB0aGlzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmFsdGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgdGhpcy5RdWVyeUludGVyZmFjZS5kZXNjcmliZVRhYmxlKHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpKSxcbiAgICAgICAgICB0aGlzLlF1ZXJ5SW50ZXJmYWNlLmdldEZvcmVpZ25LZXlSZWZlcmVuY2VzRm9yVGFibGUodGhpcy5nZXRUYWJsZU5hbWUob3B0aW9ucykpXG4gICAgICAgIF0pXG4gICAgICAgICAgLnRoZW4odGFibGVJbmZvcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGVJbmZvc1swXTtcbiAgICAgICAgICAgIC8vIFVzZSBmb3IgYWx0ZXIgZm9yZWlnbiBrZXlzXG4gICAgICAgICAgICBjb25zdCBmb3JlaWduS2V5UmVmZXJlbmNlcyA9IHRhYmxlSW5mb3NbMV07XG5cbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSBbXTsgLy8gYXJyYXkgb2YgcHJvbWlzZXMgdG8gcnVuXG4gICAgICAgICAgICBjb25zdCByZW1vdmVkQ29uc3RyYWludHMgPSB7fTtcblxuICAgICAgICAgICAgXy5lYWNoKGF0dHJpYnV0ZXMsIChjb2x1bW5EZXNjLCBjb2x1bW5OYW1lKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY29sdW1uc1tjb2x1bW5OYW1lXSAmJiAhY29sdW1uc1thdHRyaWJ1dGVzW2NvbHVtbk5hbWVdLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaCgoKSA9PiB0aGlzLlF1ZXJ5SW50ZXJmYWNlLmFkZENvbHVtbih0aGlzLmdldFRhYmxlTmFtZShvcHRpb25zKSwgYXR0cmlidXRlc1tjb2x1bW5OYW1lXS5maWVsZCB8fCBjb2x1bW5OYW1lLCBhdHRyaWJ1dGVzW2NvbHVtbk5hbWVdKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXy5lYWNoKGNvbHVtbnMsIChjb2x1bW5EZXNjLCBjb2x1bW5OYW1lKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRBdHRyaWJ1dGUgPSByYXdBdHRyaWJ1dGVzW2NvbHVtbk5hbWVdO1xuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VzLnB1c2goKCkgPT4gdGhpcy5RdWVyeUludGVyZmFjZS5yZW1vdmVDb2x1bW4odGhpcy5nZXRUYWJsZU5hbWUob3B0aW9ucyksIGNvbHVtbk5hbWUsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICghY3VycmVudEF0dHJpYnV0ZS5wcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yZWlnbiBrZXlzLiBJZiBpdCdzIGEgZm9yZWlnbiBrZXksIGl0IHNob3VsZCByZW1vdmUgY29uc3RyYWludCBmaXJzdC5cbiAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gY3VycmVudEF0dHJpYnV0ZS5yZWZlcmVuY2VzO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QXR0cmlidXRlLnJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFiYXNlID0gdGhpcy5zZXF1ZWxpemUuY29uZmlnLmRhdGFiYXNlO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5zZXF1ZWxpemUuY29uZmlnLnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgIC8vIEZpbmQgZXhpc3RlZCBmb3JlaWduIGtleXNcbiAgICAgICAgICAgICAgICAgIF8uZWFjaChmb3JlaWduS2V5UmVmZXJlbmNlcywgZm9yZWlnbktleVJlZmVyZW5jZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnROYW1lID0gZm9yZWlnbktleVJlZmVyZW5jZS5jb25zdHJhaW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhY29uc3RyYWludE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAmJiBmb3JlaWduS2V5UmVmZXJlbmNlLnRhYmxlQ2F0YWxvZyA9PT0gZGF0YWJhc2VcbiAgICAgICAgICAgICAgICAgICAgICAmJiAoc2NoZW1hID8gZm9yZWlnbktleVJlZmVyZW5jZS50YWJsZVNjaGVtYSA9PT0gc2NoZW1hIDogdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAmJiBmb3JlaWduS2V5UmVmZXJlbmNlLnJlZmVyZW5jZWRUYWJsZU5hbWUgPT09IHJlZmVyZW5jZXMubW9kZWxcbiAgICAgICAgICAgICAgICAgICAgICAmJiBmb3JlaWduS2V5UmVmZXJlbmNlLnJlZmVyZW5jZWRDb2x1bW5OYW1lID09PSByZWZlcmVuY2VzLmtleVxuICAgICAgICAgICAgICAgICAgICAgICYmIChzY2hlbWEgPyBmb3JlaWduS2V5UmVmZXJlbmNlLnJlZmVyZW5jZWRUYWJsZVNjaGVtYSA9PT0gc2NoZW1hIDogdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAmJiAhcmVtb3ZlZENvbnN0cmFpbnRzW2NvbnN0cmFpbnROYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjb25zdHJhaW50IG9uIGZvcmVpZ24ga2V5cy5cbiAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnB1c2goKCkgPT4gdGhpcy5RdWVyeUludGVyZmFjZS5yZW1vdmVDb25zdHJhaW50KHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCBjb25zdHJhaW50TmFtZSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRDb25zdHJhaW50c1tjb25zdHJhaW50TmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hhbmdlcy5wdXNoKCgpID0+IHRoaXMuUXVlcnlJbnRlcmZhY2UuY2hhbmdlQ29sdW1uKHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCBjb2x1bW5OYW1lLCBjdXJyZW50QXR0cmlidXRlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuZWFjaChjaGFuZ2VzLCBmID0+IGYoKSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5RdWVyeUludGVyZmFjZS5zaG93SW5kZXgodGhpcy5nZXRUYWJsZU5hbWUob3B0aW9ucyksIG9wdGlvbnMpKVxuICAgICAgLnRoZW4oaW5kZXhlcyA9PiB7XG4gICAgICAgIGluZGV4ZXMgPSB0aGlzLl9pbmRleGVzLmZpbHRlcihpdGVtMSA9PlxuICAgICAgICAgICFpbmRleGVzLnNvbWUoaXRlbTIgPT4gaXRlbTEubmFtZSA9PT0gaXRlbTIubmFtZSlcbiAgICAgICAgKS5zb3J0KChpbmRleDEsIGluZGV4MikgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QgPT09ICdwb3N0Z3JlcycpIHtcbiAgICAgICAgICAvLyBtb3ZlIGNvbmN1cnJlbnQgaW5kZXhlcyB0byB0aGUgYm90dG9tIHRvIGF2b2lkIHdlaXJkIGRlYWRsb2Nrc1xuICAgICAgICAgICAgaWYgKGluZGV4MS5jb25jdXJyZW50bHkgPT09IHRydWUpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKGluZGV4Mi5jb25jdXJyZW50bHkgPT09IHRydWUpIHJldHVybiAtMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuZWFjaChpbmRleGVzLCBpbmRleCA9PiB0aGlzLlF1ZXJ5SW50ZXJmYWNlLmFkZEluZGV4KFxuICAgICAgICAgIHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgbG9nZ2luZzogb3B0aW9ucy5sb2dnaW5nLFxuICAgICAgICAgICAgYmVuY2htYXJrOiBvcHRpb25zLmJlbmNobWFyayxcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uOiBvcHRpb25zLnRyYW5zYWN0aW9uLFxuICAgICAgICAgICAgc2NoZW1hOiBvcHRpb25zLnNjaGVtYVxuICAgICAgICAgIH0sIGluZGV4KSxcbiAgICAgICAgICB0aGlzLnRhYmxlTmFtZVxuICAgICAgICApKTtcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdhZnRlclN5bmMnLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSkucmV0dXJuKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyb3AgdGhlIHRhYmxlIHJlcHJlc2VudGVkIGJ5IHRoaXMgTW9kZWxcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnNdIGRyb3Agb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5jYXNjYWRlPWZhbHNlXSAgIEFsc28gZHJvcCBhbGwgb2JqZWN0cyBkZXBlbmRpbmcgb24gdGhpcyB0YWJsZSwgc3VjaCBhcyB2aWV3cy4gT25seSB3b3JrcyBpbiBwb3N0Z3Jlc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nPWZhbHNlXSAgIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHN0YXRpYyBkcm9wKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5RdWVyeUludGVyZmFjZS5kcm9wVGFibGUodGhpcy5nZXRUYWJsZU5hbWUob3B0aW9ucyksIG9wdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIGRyb3BTY2hlbWEoc2NoZW1hKSB7XG4gICAgcmV0dXJuIHRoaXMuUXVlcnlJbnRlcmZhY2UuZHJvcFNjaGVtYShzY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGEgc2NoZW1hIHRvIHRoaXMgbW9kZWwuIEZvciBwb3N0Z3JlcywgdGhpcyB3aWxsIGFjdHVhbGx5IHBsYWNlIHRoZSBzY2hlbWEgaW4gZnJvbnQgb2YgdGhlIHRhYmxlIG5hbWUgLSBgXCJzY2hlbWFcIi5cInRhYmxlTmFtZVwiYCxcbiAgICogd2hpbGUgdGhlIHNjaGVtYSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgdGFibGUgbmFtZSBmb3IgbXlzcWwgYW5kIHNxbGl0ZSAtIGAnc2NoZW1hLnRhYmxlbmFtZSdgLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgdXNlIGNhc2VzIHdoZXJlIHRoZSBzYW1lIG1vZGVsIGlzIG5lZWRlZCBpbiBtdWx0aXBsZSBzY2hlbWFzLiBJbiBzdWNoIGEgdXNlIGNhc2UgaXQgaXMgaW1wb3J0YW50XG4gICAqIHRvIGNhbGwgYG1vZGVsLnNjaGVtYShzY2hlbWEsIFtvcHRpb25zXSkuc3luYygpYCBmb3IgZWFjaCBtb2RlbCB0byBlbnN1cmUgdGhlIG1vZGVscyBhcmUgY3JlYXRlZCBpbiB0aGUgY29ycmVjdCBzY2hlbWEuXG4gICAqXG4gICAqIElmIGEgc2luZ2xlIGRlZmF1bHQgc2NoZW1hIHBlciBtb2RlbCBpcyBuZWVkZWQsIHNldCB0aGUgYG9wdGlvbnMuc2NoZW1hPSdzY2hlbWEnYCBwYXJhbWV0ZXIgZHVyaW5nIHRoZSBgZGVmaW5lKClgIGNhbGxcbiAgICogZm9yIHRoZSBtb2RlbC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgc2NoZW1hIFRoZSBuYW1lIG9mIHRoZSBzY2hlbWFcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnNdIHNjaGVtYSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLnNjaGVtYURlbGltaXRlcj0nLiddIFRoZSBjaGFyYWN0ZXIocykgdGhhdCBzZXBhcmF0ZXMgdGhlIHNjaGVtYSBuYW1lIGZyb20gdGhlIHRhYmxlIG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIFtvcHRpb25zLmJlbmNobWFyaz1mYWxzZV0gUGFzcyBxdWVyeSBleGVjdXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMgYXMgc2Vjb25kIGFyZ3VtZW50IHRvIGxvZ2dpbmcgZnVuY3Rpb24gKG9wdGlvbnMubG9nZ2luZykuXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIFNlcXVlbGl6ZSNkZWZpbmV9IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHNldHRpbmcgYSBkZWZhdWx0IHNjaGVtYS5cbiAgICpcbiAgICogQHJldHVybnMge01vZGVsfVxuICAgKi9cbiAgc3RhdGljIHNjaGVtYShzY2hlbWEsIG9wdGlvbnMpIHtcblxuICAgIGNvbnN0IGNsb25lID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHt9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9uZSwgJ25hbWUnLCB7IHZhbHVlOiB0aGlzLm5hbWUgfSk7XG5cbiAgICBjbG9uZS5fc2NoZW1hID0gc2NoZW1hO1xuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2xvbmUuX3NjaGVtYURlbGltaXRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc2NoZW1hRGVsaW1pdGVyKSB7XG4gICAgICAgIGNsb25lLl9zY2hlbWFEZWxpbWl0ZXIgPSBvcHRpb25zLnNjaGVtYURlbGltaXRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0YWJsZSBuYW1lIG9mIHRoZSBtb2RlbCwgdGFraW5nIHNjaGVtYSBpbnRvIGFjY291bnQuIFRoZSBtZXRob2Qgd2lsbCByZXR1cm4gVGhlIG5hbWUgYXMgYSBzdHJpbmcgaWYgdGhlIG1vZGVsIGhhcyBubyBzY2hlbWEsXG4gICAqIG9yIGFuIG9iamVjdCB3aXRoIGB0YWJsZU5hbWVgLCBgc2NoZW1hYCBhbmQgYGRlbGltaXRlcmAgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ3xPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0VGFibGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmFkZFNjaGVtYSh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdW4tc2NvcGVkIG1vZGVsXG4gICAqXG4gICAqIEByZXR1cm5zIHtNb2RlbH1cbiAgICovXG4gIHN0YXRpYyB1bnNjb3BlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zY29wZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBzY29wZSB0byB0aGUgbW9kZWwuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yIGFkZGluZyBzY29wZXMgd2l0aCBpbmNsdWRlcywgd2hlbiB0aGUgbW9kZWwgeW91IHdhbnQgdG8gaW5jbHVkZSBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZSB0aW1lIHRoaXMgbW9kZWwgaXMgZGVmaW5lZC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCB0aGlzIHdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgYSBzY29wZSB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cy4gUGFzcyBgb3ZlcnJpZGU6IHRydWVgIGluIHRoZSBvcHRpb25zIG9iamVjdCB0byBzaWxlbmNlIHRoaXMgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzY29wZS4gVXNlIGBkZWZhdWx0U2NvcGVgIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNjb3BlXG4gICAqIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSBzY29wZSBzY29wZSBvciBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICBbb3B0aW9uc10gc2NvcGUgb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMub3ZlcnJpZGU9ZmFsc2VdIG92ZXJyaWRlIG9sZCBzY29wZSBpZiBhbHJlYWR5IGRlZmluZWRcbiAgICovXG4gIHN0YXRpYyBhZGRTY29wZShuYW1lLCBzY29wZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIG92ZXJyaWRlOiBmYWxzZVxuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKChuYW1lID09PSAnZGVmYXVsdFNjb3BlJyAmJiBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMuZGVmYXVsdFNjb3BlKS5sZW5ndGggPiAwIHx8IG5hbWUgaW4gdGhpcy5vcHRpb25zLnNjb3BlcykgJiYgb3B0aW9ucy5vdmVycmlkZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHNjb3BlICR7bmFtZX0gYWxyZWFkeSBleGlzdHMuIFBhc3MgeyBvdmVycmlkZTogdHJ1ZSB9IGFzIG9wdGlvbnMgdG8gc2lsZW5jZSB0aGlzIGVycm9yYCk7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgPT09ICdkZWZhdWx0U2NvcGUnKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZGVmYXVsdFNjb3BlID0gdGhpcy5fc2NvcGUgPSBzY29wZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLnNjb3Blc1tuYW1lXSA9IHNjb3BlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhIHNjb3BlIGNyZWF0ZWQgaW4gYGRlZmluZWAgdG8gdGhlIG1vZGVsLlxuICAgKlxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5ob3cgdG8gY3JlYXRlIHNjb3BlczwvY2FwdGlvbj5cbiAgICogY29uc3QgTW9kZWwgPSBzZXF1ZWxpemUuZGVmaW5lKCdtb2RlbCcsIGF0dHJpYnV0ZXMsIHtcbiAgICogICBkZWZhdWx0U2NvcGU6IHtcbiAgICogICAgIHdoZXJlOiB7XG4gICAqICAgICAgIHVzZXJuYW1lOiAnZGFuJ1xuICAgKiAgICAgfSxcbiAgICogICAgIGxpbWl0OiAxMlxuICAgKiAgIH0sXG4gICAqICAgc2NvcGVzOiB7XG4gICAqICAgICBpc0FMaWU6IHtcbiAgICogICAgICAgd2hlcmU6IHtcbiAgICogICAgICAgICBzdHVmZjogJ2Nha2UnXG4gICAqICAgICAgIH1cbiAgICogICAgIH0sXG4gICAqICAgICBjb21wbGV4RnVuY3Rpb246IGZ1bmN0aW9uKGVtYWlsLCBhY2Nlc3NMZXZlbCkge1xuICAgKiAgICAgICByZXR1cm4ge1xuICAgKiAgICAgICAgIHdoZXJlOiB7XG4gICAqICAgICAgICAgICBlbWFpbDoge1xuICAgKiAgICAgICAgICAgICBbT3AubGlrZV06IGVtYWlsXG4gICAqICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgYWNjZXNzX2xldmVsIHtcbiAgICogICAgICAgICAgICAgW09wLmd0ZV06IGFjY2Vzc0xldmVsXG4gICAqICAgICAgICAgICB9XG4gICAqICAgICAgICAgfVxuICAgKiAgICAgICB9XG4gICAqICAgICB9XG4gICAqICAgfVxuICAgKiB9KVxuICAgKlxuICAgKiAjIEFzIHlvdSBoYXZlIGRlZmluZWQgYSBkZWZhdWx0IHNjb3BlLCBldmVyeSB0aW1lIHlvdSBkbyBNb2RlbC5maW5kLCB0aGUgZGVmYXVsdCBzY29wZSBpcyBhcHBlbmRlZCB0byB5b3VyIHF1ZXJ5LiBIZXJlJ3MgYSBjb3VwbGUgb2YgZXhhbXBsZXM6XG4gICAqXG4gICAqIE1vZGVsLmZpbmRBbGwoKSAvLyBXSEVSRSB1c2VybmFtZSA9ICdkYW4nXG4gICAqIE1vZGVsLmZpbmRBbGwoeyB3aGVyZTogeyBhZ2U6IHsgW09wLmd0XTogMTIgfSB9IH0pIC8vIFdIRVJFIGFnZSA+IDEyIEFORCB1c2VybmFtZSA9ICdkYW4nXG4gICAqXG4gICAqIEBleGFtcGxlIDxjYXB0aW9uPlRvIGludm9rZSBzY29wZSBmdW5jdGlvbnMgeW91IGNhbiBkbzwvY2FwdGlvbj5cbiAgICogTW9kZWwuc2NvcGUoeyBtZXRob2Q6IFsnY29tcGxleEZ1bmN0aW9uJywgJ2RhbkBzZXF1ZWxpemUuY29tJywgNDJdfSkuZmluZEFsbCgpXG4gICAqIC8vIFdIRVJFIGVtYWlsIGxpa2UgJ2RhbkBzZXF1ZWxpemUuY29tJScgQU5EIGFjY2Vzc19sZXZlbCA+PSA0MlxuICAgKlxuICAgKiBAcGFyYW0gez9BcnJheXxPYmplY3R8c3RyaW5nfSBbb3B0aW9uXSBUaGUgc2NvcGUocykgdG8gYXBwbHkuIFNjb3BlcyBjYW4gZWl0aGVyIGJlIHBhc3NlZCBhcyBjb25zZWN1dGl2ZSBhcmd1bWVudHMsIG9yIGFzIGFuIGFycmF5IG9mIGFyZ3VtZW50cy4gVG8gYXBwbHkgc2ltcGxlIHNjb3BlcyBhbmQgc2NvcGUgZnVuY3Rpb25zIHdpdGggbm8gYXJndW1lbnRzLCBwYXNzIHRoZW0gYXMgc3RyaW5ncy4gRm9yIHNjb3BlIGZ1bmN0aW9uLCBwYXNzIGFuIG9iamVjdCwgd2l0aCBhIGBtZXRob2RgIHByb3BlcnR5LiBUaGUgdmFsdWUgY2FuIGVpdGhlciBiZSBhIHN0cmluZywgaWYgdGhlIG1ldGhvZCBkb2VzIG5vdCB0YWtlIGFueSBhcmd1bWVudHMsIG9yIGFuIGFycmF5LCB3aGVyZSB0aGUgZmlyc3QgZWxlbWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kLCBhbmQgY29uc2VjdXRpdmUgZWxlbWVudHMgYXJlIGFyZ3VtZW50cyB0byB0aGF0IG1ldGhvZC4gUGFzcyBudWxsIHRvIHJlbW92ZSBhbGwgc2NvcGVzLCBpbmNsdWRpbmcgdGhlIGRlZmF1bHQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtNb2RlbH0gQSByZWZlcmVuY2UgdG8gdGhlIG1vZGVsLCB3aXRoIHRoZSBzY29wZShzKSBhcHBsaWVkLiBDYWxsaW5nIHNjb3BlIGFnYWluIG9uIHRoZSByZXR1cm5lZCBtb2RlbCB3aWxsIGNsZWFyIHRoZSBwcmV2aW91cyBzY29wZS5cbiAgICovXG4gIHN0YXRpYyBzY29wZShvcHRpb24pIHtcbiAgICBjb25zdCBzZWxmID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHt9O1xuICAgIGxldCBzY29wZTtcbiAgICBsZXQgc2NvcGVOYW1lO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICduYW1lJywgeyB2YWx1ZTogdGhpcy5uYW1lIH0pO1xuXG4gICAgc2VsZi5fc2NvcGUgPSB7fTtcbiAgICBzZWxmLl9zY29wZU5hbWVzID0gW107XG4gICAgc2VsZi5zY29wZWQgPSB0cnVlO1xuXG4gICAgaWYgKCFvcHRpb24pIHtcbiAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSBfLmZsYXR0ZW4oYXJndW1lbnRzKTtcblxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgIHNjb3BlID0gbnVsbDtcbiAgICAgIHNjb3BlTmFtZSA9IG51bGw7XG5cbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3Qob3B0aW9uKSkge1xuICAgICAgICBpZiAob3B0aW9uLm1ldGhvZCkge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbi5tZXRob2QpICYmICEhc2VsZi5vcHRpb25zLnNjb3Blc1tvcHRpb24ubWV0aG9kWzBdXSkge1xuICAgICAgICAgICAgc2NvcGVOYW1lID0gb3B0aW9uLm1ldGhvZFswXTtcbiAgICAgICAgICAgIHNjb3BlID0gc2VsZi5vcHRpb25zLnNjb3Blc1tzY29wZU5hbWVdLmFwcGx5KHNlbGYsIG9wdGlvbi5tZXRob2Quc2xpY2UoMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChzZWxmLm9wdGlvbnMuc2NvcGVzW29wdGlvbi5tZXRob2RdKSB7XG4gICAgICAgICAgICBzY29wZU5hbWUgPSBvcHRpb24ubWV0aG9kO1xuICAgICAgICAgICAgc2NvcGUgPSBzZWxmLm9wdGlvbnMuc2NvcGVzW3Njb3BlTmFtZV0uYXBwbHkoc2VsZik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjb3BlID0gb3B0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbiA9PT0gJ2RlZmF1bHRTY29wZScgJiYgXy5pc1BsYWluT2JqZWN0KHNlbGYub3B0aW9ucy5kZWZhdWx0U2NvcGUpKSB7XG4gICAgICAgIHNjb3BlID0gc2VsZi5vcHRpb25zLmRlZmF1bHRTY29wZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjb3BlTmFtZSA9IG9wdGlvbjtcbiAgICAgICAgc2NvcGUgPSBzZWxmLm9wdGlvbnMuc2NvcGVzW3Njb3BlTmFtZV07XG4gICAgICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzY29wZSA9IHNjb3BlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIHRoaXMuX2NvbmZvcm1JbmNsdWRlcyhzY29wZSwgdGhpcyk7XG4gICAgICAgIHRoaXMuX2Fzc2lnbk9wdGlvbnMoc2VsZi5fc2NvcGUsIHNjb3BlKTtcbiAgICAgICAgc2VsZi5fc2NvcGVOYW1lcy5wdXNoKHNjb3BlTmFtZSA/IHNjb3BlTmFtZSA6ICdkZWZhdWx0U2NvcGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuU2VxdWVsaXplU2NvcGVFcnJvcihgSW52YWxpZCBzY29wZSAke3Njb3BlTmFtZX0gY2FsbGVkLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3IgbXVsdGlwbGUgaW5zdGFuY2VzLlxuICAgKlxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5TaW1wbGUgc2VhcmNoIHVzaW5nIEFORCBhbmQgPTwvY2FwdGlvbj5cbiAgICogTW9kZWwuZmluZEFsbCh7XG4gICAqICAgd2hlcmU6IHtcbiAgICogICAgIGF0dHIxOiA0MixcbiAgICogICAgIGF0dHIyOiAnY2FrZSdcbiAgICogICB9XG4gICAqIH0pXG4gICAqXG4gICAqICMgV0hFUkUgYXR0cjEgPSA0MiBBTkQgYXR0cjIgPSAnY2FrZSdcbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+VXNpbmcgZ3JlYXRlciB0aGFuLCBsZXNzIHRoYW4gZXRjLjwvY2FwdGlvbj5cbiAgICogY29uc3Qge2d0LCBsdGUsIG5lLCBpbjogb3BJbn0gPSBTZXF1ZWxpemUuT3A7XG4gICAqXG4gICAqIE1vZGVsLmZpbmRBbGwoe1xuICAgKiAgIHdoZXJlOiB7XG4gICAqICAgICBhdHRyMToge1xuICAgKiAgICAgICBbZ3RdOiA1MFxuICAgKiAgICAgfSxcbiAgICogICAgIGF0dHIyOiB7XG4gICAqICAgICAgIFtsdGVdOiA0NVxuICAgKiAgICAgfSxcbiAgICogICAgIGF0dHIzOiB7XG4gICAqICAgICAgIFtvcEluXTogWzEsMiwzXVxuICAgKiAgICAgfSxcbiAgICogICAgIGF0dHI0OiB7XG4gICAqICAgICAgIFtuZV06IDVcbiAgICogICAgIH1cbiAgICogICB9XG4gICAqIH0pXG4gICAqXG4gICAqICMgV0hFUkUgYXR0cjEgPiA1MCBBTkQgYXR0cjIgPD0gNDUgQU5EIGF0dHIzIElOICgxLDIsMykgQU5EIGF0dHI0ICE9IDVcbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+UXVlcmllcyB1c2luZyBPUjwvY2FwdGlvbj5cbiAgICogY29uc3Qge29yLCBhbmQsIGd0LCBsdH0gPSBTZXF1ZWxpemUuT3A7XG4gICAqXG4gICAqIE1vZGVsLmZpbmRBbGwoe1xuICAgKiAgIHdoZXJlOiB7XG4gICAqICAgICBuYW1lOiAnYSBwcm9qZWN0JyxcbiAgICogICAgIFtvcl06IFtcbiAgICogICAgICAge2lkOiBbMSwgMiwgM119LFxuICAgKiAgICAgICB7XG4gICAqICAgICAgICAgW2FuZF06IFtcbiAgICogICAgICAgICAgIHtpZDoge1tndF06IDEwfX0sXG4gICAqICAgICAgICAgICB7aWQ6IHtbbHRdOiAxMDB9fVxuICAgKiAgICAgICAgIF1cbiAgICogICAgICAgfVxuICAgKiAgICAgXVxuICAgKiAgIH1cbiAgICogfSk7XG4gICAqXG4gICAqICMgV0hFUkUgYE1vZGVsYC5gbmFtZWAgPSAnYSBwcm9qZWN0JyBBTkQgKGBNb2RlbGAuYGlkYCBJTiAoMSwgMiwgMykgT1IgKGBNb2RlbGAuYGlkYCA+IDEwIEFORCBgTW9kZWxgLmBpZGAgPCAxMDApKTtcbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgT3BlcmF0b3JzfSBmb3IgcG9zc2libGUgb3BlcmF0b3JzXG4gICAqIF9fQWxpYXNfXzogX2FsbF9cbiAgICpcbiAgICogVGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCBhbiBhcnJheSBvZiBNb2RlbCBpbnN0YW5jZXMgaWYgdGhlIHF1ZXJ5IHN1Y2NlZWRzLl9cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc10gQSBoYXNoIG9mIG9wdGlvbnMgdG8gZGVzY3JpYmUgdGhlIHNjb3BlIG9mIHRoZSBzZWFyY2hcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy53aGVyZV0gQSBoYXNoIG9mIGF0dHJpYnV0ZXMgdG8gZGVzY3JpYmUgeW91ciBzZWFyY2guIFNlZSBhYm92ZSBmb3IgZXhhbXBsZXMuXG4gICAqIEBwYXJhbSAge0FycmF5PHN0cmluZz58T2JqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuYXR0cmlidXRlc10gQSBsaXN0IG9mIHRoZSBhdHRyaWJ1dGVzIHRoYXQgeW91IHdhbnQgdG8gc2VsZWN0LCBvciBhbiBvYmplY3Qgd2l0aCBgaW5jbHVkZWAgYW5kIGBleGNsdWRlYCBrZXlzLiBUbyByZW5hbWUgYW4gYXR0cmlidXRlLCB5b3UgY2FuIHBhc3MgYW4gYXJyYXksIHdpdGggdHdvIGVsZW1lbnRzIC0gdGhlIGZpcnN0IGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgaW4gdGhlIERCIChvciBzb21lIGtpbmQgb2YgZXhwcmVzc2lvbiBzdWNoIGFzIGBTZXF1ZWxpemUubGl0ZXJhbGAsIGBTZXF1ZWxpemUuZm5gIGFuZCBzbyBvbiksIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBuYW1lIHlvdSB3YW50IHRoZSBhdHRyaWJ1dGUgdG8gaGF2ZSBpbiB0aGUgcmV0dXJuZWQgaW5zdGFuY2VcbiAgICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5hdHRyaWJ1dGVzLmluY2x1ZGVdIFNlbGVjdCBhbGwgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG1vZGVsLCBwbHVzIHNvbWUgYWRkaXRpb25hbCBvbmVzLiBVc2VmdWwgZm9yIGFnZ3JlZ2F0aW9ucywgZS5nLiBgeyBhdHRyaWJ1dGVzOiB7IGluY2x1ZGU6IFtbc2VxdWVsaXplLmZuKCdDT1VOVCcsIHNlcXVlbGl6ZS5jb2woJ2lkJykpLCAndG90YWwnXV0gfWBcbiAgICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5hdHRyaWJ1dGVzLmV4Y2x1ZGVdIFNlbGVjdCBhbGwgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG1vZGVsLCBleGNlcHQgc29tZSBmZXcuIFVzZWZ1bCBmb3Igc2VjdXJpdHkgcHVycG9zZXMgZS5nLiBgeyBhdHRyaWJ1dGVzOiB7IGV4Y2x1ZGU6IFsncGFzc3dvcmQnXSB9IH1gXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMucGFyYW5vaWQ9dHJ1ZV0gSWYgdHJ1ZSwgb25seSBub24tZGVsZXRlZCByZWNvcmRzIHdpbGwgYmUgcmV0dXJuZWQuIElmIGZhbHNlLCBib3RoIGRlbGV0ZWQgYW5kIG5vbi1kZWxldGVkIHJlY29yZHMgd2lsbCBiZSByZXR1cm5lZC4gT25seSBhcHBsaWVzIGlmIGBvcHRpb25zLnBhcmFub2lkYCBpcyB0cnVlIGZvciB0aGUgbW9kZWwuXG4gICAqIEBwYXJhbSAge0FycmF5PE9iamVjdHxNb2RlbHxzdHJpbmc+fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZV0gQSBsaXN0IG9mIGFzc29jaWF0aW9ucyB0byBlYWdlcmx5IGxvYWQgdXNpbmcgYSBsZWZ0IGpvaW4uIFN1cHBvcnRlZCBpcyBlaXRoZXIgYHsgaW5jbHVkZTogWyBNb2RlbDEsIE1vZGVsMiwgLi4uXX1gIG9yIGB7IGluY2x1ZGU6IFt7IG1vZGVsOiBNb2RlbDEsIGFzOiAnQWxpYXMnIH1dfWAgb3IgYHsgaW5jbHVkZTogWydBbGlhcyddfWAuIElmIHlvdXIgYXNzb2NpYXRpb24gYXJlIHNldCB1cCB3aXRoIGFuIGBhc2AgKGVnLiBgWC5oYXNNYW55KFksIHsgYXM6ICdaIH1gLCB5b3UgbmVlZCB0byBzcGVjaWZ5IFogaW4gdGhlIGFzIGF0dHJpYnV0ZSB3aGVuIGVhZ2VyIGxvYWRpbmcgWSkuXG4gICAqIEBwYXJhbSAge01vZGVsfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZVtdLm1vZGVsXSBUaGUgbW9kZWwgeW91IHdhbnQgdG8gZWFnZXJseSBsb2FkXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZVtdLmFzXSBUaGUgYWxpYXMgb2YgdGhlIHJlbGF0aW9uLCBpbiBjYXNlIHRoZSBtb2RlbCB5b3Ugd2FudCB0byBlYWdlcmx5IGxvYWQgaXMgYWxpYXNlZC4gRm9yIGBoYXNPbmVgIC8gYGJlbG9uZ3NUb2AsIHRoaXMgc2hvdWxkIGJlIHRoZSBzaW5ndWxhciBuYW1lLCBhbmQgZm9yIGBoYXNNYW55YCwgaXQgc2hvdWxkIGJlIHRoZSBwbHVyYWxcbiAgICogQHBhcmFtICB7QXNzb2NpYXRpb259ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbmNsdWRlW10uYXNzb2NpYXRpb25dIFRoZSBhc3NvY2lhdGlvbiB5b3Ugd2FudCB0byBlYWdlcmx5IGxvYWQuIChUaGlzIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgcHJvdmlkaW5nIGEgbW9kZWwvYXMgcGFpcilcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbmNsdWRlW10ud2hlcmVdIFdoZXJlIGNsYXVzZXMgdG8gYXBwbHkgdG8gdGhlIGNoaWxkIG1vZGVscy4gTm90ZSB0aGF0IHRoaXMgY29udmVydHMgdGhlIGVhZ2VyIGxvYWQgdG8gYW4gaW5uZXIgam9pbiwgdW5sZXNzIHlvdSBleHBsaWNpdGx5IHNldCBgcmVxdWlyZWQ6IGZhbHNlYFxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVbXS5vcj1mYWxzZV0gV2hldGhlciB0byBiaW5kIHRoZSBPTiBhbmQgV0hFUkUgY2xhdXNlIHRvZ2V0aGVyIGJ5IE9SIGluc3RlYWQgb2YgQU5ELlxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVbXS5vbl0gU3VwcGx5IHlvdXIgb3duIE9OIGNvbmRpdGlvbiBmb3IgdGhlIGpvaW4uXG4gICAqIEBwYXJhbSAge0FycmF5PHN0cmluZz59ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZVtdLmF0dHJpYnV0ZXNdIEEgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHNlbGVjdCBmcm9tIHRoZSBjaGlsZCBtb2RlbFxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVbXS5yZXF1aXJlZF0gSWYgdHJ1ZSwgY29udmVydHMgdG8gYW4gaW5uZXIgam9pbiwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgcGFyZW50IG1vZGVsIHdpbGwgb25seSBiZSBsb2FkZWQgaWYgaXQgaGFzIGFueSBtYXRjaGluZyBjaGlsZHJlbi4gVHJ1ZSBpZiBgaW5jbHVkZS53aGVyZWAgaXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZVtdLnJpZ2h0XSBJZiB0cnVlLCBjb252ZXJ0cyB0byBhIHJpZ2h0IGpvaW4gaWYgZGlhbGVjdCBzdXBwb3J0IGl0LiBJZ25vcmVkIGlmIGBpbmNsdWRlLnJlcXVpcmVkYCBpcyB0cnVlLlxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVbXS5zZXBhcmF0ZV0gSWYgdHJ1ZSwgcnVucyBhIHNlcGFyYXRlIHF1ZXJ5IHRvIGZldGNoIHRoZSBhc3NvY2lhdGVkIGluc3RhbmNlcywgb25seSBzdXBwb3J0ZWQgZm9yIGhhc01hbnkgYXNzb2NpYXRpb25zXG4gICAqIEBwYXJhbSAge251bWJlcn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZVtdLmxpbWl0XSBMaW1pdCB0aGUgam9pbmVkIHJvd3MsIG9ubHkgc3VwcG9ydGVkIHdpdGggaW5jbHVkZS5zZXBhcmF0ZT10cnVlXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuaW5jbHVkZVtdLnRocm91Z2gud2hlcmVdIEZpbHRlciBvbiB0aGUgam9pbiBtb2RlbCBmb3IgYmVsb25nc1RvTWFueSByZWxhdGlvbnNcbiAgICogQHBhcmFtICB7QXJyYXl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbmNsdWRlW10udGhyb3VnaC5hdHRyaWJ1dGVzXSBBIGxpc3Qgb2YgYXR0cmlidXRlcyB0byBzZWxlY3QgZnJvbSB0aGUgam9pbiBtb2RlbCBmb3IgYmVsb25nc1RvTWFueSByZWxhdGlvbnNcbiAgICogQHBhcmFtICB7QXJyYXk8T2JqZWN0fE1vZGVsfHN0cmluZz59ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5pbmNsdWRlW10uaW5jbHVkZV0gTG9hZCBmdXJ0aGVyIG5lc3RlZCByZWxhdGVkIG1vZGVsc1xuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmluY2x1ZGVbXS5kdXBsaWNhdGluZ10gTWFyayB0aGUgaW5jbHVkZSBhcyBkdXBsaWNhdGluZywgd2lsbCBwcmV2ZW50IGEgc3VicXVlcnkgZnJvbSBiZWluZyB1c2VkLlxuICAgKiBAcGFyYW0gIHtBcnJheXxTZXF1ZWxpemUuZm58U2VxdWVsaXplLmNvbHxTZXF1ZWxpemUubGl0ZXJhbH0gICAgICAgIFtvcHRpb25zLm9yZGVyXSBTcGVjaWZpZXMgYW4gb3JkZXJpbmcuIFVzaW5nIGFuIGFycmF5LCB5b3UgY2FuIHByb3ZpZGUgc2V2ZXJhbCBjb2x1bW5zIC8gZnVuY3Rpb25zIHRvIG9yZGVyIGJ5LiBFYWNoIGVsZW1lbnQgY2FuIGJlIGZ1cnRoZXIgd3JhcHBlZCBpbiBhIHR3by1lbGVtZW50IGFycmF5LiBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGUgY29sdW1uIC8gZnVuY3Rpb24gdG8gb3JkZXIgYnksIHRoZSBzZWNvbmQgaXMgdGhlIGRpcmVjdGlvbi4gRm9yIGV4YW1wbGU6IGBvcmRlcjogW1snbmFtZScsICdERVNDJ11dYC4gSW4gdGhpcyB3YXkgdGhlIGNvbHVtbiB3aWxsIGJlIGVzY2FwZWQsIGJ1dCB0aGUgZGlyZWN0aW9uIHdpbGwgbm90LlxuICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmxpbWl0XSBMaW1pdCBmb3IgcmVzdWx0XG4gICAqIEBwYXJhbSAge251bWJlcn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMub2Zmc2V0XSBPZmZzZXQgZm9yIHJlc3VsdFxuICAgKiBAcGFyYW0gIHtUcmFuc2FjdGlvbn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcbiAgICogQHBhcmFtICB7c3RyaW5nfE9iamVjdH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5sb2NrXSBMb2NrIHRoZSBzZWxlY3RlZCByb3dzLiBQb3NzaWJsZSBvcHRpb25zIGFyZSB0cmFuc2FjdGlvbi5MT0NLLlVQREFURSBhbmQgdHJhbnNhY3Rpb24uTE9DSy5TSEFSRS4gUG9zdGdyZXMgYWxzbyBzdXBwb3J0cyB0cmFuc2FjdGlvbi5MT0NLLktFWV9TSEFSRSwgdHJhbnNhY3Rpb24uTE9DSy5OT19LRVlfVVBEQVRFIGFuZCBzcGVjaWZpYyBtb2RlbCBsb2NrcyB3aXRoIGpvaW5zLiBTZWUgW3RyYW5zYWN0aW9uLkxPQ0sgZm9yIGFuIGV4YW1wbGVdKHRyYW5zYWN0aW9uI2xvY2spXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuc2tpcExvY2tlZF0gU2tpcCBsb2NrZWQgcm93cy4gT25seSBzdXBwb3J0ZWQgaW4gUG9zdGdyZXMuXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMucmF3XSBSZXR1cm4gcmF3IHJlc3VsdC4gU2VlIHNlcXVlbGl6ZS5xdWVyeSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtICB7RnVuY3Rpb259ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5sb2dnaW5nPWZhbHNlXSBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCB3aGlsZSBydW5uaW5nIHRoZSBxdWVyeSB0byBsb2cgdGhlIHNxbC5cbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmhhdmluZ10gSGF2aW5nIG9wdGlvbnNcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5zZWFyY2hQYXRoPURFRkFVTFRdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBzY2hlbWEgc2VhcmNoX3BhdGggKFBvc3RncmVzIG9ubHkpXG4gICAqIEBwYXJhbSAge2Jvb2xlYW58RXJyb3J9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMucmVqZWN0T25FbXB0eT1mYWxzZV0gVGhyb3dzIGFuIGVycm9yIHdoZW4gbm8gcmVjb3JkcyBmb3VuZFxuICAgKlxuICAgKiBAc2VlXG4gICAqIHtAbGluayBTZXF1ZWxpemUjcXVlcnl9XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PE1vZGVsPj59XG4gICAqL1xuICBzdGF0aWMgZmluZEFsbChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiAhXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgc2VxdWVsaXplRXJyb3JzLlF1ZXJ5RXJyb3IoJ1RoZSBhcmd1bWVudCBwYXNzZWQgdG8gZmluZEFsbCBtdXN0IGJlIGFuIG9wdGlvbnMgb2JqZWN0LCB1c2UgZmluZEJ5UGsgaWYgeW91IHdpc2ggdG8gcGFzcyBhIHNpbmdsZSBwcmltYXJ5IGtleSB2YWx1ZScpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5hdHRyaWJ1dGVzKSAmJiAhXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMuYXR0cmlidXRlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5RdWVyeUVycm9yKCdUaGUgYXR0cmlidXRlcyBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBjb2x1bW4gbmFtZXMgb3IgYW4gb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy53YXJuT25JbnZhbGlkT3B0aW9ucyhvcHRpb25zLCBPYmplY3Qua2V5cyh0aGlzLnJhd0F0dHJpYnV0ZXMpKTtcblxuICAgIGNvbnN0IHRhYmxlTmFtZXMgPSB7fTtcblxuICAgIHRhYmxlTmFtZXNbdGhpcy5nZXRUYWJsZU5hbWUob3B0aW9ucyldID0gdHJ1ZTtcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xuXG4gICAgXy5kZWZhdWx0cyhvcHRpb25zLCB7IGhvb2tzOiB0cnVlIH0pO1xuXG4gICAgLy8gc2V0IHJlamVjdE9uRW1wdHkgb3B0aW9uLCBkZWZhdWx0cyB0byBtb2RlbCBvcHRpb25zXG4gICAgb3B0aW9ucy5yZWplY3RPbkVtcHR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdyZWplY3RPbkVtcHR5JylcbiAgICAgID8gb3B0aW9ucy5yZWplY3RPbkVtcHR5XG4gICAgICA6IHRoaXMub3B0aW9ucy5yZWplY3RPbkVtcHR5O1xuXG4gICAgcmV0dXJuIFByb21pc2UudHJ5KCgpID0+IHtcbiAgICAgIHRoaXMuX2luamVjdFNjb3BlKG9wdGlvbnMpO1xuXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcygnYmVmb3JlRmluZCcsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY29uZm9ybUluY2x1ZGVzKG9wdGlvbnMsIHRoaXMpO1xuICAgICAgdGhpcy5fZXhwYW5kQXR0cmlidXRlcyhvcHRpb25zKTtcbiAgICAgIHRoaXMuX2V4cGFuZEluY2x1ZGVBbGwob3B0aW9ucyk7XG5cbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVGaW5kQWZ0ZXJFeHBhbmRJbmNsdWRlQWxsJywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBvcHRpb25zLm9yaWdpbmFsQXR0cmlidXRlcyA9IHRoaXMuX2luamVjdERlcGVuZGVudFZpcnR1YWxBdHRyaWJ1dGVzKG9wdGlvbnMuYXR0cmlidXRlcyk7XG5cbiAgICAgIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgICAgb3B0aW9ucy5oYXNKb2luID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl92YWxpZGF0ZUluY2x1ZGVkRWxlbWVudHMob3B0aW9ucywgdGFibGVOYW1lcyk7XG5cbiAgICAgICAgLy8gSWYgd2UncmUgbm90IHJhdywgd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgaW5jbHVkZSB0aGUgcHJpbWFyeSBrZXkgZm9yIGRlLWR1cGxpY2F0aW9uXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLmF0dHJpYnV0ZXNcbiAgICAgICAgICAmJiAhb3B0aW9ucy5yYXdcbiAgICAgICAgICAmJiB0aGlzLnByaW1hcnlLZXlBdHRyaWJ1dGVcbiAgICAgICAgICAmJiAhb3B0aW9ucy5hdHRyaWJ1dGVzLmluY2x1ZGVzKHRoaXMucHJpbWFyeUtleUF0dHJpYnV0ZSlcbiAgICAgICAgICAmJiAoIW9wdGlvbnMuZ3JvdXAgfHwgIW9wdGlvbnMuaGFzU2luZ2xlQXNzb2NpYXRpb24gfHwgb3B0aW9ucy5oYXNNdWx0aUFzc29jaWF0aW9uKVxuICAgICAgICApIHtcbiAgICAgICAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBbdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlXS5jb25jYXQob3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMuYXR0cmlidXRlcykge1xuICAgICAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyh0aGlzLnJhd0F0dHJpYnV0ZXMpO1xuICAgICAgICBvcHRpb25zLm9yaWdpbmFsQXR0cmlidXRlcyA9IHRoaXMuX2luamVjdERlcGVuZGVudFZpcnR1YWxBdHRyaWJ1dGVzKG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHdoZXJlQ29sbGVjdGlvbiBpcyB1c2VkIGZvciBub24tcHJpbWFyeSBrZXkgdXBkYXRlc1xuICAgICAgdGhpcy5vcHRpb25zLndoZXJlQ29sbGVjdGlvbiA9IG9wdGlvbnMud2hlcmUgfHwgbnVsbDtcblxuICAgICAgVXRpbHMubWFwRmluZGVyT3B0aW9ucyhvcHRpb25zLCB0aGlzKTtcblxuICAgICAgb3B0aW9ucyA9IHRoaXMuX3BhcmFub2lkQ2xhdXNlKHRoaXMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcygnYmVmb3JlRmluZEFmdGVyT3B0aW9ucycsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgdGFibGVOYW1lczogT2JqZWN0LmtleXModGFibGVOYW1lcykgfSk7XG4gICAgICByZXR1cm4gdGhpcy5RdWVyeUludGVyZmFjZS5zZWxlY3QodGhpcywgdGhpcy5nZXRUYWJsZU5hbWUoc2VsZWN0T3B0aW9ucyksIHNlbGVjdE9wdGlvbnMpO1xuICAgIH0pLnRhcChyZXN1bHRzID0+IHtcbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdhZnRlckZpbmQnLCByZXN1bHRzLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KS50aGVuKHJlc3VsdHMgPT4ge1xuXG4gICAgICAvL3JlamVjdE9uRW1wdHkgbW9kZVxuICAgICAgaWYgKF8uaXNFbXB0eShyZXN1bHRzKSAmJiBvcHRpb25zLnJlamVjdE9uRW1wdHkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlamVjdE9uRW1wdHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgb3B0aW9ucy5yZWplY3RPbkVtcHR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlamVjdE9uRW1wdHkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhyb3cgb3B0aW9ucy5yZWplY3RPbkVtcHR5O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBzZXF1ZWxpemVFcnJvcnMuRW1wdHlSZXN1bHRFcnJvcigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gTW9kZWwuX2ZpbmRTZXBhcmF0ZShyZXN1bHRzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyB3YXJuT25JbnZhbGlkT3B0aW9ucyhvcHRpb25zLCB2YWxpZENvbHVtbk5hbWVzKSB7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1bnJlY29nbml6ZWRPcHRpb25zID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKGsgPT4gIXZhbGlkUXVlcnlLZXl3b3Jkcy5oYXMoaykpO1xuICAgIGNvbnN0IHVuZXhwZWN0ZWRNb2RlbEF0dHJpYnV0ZXMgPSBfLmludGVyc2VjdGlvbih1bnJlY29nbml6ZWRPcHRpb25zLCB2YWxpZENvbHVtbk5hbWVzKTtcbiAgICBpZiAoIW9wdGlvbnMud2hlcmUgJiYgdW5leHBlY3RlZE1vZGVsQXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIud2FybihgTW9kZWwgYXR0cmlidXRlcyAoJHt1bmV4cGVjdGVkTW9kZWxBdHRyaWJ1dGVzLmpvaW4oJywgJyl9KSBwYXNzZWQgaW50byBmaW5kZXIgbWV0aG9kIG9wdGlvbnMgb2YgbW9kZWwgJHt0aGlzLm5hbWV9LCBidXQgdGhlIG9wdGlvbnMud2hlcmUgb2JqZWN0IGlzIGVtcHR5LiBEaWQgeW91IGZvcmdldCB0byB1c2Ugb3B0aW9ucy53aGVyZT9gKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgX2luamVjdERlcGVuZGVudFZpcnR1YWxBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoIXRoaXMuX2hhc1ZpcnR1YWxBdHRyaWJ1dGVzKSByZXR1cm4gYXR0cmlidXRlcztcbiAgICBpZiAoIWF0dHJpYnV0ZXMgfHwgIUFycmF5LmlzQXJyYXkoYXR0cmlidXRlcykpIHJldHVybiBhdHRyaWJ1dGVzO1xuXG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLl92aXJ0dWFsQXR0cmlidXRlcy5oYXMoYXR0cmlidXRlKVxuICAgICAgICAmJiB0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cmlidXRlXS50eXBlLmZpZWxkc1xuICAgICAgKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmNvbmNhdCh0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cmlidXRlXS50eXBlLmZpZWxkcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXR0cmlidXRlcyA9IF8udW5pcShhdHRyaWJ1dGVzKTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICB9XG5cbiAgc3RhdGljIF9maW5kU2VwYXJhdGUocmVzdWx0cywgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucy5pbmNsdWRlIHx8IG9wdGlvbnMucmF3IHx8ICFyZXN1bHRzKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdHMpO1xuXG4gICAgY29uc3Qgb3JpZ2luYWwgPSByZXN1bHRzO1xuICAgIGlmIChvcHRpb25zLnBsYWluKSByZXN1bHRzID0gW3Jlc3VsdHNdO1xuXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG9yaWdpbmFsO1xuXG4gICAgcmV0dXJuIFByb21pc2UubWFwKG9wdGlvbnMuaW5jbHVkZSwgaW5jbHVkZSA9PiB7XG4gICAgICBpZiAoIWluY2x1ZGUuc2VwYXJhdGUpIHtcbiAgICAgICAgcmV0dXJuIE1vZGVsLl9maW5kU2VwYXJhdGUoXG4gICAgICAgICAgcmVzdWx0cy5yZWR1Y2UoKG1lbW8sIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgbGV0IGFzc29jaWF0aW9ucyA9IHJlc3VsdC5nZXQoaW5jbHVkZS5hc3NvY2lhdGlvbi5hcyk7XG5cbiAgICAgICAgICAgIC8vIE1pZ2h0IGJlIGFuIGVtcHR5IGJlbG9uZ3NUbyByZWxhdGlvblxuICAgICAgICAgICAgaWYgKCFhc3NvY2lhdGlvbnMpIHJldHVybiBtZW1vO1xuXG4gICAgICAgICAgICAvLyBGb3JjZSBhcnJheSBzbyB3ZSBjYW4gY29uY2F0IG5vIG1hdHRlciBpZiBpdCdzIDE6MSBvciA6TVxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9ucykpIGFzc29jaWF0aW9ucyA9IFthc3NvY2lhdGlvbnNdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXNzb2NpYXRpb25zLmxlbmd0aDsgaSAhPT0gbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgbWVtby5wdXNoKGFzc29jaWF0aW9uc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgICAgICB9LCBbXSksXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgXy5vbWl0KG9wdGlvbnMsICdpbmNsdWRlJywgJ2F0dHJpYnV0ZXMnLCAnb3JkZXInLCAnd2hlcmUnLCAnbGltaXQnLCAnb2Zmc2V0JywgJ3BsYWluJywgJ3Njb3BlJyksXG4gICAgICAgICAgICB7IGluY2x1ZGU6IGluY2x1ZGUuaW5jbHVkZSB8fCBbXSB9XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5jbHVkZS5hc3NvY2lhdGlvbi5nZXQocmVzdWx0cywgT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIF8ub21pdChvcHRpb25zLCBub25DYXNjYWRpbmdPcHRpb25zKSxcbiAgICAgICAgXy5vbWl0KGluY2x1ZGUsIFsncGFyZW50JywgJ2Fzc29jaWF0aW9uJywgJ2FzJywgJ29yaWdpbmFsQXR0cmlidXRlcyddKVxuICAgICAgKSkudGhlbihtYXAgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgcmVzdWx0LnNldChcbiAgICAgICAgICAgIGluY2x1ZGUuYXNzb2NpYXRpb24uYXMsXG4gICAgICAgICAgICBtYXBbcmVzdWx0LmdldChpbmNsdWRlLmFzc29jaWF0aW9uLnNvdXJjZUtleSldLFxuICAgICAgICAgICAgeyByYXc6IHRydWUgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLnJldHVybihvcmlnaW5hbCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBhIHNpbmdsZSBpbnN0YW5jZSBieSBpdHMgcHJpbWFyeSBrZXkuX1xuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXJ8c3RyaW5nfEJ1ZmZlcn0gICAgICBwYXJhbSBUaGUgdmFsdWUgb2YgdGhlIGRlc2lyZWQgaW5zdGFuY2UncyBwcmltYXJ5IGtleS5cbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdIGZpbmQgb3B0aW9uc1xuICAgKiBAcGFyYW0gIHtUcmFuc2FjdGlvbn0gICAgICAgICAgICAgICBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLnNlYXJjaFBhdGg9REVGQVVMVF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHNjaGVtYSBzZWFyY2hfcGF0aCAoUG9zdGdyZXMgb25seSlcbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuZmluZEFsbH0gICAgICAgICAgIGZvciBhIGZ1bGwgZXhwbGFuYXRpb24gb2Ygb3B0aW9ucywgTm90ZSB0aGF0IG9wdGlvbnMud2hlcmUgaXMgbm90IHN1cHBvcnRlZC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWw+fVxuICAgKi9cbiAgc3RhdGljIGZpbmRCeVBrKHBhcmFtLCBvcHRpb25zKSB7XG4gICAgLy8gcmV0dXJuIFByb21pc2UgcmVzb2x2ZWQgd2l0aCBudWxsIGlmIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkXG4gICAgaWYgKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHBhcmFtKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJyB8fCBCdWZmZXIuaXNCdWZmZXIocGFyYW0pKSB7XG4gICAgICBvcHRpb25zLndoZXJlID0ge1xuICAgICAgICBbdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlXTogcGFyYW1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXJndW1lbnQgcGFzc2VkIHRvIGZpbmRCeVBrIGlzIGludmFsaWQ6ICR7cGFyYW19YCk7XG4gICAgfVxuXG4gICAgLy8gQnlwYXNzIGEgcG9zc2libGUgb3ZlcmxvYWRlZCBmaW5kT25lXG4gICAgcmV0dXJuIHRoaXMuZmluZE9uZShvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIGEgc2luZ2xlIGluc3RhbmNlLiBUaGlzIGFwcGxpZXMgTElNSVQgMSwgc28gdGhlIGxpc3RlbmVyIHdpbGwgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGluc3RhbmNlLlxuICAgKlxuICAgKiBfX0FsaWFzX186IF9maW5kX1xuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgIFtvcHRpb25zXSBBIGhhc2ggb2Ygb3B0aW9ucyB0byBkZXNjcmliZSB0aGUgc2NvcGUgb2YgdGhlIHNlYXJjaFxuICAgKiBAcGFyYW0gIHtUcmFuc2FjdGlvbn0gIFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgICAgICBbb3B0aW9ucy5zZWFyY2hQYXRoPURFRkFVTFRdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBzY2hlbWEgc2VhcmNoX3BhdGggKFBvc3RncmVzIG9ubHkpXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRBbGx9IGZvciBhbiBleHBsYW5hdGlvbiBvZiBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsPn1cbiAgICovXG4gIHN0YXRpYyBmaW5kT25lKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmICFfLmlzUGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGFyZ3VtZW50IHBhc3NlZCB0byBmaW5kT25lIG11c3QgYmUgYW4gb3B0aW9ucyBvYmplY3QsIHVzZSBmaW5kQnlQayBpZiB5b3Ugd2lzaCB0byBwYXNzIGEgc2luZ2xlIHByaW1hcnkga2V5IHZhbHVlJyk7XG4gICAgfVxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5saW1pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB1bmlxdWVTaW5nbGVDb2x1bW5zID0gXy5jaGFpbih0aGlzLnVuaXF1ZUtleXMpLnZhbHVlcygpLmZpbHRlcihjID0+IGMuZmllbGRzLmxlbmd0aCA9PT0gMSkubWFwKCdjb2x1bW4nKS52YWx1ZSgpO1xuXG4gICAgICAvLyBEb24ndCBhZGQgbGltaXQgaWYgcXVlcnlpbmcgZGlyZWN0bHkgb24gdGhlIHBrIG9yIGEgdW5pcXVlIGNvbHVtblxuICAgICAgaWYgKCFvcHRpb25zLndoZXJlIHx8ICFfLnNvbWUob3B0aW9ucy53aGVyZSwgKHZhbHVlLCBrZXkpID0+XG4gICAgICAgIChrZXkgPT09IHRoaXMucHJpbWFyeUtleUF0dHJpYnV0ZSB8fCB1bmlxdWVTaW5nbGVDb2x1bW5zLmluY2x1ZGVzKGtleSkpICYmXG4gICAgICAgICAgKFV0aWxzLmlzUHJpbWl0aXZlKHZhbHVlKSB8fCBCdWZmZXIuaXNCdWZmZXIodmFsdWUpKVxuICAgICAgKSkge1xuICAgICAgICBvcHRpb25zLmxpbWl0ID0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCeXBhc3MgYSBwb3NzaWJsZSBvdmVybG9hZGVkIGZpbmRBbGwuXG4gICAgcmV0dXJuIHRoaXMuZmluZEFsbChfLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICAgIHBsYWluOiB0cnVlXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBhbiBhZ2dyZWdhdGlvbiBtZXRob2Qgb24gdGhlIHNwZWNpZmllZCBmaWVsZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgYXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgdG8gYWdncmVnYXRlIG92ZXIuIENhbiBiZSBhIGZpZWxkIG5hbWUgb3IgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgYWdncmVnYXRlRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRvIHVzZSBmb3IgYWdncmVnYXRpb24sIGUuZy4gc3VtLCBtYXggZXRjLlxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgW29wdGlvbnNdIFF1ZXJ5IG9wdGlvbnMuIFNlZSBzZXF1ZWxpemUucXVlcnkgZm9yIGZ1bGwgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgW29wdGlvbnMud2hlcmVdIEEgaGFzaCBvZiBzZWFyY2ggYXR0cmlidXRlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gICAgICAgIFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMuYmVuY2htYXJrPWZhbHNlXSBQYXNzIHF1ZXJ5IGV4ZWN1dGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcyBhcyBzZWNvbmQgYXJndW1lbnQgdG8gbG9nZ2luZyBmdW5jdGlvbiAob3B0aW9ucy5sb2dnaW5nKS5cbiAgICogQHBhcmFtIHtEYXRhVHlwZXN8c3RyaW5nfSBbb3B0aW9ucy5kYXRhVHlwZV0gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdC4gSWYgYGZpZWxkYCBpcyBhIGZpZWxkIGluIHRoaXMgTW9kZWwsIHRoZSBkZWZhdWx0IHdpbGwgYmUgdGhlIHR5cGUgb2YgdGhhdCBmaWVsZCwgb3RoZXJ3aXNlIGRlZmF1bHRzIHRvIGZsb2F0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMuZGlzdGluY3RdIEFwcGxpZXMgRElTVElOQ1QgdG8gdGhlIGZpZWxkIGJlaW5nIGFnZ3JlZ2F0ZWQgb3ZlclxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSAgICAgW29wdGlvbnMudHJhbnNhY3Rpb25dIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMucGxhaW5dIFdoZW4gYHRydWVgLCB0aGUgZmlyc3QgcmV0dXJuZWQgdmFsdWUgb2YgYGFnZ3JlZ2F0ZUZ1bmN0aW9uYCBpcyBjYXN0IHRvIGBkYXRhVHlwZWAgYW5kIHJldHVybmVkLiBJZiBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgYXJlIHNwZWNpZmllZCwgYWxvbmcgd2l0aCBgZ3JvdXBgIGNsYXVzZXMsIHNldCBgcGxhaW5gIHRvIGBmYWxzZWAgdG8gcmV0dXJuIGFsbCB2YWx1ZXMgb2YgYWxsIHJldHVybmVkIHJvd3MuICBEZWZhdWx0cyB0byBgdHJ1ZWBcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8RGF0YVR5cGVzfE9iamVjdD59IFJldHVybnMgdGhlIGFnZ3JlZ2F0ZSByZXN1bHQgY2FzdCB0byBgb3B0aW9ucy5kYXRhVHlwZWAsIHVubGVzcyBgb3B0aW9ucy5wbGFpbmAgaXMgZmFsc2UsIGluIHdoaWNoIGNhc2UgdGhlIGNvbXBsZXRlIGRhdGEgcmVzdWx0IGlzIHJldHVybmVkLlxuICAgKi9cbiAgc3RhdGljIGFnZ3JlZ2F0ZShhdHRyaWJ1dGUsIGFnZ3JlZ2F0ZUZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKTtcblxuICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgYXR0cmlidXRlcyBoZXJlIGFzIHRoZSBgaW5qZWN0U2NvcGVgIGNhbGwgd291bGQgaW5qZWN0IG5vbiBhZ2dyZWdhdGUgY29sdW1ucy5cbiAgICBjb25zdCBwcmV2QXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcztcbiAgICB0aGlzLl9pbmplY3RTY29wZShvcHRpb25zKTtcbiAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBwcmV2QXR0cmlidXRlcztcbiAgICB0aGlzLl9jb25mb3JtSW5jbHVkZXMob3B0aW9ucywgdGhpcyk7XG5cbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlKSB7XG4gICAgICB0aGlzLl9leHBhbmRJbmNsdWRlQWxsKG9wdGlvbnMpO1xuICAgICAgdGhpcy5fdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHJPcHRpb25zID0gdGhpcy5yYXdBdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG4gICAgY29uc3QgZmllbGQgPSBhdHRyT3B0aW9ucyAmJiBhdHRyT3B0aW9ucy5maWVsZCB8fCBhdHRyaWJ1dGU7XG4gICAgbGV0IGFnZ3JlZ2F0ZUNvbHVtbiA9IHRoaXMuc2VxdWVsaXplLmNvbChmaWVsZCk7XG5cbiAgICBpZiAob3B0aW9ucy5kaXN0aW5jdCkge1xuICAgICAgYWdncmVnYXRlQ29sdW1uID0gdGhpcy5zZXF1ZWxpemUuZm4oJ0RJU1RJTkNUJywgYWdncmVnYXRlQ29sdW1uKTtcbiAgICB9XG5cbiAgICBsZXQgeyBncm91cCB9ID0gb3B0aW9ucztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShncm91cCkgJiYgQXJyYXkuaXNBcnJheShncm91cFswXSkpIHtcbiAgICAgIG5vRG91YmxlTmVzdGVkR3JvdXAoKTtcbiAgICAgIGdyb3VwID0gXy5mbGF0dGVuKGdyb3VwKTtcbiAgICB9XG4gICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gXy51bmlvbkJ5KFxuICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzLFxuICAgICAgZ3JvdXAsXG4gICAgICBbW3RoaXMuc2VxdWVsaXplLmZuKGFnZ3JlZ2F0ZUZ1bmN0aW9uLCBhZ2dyZWdhdGVDb2x1bW4pLCBhZ2dyZWdhdGVGdW5jdGlvbl1dLFxuICAgICAgYSA9PiBBcnJheS5pc0FycmF5KGEpID8gYVsxXSA6IGFcbiAgICApO1xuXG4gICAgaWYgKCFvcHRpb25zLmRhdGFUeXBlKSB7XG4gICAgICBpZiAoYXR0ck9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9IGF0dHJPcHRpb25zLnR5cGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVc2UgRkxPQVQgYXMgZmFsbGJhY2tcbiAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9IG5ldyBEYXRhVHlwZXMuRkxPQVQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9IHRoaXMuc2VxdWVsaXplLm5vcm1hbGl6ZURhdGFUeXBlKG9wdGlvbnMuZGF0YVR5cGUpO1xuICAgIH1cblxuICAgIFV0aWxzLm1hcE9wdGlvbkZpZWxkTmFtZXMob3B0aW9ucywgdGhpcyk7XG4gICAgb3B0aW9ucyA9IHRoaXMuX3BhcmFub2lkQ2xhdXNlKHRoaXMsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuUXVlcnlJbnRlcmZhY2UucmF3U2VsZWN0KHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCBvcHRpb25zLCBhZ2dyZWdhdGVGdW5jdGlvbiwgdGhpcykudGhlbiggdmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvdW50IHRoZSBudW1iZXIgb2YgcmVjb3JkcyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgd2hlcmUgY2xhdXNlLlxuICAgKlxuICAgKiBJZiB5b3UgcHJvdmlkZSBhbiBgaW5jbHVkZWAgb3B0aW9uLCB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIGFzc29jaWF0aW9ucyB3aWxsIGJlIGNvdW50ZWQgaW5zdGVhZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICBbb3B0aW9uc10gb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgIFtvcHRpb25zLndoZXJlXSBBIGhhc2ggb2Ygc2VhcmNoIGF0dHJpYnV0ZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgW29wdGlvbnMuaW5jbHVkZV0gSW5jbHVkZSBvcHRpb25zLiBTZWUgYGZpbmRgIGZvciBkZXRhaWxzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgW29wdGlvbnMucGFyYW5vaWQ9dHJ1ZV0gU2V0IGB0cnVlYCB0byBjb3VudCBvbmx5IG5vbi1kZWxldGVkIHJlY29yZHMuIENhbiBiZSB1c2VkIG9uIG1vZGVscyB3aXRoIGBwYXJhbm9pZGAgZW5hYmxlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgIFtvcHRpb25zLmRpc3RpbmN0XSBBcHBseSBDT1VOVChESVNUSU5DVChjb2wpKSBvbiBwcmltYXJ5IGtleSBvciBvbiBvcHRpb25zLmNvbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBbb3B0aW9ucy5jb2xdIENvbHVtbiBvbiB3aGljaCBDT1VOVCgpIHNob3VsZCBiZSBhcHBsaWVkXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgICAgICAgW29wdGlvbnMuYXR0cmlidXRlc10gVXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBncm91cGBcbiAgICogQHBhcmFtIHtBcnJheX0gICAgICAgICBbb3B0aW9ucy5ncm91cF0gRm9yIGNyZWF0aW5nIGNvbXBsZXggY291bnRzLiBXaWxsIHJldHVybiBtdWx0aXBsZSByb3dzIGFzIG5lZWRlZC5cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gICBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259ICAgICAgW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgW29wdGlvbnMuYmVuY2htYXJrPWZhbHNlXSBQYXNzIHF1ZXJ5IGV4ZWN1dGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcyBhcyBzZWNvbmQgYXJndW1lbnQgdG8gbG9nZ2luZyBmdW5jdGlvbiAob3B0aW9ucy5sb2dnaW5nKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBbb3B0aW9ucy5zZWFyY2hQYXRoPURFRkFVTFRdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBzY2hlbWEgc2VhcmNoX3BhdGggKFBvc3RncmVzIG9ubHkpXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59XG4gICAqL1xuICBzdGF0aWMgY291bnQob3B0aW9ucykge1xuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XG4gICAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucyA9IF8uZGVmYXVsdHMob3B0aW9ucywgeyBob29rczogdHJ1ZSB9KTtcbiAgICAgIG9wdGlvbnMucmF3ID0gdHJ1ZTtcbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVDb3VudCcsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgbGV0IGNvbCA9IG9wdGlvbnMuY29sIHx8ICcqJztcbiAgICAgIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgICAgY29sID0gYCR7dGhpcy5uYW1lfS4ke29wdGlvbnMuY29sIHx8IHRoaXMucHJpbWFyeUtleUZpZWxkfWA7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMucGxhaW4gPSAhb3B0aW9ucy5ncm91cDtcbiAgICAgIG9wdGlvbnMuZGF0YVR5cGUgPSBuZXcgRGF0YVR5cGVzLklOVEVHRVIoKTtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUlnbm9yZUF0dHJpYnV0ZXMgPSBmYWxzZTtcblxuICAgICAgLy8gTm8gbGltaXQsIG9mZnNldCBvciBvcmRlciBmb3IgdGhlIG9wdGlvbnMgbWF4IGJlIGdpdmVuIHRvIGNvdW50KClcbiAgICAgIC8vIFNldCB0aGVtIHRvIG51bGwgdG8gcHJldmVudCBzY29wZXMgc2V0dGluZyB0aG9zZSB2YWx1ZXNcbiAgICAgIG9wdGlvbnMubGltaXQgPSBudWxsO1xuICAgICAgb3B0aW9ucy5vZmZzZXQgPSBudWxsO1xuICAgICAgb3B0aW9ucy5vcmRlciA9IG51bGw7XG5cbiAgICAgIHJldHVybiB0aGlzLmFnZ3JlZ2F0ZShjb2wsICdjb3VudCcsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYWxsIHRoZSByb3dzIG1hdGNoaW5nIHlvdXIgcXVlcnksIHdpdGhpbiBhIHNwZWNpZmllZCBvZmZzZXQgLyBsaW1pdCwgYW5kIGdldCB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgbWF0Y2hpbmcgeW91ciBxdWVyeS4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IgcGFnaW5nXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIE1vZGVsLmZpbmRBbmRDb3VudEFsbCh7XG4gICAqICAgd2hlcmU6IC4uLixcbiAgICogICBsaW1pdDogMTIsXG4gICAqICAgb2Zmc2V0OiAxMlxuICAgKiB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAqICAgLi4uXG4gICAqIH0pXG4gICAqXG4gICAqICMgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIGByZXN1bHQucm93c2Agd2lsbCBjb250YWluIHJvd3MgMTMgdGhyb3VnaCAyNCwgd2hpbGUgYHJlc3VsdC5jb3VudGAgd2lsbCByZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIHRoYXQgbWF0Y2hlZCB5b3VyIHF1ZXJ5LlxuICAgKlxuICAgKiAjIFdoZW4geW91IGFkZCBpbmNsdWRlcywgb25seSB0aG9zZSB3aGljaCBhcmUgcmVxdWlyZWQgKGVpdGhlciBiZWNhdXNlIHRoZXkgaGF2ZSBhIHdoZXJlIGNsYXVzZSwgb3IgYmVjYXVzZSBgcmVxdWlyZWRgIGlzIGV4cGxpY2l0bHkgc2V0IHRvIHRydWUgb24gdGhlIGluY2x1ZGUpIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvdW50IHBhcnQuXG4gICAqXG4gICAqICMgU3VwcG9zZSB5b3Ugd2FudCB0byBmaW5kIGFsbCB1c2VycyB3aG8gaGF2ZSBhIHByb2ZpbGUgYXR0YWNoZWQ6XG4gICAqXG4gICAqIFVzZXIuZmluZEFuZENvdW50QWxsKHtcbiAgICogICBpbmNsdWRlOiBbXG4gICAqICAgICAgeyBtb2RlbDogUHJvZmlsZSwgcmVxdWlyZWQ6IHRydWV9XG4gICAqICAgXSxcbiAgICogICBsaW1pdCAzXG4gICAqIH0pO1xuICAgKlxuICAgKiAjIEJlY2F1c2UgdGhlIGluY2x1ZGUgZm9yIGBQcm9maWxlYCBoYXMgYHJlcXVpcmVkYCBzZXQgaXQgd2lsbCByZXN1bHQgaW4gYW4gaW5uZXIgam9pbiwgYW5kIG9ubHkgdGhlIHVzZXJzIHdobyBoYXZlIGEgcHJvZmlsZSB3aWxsIGJlIGNvdW50ZWQuIElmIHdlIHJlbW92ZSBgcmVxdWlyZWRgIGZyb20gdGhlIGluY2x1ZGUsIGJvdGggdXNlcnMgd2l0aCBhbmQgd2l0aG91dCBwcm9maWxlcyB3aWxsIGJlIGNvdW50ZWRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBTZWUgZmluZEFsbCBvcHRpb25zXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRBbGx9IGZvciBhIHNwZWNpZmljYXRpb24gb2YgZmluZCBhbmQgcXVlcnkgb3B0aW9uc1xuICAgKiBAc2VlXG4gICAqIHtAbGluayBNb2RlbC5jb3VudH0gZm9yIGEgc3BlY2lmaWNhdGlvbiBvZiBjb3VudCBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtjb3VudDogbnVtYmVyLCByb3dzOiBNb2RlbFtdfT59XG4gICAqL1xuICBzdGF0aWMgZmluZEFuZENvdW50QWxsKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmICFfLmlzUGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGFyZ3VtZW50IHBhc3NlZCB0byBmaW5kQW5kQ291bnRBbGwgbXVzdCBiZSBhbiBvcHRpb25zIG9iamVjdCwgdXNlIGZpbmRCeVBrIGlmIHlvdSB3aXNoIHRvIHBhc3MgYSBzaW5nbGUgcHJpbWFyeSBrZXkgdmFsdWUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb3VudE9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XG5cbiAgICBpZiAoY291bnRPcHRpb25zLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvdW50T3B0aW9ucy5hdHRyaWJ1dGVzID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmNvdW50KGNvdW50T3B0aW9ucyksXG4gICAgICB0aGlzLmZpbmRBbGwob3B0aW9ucylcbiAgICBdKVxuICAgICAgLnRoZW4oKFtjb3VudCwgcm93c10pID0+ICh7XG4gICAgICAgIGNvdW50LFxuICAgICAgICByb3dzOiBjb3VudCA9PT0gMCA/IFtdIDogcm93c1xuICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIG1heGltdW0gdmFsdWUgb2YgZmllbGRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIGF0dHJpYnV0ZSAvIGZpZWxkIG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBTZWUgYWdncmVnYXRlXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsLmFnZ3JlZ2F0ZX0gZm9yIG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Kj59XG4gICAqL1xuICBzdGF0aWMgbWF4KGZpZWxkLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuYWdncmVnYXRlKGZpZWxkLCAnbWF4Jywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgbWluaW11bSB2YWx1ZSBvZiBmaWVsZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgYXR0cmlidXRlIC8gZmllbGQgbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFNlZSBhZ2dyZWdhdGVcbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuYWdncmVnYXRlfSBmb3Igb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTwqPn1cbiAgICovXG4gIHN0YXRpYyBtaW4oZmllbGQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5hZ2dyZWdhdGUoZmllbGQsICdtaW4nLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBzdW0gb2YgZmllbGRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIGF0dHJpYnV0ZSAvIGZpZWxkIG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBTZWUgYWdncmVnYXRlXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsLmFnZ3JlZ2F0ZX0gZm9yIG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn1cbiAgICovXG4gIHN0YXRpYyBzdW0oZmllbGQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5hZ2dyZWdhdGUoZmllbGQsICdzdW0nLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBuZXcgbW9kZWwgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSB2YWx1ZXMgQW4gb2JqZWN0IG9mIGtleSB2YWx1ZSBwYWlycyBvciBhbiBhcnJheSBvZiBzdWNoLiBJZiBhbiBhcnJheSwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIGluc3RhbmNlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9ICBbb3B0aW9uc10gSW5zdGFuY2UgYnVpbGQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJhdz1mYWxzZV0gSWYgc2V0IHRvIHRydWUsIHZhbHVlcyB3aWxsIGlnbm9yZSBmaWVsZCBhbmQgdmlydHVhbCBzZXR0ZXJzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmlzTmV3UmVjb3JkPXRydWVdIElzIHRoaXMgbmV3IHJlY29yZFxuICAgKiBAcGFyYW0ge0FycmF5fSAgIFtvcHRpb25zLmluY2x1ZGVdIGFuIGFycmF5IG9mIGluY2x1ZGUgb3B0aW9ucyAtIFVzZWQgdG8gYnVpbGQgcHJlZmV0Y2hlZC9pbmNsdWRlZCBtb2RlbCBpbnN0YW5jZXMuIFNlZSBgc2V0YFxuICAgKlxuICAgKiBAcmV0dXJucyB7TW9kZWx8QXJyYXk8TW9kZWw+fVxuICAgKi9cbiAgc3RhdGljIGJ1aWxkKHZhbHVlcywgb3B0aW9ucykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1bGtCdWlsZCh2YWx1ZXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWVzLCBvcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBidWxrQnVpbGQodmFsdWVTZXRzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaXNOZXdSZWNvcmQ6IHRydWVcbiAgICB9LCBvcHRpb25zIHx8IHt9KTtcblxuICAgIGlmICghb3B0aW9ucy5pbmNsdWRlVmFsaWRhdGVkKSB7XG4gICAgICB0aGlzLl9jb25mb3JtSW5jbHVkZXMob3B0aW9ucywgdGhpcyk7XG4gICAgICBpZiAob3B0aW9ucy5pbmNsdWRlKSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZEluY2x1ZGVBbGwob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlSW5jbHVkZWRFbGVtZW50cyhvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGVzKSB7XG4gICAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXMubWFwKGF0dHJpYnV0ZSA9PiBBcnJheS5pc0FycmF5KGF0dHJpYnV0ZSkgPyBhdHRyaWJ1dGVbMV0gOiBhdHRyaWJ1dGUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVNldHMubWFwKHZhbHVlcyA9PiB0aGlzLmJ1aWxkKHZhbHVlcywgb3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIG5ldyBtb2RlbCBpbnN0YW5jZSBhbmQgY2FsbHMgc2F2ZSBvbiBpdC5cblxuICAgKiBAc2VlXG4gICAqIHtAbGluayBNb2RlbC5idWlsZH1cbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuc2F2ZX1cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICB2YWx1ZXMgaGFzaCBvZiBkYXRhIHZhbHVlcyB0byBjcmVhdGUgbmV3IHJlY29yZCB3aXRoXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgW29wdGlvbnNdIGJ1aWxkIGFuZCBxdWVyeSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgW29wdGlvbnMucmF3PWZhbHNlXSBJZiBzZXQgdG8gdHJ1ZSwgdmFsdWVzIHdpbGwgaWdub3JlIGZpZWxkIGFuZCB2aXJ0dWFsIHNldHRlcnMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgW29wdGlvbnMuaXNOZXdSZWNvcmQ9dHJ1ZV0gSXMgdGhpcyBuZXcgcmVjb3JkXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgICAgICAgW29wdGlvbnMuaW5jbHVkZV0gYW4gYXJyYXkgb2YgaW5jbHVkZSBvcHRpb25zIC0gVXNlZCB0byBidWlsZCBwcmVmZXRjaGVkL2luY2x1ZGVkIG1vZGVsIGluc3RhbmNlcy4gU2VlIGBzZXRgXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgICAgICAgW29wdGlvbnMuZmllbGRzXSBJZiBzZXQsIG9ubHkgY29sdW1ucyBtYXRjaGluZyB0aG9zZSBpbiBmaWVsZHMgd2lsbCBiZSBzYXZlZFxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSAgICAgIFtvcHRpb25zLmZpZWxkc10gQW4gb3B0aW9uYWwgYXJyYXkgb2Ygc3RyaW5ncywgcmVwcmVzZW50aW5nIGRhdGFiYXNlIGNvbHVtbnMuIElmIGZpZWxkcyBpcyBwcm92aWRlZCwgb25seSB0aG9zZSBjb2x1bW5zIHdpbGwgYmUgdmFsaWRhdGVkIGFuZCBzYXZlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICBbb3B0aW9ucy5zaWxlbnQ9ZmFsc2VdIElmIHRydWUsIHRoZSB1cGRhdGVkQXQgdGltZXN0YW1wIHdpbGwgbm90IGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gSWYgZmFsc2UsIHZhbGlkYXRpb25zIHdvbid0IGJlIHJ1bi5cbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICBbb3B0aW9ucy5ob29rcz10cnVlXSBSdW4gYmVmb3JlIGFuZCBhZnRlciBjcmVhdGUgLyB1cGRhdGUgKyB2YWxpZGF0ZSBob29rc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgICAgIFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgIFtvcHRpb25zLmJlbmNobWFyaz1mYWxzZV0gUGFzcyBxdWVyeSBleGVjdXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMgYXMgc2Vjb25kIGFyZ3VtZW50IHRvIGxvZ2dpbmcgZnVuY3Rpb24gKG9wdGlvbnMubG9nZ2luZykuXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259ICAgW29wdGlvbnMudHJhbnNhY3Rpb25dIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgIFtvcHRpb25zLnNlYXJjaFBhdGg9REVGQVVMVF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHNjaGVtYSBzZWFyY2hfcGF0aCAoUG9zdGdyZXMgb25seSlcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICBbb3B0aW9ucy5yZXR1cm5pbmc9dHJ1ZV0gUmV0dXJuIHRoZSBhZmZlY3RlZCByb3dzIChvbmx5IGZvciBwb3N0Z3JlcylcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWw+fVxuICAgKlxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZSh2YWx1ZXMsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMgfHwge30pO1xuXG4gICAgcmV0dXJuIHRoaXMuYnVpbGQodmFsdWVzLCB7XG4gICAgICBpc05ld1JlY29yZDogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZXM6IG9wdGlvbnMuZmllbGRzLFxuICAgICAgaW5jbHVkZTogb3B0aW9ucy5pbmNsdWRlLFxuICAgICAgcmF3OiBvcHRpb25zLnJhdyxcbiAgICAgIHNpbGVudDogb3B0aW9ucy5zaWxlbnRcbiAgICB9KS5zYXZlKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSByb3cgdGhhdCBtYXRjaGVzIHRoZSBxdWVyeSwgb3IgYnVpbGQgKGJ1dCBkb24ndCBzYXZlKSB0aGUgcm93IGlmIG5vbmUgaXMgZm91bmQuXG4gICAqIFRoZSBzdWNjZXNzZnVsIHJlc3VsdCBvZiB0aGUgcHJvbWlzZSB3aWxsIGJlIChpbnN0YW5jZSwgYnVpbHQpXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIG9wdGlvbnMgZmluZCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIG9wdGlvbnMud2hlcmUgQSBoYXNoIG9mIHNlYXJjaCBhdHRyaWJ1dGVzLiBJZiBgd2hlcmVgIGlzIGEgcGxhaW4gb2JqZWN0IGl0IHdpbGwgYmUgYXBwZW5kZWQgd2l0aCBkZWZhdWx0cyB0byBidWlsZCBhIG5ldyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnMuZGVmYXVsdHNdIERlZmF1bHQgdmFsdWVzIHRvIHVzZSBpZiBidWlsZGluZyBhIG5ldyBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsLGJvb2xlYW4+fVxuICAgKi9cbiAgc3RhdGljIGZpbmRPckJ1aWxkKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMud2hlcmUgfHwgYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ01pc3Npbmcgd2hlcmUgYXR0cmlidXRlIGluIHRoZSBvcHRpb25zIHBhcmFtZXRlciBwYXNzZWQgdG8gZmluZE9yQnVpbGQuICcgK1xuICAgICAgICAnUGxlYXNlIG5vdGUgdGhhdCB0aGUgQVBJIGhhcyBjaGFuZ2VkLCBhbmQgaXMgbm93IG9wdGlvbnMgb25seSAoYW4gb2JqZWN0IHdpdGggd2hlcmUsIGRlZmF1bHRzIGtleXMsIHRyYW5zYWN0aW9uIGV0Yy4pJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsdWVzO1xuXG4gICAgcmV0dXJuIHRoaXMuZmluZE9uZShvcHRpb25zKS50aGVuKGluc3RhbmNlID0+IHtcbiAgICAgIGlmIChpbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICAgICB2YWx1ZXMgPSBfLmNsb25lKG9wdGlvbnMuZGVmYXVsdHMpIHx8IHt9O1xuICAgICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMud2hlcmUpKSB7XG4gICAgICAgICAgdmFsdWVzID0gVXRpbHMuZGVmYXVsdHModmFsdWVzLCBvcHRpb25zLndoZXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5idWlsZCh2YWx1ZXMsIG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW2luc3RhbmNlLCB0cnVlXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW2luc3RhbmNlLCBmYWxzZV0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSByb3cgdGhhdCBtYXRjaGVzIHRoZSBxdWVyeSwgb3IgYnVpbGQgYW5kIHNhdmUgdGhlIHJvdyBpZiBub25lIGlzIGZvdW5kXG4gICAqIFRoZSBzdWNjZXNzZnVsIHJlc3VsdCBvZiB0aGUgcHJvbWlzZSB3aWxsIGJlIChpbnN0YW5jZSwgY3JlYXRlZClcbiAgICpcbiAgICogSWYgbm8gdHJhbnNhY3Rpb24gaXMgcGFzc2VkIGluIHRoZSBgb3B0aW9uc2Agb2JqZWN0LCBhIG5ldyB0cmFuc2FjdGlvbiB3aWxsIGJlIGNyZWF0ZWQgaW50ZXJuYWxseSwgdG8gcHJldmVudCB0aGUgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBtYXRjaGluZyByb3cgaXMgY3JlYXRlZCBieSBhbm90aGVyIGNvbm5lY3Rpb24gYWZ0ZXIgdGhlIGZpbmQgYnV0IGJlZm9yZSB0aGUgaW5zZXJ0IGNhbGwuXG4gICAqIEhvd2V2ZXIsIGl0IGlzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gaGFuZGxlIHRoaXMgY2FzZSBpbiBTUUxpdGUsIHNwZWNpZmljYWxseSBpZiBvbmUgdHJhbnNhY3Rpb24gaW5zZXJ0cyBhbmQgYW5vdGhlciB0cmllcyB0byBzZWxlY3QgYmVmb3JlIHRoZSBmaXJzdCBvbmUgaGFzIGNvbW1pdHRlZC4gSW4gdGhpcyBjYXNlLCBhbiBpbnN0YW5jZSBvZiBzZXF1ZWxpemUuIFRpbWVvdXRFcnJvciB3aWxsIGJlIHRocm93biBpbnN0ZWFkLlxuICAgKiBJZiBhIHRyYW5zYWN0aW9uIGlzIGNyZWF0ZWQsIGEgc2F2ZXBvaW50IHdpbGwgYmUgY3JlYXRlZCBpbnN0ZWFkLCBhbmQgYW55IHVuaXF1ZSBjb25zdHJhaW50IHZpb2xhdGlvbiB3aWxsIGJlIGhhbmRsZWQgaW50ZXJuYWxseS5cbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuZmluZEFsbH0gZm9yIGEgZnVsbCBzcGVjaWZpY2F0aW9uIG9mIGZpbmQgYW5kIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgb3B0aW9ucyBmaW5kIGFuZCBjcmVhdGUgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICBvcHRpb25zLndoZXJlIHdoZXJlIEEgaGFzaCBvZiBzZWFyY2ggYXR0cmlidXRlcy4gSWYgYHdoZXJlYCBpcyBhIHBsYWluIG9iamVjdCBpdCB3aWxsIGJlIGFwcGVuZGVkIHdpdGggZGVmYXVsdHMgdG8gYnVpbGQgYSBuZXcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgIFtvcHRpb25zLmRlZmF1bHRzXSBEZWZhdWx0IHZhbHVlcyB0byB1c2UgaWYgY3JlYXRpbmcgYSBuZXcgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gW29wdGlvbnMudHJhbnNhY3Rpb25dIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbCxib29sZWFuPn1cbiAgICovXG4gIHN0YXRpYyBmaW5kT3JDcmVhdGUob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy53aGVyZSB8fCBhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTWlzc2luZyB3aGVyZSBhdHRyaWJ1dGUgaW4gdGhlIG9wdGlvbnMgcGFyYW1ldGVyIHBhc3NlZCB0byBmaW5kT3JDcmVhdGUuICcgK1xuICAgICAgICAnUGxlYXNlIG5vdGUgdGhhdCB0aGUgQVBJIGhhcyBjaGFuZ2VkLCBhbmQgaXMgbm93IG9wdGlvbnMgb25seSAoYW4gb2JqZWN0IHdpdGggd2hlcmUsIGRlZmF1bHRzIGtleXMsIHRyYW5zYWN0aW9uIGV0Yy4pJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgY29uc3QgZGVmYXVsdHMgPSBPYmplY3Qua2V5cyhvcHRpb25zLmRlZmF1bHRzKTtcbiAgICAgIGNvbnN0IHVua25vd25EZWZhdWx0cyA9IGRlZmF1bHRzLmZpbHRlcihuYW1lID0+ICF0aGlzLnJhd0F0dHJpYnV0ZXNbbmFtZV0pO1xuXG4gICAgICBpZiAodW5rbm93bkRlZmF1bHRzLmxlbmd0aCkge1xuICAgICAgICBsb2dnZXIud2FybihgVW5rbm93biBhdHRyaWJ1dGVzICgke3Vua25vd25EZWZhdWx0c30pIHBhc3NlZCB0byBkZWZhdWx0cyBvcHRpb24gb2YgZmluZE9yQ3JlYXRlYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudHJhbnNhY3Rpb24gPT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlcXVlbGl6ZS5jb25zdHJ1Y3Rvci5fY2xzKSB7XG4gICAgICBjb25zdCB0ID0gdGhpcy5zZXF1ZWxpemUuY29uc3RydWN0b3IuX2Nscy5nZXQoJ3RyYW5zYWN0aW9uJyk7XG4gICAgICBpZiAodCkge1xuICAgICAgICBvcHRpb25zLnRyYW5zYWN0aW9uID0gdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcm5hbFRyYW5zYWN0aW9uID0gIW9wdGlvbnMudHJhbnNhY3Rpb247XG4gICAgbGV0IHZhbHVlcztcbiAgICBsZXQgdHJhbnNhY3Rpb247XG5cbiAgICAvLyBDcmVhdGUgYSB0cmFuc2FjdGlvbiBvciBhIHNhdmVwb2ludCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSB0cmFuc2FjdGlvbiB3YXMgcGFzc2VkIGluXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnRyYW5zYWN0aW9uKG9wdGlvbnMpLnRoZW4odCA9PiB7XG4gICAgICB0cmFuc2FjdGlvbiA9IHQ7XG4gICAgICBvcHRpb25zLnRyYW5zYWN0aW9uID0gdDtcblxuICAgICAgcmV0dXJuIHRoaXMuZmluZE9uZShVdGlscy5kZWZhdWx0cyh7IHRyYW5zYWN0aW9uIH0sIG9wdGlvbnMpKTtcbiAgICB9KS50aGVuKGluc3RhbmNlID0+IHtcbiAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW2luc3RhbmNlLCBmYWxzZV07XG4gICAgICB9XG5cbiAgICAgIHZhbHVlcyA9IF8uY2xvbmUob3B0aW9ucy5kZWZhdWx0cykgfHwge307XG4gICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMud2hlcmUpKSB7XG4gICAgICAgIHZhbHVlcyA9IFV0aWxzLmRlZmF1bHRzKHZhbHVlcywgb3B0aW9ucy53aGVyZSk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMuZXhjZXB0aW9uID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHZhbHVlcywgb3B0aW9ucykudGhlbihpbnN0YW5jZSA9PiB7XG4gICAgICAgIGlmIChpbnN0YW5jZS5nZXQodGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlLCB7IHJhdzogdHJ1ZSB9KSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHRoZSBxdWVyeSByZXR1cm5lZCBhbiBlbXB0eSByZXN1bHQgZm9yIHRoZSBwcmltYXJ5IGtleSwgd2Uga25vdyB0aGF0IHRoaXMgd2FzIGFjdHVhbGx5IGEgdW5pcXVlIGNvbnN0cmFpbnQgdmlvbGF0aW9uXG4gICAgICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5VbmlxdWVDb25zdHJhaW50RXJyb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbaW5zdGFuY2UsIHRydWVdO1xuICAgICAgfSkuY2F0Y2goc2VxdWVsaXplRXJyb3JzLlVuaXF1ZUNvbnN0cmFpbnRFcnJvciwgZXJyID0+IHtcbiAgICAgICAgY29uc3QgZmxhdHRlbmVkV2hlcmUgPSBVdGlscy5mbGF0dGVuT2JqZWN0RGVlcChvcHRpb25zLndoZXJlKTtcbiAgICAgICAgY29uc3QgZmxhdHRlbmVkV2hlcmVLZXlzID0gT2JqZWN0LmtleXMoZmxhdHRlbmVkV2hlcmUpLm1hcChuYW1lID0+IF8ubGFzdChuYW1lLnNwbGl0KCcuJykpKTtcbiAgICAgICAgY29uc3Qgd2hlcmVGaWVsZHMgPSBmbGF0dGVuZWRXaGVyZUtleXMubWFwKG5hbWUgPT4gXy5nZXQodGhpcy5yYXdBdHRyaWJ1dGVzLCBgJHtuYW1lfS5maWVsZGAsIG5hbWUpKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEZpZWxkcyA9IG9wdGlvbnMuZGVmYXVsdHMgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAuZmlsdGVyKG5hbWUgPT4gdGhpcy5yYXdBdHRyaWJ1dGVzW25hbWVdKVxuICAgICAgICAgIC5tYXAobmFtZSA9PiB0aGlzLnJhd0F0dHJpYnV0ZXNbbmFtZV0uZmllbGQgfHwgbmFtZSk7XG5cbiAgICAgICAgY29uc3QgZXJyRmllbGRLZXlzID0gT2JqZWN0LmtleXMoZXJyLmZpZWxkcyk7XG4gICAgICAgIGNvbnN0IGVyckZpZWxkc1doZXJlSW50ZXJzZWN0cyA9IFV0aWxzLmludGVyc2VjdHMoZXJyRmllbGRLZXlzLCB3aGVyZUZpZWxkcyk7XG4gICAgICAgIGlmIChkZWZhdWx0RmllbGRzICYmICFlcnJGaWVsZHNXaGVyZUludGVyc2VjdHMgJiYgVXRpbHMuaW50ZXJzZWN0cyhlcnJGaWVsZEtleXMsIGRlZmF1bHRGaWVsZHMpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVyckZpZWxkc1doZXJlSW50ZXJzZWN0cykge1xuICAgICAgICAgIF8uZWFjaChlcnIuZmllbGRzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZmllbGRSYXdBdHRyaWJ1dGVzTWFwW2tleV0uZmllbGROYW1lO1xuICAgICAgICAgICAgaWYgKHZhbHVlLnRvU3RyaW5nKCkgIT09IG9wdGlvbnMud2hlcmVbbmFtZV0udG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5uYW1lfSNmaW5kT3JDcmVhdGU6IHZhbHVlIHVzZWQgZm9yICR7bmFtZX0gd2FzIG5vdCBlcXVhbCBmb3IgYm90aCB0aGUgZmluZCBhbmQgdGhlIGNyZWF0ZSBjYWxscywgJyR7b3B0aW9ucy53aGVyZVtuYW1lXX0nIHZzICcke3ZhbHVlfSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNvbWVvbmUgbXVzdCBoYXZlIGNyZWF0ZWQgYSBtYXRjaGluZyBpbnN0YW5jZSBpbnNpZGUgdGhlIHNhbWUgdHJhbnNhY3Rpb24gc2luY2Ugd2UgbGFzdCBkaWQgYSBmaW5kLiBMZXQncyBmaW5kIGl0IVxuICAgICAgICByZXR1cm4gdGhpcy5maW5kT25lKFV0aWxzLmRlZmF1bHRzKHtcbiAgICAgICAgICB0cmFuc2FjdGlvbjogaW50ZXJuYWxUcmFuc2FjdGlvbiA/IG51bGwgOiB0cmFuc2FjdGlvblxuICAgICAgICB9LCBvcHRpb25zKSkudGhlbihpbnN0YW5jZSA9PiB7XG4gICAgICAgICAgLy8gU2FuaXR5IGNoZWNrLCBpZGVhbGx5IHdlIGNhdWdodCB0aGlzIGF0IHRoZSBkZWZhdWx0RmVpbGRzL2Vyci5maWVsZHMgY2hlY2tcbiAgICAgICAgICAvLyBCdXQgaWYgd2UgZGlkbid0IGFuZCBpbnN0YW5jZSBpcyBudWxsLCB3ZSB3aWxsIHRocm93XG4gICAgICAgICAgaWYgKGluc3RhbmNlID09PSBudWxsKSB0aHJvdyBlcnI7XG4gICAgICAgICAgcmV0dXJuIFtpbnN0YW5jZSwgZmFsc2VdO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKGludGVybmFsVHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgLy8gSWYgd2UgY3JlYXRlZCBhIHRyYW5zYWN0aW9uIGludGVybmFsbHkgKGFuZCBub3QganVzdCBhIHNhdmVwb2ludCksIHdlIHNob3VsZCBjbGVhbiBpdCB1cFxuICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb24uY29tbWl0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQSBtb3JlIHBlcmZvcm1hbnQgZmluZE9yQ3JlYXRlIHRoYXQgd2lsbCBub3Qgd29yayB1bmRlciBhIHRyYW5zYWN0aW9uIChhdCBsZWFzdCBub3QgaW4gcG9zdGdyZXMpXG4gICAqIFdpbGwgZXhlY3V0ZSBhIGZpbmQgY2FsbCwgaWYgZW1wdHkgdGhlbiBhdHRlbXB0IHRvIGNyZWF0ZSwgaWYgdW5pcXVlIGNvbnN0cmFpbnQgdGhlbiBhdHRlbXB0IHRvIGZpbmQgYWdhaW5cbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuZmluZEFsbH0gZm9yIGEgZnVsbCBzcGVjaWZpY2F0aW9uIG9mIGZpbmQgYW5kIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgZmluZCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLndoZXJlIEEgaGFzaCBvZiBzZWFyY2ggYXR0cmlidXRlcy4gSWYgYHdoZXJlYCBpcyBhIHBsYWluIG9iamVjdCBpdCB3aWxsIGJlIGFwcGVuZGVkIHdpdGggZGVmYXVsdHMgdG8gYnVpbGQgYSBuZXcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5kZWZhdWx0c10gRGVmYXVsdCB2YWx1ZXMgdG8gdXNlIGlmIGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsLGJvb2xlYW4+fVxuICAgKi9cbiAgc3RhdGljIGZpbmRDcmVhdGVGaW5kKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMud2hlcmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ01pc3Npbmcgd2hlcmUgYXR0cmlidXRlIGluIHRoZSBvcHRpb25zIHBhcmFtZXRlciBwYXNzZWQgdG8gZmluZENyZWF0ZUZpbmQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsdWVzID0gXy5jbG9uZShvcHRpb25zLmRlZmF1bHRzKSB8fCB7fTtcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMud2hlcmUpKSB7XG4gICAgICB2YWx1ZXMgPSBVdGlscy5kZWZhdWx0cyh2YWx1ZXMsIG9wdGlvbnMud2hlcmUpO1xuICAgIH1cblxuXG4gICAgcmV0dXJuIHRoaXMuZmluZE9uZShvcHRpb25zKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSByZXR1cm4gW3Jlc3VsdCwgZmFsc2VdO1xuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGUodmFsdWVzLCBvcHRpb25zKVxuICAgICAgICAudGhlbihyZXN1bHQgPT4gW3Jlc3VsdCwgdHJ1ZV0pXG4gICAgICAgIC5jYXRjaChzZXF1ZWxpemVFcnJvcnMuVW5pcXVlQ29uc3RyYWludEVycm9yLCAoKSA9PiB0aGlzLmZpbmRPbmUob3B0aW9ucykudGhlbihyZXN1bHQgPT4gW3Jlc3VsdCwgZmFsc2VdKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5zZXJ0IG9yIHVwZGF0ZSBhIHNpbmdsZSByb3cuIEFuIHVwZGF0ZSB3aWxsIGJlIGV4ZWN1dGVkIGlmIGEgcm93IHdoaWNoIG1hdGNoZXMgdGhlIHN1cHBsaWVkIHZhbHVlcyBvbiBlaXRoZXIgdGhlIHByaW1hcnkga2V5IG9yIGEgdW5pcXVlIGtleSBpcyBmb3VuZC4gTm90ZSB0aGF0IHRoZSB1bmlxdWUgaW5kZXggbXVzdCBiZSBkZWZpbmVkIGluIHlvdXIgc2VxdWVsaXplIG1vZGVsIGFuZCBub3QganVzdCBpbiB0aGUgdGFibGUuIE90aGVyd2lzZSB5b3UgbWF5IGV4cGVyaWVuY2UgYSB1bmlxdWUgY29uc3RyYWludCB2aW9sYXRpb24sIGJlY2F1c2Ugc2VxdWVsaXplIGZhaWxzIHRvIGlkZW50aWZ5IHRoZSByb3cgdGhhdCBzaG91bGQgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogKipJbXBsZW1lbnRhdGlvbiBkZXRhaWxzOioqXG4gICAqXG4gICAqICogTXlTUUwgLSBJbXBsZW1lbnRlZCBhcyBhIHNpbmdsZSBxdWVyeSBgSU5TRVJUIHZhbHVlcyBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSB2YWx1ZXNgXG4gICAqICogUG9zdGdyZVNRTCAtIEltcGxlbWVudGVkIGFzIGEgdGVtcG9yYXJ5IGZ1bmN0aW9uIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nOiBJTlNFUlQgRVhDRVBUSU9OIFdIRU4gdW5pcXVlX2NvbnN0cmFpbnQgVVBEQVRFXG4gICAqICogU1FMaXRlIC0gSW1wbGVtZW50ZWQgYXMgdHdvIHF1ZXJpZXMgYElOU0VSVDsgVVBEQVRFYC4gVGhpcyBtZWFucyB0aGF0IHRoZSB1cGRhdGUgaXMgZXhlY3V0ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSByb3cgYWxyZWFkeSBleGlzdGVkIG9yIG5vdFxuICAgKiAqIE1TU1FMIC0gSW1wbGVtZW50ZWQgYXMgYSBzaW5nbGUgcXVlcnkgdXNpbmcgYE1FUkdFYCBhbmQgYFdIRU4gKE5PVCkgTUFUQ0hFRCBUSEVOYFxuICAgKiAqKk5vdGUqKiB0aGF0IFNRTGl0ZSByZXR1cm5zIHVuZGVmaW5lZCBmb3IgY3JlYXRlZCwgbm8gbWF0dGVyIGlmIHRoZSByb3cgd2FzIGNyZWF0ZWQgb3IgdXBkYXRlZC4gVGhpcyBpcyBiZWNhdXNlIFNRTGl0ZSBhbHdheXMgcnVucyBJTlNFUlQgT1IgSUdOT1JFICsgVVBEQVRFLCBpbiBhIHNpbmdsZSBxdWVyeSwgc28gdGhlcmUgaXMgbm8gd2F5IHRvIGtub3cgd2hldGhlciB0aGUgcm93IHdhcyBpbnNlcnRlZCBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgdmFsdWVzIGhhc2ggb2YgdmFsdWVzIHRvIHVwc2VydFxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgIFtvcHRpb25zXSB1cHNlcnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFJ1biB2YWxpZGF0aW9ucyBiZWZvcmUgdGhlIHJvdyBpcyBpbnNlcnRlZFxuICAgKiBAcGFyYW0gIHtBcnJheX0gICAgICAgIFtvcHRpb25zLmZpZWxkcz1PYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpXSBUaGUgZmllbGRzIHRvIGluc2VydCAvIHVwZGF0ZS4gRGVmYXVsdHMgdG8gYWxsIGNoYW5nZWQgZmllbGRzXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuaG9va3M9dHJ1ZV0gIFJ1biBiZWZvcmUgLyBhZnRlciB1cHNlcnQgaG9va3M/XG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMucmV0dXJuaW5nPWZhbHNlXSBBcHBlbmQgUkVUVVJOSU5HICogdG8gZ2V0IGJhY2sgYXV0byBnZW5lcmF0ZWQgdmFsdWVzIChQb3N0Z3JlcyBvbmx5KVxuICAgKiBAcGFyYW0gIHtUcmFuc2FjdGlvbn0gIFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcbiAgICogQHBhcmFtICB7RnVuY3Rpb259ICAgICBbb3B0aW9ucy5sb2dnaW5nPWZhbHNlXSBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCB3aGlsZSBydW5uaW5nIHRoZSBxdWVyeSB0byBsb2cgdGhlIHNxbC5cbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgIFtvcHRpb25zLnNlYXJjaFBhdGg9REVGQVVMVF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHNjaGVtYSBzZWFyY2hfcGF0aCAoUG9zdGdyZXMgb25seSlcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgcm93IHdhcyBjcmVhdGVkIG9yIHVwZGF0ZWQuIEZvciBNeVNRTC9NYXJpYURCLCBpdCByZXR1cm5zIGB0cnVlYCB3aGVuIGluc2VydGVkIGFuZCBgZmFsc2VgIHdoZW4gdXBkYXRlZC4gRm9yIFBvc3RncmVzL01TU1FMIHdpdGggKG9wdGlvbnMucmV0dXJuaW5nPXRydWUpLCBpdCByZXR1cm5zIHJlY29yZCBhbmQgY3JlYXRlZCBib29sZWFuIHdpdGggc2lnbmF0dXJlIGA8TW9kZWwsIGNyZWF0ZWQ+YC5cbiAgICovXG4gIHN0YXRpYyB1cHNlcnQodmFsdWVzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaG9va3M6IHRydWUsXG4gICAgICByZXR1cm5pbmc6IGZhbHNlLFxuICAgICAgdmFsaWRhdGU6IHRydWVcbiAgICB9LCBVdGlscy5jbG9uZURlZXAob3B0aW9ucyB8fCB7fSkpO1xuXG4gICAgb3B0aW9ucy5tb2RlbCA9IHRoaXM7XG5cbiAgICBjb25zdCBjcmVhdGVkQXRBdHRyID0gdGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy5jcmVhdGVkQXQ7XG4gICAgY29uc3QgdXBkYXRlZEF0QXR0ciA9IHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0O1xuICAgIGNvbnN0IGhhc1ByaW1hcnkgPSB0aGlzLnByaW1hcnlLZXlGaWVsZCBpbiB2YWx1ZXMgfHwgdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlIGluIHZhbHVlcztcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuYnVpbGQodmFsdWVzKTtcblxuICAgIGlmICghb3B0aW9ucy5maWVsZHMpIHtcbiAgICAgIG9wdGlvbnMuZmllbGRzID0gT2JqZWN0LmtleXMoaW5zdGFuY2UuX2NoYW5nZWQpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy52YWxpZGF0ZSkge1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudmFsaWRhdGUob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAvLyBNYXAgZmllbGQgbmFtZXNcbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhVmFsdWVzID0gXy5waWNrKGluc3RhbmNlLmRhdGFWYWx1ZXMsIE9iamVjdC5rZXlzKGluc3RhbmNlLl9jaGFuZ2VkKSk7XG4gICAgICBjb25zdCBpbnNlcnRWYWx1ZXMgPSBVdGlscy5tYXBWYWx1ZUZpZWxkTmFtZXMoaW5zdGFuY2UuZGF0YVZhbHVlcywgT2JqZWN0LmtleXMoaW5zdGFuY2UucmF3QXR0cmlidXRlcyksIHRoaXMpO1xuICAgICAgY29uc3QgdXBkYXRlVmFsdWVzID0gVXRpbHMubWFwVmFsdWVGaWVsZE5hbWVzKHVwZGF0ZWREYXRhVmFsdWVzLCBvcHRpb25zLmZpZWxkcywgdGhpcyk7XG4gICAgICBjb25zdCBub3cgPSBVdGlscy5ub3codGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KTtcblxuICAgICAgLy8gQXR0YWNoIGNyZWF0ZWRBdFxuICAgICAgaWYgKGNyZWF0ZWRBdEF0dHIgJiYgIXVwZGF0ZVZhbHVlc1tjcmVhdGVkQXRBdHRyXSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMucmF3QXR0cmlidXRlc1tjcmVhdGVkQXRBdHRyXS5maWVsZCB8fCBjcmVhdGVkQXRBdHRyO1xuICAgICAgICBpbnNlcnRWYWx1ZXNbZmllbGRdID0gdGhpcy5fZ2V0RGVmYXVsdFRpbWVzdGFtcChjcmVhdGVkQXRBdHRyKSB8fCBub3c7XG4gICAgICB9XG4gICAgICBpZiAodXBkYXRlZEF0QXR0ciAmJiAhaW5zZXJ0VmFsdWVzW3VwZGF0ZWRBdEF0dHJdKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5yYXdBdHRyaWJ1dGVzW3VwZGF0ZWRBdEF0dHJdLmZpZWxkIHx8IHVwZGF0ZWRBdEF0dHI7XG4gICAgICAgIGluc2VydFZhbHVlc1tmaWVsZF0gPSB1cGRhdGVWYWx1ZXNbZmllbGRdID0gdGhpcy5fZ2V0RGVmYXVsdFRpbWVzdGFtcCh1cGRhdGVkQXRBdHRyKSB8fCBub3c7XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIGFkZHMgYSBudWxsIHZhbHVlIGZvciB0aGUgcHJpbWFyeSBrZXksIGlmIG5vbmUgd2FzIGdpdmVuIGJ5IHRoZSB1c2VyLlxuICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhhdCBiZWNhdXNlIG9mIHNvbWUgUG9zdGdyZXMgdGVjaG5pY2FsaXRpZXMuXG4gICAgICBpZiAoIWhhc1ByaW1hcnkgJiYgdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlICYmICF0aGlzLnJhd0F0dHJpYnV0ZXNbdGhpcy5wcmltYXJ5S2V5QXR0cmlidXRlXS5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgZGVsZXRlIGluc2VydFZhbHVlc1t0aGlzLnByaW1hcnlLZXlGaWVsZF07XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVWYWx1ZXNbdGhpcy5wcmltYXJ5S2V5RmllbGRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVVcHNlcnQnLCB2YWx1ZXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuUXVlcnlJbnRlcmZhY2UudXBzZXJ0KHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCBpbnNlcnRWYWx1ZXMsIHVwZGF0ZVZhbHVlcywgaW5zdGFuY2Uud2hlcmUoKSwgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChbY3JlYXRlZCwgcHJpbWFyeUtleV0pID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5yZXR1cm5pbmcgPT09IHRydWUgJiYgcHJpbWFyeUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEJ5UGsocHJpbWFyeUtleSwgb3B0aW9ucykudGhlbihyZWNvcmQgPT4gW3JlY29yZCwgY3JlYXRlZF0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgICAgICB9KVxuICAgICAgICAudGFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdhZnRlclVwc2VydCcsIHJlc3VsdCwgb3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW5kIGluc2VydCBtdWx0aXBsZSBpbnN0YW5jZXMgaW4gYnVsay5cbiAgICpcbiAgICogVGhlIHN1Y2Nlc3MgaGFuZGxlciBpcyBwYXNzZWQgYW4gYXJyYXkgb2YgaW5zdGFuY2VzLCBidXQgcGxlYXNlIG5vdGljZSB0aGF0IHRoZXNlIG1heSBub3QgY29tcGxldGVseSByZXByZXNlbnQgdGhlIHN0YXRlIG9mIHRoZSByb3dzIGluIHRoZSBEQi4gVGhpcyBpcyBiZWNhdXNlIE15U1FMXG4gICAqIGFuZCBTUUxpdGUgZG8gbm90IG1ha2UgaXQgZWFzeSB0byBvYnRhaW4gYmFjayBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBJRHMgYW5kIG90aGVyIGRlZmF1bHQgdmFsdWVzIGluIGEgd2F5IHRoYXQgY2FuIGJlIG1hcHBlZCB0byBtdWx0aXBsZSByZWNvcmRzLlxuICAgKiBUbyBvYnRhaW4gSW5zdGFuY2VzIGZvciB0aGUgbmV3bHkgY3JlYXRlZCB2YWx1ZXMsIHlvdSB3aWxsIG5lZWQgdG8gcXVlcnkgZm9yIHRoZW0gYWdhaW4uXG4gICAqXG4gICAqIElmIHZhbGlkYXRpb24gZmFpbHMsIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIHdpdGggYW4gYXJyYXktbGlrZSBbQWdncmVnYXRlRXJyb3JdKGh0dHA6Ly9ibHVlYmlyZGpzLmNvbS9kb2NzL2FwaS9hZ2dyZWdhdGVlcnJvci5odG1sKVxuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheX0gICAgICAgIHJlY29yZHMgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygb2JqZWN0cyAoa2V5L3ZhbHVlIHBhaXJzKSB0byBjcmVhdGUgaW5zdGFuY2VzIGZyb21cbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICBbb3B0aW9uc10gICAgICAgICAgICAgICAgICAgICAgICBCdWxrIGNyZWF0ZSBvcHRpb25zXG4gICAqIEBwYXJhbSAge0FycmF5fSAgICAgICAgW29wdGlvbnMuZmllbGRzXSAgICAgICAgICAgICAgICAgRmllbGRzIHRvIGluc2VydCAoZGVmYXVsdHMgdG8gYWxsIGZpZWxkcylcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy52YWxpZGF0ZT1mYWxzZV0gICAgICAgICBTaG91bGQgZWFjaCByb3cgYmUgc3ViamVjdCB0byB2YWxpZGF0aW9uIGJlZm9yZSBpdCBpcyBpbnNlcnRlZC4gVGhlIHdob2xlIGluc2VydCB3aWxsIGZhaWwgaWYgb25lIHJvdyBmYWlscyB2YWxpZGF0aW9uXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuaG9va3M9dHJ1ZV0gICAgICAgICAgICAgUnVuIGJlZm9yZSAvIGFmdGVyIGJ1bGsgY3JlYXRlIGhvb2tzP1xuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLmluZGl2aWR1YWxIb29rcz1mYWxzZV0gIFJ1biBiZWZvcmUgLyBhZnRlciBjcmVhdGUgaG9va3MgZm9yIGVhY2ggaW5kaXZpZHVhbCBJbnN0YW5jZT8gQnVsa0NyZWF0ZSBob29rcyB3aWxsIHN0aWxsIGJlIHJ1biBpZiBvcHRpb25zLmhvb2tzIGlzIHRydWUuXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuaWdub3JlRHVwbGljYXRlcz1mYWxzZV0gSWdub3JlIGR1cGxpY2F0ZSB2YWx1ZXMgZm9yIHByaW1hcnkga2V5cz8gKG5vdCBzdXBwb3J0ZWQgYnkgTVNTUUwgb3IgUG9zdGdyZXMgPCA5LjUpXG4gICAqIEBwYXJhbSAge0FycmF5fSAgICAgICAgW29wdGlvbnMudXBkYXRlT25EdXBsaWNhdGVdICAgICAgRmllbGRzIHRvIHVwZGF0ZSBpZiByb3cga2V5IGFscmVhZHkgZXhpc3RzIChvbiBkdXBsaWNhdGUga2V5IHVwZGF0ZSk/IChvbmx5IHN1cHBvcnRlZCBieSBNeVNRTCwgTWFyaWFEQiwgU1FMaXRlID49IDMuMjQuMCAmIFBvc3RncmVzID49IDkuNSkuIEJ5IGRlZmF1bHQsIGFsbCBmaWVsZHMgYXJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSAge1RyYW5zYWN0aW9ufSAgW29wdGlvbnMudHJhbnNhY3Rpb25dICAgICAgICAgICAgVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXG4gICAqIEBwYXJhbSAge0Z1bmN0aW9ufSAgICAgW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gICAgICAgICAgQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuYmVuY2htYXJrPWZhbHNlXSAgICAgICAgUGFzcyBxdWVyeSBleGVjdXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMgYXMgc2Vjb25kIGFyZ3VtZW50IHRvIGxvZ2dpbmcgZnVuY3Rpb24gKG9wdGlvbnMubG9nZ2luZykuXG4gICAqIEBwYXJhbSAge2Jvb2xlYW58QXJyYXl9IFtvcHRpb25zLnJldHVybmluZz1mYWxzZV0gICAgICAgSWYgdHJ1ZSwgYXBwZW5kIFJFVFVSTklORyAqIHRvIGdldCBiYWNrIGFsbCB2YWx1ZXM7IGlmIGFuIGFycmF5IG9mIGNvbHVtbiBuYW1lcywgYXBwZW5kIFJFVFVSTklORyA8Y29sdW1ucz4gdG8gZ2V0IGJhY2sgc3BlY2lmaWMgY29sdW1ucyAoUG9zdGdyZXMgb25seSlcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgICAgICBbb3B0aW9ucy5zZWFyY2hQYXRoPURFRkFVTFRdICAgICBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxNb2RlbD4+fVxuICAgKi9cbiAgc3RhdGljIGJ1bGtDcmVhdGUocmVjb3Jkcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFyZWNvcmRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbGVjdCA9IHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdDtcbiAgICBjb25zdCBub3cgPSBVdGlscy5ub3codGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KTtcblxuICAgIG9wdGlvbnMubW9kZWwgPSB0aGlzO1xuXG4gICAgaWYgKCFvcHRpb25zLmluY2x1ZGVWYWxpZGF0ZWQpIHtcbiAgICAgIHRoaXMuX2NvbmZvcm1JbmNsdWRlcyhvcHRpb25zLCB0aGlzKTtcbiAgICAgIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kSW5jbHVkZUFsbChvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVJbmNsdWRlZEVsZW1lbnRzKG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlcyA9IHJlY29yZHMubWFwKHZhbHVlcyA9PiB0aGlzLmJ1aWxkKHZhbHVlcywgeyBpc05ld1JlY29yZDogdHJ1ZSwgaW5jbHVkZTogb3B0aW9ucy5pbmNsdWRlIH0pKTtcblxuICAgIGNvbnN0IHJlY3Vyc2l2ZUJ1bGtDcmVhdGUgPSAoaW5zdGFuY2VzLCBvcHRpb25zKSA9PiB7XG4gICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHZhbGlkYXRlOiBmYWxzZSxcbiAgICAgICAgaG9va3M6IHRydWUsXG4gICAgICAgIGluZGl2aWR1YWxIb29rczogZmFsc2UsXG4gICAgICAgIGlnbm9yZUR1cGxpY2F0ZXM6IGZhbHNlXG4gICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgaWYgKG9wdGlvbnMucmV0dXJuaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYXNzb2NpYXRpb24pIHtcbiAgICAgICAgICBvcHRpb25zLnJldHVybmluZyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMucmV0dXJuaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5pZ25vcmVEdXBsaWNhdGVzICYmIFsnbXNzcWwnXS5pbmNsdWRlcyhkaWFsZWN0KSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGAke2RpYWxlY3R9IGRvZXMgbm90IHN1cHBvcnQgdGhlIGlnbm9yZUR1cGxpY2F0ZXMgb3B0aW9uLmApKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnVwZGF0ZU9uRHVwbGljYXRlICYmIChkaWFsZWN0ICE9PSAnbXlzcWwnICYmIGRpYWxlY3QgIT09ICdtYXJpYWRiJyAmJiBkaWFsZWN0ICE9PSAnc3FsaXRlJyAmJiBkaWFsZWN0ICE9PSAncG9zdGdyZXMnKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGAke2RpYWxlY3R9IGRvZXMgbm90IHN1cHBvcnQgdGhlIHVwZGF0ZU9uRHVwbGljYXRlIG9wdGlvbi5gKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1vZGVsID0gb3B0aW9ucy5tb2RlbDtcblxuICAgICAgb3B0aW9ucy5maWVsZHMgPSBvcHRpb25zLmZpZWxkcyB8fCBPYmplY3Qua2V5cyhtb2RlbC5yYXdBdHRyaWJ1dGVzKTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRBdEF0dHIgPSBtb2RlbC5fdGltZXN0YW1wQXR0cmlidXRlcy5jcmVhdGVkQXQ7XG4gICAgICBjb25zdCB1cGRhdGVkQXRBdHRyID0gbW9kZWwuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0O1xuXG4gICAgICBpZiAob3B0aW9ucy51cGRhdGVPbkR1cGxpY2F0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMudXBkYXRlT25EdXBsaWNhdGUpICYmIG9wdGlvbnMudXBkYXRlT25EdXBsaWNhdGUubGVuZ3RoKSB7XG4gICAgICAgICAgb3B0aW9ucy51cGRhdGVPbkR1cGxpY2F0ZSA9IF8uaW50ZXJzZWN0aW9uKFxuICAgICAgICAgICAgXy53aXRob3V0KE9iamVjdC5rZXlzKG1vZGVsLnRhYmxlQXR0cmlidXRlcyksIGNyZWF0ZWRBdEF0dHIpLFxuICAgICAgICAgICAgb3B0aW9ucy51cGRhdGVPbkR1cGxpY2F0ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndXBkYXRlT25EdXBsaWNhdGUgb3B0aW9uIG9ubHkgc3VwcG9ydHMgbm9uLWVtcHR5IGFycmF5LicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xuICAgICAgICAvLyBSdW4gYmVmb3JlIGhvb2tcbiAgICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcbiAgICAgICAgICByZXR1cm4gbW9kZWwucnVuSG9va3MoJ2JlZm9yZUJ1bGtDcmVhdGUnLCBpbnN0YW5jZXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gVmFsaWRhdGVcbiAgICAgICAgaWYgKG9wdGlvbnMudmFsaWRhdGUpIHtcbiAgICAgICAgICBjb25zdCBlcnJvcnMgPSBuZXcgUHJvbWlzZS5BZ2dyZWdhdGVFcnJvcigpO1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlT3B0aW9ucyA9IF8uY2xvbmUob3B0aW9ucyk7XG4gICAgICAgICAgdmFsaWRhdGVPcHRpb25zLmhvb2tzID0gb3B0aW9ucy5pbmRpdmlkdWFsSG9va3M7XG5cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5tYXAoaW5zdGFuY2VzLCBpbnN0YW5jZSA9PlxuICAgICAgICAgICAgaW5zdGFuY2UudmFsaWRhdGUodmFsaWRhdGVPcHRpb25zKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgc2VxdWVsaXplRXJyb3JzLkJ1bGtSZWNvcmRFcnJvcihlcnIsIGluc3RhbmNlKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgb3B0aW9ucy5za2lwO1xuICAgICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyb3JzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5kaXZpZHVhbEhvb2tzKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGVhY2ggaW5zdGFuY2UgaW5kaXZpZHVhbGx5XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UubWFwKGluc3RhbmNlcywgaW5zdGFuY2UgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kaXZpZHVhbE9wdGlvbnMgPSBfLmNsb25lKG9wdGlvbnMpO1xuICAgICAgICAgICAgZGVsZXRlIGluZGl2aWR1YWxPcHRpb25zLmZpZWxkcztcbiAgICAgICAgICAgIGRlbGV0ZSBpbmRpdmlkdWFsT3B0aW9ucy5pbmRpdmlkdWFsSG9va3M7XG4gICAgICAgICAgICBkZWxldGUgaW5kaXZpZHVhbE9wdGlvbnMuaWdub3JlRHVwbGljYXRlcztcbiAgICAgICAgICAgIGluZGl2aWR1YWxPcHRpb25zLnZhbGlkYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRpdmlkdWFsT3B0aW9ucy5ob29rcyA9IHRydWU7XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5zYXZlKGluZGl2aWR1YWxPcHRpb25zKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuaW5jbHVkZSB8fCAhb3B0aW9ucy5pbmNsdWRlLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gTmVzdGVkIGNyZWF0aW9uIGZvciBCZWxvbmdzVG8gcmVsYXRpb25zXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UubWFwKG9wdGlvbnMuaW5jbHVkZS5maWx0ZXIoaW5jbHVkZSA9PiBpbmNsdWRlLmFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvKSwgaW5jbHVkZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NvY2lhdGlvbkluc3RhbmNlcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRpb25JbnN0YW5jZUluZGV4VG9JbnN0YW5jZU1hcCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIGluc3RhbmNlcykge1xuICAgICAgICAgICAgICBjb25zdCBhc3NvY2lhdGlvbkluc3RhbmNlID0gaW5zdGFuY2UuZ2V0KGluY2x1ZGUuYXMpO1xuICAgICAgICAgICAgICBpZiAoYXNzb2NpYXRpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGFzc29jaWF0aW9uSW5zdGFuY2VzLnB1c2goYXNzb2NpYXRpb25JbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgYXNzb2NpYXRpb25JbnN0YW5jZUluZGV4VG9JbnN0YW5jZU1hcC5wdXNoKGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFzc29jaWF0aW9uSW5zdGFuY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVPcHRpb25zID0gXyhVdGlscy5jbG9uZURlZXAoaW5jbHVkZSkpXG4gICAgICAgICAgICAgIC5vbWl0KFsnYXNzb2NpYXRpb24nXSlcbiAgICAgICAgICAgICAgLmRlZmF1bHRzKHtcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbjogb3B0aW9ucy50cmFuc2FjdGlvbixcbiAgICAgICAgICAgICAgICBsb2dnaW5nOiBvcHRpb25zLmxvZ2dpbmdcbiAgICAgICAgICAgICAgfSkudmFsdWUoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZUJ1bGtDcmVhdGUoYXNzb2NpYXRpb25JbnN0YW5jZXMsIGluY2x1ZGVPcHRpb25zKS50aGVuKGFzc29jaWF0aW9uSW5zdGFuY2VzID0+IHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpZHggaW4gYXNzb2NpYXRpb25JbnN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NvY2lhdGlvbkluc3RhbmNlID0gYXNzb2NpYXRpb25JbnN0YW5jZXNbaWR4XTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGFzc29jaWF0aW9uSW5zdGFuY2VJbmRleFRvSW5zdGFuY2VNYXBbaWR4XTtcblxuICAgICAgICAgICAgICAgIGluc3RhbmNlW2luY2x1ZGUuYXNzb2NpYXRpb24uYWNjZXNzb3JzLnNldF0oYXNzb2NpYXRpb25JbnN0YW5jZSwgeyBzYXZlOiBmYWxzZSwgbG9nZ2luZzogb3B0aW9ucy5sb2dnaW5nIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGFsbCBpbiBvbmUgcXVlcnlcbiAgICAgICAgICAvLyBSZWNyZWF0ZSByZWNvcmRzIGZyb20gaW5zdGFuY2VzIHRvIHJlcHJlc2VudCBhbnkgY2hhbmdlcyBtYWRlIGluIGhvb2tzIG9yIHZhbGlkYXRpb25cbiAgICAgICAgICByZWNvcmRzID0gaW5zdGFuY2VzLm1hcChpbnN0YW5jZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBpbnN0YW5jZS5kYXRhVmFsdWVzO1xuXG4gICAgICAgICAgICAvLyBzZXQgY3JlYXRlZEF0L3VwZGF0ZWRBdCBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBpZiAoY3JlYXRlZEF0QXR0ciAmJiAhdmFsdWVzW2NyZWF0ZWRBdEF0dHJdKSB7XG4gICAgICAgICAgICAgIHZhbHVlc1tjcmVhdGVkQXRBdHRyXSA9IG5vdztcbiAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmZpZWxkcy5pbmNsdWRlcyhjcmVhdGVkQXRBdHRyKSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZmllbGRzLnB1c2goY3JlYXRlZEF0QXR0cik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1cGRhdGVkQXRBdHRyICYmICF2YWx1ZXNbdXBkYXRlZEF0QXR0cl0pIHtcbiAgICAgICAgICAgICAgdmFsdWVzW3VwZGF0ZWRBdEF0dHJdID0gbm93O1xuICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuZmllbGRzLmluY2x1ZGVzKHVwZGF0ZWRBdEF0dHIpKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWVsZHMucHVzaCh1cGRhdGVkQXRBdHRyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvdXQgPSBPYmplY3QuYXNzaWduKHt9LCBVdGlscy5tYXBWYWx1ZUZpZWxkTmFtZXModmFsdWVzLCBvcHRpb25zLmZpZWxkcywgbW9kZWwpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIG1vZGVsLl92aXJ0dWFsQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBkZWxldGUgb3V0W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gTWFwIGF0dHJpYnV0ZXMgdG8gZmllbGRzIGZvciBzZXJpYWwgaWRlbnRpZmljYXRpb25cbiAgICAgICAgICBjb25zdCBmaWVsZE1hcHBlZEF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGF0dHIgaW4gbW9kZWwudGFibGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBmaWVsZE1hcHBlZEF0dHJpYnV0ZXNbbW9kZWwucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZCB8fCBhdHRyXSA9IG1vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWFwIHVwZGF0ZU9uRHVwbGljYXRlIGF0dHJpYnV0ZXMgdG8gZmllbGRzXG4gICAgICAgICAgaWYgKG9wdGlvbnMudXBkYXRlT25EdXBsaWNhdGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMudXBkYXRlT25EdXBsaWNhdGUgPSBvcHRpb25zLnVwZGF0ZU9uRHVwbGljYXRlLm1hcChhdHRyID0+IG1vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGQgfHwgYXR0cik7XG4gICAgICAgICAgICAvLyBHZXQgcHJpbWFyeSBrZXlzIGZvciBwb3N0Z3JlcyB0byBlbmFibGUgdXBkYXRlT25EdXBsaWNhdGVcbiAgICAgICAgICAgIG9wdGlvbnMudXBzZXJ0S2V5cyA9IF8uY2hhaW4obW9kZWwucHJpbWFyeUtleXMpLnZhbHVlcygpLm1hcCgnZmllbGQnKS52YWx1ZSgpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1vZGVsLnVuaXF1ZUtleXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgb3B0aW9ucy51cHNlcnRLZXlzID0gXy5jaGFpbihtb2RlbC51bmlxdWVLZXlzKS52YWx1ZXMoKS5maWx0ZXIoYyA9PiBjLmZpZWxkcy5sZW5ndGggPT09IDEpLm1hcCgnY29sdW1uJykudmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXAgcmV0dXJuaW5nIGF0dHJpYnV0ZXMgdG8gZmllbGRzXG4gICAgICAgICAgaWYgKG9wdGlvbnMucmV0dXJuaW5nICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5yZXR1cm5pbmcpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnJldHVybmluZyA9IG9wdGlvbnMucmV0dXJuaW5nLm1hcChhdHRyID0+IG1vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGQgfHwgYXR0cik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG1vZGVsLlF1ZXJ5SW50ZXJmYWNlLmJ1bGtJbnNlcnQobW9kZWwuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCByZWNvcmRzLCBvcHRpb25zLCBmaWVsZE1hcHBlZEF0dHJpYnV0ZXMpLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xuICAgICAgICAgICAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzW2ldO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlIHx8IGtleSA9PT0gbW9kZWwucHJpbWFyeUtleUF0dHJpYnV0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXQobW9kZWwucHJpbWFyeUtleUF0dHJpYnV0ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgWydteXNxbCcsICdtYXJpYWRiJywgJ3NxbGl0ZSddLmluY2x1ZGVzKGRpYWxlY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBxdWVyeS5qcyBmb3IgdGhlc2UgREJzIGlzIGJsaW5kLCBpdCBhdXRvaW5jcmVtZW50cyB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJpbWFyeWtleSB2YWx1ZSwgZXZlbiBpZiBpdCB3YXMgc2V0IG1hbnVhbGx5LiBBbHNvLCBpdCBjYW5cbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIG1vcmUgcmVzdWx0cyB0aGFuIGluc3RhbmNlcywgYnVnPy5cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSByZXN1bHRba2V5XTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRyID0gXy5maW5kKG1vZGVsLnJhd0F0dHJpYnV0ZXMsIGF0dHJpYnV0ZSA9PiBhdHRyaWJ1dGUuZmllbGROYW1lID09PSBrZXkgfHwgYXR0cmlidXRlLmZpZWxkID09PSBrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmRhdGFWYWx1ZXNbYXR0ciAmJiBhdHRyLmZpZWxkTmFtZSB8fCBrZXldID0gcmVjb3JkO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmluY2x1ZGUgfHwgIW9wdGlvbnMuaW5jbHVkZS5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICAvLyBOZXN0ZWQgY3JlYXRpb24gZm9yIEhhc09uZS9IYXNNYW55L0JlbG9uZ3NUb01hbnkgcmVsYXRpb25zXG4gICAgICAgIHJldHVybiBQcm9taXNlLm1hcChvcHRpb25zLmluY2x1ZGUuZmlsdGVyKGluY2x1ZGUgPT4gIShpbmNsdWRlLmFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvIHx8XG4gICAgICAgICAgaW5jbHVkZS5wYXJlbnQgJiYgaW5jbHVkZS5wYXJlbnQuYXNzb2NpYXRpb24gaW5zdGFuY2VvZiBCZWxvbmdzVG9NYW55KSksIGluY2x1ZGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uSW5zdGFuY2VzID0gW107XG4gICAgICAgICAgY29uc3QgYXNzb2NpYXRpb25JbnN0YW5jZUluZGV4VG9JbnN0YW5jZU1hcCA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBpbnN0YW5jZSBvZiBpbnN0YW5jZXMpIHtcbiAgICAgICAgICAgIGxldCBhc3NvY2lhdGVkID0gaW5zdGFuY2UuZ2V0KGluY2x1ZGUuYXMpO1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0ZWQpKSBhc3NvY2lhdGVkID0gW2Fzc29jaWF0ZWRdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFzc29jaWF0aW9uSW5zdGFuY2Ugb2YgYXNzb2NpYXRlZCkge1xuICAgICAgICAgICAgICBpZiAoYXNzb2NpYXRpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGlmICghKGluY2x1ZGUuYXNzb2NpYXRpb24gaW5zdGFuY2VvZiBCZWxvbmdzVG9NYW55KSkge1xuICAgICAgICAgICAgICAgICAgYXNzb2NpYXRpb25JbnN0YW5jZS5zZXQoaW5jbHVkZS5hc3NvY2lhdGlvbi5mb3JlaWduS2V5LCBpbnN0YW5jZS5nZXQoaW5jbHVkZS5hc3NvY2lhdGlvbi5zb3VyY2VLZXkgfHwgaW5zdGFuY2UuY29uc3RydWN0b3IucHJpbWFyeUtleUF0dHJpYnV0ZSwgeyByYXc6IHRydWUgfSksIHsgcmF3OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhc3NvY2lhdGlvbkluc3RhbmNlLCBpbmNsdWRlLmFzc29jaWF0aW9uLnNjb3BlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNzb2NpYXRpb25JbnN0YW5jZXMucHVzaChhc3NvY2lhdGlvbkluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbkluc3RhbmNlSW5kZXhUb0luc3RhbmNlTWFwLnB1c2goaW5zdGFuY2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFhc3NvY2lhdGlvbkluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbmNsdWRlT3B0aW9ucyA9IF8oVXRpbHMuY2xvbmVEZWVwKGluY2x1ZGUpKVxuICAgICAgICAgICAgLm9taXQoWydhc3NvY2lhdGlvbiddKVxuICAgICAgICAgICAgLmRlZmF1bHRzKHtcbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb246IG9wdGlvbnMudHJhbnNhY3Rpb24sXG4gICAgICAgICAgICAgIGxvZ2dpbmc6IG9wdGlvbnMubG9nZ2luZ1xuICAgICAgICAgICAgfSkudmFsdWUoKTtcblxuICAgICAgICAgIHJldHVybiByZWN1cnNpdmVCdWxrQ3JlYXRlKGFzc29jaWF0aW9uSW5zdGFuY2VzLCBpbmNsdWRlT3B0aW9ucykudGhlbihhc3NvY2lhdGlvbkluc3RhbmNlcyA9PiB7XG4gICAgICAgICAgICBpZiAoaW5jbHVkZS5hc3NvY2lhdGlvbiBpbnN0YW5jZW9mIEJlbG9uZ3NUb01hbnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVTZXRzID0gW107XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpZHggaW4gYXNzb2NpYXRpb25JbnN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NvY2lhdGlvbkluc3RhbmNlID0gYXNzb2NpYXRpb25JbnN0YW5jZXNbaWR4XTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGFzc29jaWF0aW9uSW5zdGFuY2VJbmRleFRvSW5zdGFuY2VNYXBbaWR4XTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIHZhbHVlc1tpbmNsdWRlLmFzc29jaWF0aW9uLmZvcmVpZ25LZXldID0gaW5zdGFuY2UuZ2V0KGluc3RhbmNlLmNvbnN0cnVjdG9yLnByaW1hcnlLZXlBdHRyaWJ1dGUsIHsgcmF3OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHZhbHVlc1tpbmNsdWRlLmFzc29jaWF0aW9uLm90aGVyS2V5XSA9IGFzc29jaWF0aW9uSW5zdGFuY2UuZ2V0KGFzc29jaWF0aW9uSW5zdGFuY2UuY29uc3RydWN0b3IucHJpbWFyeUtleUF0dHJpYnV0ZSwgeyByYXc6IHRydWUgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBJbmNsdWRlIHZhbHVlcyBkZWZpbmVkIGluIHRoZSBhc3NvY2lhdGlvblxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odmFsdWVzLCBpbmNsdWRlLmFzc29jaWF0aW9uLnRocm91Z2guc2NvcGUpO1xuICAgICAgICAgICAgICAgIGlmIChhc3NvY2lhdGlvbkluc3RhbmNlW2luY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbC5uYW1lXSkge1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdHRyIG9mIE9iamVjdC5rZXlzKGluY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbC5yYXdBdHRyaWJ1dGVzKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uX2F1dG9HZW5lcmF0ZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyID09PSBpbmNsdWRlLmFzc29jaWF0aW9uLmZvcmVpZ25LZXkgfHxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyID09PSBpbmNsdWRlLmFzc29jaWF0aW9uLm90aGVyS2V5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGFzc29jaWF0aW9uSW5zdGFuY2VbaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLm5hbWVdW2F0dHJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbYXR0cl0gPSBhc3NvY2lhdGlvbkluc3RhbmNlW2luY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbC5uYW1lXVthdHRyXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZVNldHMucHVzaCh2YWx1ZXMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgdGhyb3VnaE9wdGlvbnMgPSBfKFV0aWxzLmNsb25lRGVlcChpbmNsdWRlKSlcbiAgICAgICAgICAgICAgICAub21pdChbJ2Fzc29jaWF0aW9uJywgJ2F0dHJpYnV0ZXMnXSlcbiAgICAgICAgICAgICAgICAuZGVmYXVsdHMoe1xuICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb246IG9wdGlvbnMudHJhbnNhY3Rpb24sXG4gICAgICAgICAgICAgICAgICBsb2dnaW5nOiBvcHRpb25zLmxvZ2dpbmdcbiAgICAgICAgICAgICAgICB9KS52YWx1ZSgpO1xuICAgICAgICAgICAgICB0aHJvdWdoT3B0aW9ucy5tb2RlbCA9IGluY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaE1vZGVsO1xuICAgICAgICAgICAgICBjb25zdCB0aHJvdWdoSW5zdGFuY2VzID0gaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoTW9kZWwuYnVsa0J1aWxkKHZhbHVlU2V0cywgdGhyb3VnaE9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgIHJldHVybiByZWN1cnNpdmVCdWxrQ3JlYXRlKHRocm91Z2hJbnN0YW5jZXMsIHRocm91Z2hPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gbWFwIGZpZWxkcyBiYWNrIHRvIGF0dHJpYnV0ZXNcbiAgICAgICAgaW5zdGFuY2VzLmZvckVhY2goaW5zdGFuY2UgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgYXR0ciBpbiBtb2RlbC5yYXdBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBpZiAobW9kZWwucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZCAmJlxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmRhdGFWYWx1ZXNbbW9kZWwucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZF0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG1vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGQgIT09IGF0dHJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5kYXRhVmFsdWVzW2F0dHJdID0gaW5zdGFuY2UuZGF0YVZhbHVlc1ttb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJdLmZpZWxkXTtcbiAgICAgICAgICAgICAgZGVsZXRlIGluc3RhbmNlLmRhdGFWYWx1ZXNbbW9kZWwucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnN0YW5jZS5fcHJldmlvdXNEYXRhVmFsdWVzW2F0dHJdID0gaW5zdGFuY2UuZGF0YVZhbHVlc1thdHRyXTtcbiAgICAgICAgICAgIGluc3RhbmNlLmNoYW5nZWQoYXR0ciwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnN0YW5jZS5pc05ld1JlY29yZCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSdW4gYWZ0ZXIgaG9va1xuICAgICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICAgIHJldHVybiBtb2RlbC5ydW5Ib29rcygnYWZ0ZXJCdWxrQ3JlYXRlJywgaW5zdGFuY2VzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSkudGhlbigoKSA9PiBpbnN0YW5jZXMpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcmVjdXJzaXZlQnVsa0NyZWF0ZShpbnN0YW5jZXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRydW5jYXRlIGFsbCBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLiBUaGlzIGlzIGEgY29udmVuaWVudCBtZXRob2QgZm9yIE1vZGVsLmRlc3Ryb3koeyB0cnVuY2F0ZTogdHJ1ZSB9KS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICBbb3B0aW9uc10gVGhlIG9wdGlvbnMgcGFzc2VkIHRvIE1vZGVsLmRlc3Ryb3kgaW4gYWRkaXRpb24gdG8gdHJ1bmNhdGVcbiAgICogQHBhcmFtIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5jYXNjYWRlID0gZmFsc2VdIFRydW5jYXRlcyBhbGwgdGFibGVzIHRoYXQgaGF2ZSBmb3JlaWduLWtleSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lZCB0YWJsZSwgb3IgdG8gYW55IHRhYmxlcyBhZGRlZCB0byB0aGUgZ3JvdXAgZHVlIHRvIENBU0NBREUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgW29wdGlvbnMucmVzdGFydElkZW50aXR5PWZhbHNlXSBBdXRvbWF0aWNhbGx5IHJlc3RhcnQgc2VxdWVuY2VzIG93bmVkIGJ5IGNvbHVtbnMgb2YgdGhlIHRydW5jYXRlZCB0YWJsZS5cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gICAgICBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnxGdW5jdGlvbn0gW29wdGlvbnMubG9nZ2luZ10gQSBmdW5jdGlvbiB0aGF0IGxvZ3Mgc3FsIHF1ZXJpZXMsIG9yIGZhbHNlIGZvciBubyBsb2dnaW5nXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgW29wdGlvbnMuYmVuY2htYXJrPWZhbHNlXSBQYXNzIHF1ZXJ5IGV4ZWN1dGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcyBhcyBzZWNvbmQgYXJndW1lbnQgdG8gbG9nZ2luZyBmdW5jdGlvbiAob3B0aW9ucy5sb2dnaW5nKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICBbb3B0aW9ucy5zZWFyY2hQYXRoPURFRkFVTFRdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBzY2hlbWEgc2VhcmNoX3BhdGggKFBvc3RncmVzIG9ubHkpXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKlxuICAgKiBAc2VlXG4gICAqIHtAbGluayBNb2RlbC5kZXN0cm95fSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuICAgKi9cbiAgc3RhdGljIHRydW5jYXRlKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpIHx8IHt9O1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLmRlc3Ryb3kob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIG11bHRpcGxlIGluc3RhbmNlcywgb3Igc2V0IHRoZWlyIGRlbGV0ZWRBdCB0aW1lc3RhbXAgdG8gdGhlIGN1cnJlbnQgdGltZSBpZiBgcGFyYW5vaWRgIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95IG9wdGlvbnNcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICBbb3B0aW9ucy53aGVyZV0gICAgICAgICAgICAgICAgIEZpbHRlciB0aGUgZGVzdHJveVxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLmhvb2tzPXRydWVdICAgICAgICAgICAgUnVuIGJlZm9yZSAvIGFmdGVyIGJ1bGsgZGVzdHJveSBob29rcz9cbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5pbmRpdmlkdWFsSG9va3M9ZmFsc2VdIElmIHNldCB0byB0cnVlLCBkZXN0cm95IHdpbGwgU0VMRUNUIGFsbCByZWNvcmRzIG1hdGNoaW5nIHRoZSB3aGVyZSBwYXJhbWV0ZXIgYW5kIHdpbGwgZXhlY3V0ZSBiZWZvcmUgLyBhZnRlciBkZXN0cm95IGhvb2tzIG9uIGVhY2ggcm93XG4gICAqIEBwYXJhbSAge251bWJlcn0gICAgICAgW29wdGlvbnMubGltaXRdICAgICAgICAgICAgICAgICBIb3cgbWFueSByb3dzIHRvIGRlbGV0ZVxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLmZvcmNlPWZhbHNlXSAgICAgICAgICAgRGVsZXRlIGluc3RlYWQgb2Ygc2V0dGluZyBkZWxldGVkQXQgdG8gY3VycmVudCB0aW1lc3RhbXAgKG9ubHkgYXBwbGljYWJsZSBpZiBgcGFyYW5vaWRgIGlzIGVuYWJsZWQpXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMudHJ1bmNhdGU9ZmFsc2VdICAgICAgICBJZiBzZXQgdG8gdHJ1ZSwgZGlhbGVjdHMgdGhhdCBzdXBwb3J0IGl0IHdpbGwgdXNlIFRSVU5DQVRFIGluc3RlYWQgb2YgREVMRVRFIEZST00uIElmIGEgdGFibGUgaXMgdHJ1bmNhdGVkIHRoZSB3aGVyZSBhbmQgbGltaXQgb3B0aW9ucyBhcmUgaWdub3JlZFxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLmNhc2NhZGU9ZmFsc2VdICAgICAgICAgT25seSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggVFJVTkNBVEUuIFRydW5jYXRlcyAgYWxsIHRhYmxlcyB0aGF0IGhhdmUgZm9yZWlnbi1rZXkgcmVmZXJlbmNlcyB0byB0aGUgbmFtZWQgdGFibGUsIG9yIHRvIGFueSB0YWJsZXMgYWRkZWQgdG8gdGhlIGdyb3VwIGR1ZSB0byBDQVNDQURFLlxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLnJlc3RhcnRJZGVudGl0eT1mYWxzZV0gT25seSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggVFJVTkNBVEUuIEF1dG9tYXRpY2FsbHkgcmVzdGFydCBzZXF1ZW5jZXMgb3duZWQgYnkgY29sdW1ucyBvZiB0aGUgdHJ1bmNhdGVkIHRhYmxlLlxuICAgKiBAcGFyYW0gIHtUcmFuc2FjdGlvbn0gIFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcbiAgICogQHBhcmFtICB7RnVuY3Rpb259ICAgICBbb3B0aW9ucy5sb2dnaW5nPWZhbHNlXSAgICAgICAgIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLmJlbmNobWFyaz1mYWxzZV0gICAgICAgUGFzcyBxdWVyeSBleGVjdXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMgYXMgc2Vjb25kIGFyZ3VtZW50IHRvIGxvZ2dpbmcgZnVuY3Rpb24gKG9wdGlvbnMubG9nZ2luZykuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59IFRoZSBudW1iZXIgb2YgZGVzdHJveWVkIHJvd3NcbiAgICovXG4gIHN0YXRpYyBkZXN0cm95KG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5qZWN0U2NvcGUob3B0aW9ucyk7XG5cbiAgICBpZiAoIW9wdGlvbnMgfHwgIShvcHRpb25zLndoZXJlIHx8IG9wdGlvbnMudHJ1bmNhdGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgd2hlcmUgb3IgdHJ1bmNhdGUgYXR0cmlidXRlIGluIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiBtb2RlbC5kZXN0cm95LicpO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy50cnVuY2F0ZSAmJiAhXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMud2hlcmUpICYmICFBcnJheS5pc0FycmF5KG9wdGlvbnMud2hlcmUpICYmICEob3B0aW9ucy53aGVyZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcGxhaW4gb2JqZWN0LCBhcnJheSBvciBzZXF1ZWxpemUgbWV0aG9kIGluIHRoZSBvcHRpb25zLndoZXJlIHBhcmFtZXRlciBvZiBtb2RlbC5kZXN0cm95LicpO1xuICAgIH1cblxuICAgIG9wdGlvbnMgPSBfLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICAgIGhvb2tzOiB0cnVlLFxuICAgICAgaW5kaXZpZHVhbEhvb2tzOiBmYWxzZSxcbiAgICAgIGZvcmNlOiBmYWxzZSxcbiAgICAgIGNhc2NhZGU6IGZhbHNlLFxuICAgICAgcmVzdGFydElkZW50aXR5OiBmYWxzZVxuICAgIH0pO1xuXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5CVUxLREVMRVRFO1xuXG4gICAgVXRpbHMubWFwT3B0aW9uRmllbGROYW1lcyhvcHRpb25zLCB0aGlzKTtcbiAgICBvcHRpb25zLm1vZGVsID0gdGhpcztcblxuICAgIGxldCBpbnN0YW5jZXM7XG5cbiAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xuICAgICAgLy8gUnVuIGJlZm9yZSBob29rXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcygnYmVmb3JlQnVsa0Rlc3Ryb3knLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIC8vIEdldCBkYW9zIGFuZCBydW4gYmVmb3JlRGVzdHJveSBob29rIG9uIGVhY2ggcmVjb3JkIGluZGl2aWR1YWxseVxuICAgICAgaWYgKG9wdGlvbnMuaW5kaXZpZHVhbEhvb2tzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRBbGwoeyB3aGVyZTogb3B0aW9ucy53aGVyZSwgdHJhbnNhY3Rpb246IG9wdGlvbnMudHJhbnNhY3Rpb24sIGxvZ2dpbmc6IG9wdGlvbnMubG9nZ2luZywgYmVuY2htYXJrOiBvcHRpb25zLmJlbmNobWFyayB9KVxuICAgICAgICAgIC5tYXAoaW5zdGFuY2UgPT4gdGhpcy5ydW5Ib29rcygnYmVmb3JlRGVzdHJveScsIGluc3RhbmNlLCBvcHRpb25zKS50aGVuKCgpID0+IGluc3RhbmNlKSlcbiAgICAgICAgICAudGhlbihfaW5zdGFuY2VzID0+IHtcbiAgICAgICAgICAgIGluc3RhbmNlcyA9IF9pbnN0YW5jZXM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAvLyBSdW4gZGVsZXRlIHF1ZXJ5IChvciB1cGRhdGUgaWYgcGFyYW5vaWQpXG4gICAgICBpZiAodGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXQgJiYgIW9wdGlvbnMuZm9yY2UpIHtcbiAgICAgICAgLy8gU2V0IHF1ZXJ5IHR5cGUgYXBwcm9wcmlhdGVseSB3aGVuIHJ1bm5pbmcgc29mdCBkZWxldGVcbiAgICAgICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5CVUxLVVBEQVRFO1xuXG4gICAgICAgIGNvbnN0IGF0dHJWYWx1ZUhhc2ggPSB7fTtcbiAgICAgICAgY29uc3QgZGVsZXRlZEF0QXR0cmlidXRlID0gdGhpcy5yYXdBdHRyaWJ1dGVzW3RoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0XTtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLnJhd0F0dHJpYnV0ZXNbdGhpcy5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXRdLmZpZWxkO1xuICAgICAgICBjb25zdCB3aGVyZSA9IHtcbiAgICAgICAgICBbZmllbGRdOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVsZXRlZEF0QXR0cmlidXRlLCAnZGVmYXVsdFZhbHVlJykgPyBkZWxldGVkQXRBdHRyaWJ1dGUuZGVmYXVsdFZhbHVlIDogbnVsbFxuICAgICAgICB9O1xuXG5cbiAgICAgICAgYXR0clZhbHVlSGFzaFtmaWVsZF0gPSBVdGlscy5ub3codGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuUXVlcnlJbnRlcmZhY2UuYnVsa1VwZGF0ZSh0aGlzLmdldFRhYmxlTmFtZShvcHRpb25zKSwgYXR0clZhbHVlSGFzaCwgT2JqZWN0LmFzc2lnbih3aGVyZSwgb3B0aW9ucy53aGVyZSksIG9wdGlvbnMsIHRoaXMucmF3QXR0cmlidXRlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5RdWVyeUludGVyZmFjZS5idWxrRGVsZXRlKHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCBvcHRpb25zLndoZXJlLCBvcHRpb25zLCB0aGlzKTtcbiAgICB9KS50YXAoKCkgPT4ge1xuICAgICAgLy8gUnVuIGFmdGVyRGVzdHJveSBob29rIG9uIGVhY2ggcmVjb3JkIGluZGl2aWR1YWxseVxuICAgICAgaWYgKG9wdGlvbnMuaW5kaXZpZHVhbEhvb2tzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLm1hcChpbnN0YW5jZXMsIGluc3RhbmNlID0+IHRoaXMucnVuSG9va3MoJ2FmdGVyRGVzdHJveScsIGluc3RhbmNlLCBvcHRpb25zKSk7XG4gICAgICB9XG4gICAgfSkudGFwKCgpID0+IHtcbiAgICAgIC8vIFJ1biBhZnRlciBob29rXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcygnYWZ0ZXJCdWxrRGVzdHJveScsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgbXVsdGlwbGUgaW5zdGFuY2VzIGlmIGBwYXJhbm9pZGAgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmUgb3B0aW9uc1xuICAgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgIFtvcHRpb25zLndoZXJlXSAgICAgICAgICAgICAgICAgRmlsdGVyIHRoZSByZXN0b3JlXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuaG9va3M9dHJ1ZV0gICAgICAgICAgICBSdW4gYmVmb3JlIC8gYWZ0ZXIgYnVsayByZXN0b3JlIGhvb2tzP1xuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLmluZGl2aWR1YWxIb29rcz1mYWxzZV0gSWYgc2V0IHRvIHRydWUsIHJlc3RvcmUgd2lsbCBmaW5kIGFsbCByZWNvcmRzIHdpdGhpbiB0aGUgd2hlcmUgcGFyYW1ldGVyIGFuZCB3aWxsIGV4ZWN1dGUgYmVmb3JlIC8gYWZ0ZXIgYnVsa1Jlc3RvcmUgaG9va3Mgb24gZWFjaCByb3dcbiAgICogQHBhcmFtICB7bnVtYmVyfSAgICAgICBbb3B0aW9ucy5saW1pdF0gICAgICAgICAgICAgICAgIEhvdyBtYW55IHJvd3MgdG8gdW5kZWxldGUgKG9ubHkgZm9yIG15c3FsKVxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gICAgIFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdICAgICAgICAgQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuYmVuY2htYXJrPWZhbHNlXSAgICAgICBQYXNzIHF1ZXJ5IGV4ZWN1dGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcyBhcyBzZWNvbmQgYXJndW1lbnQgdG8gbG9nZ2luZyBmdW5jdGlvbiAob3B0aW9ucy5sb2dnaW5nKS5cbiAgICogQHBhcmFtICB7VHJhbnNhY3Rpb259ICBbb3B0aW9ucy50cmFuc2FjdGlvbl0gICAgICAgICAgIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHN0YXRpYyByZXN0b3JlKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0KSB0aHJvdyBuZXcgRXJyb3IoJ01vZGVsIGlzIG5vdCBwYXJhbm9pZCcpO1xuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaG9va3M6IHRydWUsXG4gICAgICBpbmRpdmlkdWFsSG9va3M6IGZhbHNlXG4gICAgfSwgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICBvcHRpb25zLnR5cGUgPSBRdWVyeVR5cGVzLlJBVztcbiAgICBvcHRpb25zLm1vZGVsID0gdGhpcztcblxuICAgIGxldCBpbnN0YW5jZXM7XG5cbiAgICBVdGlscy5tYXBPcHRpb25GaWVsZE5hbWVzKG9wdGlvbnMsIHRoaXMpO1xuXG4gICAgcmV0dXJuIFByb21pc2UudHJ5KCgpID0+IHtcbiAgICAgIC8vIFJ1biBiZWZvcmUgaG9va1xuICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoJ2JlZm9yZUJ1bGtSZXN0b3JlJywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAvLyBHZXQgZGFvcyBhbmQgcnVuIGJlZm9yZVJlc3RvcmUgaG9vayBvbiBlYWNoIHJlY29yZCBpbmRpdmlkdWFsbHlcbiAgICAgIGlmIChvcHRpb25zLmluZGl2aWR1YWxIb29rcykge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kQWxsKHsgd2hlcmU6IG9wdGlvbnMud2hlcmUsIHRyYW5zYWN0aW9uOiBvcHRpb25zLnRyYW5zYWN0aW9uLCBsb2dnaW5nOiBvcHRpb25zLmxvZ2dpbmcsIGJlbmNobWFyazogb3B0aW9ucy5iZW5jaG1hcmssIHBhcmFub2lkOiBmYWxzZSB9KVxuICAgICAgICAgIC5tYXAoaW5zdGFuY2UgPT4gdGhpcy5ydW5Ib29rcygnYmVmb3JlUmVzdG9yZScsIGluc3RhbmNlLCBvcHRpb25zKS50aGVuKCgpID0+IGluc3RhbmNlKSlcbiAgICAgICAgICAudGhlbihfaW5zdGFuY2VzID0+IHtcbiAgICAgICAgICAgIGluc3RhbmNlcyA9IF9pbnN0YW5jZXM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAvLyBSdW4gdW5kZWxldGUgcXVlcnlcbiAgICAgIGNvbnN0IGF0dHJWYWx1ZUhhc2ggPSB7fTtcbiAgICAgIGNvbnN0IGRlbGV0ZWRBdENvbCA9IHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0O1xuICAgICAgY29uc3QgZGVsZXRlZEF0QXR0cmlidXRlID0gdGhpcy5yYXdBdHRyaWJ1dGVzW2RlbGV0ZWRBdENvbF07XG4gICAgICBjb25zdCBkZWxldGVkQXREZWZhdWx0VmFsdWUgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVsZXRlZEF0QXR0cmlidXRlLCAnZGVmYXVsdFZhbHVlJykgPyBkZWxldGVkQXRBdHRyaWJ1dGUuZGVmYXVsdFZhbHVlIDogbnVsbDtcblxuICAgICAgYXR0clZhbHVlSGFzaFtkZWxldGVkQXRBdHRyaWJ1dGUuZmllbGQgfHwgZGVsZXRlZEF0Q29sXSA9IGRlbGV0ZWRBdERlZmF1bHRWYWx1ZTtcbiAgICAgIG9wdGlvbnMub21pdE51bGwgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0aGlzLlF1ZXJ5SW50ZXJmYWNlLmJ1bGtVcGRhdGUodGhpcy5nZXRUYWJsZU5hbWUob3B0aW9ucyksIGF0dHJWYWx1ZUhhc2gsIG9wdGlvbnMud2hlcmUsIG9wdGlvbnMsIHRoaXMucmF3QXR0cmlidXRlcyk7XG4gICAgfSkudGFwKCgpID0+IHtcbiAgICAgIC8vIFJ1biBhZnRlckRlc3Ryb3kgaG9vayBvbiBlYWNoIHJlY29yZCBpbmRpdmlkdWFsbHlcbiAgICAgIGlmIChvcHRpb25zLmluZGl2aWR1YWxIb29rcykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5tYXAoaW5zdGFuY2VzLCBpbnN0YW5jZSA9PiB0aGlzLnJ1bkhvb2tzKCdhZnRlclJlc3RvcmUnLCBpbnN0YW5jZSwgb3B0aW9ucykpO1xuICAgICAgfVxuICAgIH0pLnRhcCgoKSA9PiB7XG4gICAgICAvLyBSdW4gYWZ0ZXIgaG9va1xuICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoJ2FmdGVyQnVsa1Jlc3RvcmUnLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbXVsdGlwbGUgaW5zdGFuY2VzIHRoYXQgbWF0Y2ggdGhlIHdoZXJlIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoIG9mIHZhbHVlcyB0byB1cGRhdGVcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgICAgICBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZSBvcHRpb25zXG4gICAqIEBwYXJhbSAge09iamVjdH0gICAgICAgb3B0aW9ucy53aGVyZSAgICAgICAgICAgICAgICAgICBPcHRpb25zIHRvIGRlc2NyaWJlIHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoLlxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLnBhcmFub2lkPXRydWVdICAgICAgICAgSWYgdHJ1ZSwgb25seSBub24tZGVsZXRlZCByZWNvcmRzIHdpbGwgYmUgdXBkYXRlZC4gSWYgZmFsc2UsIGJvdGggZGVsZXRlZCBhbmQgbm9uLWRlbGV0ZWQgcmVjb3JkcyB3aWxsIGJlIHVwZGF0ZWQuIE9ubHkgYXBwbGllcyBpZiBgb3B0aW9ucy5wYXJhbm9pZGAgaXMgdHJ1ZSBmb3IgdGhlIG1vZGVsLlxuICAgKiBAcGFyYW0gIHtBcnJheX0gICAgICAgIFtvcHRpb25zLmZpZWxkc10gICAgICAgICAgICAgICAgRmllbGRzIHRvIHVwZGF0ZSAoZGVmYXVsdHMgdG8gYWxsIGZpZWxkcylcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy52YWxpZGF0ZT10cnVlXSAgICAgICAgIFNob3VsZCBlYWNoIHJvdyBiZSBzdWJqZWN0IHRvIHZhbGlkYXRpb24gYmVmb3JlIGl0IGlzIGluc2VydGVkLiBUaGUgd2hvbGUgaW5zZXJ0IHdpbGwgZmFpbCBpZiBvbmUgcm93IGZhaWxzIHZhbGlkYXRpb25cbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5ob29rcz10cnVlXSAgICAgICAgICAgIFJ1biBiZWZvcmUgLyBhZnRlciBidWxrIHVwZGF0ZSBob29rcz9cbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5zaWRlRWZmZWN0cz10cnVlXSAgICAgIFdoZXRoZXIgb3Igbm90IHRvIHVwZGF0ZSB0aGUgc2lkZSBlZmZlY3RzIG9mIGFueSB2aXJ0dWFsIHNldHRlcnMuXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuaW5kaXZpZHVhbEhvb2tzPWZhbHNlXSBSdW4gYmVmb3JlIC8gYWZ0ZXIgdXBkYXRlIGhvb2tzPy4gSWYgdHJ1ZSwgdGhpcyB3aWxsIGV4ZWN1dGUgYSBTRUxFQ1QgZm9sbG93ZWQgYnkgaW5kaXZpZHVhbCBVUERBVEVzLiBBIHNlbGVjdCBpcyBuZWVkZWQsIGJlY2F1c2UgdGhlIHJvdyBkYXRhIG5lZWRzIHRvIGJlIHBhc3NlZCB0byB0aGUgaG9va3NcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBbb3B0aW9ucy5yZXR1cm5pbmc9ZmFsc2VdICAgICAgIFJldHVybiB0aGUgYWZmZWN0ZWQgcm93cyAob25seSBmb3IgcG9zdGdyZXMpXG4gICAqIEBwYXJhbSAge251bWJlcn0gICAgICAgW29wdGlvbnMubGltaXRdICAgICAgICAgICAgICAgICBIb3cgbWFueSByb3dzIHRvIHVwZGF0ZSAob25seSBmb3IgbXlzcWwgYW5kIG1hcmlhZGIsIGltcGxlbWVudGVkIGFzIFRPUChuKSBmb3IgTVNTUUw7IGZvciBzcWxpdGUgaXQgaXMgc3VwcG9ydGVkIG9ubHkgd2hlbiByb3dpZCBpcyBwcmVzZW50KVxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gICAgIFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdICAgICAgICAgQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICAgW29wdGlvbnMuYmVuY2htYXJrPWZhbHNlXSAgICAgICBQYXNzIHF1ZXJ5IGV4ZWN1dGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcyBhcyBzZWNvbmQgYXJndW1lbnQgdG8gbG9nZ2luZyBmdW5jdGlvbiAob3B0aW9ucy5sb2dnaW5nKS5cbiAgICogQHBhcmFtICB7VHJhbnNhY3Rpb259ICBbb3B0aW9ucy50cmFuc2FjdGlvbl0gICAgICAgICAgIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxuICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgIFtvcHRpb25zLnNpbGVudD1mYWxzZV0gICAgICAgICAgSWYgdHJ1ZSwgdGhlIHVwZGF0ZWRBdCB0aW1lc3RhbXAgd2lsbCBub3QgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8bnVtYmVyLG51bWJlcj4+fSAgVGhlIHByb21pc2UgcmV0dXJucyBhbiBhcnJheSB3aXRoIG9uZSBvciB0d28gZWxlbWVudHMuIFRoZSBmaXJzdCBlbGVtZW50IGlzIGFsd2F5cyB0aGUgbnVtYmVyXG4gICAqIG9mIGFmZmVjdGVkIHJvd3MsIHdoaWxlIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgYWN0dWFsIGFmZmVjdGVkIHJvd3MgKG9ubHkgc3VwcG9ydGVkIGluIHBvc3RncmVzIHdpdGggYG9wdGlvbnMucmV0dXJuaW5nYCB0cnVlLilcbiAgICpcbiAgICovXG4gIHN0YXRpYyB1cGRhdGUodmFsdWVzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKTtcblxuICAgIHRoaXMuX2luamVjdFNjb3BlKG9wdGlvbnMpO1xuICAgIHRoaXMuX29wdGlvbnNNdXN0Q29udGFpbldoZXJlKG9wdGlvbnMpO1xuXG4gICAgb3B0aW9ucyA9IHRoaXMuX3BhcmFub2lkQ2xhdXNlKHRoaXMsIF8uZGVmYXVsdHMob3B0aW9ucywge1xuICAgICAgdmFsaWRhdGU6IHRydWUsXG4gICAgICBob29rczogdHJ1ZSxcbiAgICAgIGluZGl2aWR1YWxIb29rczogZmFsc2UsXG4gICAgICByZXR1cm5pbmc6IGZhbHNlLFxuICAgICAgZm9yY2U6IGZhbHNlLFxuICAgICAgc2lkZUVmZmVjdHM6IHRydWVcbiAgICB9KSk7XG5cbiAgICBvcHRpb25zLnR5cGUgPSBRdWVyeVR5cGVzLkJVTEtVUERBVEU7XG5cbiAgICAvLyBDbG9uZSB2YWx1ZXMgc28gaXQgZG9lc24ndCBnZXQgbW9kaWZpZWQgZm9yIGNhbGxlciBzY29wZSBhbmQgaWdub3JlIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICB2YWx1ZXMgPSBfLm9taXRCeSh2YWx1ZXMsIHZhbHVlID0+IHZhbHVlID09PSB1bmRlZmluZWQpO1xuXG4gICAgLy8gUmVtb3ZlIHZhbHVlcyB0aGF0IGFyZSBub3QgaW4gdGhlIG9wdGlvbnMuZmllbGRzXG4gICAgaWYgKG9wdGlvbnMuZmllbGRzICYmIG9wdGlvbnMuZmllbGRzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlcykpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmZpZWxkcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbHVlc1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRBdEF0dHIgPSB0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdDtcbiAgICAgIG9wdGlvbnMuZmllbGRzID0gXy5pbnRlcnNlY3Rpb24oT2JqZWN0LmtleXModmFsdWVzKSwgT2JqZWN0LmtleXModGhpcy50YWJsZUF0dHJpYnV0ZXMpKTtcbiAgICAgIGlmICh1cGRhdGVkQXRBdHRyICYmICFvcHRpb25zLmZpZWxkcy5pbmNsdWRlcyh1cGRhdGVkQXRBdHRyKSkge1xuICAgICAgICBvcHRpb25zLmZpZWxkcy5wdXNoKHVwZGF0ZWRBdEF0dHIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdCAmJiAhb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIHZhbHVlc1t0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdF0gPSB0aGlzLl9nZXREZWZhdWx0VGltZXN0YW1wKHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0KSB8fCBVdGlscy5ub3codGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KTtcbiAgICB9XG5cbiAgICBvcHRpb25zLm1vZGVsID0gdGhpcztcblxuICAgIGxldCBpbnN0YW5jZXM7XG4gICAgbGV0IHZhbHVlc1VzZTtcblxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XG4gICAgICAvLyBWYWxpZGF0ZVxuICAgICAgaWYgKG9wdGlvbnMudmFsaWRhdGUpIHtcbiAgICAgICAgY29uc3QgYnVpbGQgPSB0aGlzLmJ1aWxkKHZhbHVlcyk7XG4gICAgICAgIGJ1aWxkLnNldCh0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdCwgdmFsdWVzW3RoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0XSwgeyByYXc6IHRydWUgfSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICB2YWx1ZXMgPSBPYmplY3QuYXNzaWduKHZhbHVlcywgXy5waWNrKGJ1aWxkLmdldCgpLCBidWlsZC5jaGFuZ2VkKCkpKTtcbiAgICAgICAgICBvcHRpb25zLmZpZWxkcyA9IF8udW5pb24ob3B0aW9ucy5maWVsZHMsIE9iamVjdC5rZXlzKHZhbHVlcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2Ugd2FudCB0byBza2lwIHZhbGlkYXRpb25zIGZvciBhbGwgb3RoZXIgZmllbGRzXG4gICAgICAgIG9wdGlvbnMuc2tpcCA9IF8uZGlmZmVyZW5jZShPYmplY3Qua2V5cyh0aGlzLnJhd0F0dHJpYnV0ZXMpLCBPYmplY3Qua2V5cyh2YWx1ZXMpKTtcbiAgICAgICAgcmV0dXJuIGJ1aWxkLnZhbGlkYXRlKG9wdGlvbnMpLnRoZW4oYXR0cmlidXRlcyA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5za2lwID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMuZGF0YVZhbHVlcykge1xuICAgICAgICAgICAgdmFsdWVzID0gXy5waWNrKGF0dHJpYnV0ZXMuZGF0YVZhbHVlcywgT2JqZWN0LmtleXModmFsdWVzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gUnVuIGJlZm9yZSBob29rXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSB2YWx1ZXM7XG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVCdWxrVXBkYXRlJywgb3B0aW9ucykudGhlbigoKSA9PiB7XG4gICAgICAgICAgdmFsdWVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzO1xuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmF0dHJpYnV0ZXM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICB2YWx1ZXNVc2UgPSB2YWx1ZXM7XG5cbiAgICAgIC8vIEdldCBpbnN0YW5jZXMgYW5kIHJ1biBiZWZvcmVVcGRhdGUgaG9vayBvbiBlYWNoIHJlY29yZCBpbmRpdmlkdWFsbHlcbiAgICAgIGlmIChvcHRpb25zLmluZGl2aWR1YWxIb29rcykge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kQWxsKHtcbiAgICAgICAgICB3aGVyZTogb3B0aW9ucy53aGVyZSxcbiAgICAgICAgICB0cmFuc2FjdGlvbjogb3B0aW9ucy50cmFuc2FjdGlvbixcbiAgICAgICAgICBsb2dnaW5nOiBvcHRpb25zLmxvZ2dpbmcsXG4gICAgICAgICAgYmVuY2htYXJrOiBvcHRpb25zLmJlbmNobWFyayxcbiAgICAgICAgICBwYXJhbm9pZDogb3B0aW9ucy5wYXJhbm9pZFxuICAgICAgICB9KS50aGVuKF9pbnN0YW5jZXMgPT4ge1xuICAgICAgICAgIGluc3RhbmNlcyA9IF9pbnN0YW5jZXM7XG4gICAgICAgICAgaWYgKCFpbnN0YW5jZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUnVuIGJlZm9yZVVwZGF0ZSBob29rcyBvbiBlYWNoIHJlY29yZCBhbmQgY2hlY2sgd2hldGhlciBiZWZvcmVVcGRhdGUgaG9vayBjaGFuZ2VzIHZhbHVlcyB1bmlmb3JtbHlcbiAgICAgICAgICAvLyBpLmUuIHdoZXRoZXIgdGhleSBjaGFuZ2UgdmFsdWVzIGZvciBlYWNoIHJlY29yZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICBsZXQgY2hhbmdlZFZhbHVlcztcbiAgICAgICAgICBsZXQgZGlmZmVyZW50ID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5tYXAoaW5zdGFuY2VzLCBpbnN0YW5jZSA9PiB7XG4gICAgICAgICAgICAvLyBSZWNvcmQgdXBkYXRlcyBpbiBpbnN0YW5jZXMgZGF0YVZhbHVlc1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpbnN0YW5jZS5kYXRhVmFsdWVzLCB2YWx1ZXMpO1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBjaGFuZ2VkIGZpZWxkcyBvbiB0aGUgaW5zdGFuY2VcbiAgICAgICAgICAgIF8uZm9ySW4odmFsdWVzVXNlLCAobmV3VmFsdWUsIGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBpbnN0YW5jZS5fcHJldmlvdXNEYXRhVmFsdWVzW2F0dHJdKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2V0RGF0YVZhbHVlKGF0dHIsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFJ1biBiZWZvcmVVcGRhdGUgaG9va1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoJ2JlZm9yZVVwZGF0ZScsIGluc3RhbmNlLCBvcHRpb25zKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFkaWZmZXJlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGlzQ2hhbmdlZFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIF8uZm9ySW4oaW5zdGFuY2UuZGF0YVZhbHVlcywgKG5ld1ZhbHVlLCBhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgIT09IGluc3RhbmNlLl9wcmV2aW91c0RhdGFWYWx1ZXNbYXR0cl0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc0NoYW5nZWRWYWx1ZXNbYXR0cl0gPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICghY2hhbmdlZFZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgY2hhbmdlZFZhbHVlcyA9IHRoaXNDaGFuZ2VkVmFsdWVzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgPSAhXy5pc0VxdWFsKGNoYW5nZWRWYWx1ZXMsIHRoaXNDaGFuZ2VkVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KS50aGVuKF9pbnN0YW5jZXMgPT4ge1xuICAgICAgICAgICAgaW5zdGFuY2VzID0gX2luc3RhbmNlcztcblxuICAgICAgICAgICAgaWYgKCFkaWZmZXJlbnQpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNoYW5nZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAvLyBIb29rcyBkbyBub3QgY2hhbmdlIHZhbHVlcyBvciBjaGFuZ2UgdGhlbSB1bmlmb3JtbHlcbiAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gSG9va3MgY2hhbmdlIHZhbHVlcyAtIHJlY29yZCBjaGFuZ2VzIGluIHZhbHVlc1VzZSBzbyB0aGV5IGFyZSBleGVjdXRlZFxuICAgICAgICAgICAgICAgIHZhbHVlc1VzZSA9IGNoYW5nZWRWYWx1ZXM7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWVsZHMgPSBfLnVuaW9uKG9wdGlvbnMuZmllbGRzLCBrZXlzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIb29rcyBjaGFuZ2UgdmFsdWVzIGluIGEgZGlmZmVyZW50IHdheSBmb3IgZWFjaCByZWNvcmRcbiAgICAgICAgICAgIC8vIERvIG5vdCBydW4gb3JpZ2luYWwgcXVlcnkgYnV0IHNhdmUgZWFjaCByZWNvcmQgaW5kaXZpZHVhbGx5XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5tYXAoaW5zdGFuY2VzLCBpbnN0YW5jZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGl2aWR1YWxPcHRpb25zID0gXy5jbG9uZShvcHRpb25zKTtcbiAgICAgICAgICAgICAgZGVsZXRlIGluZGl2aWR1YWxPcHRpb25zLmluZGl2aWR1YWxIb29rcztcbiAgICAgICAgICAgICAgaW5kaXZpZHVhbE9wdGlvbnMuaG9va3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaW5kaXZpZHVhbE9wdGlvbnMudmFsaWRhdGUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2Uuc2F2ZShpbmRpdmlkdWFsT3B0aW9ucyk7XG4gICAgICAgICAgICB9KS50YXAoX2luc3RhbmNlcyA9PiB7XG4gICAgICAgICAgICAgIGluc3RhbmNlcyA9IF9pbnN0YW5jZXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIC8vIFVwZGF0ZSBhbHJlYWR5IGRvbmUgcm93LWJ5LXJvdyAtIGV4aXRcbiAgICAgIGlmIChyZXN1bHRzKSB7XG4gICAgICAgIHJldHVybiBbcmVzdWx0cy5sZW5ndGgsIHJlc3VsdHNdO1xuICAgICAgfVxuXG4gICAgICAvLyBvbmx5IHVwZGF0ZWRBdCBpcyBiZWluZyBwYXNzZWQsIHRoZW4gc2tpcCB1cGRhdGVcbiAgICAgIGlmIChcbiAgICAgICAgXy5pc0VtcHR5KHZhbHVlc1VzZSlcbiAgICAgICAgIHx8IE9iamVjdC5rZXlzKHZhbHVlc1VzZSkubGVuZ3RoID09PSAxICYmIHZhbHVlc1VzZVt0aGlzLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdF1cbiAgICAgICkge1xuICAgICAgICByZXR1cm4gWzBdO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZXNVc2UgPSBVdGlscy5tYXBWYWx1ZUZpZWxkTmFtZXModmFsdWVzVXNlLCBvcHRpb25zLmZpZWxkcywgdGhpcyk7XG4gICAgICBvcHRpb25zID0gVXRpbHMubWFwT3B0aW9uRmllbGROYW1lcyhvcHRpb25zLCB0aGlzKTtcbiAgICAgIG9wdGlvbnMuaGFzVHJpZ2dlciA9IHRoaXMub3B0aW9ucyA/IHRoaXMub3B0aW9ucy5oYXNUcmlnZ2VyIDogZmFsc2U7XG5cbiAgICAgIC8vIFJ1biBxdWVyeSB0byB1cGRhdGUgYWxsIHJvd3NcbiAgICAgIHJldHVybiB0aGlzLlF1ZXJ5SW50ZXJmYWNlLmJ1bGtVcGRhdGUodGhpcy5nZXRUYWJsZU5hbWUob3B0aW9ucyksIHZhbHVlc1VzZSwgb3B0aW9ucy53aGVyZSwgb3B0aW9ucywgdGhpcy50YWJsZUF0dHJpYnV0ZXMpLnRoZW4oYWZmZWN0ZWRSb3dzID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMucmV0dXJuaW5nKSB7XG4gICAgICAgICAgaW5zdGFuY2VzID0gYWZmZWN0ZWRSb3dzO1xuICAgICAgICAgIHJldHVybiBbYWZmZWN0ZWRSb3dzLmxlbmd0aCwgYWZmZWN0ZWRSb3dzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbYWZmZWN0ZWRSb3dzXTtcbiAgICAgIH0pO1xuICAgIH0pLnRhcChyZXN1bHQgPT4ge1xuICAgICAgaWYgKG9wdGlvbnMuaW5kaXZpZHVhbEhvb2tzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLm1hcChpbnN0YW5jZXMsIGluc3RhbmNlID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcygnYWZ0ZXJVcGRhdGUnLCBpbnN0YW5jZSwgb3B0aW9ucyk7XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc3VsdFsxXSA9IGluc3RhbmNlcztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkudGFwKCgpID0+IHtcbiAgICAgIC8vIFJ1biBhZnRlciBob29rXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSB2YWx1ZXM7XG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKCdhZnRlckJ1bGtVcGRhdGUnLCBvcHRpb25zKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBkZWxldGUgb3B0aW9ucy5hdHRyaWJ1dGVzO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gYSBkZXNjcmliZSBxdWVyeSBvbiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2NoZW1hXSBzY2hlbWEgbmFtZSB0byBzZWFyY2ggdGFibGUgaW5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBxdWVyeSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBoYXNoIG9mIGF0dHJpYnV0ZXMgYW5kIHRoZWlyIHR5cGVzXG4gICAqL1xuICBzdGF0aWMgZGVzY3JpYmUoc2NoZW1hLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuUXVlcnlJbnRlcmZhY2UuZGVzY3JpYmVUYWJsZSh0aGlzLnRhYmxlTmFtZSwgT2JqZWN0LmFzc2lnbih7IHNjaGVtYTogc2NoZW1hIHx8IHRoaXMuX3NjaGVtYSB8fCB1bmRlZmluZWQgfSwgb3B0aW9ucykpO1xuICB9XG5cbiAgc3RhdGljIF9nZXREZWZhdWx0VGltZXN0YW1wKGF0dHIpIHtcbiAgICBpZiAoISF0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cl0gJiYgISF0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4gVXRpbHMudG9EZWZhdWx0VmFsdWUodGhpcy5yYXdBdHRyaWJ1dGVzW2F0dHJdLmRlZmF1bHRWYWx1ZSwgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBfZXhwYW5kQXR0cmlidXRlcyhvcHRpb25zKSB7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3Qob3B0aW9ucy5hdHRyaWJ1dGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKHRoaXMucmF3QXR0cmlidXRlcyk7XG5cbiAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGVzLmV4Y2x1ZGUpIHtcbiAgICAgIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmZpbHRlcihlbGVtID0+ICFvcHRpb25zLmF0dHJpYnV0ZXMuZXhjbHVkZS5pbmNsdWRlcyhlbGVtKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYXR0cmlidXRlcy5pbmNsdWRlKSB7XG4gICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQob3B0aW9ucy5hdHRyaWJ1dGVzLmluY2x1ZGUpO1xuICAgIH1cblxuICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gIH1cblxuICAvLyBJbmplY3QgX3Njb3BlIGludG8gb3B0aW9ucy5cbiAgc3RhdGljIF9pbmplY3RTY29wZShvcHRpb25zKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBVdGlscy5jbG9uZURlZXAodGhpcy5fc2NvcGUpO1xuICAgIHRoaXMuX2RlZmF1bHRzT3B0aW9ucyhvcHRpb25zLCBzY29wZSk7XG4gIH1cblxuICBzdGF0aWMgW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBzdGF0aWMgaW5zcGVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgc3RhdGljIGhhc0FsaWFzKGFsaWFzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmFzc29jaWF0aW9ucywgYWxpYXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluY3JlbWVudCB0aGUgdmFsdWUgb2Ygb25lIG9yIG1vcmUgY29sdW1ucy4gVGhpcyBpcyBkb25lIGluIHRoZSBkYXRhYmFzZSwgd2hpY2ggbWVhbnMgaXQgZG9lcyBub3QgdXNlIHRoZSB2YWx1ZXMgY3VycmVudGx5IHN0b3JlZCBvbiB0aGUgSW5zdGFuY2UuIFRoZSBpbmNyZW1lbnQgaXMgZG9uZSB1c2luZyBhXG4gICAqIGBgYCBTRVQgY29sdW1uID0gY29sdW1uICsgWCBXSEVSRSBmb28gPSAnYmFyJyBgYGAgcXVlcnkuIFRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZSBhZnRlciBhbiBpbmNyZW1lbnQgaW50byB0aGUgSW5zdGFuY2UgeW91IHNob3VsZCBkbyBhIHJlbG9hZC5cbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+aW5jcmVtZW50IG51bWJlciBieSAxPC9jYXB0aW9uPlxuICAgKiBNb2RlbC5pbmNyZW1lbnQoJ251bWJlcicsIHsgd2hlcmU6IHsgZm9vOiAnYmFyJyB9KTtcbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+aW5jcmVtZW50IG51bWJlciBhbmQgY291bnQgYnkgMjwvY2FwdGlvbj5cbiAgICogTW9kZWwuaW5jcmVtZW50KFsnbnVtYmVyJywgJ2NvdW50J10sIHsgYnk6IDIsIHdoZXJlOiB7IGZvbzogJ2JhcicgfSB9KTtcbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+aW5jcmVtZW50IGFuc3dlciBieSA0MiwgYW5kIGRlY3JlbWVudCB0cmllcyBieSAxPC9jYXB0aW9uPlxuICAgKiAvLyBgYnlgIGlzIGlnbm9yZWQsIGFzIGVhY2ggY29sdW1uIGhhcyBpdHMgb3duIHZhbHVlXG4gICAqIE1vZGVsLmluY3JlbWVudCh7IGFuc3dlcjogNDIsIHRyaWVzOiAtMX0sIHsgYnk6IDIsIHdoZXJlOiB7IGZvbzogJ2JhcicgfSB9KTtcbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwjcmVsb2FkfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xBcnJheXxPYmplY3R9IGZpZWxkcyBJZiBhIHN0cmluZyBpcyBwcm92aWRlZCwgdGhhdCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgdGhlIHZhbHVlIG9mIGBieWAgZ2l2ZW4gaW4gb3B0aW9ucy4gSWYgYW4gYXJyYXkgaXMgcHJvdmlkZWQsIHRoZSBzYW1lIGlzIHRydWUgZm9yIGVhY2ggY29sdW1uLiBJZiBhbmQgb2JqZWN0IGlzIHByb3ZpZGVkLCBlYWNoIGNvbHVtbiBpcyBpbmNyZW1lbnRlZCBieSB0aGUgdmFsdWUgZ2l2ZW4uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGluY3JlbWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLndoZXJlIGNvbmRpdGlvbnMgaGFzaFxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYnk9MV0gVGhlIG51bWJlciB0byBpbmNyZW1lbnQgYnlcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5zaWxlbnQ9ZmFsc2VdIElmIHRydWUsIHRoZSB1cGRhdGVkQXQgdGltZXN0YW1wIHdpbGwgbm90IGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zZWFyY2hQYXRoPURFRkFVTFRdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBzY2hlbWEgc2VhcmNoX3BhdGggKFBvc3RncmVzIG9ubHkpXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVsW10sP251bWJlcj59IHJldHVybnMgYW4gYXJyYXkgb2YgYWZmZWN0ZWQgcm93cyBhbmQgYWZmZWN0ZWQgY291bnQgd2l0aCBgb3B0aW9ucy5yZXR1cm5pbmc6IHRydWVgLCB3aGVuZXZlciBzdXBwb3J0ZWQgYnkgZGlhbGVjdFxuICAgKi9cbiAgc3RhdGljIGluY3JlbWVudChmaWVsZHMsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMuX2luamVjdFNjb3BlKG9wdGlvbnMpO1xuICAgIHRoaXMuX29wdGlvbnNNdXN0Q29udGFpbldoZXJlKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgdXBkYXRlZEF0QXR0ciA9IHRoaXMuX3RpbWVzdGFtcEF0dHJpYnV0ZXMudXBkYXRlZEF0O1xuICAgIGNvbnN0IHZlcnNpb25BdHRyID0gdGhpcy5fdmVyc2lvbkF0dHJpYnV0ZTtcbiAgICBjb25zdCB1cGRhdGVkQXRBdHRyaWJ1dGUgPSB0aGlzLnJhd0F0dHJpYnV0ZXNbdXBkYXRlZEF0QXR0cl07XG4gICAgb3B0aW9ucyA9IFV0aWxzLmRlZmF1bHRzKHt9LCBvcHRpb25zLCB7XG4gICAgICBieTogMSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgd2hlcmU6IHt9LFxuICAgICAgaW5jcmVtZW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICBVdGlscy5tYXBPcHRpb25GaWVsZE5hbWVzKG9wdGlvbnMsIHRoaXMpO1xuXG4gICAgY29uc3Qgd2hlcmUgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLndoZXJlKTtcbiAgICBsZXQgdmFsdWVzID0ge307XG5cbiAgICBpZiAodHlwZW9mIGZpZWxkcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlc1tmaWVsZHNdID0gb3B0aW9ucy5ieTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRzKSkge1xuICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICB2YWx1ZXNbZmllbGRdID0gb3B0aW9ucy5ieTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7IC8vIEFzc3VtZSBmaWVsZHMgaXMga2V5LXZhbHVlIHBhaXJzXG4gICAgICB2YWx1ZXMgPSBmaWVsZHM7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnNpbGVudCAmJiB1cGRhdGVkQXRBdHRyICYmICF2YWx1ZXNbdXBkYXRlZEF0QXR0cl0pIHtcbiAgICAgIG9wdGlvbnMuYXR0cmlidXRlc1t1cGRhdGVkQXRBdHRyaWJ1dGUuZmllbGQgfHwgdXBkYXRlZEF0QXR0cl0gPSB0aGlzLl9nZXREZWZhdWx0VGltZXN0YW1wKHVwZGF0ZWRBdEF0dHIpIHx8IFV0aWxzLm5vdyh0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QpO1xuICAgIH1cbiAgICBpZiAodmVyc2lvbkF0dHIpIHtcbiAgICAgIHZhbHVlc1t2ZXJzaW9uQXR0cl0gPSBvcHRpb25zLmluY3JlbWVudCA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGF0dHIgb2YgT2JqZWN0LmtleXModmFsdWVzKSkge1xuICAgICAgLy8gRmllbGQgbmFtZSBtYXBwaW5nXG4gICAgICBpZiAodGhpcy5yYXdBdHRyaWJ1dGVzW2F0dHJdICYmIHRoaXMucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZCAmJiB0aGlzLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGQgIT09IGF0dHIpIHtcbiAgICAgICAgdmFsdWVzW3RoaXMucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZF0gPSB2YWx1ZXNbYXR0cl07XG4gICAgICAgIGRlbGV0ZSB2YWx1ZXNbYXR0cl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHByb21pc2U7XG4gICAgaWYgKCFvcHRpb25zLmluY3JlbWVudCkge1xuICAgICAgcHJvbWlzZSA9IHRoaXMuUXVlcnlJbnRlcmZhY2UuZGVjcmVtZW50KHRoaXMsIHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCB2YWx1ZXMsIHdoZXJlLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZSA9IHRoaXMuUXVlcnlJbnRlcmZhY2UuaW5jcmVtZW50KHRoaXMsIHRoaXMuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCB2YWx1ZXMsIHdoZXJlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKGFmZmVjdGVkUm93cyA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5yZXR1cm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIFthZmZlY3RlZFJvd3MsIGFmZmVjdGVkUm93cy5sZW5ndGhdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW2FmZmVjdGVkUm93c107XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVjcmVtZW50IHRoZSB2YWx1ZSBvZiBvbmUgb3IgbW9yZSBjb2x1bW5zLiBUaGlzIGlzIGRvbmUgaW4gdGhlIGRhdGFiYXNlLCB3aGljaCBtZWFucyBpdCBkb2VzIG5vdCB1c2UgdGhlIHZhbHVlcyBjdXJyZW50bHkgc3RvcmVkIG9uIHRoZSBJbnN0YW5jZS4gVGhlIGRlY3JlbWVudCBpcyBkb25lIHVzaW5nIGFcbiAgICogYGBgc3FsIFNFVCBjb2x1bW4gPSBjb2x1bW4gLSBYIFdIRVJFIGZvbyA9ICdiYXInYGBgIHF1ZXJ5LiBUbyBnZXQgdGhlIGNvcnJlY3QgdmFsdWUgYWZ0ZXIgYSBkZWNyZW1lbnQgaW50byB0aGUgSW5zdGFuY2UgeW91IHNob3VsZCBkbyBhIHJlbG9hZC5cbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+ZGVjcmVtZW50IG51bWJlciBieSAxPC9jYXB0aW9uPlxuICAgKiBNb2RlbC5kZWNyZW1lbnQoJ251bWJlcicsIHsgd2hlcmU6IHsgZm9vOiAnYmFyJyB9KTtcbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+ZGVjcmVtZW50IG51bWJlciBhbmQgY291bnQgYnkgMjwvY2FwdGlvbj5cbiAgICogTW9kZWwuZGVjcmVtZW50KFsnbnVtYmVyJywgJ2NvdW50J10sIHsgYnk6IDIsIHdoZXJlOiB7IGZvbzogJ2JhcicgfSB9KTtcbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+ZGVjcmVtZW50IGFuc3dlciBieSA0MiwgYW5kIGRlY3JlbWVudCB0cmllcyBieSAtMTwvY2FwdGlvbj5cbiAgICogLy8gYGJ5YCBpcyBpZ25vcmVkLCBzaW5jZSBlYWNoIGNvbHVtbiBoYXMgaXRzIG93biB2YWx1ZVxuICAgKiBNb2RlbC5kZWNyZW1lbnQoeyBhbnN3ZXI6IDQyLCB0cmllczogLTF9LCB7IGJ5OiAyLCB3aGVyZTogeyBmb286ICdiYXInIH0gfSk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEFycmF5fE9iamVjdH0gZmllbGRzIElmIGEgc3RyaW5nIGlzIHByb3ZpZGVkLCB0aGF0IGNvbHVtbiBpcyBpbmNyZW1lbnRlZCBieSB0aGUgdmFsdWUgb2YgYGJ5YCBnaXZlbiBpbiBvcHRpb25zLiBJZiBhbiBhcnJheSBpcyBwcm92aWRlZCwgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgZWFjaCBjb2x1bW4uIElmIGFuZCBvYmplY3QgaXMgcHJvdmlkZWQsIGVhY2ggY29sdW1uIGlzIGluY3JlbWVudGVkIGJ5IHRoZSB2YWx1ZSBnaXZlbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgZGVjcmVtZW50IG9wdGlvbnMsIHNpbWlsYXIgdG8gaW5jcmVtZW50XG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsLmluY3JlbWVudH1cbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwjcmVsb2FkfVxuICAgKiBAc2luY2UgNC4zNi4wXG5cbiAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxbXSw/bnVtYmVyPn0gcmV0dXJucyBhbiBhcnJheSBvZiBhZmZlY3RlZCByb3dzIGFuZCBhZmZlY3RlZCBjb3VudCB3aXRoIGBvcHRpb25zLnJldHVybmluZzogdHJ1ZWAsIHdoZW5ldmVyIHN1cHBvcnRlZCBieSBkaWFsZWN0XG4gICAqL1xuICBzdGF0aWMgZGVjcmVtZW50KGZpZWxkcywgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBfLmRlZmF1bHRzKHsgaW5jcmVtZW50OiBmYWxzZSB9LCBvcHRpb25zLCB7XG4gICAgICBieTogMVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaW5jcmVtZW50KGZpZWxkcywgb3B0aW9ucyk7XG4gIH1cblxuICBzdGF0aWMgX29wdGlvbnNNdXN0Q29udGFpbldoZXJlKG9wdGlvbnMpIHtcbiAgICBhc3NlcnQob3B0aW9ucyAmJiBvcHRpb25zLndoZXJlLCAnTWlzc2luZyB3aGVyZSBhdHRyaWJ1dGUgaW4gdGhlIG9wdGlvbnMgcGFyYW1ldGVyJyk7XG4gICAgYXNzZXJ0KF8uaXNQbGFpbk9iamVjdChvcHRpb25zLndoZXJlKSB8fCBBcnJheS5pc0FycmF5KG9wdGlvbnMud2hlcmUpIHx8IG9wdGlvbnMud2hlcmUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QsXG4gICAgICAnRXhwZWN0ZWQgcGxhaW4gb2JqZWN0LCBhcnJheSBvciBzZXF1ZWxpemUgbWV0aG9kIGluIHRoZSBvcHRpb25zLndoZXJlIHBhcmFtZXRlcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBxdWVyeSBmb3IgdGhpcyBpbnN0YW5jZSwgdXNlIHdpdGggYG9wdGlvbnMud2hlcmVgXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrVmVyc2lvbj1mYWxzZV0gaW5jbHVkZSB2ZXJzaW9uIGF0dHJpYnV0ZSBpbiB3aGVyZSBoYXNoXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuICB3aGVyZShjaGVja1ZlcnNpb24pIHtcbiAgICBjb25zdCB3aGVyZSA9IHRoaXMuY29uc3RydWN0b3IucHJpbWFyeUtleUF0dHJpYnV0ZXMucmVkdWNlKChyZXN1bHQsIGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgcmVzdWx0W2F0dHJpYnV0ZV0gPSB0aGlzLmdldChhdHRyaWJ1dGUsIHsgcmF3OiB0cnVlIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICBpZiAoXy5zaXplKHdoZXJlKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGVsT3B0aW9ucy53aGVyZUNvbGxlY3Rpb247XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25BdHRyID0gdGhpcy5jb25zdHJ1Y3Rvci5fdmVyc2lvbkF0dHJpYnV0ZTtcbiAgICBpZiAoY2hlY2tWZXJzaW9uICYmIHZlcnNpb25BdHRyKSB7XG4gICAgICB3aGVyZVt2ZXJzaW9uQXR0cl0gPSB0aGlzLmdldCh2ZXJzaW9uQXR0ciwgeyByYXc6IHRydWUgfSk7XG4gICAgfVxuICAgIHJldHVybiBVdGlscy5tYXBXaGVyZUZpZWxkTmFtZXMod2hlcmUsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBbb2JqZWN0IFNlcXVlbGl6ZUluc3RhbmNlOiR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIHVuZGVybHlpbmcgZGF0YSB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IGtleSB0byBsb29rIGluIGluc3RhbmNlIGRhdGEgc3RvcmVcbiAgICpcbiAgICogQHJldHVybnMge2FueX1cbiAgICovXG4gIGdldERhdGFWYWx1ZShrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhVmFsdWVzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBrZXkgdG8gc2V0IGluIGluc3RhbmNlIGRhdGEgc3RvcmVcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIG5ldyB2YWx1ZSBmb3IgZ2l2ZW4ga2V5XG4gICAqXG4gICAqL1xuICBzZXREYXRhVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLl9wcmV2aW91c0RhdGFWYWx1ZXNba2V5XTtcblxuICAgIGlmICghVXRpbHMuaXNQcmltaXRpdmUodmFsdWUpICYmIHZhbHVlICE9PSBudWxsIHx8IHZhbHVlICE9PSBvcmlnaW5hbFZhbHVlKSB7XG4gICAgICB0aGlzLmNoYW5nZWQoa2V5LCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFWYWx1ZXNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIG5vIGtleSBpcyBnaXZlbiwgcmV0dXJucyBhbGwgdmFsdWVzIG9mIHRoZSBpbnN0YW5jZSwgYWxzbyBpbnZva2luZyB2aXJ0dWFsIGdldHRlcnMuXG4gICAqXG4gICAqIElmIGtleSBpcyBnaXZlbiBhbmQgYSBmaWVsZCBvciB2aXJ0dWFsIGdldHRlciBpcyBwcmVzZW50IGZvciB0aGUga2V5IGl0IHdpbGwgY2FsbCB0aGF0IGdldHRlciAtIGVsc2UgaXQgd2lsbCByZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW2tleV0ga2V5IHRvIGdldCB2YWx1ZSBvZlxuICAgKiBAcGFyYW0ge09iamVjdH0gIFtvcHRpb25zXSBnZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnBsYWluPWZhbHNlXSBJZiBzZXQgdG8gdHJ1ZSwgaW5jbHVkZWQgaW5zdGFuY2VzIHdpbGwgYmUgcmV0dXJuZWQgYXMgcGxhaW4gb2JqZWN0c1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJhdz1mYWxzZV0gSWYgc2V0IHRvIHRydWUsIGZpZWxkIGFuZCB2aXJ0dWFsIHNldHRlcnMgd2lsbCBiZSBpZ25vcmVkXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R8YW55fVxuICAgKi9cbiAgZ2V0KGtleSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbnMgPSBrZXk7XG4gICAgICBrZXkgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2N1c3RvbUdldHRlcnMsIGtleSkgJiYgIW9wdGlvbnMucmF3KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21HZXR0ZXJzW2tleV0uY2FsbCh0aGlzLCBrZXksIG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wbGFpbiAmJiB0aGlzLl9vcHRpb25zLmluY2x1ZGUgJiYgdGhpcy5fb3B0aW9ucy5pbmNsdWRlTmFtZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFWYWx1ZXNba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmFsdWVzW2tleV0ubWFwKGluc3RhbmNlID0+IGluc3RhbmNlLmdldChvcHRpb25zKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YVZhbHVlc1trZXldIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmFsdWVzW2tleV0uZ2V0KG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFWYWx1ZXNba2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZGF0YVZhbHVlc1trZXldO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuX2hhc0N1c3RvbUdldHRlcnNcbiAgICAgIHx8IG9wdGlvbnMucGxhaW4gJiYgdGhpcy5fb3B0aW9ucy5pbmNsdWRlXG4gICAgICB8fCBvcHRpb25zLmNsb25lXG4gICAgKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB7fTtcbiAgICAgIGxldCBfa2V5O1xuXG4gICAgICBpZiAodGhpcy5faGFzQ3VzdG9tR2V0dGVycykge1xuICAgICAgICBmb3IgKF9rZXkgaW4gdGhpcy5fY3VzdG9tR2V0dGVycykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuYXR0cmlidXRlc1xuICAgICAgICAgICAgJiYgIXRoaXMuX29wdGlvbnMuYXR0cmlidXRlcy5pbmNsdWRlcyhfa2V5KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9jdXN0b21HZXR0ZXJzLCBfa2V5KSkge1xuICAgICAgICAgICAgdmFsdWVzW19rZXldID0gdGhpcy5nZXQoX2tleSwgb3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoX2tleSBpbiB0aGlzLmRhdGFWYWx1ZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWVzLCBfa2V5KVxuICAgICAgICAgICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmRhdGFWYWx1ZXMsIF9rZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlc1tfa2V5XSA9IHRoaXMuZ2V0KF9rZXksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGF0YVZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgaXMgdXNlZCB0byB1cGRhdGUgdmFsdWVzIG9uIHRoZSBpbnN0YW5jZSAodGhlIHNlcXVlbGl6ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5zdGFuY2UgdGhhdCBpcywgcmVtZW1iZXIgdGhhdCBub3RoaW5nIHdpbGwgYmUgcGVyc2lzdGVkIGJlZm9yZSB5b3UgYWN0dWFsbHkgY2FsbCBgc2F2ZWApLlxuICAgKiBJbiBpdHMgbW9zdCBiYXNpYyBmb3JtIGBzZXRgIHdpbGwgdXBkYXRlIGEgdmFsdWUgc3RvcmVkIGluIHRoZSB1bmRlcmx5aW5nIGBkYXRhVmFsdWVzYCBvYmplY3QuIEhvd2V2ZXIsIGlmIGEgY3VzdG9tIHNldHRlciBmdW5jdGlvbiBpcyBkZWZpbmVkIGZvciB0aGUga2V5LCB0aGF0IGZ1bmN0aW9uXG4gICAqIHdpbGwgYmUgY2FsbGVkIGluc3RlYWQuIFRvIGJ5cGFzcyB0aGUgc2V0dGVyLCB5b3UgY2FuIHBhc3MgYHJhdzogdHJ1ZWAgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgKlxuICAgKiBJZiBzZXQgaXMgY2FsbGVkIHdpdGggYW4gb2JqZWN0LCBpdCB3aWxsIGxvb3Agb3ZlciB0aGUgb2JqZWN0LCBhbmQgY2FsbCBzZXQgcmVjdXJzaXZlbHkgZm9yIGVhY2gga2V5LCB2YWx1ZSBwYWlyLiBJZiB5b3Ugc2V0IHJhdyB0byB0cnVlLCB0aGUgdW5kZXJseWluZyBkYXRhVmFsdWVzIHdpbGwgZWl0aGVyIGJlXG4gICAqIHNldCBkaXJlY3RseSB0byB0aGUgb2JqZWN0IHBhc3NlZCwgb3IgdXNlZCB0byBleHRlbmQgZGF0YVZhbHVlcywgaWYgZGF0YVZhbHVlcyBhbHJlYWR5IGNvbnRhaW4gdmFsdWVzLlxuICAgKlxuICAgKiBXaGVuIHNldCBpcyBjYWxsZWQsIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgZmllbGQgaXMgc3RvcmVkIGFuZCBzZXRzIGEgY2hhbmdlZCBmbGFnKHNlZSBgY2hhbmdlZGApLlxuICAgKlxuICAgKiBTZXQgY2FuIGFsc28gYmUgdXNlZCB0byBidWlsZCBpbnN0YW5jZXMgZm9yIGFzc29jaWF0aW9ucywgaWYgeW91IGhhdmUgdmFsdWVzIGZvciB0aG9zZS5cbiAgICogV2hlbiB1c2luZyBzZXQgd2l0aCBhc3NvY2lhdGlvbnMgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwcm9wZXJ0eSBrZXkgbWF0Y2hlcyB0aGUgYWxpYXMgb2YgdGhlIGFzc29jaWF0aW9uXG4gICAqIHdoaWxlIGFsc28gbWFraW5nIHN1cmUgdGhhdCB0aGUgcHJvcGVyIGluY2x1ZGUgb3B0aW9ucyBoYXZlIGJlZW4gc2V0IChmcm9tIC5idWlsZCgpIG9yIC5maW5kT25lKCkpXG4gICAqXG4gICAqIElmIGNhbGxlZCB3aXRoIGEgZG90LnNlcGFyYXRlZCBrZXkgb24gYSBKU09OL0pTT05CIGF0dHJpYnV0ZSBpdCB3aWxsIHNldCB0aGUgdmFsdWUgbmVzdGVkIGFuZCBmbGFnIHRoZSBlbnRpcmUgb2JqZWN0IGFzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRBbGx9IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGluY2x1ZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0ga2V5IGtleSB0byBzZXQsIGl0IGNhbiBiZSBzdHJpbmcgb3Igb2JqZWN0LiBXaGVuIHN0cmluZyBpdCB3aWxsIHNldCB0aGF0IGtleSwgZm9yIG9iamVjdCBpdCB3aWxsIGxvb3Agb3ZlciBhbGwgb2JqZWN0IHByb3BlcnRpZXMgbmQgc2V0IHRoZW0uXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSB2YWx1ZSB0byBzZXRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJhdz1mYWxzZV0gSWYgc2V0IHRvIHRydWUsIGZpZWxkIGFuZCB2aXJ0dWFsIHNldHRlcnMgd2lsbCBiZSBpZ25vcmVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucmVzZXQ9ZmFsc2VdIENsZWFyIGFsbCBwcmV2aW91c2x5IHNldCBkYXRhIHZhbHVlc1xuICAgKlxuICAgKiBAcmV0dXJucyB7TW9kZWx9XG4gICAqL1xuICBzZXQoa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIGxldCB2YWx1ZXM7XG4gICAgbGV0IG9yaWdpbmFsVmFsdWU7XG5cbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgJiYga2V5ICE9PSBudWxsKSB7XG4gICAgICB2YWx1ZXMgPSBrZXk7XG4gICAgICBvcHRpb25zID0gdmFsdWUgfHwge307XG5cbiAgICAgIGlmIChvcHRpb25zLnJlc2V0KSB7XG4gICAgICAgIHRoaXMuZGF0YVZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWQoa2V5LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgcmF3LCBhbmQgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBpbmNsdWRlcyBvciBzcGVjaWFsIGF0dHJpYnV0ZXMsIGp1c3Qgc2V0IGl0IHN0cmFpZ2h0IG9uIHRoZSBkYXRhVmFsdWVzIG9iamVjdFxuICAgICAgaWYgKG9wdGlvbnMucmF3ICYmICEodGhpcy5fb3B0aW9ucyAmJiB0aGlzLl9vcHRpb25zLmluY2x1ZGUpICYmICEob3B0aW9ucyAmJiBvcHRpb25zLmF0dHJpYnV0ZXMpICYmICF0aGlzLmNvbnN0cnVjdG9yLl9oYXNEYXRlQXR0cmlidXRlcyAmJiAhdGhpcy5jb25zdHJ1Y3Rvci5faGFzQm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZGF0YVZhbHVlcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5kYXRhVmFsdWVzID0gT2JqZWN0LmFzc2lnbih0aGlzLmRhdGFWYWx1ZXMsIHZhbHVlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kYXRhVmFsdWVzID0gdmFsdWVzO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHJhdywgLmNoYW5nZWQoKSBzaG91bGRuJ3QgYmUgdHJ1ZVxuICAgICAgICB0aGlzLl9wcmV2aW91c0RhdGFWYWx1ZXMgPSBfLmNsb25lKHRoaXMuZGF0YVZhbHVlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29wIGFuZCBjYWxsIHNldFxuICAgICAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgY29uc3Qgc2V0S2V5cyA9IGRhdGEgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlc1trXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zZXQoaywgdmFsdWVzW2tdLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHNldEtleXMob3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5faGFzVmlydHVhbEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHNldEtleXModGhpcy5jb25zdHJ1Y3Rvci5fdmlydHVhbEF0dHJpYnV0ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5pbmNsdWRlTmFtZXMpIHtcbiAgICAgICAgICAgIHNldEtleXModGhpcy5fb3B0aW9ucy5pbmNsdWRlTmFtZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgdmFsdWVzW2tleV0sIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnJhdykge1xuICAgICAgICAgIC8vIElmIHJhdywgLmNoYW5nZWQoKSBzaG91bGRuJ3QgYmUgdHJ1ZVxuICAgICAgICAgIHRoaXMuX3ByZXZpb3VzRGF0YVZhbHVlcyA9IF8uY2xvbmUodGhpcy5kYXRhVmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucylcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICBpZiAoIW9wdGlvbnMucmF3KSB7XG4gICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5kYXRhVmFsdWVzW2tleV07XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IHJhdywgYW5kIHRoZXJlJ3MgYSBjdXN0b20gc2V0dGVyXG4gICAgaWYgKCFvcHRpb25zLnJhdyAmJiB0aGlzLl9jdXN0b21TZXR0ZXJzW2tleV0pIHtcbiAgICAgIHRoaXMuX2N1c3RvbVNldHRlcnNba2V5XS5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgLy8gY3VzdG9tIHNldHRlciBzaG91bGQgaGF2ZSBjaGFuZ2VkIHZhbHVlLCBnZXQgdGhhdCBjaGFuZ2VkIHZhbHVlXG4gICAgICAvLyBUT0RPOiB2NSBtYWtlIHNldHRlcnMgcmV0dXJuIG5ldyB2YWx1ZSBpbnN0ZWFkIG9mIGNoYW5naW5nIGludGVybmFsIHN0b3JlXG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZGF0YVZhbHVlc1trZXldO1xuICAgICAgaWYgKCFVdGlscy5pc1ByaW1pdGl2ZShuZXdWYWx1ZSkgJiYgbmV3VmFsdWUgIT09IG51bGwgfHwgbmV3VmFsdWUgIT09IG9yaWdpbmFsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNEYXRhVmFsdWVzW2tleV0gPSBvcmlnaW5hbFZhbHVlO1xuICAgICAgICB0aGlzLmNoYW5nZWQoa2V5LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBpbmNsdWRlZCBtb2RlbHMsIGFuZCBpZiB0aGlzIGtleSBtYXRjaGVzIHRoZSBpbmNsdWRlIG1vZGVsIG5hbWVzL2FsaWFzZXNcbiAgICAgIGlmICh0aGlzLl9vcHRpb25zICYmIHRoaXMuX29wdGlvbnMuaW5jbHVkZSAmJiB0aGlzLl9vcHRpb25zLmluY2x1ZGVOYW1lcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIC8vIFBhc3MgaXQgb24gdG8gdGhlIGluY2x1ZGUgaGFuZGxlclxuICAgICAgICB0aGlzLl9zZXRJbmNsdWRlKGtleSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIC8vIEJ1bmNoIG9mIHN0dWZmIHdlIHdvbid0IGRvIHdoZW4gaXQncyByYXdcbiAgICAgIGlmICghb3B0aW9ucy5yYXcpIHtcbiAgICAgICAgLy8gSWYgYXR0cmlidXRlIGlzIG5vdCBpbiBtb2RlbCBkZWZpbml0aW9uLCByZXR1cm5cbiAgICAgICAgaWYgKCF0aGlzLl9pc0F0dHJpYnV0ZShrZXkpKSB7XG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnLicpICYmIHRoaXMuY29uc3RydWN0b3IuX2pzb25BdHRyaWJ1dGVzLmhhcyhrZXkuc3BsaXQoJy4nKVswXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzTmVzdGVkVmFsdWUgPSBEb3R0aWUuZ2V0KHRoaXMuZGF0YVZhbHVlcywga2V5KTtcbiAgICAgICAgICAgIGlmICghXy5pc0VxdWFsKHByZXZpb3VzTmVzdGVkVmFsdWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgICBEb3R0aWUuc2V0KHRoaXMuZGF0YVZhbHVlcywga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZChrZXkuc3BsaXQoJy4nKVswXSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgYXR0ZW1wdGluZyB0byBzZXQgcHJpbWFyeSBrZXkgYW5kIHByaW1hcnkga2V5IGlzIGFscmVhZHkgZGVmaW5lZCwgcmV0dXJuXG4gICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLl9oYXNQcmltYXJ5S2V5cyAmJiBvcmlnaW5hbFZhbHVlICYmIHRoaXMuY29uc3RydWN0b3IuX2lzUHJpbWFyeUtleShrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhdHRlbXB0aW5nIHRvIHNldCByZWFkIG9ubHkgYXR0cmlidXRlcywgcmV0dXJuXG4gICAgICAgIGlmICghdGhpcy5pc05ld1JlY29yZCAmJiB0aGlzLmNvbnN0cnVjdG9yLl9oYXNSZWFkT25seUF0dHJpYnV0ZXMgJiYgdGhpcy5jb25zdHJ1Y3Rvci5fcmVhZE9ubHlBdHRyaWJ1dGVzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlcmUncyBhIGRhdGEgdHlwZSBzYW5pdGl6ZXJcbiAgICAgIGlmIChcbiAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFV0aWxzLlNlcXVlbGl6ZU1ldGhvZClcbiAgICAgICAgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uc3RydWN0b3IuX2RhdGFUeXBlU2FuaXRpemVycywga2V5KVxuICAgICAgKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5jb25zdHJ1Y3Rvci5fZGF0YVR5cGVTYW5pdGl6ZXJzW2tleV0uY2FsbCh0aGlzLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB3aGVuIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZCBhbmQgbm90IHJhd1xuICAgICAgaWYgKFxuICAgICAgICAhb3B0aW9ucy5yYXcgJiZcbiAgICAgICAgKFxuICAgICAgICAgIC8vIFRydWUgd2hlbiBzZXF1ZWxpemUgbWV0aG9kXG4gICAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBVdGlscy5TZXF1ZWxpemVNZXRob2QgfHxcbiAgICAgICAgICAvLyBDaGVjayBmb3IgZGF0YSB0eXBlIHR5cGUgY29tcGFyYXRvcnNcbiAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgVXRpbHMuU2VxdWVsaXplTWV0aG9kKSAmJiB0aGlzLmNvbnN0cnVjdG9yLl9kYXRhVHlwZUNoYW5nZXNba2V5XSAmJiB0aGlzLmNvbnN0cnVjdG9yLl9kYXRhVHlwZUNoYW5nZXNba2V5XS5jYWxsKHRoaXMsIHZhbHVlLCBvcmlnaW5hbFZhbHVlLCBvcHRpb25zKSB8fFxuICAgICAgICAgIC8vIENoZWNrIGRlZmF1bHRcbiAgICAgICAgICAhdGhpcy5jb25zdHJ1Y3Rvci5fZGF0YVR5cGVDaGFuZ2VzW2tleV0gJiYgKCFVdGlscy5pc1ByaW1pdGl2ZSh2YWx1ZSkgJiYgdmFsdWUgIT09IG51bGwgfHwgdmFsdWUgIT09IG9yaWdpbmFsVmFsdWUpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9wcmV2aW91c0RhdGFWYWx1ZXNba2V5XSA9IG9yaWdpbmFsVmFsdWU7XG4gICAgICAgIHRoaXMuY2hhbmdlZChrZXksIHRydWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXQgZGF0YSB2YWx1ZVxuICAgICAgdGhpcy5kYXRhVmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRBdHRyaWJ1dGVzKHVwZGF0ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5zZXQodXBkYXRlcyk7XG4gIH1cblxuICAvKipcbiAgICogSWYgY2hhbmdlZCBpcyBjYWxsZWQgd2l0aCBhIHN0cmluZyBpdCB3aWxsIHJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB2YWx1ZSBvZiB0aGF0IGtleSBpbiBgZGF0YVZhbHVlc2AgaXMgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIGluIGBfcHJldmlvdXNEYXRhVmFsdWVzYC5cbiAgICpcbiAgICogSWYgY2hhbmdlZCBpcyBjYWxsZWQgd2l0aG91dCBhbiBhcmd1bWVudCwgaXQgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2Yga2V5cyB0aGF0IGhhdmUgY2hhbmdlZC5cbiAgICpcbiAgICogSWYgY2hhbmdlZCBpcyBjYWxsZWQgd2l0aG91dCBhbiBhcmd1bWVudCBhbmQgbm8ga2V5cyBoYXZlIGNoYW5nZWQsIGl0IHdpbGwgcmV0dXJuIGBmYWxzZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBrZXkgdG8gY2hlY2sgb3IgY2hhbmdlIHN0YXR1cyBvZlxuICAgKiBAcGFyYW0ge2FueX0gW3ZhbHVlXSB2YWx1ZSB0byBzZXRcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW58QXJyYXl9XG4gICAqL1xuICBjaGFuZ2VkKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9jaGFuZ2VkW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fY2hhbmdlZFtrZXldIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5nZWQgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGFWYWx1ZXMpLmZpbHRlcihrZXkgPT4gdGhpcy5jaGFuZ2VkKGtleSkpO1xuXG4gICAgcmV0dXJuIGNoYW5nZWQubGVuZ3RoID8gY2hhbmdlZCA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByZXZpb3VzIHZhbHVlIGZvciBrZXkgZnJvbSBgX3ByZXZpb3VzRGF0YVZhbHVlc2AuXG4gICAqXG4gICAqIElmIGNhbGxlZCB3aXRob3V0IGEga2V5LCByZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZXMgZm9yIGFsbCB2YWx1ZXMgd2hpY2ggaGF2ZSBjaGFuZ2VkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBrZXkgdG8gZ2V0IHByZXZpb3VzIHZhbHVlIG9mXG4gICAqXG4gICAqIEByZXR1cm5zIHthbnl8QXJyYXk8YW55Pn1cbiAgICovXG4gIHByZXZpb3VzKGtleSkge1xuICAgIGlmIChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcmV2aW91c0RhdGFWYWx1ZXNba2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gXy5waWNrQnkodGhpcy5fcHJldmlvdXNEYXRhVmFsdWVzLCAodmFsdWUsIGtleSkgPT4gdGhpcy5jaGFuZ2VkKGtleSkpO1xuICB9XG5cbiAgX3NldEluY2x1ZGUoa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHZhbHVlID0gW3ZhbHVlXTtcbiAgICBpZiAodmFsdWVbMF0gaW5zdGFuY2VvZiBNb2RlbCkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoaW5zdGFuY2UgPT4gaW5zdGFuY2UuZGF0YVZhbHVlcyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5jbHVkZSA9IHRoaXMuX29wdGlvbnMuaW5jbHVkZU1hcFtrZXldO1xuICAgIGNvbnN0IGFzc29jaWF0aW9uID0gaW5jbHVkZS5hc3NvY2lhdGlvbjtcbiAgICBjb25zdCBhY2Nlc3NvciA9IGtleTtcbiAgICBjb25zdCBwcmltYXJ5S2V5QXR0cmlidXRlID0gaW5jbHVkZS5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlO1xuICAgIGNvbnN0IGNoaWxkT3B0aW9ucyA9IHtcbiAgICAgIGlzTmV3UmVjb3JkOiB0aGlzLmlzTmV3UmVjb3JkLFxuICAgICAgaW5jbHVkZTogaW5jbHVkZS5pbmNsdWRlLFxuICAgICAgaW5jbHVkZU5hbWVzOiBpbmNsdWRlLmluY2x1ZGVOYW1lcyxcbiAgICAgIGluY2x1ZGVNYXA6IGluY2x1ZGUuaW5jbHVkZU1hcCxcbiAgICAgIGluY2x1ZGVWYWxpZGF0ZWQ6IHRydWUsXG4gICAgICByYXc6IG9wdGlvbnMucmF3LFxuICAgICAgYXR0cmlidXRlczogaW5jbHVkZS5vcmlnaW5hbEF0dHJpYnV0ZXNcbiAgICB9O1xuICAgIGxldCBpc0VtcHR5O1xuXG4gICAgaWYgKGluY2x1ZGUub3JpZ2luYWxBdHRyaWJ1dGVzID09PSB1bmRlZmluZWQgfHwgaW5jbHVkZS5vcmlnaW5hbEF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoYXNzb2NpYXRpb24uaXNTaW5nbGVBc3NvY2lhdGlvbikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlzRW1wdHkgPSB2YWx1ZSAmJiB2YWx1ZVtwcmltYXJ5S2V5QXR0cmlidXRlXSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gbnVsbDtcbiAgICAgICAgdGhpc1thY2Nlc3Nvcl0gPSB0aGlzLmRhdGFWYWx1ZXNbYWNjZXNzb3JdID0gaXNFbXB0eSA/IG51bGwgOiBpbmNsdWRlLm1vZGVsLmJ1aWxkKHZhbHVlLCBjaGlsZE9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNFbXB0eSA9IHZhbHVlWzBdICYmIHZhbHVlWzBdW3ByaW1hcnlLZXlBdHRyaWJ1dGVdID09PSBudWxsO1xuICAgICAgICB0aGlzW2FjY2Vzc29yXSA9IHRoaXMuZGF0YVZhbHVlc1thY2Nlc3Nvcl0gPSBpc0VtcHR5ID8gW10gOiBpbmNsdWRlLm1vZGVsLmJ1bGtCdWlsZCh2YWx1ZSwgY2hpbGRPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhpcyBpbnN0YW5jZSwgYW5kIGlmIHRoZSB2YWxpZGF0aW9uIHBhc3NlcywgcGVyc2lzdCBpdCB0byB0aGUgZGF0YWJhc2UuIEl0IHdpbGwgb25seSBzYXZlIGNoYW5nZWQgZmllbGRzLCBhbmQgZG8gbm90aGluZyBpZiBubyBmaWVsZHMgaGF2ZSBjaGFuZ2VkLlxuICAgKlxuICAgKiBPbiBzdWNjZXNzLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGlzIGluc3RhbmNlLiBPbiB2YWxpZGF0aW9uIGVycm9yLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiBgU2VxdWVsaXplLlZhbGlkYXRpb25FcnJvcmAuXG4gICAqIFRoaXMgZXJyb3Igd2lsbCBoYXZlIGEgcHJvcGVydHkgZm9yIGVhY2ggb2YgdGhlIGZpZWxkcyBmb3Igd2hpY2ggdmFsaWRhdGlvbiBmYWlsZWQsIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoYXQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgIFtvcHRpb25zXSBzYXZlIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gICAgW29wdGlvbnMuZmllbGRzXSBBbiBvcHRpb25hbCBhcnJheSBvZiBzdHJpbmdzLCByZXByZXNlbnRpbmcgZGF0YWJhc2UgY29sdW1ucy4gSWYgZmllbGRzIGlzIHByb3ZpZGVkLCBvbmx5IHRob3NlIGNvbHVtbnMgd2lsbCBiZSB2YWxpZGF0ZWQgYW5kIHNhdmVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICBbb3B0aW9ucy5zaWxlbnQ9ZmFsc2VdIElmIHRydWUsIHRoZSB1cGRhdGVkQXQgdGltZXN0YW1wIHdpbGwgbm90IGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgIFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIElmIGZhbHNlLCB2YWxpZGF0aW9ucyB3b24ndCBiZSBydW4uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgIFtvcHRpb25zLmhvb2tzPXRydWVdIFJ1biBiZWZvcmUgYW5kIGFmdGVyIGNyZWF0ZSAvIHVwZGF0ZSArIHZhbGlkYXRlIGhvb2tzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259ICAgIFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVHJhbnNhY3Rpb24gdG8gcnVuIHF1ZXJ5IHVuZGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgIFtvcHRpb25zLnNlYXJjaFBhdGg9REVGQVVMVF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHNjaGVtYSBzZWFyY2hfcGF0aCAoUG9zdGdyZXMgb25seSlcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgW29wdGlvbnMucmV0dXJuaW5nXSBBcHBlbmQgUkVUVVJOSU5HICogdG8gZ2V0IGJhY2sgYXV0byBnZW5lcmF0ZWQgdmFsdWVzIChQb3N0Z3JlcyBvbmx5KVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbD59XG4gICAqL1xuICBzYXZlKG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHNlY29uZCBhcmd1bWVudCB3YXMgcmVtb3ZlZCBpbiBmYXZvciBvZiB0aGUgb3B0aW9ucyBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKTtcbiAgICBvcHRpb25zID0gXy5kZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgICBob29rczogdHJ1ZSxcbiAgICAgIHZhbGlkYXRlOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAoIW9wdGlvbnMuZmllbGRzKSB7XG4gICAgICBpZiAodGhpcy5pc05ld1JlY29yZCkge1xuICAgICAgICBvcHRpb25zLmZpZWxkcyA9IE9iamVjdC5rZXlzKHRoaXMuY29uc3RydWN0b3IucmF3QXR0cmlidXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLmZpZWxkcyA9IF8uaW50ZXJzZWN0aW9uKHRoaXMuY2hhbmdlZCgpLCBPYmplY3Qua2V5cyh0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXMpKTtcbiAgICAgIH1cblxuICAgICAgb3B0aW9ucy5kZWZhdWx0RmllbGRzID0gb3B0aW9ucy5maWVsZHM7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucmV0dXJuaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLmFzc29jaWF0aW9uKSB7XG4gICAgICAgIG9wdGlvbnMucmV0dXJuaW5nID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNOZXdSZWNvcmQpIHtcbiAgICAgICAgb3B0aW9ucy5yZXR1cm5pbmcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByaW1hcnlLZXlOYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5wcmltYXJ5S2V5QXR0cmlidXRlO1xuICAgIGNvbnN0IHByaW1hcnlLZXlBdHRyaWJ1dGUgPSBwcmltYXJ5S2V5TmFtZSAmJiB0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXNbcHJpbWFyeUtleU5hbWVdO1xuICAgIGNvbnN0IGNyZWF0ZWRBdEF0dHIgPSB0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmNyZWF0ZWRBdDtcbiAgICBjb25zdCB2ZXJzaW9uQXR0ciA9IHRoaXMuY29uc3RydWN0b3IuX3ZlcnNpb25BdHRyaWJ1dGU7XG4gICAgY29uc3QgaG9vayA9IHRoaXMuaXNOZXdSZWNvcmQgPyAnQ3JlYXRlJyA6ICdVcGRhdGUnO1xuICAgIGNvbnN0IHdhc05ld1JlY29yZCA9IHRoaXMuaXNOZXdSZWNvcmQ7XG4gICAgY29uc3Qgbm93ID0gVXRpbHMubm93KHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCk7XG4gICAgbGV0IHVwZGF0ZWRBdEF0dHIgPSB0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLnVwZGF0ZWRBdDtcblxuICAgIGlmICh1cGRhdGVkQXRBdHRyICYmIG9wdGlvbnMuZmllbGRzLmxlbmd0aCA+PSAxICYmICFvcHRpb25zLmZpZWxkcy5pbmNsdWRlcyh1cGRhdGVkQXRBdHRyKSkge1xuICAgICAgb3B0aW9ucy5maWVsZHMucHVzaCh1cGRhdGVkQXRBdHRyKTtcbiAgICB9XG4gICAgaWYgKHZlcnNpb25BdHRyICYmIG9wdGlvbnMuZmllbGRzLmxlbmd0aCA+PSAxICYmICFvcHRpb25zLmZpZWxkcy5pbmNsdWRlcyh2ZXJzaW9uQXR0cikpIHtcbiAgICAgIG9wdGlvbnMuZmllbGRzLnB1c2godmVyc2lvbkF0dHIpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNpbGVudCA9PT0gdHJ1ZSAmJiAhKHRoaXMuaXNOZXdSZWNvcmQgJiYgdGhpcy5nZXQodXBkYXRlZEF0QXR0ciwgeyByYXc6IHRydWUgfSkpKSB7XG4gICAgICAvLyBVcGRhdGVBdEF0dHIgbWlnaHQgaGF2ZSBiZWVuIGFkZGVkIGFzIGEgcmVzdWx0IG9mIE9iamVjdC5rZXlzKE1vZGVsLnJhd0F0dHJpYnV0ZXMpLiBJbiB0aGF0IGNhc2Ugd2UgaGF2ZSB0byByZW1vdmUgaXQgYWdhaW5cbiAgICAgIF8ucmVtb3ZlKG9wdGlvbnMuZmllbGRzLCB2YWwgPT4gdmFsID09PSB1cGRhdGVkQXRBdHRyKTtcbiAgICAgIHVwZGF0ZWRBdEF0dHIgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc05ld1JlY29yZCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKGNyZWF0ZWRBdEF0dHIgJiYgIW9wdGlvbnMuZmllbGRzLmluY2x1ZGVzKGNyZWF0ZWRBdEF0dHIpKSB7XG4gICAgICAgIG9wdGlvbnMuZmllbGRzLnB1c2goY3JlYXRlZEF0QXR0cik7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmltYXJ5S2V5QXR0cmlidXRlICYmIHByaW1hcnlLZXlBdHRyaWJ1dGUuZGVmYXVsdFZhbHVlICYmICFvcHRpb25zLmZpZWxkcy5pbmNsdWRlcyhwcmltYXJ5S2V5TmFtZSkpIHtcbiAgICAgICAgb3B0aW9ucy5maWVsZHMudW5zaGlmdChwcmltYXJ5S2V5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNOZXdSZWNvcmQgPT09IGZhbHNlKSB7XG4gICAgICBpZiAocHJpbWFyeUtleU5hbWUgJiYgdGhpcy5nZXQocHJpbWFyeUtleU5hbWUsIHsgcmF3OiB0cnVlIH0pID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgYXR0ZW1wdGVkIHRvIHNhdmUgYW4gaW5zdGFuY2Ugd2l0aCBubyBwcmltYXJ5IGtleSwgdGhpcyBpcyBub3QgYWxsb3dlZCBzaW5jZSBpdCB3b3VsZCByZXN1bHQgaW4gYSBnbG9iYWwgdXBkYXRlJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZWRBdEF0dHIgJiYgIW9wdGlvbnMuc2lsZW50ICYmIG9wdGlvbnMuZmllbGRzLmluY2x1ZGVzKHVwZGF0ZWRBdEF0dHIpKSB7XG4gICAgICB0aGlzLmRhdGFWYWx1ZXNbdXBkYXRlZEF0QXR0cl0gPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXREZWZhdWx0VGltZXN0YW1wKHVwZGF0ZWRBdEF0dHIpIHx8IG5vdztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc05ld1JlY29yZCAmJiBjcmVhdGVkQXRBdHRyICYmICF0aGlzLmRhdGFWYWx1ZXNbY3JlYXRlZEF0QXR0cl0pIHtcbiAgICAgIHRoaXMuZGF0YVZhbHVlc1tjcmVhdGVkQXRBdHRyXSA9IHRoaXMuY29uc3RydWN0b3IuX2dldERlZmF1bHRUaW1lc3RhbXAoY3JlYXRlZEF0QXR0cikgfHwgbm93O1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XG4gICAgICAvLyBWYWxpZGF0ZVxuICAgICAgaWYgKG9wdGlvbnMudmFsaWRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAvLyBSdW4gYmVmb3JlIGhvb2tcbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZUhvb2tWYWx1ZXMgPSBfLnBpY2sodGhpcy5kYXRhVmFsdWVzLCBvcHRpb25zLmZpZWxkcyk7XG4gICAgICAgIGxldCBpZ25vcmVDaGFuZ2VkID0gXy5kaWZmZXJlbmNlKHRoaXMuY2hhbmdlZCgpLCBvcHRpb25zLmZpZWxkcyk7IC8vIEluIGNhc2Ugb2YgdXBkYXRlIHdoZXJlIGl0J3Mgb25seSBzdXBwb3NlZCB0byB1cGRhdGUgdGhlIHBhc3NlZCB2YWx1ZXMgYW5kIHRoZSBob29rIHZhbHVlc1xuICAgICAgICBsZXQgaG9va0NoYW5nZWQ7XG4gICAgICAgIGxldCBhZnRlckhvb2tWYWx1ZXM7XG5cbiAgICAgICAgaWYgKHVwZGF0ZWRBdEF0dHIgJiYgb3B0aW9ucy5maWVsZHMuaW5jbHVkZXModXBkYXRlZEF0QXR0cikpIHtcbiAgICAgICAgICBpZ25vcmVDaGFuZ2VkID0gXy53aXRob3V0KGlnbm9yZUNoYW5nZWQsIHVwZGF0ZWRBdEF0dHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IucnVuSG9va3MoYGJlZm9yZSR7aG9va31gLCB0aGlzLCBvcHRpb25zKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRGaWVsZHMgJiYgIXRoaXMuaXNOZXdSZWNvcmQpIHtcbiAgICAgICAgICAgICAgYWZ0ZXJIb29rVmFsdWVzID0gXy5waWNrKHRoaXMuZGF0YVZhbHVlcywgXy5kaWZmZXJlbmNlKHRoaXMuY2hhbmdlZCgpLCBpZ25vcmVDaGFuZ2VkKSk7XG5cbiAgICAgICAgICAgICAgaG9va0NoYW5nZWQgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYWZ0ZXJIb29rVmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGlmIChhZnRlckhvb2tWYWx1ZXNba2V5XSAhPT0gYmVmb3JlSG9va1ZhbHVlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgICBob29rQ2hhbmdlZC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgb3B0aW9ucy5maWVsZHMgPSBfLnVuaXEob3B0aW9ucy5maWVsZHMuY29uY2F0KGhvb2tDaGFuZ2VkKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChob29rQ2hhbmdlZCkge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52YWxpZGF0ZSkge1xuICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBhZ2FpblxuXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5za2lwID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKHRoaXMuY29uc3RydWN0b3IucmF3QXR0cmlidXRlcyksIGhvb2tDaGFuZ2VkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShvcHRpb25zKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLnNraXA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmICghb3B0aW9ucy5maWVsZHMubGVuZ3RoKSByZXR1cm4gdGhpcztcbiAgICAgIGlmICghdGhpcy5pc05ld1JlY29yZCkgcmV0dXJuIHRoaXM7XG4gICAgICBpZiAoIXRoaXMuX29wdGlvbnMuaW5jbHVkZSB8fCAhdGhpcy5fb3B0aW9ucy5pbmNsdWRlLmxlbmd0aCkgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIE5lc3RlZCBjcmVhdGlvbiBmb3IgQmVsb25nc1RvIHJlbGF0aW9uc1xuICAgICAgcmV0dXJuIFByb21pc2UubWFwKHRoaXMuX29wdGlvbnMuaW5jbHVkZS5maWx0ZXIoaW5jbHVkZSA9PiBpbmNsdWRlLmFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvKSwgaW5jbHVkZSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5nZXQoaW5jbHVkZS5hcyk7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICBjb25zdCBpbmNsdWRlT3B0aW9ucyA9IF8oVXRpbHMuY2xvbmVEZWVwKGluY2x1ZGUpKVxuICAgICAgICAgIC5vbWl0KFsnYXNzb2NpYXRpb24nXSlcbiAgICAgICAgICAuZGVmYXVsdHMoe1xuICAgICAgICAgICAgdHJhbnNhY3Rpb246IG9wdGlvbnMudHJhbnNhY3Rpb24sXG4gICAgICAgICAgICBsb2dnaW5nOiBvcHRpb25zLmxvZ2dpbmcsXG4gICAgICAgICAgICBwYXJlbnRSZWNvcmQ6IHRoaXNcbiAgICAgICAgICB9KS52YWx1ZSgpO1xuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5zYXZlKGluY2x1ZGVPcHRpb25zKS50aGVuKCgpID0+IHRoaXNbaW5jbHVkZS5hc3NvY2lhdGlvbi5hY2Nlc3NvcnMuc2V0XShpbnN0YW5jZSwgeyBzYXZlOiBmYWxzZSwgbG9nZ2luZzogb3B0aW9ucy5sb2dnaW5nIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgcmVhbEZpZWxkcyA9IG9wdGlvbnMuZmllbGRzLmZpbHRlcihmaWVsZCA9PiAhdGhpcy5jb25zdHJ1Y3Rvci5fdmlydHVhbEF0dHJpYnV0ZXMuaGFzKGZpZWxkKSk7XG4gICAgICBpZiAoIXJlYWxGaWVsZHMubGVuZ3RoKSByZXR1cm4gdGhpcztcbiAgICAgIGlmICghdGhpcy5jaGFuZ2VkKCkgJiYgIXRoaXMuaXNOZXdSZWNvcmQpIHJldHVybiB0aGlzO1xuXG4gICAgICBjb25zdCB2ZXJzaW9uRmllbGROYW1lID0gXy5nZXQodGhpcy5jb25zdHJ1Y3Rvci5yYXdBdHRyaWJ1dGVzW3ZlcnNpb25BdHRyXSwgJ2ZpZWxkJykgfHwgdmVyc2lvbkF0dHI7XG4gICAgICBsZXQgdmFsdWVzID0gVXRpbHMubWFwVmFsdWVGaWVsZE5hbWVzKHRoaXMuZGF0YVZhbHVlcywgb3B0aW9ucy5maWVsZHMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgICAgbGV0IHF1ZXJ5ID0gbnVsbDtcbiAgICAgIGxldCBhcmdzID0gW107XG4gICAgICBsZXQgd2hlcmU7XG5cbiAgICAgIGlmICh0aGlzLmlzTmV3UmVjb3JkKSB7XG4gICAgICAgIHF1ZXJ5ID0gJ2luc2VydCc7XG4gICAgICAgIGFyZ3MgPSBbdGhpcywgdGhpcy5jb25zdHJ1Y3Rvci5nZXRUYWJsZU5hbWUob3B0aW9ucyksIHZhbHVlcywgb3B0aW9uc107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aGVyZSA9IHRoaXMud2hlcmUodHJ1ZSk7XG4gICAgICAgIGlmICh2ZXJzaW9uQXR0cikge1xuICAgICAgICAgIHZhbHVlc1t2ZXJzaW9uRmllbGROYW1lXSA9IHBhcnNlSW50KHZhbHVlc1t2ZXJzaW9uRmllbGROYW1lXSwgMTApICsgMTtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeSA9ICd1cGRhdGUnO1xuICAgICAgICBhcmdzID0gW3RoaXMsIHRoaXMuY29uc3RydWN0b3IuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCB2YWx1ZXMsIHdoZXJlLCBvcHRpb25zXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuUXVlcnlJbnRlcmZhY2VbcXVlcnldKC4uLmFyZ3MpXG4gICAgICAgIC50aGVuKChbcmVzdWx0LCByb3dzVXBkYXRlZF0pPT4ge1xuICAgICAgICAgIGlmICh2ZXJzaW9uQXR0cikge1xuICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIHRoYXQgYSByb3cgd2FzIHVwZGF0ZWQsIG90aGVyd2lzZSBpdCdzIGFuIG9wdGltaXN0aWMgbG9ja2luZyBlcnJvci5cbiAgICAgICAgICAgIGlmIChyb3dzVXBkYXRlZCA8IDEpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5PcHRpbWlzdGljTG9ja0Vycm9yKHtcbiAgICAgICAgICAgICAgICBtb2RlbE5hbWU6IHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgICAgICAgd2hlcmVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQuZGF0YVZhbHVlc1t2ZXJzaW9uQXR0cl0gPSB2YWx1ZXNbdmVyc2lvbkZpZWxkTmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVHJhbnNmZXIgZGF0YWJhc2UgZ2VuZXJhdGVkIHZhbHVlcyAoZGVmYXVsdHMsIGF1dG9pbmNyZW1lbnQsIGV0YylcbiAgICAgICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgT2JqZWN0LmtleXModGhpcy5jb25zdHJ1Y3Rvci5yYXdBdHRyaWJ1dGVzKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZCAmJlxuICAgICAgICAgICAgICAgIHZhbHVlc1t0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGRdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGQgIT09IGF0dHJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YWx1ZXNbYXR0cl0gPSB2YWx1ZXNbdGhpcy5jb25zdHJ1Y3Rvci5yYXdBdHRyaWJ1dGVzW2F0dHJdLmZpZWxkXTtcbiAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlc1t0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZXMgPSBPYmplY3QuYXNzaWduKHZhbHVlcywgcmVzdWx0LmRhdGFWYWx1ZXMpO1xuXG4gICAgICAgICAgcmVzdWx0LmRhdGFWYWx1ZXMgPSBPYmplY3QuYXNzaWduKHJlc3VsdC5kYXRhVmFsdWVzLCB2YWx1ZXMpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pXG4gICAgICAgIC50YXAoKCkgPT4ge1xuICAgICAgICAgIGlmICghd2FzTmV3UmVjb3JkKSByZXR1cm4gdGhpcztcbiAgICAgICAgICBpZiAoIXRoaXMuX29wdGlvbnMuaW5jbHVkZSB8fCAhdGhpcy5fb3B0aW9ucy5pbmNsdWRlLmxlbmd0aCkgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgICAvLyBOZXN0ZWQgY3JlYXRpb24gZm9yIEhhc09uZS9IYXNNYW55L0JlbG9uZ3NUb01hbnkgcmVsYXRpb25zXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UubWFwKHRoaXMuX29wdGlvbnMuaW5jbHVkZS5maWx0ZXIoaW5jbHVkZSA9PiAhKGluY2x1ZGUuYXNzb2NpYXRpb24gaW5zdGFuY2VvZiBCZWxvbmdzVG8gfHxcbiAgICAgICAgICAgIGluY2x1ZGUucGFyZW50ICYmIGluY2x1ZGUucGFyZW50LmFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvTWFueSkpLCBpbmNsdWRlID0+IHtcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZXMgPSB0aGlzLmdldChpbmNsdWRlLmFzKTtcblxuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZXMpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnN0YW5jZXMpKSBpbnN0YW5jZXMgPSBbaW5zdGFuY2VzXTtcbiAgICAgICAgICAgIGlmICghaW5zdGFuY2VzLmxlbmd0aCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBpbmNsdWRlT3B0aW9ucyA9IF8oVXRpbHMuY2xvbmVEZWVwKGluY2x1ZGUpKVxuICAgICAgICAgICAgICAub21pdChbJ2Fzc29jaWF0aW9uJ10pXG4gICAgICAgICAgICAgIC5kZWZhdWx0cyh7XG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb246IG9wdGlvbnMudHJhbnNhY3Rpb24sXG4gICAgICAgICAgICAgICAgbG9nZ2luZzogb3B0aW9ucy5sb2dnaW5nLFxuICAgICAgICAgICAgICAgIHBhcmVudFJlY29yZDogdGhpc1xuICAgICAgICAgICAgICB9KS52YWx1ZSgpO1xuXG4gICAgICAgICAgICAvLyBJbnN0YW5jZXMgd2lsbCBiZSB1cGRhdGVkIGluIHBsYWNlIHNvIHdlIGNhbiBzYWZlbHkgdHJlYXQgSGFzT25lIGxpa2UgYSBIYXNNYW55XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5tYXAoaW5zdGFuY2VzLCBpbnN0YW5jZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpbmNsdWRlLmFzc29jaWF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvTWFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5zYXZlKGluY2x1ZGVPcHRpb25zKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgdmFsdWVzW2luY2x1ZGUuYXNzb2NpYXRpb24uZm9yZWlnbktleV0gPSB0aGlzLmdldCh0aGlzLmNvbnN0cnVjdG9yLnByaW1hcnlLZXlBdHRyaWJ1dGUsIHsgcmF3OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgdmFsdWVzW2luY2x1ZGUuYXNzb2NpYXRpb24ub3RoZXJLZXldID0gaW5zdGFuY2UuZ2V0KGluc3RhbmNlLmNvbnN0cnVjdG9yLnByaW1hcnlLZXlBdHRyaWJ1dGUsIHsgcmF3OiB0cnVlIH0pO1xuXG4gICAgICAgICAgICAgICAgICAvLyBJbmNsdWRlIHZhbHVlcyBkZWZpbmVkIGluIHRoZSBhc3NvY2lhdGlvblxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih2YWx1ZXMsIGluY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaC5zY29wZSk7XG4gICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VbaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBPYmplY3Qua2V5cyhpbmNsdWRlLmFzc29jaWF0aW9uLnRocm91Z2gubW9kZWwucmF3QXR0cmlidXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uX2F1dG9HZW5lcmF0ZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgPT09IGluY2x1ZGUuYXNzb2NpYXRpb24uZm9yZWlnbktleSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0ciA9PT0gaW5jbHVkZS5hc3NvY2lhdGlvbi5vdGhlcktleSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluc3RhbmNlW2luY2x1ZGUuYXNzb2NpYXRpb24udGhyb3VnaC5tb2RlbC5uYW1lXVthdHRyXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2F0dHJdID0gaW5zdGFuY2VbaW5jbHVkZS5hc3NvY2lhdGlvbi50aHJvdWdoLm1vZGVsLm5hbWVdW2F0dHJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBpbmNsdWRlLmFzc29jaWF0aW9uLnRocm91Z2hNb2RlbC5jcmVhdGUodmFsdWVzLCBpbmNsdWRlT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW5zdGFuY2Uuc2V0KGluY2x1ZGUuYXNzb2NpYXRpb24uZm9yZWlnbktleSwgdGhpcy5nZXQoaW5jbHVkZS5hc3NvY2lhdGlvbi5zb3VyY2VLZXkgfHwgdGhpcy5jb25zdHJ1Y3Rvci5wcmltYXJ5S2V5QXR0cmlidXRlLCB7IHJhdzogdHJ1ZSB9KSwgeyByYXc6IHRydWUgfSk7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaW5zdGFuY2UsIGluY2x1ZGUuYXNzb2NpYXRpb24uc2NvcGUpO1xuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2Uuc2F2ZShpbmNsdWRlT3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRhcChyZXN1bHQgPT4ge1xuICAgICAgICAgIC8vIFJ1biBhZnRlciBob29rXG4gICAgICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnJ1bkhvb2tzKGBhZnRlciR7aG9va31gLCByZXN1bHQsIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIG9wdGlvbnMuZmllbGRzKSB7XG4gICAgICAgICAgICByZXN1bHQuX3ByZXZpb3VzRGF0YVZhbHVlc1tmaWVsZF0gPSByZXN1bHQuZGF0YVZhbHVlc1tmaWVsZF07XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoZmllbGQsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc05ld1JlY29yZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIGN1cnJlbnQgaW5zdGFuY2UgaW4tcGxhY2UsIGkuZS4gdXBkYXRlIHRoZSBvYmplY3Qgd2l0aCBjdXJyZW50IGRhdGEgZnJvbSB0aGUgREIgYW5kIHJldHVybiB0aGUgc2FtZSBvYmplY3QuXG4gICAqIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gZG9pbmcgYSBgZmluZChJbnN0YW5jZS5pZClgLCBiZWNhdXNlIHRoYXQgd291bGQgY3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgaW5zdGFuY2UuIFdpdGggdGhpcyBtZXRob2QsXG4gICAqIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBJbnN0YW5jZSBhcmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgZGF0YSBhbmQgbm8gbmV3IG9iamVjdHMgYXJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRBbGx9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgb24gdG8gYE1vZGVsLmZpbmRgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbD59XG4gICAqL1xuICByZWxvYWQob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBVdGlscy5kZWZhdWx0cyh7fSwgb3B0aW9ucywge1xuICAgICAgd2hlcmU6IHRoaXMud2hlcmUoKSxcbiAgICAgIGluY2x1ZGU6IHRoaXMuX29wdGlvbnMuaW5jbHVkZSB8fCBudWxsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5maW5kT25lKG9wdGlvbnMpXG4gICAgICAudGFwKHJlbG9hZCA9PiB7XG4gICAgICAgIGlmICghcmVsb2FkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IHNlcXVlbGl6ZUVycm9ycy5JbnN0YW5jZUVycm9yKFxuICAgICAgICAgICAgJ0luc3RhbmNlIGNvdWxkIG5vdCBiZSByZWxvYWRlZCBiZWNhdXNlIGl0IGRvZXMgbm90IGV4aXN0IGFueW1vcmUgKGZpbmQgY2FsbCByZXR1cm5lZCBudWxsKSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVsb2FkID0+IHtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgaW50ZXJuYWwgb3B0aW9ucyBvZiB0aGUgaW5zdGFuY2VcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHJlbG9hZC5fb3B0aW9ucztcbiAgICAgICAgLy8gcmUtc2V0IGluc3RhbmNlIHZhbHVlc1xuICAgICAgICB0aGlzLnNldChyZWxvYWQuZGF0YVZhbHVlcywge1xuICAgICAgICAgIHJhdzogdHJ1ZSxcbiAgICAgICAgICByZXNldDogdHJ1ZSAmJiAhb3B0aW9ucy5hdHRyaWJ1dGVzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogVmFsaWRhdGUgdGhlIGF0dHJpYnV0ZXMgb2YgdGhpcyBpbnN0YW5jZSBhY2NvcmRpbmcgdG8gdmFsaWRhdGlvbiBydWxlcyBzZXQgaW4gdGhlIG1vZGVsIGRlZmluaXRpb24uXG4gICpcbiAgKiBUaGUgcHJvbWlzZSBmdWxmaWxscyBpZiBhbmQgb25seSBpZiB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBpdCByZWplY3RzIGFuIEVycm9yIGluc3RhbmNlIGNvbnRhaW5pbmcgeyBmaWVsZCBuYW1lIDogW2Vycm9yIG1zZ3NdIH0gZW50cmllcy5cbiAgKlxuICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIHZhbGlkYXRvclxuICAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLnNraXBdIEFuIGFycmF5IG9mIHN0cmluZ3MuIEFsbCBwcm9wZXJ0aWVzIHRoYXQgYXJlIGluIHRoaXMgYXJyYXkgd2lsbCBub3QgYmUgdmFsaWRhdGVkXG4gICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMuZmllbGRzXSBBbiBhcnJheSBvZiBzdHJpbmdzLiBPbmx5IHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGluIHRoaXMgYXJyYXkgd2lsbCBiZSB2YWxpZGF0ZWRcbiAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmhvb2tzPXRydWVdIFJ1biBiZWZvcmUgYW5kIGFmdGVyIHZhbGlkYXRlIGhvb2tzXG4gICpcbiAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgKi9cbiAgdmFsaWRhdGUob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgSW5zdGFuY2VWYWxpZGF0b3IodGhpcywgb3B0aW9ucykudmFsaWRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgYHNldGAgYW5kIHRoZW4gY2FsbGluZyBgc2F2ZWAgYnV0IGl0IG9ubHkgc2F2ZXMgdGhlXG4gICAqIGV4YWN0IHZhbHVlcyBwYXNzZWQgdG8gaXQsIG1ha2luZyBpdCBtb3JlIGF0b21pYyBhbmQgc2FmZXIuXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsI3NldH1cbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwjc2F2ZX1cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlcyBTZWUgYHNldGBcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgU2VlIGBzYXZlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbD59XG4gICAqL1xuICB1cGRhdGUodmFsdWVzLCBvcHRpb25zKSB7XG4gICAgLy8gQ2xvbmUgdmFsdWVzIHNvIGl0IGRvZXNuJ3QgZ2V0IG1vZGlmaWVkIGZvciBjYWxsZXIgc2NvcGUgYW5kIGlnbm9yZSB1bmRlZmluZWQgdmFsdWVzXG4gICAgdmFsdWVzID0gXy5vbWl0QnkodmFsdWVzLCB2YWx1ZSA9PiB2YWx1ZSA9PT0gdW5kZWZpbmVkKTtcblxuICAgIGNvbnN0IGNoYW5nZWRCZWZvcmUgPSB0aGlzLmNoYW5nZWQoKSB8fCBbXTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSBvcHRpb25zID0geyBmaWVsZHM6IG9wdGlvbnMgfTtcblxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XG4gICAgY29uc3Qgc2V0T3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKTtcbiAgICBzZXRPcHRpb25zLmF0dHJpYnV0ZXMgPSBvcHRpb25zLmZpZWxkcztcbiAgICB0aGlzLnNldCh2YWx1ZXMsIHNldE9wdGlvbnMpO1xuXG4gICAgLy8gTm93IHdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmaWVsZHMgd2VyZSBhY3R1YWxseSBhZmZlY3RlZCBieSB0aGUgc2V0dGVyLlxuICAgIGNvbnN0IHNpZGVFZmZlY3RzID0gXy53aXRob3V0KHRoaXMuY2hhbmdlZCgpLCAuLi5jaGFuZ2VkQmVmb3JlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBfLnVuaW9uKE9iamVjdC5rZXlzKHZhbHVlcyksIHNpZGVFZmZlY3RzKTtcblxuICAgIGlmICghb3B0aW9ucy5maWVsZHMpIHtcbiAgICAgIG9wdGlvbnMuZmllbGRzID0gXy5pbnRlcnNlY3Rpb24oZmllbGRzLCB0aGlzLmNoYW5nZWQoKSk7XG4gICAgICBvcHRpb25zLmRlZmF1bHRGaWVsZHMgPSBvcHRpb25zLmZpZWxkcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zYXZlKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgdGhlIHJvdyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgaW5zdGFuY2UuIERlcGVuZGluZyBvbiB5b3VyIHNldHRpbmcgZm9yIHBhcmFub2lkLCB0aGUgcm93IHdpbGwgZWl0aGVyIGJlIGNvbXBsZXRlbHkgZGVsZXRlZCwgb3IgaGF2ZSBpdHMgZGVsZXRlZEF0IHRpbWVzdGFtcCBzZXQgdG8gdGhlIGN1cnJlbnQgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgW29wdGlvbnM9e31dIGRlc3Ryb3kgb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICBbb3B0aW9ucy5mb3JjZT1mYWxzZV0gSWYgc2V0IHRvIHRydWUsIHBhcmFub2lkIG1vZGVscyB3aWxsIGFjdHVhbGx5IGJlIGRlbGV0ZWRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gICAgW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGRlc3Ryb3kob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGhvb2tzOiB0cnVlLFxuICAgICAgZm9yY2U6IGZhbHNlXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xuICAgICAgLy8gUnVuIGJlZm9yZSBob29rXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5ydW5Ib29rcygnYmVmb3JlRGVzdHJveScsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qgd2hlcmUgPSB0aGlzLndoZXJlKHRydWUpO1xuXG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXQgJiYgb3B0aW9ucy5mb3JjZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHRoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0O1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSB0aGlzLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV07XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhdHRyaWJ1dGUsICdkZWZhdWx0VmFsdWUnKVxuICAgICAgICAgID8gYXR0cmlidXRlLmRlZmF1bHRWYWx1ZVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5nZXREYXRhVmFsdWUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIGNvbnN0IHVuZGVmaW5lZE9yTnVsbCA9IGN1cnJlbnRWYWx1ZSA9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSA9PSBudWxsO1xuICAgICAgICBpZiAodW5kZWZpbmVkT3JOdWxsIHx8IF8uaXNFcXVhbChjdXJyZW50VmFsdWUsIGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAvLyBvbmx5IHVwZGF0ZSB0aW1lc3RhbXAgaWYgaXQgd2Fzbid0IGFscmVhZHkgc2V0XG4gICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoYXR0cmlidXRlTmFtZSwgbmV3IERhdGUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zYXZlKF8uZGVmYXVsdHMoeyBob29rczogZmFsc2UgfSwgb3B0aW9ucykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuUXVlcnlJbnRlcmZhY2UuZGVsZXRlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IuZ2V0VGFibGVOYW1lKG9wdGlvbnMpLCB3aGVyZSwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFF1ZXJ5VHlwZXMuREVMRVRFLCBsaW1pdDogbnVsbCB9LCBvcHRpb25zKSk7XG4gICAgfSkudGFwKCgpID0+IHtcbiAgICAgIC8vIFJ1biBhZnRlciBob29rXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5ydW5Ib29rcygnYWZ0ZXJEZXN0cm95JywgdGhpcywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgYSBpbnN0YW5jZSBpcyBcInNvZnQgZGVsZXRlZFwiLiAgVGhpcyBpc1xuICAgKiBwYXJ0aWN1bGFybHkgdXNlZnVsIGlmIHRoZSBpbXBsZW1lbnRlciByZW5hbWVkIHRoZSBgZGVsZXRlZEF0YCBhdHRyaWJ1dGVcbiAgICogdG8gc29tZXRoaW5nIGRpZmZlcmVudC4gIFRoaXMgbWV0aG9kIHJlcXVpcmVzIGBwYXJhbm9pZGAgdG8gYmUgZW5hYmxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1NvZnREZWxldGVkKCkge1xuICAgIGlmICghdGhpcy5jb25zdHJ1Y3Rvci5fdGltZXN0YW1wQXR0cmlidXRlcy5kZWxldGVkQXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kZWwgaXMgbm90IHBhcmFub2lkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsZXRlZEF0QXR0cmlidXRlID0gdGhpcy5jb25zdHJ1Y3Rvci5yYXdBdHRyaWJ1dGVzW3RoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0XTtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVsZXRlZEF0QXR0cmlidXRlLCAnZGVmYXVsdFZhbHVlJykgPyBkZWxldGVkQXRBdHRyaWJ1dGUuZGVmYXVsdFZhbHVlIDogbnVsbDtcbiAgICBjb25zdCBkZWxldGVkQXQgPSB0aGlzLmdldCh0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdCkgfHwgbnVsbDtcbiAgICBjb25zdCBpc1NldCA9IGRlbGV0ZWRBdCAhPT0gZGVmYXVsdFZhbHVlO1xuXG4gICAgcmV0dXJuIGlzU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgdGhlIHJvdyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgaW5zdGFuY2UuIE9ubHkgYXZhaWxhYmxlIGZvciBwYXJhbm9pZCBtb2RlbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgIFtvcHRpb25zPXt9XSByZXN0b3JlIG9wdGlvbnNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gICAgW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICByZXN0b3JlKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuY29uc3RydWN0b3IuX3RpbWVzdGFtcEF0dHJpYnV0ZXMuZGVsZXRlZEF0KSB0aHJvdyBuZXcgRXJyb3IoJ01vZGVsIGlzIG5vdCBwYXJhbm9pZCcpO1xuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaG9va3M6IHRydWUsXG4gICAgICBmb3JjZTogZmFsc2VcbiAgICB9LCBvcHRpb25zKTtcblxuICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XG4gICAgICAvLyBSdW4gYmVmb3JlIGhvb2tcbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnJ1bkhvb2tzKCdiZWZvcmVSZXN0b3JlJywgdGhpcywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBkZWxldGVkQXRDb2wgPSB0aGlzLmNvbnN0cnVjdG9yLl90aW1lc3RhbXBBdHRyaWJ1dGVzLmRlbGV0ZWRBdDtcbiAgICAgIGNvbnN0IGRlbGV0ZWRBdEF0dHJpYnV0ZSA9IHRoaXMuY29uc3RydWN0b3IucmF3QXR0cmlidXRlc1tkZWxldGVkQXRDb2xdO1xuICAgICAgY29uc3QgZGVsZXRlZEF0RGVmYXVsdFZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlbGV0ZWRBdEF0dHJpYnV0ZSwgJ2RlZmF1bHRWYWx1ZScpID8gZGVsZXRlZEF0QXR0cmlidXRlLmRlZmF1bHRWYWx1ZSA6IG51bGw7XG5cbiAgICAgIHRoaXMuc2V0RGF0YVZhbHVlKGRlbGV0ZWRBdENvbCwgZGVsZXRlZEF0RGVmYXVsdFZhbHVlKTtcbiAgICAgIHJldHVybiB0aGlzLnNhdmUoT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyBob29rczogZmFsc2UsIG9taXROdWxsOiBmYWxzZSB9KSk7XG4gICAgfSkudGFwKCgpID0+IHtcbiAgICAgIC8vIFJ1biBhZnRlciBob29rXG4gICAgICBpZiAob3B0aW9ucy5ob29rcykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5ydW5Ib29rcygnYWZ0ZXJSZXN0b3JlJywgdGhpcywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5jcmVtZW50IHRoZSB2YWx1ZSBvZiBvbmUgb3IgbW9yZSBjb2x1bW5zLiBUaGlzIGlzIGRvbmUgaW4gdGhlIGRhdGFiYXNlLCB3aGljaCBtZWFucyBpdCBkb2VzIG5vdCB1c2UgdGhlIHZhbHVlcyBjdXJyZW50bHkgc3RvcmVkIG9uIHRoZSBJbnN0YW5jZS4gVGhlIGluY3JlbWVudCBpcyBkb25lIHVzaW5nIGFcbiAgICogYGBgc3FsXG4gICAqIFNFVCBjb2x1bW4gPSBjb2x1bW4gKyBYXG4gICAqIGBgYFxuICAgKiBxdWVyeS4gVGhlIHVwZGF0ZWQgaW5zdGFuY2Ugd2lsbCBiZSByZXR1cm5lZCBieSBkZWZhdWx0IGluIFBvc3RncmVzLiBIb3dldmVyLCBpbiBvdGhlciBkaWFsZWN0cywgeW91IHdpbGwgbmVlZCB0byBkbyBhIHJlbG9hZCB0byBnZXQgdGhlIG5ldyB2YWx1ZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGluc3RhbmNlLmluY3JlbWVudCgnbnVtYmVyJykgLy8gaW5jcmVtZW50IG51bWJlciBieSAxXG4gICAqXG4gICAqIGluc3RhbmNlLmluY3JlbWVudChbJ251bWJlcicsICdjb3VudCddLCB7IGJ5OiAyIH0pIC8vIGluY3JlbWVudCBudW1iZXIgYW5kIGNvdW50IGJ5IDJcbiAgICpcbiAgICogLy8gaW5jcmVtZW50IGFuc3dlciBieSA0MiwgYW5kIHRyaWVzIGJ5IDEuXG4gICAqIC8vIGBieWAgaXMgaWdub3JlZCwgc2luY2UgZWFjaCBjb2x1bW4gaGFzIGl0cyBvd24gdmFsdWVcbiAgICogaW5zdGFuY2UuaW5jcmVtZW50KHsgYW5zd2VyOiA0MiwgdHJpZXM6IDF9LCB7IGJ5OiAyIH0pXG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsI3JlbG9hZH1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8QXJyYXl8T2JqZWN0fSBmaWVsZHMgSWYgYSBzdHJpbmcgaXMgcHJvdmlkZWQsIHRoYXQgY29sdW1uIGlzIGluY3JlbWVudGVkIGJ5IHRoZSB2YWx1ZSBvZiBgYnlgIGdpdmVuIGluIG9wdGlvbnMuIElmIGFuIGFycmF5IGlzIHByb3ZpZGVkLCB0aGUgc2FtZSBpcyB0cnVlIGZvciBlYWNoIGNvbHVtbi4gSWYgYW5kIG9iamVjdCBpcyBwcm92aWRlZCwgZWFjaCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgdGhlIHZhbHVlIGdpdmVuLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJ5PTFdIFRoZSBudW1iZXIgdG8gaW5jcmVtZW50IGJ5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuc2lsZW50PWZhbHNlXSBJZiB0cnVlLCB0aGUgdXBkYXRlZEF0IHRpbWVzdGFtcCB3aWxsIG5vdCBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nPWZhbHNlXSBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCB3aGlsZSBydW5uaW5nIHRoZSBxdWVyeSB0byBsb2cgdGhlIHNxbC5cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gW29wdGlvbnMudHJhbnNhY3Rpb25dIFRyYW5zYWN0aW9uIHRvIHJ1biBxdWVyeSB1bmRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJldHVybmluZz10cnVlXSBBcHBlbmQgUkVUVVJOSU5HICogdG8gZ2V0IGJhY2sgYXV0byBnZW5lcmF0ZWQgdmFsdWVzIChQb3N0Z3JlcyBvbmx5KVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbD59XG4gICAqIEBzaW5jZSA0LjAuMFxuICAgKi9cbiAgaW5jcmVtZW50KGZpZWxkcywgb3B0aW9ucykge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLndoZXJlKCk7XG5cbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xuICAgIG9wdGlvbnMud2hlcmUgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLndoZXJlLCBpZGVudGlmaWVyKTtcbiAgICBvcHRpb25zLmluc3RhbmNlID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmluY3JlbWVudChmaWVsZHMsIG9wdGlvbnMpLnJldHVybih0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNyZW1lbnQgdGhlIHZhbHVlIG9mIG9uZSBvciBtb3JlIGNvbHVtbnMuIFRoaXMgaXMgZG9uZSBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIG1lYW5zIGl0IGRvZXMgbm90IHVzZSB0aGUgdmFsdWVzIGN1cnJlbnRseSBzdG9yZWQgb24gdGhlIEluc3RhbmNlLiBUaGUgZGVjcmVtZW50IGlzIGRvbmUgdXNpbmcgYVxuICAgKiBgYGBzcWxcbiAgICogU0VUIGNvbHVtbiA9IGNvbHVtbiAtIFhcbiAgICogYGBgXG4gICAqIHF1ZXJ5LiBUaGUgdXBkYXRlZCBpbnN0YW5jZSB3aWxsIGJlIHJldHVybmVkIGJ5IGRlZmF1bHQgaW4gUG9zdGdyZXMuIEhvd2V2ZXIsIGluIG90aGVyIGRpYWxlY3RzLCB5b3Ugd2lsbCBuZWVkIHRvIGRvIGEgcmVsb2FkIHRvIGdldCB0aGUgbmV3IHZhbHVlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaW5zdGFuY2UuZGVjcmVtZW50KCdudW1iZXInKSAvLyBkZWNyZW1lbnQgbnVtYmVyIGJ5IDFcbiAgICpcbiAgICogaW5zdGFuY2UuZGVjcmVtZW50KFsnbnVtYmVyJywgJ2NvdW50J10sIHsgYnk6IDIgfSkgLy8gZGVjcmVtZW50IG51bWJlciBhbmQgY291bnQgYnkgMlxuICAgKlxuICAgKiAvLyBkZWNyZW1lbnQgYW5zd2VyIGJ5IDQyLCBhbmQgdHJpZXMgYnkgMS5cbiAgICogLy8gYGJ5YCBpcyBpZ25vcmVkLCBzaW5jZSBlYWNoIGNvbHVtbiBoYXMgaXRzIG93biB2YWx1ZVxuICAgKiBpbnN0YW5jZS5kZWNyZW1lbnQoeyBhbnN3ZXI6IDQyLCB0cmllczogMX0sIHsgYnk6IDIgfSlcbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwjcmVsb2FkfVxuICAgKiBAcGFyYW0ge3N0cmluZ3xBcnJheXxPYmplY3R9IGZpZWxkcyBJZiBhIHN0cmluZyBpcyBwcm92aWRlZCwgdGhhdCBjb2x1bW4gaXMgZGVjcmVtZW50ZWQgYnkgdGhlIHZhbHVlIG9mIGBieWAgZ2l2ZW4gaW4gb3B0aW9ucy4gSWYgYW4gYXJyYXkgaXMgcHJvdmlkZWQsIHRoZSBzYW1lIGlzIHRydWUgZm9yIGVhY2ggY29sdW1uLiBJZiBhbmQgb2JqZWN0IGlzIHByb3ZpZGVkLCBlYWNoIGNvbHVtbiBpcyBkZWNyZW1lbnRlZCBieSB0aGUgdmFsdWUgZ2l2ZW5cbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgW29wdGlvbnNdIGRlY3JlbWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSB7bnVtYmVyfSAgICAgIFtvcHRpb25zLmJ5PTFdIFRoZSBudW1iZXIgdG8gZGVjcmVtZW50IGJ5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgIFtvcHRpb25zLnNpbGVudD1mYWxzZV0gSWYgdHJ1ZSwgdGhlIHVwZGF0ZWRBdCB0aW1lc3RhbXAgd2lsbCBub3QgYmUgdXBkYXRlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gICAgW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IFtvcHRpb25zLnRyYW5zYWN0aW9uXSBUcmFuc2FjdGlvbiB0byBydW4gcXVlcnkgdW5kZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICBbb3B0aW9ucy5yZXR1cm5pbmc9dHJ1ZV0gQXBwZW5kIFJFVFVSTklORyAqIHRvIGdldCBiYWNrIGF1dG8gZ2VuZXJhdGVkIHZhbHVlcyAoUG9zdGdyZXMgb25seSlcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBkZWNyZW1lbnQoZmllbGRzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IF8uZGVmYXVsdHMoeyBpbmNyZW1lbnQ6IGZhbHNlIH0sIG9wdGlvbnMsIHtcbiAgICAgIGJ5OiAxXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5pbmNyZW1lbnQoZmllbGRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgYW5kIGBvdGhlcmAgSW5zdGFuY2UgcmVmZXIgdG8gdGhlIHNhbWUgcm93XG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZWx9IG90aGVyIE90aGVyIGluc3RhbmNlIHRvIGNvbXBhcmUgYWdhaW5zdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIGlmICghb3RoZXIgfHwgIW90aGVyLmNvbnN0cnVjdG9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnByaW1hcnlLZXlBdHRyaWJ1dGVzLmV2ZXJ5KGF0dHJpYnV0ZSA9PiB0aGlzLmdldChhdHRyaWJ1dGUsIHsgcmF3OiB0cnVlIH0pID09PSBvdGhlci5nZXQoYXR0cmlidXRlLCB7IHJhdzogdHJ1ZSB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBpcyBlcXVhbCB0byBvbmUgb2YgYG90aGVyc2AgYnkgY2FsbGluZyBlcXVhbHNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxNb2RlbD59IG90aGVycyBBbiBhcnJheSBvZiBpbnN0YW5jZXMgdG8gY2hlY2sgYWdhaW5zdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFsc09uZU9mKG90aGVycykge1xuICAgIHJldHVybiBvdGhlcnMuc29tZShvdGhlciA9PiB0aGlzLmVxdWFscyhvdGhlcikpO1xuICB9XG5cbiAgc2V0VmFsaWRhdG9ycyhhdHRyaWJ1dGUsIHZhbGlkYXRvcnMpIHtcbiAgICB0aGlzLnZhbGlkYXRvcnNbYXR0cmlidXRlXSA9IHZhbGlkYXRvcnM7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgaW5zdGFuY2UgdG8gYSBKU09OIHJlcHJlc2VudGF0aW9uLlxuICAgKiBQcm94aWVzIHRvIGNhbGxpbmcgYGdldGAgd2l0aCBubyBrZXlzLlxuICAgKiBUaGlzIG1lYW5zIGdldCBhbGwgdmFsdWVzIGdvdHRlbiBmcm9tIHRoZSBEQiwgYW5kIGFwcGx5IGFsbCBjdXN0b20gZ2V0dGVycy5cbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwjZ2V0fVxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiBfLmNsb25lRGVlcChcbiAgICAgIHRoaXMuZ2V0KHtcbiAgICAgICAgcGxhaW46IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgMTptIGFzc29jaWF0aW9uIGJldHdlZW4gdGhpcyAodGhlIHNvdXJjZSkgYW5kIHRoZSBwcm92aWRlZCB0YXJnZXQuXG4gICAqIFRoZSBmb3JlaWduIGtleSBpcyBhZGRlZCBvbiB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge01vZGVsfSAgICAgICAgICAgICAgIHRhcmdldCBUYXJnZXQgbW9kZWxcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICBbb3B0aW9uc10gaGFzTWFueSBhc3NvY2lhdGlvbiBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgW29wdGlvbnMuaG9va3M9ZmFsc2VdIFNldCB0byB0cnVlIHRvIHJ1biBiZWZvcmUtL2FmdGVyRGVzdHJveSBob29rcyB3aGVuIGFuIGFzc29jaWF0ZWQgbW9kZWwgaXMgZGVsZXRlZCBiZWNhdXNlIG9mIGEgY2FzY2FkZS4gRm9yIGV4YW1wbGUgaWYgYFVzZXIuaGFzT25lKFByb2ZpbGUsIHtvbkRlbGV0ZTogJ2Nhc2NhZGUnLCBob29rczp0cnVlfSlgLCB0aGUgYmVmb3JlLS9hZnRlckRlc3Ryb3kgaG9va3MgZm9yIHByb2ZpbGUgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIHVzZXIgaXMgZGVsZXRlZC4gT3RoZXJ3aXNlIHRoZSBwcm9maWxlIHdpbGwgYmUgZGVsZXRlZCB3aXRob3V0IGludm9raW5nIGFueSBob29rc1xuICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9ICAgICAgIFtvcHRpb25zLmFzXSBUaGUgYWxpYXMgb2YgdGhpcyBtb2RlbC4gSWYgeW91IHByb3ZpZGUgYSBzdHJpbmcsIGl0IHNob3VsZCBiZSBwbHVyYWwsIGFuZCB3aWxsIGJlIHNpbmd1bGFyaXplZCB1c2luZyBub2RlLmluZmxlY3Rpb24uIElmIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIHNpbmd1bGFyIHZlcnNpb24geW91cnNlbGYsIHByb3ZpZGUgYW4gb2JqZWN0IHdpdGggYHBsdXJhbGAgYW5kIGBzaW5ndWxhcmAga2V5cy4gU2VlIGFsc28gdGhlIGBuYW1lYCBvcHRpb24gcGFzc2VkIHRvIGBzZXF1ZWxpemUuZGVmaW5lYC4gSWYgeW91IGNyZWF0ZSBtdWx0aXBsZSBhc3NvY2lhdGlvbnMgYmV0d2VlbiB0aGUgc2FtZSB0YWJsZXMsIHlvdSBzaG91bGQgcHJvdmlkZSBhbiBhbGlhcyB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbS4gSWYgeW91IHByb3ZpZGUgYW4gYWxpYXMgd2hlbiBjcmVhdGluZyB0aGUgYXNzb2NpYXRpb24sIHlvdSBzaG91bGQgcHJvdmlkZSB0aGUgc2FtZSBhbGlhcyB3aGVuIGVhZ2VyIGxvYWRpbmcgYW5kIHdoZW4gZ2V0dGluZyBhc3NvY2lhdGVkIG1vZGVscy4gRGVmYXVsdHMgdG8gdGhlIHBsdXJhbGl6ZWQgbmFtZSBvZiB0YXJnZXRcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSAgICAgICBbb3B0aW9ucy5mb3JlaWduS2V5XSBUaGUgbmFtZSBvZiB0aGUgZm9yZWlnbiBrZXkgaW4gdGhlIHRhcmdldCB0YWJsZSBvciBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmb3JlaWduIGNvbHVtbiAoc2VlIGBTZXF1ZWxpemUuZGVmaW5lYCBmb3Igc3ludGF4KS4gV2hlbiB1c2luZyBhbiBvYmplY3QsIHlvdSBjYW4gYWRkIGEgYG5hbWVgIHByb3BlcnR5IHRvIHNldCB0aGUgbmFtZSBvZiB0aGUgY29sdW1uLiBEZWZhdWx0cyB0byB0aGUgbmFtZSBvZiBzb3VyY2UgKyBwcmltYXJ5IGtleSBvZiBzb3VyY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICBbb3B0aW9ucy5zb3VyY2VLZXldIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byB1c2UgYXMgdGhlIGtleSBmb3IgdGhlIGFzc29jaWF0aW9uIGluIHRoZSBzb3VyY2UgdGFibGUuIERlZmF1bHRzIHRvIHRoZSBwcmltYXJ5IGtleSBvZiB0aGUgc291cmNlIHRhYmxlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgW29wdGlvbnMuc2NvcGVdIEEga2V5L3ZhbHVlIHNldCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYXNzb2NpYXRpb24gY3JlYXRlIGFuZCBmaW5kIGRlZmF1bHRzIG9uIHRoZSB0YXJnZXQuIChzcWxpdGUgbm90IHN1cHBvcnRlZCBmb3IgTjpNKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgIFtvcHRpb25zLm9uRGVsZXRlPSdTRVQmbmJzcDtOVUxMfENBU0NBREUnXSBTRVQgTlVMTCBpZiBmb3JlaWduS2V5IGFsbG93cyBudWxscywgQ0FTQ0FERSBpZiBvdGhlcndpc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICBbb3B0aW9ucy5vblVwZGF0ZT0nQ0FTQ0FERSddIFNldCBgT04gVVBEQVRFYFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgIFtvcHRpb25zLmNvbnN0cmFpbnRzPXRydWVdIFNob3VsZCBvbiB1cGRhdGUgYW5kIG9uIGRlbGV0ZSBjb25zdHJhaW50cyBiZSBlbmFibGVkIG9uIHRoZSBmb3JlaWduIGtleS5cbiAgICpcbiAgICogQHJldHVybnMge0hhc01hbnl9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIFVzZXIuaGFzTWFueShQcm9maWxlKSAvLyBUaGlzIHdpbGwgYWRkIHVzZXJJZCB0byB0aGUgcHJvZmlsZSB0YWJsZVxuICAgKi9cbiAgc3RhdGljIGhhc01hbnkodGFyZ2V0LCBvcHRpb25zKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBOOk0gYXNzb2NpYXRpb24gd2l0aCBhIGpvaW4gdGFibGUuIERlZmluaW5nIGB0aHJvdWdoYCBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gICAgICAgICAgICAgICB0YXJnZXQgVGFyZ2V0IG1vZGVsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgb3B0aW9ucyBiZWxvbmdzVG9NYW55IGFzc29jaWF0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICBbb3B0aW9ucy5ob29rcz1mYWxzZV0gU2V0IHRvIHRydWUgdG8gcnVuIGJlZm9yZS0vYWZ0ZXJEZXN0cm95IGhvb2tzIHdoZW4gYW4gYXNzb2NpYXRlZCBtb2RlbCBpcyBkZWxldGVkIGJlY2F1c2Ugb2YgYSBjYXNjYWRlLiBGb3IgZXhhbXBsZSBpZiBgVXNlci5oYXNPbmUoUHJvZmlsZSwge29uRGVsZXRlOiAnY2FzY2FkZScsIGhvb2tzOnRydWV9KWAsIHRoZSBiZWZvcmUtL2FmdGVyRGVzdHJveSBob29rcyBmb3IgcHJvZmlsZSB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgdXNlciBpcyBkZWxldGVkLiBPdGhlcndpc2UgdGhlIHByb2ZpbGUgd2lsbCBiZSBkZWxldGVkIHdpdGhvdXQgaW52b2tpbmcgYW55IGhvb2tzXG4gICAqIEBwYXJhbSB7TW9kZWx8c3RyaW5nfE9iamVjdH0gb3B0aW9ucy50aHJvdWdoIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0aGF0IGlzIHVzZWQgdG8gam9pbiBzb3VyY2UgYW5kIHRhcmdldCBpbiBuOm0gYXNzb2NpYXRpb25zLiBDYW4gYWxzbyBiZSBhIHNlcXVlbGl6ZSBtb2RlbCBpZiB5b3Ugd2FudCB0byBkZWZpbmUgdGhlIGp1bmN0aW9uIHRhYmxlIHlvdXJzZWxmIGFuZCBhZGQgZXh0cmEgYXR0cmlidXRlcyB0byBpdC5cbiAgICogQHBhcmFtIHtNb2RlbH0gICAgICAgICAgICAgICBbb3B0aW9ucy50aHJvdWdoLm1vZGVsXSBUaGUgbW9kZWwgdXNlZCB0byBqb2luIGJvdGggc2lkZXMgb2YgdGhlIE46TSBhc3NvY2lhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICBbb3B0aW9ucy50aHJvdWdoLnNjb3BlXSBBIGtleS92YWx1ZSBzZXQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGFzc29jaWF0aW9uIGNyZWF0ZSBhbmQgZmluZCBkZWZhdWx0cyBvbiB0aGUgdGhyb3VnaCBtb2RlbC4gKFJlbWVtYmVyIHRvIGFkZCB0aGUgYXR0cmlidXRlcyB0byB0aGUgdGhyb3VnaCBtb2RlbClcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICBbb3B0aW9ucy50aHJvdWdoLnVuaXF1ZT10cnVlXSBJZiB0cnVlIGEgdW5pcXVlIGtleSB3aWxsIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBmb3JlaWduIGtleXMgdXNlZCAobWlnaHQgd2FudCB0byB0dXJuIHRoaXMgb2ZmIGFuZCBjcmVhdGUgc3BlY2lmaWMgdW5pcXVlIGtleXMgd2hlbiB1c2luZyBzY29wZXMpXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gICAgICAgW29wdGlvbnMuYXNdIFRoZSBhbGlhcyBvZiB0aGlzIGFzc29jaWF0aW9uLiBJZiB5b3UgcHJvdmlkZSBhIHN0cmluZywgaXQgc2hvdWxkIGJlIHBsdXJhbCwgYW5kIHdpbGwgYmUgc2luZ3VsYXJpemVkIHVzaW5nIG5vZGUuaW5mbGVjdGlvbi4gSWYgeW91IHdhbnQgdG8gY29udHJvbCB0aGUgc2luZ3VsYXIgdmVyc2lvbiB5b3Vyc2VsZiwgcHJvdmlkZSBhbiBvYmplY3Qgd2l0aCBgcGx1cmFsYCBhbmQgYHNpbmd1bGFyYCBrZXlzLiBTZWUgYWxzbyB0aGUgYG5hbWVgIG9wdGlvbiBwYXNzZWQgdG8gYHNlcXVlbGl6ZS5kZWZpbmVgLiBJZiB5b3UgY3JlYXRlIG11bHRpcGxlIGFzc29jaWF0aW9ucyBiZXR3ZWVuIHRoZSBzYW1lIHRhYmxlcywgeW91IHNob3VsZCBwcm92aWRlIGFuIGFsaWFzIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtLiBJZiB5b3UgcHJvdmlkZSBhbiBhbGlhcyB3aGVuIGNyZWF0aW5nIHRoZSBhc3NvY2lhdGlvbiwgeW91IHNob3VsZCBwcm92aWRlIHRoZSBzYW1lIGFsaWFzIHdoZW4gZWFnZXIgbG9hZGluZyBhbmQgd2hlbiBnZXR0aW5nIGFzc29jaWF0ZWQgbW9kZWxzLiBEZWZhdWx0cyB0byB0aGUgcGx1cmFsaXplZCBuYW1lIG9mIHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9ICAgICAgIFtvcHRpb25zLmZvcmVpZ25LZXldIFRoZSBuYW1lIG9mIHRoZSBmb3JlaWduIGtleSBpbiB0aGUgam9pbiB0YWJsZSAocmVwcmVzZW50aW5nIHRoZSBzb3VyY2UgbW9kZWwpIG9yIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIGZvcmVpZ24gY29sdW1uIChzZWUgYFNlcXVlbGl6ZS5kZWZpbmVgIGZvciBzeW50YXgpLiBXaGVuIHVzaW5nIGFuIG9iamVjdCwgeW91IGNhbiBhZGQgYSBgbmFtZWAgcHJvcGVydHkgdG8gc2V0IHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4uIERlZmF1bHRzIHRvIHRoZSBuYW1lIG9mIHNvdXJjZSArIHByaW1hcnkga2V5IG9mIHNvdXJjZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9ICAgICAgIFtvcHRpb25zLm90aGVyS2V5XSBUaGUgbmFtZSBvZiB0aGUgZm9yZWlnbiBrZXkgaW4gdGhlIGpvaW4gdGFibGUgKHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IG1vZGVsKSBvciBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBvdGhlciBjb2x1bW4gKHNlZSBgU2VxdWVsaXplLmRlZmluZWAgZm9yIHN5bnRheCkuIFdoZW4gdXNpbmcgYW4gb2JqZWN0LCB5b3UgY2FuIGFkZCBhIGBuYW1lYCBwcm9wZXJ0eSB0byBzZXQgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbi4gRGVmYXVsdHMgdG8gdGhlIG5hbWUgb2YgdGFyZ2V0ICsgcHJpbWFyeSBrZXkgb2YgdGFyZ2V0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgW29wdGlvbnMuc2NvcGVdIEEga2V5L3ZhbHVlIHNldCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYXNzb2NpYXRpb24gY3JlYXRlIGFuZCBmaW5kIGRlZmF1bHRzIG9uIHRoZSB0YXJnZXQuIChzcWxpdGUgbm90IHN1cHBvcnRlZCBmb3IgTjpNKVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgIFtvcHRpb25zLnRpbWVzdGFtcHM9c2VxdWVsaXplLm9wdGlvbnMudGltZXN0YW1wc10gU2hvdWxkIHRoZSBqb2luIG1vZGVsIGhhdmUgdGltZXN0YW1wc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgIFtvcHRpb25zLm9uRGVsZXRlPSdTRVQmbmJzcDtOVUxMfENBU0NBREUnXSBDYXNjYWRlIGlmIHRoaXMgaXMgYSBuOm0sIGFuZCBzZXQgbnVsbCBpZiBpdCBpcyBhIDE6bVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgIFtvcHRpb25zLm9uVXBkYXRlPSdDQVNDQURFJ10gU2V0cyBgT04gVVBEQVRFYFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgIFtvcHRpb25zLmNvbnN0cmFpbnRzPXRydWVdIFNob3VsZCBvbiB1cGRhdGUgYW5kIG9uIGRlbGV0ZSBjb25zdHJhaW50cyBiZSBlbmFibGVkIG9uIHRoZSBmb3JlaWduIGtleS5cbiAgICpcbiAgICogQHJldHVybnMge0JlbG9uZ3NUb01hbnl9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEF1dG9tYWdpY2FsbHkgZ2VuZXJhdGVkIGpvaW4gbW9kZWxcbiAgICogVXNlci5iZWxvbmdzVG9NYW55KFByb2plY3QsIHsgdGhyb3VnaDogJ1VzZXJQcm9qZWN0cycgfSlcbiAgICogUHJvamVjdC5iZWxvbmdzVG9NYW55KFVzZXIsIHsgdGhyb3VnaDogJ1VzZXJQcm9qZWN0cycgfSlcbiAgICpcbiAgICogLy8gSm9pbiBtb2RlbCB3aXRoIGFkZGl0aW9uYWwgYXR0cmlidXRlc1xuICAgKiBjb25zdCBVc2VyUHJvamVjdHMgPSBzZXF1ZWxpemUuZGVmaW5lKCdVc2VyUHJvamVjdHMnLCB7XG4gICAqICAgc3RhcnRlZDogU2VxdWVsaXplLkJPT0xFQU5cbiAgICogfSlcbiAgICogVXNlci5iZWxvbmdzVG9NYW55KFByb2plY3QsIHsgdGhyb3VnaDogVXNlclByb2plY3RzIH0pXG4gICAqIFByb2plY3QuYmVsb25nc1RvTWFueShVc2VyLCB7IHRocm91Z2g6IFVzZXJQcm9qZWN0cyB9KVxuICAgKi9cbiAgc3RhdGljIGJlbG9uZ3NUb01hbnkodGFyZ2V0LCBvcHRpb25zKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbiB0aGlzICh0aGUgc291cmNlKSBhbmQgdGhlIHByb3ZpZGVkIHRhcmdldC4gVGhlIGZvcmVpZ24ga2V5IGlzIGFkZGVkIG9uIHRoZSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZWx9ICAgICAgICAgICB0YXJnZXQgVGFyZ2V0IG1vZGVsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICBbb3B0aW9uc10gaGFzT25lIGFzc29jaWF0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgIFtvcHRpb25zLmhvb2tzPWZhbHNlXSBTZXQgdG8gdHJ1ZSB0byBydW4gYmVmb3JlLS9hZnRlckRlc3Ryb3kgaG9va3Mgd2hlbiBhbiBhc3NvY2lhdGVkIG1vZGVsIGlzIGRlbGV0ZWQgYmVjYXVzZSBvZiBhIGNhc2NhZGUuIEZvciBleGFtcGxlIGlmIGBVc2VyLmhhc09uZShQcm9maWxlLCB7b25EZWxldGU6ICdjYXNjYWRlJywgaG9va3M6dHJ1ZX0pYCwgdGhlIGJlZm9yZS0vYWZ0ZXJEZXN0cm95IGhvb2tzIGZvciBwcm9maWxlIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSB1c2VyIGlzIGRlbGV0ZWQuIE90aGVyd2lzZSB0aGUgcHJvZmlsZSB3aWxsIGJlIGRlbGV0ZWQgd2l0aG91dCBpbnZva2luZyBhbnkgaG9va3NcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIFtvcHRpb25zLmFzXSBUaGUgYWxpYXMgb2YgdGhpcyBtb2RlbCwgaW4gc2luZ3VsYXIgZm9ybS4gU2VlIGFsc28gdGhlIGBuYW1lYCBvcHRpb24gcGFzc2VkIHRvIGBzZXF1ZWxpemUuZGVmaW5lYC4gSWYgeW91IGNyZWF0ZSBtdWx0aXBsZSBhc3NvY2lhdGlvbnMgYmV0d2VlbiB0aGUgc2FtZSB0YWJsZXMsIHlvdSBzaG91bGQgcHJvdmlkZSBhbiBhbGlhcyB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbS4gSWYgeW91IHByb3ZpZGUgYW4gYWxpYXMgd2hlbiBjcmVhdGluZyB0aGUgYXNzb2NpYXRpb24sIHlvdSBzaG91bGQgcHJvdmlkZSB0aGUgc2FtZSBhbGlhcyB3aGVuIGVhZ2VyIGxvYWRpbmcgYW5kIHdoZW4gZ2V0dGluZyBhc3NvY2lhdGVkIG1vZGVscy4gRGVmYXVsdHMgdG8gdGhlIHNpbmd1bGFyaXplZCBuYW1lIG9mIHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9ICAgW29wdGlvbnMuZm9yZWlnbktleV0gVGhlIG5hbWUgb2YgdGhlIGZvcmVpZ24ga2V5IGF0dHJpYnV0ZSBpbiB0aGUgdGFyZ2V0IG1vZGVsIG9yIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIGZvcmVpZ24gY29sdW1uIChzZWUgYFNlcXVlbGl6ZS5kZWZpbmVgIGZvciBzeW50YXgpLiBXaGVuIHVzaW5nIGFuIG9iamVjdCwgeW91IGNhbiBhZGQgYSBgbmFtZWAgcHJvcGVydHkgdG8gc2V0IHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4uIERlZmF1bHRzIHRvIHRoZSBuYW1lIG9mIHNvdXJjZSArIHByaW1hcnkga2V5IG9mIHNvdXJjZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgW29wdGlvbnMuc291cmNlS2V5XSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHVzZSBhcyB0aGUga2V5IGZvciB0aGUgYXNzb2NpYXRpb24gaW4gdGhlIHNvdXJjZSB0YWJsZS4gRGVmYXVsdHMgdG8gdGhlIHByaW1hcnkga2V5IG9mIHRoZSBzb3VyY2UgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIFtvcHRpb25zLm9uRGVsZXRlPSdTRVQmbmJzcDtOVUxMfENBU0NBREUnXSBTRVQgTlVMTCBpZiBmb3JlaWduS2V5IGFsbG93cyBudWxscywgQ0FTQ0FERSBpZiBvdGhlcndpc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIFtvcHRpb25zLm9uVXBkYXRlPSdDQVNDQURFJ10gU2V0cyAnT04gVVBEQVRFJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMuY29uc3RyYWludHM9dHJ1ZV0gU2hvdWxkIG9uIHVwZGF0ZSBhbmQgb24gZGVsZXRlIGNvbnN0cmFpbnRzIGJlIGVuYWJsZWQgb24gdGhlIGZvcmVpZ24ga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgW29wdGlvbnMudW5pcXVlS2V5XSBUaGUgY3VzdG9tIG5hbWUgZm9yIHVuaXF1ZSBjb25zdHJhaW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7SGFzT25lfVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBVc2VyLmhhc09uZShQcm9maWxlKSAvLyBUaGlzIHdpbGwgYWRkIHVzZXJJZCB0byB0aGUgcHJvZmlsZSB0YWJsZVxuICAgKi9cbiAgc3RhdGljIGhhc09uZSh0YXJnZXQsIG9wdGlvbnMpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoaXMgKHRoZSBzb3VyY2UpIGFuZCB0aGUgcHJvdmlkZWQgdGFyZ2V0LiBUaGUgZm9yZWlnbiBrZXkgaXMgYWRkZWQgb24gdGhlIHNvdXJjZS5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gICAgICAgICAgIHRhcmdldCBUaGUgdGFyZ2V0IG1vZGVsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICBbb3B0aW9uc10gYmVsb25nc1RvIGFzc29jaWF0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgIFtvcHRpb25zLmhvb2tzPWZhbHNlXSBTZXQgdG8gdHJ1ZSB0byBydW4gYmVmb3JlLS9hZnRlckRlc3Ryb3kgaG9va3Mgd2hlbiBhbiBhc3NvY2lhdGVkIG1vZGVsIGlzIGRlbGV0ZWQgYmVjYXVzZSBvZiBhIGNhc2NhZGUuIEZvciBleGFtcGxlIGlmIGBVc2VyLmhhc09uZShQcm9maWxlLCB7b25EZWxldGU6ICdjYXNjYWRlJywgaG9va3M6dHJ1ZX0pYCwgdGhlIGJlZm9yZS0vYWZ0ZXJEZXN0cm95IGhvb2tzIGZvciBwcm9maWxlIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSB1c2VyIGlzIGRlbGV0ZWQuIE90aGVyd2lzZSB0aGUgcHJvZmlsZSB3aWxsIGJlIGRlbGV0ZWQgd2l0aG91dCBpbnZva2luZyBhbnkgaG9va3NcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIFtvcHRpb25zLmFzXSBUaGUgYWxpYXMgb2YgdGhpcyBtb2RlbCwgaW4gc2luZ3VsYXIgZm9ybS4gU2VlIGFsc28gdGhlIGBuYW1lYCBvcHRpb24gcGFzc2VkIHRvIGBzZXF1ZWxpemUuZGVmaW5lYC4gSWYgeW91IGNyZWF0ZSBtdWx0aXBsZSBhc3NvY2lhdGlvbnMgYmV0d2VlbiB0aGUgc2FtZSB0YWJsZXMsIHlvdSBzaG91bGQgcHJvdmlkZSBhbiBhbGlhcyB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbS4gSWYgeW91IHByb3ZpZGUgYW4gYWxpYXMgd2hlbiBjcmVhdGluZyB0aGUgYXNzb2NpYXRpb24sIHlvdSBzaG91bGQgcHJvdmlkZSB0aGUgc2FtZSBhbGlhcyB3aGVuIGVhZ2VyIGxvYWRpbmcgYW5kIHdoZW4gZ2V0dGluZyBhc3NvY2lhdGVkIG1vZGVscy4gRGVmYXVsdHMgdG8gdGhlIHNpbmd1bGFyaXplZCBuYW1lIG9mIHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9ICAgW29wdGlvbnMuZm9yZWlnbktleV0gVGhlIG5hbWUgb2YgdGhlIGZvcmVpZ24ga2V5IGF0dHJpYnV0ZSBpbiB0aGUgc291cmNlIHRhYmxlIG9yIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIGZvcmVpZ24gY29sdW1uIChzZWUgYFNlcXVlbGl6ZS5kZWZpbmVgIGZvciBzeW50YXgpLiBXaGVuIHVzaW5nIGFuIG9iamVjdCwgeW91IGNhbiBhZGQgYSBgbmFtZWAgcHJvcGVydHkgdG8gc2V0IHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4uIERlZmF1bHRzIHRvIHRoZSBuYW1lIG9mIHRhcmdldCArIHByaW1hcnkga2V5IG9mIHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgW29wdGlvbnMudGFyZ2V0S2V5XSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHVzZSBhcyB0aGUga2V5IGZvciB0aGUgYXNzb2NpYXRpb24gaW4gdGhlIHRhcmdldCB0YWJsZS4gRGVmYXVsdHMgdG8gdGhlIHByaW1hcnkga2V5IG9mIHRoZSB0YXJnZXQgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIFtvcHRpb25zLm9uRGVsZXRlPSdTRVQmbmJzcDtOVUxMfE5PJm5ic3A7QUNUSU9OJ10gU0VUIE5VTEwgaWYgZm9yZWlnbktleSBhbGxvd3MgbnVsbHMsIE5PIEFDVElPTiBpZiBvdGhlcndpc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIFtvcHRpb25zLm9uVXBkYXRlPSdDQVNDQURFJ10gU2V0cyAnT04gVVBEQVRFJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMuY29uc3RyYWludHM9dHJ1ZV0gU2hvdWxkIG9uIHVwZGF0ZSBhbmQgb24gZGVsZXRlIGNvbnN0cmFpbnRzIGJlIGVuYWJsZWQgb24gdGhlIGZvcmVpZ24ga2V5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QmVsb25nc1RvfVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBQcm9maWxlLmJlbG9uZ3NUbyhVc2VyKSAvLyBUaGlzIHdpbGwgYWRkIHVzZXJJZCB0byB0aGUgcHJvZmlsZSB0YWJsZVxuICAgKi9cbiAgc3RhdGljIGJlbG9uZ3NUbyh0YXJnZXQsIG9wdGlvbnMpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbn1cblxuT2JqZWN0LmFzc2lnbihNb2RlbCwgYXNzb2NpYXRpb25zTWl4aW4pO1xuSG9va3MuYXBwbHlUbyhNb2RlbCwgdHJ1ZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTW9kZWw7XG4iXX0= \ No newline at end of file diff --git a/dist/operators.js b/dist/operators.js index 47eb156..3d7dd42 100644 --- a/dist/operators.js +++ b/dist/operators.js @@ -87,4 +87,4 @@ const Op = { join: Symbol.for('join') }; module.exports = Op; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9vcGVyYXRvcnMuanMiXSwibmFtZXMiOlsiT3AiLCJlcSIsIlN5bWJvbCIsImZvciIsIm5lIiwiZ3RlIiwiZ3QiLCJsdGUiLCJsdCIsIm5vdCIsImlzIiwiaW4iLCJub3RJbiIsImxpa2UiLCJub3RMaWtlIiwiaUxpa2UiLCJub3RJTGlrZSIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInN1YnN0cmluZyIsInJlZ2V4cCIsIm5vdFJlZ2V4cCIsImlSZWdleHAiLCJub3RJUmVnZXhwIiwiYmV0d2VlbiIsIm5vdEJldHdlZW4iLCJvdmVybGFwIiwiY29udGFpbnMiLCJjb250YWluZWQiLCJhZGphY2VudCIsInN0cmljdExlZnQiLCJzdHJpY3RSaWdodCIsIm5vRXh0ZW5kUmlnaHQiLCJub0V4dGVuZExlZnQiLCJhbmQiLCJvciIsImFueSIsImFsbCIsInZhbHVlcyIsImNvbCIsInBsYWNlaG9sZGVyIiwiam9pbiIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2Q0EsTUFBTUEsRUFBRSxHQUFHO0FBQ1RDLEVBQUFBLEVBQUUsRUFBRUMsTUFBTSxDQUFDQyxHQUFQLENBQVcsSUFBWCxDQURLO0FBRVRDLEVBQUFBLEVBQUUsRUFBRUYsTUFBTSxDQUFDQyxHQUFQLENBQVcsSUFBWCxDQUZLO0FBR1RFLEVBQUFBLEdBQUcsRUFBRUgsTUFBTSxDQUFDQyxHQUFQLENBQVcsS0FBWCxDQUhJO0FBSVRHLEVBQUFBLEVBQUUsRUFBRUosTUFBTSxDQUFDQyxHQUFQLENBQVcsSUFBWCxDQUpLO0FBS1RJLEVBQUFBLEdBQUcsRUFBRUwsTUFBTSxDQUFDQyxHQUFQLENBQVcsS0FBWCxDQUxJO0FBTVRLLEVBQUFBLEVBQUUsRUFBRU4sTUFBTSxDQUFDQyxHQUFQLENBQVcsSUFBWCxDQU5LO0FBT1RNLEVBQUFBLEdBQUcsRUFBRVAsTUFBTSxDQUFDQyxH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QUksRUFBRXZDLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLE1BQVg7QUF2Q0csQ0FBWDtBQTBDQXVDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjNDLEVBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbid1c2Ugc3RyaWN0JztcclxuLyoqXHJcbiAqIE9wZXJhdG9yIHN5bWJvbHMgdG8gYmUgdXNlZCB3aGVuIHF1ZXJ5aW5nIGRhdGFcclxuICpcclxuICogQHNlZSB7QGxpbmsgTW9kZWwjd2hlcmV9XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSBlcVxyXG4gKiBAcHJvcGVydHkgbmVcclxuICogQHByb3BlcnR5IGd0ZVxyXG4gKiBAcHJvcGVydHkgZ3RcclxuICogQHByb3BlcnR5IGx0ZVxyXG4gKiBAcHJvcGVydHkgbHRcclxuICogQHByb3BlcnR5IG5vdFxyXG4gKiBAcHJvcGVydHkgaXNcclxuICogQHByb3BlcnR5IGluXHJcbiAqIEBwcm9wZXJ0eSBub3RJblxyXG4gKiBAcHJvcGVydHkgbGlrZVxyXG4gKiBAcHJvcGVydHkgbm90TGlrZVxyXG4gKiBAcHJvcGVydHkgaUxpa2VcclxuICogQHByb3BlcnR5IG5vdElMaWtlXHJcbiAqIEBwcm9wZXJ0eSBzdGFydHNXaXRoXHJcbiAqIEBwcm9wZXJ0eSBlbmRzV2l0aFxyXG4gKiBAcHJvcGVydHkgc3Vic3RyaW5nXHJcbiAqIEBwcm9wZXJ0eSByZWdleHBcclxuICogQHByb3BlcnR5IG5vdFJlZ2V4cFxyXG4gKiBAcHJvcGVydHkgaVJlZ2V4cFxyXG4gKiBAcHJvcGVydHkgbm90SVJlZ2V4cFxyXG4gKiBAcHJvcGVydHkgYmV0d2VlblxyXG4gKiBAcHJvcGVydHkgbm90QmV0d2VlblxyXG4gKiBAcHJvcGVydHkgb3ZlcmxhcFxyXG4gKiBAcHJvcGVydHkgY29udGFpbnNcclxuICogQHByb3BlcnR5IGNvbnRhaW5lZFxyXG4gKiBAcHJvcGVydHkgYWRqYWNlbnRcclxuICogQHByb3BlcnR5IHN0cmljdExlZnRcclxuICogQHByb3BlcnR5IHN0cmljdFJpZ2h0XHJcbiAqIEBwcm9wZXJ0eSBub0V4dGVuZFJpZ2h0XHJcbiAqIEBwcm9wZXJ0eSBub0V4dGVuZExlZnRcclxuICogQHByb3BlcnR5IGFuZFxyXG4gKiBAcHJvcGVydHkgb3JcclxuICogQHByb3BlcnR5IGFueVxyXG4gKiBAcHJvcGVydHkgYWxsXHJcbiAqIEBwcm9wZXJ0eSB2YWx1ZXNcclxuICogQHByb3BlcnR5IGNvbFxyXG4gKiBAcHJvcGVydHkgcGxhY2Vob2xkZXJcclxuICogQHByb3BlcnR5IGpvaW5cclxuICovXHJcbmNvbnN0IE9wID0ge1xyXG4gIGVxOiBTeW1ib2wuZm9yKCdlcScpLFxyXG4gIG5lOiBTeW1ib2wuZm9yKCduZScpLFxyXG4gIGd0ZTogU3ltYm9sLmZvcignZ3RlJyksXHJcbiAgZ3Q6IFN5bWJvbC5mb3IoJ2d0JyksXHJcbiAgbHRlOiBTeW1ib2wuZm9yKCdsdGUnKSxcclxuICBsdDogU3ltYm9sLmZvcignbHQnKSxcclxuICBub3Q6IFN5bWJvbC5mb3IoJ25vdCcpLFxyXG4gIGlzOiBTeW1ib2wuZm9yKCdpcycpLFxyXG4gIGluOiBTeW1ib2wuZm9yKCdpbicpLFxyXG4gIG5vdEluOiBTeW1ib2wuZm9yKCdub3RJbicpLFxyXG4gIGxpa2U6IFN5bWJvbC5mb3IoJ2xpa2UnKSxcclxuICBub3RMaWtlOiBTeW1ib2wuZm9yKCdub3RMaWtlJyksXHJcbiAgaUxpa2U6IFN5bWJvbC5mb3IoJ2lMaWtlJyksXHJcbiAgbm90SUxpa2U6IFN5bWJvbC5mb3IoJ25vdElMaWtlJyksXHJcbiAgc3RhcnRzV2l0aDogU3ltYm9sLmZvcignc3RhcnRzV2l0aCcpLFxyXG4gIGVuZHNXaXRoOiBTeW1ib2wuZm9yKCdlbmRzV2l0aCcpLFxyXG4gIHN1YnN0cmluZzogU3ltYm9sLmZvcignc3Vic3RyaW5nJyksXHJcbiAgcmVnZXhwOiBTeW1ib2wuZm9yKCdyZWdleHAnKSxcclxuICBub3RSZWdleHA6IFN5bWJvbC5mb3IoJ25vdFJlZ2V4cCcpLFxyXG4gIGlSZWdleHA6IFN5bWJvbC5mb3IoJ2lSZWdleHAnKSxcclxuICBub3RJUmVnZXhwOiBTeW1ib2wuZm9yKCdub3RJUmVnZXhwJyksXHJcbiAgYmV0d2VlbjogU3ltYm9sLmZvcignYmV0d2VlbicpLFxyXG4gIG5vdEJldHdlZW46IFN5bWJvbC5mb3IoJ25vdEJldHdlZW4nKSxcclxuICBvdmVybGFwOiBTeW1ib2wuZm9yKCdvdmVybGFwJyksXHJcbiAgY29udGFpbnM6IFN5bWJvbC5mb3IoJ2NvbnRhaW5zJyksXHJcbiAgY29udGFpbmVkOiBTeW1ib2wuZm9yKCdjb250YWluZWQnKSxcclxuICBhZGphY2VudDogU3ltYm9sLmZvcignYWRqYWNlbnQnKSxcclxuICBzdHJpY3RMZWZ0OiBTeW1ib2wuZm9yKCdzdHJpY3RMZWZ0JyksXHJcbiAgc3RyaWN0UmlnaHQ6IFN5bWJvbC5mb3IoJ3N0cmljdFJpZ2h0JyksXHJcbiAgbm9FeHRlbmRSaWdodDogU3ltYm9sLmZvcignbm9FeHRlbmRSaWdodCcpLFxyXG4gIG5vRXh0ZW5kTGVmdDogU3ltYm9sLmZvcignbm9FeHRlbmRMZWZ0JyksXHJcbiAgYW5kOiBTeW1ib2wuZm9yKCdhbmQnKSxcclxuICBvcjogU3ltYm9sLmZvcignb3InKSxcclxuICBhbnk6IFN5bWJvbC5mb3IoJ2FueScpLFxyXG4gIGFsbDogU3ltYm9sLmZvcignYWxsJyksXHJcbiAgdmFsdWVzOiBTeW1ib2wuZm9yKCd2YWx1ZXMnKSxcclxuICBjb2w6IFN5bWJvbC5mb3IoJ2NvbCcpLFxyXG4gIHBsYWNlaG9sZGVyOiBTeW1ib2wuZm9yKCdwbGFjZWhvbGRlcicpLFxyXG4gIGpvaW46IFN5bWJvbC5mb3IoJ2pvaW4nKVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBPcDtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9vcGVyYXRvcnMuanMiXSwibmFtZXMiOlsiT3AiLCJlcSIsIlN5bWJvbCIsImZvciIsIm5lIiwiZ3RlIiwiZ3QiLCJsdGUiLCJsdCIsIm5vdCIsImlzIiwiaW4iLCJub3RJbiIsImxpa2UiLCJub3RMaWtlIiwiaUxpa2UiLCJub3RJTGlrZSIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInN1YnN0cmluZyIsInJlZ2V4cCIsIm5vdFJlZ2V4cCIsImlSZWdleHAiLCJub3RJUmVnZXhwIiwiYmV0d2VlbiIsIm5vdEJldHdlZW4iLCJvdmVybGFwIiwiY29udGFpbnMiLCJjb250YWluZWQiLCJhZGphY2VudCIsInN0cmljdExlZnQiLCJzdHJpY3RSaWdodCIsIm5vRXh0ZW5kUmlnaHQiLCJub0V4dGVuZExlZnQiLCJhbmQiLCJvciIsImFueSIsImFsbCIsInZhbHVlcyIsImNvbCIsInBsYWNlaG9sZGVyIiwiam9pbiIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE1BQU1BLEVBQUUsR0FBRztBQUNUQyxFQUFBQSxFQUFFLEVBQUVDLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLElBQVgsQ0FESztBQUVUQyxFQUFBQSxFQUFFLEVBQUVGLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLElBQVgsQ0FGSztBQUdURSxFQUFBQSxHQUFHLEVBQUVILE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLEtBQVgsQ0FISTtBQUlURyxFQUFBQSxFQUFFLEVBQUVK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QUFNLEVBQUVwQyxNQUFNLENBQUNDLEdBQVAsQ0FBVyxRQUFYLENBcENDO0FBcUNUb0MsRUFBQUEsR0FBRyxFQUFFckMsTUFBTSxDQUFDQyxHQUFQLENBQVcsS0FBWCxDQXJDSTtBQXNDVHFDLEVBQUFBLFdBQVcsRUFBRXRDLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLGFBQVgsQ0F0Q0o7QUF1Q1RzQyxFQUFBQSxJQUFJLEVBQUV2QyxNQUFNLENBQUNDLEdBQVAsQ0FBVyxNQUFYO0FBdkNHLENBQVg7QUEwQ0F1QyxNQUFNLENBQUNDLE9BQVAsR0FBaUIzQyxFQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIlxuJ3VzZSBzdHJpY3QnO1xuLyoqXG4gKiBPcGVyYXRvciBzeW1ib2xzIHRvIGJlIHVzZWQgd2hlbiBxdWVyeWluZyBkYXRhXG4gKlxuICogQHNlZSB7QGxpbmsgTW9kZWwjd2hlcmV9XG4gKlxuICogQHByb3BlcnR5IGVxXG4gKiBAcHJvcGVydHkgbmVcbiAqIEBwcm9wZXJ0eSBndGVcbiAqIEBwcm9wZXJ0eSBndFxuICogQHByb3BlcnR5IGx0ZVxuICogQHByb3BlcnR5IGx0XG4gKiBAcHJvcGVydHkgbm90XG4gKiBAcHJvcGVydHkgaXNcbiAqIEBwcm9wZXJ0eSBpblxuICogQHByb3BlcnR5IG5vdEluXG4gKiBAcHJvcGVydHkgbGlrZVxuICogQHByb3BlcnR5IG5vdExpa2VcbiAqIEBwcm9wZXJ0eSBpTGlrZVxuICogQHByb3BlcnR5IG5vdElMaWtlXG4gKiBAcHJvcGVydHkgc3RhcnRzV2l0aFxuICogQHByb3BlcnR5IGVuZHNXaXRoXG4gKiBAcHJvcGVydHkgc3Vic3RyaW5nXG4gKiBAcHJvcGVydHkgcmVnZXhwXG4gKiBAcHJvcGVydHkgbm90UmVnZXhwXG4gKiBAcHJvcGVydHkgaVJlZ2V4cFxuICogQHByb3BlcnR5IG5vdElSZWdleHBcbiAqIEBwcm9wZXJ0eSBiZXR3ZWVuXG4gKiBAcHJvcGVydHkgbm90QmV0d2VlblxuICogQHByb3BlcnR5IG92ZXJsYXBcbiAqIEBwcm9wZXJ0eSBjb250YWluc1xuICogQHByb3BlcnR5IGNvbnRhaW5lZFxuICogQHByb3BlcnR5IGFkamFjZW50XG4gKiBAcHJvcGVydHkgc3RyaWN0TGVmdFxuICogQHByb3BlcnR5IHN0cmljdFJpZ2h0XG4gKiBAcHJvcGVydHkgbm9FeHRlbmRSaWdodFxuICogQHByb3BlcnR5IG5vRXh0ZW5kTGVmdFxuICogQHByb3BlcnR5IGFuZFxuICogQHByb3BlcnR5IG9yXG4gKiBAcHJvcGVydHkgYW55XG4gKiBAcHJvcGVydHkgYWxsXG4gKiBAcHJvcGVydHkgdmFsdWVzXG4gKiBAcHJvcGVydHkgY29sXG4gKiBAcHJvcGVydHkgcGxhY2Vob2xkZXJcbiAqIEBwcm9wZXJ0eSBqb2luXG4gKi9cbmNvbnN0IE9wID0ge1xuICBlcTogU3ltYm9sLmZvcignZXEnKSxcbiAgbmU6IFN5bWJvbC5mb3IoJ25lJyksXG4gIGd0ZTogU3ltYm9sLmZvcignZ3RlJyksXG4gIGd0OiBTeW1ib2wuZm9yKCdndCcpLFxuICBsdGU6IFN5bWJvbC5mb3IoJ2x0ZScpLFxuICBsdDogU3ltYm9sLmZvcignbHQnKSxcbiAgbm90OiBTeW1ib2wuZm9yKCdub3QnKSxcbiAgaXM6IFN5bWJvbC5mb3IoJ2lzJyksXG4gIGluOiBTeW1ib2wuZm9yKCdpbicpLFxuICBub3RJbjogU3ltYm9sLmZvcignbm90SW4nKSxcbiAgbGlrZTogU3ltYm9sLmZvcignbGlrZScpLFxuICBub3RMaWtlOiBTeW1ib2wuZm9yKCdub3RMaWtlJyksXG4gIGlMaWtlOiBTeW1ib2wuZm9yKCdpTGlrZScpLFxuICBub3RJTGlrZTogU3ltYm9sLmZvcignbm90SUxpa2UnKSxcbiAgc3RhcnRzV2l0aDogU3ltYm9sLmZvcignc3RhcnRzV2l0aCcpLFxuICBlbmRzV2l0aDogU3ltYm9sLmZvcignZW5kc1dpdGgnKSxcbiAgc3Vic3RyaW5nOiBTeW1ib2wuZm9yKCdzdWJzdHJpbmcnKSxcbiAgcmVnZXhwOiBTeW1ib2wuZm9yKCdyZWdleHAnKSxcbiAgbm90UmVnZXhwOiBTeW1ib2wuZm9yKCdub3RSZWdleHAnKSxcbiAgaVJlZ2V4cDogU3ltYm9sLmZvcignaVJlZ2V4cCcpLFxuICBub3RJUmVnZXhwOiBTeW1ib2wuZm9yKCdub3RJUmVnZXhwJyksXG4gIGJldHdlZW46IFN5bWJvbC5mb3IoJ2JldHdlZW4nKSxcbiAgbm90QmV0d2VlbjogU3ltYm9sLmZvcignbm90QmV0d2VlbicpLFxuICBvdmVybGFwOiBTeW1ib2wuZm9yKCdvdmVybGFwJyksXG4gIGNvbnRhaW5zOiBTeW1ib2wuZm9yKCdjb250YWlucycpLFxuICBjb250YWluZWQ6IFN5bWJvbC5mb3IoJ2NvbnRhaW5lZCcpLFxuICBhZGphY2VudDogU3ltYm9sLmZvcignYWRqYWNlbnQnKSxcbiAgc3RyaWN0TGVmdDogU3ltYm9sLmZvcignc3RyaWN0TGVmdCcpLFxuICBzdHJpY3RSaWdodDogU3ltYm9sLmZvcignc3RyaWN0UmlnaHQnKSxcbiAgbm9FeHRlbmRSaWdodDogU3ltYm9sLmZvcignbm9FeHRlbmRSaWdodCcpLFxuICBub0V4dGVuZExlZnQ6IFN5bWJvbC5mb3IoJ25vRXh0ZW5kTGVmdCcpLFxuICBhbmQ6IFN5bWJvbC5mb3IoJ2FuZCcpLFxuICBvcjogU3ltYm9sLmZvcignb3InKSxcbiAgYW55OiBTeW1ib2wuZm9yKCdhbnknKSxcbiAgYWxsOiBTeW1ib2wuZm9yKCdhbGwnKSxcbiAgdmFsdWVzOiBTeW1ib2wuZm9yKCd2YWx1ZXMnKSxcbiAgY29sOiBTeW1ib2wuZm9yKCdjb2wnKSxcbiAgcGxhY2Vob2xkZXI6IFN5bWJvbC5mb3IoJ3BsYWNlaG9sZGVyJyksXG4gIGpvaW46IFN5bWJvbC5mb3IoJ2pvaW4nKVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPcDtcbiJdfQ== \ No newline at end of file diff --git a/dist/promise.js b/dist/promise.js index 30458c7..2b80075 100644 --- a/dist/promise.js +++ b/dist/promise.js @@ -5,4 +5,4 @@ const Promise = require('bluebird').getNewLibraryCopy(); module.exports = Promise; module.exports.Promise = Promise; module.exports.default = Promise; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9wcm9taXNlLmpzIl0sIm5hbWVzIjpbIlByb21pc2UiLCJyZXF1aXJlIiwiZ2V0TmV3TGlicmFyeUNvcHkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsT0FBTyxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUFQLENBQW9CQyxpQkFBcEIsRUFBaEI7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQkosT0FBakI7QUFDQUcsTUFBTSxDQUFDQyxPQUFQLENBQWVKLE9BQWYsR0FBeUJBLE9BQXpCO0FBQ0FHLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCTCxPQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCdibHVlYmlyZCcpLmdldE5ld0xpYnJhcnlDb3B5KCk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XHJcbm1vZHVsZS5leHBvcnRzLlByb21pc2UgPSBQcm9taXNlO1xyXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gUHJvbWlzZTtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9wcm9taXNlLmpzIl0sIm5hbWVzIjpbIlByb21pc2UiLCJyZXF1aXJlIiwiZ2V0TmV3TGlicmFyeUNvcHkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsT0FBTyxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUFQLENBQW9CQyxpQkFBcEIsRUFBaEI7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQkosT0FBakI7QUFDQUcsTUFBTSxDQUFDQyxPQUFQLENBQWVKLE9BQWYsR0FBeUJBLE9BQXpCO0FBQ0FHLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCTCxPQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ2JsdWViaXJkJykuZ2V0TmV3TGlicmFyeUNvcHkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlO1xubW9kdWxlLmV4cG9ydHMuUHJvbWlzZSA9IFByb21pc2U7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gUHJvbWlzZTtcbiJdfQ== \ No newline at end of file diff --git a/dist/query-interface.js b/dist/query-interface.js index 1f586b3..cdd7435 100644 --- a/dist/query-interface.js +++ b/dist/query-interface.js @@ -28,9 +28,7 @@ const Op = require('./operators'); */ -let QueryInterface = -/*#__PURE__*/ -function () { +let QueryInterface = /*#__PURE__*/function () { function QueryInterface(sequelize) { _classCallCheck(this, QueryInterface); @@ -1507,4 +1505,4 @@ function () { module.exports = QueryInterface; module.exports.QueryInterface = QueryInterface; module.exports.default = QueryInterface; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9xdWVyeS1pbnRlcmZhY2UuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIkRhdGFUeXBlcyIsIlNRTGl0ZVF1ZXJ5SW50ZXJmYWNlIiwiVHJhbnNhY3Rpb24iLCJQcm9taXNlIiwiUXVlcnlUeXBlcyIsIk9wIiwiUXVlcnlJbnRlcmZhY2UiLCJzZXF1ZWxpemUiLCJRdWVyeUdlbmVyYXRvciIsImRpYWxlY3QiLCJkYXRhYmFzZSIsIm9wdGlvbnMiLCJzcWwiLCJjcmVhdGVEYXRhYmFzZVF1ZXJ5IiwicXVlcnkiLCJkcm9wRGF0YWJhc2VRdWVyeSIsInNjaGVtYSIsImNyZWF0ZVNjaGVtYSIsImRyb3BTY2hlbWEiLCJfZGlhbGVjdCIsInN1cHBvcnRzIiwic2NoZW1hcyIsImRyb3AiLCJzaG93QWxsU2NoZW1hcyIsIm1hcCIsInNjaGVtYU5hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJyYXciLCJ0eXBlIiwiU0VMRUNUIiwic2hvd1NjaGVtYXNTcWwiLCJzaG93U2NoZW1hc1F1ZXJ5IiwidGhlbiIsInNjaGVtYU5hbWVzIiwiZmxhdHRlbiIsInZhbHVlIiwic2NoZW1hX25hbWUiLCJ2ZXJzaW9uUXVlcnkiLCJWRVJTSU9OIiwidGFibGVOYW1lIiwiYXR0cmlidXRlcyIsIm1vZGVsIiwicHJvbWlzZSIsImNsb25lIiwidW5pcXVlS2V5cyIsImZvck93biIsInVuaXF1ZUtleSIsImN1c3RvbUluZGV4IiwidW5kZWZpbmVkIiwibWFwVmFsdWVzIiwiYXR0cmlidXRlIiwibm9ybWFsaXplQXR0cmlidXRlIiwiUG9zdGdyZXNRdWVyeUludGVyZmFjZSIsImVuc3VyZUVudW1zIiwicmVzb2x2ZSIsIl9zY2hlbWEiLCJhZGRTY2hlbWEiLCJhdHRyaWJ1dGVzVG9TUUwiLCJ0YWJsZSIsImNvbnRleHQiLCJjcmVhdGVUYWJsZVF1ZXJ5IiwiY2FzY2FkZSIsImZvcmNlIiwiZHJvcFRhYmxlUXVlcnkiLCJwcm9taXNlcyIsImluc3RhbmNlVGFibGUiLCJtb2RlbE1hbmFnZXIiLCJnZXRNb2RlbCIsImdldFRhYmxlTmFtZSIsImtleXMiLCJyYXdBdHRyaWJ1dGVzIiwia2V5TGVuIiwibGVuZ3RoIiwiaSIsIkVOVU0iLCJwZ0VudW1Ecm9wIiwic3VwcG9ydHNTZWFyY2hQYXRoIiwicHVzaCIsImFsbCIsImdldCIsInNraXAiLCJkcm9wQWxsVGFibGVzIiwidGFibGVOYW1lcyIsImVhY2giLCJpbmNsdWRlcyIsImRyb3BUYWJsZSIsInNob3dBbGxUYWJsZXMiLCJyZXN1bHQiLCJmb3JlaWduS2V5c0FyZUVuYWJsZWQiLCJmb3JlaWduX2tleXMiLCJnZXRGb3JlaWduS2V5c0ZvclRhYmxlcyIsImZvcmVpZ25LZXlzIiwicXVlcmllcyIsImZvckVhY2giLCJub3JtYWxpemVkVGFibGVOYW1lIiwiaXNPYmplY3QiLCJmb3JlaWduS2V5IiwiZHJvcEZvcmVpZ25LZXlRdWVyeSIsInEiLCJlbnVtTmFtZSIsImdldERpYWxlY3QiLCJwZ0VzY2FwZUFuZFF1b3RlIiwicGdMaXN0RW51bXMiLCJlbnVtX25hbWUiLCJwbGFpbiIsImJlZm9yZSIsImFmdGVyIiwicmVuYW1lVGFibGVRdWVyeSIsIlNIT1dUQUJMRVMiLCJzaG93VGFibGVzU3FsIiwic2hvd1RhYmxlc1F1ZXJ5IiwiY29uZmlnIiwic2NoZW1hRGVsaW1pdGVyIiwiZGVzY3JpYmVUYWJsZVF1ZXJ5IiwiREVTQ1JJQkUiLCJkYXRhIiwiaXNFbXB0eSIsIkVycm9yIiwiY2F0Y2giLCJlIiwib3JpZ2luYWwiLCJjb2RlIiwia2V5IiwiYWRkQ29sdW1uUXVlcnkiLCJhdHRyaWJ1dGVOYW1lIiwicmVtb3ZlQ29sdW1uIiwicmVtb3ZlQ29sdW1uUXVlcnkiLCJkYXRhVHlwZU9yT3B0aW9ucyIsInZhbHVlcyIsImFsbG93TnVsbCIsImNoYW5nZUNvbHVtbiIsImNoYW5nZUNvbHVtblF1ZXJ5IiwiYXR0ck5hbWVCZWZvcmUiLCJhdHRyTmFtZUFmdGVyIiwiZGVzY3JpYmVUYWJsZSIsIl9vcHRpb25zIiwiZGVmYXVsdFZhbHVlIiwicmVuYW1lQ29sdW1uIiwicmVuYW1lQ29sdW1uUXVlcnkiLCJyYXdUYWJsZW5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJmaWVsZHMiLCJjbG9uZURlZXAiLCJhZGRJbmRleFF1ZXJ5Iiwic2hvd0luZGV4ZXNRdWVyeSIsIlNIT1dJTkRFWEVTIiwiRk9SRUlHTktFWVMiLCJnZXRGb3JlaWduS2V5c1F1ZXJ5IiwicmVzdWx0cyIsInIiLCJjb25zdHJhaW50X25hbWUiLCJmaWx0ZXIiLCJpZGVudGl0eSIsInF1ZXJ5T3B0aW9ucyIsImNhdGFsb2dOYW1lIiwiZ2V0Rm9yZWlnbktleVJlZmVyZW5jZXNGb3JUYWJsZSIsImluZGV4TmFtZU9yQXR0cmlidXRlcyIsInJlbW92ZUluZGV4UXVlcnkiLCJuYW1lIiwiYWRkQ29uc3RyYWludCIsImFkZENvbnN0cmFpbnRRdWVyeSIsImNvbnN0cmFpbnROYW1lIiwic2hvd0NvbnN0cmFpbnRzUXVlcnkiLCJTSE9XQ09OU1RSQUlOVFMiLCJyZW1vdmVDb25zdHJhaW50IiwicmVtb3ZlQ29uc3RyYWludFF1ZXJ5IiwiaW5zdGFuY2UiLCJoYXNUcmlnZ2VyIiwiY29uc3RydWN0b3IiLCJpbnNlcnRRdWVyeSIsIklOU0VSVCIsImlzTmV3UmVjb3JkIiwiaW5zZXJ0VmFsdWVzIiwidXBkYXRlVmFsdWVzIiwid2hlcmUiLCJ3aGVyZXMiLCJpbmRleGVzIiwiaW5kZXhGaWVsZHMiLCJpc1doZXJlRW1wdHkiLCJfaW5kZXhlcyIsInVuaXF1ZSIsImZpZWxkIiwiaXNQbGFpbk9iamVjdCIsImluZGV4IiwiaW50ZXJzZWN0aW9uIiwib3IiLCJVUFNFUlQiLCJ1cHNlcnRRdWVyeSIsInJlY29yZHMiLCJidWxrSW5zZXJ0UXVlcnkiLCJpZGVudGlmaWVyIiwiX21vZGVsT3B0aW9ucyIsInVwZGF0ZVF1ZXJ5IiwiVVBEQVRFIiwiZmluZCIsIm1vZGVscyIsIkJVTEtVUERBVEUiLCJjYXNjYWRlcyIsImRlbGV0ZVF1ZXJ5IiwiYXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb24iLCJvbkRlbGV0ZSIsInRvTG93ZXJDYXNlIiwidXNlSG9va3MiLCJhY2Nlc3NvcnMiLCJpbnN0YW5jZXMiLCJkZXN0cm95IiwiZGVmYXVsdHMiLCJsaW1pdCIsInRydW5jYXRlIiwidHJ1bmNhdGVUYWJsZVF1ZXJ5Iiwib3B0aW9uc0FyZyIsInNlbGVjdFF1ZXJ5IiwiYXJpdGhtZXRpY1F1ZXJ5IiwiYXR0cmlidXRlU2VsZWN0b3IiLCJNb2RlbCIsImRhdGFUeXBlIiwiREVDSU1BTCIsIkZMT0FUIiwicGFyc2VGbG9hdCIsIklOVEVHRVIiLCJCSUdJTlQiLCJwYXJzZUludCIsIkRBVEUiLCJEYXRlIiwidHJpZ2dlck5hbWUiLCJ0aW1pbmdUeXBlIiwiZmlyZU9uQXJyYXkiLCJmdW5jdGlvbk5hbWUiLCJmdW5jdGlvblBhcmFtcyIsIm9wdGlvbnNBcnJheSIsImNyZWF0ZVRyaWdnZXIiLCJkcm9wVHJpZ2dlciIsIm9sZFRyaWdnZXJOYW1lIiwibmV3VHJpZ2dlck5hbWUiLCJyZW5hbWVUcmlnZ2VyIiwicGFyYW1zIiwicmV0dXJuVHlwZSIsImxhbmd1YWdlIiwiYm9keSIsImNyZWF0ZUZ1bmN0aW9uIiwiZHJvcEZ1bmN0aW9uIiwib2xkRnVuY3Rpb25OYW1lIiwibmV3RnVuY3Rpb25OYW1lIiwicmVuYW1lRnVuY3Rpb24iLCJxdW90ZUlkZW50aWZpZXIiLCJxdW90ZVRhYmxlIiwiaWRlbnRpZmllcnMiLCJxdW90ZUlkZW50aWZpZXJzIiwiZXNjYXBlIiwidHJhbnNhY3Rpb24iLCJwYXJlbnQiLCJzZXRJc29sYXRpb25MZXZlbFF1ZXJ5Iiwic3RhcnRUcmFuc2FjdGlvblF1ZXJ5IiwiZGVmZXJDb25zdHJhaW50c1F1ZXJ5IiwiY29tcGxldGVzVHJhbnNhY3Rpb24iLCJjb21taXRUcmFuc2FjdGlvblF1ZXJ5IiwiZmluaXNoZWQiLCJyb2xsYmFja1RyYW5zYWN0aW9uUXVlcnkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUEsTUFBTUEs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OlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5cclxuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XHJcbmNvbnN0IERhdGFUeXBlcyA9IHJlcXVpcmUoJy4vZGF0YS10eXBlcycpO1xyXG5jb25zdCBTUUxpdGVRdWVyeUludGVyZmFjZSA9IHJlcXVpcmUoJy4vZGlhbGVjdHMvc3FsaXRlL3F1ZXJ5LWludGVyZmFjZScpO1xyXG5jb25zdCBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vdHJhbnNhY3Rpb24nKTtcclxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJy4vcHJvbWlzZScpO1xyXG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZSgnLi9xdWVyeS10eXBlcycpO1xyXG5jb25zdCBPcCA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzJyk7XHJcblxyXG4vKipcclxuICogVGhlIGludGVyZmFjZSB0aGF0IFNlcXVlbGl6ZSB1c2VzIHRvIHRhbGsgdG8gYWxsIGRhdGFiYXNlc1xyXG4gKlxyXG4gKiBAY2xhc3MgUXVlcnlJbnRlcmZhY2VcclxuICovXHJcbmNsYXNzIFF1ZXJ5SW50ZXJmYWNlIHtcclxuICBjb25zdHJ1Y3RvcihzZXF1ZWxpemUpIHtcclxuICAgIHRoaXMuc2VxdWVsaXplID0gc2VxdWVsaXplO1xyXG4gICAgdGhpcy5RdWVyeUdlbmVyYXRvciA9IHRoaXMuc2VxdWVsaXplLmRpYWxlY3QuUXVlcnlHZW5lcmF0b3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBkYXRhYmFzZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlICBEYXRhYmFzZSBuYW1lIHRvIGNyZWF0ZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gUXVlcnkgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jaGFyc2V0XSBEYXRhYmFzZSBkZWZhdWx0IGNoYXJhY3RlciBzZXQsIE1ZU1FMIG9ubHlcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29sbGF0ZV0gRGF0YWJhc2UgZGVmYXVsdCBjb2xsYXRpb25cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZW5jb2RpbmddIERhdGFiYXNlIGRlZmF1bHQgY2hhcmFjdGVyIHNldCwgUG9zdGdyZVNRTCBvbmx5XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmN0eXBlXSBEYXRhYmFzZSBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24sIFBvc3RncmVTUUwgb25seVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50ZW1wbGF0ZV0gVGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlIGZyb20gd2hpY2ggdG8gY3JlYXRlIHRoZSBuZXcgZGF0YWJhc2UsIFBvc3RncmVTUUwgb25seVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgY3JlYXRlRGF0YWJhc2UoZGF0YWJhc2UsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5jcmVhdGVEYXRhYmFzZVF1ZXJ5KGRhdGFiYXNlLCBvcHRpb25zKTtcclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRHJvcCBhIGRhdGFiYXNlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YWJhc2UgIERhdGFiYXNlIG5hbWUgdG8gZHJvcFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gUXVlcnkgb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgZHJvcERhdGFiYXNlKGRhdGFiYXNlLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuZHJvcERhdGFiYXNlUXVlcnkoZGF0YWJhc2UpO1xyXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBzY2hlbWFcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWEgICAgU2NoZW1hIG5hbWUgdG8gY3JlYXRlXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBRdWVyeSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBjcmVhdGVTY2hlbWEoc2NoZW1hLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuY3JlYXRlU2NoZW1hKHNjaGVtYSk7XHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERyb3AgYSBzY2hlbWFcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWEgICAgU2NoZW1hIG5hbWUgdG8gZHJvcFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gUXVlcnkgb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgZHJvcFNjaGVtYShzY2hlbWEsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5kcm9wU2NoZW1hKHNjaGVtYSk7XHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERyb3AgYWxsIHNjaGVtYXNcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gUXVlcnkgb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgZHJvcEFsbFNjaGVtYXMob3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgaWYgKCF0aGlzLlF1ZXJ5R2VuZXJhdG9yLl9kaWFsZWN0LnN1cHBvcnRzLnNjaGVtYXMpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLmRyb3Aob3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zaG93QWxsU2NoZW1hcyhvcHRpb25zKS5tYXAoc2NoZW1hTmFtZSA9PiB0aGlzLmRyb3BTY2hlbWEoc2NoZW1hTmFtZSwgb3B0aW9ucykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhbGwgc2NoZW1hc1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBRdWVyeSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheT59XHJcbiAgICovXHJcbiAgc2hvd0FsbFNjaGVtYXMob3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcclxuICAgICAgcmF3OiB0cnVlLFxyXG4gICAgICB0eXBlOiB0aGlzLnNlcXVlbGl6ZS5RdWVyeVR5cGVzLlNFTEVDVFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2hvd1NjaGVtYXNTcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnNob3dTY2hlbWFzUXVlcnkob3B0aW9ucyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNob3dTY2hlbWFzU3FsLCBvcHRpb25zKS50aGVuKHNjaGVtYU5hbWVzID0+IF8uZmxhdHRlbihcclxuICAgICAgc2NoZW1hTmFtZXMubWFwKHZhbHVlID0+IHZhbHVlLnNjaGVtYV9uYW1lID8gdmFsdWUuc2NoZW1hX25hbWUgOiB2YWx1ZSlcclxuICAgICkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGRhdGFiYXNlIHZlcnNpb25cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICBbb3B0aW9uc10gICAgICBRdWVyeSBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtRdWVyeVR5cGV9IFtvcHRpb25zLnR5cGVdIFF1ZXJ5IHR5cGVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgZGF0YWJhc2VWZXJzaW9uKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShcclxuICAgICAgdGhpcy5RdWVyeUdlbmVyYXRvci52ZXJzaW9uUXVlcnkoKSxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyB0eXBlOiBRdWVyeVR5cGVzLlZFUlNJT04gfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSB0YWJsZSB3aXRoIGdpdmVuIHNldCBvZiBhdHRyaWJ1dGVzXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHF1ZXJ5SW50ZXJmYWNlLmNyZWF0ZVRhYmxlKFxyXG4gICAqICAgJ25hbWVPZlRoZU5ld1RhYmxlJyxcclxuICAgKiAgIHtcclxuICAgKiAgICAgaWQ6IHtcclxuICAgKiAgICAgICB0eXBlOiBTZXF1ZWxpemUuSU5URUdFUixcclxuICAgKiAgICAgICBwcmltYXJ5S2V5OiB0cnVlLFxyXG4gICAqICAgICAgIGF1dG9JbmNyZW1lbnQ6IHRydWVcclxuICAgKiAgICAgfSxcclxuICAgKiAgICAgY3JlYXRlZEF0OiB7XHJcbiAgICogICAgICAgdHlwZTogU2VxdWVsaXplLkRBVEVcclxuICAgKiAgICAgfSxcclxuICAgKiAgICAgdXBkYXRlZEF0OiB7XHJcbiAgICogICAgICAgdHlwZTogU2VxdWVsaXplLkRBVEVcclxuICAgKiAgICAgfSxcclxuICAgKiAgICAgYXR0cjE6IFNlcXVlbGl6ZS5TVFJJTkcsXHJcbiAgICogICAgIGF0dHIyOiBTZXF1ZWxpemUuSU5URUdFUixcclxuICAgKiAgICAgYXR0cjM6IHtcclxuICAgKiAgICAgICB0eXBlOiBTZXF1ZWxpemUuQk9PTEVBTixcclxuICAgKiAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxyXG4gICAqICAgICAgIGFsbG93TnVsbDogZmFsc2VcclxuICAgKiAgICAgfSxcclxuICAgKiAgICAgLy9mb3JlaWduIGtleSB1c2FnZVxyXG4gICAqICAgICBhdHRyNDoge1xyXG4gICAqICAgICAgIHR5cGU6IFNlcXVlbGl6ZS5JTlRFR0VSLFxyXG4gICAqICAgICAgIHJlZmVyZW5jZXM6IHtcclxuICAgKiAgICAgICAgIG1vZGVsOiAnYW5vdGhlcl90YWJsZV9uYW1lJyxcclxuICAgKiAgICAgICAgIGtleTogJ2lkJ1xyXG4gICAqICAgICAgIH0sXHJcbiAgICogICAgICAgb25VcGRhdGU6ICdjYXNjYWRlJyxcclxuICAgKiAgICAgICBvbkRlbGV0ZTogJ2Nhc2NhZGUnXHJcbiAgICogICAgIH1cclxuICAgKiAgIH0sXHJcbiAgICogICB7XHJcbiAgICogICAgIGVuZ2luZTogJ01ZSVNBTScsICAgIC8vIGRlZmF1bHQ6ICdJbm5vREInXHJcbiAgICogICAgIGNoYXJzZXQ6ICdsYXRpbjEnLCAgIC8vIGRlZmF1bHQ6IG51bGxcclxuICAgKiAgICAgc2NoZW1hOiAncHVibGljJywgICAgLy8gZGVmYXVsdDogcHVibGljLCBQb3N0Z3JlU1FMIG9ubHkuXHJcbiAgICogICAgIGNvbW1lbnQ6ICdteSB0YWJsZScsIC8vIGNvbW1lbnQgZm9yIHRhYmxlXHJcbiAgICogICAgIGNvbGxhdGU6ICdsYXRpbjFfZGFuaXNoX2NpJyAvLyBjb2xsYXRpb24sIE1ZU1FMIG9ubHlcclxuICAgKiAgIH1cclxuICAgKiApXHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lICBOYW1lIG9mIHRhYmxlIHRvIGNyZWF0ZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzIE9iamVjdCByZXByZXNlbnRpbmcgYSBsaXN0IG9mIHRhYmxlIGF0dHJpYnV0ZXMgdG8gY3JlYXRlXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBjcmVhdGUgdGFibGUgYW5kIHF1ZXJ5IG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge01vZGVsfSAgW21vZGVsXSBtb2RlbCBjbGFzc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgY3JlYXRlVGFibGUodGFibGVOYW1lLCBhdHRyaWJ1dGVzLCBvcHRpb25zLCBtb2RlbCkge1xyXG4gICAgbGV0IHNxbCA9ICcnO1xyXG4gICAgbGV0IHByb21pc2U7XHJcblxyXG4gICAgb3B0aW9ucyA9IF8uY2xvbmUob3B0aW9ucykgfHwge307XHJcblxyXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bmlxdWVLZXlzKSB7XHJcbiAgICAgIF8uZm9yT3duKG9wdGlvbnMudW5pcXVlS2V5cywgdW5pcXVlS2V5ID0+IHtcclxuICAgICAgICBpZiAodW5pcXVlS2V5LmN1c3RvbUluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHVuaXF1ZUtleS5jdXN0b21JbmRleCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobW9kZWwpIHtcclxuICAgICAgb3B0aW9ucy51bmlxdWVLZXlzID0gb3B0aW9ucy51bmlxdWVLZXlzIHx8IG1vZGVsLnVuaXF1ZUtleXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXR0cmlidXRlcyA9IF8ubWFwVmFsdWVzKFxyXG4gICAgICBhdHRyaWJ1dGVzLFxyXG4gICAgICBhdHRyaWJ1dGUgPT4gdGhpcy5zZXF1ZWxpemUubm9ybWFsaXplQXR0cmlidXRlKGF0dHJpYnV0ZSlcclxuICAgICk7XHJcblxyXG4gICAgLy8gUG9zdGdyZXMgcmVxdWlyZXMgc3BlY2lhbCBTUUwgY29tbWFuZHMgZm9yIEVOVU0vRU5VTVtdXHJcbiAgICBpZiAodGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0ID09PSAncG9zdGdyZXMnKSB7XHJcbiAgICAgIHByb21pc2UgPSBQb3N0Z3Jlc1F1ZXJ5SW50ZXJmYWNlLmVuc3VyZUVudW1zKHRoaXMsIHRhYmxlTmFtZSwgYXR0cmlidXRlcywgb3B0aW9ucywgbW9kZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgIXRhYmxlTmFtZS5zY2hlbWEgJiZcclxuICAgICAgKG9wdGlvbnMuc2NoZW1hIHx8ICEhbW9kZWwgJiYgbW9kZWwuX3NjaGVtYSlcclxuICAgICkge1xyXG4gICAgICB0YWJsZU5hbWUgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmFkZFNjaGVtYSh7XHJcbiAgICAgICAgdGFibGVOYW1lLFxyXG4gICAgICAgIF9zY2hlbWE6ICEhbW9kZWwgJiYgbW9kZWwuX3NjaGVtYSB8fCBvcHRpb25zLnNjaGVtYVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhdHRyaWJ1dGVzID0gdGhpcy5RdWVyeUdlbmVyYXRvci5hdHRyaWJ1dGVzVG9TUUwoYXR0cmlidXRlcywgeyB0YWJsZTogdGFibGVOYW1lLCBjb250ZXh0OiAnY3JlYXRlVGFibGUnIH0pO1xyXG4gICAgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5jcmVhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSwgYXR0cmlidXRlcywgb3B0aW9ucyk7XHJcblxyXG4gICAgcmV0dXJuIHByb21pc2UudGhlbigoKSA9PiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERyb3AgYSB0YWJsZSBmcm9tIGRhdGFiYXNlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIFRhYmxlIG5hbWUgdG8gZHJvcFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICAgUXVlcnkgb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgZHJvcFRhYmxlKHRhYmxlTmFtZSwgb3B0aW9ucykge1xyXG4gICAgLy8gaWYgd2UncmUgZm9yY2luZyB3ZSBzaG91bGQgYmUgY2FzY2FkaW5nIHVubGVzcyBleHBsaWNpdGx5IHN0YXRlZCBvdGhlcndpc2VcclxuICAgIG9wdGlvbnMgPSBfLmNsb25lKG9wdGlvbnMpIHx8IHt9O1xyXG4gICAgb3B0aW9ucy5jYXNjYWRlID0gb3B0aW9ucy5jYXNjYWRlIHx8IG9wdGlvbnMuZm9yY2UgfHwgZmFsc2U7XHJcblxyXG4gICAgbGV0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuZHJvcFRhYmxlUXVlcnkodGFibGVOYW1lLCBvcHRpb25zKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKS50aGVuKCgpID0+IHtcclxuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcclxuXHJcbiAgICAgIC8vIFNpbmNlIHBvc3RncmVzIGhhcyBhIHNwZWNpYWwgY2FzZSBmb3IgZW51bXMsIHdlIHNob3VsZCBkcm9wIHRoZSByZWxhdGVkXHJcbiAgICAgIC8vIGVudW0gdHlwZSB3aXRoaW4gdGhlIHRhYmxlIGFuZCBhdHRyaWJ1dGVcclxuICAgICAgaWYgKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCA9PT0gJ3Bvc3RncmVzJykge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlVGFibGUgPSB0aGlzLnNlcXVlbGl6ZS5tb2RlbE1hbmFnZXIuZ2V0TW9kZWwodGFibGVOYW1lLCB7IGF0dHJpYnV0ZTogJ3RhYmxlTmFtZScgfSk7XHJcblxyXG4gICAgICAgIGlmIChpbnN0YW5jZVRhYmxlKSB7XHJcbiAgICAgICAgICBjb25zdCBnZXRUYWJsZU5hbWUgPSAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuc2NoZW1hIHx8IG9wdGlvbnMuc2NoZW1hID09PSAncHVibGljJyA/ICcnIDogYCR7b3B0aW9ucy5zY2hlbWF9X2ApICsgdGFibGVOYW1lO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbnN0YW5jZVRhYmxlLnJhd0F0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgY29uc3Qga2V5TGVuID0ga2V5cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlMZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VUYWJsZS5yYXdBdHRyaWJ1dGVzW2tleXNbaV1dLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuRU5VTSkge1xyXG4gICAgICAgICAgICAgIHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IucGdFbnVtRHJvcChnZXRUYWJsZU5hbWUsIGtleXNbaV0pO1xyXG4gICAgICAgICAgICAgIG9wdGlvbnMuc3VwcG9ydHNTZWFyY2hQYXRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgcmF3OiB0cnVlIH0pKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykuZ2V0KDApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEcm9wIGFsbCB0YWJsZXMgZnJvbSBkYXRhYmFzZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBxdWVyeSBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtBcnJheX0gIFtvcHRpb25zLnNraXBdIExpc3Qgb2YgdGFibGUgdG8gc2tpcFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgZHJvcEFsbFRhYmxlcyhvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIGNvbnN0IHNraXAgPSBvcHRpb25zLnNraXAgfHwgW107XHJcblxyXG4gICAgY29uc3QgZHJvcEFsbFRhYmxlcyA9IHRhYmxlTmFtZXMgPT4gUHJvbWlzZS5lYWNoKHRhYmxlTmFtZXMsIHRhYmxlTmFtZSA9PiB7XHJcbiAgICAgIC8vIGlmIHRhYmxlTmFtZSBpcyBub3QgaW4gdGhlIEFycmF5IG9mIHRhYmxlcyBuYW1lcyB0aGVuIGRvbid0IGRyb3AgaXRcclxuICAgICAgaWYgKCFza2lwLmluY2x1ZGVzKHRhYmxlTmFtZS50YWJsZU5hbWUgfHwgdGFibGVOYW1lKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRyb3BUYWJsZSh0YWJsZU5hbWUsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgY2FzY2FkZTogdHJ1ZSB9KSApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5zaG93QWxsVGFibGVzKG9wdGlvbnMpLnRoZW4odGFibGVOYW1lcyA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QgPT09ICdzcWxpdGUnKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KCdQUkFHTUEgZm9yZWlnbl9rZXlzOycsIG9wdGlvbnMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZvcmVpZ25LZXlzQXJlRW5hYmxlZCA9IHJlc3VsdC5mb3JlaWduX2tleXMgPT09IDE7XHJcblxyXG4gICAgICAgICAgaWYgKGZvcmVpZ25LZXlzQXJlRW5hYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoJ1BSQUdNQSBmb3JlaWduX2tleXMgPSBPRkYnLCBvcHRpb25zKVxyXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IGRyb3BBbGxUYWJsZXModGFibGVOYW1lcykpXHJcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5zZXF1ZWxpemUucXVlcnkoJ1BSQUdNQSBmb3JlaWduX2tleXMgPSBPTicsIG9wdGlvbnMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBkcm9wQWxsVGFibGVzKHRhYmxlTmFtZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEZvcmVpZ25LZXlzRm9yVGFibGVzKHRhYmxlTmFtZXMsIG9wdGlvbnMpLnRoZW4oZm9yZWlnbktleXMgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBbXTtcclxuXHJcbiAgICAgICAgdGFibGVOYW1lcy5mb3JFYWNoKHRhYmxlTmFtZSA9PiB7XHJcbiAgICAgICAgICBsZXQgbm9ybWFsaXplZFRhYmxlTmFtZSA9IHRhYmxlTmFtZTtcclxuICAgICAgICAgIGlmIChfLmlzT2JqZWN0KHRhYmxlTmFtZSkpIHtcclxuICAgICAgICAgICAgbm9ybWFsaXplZFRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZS5zY2hlbWF9LiR7dGFibGVOYW1lLnRhYmxlTmFtZX1gO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZvcmVpZ25LZXlzW25vcm1hbGl6ZWRUYWJsZU5hbWVdLmZvckVhY2goZm9yZWlnbktleSA9PiB7XHJcbiAgICAgICAgICAgIHF1ZXJpZXMucHVzaCh0aGlzLlF1ZXJ5R2VuZXJhdG9yLmRyb3BGb3JlaWduS2V5UXVlcnkodGFibGVOYW1lLCBmb3JlaWduS2V5KSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UuZWFjaChxdWVyaWVzLCBxID0+IHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHEsIG9wdGlvbnMpKVxyXG4gICAgICAgICAgLnRoZW4oKCkgPT4gZHJvcEFsbFRhYmxlcyh0YWJsZU5hbWVzKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEcm9wIHNwZWNpZmllZCBlbnVtIGZyb20gZGF0YWJhc2UgKFBvc3RncmVzIG9ubHkpXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2VudW1OYW1lXSAgRW51bSBuYW1lIHRvIGRyb3BcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBRdWVyeSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGRyb3BFbnVtKGVudW1OYW1lLCBvcHRpb25zKSB7XHJcbiAgICBpZiAodGhpcy5zZXF1ZWxpemUuZ2V0RGlhbGVjdCgpICE9PSAncG9zdGdyZXMnKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoXHJcbiAgICAgIHRoaXMuUXVlcnlHZW5lcmF0b3IucGdFbnVtRHJvcChudWxsLCBudWxsLCB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnBnRXNjYXBlQW5kUXVvdGUoZW51bU5hbWUpKSxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyByYXc6IHRydWUgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEcm9wIGFsbCBlbnVtcyBmcm9tIGRhdGFiYXNlIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgUXVlcnkgb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBkcm9wQWxsRW51bXMob3B0aW9ucykge1xyXG4gICAgaWYgKHRoaXMuc2VxdWVsaXplLmdldERpYWxlY3QoKSAhPT0gJ3Bvc3RncmVzJykge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucGdMaXN0RW51bXMobnVsbCwgb3B0aW9ucykubWFwKHJlc3VsdCA9PiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShcclxuICAgICAgdGhpcy5RdWVyeUdlbmVyYXRvci5wZ0VudW1Ecm9wKG51bGwsIG51bGwsIHRoaXMuUXVlcnlHZW5lcmF0b3IucGdFc2NhcGVBbmRRdW90ZShyZXN1bHQuZW51bV9uYW1lKSksXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgcmF3OiB0cnVlIH0pXHJcbiAgICApKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3QgYWxsIGVudW1zIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0YWJsZU5hbWVdICBUYWJsZSB3aG9zZSBlbnVtIHRvIGxpc3RcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdICAgIFF1ZXJ5IG9wdGlvbnNcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcGdMaXN0RW51bXModGFibGVOYW1lLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IucGdMaXN0RW51bXModGFibGVOYW1lKTtcclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgcGxhaW46IGZhbHNlLCByYXc6IHRydWUsIHR5cGU6IFF1ZXJ5VHlwZXMuU0VMRUNUIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbmFtZSBhIHRhYmxlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmVmb3JlICAgIEN1cnJlbnQgbmFtZSBvZiB0YWJsZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZnRlciAgICAgTmV3IG5hbWUgZnJvbSB0YWJsZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gUXVlcnkgb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgcmVuYW1lVGFibGUoYmVmb3JlLCBhZnRlciwgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnJlbmFtZVRhYmxlUXVlcnkoYmVmb3JlLCBhZnRlcik7XHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbGwgdGFibGVzIGluIGN1cnJlbnQgZGF0YWJhc2VcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICBbb3B0aW9uc10gUXVlcnkgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICBbb3B0aW9ucy5yYXc9dHJ1ZV0gUnVuIHF1ZXJ5IGluIHJhdyBtb2RlXHJcbiAgICogQHBhcmFtIHtRdWVyeVR5cGV9IFtvcHRpb25zLnR5cGU9UXVlcnlUeXBlLlNIT1dUQUJMRV0gcXVlcnkgdHlwZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgc2hvd0FsbFRhYmxlcyhvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xyXG4gICAgICByYXc6IHRydWUsXHJcbiAgICAgIHR5cGU6IFF1ZXJ5VHlwZXMuU0hPV1RBQkxFU1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2hvd1RhYmxlc1NxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3Iuc2hvd1RhYmxlc1F1ZXJ5KHRoaXMuc2VxdWVsaXplLmNvbmZpZy5kYXRhYmFzZSk7XHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc2hvd1RhYmxlc1NxbCwgb3B0aW9ucykudGhlbih0YWJsZU5hbWVzID0+IF8uZmxhdHRlbih0YWJsZU5hbWVzKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXNjcmliZSBhIHRhYmxlIHN0cnVjdHVyZVxyXG4gICAqXHJcbiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhbiBhcnJheSBvZiBoYXNoZXMgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgYXR0cmlidXRlcyBpbiB0aGUgdGFibGUuXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHtcclxuICAgKiAgICBuYW1lOiB7XHJcbiAgICogICAgICB0eXBlOiAgICAgICAgICdWQVJDSEFSKDI1NSknLCAvLyB0aGlzIHdpbGwgYmUgJ0NIQVJBQ1RFUiBWQVJZSU5HJyBmb3IgcGchXHJcbiAgICogICAgICBhbGxvd051bGw6ICAgIHRydWUsXHJcbiAgICogICAgICBkZWZhdWx0VmFsdWU6IG51bGxcclxuICAgKiAgICB9LFxyXG4gICAqICAgIGlzQmV0YU1lbWJlcjoge1xyXG4gICAqICAgICAgdHlwZTogICAgICAgICAnVElOWUlOVCgxKScsIC8vIHRoaXMgd2lsbCBiZSAnQk9PTEVBTicgZm9yIHBnIVxyXG4gICAqICAgICAgYWxsb3dOdWxsOiAgICBmYWxzZSxcclxuICAgKiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcclxuICAgKiAgICB9XHJcbiAgICogfVxyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSB0YWJsZSBuYW1lXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBRdWVyeSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fVxyXG4gICAqL1xyXG4gIGRlc2NyaWJlVGFibGUodGFibGVOYW1lLCBvcHRpb25zKSB7XHJcbiAgICBsZXQgc2NoZW1hID0gbnVsbDtcclxuICAgIGxldCBzY2hlbWFEZWxpbWl0ZXIgPSBudWxsO1xyXG5cclxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgc2NoZW1hID0gb3B0aW9ucztcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwpIHtcclxuICAgICAgc2NoZW1hID0gb3B0aW9ucy5zY2hlbWEgfHwgbnVsbDtcclxuICAgICAgc2NoZW1hRGVsaW1pdGVyID0gb3B0aW9ucy5zY2hlbWFEZWxpbWl0ZXIgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZSA9PT0gJ29iamVjdCcgJiYgdGFibGVOYW1lICE9PSBudWxsKSB7XHJcbiAgICAgIHNjaGVtYSA9IHRhYmxlTmFtZS5zY2hlbWE7XHJcbiAgICAgIHRhYmxlTmFtZSA9IHRhYmxlTmFtZS50YWJsZU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5kZXNjcmliZVRhYmxlUXVlcnkodGFibGVOYW1lLCBzY2hlbWEsIHNjaGVtYURlbGltaXRlcik7XHJcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyB0eXBlOiBRdWVyeVR5cGVzLkRFU0NSSUJFIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgIC8qXHJcbiAgICAgICAqIElmIG5vIGRhdGEgaXMgcmV0dXJuZWQgZnJvbSB0aGUgcXVlcnksIHRoZW4gdGhlIHRhYmxlIG5hbWUgbWF5IGJlIHdyb25nLlxyXG4gICAgICAgKiBRdWVyeSBnZW5lcmF0b3JzIHRoYXQgdXNlIGluZm9ybWF0aW9uX3NjaGVtYSBmb3IgcmV0cmlldmluZyB0YWJsZSBpbmZvIHdpbGwganVzdCByZXR1cm4gYW4gZW1wdHkgcmVzdWx0IHNldCxcclxuICAgICAgICogaXQgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgbGlrZSBidWlsdC1pbnMgZG8gKGUuZy4gREVTQ1JJQkUgb24gTXlTcWwpLlxyXG4gICAgICAgKi9cclxuICAgICAgaWYgKF8uaXNFbXB0eShkYXRhKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGVzY3JpcHRpb24gZm91bmQgZm9yIFwiJHt0YWJsZU5hbWV9XCIgdGFibGUuIENoZWNrIHRoZSB0YWJsZSBuYW1lIGFuZCBzY2hlbWE7IHJlbWVtYmVyLCB0aGV5IF9hcmVfIGNhc2Ugc2Vuc2l0aXZlLmApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICBpZiAoZS5vcmlnaW5hbCAmJiBlLm9yaWdpbmFsLmNvZGUgPT09ICdFUl9OT19TVUNIX1RBQkxFJykge1xyXG4gICAgICAgIHRocm93IEVycm9yKGBObyBkZXNjcmlwdGlvbiBmb3VuZCBmb3IgXCIke3RhYmxlTmFtZX1cIiB0YWJsZS4gQ2hlY2sgdGhlIHRhYmxlIG5hbWUgYW5kIHNjaGVtYTsgcmVtZW1iZXIsIHRoZXkgX2FyZV8gY2FzZSBzZW5zaXRpdmUuYCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBjb2x1bW4gdG8gYSB0YWJsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBxdWVyeUludGVyZmFjZS5hZGRDb2x1bW4oJ3RhYmxlQScsICdjb2x1bW5DJywgU2VxdWVsaXplLlNUUklORywge1xyXG4gICAqICAgIGFmdGVyOiAnY29sdW1uQicgLy8gYWZ0ZXIgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IE15U1FMXHJcbiAgICogfSk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGUgICAgIFRhYmxlIHRvIGFkZCBjb2x1bW4gdG9cclxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5ICAgICAgIENvbHVtbiBuYW1lXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZSBBdHRyaWJ1dGUgZGVmaW5pdGlvblxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gUXVlcnkgb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgYWRkQ29sdW1uKHRhYmxlLCBrZXksIGF0dHJpYnV0ZSwgb3B0aW9ucykge1xyXG4gICAgaWYgKCF0YWJsZSB8fCAha2V5IHx8ICFhdHRyaWJ1dGUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhZGRDb2x1bW4gdGFrZXMgYXQgbGVhc3QgMyBhcmd1bWVudHMgKHRhYmxlLCBhdHRyaWJ1dGUgbmFtZSwgYXR0cmlidXRlIGRlZmluaXRpb24pJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICBhdHRyaWJ1dGUgPSB0aGlzLnNlcXVlbGl6ZS5ub3JtYWxpemVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeSh0aGlzLlF1ZXJ5R2VuZXJhdG9yLmFkZENvbHVtblF1ZXJ5KHRhYmxlLCBrZXksIGF0dHJpYnV0ZSksIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGEgY29sdW1uIGZyb20gYSB0YWJsZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAgICAgIFRhYmxlIHRvIHJlbW92ZSBjb2x1bW4gZnJvbVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lICBDb2x1bW4gbmFtZSB0byByZW1vdmVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdICAgICAgUXVlcnkgb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgcmVtb3ZlQ29sdW1uKHRhYmxlTmFtZSwgYXR0cmlidXRlTmFtZSwgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCkge1xyXG4gICAgICBjYXNlICdzcWxpdGUnOlxyXG4gICAgICAgIC8vIHNxbGl0ZSBuZWVkcyBzb21lIHNwZWNpYWwgdHJlYXRtZW50IGFzIGl0IGNhbm5vdCBkcm9wIGEgY29sdW1uXHJcbiAgICAgICAgcmV0dXJuIFNRTGl0ZVF1ZXJ5SW50ZXJmYWNlLnJlbW92ZUNvbHVtbih0aGlzLCB0YWJsZU5hbWUsIGF0dHJpYnV0ZU5hbWUsIG9wdGlvbnMpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeSh0aGlzLlF1ZXJ5R2VuZXJhdG9yLnJlbW92ZUNvbHVtblF1ZXJ5KHRhYmxlTmFtZSwgYXR0cmlidXRlTmFtZSksIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIGEgY29sdW1uIGRlZmluaXRpb25cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgICAgICAgICAgVGFibGUgbmFtZSB0byBjaGFuZ2UgZnJvbVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lICAgICAgQ29sdW1uIG5hbWVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVR5cGVPck9wdGlvbnMgIEF0dHJpYnV0ZSBkZWZpbml0aW9uIGZvciBuZXcgY29sdW1uXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAgICAgICAgICBRdWVyeSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBjaGFuZ2VDb2x1bW4odGFibGVOYW1lLCBhdHRyaWJ1dGVOYW1lLCBkYXRhVHlwZU9yT3B0aW9ucywgb3B0aW9ucykge1xyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgaWYgKF8udmFsdWVzKERhdGFUeXBlcykuaW5jbHVkZXMoZGF0YVR5cGVPck9wdGlvbnMpKSB7XHJcbiAgICAgIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0gPSB7IHR5cGU6IGRhdGFUeXBlT3JPcHRpb25zLCBhbGxvd051bGw6IHRydWUgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0gPSBkYXRhVHlwZU9yT3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID0gdGhpcy5zZXF1ZWxpemUubm9ybWFsaXplQXR0cmlidXRlKGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pO1xyXG5cclxuICAgIGlmICh0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QgPT09ICdzcWxpdGUnKSB7XHJcbiAgICAgIC8vIHNxbGl0ZSBuZWVkcyBzb21lIHNwZWNpYWwgdHJlYXRtZW50IGFzIGl0IGNhbm5vdCBjaGFuZ2UgYSBjb2x1bW5cclxuICAgICAgcmV0dXJuIFNRTGl0ZVF1ZXJ5SW50ZXJmYWNlLmNoYW5nZUNvbHVtbih0aGlzLCB0YWJsZU5hbWUsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmF0dHJpYnV0ZXNUb1NRTChhdHRyaWJ1dGVzLCB7XHJcbiAgICAgIGNvbnRleHQ6ICdjaGFuZ2VDb2x1bW4nLFxyXG4gICAgICB0YWJsZTogdGFibGVOYW1lXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuY2hhbmdlQ29sdW1uUXVlcnkodGFibGVOYW1lLCBxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW5hbWUgYSBjb2x1bW5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgICAgICAgIFRhYmxlIG5hbWUgd2hvc2UgY29sdW1uIHRvIHJlbmFtZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyTmFtZUJlZm9yZSAgIEN1cnJlbnQgY29sdW1uIG5hbWVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0ck5hbWVBZnRlciAgICBOZXcgY29sdW1uIG5hbWVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdICAgICAgICBRdWVyeSBvcHRpb25cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIHJlbmFtZUNvbHVtbih0YWJsZU5hbWUsIGF0dHJOYW1lQmVmb3JlLCBhdHRyTmFtZUFmdGVyLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIHJldHVybiB0aGlzLmRlc2NyaWJlVGFibGUodGFibGVOYW1lLCBvcHRpb25zKS50aGVuKGRhdGEgPT4ge1xyXG4gICAgICBpZiAoIWRhdGFbYXR0ck5hbWVCZWZvcmVdKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSAke3RhYmxlTmFtZX0gZG9lc24ndCBoYXZlIHRoZSBjb2x1bW4gJHthdHRyTmFtZUJlZm9yZX1gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZGF0YSA9IGRhdGFbYXR0ck5hbWVCZWZvcmVdIHx8IHt9O1xyXG5cclxuICAgICAgY29uc3QgX29wdGlvbnMgPSB7fTtcclxuXHJcbiAgICAgIF9vcHRpb25zW2F0dHJOYW1lQWZ0ZXJdID0ge1xyXG4gICAgICAgIGF0dHJpYnV0ZTogYXR0ck5hbWVBZnRlcixcclxuICAgICAgICB0eXBlOiBkYXRhLnR5cGUsXHJcbiAgICAgICAgYWxsb3dOdWxsOiBkYXRhLmFsbG93TnVsbCxcclxuICAgICAgICBkZWZhdWx0VmFsdWU6IGRhdGEuZGVmYXVsdFZhbHVlXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBmaXg6IGEgbm90LW51bGwgY29sdW1uIGNhbm5vdCBoYXZlIG51bGwgYXMgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICBpZiAoZGF0YS5kZWZhdWx0VmFsdWUgPT09IG51bGwgJiYgIWRhdGEuYWxsb3dOdWxsKSB7XHJcbiAgICAgICAgZGVsZXRlIF9vcHRpb25zW2F0dHJOYW1lQWZ0ZXJdLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCA9PT0gJ3NxbGl0ZScpIHtcclxuICAgICAgICAvLyBzcWxpdGUgbmVlZHMgc29tZSBzcGVjaWFsIHRyZWF0bWVudCBhcyBpdCBjYW5ub3QgcmVuYW1lIGEgY29sdW1uXHJcbiAgICAgICAgcmV0dXJuIFNRTGl0ZVF1ZXJ5SW50ZXJmYWNlLnJlbmFtZUNvbHVtbih0aGlzLCB0YWJsZU5hbWUsIGF0dHJOYW1lQmVmb3JlLCBhdHRyTmFtZUFmdGVyLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnJlbmFtZUNvbHVtblF1ZXJ5KFxyXG4gICAgICAgIHRhYmxlTmFtZSxcclxuICAgICAgICBhdHRyTmFtZUJlZm9yZSxcclxuICAgICAgICB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmF0dHJpYnV0ZXNUb1NRTChfb3B0aW9ucylcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhbiBpbmRleCB0byBhIGNvbHVtblxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSAgdGFibGVOYW1lIFRhYmxlIG5hbWUgdG8gYWRkIGluZGV4IG9uLCBjYW4gYmUgYSBvYmplY3Qgd2l0aCBzY2hlbWFcclxuICAgKiBAcGFyYW0ge0FycmF5fSAgIFthdHRyaWJ1dGVzXSAgICAgVXNlIG9wdGlvbnMuZmllbGRzIGluc3RlYWQsIExpc3Qgb2YgYXR0cmlidXRlcyB0byBhZGQgaW5kZXggb25cclxuICAgKiBAcGFyYW0ge09iamVjdH0gIG9wdGlvbnMgICAgICAgICAgaW5kZXhlcyBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtBcnJheX0gICBvcHRpb25zLmZpZWxkcyAgIExpc3Qgb2YgYXR0cmlidXRlcyB0byBhZGQgaW5kZXggb25cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNvbmN1cnJlbnRseV0gUGFzcyBDT05DVVJSRU5UIHNvIG90aGVyIG9wZXJhdGlvbnMgcnVuIHdoaWxlIHRoZSBpbmRleCBpcyBjcmVhdGVkXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy51bmlxdWVdIENyZWF0ZSBhIHVuaXF1ZSBpbmRleFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW29wdGlvbnMudXNpbmddICBVc2VmdWwgZm9yIEdJTiBpbmRleGVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBbb3B0aW9ucy5vcGVyYXRvcl0gSW5kZXggb3BlcmF0b3JcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gIFtvcHRpb25zLnR5cGVdICAgVHlwZSBvZiBpbmRleCwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIFVOSVFVRXxGVUxMVEVYVHxTUEFUSUFMXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBbb3B0aW9ucy5uYW1lXSAgIE5hbWUgb2YgdGhlIGluZGV4LiBEZWZhdWx0IGlzIDx0YWJsZT5fPGF0dHIxPl88YXR0cjI+XHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICBbb3B0aW9ucy53aGVyZV0gIFdoZXJlIGNvbmRpdGlvbiBvbiBpbmRleCwgZm9yIHBhcnRpYWwgaW5kZXhlc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW3Jhd1RhYmxlbmFtZV0gICB0YWJsZSBuYW1lLCB0aGlzIGlzIGp1c3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWl0eVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgYWRkSW5kZXgodGFibGVOYW1lLCBhdHRyaWJ1dGVzLCBvcHRpb25zLCByYXdUYWJsZW5hbWUpIHtcclxuICAgIC8vIFN1cHBvcnQgZm9yIHBhc3NpbmcgdGFibGVOYW1lLCBhdHRyaWJ1dGVzLCBvcHRpb25zIG9yIHRhYmxlTmFtZSwgb3B0aW9ucyAod2l0aCBhIGZpZWxkcyBwYXJhbSB3aGljaCBpcyB0aGUgYXR0cmlidXRlcylcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVzKSkge1xyXG4gICAgICByYXdUYWJsZW5hbWUgPSBvcHRpb25zO1xyXG4gICAgICBvcHRpb25zID0gYXR0cmlidXRlcztcclxuICAgICAgYXR0cmlidXRlcyA9IG9wdGlvbnMuZmllbGRzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcmF3VGFibGVuYW1lKSB7XHJcbiAgICAgIC8vIE1hcCBmb3IgYmFja3dhcmRzIGNvbXBhdFxyXG4gICAgICByYXdUYWJsZW5hbWUgPSB0YWJsZU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKTtcclxuICAgIG9wdGlvbnMuZmllbGRzID0gYXR0cmlidXRlcztcclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuYWRkSW5kZXhRdWVyeSh0YWJsZU5hbWUsIG9wdGlvbnMsIHJhd1RhYmxlbmFtZSk7XHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7IHN1cHBvcnRzU2VhcmNoUGF0aDogZmFsc2UgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBpbmRleGVzIG9uIGEgdGFibGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgdGFibGUgbmFtZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gICBRdWVyeSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheT59XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBzaG93SW5kZXgodGFibGVOYW1lLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnNob3dJbmRleGVzUXVlcnkodGFibGVOYW1lLCBvcHRpb25zKTtcclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgdHlwZTogUXVlcnlUeXBlcy5TSE9XSU5ERVhFUyB9KSk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JlaWduS2V5c0ZvclRhYmxlcyh0YWJsZU5hbWVzLCBvcHRpb25zKSB7XHJcbiAgICBpZiAodGFibGVOYW1lcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgfHwge30sIHsgdHlwZTogUXVlcnlUeXBlcy5GT1JFSUdOS0VZUyB9KTtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5tYXAodGFibGVOYW1lcywgdGFibGVOYW1lID0+XHJcbiAgICAgIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHRoaXMuUXVlcnlHZW5lcmF0b3IuZ2V0Rm9yZWlnbktleXNRdWVyeSh0YWJsZU5hbWUsIHRoaXMuc2VxdWVsaXplLmNvbmZpZy5kYXRhYmFzZSksIG9wdGlvbnMpXHJcbiAgICApLnRoZW4ocmVzdWx0cyA9PiB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuICAgICAgdGFibGVOYW1lcy5mb3JFYWNoKCh0YWJsZU5hbWUsIGkpID0+IHtcclxuICAgICAgICBpZiAoXy5pc09iamVjdCh0YWJsZU5hbWUpKSB7XHJcbiAgICAgICAgICB0YWJsZU5hbWUgPSBgJHt0YWJsZU5hbWUuc2NoZW1hfS4ke3RhYmxlTmFtZS50YWJsZU5hbWV9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlc3VsdFt0YWJsZU5hbWVdID0gQXJyYXkuaXNBcnJheShyZXN1bHRzW2ldKVxyXG4gICAgICAgICAgPyByZXN1bHRzW2ldLm1hcChyID0+IHIuY29uc3RyYWludF9uYW1lKVxyXG4gICAgICAgICAgOiBbcmVzdWx0c1tpXSAmJiByZXN1bHRzW2ldLmNvbnN0cmFpbnRfbmFtZV07XHJcblxyXG4gICAgICAgIHJlc3VsdFt0YWJsZU5hbWVdID0gcmVzdWx0W3RhYmxlTmFtZV0uZmlsdGVyKF8uaWRlbnRpdHkpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBmb3JlaWduIGtleSByZWZlcmVuY2VzIGRldGFpbHMgZm9yIHRoZSB0YWJsZVxyXG4gICAqXHJcbiAgICogVGhvc2UgZGV0YWlscyBjb250YWlucyBjb25zdHJhaW50U2NoZW1hLCBjb25zdHJhaW50TmFtZSwgY29uc3RyYWludENhdGFsb2dcclxuICAgKiB0YWJsZUNhdGFsb2csIHRhYmxlU2NoZW1hLCB0YWJsZU5hbWUsIGNvbHVtbk5hbWUsXHJcbiAgICogcmVmZXJlbmNlZFRhYmxlQ2F0YWxvZywgcmVmZXJlbmNlZFRhYmxlQ2F0YWxvZywgcmVmZXJlbmNlZFRhYmxlU2NoZW1hLCByZWZlcmVuY2VkVGFibGVOYW1lLCByZWZlcmVuY2VkQ29sdW1uTmFtZS5cclxuICAgKiBSZW1pbmQ6IGNvbnN0cmFpbnQgaW5mb3JtYXRpb25zIHdvbid0IHJldHVybiBpZiBpdCdzIHNxbGl0ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgdGFibGUgbmFtZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gIFF1ZXJ5IG9wdGlvbnNcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIGdldEZvcmVpZ25LZXlSZWZlcmVuY2VzRm9yVGFibGUodGFibGVOYW1lLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XHJcbiAgICAgIHR5cGU6IFF1ZXJ5VHlwZXMuRk9SRUlHTktFWVNcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY2F0YWxvZ05hbWUgPSB0aGlzLnNlcXVlbGl6ZS5jb25maWcuZGF0YWJhc2U7XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCkge1xyXG4gICAgICBjYXNlICdzcWxpdGUnOlxyXG4gICAgICAgIC8vIHNxbGl0ZSBuZWVkcyBzb21lIHNwZWNpYWwgdHJlYXRtZW50LlxyXG4gICAgICAgIHJldHVybiBTUUxpdGVRdWVyeUludGVyZmFjZS5nZXRGb3JlaWduS2V5UmVmZXJlbmNlc0ZvclRhYmxlKHRoaXMsIHRhYmxlTmFtZSwgcXVlcnlPcHRpb25zKTtcclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5RdWVyeUdlbmVyYXRvci5nZXRGb3JlaWduS2V5c1F1ZXJ5KHRhYmxlTmFtZSwgY2F0YWxvZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShxdWVyeSwgcXVlcnlPcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFuIGFscmVhZHkgZXhpc3RpbmcgaW5kZXggZnJvbSBhIHRhYmxlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lICAgICAgICAgICAgIFRhYmxlIG5hbWUgdG8gZHJvcCBpbmRleCBmcm9tXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGluZGV4TmFtZU9yQXR0cmlidXRlcyBJbmRleCBuYW1lXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAgICAgICAgICAgICBRdWVyeSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICByZW1vdmVJbmRleCh0YWJsZU5hbWUsIGluZGV4TmFtZU9yQXR0cmlidXRlcywgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnJlbW92ZUluZGV4UXVlcnkodGFibGVOYW1lLCBpbmRleE5hbWVPckF0dHJpYnV0ZXMpO1xyXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBjb25zdHJhaW50IHRvIGEgdGFibGVcclxuICAgKlxyXG4gICAqIEF2YWlsYWJsZSBjb25zdHJhaW50czpcclxuICAgKiAtIFVOSVFVRVxyXG4gICAqIC0gREVGQVVMVCAoTVNTUUwgb25seSlcclxuICAgKiAtIENIRUNLIChNeVNRTCAtIElnbm9yZWQgYnkgdGhlIGRhdGFiYXNlIGVuZ2luZSApXHJcbiAgICogLSBGT1JFSUdOIEtFWVxyXG4gICAqIC0gUFJJTUFSWSBLRVlcclxuICAgKlxyXG4gICAqIEBleGFtcGxlIDxjYXB0aW9uPlVOSVFVRTwvY2FwdGlvbj5cclxuICAgKiBxdWVyeUludGVyZmFjZS5hZGRDb25zdHJhaW50KCdVc2VycycsIFsnZW1haWwnXSwge1xyXG4gICAqICAgdHlwZTogJ3VuaXF1ZScsXHJcbiAgICogICBuYW1lOiAnY3VzdG9tX3VuaXF1ZV9jb25zdHJhaW50X25hbWUnXHJcbiAgICogfSk7XHJcbiAgICpcclxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5DSEVDSzwvY2FwdGlvbj5cclxuICAgKiBxdWVyeUludGVyZmFjZS5hZGRDb25zdHJhaW50KCdVc2VycycsIFsncm9sZXMnXSwge1xyXG4gICAqICAgdHlwZTogJ2NoZWNrJyxcclxuICAgKiAgIHdoZXJlOiB7XHJcbiAgICogICAgICByb2xlczogWyd1c2VyJywgJ2FkbWluJywgJ21vZGVyYXRvcicsICdndWVzdCddXHJcbiAgICogICB9XHJcbiAgICogfSk7XHJcbiAgICpcclxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5EZWZhdWx0IC0gTVNTUUwgb25seTwvY2FwdGlvbj5cclxuICAgKiBxdWVyeUludGVyZmFjZS5hZGRDb25zdHJhaW50KCdVc2VycycsIFsncm9sZXMnXSwge1xyXG4gICAqICAgIHR5cGU6ICdkZWZhdWx0JyxcclxuICAgKiAgICBkZWZhdWx0VmFsdWU6ICdndWVzdCdcclxuICAgKiB9KTtcclxuICAgKlxyXG4gICAqIEBleGFtcGxlIDxjYXB0aW9uPlByaW1hcnkgS2V5PC9jYXB0aW9uPlxyXG4gICAqIHF1ZXJ5SW50ZXJmYWNlLmFkZENvbnN0cmFpbnQoJ1VzZXJzJywgWyd1c2VybmFtZSddLCB7XHJcbiAgICogICAgdHlwZTogJ3ByaW1hcnkga2V5JyxcclxuICAgKiAgICBuYW1lOiAnY3VzdG9tX3ByaW1hcnlfY29uc3RyYWludF9uYW1lJ1xyXG4gICAqIH0pO1xyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+Rm9yZWlnbiBLZXk8L2NhcHRpb24+XHJcbiAgICogcXVlcnlJbnRlcmZhY2UuYWRkQ29uc3RyYWludCgnUG9zdHMnLCBbJ3VzZXJuYW1lJ10sIHtcclxuICAgKiAgIHR5cGU6ICdmb3JlaWduIGtleScsXHJcbiAgICogICBuYW1lOiAnY3VzdG9tX2ZrZXlfY29uc3RyYWludF9uYW1lJyxcclxuICAgKiAgIHJlZmVyZW5jZXM6IHsgLy9SZXF1aXJlZCBmaWVsZFxyXG4gICAqICAgICB0YWJsZTogJ3RhcmdldF90YWJsZV9uYW1lJyxcclxuICAgKiAgICAgZmllbGQ6ICd0YXJnZXRfY29sdW1uX25hbWUnXHJcbiAgICogICB9LFxyXG4gICAqICAgb25EZWxldGU6ICdjYXNjYWRlJyxcclxuICAgKiAgIG9uVXBkYXRlOiAnY2FzY2FkZSdcclxuICAgKiB9KTtcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgICAgICAgICAgICAgICAgICBUYWJsZSBuYW1lIHdoZXJlIHlvdSB3YW50IHRvIGFkZCBhIGNvbnN0cmFpbnRcclxuICAgKiBAcGFyYW0ge0FycmF5fSAgYXR0cmlidXRlcyAgICAgICAgICAgICAgICAgQXJyYXkgb2YgY29sdW1uIG5hbWVzIHRvIGFwcGx5IHRoZSBjb25zdHJhaW50IG92ZXJcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgQW4gb2JqZWN0IHRvIGRlZmluZSB0aGUgY29uc3RyYWludCBuYW1lLCB0eXBlIGV0Y1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnR5cGUgICAgICAgICAgICAgICBUeXBlIG9mIGNvbnN0cmFpbnQuIE9uZSBvZiB0aGUgdmFsdWVzIGluIGF2YWlsYWJsZSBjb25zdHJhaW50cyhjYXNlIGluc2Vuc2l0aXZlKVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5uYW1lXSAgICAgICAgICAgICBOYW1lIG9mIHRoZSBjb25zdHJhaW50LiBJZiBub3Qgc3BlY2lmaWVkLCBzZXF1ZWxpemUgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgbmFtZWQgY29uc3RyYWludCBiYXNlZCBvbiBjb25zdHJhaW50IHR5cGUsIHRhYmxlICYgY29sdW1uIG5hbWVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmRlZmF1bHRWYWx1ZV0gICAgIFRoZSB2YWx1ZSBmb3IgdGhlIGRlZmF1bHQgY29uc3RyYWludFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy53aGVyZV0gICAgICAgICAgICBXaGVyZSBjbGF1c2UvZXhwcmVzc2lvbiBmb3IgdGhlIENIRUNLIGNvbnN0cmFpbnRcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucmVmZXJlbmNlc10gICAgICAgT2JqZWN0IHNwZWNpZnlpbmcgdGFyZ2V0IHRhYmxlLCBjb2x1bW4gbmFtZSB0byBjcmVhdGUgZm9yZWlnbiBrZXkgY29uc3RyYWludFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5yZWZlcmVuY2VzLnRhYmxlXSBUYXJnZXQgdGFibGUgbmFtZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5yZWZlcmVuY2VzLmZpZWxkXSBUYXJnZXQgY29sdW1uIG5hbWVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3Jhd1RhYmxlbmFtZV0gICAgICAgICAgICAgVGFibGUgbmFtZSwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIGFkZENvbnN0cmFpbnQodGFibGVOYW1lLCBhdHRyaWJ1dGVzLCBvcHRpb25zLCByYXdUYWJsZW5hbWUpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVzKSkge1xyXG4gICAgICByYXdUYWJsZW5hbWUgPSBvcHRpb25zO1xyXG4gICAgICBvcHRpb25zID0gYXR0cmlidXRlcztcclxuICAgICAgYXR0cmlidXRlcyA9IG9wdGlvbnMuZmllbGRzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb3B0aW9ucy50eXBlKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc3RyYWludCB0eXBlIG11c3QgYmUgc3BlY2lmaWVkIHRocm91Z2ggb3B0aW9ucy50eXBlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFyYXdUYWJsZW5hbWUpIHtcclxuICAgICAgLy8gTWFwIGZvciBiYWNrd2FyZHMgY29tcGF0XHJcbiAgICAgIHJhd1RhYmxlbmFtZSA9IHRhYmxlTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5maWVsZHMgPSBhdHRyaWJ1dGVzO1xyXG5cclxuICAgIGlmICh0aGlzLnNlcXVlbGl6ZS5kaWFsZWN0Lm5hbWUgPT09ICdzcWxpdGUnKSB7XHJcbiAgICAgIHJldHVybiBTUUxpdGVRdWVyeUludGVyZmFjZS5hZGRDb25zdHJhaW50KHRoaXMsIHRhYmxlTmFtZSwgb3B0aW9ucywgcmF3VGFibGVuYW1lKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuYWRkQ29uc3RyYWludFF1ZXJ5KHRhYmxlTmFtZSwgb3B0aW9ucywgcmF3VGFibGVuYW1lKTtcclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0NvbnN0cmFpbnQodGFibGVOYW1lLCBjb25zdHJhaW50TmFtZSwgb3B0aW9ucykge1xyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5zaG93Q29uc3RyYWludHNRdWVyeSh0YWJsZU5hbWUsIGNvbnN0cmFpbnROYW1lKTtcclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgdHlwZTogUXVlcnlUeXBlcy5TSE9XQ09OU1RSQUlOVFMgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGEgY29uc3RyYWludCBmcm9tIGEgdGFibGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgICAgICAgVGFibGUgbmFtZSB0byBkcm9wIGNvbnN0cmFpbnQgZnJvbVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb25zdHJhaW50TmFtZSAgQ29uc3RyYWludCBuYW1lXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAgICAgICBRdWVyeSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICByZW1vdmVDb25zdHJhaW50KHRhYmxlTmFtZSwgY29uc3RyYWludE5hbWUsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KSB7XHJcbiAgICAgIGNhc2UgJ3NxbGl0ZSc6XHJcbiAgICAgICAgcmV0dXJuIFNRTGl0ZVF1ZXJ5SW50ZXJmYWNlLnJlbW92ZUNvbnN0cmFpbnQodGhpcywgdGFibGVOYW1lLCBjb25zdHJhaW50TmFtZSwgb3B0aW9ucyk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5yZW1vdmVDb25zdHJhaW50UXVlcnkodGFibGVOYW1lLCBjb25zdHJhaW50TmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnNlcnQoaW5zdGFuY2UsIHRhYmxlTmFtZSwgdmFsdWVzLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5oYXNUcmlnZ2VyID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuY29uc3RydWN0b3Iub3B0aW9ucy5oYXNUcmlnZ2VyO1xyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5pbnNlcnRRdWVyeSh0YWJsZU5hbWUsIHZhbHVlcywgaW5zdGFuY2UgJiYgaW5zdGFuY2UuY29uc3RydWN0b3IucmF3QXR0cmlidXRlcywgb3B0aW9ucyk7XHJcblxyXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5JTlNFUlQ7XHJcbiAgICBvcHRpb25zLmluc3RhbmNlID0gaW5zdGFuY2U7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucykudGhlbihyZXN1bHRzID0+IHtcclxuICAgICAgaWYgKGluc3RhbmNlKSByZXN1bHRzWzBdLmlzTmV3UmVjb3JkID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcHNlcnRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgICAgdGFibGUgdG8gdXBzZXJ0IG9uXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGluc2VydFZhbHVlcyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQsIG1hcHBlZCB0byBmaWVsZCBuYW1lXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHVwZGF0ZVZhbHVlcyB2YWx1ZXMgdG8gYmUgdXBkYXRlZCwgbWFwcGVkIHRvIGZpZWxkIG5hbWVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gd2hlcmUgICAgICAgIHZhcmlvdXMgY29uZGl0aW9uc1xyXG4gICAqIEBwYXJhbSB7TW9kZWx9ICBtb2RlbCAgICAgICAgTW9kZWwgdG8gdXBzZXJ0IG9uXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAgICBxdWVyeSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuLD9udW1iZXI+fSBSZXNvbHZlcyBhbiBhcnJheSB3aXRoIDxjcmVhdGVkLCBwcmltYXJ5S2V5PlxyXG4gICAqL1xyXG4gIHVwc2VydCh0YWJsZU5hbWUsIGluc2VydFZhbHVlcywgdXBkYXRlVmFsdWVzLCB3aGVyZSwgbW9kZWwsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHdoZXJlcyA9IFtdO1xyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKGluc2VydFZhbHVlcyk7XHJcbiAgICBsZXQgaW5kZXhlcyA9IFtdO1xyXG4gICAgbGV0IGluZGV4RmllbGRzO1xyXG5cclxuICAgIG9wdGlvbnMgPSBfLmNsb25lKG9wdGlvbnMpO1xyXG5cclxuICAgIGlmICghVXRpbHMuaXNXaGVyZUVtcHR5KHdoZXJlKSkge1xyXG4gICAgICB3aGVyZXMucHVzaCh3aGVyZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTGV0cyBjb21iaW5lIHVuaXF1ZSBrZXlzIGFuZCBpbmRleGVzIGludG8gb25lXHJcbiAgICBpbmRleGVzID0gXy5tYXAobW9kZWwudW5pcXVlS2V5cywgdmFsdWUgPT4ge1xyXG4gICAgICByZXR1cm4gdmFsdWUuZmllbGRzO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbW9kZWwuX2luZGV4ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZS51bmlxdWUpIHtcclxuICAgICAgICAvLyBmaWVsZHMgaW4gdGhlIGluZGV4IG1heSBib3RoIHRoZSBzdHJpbmdzIG9yIG9iamVjdHMgd2l0aCBhbiBhdHRyaWJ1dGUgcHJvcGVydHkgLSBsZXRzIHNhbml0aXplIHRoYXRcclxuICAgICAgICBpbmRleEZpZWxkcyA9IHZhbHVlLmZpZWxkcy5tYXAoZmllbGQgPT4ge1xyXG4gICAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChmaWVsZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmF0dHJpYnV0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmaWVsZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpbmRleGVzLnB1c2goaW5kZXhGaWVsZHMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcclxuICAgICAgaWYgKF8uaW50ZXJzZWN0aW9uKGF0dHJpYnV0ZXMsIGluZGV4KS5sZW5ndGggPT09IGluZGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIHdoZXJlID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBpbmRleCkge1xyXG4gICAgICAgICAgd2hlcmVbZmllbGRdID0gaW5zZXJ0VmFsdWVzW2ZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2hlcmVzLnB1c2god2hlcmUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgd2hlcmUgPSB7IFtPcC5vcl06IHdoZXJlcyB9O1xyXG5cclxuICAgIG9wdGlvbnMudHlwZSA9IFF1ZXJ5VHlwZXMuVVBTRVJUO1xyXG4gICAgb3B0aW9ucy5yYXcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IudXBzZXJ0UXVlcnkodGFibGVOYW1lLCBpbnNlcnRWYWx1ZXMsIHVwZGF0ZVZhbHVlcywgd2hlcmUsIG1vZGVsLCBvcHRpb25zKTtcclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgc3dpdGNoICh0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QpIHtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIFtyZXN1bHQsIHVuZGVmaW5lZF07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zZXJ0IG11bHRpcGxlIHJlY29yZHMgaW50byBhIHRhYmxlXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIHF1ZXJ5SW50ZXJmYWNlLmJ1bGtJbnNlcnQoJ3JvbGVzJywgW3tcclxuICAgKiAgICBsYWJlbDogJ3VzZXInLFxyXG4gICAqICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKSxcclxuICAgKiAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKClcclxuICAgKiAgfSwge1xyXG4gICAqICAgIGxhYmVsOiAnYWRtaW4nLFxyXG4gICAqICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKSxcclxuICAgKiAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKClcclxuICAgKiAgfV0pO1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAgIFRhYmxlIG5hbWUgdG8gaW5zZXJ0IHJlY29yZCB0b1xyXG4gICAqIEBwYXJhbSB7QXJyYXl9ICByZWNvcmRzICAgICBMaXN0IG9mIHJlY29yZHMgdG8gaW5zZXJ0XHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAgIFZhcmlvdXMgb3B0aW9ucywgcGxlYXNlIHNlZSBNb2RlbC5idWxrQ3JlYXRlIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlcyAgVmFyaW91cyBhdHRyaWJ1dGVzIG1hcHBlZCBieSBmaWVsZCBuYW1lXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBidWxrSW5zZXJ0KHRhYmxlTmFtZSwgcmVjb3Jkcywgb3B0aW9ucywgYXR0cmlidXRlcykge1xyXG4gICAgb3B0aW9ucyA9IF8uY2xvbmUob3B0aW9ucykgfHwge307XHJcbiAgICBvcHRpb25zLnR5cGUgPSBRdWVyeVR5cGVzLklOU0VSVDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoXHJcbiAgICAgIHRoaXMuUXVlcnlHZW5lcmF0b3IuYnVsa0luc2VydFF1ZXJ5KHRhYmxlTmFtZSwgcmVjb3Jkcywgb3B0aW9ucywgYXR0cmlidXRlcyksXHJcbiAgICAgIG9wdGlvbnNcclxuICAgICkudGhlbihyZXN1bHRzID0+IHJlc3VsdHNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGluc3RhbmNlLCB0YWJsZU5hbWUsIHZhbHVlcywgaWRlbnRpZmllciwgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IF8uY2xvbmUob3B0aW9ucyB8fCB7fSk7XHJcbiAgICBvcHRpb25zLmhhc1RyaWdnZXIgPSAhIShpbnN0YW5jZSAmJiBpbnN0YW5jZS5fbW9kZWxPcHRpb25zICYmIGluc3RhbmNlLl9tb2RlbE9wdGlvbnMuaGFzVHJpZ2dlcik7XHJcblxyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci51cGRhdGVRdWVyeSh0YWJsZU5hbWUsIHZhbHVlcywgaWRlbnRpZmllciwgb3B0aW9ucywgaW5zdGFuY2UuY29uc3RydWN0b3IucmF3QXR0cmlidXRlcyk7XHJcblxyXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5VUERBVEU7XHJcblxyXG4gICAgb3B0aW9ucy5pbnN0YW5jZSA9IGluc3RhbmNlO1xyXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgbXVsdGlwbGUgcmVjb3JkcyBvZiBhIHRhYmxlXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIHF1ZXJ5SW50ZXJmYWNlLmJ1bGtVcGRhdGUoJ3JvbGVzJywge1xyXG4gICAqICAgICBsYWJlbDogJ2FkbWluJyxcclxuICAgKiAgIH0sIHtcclxuICAgKiAgICAgdXNlclR5cGU6IDMsXHJcbiAgICogICB9LFxyXG4gICAqICk7XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lICAgICBUYWJsZSBuYW1lIHRvIHVwZGF0ZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgICAgICAgIFZhbHVlcyB0byBiZSBpbnNlcnRlZCwgbWFwcGVkIHRvIGZpZWxkIG5hbWVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gaWRlbnRpZmllciAgICBBIGhhc2ggd2l0aCBjb25kaXRpb25zIE9SIGFuIElEIGFzIGludGVnZXIgT1IgYSBzdHJpbmcgd2l0aCBjb25kaXRpb25zXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAgICAgVmFyaW91cyBvcHRpb25zLCBwbGVhc2Ugc2VlIE1vZGVsLmJ1bGtDcmVhdGUgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbYXR0cmlidXRlc10gIEF0dHJpYnV0ZXMgb24gcmV0dXJuIG9iamVjdHMgaWYgc3VwcG9ydGVkIGJ5IFNRTCBkaWFsZWN0XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBidWxrVXBkYXRlKHRhYmxlTmFtZSwgdmFsdWVzLCBpZGVudGlmaWVyLCBvcHRpb25zLCBhdHRyaWJ1dGVzKSB7XHJcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xyXG4gICAgaWYgKHR5cGVvZiBpZGVudGlmaWVyID09PSAnb2JqZWN0JykgaWRlbnRpZmllciA9IFV0aWxzLmNsb25lRGVlcChpZGVudGlmaWVyKTtcclxuXHJcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnVwZGF0ZVF1ZXJ5KHRhYmxlTmFtZSwgdmFsdWVzLCBpZGVudGlmaWVyLCBvcHRpb25zLCBhdHRyaWJ1dGVzKTtcclxuICAgIGNvbnN0IHRhYmxlID0gXy5pc09iamVjdCh0YWJsZU5hbWUpID8gdGFibGVOYW1lIDogeyB0YWJsZU5hbWUgfTtcclxuICAgIGNvbnN0IG1vZGVsID0gXy5maW5kKHRoaXMuc2VxdWVsaXplLm1vZGVsTWFuYWdlci5tb2RlbHMsIHsgdGFibGVOYW1lOiB0YWJsZS50YWJsZU5hbWUgfSk7XHJcblxyXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5CVUxLVVBEQVRFO1xyXG4gICAgb3B0aW9ucy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBkZWxldGUoaW5zdGFuY2UsIHRhYmxlTmFtZSwgaWRlbnRpZmllciwgb3B0aW9ucykge1xyXG4gICAgY29uc3QgY2FzY2FkZXMgPSBbXTtcclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuZGVsZXRlUXVlcnkodGFibGVOYW1lLCBpZGVudGlmaWVyLCB7fSwgaW5zdGFuY2UuY29uc3RydWN0b3IpO1xyXG5cclxuICAgIG9wdGlvbnMgPSBfLmNsb25lKG9wdGlvbnMpIHx8IHt9O1xyXG5cclxuICAgIC8vIENoZWNrIGZvciBhIHJlc3RyaWN0IGZpZWxkXHJcbiAgICBpZiAoISFpbnN0YW5jZS5jb25zdHJ1Y3RvciAmJiAhIWluc3RhbmNlLmNvbnN0cnVjdG9yLmFzc29jaWF0aW9ucykge1xyXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5zdGFuY2UuY29uc3RydWN0b3IuYXNzb2NpYXRpb25zKTtcclxuICAgICAgY29uc3QgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XHJcbiAgICAgIGxldCBhc3NvY2lhdGlvbjtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBhc3NvY2lhdGlvbiA9IGluc3RhbmNlLmNvbnN0cnVjdG9yLmFzc29jaWF0aW9uc1trZXlzW2ldXTtcclxuICAgICAgICBpZiAoYXNzb2NpYXRpb24ub3B0aW9ucyAmJiBhc3NvY2lhdGlvbi5vcHRpb25zLm9uRGVsZXRlICYmXHJcbiAgICAgICAgICBhc3NvY2lhdGlvbi5vcHRpb25zLm9uRGVsZXRlLnRvTG93ZXJDYXNlKCkgPT09ICdjYXNjYWRlJyAmJlxyXG4gICAgICAgICAgYXNzb2NpYXRpb24ub3B0aW9ucy51c2VIb29rcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgY2FzY2FkZXMucHVzaChhc3NvY2lhdGlvbi5hY2Nlc3NvcnMuZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5lYWNoKGNhc2NhZGVzLCBjYXNjYWRlID0+IHtcclxuICAgICAgcmV0dXJuIGluc3RhbmNlW2Nhc2NhZGVdKG9wdGlvbnMpLnRoZW4oaW5zdGFuY2VzID0+IHtcclxuICAgICAgICAvLyBDaGVjayBmb3IgaGFzT25lIHJlbGF0aW9uc2hpcCB3aXRoIG5vbi1leGlzdGluZyBhc3NvY2lhdGUgKFwiaGFzIHplcm9cIilcclxuICAgICAgICBpZiAoIWluc3RhbmNlcykge1xyXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGluc3RhbmNlcykpIGluc3RhbmNlcyA9IFtpbnN0YW5jZXNdO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5lYWNoKGluc3RhbmNlcywgaW5zdGFuY2UgPT4gaW5zdGFuY2UuZGVzdHJveShvcHRpb25zKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIG9wdGlvbnMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBtdWx0aXBsZSByZWNvcmRzIGZyb20gYSB0YWJsZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICB0YWJsZU5hbWUgICAgICAgICAgICB0YWJsZSBuYW1lIGZyb20gd2hlcmUgdG8gZGVsZXRlIHJlY29yZHNcclxuICAgKiBAcGFyYW0ge09iamVjdH0gIHdoZXJlICAgICAgICAgICAgICAgIHdoZXJlIGNvbmRpdGlvbnMgdG8gZmluZCByZWNvcmRzIHRvIGRlbGV0ZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgW29wdGlvbnNdICAgICAgICAgICAgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJ1bmNhdGVdICAgVXNlIHRydW5jYXRlIHRhYmxlIGNvbW1hbmQgICBcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNhc2NhZGU9ZmFsc2VdICAgICAgICAgT25seSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggVFJVTkNBVEUuIFRydW5jYXRlcyAgYWxsIHRhYmxlcyB0aGF0IGhhdmUgZm9yZWlnbi1rZXkgcmVmZXJlbmNlcyB0byB0aGUgbmFtZWQgdGFibGUsIG9yIHRvIGFueSB0YWJsZXMgYWRkZWQgdG8gdGhlIGdyb3VwIGR1ZSB0byBDQVNDQURFLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucmVzdGFydElkZW50aXR5PWZhbHNlXSBPbmx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBUUlVOQ0FURS4gQXV0b21hdGljYWxseSByZXN0YXJ0IHNlcXVlbmNlcyBvd25lZCBieSBjb2x1bW5zIG9mIHRoZSB0cnVuY2F0ZWQgdGFibGUuXHJcbiAgICogQHBhcmFtIHtNb2RlbH0gICBbbW9kZWxdICAgICAgICAgICAgICBNb2RlbFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgYnVsa0RlbGV0ZSh0YWJsZU5hbWUsIHdoZXJlLCBvcHRpb25zLCBtb2RlbCkge1xyXG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKTtcclxuICAgIG9wdGlvbnMgPSBfLmRlZmF1bHRzKG9wdGlvbnMsIHsgbGltaXQ6IG51bGwgfSk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMudHJ1bmNhdGUgPT09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KFxyXG4gICAgICAgIHRoaXMuUXVlcnlHZW5lcmF0b3IudHJ1bmNhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSwgb3B0aW9ucyksXHJcbiAgICAgICAgb3B0aW9uc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgaWRlbnRpZmllciA9PT0gJ29iamVjdCcpIHdoZXJlID0gVXRpbHMuY2xvbmVEZWVwKHdoZXJlKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoXHJcbiAgICAgIHRoaXMuUXVlcnlHZW5lcmF0b3IuZGVsZXRlUXVlcnkodGFibGVOYW1lLCB3aGVyZSwgb3B0aW9ucywgbW9kZWwpLFxyXG4gICAgICBvcHRpb25zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0KG1vZGVsLCB0YWJsZU5hbWUsIG9wdGlvbnNBcmcpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zQXJnLCB7IHR5cGU6IFF1ZXJ5VHlwZXMuU0VMRUNULCBtb2RlbCB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoXHJcbiAgICAgIHRoaXMuUXVlcnlHZW5lcmF0b3Iuc2VsZWN0UXVlcnkodGFibGVOYW1lLCBvcHRpb25zLCBtb2RlbCksXHJcbiAgICAgIG9wdGlvbnNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbmNyZW1lbnQobW9kZWwsIHRhYmxlTmFtZSwgdmFsdWVzLCBpZGVudGlmaWVyLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xyXG5cclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuYXJpdGhtZXRpY1F1ZXJ5KCcrJywgdGFibGVOYW1lLCB2YWx1ZXMsIGlkZW50aWZpZXIsIG9wdGlvbnMsIG9wdGlvbnMuYXR0cmlidXRlcyk7XHJcblxyXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5VUERBVEU7XHJcbiAgICBvcHRpb25zLm1vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBkZWNyZW1lbnQobW9kZWwsIHRhYmxlTmFtZSwgdmFsdWVzLCBpZGVudGlmaWVyLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xyXG5cclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuYXJpdGhtZXRpY1F1ZXJ5KCctJywgdGFibGVOYW1lLCB2YWx1ZXMsIGlkZW50aWZpZXIsIG9wdGlvbnMsIG9wdGlvbnMuYXR0cmlidXRlcyk7XHJcblxyXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5VUERBVEU7XHJcbiAgICBvcHRpb25zLm1vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICByYXdTZWxlY3QodGFibGVOYW1lLCBvcHRpb25zLCBhdHRyaWJ1dGVTZWxlY3RvciwgTW9kZWwpIHtcclxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XHJcbiAgICBvcHRpb25zID0gXy5kZWZhdWx0cyhvcHRpb25zLCB7XHJcbiAgICAgIHJhdzogdHJ1ZSxcclxuICAgICAgcGxhaW46IHRydWUsXHJcbiAgICAgIHR5cGU6IFF1ZXJ5VHlwZXMuU0VMRUNUXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnNlbGVjdFF1ZXJ5KHRhYmxlTmFtZSwgb3B0aW9ucywgTW9kZWwpO1xyXG5cclxuICAgIGlmIChhdHRyaWJ1dGVTZWxlY3RvciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHBhc3MgYW4gYXR0cmlidXRlIHNlbGVjdG9yIScpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgIGlmICghb3B0aW9ucy5wbGFpbikge1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByZXN1bHQgPSBkYXRhID8gZGF0YVthdHRyaWJ1dGVTZWxlY3Rvcl0gOiBudWxsO1xyXG5cclxuICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZGF0YVR5cGUgPSBvcHRpb25zLmRhdGFUeXBlO1xyXG5cclxuICAgICAgaWYgKGRhdGFUeXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLkRFQ0lNQUwgfHwgZGF0YVR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuRkxPQVQpIHtcclxuICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoZGF0YVR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuSU5URUdFUiB8fCBkYXRhVHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5CSUdJTlQpIHtcclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQocmVzdWx0LCAxMCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRhdGFUeXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLkRBVEUpIHtcclxuICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmICEocmVzdWx0IGluc3RhbmNlb2YgRGF0ZSkpIHtcclxuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVUcmlnZ2VyKHRhYmxlTmFtZSwgdHJpZ2dlck5hbWUsIHRpbWluZ1R5cGUsIGZpcmVPbkFycmF5LCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uUGFyYW1zLCBvcHRpb25zQXJyYXksIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuY3JlYXRlVHJpZ2dlcih0YWJsZU5hbWUsIHRyaWdnZXJOYW1lLCB0aW1pbmdUeXBlLCBmaXJlT25BcnJheSwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvblBhcmFtcywgb3B0aW9uc0FycmF5KTtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgaWYgKHNxbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICB9XHJcblxyXG4gIGRyb3BUcmlnZ2VyKHRhYmxlTmFtZSwgdHJpZ2dlck5hbWUsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuZHJvcFRyaWdnZXIodGFibGVOYW1lLCB0cmlnZ2VyTmFtZSk7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICBpZiAoc3FsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lVHJpZ2dlcih0YWJsZU5hbWUsIG9sZFRyaWdnZXJOYW1lLCBuZXdUcmlnZ2VyTmFtZSwgb3B0aW9ucykge1xyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5yZW5hbWVUcmlnZ2VyKHRhYmxlTmFtZSwgb2xkVHJpZ2dlck5hbWUsIG5ld1RyaWdnZXJOYW1lKTtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIGlmIChzcWwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gU1FMIGZ1bmN0aW9uXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIHF1ZXJ5SW50ZXJmYWNlLmNyZWF0ZUZ1bmN0aW9uKFxyXG4gICAqICAgJ3NvbWVGdW5jdGlvbicsXHJcbiAgICogICBbXHJcbiAgICogICAgIHt0eXBlOiAnaW50ZWdlcicsIG5hbWU6ICdwYXJhbScsIGRpcmVjdGlvbjogJ0lOJ31cclxuICAgKiAgIF0sXHJcbiAgICogICAnaW50ZWdlcicsXHJcbiAgICogICAncGxwZ3NxbCcsXHJcbiAgICogICAnUkVUVVJOIHBhcmFtICsgMTsnLFxyXG4gICAqICAgW1xyXG4gICAqICAgICAnSU1NVVRBQkxFJyxcclxuICAgKiAgICAgJ0xFQUtQUk9PRidcclxuICAgKiAgIF0sXHJcbiAgICogICB7XHJcbiAgICogICAgdmFyaWFibGVzOlxyXG4gICAqICAgICAgW1xyXG4gICAqICAgICAgICB7dHlwZTogJ2ludGVnZXInLCBuYW1lOiAnbXlWYXInLCBkZWZhdWx0OiAxMDB9XHJcbiAgICogICAgICBdLFxyXG4gICAqICAgICAgZm9yY2U6IHRydWVcclxuICAgKiAgIH07XHJcbiAgICogKTtcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgZnVuY3Rpb25OYW1lICBOYW1lIG9mIFNRTCBmdW5jdGlvbiB0byBjcmVhdGVcclxuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhcmFtcyAgICAgICAgTGlzdCBvZiBwYXJhbWV0ZXJzIGRlY2xhcmVkIGZvciBTUUwgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJldHVyblR5cGUgICAgU1FMIHR5cGUgb2YgZnVuY3Rpb24gcmV0dXJuZWQgdmFsdWVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gIGxhbmd1YWdlICAgICAgVGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGluXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBib2R5ICAgICAgICAgIFNvdXJjZSBjb2RlIG9mIGZ1bmN0aW9uXHJcbiAgICogQHBhcmFtIHtBcnJheX0gICBvcHRpb25zQXJyYXkgIEV4dHJhLW9wdGlvbnMgZm9yIGNyZWF0aW9uXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICBbb3B0aW9uc10gICAgIHF1ZXJ5IG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuZm9yY2UgSWYgZm9yY2UgaXMgdHJ1ZSwgYW55IGV4aXN0aW5nIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgd2lsbCBiZSByZXBsYWNlZC4gRm9yIHBvc3RncmVzLCB0aGlzIG1lYW5zIHVzaW5nIGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTmAgaW5zdGVhZCBvZiBgQ1JFQVRFIEZVTkNUSU9OYC4gRGVmYXVsdCBpcyBmYWxzZVxyXG4gICAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gICBvcHRpb25zLnZhcmlhYmxlcyBMaXN0IG9mIGRlY2xhcmVkIHZhcmlhYmxlcy4gRWFjaCB2YXJpYWJsZSBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggc3RyaW5nIGZpZWxkcyBgdHlwZWAgYW5kIGBuYW1lYCwgYW5kIG9wdGlvbmFsbHkgaGF2aW5nIGEgYGRlZmF1bHRgIGZpZWxkIGFzIHdlbGwuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBjcmVhdGVGdW5jdGlvbihmdW5jdGlvbk5hbWUsIHBhcmFtcywgcmV0dXJuVHlwZSwgbGFuZ3VhZ2UsIGJvZHksIG9wdGlvbnNBcnJheSwgb3B0aW9ucykge1xyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5jcmVhdGVGdW5jdGlvbihmdW5jdGlvbk5hbWUsIHBhcmFtcywgcmV0dXJuVHlwZSwgbGFuZ3VhZ2UsIGJvZHksIG9wdGlvbnNBcnJheSwgb3B0aW9ucyk7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICBpZiAoc3FsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRHJvcCBhbiBTUUwgZnVuY3Rpb25cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogcXVlcnlJbnRlcmZhY2UuZHJvcEZ1bmN0aW9uKFxyXG4gICAqICAgJ3NvbWVGdW5jdGlvbicsXHJcbiAgICogICBbXHJcbiAgICogICAgIHt0eXBlOiAndmFyY2hhcicsIG5hbWU6ICdwYXJhbTEnLCBkaXJlY3Rpb246ICdJTid9LFxyXG4gICAqICAgICB7dHlwZTogJ2ludGVnZXInLCBuYW1lOiAncGFyYW0yJywgZGlyZWN0aW9uOiAnSU5PVVQnfVxyXG4gICAqICAgXVxyXG4gICAqICk7XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lIE5hbWUgb2YgU1FMIGZ1bmN0aW9uIHRvIGRyb3BcclxuICAgKiBAcGFyYW0ge0FycmF5fSAgcGFyYW1zICAgICAgIExpc3Qgb2YgcGFyYW1ldGVycyBkZWNsYXJlZCBmb3IgU1FMIGZ1bmN0aW9uXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAgICBxdWVyeSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBkcm9wRnVuY3Rpb24oZnVuY3Rpb25OYW1lLCBwYXJhbXMsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuZHJvcEZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSwgcGFyYW1zKTtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIGlmIChzcWwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW5hbWUgYW4gU1FMIGZ1bmN0aW9uXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIHF1ZXJ5SW50ZXJmYWNlLnJlbmFtZUZ1bmN0aW9uKFxyXG4gICAqICAgJ2Zvb0Z1bmN0aW9uJyxcclxuICAgKiAgIFtcclxuICAgKiAgICAge3R5cGU6ICd2YXJjaGFyJywgbmFtZTogJ3BhcmFtMScsIGRpcmVjdGlvbjogJ0lOJ30sXHJcbiAgICogICAgIHt0eXBlOiAnaW50ZWdlcicsIG5hbWU6ICdwYXJhbTInLCBkaXJlY3Rpb246ICdJTk9VVCd9XHJcbiAgICogICBdLFxyXG4gICAqICAgJ2JhckZ1bmN0aW9uJ1xyXG4gICAqICk7XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkRnVuY3Rpb25OYW1lICBDdXJyZW50IG5hbWUgb2YgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0ge0FycmF5fSAgcGFyYW1zICAgICAgICAgICBMaXN0IG9mIHBhcmFtZXRlcnMgZGVjbGFyZWQgZm9yIFNRTCBmdW5jdGlvblxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdGdW5jdGlvbk5hbWUgIE5ldyBuYW1lIG9mIGZ1bmN0aW9uXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAgICAgICAgcXVlcnkgb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgcmVuYW1lRnVuY3Rpb24ob2xkRnVuY3Rpb25OYW1lLCBwYXJhbXMsIG5ld0Z1bmN0aW9uTmFtZSwgb3B0aW9ucykge1xyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5yZW5hbWVGdW5jdGlvbihvbGRGdW5jdGlvbk5hbWUsIHBhcmFtcywgbmV3RnVuY3Rpb25OYW1lKTtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIGlmIChzcWwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgbWV0aG9kcyB1c2VmdWwgZm9yIHF1ZXJ5aW5nXHJcblxyXG4gIC8qKlxyXG4gICAqIEVzY2FwZSBhbiBpZGVudGlmaWVyIChlLmcuIGEgdGFibGUgb3IgYXR0cmlidXRlIG5hbWUpXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpZmllciBpZGVudGlmaWVyIHRvIHF1b3RlXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2VdICAgSWYgZm9yY2UgaXMgdHJ1ZSx0aGUgaWRlbnRpZmllciB3aWxsIGJlIHF1b3RlZCBldmVuIGlmIHRoZSBgcXVvdGVJZGVudGlmaWVyc2Agb3B0aW9uIGlzIGZhbHNlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBxdW90ZUlkZW50aWZpZXIoaWRlbnRpZmllciwgZm9yY2UpIHtcclxuICAgIHJldHVybiB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnF1b3RlSWRlbnRpZmllcihpZGVudGlmaWVyLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICBxdW90ZVRhYmxlKGlkZW50aWZpZXIpIHtcclxuICAgIHJldHVybiB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnF1b3RlVGFibGUoaWRlbnRpZmllcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBRdW90ZSBhcnJheSBvZiBpZGVudGlmaWVycyBhdCBvbmNlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpZGVudGlmaWVycyBhcnJheSBvZiBpZGVudGlmaWVycyB0byBxdW90ZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlXSAgIElmIGZvcmNlIGlzIHRydWUsdGhlIGlkZW50aWZpZXIgd2lsbCBiZSBxdW90ZWQgZXZlbiBpZiB0aGUgYHF1b3RlSWRlbnRpZmllcnNgIG9wdGlvbiBpcyBmYWxzZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcXVvdGVJZGVudGlmaWVycyhpZGVudGlmaWVycywgZm9yY2UpIHtcclxuICAgIHJldHVybiB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnF1b3RlSWRlbnRpZmllcnMoaWRlbnRpZmllcnMsIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVzY2FwZSBhIHZhbHVlIChlLmcuIGEgc3RyaW5nLCBudW1iZXIgb3IgZGF0ZSlcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBzdHJpbmcgdG8gZXNjYXBlXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGVzY2FwZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuUXVlcnlHZW5lcmF0b3IuZXNjYXBlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHNldElzb2xhdGlvbkxldmVsKHRyYW5zYWN0aW9uLCB2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgVHJhbnNhY3Rpb24pKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHNldCBpc29sYXRpb24gbGV2ZWwgZm9yIGEgdHJhbnNhY3Rpb24gd2l0aG91dCB0cmFuc2FjdGlvbiBvYmplY3QhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRyYW5zYWN0aW9uLnBhcmVudCB8fCAhdmFsdWUpIHtcclxuICAgICAgLy8gTm90IHBvc3NpYmxlIHRvIHNldCBhIHNlcGFyYXRlIGlzb2xhdGlvbiBsZXZlbCBmb3Igc2F2ZXBvaW50c1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcclxuICAgICAgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uLnBhcmVudCB8fCB0cmFuc2FjdGlvblxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5zZXRJc29sYXRpb25MZXZlbFF1ZXJ5KHZhbHVlLCB7XHJcbiAgICAgIHBhcmVudDogdHJhbnNhY3Rpb24ucGFyZW50XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXNxbCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgb3B0aW9ucykge1xyXG4gICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgVHJhbnNhY3Rpb24pKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHN0YXJ0IGEgdHJhbnNhY3Rpb24gd2l0aG91dCB0cmFuc2FjdGlvbiBvYmplY3QhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcclxuICAgICAgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uLnBhcmVudCB8fCB0cmFuc2FjdGlvblxyXG4gICAgfSk7XHJcbiAgICBvcHRpb25zLnRyYW5zYWN0aW9uLm5hbWUgPSB0cmFuc2FjdGlvbi5wYXJlbnQgPyB0cmFuc2FjdGlvbi5uYW1lIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5zdGFydFRyYW5zYWN0aW9uUXVlcnkodHJhbnNhY3Rpb24pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZGVmZXJDb25zdHJhaW50cyh0cmFuc2FjdGlvbiwgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcclxuICAgICAgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uLnBhcmVudCB8fCB0cmFuc2FjdGlvblxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5kZWZlckNvbnN0cmFpbnRzUXVlcnkob3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKHNxbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBjb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgb3B0aW9ucykge1xyXG4gICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgVHJhbnNhY3Rpb24pKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNvbW1pdCBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgdHJhbnNhY3Rpb24gb2JqZWN0IScpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRyYW5zYWN0aW9uLnBhcmVudCkge1xyXG4gICAgICAvLyBTYXZlcG9pbnRzIGNhbm5vdCBiZSBjb21taXR0ZWRcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XHJcbiAgICAgIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbi5wYXJlbnQgfHwgdHJhbnNhY3Rpb24sXHJcbiAgICAgIHN1cHBvcnRzU2VhcmNoUGF0aDogZmFsc2UsXHJcbiAgICAgIGNvbXBsZXRlc1RyYW5zYWN0aW9uOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmNvbW1pdFRyYW5zYWN0aW9uUXVlcnkodHJhbnNhY3Rpb24pO1xyXG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XHJcblxyXG4gICAgdHJhbnNhY3Rpb24uZmluaXNoZWQgPSAnY29tbWl0JztcclxuXHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIHJvbGxiYWNrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIG9wdGlvbnMpIHtcclxuICAgIGlmICghdHJhbnNhY3Rpb24gfHwgISh0cmFuc2FjdGlvbiBpbnN0YW5jZW9mIFRyYW5zYWN0aW9uKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByb2xsYmFjayBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgdHJhbnNhY3Rpb24gb2JqZWN0IScpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XHJcbiAgICAgIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbi5wYXJlbnQgfHwgdHJhbnNhY3Rpb24sXHJcbiAgICAgIHN1cHBvcnRzU2VhcmNoUGF0aDogZmFsc2UsXHJcbiAgICAgIGNvbXBsZXRlc1RyYW5zYWN0aW9uOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIG9wdGlvbnMudHJhbnNhY3Rpb24ubmFtZSA9IHRyYW5zYWN0aW9uLnBhcmVudCA/IHRyYW5zYWN0aW9uLm5hbWUgOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnJvbGxiYWNrVHJhbnNhY3Rpb25RdWVyeSh0cmFuc2FjdGlvbik7XHJcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcclxuXHJcbiAgICB0cmFuc2FjdGlvbi5maW5pc2hlZCA9ICdyb2xsYmFjayc7XHJcblxyXG4gICAgcmV0dXJuIHByb21pc2U7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXJ5SW50ZXJmYWNlO1xyXG5tb2R1bGUuZXhwb3J0cy5RdWVyeUludGVyZmFjZSA9IFF1ZXJ5SW50ZXJmYWNlO1xyXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gUXVlcnlJbnRlcmZhY2U7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9xdWVyeS1pbnRlcmZhY2UuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIkRhdGFUeXBlcyIsIlNRTGl0ZVF1ZXJ5SW50ZXJmYWNlIiwiVHJhbnNhY3Rpb24iLCJQcm9taXNlIiwiUXVlcnlUeXBlcyIsIk9wIiwiUXVlcnlJbnRlcmZhY2UiLCJzZXF1ZWxpemUiLCJRdWVyeUdlbmVyYXRvciIsImRpYWxlY3QiLCJkYXRhYmFzZSIsIm9wdGlvbnMiLCJzcWwiLCJjcmVhdGVEYXRhYmFzZVF1ZXJ5IiwicXVlcnkiLCJkcm9wRGF0YWJhc2VRdWVyeSIsInNjaGVtYSIsImNyZWF0ZVNjaGVtYSIsImRyb3BTY2hlbWEiLCJfZGlhbGVjdCIsInN1cHBvcnRzIiwic2NoZW1hcyIsImRyb3AiLCJzaG93QWxsU2NoZW1hcyIsIm1hcCIsInNjaGVtYU5hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJyYXciLCJ0eXBlIiwiU0VMRUNUIiwic2hvd1NjaGVtYXNTcWwiLCJzaG93U2NoZW1hc1F1ZXJ5IiwidGhlbiIsInNjaGVtYU5hbWVzIiwiZmxhdHRlbiIsInZhbHVlIiwic2NoZW1hX25hbWUiLCJ2ZXJzaW9uUXVlcnkiLCJWRVJTSU9OIiwidGFibGVOYW1lIiwiYXR0cmlidXRlcyIsIm1vZGVsIiwicHJvbWlzZSIsImNsb25lIiwidW5pcXVlS2V5cyIsImZvck93biIsInVuaXF1ZUtleSIsImN1c3RvbUluZGV4IiwidW5kZWZpbmVkIiwibWFwVmFsdWVzIiwiYXR0cmlidXRlIiwibm9ybWFsaXplQXR0cmlidXRlIiwiUG9zdGdyZXNRdWVyeUludGVyZmFjZSIsImVuc3VyZUVudW1zIiwicmVzb2x2ZSIsIl9zY2hlbWEiLCJhZGRTY2hlbWEiLCJhdHRyaWJ1dGVzVG9TUUwiLCJ0YWJsZSIsImNvbnRleHQiLCJjcmVhdGVUYWJsZVF1ZXJ5IiwiY2FzY2FkZSIsImZvcmNlIiwiZHJvcFRhYmxlUXVlcnkiLCJwcm9taXNlcyIsImluc3RhbmNlVGFibGUiLCJtb2RlbE1hbmFnZXIiLCJnZXRNb2RlbCIsImdldFRhYmxlTmFtZSIsImtleXMiLCJyYXdBdHRyaWJ1dGVzIiwia2V5TGVuIiwibGVuZ3RoIiwiaSIsIkVOVU0iLCJwZ0VudW1Ecm9wIiwic3VwcG9ydHNTZWFyY2hQYXRoIiwicHVzaCIsImFsbCIsImdldCIsInNraXAiLCJkcm9wQWxsVGFibGVzIiwidGFibGVOYW1lcyIsImVhY2giLCJpbmNsdWRlcyIsImRyb3BUYWJsZSIsInNob3dBbGxUYWJsZXMiLCJyZXN1bHQiLCJmb3JlaWduS2V5c0FyZUVuYWJsZWQiLCJmb3JlaWduX2tleXMiLCJnZXRGb3JlaWduS2V5c0ZvclRhYmxlcyIsImZvcmVpZ25LZXlzIiwicXVlcmllcyIsImZvckVhY2giLCJub3JtYWxpemVkVGFibGVOYW1lIiwiaXNPYmplY3QiLCJmb3JlaWduS2V5IiwiZHJvcEZvcmVpZ25LZXlRdWVyeSIsInEiLCJlbnVtTmFtZSIsImdldERpYWxlY3QiLCJwZ0VzY2FwZUFuZFF1b3RlIiwicGdMaXN0RW51bXMiLCJlbnVtX25hbWUiLCJwbGFpbiIsImJlZm9yZSIsImFmdGVyIiwicmVuYW1lVGFibGVRdWVyeSIsIlNIT1dUQUJMRVMiLCJzaG93VGFibGVzU3FsIiwic2hvd1RhYmxlc1F1ZXJ5IiwiY29uZmlnIiwic2NoZW1hRGVsaW1pdGVyIiwiZGVzY3JpYmVUYWJsZVF1ZXJ5IiwiREVTQ1JJQkUiLCJkYXRhIiwiaXNFbXB0eSIsIkVycm9yIiwiY2F0Y2giLCJlIiwib3JpZ2luYWwiLCJjb2RlIiwia2V5IiwiYWRkQ29sdW1uUXVlcnkiLCJhdHRyaWJ1dGVOYW1lIiwicmVtb3ZlQ29sdW1uIiwicmVtb3ZlQ29sdW1uUXVlcnkiLCJkYXRhVHlwZU9yT3B0aW9ucyIsInZhbHVlcyIsImFsbG93TnVsbCIsImNoYW5nZUNvbHVtbiIsImNoYW5nZUNvbHVtblF1ZXJ5IiwiYXR0ck5hbWVCZWZvcmUiLCJhdHRyTmFtZUFmdGVyIiwiZGVzY3JpYmVUYWJsZSIsIl9vcHRpb25zIiwiZGVmYXVsdFZhbHVlIiwicmVuYW1lQ29sdW1uIiwicmVuYW1lQ29sdW1uUXVlcnkiLCJyYXdUYWJsZW5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJmaWVsZHMiLCJjbG9uZURlZXAiLCJhZGRJbmRleFF1ZXJ5Iiwic2hvd0luZGV4ZXNRdWVyeSIsIlNIT1dJTkRFWEVTIiwiRk9SRUlHTktFWVMiLCJnZXRGb3JlaWduS2V5c1F1ZXJ5IiwicmVzdWx0cyIsInIiLCJjb25zdHJhaW50X25hbWUiLCJmaWx0ZXIiLCJpZGVudGl0eSIsInF1ZXJ5T3B0aW9ucyIsImNhdGFsb2dOYW1lIiwiZ2V0Rm9yZWlnbktleVJlZmVyZW5jZXNGb3JUYWJsZSIsImluZGV4TmFtZU9yQXR0cmlidXRlcyIsInJlbW92ZUluZGV4UXVlcnkiLCJuYW1lIiwiYWRkQ29uc3RyYWludCIsImFkZENvbnN0cmFpbnRRdWVyeSIsImNvbnN0cmFpbnROYW1lIiwic2hvd0NvbnN0cmFpbnRzUXVlcnkiLCJTSE9XQ09OU1RSQUlOVFMiLCJyZW1vdmVDb25zdHJhaW50IiwicmVtb3ZlQ29uc3RyYWludFF1ZXJ5IiwiaW5zdGFuY2UiLCJoYXNUcmlnZ2VyIiwiY29uc3RydWN0b3IiLCJpbnNlcnRRdWVyeSIsIklOU0VSVCIsImlzTmV3UmVjb3JkIiwiaW5zZXJ0VmFsdWVzIiwidXBkYXRlVmFsdWVzIiwid2hlcmUiLCJ3aGVyZXMiLCJpbmRleGVzIiwiaW5kZXhGaWVsZHMiLCJpc1doZXJlRW1wdHkiLCJfaW5kZXhlcyIsInVuaXF1ZSIsImZpZWxkIiwiaXNQbGFpbk9iamVjdCIsImluZGV4IiwiaW50ZXJzZWN0aW9uIiwib3IiLCJVUFNFUlQiLCJ1cHNlcnRRdWVyeSIsInJlY29yZHMiLCJidWxrSW5zZXJ0UXVlcnkiLCJpZGVudGlmaWVyIiwiX21vZGVsT3B0aW9ucyIsInVwZGF0ZVF1ZXJ5IiwiVVBEQVRFIiwiZmluZCIsIm1vZGVscyIsIkJVTEtVUERBVEUiLCJjYXNjYWRlcyIsImRlbGV0ZVF1ZXJ5IiwiYXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb24iLCJvbkRlbGV0ZSIsInRvTG93ZXJDYXNlIiwidXNlSG9va3MiLCJhY2Nlc3NvcnMiLCJpbnN0YW5jZXMiLCJkZXN0cm95IiwiZGVmYXVsdHMiLCJsaW1pdCIsInRydW5jYXRlIiwidHJ1bmNhdGVUYWJsZVF1ZXJ5Iiwib3B0aW9uc0FyZyIsInNlbGVjdFF1ZXJ5IiwiYXJpdGhtZXRpY1F1ZXJ5IiwiYXR0cmlidXRlU2VsZWN0b3IiLCJNb2RlbCIsImRhdGFUeXBlIiwiREVDSU1BTCIsIkZMT0FUIiwicGFyc2VGbG9hdCIsIklOVEVHRVIiLCJCSUdJTlQiLCJwYXJzZUludCIsIkRBVEUiLCJEYXRlIiwidHJpZ2dlck5hbWUiLCJ0aW1pbmdUeXBlIiwiZmlyZU9uQXJyYXkiLCJmdW5jdGlvbk5hbWUiLCJmdW5jdGlvblBhcmFtcyIsIm9wdGlvbnNBcnJheSIsImNyZWF0ZVRyaWdnZXIiLCJkcm9wVHJpZ2dlciIsIm9sZFRyaWdnZXJOYW1lIiwibmV3VHJpZ2dlck5hbWUiLCJyZW5hbWVUcmlnZ2VyIiwicGFyYW1zIiwicmV0dXJuVHlwZSIsImxhbmd1YWdlIiwiYm9keSIsImNyZWF0ZUZ1bmN0aW9uIiwiZHJvcEZ1bmN0aW9uIiwib2xkRnVuY3Rpb25OYW1lIiwibmV3RnVuY3Rpb25OYW1lIiwicmVuYW1lRnVuY3Rpb24iLCJxdW90ZUlkZW50aWZpZXIiLCJxdW90ZVRhYmxlIiwiaWRlbnRpZmllcnMiLCJxdW90ZUlkZW50aWZpZXJzIiwiZXNjYXBlIiwidHJhbnNhY3Rpb24iLCJwYXJlbnQiLCJzZXRJc29sYXRpb25MZXZlbFF1ZXJ5Iiwic3RhcnRUcmFuc2FjdGlvblF1ZXJ5IiwiZGVmZXJDb25zdHJhaW50c1F1ZXJ5IiwiY29tcGxldGVzVHJhbnNhY3Rpb24iLCJjb21taXRUcmFuc2FjdGlvblF1ZXJ5IiwiZmluaXNoZWQiLCJyb2xsYmFja1RyYW5zYWN0aW9uUXVlcnkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUEsTUFBTUEs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QUFaLEdBQXVCLFVBQXZCO0FBRUEsYUFBT3hOLE9BQVA7QUFDRDs7Ozs7O0FBR0gwTixNQUFNLENBQUNDLE9BQVAsR0FBaUJoUSxjQUFqQjtBQUNBK1AsTUFBTSxDQUFDQyxPQUFQLENBQWVoUSxjQUFmLEdBQWdDQSxjQUFoQztBQUNBK1AsTUFBTSxDQUFDQyxPQUFQLENBQWVDLE9BQWYsR0FBeUJqUSxjQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG5jb25zdCBVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbmNvbnN0IERhdGFUeXBlcyA9IHJlcXVpcmUoJy4vZGF0YS10eXBlcycpO1xuY29uc3QgU1FMaXRlUXVlcnlJbnRlcmZhY2UgPSByZXF1aXJlKCcuL2RpYWxlY3RzL3NxbGl0ZS9xdWVyeS1pbnRlcmZhY2UnKTtcbmNvbnN0IFRyYW5zYWN0aW9uID0gcmVxdWlyZSgnLi90cmFuc2FjdGlvbicpO1xuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJy4vcHJvbWlzZScpO1xuY29uc3QgUXVlcnlUeXBlcyA9IHJlcXVpcmUoJy4vcXVlcnktdHlwZXMnKTtcbmNvbnN0IE9wID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMnKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHRoYXQgU2VxdWVsaXplIHVzZXMgdG8gdGFsayB0byBhbGwgZGF0YWJhc2VzXG4gKlxuICogQGNsYXNzIFF1ZXJ5SW50ZXJmYWNlXG4gKi9cbmNsYXNzIFF1ZXJ5SW50ZXJmYWNlIHtcbiAgY29uc3RydWN0b3Ioc2VxdWVsaXplKSB7XG4gICAgdGhpcy5zZXF1ZWxpemUgPSBzZXF1ZWxpemU7XG4gICAgdGhpcy5RdWVyeUdlbmVyYXRvciA9IHRoaXMuc2VxdWVsaXplLmRpYWxlY3QuUXVlcnlHZW5lcmF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZGF0YWJhc2VcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlICBEYXRhYmFzZSBuYW1lIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNoYXJzZXRdIERhdGFiYXNlIGRlZmF1bHQgY2hhcmFjdGVyIHNldCwgTVlTUUwgb25seVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29sbGF0ZV0gRGF0YWJhc2UgZGVmYXVsdCBjb2xsYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmVuY29kaW5nXSBEYXRhYmFzZSBkZWZhdWx0IGNoYXJhY3RlciBzZXQsIFBvc3RncmVTUUwgb25seVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY3R5cGVdIERhdGFiYXNlIGNoYXJhY3RlciBjbGFzc2lmaWNhdGlvbiwgUG9zdGdyZVNRTCBvbmx5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50ZW1wbGF0ZV0gVGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlIGZyb20gd2hpY2ggdG8gY3JlYXRlIHRoZSBuZXcgZGF0YWJhc2UsIFBvc3RncmVTUUwgb25seVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGNyZWF0ZURhdGFiYXNlKGRhdGFiYXNlLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5jcmVhdGVEYXRhYmFzZVF1ZXJ5KGRhdGFiYXNlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcm9wIGEgZGF0YWJhc2VcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlICBEYXRhYmFzZSBuYW1lIHRvIGRyb3BcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBRdWVyeSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgZHJvcERhdGFiYXNlKGRhdGFiYXNlLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5kcm9wRGF0YWJhc2VRdWVyeShkYXRhYmFzZSk7XG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc2NoZW1hXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWEgICAgU2NoZW1hIG5hbWUgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gUXVlcnkgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGNyZWF0ZVNjaGVtYShzY2hlbWEsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmNyZWF0ZVNjaGVtYShzY2hlbWEpO1xuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyb3AgYSBzY2hlbWFcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYSAgICBTY2hlbWEgbmFtZSB0byBkcm9wXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gUXVlcnkgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGRyb3BTY2hlbWEoc2NoZW1hLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5kcm9wU2NoZW1hKHNjaGVtYSk7XG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRHJvcCBhbGwgc2NoZW1hc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBkcm9wQWxsU2NoZW1hcyhvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoIXRoaXMuUXVlcnlHZW5lcmF0b3IuX2RpYWxlY3Quc3VwcG9ydHMuc2NoZW1hcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLmRyb3Aob3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNob3dBbGxTY2hlbWFzKG9wdGlvbnMpLm1hcChzY2hlbWFOYW1lID0+IHRoaXMuZHJvcFNjaGVtYShzY2hlbWFOYW1lLCBvcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBhbGwgc2NoZW1hc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuICAgKi9cbiAgc2hvd0FsbFNjaGVtYXMob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICByYXc6IHRydWUsXG4gICAgICB0eXBlOiB0aGlzLnNlcXVlbGl6ZS5RdWVyeVR5cGVzLlNFTEVDVFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2hvd1NjaGVtYXNTcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnNob3dTY2hlbWFzUXVlcnkob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc2hvd1NjaGVtYXNTcWwsIG9wdGlvbnMpLnRoZW4oc2NoZW1hTmFtZXMgPT4gXy5mbGF0dGVuKFxuICAgICAgc2NoZW1hTmFtZXMubWFwKHZhbHVlID0+IHZhbHVlLnNjaGVtYV9uYW1lID8gdmFsdWUuc2NoZW1hX25hbWUgOiB2YWx1ZSlcbiAgICApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gZGF0YWJhc2UgdmVyc2lvblxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgW29wdGlvbnNdICAgICAgUXVlcnkgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1F1ZXJ5VHlwZX0gW29wdGlvbnMudHlwZV0gUXVlcnkgdHlwZVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRhdGFiYXNlVmVyc2lvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KFxuICAgICAgdGhpcy5RdWVyeUdlbmVyYXRvci52ZXJzaW9uUXVlcnkoKSxcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgdHlwZTogUXVlcnlUeXBlcy5WRVJTSU9OIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSB0YWJsZSB3aXRoIGdpdmVuIHNldCBvZiBhdHRyaWJ1dGVzXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHF1ZXJ5SW50ZXJmYWNlLmNyZWF0ZVRhYmxlKFxuICAgKiAgICduYW1lT2ZUaGVOZXdUYWJsZScsXG4gICAqICAge1xuICAgKiAgICAgaWQ6IHtcbiAgICogICAgICAgdHlwZTogU2VxdWVsaXplLklOVEVHRVIsXG4gICAqICAgICAgIHByaW1hcnlLZXk6IHRydWUsXG4gICAqICAgICAgIGF1dG9JbmNyZW1lbnQ6IHRydWVcbiAgICogICAgIH0sXG4gICAqICAgICBjcmVhdGVkQXQ6IHtcbiAgICogICAgICAgdHlwZTogU2VxdWVsaXplLkRBVEVcbiAgICogICAgIH0sXG4gICAqICAgICB1cGRhdGVkQXQ6IHtcbiAgICogICAgICAgdHlwZTogU2VxdWVsaXplLkRBVEVcbiAgICogICAgIH0sXG4gICAqICAgICBhdHRyMTogU2VxdWVsaXplLlNUUklORyxcbiAgICogICAgIGF0dHIyOiBTZXF1ZWxpemUuSU5URUdFUixcbiAgICogICAgIGF0dHIzOiB7XG4gICAqICAgICAgIHR5cGU6IFNlcXVlbGl6ZS5CT09MRUFOLFxuICAgKiAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgKiAgICAgICBhbGxvd051bGw6IGZhbHNlXG4gICAqICAgICB9LFxuICAgKiAgICAgLy9mb3JlaWduIGtleSB1c2FnZVxuICAgKiAgICAgYXR0cjQ6IHtcbiAgICogICAgICAgdHlwZTogU2VxdWVsaXplLklOVEVHRVIsXG4gICAqICAgICAgIHJlZmVyZW5jZXM6IHtcbiAgICogICAgICAgICBtb2RlbDogJ2Fub3RoZXJfdGFibGVfbmFtZScsXG4gICAqICAgICAgICAga2V5OiAnaWQnXG4gICAqICAgICAgIH0sXG4gICAqICAgICAgIG9uVXBkYXRlOiAnY2FzY2FkZScsXG4gICAqICAgICAgIG9uRGVsZXRlOiAnY2FzY2FkZSdcbiAgICogICAgIH1cbiAgICogICB9LFxuICAgKiAgIHtcbiAgICogICAgIGVuZ2luZTogJ01ZSVNBTScsICAgIC8vIGRlZmF1bHQ6ICdJbm5vREInXG4gICAqICAgICBjaGFyc2V0OiAnbGF0aW4xJywgICAvLyBkZWZhdWx0OiBudWxsXG4gICAqICAgICBzY2hlbWE6ICdwdWJsaWMnLCAgICAvLyBkZWZhdWx0OiBwdWJsaWMsIFBvc3RncmVTUUwgb25seS5cbiAgICogICAgIGNvbW1lbnQ6ICdteSB0YWJsZScsIC8vIGNvbW1lbnQgZm9yIHRhYmxlXG4gICAqICAgICBjb2xsYXRlOiAnbGF0aW4xX2RhbmlzaF9jaScgLy8gY29sbGF0aW9uLCBNWVNRTCBvbmx5XG4gICAqICAgfVxuICAgKiApXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lICBOYW1lIG9mIHRhYmxlIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlcyBPYmplY3QgcmVwcmVzZW50aW5nIGEgbGlzdCBvZiB0YWJsZSBhdHRyaWJ1dGVzIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIGNyZWF0ZSB0YWJsZSBhbmQgcXVlcnkgb3B0aW9uc1xuICAgKiBAcGFyYW0ge01vZGVsfSAgW21vZGVsXSBtb2RlbCBjbGFzc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGNyZWF0ZVRhYmxlKHRhYmxlTmFtZSwgYXR0cmlidXRlcywgb3B0aW9ucywgbW9kZWwpIHtcbiAgICBsZXQgc3FsID0gJyc7XG4gICAgbGV0IHByb21pc2U7XG5cbiAgICBvcHRpb25zID0gXy5jbG9uZShvcHRpb25zKSB8fCB7fTtcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5pcXVlS2V5cykge1xuICAgICAgXy5mb3JPd24ob3B0aW9ucy51bmlxdWVLZXlzLCB1bmlxdWVLZXkgPT4ge1xuICAgICAgICBpZiAodW5pcXVlS2V5LmN1c3RvbUluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB1bmlxdWVLZXkuY3VzdG9tSW5kZXggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIG9wdGlvbnMudW5pcXVlS2V5cyA9IG9wdGlvbnMudW5pcXVlS2V5cyB8fCBtb2RlbC51bmlxdWVLZXlzO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMgPSBfLm1hcFZhbHVlcyhcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBhdHRyaWJ1dGUgPT4gdGhpcy5zZXF1ZWxpemUubm9ybWFsaXplQXR0cmlidXRlKGF0dHJpYnV0ZSlcbiAgICApO1xuXG4gICAgLy8gUG9zdGdyZXMgcmVxdWlyZXMgc3BlY2lhbCBTUUwgY29tbWFuZHMgZm9yIEVOVU0vRU5VTVtdXG4gICAgaWYgKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCA9PT0gJ3Bvc3RncmVzJykge1xuICAgICAgcHJvbWlzZSA9IFBvc3RncmVzUXVlcnlJbnRlcmZhY2UuZW5zdXJlRW51bXModGhpcywgdGFibGVOYW1lLCBhdHRyaWJ1dGVzLCBvcHRpb25zLCBtb2RlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhdGFibGVOYW1lLnNjaGVtYSAmJlxuICAgICAgKG9wdGlvbnMuc2NoZW1hIHx8ICEhbW9kZWwgJiYgbW9kZWwuX3NjaGVtYSlcbiAgICApIHtcbiAgICAgIHRhYmxlTmFtZSA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuYWRkU2NoZW1hKHtcbiAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICBfc2NoZW1hOiAhIW1vZGVsICYmIG1vZGVsLl9zY2hlbWEgfHwgb3B0aW9ucy5zY2hlbWFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmF0dHJpYnV0ZXNUb1NRTChhdHRyaWJ1dGVzLCB7IHRhYmxlOiB0YWJsZU5hbWUsIGNvbnRleHQ6ICdjcmVhdGVUYWJsZScgfSk7XG4gICAgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5jcmVhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSwgYXR0cmlidXRlcywgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKCgpID0+IHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyb3AgYSB0YWJsZSBmcm9tIGRhdGFiYXNlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgVGFibGUgbmFtZSB0byBkcm9wXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICAgUXVlcnkgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGRyb3BUYWJsZSh0YWJsZU5hbWUsIG9wdGlvbnMpIHtcbiAgICAvLyBpZiB3ZSdyZSBmb3JjaW5nIHdlIHNob3VsZCBiZSBjYXNjYWRpbmcgdW5sZXNzIGV4cGxpY2l0bHkgc3RhdGVkIG90aGVyd2lzZVxuICAgIG9wdGlvbnMgPSBfLmNsb25lKG9wdGlvbnMpIHx8IHt9O1xuICAgIG9wdGlvbnMuY2FzY2FkZSA9IG9wdGlvbnMuY2FzY2FkZSB8fCBvcHRpb25zLmZvcmNlIHx8IGZhbHNlO1xuXG4gICAgbGV0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuZHJvcFRhYmxlUXVlcnkodGFibGVOYW1lLCBvcHRpb25zKTtcblxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgLy8gU2luY2UgcG9zdGdyZXMgaGFzIGEgc3BlY2lhbCBjYXNlIGZvciBlbnVtcywgd2Ugc2hvdWxkIGRyb3AgdGhlIHJlbGF0ZWRcbiAgICAgIC8vIGVudW0gdHlwZSB3aXRoaW4gdGhlIHRhYmxlIGFuZCBhdHRyaWJ1dGVcbiAgICAgIGlmICh0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QgPT09ICdwb3N0Z3JlcycpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VUYWJsZSA9IHRoaXMuc2VxdWVsaXplLm1vZGVsTWFuYWdlci5nZXRNb2RlbCh0YWJsZU5hbWUsIHsgYXR0cmlidXRlOiAndGFibGVOYW1lJyB9KTtcblxuICAgICAgICBpZiAoaW5zdGFuY2VUYWJsZSkge1xuICAgICAgICAgIGNvbnN0IGdldFRhYmxlTmFtZSA9ICghb3B0aW9ucyB8fCAhb3B0aW9ucy5zY2hlbWEgfHwgb3B0aW9ucy5zY2hlbWEgPT09ICdwdWJsaWMnID8gJycgOiBgJHtvcHRpb25zLnNjaGVtYX1fYCkgKyB0YWJsZU5hbWU7XG5cbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5zdGFuY2VUYWJsZS5yYXdBdHRyaWJ1dGVzKTtcbiAgICAgICAgICBjb25zdCBrZXlMZW4gPSBrZXlzLmxlbmd0aDtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5TGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZVRhYmxlLnJhd0F0dHJpYnV0ZXNba2V5c1tpXV0udHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5FTlVNKSB7XG4gICAgICAgICAgICAgIHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IucGdFbnVtRHJvcChnZXRUYWJsZU5hbWUsIGtleXNbaV0pO1xuICAgICAgICAgICAgICBvcHRpb25zLnN1cHBvcnRzU2VhcmNoUGF0aCA9IGZhbHNlO1xuICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyByYXc6IHRydWUgfSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS5nZXQoMCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRHJvcCBhbGwgdGFibGVzIGZyb20gZGF0YWJhc2VcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBxdWVyeSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9ICBbb3B0aW9ucy5za2lwXSBMaXN0IG9mIHRhYmxlIHRvIHNraXBcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBkcm9wQWxsVGFibGVzKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBza2lwID0gb3B0aW9ucy5za2lwIHx8IFtdO1xuXG4gICAgY29uc3QgZHJvcEFsbFRhYmxlcyA9IHRhYmxlTmFtZXMgPT4gUHJvbWlzZS5lYWNoKHRhYmxlTmFtZXMsIHRhYmxlTmFtZSA9PiB7XG4gICAgICAvLyBpZiB0YWJsZU5hbWUgaXMgbm90IGluIHRoZSBBcnJheSBvZiB0YWJsZXMgbmFtZXMgdGhlbiBkb24ndCBkcm9wIGl0XG4gICAgICBpZiAoIXNraXAuaW5jbHVkZXModGFibGVOYW1lLnRhYmxlTmFtZSB8fCB0YWJsZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyb3BUYWJsZSh0YWJsZU5hbWUsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgY2FzY2FkZTogdHJ1ZSB9KSApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbFRhYmxlcyhvcHRpb25zKS50aGVuKHRhYmxlTmFtZXMgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCA9PT0gJ3NxbGl0ZScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KCdQUkFHTUEgZm9yZWlnbl9rZXlzOycsIG9wdGlvbnMpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JlaWduS2V5c0FyZUVuYWJsZWQgPSByZXN1bHQuZm9yZWlnbl9rZXlzID09PSAxO1xuXG4gICAgICAgICAgaWYgKGZvcmVpZ25LZXlzQXJlRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KCdQUkFHTUEgZm9yZWlnbl9rZXlzID0gT0ZGJywgb3B0aW9ucylcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gZHJvcEFsbFRhYmxlcyh0YWJsZU5hbWVzKSlcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5zZXF1ZWxpemUucXVlcnkoJ1BSQUdNQSBmb3JlaWduX2tleXMgPSBPTicsIG9wdGlvbnMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRyb3BBbGxUYWJsZXModGFibGVOYW1lcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9yZWlnbktleXNGb3JUYWJsZXModGFibGVOYW1lcywgb3B0aW9ucykudGhlbihmb3JlaWduS2V5cyA9PiB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBbXTtcblxuICAgICAgICB0YWJsZU5hbWVzLmZvckVhY2godGFibGVOYW1lID0+IHtcbiAgICAgICAgICBsZXQgbm9ybWFsaXplZFRhYmxlTmFtZSA9IHRhYmxlTmFtZTtcbiAgICAgICAgICBpZiAoXy5pc09iamVjdCh0YWJsZU5hbWUpKSB7XG4gICAgICAgICAgICBub3JtYWxpemVkVGFibGVOYW1lID0gYCR7dGFibGVOYW1lLnNjaGVtYX0uJHt0YWJsZU5hbWUudGFibGVOYW1lfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yZWlnbktleXNbbm9ybWFsaXplZFRhYmxlTmFtZV0uZm9yRWFjaChmb3JlaWduS2V5ID0+IHtcbiAgICAgICAgICAgIHF1ZXJpZXMucHVzaCh0aGlzLlF1ZXJ5R2VuZXJhdG9yLmRyb3BGb3JlaWduS2V5UXVlcnkodGFibGVOYW1lLCBmb3JlaWduS2V5KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmVhY2gocXVlcmllcywgcSA9PiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShxLCBvcHRpb25zKSlcbiAgICAgICAgICAudGhlbigoKSA9PiBkcm9wQWxsVGFibGVzKHRhYmxlTmFtZXMpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERyb3Agc3BlY2lmaWVkIGVudW0gZnJvbSBkYXRhYmFzZSAoUG9zdGdyZXMgb25seSlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtlbnVtTmFtZV0gIEVudW0gbmFtZSB0byBkcm9wXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFF1ZXJ5IG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkcm9wRW51bShlbnVtTmFtZSwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzLnNlcXVlbGl6ZS5nZXREaWFsZWN0KCkgIT09ICdwb3N0Z3JlcycpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShcbiAgICAgIHRoaXMuUXVlcnlHZW5lcmF0b3IucGdFbnVtRHJvcChudWxsLCBudWxsLCB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnBnRXNjYXBlQW5kUXVvdGUoZW51bU5hbWUpKSxcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgcmF3OiB0cnVlIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcm9wIGFsbCBlbnVtcyBmcm9tIGRhdGFiYXNlIChQb3N0Z3JlcyBvbmx5KVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBRdWVyeSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZHJvcEFsbEVudW1zKG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5zZXF1ZWxpemUuZ2V0RGlhbGVjdCgpICE9PSAncG9zdGdyZXMnKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICByZXR1cm4gdGhpcy5wZ0xpc3RFbnVtcyhudWxsLCBvcHRpb25zKS5tYXAocmVzdWx0ID0+IHRoaXMuc2VxdWVsaXplLnF1ZXJ5KFxuICAgICAgdGhpcy5RdWVyeUdlbmVyYXRvci5wZ0VudW1Ecm9wKG51bGwsIG51bGwsIHRoaXMuUXVlcnlHZW5lcmF0b3IucGdFc2NhcGVBbmRRdW90ZShyZXN1bHQuZW51bV9uYW1lKSksXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7IHJhdzogdHJ1ZSB9KVxuICAgICkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgYWxsIGVudW1zIChQb3N0Z3JlcyBvbmx5KVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhYmxlTmFtZV0gIFRhYmxlIHdob3NlIGVudW0gdG8gbGlzdFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdICAgIFF1ZXJ5IG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwZ0xpc3RFbnVtcyh0YWJsZU5hbWUsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnBnTGlzdEVudW1zKHRhYmxlTmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyBwbGFpbjogZmFsc2UsIHJhdzogdHJ1ZSwgdHlwZTogUXVlcnlUeXBlcy5TRUxFQ1QgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmFtZSBhIHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiZWZvcmUgICAgQ3VycmVudCBuYW1lIG9mIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZnRlciAgICAgTmV3IG5hbWUgZnJvbSB0YWJsZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFF1ZXJ5IG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICByZW5hbWVUYWJsZShiZWZvcmUsIGFmdGVyLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5yZW5hbWVUYWJsZVF1ZXJ5KGJlZm9yZSwgYWZ0ZXIpO1xuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgdGFibGVzIGluIGN1cnJlbnQgZGF0YWJhc2VcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgIFtvcHRpb25zXSBRdWVyeSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICBbb3B0aW9ucy5yYXc9dHJ1ZV0gUnVuIHF1ZXJ5IGluIHJhdyBtb2RlXG4gICAqIEBwYXJhbSB7UXVlcnlUeXBlfSBbb3B0aW9ucy50eXBlPVF1ZXJ5VHlwZS5TSE9XVEFCTEVdIHF1ZXJ5IHR5cGVcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2hvd0FsbFRhYmxlcyhvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgIHJhdzogdHJ1ZSxcbiAgICAgIHR5cGU6IFF1ZXJ5VHlwZXMuU0hPV1RBQkxFU1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2hvd1RhYmxlc1NxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3Iuc2hvd1RhYmxlc1F1ZXJ5KHRoaXMuc2VxdWVsaXplLmNvbmZpZy5kYXRhYmFzZSk7XG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNob3dUYWJsZXNTcWwsIG9wdGlvbnMpLnRoZW4odGFibGVOYW1lcyA9PiBfLmZsYXR0ZW4odGFibGVOYW1lcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlIGEgdGFibGUgc3RydWN0dXJlXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkgb2YgaGFzaGVzIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGF0dHJpYnV0ZXMgaW4gdGhlIHRhYmxlLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB7XG4gICAqICAgIG5hbWU6IHtcbiAgICogICAgICB0eXBlOiAgICAgICAgICdWQVJDSEFSKDI1NSknLCAvLyB0aGlzIHdpbGwgYmUgJ0NIQVJBQ1RFUiBWQVJZSU5HJyBmb3IgcGchXG4gICAqICAgICAgYWxsb3dOdWxsOiAgICB0cnVlLFxuICAgKiAgICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICAgKiAgICB9LFxuICAgKiAgICBpc0JldGFNZW1iZXI6IHtcbiAgICogICAgICB0eXBlOiAgICAgICAgICdUSU5ZSU5UKDEpJywgLy8gdGhpcyB3aWxsIGJlICdCT09MRUFOJyBmb3IgcGchXG4gICAqICAgICAgYWxsb3dOdWxsOiAgICBmYWxzZSxcbiAgICogICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gICAqICAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSB0YWJsZSBuYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gUXVlcnkgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fVxuICAgKi9cbiAgZGVzY3JpYmVUYWJsZSh0YWJsZU5hbWUsIG9wdGlvbnMpIHtcbiAgICBsZXQgc2NoZW1hID0gbnVsbDtcbiAgICBsZXQgc2NoZW1hRGVsaW1pdGVyID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNjaGVtYSA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgc2NoZW1hID0gb3B0aW9ucy5zY2hlbWEgfHwgbnVsbDtcbiAgICAgIHNjaGVtYURlbGltaXRlciA9IG9wdGlvbnMuc2NoZW1hRGVsaW1pdGVyIHx8IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0YWJsZU5hbWUgPT09ICdvYmplY3QnICYmIHRhYmxlTmFtZSAhPT0gbnVsbCkge1xuICAgICAgc2NoZW1hID0gdGFibGVOYW1lLnNjaGVtYTtcbiAgICAgIHRhYmxlTmFtZSA9IHRhYmxlTmFtZS50YWJsZU5hbWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5kZXNjcmliZVRhYmxlUXVlcnkodGFibGVOYW1lLCBzY2hlbWEsIHNjaGVtYURlbGltaXRlcik7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgdHlwZTogUXVlcnlUeXBlcy5ERVNDUklCRSB9KTtcblxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAvKlxuICAgICAgICogSWYgbm8gZGF0YSBpcyByZXR1cm5lZCBmcm9tIHRoZSBxdWVyeSwgdGhlbiB0aGUgdGFibGUgbmFtZSBtYXkgYmUgd3JvbmcuXG4gICAgICAgKiBRdWVyeSBnZW5lcmF0b3JzIHRoYXQgdXNlIGluZm9ybWF0aW9uX3NjaGVtYSBmb3IgcmV0cmlldmluZyB0YWJsZSBpbmZvIHdpbGwganVzdCByZXR1cm4gYW4gZW1wdHkgcmVzdWx0IHNldCxcbiAgICAgICAqIGl0IHdpbGwgbm90IHRocm93IGFuIGVycm9yIGxpa2UgYnVpbHQtaW5zIGRvIChlLmcuIERFU0NSSUJFIG9uIE15U3FsKS5cbiAgICAgICAqL1xuICAgICAgaWYgKF8uaXNFbXB0eShkYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRlc2NyaXB0aW9uIGZvdW5kIGZvciBcIiR7dGFibGVOYW1lfVwiIHRhYmxlLiBDaGVjayB0aGUgdGFibGUgbmFtZSBhbmQgc2NoZW1hOyByZW1lbWJlciwgdGhleSBfYXJlXyBjYXNlIHNlbnNpdGl2ZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBpZiAoZS5vcmlnaW5hbCAmJiBlLm9yaWdpbmFsLmNvZGUgPT09ICdFUl9OT19TVUNIX1RBQkxFJykge1xuICAgICAgICB0aHJvdyBFcnJvcihgTm8gZGVzY3JpcHRpb24gZm91bmQgZm9yIFwiJHt0YWJsZU5hbWV9XCIgdGFibGUuIENoZWNrIHRoZSB0YWJsZSBuYW1lIGFuZCBzY2hlbWE7IHJlbWVtYmVyLCB0aGV5IF9hcmVfIGNhc2Ugc2Vuc2l0aXZlLmApO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBjb2x1bW4gdG8gYSB0YWJsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBxdWVyeUludGVyZmFjZS5hZGRDb2x1bW4oJ3RhYmxlQScsICdjb2x1bW5DJywgU2VxdWVsaXplLlNUUklORywge1xuICAgKiAgICBhZnRlcjogJ2NvbHVtbkInIC8vIGFmdGVyIG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBieSBNeVNRTFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZSAgICAgVGFibGUgdG8gYWRkIGNvbHVtbiB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5ICAgICAgIENvbHVtbiBuYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGUgQXR0cmlidXRlIGRlZmluaXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBRdWVyeSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgYWRkQ29sdW1uKHRhYmxlLCBrZXksIGF0dHJpYnV0ZSwgb3B0aW9ucykge1xuICAgIGlmICghdGFibGUgfHwgIWtleSB8fCAhYXR0cmlidXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZENvbHVtbiB0YWtlcyBhdCBsZWFzdCAzIGFyZ3VtZW50cyAodGFibGUsIGF0dHJpYnV0ZSBuYW1lLCBhdHRyaWJ1dGUgZGVmaW5pdGlvbiknKTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBhdHRyaWJ1dGUgPSB0aGlzLnNlcXVlbGl6ZS5ub3JtYWxpemVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkodGhpcy5RdWVyeUdlbmVyYXRvci5hZGRDb2x1bW5RdWVyeSh0YWJsZSwga2V5LCBhdHRyaWJ1dGUpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBjb2x1bW4gZnJvbSBhIHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgICAgICBUYWJsZSB0byByZW1vdmUgY29sdW1uIGZyb21cbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZU5hbWUgIENvbHVtbiBuYW1lIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdICAgICAgUXVlcnkgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHJlbW92ZUNvbHVtbih0YWJsZU5hbWUsIGF0dHJpYnV0ZU5hbWUsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBzd2l0Y2ggKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdCkge1xuICAgICAgY2FzZSAnc3FsaXRlJzpcbiAgICAgICAgLy8gc3FsaXRlIG5lZWRzIHNvbWUgc3BlY2lhbCB0cmVhdG1lbnQgYXMgaXQgY2Fubm90IGRyb3AgYSBjb2x1bW5cbiAgICAgICAgcmV0dXJuIFNRTGl0ZVF1ZXJ5SW50ZXJmYWNlLnJlbW92ZUNvbHVtbih0aGlzLCB0YWJsZU5hbWUsIGF0dHJpYnV0ZU5hbWUsIG9wdGlvbnMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHRoaXMuUXVlcnlHZW5lcmF0b3IucmVtb3ZlQ29sdW1uUXVlcnkodGFibGVOYW1lLCBhdHRyaWJ1dGVOYW1lKSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBhIGNvbHVtbiBkZWZpbml0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgICAgICAgICAgVGFibGUgbmFtZSB0byBjaGFuZ2UgZnJvbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlTmFtZSAgICAgIENvbHVtbiBuYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVHlwZU9yT3B0aW9ucyAgQXR0cmlidXRlIGRlZmluaXRpb24gZm9yIG5ldyBjb2x1bW5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAgICAgICAgICBRdWVyeSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgY2hhbmdlQ29sdW1uKHRhYmxlTmFtZSwgYXR0cmlidXRlTmFtZSwgZGF0YVR5cGVPck9wdGlvbnMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoXy52YWx1ZXMoRGF0YVR5cGVzKS5pbmNsdWRlcyhkYXRhVHlwZU9yT3B0aW9ucykpIHtcbiAgICAgIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0gPSB7IHR5cGU6IGRhdGFUeXBlT3JPcHRpb25zLCBhbGxvd051bGw6IHRydWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSA9IGRhdGFUeXBlT3JPcHRpb25zO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0gPSB0aGlzLnNlcXVlbGl6ZS5ub3JtYWxpemVBdHRyaWJ1dGUoYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSk7XG5cbiAgICBpZiAodGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0ID09PSAnc3FsaXRlJykge1xuICAgICAgLy8gc3FsaXRlIG5lZWRzIHNvbWUgc3BlY2lhbCB0cmVhdG1lbnQgYXMgaXQgY2Fubm90IGNoYW5nZSBhIGNvbHVtblxuICAgICAgcmV0dXJuIFNRTGl0ZVF1ZXJ5SW50ZXJmYWNlLmNoYW5nZUNvbHVtbih0aGlzLCB0YWJsZU5hbWUsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuYXR0cmlidXRlc1RvU1FMKGF0dHJpYnV0ZXMsIHtcbiAgICAgIGNvbnRleHQ6ICdjaGFuZ2VDb2x1bW4nLFxuICAgICAgdGFibGU6IHRhYmxlTmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuY2hhbmdlQ29sdW1uUXVlcnkodGFibGVOYW1lLCBxdWVyeSk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5hbWUgYSBjb2x1bW5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAgICAgICAgVGFibGUgbmFtZSB3aG9zZSBjb2x1bW4gdG8gcmVuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyTmFtZUJlZm9yZSAgIEN1cnJlbnQgY29sdW1uIG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJOYW1lQWZ0ZXIgICAgTmV3IGNvbHVtbiBuYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gICAgICAgIFF1ZXJ5IG9wdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHJlbmFtZUNvbHVtbih0YWJsZU5hbWUsIGF0dHJOYW1lQmVmb3JlLCBhdHRyTmFtZUFmdGVyLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpYmVUYWJsZSh0YWJsZU5hbWUsIG9wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICBpZiAoIWRhdGFbYXR0ck5hbWVCZWZvcmVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IGRvZXNuJ3QgaGF2ZSB0aGUgY29sdW1uICR7YXR0ck5hbWVCZWZvcmV9YCk7XG4gICAgICB9XG5cbiAgICAgIGRhdGEgPSBkYXRhW2F0dHJOYW1lQmVmb3JlXSB8fCB7fTtcblxuICAgICAgY29uc3QgX29wdGlvbnMgPSB7fTtcblxuICAgICAgX29wdGlvbnNbYXR0ck5hbWVBZnRlcl0gPSB7XG4gICAgICAgIGF0dHJpYnV0ZTogYXR0ck5hbWVBZnRlcixcbiAgICAgICAgdHlwZTogZGF0YS50eXBlLFxuICAgICAgICBhbGxvd051bGw6IGRhdGEuYWxsb3dOdWxsLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGRhdGEuZGVmYXVsdFZhbHVlXG4gICAgICB9O1xuXG4gICAgICAvLyBmaXg6IGEgbm90LW51bGwgY29sdW1uIGNhbm5vdCBoYXZlIG51bGwgYXMgZGVmYXVsdCB2YWx1ZVxuICAgICAgaWYgKGRhdGEuZGVmYXVsdFZhbHVlID09PSBudWxsICYmICFkYXRhLmFsbG93TnVsbCkge1xuICAgICAgICBkZWxldGUgX29wdGlvbnNbYXR0ck5hbWVBZnRlcl0uZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0ID09PSAnc3FsaXRlJykge1xuICAgICAgICAvLyBzcWxpdGUgbmVlZHMgc29tZSBzcGVjaWFsIHRyZWF0bWVudCBhcyBpdCBjYW5ub3QgcmVuYW1lIGEgY29sdW1uXG4gICAgICAgIHJldHVybiBTUUxpdGVRdWVyeUludGVyZmFjZS5yZW5hbWVDb2x1bW4odGhpcywgdGFibGVOYW1lLCBhdHRyTmFtZUJlZm9yZSwgYXR0ck5hbWVBZnRlciwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnJlbmFtZUNvbHVtblF1ZXJ5KFxuICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgIGF0dHJOYW1lQmVmb3JlLFxuICAgICAgICB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmF0dHJpYnV0ZXNUb1NRTChfb3B0aW9ucylcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gaW5kZXggdG8gYSBjb2x1bW5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSAgdGFibGVOYW1lIFRhYmxlIG5hbWUgdG8gYWRkIGluZGV4IG9uLCBjYW4gYmUgYSBvYmplY3Qgd2l0aCBzY2hlbWFcbiAgICogQHBhcmFtIHtBcnJheX0gICBbYXR0cmlidXRlc10gICAgIFVzZSBvcHRpb25zLmZpZWxkcyBpbnN0ZWFkLCBMaXN0IG9mIGF0dHJpYnV0ZXMgdG8gYWRkIGluZGV4IG9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICBpbmRleGVzIG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gICBvcHRpb25zLmZpZWxkcyAgIExpc3Qgb2YgYXR0cmlidXRlcyB0byBhZGQgaW5kZXggb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jb25jdXJyZW50bHldIFBhc3MgQ09OQ1VSUkVOVCBzbyBvdGhlciBvcGVyYXRpb25zIHJ1biB3aGlsZSB0aGUgaW5kZXggaXMgY3JlYXRlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnVuaXF1ZV0gQ3JlYXRlIGEgdW5pcXVlIGluZGV4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW29wdGlvbnMudXNpbmddICBVc2VmdWwgZm9yIEdJTiBpbmRleGVzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW29wdGlvbnMub3BlcmF0b3JdIEluZGV4IG9wZXJhdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW29wdGlvbnMudHlwZV0gICBUeXBlIG9mIGluZGV4LCBhdmFpbGFibGUgb3B0aW9ucyBhcmUgVU5JUVVFfEZVTExURVhUfFNQQVRJQUxcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBbb3B0aW9ucy5uYW1lXSAgIE5hbWUgb2YgdGhlIGluZGV4LiBEZWZhdWx0IGlzIDx0YWJsZT5fPGF0dHIxPl88YXR0cjI+XG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgW29wdGlvbnMud2hlcmVdICBXaGVyZSBjb25kaXRpb24gb24gaW5kZXgsIGZvciBwYXJ0aWFsIGluZGV4ZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBbcmF3VGFibGVuYW1lXSAgIHRhYmxlIG5hbWUsIHRoaXMgaXMganVzdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpaXR5XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgYWRkSW5kZXgodGFibGVOYW1lLCBhdHRyaWJ1dGVzLCBvcHRpb25zLCByYXdUYWJsZW5hbWUpIHtcbiAgICAvLyBTdXBwb3J0IGZvciBwYXNzaW5nIHRhYmxlTmFtZSwgYXR0cmlidXRlcywgb3B0aW9ucyBvciB0YWJsZU5hbWUsIG9wdGlvbnMgKHdpdGggYSBmaWVsZHMgcGFyYW0gd2hpY2ggaXMgdGhlIGF0dHJpYnV0ZXMpXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGF0dHJpYnV0ZXMpKSB7XG4gICAgICByYXdUYWJsZW5hbWUgPSBvcHRpb25zO1xuICAgICAgb3B0aW9ucyA9IGF0dHJpYnV0ZXM7XG4gICAgICBhdHRyaWJ1dGVzID0gb3B0aW9ucy5maWVsZHM7XG4gICAgfVxuXG4gICAgaWYgKCFyYXdUYWJsZW5hbWUpIHtcbiAgICAgIC8vIE1hcCBmb3IgYmFja3dhcmRzIGNvbXBhdFxuICAgICAgcmF3VGFibGVuYW1lID0gdGFibGVOYW1lO1xuICAgIH1cblxuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XG4gICAgb3B0aW9ucy5maWVsZHMgPSBhdHRyaWJ1dGVzO1xuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuYWRkSW5kZXhRdWVyeSh0YWJsZU5hbWUsIG9wdGlvbnMsIHJhd1RhYmxlbmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyBzdXBwb3J0c1NlYXJjaFBhdGg6IGZhbHNlIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGluZGV4ZXMgb24gYSB0YWJsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIHRhYmxlIG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAgIFF1ZXJ5IG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2hvd0luZGV4KHRhYmxlTmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3Iuc2hvd0luZGV4ZXNRdWVyeSh0YWJsZU5hbWUsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgdHlwZTogUXVlcnlUeXBlcy5TSE9XSU5ERVhFUyB9KSk7XG4gIH1cblxuICBnZXRGb3JlaWduS2V5c0ZvclRhYmxlcyh0YWJsZU5hbWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKHRhYmxlTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyB8fCB7fSwgeyB0eXBlOiBRdWVyeVR5cGVzLkZPUkVJR05LRVlTIH0pO1xuXG4gICAgcmV0dXJuIFByb21pc2UubWFwKHRhYmxlTmFtZXMsIHRhYmxlTmFtZSA9PlxuICAgICAgdGhpcy5zZXF1ZWxpemUucXVlcnkodGhpcy5RdWVyeUdlbmVyYXRvci5nZXRGb3JlaWduS2V5c1F1ZXJ5KHRhYmxlTmFtZSwgdGhpcy5zZXF1ZWxpemUuY29uZmlnLmRhdGFiYXNlKSwgb3B0aW9ucylcbiAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSB7fTtcblxuICAgICAgdGFibGVOYW1lcy5mb3JFYWNoKCh0YWJsZU5hbWUsIGkpID0+IHtcbiAgICAgICAgaWYgKF8uaXNPYmplY3QodGFibGVOYW1lKSkge1xuICAgICAgICAgIHRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZS5zY2hlbWF9LiR7dGFibGVOYW1lLnRhYmxlTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W3RhYmxlTmFtZV0gPSBBcnJheS5pc0FycmF5KHJlc3VsdHNbaV0pXG4gICAgICAgICAgPyByZXN1bHRzW2ldLm1hcChyID0+IHIuY29uc3RyYWludF9uYW1lKVxuICAgICAgICAgIDogW3Jlc3VsdHNbaV0gJiYgcmVzdWx0c1tpXS5jb25zdHJhaW50X25hbWVdO1xuXG4gICAgICAgIHJlc3VsdFt0YWJsZU5hbWVdID0gcmVzdWx0W3RhYmxlTmFtZV0uZmlsdGVyKF8uaWRlbnRpdHkpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZvcmVpZ24ga2V5IHJlZmVyZW5jZXMgZGV0YWlscyBmb3IgdGhlIHRhYmxlXG4gICAqXG4gICAqIFRob3NlIGRldGFpbHMgY29udGFpbnMgY29uc3RyYWludFNjaGVtYSwgY29uc3RyYWludE5hbWUsIGNvbnN0cmFpbnRDYXRhbG9nXG4gICAqIHRhYmxlQ2F0YWxvZywgdGFibGVTY2hlbWEsIHRhYmxlTmFtZSwgY29sdW1uTmFtZSxcbiAgICogcmVmZXJlbmNlZFRhYmxlQ2F0YWxvZywgcmVmZXJlbmNlZFRhYmxlQ2F0YWxvZywgcmVmZXJlbmNlZFRhYmxlU2NoZW1hLCByZWZlcmVuY2VkVGFibGVOYW1lLCByZWZlcmVuY2VkQ29sdW1uTmFtZS5cbiAgICogUmVtaW5kOiBjb25zdHJhaW50IGluZm9ybWF0aW9ucyB3b24ndCByZXR1cm4gaWYgaXQncyBzcWxpdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgdGFibGUgbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdICBRdWVyeSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgZ2V0Rm9yZWlnbktleVJlZmVyZW5jZXNGb3JUYWJsZSh0YWJsZU5hbWUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICB0eXBlOiBRdWVyeVR5cGVzLkZPUkVJR05LRVlTXG4gICAgfSk7XG4gICAgY29uc3QgY2F0YWxvZ05hbWUgPSB0aGlzLnNlcXVlbGl6ZS5jb25maWcuZGF0YWJhc2U7XG4gICAgc3dpdGNoICh0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3QpIHtcbiAgICAgIGNhc2UgJ3NxbGl0ZSc6XG4gICAgICAgIC8vIHNxbGl0ZSBuZWVkcyBzb21lIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgICByZXR1cm4gU1FMaXRlUXVlcnlJbnRlcmZhY2UuZ2V0Rm9yZWlnbktleVJlZmVyZW5jZXNGb3JUYWJsZSh0aGlzLCB0YWJsZU5hbWUsIHF1ZXJ5T3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5RdWVyeUdlbmVyYXRvci5nZXRGb3JlaWduS2V5c1F1ZXJ5KHRhYmxlTmFtZSwgY2F0YWxvZ05hbWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkocXVlcnksIHF1ZXJ5T3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBhbHJlYWR5IGV4aXN0aW5nIGluZGV4IGZyb20gYSB0YWJsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lICAgICAgICAgICAgIFRhYmxlIG5hbWUgdG8gZHJvcCBpbmRleCBmcm9tXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbmRleE5hbWVPckF0dHJpYnV0ZXMgSW5kZXggbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdICAgICAgICAgICAgIFF1ZXJ5IG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICByZW1vdmVJbmRleCh0YWJsZU5hbWUsIGluZGV4TmFtZU9yQXR0cmlidXRlcywgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IucmVtb3ZlSW5kZXhRdWVyeSh0YWJsZU5hbWUsIGluZGV4TmFtZU9yQXR0cmlidXRlcyk7XG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY29uc3RyYWludCB0byBhIHRhYmxlXG4gICAqXG4gICAqIEF2YWlsYWJsZSBjb25zdHJhaW50czpcbiAgICogLSBVTklRVUVcbiAgICogLSBERUZBVUxUIChNU1NRTCBvbmx5KVxuICAgKiAtIENIRUNLIChNeVNRTCAtIElnbm9yZWQgYnkgdGhlIGRhdGFiYXNlIGVuZ2luZSApXG4gICAqIC0gRk9SRUlHTiBLRVlcbiAgICogLSBQUklNQVJZIEtFWVxuICAgKlxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5VTklRVUU8L2NhcHRpb24+XG4gICAqIHF1ZXJ5SW50ZXJmYWNlLmFkZENvbnN0cmFpbnQoJ1VzZXJzJywgWydlbWFpbCddLCB7XG4gICAqICAgdHlwZTogJ3VuaXF1ZScsXG4gICAqICAgbmFtZTogJ2N1c3RvbV91bmlxdWVfY29uc3RyYWludF9uYW1lJ1xuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+Q0hFQ0s8L2NhcHRpb24+XG4gICAqIHF1ZXJ5SW50ZXJmYWNlLmFkZENvbnN0cmFpbnQoJ1VzZXJzJywgWydyb2xlcyddLCB7XG4gICAqICAgdHlwZTogJ2NoZWNrJyxcbiAgICogICB3aGVyZToge1xuICAgKiAgICAgIHJvbGVzOiBbJ3VzZXInLCAnYWRtaW4nLCAnbW9kZXJhdG9yJywgJ2d1ZXN0J11cbiAgICogICB9XG4gICAqIH0pO1xuICAgKlxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5EZWZhdWx0IC0gTVNTUUwgb25seTwvY2FwdGlvbj5cbiAgICogcXVlcnlJbnRlcmZhY2UuYWRkQ29uc3RyYWludCgnVXNlcnMnLCBbJ3JvbGVzJ10sIHtcbiAgICogICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgKiAgICBkZWZhdWx0VmFsdWU6ICdndWVzdCdcbiAgICogfSk7XG4gICAqXG4gICAqIEBleGFtcGxlIDxjYXB0aW9uPlByaW1hcnkgS2V5PC9jYXB0aW9uPlxuICAgKiBxdWVyeUludGVyZmFjZS5hZGRDb25zdHJhaW50KCdVc2VycycsIFsndXNlcm5hbWUnXSwge1xuICAgKiAgICB0eXBlOiAncHJpbWFyeSBrZXknLFxuICAgKiAgICBuYW1lOiAnY3VzdG9tX3ByaW1hcnlfY29uc3RyYWludF9uYW1lJ1xuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+Rm9yZWlnbiBLZXk8L2NhcHRpb24+XG4gICAqIHF1ZXJ5SW50ZXJmYWNlLmFkZENvbnN0cmFpbnQoJ1Bvc3RzJywgWyd1c2VybmFtZSddLCB7XG4gICAqICAgdHlwZTogJ2ZvcmVpZ24ga2V5JyxcbiAgICogICBuYW1lOiAnY3VzdG9tX2ZrZXlfY29uc3RyYWludF9uYW1lJyxcbiAgICogICByZWZlcmVuY2VzOiB7IC8vUmVxdWlyZWQgZmllbGRcbiAgICogICAgIHRhYmxlOiAndGFyZ2V0X3RhYmxlX25hbWUnLFxuICAgKiAgICAgZmllbGQ6ICd0YXJnZXRfY29sdW1uX25hbWUnXG4gICAqICAgfSxcbiAgICogICBvbkRlbGV0ZTogJ2Nhc2NhZGUnLFxuICAgKiAgIG9uVXBkYXRlOiAnY2FzY2FkZSdcbiAgICogfSk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgICAgICAgICAgICAgICAgICBUYWJsZSBuYW1lIHdoZXJlIHlvdSB3YW50IHRvIGFkZCBhIGNvbnN0cmFpbnRcbiAgICogQHBhcmFtIHtBcnJheX0gIGF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgIEFycmF5IG9mIGNvbHVtbiBuYW1lcyB0byBhcHBseSB0aGUgY29uc3RyYWludCBvdmVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICAgICAgICAgICAgICAgICAgICBBbiBvYmplY3QgdG8gZGVmaW5lIHRoZSBjb25zdHJhaW50IG5hbWUsIHR5cGUgZXRjXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnR5cGUgICAgICAgICAgICAgICBUeXBlIG9mIGNvbnN0cmFpbnQuIE9uZSBvZiB0aGUgdmFsdWVzIGluIGF2YWlsYWJsZSBjb25zdHJhaW50cyhjYXNlIGluc2Vuc2l0aXZlKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubmFtZV0gICAgICAgICAgICAgTmFtZSBvZiB0aGUgY29uc3RyYWludC4gSWYgbm90IHNwZWNpZmllZCwgc2VxdWVsaXplIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhIG5hbWVkIGNvbnN0cmFpbnQgYmFzZWQgb24gY29uc3RyYWludCB0eXBlLCB0YWJsZSAmIGNvbHVtbiBuYW1lc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZGVmYXVsdFZhbHVlXSAgICAgVGhlIHZhbHVlIGZvciB0aGUgZGVmYXVsdCBjb25zdHJhaW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy53aGVyZV0gICAgICAgICAgICBXaGVyZSBjbGF1c2UvZXhwcmVzc2lvbiBmb3IgdGhlIENIRUNLIGNvbnN0cmFpbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJlZmVyZW5jZXNdICAgICAgIE9iamVjdCBzcGVjaWZ5aW5nIHRhcmdldCB0YWJsZSwgY29sdW1uIG5hbWUgdG8gY3JlYXRlIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnJlZmVyZW5jZXMudGFibGVdIFRhcmdldCB0YWJsZSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5yZWZlcmVuY2VzLmZpZWxkXSBUYXJnZXQgY29sdW1uIG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyYXdUYWJsZW5hbWVdICAgICAgICAgICAgIFRhYmxlIG5hbWUsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgYWRkQ29uc3RyYWludCh0YWJsZU5hbWUsIGF0dHJpYnV0ZXMsIG9wdGlvbnMsIHJhd1RhYmxlbmFtZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVzKSkge1xuICAgICAgcmF3VGFibGVuYW1lID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSBhdHRyaWJ1dGVzO1xuICAgICAgYXR0cmlidXRlcyA9IG9wdGlvbnMuZmllbGRzO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnN0cmFpbnQgdHlwZSBtdXN0IGJlIHNwZWNpZmllZCB0aHJvdWdoIG9wdGlvbnMudHlwZScpO1xuICAgIH1cblxuICAgIGlmICghcmF3VGFibGVuYW1lKSB7XG4gICAgICAvLyBNYXAgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAgICAgIHJhd1RhYmxlbmFtZSA9IHRhYmxlTmFtZTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gVXRpbHMuY2xvbmVEZWVwKG9wdGlvbnMpO1xuICAgIG9wdGlvbnMuZmllbGRzID0gYXR0cmlidXRlcztcblxuICAgIGlmICh0aGlzLnNlcXVlbGl6ZS5kaWFsZWN0Lm5hbWUgPT09ICdzcWxpdGUnKSB7XG4gICAgICByZXR1cm4gU1FMaXRlUXVlcnlJbnRlcmZhY2UuYWRkQ29uc3RyYWludCh0aGlzLCB0YWJsZU5hbWUsIG9wdGlvbnMsIHJhd1RhYmxlbmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuYWRkQ29uc3RyYWludFF1ZXJ5KHRhYmxlTmFtZSwgb3B0aW9ucywgcmF3VGFibGVuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcbiAgfVxuXG4gIHNob3dDb25zdHJhaW50KHRhYmxlTmFtZSwgY29uc3RyYWludE5hbWUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnNob3dDb25zdHJhaW50c1F1ZXJ5KHRhYmxlTmFtZSwgY29uc3RyYWludE5hbWUpO1xuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgdHlwZTogUXVlcnlUeXBlcy5TSE9XQ09OU1RSQUlOVFMgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGNvbnN0cmFpbnQgZnJvbSBhIHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgICAgICAgVGFibGUgbmFtZSB0byBkcm9wIGNvbnN0cmFpbnQgZnJvbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29uc3RyYWludE5hbWUgIENvbnN0cmFpbnQgbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgICAgICAgIFF1ZXJ5IG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICByZW1vdmVDb25zdHJhaW50KHRhYmxlTmFtZSwgY29uc3RyYWludE5hbWUsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHN3aXRjaCAodGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KSB7XG4gICAgICBjYXNlICdzcWxpdGUnOlxuICAgICAgICByZXR1cm4gU1FMaXRlUXVlcnlJbnRlcmZhY2UucmVtb3ZlQ29uc3RyYWludCh0aGlzLCB0YWJsZU5hbWUsIGNvbnN0cmFpbnROYW1lLCBvcHRpb25zKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IucmVtb3ZlQ29uc3RyYWludFF1ZXJ5KHRhYmxlTmFtZSwgY29uc3RyYWludE5hbWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBpbnNlcnQoaW5zdGFuY2UsIHRhYmxlTmFtZSwgdmFsdWVzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKTtcbiAgICBvcHRpb25zLmhhc1RyaWdnZXIgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5jb25zdHJ1Y3Rvci5vcHRpb25zLmhhc1RyaWdnZXI7XG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5pbnNlcnRRdWVyeSh0YWJsZU5hbWUsIHZhbHVlcywgaW5zdGFuY2UgJiYgaW5zdGFuY2UuY29uc3RydWN0b3IucmF3QXR0cmlidXRlcywgb3B0aW9ucyk7XG5cbiAgICBvcHRpb25zLnR5cGUgPSBRdWVyeVR5cGVzLklOU0VSVDtcbiAgICBvcHRpb25zLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlKSByZXN1bHRzWzBdLmlzTmV3UmVjb3JkID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcHNlcnRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAgICB0YWJsZSB0byB1cHNlcnQgb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGluc2VydFZhbHVlcyB2YWx1ZXMgdG8gYmUgaW5zZXJ0ZWQsIG1hcHBlZCB0byBmaWVsZCBuYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB1cGRhdGVWYWx1ZXMgdmFsdWVzIHRvIGJlIHVwZGF0ZWQsIG1hcHBlZCB0byBmaWVsZCBuYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB3aGVyZSAgICAgICAgdmFyaW91cyBjb25kaXRpb25zXG4gICAqIEBwYXJhbSB7TW9kZWx9ICBtb2RlbCAgICAgICAgTW9kZWwgdG8gdXBzZXJ0IG9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICAgICAgcXVlcnkgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuLD9udW1iZXI+fSBSZXNvbHZlcyBhbiBhcnJheSB3aXRoIDxjcmVhdGVkLCBwcmltYXJ5S2V5PlxuICAgKi9cbiAgdXBzZXJ0KHRhYmxlTmFtZSwgaW5zZXJ0VmFsdWVzLCB1cGRhdGVWYWx1ZXMsIHdoZXJlLCBtb2RlbCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHdoZXJlcyA9IFtdO1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhpbnNlcnRWYWx1ZXMpO1xuICAgIGxldCBpbmRleGVzID0gW107XG4gICAgbGV0IGluZGV4RmllbGRzO1xuXG4gICAgb3B0aW9ucyA9IF8uY2xvbmUob3B0aW9ucyk7XG5cbiAgICBpZiAoIVV0aWxzLmlzV2hlcmVFbXB0eSh3aGVyZSkpIHtcbiAgICAgIHdoZXJlcy5wdXNoKHdoZXJlKTtcbiAgICB9XG5cbiAgICAvLyBMZXRzIGNvbWJpbmUgdW5pcXVlIGtleXMgYW5kIGluZGV4ZXMgaW50byBvbmVcbiAgICBpbmRleGVzID0gXy5tYXAobW9kZWwudW5pcXVlS2V5cywgdmFsdWUgPT4ge1xuICAgICAgcmV0dXJuIHZhbHVlLmZpZWxkcztcbiAgICB9KTtcblxuICAgIG1vZGVsLl9pbmRleGVzLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlLnVuaXF1ZSkge1xuICAgICAgICAvLyBmaWVsZHMgaW4gdGhlIGluZGV4IG1heSBib3RoIHRoZSBzdHJpbmdzIG9yIG9iamVjdHMgd2l0aCBhbiBhdHRyaWJ1dGUgcHJvcGVydHkgLSBsZXRzIHNhbml0aXplIHRoYXRcbiAgICAgICAgaW5kZXhGaWVsZHMgPSB2YWx1ZS5maWVsZHMubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGZpZWxkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmF0dHJpYnV0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXhlcy5wdXNoKGluZGV4RmllbGRzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5kZXhlcykge1xuICAgICAgaWYgKF8uaW50ZXJzZWN0aW9uKGF0dHJpYnV0ZXMsIGluZGV4KS5sZW5ndGggPT09IGluZGV4Lmxlbmd0aCkge1xuICAgICAgICB3aGVyZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGluZGV4KSB7XG4gICAgICAgICAgd2hlcmVbZmllbGRdID0gaW5zZXJ0VmFsdWVzW2ZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICB3aGVyZXMucHVzaCh3aGVyZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2hlcmUgPSB7IFtPcC5vcl06IHdoZXJlcyB9O1xuXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5VUFNFUlQ7XG4gICAgb3B0aW9ucy5yYXcgPSB0cnVlO1xuXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci51cHNlcnRRdWVyeSh0YWJsZU5hbWUsIGluc2VydFZhbHVlcywgdXBkYXRlVmFsdWVzLCB3aGVyZSwgbW9kZWwsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIHN3aXRjaCAodGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0KSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIFtyZXN1bHQsIHVuZGVmaW5lZF07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5zZXJ0IG11bHRpcGxlIHJlY29yZHMgaW50byBhIHRhYmxlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHF1ZXJ5SW50ZXJmYWNlLmJ1bGtJbnNlcnQoJ3JvbGVzJywgW3tcbiAgICogICAgbGFiZWw6ICd1c2VyJyxcbiAgICogICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgKiAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKClcbiAgICogIH0sIHtcbiAgICogICAgbGFiZWw6ICdhZG1pbicsXG4gICAqICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICogICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpXG4gICAqICB9XSk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgICBUYWJsZSBuYW1lIHRvIGluc2VydCByZWNvcmQgdG9cbiAgICogQHBhcmFtIHtBcnJheX0gIHJlY29yZHMgICAgIExpc3Qgb2YgcmVjb3JkcyB0byBpbnNlcnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAgIFZhcmlvdXMgb3B0aW9ucywgcGxlYXNlIHNlZSBNb2RlbC5idWxrQ3JlYXRlIG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXMgIFZhcmlvdXMgYXR0cmlidXRlcyBtYXBwZWQgYnkgZmllbGQgbmFtZVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGJ1bGtJbnNlcnQodGFibGVOYW1lLCByZWNvcmRzLCBvcHRpb25zLCBhdHRyaWJ1dGVzKSB7XG4gICAgb3B0aW9ucyA9IF8uY2xvbmUob3B0aW9ucykgfHwge307XG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5JTlNFUlQ7XG5cbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoXG4gICAgICB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmJ1bGtJbnNlcnRRdWVyeSh0YWJsZU5hbWUsIHJlY29yZHMsIG9wdGlvbnMsIGF0dHJpYnV0ZXMpLFxuICAgICAgb3B0aW9uc1xuICAgICkudGhlbihyZXN1bHRzID0+IHJlc3VsdHNbMF0pO1xuICB9XG5cbiAgdXBkYXRlKGluc3RhbmNlLCB0YWJsZU5hbWUsIHZhbHVlcywgaWRlbnRpZmllciwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBfLmNsb25lKG9wdGlvbnMgfHwge30pO1xuICAgIG9wdGlvbnMuaGFzVHJpZ2dlciA9ICEhKGluc3RhbmNlICYmIGluc3RhbmNlLl9tb2RlbE9wdGlvbnMgJiYgaW5zdGFuY2UuX21vZGVsT3B0aW9ucy5oYXNUcmlnZ2VyKTtcblxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IudXBkYXRlUXVlcnkodGFibGVOYW1lLCB2YWx1ZXMsIGlkZW50aWZpZXIsIG9wdGlvbnMsIGluc3RhbmNlLmNvbnN0cnVjdG9yLnJhd0F0dHJpYnV0ZXMpO1xuXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5VUERBVEU7XG5cbiAgICBvcHRpb25zLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG11bHRpcGxlIHJlY29yZHMgb2YgYSB0YWJsZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBxdWVyeUludGVyZmFjZS5idWxrVXBkYXRlKCdyb2xlcycsIHtcbiAgICogICAgIGxhYmVsOiAnYWRtaW4nLFxuICAgKiAgIH0sIHtcbiAgICogICAgIHVzZXJUeXBlOiAzLFxuICAgKiAgIH0sXG4gICAqICk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgICAgIFRhYmxlIG5hbWUgdG8gdXBkYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgICAgICAgIFZhbHVlcyB0byBiZSBpbnNlcnRlZCwgbWFwcGVkIHRvIGZpZWxkIG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IGlkZW50aWZpZXIgICAgQSBoYXNoIHdpdGggY29uZGl0aW9ucyBPUiBhbiBJRCBhcyBpbnRlZ2VyIE9SIGEgc3RyaW5nIHdpdGggY29uZGl0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdICAgICBWYXJpb3VzIG9wdGlvbnMsIHBsZWFzZSBzZWUgTW9kZWwuYnVsa0NyZWF0ZSBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbYXR0cmlidXRlc10gIEF0dHJpYnV0ZXMgb24gcmV0dXJuIG9iamVjdHMgaWYgc3VwcG9ydGVkIGJ5IFNRTCBkaWFsZWN0XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgYnVsa1VwZGF0ZSh0YWJsZU5hbWUsIHZhbHVlcywgaWRlbnRpZmllciwgb3B0aW9ucywgYXR0cmlidXRlcykge1xuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XG4gICAgaWYgKHR5cGVvZiBpZGVudGlmaWVyID09PSAnb2JqZWN0JykgaWRlbnRpZmllciA9IFV0aWxzLmNsb25lRGVlcChpZGVudGlmaWVyKTtcblxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IudXBkYXRlUXVlcnkodGFibGVOYW1lLCB2YWx1ZXMsIGlkZW50aWZpZXIsIG9wdGlvbnMsIGF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IHRhYmxlID0gXy5pc09iamVjdCh0YWJsZU5hbWUpID8gdGFibGVOYW1lIDogeyB0YWJsZU5hbWUgfTtcbiAgICBjb25zdCBtb2RlbCA9IF8uZmluZCh0aGlzLnNlcXVlbGl6ZS5tb2RlbE1hbmFnZXIubW9kZWxzLCB7IHRhYmxlTmFtZTogdGFibGUudGFibGVOYW1lIH0pO1xuXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5CVUxLVVBEQVRFO1xuICAgIG9wdGlvbnMubW9kZWwgPSBtb2RlbDtcbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcbiAgfVxuXG4gIGRlbGV0ZShpbnN0YW5jZSwgdGFibGVOYW1lLCBpZGVudGlmaWVyLCBvcHRpb25zKSB7XG4gICAgY29uc3QgY2FzY2FkZXMgPSBbXTtcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmRlbGV0ZVF1ZXJ5KHRhYmxlTmFtZSwgaWRlbnRpZmllciwge30sIGluc3RhbmNlLmNvbnN0cnVjdG9yKTtcblxuICAgIG9wdGlvbnMgPSBfLmNsb25lKG9wdGlvbnMpIHx8IHt9O1xuXG4gICAgLy8gQ2hlY2sgZm9yIGEgcmVzdHJpY3QgZmllbGRcbiAgICBpZiAoISFpbnN0YW5jZS5jb25zdHJ1Y3RvciAmJiAhIWluc3RhbmNlLmNvbnN0cnVjdG9yLmFzc29jaWF0aW9ucykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluc3RhbmNlLmNvbnN0cnVjdG9yLmFzc29jaWF0aW9ucyk7XG4gICAgICBjb25zdCBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIGxldCBhc3NvY2lhdGlvbjtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhc3NvY2lhdGlvbiA9IGluc3RhbmNlLmNvbnN0cnVjdG9yLmFzc29jaWF0aW9uc1trZXlzW2ldXTtcbiAgICAgICAgaWYgKGFzc29jaWF0aW9uLm9wdGlvbnMgJiYgYXNzb2NpYXRpb24ub3B0aW9ucy5vbkRlbGV0ZSAmJlxuICAgICAgICAgIGFzc29jaWF0aW9uLm9wdGlvbnMub25EZWxldGUudG9Mb3dlckNhc2UoKSA9PT0gJ2Nhc2NhZGUnICYmXG4gICAgICAgICAgYXNzb2NpYXRpb24ub3B0aW9ucy51c2VIb29rcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNhc2NhZGVzLnB1c2goYXNzb2NpYXRpb24uYWNjZXNzb3JzLmdldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5lYWNoKGNhc2NhZGVzLCBjYXNjYWRlID0+IHtcbiAgICAgIHJldHVybiBpbnN0YW5jZVtjYXNjYWRlXShvcHRpb25zKS50aGVuKGluc3RhbmNlcyA9PiB7XG4gICAgICAgIC8vIENoZWNrIGZvciBoYXNPbmUgcmVsYXRpb25zaGlwIHdpdGggbm9uLWV4aXN0aW5nIGFzc29jaWF0ZSAoXCJoYXMgemVyb1wiKVxuICAgICAgICBpZiAoIWluc3RhbmNlcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnN0YW5jZXMpKSBpbnN0YW5jZXMgPSBbaW5zdGFuY2VzXTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5lYWNoKGluc3RhbmNlcywgaW5zdGFuY2UgPT4gaW5zdGFuY2UuZGVzdHJveShvcHRpb25zKSk7XG4gICAgICB9KTtcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIG9wdGlvbnMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBtdWx0aXBsZSByZWNvcmRzIGZyb20gYSB0YWJsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHRhYmxlTmFtZSAgICAgICAgICAgIHRhYmxlIG5hbWUgZnJvbSB3aGVyZSB0byBkZWxldGUgcmVjb3Jkc1xuICAgKiBAcGFyYW0ge09iamVjdH0gIHdoZXJlICAgICAgICAgICAgICAgIHdoZXJlIGNvbmRpdGlvbnMgdG8gZmluZCByZWNvcmRzIHRvIGRlbGV0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gIFtvcHRpb25zXSAgICAgICAgICAgIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cnVuY2F0ZV0gICBVc2UgdHJ1bmNhdGUgdGFibGUgY29tbWFuZCAgIFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNhc2NhZGU9ZmFsc2VdICAgICAgICAgT25seSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggVFJVTkNBVEUuIFRydW5jYXRlcyAgYWxsIHRhYmxlcyB0aGF0IGhhdmUgZm9yZWlnbi1rZXkgcmVmZXJlbmNlcyB0byB0aGUgbmFtZWQgdGFibGUsIG9yIHRvIGFueSB0YWJsZXMgYWRkZWQgdG8gdGhlIGdyb3VwIGR1ZSB0byBDQVNDQURFLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJlc3RhcnRJZGVudGl0eT1mYWxzZV0gT25seSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggVFJVTkNBVEUuIEF1dG9tYXRpY2FsbHkgcmVzdGFydCBzZXF1ZW5jZXMgb3duZWQgYnkgY29sdW1ucyBvZiB0aGUgdHJ1bmNhdGVkIHRhYmxlLlxuICAgKiBAcGFyYW0ge01vZGVsfSAgIFttb2RlbF0gICAgICAgICAgICAgIE1vZGVsXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgYnVsa0RlbGV0ZSh0YWJsZU5hbWUsIHdoZXJlLCBvcHRpb25zLCBtb2RlbCkge1xuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XG4gICAgb3B0aW9ucyA9IF8uZGVmYXVsdHMob3B0aW9ucywgeyBsaW1pdDogbnVsbCB9KTtcblxuICAgIGlmIChvcHRpb25zLnRydW5jYXRlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoXG4gICAgICAgIHRoaXMuUXVlcnlHZW5lcmF0b3IudHJ1bmNhdGVUYWJsZVF1ZXJ5KHRhYmxlTmFtZSwgb3B0aW9ucyksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpZGVudGlmaWVyID09PSAnb2JqZWN0Jykgd2hlcmUgPSBVdGlscy5jbG9uZURlZXAod2hlcmUpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KFxuICAgICAgdGhpcy5RdWVyeUdlbmVyYXRvci5kZWxldGVRdWVyeSh0YWJsZU5hbWUsIHdoZXJlLCBvcHRpb25zLCBtb2RlbCksXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdChtb2RlbCwgdGFibGVOYW1lLCBvcHRpb25zQXJnKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnNBcmcsIHsgdHlwZTogUXVlcnlUeXBlcy5TRUxFQ1QsIG1vZGVsIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KFxuICAgICAgdGhpcy5RdWVyeUdlbmVyYXRvci5zZWxlY3RRdWVyeSh0YWJsZU5hbWUsIG9wdGlvbnMsIG1vZGVsKSxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgaW5jcmVtZW50KG1vZGVsLCB0YWJsZU5hbWUsIHZhbHVlcywgaWRlbnRpZmllciwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XG5cbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmFyaXRobWV0aWNRdWVyeSgnKycsIHRhYmxlTmFtZSwgdmFsdWVzLCBpZGVudGlmaWVyLCBvcHRpb25zLCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuXG4gICAgb3B0aW9ucy50eXBlID0gUXVlcnlUeXBlcy5VUERBVEU7XG4gICAgb3B0aW9ucy5tb2RlbCA9IG1vZGVsO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XG4gIH1cblxuICBkZWNyZW1lbnQobW9kZWwsIHRhYmxlTmFtZSwgdmFsdWVzLCBpZGVudGlmaWVyLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IFV0aWxzLmNsb25lRGVlcChvcHRpb25zKTtcblxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuYXJpdGhtZXRpY1F1ZXJ5KCctJywgdGFibGVOYW1lLCB2YWx1ZXMsIGlkZW50aWZpZXIsIG9wdGlvbnMsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG5cbiAgICBvcHRpb25zLnR5cGUgPSBRdWVyeVR5cGVzLlVQREFURTtcbiAgICBvcHRpb25zLm1vZGVsID0gbW9kZWw7XG5cbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJhd1NlbGVjdCh0YWJsZU5hbWUsIG9wdGlvbnMsIGF0dHJpYnV0ZVNlbGVjdG9yLCBNb2RlbCkge1xuICAgIG9wdGlvbnMgPSBVdGlscy5jbG9uZURlZXAob3B0aW9ucyk7XG4gICAgb3B0aW9ucyA9IF8uZGVmYXVsdHMob3B0aW9ucywge1xuICAgICAgcmF3OiB0cnVlLFxuICAgICAgcGxhaW46IHRydWUsXG4gICAgICB0eXBlOiBRdWVyeVR5cGVzLlNFTEVDVFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5zZWxlY3RRdWVyeSh0YWJsZU5hbWUsIG9wdGlvbnMsIE1vZGVsKTtcblxuICAgIGlmIChhdHRyaWJ1dGVTZWxlY3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwYXNzIGFuIGF0dHJpYnV0ZSBzZWxlY3RvciEnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgaWYgKCFvcHRpb25zLnBsYWluKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBkYXRhID8gZGF0YVthdHRyaWJ1dGVTZWxlY3Rvcl0gOiBudWxsO1xuXG4gICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuZGF0YVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YVR5cGUgPSBvcHRpb25zLmRhdGFUeXBlO1xuXG4gICAgICBpZiAoZGF0YVR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuREVDSU1BTCB8fCBkYXRhVHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5GTE9BVCkge1xuICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRhdGFUeXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLklOVEVHRVIgfHwgZGF0YVR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuQklHSU5UKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChyZXN1bHQsIDEwKTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhVHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5EQVRFKSB7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgIShyZXN1bHQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlVHJpZ2dlcih0YWJsZU5hbWUsIHRyaWdnZXJOYW1lLCB0aW1pbmdUeXBlLCBmaXJlT25BcnJheSwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvblBhcmFtcywgb3B0aW9uc0FycmF5LCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5jcmVhdGVUcmlnZ2VyKHRhYmxlTmFtZSwgdHJpZ2dlck5hbWUsIHRpbWluZ1R5cGUsIGZpcmVPbkFycmF5LCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uUGFyYW1zLCBvcHRpb25zQXJyYXkpO1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmIChzcWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBkcm9wVHJpZ2dlcih0YWJsZU5hbWUsIHRyaWdnZXJOYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5kcm9wVHJpZ2dlcih0YWJsZU5hbWUsIHRyaWdnZXJOYW1lKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGlmIChzcWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICByZW5hbWVUcmlnZ2VyKHRhYmxlTmFtZSwgb2xkVHJpZ2dlck5hbWUsIG5ld1RyaWdnZXJOYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5yZW5hbWVUcmlnZ2VyKHRhYmxlTmFtZSwgb2xkVHJpZ2dlck5hbWUsIG5ld1RyaWdnZXJOYW1lKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGlmIChzcWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFNRTCBmdW5jdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBxdWVyeUludGVyZmFjZS5jcmVhdGVGdW5jdGlvbihcbiAgICogICAnc29tZUZ1bmN0aW9uJyxcbiAgICogICBbXG4gICAqICAgICB7dHlwZTogJ2ludGVnZXInLCBuYW1lOiAncGFyYW0nLCBkaXJlY3Rpb246ICdJTid9XG4gICAqICAgXSxcbiAgICogICAnaW50ZWdlcicsXG4gICAqICAgJ3BscGdzcWwnLFxuICAgKiAgICdSRVRVUk4gcGFyYW0gKyAxOycsXG4gICAqICAgW1xuICAgKiAgICAgJ0lNTVVUQUJMRScsXG4gICAqICAgICAnTEVBS1BST09GJ1xuICAgKiAgIF0sXG4gICAqICAge1xuICAgKiAgICB2YXJpYWJsZXM6XG4gICAqICAgICAgW1xuICAgKiAgICAgICAge3R5cGU6ICdpbnRlZ2VyJywgbmFtZTogJ215VmFyJywgZGVmYXVsdDogMTAwfVxuICAgKiAgICAgIF0sXG4gICAqICAgICAgZm9yY2U6IHRydWVcbiAgICogICB9O1xuICAgKiApO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIGZ1bmN0aW9uTmFtZSAgTmFtZSBvZiBTUUwgZnVuY3Rpb24gdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgcGFyYW1zICAgICAgICBMaXN0IG9mIHBhcmFtZXRlcnMgZGVjbGFyZWQgZm9yIFNRTCBmdW5jdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJldHVyblR5cGUgICAgU1FMIHR5cGUgb2YgZnVuY3Rpb24gcmV0dXJuZWQgdmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBsYW5ndWFnZSAgICAgIFRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGF0IHRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBpblxuICAgKiBAcGFyYW0ge3N0cmluZ30gIGJvZHkgICAgICAgICAgU291cmNlIGNvZGUgb2YgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheX0gICBvcHRpb25zQXJyYXkgIEV4dHJhLW9wdGlvbnMgZm9yIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgW29wdGlvbnNdICAgICBxdWVyeSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5mb3JjZSBJZiBmb3JjZSBpcyB0cnVlLCBhbnkgZXhpc3RpbmcgZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyB3aWxsIGJlIHJlcGxhY2VkLiBGb3IgcG9zdGdyZXMsIHRoaXMgbWVhbnMgdXNpbmcgYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OYCBpbnN0ZWFkIG9mIGBDUkVBVEUgRlVOQ1RJT05gLiBEZWZhdWx0IGlzIGZhbHNlXG4gICAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gICBvcHRpb25zLnZhcmlhYmxlcyBMaXN0IG9mIGRlY2xhcmVkIHZhcmlhYmxlcy4gRWFjaCB2YXJpYWJsZSBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggc3RyaW5nIGZpZWxkcyBgdHlwZWAgYW5kIGBuYW1lYCwgYW5kIG9wdGlvbmFsbHkgaGF2aW5nIGEgYGRlZmF1bHRgIGZpZWxkIGFzIHdlbGwuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgY3JlYXRlRnVuY3Rpb24oZnVuY3Rpb25OYW1lLCBwYXJhbXMsIHJldHVyblR5cGUsIGxhbmd1YWdlLCBib2R5LCBvcHRpb25zQXJyYXksIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmNyZWF0ZUZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSwgcGFyYW1zLCByZXR1cm5UeXBlLCBsYW5ndWFnZSwgYm9keSwgb3B0aW9uc0FycmF5LCBvcHRpb25zKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGlmIChzcWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICAvKipcbiAgICogRHJvcCBhbiBTUUwgZnVuY3Rpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcXVlcnlJbnRlcmZhY2UuZHJvcEZ1bmN0aW9uKFxuICAgKiAgICdzb21lRnVuY3Rpb24nLFxuICAgKiAgIFtcbiAgICogICAgIHt0eXBlOiAndmFyY2hhcicsIG5hbWU6ICdwYXJhbTEnLCBkaXJlY3Rpb246ICdJTid9LFxuICAgKiAgICAge3R5cGU6ICdpbnRlZ2VyJywgbmFtZTogJ3BhcmFtMicsIGRpcmVjdGlvbjogJ0lOT1VUJ31cbiAgICogICBdXG4gICAqICk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUgTmFtZSBvZiBTUUwgZnVuY3Rpb24gdG8gZHJvcFxuICAgKiBAcGFyYW0ge0FycmF5fSAgcGFyYW1zICAgICAgIExpc3Qgb2YgcGFyYW1ldGVycyBkZWNsYXJlZCBmb3IgU1FMIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gICAgcXVlcnkgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGRyb3BGdW5jdGlvbihmdW5jdGlvbk5hbWUsIHBhcmFtcywgb3B0aW9ucykge1xuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuZHJvcEZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSwgcGFyYW1zKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGlmIChzcWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuYW1lIGFuIFNRTCBmdW5jdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBxdWVyeUludGVyZmFjZS5yZW5hbWVGdW5jdGlvbihcbiAgICogICAnZm9vRnVuY3Rpb24nLFxuICAgKiAgIFtcbiAgICogICAgIHt0eXBlOiAndmFyY2hhcicsIG5hbWU6ICdwYXJhbTEnLCBkaXJlY3Rpb246ICdJTid9LFxuICAgKiAgICAge3R5cGU6ICdpbnRlZ2VyJywgbmFtZTogJ3BhcmFtMicsIGRpcmVjdGlvbjogJ0lOT1VUJ31cbiAgICogICBdLFxuICAgKiAgICdiYXJGdW5jdGlvbidcbiAgICogKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9sZEZ1bmN0aW9uTmFtZSAgQ3VycmVudCBuYW1lIG9mIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXl9ICBwYXJhbXMgICAgICAgICAgIExpc3Qgb2YgcGFyYW1ldGVycyBkZWNsYXJlZCBmb3IgU1FMIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdGdW5jdGlvbk5hbWUgIE5ldyBuYW1lIG9mIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gICAgICAgIHF1ZXJ5IG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICByZW5hbWVGdW5jdGlvbihvbGRGdW5jdGlvbk5hbWUsIHBhcmFtcywgbmV3RnVuY3Rpb25OYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc3FsID0gdGhpcy5RdWVyeUdlbmVyYXRvci5yZW5hbWVGdW5jdGlvbihvbGRGdW5jdGlvbk5hbWUsIHBhcmFtcywgbmV3RnVuY3Rpb25OYW1lKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGlmIChzcWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kcyB1c2VmdWwgZm9yIHF1ZXJ5aW5nXG5cbiAgLyoqXG4gICAqIEVzY2FwZSBhbiBpZGVudGlmaWVyIChlLmcuIGEgdGFibGUgb3IgYXR0cmlidXRlIG5hbWUpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGlmaWVyIGlkZW50aWZpZXIgdG8gcXVvdGVcbiAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2VdICAgSWYgZm9yY2UgaXMgdHJ1ZSx0aGUgaWRlbnRpZmllciB3aWxsIGJlIHF1b3RlZCBldmVuIGlmIHRoZSBgcXVvdGVJZGVudGlmaWVyc2Agb3B0aW9uIGlzIGZhbHNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcXVvdGVJZGVudGlmaWVyKGlkZW50aWZpZXIsIGZvcmNlKSB7XG4gICAgcmV0dXJuIHRoaXMuUXVlcnlHZW5lcmF0b3IucXVvdGVJZGVudGlmaWVyKGlkZW50aWZpZXIsIGZvcmNlKTtcbiAgfVxuXG4gIHF1b3RlVGFibGUoaWRlbnRpZmllcikge1xuICAgIHJldHVybiB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnF1b3RlVGFibGUoaWRlbnRpZmllcik7XG4gIH1cblxuICAvKipcbiAgICogUXVvdGUgYXJyYXkgb2YgaWRlbnRpZmllcnMgYXQgb25jZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpZGVudGlmaWVycyBhcnJheSBvZiBpZGVudGlmaWVycyB0byBxdW90ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZV0gICBJZiBmb3JjZSBpcyB0cnVlLHRoZSBpZGVudGlmaWVyIHdpbGwgYmUgcXVvdGVkIGV2ZW4gaWYgdGhlIGBxdW90ZUlkZW50aWZpZXJzYCBvcHRpb24gaXMgZmFsc2UuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBxdW90ZUlkZW50aWZpZXJzKGlkZW50aWZpZXJzLCBmb3JjZSkge1xuICAgIHJldHVybiB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnF1b3RlSWRlbnRpZmllcnMoaWRlbnRpZmllcnMsIGZvcmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFc2NhcGUgYSB2YWx1ZSAoZS5nLiBhIHN0cmluZywgbnVtYmVyIG9yIGRhdGUpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBzdHJpbmcgdG8gZXNjYXBlXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlc2NhcGUodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5RdWVyeUdlbmVyYXRvci5lc2NhcGUodmFsdWUpO1xuICB9XG5cbiAgc2V0SXNvbGF0aW9uTGV2ZWwodHJhbnNhY3Rpb24sIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgVHJhbnNhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBzZXQgaXNvbGF0aW9uIGxldmVsIGZvciBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgdHJhbnNhY3Rpb24gb2JqZWN0IScpO1xuICAgIH1cblxuICAgIGlmICh0cmFuc2FjdGlvbi5wYXJlbnQgfHwgIXZhbHVlKSB7XG4gICAgICAvLyBOb3QgcG9zc2libGUgdG8gc2V0IGEgc2VwYXJhdGUgaXNvbGF0aW9uIGxldmVsIGZvciBzYXZlcG9pbnRzXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbi5wYXJlbnQgfHwgdHJhbnNhY3Rpb25cbiAgICB9KTtcblxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3Iuc2V0SXNvbGF0aW9uTGV2ZWxRdWVyeSh2YWx1ZSwge1xuICAgICAgcGFyZW50OiB0cmFuc2FjdGlvbi5wYXJlbnRcbiAgICB9KTtcblxuICAgIGlmICghc3FsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemUucXVlcnkoc3FsLCBvcHRpb25zKTtcbiAgfVxuXG4gIHN0YXJ0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uIHx8ICEodHJhbnNhY3Rpb24gaW5zdGFuY2VvZiBUcmFuc2FjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHN0YXJ0IGEgdHJhbnNhY3Rpb24gd2l0aG91dCB0cmFuc2FjdGlvbiBvYmplY3QhJyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbi5wYXJlbnQgfHwgdHJhbnNhY3Rpb25cbiAgICB9KTtcbiAgICBvcHRpb25zLnRyYW5zYWN0aW9uLm5hbWUgPSB0cmFuc2FjdGlvbi5wYXJlbnQgPyB0cmFuc2FjdGlvbi5uYW1lIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3Iuc3RhcnRUcmFuc2FjdGlvblF1ZXJ5KHRyYW5zYWN0aW9uKTtcblxuICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xuICB9XG5cbiAgZGVmZXJDb25zdHJhaW50cyh0cmFuc2FjdGlvbiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICB0cmFuc2FjdGlvbjogdHJhbnNhY3Rpb24ucGFyZW50IHx8IHRyYW5zYWN0aW9uXG4gICAgfSk7XG5cbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLmRlZmVyQ29uc3RyYWludHNRdWVyeShvcHRpb25zKTtcblxuICAgIGlmIChzcWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZS5xdWVyeShzcWwsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIGNvbW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBvcHRpb25zKSB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgVHJhbnNhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjb21taXQgYSB0cmFuc2FjdGlvbiB3aXRob3V0IHRyYW5zYWN0aW9uIG9iamVjdCEnKTtcbiAgICB9XG4gICAgaWYgKHRyYW5zYWN0aW9uLnBhcmVudCkge1xuICAgICAgLy8gU2F2ZXBvaW50cyBjYW5ub3QgYmUgY29tbWl0dGVkXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbi5wYXJlbnQgfHwgdHJhbnNhY3Rpb24sXG4gICAgICBzdXBwb3J0c1NlYXJjaFBhdGg6IGZhbHNlLFxuICAgICAgY29tcGxldGVzVHJhbnNhY3Rpb246IHRydWVcbiAgICB9KTtcblxuICAgIGNvbnN0IHNxbCA9IHRoaXMuUXVlcnlHZW5lcmF0b3IuY29tbWl0VHJhbnNhY3Rpb25RdWVyeSh0cmFuc2FjdGlvbik7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XG5cbiAgICB0cmFuc2FjdGlvbi5maW5pc2hlZCA9ICdjb21taXQnO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICByb2xsYmFja1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBvcHRpb25zKSB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgVHJhbnNhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByb2xsYmFjayBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgdHJhbnNhY3Rpb24gb2JqZWN0IScpO1xuICAgIH1cblxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICB0cmFuc2FjdGlvbjogdHJhbnNhY3Rpb24ucGFyZW50IHx8IHRyYW5zYWN0aW9uLFxuICAgICAgc3VwcG9ydHNTZWFyY2hQYXRoOiBmYWxzZSxcbiAgICAgIGNvbXBsZXRlc1RyYW5zYWN0aW9uOiB0cnVlXG4gICAgfSk7XG4gICAgb3B0aW9ucy50cmFuc2FjdGlvbi5uYW1lID0gdHJhbnNhY3Rpb24ucGFyZW50ID8gdHJhbnNhY3Rpb24ubmFtZSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzcWwgPSB0aGlzLlF1ZXJ5R2VuZXJhdG9yLnJvbGxiYWNrVHJhbnNhY3Rpb25RdWVyeSh0cmFuc2FjdGlvbik7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuc2VxdWVsaXplLnF1ZXJ5KHNxbCwgb3B0aW9ucyk7XG5cbiAgICB0cmFuc2FjdGlvbi5maW5pc2hlZCA9ICdyb2xsYmFjayc7XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXJ5SW50ZXJmYWNlO1xubW9kdWxlLmV4cG9ydHMuUXVlcnlJbnRlcmZhY2UgPSBRdWVyeUludGVyZmFjZTtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBRdWVyeUludGVyZmFjZTtcbiJdfQ== \ No newline at end of file diff --git a/dist/query-types.js b/dist/query-types.js index 399f4e4..ec97c9a 100644 --- a/dist/query-types.js +++ b/dist/query-types.js @@ -37,4 +37,4 @@ const QueryTypes = module.exports = { FOREIGNKEYS: 'FOREIGNKEYS', SHOWCONSTRAINTS: 'SHOWCONSTRAINTS' }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9xdWVyeS10eXBlcy5qcyJdLCJuYW1lcyI6WyJRdWVyeVR5cGVzIiwibW9kdWxlIiwiZXhwb3J0cyIsIlNFTEVDVCIsIklOU0VSVCIsIlVQREFURSIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsIlNIT1dUQUJMRVMiLCJTSE9XSU5ERVhFUyIsIkRFU0NSSUJFIiwiUkFXIiwiRk9SRUlHTktFWVMiLCJTSE9XQ09OU1RSQUlOVFMiXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQSxNQUFNQSxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUFFO0FBQ3BDQyxFQUFBQSxNQUFNLEVBQUUsUUFEMEI7QUFFbENDLEVBQUFBLE1BQU0sRUFBRSxRQUYwQjtBQUdsQ0MsRUFBQUEsTUFBTSxFQUFFLFFBSDBCO0FBSWxDQyxFQUFBQSxVQUFVLEVBQUUsWUFKc0I7QUFLbENDLEVBQUFBLFVBQVUsRUFBRSxZQUxzQjtBQU1sQ0MsRUFBQUEsTUFBTSxFQUFFLFFBTjBCO0FBT2xDQyxFQUFBQSxNQUFNLEVBQUUsUUFQMEI7QUFRbENDLEVBQUFBLE9BQU8sRUFBRSxTQVJ5QjtBQVNsQ0MsRUFBQUEsVUFBVSxFQUFFLFlBVHNCO0FBVWxDQyxFQUFBQSxXQUFXLEVBQUUsYUFWcUI7QUFXbENDLEVBQUFBLFFBQVEsRUFBRSxVQVh3QjtBQVlsQ0MsRUFBQUEsR0FBRyxFQUFFLEtBWjZCO0FBYWxDQyxFQUFBQSxXQUFXLEVBQUUsYUFicUI7QUFjbENDLEVBQUFBLGVBQWUsRUFBRTtBQWRpQixDQUFwQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbi8qKlxyXG4gKiBBbiBlbnVtIG9mIHF1ZXJ5IHR5cGVzIHVzZWQgYnkgYHNlcXVlbGl6ZS5xdWVyeWBcclxuICpcclxuICogQHNlZSB7QGxpbmsgU2VxdWVsaXplI3F1ZXJ5fVxyXG4gKlxyXG4gKiBAcHJvcGVydHkgU0VMRUNUXHJcbiAqIEBwcm9wZXJ0eSBJTlNFUlRcclxuICogQHByb3BlcnR5IFVQREFURVxyXG4gKiBAcHJvcGVydHkgQlVMS1VQREFURVxyXG4gKiBAcHJvcGVydHkgQlVMS0RFTEVURVxyXG4gKiBAcHJvcGVydHkgREVMRVRFXHJcbiAqIEBwcm9wZXJ0eSBVUFNFUlRcclxuICogQHByb3BlcnR5IFZFUlNJT05cclxuICogQHByb3BlcnR5IFNIT1dUQUJMRVNcclxuICogQHByb3BlcnR5IFNIT1dJTkRFWEVTXHJcbiAqIEBwcm9wZXJ0eSBERVNDUklCRVxyXG4gKiBAcHJvcGVydHkgUkFXXHJcbiAqIEBwcm9wZXJ0eSBGT1JFSUdOS0VZU1xyXG4gKiBAcHJvcGVydHkgU0hPV0NPTlNUUkFJTlRTXHJcbiAqL1xyXG5jb25zdCBRdWVyeVR5cGVzID0gbW9kdWxlLmV4cG9ydHMgPSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcclxuICBTRUxFQ1Q6ICdTRUxFQ1QnLFxyXG4gIElOU0VSVDogJ0lOU0VSVCcsXHJcbiAgVVBEQVRFOiAnVVBEQVRFJyxcclxuICBCVUxLVVBEQVRFOiAnQlVMS1VQREFURScsXHJcbiAgQlVMS0RFTEVURTogJ0JVTEtERUxFVEUnLFxyXG4gIERFTEVURTogJ0RFTEVURScsXHJcbiAgVVBTRVJUOiAnVVBTRVJUJyxcclxuICBWRVJTSU9OOiAnVkVSU0lPTicsXHJcbiAgU0hPV1RBQkxFUzogJ1NIT1dUQUJMRVMnLFxyXG4gIFNIT1dJTkRFWEVTOiAnU0hPV0lOREVYRVMnLFxyXG4gIERFU0NSSUJFOiAnREVTQ1JJQkUnLFxyXG4gIFJBVzogJ1JBVycsXHJcbiAgRk9SRUlHTktFWVM6ICdGT1JFSUdOS0VZUycsXHJcbiAgU0hPV0NPTlNUUkFJTlRTOiAnU0hPV0NPTlNUUkFJTlRTJ1xyXG59O1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9xdWVyeS10eXBlcy5qcyJdLCJuYW1lcyI6WyJRdWVyeVR5cGVzIiwibW9kdWxlIiwiZXhwb3J0cyIsIlNFTEVDVCIsIklOU0VSVCIsIlVQREFURSIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsIlNIT1dUQUJMRVMiLCJTSE9XSU5ERVhFUyIsIkRFU0NSSUJFIiwiUkFXIiwiRk9SRUlHTktFWVMiLCJTSE9XQ09OU1RSQUlOVFMiXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxNQUFNQSxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUFFO0FBQ3BDQyxFQUFBQSxNQUFNLEVBQUUsUUFEMEI7QUFFbENDLEVBQUFBLE1BQU0sRUFBRSxRQUYwQjtBQUdsQ0MsRUFBQUEsTUFBTSxFQUFFLFFBSDBCO0FBSWxDQyxFQUFBQSxVQUFVLEVBQUUsWUFKc0I7QUFLbENDLEVBQUFBLFVBQVUsRUFBRSxZQUxzQjtBQU1sQ0MsRUFBQUEsTUFBTSxFQUFFLFFBTjBCO0FBT2xDQyxFQUFBQSxNQUFNLEVBQUUsUUFQMEI7QUFRbENDLEVBQUFBLE9BQU8sRUFBRSxTQVJ5QjtBQVNsQ0MsRUFBQUEsVUFBVSxFQUFFLFlBVHNCO0FBVWxDQyxFQUFBQSxXQUFXLEVBQUUsYUFWcUI7QUFXbENDLEVBQUFBLFFBQVEsRUFBRSxVQVh3QjtBQVlsQ0MsRUFBQUEsR0FBRyxFQUFFLEtBWjZCO0FBYWxDQyxFQUFBQSxXQUFXLEVBQUUsYUFicUI7QUFjbENDLEVBQUFBLGVBQWUsRUFBRTtBQWRpQixDQUFwQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBbiBlbnVtIG9mIHF1ZXJ5IHR5cGVzIHVzZWQgYnkgYHNlcXVlbGl6ZS5xdWVyeWBcbiAqXG4gKiBAc2VlIHtAbGluayBTZXF1ZWxpemUjcXVlcnl9XG4gKlxuICogQHByb3BlcnR5IFNFTEVDVFxuICogQHByb3BlcnR5IElOU0VSVFxuICogQHByb3BlcnR5IFVQREFURVxuICogQHByb3BlcnR5IEJVTEtVUERBVEVcbiAqIEBwcm9wZXJ0eSBCVUxLREVMRVRFXG4gKiBAcHJvcGVydHkgREVMRVRFXG4gKiBAcHJvcGVydHkgVVBTRVJUXG4gKiBAcHJvcGVydHkgVkVSU0lPTlxuICogQHByb3BlcnR5IFNIT1dUQUJMRVNcbiAqIEBwcm9wZXJ0eSBTSE9XSU5ERVhFU1xuICogQHByb3BlcnR5IERFU0NSSUJFXG4gKiBAcHJvcGVydHkgUkFXXG4gKiBAcHJvcGVydHkgRk9SRUlHTktFWVNcbiAqIEBwcm9wZXJ0eSBTSE9XQ09OU1RSQUlOVFNcbiAqL1xuY29uc3QgUXVlcnlUeXBlcyA9IG1vZHVsZS5leHBvcnRzID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIFNFTEVDVDogJ1NFTEVDVCcsXG4gIElOU0VSVDogJ0lOU0VSVCcsXG4gIFVQREFURTogJ1VQREFURScsXG4gIEJVTEtVUERBVEU6ICdCVUxLVVBEQVRFJyxcbiAgQlVMS0RFTEVURTogJ0JVTEtERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBVUFNFUlQ6ICdVUFNFUlQnLFxuICBWRVJTSU9OOiAnVkVSU0lPTicsXG4gIFNIT1dUQUJMRVM6ICdTSE9XVEFCTEVTJyxcbiAgU0hPV0lOREVYRVM6ICdTSE9XSU5ERVhFUycsXG4gIERFU0NSSUJFOiAnREVTQ1JJQkUnLFxuICBSQVc6ICdSQVcnLFxuICBGT1JFSUdOS0VZUzogJ0ZPUkVJR05LRVlTJyxcbiAgU0hPV0NPTlNUUkFJTlRTOiAnU0hPV0NPTlNUUkFJTlRTJ1xufTtcbiJdfQ== \ No newline at end of file diff --git a/dist/sequelize.js b/dist/sequelize.js index ff66996..a4cf3cf 100644 --- a/dist/sequelize.js +++ b/dist/sequelize.js @@ -1,14 +1,18 @@ "use strict"; +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -60,9 +64,7 @@ const deprecations = require("./utils/deprecations"); */ -let Sequelize = -/*#__PURE__*/ -function () { +let Sequelize = /*#__PURE__*/function () { /** * Instantiate sequelize with name of database, username and password. * @@ -424,15 +426,15 @@ function () { options.modelName = modelName; options.sequelize = this; - const model = - /*#__PURE__*/ - function (_Model) { + const model = /*#__PURE__*/function (_Model) { _inherits(model, _Model); + var _super = _createSuper(model); + function model() { _classCallCheck(this, model); - return _possibleConstructorReturn(this, _getPrototypeOf(model).apply(this, arguments)); + return _super.apply(this, arguments); } return model; @@ -1402,4 +1404,4 @@ for (const error of Object.keys(sequelizeErrors)) { module.exports = Sequelize; module.exports.Sequelize = Sequelize; module.exports.default = Sequelize; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9zZXF1ZWxpemUuanMiXSwibmFtZXMiOlsicmV0cnkiLCJyZXF1aXJlIiwiY2xzQmx1ZWJpcmQiLCJfIiwiVXRpbHMiLCJNb2RlbCIsIkRhdGFUeXBlcyIsIkRlZmVycmFibGUiLCJNb2RlbE1hbmFnZXIiLCJRdWVyeUludGVyZmFjZSIsIlRyYW5zYWN0aW9uIiwiUXVlcnlUeXBlcyIsIlRhYmxlSGludHMiLCJJbmRleEhpbnRzIiwic2VxdWVsaXplRXJyb3JzIiwiUHJvbWlzZSIsIkhvb2tzIiwiQXNzb2NpYXRpb24iLCJWYWxpZGF0b3IiLCJ2YWxpZGF0b3IiLCJPcCIsImRlcHJlY2F0aW9ucyIsIlNlcXVlbGl6ZSIsImRhdGFiYXNlIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIm9wdGlvbnMiLCJjb25maWciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJwaWNrIiwicnVuSG9va3MiLCJPYmplY3QiLCJhc3NpZ24iLCJkaWFsZWN0IiwiZGlhbGVjdE1vZHVsZSIsImRpYWxlY3RNb2R1bGVQYXRoIiwiaG9zdCIsInByb3RvY29sIiwiZGVmaW5lIiwicXVlcnkiLCJzeW5jIiwidGltZXpvbmUiLCJjbGllbnRNaW5NZXNzYWdlcyIsInN0YW5kYXJkQ29uZm9ybWluZ1N0cmluZ3MiLCJsb2dnaW5nIiwiY29uc29sZSIsImxvZyIsIm9taXROdWxsIiwibmF0aXZlIiwicmVwbGljYXRpb24iLCJzc2wiLCJ1bmRlZmluZWQiLCJwb29sIiwicXVvdGVJZGVudGlmaWVycyIsImhvb2tzIiwibWF4IiwibWF0Y2giLCJ0cmFuc2FjdGlvblR5cGUiLCJUWVBFUyIsIkRFRkVSUkVEIiwiaXNvbGF0aW9uTGV2ZWwiLCJkYXRhYmFzZVZlcnNpb24iLCJ0eXBlVmFsaWRhdGlvbiIsImJlbmNobWFyayIsIm1pbmlmeUFsaWFzZXMiLCJsb2dRdWVyeVBhcmFtZXRlcnMiLCJFcnJvciIsIm5vVHJ1ZUxvZ2dpbmciLCJfc2V0dXBIb29rcyIsInBvcnQiLCJrZWVwRGVmYXVsdFRpbWV6b25lIiwiZGlhbGVjdE9wdGlvbnMiLCJEaWFsZWN0IiwiZ2V0RGlhbGVjdCIsIlF1ZXJ5R2VuZXJhdG9yIiwiaXNQbGFpbk9iamVjdCIsIm9wZXJhdG9yc0FsaWFzZXMiLCJub1N0cmluZ09wZXJhdG9ycyIsInNldE9wZXJhdG9yc0FsaWFzZXMiLCJub0Jvb2xPcGVyYXRvckFsaWFzZXMiLCJxdWVyeUludGVyZmFjZSIsIm1vZGVscyIsIm1vZGVsTWFuYWdlciIsImNvbm5lY3Rpb25NYW5hZ2VyIiwiaW1wb3J0Q2FjaGUiLCJyZWZyZXNoVHlwZVBhcnNlciIsIm1vZGVsTmFtZSIsImF0dHJpYnV0ZXMiLCJzZXF1ZWxpemUiLCJtb2RlbCIsImluaXQiLCJpc0RlZmluZWQiLCJnZXRNb2RlbCIsImZpbmQiLCJuYW1lIiwiaW1wb3J0UGF0aCIsInNxbCIsImluc3RhbmNlIiwiY29uc3RydWN0b3IiLCJyYXciLCJtYXBUb01vZGVsIiwiZmllbGRNYXAiLCJnZXQiLCJkZWZhdWx0cyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNlYXJjaFBhdGgiLCJ0eXBlIiwibmVzdCIsInBsYWluIiwiU0VMRUNUIiwiUkFXIiwic3VwcG9ydHMiLCJwcmVwZW5kU2VhcmNoUGF0aCIsInN1cHBvcnRzU2VhcmNoUGF0aCIsInRyeSIsInZhbHVlcyIsInJlcGxhY2VtZW50cyIsImJpbmQiLCJ0cmltIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwiY29uY2F0IiwiZm9ybWF0TmFtZWRQYXJhbWV0ZXJzIiwiYmluZFBhcmFtZXRlcnMiLCJRdWVyeSIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiY2hlY2tUcmFuc2FjdGlvbiIsInRyYW5zYWN0aW9uIiwiZmluaXNoZWQiLCJjb21wbGV0ZXNUcmFuc2FjdGlvbiIsImVycm9yIiwiaWQiLCJyZXRyeU9wdGlvbnMiLCJyZXNvbHZlIiwiX2NscyIsImNvbm5lY3Rpb24iLCJnZXRDb25uZWN0aW9uIiwidGhlbiIsInJ1biIsImZpbmFsbHkiLCJyZWxlYXNlQ29ubmVjdGlvbiIsInZhcmlhYmxlcyIsInNldCIsIlR5cGVFcnJvciIsIm1hcCIsInYiLCJrIiwiam9pbiIsInZhbHVlIiwiZ2V0UXVlcnlJbnRlcmZhY2UiLCJlc2NhcGUiLCJzY2hlbWEiLCJjcmVhdGVTY2hlbWEiLCJzaG93QWxsU2NoZW1hcyIsImRyb3BTY2hlbWEiLCJkcm9wQWxsU2NoZW1hcyIsImNsb25lIiwidGVzdCIsInJlamVjdCIsImZvcmNlIiwiZHJvcCIsImZvckVhY2hNb2RlbCIsInB1c2giLCJhdXRoZW50aWNhdGUiLCJlYWNoIiwicmV0dXJuIiwicmV2ZXJzZSIsInRydW5jYXRlTW9kZWwiLCJ0cnVuY2F0ZSIsImNhc2NhZGUiLCJkaWEiLCJmbiIsImF1dG9DYWxsYmFjayIsInByZXBhcmVFbnZpcm9ubWVudCIsIl9jbHNSdW4iLCJ0YXAiLCJjb21taXQiLCJjYXRjaCIsImVyciIsInJvbGxiYWNrIiwidGhyb3ciLCJhcmdzIiwibGFzdCIsInNwbGljZSIsImNsb3NlIiwiVHlwZSIsImRpYWxlY3RUeXBlcyIsImtleSIsImV4dGVuZCIsIkFSUkFZIiwiYXR0cmlidXRlIiwibm9ybWFsaXplRGF0YVR5cGUiLCJkZWZhdWx0VmFsdWUiLCJOT1ciLCJVVUlEVjEiLCJVVUlEVjQiLCJFTlVNIiwiRm4iLCJjb2wiLCJDb2wiLCJ2YWwiLCJDYXN0IiwiTGl0ZXJhbCIsImFuZCIsIm9yIiwiY29uZGl0aW9uc09yUGF0aCIsIkpzb24iLCJhdHRyIiwiY29tcGFyYXRvciIsImxvZ2ljIiwiV2hlcmUiLCJucyIsInJlcyIsImNvbnRleHQiLCJjYXN0IiwibGl0ZXJhbCIsImpzb24iLCJ3aGVyZSIsInZhbGlkYXRlIiwidmVyc2lvbiIsImRhdGFUeXBlIiwidXNlSW5mbGVjdGlvbiIsImFwcGx5VG8iLCJCYXNlRXJyb3IiLCJrZXlzIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxNQUFNQSxLQUFLLEdB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Ozs7Ozs7O0FBS0ExTSxTQUFTLENBQUNmLFVBQVYsR0FBdUJBLFVBQXZCO0FBRUE7Ozs7O0FBSUFlLFNBQVMsQ0FBQ21GLFNBQVYsQ0FBb0J4RixXQUFwQixHQUFrQ0ssU0FBUyxDQUFDTCxXQUFWLEdBQXdCQSxXQUExRDtBQUVBOzs7OztBQUlBSyxTQUFTLENBQUMyTSxhQUFWLEdBQTBCN04sS0FBSyxDQUFDNk4sYUFBaEM7QUFFQTs7Ozs7QUFJQWpOLEtBQUssQ0FBQ2tOLE9BQU4sQ0FBYzVNLFNBQWQ7QUFDQU4sS0FBSyxDQUFDa04sT0FBTixDQUFjNU0sU0FBUyxDQUFDbUYsU0FBeEI7QUFFQTs7O0FBSUE7O0FBQ0FuRixTQUFTLENBQUM2QyxLQUFWLEdBQWtCckQsZUFBZSxDQUFDcU4sU0FBbEM7O0FBRUEsS0FBSyxNQUFNN0YsS0FBWCxJQUFvQnRHLE1BQU0sQ0FBQ29NLElBQVAsQ0FBWXROLGVBQVosQ0FBcEIsRUFBa0Q7QUFDaERRLEVBQUFBLFNBQVMsQ0FBQ2dILEtBQUQsQ0FBVCxHQUFtQnhILGVBQWUsQ0FBQ3dILEtBQUQsQ0FBbEM7QUFDRDs7QUFFRCtGLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQmhOLFNBQWpCO0FBQ0ErTSxNQUFNLENBQUNDLE9BQVAsQ0FBZWhOLFNBQWYsR0FBMkJBLFNBQTNCO0FBQ0ErTSxNQUFNLENBQUNDLE9BQVAsQ0FBZUMsT0FBZixHQUF5QmpOLFNBQXpCIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbmNvbnN0IHJldHJ5ID0gcmVxdWlyZShcInJldHJ5LWFzLXByb21pc2VkXCIpO1xyXG5jb25zdCBjbHNCbHVlYmlyZCA9IHJlcXVpcmUoXCJjbHMtYmx1ZWJpcmRcIik7XHJcbmNvbnN0IF8gPSByZXF1aXJlKFwibG9kYXNoXCIpO1xyXG5cclxuY29uc3QgVXRpbHMgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcclxuY29uc3QgTW9kZWwgPSByZXF1aXJlKFwiLi9tb2RlbFwiKTtcclxuY29uc3QgRGF0YVR5cGVzID0gcmVxdWlyZShcIi4vZGF0YS10eXBlc1wiKTtcclxuY29uc3QgRGVmZXJyYWJsZSA9IHJlcXVpcmUoXCIuL2RlZmVycmFibGVcIik7XHJcbmNvbnN0IE1vZGVsTWFuYWdlciA9IHJlcXVpcmUoXCIuL21vZGVsLW1hbmFnZXJcIik7XHJcbmNvbnN0IFF1ZXJ5SW50ZXJmYWNlID0gcmVxdWlyZShcIi4vcXVlcnktaW50ZXJmYWNlXCIpO1xyXG5jb25zdCBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoXCIuL3RyYW5zYWN0aW9uXCIpO1xyXG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZShcIi4vcXVlcnktdHlwZXNcIik7XHJcbmNvbnN0IFRhYmxlSGludHMgPSByZXF1aXJlKFwiLi90YWJsZS1oaW50c1wiKTtcclxuY29uc3QgSW5kZXhIaW50cyA9IHJlcXVpcmUoXCIuL2luZGV4LWhpbnRzXCIpO1xyXG5jb25zdCBzZXF1ZWxpemVFcnJvcnMgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XHJcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi9wcm9taXNlXCIpO1xyXG5jb25zdCBIb29rcyA9IHJlcXVpcmUoXCIuL2hvb2tzXCIpO1xyXG5jb25zdCBBc3NvY2lhdGlvbiA9IHJlcXVpcmUoXCIuL2Fzc29jaWF0aW9ucy9pbmRleFwiKTtcclxuY29uc3QgVmFsaWRhdG9yID0gcmVxdWlyZShcIi4vdXRpbHMvdmFsaWRhdG9yLWV4dHJhc1wiKS52YWxpZGF0b3I7XHJcbmNvbnN0IE9wID0gcmVxdWlyZShcIi4vb3BlcmF0b3JzXCIpO1xyXG5jb25zdCBkZXByZWNhdGlvbnMgPSByZXF1aXJlKFwiLi91dGlscy9kZXByZWNhdGlvbnNcIik7XHJcblxyXG4vKipcclxuICogVGhpcyBpcyB0aGUgbWFpbiBjbGFzcywgdGhlIGVudHJ5IHBvaW50IHRvIHNlcXVlbGl6ZS5cclxuICovXHJcbmNsYXNzIFNlcXVlbGl6ZSB7XHJcbiAgLyoqXHJcbiAgICogSW5zdGFudGlhdGUgc2VxdWVsaXplIHdpdGggbmFtZSBvZiBkYXRhYmFzZSwgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLyB3aXRob3V0IHBhc3N3b3JkIC8gd2l0aCBibGFuayBwYXNzd29yZFxyXG4gICAqIGNvbnN0IHNlcXVlbGl6ZSA9IG5ldyBTZXF1ZWxpemUoJ2RhdGFiYXNlJywgJ3VzZXJuYW1lJywgbnVsbCwge1xyXG4gICAqICAgZGlhbGVjdDogJ215c3FsJ1xyXG4gICAqIH0pXHJcbiAgICpcclxuICAgKiAvLyB3aXRoIHBhc3N3b3JkIGFuZCBvcHRpb25zXHJcbiAgICogY29uc3Qgc2VxdWVsaXplID0gbmV3IFNlcXVlbGl6ZSgnbXlfZGF0YWJhc2UnLCAnam9obicsICdkb2UnLCB7XHJcbiAgICogICBkaWFsZWN0OiAncG9zdGdyZXMnXHJcbiAgICogfSlcclxuICAgKlxyXG4gICAqIC8vIHdpdGggZGF0YWJhc2UsIHVzZXJuYW1lLCBhbmQgcGFzc3dvcmQgaW4gdGhlIG9wdGlvbnMgb2JqZWN0XHJcbiAgICogY29uc3Qgc2VxdWVsaXplID0gbmV3IFNlcXVlbGl6ZSh7IGRhdGFiYXNlLCB1c2VybmFtZSwgcGFzc3dvcmQsIGRpYWxlY3Q6ICdtc3NxbCcgfSk7XHJcbiAgICpcclxuICAgKiAvLyB3aXRoIHVyaVxyXG4gICAqIGNvbnN0IHNlcXVlbGl6ZSA9IG5ldyBTZXF1ZWxpemUoJ215c3FsOi8vbG9jYWxob3N0OjMzMDYvZGF0YWJhc2UnLCB7fSlcclxuICAgKlxyXG4gICAqIC8vIG9wdGlvbiBleGFtcGxlc1xyXG4gICAqIGNvbnN0IHNlcXVlbGl6ZSA9IG5ldyBTZXF1ZWxpemUoJ2RhdGFiYXNlJywgJ3VzZXJuYW1lJywgJ3Bhc3N3b3JkJywge1xyXG4gICAqICAgLy8gdGhlIHNxbCBkaWFsZWN0IG9mIHRoZSBkYXRhYmFzZVxyXG4gICAqICAgLy8gY3VycmVudGx5IHN1cHBvcnRlZDogJ215c3FsJywgJ3NxbGl0ZScsICdwb3N0Z3JlcycsICdtc3NxbCdcclxuICAgKiAgIGRpYWxlY3Q6ICdteXNxbCcsXHJcbiAgICpcclxuICAgKiAgIC8vIGN1c3RvbSBob3N0OyBkZWZhdWx0OiBsb2NhbGhvc3RcclxuICAgKiAgIGhvc3Q6ICdteS5zZXJ2ZXIudGxkJyxcclxuICAgKiAgIC8vIGZvciBwb3N0Z3JlcywgeW91IGNhbiBhbHNvIHNwZWNpZnkgYW4gYWJzb2x1dGUgcGF0aCB0byBhIGRpcmVjdG9yeVxyXG4gICAqICAgLy8gY29udGFpbmluZyBhIFVOSVggc29ja2V0IHRvIGNvbm5lY3Qgb3ZlclxyXG4gICAqICAgLy8gaG9zdDogJy9zb2NrZXRzL3BzcWxfc29ja2V0cycuXHJcbiAgICpcclxuICAgKiAgIC8vIGN1c3RvbSBwb3J0OyBkZWZhdWx0OiBkaWFsZWN0IGRlZmF1bHRcclxuICAgKiAgIHBvcnQ6IDEyMzQ1LFxyXG4gICAqXHJcbiAgICogICAvLyBjdXN0b20gcHJvdG9jb2w7IGRlZmF1bHQ6ICd0Y3AnXHJcbiAgICogICAvLyBwb3N0Z3JlcyBvbmx5LCB1c2VmdWwgZm9yIEhlcm9rdVxyXG4gICAqICAgcHJvdG9jb2w6IG51bGwsXHJcbiAgICpcclxuICAgKiAgIC8vIGRpc2FibGUgbG9nZ2luZyBvciBwcm92aWRlIGEgY3VzdG9tIGxvZ2dpbmcgZnVuY3Rpb247IGRlZmF1bHQ6IGNvbnNvbGUubG9nXHJcbiAgICogICBsb2dnaW5nOiBmYWxzZSxcclxuICAgKlxyXG4gICAqICAgLy8geW91IGNhbiBhbHNvIHBhc3MgYW55IGRpYWxlY3Qgb3B0aW9ucyB0byB0aGUgdW5kZXJseWluZyBkaWFsZWN0IGxpYnJhcnlcclxuICAgKiAgIC8vIC0gZGVmYXVsdCBpcyBlbXB0eVxyXG4gICAqICAgLy8gLSBjdXJyZW50bHkgc3VwcG9ydGVkOiAnbXlzcWwnLCAncG9zdGdyZXMnLCAnbXNzcWwnXHJcbiAgICogICBkaWFsZWN0T3B0aW9uczoge1xyXG4gICAqICAgICBzb2NrZXRQYXRoOiAnL0FwcGxpY2F0aW9ucy9NQU1QL3RtcC9teXNxbC9teXNxbC5zb2NrJyxcclxuICAgKiAgICAgc3VwcG9ydEJpZ051bWJlcnM6IHRydWUsXHJcbiAgICogICAgIGJpZ051bWJlclN0cmluZ3M6IHRydWVcclxuICAgKiAgIH0sXHJcbiAgICpcclxuICAgKiAgIC8vIHRoZSBzdG9yYWdlIGVuZ2luZSBmb3Igc3FsaXRlXHJcbiAgICogICAvLyAtIGRlZmF1bHQgJzptZW1vcnk6J1xyXG4gICAqICAgc3RvcmFnZTogJ3BhdGgvdG8vZGF0YWJhc2Uuc3FsaXRlJyxcclxuICAgKlxyXG4gICAqICAgLy8gZGlzYWJsZSBpbnNlcnRpbmcgdW5kZWZpbmVkIHZhbHVlcyBhcyBOVUxMXHJcbiAgICogICAvLyAtIGRlZmF1bHQ6IGZhbHNlXHJcbiAgICogICBvbWl0TnVsbDogdHJ1ZSxcclxuICAgKlxyXG4gICAqICAgLy8gYSBmbGFnIGZvciB1c2luZyBhIG5hdGl2ZSBsaWJyYXJ5IG9yIG5vdC5cclxuICAgKiAgIC8vIGluIHRoZSBjYXNlIG9mICdwZycgLS0gc2V0IHRoaXMgdG8gdHJ1ZSB3aWxsIGFsbG93IFNTTCBzdXBwb3J0XHJcbiAgICogICAvLyAtIGRlZmF1bHQ6IGZhbHNlXHJcbiAgICogICBuYXRpdmU6IHRydWUsXHJcbiAgICpcclxuICAgKiAgIC8vIFNwZWNpZnkgb3B0aW9ucywgd2hpY2ggYXJlIHVzZWQgd2hlbiBzZXF1ZWxpemUuZGVmaW5lIGlzIGNhbGxlZC5cclxuICAgKiAgIC8vIFRoZSBmb2xsb3dpbmcgZXhhbXBsZTpcclxuICAgKiAgIC8vICAgZGVmaW5lOiB7IHRpbWVzdGFtcHM6IGZhbHNlIH1cclxuICAgKiAgIC8vIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhczpcclxuICAgKiAgIC8vICAgTW9kZWwuaW5pdChhdHRyaWJ1dGVzLCB7IHRpbWVzdGFtcHM6IGZhbHNlIH0pO1xyXG4gICAqICAgLy8gICBzZXF1ZWxpemUuZGVmaW5lKG5hbWUsIGF0dHJpYnV0ZXMsIHsgdGltZXN0YW1wczogZmFsc2UgfSk7XHJcbiAgICogICAvLyBzbyBkZWZpbmluZyB0aGUgdGltZXN0YW1wcyBmb3IgZWFjaCBtb2RlbCB3aWxsIGJlIG5vdCBuZWNlc3NhcnlcclxuICAgKiAgIGRlZmluZToge1xyXG4gICAqICAgICB1bmRlcnNjb3JlZDogZmFsc2UsXHJcbiAgICogICAgIGZyZWV6ZVRhYmxlTmFtZTogZmFsc2UsXHJcbiAgICogICAgIGNoYXJzZXQ6ICd1dGY4JyxcclxuICAgKiAgICAgZGlhbGVjdE9wdGlvbnM6IHtcclxuICAgKiAgICAgICBjb2xsYXRlOiAndXRmOF9nZW5lcmFsX2NpJ1xyXG4gICAqICAgICB9LFxyXG4gICAqICAgICB0aW1lc3RhbXBzOiB0cnVlXHJcbiAgICogICB9LFxyXG4gICAqXHJcbiAgICogICAvLyBzaW1pbGFyIGZvciBzeW5jOiB5b3UgY2FuIGRlZmluZSB0aGlzIHRvIGFsd2F5cyBmb3JjZSBzeW5jIGZvciBtb2RlbHNcclxuICAgKiAgIHN5bmM6IHsgZm9yY2U6IHRydWUgfSxcclxuICAgKlxyXG4gICAqICAgLy8gcG9vbCBjb25maWd1cmF0aW9uIHVzZWQgdG8gcG9vbCBkYXRhYmFzZSBjb25uZWN0aW9uc1xyXG4gICAqICAgcG9vbDoge1xyXG4gICAqICAgICBtYXg6IDUsXHJcbiAgICogICAgIGlkbGU6IDMwMDAwLFxyXG4gICAqICAgICBhY3F1aXJlOiA2MDAwMCxcclxuICAgKiAgIH0sXHJcbiAgICpcclxuICAgKiAgIC8vIGlzb2xhdGlvbiBsZXZlbCBvZiBlYWNoIHRyYW5zYWN0aW9uXHJcbiAgICogICAvLyBkZWZhdWx0cyB0byBkaWFsZWN0IGRlZmF1bHRcclxuICAgKiAgIGlzb2xhdGlvbkxldmVsOiBUcmFuc2FjdGlvbi5JU09MQVRJT05fTEVWRUxTLlJFUEVBVEFCTEVfUkVBRFxyXG4gICAqIH0pXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbZGF0YWJhc2VdIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFt1c2VybmFtZT1udWxsXSBUaGUgdXNlcm5hbWUgd2hpY2ggaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgYWdhaW5zdCB0aGUgZGF0YWJhc2UuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgW3Bhc3N3b3JkPW51bGxdIFRoZSBwYXNzd29yZCB3aGljaCBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpbnN0IHRoZSBkYXRhYmFzZS4gU3VwcG9ydHMgU1FMQ2lwaGVyIGVuY3J5cHRpb24gZm9yIFNRTGl0ZS5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucz17fV0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy5ob3N0PSdsb2NhbGhvc3QnXSBUaGUgaG9zdCBvZiB0aGUgcmVsYXRpb25hbCBkYXRhYmFzZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gICBbb3B0aW9ucy5wb3J0PV0gVGhlIHBvcnQgb2YgdGhlIHJlbGF0aW9uYWwgZGF0YWJhc2UuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgW29wdGlvbnMudXNlcm5hbWU9bnVsbF0gVGhlIHVzZXJuYW1lIHdoaWNoIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIGFnYWluc3QgdGhlIGRhdGFiYXNlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLnBhc3N3b3JkPW51bGxdIFRoZSBwYXNzd29yZCB3aGljaCBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpbnN0IHRoZSBkYXRhYmFzZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy5kYXRhYmFzZT1udWxsXSBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2VcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy5kaWFsZWN0XSBUaGUgZGlhbGVjdCBvZiB0aGUgZGF0YWJhc2UgeW91IGFyZSBjb25uZWN0aW5nIHRvLiBPbmUgb2YgbXlzcWwsIHBvc3RncmVzLCBzcWxpdGUgYW5kIG1zc3FsLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLmRpYWxlY3RNb2R1bGU9bnVsbF0gSWYgc3BlY2lmaWVkLCB1c2UgdGhpcyBkaWFsZWN0IGxpYnJhcnkuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byB1c2UgcGcuanMgaW5zdGVhZCBvZiBwZyB3aGVuIGNvbm5lY3RpbmcgdG8gYSBwZyBkYXRhYmFzZSwgeW91IHNob3VsZCBzcGVjaWZ5ICdyZXF1aXJlKFwicGcuanNcIiknIGhlcmVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy5kaWFsZWN0TW9kdWxlUGF0aD1udWxsXSBJZiBzcGVjaWZpZWQsIGxvYWQgdGhlIGRpYWxlY3QgbGlicmFyeSBmcm9tIHRoaXMgcGF0aC4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHVzZSBwZy5qcyBpbnN0ZWFkIG9mIHBnIHdoZW4gY29ubmVjdGluZyB0byBhIHBnIGRhdGFiYXNlLCB5b3Ugc2hvdWxkIHNwZWNpZnkgJy9wYXRoL3RvL3BnLmpzJyBoZXJlXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnMuZGlhbGVjdE9wdGlvbnNdIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIG9wdGlvbnMsIHdoaWNoIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIGNvbm5lY3Rpb24gbGlicmFyeVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLnN0b3JhZ2VdIE9ubHkgdXNlZCBieSBzcWxpdGUuIERlZmF1bHRzIHRvICc6bWVtb3J5OidcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy5wcm90b2NvbD0ndGNwJ10gVGhlIHByb3RvY29sIG9mIHRoZSByZWxhdGlvbmFsIGRhdGFiYXNlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIFtvcHRpb25zLmRlZmluZT17fV0gRGVmYXVsdCBvcHRpb25zIGZvciBtb2RlbCBkZWZpbml0aW9ucy4gU2VlIHtAbGluayBNb2RlbC5pbml0fS5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy5xdWVyeT17fV0gRGVmYXVsdCBvcHRpb25zIGZvciBzZXF1ZWxpemUucXVlcnlcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy5zY2hlbWE9bnVsbF0gQSBzY2hlbWEgdG8gdXNlXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnMuc2V0PXt9XSBEZWZhdWx0IG9wdGlvbnMgZm9yIHNlcXVlbGl6ZS5zZXRcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy5zeW5jPXt9XSBEZWZhdWx0IG9wdGlvbnMgZm9yIHNlcXVlbGl6ZS5zeW5jXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgW29wdGlvbnMudGltZXpvbmU9JyswMDowMCddIFRoZSB0aW1lem9uZSB1c2VkIHdoZW4gY29udmVydGluZyBhIGRhdGUgZnJvbSB0aGUgZGF0YWJhc2UgaW50byBhIEphdmFTY3JpcHQgZGF0ZS4gVGhlIHRpbWV6b25lIGlzIGFsc28gdXNlZCB0byBTRVQgVElNRVpPTkUgd2hlbiBjb25uZWN0aW5nIHRvIHRoZSBzZXJ2ZXIsIHRvIGVuc3VyZSB0aGF0IHRoZSByZXN1bHQgb2YgTk9XLCBDVVJSRU5UX1RJTUVTVEFNUCBhbmQgb3RoZXIgdGltZSByZWxhdGVkIGZ1bmN0aW9ucyBoYXZlIGluIHRoZSByaWdodCB0aW1lem9uZS4gRm9yIGJlc3QgY3Jvc3MgcGxhdGZvcm0gcGVyZm9ybWFuY2UgdXNlIHRoZSBmb3JtYXQgKy8tSEg6TU0uIFdpbGwgYWxzbyBhY2NlcHQgc3RyaW5nIHZlcnNpb25zIG9mIHRpbWV6b25lcyB1c2VkIGJ5IG1vbWVudC5qcyAoZS5nLiAnQW1lcmljYS9Mb3NfQW5nZWxlcycpOyB0aGlzIGlzIHVzZWZ1bCB0byBjYXB0dXJlIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBjaGFuZ2VzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IFtvcHRpb25zLmNsaWVudE1pbk1lc3NhZ2VzPSd3YXJuaW5nJ10gVGhlIFBvc3RncmVTUUwgYGNsaWVudF9taW5fbWVzc2FnZXNgIHNlc3Npb24gcGFyYW1ldGVyLiBTZXQgdG8gYGZhbHNlYCB0byBub3Qgb3ZlcnJpZGUgdGhlIGRhdGFiYXNlJ3MgZGVmYXVsdC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5zdGFuZGFyZENvbmZvcm1pbmdTdHJpbmdzPXRydWVdIFRoZSBQb3N0Z3JlU1FMIGBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3NgIHNlc3Npb24gcGFyYW1ldGVyLiBTZXQgdG8gYGZhbHNlYCB0byBub3Qgc2V0IHRoZSBvcHRpb24uIFdBUk5JTkc6IFNldHRpbmcgdGhpcyB0byBmYWxzZSBtYXkgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcyBhbmQgaXMgbm90IHJlY29tbWVuZGVkIVxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmc9Y29uc29sZS5sb2ddIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIGV2ZXJ5IHRpbWUgU2VxdWVsaXplIHdvdWxkIGxvZyBzb21ldGhpbmcuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgW29wdGlvbnMuYmVuY2htYXJrPWZhbHNlXSBQYXNzIHF1ZXJ5IGV4ZWN1dGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcyBhcyBzZWNvbmQgYXJndW1lbnQgdG8gbG9nZ2luZyBmdW5jdGlvbiAob3B0aW9ucy5sb2dnaW5nKS5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5vbWl0TnVsbD1mYWxzZV0gQSBmbGFnIHRoYXQgZGVmaW5lcyBpZiBudWxsIHZhbHVlcyBzaG91bGQgYmUgcGFzc2VkIHRvIFNRTCBxdWVyaWVzIG9yIG5vdC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5uYXRpdmU9ZmFsc2VdIEEgZmxhZyB0aGF0IGRlZmluZXMgaWYgbmF0aXZlIGxpYnJhcnkgc2hhbGwgYmUgdXNlZCBvciBub3QuIEN1cnJlbnRseSBvbmx5IGhhcyBhbiBlZmZlY3QgZm9yIHBvc3RncmVzXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgW29wdGlvbnMucmVwbGljYXRpb249ZmFsc2VdIFVzZSByZWFkIC8gd3JpdGUgcmVwbGljYXRpb24uIFRvIGVuYWJsZSByZXBsaWNhdGlvbiwgcGFzcyBhbiBvYmplY3QsIHdpdGggdHdvIHByb3BlcnRpZXMsIHJlYWQgYW5kIHdyaXRlLiBXcml0ZSBzaG91bGQgYmUgYW4gb2JqZWN0IChhIHNpbmdsZSBzZXJ2ZXIgZm9yIGhhbmRsaW5nIHdyaXRlcyksIGFuZCByZWFkIGFuIGFycmF5IG9mIG9iamVjdCAoc2V2ZXJhbCBzZXJ2ZXJzIHRvIGhhbmRsZSByZWFkcykuIEVhY2ggcmVhZC93cml0ZSBzZXJ2ZXIgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOiBgaG9zdGAsIGBwb3J0YCwgYHVzZXJuYW1lYCwgYHBhc3N3b3JkYCwgYGRhdGFiYXNlYFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIFtvcHRpb25zLnBvb2xdIHNlcXVlbGl6ZSBjb25uZWN0aW9uIHBvb2wgY29uZmlndXJhdGlvblxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSAgIFtvcHRpb25zLnBvb2wubWF4PTVdIE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb24gaW4gcG9vbFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSAgIFtvcHRpb25zLnBvb2wubWluPTBdIE1pbmltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb24gaW4gcG9vbFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSAgIFtvcHRpb25zLnBvb2wuaWRsZT0xMDAwMF0gVGhlIG1heGltdW0gdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0aGF0IGEgY29ubmVjdGlvbiBjYW4gYmUgaWRsZSBiZWZvcmUgYmVpbmcgcmVsZWFzZWQuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9ICAgW29wdGlvbnMucG9vbC5hY3F1aXJlPTYwMDAwXSBUaGUgbWF4aW11bSB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRoYXQgcG9vbCB3aWxsIHRyeSB0byBnZXQgY29ubmVjdGlvbiBiZWZvcmUgdGhyb3dpbmcgZXJyb3JcclxuICAgKiBAcGFyYW0ge251bWJlcn0gICBbb3B0aW9ucy5wb29sLmV2aWN0PTEwMDBdIFRoZSB0aW1lIGludGVydmFsLCBpbiBtaWxsaXNlY29uZHMsIGFmdGVyIHdoaWNoIHNlcXVlbGl6ZS1wb29sIHdpbGwgcmVtb3ZlIGlkbGUgY29ubmVjdGlvbnMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMucG9vbC52YWxpZGF0ZV0gQSBmdW5jdGlvbiB0aGF0IHZhbGlkYXRlcyBhIGNvbm5lY3Rpb24uIENhbGxlZCB3aXRoIGNsaWVudC4gVGhlIGRlZmF1bHQgZnVuY3Rpb24gY2hlY2tzIHRoYXQgY2xpZW50IGlzIGFuIG9iamVjdCwgYW5kIHRoYXQgaXRzIHN0YXRlIGlzIG5vdCBkaXNjb25uZWN0ZWRcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5xdW90ZUlkZW50aWZpZXJzPXRydWVdIFNldCB0byBgZmFsc2VgIHRvIG1ha2UgdGFibGUgbmFtZXMgYW5kIGF0dHJpYnV0ZXMgY2FzZS1pbnNlbnNpdGl2ZSBvbiBQb3N0Z3JlcyBhbmQgc2tpcCBkb3VibGUgcXVvdGluZyBvZiB0aGVtLiAgV0FSTklORzogU2V0dGluZyB0aGlzIHRvIGZhbHNlIG1heSBleHBvc2UgdnVsbmVyYWJpbGl0aWVzIGFuZCBpcyBub3QgcmVjb21tZW5kZWQhXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgW29wdGlvbnMudHJhbnNhY3Rpb25UeXBlPSdERUZFUlJFRCddIFNldCB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiB0eXBlLiBTZWUgYFNlcXVlbGl6ZS5UcmFuc2FjdGlvbi5UWVBFU2AgZm9yIHBvc3NpYmxlIG9wdGlvbnMuIFNxbGl0ZSBvbmx5LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLmlzb2xhdGlvbkxldmVsXSBTZXQgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLiBTZWUgYFNlcXVlbGl6ZS5UcmFuc2FjdGlvbi5JU09MQVRJT05fTEVWRUxTYCBmb3IgcG9zc2libGUgb3B0aW9ucy5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy5yZXRyeV0gU2V0IG9mIGZsYWdzIHRoYXQgY29udHJvbCB3aGVuIGEgcXVlcnkgaXMgYXV0b21hdGljYWxseSByZXRyaWVkLlxyXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgIFtvcHRpb25zLnJldHJ5Lm1hdGNoXSBPbmx5IHJldHJ5IGEgcXVlcnkgaWYgdGhlIGVycm9yIG1hdGNoZXMgb25lIG9mIHRoZXNlIHN0cmluZ3MuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9ICAgW29wdGlvbnMucmV0cnkubWF4XSBIb3cgbWFueSB0aW1lcyBhIGZhaWxpbmcgcXVlcnkgaXMgYXV0b21hdGljYWxseSByZXRyaWVkLiAgU2V0IHRvIDAgdG8gZGlzYWJsZSByZXRyeWluZyBvbiBTUUxfQlVTWSBlcnJvci5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy50eXBlVmFsaWRhdGlvbj1mYWxzZV0gUnVuIGJ1aWx0LWluIHR5cGUgdmFsaWRhdG9ycyBvbiBpbnNlcnQgYW5kIHVwZGF0ZSwgYW5kIHNlbGVjdCB3aXRoIHdoZXJlIGNsYXVzZSwgZS5nLiB2YWxpZGF0ZSB0aGF0IGFyZ3VtZW50cyBwYXNzZWQgdG8gaW50ZWdlciBmaWVsZHMgYXJlIGludGVnZXItbGlrZS5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy5vcGVyYXRvcnNBbGlhc2VzXSBTdHJpbmcgYmFzZWQgb3BlcmF0b3IgYWxpYXMuIFBhc3Mgb2JqZWN0IHRvIGxpbWl0IHNldCBvZiBhbGlhc2VkIG9wZXJhdG9ycy5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy5ob29rc10gQW4gb2JqZWN0IG9mIGdsb2JhbCBob29rIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgYmVmb3JlIGFuZCBhZnRlciBjZXJ0YWluIGxpZmVjeWNsZSBldmVudHMuIEdsb2JhbCBob29rcyB3aWxsIHJ1biBhZnRlciBhbnkgbW9kZWwtc3BlY2lmaWMgaG9va3MgZGVmaW5lZCBmb3IgdGhlIHNhbWUgZXZlbnQgKFNlZSBgU2VxdWVsaXplLk1vZGVsLmluaXQoKWAgZm9yIGEgbGlzdCkuICBBZGRpdGlvbmFsbHksIGBiZWZvcmVDb25uZWN0KClgLCBgYWZ0ZXJDb25uZWN0KClgLCBgYmVmb3JlRGlzY29ubmVjdCgpYCwgYW5kIGBhZnRlckRpc2Nvbm5lY3QoKWAgaG9va3MgbWF5IGJlIGRlZmluZWQgaGVyZS5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5taW5pZnlBbGlhc2VzPWZhbHNlXSBBIGZsYWcgdGhhdCBkZWZpbmVzIGlmIGFsaWFzZXMgc2hvdWxkIGJlIG1pbmlmaWVkIChtb3N0bHkgdXNlZnVsIHRvIGF2b2lkIFBvc3RncmVzIGFsaWFzIGNoYXJhY3RlciBsaW1pdCBvZiA2NClcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5sb2dRdWVyeVBhcmFtZXRlcnM9ZmFsc2VdIEEgZmxhZyB0aGF0IGRlZmluZXMgaWYgc2hvdyBiaW5kIHBhdGFtZXRlcnMgaW4gbG9nLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGRhdGFiYXNlLCB1c2VybmFtZSwgcGFzc3dvcmQsIG9wdGlvbnMpIHtcclxuICAgIGxldCBjb25maWc7XHJcblxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGRhdGFiYXNlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIC8vIG5ldyBTZXF1ZWxpemUoeyAuLi4gb3B0aW9ucyB9KVxyXG4gICAgICBvcHRpb25zID0gZGF0YWJhc2U7XHJcbiAgICAgIGNvbmZpZyA9IF8ucGljayhcclxuICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgIFwiaG9zdFwiLFxyXG4gICAgICAgIFwicG9ydFwiLFxyXG4gICAgICAgIFwiZGF0YWJhc2VcIixcclxuICAgICAgICBcInVzZXJuYW1lXCIsXHJcbiAgICAgICAgXCJwYXNzd29yZFwiXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgZGF0YWJhc2UgPT09IFwic3RyaW5nXCIpIHx8XHJcbiAgICAgIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiB1c2VybmFtZSA9PT0gXCJvYmplY3RcIilcclxuICAgICkge1xyXG4gICAgICAvLyBuZXcgU2VxdWVsaXplKFVSSSwgeyAuLi4gb3B0aW9ucyB9KVxyXG5cclxuICAgICAgY29uZmlnID0ge307XHJcbiAgICAgIG9wdGlvbnMgPSB1c2VybmFtZSB8fCB7fTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIG5ldyBTZXF1ZWxpemUoZGF0YWJhc2UsIHVzZXJuYW1lLCBwYXNzd29yZCwgeyAuLi4gb3B0aW9ucyB9KVxyXG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgICAgY29uZmlnID0geyBkYXRhYmFzZSwgdXNlcm5hbWUsIHBhc3N3b3JkIH07XHJcbiAgICB9XHJcblxyXG4gICAgU2VxdWVsaXplLnJ1bkhvb2tzKFwiYmVmb3JlSW5pdFwiLCBjb25maWcsIG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHtcclxuICAgICAgICBkaWFsZWN0OiBcInNxbGl0ZVwiLFxyXG4gICAgICAgIGRpYWxlY3RNb2R1bGU6IG51bGwsXHJcbiAgICAgICAgZGlhbGVjdE1vZHVsZVBhdGg6IG51bGwsXHJcbiAgICAgICAgaG9zdDogXCJsb2NhbGhvc3RcIixcclxuICAgICAgICBwcm90b2NvbDogXCJ0Y3BcIixcclxuICAgICAgICBkZWZpbmU6IHt9LFxyXG4gICAgICAgIHF1ZXJ5OiB7fSxcclxuICAgICAgICBzeW5jOiB7fSxcclxuICAgICAgICB0aW1lem9uZTogXCIrMDA6MDBcIixcclxuICAgICAgICBjbGllbnRNaW5NZXNzYWdlczogXCJ3YXJuaW5nXCIsXHJcbiAgICAgICAgc3RhbmRhcmRDb25mb3JtaW5nU3RyaW5nczogdHJ1ZSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgIGxvZ2dpbmc6IGNvbnNvbGUubG9nLFxyXG4gICAgICAgIG9taXROdWxsOiBmYWxzZSxcclxuICAgICAgICBuYXRpdmU6IGZhbHNlLFxyXG4gICAgICAgIHJlcGxpY2F0aW9uOiBmYWxzZSxcclxuICAgICAgICBzc2w6IHVuZGVmaW5lZCxcclxuICAgICAgICBwb29sOiB7fSxcclxuICAgICAgICBxdW90ZUlkZW50aWZpZXJzOiB0cnVlLFxyXG4gICAgICAgIGhvb2tzOiB7fSxcclxuICAgICAgICByZXRyeToge1xyXG4gICAgICAgICAgbWF4OiA1LFxyXG4gICAgICAgICAgbWF0Y2g6IFtcIlNRTElURV9CVVNZOiBkYXRhYmFzZSBpcyBsb2NrZWRcIl1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb24uVFlQRVMuREVGRVJSRUQsXHJcbiAgICAgICAgaXNvbGF0aW9uTGV2ZWw6IG51bGwsXHJcbiAgICAgICAgZGF0YWJhc2VWZXJzaW9uOiAwLFxyXG4gICAgICAgIHR5cGVWYWxpZGF0aW9uOiBmYWxzZSxcclxuICAgICAgICBiZW5jaG1hcms6IGZhbHNlLFxyXG4gICAgICAgIG1pbmlmeUFsaWFzZXM6IGZhbHNlLFxyXG4gICAgICAgIGxvZ1F1ZXJ5UGFyYW1ldGVyczogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgb3B0aW9ucyB8fCB7fVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5kaWFsZWN0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRpYWxlY3QgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBzdXBwbGllZCBhcyBvZiB2NC4wLjBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaWFsZWN0ID09PSBcInBvc3RncmVzcWxcIikge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuZGlhbGVjdCA9IFwicG9zdGdyZXNcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0ID09PSBcInNxbGl0ZVwiICYmXHJcbiAgICAgIHRoaXMub3B0aW9ucy50aW1lem9uZSAhPT0gXCIrMDA6MDBcIlxyXG4gICAgKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBcIlNldHRpbmcgYSBjdXN0b20gdGltZXpvbmUgaXMgbm90IHN1cHBvcnRlZCBieSBTUUxpdGUsIGRhdGVzIGFyZSBhbHdheXMgcmV0dXJuZWQgYXMgVVRDLiBQbGVhc2UgcmVtb3ZlIHRoZSBjdXN0b20gdGltZXpvbmUgcGFyYW1ldGVyLlwiXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2dnaW5nID09PSB0cnVlKSB7XHJcbiAgICAgIGRlcHJlY2F0aW9ucy5ub1RydWVMb2dnaW5nKCk7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgIHRoaXMub3B0aW9ucy5sb2dnaW5nID0gY29uc29sZS5sb2c7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2V0dXBIb29rcyhvcHRpb25zLmhvb2tzKTtcclxuXHJcbiAgICB0aGlzLmNvbmZpZyA9IHtcclxuICAgICAgZGF0YWJhc2U6IGNvbmZpZy5kYXRhYmFzZSB8fCB0aGlzLm9wdGlvbnMuZGF0YWJhc2UsXHJcbiAgICAgIHVzZXJuYW1lOiBjb25maWcudXNlcm5hbWUgfHwgdGhpcy5vcHRpb25zLnVzZXJuYW1lLFxyXG4gICAgICBwYXNzd29yZDogY29uZmlnLnBhc3N3b3JkIHx8IHRoaXMub3B0aW9ucy5wYXNzd29yZCB8fCBudWxsLFxyXG4gICAgICBob3N0OiBjb25maWcuaG9zdCB8fCB0aGlzLm9wdGlvbnMuaG9zdCxcclxuICAgICAgcG9ydDogY29uZmlnLnBvcnQgfHwgdGhpcy5vcHRpb25zLnBvcnQsXHJcbiAgICAgIHBvb2w6IHRoaXMub3B0aW9ucy5wb29sLFxyXG4gICAgICBwcm90b2NvbDogdGhpcy5vcHRpb25zLnByb3RvY29sLFxyXG4gICAgICBuYXRpdmU6IHRoaXMub3B0aW9ucy5uYXRpdmUsXHJcbiAgICAgIHNzbDogdGhpcy5vcHRpb25zLnNzbCxcclxuICAgICAgcmVwbGljYXRpb246IHRoaXMub3B0aW9ucy5yZXBsaWNhdGlvbixcclxuICAgICAgZGlhbGVjdE1vZHVsZTogdGhpcy5vcHRpb25zLmRpYWxlY3RNb2R1bGUsXHJcbiAgICAgIGRpYWxlY3RNb2R1bGVQYXRoOiB0aGlzLm9wdGlvbnMuZGlhbGVjdE1vZHVsZVBhdGgsXHJcbiAgICAgIGtlZXBEZWZhdWx0VGltZXpvbmU6IHRoaXMub3B0aW9ucy5rZWVwRGVmYXVsdFRpbWV6b25lLFxyXG4gICAgICBkaWFsZWN0T3B0aW9uczogdGhpcy5vcHRpb25zLmRpYWxlY3RPcHRpb25zXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBEaWFsZWN0O1xyXG4gICAgLy8gUmVxdWlyaW5nIHRoZSBkaWFsZWN0IGluIGEgc3dpdGNoLWNhc2UgdG8ga2VlcCB0aGVcclxuICAgIC8vIHJlcXVpcmUgY2FsbHMgc3RhdGljLiAoQnJvd3NlcmlmeSBmaXgpXHJcbiAgICBzd2l0Y2ggKHRoaXMuZ2V0RGlhbGVjdCgpKSB7XHJcbiAgICAgIGNhc2UgXCJzcWxpdGVcIjpcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICBEaWFsZWN0ID0gcmVxdWlyZShcIi4vZGlhbGVjdHMvc3FsaXRlXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBUaGUgZGlhbGVjdCAke3RoaXMuZ2V0RGlhbGVjdCgpfSBpcyBub3Qgc3VwcG9ydGVkLiBTdXBwb3J0ZWQgZGlhbGVjdHM6IHNxbGl0ZS5gXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxlY3QgPSBuZXcgRGlhbGVjdCh0aGlzKTtcclxuICAgIHRoaXMuZGlhbGVjdC5RdWVyeUdlbmVyYXRvci50eXBlVmFsaWRhdGlvbiA9IG9wdGlvbnMudHlwZVZhbGlkYXRpb247XHJcblxyXG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdCh0aGlzLm9wdGlvbnMub3BlcmF0b3JzQWxpYXNlcykpIHtcclxuICAgICAgZGVwcmVjYXRpb25zLm5vU3RyaW5nT3BlcmF0b3JzKCk7XHJcbiAgICAgIHRoaXMuZGlhbGVjdC5RdWVyeUdlbmVyYXRvci5zZXRPcGVyYXRvcnNBbGlhc2VzKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5vcGVyYXRvcnNBbGlhc2VzXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMub3BlcmF0b3JzQWxpYXNlcyA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgZGVwcmVjYXRpb25zLm5vQm9vbE9wZXJhdG9yQWxpYXNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucXVlcnlJbnRlcmZhY2UgPSBuZXcgUXVlcnlJbnRlcmZhY2UodGhpcyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb2RlbHMgYXJlIHN0b3JlZCBoZXJlIHVuZGVyIHRoZSBuYW1lIGdpdmVuIHRvIGBzZXF1ZWxpemUuZGVmaW5lYFxyXG4gICAgICovXHJcbiAgICB0aGlzLm1vZGVscyA9IHt9O1xyXG4gICAgdGhpcy5tb2RlbE1hbmFnZXIgPSBuZXcgTW9kZWxNYW5hZ2VyKHRoaXMpO1xyXG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IHRoaXMuZGlhbGVjdC5jb25uZWN0aW9uTWFuYWdlcjtcclxuXHJcbiAgICB0aGlzLmltcG9ydENhY2hlID0ge307XHJcblxyXG4gICAgU2VxdWVsaXplLnJ1bkhvb2tzKFwiYWZ0ZXJJbml0XCIsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVmcmVzaCBkYXRhIHR5cGVzIGFuZCBwYXJzZXJzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICByZWZyZXNoVHlwZXMoKSB7XHJcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLnJlZnJlc2hUeXBlUGFyc2VyKERhdGFUeXBlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgZGlhbGVjdC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzcGVjaWZpZWQgZGlhbGVjdC5cclxuICAgKi9cclxuICBnZXREaWFsZWN0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kaWFsZWN0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZGF0YWJhc2UgbmFtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkYXRhYmFzZSBuYW1lLlxyXG4gICAqL1xyXG4gIGdldERhdGFiYXNlTmFtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgUXVlcnlJbnRlcmZhY2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UXVlcnlJbnRlcmZhY2V9IEFuIGluc3RhbmNlIChzaW5nbGV0b24pIG9mIFF1ZXJ5SW50ZXJmYWNlLlxyXG4gICAqL1xyXG4gIGdldFF1ZXJ5SW50ZXJmYWNlKCkge1xyXG4gICAgdGhpcy5xdWVyeUludGVyZmFjZSA9IHRoaXMucXVlcnlJbnRlcmZhY2UgfHwgbmV3IFF1ZXJ5SW50ZXJmYWNlKHRoaXMpO1xyXG4gICAgcmV0dXJuIHRoaXMucXVlcnlJbnRlcmZhY2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmUgYSBuZXcgbW9kZWwsIHJlcHJlc2VudGluZyBhIHRhYmxlIGluIHRoZSBkYXRhYmFzZS5cclxuICAgKlxyXG4gICAqIFRoZSB0YWJsZSBjb2x1bW5zIGFyZSBkZWZpbmVkIGJ5IHRoZSBvYmplY3QgdGhhdCBpcyBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LiBFYWNoIGtleSBvZiB0aGUgb2JqZWN0IHJlcHJlc2VudHMgYSBjb2x1bW5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZGVsLiBUaGUgbW9kZWwgd2lsbCBiZSBzdG9yZWQgaW4gYHNlcXVlbGl6ZS5tb2RlbHNgIHVuZGVyIHRoaXMgbmFtZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzIEFuIG9iamVjdCwgd2hlcmUgZWFjaCBhdHRyaWJ1dGUgaXMgYSBjb2x1bW4gb2YgdGhlIHRhYmxlLiBTZWUge0BsaW5rIE1vZGVsLmluaXR9XHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGVzZSBvcHRpb25zIGFyZSBtZXJnZWQgd2l0aCB0aGUgZGVmYXVsdCBkZWZpbmUgb3B0aW9ucyBwcm92aWRlZCB0byB0aGUgU2VxdWVsaXplIGNvbnN0cnVjdG9yIGFuZCBwYXNzZWQgdG8gTW9kZWwuaW5pdCgpXHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsLmluaXR9IGZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBgb3B0aW9uc2AgYW5kIGBhdHRyaWJ1dGVzYCBvYmplY3RzLlxyXG4gICAqIEBzZWUgPGEgaHJlZj1cIi9tYW51YWwvdHV0b3JpYWwvbW9kZWxzLWRlZmluaXRpb24uaHRtbFwiPk1vZGVsIGRlZmluaXRpb248L2E+IE1hbnVhbCByZWxhdGVkIHRvIG1vZGVsIGRlZmluaXRpb25cclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIERhdGFUeXBlc30gRm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBkYXRhIHR5cGVzXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7TW9kZWx9IE5ld2x5IGRlZmluZWQgbW9kZWxcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogc2VxdWVsaXplLmRlZmluZSgnbW9kZWxOYW1lJywge1xyXG4gICAqICAgY29sdW1uQToge1xyXG4gICAqICAgICAgIHR5cGU6IFNlcXVlbGl6ZS5CT09MRUFOLFxyXG4gICAqICAgICAgIHZhbGlkYXRlOiB7XHJcbiAgICogICAgICAgICBpczogW1wiW2Etel1cIiwnaSddLCAgICAgICAgLy8gd2lsbCBvbmx5IGFsbG93IGxldHRlcnNcclxuICAgKiAgICAgICAgIG1heDogMjMsICAgICAgICAgICAgICAgICAgLy8gb25seSBhbGxvdyB2YWx1ZXMgPD0gMjNcclxuICAgKiAgICAgICAgIGlzSW46IHtcclxuICAgKiAgICAgICAgICAgYXJnczogW1snZW4nLCAnemgnXV0sXHJcbiAgICogICAgICAgICAgIG1zZzogXCJNdXN0IGJlIEVuZ2xpc2ggb3IgQ2hpbmVzZVwiXHJcbiAgICogICAgICAgICB9XHJcbiAgICogICAgICAgfSxcclxuICAgKiAgICAgICBmaWVsZDogJ2NvbHVtbl9hJ1xyXG4gICAqICAgfSxcclxuICAgKiAgIGNvbHVtbkI6IFNlcXVlbGl6ZS5TVFJJTkcsXHJcbiAgICogICBjb2x1bW5DOiAnTVkgVkVSWSBPV04gQ09MVU1OIFRZUEUnXHJcbiAgICogfSk7XHJcbiAgICpcclxuICAgKiBzZXF1ZWxpemUubW9kZWxzLm1vZGVsTmFtZSAvLyBUaGUgbW9kZWwgd2lsbCBub3cgYmUgYXZhaWxhYmxlIGluIG1vZGVscyB1bmRlciB0aGUgbmFtZSBnaXZlbiB0byBkZWZpbmVcclxuICAgKi9cclxuICBkZWZpbmUobW9kZWxOYW1lLCBhdHRyaWJ1dGVzLCBvcHRpb25zID0ge30pIHtcclxuICAgIG9wdGlvbnMubW9kZWxOYW1lID0gbW9kZWxOYW1lO1xyXG4gICAgb3B0aW9ucy5zZXF1ZWxpemUgPSB0aGlzO1xyXG5cclxuICAgIGNvbnN0IG1vZGVsID0gY2xhc3MgZXh0ZW5kcyBNb2RlbCB7fTtcclxuXHJcbiAgICBtb2RlbC5pbml0KGF0dHJpYnV0ZXMsIG9wdGlvbnMpO1xyXG5cclxuICAgIHJldHVybiBtb2RlbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoIGEgTW9kZWwgd2hpY2ggaXMgYWxyZWFkeSBkZWZpbmVkXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lIFRoZSBuYW1lIG9mIGEgbW9kZWwgZGVmaW5lZCB3aXRoIFNlcXVlbGl6ZS5kZWZpbmVcclxuICAgKlxyXG4gICAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgbW9kZWwgaXMgbm90IGRlZmluZWQgKHRoYXQgaXMsIGlmIHNlcXVlbGl6ZSNpc0RlZmluZWQgcmV0dXJucyBmYWxzZSlcclxuICAgKiBAcmV0dXJucyB7TW9kZWx9IFNwZWNpZmllZCBtb2RlbFxyXG4gICAqL1xyXG4gIG1vZGVsKG1vZGVsTmFtZSkge1xyXG4gICAgaWYgKCF0aGlzLmlzRGVmaW5lZChtb2RlbE5hbWUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHttb2RlbE5hbWV9IGhhcyBub3QgYmVlbiBkZWZpbmVkYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubW9kZWxNYW5hZ2VyLmdldE1vZGVsKG1vZGVsTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3Mgd2hldGhlciBhIG1vZGVsIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgZGVmaW5lZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSBUaGUgbmFtZSBvZiBhIG1vZGVsIGRlZmluZWQgd2l0aCBTZXF1ZWxpemUuZGVmaW5lXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIG1vZGVsIGlzIGFscmVhZHkgZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXHJcbiAgICovXHJcbiAgaXNEZWZpbmVkKG1vZGVsTmFtZSkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5tb2RlbE1hbmFnZXIubW9kZWxzLmZpbmQobW9kZWwgPT4gbW9kZWwubmFtZSA9PT0gbW9kZWxOYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9ydHMgYSBtb2RlbCBkZWZpbmVkIGluIGFub3RoZXIgZmlsZS4gSW1wb3J0ZWQgbW9kZWxzIGFyZSBjYWNoZWQsIHNvIG11bHRpcGxlXHJcbiAgICogY2FsbHMgdG8gaW1wb3J0IHdpdGggdGhlIHNhbWUgcGF0aCB3aWxsIG5vdCBsb2FkIHRoZSBmaWxlIG11bHRpcGxlIHRpbWVzLlxyXG4gICAqXHJcbiAgICogQHR1dG9yaWFsIGh0dHBzOi8vZ2l0aHViLmNvbS9zZXF1ZWxpemUvZXhwcmVzcy1leGFtcGxlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW1wb3J0UGF0aCBUaGUgcGF0aCB0byB0aGUgZmlsZSB0aGF0IGhvbGRzIHRoZSBtb2RlbCB5b3Ugd2FudCB0byBpbXBvcnQuIElmIHRoZSBwYXJ0IGlzIHJlbGF0aXZlLCBpdCB3aWxsIGJlIHJlc29sdmVkIHJlbGF0aXZlbHkgdG8gdGhlIGNhbGxpbmcgZmlsZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge01vZGVsfSBJbXBvcnRlZCBtb2RlbCwgcmV0dXJuZWQgZnJvbSBjYWNoZSBpZiB3YXMgYWxyZWFkeSBpbXBvcnRlZFxyXG4gICAqL1xyXG4gIGltcG9ydChpbXBvcnRQYXRoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlIGEgcXVlcnkgb24gdGhlIERCLCBvcHRpb25hbGx5IGJ5cGFzc2luZyBhbGwgdGhlIFNlcXVlbGl6ZSBnb29kbmVzcy5cclxuICAgKlxyXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0d28gYXJndW1lbnRzOiBhbiBhcnJheSBvZiByZXN1bHRzLCBhbmQgYSBtZXRhZGF0YSBvYmplY3QsIGNvbnRhaW5pbmcgbnVtYmVyIG9mIGFmZmVjdGVkIHJvd3MgZXRjLlxyXG4gICAqXHJcbiAgICogSWYgeW91IGFyZSBydW5uaW5nIGEgdHlwZSBvZiBxdWVyeSB3aGVyZSB5b3UgZG9uJ3QgbmVlZCB0aGUgbWV0YWRhdGEsIGZvciBleGFtcGxlIGEgYFNFTEVDVGAgcXVlcnksIHlvdSBjYW4gcGFzcyBpbiBhIHF1ZXJ5IHR5cGUgdG8gbWFrZSBzZXF1ZWxpemUgZm9ybWF0IHRoZSByZXN1bHRzOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBzZXF1ZWxpemUucXVlcnkoJ1NFTEVDVC4uLicpLnRoZW4oKFtyZXN1bHRzLCBtZXRhZGF0YV0pID0+IHtcclxuICAgKiAgIC8vIFJhdyBxdWVyeSAtIHVzZSB0aGVuIHBsdXMgYXJyYXkgc3ByZWFkXHJcbiAgICogfSk7XHJcbiAgICpcclxuICAgKiBzZXF1ZWxpemUucXVlcnkoJ1NFTEVDVC4uLicsIHsgdHlwZTogc2VxdWVsaXplLlF1ZXJ5VHlwZXMuU0VMRUNUIH0pLnRoZW4ocmVzdWx0cyA9PiB7XHJcbiAgICogICAvLyBTRUxFQ1QgcXVlcnkgLSB1c2UgdGhlblxyXG4gICAqIH0pXHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgc3FsXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgIFtvcHRpb25zPXt9XSBRdWVyeSBvcHRpb25zLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICBbb3B0aW9ucy5yYXddIElmIHRydWUsIHNlcXVlbGl6ZSB3aWxsIG5vdCB0cnkgdG8gZm9ybWF0IHRoZSByZXN1bHRzIG9mIHRoZSBxdWVyeSwgb3IgYnVpbGQgYW4gaW5zdGFuY2Ugb2YgYSBtb2RlbCBmcm9tIHRoZSByZXN1bHRcclxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSAgICAgW29wdGlvbnMudHJhbnNhY3Rpb249bnVsbF0gVGhlIHRyYW5zYWN0aW9uIHRoYXQgdGhlIHF1ZXJ5IHNob3VsZCBiZSBleGVjdXRlZCB1bmRlclxyXG4gICAqIEBwYXJhbSB7UXVlcnlUeXBlc30gICAgICBbb3B0aW9ucy50eXBlPSdSQVcnXSBUaGUgdHlwZSBvZiBxdWVyeSB5b3UgYXJlIGV4ZWN1dGluZy4gVGhlIHF1ZXJ5IHR5cGUgYWZmZWN0cyBob3cgcmVzdWx0cyBhcmUgZm9ybWF0dGVkIGJlZm9yZSB0aGV5IGFyZSBwYXNzZWQgYmFjay4gVGhlIHR5cGUgaXMgYSBzdHJpbmcsIGJ1dCBgU2VxdWVsaXplLlF1ZXJ5VHlwZXNgIGlzIHByb3ZpZGVkIGFzIGNvbnZlbmllbmNlIHNob3J0Y3V0cy5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMubmVzdD1mYWxzZV0gSWYgdHJ1ZSwgdHJhbnNmb3JtcyBvYmplY3RzIHdpdGggYC5gIHNlcGFyYXRlZCBwcm9wZXJ0eSBuYW1lcyBpbnRvIG5lc3RlZCBvYmplY3RzIHVzaW5nIFtkb3R0aWUuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9taWNraGFuc2VuL2RvdHRpZS5qcykuIEZvciBleGFtcGxlIHsgJ3VzZXIudXNlcm5hbWUnOiAnam9obicgfSBiZWNvbWVzIHsgdXNlcjogeyB1c2VybmFtZTogJ2pvaG4nIH19LiBXaGVuIGBuZXN0YCBpcyB0cnVlLCB0aGUgcXVlcnkgdHlwZSBpcyBhc3N1bWVkIHRvIGJlIGAnU0VMRUNUJ2AsIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkXHJcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgIFtvcHRpb25zLnBsYWluPWZhbHNlXSBTZXRzIHRoZSBxdWVyeSB0eXBlIHRvIGBTRUxFQ1RgIGFuZCByZXR1cm4gYSBzaW5nbGUgcm93XHJcbiAgICogQHBhcmFtIHtPYmplY3R8QXJyYXl9ICAgIFtvcHRpb25zLnJlcGxhY2VtZW50c10gRWl0aGVyIGFuIG9iamVjdCBvZiBuYW1lZCBwYXJhbWV0ZXIgcmVwbGFjZW1lbnRzIGluIHRoZSBmb3JtYXQgYDpwYXJhbWAgb3IgYW4gYXJyYXkgb2YgdW5uYW1lZCByZXBsYWNlbWVudHMgdG8gcmVwbGFjZSBgP2AgaW4geW91ciBTUUwuXHJcbiAgICogQHBhcmFtIHtPYmplY3R8QXJyYXl9ICAgIFtvcHRpb25zLmJpbmRdIEVpdGhlciBhbiBvYmplY3Qgb2YgbmFtZWQgYmluZCBwYXJhbWV0ZXIgaW4gdGhlIGZvcm1hdCBgX3BhcmFtYCBvciBhbiBhcnJheSBvZiB1bm5hbWVkIGJpbmQgcGFyYW1ldGVyIHRvIHJlcGxhY2UgYCQxLCAkMiwgLi4uYCBpbiB5b3VyIFNRTC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMudXNlTWFzdGVyPWZhbHNlXSBGb3JjZSB0aGUgcXVlcnkgdG8gdXNlIHRoZSB3cml0ZSBwb29sLCByZWdhcmRsZXNzIG9mIHRoZSBxdWVyeSB0eXBlLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259ICAgICAgICBbb3B0aW9ucy5sb2dnaW5nPWZhbHNlXSBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCB3aGlsZSBydW5uaW5nIHRoZSBxdWVyeSB0byBsb2cgdGhlIHNxbC5cclxuICAgKiBAcGFyYW0ge25ldyBNb2RlbCgpfSAgICAgW29wdGlvbnMuaW5zdGFuY2VdIEEgc2VxdWVsaXplIGluc3RhbmNlIHVzZWQgdG8gYnVpbGQgdGhlIHJldHVybiBpbnN0YW5jZVxyXG4gICAqIEBwYXJhbSB7TW9kZWx9ICAgICAgICAgICBbb3B0aW9ucy5tb2RlbF0gQSBzZXF1ZWxpemUgbW9kZWwgdXNlZCB0byBidWlsZCB0aGUgcmV0dXJuZWQgbW9kZWwgaW5zdGFuY2VzICh1c2VkIHRvIGJlIGNhbGxlZCBjYWxsZWUpXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgIFtvcHRpb25zLnJldHJ5XSBTZXQgb2YgZmxhZ3MgdGhhdCBjb250cm9sIHdoZW4gYSBxdWVyeSBpcyBhdXRvbWF0aWNhbGx5IHJldHJpZWQuXHJcbiAgICogQHBhcmFtIHtBcnJheX0gICAgICAgICAgIFtvcHRpb25zLnJldHJ5Lm1hdGNoXSBPbmx5IHJldHJ5IGEgcXVlcnkgaWYgdGhlIGVycm9yIG1hdGNoZXMgb25lIG9mIHRoZXNlIHN0cmluZ3MuXHJcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSAgICAgICAgIFtvcHRpb25zLnJldHJ5Lm1heF0gSG93IG1hbnkgdGltZXMgYSBmYWlsaW5nIHF1ZXJ5IGlzIGF1dG9tYXRpY2FsbHkgcmV0cmllZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgW29wdGlvbnMuc2VhcmNoUGF0aD1ERUZBVUxUXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICBbb3B0aW9ucy5zdXBwb3J0c1NlYXJjaFBhdGhdIElmIGZhbHNlIGRvIG5vdCBwcmVwZW5kIHRoZSBxdWVyeSB3aXRoIHRoZSBzZWFyY2hfcGF0aCAoUG9zdGdyZXMgb25seSlcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMubWFwVG9Nb2RlbD1mYWxzZV0gTWFwIHJldHVybmVkIGZpZWxkcyB0byBtb2RlbCdzIGZpZWxkcyBpZiBgb3B0aW9ucy5tb2RlbGAgb3IgYG9wdGlvbnMuaW5zdGFuY2VgIGlzIHByZXNlbnQuIE1hcHBpbmcgd2lsbCBvY2N1ciBiZWZvcmUgYnVpbGRpbmcgdGhlIG1vZGVsIGluc3RhbmNlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICBbb3B0aW9ucy5maWVsZE1hcF0gTWFwIHJldHVybmVkIGZpZWxkcyB0byBhcmJpdHJhcnkgbmFtZXMgZm9yIGBTRUxFQ1RgIHF1ZXJ5IHR5cGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKlxyXG4gICAqIEBzZWUge0BsaW5rIE1vZGVsLmJ1aWxkfSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBpbnN0YW5jZSBvcHRpb24uXHJcbiAgICovXHJcblxyXG4gIHF1ZXJ5KHNxbCwgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0aW9ucy5xdWVyeSwgb3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuaW5zdGFuY2UgJiYgIW9wdGlvbnMubW9kZWwpIHtcclxuICAgICAgb3B0aW9ucy5tb2RlbCA9IG9wdGlvbnMuaW5zdGFuY2UuY29uc3RydWN0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLmluc3RhbmNlICYmICFvcHRpb25zLm1vZGVsKSB7XHJcbiAgICAgIG9wdGlvbnMucmF3ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBtYXAgcmF3IGZpZWxkcyB0byBtb2RlbCBhdHRyaWJ1dGVzXHJcbiAgICBpZiAob3B0aW9ucy5tYXBUb01vZGVsKSB7XHJcbiAgICAgIG9wdGlvbnMuZmllbGRNYXAgPSBfLmdldChvcHRpb25zLCBcIm1vZGVsLmZpZWxkQXR0cmlidXRlTWFwXCIsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25zID0gXy5kZWZhdWx0cyhvcHRpb25zLCB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgIGxvZ2dpbmc6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLm9wdGlvbnMsIFwibG9nZ2luZ1wiKVxyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmxvZ2dpbmdcclxuICAgICAgICA6IGNvbnNvbGUubG9nLFxyXG4gICAgICBzZWFyY2hQYXRoOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLFxyXG4gICAgICAgIFwic2VhcmNoUGF0aFwiXHJcbiAgICAgIClcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5zZWFyY2hQYXRoXHJcbiAgICAgICAgOiBcIkRFRkFVTFRcIlxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLnR5cGUpIHtcclxuICAgICAgaWYgKG9wdGlvbnMubW9kZWwgfHwgb3B0aW9ucy5uZXN0IHx8IG9wdGlvbnMucGxhaW4pIHtcclxuICAgICAgICBvcHRpb25zLnR5cGUgPSBRdWVyeVR5cGVzLlNFTEVDVDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcHRpb25zLnR5cGUgPSBRdWVyeVR5cGVzLlJBVztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vaWYgZGlhbGVjdCBkb2Vzbid0IHN1cHBvcnQgc2VhcmNoX3BhdGggb3IgZGlhbGVjdCBvcHRpb25cclxuICAgIC8vdG8gcHJlcGVuZCBzZWFyY2hQYXRoIGlzIG5vdCB0cnVlIGRlbGV0ZSB0aGUgc2VhcmNoUGF0aCBvcHRpb25cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuZGlhbGVjdC5zdXBwb3J0cy5zZWFyY2hQYXRoIHx8XHJcbiAgICAgICF0aGlzLm9wdGlvbnMuZGlhbGVjdE9wdGlvbnMgfHxcclxuICAgICAgIXRoaXMub3B0aW9ucy5kaWFsZWN0T3B0aW9ucy5wcmVwZW5kU2VhcmNoUGF0aCB8fFxyXG4gICAgICBvcHRpb25zLnN1cHBvcnRzU2VhcmNoUGF0aCA9PT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICBkZWxldGUgb3B0aW9ucy5zZWFyY2hQYXRoO1xyXG4gICAgfSBlbHNlIGlmICghb3B0aW9ucy5zZWFyY2hQYXRoKSB7XHJcbiAgICAgIC8vaWYgdXNlciB3YW50cyB0byBhbHdheXMgcHJlcGVuZCBzZWFyY2hQYXRoIChkaWFsZWN0T3B0aW9ucy5wcmVwcmVuZFNlYXJjaFBhdGggPSB0cnVlKVxyXG4gICAgICAvL3RoZW4gc2V0IHRvIERFRkFVTFQgaWYgbm9uZSBpcyBwcm92aWRlZFxyXG4gICAgICBvcHRpb25zLnNlYXJjaFBhdGggPSBcIkRFRkFVTFRcIjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIHNxbCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGlmIChzcWwudmFsdWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGlmIChvcHRpb25zLnJlcGxhY2VtZW50cyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICBcIkJvdGggYHNxbC52YWx1ZXNgIGFuZCBgb3B0aW9ucy5yZXBsYWNlbWVudHNgIGNhbm5vdCBiZSBzZXQgYXQgdGhlIHNhbWUgdGltZVwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvcHRpb25zLnJlcGxhY2VtZW50cyA9IHNxbC52YWx1ZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3FsLmJpbmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgaWYgKG9wdGlvbnMuYmluZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICBcIkJvdGggYHNxbC5iaW5kYCBhbmQgYG9wdGlvbnMuYmluZGAgY2Fubm90IGJlIHNldCBhdCB0aGUgc2FtZSB0aW1lXCJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9wdGlvbnMuYmluZCA9IHNxbC5iaW5kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNxbC5xdWVyeSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBzcWwgPSBzcWwucXVlcnk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzcWwgPSBzcWwudHJpbSgpO1xyXG5cclxuICAgICAgaWYgKG9wdGlvbnMucmVwbGFjZW1lbnRzICYmIG9wdGlvbnMuYmluZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIFwiQm90aCBgcmVwbGFjZW1lbnRzYCBhbmQgYGJpbmRgIGNhbm5vdCBiZSBzZXQgYXQgdGhlIHNhbWUgdGltZVwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG9wdGlvbnMucmVwbGFjZW1lbnRzKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5yZXBsYWNlbWVudHMpKSB7XHJcbiAgICAgICAgICBzcWwgPSBVdGlscy5mb3JtYXQoXHJcbiAgICAgICAgICAgIFtzcWxdLmNvbmNhdChvcHRpb25zLnJlcGxhY2VtZW50cyksXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzcWwgPSBVdGlscy5mb3JtYXROYW1lZFBhcmFtZXRlcnMoXHJcbiAgICAgICAgICAgIHNxbCxcclxuICAgICAgICAgICAgb3B0aW9ucy5yZXBsYWNlbWVudHMsXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGJpbmRQYXJhbWV0ZXJzO1xyXG5cclxuICAgICAgaWYgKG9wdGlvbnMuYmluZCkge1xyXG4gICAgICAgIFtzcWwsIGJpbmRQYXJhbWV0ZXJzXSA9IHRoaXMuZGlhbGVjdC5RdWVyeS5mb3JtYXRCaW5kUGFyYW1ldGVycyhcclxuICAgICAgICAgIHNxbCxcclxuICAgICAgICAgIG9wdGlvbnMuYmluZCxcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY2hlY2tUcmFuc2FjdGlvbiA9ICgpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBvcHRpb25zLnRyYW5zYWN0aW9uICYmXHJcbiAgICAgICAgICBvcHRpb25zLnRyYW5zYWN0aW9uLmZpbmlzaGVkICYmXHJcbiAgICAgICAgICAhb3B0aW9ucy5jb21wbGV0ZXNUcmFuc2FjdGlvblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGAke29wdGlvbnMudHJhbnNhY3Rpb24uZmluaXNoZWR9IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIHRyYW5zYWN0aW9uKCR7b3B0aW9ucy50cmFuc2FjdGlvbi5pZH0pLCB5b3UgY2FuIG5vIGxvbmdlciB1c2UgaXQuIChUaGUgcmVqZWN0ZWQgcXVlcnkgaXMgYXR0YWNoZWQgYXMgdGhlICdzcWwnIHByb3BlcnR5IG9mIHRoaXMgZXJyb3IpYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGVycm9yLnNxbCA9IHNxbDtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHJldHJ5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnJldHJ5LFxyXG4gICAgICAgIG9wdGlvbnMucmV0cnkgfHwge31cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXHJcbiAgICAgICAgcmV0cnkoXHJcbiAgICAgICAgICAoKSA9PlxyXG4gICAgICAgICAgICBQcm9taXNlLnRyeSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudHJhbnNhY3Rpb24gPT09IHVuZGVmaW5lZCAmJiBTZXF1ZWxpemUuX2Nscykge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy50cmFuc2FjdGlvbiA9IFNlcXVlbGl6ZS5fY2xzLmdldChcInRyYW5zYWN0aW9uXCIpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY2hlY2tUcmFuc2FjdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy50cmFuc2FjdGlvblxyXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLnRyYW5zYWN0aW9uLmNvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgIDogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRDb25uZWN0aW9uKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9KS50aGVuKGNvbm5lY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IHRoaXMuZGlhbGVjdC5RdWVyeShjb25uZWN0aW9uLCB0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcyhcImJlZm9yZVF1ZXJ5XCIsIG9wdGlvbnMsIHF1ZXJ5KVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gY2hlY2tUcmFuc2FjdGlvbigpKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gcXVlcnkucnVuKHNxbCwgYmluZFBhcmFtZXRlcnMpKVxyXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5ydW5Ib29rcyhcImFmdGVyUXVlcnlcIiwgb3B0aW9ucywgcXVlcnkpKVxyXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMudHJhbnNhY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uTWFuYWdlci5yZWxlYXNlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgcmV0cnlPcHRpb25zXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlIGEgcXVlcnkgd2hpY2ggd291bGQgc2V0IGFuIGVudmlyb25tZW50IG9yIHVzZXIgdmFyaWFibGUuIFRoZSB2YXJpYWJsZXMgYXJlIHNldCBwZXIgY29ubmVjdGlvbiwgc28gdGhpcyBmdW5jdGlvbiBuZWVkcyBhIHRyYW5zYWN0aW9uLlxyXG4gICAqIE9ubHkgd29ya3MgZm9yIE15U1FMLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9ICAgICAgICB2YXJpYWJsZXMgT2JqZWN0IHdpdGggbXVsdGlwbGUgdmFyaWFibGVzLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgW29wdGlvbnNdIHF1ZXJ5IG9wdGlvbnMuXHJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gICBbb3B0aW9ucy50cmFuc2FjdGlvbl0gVGhlIHRyYW5zYWN0aW9uIHRoYXQgdGhlIHF1ZXJ5IHNob3VsZCBiZSBleGVjdXRlZCB1bmRlclxyXG4gICAqXHJcbiAgICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgc2V0KHZhcmlhYmxlcywgb3B0aW9ucykge1xyXG4gICAgLy8gUHJlcGFyZSBvcHRpb25zXHJcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAge30sXHJcbiAgICAgIHRoaXMub3B0aW9ucy5zZXQsXHJcbiAgICAgIHR5cGVvZiBvcHRpb25zID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnNcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaWFsZWN0ICE9PSBcIm15c3FsXCIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2VxdWVsaXplLnNldCBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgbXlzcWxcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIW9wdGlvbnMudHJhbnNhY3Rpb24gfHwgIShvcHRpb25zLnRyYW5zYWN0aW9uIGluc3RhbmNlb2YgVHJhbnNhY3Rpb24pKSB7XHJcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb25zLnRyYW5zYWN0aW9uIGlzIHJlcXVpcmVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE92ZXJyaWRlIHNvbWUgb3B0aW9ucywgc2luY2UgdGhpcyBpc24ndCBhIFNFTEVDVFxyXG4gICAgb3B0aW9ucy5yYXcgPSB0cnVlO1xyXG4gICAgb3B0aW9ucy5wbGFpbiA9IHRydWU7XHJcbiAgICBvcHRpb25zLnR5cGUgPSBcIlNFVFwiO1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIFNRTCBRdWVyeVxyXG4gICAgY29uc3QgcXVlcnkgPSBgU0VUICR7Xy5tYXAoXHJcbiAgICAgIHZhcmlhYmxlcyxcclxuICAgICAgKHYsIGspID0+IGBAJHtrfSA6PSAke3R5cGVvZiB2ID09PSBcInN0cmluZ1wiID8gYFwiJHt2fVwiYCA6IHZ9YFxyXG4gICAgKS5qb2luKFwiLCBcIil9YDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5xdWVyeShxdWVyeSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFc2NhcGUgdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgc3RyaW5nIHZhbHVlIHRvIGVzY2FwZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBlc2NhcGUodmFsdWUpIHtcclxuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5SW50ZXJmYWNlKCkuZXNjYXBlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhYmFzZSBzY2hlbWEuXHJcbiAgICpcclxuICAgKiAqKk5vdGU6KiogdGhpcyBpcyBhIHNjaGVtYSBpbiB0aGUgW3Bvc3RncmVzIHNlbnNlIG9mIHRoZSB3b3JkXShodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvOS4xL3N0YXRpYy9kZGwtc2NoZW1hcy5odG1sKSxcclxuICAgKiBub3QgYSBkYXRhYmFzZSB0YWJsZS4gSW4gbXlzcWwgYW5kIHNxbGl0ZSwgdGhpcyBjb21tYW5kIHdpbGwgZG8gbm90aGluZy5cclxuICAgKlxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgTW9kZWwuc2NoZW1hfVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYSBOYW1lIG9mIHRoZSBzY2hlbWFcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIHF1ZXJ5IG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW58RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmddIEEgZnVuY3Rpb24gdGhhdCBsb2dzIHNxbCBxdWVyaWVzLCBvciBmYWxzZSBmb3Igbm8gbG9nZ2luZ1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgY3JlYXRlU2NoZW1hKHNjaGVtYSwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlJbnRlcmZhY2UoKS5jcmVhdGVTY2hlbWEoc2NoZW1hLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYWxsIGRlZmluZWQgc2NoZW1hc1xyXG4gICAqXHJcbiAgICogKipOb3RlOioqIHRoaXMgaXMgYSBzY2hlbWEgaW4gdGhlIFtwb3N0Z3JlcyBzZW5zZSBvZiB0aGUgd29yZF0oaHR0cDovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzkuMS9zdGF0aWMvZGRsLXNjaGVtYXMuaHRtbCksXHJcbiAgICogbm90IGEgZGF0YWJhc2UgdGFibGUuIEluIG15c3FsIGFuZCBzcWxpdGUsIHRoaXMgd2lsbCBzaG93IGFsbCB0YWJsZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIHF1ZXJ5IG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW58RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmddIEEgZnVuY3Rpb24gdGhhdCBsb2dzIHNxbCBxdWVyaWVzLCBvciBmYWxzZSBmb3Igbm8gbG9nZ2luZ1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgc2hvd0FsbFNjaGVtYXMob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlJbnRlcmZhY2UoKS5zaG93QWxsU2NoZW1hcyhvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERyb3AgYSBzaW5nbGUgc2NoZW1hXHJcbiAgICpcclxuICAgKiAqKk5vdGU6KiogdGhpcyBpcyBhIHNjaGVtYSBpbiB0aGUgW3Bvc3RncmVzIHNlbnNlIG9mIHRoZSB3b3JkXShodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvOS4xL3N0YXRpYy9kZGwtc2NoZW1hcy5odG1sKSxcclxuICAgKiBub3QgYSBkYXRhYmFzZSB0YWJsZS4gSW4gbXlzcWwgYW5kIHNxbGl0ZSwgdGhpcyBkcm9wIGEgdGFibGUgbWF0Y2hpbmcgdGhlIHNjaGVtYSBuYW1lXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NoZW1hIE5hbWUgb2YgdGhlIHNjaGVtYVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gcXVlcnkgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnxGdW5jdGlvbn0gW29wdGlvbnMubG9nZ2luZ10gQSBmdW5jdGlvbiB0aGF0IGxvZ3Mgc3FsIHF1ZXJpZXMsIG9yIGZhbHNlIGZvciBubyBsb2dnaW5nXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBkcm9wU2NoZW1hKHNjaGVtYSwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlJbnRlcmZhY2UoKS5kcm9wU2NoZW1hKHNjaGVtYSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEcm9wIGFsbCBzY2hlbWFzLlxyXG4gICAqXHJcbiAgICogKipOb3RlOioqIHRoaXMgaXMgYSBzY2hlbWEgaW4gdGhlIFtwb3N0Z3JlcyBzZW5zZSBvZiB0aGUgd29yZF0oaHR0cDovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzkuMS9zdGF0aWMvZGRsLXNjaGVtYXMuaHRtbCksXHJcbiAgICogbm90IGEgZGF0YWJhc2UgdGFibGUuIEluIG15c3FsIGFuZCBzcWxpdGUsIHRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgZHJvcCBhbGwgdGFibGVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBxdWVyeSBvcHRpb25zXHJcbiAgICogQHBhcmFtIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nXSBBIGZ1bmN0aW9uIHRoYXQgbG9ncyBzcWwgcXVlcmllcywgb3IgZmFsc2UgZm9yIG5vIGxvZ2dpbmdcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIGRyb3BBbGxTY2hlbWFzKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5SW50ZXJmYWNlKCkuZHJvcEFsbFNjaGVtYXMob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTeW5jIGFsbCBkZWZpbmVkIG1vZGVscyB0byB0aGUgREIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIHN5bmMgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZm9yY2U9ZmFsc2VdIElmIGZvcmNlIGlzIHRydWUsIGVhY2ggTW9kZWwgd2lsbCBydW4gYERST1AgVEFCTEUgSUYgRVhJU1RTYCwgYmVmb3JlIGl0IHRyaWVzIHRvIGNyZWF0ZSBpdHMgb3duIHRhYmxlXHJcbiAgICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLm1hdGNoXSBNYXRjaCBhIHJlZ2V4IGFnYWluc3QgdGhlIGRhdGFiYXNlIG5hbWUgYmVmb3JlIHN5bmNpbmcsIGEgc2FmZXR5IGNoZWNrIGZvciBjYXNlcyB3aGVyZSBmb3JjZTogdHJ1ZSBpcyB1c2VkIGluIHRlc3RzIGJ1dCBub3QgbGl2ZSBjb2RlXHJcbiAgICogQHBhcmFtIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nPWNvbnNvbGUubG9nXSBBIGZ1bmN0aW9uIHRoYXQgbG9ncyBzcWwgcXVlcmllcywgb3IgZmFsc2UgZm9yIG5vIGxvZ2dpbmdcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc2NoZW1hPSdwdWJsaWMnXSBUaGUgc2NoZW1hIHRoYXQgdGhlIHRhYmxlcyBzaG91bGQgYmUgY3JlYXRlZCBpbi4gVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgZWFjaCB0YWJsZSBpbiBzZXF1ZWxpemUuZGVmaW5lXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNlYXJjaFBhdGg9REVGQVVMVF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHNjaGVtYSBzZWFyY2hfcGF0aCAoUG9zdGdyZXMgb25seSlcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmhvb2tzPXRydWVdIElmIGhvb2tzIGlzIHRydWUgdGhlbiBiZWZvcmVTeW5jLCBhZnRlclN5bmMsIGJlZm9yZUJ1bGtTeW5jLCBhZnRlckJ1bGtTeW5jIGhvb2tzIHdpbGwgYmUgY2FsbGVkXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbHRlcj1mYWxzZV0gQWx0ZXJzIHRhYmxlcyB0byBmaXQgbW9kZWxzLiBOb3QgcmVjb21tZW5kZWQgZm9yIHByb2R1Y3Rpb24gdXNlLiBEZWxldGVzIGRhdGEgaW4gY29sdW1ucyB0aGF0IHdlcmUgcmVtb3ZlZCBvciBoYWQgdGhlaXIgdHlwZSBjaGFuZ2VkIGluIHRoZSBtb2RlbC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIHN5bmMob3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IF8uY2xvbmUob3B0aW9ucykgfHwge307XHJcbiAgICBvcHRpb25zLmhvb2tzID0gb3B0aW9ucy5ob29rcyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6ICEhb3B0aW9ucy5ob29rcztcclxuICAgIG9wdGlvbnMgPSBfLmRlZmF1bHRzKG9wdGlvbnMsIHRoaXMub3B0aW9ucy5zeW5jLCB0aGlzLm9wdGlvbnMpO1xyXG5cclxuICAgIGlmIChvcHRpb25zLm1hdGNoKSB7XHJcbiAgICAgIGlmICghb3B0aW9ucy5tYXRjaC50ZXN0KHRoaXMuY29uZmlnLmRhdGFiYXNlKSkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcclxuICAgICAgICAgIG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYERhdGFiYXNlIFwiJHt0aGlzLmNvbmZpZy5kYXRhYmFzZX1cIiBkb2VzIG5vdCBtYXRjaCBzeW5jIG1hdGNoIHBhcmFtZXRlciBcIiR7b3B0aW9ucy5tYXRjaH1cImBcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UudHJ5KCgpID0+IHtcclxuICAgICAgaWYgKG9wdGlvbnMuaG9va3MpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcyhcImJlZm9yZUJ1bGtTeW5jXCIsIG9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZm9yY2UpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRyb3Aob3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbW9kZWxzID0gW107XHJcblxyXG4gICAgICAgIC8vIFRvcG9sb2dpY2FsbHkgc29ydCBieSBmb3JlaWduIGtleSBjb25zdHJhaW50cyB0byBnaXZlIHVzIGFuIGFwcHJvcHJpYXRlXHJcbiAgICAgICAgLy8gY3JlYXRpb24gb3JkZXJcclxuICAgICAgICB0aGlzLm1vZGVsTWFuYWdlci5mb3JFYWNoTW9kZWwobW9kZWwgPT4ge1xyXG4gICAgICAgICAgaWYgKG1vZGVsKSB7XHJcbiAgICAgICAgICAgIG1vZGVscy5wdXNoKG1vZGVsKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIERCIHNob3VsZCB0aHJvdyBhbiBTUUwgZXJyb3IgaWYgcmVmZXJlbmNpbmcgbm9uLWV4aXN0ZW50IHRhYmxlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIG5vIG1vZGVscyBkZWZpbmVkLCBqdXN0IGF1dGhlbnRpY2F0ZVxyXG4gICAgICAgIGlmICghbW9kZWxzLmxlbmd0aCkgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRlKG9wdGlvbnMpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5lYWNoKG1vZGVscywgbW9kZWwgPT4gbW9kZWwuc3luYyhvcHRpb25zKSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICBpZiAob3B0aW9ucy5ob29rcykge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoXCJhZnRlckJ1bGtTeW5jXCIsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLnJldHVybih0aGlzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydW5jYXRlIGFsbCB0YWJsZXMgZGVmaW5lZCB0aHJvdWdoIHRoZSBzZXF1ZWxpemUgbW9kZWxzLlxyXG4gICAqIFRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIGBNb2RlbC50cnVuY2F0ZSgpYCBvbiBlYWNoIG1vZGVsLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gTW9kZWwuZGVzdHJveSBpbiBhZGRpdGlvbiB0byB0cnVuY2F0ZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnxGdW5jdGlvbn0gW29wdGlvbnMubG9nZ2luZ10gQSBmdW5jdGlvbiB0aGF0IGxvZ3Mgc3FsIHF1ZXJpZXMsIG9yIGZhbHNlIGZvciBubyBsb2dnaW5nXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsLnRydW5jYXRlfSBmb3IgbW9yZSBpbmZvcm1hdGlvblxyXG4gICAqL1xyXG4gIHRydW5jYXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IG1vZGVscyA9IFtdO1xyXG5cclxuICAgIHRoaXMubW9kZWxNYW5hZ2VyLmZvckVhY2hNb2RlbChcclxuICAgICAgbW9kZWwgPT4ge1xyXG4gICAgICAgIGlmIChtb2RlbCkge1xyXG4gICAgICAgICAgbW9kZWxzLnB1c2gobW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgeyByZXZlcnNlOiBmYWxzZSB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHRydW5jYXRlTW9kZWwgPSBtb2RlbCA9PiBtb2RlbC50cnVuY2F0ZShvcHRpb25zKTtcclxuXHJcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNhc2NhZGUpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UuZWFjaChtb2RlbHMsIHRydW5jYXRlTW9kZWwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UubWFwKG1vZGVscywgdHJ1bmNhdGVNb2RlbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEcm9wIGFsbCB0YWJsZXMgZGVmaW5lZCB0aHJvdWdoIHRoaXMgc2VxdWVsaXplIGluc3RhbmNlLlxyXG4gICAqIFRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIE1vZGVsLmRyb3Agb24gZWFjaCBtb2RlbC5cclxuICAgKlxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgTW9kZWwuZHJvcH0gZm9yIG9wdGlvbnNcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgcGFzc2VkIHRvIGVhY2ggY2FsbCB0byBNb2RlbC5kcm9wXHJcbiAgICogQHBhcmFtIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nXSBBIGZ1bmN0aW9uIHRoYXQgbG9ncyBzcWwgcXVlcmllcywgb3IgZmFsc2UgZm9yIG5vIGxvZ2dpbmdcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIGRyb3Aob3B0aW9ucykge1xyXG4gICAgY29uc3QgbW9kZWxzID0gW107XHJcblxyXG4gICAgdGhpcy5tb2RlbE1hbmFnZXIuZm9yRWFjaE1vZGVsKFxyXG4gICAgICBtb2RlbCA9PiB7XHJcbiAgICAgICAgaWYgKG1vZGVsKSB7XHJcbiAgICAgICAgICBtb2RlbHMucHVzaChtb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7IHJldmVyc2U6IGZhbHNlIH1cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UuZWFjaChtb2RlbHMsIG1vZGVsID0+IG1vZGVsLmRyb3Aob3B0aW9ucykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGVzdCB0aGUgY29ubmVjdGlvbiBieSB0cnlpbmcgdG8gYXV0aGVudGljYXRlLiBJdCBydW5zIGBTRUxFQ1QgMSsxIEFTIHJlc3VsdGAgcXVlcnkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIHF1ZXJ5IG9wdGlvbnNcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIGF1dGhlbnRpY2F0ZShvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAge1xyXG4gICAgICAgIHJhdzogdHJ1ZSxcclxuICAgICAgICBwbGFpbjogdHJ1ZSxcclxuICAgICAgICB0eXBlOiBRdWVyeVR5cGVzLlNFTEVDVFxyXG4gICAgICB9LFxyXG4gICAgICBvcHRpb25zXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnF1ZXJ5KFwiU0VMRUNUIDErMSBBUyByZXN1bHRcIiwgb3B0aW9ucykucmV0dXJuKCk7XHJcbiAgfVxyXG5cclxuICBkYXRhYmFzZVZlcnNpb24ob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlJbnRlcmZhY2UoKS5kYXRhYmFzZVZlcnNpb24ob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGZuIGZvciByYW5kb20gYmFzZWQgb24gdGhlIGRpYWxlY3RcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtTZXF1ZWxpemUuZm59XHJcbiAgICovXHJcbiAgcmFuZG9tKCkge1xyXG4gICAgY29uc3QgZGlhID0gdGhpcy5nZXREaWFsZWN0KCk7XHJcbiAgICBpZiAoZGlhID09PSBcInBvc3RncmVzXCIgfHwgZGlhID09PSBcInNxbGl0ZVwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZuKFwiUkFORE9NXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZm4oXCJSQU5EXCIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZGF0YWJhc2UgZnVuY3Rpb24uIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2VhcmNoIHF1ZXJpZXMsIGJvdGggaW4gd2hlcmUgYW5kIG9yZGVyIHBhcnRzLCBhbmQgYXMgZGVmYXVsdCB2YWx1ZXMgaW4gY29sdW1uIGRlZmluaXRpb25zLlxyXG4gICAqIElmIHlvdSB3YW50IHRvIHJlZmVyIHRvIGNvbHVtbnMgaW4geW91ciBmdW5jdGlvbiwgeW91IHNob3VsZCB1c2UgYHNlcXVlbGl6ZS5jb2xgLCBzbyB0aGF0IHRoZSBjb2x1bW5zIGFyZSBwcm9wZXJseSBpbnRlcnByZXRlZCBhcyBjb2x1bW5zIGFuZCBub3QgYSBzdHJpbmdzLlxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbC5maW5kQWxsfVxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgU2VxdWVsaXplLmRlZmluZX1cclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIFNlcXVlbGl6ZS5jb2x9XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm4gVGhlIGZ1bmN0aW9uIHlvdSB3YW50IHRvIGNhbGxcclxuICAgKiBAcGFyYW0ge2FueX0gYXJncyBBbGwgZnVydGhlciBhcmd1bWVudHMgd2lsbCBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvblxyXG4gICAqXHJcbiAgICogQHNpbmNlIHYyLjAuMC1kZXYzXHJcbiAgICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxyXG4gICAqIEByZXR1cm5zIHtTZXF1ZWxpemUuZm59XHJcbiAgICpcclxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db252ZXJ0IGEgdXNlcidzIHVzZXJuYW1lIHRvIHVwcGVyIGNhc2U8L2NhcHRpb24+XHJcbiAgICogaW5zdGFuY2UudXBkYXRlKHtcclxuICAgKiAgIHVzZXJuYW1lOiBzZXF1ZWxpemUuZm4oJ3VwcGVyJywgc2VxdWVsaXplLmNvbCgndXNlcm5hbWUnKSlcclxuICAgKiB9KTtcclxuICAgKi9cclxuICBzdGF0aWMgZm4oZm4sIC4uLmFyZ3MpIHtcclxuICAgIHJldHVybiBuZXcgVXRpbHMuRm4oZm4sIGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyBhIGNvbHVtbiBpbiB0aGUgREIsIHRoaXMgYWxsb3dzIHJlZmVyZW5jaW5nIGFub3RoZXIgY29sdW1uIGluIHlvdXIgcXVlcnkuIFRoaXMgaXMgb2Z0ZW4gdXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGggYHNlcXVlbGl6ZS5mbmAsIHNpbmNlIHJhdyBzdHJpbmcgYXJndW1lbnRzIHRvIGZuIHdpbGwgYmUgZXNjYXBlZC5cclxuICAgKlxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgU2VxdWVsaXplI2ZufVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbCBUaGUgbmFtZSBvZiB0aGUgY29sdW1uXHJcbiAgICogQHNpbmNlIHYyLjAuMC1kZXYzXHJcbiAgICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1NlcXVlbGl6ZS5jb2x9XHJcbiAgICovXHJcbiAgc3RhdGljIGNvbChjb2wpIHtcclxuICAgIHJldHVybiBuZXcgVXRpbHMuQ29sKGNvbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjYWxsIHRvIHRoZSBjYXN0IGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IHZhbCBUaGUgdmFsdWUgdG8gY2FzdFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSB0eXBlIHRvIGNhc3QgaXQgdG9cclxuICAgKiBAc2luY2UgdjIuMC4wLWRldjNcclxuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7U2VxdWVsaXplLmNhc3R9XHJcbiAgICovXHJcbiAgc3RhdGljIGNhc3QodmFsLCB0eXBlKSB7XHJcbiAgICByZXR1cm4gbmV3IFV0aWxzLkNhc3QodmFsLCB0eXBlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGxpdGVyYWwsIGkuZS4gc29tZXRoaW5nIHRoYXQgd2lsbCBub3QgYmUgZXNjYXBlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgbGl0ZXJhbCB2YWx1ZVxyXG4gICAqIEBzaW5jZSB2Mi4wLjAtZGV2M1xyXG4gICAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtTZXF1ZWxpemUubGl0ZXJhbH1cclxuICAgKi9cclxuICBzdGF0aWMgbGl0ZXJhbCh2YWwpIHtcclxuICAgIHJldHVybiBuZXcgVXRpbHMuTGl0ZXJhbCh2YWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gQU5EIHF1ZXJ5XHJcbiAgICpcclxuICAgKiBAc2VlXHJcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRBbGx9XHJcbiAgICpcclxuICAgKiBAcGFyYW0gey4uLnN0cmluZ3xPYmplY3R9IGFyZ3MgRWFjaCBhcmd1bWVudCB3aWxsIGJlIGpvaW5lZCBieSBBTkRcclxuICAgKiBAc2luY2UgdjIuMC4wLWRldjNcclxuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7U2VxdWVsaXplLmFuZH1cclxuICAgKi9cclxuICBzdGF0aWMgYW5kKC4uLmFyZ3MpIHtcclxuICAgIHJldHVybiB7IFtPcC5hbmRdOiBhcmdzIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbiBPUiBxdWVyeVxyXG4gICAqXHJcbiAgICogQHNlZVxyXG4gICAqIHtAbGluayBNb2RlbC5maW5kQWxsfVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsuLi5zdHJpbmd8T2JqZWN0fSBhcmdzIEVhY2ggYXJndW1lbnQgd2lsbCBiZSBqb2luZWQgYnkgT1JcclxuICAgKiBAc2luY2UgdjIuMC4wLWRldjNcclxuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7U2VxdWVsaXplLm9yfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBvciguLi5hcmdzKSB7XHJcbiAgICByZXR1cm4geyBbT3Aub3JdOiBhcmdzIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRpbmcgbmVzdGVkIHdoZXJlIGNvbmRpdGlvbnMgZm9yIHBvc3RncmVzL3NxbGl0ZS9teXNxbCBqc29uIGRhdGEtdHlwZS5cclxuICAgKlxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgTW9kZWwuZmluZEFsbH1cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gY29uZGl0aW9uc09yUGF0aCBBIGhhc2ggY29udGFpbmluZyBzdHJpbmdzL251bWJlcnMgb3Igb3RoZXIgbmVzdGVkIGhhc2gsIGEgc3RyaW5nIHVzaW5nIGRvdCBub3RhdGlvbiBvciBhIHN0cmluZyB1c2luZyBwb3N0Z3Jlcy9zcWxpdGUvbXlzcWwganNvbiBzeW50YXguXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfGJvb2xlYW59IFt2YWx1ZV0gQW4gb3B0aW9uYWwgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0LiBQcm9kdWNlcyBhIHN0cmluZyBvZiB0aGUgZm9ybSBcIjxqc29uIHBhdGg+ID0gJzx2YWx1ZT4nXCIuXHJcbiAgICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1NlcXVlbGl6ZS5qc29ufVxyXG4gICAqL1xyXG4gIHN0YXRpYyBqc29uKGNvbmRpdGlvbnNPclBhdGgsIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gbmV3IFV0aWxzLkpzb24oY29uZGl0aW9uc09yUGF0aCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSB3YXkgb2Ygc3BlY2lmeWluZyBhdHRyID0gY29uZGl0aW9uLlxyXG4gICAqXHJcbiAgICogVGhlIGF0dHIgY2FuIGVpdGhlciBiZSBhbiBvYmplY3QgdGFrZW4gZnJvbSBgTW9kZWwucmF3QXR0cmlidXRlc2AgKGZvciBleGFtcGxlIGBNb2RlbC5yYXdBdHRyaWJ1dGVzLmlkYCBvciBgTW9kZWwucmF3QXR0cmlidXRlcy5uYW1lYCkuIFRoZVxyXG4gICAqIGF0dHJpYnV0ZSBzaG91bGQgYmUgZGVmaW5lZCBpbiB5b3VyIG1vZGVsIGRlZmluaXRpb24uIFRoZSBhdHRyaWJ1dGUgY2FuIGFsc28gYmUgYW4gb2JqZWN0IGZyb20gb25lIG9mIHRoZSBzZXF1ZWxpemUgdXRpbGl0eSBmdW5jdGlvbnMgKGBzZXF1ZWxpemUuZm5gLCBgc2VxdWVsaXplLmNvbGAgZXRjLilcclxuICAgKlxyXG4gICAqIEZvciBzdHJpbmcgYXR0cmlidXRlcywgdXNlIHRoZSByZWd1bGFyIGB7IHdoZXJlOiB7IGF0dHI6IHNvbWV0aGluZyB9fWAgc3ludGF4LiBJZiB5b3UgZG9uJ3Qgd2FudCB5b3VyIHN0cmluZyB0byBiZSBlc2NhcGVkLCB1c2UgYHNlcXVlbGl6ZS5saXRlcmFsYC5cclxuICAgKlxyXG4gICAqIEBzZWVcclxuICAgKiB7QGxpbmsgTW9kZWwuZmluZEFsbH1cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyIFRoZSBhdHRyaWJ1dGUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYW4gYXR0cmlidXRlIG9iamVjdCBmcm9tIGBNb2RlbC5yYXdBdHRyaWJ1dGVzYCBvciBhIHNlcXVlbGl6ZSBvYmplY3QsIGZvciBleGFtcGxlIGFuIGluc3RhbmNlIG9mIGBzZXF1ZWxpemUuZm5gLiBGb3Igc2ltcGxlIHN0cmluZyBhdHRyaWJ1dGVzLCB1c2UgdGhlIFBPSk8gc3ludGF4XHJcbiAgICogQHBhcmFtIHtTeW1ib2x9IFtjb21wYXJhdG9yPSdPcC5lcSddIG9wZXJhdG9yXHJcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBsb2dpYyBUaGUgY29uZGl0aW9uLiBDYW4gYmUgYm90aCBhIHNpbXBseSB0eXBlLCBvciBhIGZ1cnRoZXIgY29uZGl0aW9uIChgb3JgLCBgYW5kYCwgYC5saXRlcmFsYCBldGMuKVxyXG4gICAqIEBzaW5jZSB2Mi4wLjAtZGV2M1xyXG4gICAqL1xyXG4gIHN0YXRpYyB3aGVyZShhdHRyLCBjb21wYXJhdG9yLCBsb2dpYykge1xyXG4gICAgcmV0dXJuIG5ldyBVdGlscy5XaGVyZShhdHRyLCBjb21wYXJhdG9yLCBsb2dpYyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBhIHRyYW5zYWN0aW9uLiBXaGVuIHVzaW5nIHRyYW5zYWN0aW9ucywgeW91IHNob3VsZCBwYXNzIHRoZSB0cmFuc2FjdGlvbiBpbiB0aGUgb3B0aW9ucyBhcmd1bWVudCBpbiBvcmRlciBmb3IgdGhlIHF1ZXJ5IHRvIGhhcHBlbiB1bmRlciB0aGF0IHRyYW5zYWN0aW9uIEBzZWUge0BsaW5rIFRyYW5zYWN0aW9ufVxyXG4gICAqXHJcbiAgICogSWYgeW91IGhhdmUgW0NMU10oaHR0cHM6Ly9naXRodWIuY29tL290aGl5bTIzL25vZGUtY29udGludWF0aW9uLWxvY2FsLXN0b3JhZ2UpIGVuYWJsZWQsIHRoZSB0cmFuc2FjdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcGFzc2VkIHRvIGFueSBxdWVyeSB0aGF0IHJ1bnMgd2l0aGluIHRoZSBjYWxsYmFja1xyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBzZXF1ZWxpemUudHJhbnNhY3Rpb24oKS50aGVuKHRyYW5zYWN0aW9uID0+IHtcclxuICAgKiAgIHJldHVybiBVc2VyLmZpbmRPbmUoLi4uLCB7dHJhbnNhY3Rpb259KVxyXG4gICAqICAgICAudGhlbih1c2VyID0+IHVzZXIudXBkYXRlKC4uLiwge3RyYW5zYWN0aW9ufSkpXHJcbiAgICogICAgIC50aGVuKCgpID0+IHRyYW5zYWN0aW9uLmNvbW1pdCgpKVxyXG4gICAqICAgICAuY2F0Y2goKCkgPT4gdHJhbnNhY3Rpb24ucm9sbGJhY2soKSk7XHJcbiAgICogfSlcclxuICAgKlxyXG4gICAqIEBleGFtcGxlIDxjYXB0aW9uPkEgc3ludGF4IGZvciBhdXRvbWF0aWNhbGx5IGNvbW1pdHRpbmcgb3Igcm9sbGluZyBiYWNrIGJhc2VkIG9uIHRoZSBwcm9taXNlIGNoYWluIHJlc29sdXRpb24gaXMgYWxzbyBzdXBwb3J0ZWQ8L2NhcHRpb24+XHJcbiAgICpcclxuICAgKiBzZXF1ZWxpemUudHJhbnNhY3Rpb24odHJhbnNhY3Rpb24gPT4geyAvLyBOb3RlIHRoYXQgd2UgdXNlIGEgY2FsbGJhY2sgcmF0aGVyIHRoYW4gYSBwcm9taXNlLnRoZW4oKVxyXG4gICAqICAgcmV0dXJuIFVzZXIuZmluZE9uZSguLi4sIHt0cmFuc2FjdGlvbn0pXHJcbiAgICogICAgIC50aGVuKHVzZXIgPT4gdXNlci51cGRhdGUoLi4uLCB7dHJhbnNhY3Rpb259KSlcclxuICAgKiB9KS50aGVuKCgpID0+IHtcclxuICAgKiAgIC8vIENvbW1pdHRlZFxyXG4gICAqIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICogICAvLyBSb2xsZWQgYmFja1xyXG4gICAqICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAqIH0pO1xyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+VG8gZW5hYmxlIENMUywgYWRkIGl0IGRvIHlvdXIgcHJvamVjdCwgY3JlYXRlIGEgbmFtZXNwYWNlIGFuZCBzZXQgaXQgb24gdGhlIHNlcXVlbGl6ZSBjb25zdHJ1Y3Rvcjo8L2NhcHRpb24+XHJcbiAgICpcclxuICAgKiBjb25zdCBjbHMgPSByZXF1aXJlKCdjb250aW51YXRpb24tbG9jYWwtc3RvcmFnZScpO1xyXG4gICAqIGNvbnN0IG5zID0gY2xzLmNyZWF0ZU5hbWVzcGFjZSgnLi4uLicpO1xyXG4gICAqIGNvbnN0IFNlcXVlbGl6ZSA9IHJlcXVpcmUoJ3NlcXVlbGl6ZScpO1xyXG4gICAqIFNlcXVlbGl6ZS51c2VDTFMobnMpO1xyXG4gICAqXHJcbiAgICogLy8gTm90ZSwgdGhhdCBDTFMgaXMgZW5hYmxlZCBmb3IgYWxsIHNlcXVlbGl6ZSBpbnN0YW5jZXMsIGFuZCBhbGwgaW5zdGFuY2VzIHdpbGwgc2hhcmUgdGhlIHNhbWUgbmFtZXNwYWNlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9uc10gVHJhbnNhY3Rpb24gb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLnR5cGU9J0RFRkVSUkVEJ10gU2VlIGBTZXF1ZWxpemUuVHJhbnNhY3Rpb24uVFlQRVNgIGZvciBwb3NzaWJsZSBvcHRpb25zLiBTcWxpdGUgb25seS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy5pc29sYXRpb25MZXZlbF0gU2VlIGBTZXF1ZWxpemUuVHJhbnNhY3Rpb24uSVNPTEFUSU9OX0xFVkVMU2AgZm9yIHBvc3NpYmxlIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy5kZWZlcnJhYmxlXSBTZXRzIHRoZSBjb25zdHJhaW50cyB0byBiZSBkZWZlcnJlZCBvciBpbW1lZGlhdGVseSBjaGVja2VkLiBTZWUgYFNlcXVlbGl6ZS5EZWZlcnJhYmxlYC4gUG9zdGdyZVNRTCBPbmx5XHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2F1dG9DYWxsYmFja10gVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHRoZSB0cmFuc2FjdGlvbiBvYmplY3QsIGFuZCBzaG91bGQgcmV0dXJuIGEgcHJvbWlzZS4gSWYgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQsIHRoZSB0cmFuc2FjdGlvbiBjb21taXRzOyBpZiB0aGUgcHJvbWlzZSByZWplY3RzLCB0aGUgdHJhbnNhY3Rpb24gcm9sbHMgYmFja1xyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgdHJhbnNhY3Rpb24ob3B0aW9ucywgYXV0b0NhbGxiYWNrKSB7XHJcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBhdXRvQ2FsbGJhY2sgPSBvcHRpb25zO1xyXG4gICAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICAgIGlmICghYXV0b0NhbGxiYWNrKVxyXG4gICAgICByZXR1cm4gdHJhbnNhY3Rpb24ucHJlcGFyZUVudmlyb25tZW50KGZhbHNlKS5yZXR1cm4odHJhbnNhY3Rpb24pO1xyXG5cclxuICAgIC8vIGF1dG9DYWxsYmFjayBwcm92aWRlZFxyXG4gICAgcmV0dXJuIFNlcXVlbGl6ZS5fY2xzUnVuKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uXHJcbiAgICAgICAgLnByZXBhcmVFbnZpcm9ubWVudCgpXHJcbiAgICAgICAgLnRoZW4oKCkgPT4gYXV0b0NhbGxiYWNrKHRyYW5zYWN0aW9uKSlcclxuICAgICAgICAudGFwKCgpID0+IHRyYW5zYWN0aW9uLmNvbW1pdCgpKVxyXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgLy8gUm9sbGJhY2sgdHJhbnNhY3Rpb24gaWYgbm90IGFscmVhZHkgZmluaXNoZWQgKGNvbW1pdCwgcm9sbGJhY2ssIGV0YylcclxuICAgICAgICAgIC8vIGFuZCByZWplY3Qgd2l0aCBvcmlnaW5hbCBlcnJvciAoaWdub3JlIGFueSBlcnJvciBpbiByb2xsYmFjaylcclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnRyeSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdHJhbnNhY3Rpb24uZmluaXNoZWQpXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCkuY2F0Y2goKCkgPT4ge30pO1xyXG4gICAgICAgICAgfSkudGhyb3coZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlIENMUyB3aXRoIFNlcXVlbGl6ZS5cclxuICAgKiBDTFMgbmFtZXNwYWNlIHByb3ZpZGVkIGlzIHN0b3JlZCBhcyBgU2VxdWVsaXplLl9jbHNgXHJcbiAgICogYW5kIGJsdWViaXJkIFByb21pc2UgaXMgcGF0Y2hlZCB0byB1c2UgdGhlIG5hbWVzcGFjZSwgdXNpbmcgYGNscy1ibHVlYmlyZGAgbW9kdWxlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG5zIENMUyBuYW1lc3BhY2VcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBTZXF1ZWxpemUgY29uc3RydWN0b3JcclxuICAgKi9cclxuICBzdGF0aWMgdXNlQ0xTKG5zKSB7XHJcbiAgICAvLyBjaGVjayBgbnNgIGlzIHZhbGlkIENMUyBuYW1lc3BhY2VcclxuICAgIGlmIChcclxuICAgICAgIW5zIHx8XHJcbiAgICAgIHR5cGVvZiBucyAhPT0gXCJvYmplY3RcIiB8fFxyXG4gICAgICB0eXBlb2YgbnMuYmluZCAhPT0gXCJmdW5jdGlvblwiIHx8XHJcbiAgICAgIHR5cGVvZiBucy5ydW4gIT09IFwiZnVuY3Rpb25cIlxyXG4gICAgKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgQ0xTIG5hbWVzcGFjZVwiKTtcclxuXHJcbiAgICAvLyBzYXZlIG5hbWVzcGFjZSBhcyBgU2VxdWVsaXplLl9jbHNgXHJcbiAgICB0aGlzLl9jbHMgPSBucztcclxuXHJcbiAgICAvLyBwYXRjaCBibHVlYmlyZCB0byBiaW5kIGFsbCBwcm9taXNlIGNhbGxiYWNrcyB0byBDTFMgbmFtZXNwYWNlXHJcbiAgICBjbHNCbHVlYmlyZChucywgUHJvbWlzZSk7XHJcblxyXG4gICAgLy8gcmV0dXJuIFNlcXVlbGl6ZSBmb3IgY2hhaW5pbmdcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUnVuIGZ1bmN0aW9uIGluIENMUyBjb250ZXh0LlxyXG4gICAqIElmIG5vIENMUyBjb250ZXh0IGluIHVzZSwganVzdCBydW5zIHRoZSBmdW5jdGlvbiBub3JtYWxseVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBydW5cclxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJuIHZhbHVlIG9mIGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgc3RhdGljIF9jbHNSdW4oZm4pIHtcclxuICAgIGNvbnN0IG5zID0gU2VxdWVsaXplLl9jbHM7XHJcbiAgICBpZiAoIW5zKSByZXR1cm4gZm4oKTtcclxuXHJcbiAgICBsZXQgcmVzO1xyXG4gICAgbnMucnVuKGNvbnRleHQgPT4gKHJlcyA9IGZuKGNvbnRleHQpKSk7XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgbG9nKC4uLmFyZ3MpIHtcclxuICAgIGxldCBvcHRpb25zO1xyXG5cclxuICAgIGNvbnN0IGxhc3QgPSBfLmxhc3QoYXJncyk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBsYXN0ICYmXHJcbiAgICAgIF8uaXNQbGFpbk9iamVjdChsYXN0KSAmJlxyXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGFzdCwgXCJsb2dnaW5nXCIpXHJcbiAgICApIHtcclxuICAgICAgb3B0aW9ucyA9IGxhc3Q7XHJcblxyXG4gICAgICAvLyByZW1vdmUgb3B0aW9ucyBmcm9tIHNldCBvZiBsb2dnZWQgYXJndW1lbnRzIGlmIG9wdGlvbnMubG9nZ2luZyBpcyBlcXVhbCB0byBjb25zb2xlLmxvZ1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nID09PSBjb25zb2xlLmxvZykge1xyXG4gICAgICAgIGFyZ3Muc3BsaWNlKGFyZ3MubGVuZ3RoIC0gMSwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMubG9nZ2luZykge1xyXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgZGVwcmVjYXRpb25zLm5vVHJ1ZUxvZ2dpbmcoKTtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgIG9wdGlvbnMubG9nZ2luZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzZWNvbmQgYXJndW1lbnQgaXMgc3FsLXRpbWluZ3MsIHdoZW4gYmVuY2htYXJraW5nIG9wdGlvbiBlbmFibGVkXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgIGlmIChcclxuICAgICAgICAodGhpcy5vcHRpb25zLmJlbmNobWFyayB8fCBvcHRpb25zLmJlbmNobWFyaykgJiZcclxuICAgICAgICBvcHRpb25zLmxvZ2dpbmcgPT09IGNvbnNvbGUubG9nXHJcbiAgICAgICkge1xyXG4gICAgICAgIGFyZ3MgPSBbYCR7YXJnc1swXX0gRWxhcHNlZCB0aW1lOiAke2FyZ3NbMV19bXNgXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgb3B0aW9ucy5sb2dnaW5nKC4uLmFyZ3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2UgYWxsIGNvbm5lY3Rpb25zIHVzZWQgYnkgdGhpcyBzZXF1ZWxpemUgaW5zdGFuY2UsIGFuZCBmcmVlIGFsbCByZWZlcmVuY2VzIHNvIHRoZSBpbnN0YW5jZSBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXHJcbiAgICpcclxuICAgKiBOb3JtYWxseSB0aGlzIGlzIGRvbmUgb24gcHJvY2VzcyBleGl0LCBzbyB5b3Ugb25seSBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgaWYgeW91IGFyZSBjcmVhdGluZyBtdWx0aXBsZSBpbnN0YW5jZXMsIGFuZCB3YW50XHJcbiAgICogdG8gZ2FyYmFnZSBjb2xsZWN0IHNvbWUgb2YgdGhlbS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxyXG4gICAqL1xyXG4gIGNsb3NlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG5vcm1hbGl6ZURhdGFUeXBlKFR5cGUpIHtcclxuICAgIGxldCB0eXBlID0gdHlwZW9mIFR5cGUgPT09IFwiZnVuY3Rpb25cIiA/IG5ldyBUeXBlKCkgOiBUeXBlO1xyXG4gICAgY29uc3QgZGlhbGVjdFR5cGVzID0gdGhpcy5kaWFsZWN0LkRhdGFUeXBlcyB8fCB7fTtcclxuXHJcbiAgICBpZiAoZGlhbGVjdFR5cGVzW3R5cGUua2V5XSkge1xyXG4gICAgICB0eXBlID0gZGlhbGVjdFR5cGVzW3R5cGUua2V5XS5leHRlbmQodHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuQVJSQVkpIHtcclxuICAgICAgaWYgKCF0eXBlLnR5cGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBUlJBWSBpcyBtaXNzaW5nIHR5cGUgZGVmaW5pdGlvbiBmb3IgaXRzIHZhbHVlcy5cIik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRpYWxlY3RUeXBlc1t0eXBlLnR5cGUua2V5XSkge1xyXG4gICAgICAgIHR5cGUudHlwZSA9IGRpYWxlY3RUeXBlc1t0eXBlLnR5cGUua2V5XS5leHRlbmQodHlwZS50eXBlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlO1xyXG4gIH1cclxuXHJcbiAgbm9ybWFsaXplQXR0cmlidXRlKGF0dHJpYnV0ZSkge1xyXG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoYXR0cmlidXRlKSkge1xyXG4gICAgICBhdHRyaWJ1dGUgPSB7IHR5cGU6IGF0dHJpYnV0ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghYXR0cmlidXRlLnR5cGUpIHJldHVybiBhdHRyaWJ1dGU7XHJcblxyXG4gICAgYXR0cmlidXRlLnR5cGUgPSB0aGlzLm5vcm1hbGl6ZURhdGFUeXBlKGF0dHJpYnV0ZS50eXBlKTtcclxuXHJcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGF0dHJpYnV0ZSwgXCJkZWZhdWx0VmFsdWVcIikpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHR5cGVvZiBhdHRyaWJ1dGUuZGVmYXVsdFZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiZcclxuICAgICAgICAoYXR0cmlidXRlLmRlZmF1bHRWYWx1ZSA9PT0gRGF0YVR5cGVzLk5PVyB8fFxyXG4gICAgICAgICAgYXR0cmlidXRlLmRlZmF1bHRWYWx1ZSA9PT0gRGF0YVR5cGVzLlVVSURWMSB8fFxyXG4gICAgICAgICAgYXR0cmlidXRlLmRlZmF1bHRWYWx1ZSA9PT0gRGF0YVR5cGVzLlVVSURWNClcclxuICAgICAgKSB7XHJcbiAgICAgICAgYXR0cmlidXRlLmRlZmF1bHRWYWx1ZSA9IG5ldyBhdHRyaWJ1dGUuZGVmYXVsdFZhbHVlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXR0cmlidXRlLnR5cGUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuRU5VTSkge1xyXG4gICAgICAvLyBUaGUgRU5VTSBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgdHlwZSBpcyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsdWVzXHJcbiAgICAgIGlmIChhdHRyaWJ1dGUudmFsdWVzKSB7XHJcbiAgICAgICAgYXR0cmlidXRlLnR5cGUudmFsdWVzID0gYXR0cmlidXRlLnR5cGUub3B0aW9ucy52YWx1ZXMgPVxyXG4gICAgICAgICAgYXR0cmlidXRlLnZhbHVlcztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhdHRyaWJ1dGUudmFsdWVzID0gYXR0cmlidXRlLnR5cGUudmFsdWVzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWF0dHJpYnV0ZS52YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmFsdWVzIGZvciBFTlVNIGhhdmUgbm90IGJlZW4gZGVmaW5lZC5cIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXR0cmlidXRlO1xyXG4gIH1cclxufVxyXG5cclxuLy8gQWxpYXNlc1xyXG5TZXF1ZWxpemUucHJvdG90eXBlLmZuID0gU2VxdWVsaXplLmZuO1xyXG5TZXF1ZWxpemUucHJvdG90eXBlLmNvbCA9IFNlcXVlbGl6ZS5jb2w7XHJcblNlcXVlbGl6ZS5wcm90b3R5cGUuY2FzdCA9IFNlcXVlbGl6ZS5jYXN0O1xyXG5TZXF1ZWxpemUucHJvdG90eXBlLmxpdGVyYWwgPSBTZXF1ZWxpemUubGl0ZXJhbDtcclxuU2VxdWVsaXplLnByb3RvdHlwZS5hbmQgPSBTZXF1ZWxpemUuYW5kO1xyXG5TZXF1ZWxpemUucHJvdG90eXBlLm9yID0gU2VxdWVsaXplLm9yO1xyXG5TZXF1ZWxpemUucHJvdG90eXBlLmpzb24gPSBTZXF1ZWxpemUuanNvbjtcclxuU2VxdWVsaXplLnByb3RvdHlwZS53aGVyZSA9IFNlcXVlbGl6ZS53aGVyZTtcclxuU2VxdWVsaXplLnByb3RvdHlwZS52YWxpZGF0ZSA9IFNlcXVlbGl6ZS5wcm90b3R5cGUuYXV0aGVudGljYXRlO1xyXG5cclxuLyoqXHJcbiAqIFNlcXVlbGl6ZSB2ZXJzaW9uIG51bWJlci5cclxuICovXHJcblNlcXVlbGl6ZS52ZXJzaW9uID0gcmVxdWlyZShcIi4uL3BhY2thZ2UuanNvblwiKS52ZXJzaW9uO1xyXG5cclxuU2VxdWVsaXplLm9wdGlvbnMgPSB7IGhvb2tzOiB7fSB9O1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5TZXF1ZWxpemUuVXRpbHMgPSBVdGlscztcclxuXHJcbi8qKlxyXG4gKiBPcGVyYXRvcnMgc3ltYm9scyB0byBiZSB1c2VkIGZvciBxdWVyeWluZyBkYXRhXHJcbiAqIEBzZWUgIHtAbGluayBPcGVyYXRvcnN9XHJcbiAqL1xyXG5TZXF1ZWxpemUuT3AgPSBPcDtcclxuXHJcbi8qKlxyXG4gKiBBIGhhbmR5IHJlZmVyZW5jZSB0byB0aGUgYmx1ZWJpcmQgUHJvbWlzZSBjbGFzc1xyXG4gKi9cclxuU2VxdWVsaXplLlByb21pc2UgPSBQcm9taXNlO1xyXG5cclxuLyoqXHJcbiAqIEF2YWlsYWJsZSB0YWJsZSBoaW50cyB0byBiZSB1c2VkIGZvciBxdWVyeWluZyBkYXRhIGluIG1zc3FsIGZvciB0YWJsZSBoaW50c1xyXG4gKiBAc2VlIHtAbGluayBUYWJsZUhpbnRzfVxyXG4gKi9cclxuU2VxdWVsaXplLlRhYmxlSGludHMgPSBUYWJsZUhpbnRzO1xyXG5cclxuLyoqXHJcbiAqIEF2YWlsYWJsZSBpbmRleCBoaW50cyB0byBiZSB1c2VkIGZvciBxdWVyeWluZyBkYXRhIGluIG15c3FsIGZvciBpbmRleCBoaW50c1xyXG4gKiBAc2VlIHtAbGluayBJbmRleEhpbnRzfVxyXG4gKi9cclxuU2VxdWVsaXplLkluZGV4SGludHMgPSBJbmRleEhpbnRzO1xyXG5cclxuLyoqXHJcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSBzZXF1ZWxpemUgdHJhbnNhY3Rpb24gY2xhc3MuIFVzZSB0aGlzIHRvIGFjY2VzcyBpc29sYXRpb25MZXZlbHMgYW5kIHR5cGVzIHdoZW4gY3JlYXRpbmcgYSB0cmFuc2FjdGlvblxyXG4gKiBAc2VlIHtAbGluayBUcmFuc2FjdGlvbn1cclxuICogQHNlZSB7QGxpbmsgU2VxdWVsaXplLnRyYW5zYWN0aW9ufVxyXG4gKi9cclxuU2VxdWVsaXplLlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb247XHJcblxyXG4vKipcclxuICogQSByZWZlcmVuY2UgdG8gU2VxdWVsaXplIGNvbnN0cnVjdG9yIGZyb20gc2VxdWVsaXplLiBVc2VmdWwgZm9yIGFjY2Vzc2luZyBEYXRhVHlwZXMsIEVycm9ycyBldGMuXHJcbiAqIEBzZWUge0BsaW5rIFNlcXVlbGl6ZX1cclxuICovXHJcblNlcXVlbGl6ZS5wcm90b3R5cGUuU2VxdWVsaXplID0gU2VxdWVsaXplO1xyXG5cclxuLyoqXHJcbiAqIEF2YWlsYWJsZSBxdWVyeSB0eXBlcyBmb3IgdXNlIHdpdGggYHNlcXVlbGl6ZS5xdWVyeWBcclxuICogQHNlZSB7QGxpbmsgUXVlcnlUeXBlc31cclxuICovXHJcblNlcXVlbGl6ZS5wcm90b3R5cGUuUXVlcnlUeXBlcyA9IFNlcXVlbGl6ZS5RdWVyeVR5cGVzID0gUXVlcnlUeXBlcztcclxuXHJcbi8qKlxyXG4gKiBFeHBvc2VzIHRoZSB2YWxpZGF0b3IuanMgb2JqZWN0LCBzbyB5b3UgY2FuIGV4dGVuZCBpdCB3aXRoIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gVGhlIHZhbGlkYXRvciBpcyBleHBvc2VkIGJvdGggb24gdGhlIGluc3RhbmNlLCBhbmQgb24gdGhlIGNvbnN0cnVjdG9yLlxyXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc28vdmFsaWRhdG9yLmpzXHJcbiAqL1xyXG5TZXF1ZWxpemUucHJvdG90eXBlLlZhbGlkYXRvciA9IFNlcXVlbGl6ZS5WYWxpZGF0b3IgPSBWYWxpZGF0b3I7XHJcblxyXG5TZXF1ZWxpemUuTW9kZWwgPSBNb2RlbDtcclxuXHJcblNlcXVlbGl6ZS5EYXRhVHlwZXMgPSBEYXRhVHlwZXM7XHJcbmZvciAoY29uc3QgZGF0YVR5cGUgaW4gRGF0YVR5cGVzKSB7XHJcbiAgU2VxdWVsaXplW2RhdGFUeXBlXSA9IERhdGFUeXBlc1tkYXRhVHlwZV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIHJlZmVyZW5jZSB0byB0aGUgZGVmZXJyYWJsZSBjb2xsZWN0aW9uLiBVc2UgdGhpcyB0byBhY2Nlc3MgdGhlIGRpZmZlcmVudCBkZWZlcnJhYmxlIG9wdGlvbnMuXHJcbiAqIEBzZWUge0BsaW5rIFRyYW5zYWN0aW9uLkRlZmVycmFibGV9XHJcbiAqIEBzZWUge0BsaW5rIFNlcXVlbGl6ZSN0cmFuc2FjdGlvbn1cclxuICovXHJcblNlcXVlbGl6ZS5EZWZlcnJhYmxlID0gRGVmZXJyYWJsZTtcclxuXHJcbi8qKlxyXG4gKiBBIHJlZmVyZW5jZSB0byB0aGUgc2VxdWVsaXplIGFzc29jaWF0aW9uIGNsYXNzLlxyXG4gKiBAc2VlIHtAbGluayBBc3NvY2lhdGlvbn1cclxuICovXHJcblNlcXVlbGl6ZS5wcm90b3R5cGUuQXNzb2NpYXRpb24gPSBTZXF1ZWxpemUuQXNzb2NpYXRpb24gPSBBc3NvY2lhdGlvbjtcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlIGFsdGVybmF0aXZlIHZlcnNpb24gb2YgYGluZmxlY3Rpb25gIG1vZHVsZSB0byBiZSB1c2VkIGJ5IGBVdGlscy5wbHVyYWxpemVgIGV0Yy5cclxuICogQHBhcmFtIHtPYmplY3R9IF9pbmZsZWN0aW9uIC0gYGluZmxlY3Rpb25gIG1vZHVsZVxyXG4gKi9cclxuU2VxdWVsaXplLnVzZUluZmxlY3Rpb24gPSBVdGlscy51c2VJbmZsZWN0aW9uO1xyXG5cclxuLyoqXHJcbiAqIEFsbG93IGhvb2tzIHRvIGJlIGRlZmluZWQgb24gU2VxdWVsaXplICsgb24gc2VxdWVsaXplIGluc3RhbmNlIGFzIHVuaXZlcnNhbCBob29rcyB0byBydW4gb24gYWxsIG1vZGVsc1xyXG4gKiBhbmQgb24gU2VxdWVsaXplL3NlcXVlbGl6ZSBtZXRob2RzIGUuZy4gU2VxdWVsaXplKCksIFNlcXVlbGl6ZSNkZWZpbmUoKVxyXG4gKi9cclxuSG9va3MuYXBwbHlUbyhTZXF1ZWxpemUpO1xyXG5Ib29rcy5hcHBseVRvKFNlcXVlbGl6ZS5wcm90b3R5cGUpO1xyXG5cclxuLyoqXHJcbiAqIEV4cG9zZSB2YXJpb3VzIGVycm9ycyBhdmFpbGFibGVcclxuICovXHJcblxyXG4vLyBleHBvc2UgYWxpYXMgdG8gQmFzZUVycm9yXHJcblNlcXVlbGl6ZS5FcnJvciA9IHNlcXVlbGl6ZUVycm9ycy5CYXNlRXJyb3I7XHJcblxyXG5mb3IgKGNvbnN0IGVycm9yIG9mIE9iamVjdC5rZXlzKHNlcXVlbGl6ZUVycm9ycykpIHtcclxuICBTZXF1ZWxpemVbZXJyb3JdID0gc2VxdWVsaXplRXJyb3JzW2Vycm9yXTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXF1ZWxpemU7XHJcbm1vZHVsZS5leHBvcnRzLlNlcXVlbGl6ZSA9IFNlcXVlbGl6ZTtcclxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IFNlcXVlbGl6ZTtcclxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9zZXF1ZWxpemUuanMiXSwibmFtZXMiOlsicmV0cnkiLCJyZXF1aXJlIiwiY2xzQmx1ZWJpcmQiLCJfIiwiVXRpbHMiLCJNb2RlbCIsIkRhdGFUeXBlcyIsIkRlZmVycmFibGUiLCJNb2RlbE1hbmFnZXIiLCJRdWVyeUludGVyZmFjZSIsIlRyYW5zYWN0aW9uIiwiUXVlcnlUeXBlcyIsIlRhYmxlSGludHMiLCJJbmRleEhpbnRzIiwic2VxdWVsaXplRXJyb3JzIiwiUHJvbWlzZSIsIkhvb2tzIiwiQXNzb2NpYXRpb24iLCJWYWxpZGF0b3IiLCJ2YWxpZGF0b3IiLCJPcCIsImRlcHJlY2F0aW9ucyIsIlNlcXVlbGl6ZSIsImRhdGFiYXNlIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIm9wdGlvbnMiLCJjb25maWciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJwaWNrIiwicnVuSG9va3MiLCJPYmplY3QiLCJhc3NpZ24iLCJkaWFsZWN0IiwiZGlhbGVjdE1vZHVsZSIsImRpYWxlY3RNb2R1bGVQYXRoIiwiaG9zdCIsInByb3RvY29sIiwiZGVmaW5lIiwicXVlcnkiLCJzeW5jIiwidGltZXpvbmUiLCJjbGllbnRNaW5NZXNzYWdlcyIsInN0YW5kYXJkQ29uZm9ybWluZ1N0cmluZ3MiLCJsb2dnaW5nIiwiY29uc29sZSIsImxvZyIsIm9taXROdWxsIiwibmF0aXZlIiwicmVwbGljYXRpb24iLCJzc2wiLCJ1bmRlZmluZWQiLCJwb29sIiwicXVvdGVJZGVudGlmaWVycyIsImhvb2tzIiwibWF4IiwibWF0Y2giLCJ0cmFuc2FjdGlvblR5cGUiLCJUWVBFUyIsIkRFRkVSUkVEIiwiaXNvbGF0aW9uTGV2ZWwiLCJkYXRhYmFzZVZlcnNpb24iLCJ0eXBlVmFsaWRhdGlvbiIsImJlbmNobWFyayIsIm1pbmlmeUFsaWFzZXMiLCJsb2dRdWVyeVBhcmFtZXRlcnMiLCJFcnJvciIsIm5vVHJ1ZUxvZ2dpbmciLCJfc2V0dXBIb29rcyIsInBvcnQiLCJrZWVwRGVmYXVsdFRpbWV6b25lIiwiZGlhbGVjdE9wdGlvbnMiLCJEaWFsZWN0IiwiZ2V0RGlhbGVjdCIsIlF1ZXJ5R2VuZXJhdG9yIiwiaXNQbGFpbk9iamVjdCIsIm9wZXJhdG9yc0FsaWFzZXMiLCJub1N0cmluZ09wZXJhdG9ycyIsInNldE9wZXJhdG9yc0FsaWFzZXMiLCJub0Jvb2xPcGVyYXRvckFsaWFzZXMiLCJxdWVyeUludGVyZmFjZSIsIm1vZGVscyIsIm1vZGVsTWFuYWdlciIsImNvbm5lY3Rpb25NYW5hZ2VyIiwiaW1wb3J0Q2FjaGUiLCJyZWZyZXNoVHlwZVBhcnNlciIsIm1vZGVsTmFtZSIsImF0dHJpYnV0ZXMiLCJzZXF1ZWxpemUiLCJtb2RlbCIsImluaXQiLCJpc0RlZmluZWQiLCJnZXRNb2RlbCIsImZpbmQiLCJuYW1lIiwiaW1wb3J0UGF0aCIsInNxbCIsImluc3RhbmNlIiwiY29uc3RydWN0b3IiLCJyYXciLCJtYXBUb01vZGVsIiwiZmllbGRNYXAiLCJnZXQiLCJkZWZhdWx0cyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNlYXJjaFBhdGgiLCJ0eXBlIiwibmVzdCIsInBsYWluIiwiU0VMRUNUIiwiUkFXIiwic3VwcG9ydHMiLCJwcmVwZW5kU2VhcmNoUGF0aCIsInN1cHBvcnRzU2VhcmNoUGF0aCIsInRyeSIsInZhbHVlcyIsInJlcGxhY2VtZW50cyIsImJpbmQiLCJ0cmltIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwiY29uY2F0IiwiZm9ybWF0TmFtZWRQYXJhbWV0ZXJzIiwiYmluZFBhcmFtZXRlcnMiLCJRdWVyeSIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiY2hlY2tUcmFuc2FjdGlvbiIsInRyYW5zYWN0aW9uIiwiZmluaXNoZWQiLCJjb21wbGV0ZXNUcmFuc2FjdGlvbiIsImVycm9yIiwiaWQiLCJyZXRyeU9wdGlvbnMiLCJyZXNvbHZlIiwiX2NscyIsImNvbm5lY3Rpb24iLCJnZXRDb25uZWN0aW9uIiwidGhlbiIsInJ1biIsImZpbmFsbHkiLCJyZWxlYXNlQ29ubmVjdGlvbiIsInZhcmlhYmxlcyIsInNldCIsIlR5cGVFcnJvciIsIm1hcCIsInYiLCJrIiwiam9pbiIsInZhbHVlIiwiZ2V0UXVlcnlJbnRlcmZhY2UiLCJlc2NhcGUiLCJzY2hlbWEiLCJjcmVhdGVTY2hlbWEiLCJzaG93QWxsU2NoZW1hcyIsImRyb3BTY2hlbWEiLCJkcm9wQWxsU2NoZW1hcyIsImNsb25lIiwidGVzdCIsInJlamVjdCIsImZvcmNlIiwiZHJvcCIsImZvckVhY2hNb2RlbCIsInB1c2giLCJhdXRoZW50aWNhdGUiLCJlYWNoIiwicmV0dXJuIiwicmV2ZXJzZSIsInRydW5jYXRlTW9kZWwiLCJ0cnVuY2F0ZSIsImNhc2NhZGUiLCJkaWEiLCJmbiIsImF1dG9DYWxsYmFjayIsInByZXBhcmVFbnZpcm9ubWVudCIsIl9jbHNSdW4iLCJ0YXAiLCJjb21taXQiLCJjYXRjaCIsImVyciIsInJvbGxiYWNrIiwidGhyb3ciLCJhcmdzIiwibGFzdCIsInNwbGljZSIsImNsb3NlIiwiVHlwZSIsImRpYWxlY3RUeXBlcyIsImtleSIsImV4dGVuZCIsIkFSUkFZIiwiYXR0cmlidXRlIiwibm9ybWFsaXplRGF0YVR5cGUiLCJkZWZhdWx0VmFsdWUiLCJOT1ciLCJVVUlEVjEiLCJVVUlEVjQiLCJFTlVNIiwiRm4iLCJjb2wiLCJDb2wiLCJ2YWwiLCJDYXN0IiwiTGl0ZXJhbCIsImFuZCIsIm9yIiwiY29uZGl0aW9uc09yUGF0aCIsIkpzb24iLCJhdHRyIiwiY29tcGFyYXRvciIsImxvZ2ljIiwiV2hlcmUiLCJucyIsInJlcyIsImNvbnRleHQiLCJjYXN0IiwibGl0ZXJhbCIsImpzb24iLCJ3aGVyZSIsInZhbGlkYXRlIiwidmVyc2lvbiIsImRhdGFUeXBlIiwidXNlSW5mbGVjdGlvbiIsImFwcGx5VG8iLCJCYXNlRXJyb3IiLCJrZXlzIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsbUJBQUQsQ0FBckI7O0FBQ0EsTUFBTUMsV0FBVyxHQUFHRCxPQUFPLENBQUMsY0FBRCxDQUEzQjs7QUFDQSxNQUFNRSxDQUFDLEdBQUdGLE9BQU8sQ0FBQyxRQUFELENBQWpCOztBQUVBLE1BQU1HLEtBQUssR0FBR0gsT0FBTyxDQUFDLFNBQUQsQ0FBckI7O0FBQ0EsTUFBTUksS0FBSyxHQUFHSixPQUFPLENBQUMsU0FBRCxDQUFyQjs7QUFDQSxNQUFNSyxTQUFTLEdBQUdMLE9BQU8sQ0FBQyxjQUFELENBQXpCOztBQUNBLE1BQU1NLFVBQVUsR0FBR04sT0FBTyxDQUFDLGNBQUQsQ0FBMUI7O0FBQ0EsTUFBTU8sWUFBWSxHQUFHUCxPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsTUFBTVEsY0FBYyxHQUFHUixPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsTUFBTVMsV0FBVyxHQUFHVCxPQUFPLENBQUMsZUFBRCxDQUEzQjs7QUFDQSxNQUFNVSxVQUFVLEdBQUdWLE9BQU8sQ0FBQyxlQUFELENBQTFCOztBQUNBLE1BQU1XLFVBQVUsR0FBR1gsT0FBTyxDQUFDLGVBQUQsQ0FBMUI7O0FBQ0EsTUFBTVksVUFBVSxHQUFHWixPQUFPLENBQUMsZUFBRCxDQUExQjs7QUFDQSxNQUFNYSxlQUFlLEdBQUdiLE9BQU8sQ0FBQyxVQUFELENBQS9COztBQUNBLE1BQU1jLE9BQU8sR0FBR2QsT0FBTyxDQUFDLFdBQUQsQ0FBdkI7O0FBQ0EsTUFBTWUsS0FBSyxHQUFHZixPQUFPLENBQUMsU0FBRCxDQUFyQjs7QUFDQSxNQUFNZ0IsV0FBVyxHQUFHaEIsT0FBTyxDQUFDLHNCQUFELENBQTNCOztBQUNBLE1BQU1pQixTQUFTLEdBQUdqQixPQUFPLENBQUMsMEJBQUQsQ0FBUCxDQUFvQ2tCLFNBQXREOztBQUNBLE1BQU1DLEVBQUUsR0FBR25CLE9BQU8sQ0FBQyxhQUFELENBQWxCOztBQUNBLE1BQU1vQixZQUFZLEdBQUdwQixPQUFPLENBQUMsc0JBQUQsQ0FBNUI7QUFFQTtBQUNBO0FBQ0E7OztJQUNNcUIsUztBQUNKO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRSxxQkFBWUMsUUFBWixFQUFzQkMsUUFBdEIsRUFBZ0NDLFFBQWhDLEVBQTBDQyxPQUExQyxFQUFtRDtBQUFBOztBQUNqRCxRQUFJQyxNQUFKOztBQUVBLFFBQUlDLFNBQVMsQ0FBQ0MsTUFBVixLQUFxQixDQUFyQixJQUEwQixPQUFPTixRQUFQLEtBQW9CLFFBQWxELEVBQTREO0FBQzFEO0FB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RUFBQUEsU0FBUyxDQUFDZ0gsS0FBRCxDQUFULEdBQW1CeEgsZUFBZSxDQUFDd0gsS0FBRCxDQUFsQztBQUNEOztBQUVEK0YsTUFBTSxDQUFDQyxPQUFQLEdBQWlCaE4sU0FBakI7QUFDQStNLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlaE4sU0FBZixHQUEyQkEsU0FBM0I7QUFDQStNLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCak4sU0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHJldHJ5ID0gcmVxdWlyZShcInJldHJ5LWFzLXByb21pc2VkXCIpO1xuY29uc3QgY2xzQmx1ZWJpcmQgPSByZXF1aXJlKFwiY2xzLWJsdWViaXJkXCIpO1xuY29uc3QgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5cbmNvbnN0IFV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5jb25zdCBNb2RlbCA9IHJlcXVpcmUoXCIuL21vZGVsXCIpO1xuY29uc3QgRGF0YVR5cGVzID0gcmVxdWlyZShcIi4vZGF0YS10eXBlc1wiKTtcbmNvbnN0IERlZmVycmFibGUgPSByZXF1aXJlKFwiLi9kZWZlcnJhYmxlXCIpO1xuY29uc3QgTW9kZWxNYW5hZ2VyID0gcmVxdWlyZShcIi4vbW9kZWwtbWFuYWdlclwiKTtcbmNvbnN0IFF1ZXJ5SW50ZXJmYWNlID0gcmVxdWlyZShcIi4vcXVlcnktaW50ZXJmYWNlXCIpO1xuY29uc3QgVHJhbnNhY3Rpb24gPSByZXF1aXJlKFwiLi90cmFuc2FjdGlvblwiKTtcbmNvbnN0IFF1ZXJ5VHlwZXMgPSByZXF1aXJlKFwiLi9xdWVyeS10eXBlc1wiKTtcbmNvbnN0IFRhYmxlSGludHMgPSByZXF1aXJlKFwiLi90YWJsZS1oaW50c1wiKTtcbmNvbnN0IEluZGV4SGludHMgPSByZXF1aXJlKFwiLi9pbmRleC1oaW50c1wiKTtcbmNvbnN0IHNlcXVlbGl6ZUVycm9ycyA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi9wcm9taXNlXCIpO1xuY29uc3QgSG9va3MgPSByZXF1aXJlKFwiLi9ob29rc1wiKTtcbmNvbnN0IEFzc29jaWF0aW9uID0gcmVxdWlyZShcIi4vYXNzb2NpYXRpb25zL2luZGV4XCIpO1xuY29uc3QgVmFsaWRhdG9yID0gcmVxdWlyZShcIi4vdXRpbHMvdmFsaWRhdG9yLWV4dHJhc1wiKS52YWxpZGF0b3I7XG5jb25zdCBPcCA9IHJlcXVpcmUoXCIuL29wZXJhdG9yc1wiKTtcbmNvbnN0IGRlcHJlY2F0aW9ucyA9IHJlcXVpcmUoXCIuL3V0aWxzL2RlcHJlY2F0aW9uc1wiKTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBtYWluIGNsYXNzLCB0aGUgZW50cnkgcG9pbnQgdG8gc2VxdWVsaXplLlxuICovXG5jbGFzcyBTZXF1ZWxpemUge1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgc2VxdWVsaXplIHdpdGggbmFtZSBvZiBkYXRhYmFzZSwgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyB3aXRob3V0IHBhc3N3b3JkIC8gd2l0aCBibGFuayBwYXNzd29yZFxuICAgKiBjb25zdCBzZXF1ZWxpemUgPSBuZXcgU2VxdWVsaXplKCdkYXRhYmFzZScsICd1c2VybmFtZScsIG51bGwsIHtcbiAgICogICBkaWFsZWN0OiAnbXlzcWwnXG4gICAqIH0pXG4gICAqXG4gICAqIC8vIHdpdGggcGFzc3dvcmQgYW5kIG9wdGlvbnNcbiAgICogY29uc3Qgc2VxdWVsaXplID0gbmV3IFNlcXVlbGl6ZSgnbXlfZGF0YWJhc2UnLCAnam9obicsICdkb2UnLCB7XG4gICAqICAgZGlhbGVjdDogJ3Bvc3RncmVzJ1xuICAgKiB9KVxuICAgKlxuICAgKiAvLyB3aXRoIGRhdGFiYXNlLCB1c2VybmFtZSwgYW5kIHBhc3N3b3JkIGluIHRoZSBvcHRpb25zIG9iamVjdFxuICAgKiBjb25zdCBzZXF1ZWxpemUgPSBuZXcgU2VxdWVsaXplKHsgZGF0YWJhc2UsIHVzZXJuYW1lLCBwYXNzd29yZCwgZGlhbGVjdDogJ21zc3FsJyB9KTtcbiAgICpcbiAgICogLy8gd2l0aCB1cmlcbiAgICogY29uc3Qgc2VxdWVsaXplID0gbmV3IFNlcXVlbGl6ZSgnbXlzcWw6Ly9sb2NhbGhvc3Q6MzMwNi9kYXRhYmFzZScsIHt9KVxuICAgKlxuICAgKiAvLyBvcHRpb24gZXhhbXBsZXNcbiAgICogY29uc3Qgc2VxdWVsaXplID0gbmV3IFNlcXVlbGl6ZSgnZGF0YWJhc2UnLCAndXNlcm5hbWUnLCAncGFzc3dvcmQnLCB7XG4gICAqICAgLy8gdGhlIHNxbCBkaWFsZWN0IG9mIHRoZSBkYXRhYmFzZVxuICAgKiAgIC8vIGN1cnJlbnRseSBzdXBwb3J0ZWQ6ICdteXNxbCcsICdzcWxpdGUnLCAncG9zdGdyZXMnLCAnbXNzcWwnXG4gICAqICAgZGlhbGVjdDogJ215c3FsJyxcbiAgICpcbiAgICogICAvLyBjdXN0b20gaG9zdDsgZGVmYXVsdDogbG9jYWxob3N0XG4gICAqICAgaG9zdDogJ215LnNlcnZlci50bGQnLFxuICAgKiAgIC8vIGZvciBwb3N0Z3JlcywgeW91IGNhbiBhbHNvIHNwZWNpZnkgYW4gYWJzb2x1dGUgcGF0aCB0byBhIGRpcmVjdG9yeVxuICAgKiAgIC8vIGNvbnRhaW5pbmcgYSBVTklYIHNvY2tldCB0byBjb25uZWN0IG92ZXJcbiAgICogICAvLyBob3N0OiAnL3NvY2tldHMvcHNxbF9zb2NrZXRzJy5cbiAgICpcbiAgICogICAvLyBjdXN0b20gcG9ydDsgZGVmYXVsdDogZGlhbGVjdCBkZWZhdWx0XG4gICAqICAgcG9ydDogMTIzNDUsXG4gICAqXG4gICAqICAgLy8gY3VzdG9tIHByb3RvY29sOyBkZWZhdWx0OiAndGNwJ1xuICAgKiAgIC8vIHBvc3RncmVzIG9ubHksIHVzZWZ1bCBmb3IgSGVyb2t1XG4gICAqICAgcHJvdG9jb2w6IG51bGwsXG4gICAqXG4gICAqICAgLy8gZGlzYWJsZSBsb2dnaW5nIG9yIHByb3ZpZGUgYSBjdXN0b20gbG9nZ2luZyBmdW5jdGlvbjsgZGVmYXVsdDogY29uc29sZS5sb2dcbiAgICogICBsb2dnaW5nOiBmYWxzZSxcbiAgICpcbiAgICogICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbnkgZGlhbGVjdCBvcHRpb25zIHRvIHRoZSB1bmRlcmx5aW5nIGRpYWxlY3QgbGlicmFyeVxuICAgKiAgIC8vIC0gZGVmYXVsdCBpcyBlbXB0eVxuICAgKiAgIC8vIC0gY3VycmVudGx5IHN1cHBvcnRlZDogJ215c3FsJywgJ3Bvc3RncmVzJywgJ21zc3FsJ1xuICAgKiAgIGRpYWxlY3RPcHRpb25zOiB7XG4gICAqICAgICBzb2NrZXRQYXRoOiAnL0FwcGxpY2F0aW9ucy9NQU1QL3RtcC9teXNxbC9teXNxbC5zb2NrJyxcbiAgICogICAgIHN1cHBvcnRCaWdOdW1iZXJzOiB0cnVlLFxuICAgKiAgICAgYmlnTnVtYmVyU3RyaW5nczogdHJ1ZVxuICAgKiAgIH0sXG4gICAqXG4gICAqICAgLy8gdGhlIHN0b3JhZ2UgZW5naW5lIGZvciBzcWxpdGVcbiAgICogICAvLyAtIGRlZmF1bHQgJzptZW1vcnk6J1xuICAgKiAgIHN0b3JhZ2U6ICdwYXRoL3RvL2RhdGFiYXNlLnNxbGl0ZScsXG4gICAqXG4gICAqICAgLy8gZGlzYWJsZSBpbnNlcnRpbmcgdW5kZWZpbmVkIHZhbHVlcyBhcyBOVUxMXG4gICAqICAgLy8gLSBkZWZhdWx0OiBmYWxzZVxuICAgKiAgIG9taXROdWxsOiB0cnVlLFxuICAgKlxuICAgKiAgIC8vIGEgZmxhZyBmb3IgdXNpbmcgYSBuYXRpdmUgbGlicmFyeSBvciBub3QuXG4gICAqICAgLy8gaW4gdGhlIGNhc2Ugb2YgJ3BnJyAtLSBzZXQgdGhpcyB0byB0cnVlIHdpbGwgYWxsb3cgU1NMIHN1cHBvcnRcbiAgICogICAvLyAtIGRlZmF1bHQ6IGZhbHNlXG4gICAqICAgbmF0aXZlOiB0cnVlLFxuICAgKlxuICAgKiAgIC8vIFNwZWNpZnkgb3B0aW9ucywgd2hpY2ggYXJlIHVzZWQgd2hlbiBzZXF1ZWxpemUuZGVmaW5lIGlzIGNhbGxlZC5cbiAgICogICAvLyBUaGUgZm9sbG93aW5nIGV4YW1wbGU6XG4gICAqICAgLy8gICBkZWZpbmU6IHsgdGltZXN0YW1wczogZmFsc2UgfVxuICAgKiAgIC8vIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhczpcbiAgICogICAvLyAgIE1vZGVsLmluaXQoYXR0cmlidXRlcywgeyB0aW1lc3RhbXBzOiBmYWxzZSB9KTtcbiAgICogICAvLyAgIHNlcXVlbGl6ZS5kZWZpbmUobmFtZSwgYXR0cmlidXRlcywgeyB0aW1lc3RhbXBzOiBmYWxzZSB9KTtcbiAgICogICAvLyBzbyBkZWZpbmluZyB0aGUgdGltZXN0YW1wcyBmb3IgZWFjaCBtb2RlbCB3aWxsIGJlIG5vdCBuZWNlc3NhcnlcbiAgICogICBkZWZpbmU6IHtcbiAgICogICAgIHVuZGVyc2NvcmVkOiBmYWxzZSxcbiAgICogICAgIGZyZWV6ZVRhYmxlTmFtZTogZmFsc2UsXG4gICAqICAgICBjaGFyc2V0OiAndXRmOCcsXG4gICAqICAgICBkaWFsZWN0T3B0aW9uczoge1xuICAgKiAgICAgICBjb2xsYXRlOiAndXRmOF9nZW5lcmFsX2NpJ1xuICAgKiAgICAgfSxcbiAgICogICAgIHRpbWVzdGFtcHM6IHRydWVcbiAgICogICB9LFxuICAgKlxuICAgKiAgIC8vIHNpbWlsYXIgZm9yIHN5bmM6IHlvdSBjYW4gZGVmaW5lIHRoaXMgdG8gYWx3YXlzIGZvcmNlIHN5bmMgZm9yIG1vZGVsc1xuICAgKiAgIHN5bmM6IHsgZm9yY2U6IHRydWUgfSxcbiAgICpcbiAgICogICAvLyBwb29sIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBwb29sIGRhdGFiYXNlIGNvbm5lY3Rpb25zXG4gICAqICAgcG9vbDoge1xuICAgKiAgICAgbWF4OiA1LFxuICAgKiAgICAgaWRsZTogMzAwMDAsXG4gICAqICAgICBhY3F1aXJlOiA2MDAwMCxcbiAgICogICB9LFxuICAgKlxuICAgKiAgIC8vIGlzb2xhdGlvbiBsZXZlbCBvZiBlYWNoIHRyYW5zYWN0aW9uXG4gICAqICAgLy8gZGVmYXVsdHMgdG8gZGlhbGVjdCBkZWZhdWx0XG4gICAqICAgaXNvbGF0aW9uTGV2ZWw6IFRyYW5zYWN0aW9uLklTT0xBVElPTl9MRVZFTFMuUkVQRUFUQUJMRV9SRUFEXG4gICAqIH0pXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtkYXRhYmFzZV0gVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFt1c2VybmFtZT1udWxsXSBUaGUgdXNlcm5hbWUgd2hpY2ggaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgYWdhaW5zdCB0aGUgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtwYXNzd29yZD1udWxsXSBUaGUgcGFzc3dvcmQgd2hpY2ggaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgYWdhaW5zdCB0aGUgZGF0YWJhc2UuIFN1cHBvcnRzIFNRTENpcGhlciBlbmNyeXB0aW9uIGZvciBTUUxpdGUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIFtvcHRpb25zPXt9XSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy5ob3N0PSdsb2NhbGhvc3QnXSBUaGUgaG9zdCBvZiB0aGUgcmVsYXRpb25hbCBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9ICAgW29wdGlvbnMucG9ydD1dIFRoZSBwb3J0IG9mIHRoZSByZWxhdGlvbmFsIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy51c2VybmFtZT1udWxsXSBUaGUgdXNlcm5hbWUgd2hpY2ggaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgYWdhaW5zdCB0aGUgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLnBhc3N3b3JkPW51bGxdIFRoZSBwYXNzd29yZCB3aGljaCBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpbnN0IHRoZSBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgW29wdGlvbnMuZGF0YWJhc2U9bnVsbF0gVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLmRpYWxlY3RdIFRoZSBkaWFsZWN0IG9mIHRoZSBkYXRhYmFzZSB5b3UgYXJlIGNvbm5lY3RpbmcgdG8uIE9uZSBvZiBteXNxbCwgcG9zdGdyZXMsIHNxbGl0ZSBhbmQgbXNzcWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLmRpYWxlY3RNb2R1bGU9bnVsbF0gSWYgc3BlY2lmaWVkLCB1c2UgdGhpcyBkaWFsZWN0IGxpYnJhcnkuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byB1c2UgcGcuanMgaW5zdGVhZCBvZiBwZyB3aGVuIGNvbm5lY3RpbmcgdG8gYSBwZyBkYXRhYmFzZSwgeW91IHNob3VsZCBzcGVjaWZ5ICdyZXF1aXJlKFwicGcuanNcIiknIGhlcmVcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgW29wdGlvbnMuZGlhbGVjdE1vZHVsZVBhdGg9bnVsbF0gSWYgc3BlY2lmaWVkLCBsb2FkIHRoZSBkaWFsZWN0IGxpYnJhcnkgZnJvbSB0aGlzIHBhdGguIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byB1c2UgcGcuanMgaW5zdGVhZCBvZiBwZyB3aGVuIGNvbm5lY3RpbmcgdG8gYSBwZyBkYXRhYmFzZSwgeW91IHNob3VsZCBzcGVjaWZ5ICcvcGF0aC90by9wZy5qcycgaGVyZVxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy5kaWFsZWN0T3B0aW9uc10gQW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgb3B0aW9ucywgd2hpY2ggYXJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgY29ubmVjdGlvbiBsaWJyYXJ5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLnN0b3JhZ2VdIE9ubHkgdXNlZCBieSBzcWxpdGUuIERlZmF1bHRzIHRvICc6bWVtb3J5OidcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgW29wdGlvbnMucHJvdG9jb2w9J3RjcCddIFRoZSBwcm90b2NvbCBvZiB0aGUgcmVsYXRpb25hbCBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnMuZGVmaW5lPXt9XSBEZWZhdWx0IG9wdGlvbnMgZm9yIG1vZGVsIGRlZmluaXRpb25zLiBTZWUge0BsaW5rIE1vZGVsLmluaXR9LlxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy5xdWVyeT17fV0gRGVmYXVsdCBvcHRpb25zIGZvciBzZXF1ZWxpemUucXVlcnlcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgW29wdGlvbnMuc2NoZW1hPW51bGxdIEEgc2NoZW1hIHRvIHVzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy5zZXQ9e31dIERlZmF1bHQgb3B0aW9ucyBmb3Igc2VxdWVsaXplLnNldFxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy5zeW5jPXt9XSBEZWZhdWx0IG9wdGlvbnMgZm9yIHNlcXVlbGl6ZS5zeW5jXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLnRpbWV6b25lPScrMDA6MDAnXSBUaGUgdGltZXpvbmUgdXNlZCB3aGVuIGNvbnZlcnRpbmcgYSBkYXRlIGZyb20gdGhlIGRhdGFiYXNlIGludG8gYSBKYXZhU2NyaXB0IGRhdGUuIFRoZSB0aW1lem9uZSBpcyBhbHNvIHVzZWQgdG8gU0VUIFRJTUVaT05FIHdoZW4gY29ubmVjdGluZyB0byB0aGUgc2VydmVyLCB0byBlbnN1cmUgdGhhdCB0aGUgcmVzdWx0IG9mIE5PVywgQ1VSUkVOVF9USU1FU1RBTVAgYW5kIG90aGVyIHRpbWUgcmVsYXRlZCBmdW5jdGlvbnMgaGF2ZSBpbiB0aGUgcmlnaHQgdGltZXpvbmUuIEZvciBiZXN0IGNyb3NzIHBsYXRmb3JtIHBlcmZvcm1hbmNlIHVzZSB0aGUgZm9ybWF0ICsvLUhIOk1NLiBXaWxsIGFsc28gYWNjZXB0IHN0cmluZyB2ZXJzaW9ucyBvZiB0aW1lem9uZXMgdXNlZCBieSBtb21lbnQuanMgKGUuZy4gJ0FtZXJpY2EvTG9zX0FuZ2VsZXMnKTsgdGhpcyBpcyB1c2VmdWwgdG8gY2FwdHVyZSBkYXlsaWdodCBzYXZpbmdzIHRpbWUgY2hhbmdlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gW29wdGlvbnMuY2xpZW50TWluTWVzc2FnZXM9J3dhcm5pbmcnXSBUaGUgUG9zdGdyZVNRTCBgY2xpZW50X21pbl9tZXNzYWdlc2Agc2Vzc2lvbiBwYXJhbWV0ZXIuIFNldCB0byBgZmFsc2VgIHRvIG5vdCBvdmVycmlkZSB0aGUgZGF0YWJhc2UncyBkZWZhdWx0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5zdGFuZGFyZENvbmZvcm1pbmdTdHJpbmdzPXRydWVdIFRoZSBQb3N0Z3JlU1FMIGBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3NgIHNlc3Npb24gcGFyYW1ldGVyLiBTZXQgdG8gYGZhbHNlYCB0byBub3Qgc2V0IHRoZSBvcHRpb24uIFdBUk5JTkc6IFNldHRpbmcgdGhpcyB0byBmYWxzZSBtYXkgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcyBhbmQgaXMgbm90IHJlY29tbWVuZGVkIVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nPWNvbnNvbGUubG9nXSBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCBldmVyeSB0aW1lIFNlcXVlbGl6ZSB3b3VsZCBsb2cgc29tZXRoaW5nLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5iZW5jaG1hcms9ZmFsc2VdIFBhc3MgcXVlcnkgZXhlY3V0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNlY29uZCBhcmd1bWVudCB0byBsb2dnaW5nIGZ1bmN0aW9uIChvcHRpb25zLmxvZ2dpbmcpLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5vbWl0TnVsbD1mYWxzZV0gQSBmbGFnIHRoYXQgZGVmaW5lcyBpZiBudWxsIHZhbHVlcyBzaG91bGQgYmUgcGFzc2VkIHRvIFNRTCBxdWVyaWVzIG9yIG5vdC5cbiAgICogQHBhcmFtIHtib29sZWFufSAgW29wdGlvbnMubmF0aXZlPWZhbHNlXSBBIGZsYWcgdGhhdCBkZWZpbmVzIGlmIG5hdGl2ZSBsaWJyYXJ5IHNoYWxsIGJlIHVzZWQgb3Igbm90LiBDdXJyZW50bHkgb25seSBoYXMgYW4gZWZmZWN0IGZvciBwb3N0Z3Jlc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBbb3B0aW9ucy5yZXBsaWNhdGlvbj1mYWxzZV0gVXNlIHJlYWQgLyB3cml0ZSByZXBsaWNhdGlvbi4gVG8gZW5hYmxlIHJlcGxpY2F0aW9uLCBwYXNzIGFuIG9iamVjdCwgd2l0aCB0d28gcHJvcGVydGllcywgcmVhZCBhbmQgd3JpdGUuIFdyaXRlIHNob3VsZCBiZSBhbiBvYmplY3QgKGEgc2luZ2xlIHNlcnZlciBmb3IgaGFuZGxpbmcgd3JpdGVzKSwgYW5kIHJlYWQgYW4gYXJyYXkgb2Ygb2JqZWN0IChzZXZlcmFsIHNlcnZlcnMgdG8gaGFuZGxlIHJlYWRzKS4gRWFjaCByZWFkL3dyaXRlIHNlcnZlciBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6IGBob3N0YCwgYHBvcnRgLCBgdXNlcm5hbWVgLCBgcGFzc3dvcmRgLCBgZGF0YWJhc2VgXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIFtvcHRpb25zLnBvb2xdIHNlcXVlbGl6ZSBjb25uZWN0aW9uIHBvb2wgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0gICBbb3B0aW9ucy5wb29sLm1heD01XSBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9uIGluIHBvb2xcbiAgICogQHBhcmFtIHtudW1iZXJ9ICAgW29wdGlvbnMucG9vbC5taW49MF0gTWluaW11bSBudW1iZXIgb2YgY29ubmVjdGlvbiBpbiBwb29sXG4gICAqIEBwYXJhbSB7bnVtYmVyfSAgIFtvcHRpb25zLnBvb2wuaWRsZT0xMDAwMF0gVGhlIG1heGltdW0gdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0aGF0IGEgY29ubmVjdGlvbiBjYW4gYmUgaWRsZSBiZWZvcmUgYmVpbmcgcmVsZWFzZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSAgIFtvcHRpb25zLnBvb2wuYWNxdWlyZT02MDAwMF0gVGhlIG1heGltdW0gdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0aGF0IHBvb2wgd2lsbCB0cnkgdG8gZ2V0IGNvbm5lY3Rpb24gYmVmb3JlIHRocm93aW5nIGVycm9yXG4gICAqIEBwYXJhbSB7bnVtYmVyfSAgIFtvcHRpb25zLnBvb2wuZXZpY3Q9MTAwMF0gVGhlIHRpbWUgaW50ZXJ2YWwsIGluIG1pbGxpc2Vjb25kcywgYWZ0ZXIgd2hpY2ggc2VxdWVsaXplLXBvb2wgd2lsbCByZW1vdmUgaWRsZSBjb25uZWN0aW9ucy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMucG9vbC52YWxpZGF0ZV0gQSBmdW5jdGlvbiB0aGF0IHZhbGlkYXRlcyBhIGNvbm5lY3Rpb24uIENhbGxlZCB3aXRoIGNsaWVudC4gVGhlIGRlZmF1bHQgZnVuY3Rpb24gY2hlY2tzIHRoYXQgY2xpZW50IGlzIGFuIG9iamVjdCwgYW5kIHRoYXQgaXRzIHN0YXRlIGlzIG5vdCBkaXNjb25uZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSAgW29wdGlvbnMucXVvdGVJZGVudGlmaWVycz10cnVlXSBTZXQgdG8gYGZhbHNlYCB0byBtYWtlIHRhYmxlIG5hbWVzIGFuZCBhdHRyaWJ1dGVzIGNhc2UtaW5zZW5zaXRpdmUgb24gUG9zdGdyZXMgYW5kIHNraXAgZG91YmxlIHF1b3Rpbmcgb2YgdGhlbS4gIFdBUk5JTkc6IFNldHRpbmcgdGhpcyB0byBmYWxzZSBtYXkgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcyBhbmQgaXMgbm90IHJlY29tbWVuZGVkIVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy50cmFuc2FjdGlvblR5cGU9J0RFRkVSUkVEJ10gU2V0IHRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIHR5cGUuIFNlZSBgU2VxdWVsaXplLlRyYW5zYWN0aW9uLlRZUEVTYCBmb3IgcG9zc2libGUgb3B0aW9ucy4gU3FsaXRlIG9ubHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLmlzb2xhdGlvbkxldmVsXSBTZXQgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLiBTZWUgYFNlcXVlbGl6ZS5UcmFuc2FjdGlvbi5JU09MQVRJT05fTEVWRUxTYCBmb3IgcG9zc2libGUgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnMucmV0cnldIFNldCBvZiBmbGFncyB0aGF0IGNvbnRyb2wgd2hlbiBhIHF1ZXJ5IGlzIGF1dG9tYXRpY2FsbHkgcmV0cmllZC5cbiAgICogQHBhcmFtIHtBcnJheX0gICAgW29wdGlvbnMucmV0cnkubWF0Y2hdIE9ubHkgcmV0cnkgYSBxdWVyeSBpZiB0aGUgZXJyb3IgbWF0Y2hlcyBvbmUgb2YgdGhlc2Ugc3RyaW5ncy5cbiAgICogQHBhcmFtIHtudW1iZXJ9ICAgW29wdGlvbnMucmV0cnkubWF4XSBIb3cgbWFueSB0aW1lcyBhIGZhaWxpbmcgcXVlcnkgaXMgYXV0b21hdGljYWxseSByZXRyaWVkLiAgU2V0IHRvIDAgdG8gZGlzYWJsZSByZXRyeWluZyBvbiBTUUxfQlVTWSBlcnJvci5cbiAgICogQHBhcmFtIHtib29sZWFufSAgW29wdGlvbnMudHlwZVZhbGlkYXRpb249ZmFsc2VdIFJ1biBidWlsdC1pbiB0eXBlIHZhbGlkYXRvcnMgb24gaW5zZXJ0IGFuZCB1cGRhdGUsIGFuZCBzZWxlY3Qgd2l0aCB3aGVyZSBjbGF1c2UsIGUuZy4gdmFsaWRhdGUgdGhhdCBhcmd1bWVudHMgcGFzc2VkIHRvIGludGVnZXIgZmllbGRzIGFyZSBpbnRlZ2VyLWxpa2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIFtvcHRpb25zLm9wZXJhdG9yc0FsaWFzZXNdIFN0cmluZyBiYXNlZCBvcGVyYXRvciBhbGlhcy4gUGFzcyBvYmplY3QgdG8gbGltaXQgc2V0IG9mIGFsaWFzZWQgb3BlcmF0b3JzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9ucy5ob29rc10gQW4gb2JqZWN0IG9mIGdsb2JhbCBob29rIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgYmVmb3JlIGFuZCBhZnRlciBjZXJ0YWluIGxpZmVjeWNsZSBldmVudHMuIEdsb2JhbCBob29rcyB3aWxsIHJ1biBhZnRlciBhbnkgbW9kZWwtc3BlY2lmaWMgaG9va3MgZGVmaW5lZCBmb3IgdGhlIHNhbWUgZXZlbnQgKFNlZSBgU2VxdWVsaXplLk1vZGVsLmluaXQoKWAgZm9yIGEgbGlzdCkuICBBZGRpdGlvbmFsbHksIGBiZWZvcmVDb25uZWN0KClgLCBgYWZ0ZXJDb25uZWN0KClgLCBgYmVmb3JlRGlzY29ubmVjdCgpYCwgYW5kIGBhZnRlckRpc2Nvbm5lY3QoKWAgaG9va3MgbWF5IGJlIGRlZmluZWQgaGVyZS5cbiAgICogQHBhcmFtIHtib29sZWFufSAgW29wdGlvbnMubWluaWZ5QWxpYXNlcz1mYWxzZV0gQSBmbGFnIHRoYXQgZGVmaW5lcyBpZiBhbGlhc2VzIHNob3VsZCBiZSBtaW5pZmllZCAobW9zdGx5IHVzZWZ1bCB0byBhdm9pZCBQb3N0Z3JlcyBhbGlhcyBjaGFyYWN0ZXIgbGltaXQgb2YgNjQpXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIFtvcHRpb25zLmxvZ1F1ZXJ5UGFyYW1ldGVycz1mYWxzZV0gQSBmbGFnIHRoYXQgZGVmaW5lcyBpZiBzaG93IGJpbmQgcGF0YW1ldGVycyBpbiBsb2cuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhYmFzZSwgdXNlcm5hbWUsIHBhc3N3b3JkLCBvcHRpb25zKSB7XG4gICAgbGV0IGNvbmZpZztcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBkYXRhYmFzZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gbmV3IFNlcXVlbGl6ZSh7IC4uLiBvcHRpb25zIH0pXG4gICAgICBvcHRpb25zID0gZGF0YWJhc2U7XG4gICAgICBjb25maWcgPSBfLnBpY2soXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIFwiaG9zdFwiLFxuICAgICAgICBcInBvcnRcIixcbiAgICAgICAgXCJkYXRhYmFzZVwiLFxuICAgICAgICBcInVzZXJuYW1lXCIsXG4gICAgICAgIFwicGFzc3dvcmRcIlxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGRhdGFiYXNlID09PSBcInN0cmluZ1wiKSB8fFxuICAgICAgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIHVzZXJuYW1lID09PSBcIm9iamVjdFwiKVxuICAgICkge1xuICAgICAgLy8gbmV3IFNlcXVlbGl6ZShVUkksIHsgLi4uIG9wdGlvbnMgfSlcblxuICAgICAgY29uZmlnID0ge307XG4gICAgICBvcHRpb25zID0gdXNlcm5hbWUgfHwge307XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5ldyBTZXF1ZWxpemUoZGF0YWJhc2UsIHVzZXJuYW1lLCBwYXNzd29yZCwgeyAuLi4gb3B0aW9ucyB9KVxuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICBjb25maWcgPSB7IGRhdGFiYXNlLCB1c2VybmFtZSwgcGFzc3dvcmQgfTtcbiAgICB9XG5cbiAgICBTZXF1ZWxpemUucnVuSG9va3MoXCJiZWZvcmVJbml0XCIsIGNvbmZpZywgb3B0aW9ucyk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBkaWFsZWN0OiBcInNxbGl0ZVwiLFxuICAgICAgICBkaWFsZWN0TW9kdWxlOiBudWxsLFxuICAgICAgICBkaWFsZWN0TW9kdWxlUGF0aDogbnVsbCxcbiAgICAgICAgaG9zdDogXCJsb2NhbGhvc3RcIixcbiAgICAgICAgcHJvdG9jb2w6IFwidGNwXCIsXG4gICAgICAgIGRlZmluZToge30sXG4gICAgICAgIHF1ZXJ5OiB7fSxcbiAgICAgICAgc3luYzoge30sXG4gICAgICAgIHRpbWV6b25lOiBcIiswMDowMFwiLFxuICAgICAgICBjbGllbnRNaW5NZXNzYWdlczogXCJ3YXJuaW5nXCIsXG4gICAgICAgIHN0YW5kYXJkQ29uZm9ybWluZ1N0cmluZ3M6IHRydWUsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGxvZ2dpbmc6IGNvbnNvbGUubG9nLFxuICAgICAgICBvbWl0TnVsbDogZmFsc2UsXG4gICAgICAgIG5hdGl2ZTogZmFsc2UsXG4gICAgICAgIHJlcGxpY2F0aW9uOiBmYWxzZSxcbiAgICAgICAgc3NsOiB1bmRlZmluZWQsXG4gICAgICAgIHBvb2w6IHt9LFxuICAgICAgICBxdW90ZUlkZW50aWZpZXJzOiB0cnVlLFxuICAgICAgICBob29rczoge30sXG4gICAgICAgIHJldHJ5OiB7XG4gICAgICAgICAgbWF4OiA1LFxuICAgICAgICAgIG1hdGNoOiBbXCJTUUxJVEVfQlVTWTogZGF0YWJhc2UgaXMgbG9ja2VkXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb24uVFlQRVMuREVGRVJSRUQsXG4gICAgICAgIGlzb2xhdGlvbkxldmVsOiBudWxsLFxuICAgICAgICBkYXRhYmFzZVZlcnNpb246IDAsXG4gICAgICAgIHR5cGVWYWxpZGF0aW9uOiBmYWxzZSxcbiAgICAgICAgYmVuY2htYXJrOiBmYWxzZSxcbiAgICAgICAgbWluaWZ5QWxpYXNlczogZmFsc2UsXG4gICAgICAgIGxvZ1F1ZXJ5UGFyYW1ldGVyczogZmFsc2VcbiAgICAgIH0sXG4gICAgICBvcHRpb25zIHx8IHt9XG4gICAgKTtcblxuICAgIGlmICghdGhpcy5vcHRpb25zLmRpYWxlY3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRpYWxlY3QgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBzdXBwbGllZCBhcyBvZiB2NC4wLjBcIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaWFsZWN0ID09PSBcInBvc3RncmVzcWxcIikge1xuICAgICAgdGhpcy5vcHRpb25zLmRpYWxlY3QgPSBcInBvc3RncmVzXCI7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmRpYWxlY3QgPT09IFwic3FsaXRlXCIgJiZcbiAgICAgIHRoaXMub3B0aW9ucy50aW1lem9uZSAhPT0gXCIrMDA6MDBcIlxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlNldHRpbmcgYSBjdXN0b20gdGltZXpvbmUgaXMgbm90IHN1cHBvcnRlZCBieSBTUUxpdGUsIGRhdGVzIGFyZSBhbHdheXMgcmV0dXJuZWQgYXMgVVRDLiBQbGVhc2UgcmVtb3ZlIHRoZSBjdXN0b20gdGltZXpvbmUgcGFyYW1ldGVyLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubG9nZ2luZyA9PT0gdHJ1ZSkge1xuICAgICAgZGVwcmVjYXRpb25zLm5vVHJ1ZUxvZ2dpbmcoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICB0aGlzLm9wdGlvbnMubG9nZ2luZyA9IGNvbnNvbGUubG9nO1xuICAgIH1cblxuICAgIHRoaXMuX3NldHVwSG9va3Mob3B0aW9ucy5ob29rcyk7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGRhdGFiYXNlOiBjb25maWcuZGF0YWJhc2UgfHwgdGhpcy5vcHRpb25zLmRhdGFiYXNlLFxuICAgICAgdXNlcm5hbWU6IGNvbmZpZy51c2VybmFtZSB8fCB0aGlzLm9wdGlvbnMudXNlcm5hbWUsXG4gICAgICBwYXNzd29yZDogY29uZmlnLnBhc3N3b3JkIHx8IHRoaXMub3B0aW9ucy5wYXNzd29yZCB8fCBudWxsLFxuICAgICAgaG9zdDogY29uZmlnLmhvc3QgfHwgdGhpcy5vcHRpb25zLmhvc3QsXG4gICAgICBwb3J0OiBjb25maWcucG9ydCB8fCB0aGlzLm9wdGlvbnMucG9ydCxcbiAgICAgIHBvb2w6IHRoaXMub3B0aW9ucy5wb29sLFxuICAgICAgcHJvdG9jb2w6IHRoaXMub3B0aW9ucy5wcm90b2NvbCxcbiAgICAgIG5hdGl2ZTogdGhpcy5vcHRpb25zLm5hdGl2ZSxcbiAgICAgIHNzbDogdGhpcy5vcHRpb25zLnNzbCxcbiAgICAgIHJlcGxpY2F0aW9uOiB0aGlzLm9wdGlvbnMucmVwbGljYXRpb24sXG4gICAgICBkaWFsZWN0TW9kdWxlOiB0aGlzLm9wdGlvbnMuZGlhbGVjdE1vZHVsZSxcbiAgICAgIGRpYWxlY3RNb2R1bGVQYXRoOiB0aGlzLm9wdGlvbnMuZGlhbGVjdE1vZHVsZVBhdGgsXG4gICAgICBrZWVwRGVmYXVsdFRpbWV6b25lOiB0aGlzLm9wdGlvbnMua2VlcERlZmF1bHRUaW1lem9uZSxcbiAgICAgIGRpYWxlY3RPcHRpb25zOiB0aGlzLm9wdGlvbnMuZGlhbGVjdE9wdGlvbnNcbiAgICB9O1xuXG4gICAgbGV0IERpYWxlY3Q7XG4gICAgLy8gUmVxdWlyaW5nIHRoZSBkaWFsZWN0IGluIGEgc3dpdGNoLWNhc2UgdG8ga2VlcCB0aGVcbiAgICAvLyByZXF1aXJlIGNhbGxzIHN0YXRpYy4gKEJyb3dzZXJpZnkgZml4KVxuICAgIHN3aXRjaCAodGhpcy5nZXREaWFsZWN0KCkpIHtcbiAgICAgIGNhc2UgXCJzcWxpdGVcIjpcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIERpYWxlY3QgPSByZXF1aXJlKFwiLi9kaWFsZWN0cy9zcWxpdGVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGUgZGlhbGVjdCAke3RoaXMuZ2V0RGlhbGVjdCgpfSBpcyBub3Qgc3VwcG9ydGVkLiBTdXBwb3J0ZWQgZGlhbGVjdHM6IHNxbGl0ZS5gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaWFsZWN0ID0gbmV3IERpYWxlY3QodGhpcyk7XG4gICAgdGhpcy5kaWFsZWN0LlF1ZXJ5R2VuZXJhdG9yLnR5cGVWYWxpZGF0aW9uID0gb3B0aW9ucy50eXBlVmFsaWRhdGlvbjtcblxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QodGhpcy5vcHRpb25zLm9wZXJhdG9yc0FsaWFzZXMpKSB7XG4gICAgICBkZXByZWNhdGlvbnMubm9TdHJpbmdPcGVyYXRvcnMoKTtcbiAgICAgIHRoaXMuZGlhbGVjdC5RdWVyeUdlbmVyYXRvci5zZXRPcGVyYXRvcnNBbGlhc2VzKFxuICAgICAgICB0aGlzLm9wdGlvbnMub3BlcmF0b3JzQWxpYXNlc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMub3BlcmF0b3JzQWxpYXNlcyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIGRlcHJlY2F0aW9ucy5ub0Jvb2xPcGVyYXRvckFsaWFzZXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXJ5SW50ZXJmYWNlID0gbmV3IFF1ZXJ5SW50ZXJmYWNlKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTW9kZWxzIGFyZSBzdG9yZWQgaGVyZSB1bmRlciB0aGUgbmFtZSBnaXZlbiB0byBgc2VxdWVsaXplLmRlZmluZWBcbiAgICAgKi9cbiAgICB0aGlzLm1vZGVscyA9IHt9O1xuICAgIHRoaXMubW9kZWxNYW5hZ2VyID0gbmV3IE1vZGVsTWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gdGhpcy5kaWFsZWN0LmNvbm5lY3Rpb25NYW5hZ2VyO1xuXG4gICAgdGhpcy5pbXBvcnRDYWNoZSA9IHt9O1xuXG4gICAgU2VxdWVsaXplLnJ1bkhvb2tzKFwiYWZ0ZXJJbml0XCIsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggZGF0YSB0eXBlcyBhbmQgcGFyc2Vycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZnJlc2hUeXBlcygpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLnJlZnJlc2hUeXBlUGFyc2VyKERhdGFUeXBlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3BlY2lmaWVkIGRpYWxlY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzcGVjaWZpZWQgZGlhbGVjdC5cbiAgICovXG4gIGdldERpYWxlY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kaWFsZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRhdGFiYXNlIG5hbWUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkYXRhYmFzZSBuYW1lLlxuICAgKi9cbiAgZ2V0RGF0YWJhc2VOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFF1ZXJ5SW50ZXJmYWNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UXVlcnlJbnRlcmZhY2V9IEFuIGluc3RhbmNlIChzaW5nbGV0b24pIG9mIFF1ZXJ5SW50ZXJmYWNlLlxuICAgKi9cbiAgZ2V0UXVlcnlJbnRlcmZhY2UoKSB7XG4gICAgdGhpcy5xdWVyeUludGVyZmFjZSA9IHRoaXMucXVlcnlJbnRlcmZhY2UgfHwgbmV3IFF1ZXJ5SW50ZXJmYWNlKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5SW50ZXJmYWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIG5ldyBtb2RlbCwgcmVwcmVzZW50aW5nIGEgdGFibGUgaW4gdGhlIGRhdGFiYXNlLlxuICAgKlxuICAgKiBUaGUgdGFibGUgY29sdW1ucyBhcmUgZGVmaW5lZCBieSB0aGUgb2JqZWN0IHRoYXQgaXMgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudC4gRWFjaCBrZXkgb2YgdGhlIG9iamVjdCByZXByZXNlbnRzIGEgY29sdW1uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZGVsLiBUaGUgbW9kZWwgd2lsbCBiZSBzdG9yZWQgaW4gYHNlcXVlbGl6ZS5tb2RlbHNgIHVuZGVyIHRoaXMgbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlcyBBbiBvYmplY3QsIHdoZXJlIGVhY2ggYXR0cmlidXRlIGlzIGEgY29sdW1uIG9mIHRoZSB0YWJsZS4gU2VlIHtAbGluayBNb2RlbC5pbml0fVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZXNlIG9wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIHRoZSBkZWZhdWx0IGRlZmluZSBvcHRpb25zIHByb3ZpZGVkIHRvIHRoZSBTZXF1ZWxpemUgY29uc3RydWN0b3IgYW5kIHBhc3NlZCB0byBNb2RlbC5pbml0KClcbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuaW5pdH0gZm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIHNwZWNpZmljYXRpb24gb2YgdGhlIGBvcHRpb25zYCBhbmQgYGF0dHJpYnV0ZXNgIG9iamVjdHMuXG4gICAqIEBzZWUgPGEgaHJlZj1cIi9tYW51YWwvdHV0b3JpYWwvbW9kZWxzLWRlZmluaXRpb24uaHRtbFwiPk1vZGVsIGRlZmluaXRpb248L2E+IE1hbnVhbCByZWxhdGVkIHRvIG1vZGVsIGRlZmluaXRpb25cbiAgICogQHNlZVxuICAgKiB7QGxpbmsgRGF0YVR5cGVzfSBGb3IgYSBsaXN0IG9mIHBvc3NpYmxlIGRhdGEgdHlwZXNcbiAgICpcbiAgICogQHJldHVybnMge01vZGVsfSBOZXdseSBkZWZpbmVkIG1vZGVsXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHNlcXVlbGl6ZS5kZWZpbmUoJ21vZGVsTmFtZScsIHtcbiAgICogICBjb2x1bW5BOiB7XG4gICAqICAgICAgIHR5cGU6IFNlcXVlbGl6ZS5CT09MRUFOLFxuICAgKiAgICAgICB2YWxpZGF0ZToge1xuICAgKiAgICAgICAgIGlzOiBbXCJbYS16XVwiLCdpJ10sICAgICAgICAvLyB3aWxsIG9ubHkgYWxsb3cgbGV0dGVyc1xuICAgKiAgICAgICAgIG1heDogMjMsICAgICAgICAgICAgICAgICAgLy8gb25seSBhbGxvdyB2YWx1ZXMgPD0gMjNcbiAgICogICAgICAgICBpc0luOiB7XG4gICAqICAgICAgICAgICBhcmdzOiBbWydlbicsICd6aCddXSxcbiAgICogICAgICAgICAgIG1zZzogXCJNdXN0IGJlIEVuZ2xpc2ggb3IgQ2hpbmVzZVwiXG4gICAqICAgICAgICAgfVxuICAgKiAgICAgICB9LFxuICAgKiAgICAgICBmaWVsZDogJ2NvbHVtbl9hJ1xuICAgKiAgIH0sXG4gICAqICAgY29sdW1uQjogU2VxdWVsaXplLlNUUklORyxcbiAgICogICBjb2x1bW5DOiAnTVkgVkVSWSBPV04gQ09MVU1OIFRZUEUnXG4gICAqIH0pO1xuICAgKlxuICAgKiBzZXF1ZWxpemUubW9kZWxzLm1vZGVsTmFtZSAvLyBUaGUgbW9kZWwgd2lsbCBub3cgYmUgYXZhaWxhYmxlIGluIG1vZGVscyB1bmRlciB0aGUgbmFtZSBnaXZlbiB0byBkZWZpbmVcbiAgICovXG4gIGRlZmluZShtb2RlbE5hbWUsIGF0dHJpYnV0ZXMsIG9wdGlvbnMgPSB7fSkge1xuICAgIG9wdGlvbnMubW9kZWxOYW1lID0gbW9kZWxOYW1lO1xuICAgIG9wdGlvbnMuc2VxdWVsaXplID0gdGhpcztcblxuICAgIGNvbnN0IG1vZGVsID0gY2xhc3MgZXh0ZW5kcyBNb2RlbCB7fTtcblxuICAgIG1vZGVsLmluaXQoYXR0cmlidXRlcywgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYSBNb2RlbCB3aGljaCBpcyBhbHJlYWR5IGRlZmluZWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSBUaGUgbmFtZSBvZiBhIG1vZGVsIGRlZmluZWQgd2l0aCBTZXF1ZWxpemUuZGVmaW5lXG4gICAqXG4gICAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgbW9kZWwgaXMgbm90IGRlZmluZWQgKHRoYXQgaXMsIGlmIHNlcXVlbGl6ZSNpc0RlZmluZWQgcmV0dXJucyBmYWxzZSlcbiAgICogQHJldHVybnMge01vZGVsfSBTcGVjaWZpZWQgbW9kZWxcbiAgICovXG4gIG1vZGVsKG1vZGVsTmFtZSkge1xuICAgIGlmICghdGhpcy5pc0RlZmluZWQobW9kZWxOYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21vZGVsTmFtZX0gaGFzIG5vdCBiZWVuIGRlZmluZWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tb2RlbE1hbmFnZXIuZ2V0TW9kZWwobW9kZWxOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIG1vZGVsIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgZGVmaW5lZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lIFRoZSBuYW1lIG9mIGEgbW9kZWwgZGVmaW5lZCB3aXRoIFNlcXVlbGl6ZS5kZWZpbmVcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBtb2RlbCBpcyBhbHJlYWR5IGRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICAgKi9cbiAgaXNEZWZpbmVkKG1vZGVsTmFtZSkge1xuICAgIHJldHVybiAhIXRoaXMubW9kZWxNYW5hZ2VyLm1vZGVscy5maW5kKG1vZGVsID0+IG1vZGVsLm5hbWUgPT09IG1vZGVsTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBhIG1vZGVsIGRlZmluZWQgaW4gYW5vdGhlciBmaWxlLiBJbXBvcnRlZCBtb2RlbHMgYXJlIGNhY2hlZCwgc28gbXVsdGlwbGVcbiAgICogY2FsbHMgdG8gaW1wb3J0IHdpdGggdGhlIHNhbWUgcGF0aCB3aWxsIG5vdCBsb2FkIHRoZSBmaWxlIG11bHRpcGxlIHRpbWVzLlxuICAgKlxuICAgKiBAdHV0b3JpYWwgaHR0cHM6Ly9naXRodWIuY29tL3NlcXVlbGl6ZS9leHByZXNzLWV4YW1wbGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGltcG9ydFBhdGggVGhlIHBhdGggdG8gdGhlIGZpbGUgdGhhdCBob2xkcyB0aGUgbW9kZWwgeW91IHdhbnQgdG8gaW1wb3J0LiBJZiB0aGUgcGFydCBpcyByZWxhdGl2ZSwgaXQgd2lsbCBiZSByZXNvbHZlZCByZWxhdGl2ZWx5IHRvIHRoZSBjYWxsaW5nIGZpbGVcbiAgICpcbiAgICogQHJldHVybnMge01vZGVsfSBJbXBvcnRlZCBtb2RlbCwgcmV0dXJuZWQgZnJvbSBjYWNoZSBpZiB3YXMgYWxyZWFkeSBpbXBvcnRlZFxuICAgKi9cbiAgaW1wb3J0KGltcG9ydFBhdGgpIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBxdWVyeSBvbiB0aGUgREIsIG9wdGlvbmFsbHkgYnlwYXNzaW5nIGFsbCB0aGUgU2VxdWVsaXplIGdvb2RuZXNzLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdHdvIGFyZ3VtZW50czogYW4gYXJyYXkgb2YgcmVzdWx0cywgYW5kIGEgbWV0YWRhdGEgb2JqZWN0LCBjb250YWluaW5nIG51bWJlciBvZiBhZmZlY3RlZCByb3dzIGV0Yy5cbiAgICpcbiAgICogSWYgeW91IGFyZSBydW5uaW5nIGEgdHlwZSBvZiBxdWVyeSB3aGVyZSB5b3UgZG9uJ3QgbmVlZCB0aGUgbWV0YWRhdGEsIGZvciBleGFtcGxlIGEgYFNFTEVDVGAgcXVlcnksIHlvdSBjYW4gcGFzcyBpbiBhIHF1ZXJ5IHR5cGUgdG8gbWFrZSBzZXF1ZWxpemUgZm9ybWF0IHRoZSByZXN1bHRzOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBzZXF1ZWxpemUucXVlcnkoJ1NFTEVDVC4uLicpLnRoZW4oKFtyZXN1bHRzLCBtZXRhZGF0YV0pID0+IHtcbiAgICogICAvLyBSYXcgcXVlcnkgLSB1c2UgdGhlbiBwbHVzIGFycmF5IHNwcmVhZFxuICAgKiB9KTtcbiAgICpcbiAgICogc2VxdWVsaXplLnF1ZXJ5KCdTRUxFQ1QuLi4nLCB7IHR5cGU6IHNlcXVlbGl6ZS5RdWVyeVR5cGVzLlNFTEVDVCB9KS50aGVuKHJlc3VsdHMgPT4ge1xuICAgKiAgIC8vIFNFTEVDVCBxdWVyeSAtIHVzZSB0aGVuXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgc3FsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICBbb3B0aW9ucz17fV0gUXVlcnkgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgIFtvcHRpb25zLnJhd10gSWYgdHJ1ZSwgc2VxdWVsaXplIHdpbGwgbm90IHRyeSB0byBmb3JtYXQgdGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5LCBvciBidWlsZCBhbiBpbnN0YW5jZSBvZiBhIG1vZGVsIGZyb20gdGhlIHJlc3VsdFxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSAgICAgW29wdGlvbnMudHJhbnNhY3Rpb249bnVsbF0gVGhlIHRyYW5zYWN0aW9uIHRoYXQgdGhlIHF1ZXJ5IHNob3VsZCBiZSBleGVjdXRlZCB1bmRlclxuICAgKiBAcGFyYW0ge1F1ZXJ5VHlwZXN9ICAgICAgW29wdGlvbnMudHlwZT0nUkFXJ10gVGhlIHR5cGUgb2YgcXVlcnkgeW91IGFyZSBleGVjdXRpbmcuIFRoZSBxdWVyeSB0eXBlIGFmZmVjdHMgaG93IHJlc3VsdHMgYXJlIGZvcm1hdHRlZCBiZWZvcmUgdGhleSBhcmUgcGFzc2VkIGJhY2suIFRoZSB0eXBlIGlzIGEgc3RyaW5nLCBidXQgYFNlcXVlbGl6ZS5RdWVyeVR5cGVzYCBpcyBwcm92aWRlZCBhcyBjb252ZW5pZW5jZSBzaG9ydGN1dHMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICBbb3B0aW9ucy5uZXN0PWZhbHNlXSBJZiB0cnVlLCB0cmFuc2Zvcm1zIG9iamVjdHMgd2l0aCBgLmAgc2VwYXJhdGVkIHByb3BlcnR5IG5hbWVzIGludG8gbmVzdGVkIG9iamVjdHMgdXNpbmcgW2RvdHRpZS5qc10oaHR0cHM6Ly9naXRodWIuY29tL21pY2toYW5zZW4vZG90dGllLmpzKS4gRm9yIGV4YW1wbGUgeyAndXNlci51c2VybmFtZSc6ICdqb2huJyB9IGJlY29tZXMgeyB1c2VyOiB7IHVzZXJuYW1lOiAnam9obicgfX0uIFdoZW4gYG5lc3RgIGlzIHRydWUsIHRoZSBxdWVyeSB0eXBlIGlzIGFzc3VtZWQgdG8gYmUgYCdTRUxFQ1QnYCwgdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWRcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgIFtvcHRpb25zLnBsYWluPWZhbHNlXSBTZXRzIHRoZSBxdWVyeSB0eXBlIHRvIGBTRUxFQ1RgIGFuZCByZXR1cm4gYSBzaW5nbGUgcm93XG4gICAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSAgICBbb3B0aW9ucy5yZXBsYWNlbWVudHNdIEVpdGhlciBhbiBvYmplY3Qgb2YgbmFtZWQgcGFyYW1ldGVyIHJlcGxhY2VtZW50cyBpbiB0aGUgZm9ybWF0IGA6cGFyYW1gIG9yIGFuIGFycmF5IG9mIHVubmFtZWQgcmVwbGFjZW1lbnRzIHRvIHJlcGxhY2UgYD9gIGluIHlvdXIgU1FMLlxuICAgKiBAcGFyYW0ge09iamVjdHxBcnJheX0gICAgW29wdGlvbnMuYmluZF0gRWl0aGVyIGFuIG9iamVjdCBvZiBuYW1lZCBiaW5kIHBhcmFtZXRlciBpbiB0aGUgZm9ybWF0IGBfcGFyYW1gIG9yIGFuIGFycmF5IG9mIHVubmFtZWQgYmluZCBwYXJhbWV0ZXIgdG8gcmVwbGFjZSBgJDEsICQyLCAuLi5gIGluIHlvdXIgU1FMLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMudXNlTWFzdGVyPWZhbHNlXSBGb3JjZSB0aGUgcXVlcnkgdG8gdXNlIHRoZSB3cml0ZSBwb29sLCByZWdhcmRsZXNzIG9mIHRoZSBxdWVyeSB0eXBlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgICAgICAgW29wdGlvbnMubG9nZ2luZz1mYWxzZV0gQSBmdW5jdGlvbiB0aGF0IGdldHMgZXhlY3V0ZWQgd2hpbGUgcnVubmluZyB0aGUgcXVlcnkgdG8gbG9nIHRoZSBzcWwuXG4gICAqIEBwYXJhbSB7bmV3IE1vZGVsKCl9ICAgICBbb3B0aW9ucy5pbnN0YW5jZV0gQSBzZXF1ZWxpemUgaW5zdGFuY2UgdXNlZCB0byBidWlsZCB0aGUgcmV0dXJuIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7TW9kZWx9ICAgICAgICAgICBbb3B0aW9ucy5tb2RlbF0gQSBzZXF1ZWxpemUgbW9kZWwgdXNlZCB0byBidWlsZCB0aGUgcmV0dXJuZWQgbW9kZWwgaW5zdGFuY2VzICh1c2VkIHRvIGJlIGNhbGxlZCBjYWxsZWUpXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICBbb3B0aW9ucy5yZXRyeV0gU2V0IG9mIGZsYWdzIHRoYXQgY29udHJvbCB3aGVuIGEgcXVlcnkgaXMgYXV0b21hdGljYWxseSByZXRyaWVkLlxuICAgKiBAcGFyYW0ge0FycmF5fSAgICAgICAgICAgW29wdGlvbnMucmV0cnkubWF0Y2hdIE9ubHkgcmV0cnkgYSBxdWVyeSBpZiB0aGUgZXJyb3IgbWF0Y2hlcyBvbmUgb2YgdGhlc2Ugc3RyaW5ncy5cbiAgICogQHBhcmFtIHtJbnRlZ2VyfSAgICAgICAgIFtvcHRpb25zLnJldHJ5Lm1heF0gSG93IG1hbnkgdGltZXMgYSBmYWlsaW5nIHF1ZXJ5IGlzIGF1dG9tYXRpY2FsbHkgcmV0cmllZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIFtvcHRpb25zLnNlYXJjaFBhdGg9REVGQVVMVF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHNjaGVtYSBzZWFyY2hfcGF0aCAoUG9zdGdyZXMgb25seSlcbiAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgIFtvcHRpb25zLnN1cHBvcnRzU2VhcmNoUGF0aF0gSWYgZmFsc2UgZG8gbm90IHByZXBlbmQgdGhlIHF1ZXJ5IHdpdGggdGhlIHNlYXJjaF9wYXRoIChQb3N0Z3JlcyBvbmx5KVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgW29wdGlvbnMubWFwVG9Nb2RlbD1mYWxzZV0gTWFwIHJldHVybmVkIGZpZWxkcyB0byBtb2RlbCdzIGZpZWxkcyBpZiBgb3B0aW9ucy5tb2RlbGAgb3IgYG9wdGlvbnMuaW5zdGFuY2VgIGlzIHByZXNlbnQuIE1hcHBpbmcgd2lsbCBvY2N1ciBiZWZvcmUgYnVpbGRpbmcgdGhlIG1vZGVsIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgW29wdGlvbnMuZmllbGRNYXBdIE1hcCByZXR1cm5lZCBmaWVsZHMgdG8gYXJiaXRyYXJ5IG5hbWVzIGZvciBgU0VMRUNUYCBxdWVyeSB0eXBlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgTW9kZWwuYnVpbGR9IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGluc3RhbmNlIG9wdGlvbi5cbiAgICovXG5cbiAgcXVlcnkoc3FsLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0aW9ucy5xdWVyeSwgb3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5pbnN0YW5jZSAmJiAhb3B0aW9ucy5tb2RlbCkge1xuICAgICAgb3B0aW9ucy5tb2RlbCA9IG9wdGlvbnMuaW5zdGFuY2UuY29uc3RydWN0b3I7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmluc3RhbmNlICYmICFvcHRpb25zLm1vZGVsKSB7XG4gICAgICBvcHRpb25zLnJhdyA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gbWFwIHJhdyBmaWVsZHMgdG8gbW9kZWwgYXR0cmlidXRlc1xuICAgIGlmIChvcHRpb25zLm1hcFRvTW9kZWwpIHtcbiAgICAgIG9wdGlvbnMuZmllbGRNYXAgPSBfLmdldChvcHRpb25zLCBcIm1vZGVsLmZpZWxkQXR0cmlidXRlTWFwXCIsIHt9KTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gXy5kZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgbG9nZ2luZzogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMub3B0aW9ucywgXCJsb2dnaW5nXCIpXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmxvZ2dpbmdcbiAgICAgICAgOiBjb25zb2xlLmxvZyxcbiAgICAgIHNlYXJjaFBhdGg6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICBcInNlYXJjaFBhdGhcIlxuICAgICAgKVxuICAgICAgICA/IHRoaXMub3B0aW9ucy5zZWFyY2hQYXRoXG4gICAgICAgIDogXCJERUZBVUxUXCJcbiAgICB9KTtcblxuICAgIGlmICghb3B0aW9ucy50eXBlKSB7XG4gICAgICBpZiAob3B0aW9ucy5tb2RlbCB8fCBvcHRpb25zLm5lc3QgfHwgb3B0aW9ucy5wbGFpbikge1xuICAgICAgICBvcHRpb25zLnR5cGUgPSBRdWVyeVR5cGVzLlNFTEVDVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMudHlwZSA9IFF1ZXJ5VHlwZXMuUkFXO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vaWYgZGlhbGVjdCBkb2Vzbid0IHN1cHBvcnQgc2VhcmNoX3BhdGggb3IgZGlhbGVjdCBvcHRpb25cbiAgICAvL3RvIHByZXBlbmQgc2VhcmNoUGF0aCBpcyBub3QgdHJ1ZSBkZWxldGUgdGhlIHNlYXJjaFBhdGggb3B0aW9uXG4gICAgaWYgKFxuICAgICAgIXRoaXMuZGlhbGVjdC5zdXBwb3J0cy5zZWFyY2hQYXRoIHx8XG4gICAgICAhdGhpcy5vcHRpb25zLmRpYWxlY3RPcHRpb25zIHx8XG4gICAgICAhdGhpcy5vcHRpb25zLmRpYWxlY3RPcHRpb25zLnByZXBlbmRTZWFyY2hQYXRoIHx8XG4gICAgICBvcHRpb25zLnN1cHBvcnRzU2VhcmNoUGF0aCA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBvcHRpb25zLnNlYXJjaFBhdGg7XG4gICAgfSBlbHNlIGlmICghb3B0aW9ucy5zZWFyY2hQYXRoKSB7XG4gICAgICAvL2lmIHVzZXIgd2FudHMgdG8gYWx3YXlzIHByZXBlbmQgc2VhcmNoUGF0aCAoZGlhbGVjdE9wdGlvbnMucHJlcHJlbmRTZWFyY2hQYXRoID0gdHJ1ZSlcbiAgICAgIC8vdGhlbiBzZXQgdG8gREVGQVVMVCBpZiBub25lIGlzIHByb3ZpZGVkXG4gICAgICBvcHRpb25zLnNlYXJjaFBhdGggPSBcIkRFRkFVTFRcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBzcWwgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKHNxbC52YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChvcHRpb25zLnJlcGxhY2VtZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiQm90aCBgc3FsLnZhbHVlc2AgYW5kIGBvcHRpb25zLnJlcGxhY2VtZW50c2AgY2Fubm90IGJlIHNldCBhdCB0aGUgc2FtZSB0aW1lXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbnMucmVwbGFjZW1lbnRzID0gc3FsLnZhbHVlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzcWwuYmluZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuYmluZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiQm90aCBgc3FsLmJpbmRgIGFuZCBgb3B0aW9ucy5iaW5kYCBjYW5ub3QgYmUgc2V0IGF0IHRoZSBzYW1lIHRpbWVcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3B0aW9ucy5iaW5kID0gc3FsLmJpbmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3FsLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzcWwgPSBzcWwucXVlcnk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3FsID0gc3FsLnRyaW0oKTtcblxuICAgICAgaWYgKG9wdGlvbnMucmVwbGFjZW1lbnRzICYmIG9wdGlvbnMuYmluZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJCb3RoIGByZXBsYWNlbWVudHNgIGFuZCBgYmluZGAgY2Fubm90IGJlIHNldCBhdCB0aGUgc2FtZSB0aW1lXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucmVwbGFjZW1lbnRzKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMucmVwbGFjZW1lbnRzKSkge1xuICAgICAgICAgIHNxbCA9IFV0aWxzLmZvcm1hdChcbiAgICAgICAgICAgIFtzcWxdLmNvbmNhdChvcHRpb25zLnJlcGxhY2VtZW50cyksXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZGlhbGVjdFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3FsID0gVXRpbHMuZm9ybWF0TmFtZWRQYXJhbWV0ZXJzKFxuICAgICAgICAgICAgc3FsLFxuICAgICAgICAgICAgb3B0aW9ucy5yZXBsYWNlbWVudHMsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZGlhbGVjdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGJpbmRQYXJhbWV0ZXJzO1xuXG4gICAgICBpZiAob3B0aW9ucy5iaW5kKSB7XG4gICAgICAgIFtzcWwsIGJpbmRQYXJhbWV0ZXJzXSA9IHRoaXMuZGlhbGVjdC5RdWVyeS5mb3JtYXRCaW5kUGFyYW1ldGVycyhcbiAgICAgICAgICBzcWwsXG4gICAgICAgICAgb3B0aW9ucy5iaW5kLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoZWNrVHJhbnNhY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLnRyYW5zYWN0aW9uICYmXG4gICAgICAgICAgb3B0aW9ucy50cmFuc2FjdGlvbi5maW5pc2hlZCAmJlxuICAgICAgICAgICFvcHRpb25zLmNvbXBsZXRlc1RyYW5zYWN0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7b3B0aW9ucy50cmFuc2FjdGlvbi5maW5pc2hlZH0gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMgdHJhbnNhY3Rpb24oJHtvcHRpb25zLnRyYW5zYWN0aW9uLmlkfSksIHlvdSBjYW4gbm8gbG9uZ2VyIHVzZSBpdC4gKFRoZSByZWplY3RlZCBxdWVyeSBpcyBhdHRhY2hlZCBhcyB0aGUgJ3NxbCcgcHJvcGVydHkgb2YgdGhpcyBlcnJvcilgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnJvci5zcWwgPSBzcWw7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJldHJ5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICB0aGlzLm9wdGlvbnMucmV0cnksXG4gICAgICAgIG9wdGlvbnMucmV0cnkgfHwge31cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgIHJldHJ5KFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICBQcm9taXNlLnRyeSgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnRyYW5zYWN0aW9uID09PSB1bmRlZmluZWQgJiYgU2VxdWVsaXplLl9jbHMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnRyYW5zYWN0aW9uID0gU2VxdWVsaXplLl9jbHMuZ2V0KFwidHJhbnNhY3Rpb25cIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjaGVja1RyYW5zYWN0aW9uKCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMudHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMudHJhbnNhY3Rpb24uY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIDogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRDb25uZWN0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgICAgfSkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgdGhpcy5kaWFsZWN0LlF1ZXJ5KGNvbm5lY3Rpb24sIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydW5Ib29rcyhcImJlZm9yZVF1ZXJ5XCIsIG9wdGlvbnMsIHF1ZXJ5KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IGNoZWNrVHJhbnNhY3Rpb24oKSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBxdWVyeS5ydW4oc3FsLCBiaW5kUGFyYW1ldGVycykpXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5ydW5Ib29rcyhcImFmdGVyUXVlcnlcIiwgb3B0aW9ucywgcXVlcnkpKVxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy50cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uTWFuYWdlci5yZWxlYXNlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIHJldHJ5T3B0aW9uc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBxdWVyeSB3aGljaCB3b3VsZCBzZXQgYW4gZW52aXJvbm1lbnQgb3IgdXNlciB2YXJpYWJsZS4gVGhlIHZhcmlhYmxlcyBhcmUgc2V0IHBlciBjb25uZWN0aW9uLCBzbyB0aGlzIGZ1bmN0aW9uIG5lZWRzIGEgdHJhbnNhY3Rpb24uXG4gICAqIE9ubHkgd29ya3MgZm9yIE15U1FMLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gICAgICAgIHZhcmlhYmxlcyBPYmplY3Qgd2l0aCBtdWx0aXBsZSB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgW29wdGlvbnNdIHF1ZXJ5IG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259ICAgW29wdGlvbnMudHJhbnNhY3Rpb25dIFRoZSB0cmFuc2FjdGlvbiB0aGF0IHRoZSBxdWVyeSBzaG91bGQgYmUgZXhlY3V0ZWQgdW5kZXJcbiAgICpcbiAgICogQG1lbWJlcm9mIFNlcXVlbGl6ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHNldCh2YXJpYWJsZXMsIG9wdGlvbnMpIHtcbiAgICAvLyBQcmVwYXJlIG9wdGlvbnNcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgdGhpcy5vcHRpb25zLnNldCxcbiAgICAgIHR5cGVvZiBvcHRpb25zID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaWFsZWN0ICE9PSBcIm15c3FsXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInNlcXVlbGl6ZS5zZXQgaXMgb25seSBzdXBwb3J0ZWQgZm9yIG15c3FsXCIpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMudHJhbnNhY3Rpb24gfHwgIShvcHRpb25zLnRyYW5zYWN0aW9uIGluc3RhbmNlb2YgVHJhbnNhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwib3B0aW9ucy50cmFuc2FjdGlvbiBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSBzb21lIG9wdGlvbnMsIHNpbmNlIHRoaXMgaXNuJ3QgYSBTRUxFQ1RcbiAgICBvcHRpb25zLnJhdyA9IHRydWU7XG4gICAgb3B0aW9ucy5wbGFpbiA9IHRydWU7XG4gICAgb3B0aW9ucy50eXBlID0gXCJTRVRcIjtcblxuICAgIC8vIEdlbmVyYXRlIFNRTCBRdWVyeVxuICAgIGNvbnN0IHF1ZXJ5ID0gYFNFVCAke18ubWFwKFxuICAgICAgdmFyaWFibGVzLFxuICAgICAgKHYsIGspID0+IGBAJHtrfSA6PSAke3R5cGVvZiB2ID09PSBcInN0cmluZ1wiID8gYFwiJHt2fVwiYCA6IHZ9YFxuICAgICkuam9pbihcIiwgXCIpfWA7XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyeShxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRXNjYXBlIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgc3RyaW5nIHZhbHVlIHRvIGVzY2FwZVxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZXNjYXBlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlJbnRlcmZhY2UoKS5lc2NhcGUodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhYmFzZSBzY2hlbWEuXG4gICAqXG4gICAqICoqTm90ZToqKiB0aGlzIGlzIGEgc2NoZW1hIGluIHRoZSBbcG9zdGdyZXMgc2Vuc2Ugb2YgdGhlIHdvcmRdKGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy85LjEvc3RhdGljL2RkbC1zY2hlbWFzLmh0bWwpLFxuICAgKiBub3QgYSBkYXRhYmFzZSB0YWJsZS4gSW4gbXlzcWwgYW5kIHNxbGl0ZSwgdGhpcyBjb21tYW5kIHdpbGwgZG8gbm90aGluZy5cbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuc2NoZW1hfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NoZW1hIE5hbWUgb2YgdGhlIHNjaGVtYVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIHF1ZXJ5IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nXSBBIGZ1bmN0aW9uIHRoYXQgbG9ncyBzcWwgcXVlcmllcywgb3IgZmFsc2UgZm9yIG5vIGxvZ2dpbmdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBjcmVhdGVTY2hlbWEoc2NoZW1hLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlJbnRlcmZhY2UoKS5jcmVhdGVTY2hlbWEoc2NoZW1hLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGFsbCBkZWZpbmVkIHNjaGVtYXNcbiAgICpcbiAgICogKipOb3RlOioqIHRoaXMgaXMgYSBzY2hlbWEgaW4gdGhlIFtwb3N0Z3JlcyBzZW5zZSBvZiB0aGUgd29yZF0oaHR0cDovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzkuMS9zdGF0aWMvZGRsLXNjaGVtYXMuaHRtbCksXG4gICAqIG5vdCBhIGRhdGFiYXNlIHRhYmxlLiBJbiBteXNxbCBhbmQgc3FsaXRlLCB0aGlzIHdpbGwgc2hvdyBhbGwgdGFibGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIHF1ZXJ5IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nXSBBIGZ1bmN0aW9uIHRoYXQgbG9ncyBzcWwgcXVlcmllcywgb3IgZmFsc2UgZm9yIG5vIGxvZ2dpbmdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBzaG93QWxsU2NoZW1hcyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlJbnRlcmZhY2UoKS5zaG93QWxsU2NoZW1hcyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcm9wIGEgc2luZ2xlIHNjaGVtYVxuICAgKlxuICAgKiAqKk5vdGU6KiogdGhpcyBpcyBhIHNjaGVtYSBpbiB0aGUgW3Bvc3RncmVzIHNlbnNlIG9mIHRoZSB3b3JkXShodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvOS4xL3N0YXRpYy9kZGwtc2NoZW1hcy5odG1sKSxcbiAgICogbm90IGEgZGF0YWJhc2UgdGFibGUuIEluIG15c3FsIGFuZCBzcWxpdGUsIHRoaXMgZHJvcCBhIHRhYmxlIG1hdGNoaW5nIHRoZSBzY2hlbWEgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NoZW1hIE5hbWUgb2YgdGhlIHNjaGVtYVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIHF1ZXJ5IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nXSBBIGZ1bmN0aW9uIHRoYXQgbG9ncyBzcWwgcXVlcmllcywgb3IgZmFsc2UgZm9yIG5vIGxvZ2dpbmdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBkcm9wU2NoZW1hKHNjaGVtYSwgb3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5SW50ZXJmYWNlKCkuZHJvcFNjaGVtYShzY2hlbWEsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyb3AgYWxsIHNjaGVtYXMuXG4gICAqXG4gICAqICoqTm90ZToqKiB0aGlzIGlzIGEgc2NoZW1hIGluIHRoZSBbcG9zdGdyZXMgc2Vuc2Ugb2YgdGhlIHdvcmRdKGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy85LjEvc3RhdGljL2RkbC1zY2hlbWFzLmh0bWwpLFxuICAgKiBub3QgYSBkYXRhYmFzZSB0YWJsZS4gSW4gbXlzcWwgYW5kIHNxbGl0ZSwgdGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBkcm9wIGFsbCB0YWJsZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gcXVlcnkgb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW58RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmddIEEgZnVuY3Rpb24gdGhhdCBsb2dzIHNxbCBxdWVyaWVzLCBvciBmYWxzZSBmb3Igbm8gbG9nZ2luZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGRyb3BBbGxTY2hlbWFzKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUludGVyZmFjZSgpLmRyb3BBbGxTY2hlbWFzKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgYWxsIGRlZmluZWQgbW9kZWxzIHRvIHRoZSBEQi5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBzeW5jIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mb3JjZT1mYWxzZV0gSWYgZm9yY2UgaXMgdHJ1ZSwgZWFjaCBNb2RlbCB3aWxsIHJ1biBgRFJPUCBUQUJMRSBJRiBFWElTVFNgLCBiZWZvcmUgaXQgdHJpZXMgdG8gY3JlYXRlIGl0cyBvd24gdGFibGVcbiAgICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLm1hdGNoXSBNYXRjaCBhIHJlZ2V4IGFnYWluc3QgdGhlIGRhdGFiYXNlIG5hbWUgYmVmb3JlIHN5bmNpbmcsIGEgc2FmZXR5IGNoZWNrIGZvciBjYXNlcyB3aGVyZSBmb3JjZTogdHJ1ZSBpcyB1c2VkIGluIHRlc3RzIGJ1dCBub3QgbGl2ZSBjb2RlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnxGdW5jdGlvbn0gW29wdGlvbnMubG9nZ2luZz1jb25zb2xlLmxvZ10gQSBmdW5jdGlvbiB0aGF0IGxvZ3Mgc3FsIHF1ZXJpZXMsIG9yIGZhbHNlIGZvciBubyBsb2dnaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zY2hlbWE9J3B1YmxpYyddIFRoZSBzY2hlbWEgdGhhdCB0aGUgdGFibGVzIHNob3VsZCBiZSBjcmVhdGVkIGluLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGZvciBlYWNoIHRhYmxlIGluIHNlcXVlbGl6ZS5kZWZpbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNlYXJjaFBhdGg9REVGQVVMVF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHNjaGVtYSBzZWFyY2hfcGF0aCAoUG9zdGdyZXMgb25seSlcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5ob29rcz10cnVlXSBJZiBob29rcyBpcyB0cnVlIHRoZW4gYmVmb3JlU3luYywgYWZ0ZXJTeW5jLCBiZWZvcmVCdWxrU3luYywgYWZ0ZXJCdWxrU3luYyBob29rcyB3aWxsIGJlIGNhbGxlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsdGVyPWZhbHNlXSBBbHRlcnMgdGFibGVzIHRvIGZpdCBtb2RlbHMuIE5vdCByZWNvbW1lbmRlZCBmb3IgcHJvZHVjdGlvbiB1c2UuIERlbGV0ZXMgZGF0YSBpbiBjb2x1bW5zIHRoYXQgd2VyZSByZW1vdmVkIG9yIGhhZCB0aGVpciB0eXBlIGNoYW5nZWQgaW4gdGhlIG1vZGVsLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHN5bmMob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBfLmNsb25lKG9wdGlvbnMpIHx8IHt9O1xuICAgIG9wdGlvbnMuaG9va3MgPSBvcHRpb25zLmhvb2tzID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRpb25zLmhvb2tzO1xuICAgIG9wdGlvbnMgPSBfLmRlZmF1bHRzKG9wdGlvbnMsIHRoaXMub3B0aW9ucy5zeW5jLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnMubWF0Y2gpIHtcbiAgICAgIGlmICghb3B0aW9ucy5tYXRjaC50ZXN0KHRoaXMuY29uZmlnLmRhdGFiYXNlKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYERhdGFiYXNlIFwiJHt0aGlzLmNvbmZpZy5kYXRhYmFzZX1cIiBkb2VzIG5vdCBtYXRjaCBzeW5jIG1hdGNoIHBhcmFtZXRlciBcIiR7b3B0aW9ucy5tYXRjaH1cImBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UudHJ5KCgpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkhvb2tzKFwiYmVmb3JlQnVsa1N5bmNcIiwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMuZm9yY2UpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2RlbHMgPSBbXTtcblxuICAgICAgICAvLyBUb3BvbG9naWNhbGx5IHNvcnQgYnkgZm9yZWlnbiBrZXkgY29uc3RyYWludHMgdG8gZ2l2ZSB1cyBhbiBhcHByb3ByaWF0ZVxuICAgICAgICAvLyBjcmVhdGlvbiBvcmRlclxuICAgICAgICB0aGlzLm1vZGVsTWFuYWdlci5mb3JFYWNoTW9kZWwobW9kZWwgPT4ge1xuICAgICAgICAgIGlmIChtb2RlbCkge1xuICAgICAgICAgICAgbW9kZWxzLnB1c2gobW9kZWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEQiBzaG91bGQgdGhyb3cgYW4gU1FMIGVycm9yIGlmIHJlZmVyZW5jaW5nIG5vbi1leGlzdGVudCB0YWJsZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gbm8gbW9kZWxzIGRlZmluZWQsIGp1c3QgYXV0aGVudGljYXRlXG4gICAgICAgIGlmICghbW9kZWxzLmxlbmd0aCkgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRlKG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmVhY2gobW9kZWxzLCBtb2RlbCA9PiBtb2RlbC5zeW5jKG9wdGlvbnMpKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zLmhvb2tzKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoXCJhZnRlckJ1bGtTeW5jXCIsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnJldHVybih0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnVuY2F0ZSBhbGwgdGFibGVzIGRlZmluZWQgdGhyb3VnaCB0aGUgc2VxdWVsaXplIG1vZGVscy5cbiAgICogVGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcgYE1vZGVsLnRydW5jYXRlKClgIG9uIGVhY2ggbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgcGFzc2VkIHRvIE1vZGVsLmRlc3Ryb3kgaW4gYWRkaXRpb24gdG8gdHJ1bmNhdGVcbiAgICogQHBhcmFtIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nXSBBIGZ1bmN0aW9uIHRoYXQgbG9ncyBzcWwgcXVlcmllcywgb3IgZmFsc2UgZm9yIG5vIGxvZ2dpbmdcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsLnRydW5jYXRlfSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuICAgKi9cbiAgdHJ1bmNhdGUob3B0aW9ucykge1xuICAgIGNvbnN0IG1vZGVscyA9IFtdO1xuXG4gICAgdGhpcy5tb2RlbE1hbmFnZXIuZm9yRWFjaE1vZGVsKFxuICAgICAgbW9kZWwgPT4ge1xuICAgICAgICBpZiAobW9kZWwpIHtcbiAgICAgICAgICBtb2RlbHMucHVzaChtb2RlbCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHJldmVyc2U6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgY29uc3QgdHJ1bmNhdGVNb2RlbCA9IG1vZGVsID0+IG1vZGVsLnRydW5jYXRlKG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jYXNjYWRlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5lYWNoKG1vZGVscywgdHJ1bmNhdGVNb2RlbCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLm1hcChtb2RlbHMsIHRydW5jYXRlTW9kZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyb3AgYWxsIHRhYmxlcyBkZWZpbmVkIHRocm91Z2ggdGhpcyBzZXF1ZWxpemUgaW5zdGFuY2UuXG4gICAqIFRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIE1vZGVsLmRyb3Agb24gZWFjaCBtb2RlbC5cbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuZHJvcH0gZm9yIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gZWFjaCBjYWxsIHRvIE1vZGVsLmRyb3BcbiAgICogQHBhcmFtIHtib29sZWFufEZ1bmN0aW9ufSBbb3B0aW9ucy5sb2dnaW5nXSBBIGZ1bmN0aW9uIHRoYXQgbG9ncyBzcWwgcXVlcmllcywgb3IgZmFsc2UgZm9yIG5vIGxvZ2dpbmdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBkcm9wKG9wdGlvbnMpIHtcbiAgICBjb25zdCBtb2RlbHMgPSBbXTtcblxuICAgIHRoaXMubW9kZWxNYW5hZ2VyLmZvckVhY2hNb2RlbChcbiAgICAgIG1vZGVsID0+IHtcbiAgICAgICAgaWYgKG1vZGVsKSB7XG4gICAgICAgICAgbW9kZWxzLnB1c2gobW9kZWwpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyByZXZlcnNlOiBmYWxzZSB9XG4gICAgKTtcblxuICAgIHJldHVybiBQcm9taXNlLmVhY2gobW9kZWxzLCBtb2RlbCA9PiBtb2RlbC5kcm9wKG9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0IHRoZSBjb25uZWN0aW9uIGJ5IHRyeWluZyB0byBhdXRoZW50aWNhdGUuIEl0IHJ1bnMgYFNFTEVDVCAxKzEgQVMgcmVzdWx0YCBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBxdWVyeSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgYXV0aGVudGljYXRlKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgcmF3OiB0cnVlLFxuICAgICAgICBwbGFpbjogdHJ1ZSxcbiAgICAgICAgdHlwZTogUXVlcnlUeXBlcy5TRUxFQ1RcbiAgICAgIH0sXG4gICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLnF1ZXJ5KFwiU0VMRUNUIDErMSBBUyByZXN1bHRcIiwgb3B0aW9ucykucmV0dXJuKCk7XG4gIH1cblxuICBkYXRhYmFzZVZlcnNpb24ob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5SW50ZXJmYWNlKCkuZGF0YWJhc2VWZXJzaW9uKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZm4gZm9yIHJhbmRvbSBiYXNlZCBvbiB0aGUgZGlhbGVjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VxdWVsaXplLmZufVxuICAgKi9cbiAgcmFuZG9tKCkge1xuICAgIGNvbnN0IGRpYSA9IHRoaXMuZ2V0RGlhbGVjdCgpO1xuICAgIGlmIChkaWEgPT09IFwicG9zdGdyZXNcIiB8fCBkaWEgPT09IFwic3FsaXRlXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmZuKFwiUkFORE9NXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mbihcIlJBTkRcIik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZGF0YWJhc2UgZnVuY3Rpb24uIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2VhcmNoIHF1ZXJpZXMsIGJvdGggaW4gd2hlcmUgYW5kIG9yZGVyIHBhcnRzLCBhbmQgYXMgZGVmYXVsdCB2YWx1ZXMgaW4gY29sdW1uIGRlZmluaXRpb25zLlxuICAgKiBJZiB5b3Ugd2FudCB0byByZWZlciB0byBjb2x1bW5zIGluIHlvdXIgZnVuY3Rpb24sIHlvdSBzaG91bGQgdXNlIGBzZXF1ZWxpemUuY29sYCwgc28gdGhhdCB0aGUgY29sdW1ucyBhcmUgcHJvcGVybHkgaW50ZXJwcmV0ZWQgYXMgY29sdW1ucyBhbmQgbm90IGEgc3RyaW5ncy5cbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuZmluZEFsbH1cbiAgICogQHNlZVxuICAgKiB7QGxpbmsgU2VxdWVsaXplLmRlZmluZX1cbiAgICogQHNlZVxuICAgKiB7QGxpbmsgU2VxdWVsaXplLmNvbH1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZuIFRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBjYWxsXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzIEFsbCBmdXJ0aGVyIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBzaW5jZSB2Mi4wLjAtZGV2M1xuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXG4gICAqIEByZXR1cm5zIHtTZXF1ZWxpemUuZm59XG4gICAqXG4gICAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbnZlcnQgYSB1c2VyJ3MgdXNlcm5hbWUgdG8gdXBwZXIgY2FzZTwvY2FwdGlvbj5cbiAgICogaW5zdGFuY2UudXBkYXRlKHtcbiAgICogICB1c2VybmFtZTogc2VxdWVsaXplLmZuKCd1cHBlcicsIHNlcXVlbGl6ZS5jb2woJ3VzZXJuYW1lJykpXG4gICAqIH0pO1xuICAgKi9cbiAgc3RhdGljIGZuKGZuLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIG5ldyBVdGlscy5GbihmbiwgYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyBhIGNvbHVtbiBpbiB0aGUgREIsIHRoaXMgYWxsb3dzIHJlZmVyZW5jaW5nIGFub3RoZXIgY29sdW1uIGluIHlvdXIgcXVlcnkuIFRoaXMgaXMgb2Z0ZW4gdXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGggYHNlcXVlbGl6ZS5mbmAsIHNpbmNlIHJhdyBzdHJpbmcgYXJndW1lbnRzIHRvIGZuIHdpbGwgYmUgZXNjYXBlZC5cbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgU2VxdWVsaXplI2ZufVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sIFRoZSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICogQHNpbmNlIHYyLjAuMC1kZXYzXG4gICAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcbiAgICpcbiAgICogQHJldHVybnMge1NlcXVlbGl6ZS5jb2x9XG4gICAqL1xuICBzdGF0aWMgY29sKGNvbCkge1xuICAgIHJldHVybiBuZXcgVXRpbHMuQ29sKGNvbCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgY2FsbCB0byB0aGUgY2FzdCBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbCBUaGUgdmFsdWUgdG8gY2FzdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgdHlwZSB0byBjYXN0IGl0IHRvXG4gICAqIEBzaW5jZSB2Mi4wLjAtZGV2M1xuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZXF1ZWxpemUuY2FzdH1cbiAgICovXG4gIHN0YXRpYyBjYXN0KHZhbCwgdHlwZSkge1xuICAgIHJldHVybiBuZXcgVXRpbHMuQ2FzdCh2YWwsIHR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGxpdGVyYWwsIGkuZS4gc29tZXRoaW5nIHRoYXQgd2lsbCBub3QgYmUgZXNjYXBlZC5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbCBsaXRlcmFsIHZhbHVlXG4gICAqIEBzaW5jZSB2Mi4wLjAtZGV2M1xuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZXF1ZWxpemUubGl0ZXJhbH1cbiAgICovXG4gIHN0YXRpYyBsaXRlcmFsKHZhbCkge1xuICAgIHJldHVybiBuZXcgVXRpbHMuTGl0ZXJhbCh2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIEFORCBxdWVyeVxuICAgKlxuICAgKiBAc2VlXG4gICAqIHtAbGluayBNb2RlbC5maW5kQWxsfVxuICAgKlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ3xPYmplY3R9IGFyZ3MgRWFjaCBhcmd1bWVudCB3aWxsIGJlIGpvaW5lZCBieSBBTkRcbiAgICogQHNpbmNlIHYyLjAuMC1kZXYzXG4gICAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcbiAgICpcbiAgICogQHJldHVybnMge1NlcXVlbGl6ZS5hbmR9XG4gICAqL1xuICBzdGF0aWMgYW5kKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4geyBbT3AuYW5kXTogYXJncyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIE9SIHF1ZXJ5XG4gICAqXG4gICAqIEBzZWVcbiAgICoge0BsaW5rIE1vZGVsLmZpbmRBbGx9XG4gICAqXG4gICAqIEBwYXJhbSB7Li4uc3RyaW5nfE9iamVjdH0gYXJncyBFYWNoIGFyZ3VtZW50IHdpbGwgYmUgam9pbmVkIGJ5IE9SXG4gICAqIEBzaW5jZSB2Mi4wLjAtZGV2M1xuICAgKiBAbWVtYmVyb2YgU2VxdWVsaXplXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZXF1ZWxpemUub3J9XG4gICAqL1xuICBzdGF0aWMgb3IoLi4uYXJncykge1xuICAgIHJldHVybiB7IFtPcC5vcl06IGFyZ3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRpbmcgbmVzdGVkIHdoZXJlIGNvbmRpdGlvbnMgZm9yIHBvc3RncmVzL3NxbGl0ZS9teXNxbCBqc29uIGRhdGEtdHlwZS5cbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuZmluZEFsbH1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBjb25kaXRpb25zT3JQYXRoIEEgaGFzaCBjb250YWluaW5nIHN0cmluZ3MvbnVtYmVycyBvciBvdGhlciBuZXN0ZWQgaGFzaCwgYSBzdHJpbmcgdXNpbmcgZG90IG5vdGF0aW9uIG9yIGEgc3RyaW5nIHVzaW5nIHBvc3RncmVzL3NxbGl0ZS9teXNxbCBqc29uIHN5bnRheC5cbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfGJvb2xlYW59IFt2YWx1ZV0gQW4gb3B0aW9uYWwgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0LiBQcm9kdWNlcyBhIHN0cmluZyBvZiB0aGUgZm9ybSBcIjxqc29uIHBhdGg+ID0gJzx2YWx1ZT4nXCIuXG4gICAqIEBtZW1iZXJvZiBTZXF1ZWxpemVcbiAgICpcbiAgICogQHJldHVybnMge1NlcXVlbGl6ZS5qc29ufVxuICAgKi9cbiAgc3RhdGljIGpzb24oY29uZGl0aW9uc09yUGF0aCwgdmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IFV0aWxzLkpzb24oY29uZGl0aW9uc09yUGF0aCwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgd2F5IG9mIHNwZWNpZnlpbmcgYXR0ciA9IGNvbmRpdGlvbi5cbiAgICpcbiAgICogVGhlIGF0dHIgY2FuIGVpdGhlciBiZSBhbiBvYmplY3QgdGFrZW4gZnJvbSBgTW9kZWwucmF3QXR0cmlidXRlc2AgKGZvciBleGFtcGxlIGBNb2RlbC5yYXdBdHRyaWJ1dGVzLmlkYCBvciBgTW9kZWwucmF3QXR0cmlidXRlcy5uYW1lYCkuIFRoZVxuICAgKiBhdHRyaWJ1dGUgc2hvdWxkIGJlIGRlZmluZWQgaW4geW91ciBtb2RlbCBkZWZpbml0aW9uLiBUaGUgYXR0cmlidXRlIGNhbiBhbHNvIGJlIGFuIG9iamVjdCBmcm9tIG9uZSBvZiB0aGUgc2VxdWVsaXplIHV0aWxpdHkgZnVuY3Rpb25zIChgc2VxdWVsaXplLmZuYCwgYHNlcXVlbGl6ZS5jb2xgIGV0Yy4pXG4gICAqXG4gICAqIEZvciBzdHJpbmcgYXR0cmlidXRlcywgdXNlIHRoZSByZWd1bGFyIGB7IHdoZXJlOiB7IGF0dHI6IHNvbWV0aGluZyB9fWAgc3ludGF4LiBJZiB5b3UgZG9uJ3Qgd2FudCB5b3VyIHN0cmluZyB0byBiZSBlc2NhcGVkLCB1c2UgYHNlcXVlbGl6ZS5saXRlcmFsYC5cbiAgICpcbiAgICogQHNlZVxuICAgKiB7QGxpbmsgTW9kZWwuZmluZEFsbH1cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGF0dHIgVGhlIGF0dHJpYnV0ZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBhbiBhdHRyaWJ1dGUgb2JqZWN0IGZyb20gYE1vZGVsLnJhd0F0dHJpYnV0ZXNgIG9yIGEgc2VxdWVsaXplIG9iamVjdCwgZm9yIGV4YW1wbGUgYW4gaW5zdGFuY2Ugb2YgYHNlcXVlbGl6ZS5mbmAuIEZvciBzaW1wbGUgc3RyaW5nIGF0dHJpYnV0ZXMsIHVzZSB0aGUgUE9KTyBzeW50YXhcbiAgICogQHBhcmFtIHtTeW1ib2x9IFtjb21wYXJhdG9yPSdPcC5lcSddIG9wZXJhdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gbG9naWMgVGhlIGNvbmRpdGlvbi4gQ2FuIGJlIGJvdGggYSBzaW1wbHkgdHlwZSwgb3IgYSBmdXJ0aGVyIGNvbmRpdGlvbiAoYG9yYCwgYGFuZGAsIGAubGl0ZXJhbGAgZXRjLilcbiAgICogQHNpbmNlIHYyLjAuMC1kZXYzXG4gICAqL1xuICBzdGF0aWMgd2hlcmUoYXR0ciwgY29tcGFyYXRvciwgbG9naWMpIHtcbiAgICByZXR1cm4gbmV3IFV0aWxzLldoZXJlKGF0dHIsIGNvbXBhcmF0b3IsIGxvZ2ljKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIHRyYW5zYWN0aW9uLiBXaGVuIHVzaW5nIHRyYW5zYWN0aW9ucywgeW91IHNob3VsZCBwYXNzIHRoZSB0cmFuc2FjdGlvbiBpbiB0aGUgb3B0aW9ucyBhcmd1bWVudCBpbiBvcmRlciBmb3IgdGhlIHF1ZXJ5IHRvIGhhcHBlbiB1bmRlciB0aGF0IHRyYW5zYWN0aW9uIEBzZWUge0BsaW5rIFRyYW5zYWN0aW9ufVxuICAgKlxuICAgKiBJZiB5b3UgaGF2ZSBbQ0xTXShodHRwczovL2dpdGh1Yi5jb20vb3RoaXltMjMvbm9kZS1jb250aW51YXRpb24tbG9jYWwtc3RvcmFnZSkgZW5hYmxlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBiZSBwYXNzZWQgdG8gYW55IHF1ZXJ5IHRoYXQgcnVucyB3aXRoaW4gdGhlIGNhbGxiYWNrXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHNlcXVlbGl6ZS50cmFuc2FjdGlvbigpLnRoZW4odHJhbnNhY3Rpb24gPT4ge1xuICAgKiAgIHJldHVybiBVc2VyLmZpbmRPbmUoLi4uLCB7dHJhbnNhY3Rpb259KVxuICAgKiAgICAgLnRoZW4odXNlciA9PiB1c2VyLnVwZGF0ZSguLi4sIHt0cmFuc2FjdGlvbn0pKVxuICAgKiAgICAgLnRoZW4oKCkgPT4gdHJhbnNhY3Rpb24uY29tbWl0KCkpXG4gICAqICAgICAuY2F0Y2goKCkgPT4gdHJhbnNhY3Rpb24ucm9sbGJhY2soKSk7XG4gICAqIH0pXG4gICAqXG4gICAqIEBleGFtcGxlIDxjYXB0aW9uPkEgc3ludGF4IGZvciBhdXRvbWF0aWNhbGx5IGNvbW1pdHRpbmcgb3Igcm9sbGluZyBiYWNrIGJhc2VkIG9uIHRoZSBwcm9taXNlIGNoYWluIHJlc29sdXRpb24gaXMgYWxzbyBzdXBwb3J0ZWQ8L2NhcHRpb24+XG4gICAqXG4gICAqIHNlcXVlbGl6ZS50cmFuc2FjdGlvbih0cmFuc2FjdGlvbiA9PiB7IC8vIE5vdGUgdGhhdCB3ZSB1c2UgYSBjYWxsYmFjayByYXRoZXIgdGhhbiBhIHByb21pc2UudGhlbigpXG4gICAqICAgcmV0dXJuIFVzZXIuZmluZE9uZSguLi4sIHt0cmFuc2FjdGlvbn0pXG4gICAqICAgICAudGhlbih1c2VyID0+IHVzZXIudXBkYXRlKC4uLiwge3RyYW5zYWN0aW9ufSkpXG4gICAqIH0pLnRoZW4oKCkgPT4ge1xuICAgKiAgIC8vIENvbW1pdHRlZFxuICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgKiAgIC8vIFJvbGxlZCBiYWNrXG4gICAqICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+VG8gZW5hYmxlIENMUywgYWRkIGl0IGRvIHlvdXIgcHJvamVjdCwgY3JlYXRlIGEgbmFtZXNwYWNlIGFuZCBzZXQgaXQgb24gdGhlIHNlcXVlbGl6ZSBjb25zdHJ1Y3Rvcjo8L2NhcHRpb24+XG4gICAqXG4gICAqIGNvbnN0IGNscyA9IHJlcXVpcmUoJ2NvbnRpbnVhdGlvbi1sb2NhbC1zdG9yYWdlJyk7XG4gICAqIGNvbnN0IG5zID0gY2xzLmNyZWF0ZU5hbWVzcGFjZSgnLi4uLicpO1xuICAgKiBjb25zdCBTZXF1ZWxpemUgPSByZXF1aXJlKCdzZXF1ZWxpemUnKTtcbiAgICogU2VxdWVsaXplLnVzZUNMUyhucyk7XG4gICAqXG4gICAqIC8vIE5vdGUsIHRoYXQgQ0xTIGlzIGVuYWJsZWQgZm9yIGFsbCBzZXF1ZWxpemUgaW5zdGFuY2VzLCBhbmQgYWxsIGluc3RhbmNlcyB3aWxsIHNoYXJlIHRoZSBzYW1lIG5hbWVzcGFjZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9uc10gVHJhbnNhY3Rpb24gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy50eXBlPSdERUZFUlJFRCddIFNlZSBgU2VxdWVsaXplLlRyYW5zYWN0aW9uLlRZUEVTYCBmb3IgcG9zc2libGUgb3B0aW9ucy4gU3FsaXRlIG9ubHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgIFtvcHRpb25zLmlzb2xhdGlvbkxldmVsXSBTZWUgYFNlcXVlbGl6ZS5UcmFuc2FjdGlvbi5JU09MQVRJT05fTEVWRUxTYCBmb3IgcG9zc2libGUgb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy5kZWZlcnJhYmxlXSBTZXRzIHRoZSBjb25zdHJhaW50cyB0byBiZSBkZWZlcnJlZCBvciBpbW1lZGlhdGVseSBjaGVja2VkLiBTZWUgYFNlcXVlbGl6ZS5EZWZlcnJhYmxlYC4gUG9zdGdyZVNRTCBPbmx5XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmxvZ2dpbmc9ZmFsc2VdIEEgZnVuY3Rpb24gdGhhdCBnZXRzIGV4ZWN1dGVkIHdoaWxlIHJ1bm5pbmcgdGhlIHF1ZXJ5IHRvIGxvZyB0aGUgc3FsLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbYXV0b0NhbGxiYWNrXSBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggdGhlIHRyYW5zYWN0aW9uIG9iamVjdCwgYW5kIHNob3VsZCByZXR1cm4gYSBwcm9taXNlLiBJZiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCwgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdHM7IGlmIHRoZSBwcm9taXNlIHJlamVjdHMsIHRoZSB0cmFuc2FjdGlvbiByb2xscyBiYWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgdHJhbnNhY3Rpb24ob3B0aW9ucywgYXV0b0NhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGF1dG9DYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFhdXRvQ2FsbGJhY2spXG4gICAgICByZXR1cm4gdHJhbnNhY3Rpb24ucHJlcGFyZUVudmlyb25tZW50KGZhbHNlKS5yZXR1cm4odHJhbnNhY3Rpb24pO1xuXG4gICAgLy8gYXV0b0NhbGxiYWNrIHByb3ZpZGVkXG4gICAgcmV0dXJuIFNlcXVlbGl6ZS5fY2xzUnVuKCgpID0+IHtcbiAgICAgIHJldHVybiB0cmFuc2FjdGlvblxuICAgICAgICAucHJlcGFyZUVudmlyb25tZW50KClcbiAgICAgICAgLnRoZW4oKCkgPT4gYXV0b0NhbGxiYWNrKHRyYW5zYWN0aW9uKSlcbiAgICAgICAgLnRhcCgoKSA9PiB0cmFuc2FjdGlvbi5jb21taXQoKSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgLy8gUm9sbGJhY2sgdHJhbnNhY3Rpb24gaWYgbm90IGFscmVhZHkgZmluaXNoZWQgKGNvbW1pdCwgcm9sbGJhY2ssIGV0YylcbiAgICAgICAgICAvLyBhbmQgcmVqZWN0IHdpdGggb3JpZ2luYWwgZXJyb3IgKGlnbm9yZSBhbnkgZXJyb3IgaW4gcm9sbGJhY2spXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UudHJ5KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdHJhbnNhY3Rpb24uZmluaXNoZWQpXG4gICAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbi5yb2xsYmFjaygpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgICB9KS50aHJvdyhlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgQ0xTIHdpdGggU2VxdWVsaXplLlxuICAgKiBDTFMgbmFtZXNwYWNlIHByb3ZpZGVkIGlzIHN0b3JlZCBhcyBgU2VxdWVsaXplLl9jbHNgXG4gICAqIGFuZCBibHVlYmlyZCBQcm9taXNlIGlzIHBhdGNoZWQgdG8gdXNlIHRoZSBuYW1lc3BhY2UsIHVzaW5nIGBjbHMtYmx1ZWJpcmRgIG1vZHVsZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG5zIENMUyBuYW1lc3BhY2VcbiAgICogQHJldHVybnMge09iamVjdH0gU2VxdWVsaXplIGNvbnN0cnVjdG9yXG4gICAqL1xuICBzdGF0aWMgdXNlQ0xTKG5zKSB7XG4gICAgLy8gY2hlY2sgYG5zYCBpcyB2YWxpZCBDTFMgbmFtZXNwYWNlXG4gICAgaWYgKFxuICAgICAgIW5zIHx8XG4gICAgICB0eXBlb2YgbnMgIT09IFwib2JqZWN0XCIgfHxcbiAgICAgIHR5cGVvZiBucy5iaW5kICE9PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgIHR5cGVvZiBucy5ydW4gIT09IFwiZnVuY3Rpb25cIlxuICAgIClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgcHJvdmlkZSBDTFMgbmFtZXNwYWNlXCIpO1xuXG4gICAgLy8gc2F2ZSBuYW1lc3BhY2UgYXMgYFNlcXVlbGl6ZS5fY2xzYFxuICAgIHRoaXMuX2NscyA9IG5zO1xuXG4gICAgLy8gcGF0Y2ggYmx1ZWJpcmQgdG8gYmluZCBhbGwgcHJvbWlzZSBjYWxsYmFja3MgdG8gQ0xTIG5hbWVzcGFjZVxuICAgIGNsc0JsdWViaXJkKG5zLCBQcm9taXNlKTtcblxuICAgIC8vIHJldHVybiBTZXF1ZWxpemUgZm9yIGNoYWluaW5nXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUnVuIGZ1bmN0aW9uIGluIENMUyBjb250ZXh0LlxuICAgKiBJZiBubyBDTFMgY29udGV4dCBpbiB1c2UsIGp1c3QgcnVucyB0aGUgZnVuY3Rpb24gbm9ybWFsbHlcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gcnVuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb25cbiAgICovXG4gIHN0YXRpYyBfY2xzUnVuKGZuKSB7XG4gICAgY29uc3QgbnMgPSBTZXF1ZWxpemUuX2NscztcbiAgICBpZiAoIW5zKSByZXR1cm4gZm4oKTtcblxuICAgIGxldCByZXM7XG4gICAgbnMucnVuKGNvbnRleHQgPT4gKHJlcyA9IGZuKGNvbnRleHQpKSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGxvZyguLi5hcmdzKSB7XG4gICAgbGV0IG9wdGlvbnM7XG5cbiAgICBjb25zdCBsYXN0ID0gXy5sYXN0KGFyZ3MpO1xuXG4gICAgaWYgKFxuICAgICAgbGFzdCAmJlxuICAgICAgXy5pc1BsYWluT2JqZWN0KGxhc3QpICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGFzdCwgXCJsb2dnaW5nXCIpXG4gICAgKSB7XG4gICAgICBvcHRpb25zID0gbGFzdDtcblxuICAgICAgLy8gcmVtb3ZlIG9wdGlvbnMgZnJvbSBzZXQgb2YgbG9nZ2VkIGFyZ3VtZW50cyBpZiBvcHRpb25zLmxvZ2dpbmcgaXMgZXF1YWwgdG8gY29uc29sZS5sb2dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nID09PSBjb25zb2xlLmxvZykge1xuICAgICAgICBhcmdzLnNwbGljZShhcmdzLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmxvZ2dpbmcpIHtcbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmcgPT09IHRydWUpIHtcbiAgICAgICAgZGVwcmVjYXRpb25zLm5vVHJ1ZUxvZ2dpbmcoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgb3B0aW9ucy5sb2dnaW5nID0gY29uc29sZS5sb2c7XG4gICAgICB9XG5cbiAgICAgIC8vIHNlY29uZCBhcmd1bWVudCBpcyBzcWwtdGltaW5ncywgd2hlbiBiZW5jaG1hcmtpbmcgb3B0aW9uIGVuYWJsZWRcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoXG4gICAgICAgICh0aGlzLm9wdGlvbnMuYmVuY2htYXJrIHx8IG9wdGlvbnMuYmVuY2htYXJrKSAmJlxuICAgICAgICBvcHRpb25zLmxvZ2dpbmcgPT09IGNvbnNvbGUubG9nXG4gICAgICApIHtcbiAgICAgICAgYXJncyA9IFtgJHthcmdzWzBdfSBFbGFwc2VkIHRpbWU6ICR7YXJnc1sxXX1tc2BdO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLmxvZ2dpbmcoLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGFsbCBjb25uZWN0aW9ucyB1c2VkIGJ5IHRoaXMgc2VxdWVsaXplIGluc3RhbmNlLCBhbmQgZnJlZSBhbGwgcmVmZXJlbmNlcyBzbyB0aGUgaW5zdGFuY2UgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuICAgKlxuICAgKiBOb3JtYWxseSB0aGlzIGlzIGRvbmUgb24gcHJvY2VzcyBleGl0LCBzbyB5b3Ugb25seSBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgaWYgeW91IGFyZSBjcmVhdGluZyBtdWx0aXBsZSBpbnN0YW5jZXMsIGFuZCB3YW50XG4gICAqIHRvIGdhcmJhZ2UgY29sbGVjdCBzb21lIG9mIHRoZW0uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuY2xvc2UoKTtcbiAgfVxuXG4gIG5vcm1hbGl6ZURhdGFUeXBlKFR5cGUpIHtcbiAgICBsZXQgdHlwZSA9IHR5cGVvZiBUeXBlID09PSBcImZ1bmN0aW9uXCIgPyBuZXcgVHlwZSgpIDogVHlwZTtcbiAgICBjb25zdCBkaWFsZWN0VHlwZXMgPSB0aGlzLmRpYWxlY3QuRGF0YVR5cGVzIHx8IHt9O1xuXG4gICAgaWYgKGRpYWxlY3RUeXBlc1t0eXBlLmtleV0pIHtcbiAgICAgIHR5cGUgPSBkaWFsZWN0VHlwZXNbdHlwZS5rZXldLmV4dGVuZCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5BUlJBWSkge1xuICAgICAgaWYgKCF0eXBlLnR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQVJSQVkgaXMgbWlzc2luZyB0eXBlIGRlZmluaXRpb24gZm9yIGl0cyB2YWx1ZXMuXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGRpYWxlY3RUeXBlc1t0eXBlLnR5cGUua2V5XSkge1xuICAgICAgICB0eXBlLnR5cGUgPSBkaWFsZWN0VHlwZXNbdHlwZS50eXBlLmtleV0uZXh0ZW5kKHR5cGUudHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBub3JtYWxpemVBdHRyaWJ1dGUoYXR0cmlidXRlKSB7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoYXR0cmlidXRlKSkge1xuICAgICAgYXR0cmlidXRlID0geyB0eXBlOiBhdHRyaWJ1dGUgfTtcbiAgICB9XG5cbiAgICBpZiAoIWF0dHJpYnV0ZS50eXBlKSByZXR1cm4gYXR0cmlidXRlO1xuXG4gICAgYXR0cmlidXRlLnR5cGUgPSB0aGlzLm5vcm1hbGl6ZURhdGFUeXBlKGF0dHJpYnV0ZS50eXBlKTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXR0cmlidXRlLCBcImRlZmF1bHRWYWx1ZVwiKSkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgYXR0cmlidXRlLmRlZmF1bHRWYWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIChhdHRyaWJ1dGUuZGVmYXVsdFZhbHVlID09PSBEYXRhVHlwZXMuTk9XIHx8XG4gICAgICAgICAgYXR0cmlidXRlLmRlZmF1bHRWYWx1ZSA9PT0gRGF0YVR5cGVzLlVVSURWMSB8fFxuICAgICAgICAgIGF0dHJpYnV0ZS5kZWZhdWx0VmFsdWUgPT09IERhdGFUeXBlcy5VVUlEVjQpXG4gICAgICApIHtcbiAgICAgICAgYXR0cmlidXRlLmRlZmF1bHRWYWx1ZSA9IG5ldyBhdHRyaWJ1dGUuZGVmYXVsdFZhbHVlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGF0dHJpYnV0ZS50eXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLkVOVU0pIHtcbiAgICAgIC8vIFRoZSBFTlVNIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSB0eXBlIGlzIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSB2YWx1ZXNcbiAgICAgIGlmIChhdHRyaWJ1dGUudmFsdWVzKSB7XG4gICAgICAgIGF0dHJpYnV0ZS50eXBlLnZhbHVlcyA9IGF0dHJpYnV0ZS50eXBlLm9wdGlvbnMudmFsdWVzID1cbiAgICAgICAgICBhdHRyaWJ1dGUudmFsdWVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlLnZhbHVlcyA9IGF0dHJpYnV0ZS50eXBlLnZhbHVlcztcbiAgICAgIH1cblxuICAgICAgaWYgKCFhdHRyaWJ1dGUudmFsdWVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWYWx1ZXMgZm9yIEVOVU0gaGF2ZSBub3QgYmVlbiBkZWZpbmVkLlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlO1xuICB9XG59XG5cbi8vIEFsaWFzZXNcblNlcXVlbGl6ZS5wcm90b3R5cGUuZm4gPSBTZXF1ZWxpemUuZm47XG5TZXF1ZWxpemUucHJvdG90eXBlLmNvbCA9IFNlcXVlbGl6ZS5jb2w7XG5TZXF1ZWxpemUucHJvdG90eXBlLmNhc3QgPSBTZXF1ZWxpemUuY2FzdDtcblNlcXVlbGl6ZS5wcm90b3R5cGUubGl0ZXJhbCA9IFNlcXVlbGl6ZS5saXRlcmFsO1xuU2VxdWVsaXplLnByb3RvdHlwZS5hbmQgPSBTZXF1ZWxpemUuYW5kO1xuU2VxdWVsaXplLnByb3RvdHlwZS5vciA9IFNlcXVlbGl6ZS5vcjtcblNlcXVlbGl6ZS5wcm90b3R5cGUuanNvbiA9IFNlcXVlbGl6ZS5qc29uO1xuU2VxdWVsaXplLnByb3RvdHlwZS53aGVyZSA9IFNlcXVlbGl6ZS53aGVyZTtcblNlcXVlbGl6ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBTZXF1ZWxpemUucHJvdG90eXBlLmF1dGhlbnRpY2F0ZTtcblxuLyoqXG4gKiBTZXF1ZWxpemUgdmVyc2lvbiBudW1iZXIuXG4gKi9cblNlcXVlbGl6ZS52ZXJzaW9uID0gcmVxdWlyZShcIi4uL3BhY2thZ2UuanNvblwiKS52ZXJzaW9uO1xuXG5TZXF1ZWxpemUub3B0aW9ucyA9IHsgaG9va3M6IHt9IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuU2VxdWVsaXplLlV0aWxzID0gVXRpbHM7XG5cbi8qKlxuICogT3BlcmF0b3JzIHN5bWJvbHMgdG8gYmUgdXNlZCBmb3IgcXVlcnlpbmcgZGF0YVxuICogQHNlZSAge0BsaW5rIE9wZXJhdG9yc31cbiAqL1xuU2VxdWVsaXplLk9wID0gT3A7XG5cbi8qKlxuICogQSBoYW5keSByZWZlcmVuY2UgdG8gdGhlIGJsdWViaXJkIFByb21pc2UgY2xhc3NcbiAqL1xuU2VxdWVsaXplLlByb21pc2UgPSBQcm9taXNlO1xuXG4vKipcbiAqIEF2YWlsYWJsZSB0YWJsZSBoaW50cyB0byBiZSB1c2VkIGZvciBxdWVyeWluZyBkYXRhIGluIG1zc3FsIGZvciB0YWJsZSBoaW50c1xuICogQHNlZSB7QGxpbmsgVGFibGVIaW50c31cbiAqL1xuU2VxdWVsaXplLlRhYmxlSGludHMgPSBUYWJsZUhpbnRzO1xuXG4vKipcbiAqIEF2YWlsYWJsZSBpbmRleCBoaW50cyB0byBiZSB1c2VkIGZvciBxdWVyeWluZyBkYXRhIGluIG15c3FsIGZvciBpbmRleCBoaW50c1xuICogQHNlZSB7QGxpbmsgSW5kZXhIaW50c31cbiAqL1xuU2VxdWVsaXplLkluZGV4SGludHMgPSBJbmRleEhpbnRzO1xuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSBzZXF1ZWxpemUgdHJhbnNhY3Rpb24gY2xhc3MuIFVzZSB0aGlzIHRvIGFjY2VzcyBpc29sYXRpb25MZXZlbHMgYW5kIHR5cGVzIHdoZW4gY3JlYXRpbmcgYSB0cmFuc2FjdGlvblxuICogQHNlZSB7QGxpbmsgVHJhbnNhY3Rpb259XG4gKiBAc2VlIHtAbGluayBTZXF1ZWxpemUudHJhbnNhY3Rpb259XG4gKi9cblNlcXVlbGl6ZS5UcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uO1xuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIFNlcXVlbGl6ZSBjb25zdHJ1Y3RvciBmcm9tIHNlcXVlbGl6ZS4gVXNlZnVsIGZvciBhY2Nlc3NpbmcgRGF0YVR5cGVzLCBFcnJvcnMgZXRjLlxuICogQHNlZSB7QGxpbmsgU2VxdWVsaXplfVxuICovXG5TZXF1ZWxpemUucHJvdG90eXBlLlNlcXVlbGl6ZSA9IFNlcXVlbGl6ZTtcblxuLyoqXG4gKiBBdmFpbGFibGUgcXVlcnkgdHlwZXMgZm9yIHVzZSB3aXRoIGBzZXF1ZWxpemUucXVlcnlgXG4gKiBAc2VlIHtAbGluayBRdWVyeVR5cGVzfVxuICovXG5TZXF1ZWxpemUucHJvdG90eXBlLlF1ZXJ5VHlwZXMgPSBTZXF1ZWxpemUuUXVlcnlUeXBlcyA9IFF1ZXJ5VHlwZXM7XG5cbi8qKlxuICogRXhwb3NlcyB0aGUgdmFsaWRhdG9yLmpzIG9iamVjdCwgc28geW91IGNhbiBleHRlbmQgaXQgd2l0aCBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIFRoZSB2YWxpZGF0b3IgaXMgZXhwb3NlZCBib3RoIG9uIHRoZSBpbnN0YW5jZSwgYW5kIG9uIHRoZSBjb25zdHJ1Y3Rvci5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nocmlzby92YWxpZGF0b3IuanNcbiAqL1xuU2VxdWVsaXplLnByb3RvdHlwZS5WYWxpZGF0b3IgPSBTZXF1ZWxpemUuVmFsaWRhdG9yID0gVmFsaWRhdG9yO1xuXG5TZXF1ZWxpemUuTW9kZWwgPSBNb2RlbDtcblxuU2VxdWVsaXplLkRhdGFUeXBlcyA9IERhdGFUeXBlcztcbmZvciAoY29uc3QgZGF0YVR5cGUgaW4gRGF0YVR5cGVzKSB7XG4gIFNlcXVlbGl6ZVtkYXRhVHlwZV0gPSBEYXRhVHlwZXNbZGF0YVR5cGVdO1xufVxuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSBkZWZlcnJhYmxlIGNvbGxlY3Rpb24uIFVzZSB0aGlzIHRvIGFjY2VzcyB0aGUgZGlmZmVyZW50IGRlZmVycmFibGUgb3B0aW9ucy5cbiAqIEBzZWUge0BsaW5rIFRyYW5zYWN0aW9uLkRlZmVycmFibGV9XG4gKiBAc2VlIHtAbGluayBTZXF1ZWxpemUjdHJhbnNhY3Rpb259XG4gKi9cblNlcXVlbGl6ZS5EZWZlcnJhYmxlID0gRGVmZXJyYWJsZTtcblxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byB0aGUgc2VxdWVsaXplIGFzc29jaWF0aW9uIGNsYXNzLlxuICogQHNlZSB7QGxpbmsgQXNzb2NpYXRpb259XG4gKi9cblNlcXVlbGl6ZS5wcm90b3R5cGUuQXNzb2NpYXRpb24gPSBTZXF1ZWxpemUuQXNzb2NpYXRpb24gPSBBc3NvY2lhdGlvbjtcblxuLyoqXG4gKiBQcm92aWRlIGFsdGVybmF0aXZlIHZlcnNpb24gb2YgYGluZmxlY3Rpb25gIG1vZHVsZSB0byBiZSB1c2VkIGJ5IGBVdGlscy5wbHVyYWxpemVgIGV0Yy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBfaW5mbGVjdGlvbiAtIGBpbmZsZWN0aW9uYCBtb2R1bGVcbiAqL1xuU2VxdWVsaXplLnVzZUluZmxlY3Rpb24gPSBVdGlscy51c2VJbmZsZWN0aW9uO1xuXG4vKipcbiAqIEFsbG93IGhvb2tzIHRvIGJlIGRlZmluZWQgb24gU2VxdWVsaXplICsgb24gc2VxdWVsaXplIGluc3RhbmNlIGFzIHVuaXZlcnNhbCBob29rcyB0byBydW4gb24gYWxsIG1vZGVsc1xuICogYW5kIG9uIFNlcXVlbGl6ZS9zZXF1ZWxpemUgbWV0aG9kcyBlLmcuIFNlcXVlbGl6ZSgpLCBTZXF1ZWxpemUjZGVmaW5lKClcbiAqL1xuSG9va3MuYXBwbHlUbyhTZXF1ZWxpemUpO1xuSG9va3MuYXBwbHlUbyhTZXF1ZWxpemUucHJvdG90eXBlKTtcblxuLyoqXG4gKiBFeHBvc2UgdmFyaW91cyBlcnJvcnMgYXZhaWxhYmxlXG4gKi9cblxuLy8gZXhwb3NlIGFsaWFzIHRvIEJhc2VFcnJvclxuU2VxdWVsaXplLkVycm9yID0gc2VxdWVsaXplRXJyb3JzLkJhc2VFcnJvcjtcblxuZm9yIChjb25zdCBlcnJvciBvZiBPYmplY3Qua2V5cyhzZXF1ZWxpemVFcnJvcnMpKSB7XG4gIFNlcXVlbGl6ZVtlcnJvcl0gPSBzZXF1ZWxpemVFcnJvcnNbZXJyb3JdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlcXVlbGl6ZTtcbm1vZHVsZS5leHBvcnRzLlNlcXVlbGl6ZSA9IFNlcXVlbGl6ZTtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBTZXF1ZWxpemU7XG4iXX0= \ No newline at end of file diff --git a/dist/sql-string.js b/dist/sql-string.js index 3e5e182..538f332 100644 --- a/dist/sql-string.js +++ b/dist/sql-string.js @@ -157,4 +157,4 @@ function formatNamedParameters(sql, values, timeZone, dialect) { } exports.formatNamedParameters = formatNamedParameters; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9zcWwtc3RyaW5nLmpzIl0sIm5hbWVzIjpbImRhdGFUeXBlcyIsInJlcXVpcmUiLCJsb2dnZXIiLCJhcnJheVRvTGlzdCIsImFycmF5IiwidGltZVpvbmUiLCJkaWFsZWN0IiwiZm9ybWF0IiwicmVkdWNlIiwic3FsIiwidmFsIiwiaSIsIkFycmF5IiwiaXNBcnJheSIsImVzY2FwZSIsImV4cG9ydHMiLCJwcmVwZW5kTiIsInVuZGVmaW5lZCIsInRvU3RyaW5nIiwiRGF0ZSIsIkRBVEUiLCJwcm90b3R5cGUiLCJzdHJpbmdpZnkiLCJ0aW1lem9uZSIsIkJ1ZmZlciIsImlzQnVmZmVyIiwiQkxPQiIsInBhcnRpYWxFc2NhcGUiLCJlc2NWYWwiLCJBUlJBWSIsInJlcGxhY2UiLCJFcnJvciIsImluc3BlY3QiLCJzIiwidmFsdWVzIiwiY29uY2F0IiwibWF0Y2giLCJsZW5ndGgiLCJzaGlmdCIsImZvcm1hdE5hbWVkUGFyYW1ldGVycyIsInZhbHVlIiwia2V5Iiwic2xpY2UiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWFELE9BQU8sQ0FBQyxnQkFBRCxDQUExQjs7QUFFQSxTQUFTRSxXQUFULENBQXFCQyxLQUFyQixFQUE0QkMsUUFBNUIsRUFBc0NDLE9BQXRDLEVBQStDQyxNQUEvQyxFQUF1RDtBQUNyRCxTQUFPSCxLQUFLLENBQUNJLE1BQU4sQ0FBYSxDQUFDQyxHQUFELEVBQU1DLEdBQU4sRUFBV0MsQ0FBWCxLQUFpQjtBQUNuQyxRQUFJQSxDQUFDLEtBQUssQ0FBVixFQUFhO0FBQ1hGLE1BQUFBLEdBQUcsSUFBSSxJQUFQO0FBQ0Q7O0FBQ0QsUUFBSUcsS0FBSyxDQUFDQyxPQUFOLENBQWNILEdBQWQsQ0FBSixFQUF3QjtBQUN0QkQsTUFBQUEsR0FBRyxJQUFLLElBQUdOLFdBQVcsQ0FBQ08sR0FBRCxFQUFNTCxRQUFOLEVBQWdCQyxPQUFoQixFQUF5QkMsTUFBekIsQ0FBaUMsR0FBdkQ7QUFDRCxLQUZELE1BRU87QUFDTEUsTUFBQUEsR0FBRyxJQUFJSyxNQUFNLENBQUNKLEdBQUQsRUFBTUwsUUFBTixFQUFnQkMsT0FBaEIsRUFBeUJDLE1BQXpCLENBQWI7QUFDRDs7QUFDRCxXQUFPRSxHQUFQO0FBQ0QsR0FWTSxFQVVKLEVBVkksQ0FBUDtBQVdEOztBQUNETSxPQUFPLENBQUNaLFdBQVIsR0FBc0JBLFdBQXRCOztBQUVBLFNBQVNXLE1BQVQsQ0FBZ0JKLEdBQWhCLEVBQXFCTCxRQUFyQixFQUErQkMsT0FBL0IsRUFBd0NDLE1BQXhDLEVBQWdEO0FBQzlDLE1BQUlTLFFBQVEsR0FBRyxLQUFmOztBQUNBLE1BQUlOLEdBQUcsS0FBS08sU0FBUixJQUFxQlAsR0FBRyxLQUFLLElBQWpDLEVBQXVDO0FBQ3JDLFdBQU8sTUFBUDtBQUNEOztBQUNELFVBQVEsT0FBT0EsR0FBZjtBQUNFLFNBQUssU0FBTDtBQUNBO0FBQ0E7QUFDQTtBQUNFLFVBQUlKLE9BQU8sS0FBSyxRQUFaLElBQXdCQSxPQUFPLEtBQUssT0FBeEMsRUFBaUQ7QUFDL0MsZUFBTyxDQUFDLENBQUMsQ0FBQ0ksR0FBVjtBQUNEOztBQUNELGFBQU8sQ0FBQyxDQUFDLENBQUNBLEdBQUgsRUFBUVEsUUFBUixFQUFQOztBQUNGLFNBQUssUUFBTDtBQUNFLGFBQU9SLEdBQUcsQ0FBQ1EsUUFBSixFQUFQOztBQUNGLFNBQUssUUFBTDtBQUNBO0FBQ0E7QUFDRUYsTUFBQUEsUUFBUSxHQUFHVixPQUFPLEtBQUssT0FBdkI7QUFDQTtBQWZKOztBQWtCQSxNQUFJSSxHQUFHLFlBQVlTLElBQW5CLEVBQXlCO0FBQ3ZCVCxJQUFBQSxHQUFHLEdBQUdWLFNBQVMsQ0FBQ00sT0FBRCxDQUFULENBQW1CYyxJQUFuQixDQUF3QkMsU0FBeEIsQ0FBa0NDLFNBQWxDLENBQTRDWixHQUE1QyxFQUFpRDtBQUFFYSxNQUFBQSxRQUFRLEVBQUVsQjtBQUFaLEtBQWpELENBQU47QUFDRDs7QUFFRCxNQUFJbUIsTUFBTSxDQUFDQyxRQUFQLENBQWdCZixHQUFoQixDQUFKLEVBQTBCO0FBQ3hCLFFBQUlWLFNBQVMsQ0FBQ00sT0FBRCxDQUFULENBQW1Cb0IsSUFBdkIsRUFBNkI7QUFDM0IsYUFBTzFCLFNBQVMsQ0FBQ00sT0FBRCxDQUFULENBQW1Cb0IsSUFBbkIsQ0FBd0JMLFNBQXhCLENBQWtDQyxTQUFsQyxDQUE0Q1osR0FBNUMsQ0FBUDtBQUNEOztBQUVELFdBQU9WLFNBQVMsQ0FBQzBCLElBQVYsQ0FBZUwsU0FBZixDQUF5QkMsU0FBekIsQ0FBbUNaLEdBQW5DLENBQVA7QUFDRDs7QUFFRCxNQUFJRSxLQUFLLENBQUNDLE9BQU4sQ0FBY0gsR0FBZCxDQUFKLEVBQXdCO0FBQ3RCLFVBQU1pQixhQUFhLEdBQUdDLE1BQU0sSUFBSWQsTUFBTSxDQUFDYyxNQUFELEVBQVN2QixRQUFULEVBQW1CQyxPQUFuQixFQUE0QkMsTUFBNUIsQ0FBdEM7O0FBQ0EsUUFBSUQsT0FBTyxLQUFLLFVBQVosSUFBMEIsQ0FBQ0MsTUFBL0IsRUFBdUM7QUFDckMsYUFBT1AsU0FBUyxDQUFDNkIsS0FBVixDQUFnQlIsU0FBaEIsQ0FBMEJDLFNBQTFCLENBQW9DWixHQUFwQyxFQUF5QztBQUFFSSxRQUFBQSxNQUFNLEVBQUVhO0FBQVYsT0FBekMsQ0FBUDtBQUNEOztBQUNELFdBQU94QixXQUFXLENBQUNPLEdBQUQsRUFBTUwsUUFBTixFQUFnQkMsT0FBaEIsRUFBeUJDLE1BQXpCLENBQWxCO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDRyxHQUFHLENBQUNvQixPQUFULEVBQWtCO0FBQ2hCLFVBQU0sSUFBSUMsS0FBSixDQUFXLGlCQUFnQjdCLE1BQU0sQ0FBQzhCLE9BQVAsQ0FBZXRCLEdBQWYsQ0FBb0IsRUFBL0MsQ0FBTjtBQUNEOztBQUVELE1BQUlKLE9BQU8sS0FBSyxVQUFaLElBQTBCQSxPQUFPLEtBQUssUUFBdEMsSUFBa0RBLE9BQU8sS0FBSyxPQUFsRSxFQUEyRTtBQUN6RTtBQUNBO0FBQ0FJLElBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDb0IsT0FBSixDQUFZLElBQVosRUFBa0IsSUFBbEIsQ0FBTjs7QUFFQSxRQUFJeEIsT0FBTyxLQUFLLFVBQWhCLEVBQTRCO0FBQzFCO0FBQ0FJLE1BQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDb0IsT0FBSixDQUFZLEtBQVosRUFBbUIsS0FBbkIsQ0FBTjtBQUNEO0FBQ0YsR0FURCxNQVNPO0FBQ0w7QUFDQXBCLElBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDb0IsT0FBSixDQUFZLHVCQUFaLEVBQXFDRyxDQUFDLElBQUk7QUFDOUMsY0FBUUEsQ0FBUjtBQUNFLGFBQUssSUFBTDtBQUFXLGlCQUFPLEtBQVA7O0FBQ1gsYUFBSyxJQUFMO0FBQVcsaUJBQU8sS0FBUDs7QUFDWCxhQUFLLElBQUw7QUFBVyxpQkFBTyxLQUFQOztBQUNYLGFBQUssSUFBTDtBQUFXLGlCQUFPLEtBQVA7O0FBQ1gsYUFBSyxJQUFMO0FBQVcsaUJBQU8sS0FBUDs7QUFDWCxhQUFLLE1BQUw7QUFBYSxpQkFBTyxLQUFQOztBQUNiO0FBQVMsaUJBQVEsS0FBSUEsQ0FBRSxFQUFkO0FBUFg7QUFTRCxLQVZLLENBQU47QUFXRDs7QUFDRCxTQUFRLEdBQUUsQ0FBQ2pCLFFBQVEsR0FBRyxJQUFILEdBQVUsR0FBbkIsSUFBMEJOLEdBQUksR0FBeEM7QUFDRDs7QUFDREssT0FBTyxDQUFDRCxNQUFSLEdBQWlCQSxNQUFqQjs7QUFFQSxTQUFTUCxNQUFULENBQWdCRSxHQUFoQixFQUFxQnlCLE1BQXJCLEVBQTZCN0IsUUFBN0IsRUFBdUNDLE9BQXZDLEVBQWdEO0FBQzlDNEIsRUFBQUEsTUFBTSxHQUFHLEdBQUdDLE1BQUgsQ0FBVUQsTUFBVixDQUFUOztBQUVBLE1BQUksT0FBT3pCLEdBQVAsS0FBZSxRQUFuQixFQUE2QjtBQUMzQixVQUFNLElBQUlzQixLQUFKLENBQVcsZ0NBQStCdEIsR0FBSSxFQUE5QyxDQUFOO0FBQ0Q7O0FBRUQsU0FBT0EsR0FBRyxDQUFDcUIsT0FBSixDQUFZLEtBQVosRUFBbUJNLEtBQUssSUFBSTtBQUNqQyxRQUFJLENBQUNGLE1BQU0sQ0FBQ0csTUFBWixFQUFvQjtBQUNsQixhQUFPRCxLQUFQO0FBQ0Q7O0FBRUQsV0FBT3RCLE1BQU0sQ0FBQ29CLE1BQU0sQ0FBQ0ksS0FBUCxFQUFELEVBQWlCakMsUUFBakIsRUFBMkJDLE9BQTNCLEVBQW9DLElBQXBDLENBQWI7QUFDRCxHQU5NLENBQVA7QUFPRDs7QUFDRFMsT0FBTyxDQUFDUixNQUFSLEdBQWlCQSxNQUFqQjs7QUFFQSxTQUFTZ0MscUJBQVQsQ0FBK0I5QixHQUEvQixFQUFvQ3lCLE1BQXBDLEVBQTRDN0IsUUFBNUMsRUFBc0RDLE9BQXRELEVBQStEO0FBQzdELFNBQU9HLEdBQUcsQ0FBQ3FCLE9BQUosQ0FBWSxnQkFBWixFQUE4QixDQUFDVSxLQUFELEVBQVFDLEdBQVIsS0FBZ0I7QUFDbkQsUUFBSSxlQUFlbkMsT0FBZixJQUEwQixTQUFTa0MsS0FBSyxDQUFDRSxLQUFOLENBQVksQ0FBWixFQUFlLENBQWYsQ0FBdkMsRUFBMEQ7QUFDeEQsYUFBT0YsS0FBUDtBQUNEOztBQUVELFFBQUlOLE1BQU0sQ0FBQ08sR0FBRCxDQUFOLEtBQWdCeEIsU0FBcEIsRUFBK0I7QUFDN0IsYUFBT0gsTUFBTSxDQUFDb0IsTUFBTSxDQUFDTyxHQUFELENBQVAsRUFBY3BDLFFBQWQsRUFBd0JDLE9BQXhCLEVBQWlDLElBQWpDLENBQWI7QUFDRDs7QUFDRCxVQUFNLElBQUl5QixLQUFKLENBQVcsb0JBQW1CUyxLQUFNLHFDQUFwQyxDQUFOO0FBQ0QsR0FUTSxDQUFQO0FBVUQ7O0FBQ0R6QixPQUFPLENBQUN3QixxQkFBUixHQUFnQ0EscUJBQWhDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuY29uc3QgZGF0YVR5cGVzID0gcmVxdWlyZSgnLi9kYXRhLXR5cGVzJyk7XHJcbmNvbnN0IHsgbG9nZ2VyIH0gPSByZXF1aXJlKCcuL3V0aWxzL2xvZ2dlcicpO1xyXG5cclxuZnVuY3Rpb24gYXJyYXlUb0xpc3QoYXJyYXksIHRpbWVab25lLCBkaWFsZWN0LCBmb3JtYXQpIHtcclxuICByZXR1cm4gYXJyYXkucmVkdWNlKChzcWwsIHZhbCwgaSkgPT4ge1xyXG4gICAgaWYgKGkgIT09IDApIHtcclxuICAgICAgc3FsICs9ICcsICc7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XHJcbiAgICAgIHNxbCArPSBgKCR7YXJyYXlUb0xpc3QodmFsLCB0aW1lWm9uZSwgZGlhbGVjdCwgZm9ybWF0KX0pYDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNxbCArPSBlc2NhcGUodmFsLCB0aW1lWm9uZSwgZGlhbGVjdCwgZm9ybWF0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBzcWw7XHJcbiAgfSwgJycpO1xyXG59XHJcbmV4cG9ydHMuYXJyYXlUb0xpc3QgPSBhcnJheVRvTGlzdDtcclxuXHJcbmZ1bmN0aW9uIGVzY2FwZSh2YWwsIHRpbWVab25lLCBkaWFsZWN0LCBmb3JtYXQpIHtcclxuICBsZXQgcHJlcGVuZE4gPSBmYWxzZTtcclxuICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSB7XHJcbiAgICByZXR1cm4gJ05VTEwnO1xyXG4gIH1cclxuICBzd2l0Y2ggKHR5cGVvZiB2YWwpIHtcclxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgLy8gU1FMaXRlIGRvZXNuJ3QgaGF2ZSB0cnVlL2ZhbHNlIHN1cHBvcnQuIE15U1FMIGFsaWFzZXMgdHJ1ZS9mYWxzZSB0byAxLzBcclxuICAgIC8vIGZvciB1cy4gUG9zdGdyZXMgYWN0dWFsbHkgaGFzIGEgYm9vbGVhbiB0eXBlIHdpdGggdHJ1ZS9mYWxzZSBsaXRlcmFscyxcclxuICAgIC8vIGJ1dCBzZXF1ZWxpemUgZG9lc24ndCB1c2UgaXQgeWV0LlxyXG4gICAgICBpZiAoZGlhbGVjdCA9PT0gJ3NxbGl0ZScgfHwgZGlhbGVjdCA9PT0gJ21zc3FsJykge1xyXG4gICAgICAgIHJldHVybiArISF2YWw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICghIXZhbCkudG9TdHJpbmcoKTtcclxuICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgIHJldHVybiB2YWwudG9TdHJpbmcoKTtcclxuICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAvLyBJbiBtc3NxbCwgcHJlcGVuZCBOIHRvIGFsbCBxdW90ZWQgdmFscyB3aGljaCBhcmUgb3JpZ2luYWxseSBhIHN0cmluZyAoZm9yXHJcbiAgICAvLyB1bmljb2RlIGNvbXBhdGliaWxpdHkpXHJcbiAgICAgIHByZXBlbmROID0gZGlhbGVjdCA9PT0gJ21zc3FsJztcclxuICAgICAgYnJlYWs7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgdmFsID0gZGF0YVR5cGVzW2RpYWxlY3RdLkRBVEUucHJvdG90eXBlLnN0cmluZ2lmeSh2YWwsIHsgdGltZXpvbmU6IHRpbWVab25lIH0pO1xyXG4gIH1cclxuXHJcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XHJcbiAgICBpZiAoZGF0YVR5cGVzW2RpYWxlY3RdLkJMT0IpIHtcclxuICAgICAgcmV0dXJuIGRhdGFUeXBlc1tkaWFsZWN0XS5CTE9CLnByb3RvdHlwZS5zdHJpbmdpZnkodmFsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YVR5cGVzLkJMT0IucHJvdG90eXBlLnN0cmluZ2lmeSh2YWwpO1xyXG4gIH1cclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xyXG4gICAgY29uc3QgcGFydGlhbEVzY2FwZSA9IGVzY1ZhbCA9PiBlc2NhcGUoZXNjVmFsLCB0aW1lWm9uZSwgZGlhbGVjdCwgZm9ybWF0KTtcclxuICAgIGlmIChkaWFsZWN0ID09PSAncG9zdGdyZXMnICYmICFmb3JtYXQpIHtcclxuICAgICAgcmV0dXJuIGRhdGFUeXBlcy5BUlJBWS5wcm90b3R5cGUuc3RyaW5naWZ5KHZhbCwgeyBlc2NhcGU6IHBhcnRpYWxFc2NhcGUgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyYXlUb0xpc3QodmFsLCB0aW1lWm9uZSwgZGlhbGVjdCwgZm9ybWF0KTtcclxuICB9XHJcblxyXG4gIGlmICghdmFsLnJlcGxhY2UpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSAke2xvZ2dlci5pbnNwZWN0KHZhbCl9YCk7XHJcbiAgfVxyXG5cclxuICBpZiAoZGlhbGVjdCA9PT0gJ3Bvc3RncmVzJyB8fCBkaWFsZWN0ID09PSAnc3FsaXRlJyB8fCBkaWFsZWN0ID09PSAnbXNzcWwnKSB7XHJcbiAgICAvLyBodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvOC4yL3N0YXRpYy9zcWwtc3ludGF4LWxleGljYWwuaHRtbCNTUUwtU1lOVEFYLVNUUklOR1NcclxuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzYwMzU3Mi8xMzA1OThcclxuICAgIHZhbCA9IHZhbC5yZXBsYWNlKC8nL2csIFwiJydcIik7XHJcblxyXG4gICAgaWYgKGRpYWxlY3QgPT09ICdwb3N0Z3JlcycpIHtcclxuICAgICAgLy8gbnVsbCBjaGFyYWN0ZXIgaXMgbm90IGFsbG93ZWQgaW4gUG9zdGdyZXNcclxuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoL1xcMC9nLCAnXFxcXDAnKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcclxuICAgIHZhbCA9IHZhbC5yZXBsYWNlKC9bXFwwXFxuXFxyXFxiXFx0XFxcXCdcIlxceDFhXS9nLCBzID0+IHtcclxuICAgICAgc3dpdGNoIChzKSB7XHJcbiAgICAgICAgY2FzZSAnXFwwJzogcmV0dXJuICdcXFxcMCc7XHJcbiAgICAgICAgY2FzZSAnXFxuJzogcmV0dXJuICdcXFxcbic7XHJcbiAgICAgICAgY2FzZSAnXFxyJzogcmV0dXJuICdcXFxccic7XHJcbiAgICAgICAgY2FzZSAnXFxiJzogcmV0dXJuICdcXFxcYic7XHJcbiAgICAgICAgY2FzZSAnXFx0JzogcmV0dXJuICdcXFxcdCc7XHJcbiAgICAgICAgY2FzZSAnXFx4MWEnOiByZXR1cm4gJ1xcXFxaJztcclxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gYFxcXFwke3N9YDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJldHVybiBgJHsocHJlcGVuZE4gPyBcIk4nXCIgOiBcIidcIikgKyB2YWx9J2A7XHJcbn1cclxuZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGU7XHJcblxyXG5mdW5jdGlvbiBmb3JtYXQoc3FsLCB2YWx1ZXMsIHRpbWVab25lLCBkaWFsZWN0KSB7XHJcbiAgdmFsdWVzID0gW10uY29uY2F0KHZhbHVlcyk7XHJcblxyXG4gIGlmICh0eXBlb2Ygc3FsICE9PSAnc3RyaW5nJykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFNRTCBzdHJpbmcgcHJvdmlkZWQ6ICR7c3FsfWApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNxbC5yZXBsYWNlKC9cXD8vZywgbWF0Y2ggPT4ge1xyXG4gICAgaWYgKCF2YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBtYXRjaDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXNjYXBlKHZhbHVlcy5zaGlmdCgpLCB0aW1lWm9uZSwgZGlhbGVjdCwgdHJ1ZSk7XHJcbiAgfSk7XHJcbn1cclxuZXhwb3J0cy5mb3JtYXQgPSBmb3JtYXQ7XHJcblxyXG5mdW5jdGlvbiBmb3JtYXROYW1lZFBhcmFtZXRlcnMoc3FsLCB2YWx1ZXMsIHRpbWVab25lLCBkaWFsZWN0KSB7XHJcbiAgcmV0dXJuIHNxbC5yZXBsYWNlKC86Kyg/IVxcZCkoXFx3KykvZywgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgIGlmICgncG9zdGdyZXMnID09PSBkaWFsZWN0ICYmICc6OicgPT09IHZhbHVlLnNsaWNlKDAsIDIpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWVzW2tleV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZXNjYXBlKHZhbHVlc1trZXldLCB0aW1lWm9uZSwgZGlhbGVjdCwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5hbWVkIHBhcmFtZXRlciBcIiR7dmFsdWV9XCIgaGFzIG5vIHZhbHVlIGluIHRoZSBnaXZlbiBvYmplY3QuYCk7XHJcbiAgfSk7XHJcbn1cclxuZXhwb3J0cy5mb3JtYXROYW1lZFBhcmFtZXRlcnMgPSBmb3JtYXROYW1lZFBhcmFtZXRlcnM7XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9zcWwtc3RyaW5nLmpzIl0sIm5hbWVzIjpbImRhdGFUeXBlcyIsInJlcXVpcmUiLCJsb2dnZXIiLCJhcnJheVRvTGlzdCIsImFycmF5IiwidGltZVpvbmUiLCJkaWFsZWN0IiwiZm9ybWF0IiwicmVkdWNlIiwic3FsIiwidmFsIiwiaSIsIkFycmF5IiwiaXNBcnJheSIsImVzY2FwZSIsImV4cG9ydHMiLCJwcmVwZW5kTiIsInVuZGVmaW5lZCIsInRvU3RyaW5nIiwiRGF0ZSIsIkRBVEUiLCJwcm90b3R5cGUiLCJzdHJpbmdpZnkiLCJ0aW1lem9uZSIsIkJ1ZmZlciIsImlzQnVmZmVyIiwiQkxPQiIsInBhcnRpYWxFc2NhcGUiLCJlc2NWYWwiLCJBUlJBWSIsInJlcGxhY2UiLCJFcnJvciIsImluc3BlY3QiLCJzIiwidmFsdWVzIiwiY29uY2F0IiwibWF0Y2giLCJsZW5ndGgiLCJzaGlmdCIsImZvcm1hdE5hbWVkUGFyYW1ldGVycyIsInZhbHVlIiwia2V5Iiwic2xpY2UiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWFELE9BQU8sQ0FBQyxnQkFBRCxDQUExQjs7QUFFQSxTQUFTRSxXQUFULENBQXFCQyxLQUFyQixFQUE0QkMsUUFBNUIsRUFBc0NDLE9BQXRDLEVBQStDQyxNQUEvQyxFQUF1RDtBQUNyRCxTQUFPSCxLQUFLLENBQUNJLE1BQU4sQ0FBYSxDQUFDQyxHQUFELEVBQU1DLEdBQU4sRUFBV0MsQ0FBWCxLQUFpQjtBQUNuQyxRQUFJQSxDQUFDLEtBQUssQ0FBVixFQUFhO0FBQ1hGLE1BQUFBLEdBQUcsSUFBSSxJQUFQO0FBQ0Q7O0FBQ0QsUUFBSUcsS0FBSyxDQUFDQyxPQUFOLENBQWNILEdBQWQsQ0FBSixFQUF3QjtBQUN0QkQsTUFBQUEsR0FBRyxJQUFLLElBQUdOLFdBQVcsQ0FBQ08sR0FBRCxFQUFNTCxRQUFO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bUJNLEtBQUssSUFBSTtBQUNqQyxRQUFJLENBQUNGLE1BQU0sQ0FBQ0csTUFBWixFQUFvQjtBQUNsQixhQUFPRCxLQUFQO0FBQ0Q7O0FBRUQsV0FBT3RCLE1BQU0sQ0FBQ29CLE1BQU0sQ0FBQ0ksS0FBUCxFQUFELEVBQWlCakMsUUFBakIsRUFBMkJDLE9BQTNCLEVBQW9DLElBQXBDLENBQWI7QUFDRCxHQU5NLENBQVA7QUFPRDs7QUFDRFMsT0FBTyxDQUFDUixNQUFSLEdBQWlCQSxNQUFqQjs7QUFFQSxTQUFTZ0MscUJBQVQsQ0FBK0I5QixHQUEvQixFQUFvQ3lCLE1BQXBDLEVBQTRDN0IsUUFBNUMsRUFBc0RDLE9BQXRELEVBQStEO0FBQzdELFNBQU9HLEdBQUcsQ0FBQ3FCLE9BQUosQ0FBWSxnQkFBWixFQUE4QixDQUFDVSxLQUFELEVBQVFDLEdBQVIsS0FBZ0I7QUFDbkQsUUFBSSxlQUFlbkMsT0FBZixJQUEwQixTQUFTa0MsS0FBSyxDQUFDRSxLQUFOLENBQVksQ0FBWixFQUFlLENBQWYsQ0FBdkMsRUFBMEQ7QUFDeEQsYUFBT0YsS0FBUDtBQUNEOztBQUVELFFBQUlOLE1BQU0sQ0FBQ08sR0FBRCxDQUFOLEtBQWdCeEIsU0FBcEIsRUFBK0I7QUFDN0IsYUFBT0gsTUFBTSxDQUFDb0IsTUFBTSxDQUFDTyxHQUFELENBQVAsRUFBY3BDLFFBQWQsRUFBd0JDLE9BQXhCLEVBQWlDLElBQWpDLENBQWI7QUFDRDs7QUFDRCxVQUFNLElBQUl5QixLQUFKLENBQVcsb0JBQW1CUyxLQUFNLHFDQUFwQyxDQUFOO0FBQ0QsR0FUTSxDQUFQO0FBVUQ7O0FBQ0R6QixPQUFPLENBQUN3QixxQkFBUixHQUFnQ0EscUJBQWhDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBkYXRhVHlwZXMgPSByZXF1aXJlKCcuL2RhdGEtdHlwZXMnKTtcbmNvbnN0IHsgbG9nZ2VyIH0gPSByZXF1aXJlKCcuL3V0aWxzL2xvZ2dlcicpO1xuXG5mdW5jdGlvbiBhcnJheVRvTGlzdChhcnJheSwgdGltZVpvbmUsIGRpYWxlY3QsIGZvcm1hdCkge1xuICByZXR1cm4gYXJyYXkucmVkdWNlKChzcWwsIHZhbCwgaSkgPT4ge1xuICAgIGlmIChpICE9PSAwKSB7XG4gICAgICBzcWwgKz0gJywgJztcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgc3FsICs9IGAoJHthcnJheVRvTGlzdCh2YWwsIHRpbWVab25lLCBkaWFsZWN0LCBmb3JtYXQpfSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzcWwgKz0gZXNjYXBlKHZhbCwgdGltZVpvbmUsIGRpYWxlY3QsIGZvcm1hdCk7XG4gICAgfVxuICAgIHJldHVybiBzcWw7XG4gIH0sICcnKTtcbn1cbmV4cG9ydHMuYXJyYXlUb0xpc3QgPSBhcnJheVRvTGlzdDtcblxuZnVuY3Rpb24gZXNjYXBlKHZhbCwgdGltZVpvbmUsIGRpYWxlY3QsIGZvcm1hdCkge1xuICBsZXQgcHJlcGVuZE4gPSBmYWxzZTtcbiAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnTlVMTCc7XG4gIH1cbiAgc3dpdGNoICh0eXBlb2YgdmFsKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgLy8gU1FMaXRlIGRvZXNuJ3QgaGF2ZSB0cnVlL2ZhbHNlIHN1cHBvcnQuIE15U1FMIGFsaWFzZXMgdHJ1ZS9mYWxzZSB0byAxLzBcbiAgICAvLyBmb3IgdXMuIFBvc3RncmVzIGFjdHVhbGx5IGhhcyBhIGJvb2xlYW4gdHlwZSB3aXRoIHRydWUvZmFsc2UgbGl0ZXJhbHMsXG4gICAgLy8gYnV0IHNlcXVlbGl6ZSBkb2Vzbid0IHVzZSBpdCB5ZXQuXG4gICAgICBpZiAoZGlhbGVjdCA9PT0gJ3NxbGl0ZScgfHwgZGlhbGVjdCA9PT0gJ21zc3FsJykge1xuICAgICAgICByZXR1cm4gKyEhdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuICghIXZhbCkudG9TdHJpbmcoKTtcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIHZhbC50b1N0cmluZygpO1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgLy8gSW4gbXNzcWwsIHByZXBlbmQgTiB0byBhbGwgcXVvdGVkIHZhbHMgd2hpY2ggYXJlIG9yaWdpbmFsbHkgYSBzdHJpbmcgKGZvclxuICAgIC8vIHVuaWNvZGUgY29tcGF0aWJpbGl0eSlcbiAgICAgIHByZXBlbmROID0gZGlhbGVjdCA9PT0gJ21zc3FsJztcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICB2YWwgPSBkYXRhVHlwZXNbZGlhbGVjdF0uREFURS5wcm90b3R5cGUuc3RyaW5naWZ5KHZhbCwgeyB0aW1lem9uZTogdGltZVpvbmUgfSk7XG4gIH1cblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICBpZiAoZGF0YVR5cGVzW2RpYWxlY3RdLkJMT0IpIHtcbiAgICAgIHJldHVybiBkYXRhVHlwZXNbZGlhbGVjdF0uQkxPQi5wcm90b3R5cGUuc3RyaW5naWZ5KHZhbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFUeXBlcy5CTE9CLnByb3RvdHlwZS5zdHJpbmdpZnkodmFsKTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICBjb25zdCBwYXJ0aWFsRXNjYXBlID0gZXNjVmFsID0+IGVzY2FwZShlc2NWYWwsIHRpbWVab25lLCBkaWFsZWN0LCBmb3JtYXQpO1xuICAgIGlmIChkaWFsZWN0ID09PSAncG9zdGdyZXMnICYmICFmb3JtYXQpIHtcbiAgICAgIHJldHVybiBkYXRhVHlwZXMuQVJSQVkucHJvdG90eXBlLnN0cmluZ2lmeSh2YWwsIHsgZXNjYXBlOiBwYXJ0aWFsRXNjYXBlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXlUb0xpc3QodmFsLCB0aW1lWm9uZSwgZGlhbGVjdCwgZm9ybWF0KTtcbiAgfVxuXG4gIGlmICghdmFsLnJlcGxhY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgJHtsb2dnZXIuaW5zcGVjdCh2YWwpfWApO1xuICB9XG5cbiAgaWYgKGRpYWxlY3QgPT09ICdwb3N0Z3JlcycgfHwgZGlhbGVjdCA9PT0gJ3NxbGl0ZScgfHwgZGlhbGVjdCA9PT0gJ21zc3FsJykge1xuICAgIC8vIGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy84LjIvc3RhdGljL3NxbC1zeW50YXgtbGV4aWNhbC5odG1sI1NRTC1TWU5UQVgtU1RSSU5HU1xuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzYwMzU3Mi8xMzA1OThcbiAgICB2YWwgPSB2YWwucmVwbGFjZSgvJy9nLCBcIicnXCIpO1xuXG4gICAgaWYgKGRpYWxlY3QgPT09ICdwb3N0Z3JlcycpIHtcbiAgICAgIC8vIG51bGwgY2hhcmFjdGVyIGlzIG5vdCBhbGxvd2VkIGluIFBvc3RncmVzXG4gICAgICB2YWwgPSB2YWwucmVwbGFjZSgvXFwwL2csICdcXFxcMCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICAgIHZhbCA9IHZhbC5yZXBsYWNlKC9bXFwwXFxuXFxyXFxiXFx0XFxcXCdcIlxceDFhXS9nLCBzID0+IHtcbiAgICAgIHN3aXRjaCAocykge1xuICAgICAgICBjYXNlICdcXDAnOiByZXR1cm4gJ1xcXFwwJztcbiAgICAgICAgY2FzZSAnXFxuJzogcmV0dXJuICdcXFxcbic7XG4gICAgICAgIGNhc2UgJ1xccic6IHJldHVybiAnXFxcXHInO1xuICAgICAgICBjYXNlICdcXGInOiByZXR1cm4gJ1xcXFxiJztcbiAgICAgICAgY2FzZSAnXFx0JzogcmV0dXJuICdcXFxcdCc7XG4gICAgICAgIGNhc2UgJ1xceDFhJzogcmV0dXJuICdcXFxcWic7XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiBgXFxcXCR7c31gO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBgJHsocHJlcGVuZE4gPyBcIk4nXCIgOiBcIidcIikgKyB2YWx9J2A7XG59XG5leHBvcnRzLmVzY2FwZSA9IGVzY2FwZTtcblxuZnVuY3Rpb24gZm9ybWF0KHNxbCwgdmFsdWVzLCB0aW1lWm9uZSwgZGlhbGVjdCkge1xuICB2YWx1ZXMgPSBbXS5jb25jYXQodmFsdWVzKTtcblxuICBpZiAodHlwZW9mIHNxbCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgU1FMIHN0cmluZyBwcm92aWRlZDogJHtzcWx9YCk7XG4gIH1cblxuICByZXR1cm4gc3FsLnJlcGxhY2UoL1xcPy9nLCBtYXRjaCA9PiB7XG4gICAgaWYgKCF2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVzY2FwZSh2YWx1ZXMuc2hpZnQoKSwgdGltZVpvbmUsIGRpYWxlY3QsIHRydWUpO1xuICB9KTtcbn1cbmV4cG9ydHMuZm9ybWF0ID0gZm9ybWF0O1xuXG5mdW5jdGlvbiBmb3JtYXROYW1lZFBhcmFtZXRlcnMoc3FsLCB2YWx1ZXMsIHRpbWVab25lLCBkaWFsZWN0KSB7XG4gIHJldHVybiBzcWwucmVwbGFjZSgvOisoPyFcXGQpKFxcdyspL2csICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgaWYgKCdwb3N0Z3JlcycgPT09IGRpYWxlY3QgJiYgJzo6JyA9PT0gdmFsdWUuc2xpY2UoMCwgMikpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVzY2FwZSh2YWx1ZXNba2V5XSwgdGltZVpvbmUsIGRpYWxlY3QsIHRydWUpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5hbWVkIHBhcmFtZXRlciBcIiR7dmFsdWV9XCIgaGFzIG5vIHZhbHVlIGluIHRoZSBnaXZlbiBvYmplY3QuYCk7XG4gIH0pO1xufVxuZXhwb3J0cy5mb3JtYXROYW1lZFBhcmFtZXRlcnMgPSBmb3JtYXROYW1lZFBhcmFtZXRlcnM7XG4iXX0= \ No newline at end of file diff --git a/dist/table-hints.js b/dist/table-hints.js index 89122b0..c5237d5 100644 --- a/dist/table-hints.js +++ b/dist/table-hints.js @@ -37,4 +37,4 @@ const TableHints = module.exports = { SNAPSHOT: 'SNAPSHOT', NOEXPAND: 'NOEXPAND' }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi90YWJsZS1oaW50cy5qcyJdLCJuYW1lcyI6WyJUYWJsZUhpbnRzIiwibW9kdWxlIiwiZXhwb3J0cyIsIk5PTE9DSyIsIlJFQURVTkNPTU1JVFRFRCIsIlVQRExPQ0siLCJSRVBFQVRBQkxFUkVBRCIsIlNFUklBTElaQUJMRSIsIlJFQURDT01NSVRURUQiLCJUQUJMT0NLIiwiVEFCTE9DS1giLCJQQUdMT0NLIiwiUk9XTE9DSyIsIk5PV0FJVCIsIlJFQURQQVNUIiwiWExPQ0siLCJTTkFQU0hPVCIsIk5PRVhQQU5EIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxNQUFNQSxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUFFO0FBQ3BDQyxFQUFBQSxNQUFNLEVBQUUsUUFEMEI7QUFFbENDLEVBQUFBLGVBQWUsRUFBRSxpQkFGaUI7QUFHbENDLEVBQUFBLE9BQU8sRUFBRSxTQUh5QjtBQUlsQ0MsRUFBQUEsY0FBYyxFQUFFLGdCQUprQjtBQUtsQ0MsRUFBQUEsWUFBWSxFQUFFLGNBTG9CO0FBTWxDQyxFQUFBQSxhQUFhLEVBQUUsZUFObUI7QUFPbENDLEVBQUFBLE9BQU8sRUFBRSxTQVB5QjtBQVFsQ0MsRUFBQUEsUUFBUSxFQUFFLFVBUndCO0FBU2xDQyxFQUFBQSxPQUFPLEVBQUUsU0FUeUI7QUFVbENDLEVBQUFBLE9BQU8sRUFBRSxTQVZ5QjtBQVdsQ0MsRUFBQUEsTUFBTSxFQUFFLFFBWDBCO0FBWWxDQyxFQUFBQSxRQUFRLEVBQUUsVUFad0I7QUFhbENDLEVBQUFBLEtBQUssRUFBRSxPQWIyQjtBQWNsQ0MsRUFBQUEsUUFBUSxFQUFFLFVBZHdCO0FBZWxDQyxFQUFBQSxRQUFRLEVBQUU7QUFmd0IsQ0FBcEMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogQW4gZW51bSBvZiB0YWJsZSBoaW50cyB0byBiZSB1c2VkIGluIG1zc3FsIGZvciBxdWVyeWluZyB3aXRoIHRhYmxlIGhpbnRzXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSBOT0xPQ0tcclxuICogQHByb3BlcnR5IFJFQURVTkNPTU1JVFRFRFxyXG4gKiBAcHJvcGVydHkgVVBETE9DS1xyXG4gKiBAcHJvcGVydHkgUkVQRUFUQUJMRVJFQURcclxuICogQHByb3BlcnR5IFNFUklBTElaQUJMRVxyXG4gKiBAcHJvcGVydHkgUkVBRENPTU1JVFRFRFxyXG4gKiBAcHJvcGVydHkgVEFCTE9DS1xyXG4gKiBAcHJvcGVydHkgVEFCTE9DS1hcclxuICogQHByb3BlcnR5IFBBR0xPQ0tcclxuICogQHByb3BlcnR5IFJPV0xPQ0tcclxuICogQHByb3BlcnR5IE5PV0FJVFxyXG4gKiBAcHJvcGVydHkgUkVBRFBBU1RcclxuICogQHByb3BlcnR5IFhMT0NLXHJcbiAqIEBwcm9wZXJ0eSBTTkFQU0hPVFxyXG4gKiBAcHJvcGVydHkgTk9FWFBBTkRcclxuICovXHJcbmNvbnN0IFRhYmxlSGludHMgPSBtb2R1bGUuZXhwb3J0cyA9IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxyXG4gIE5PTE9DSzogJ05PTE9DSycsXHJcbiAgUkVBRFVOQ09NTUlUVEVEOiAnUkVBRFVOQ09NTUlUVEVEJyxcclxuICBVUERMT0NLOiAnVVBETE9DSycsXHJcbiAgUkVQRUFUQUJMRVJFQUQ6ICdSRVBFQVRBQkxFUkVBRCcsXHJcbiAgU0VSSUFMSVpBQkxFOiAnU0VSSUFMSVpBQkxFJyxcclxuICBSRUFEQ09NTUlUVEVEOiAnUkVBRENPTU1JVFRFRCcsXHJcbiAgVEFCTE9DSzogJ1RBQkxPQ0snLFxyXG4gIFRBQkxPQ0tYOiAnVEFCTE9DS1gnLFxyXG4gIFBBR0xPQ0s6ICdQQUdMT0NLJyxcclxuICBST1dMT0NLOiAnUk9XTE9DSycsXHJcbiAgTk9XQUlUOiAnTk9XQUlUJyxcclxuICBSRUFEUEFTVDogJ1JFQURQQVNUJyxcclxuICBYTE9DSzogJ1hMT0NLJyxcclxuICBTTkFQU0hPVDogJ1NOQVBTSE9UJyxcclxuICBOT0VYUEFORDogJ05PRVhQQU5EJ1xyXG59O1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi90YWJsZS1oaW50cy5qcyJdLCJuYW1lcyI6WyJUYWJsZUhpbnRzIiwibW9kdWxlIiwiZXhwb3J0cyIsIk5PTE9DSyIsIlJFQURVTkNPTU1JVFRFRCIsIlVQRExPQ0siLCJSRVBFQVRBQkxFUkVBRCIsIlNFUklBTElaQUJMRSIsIlJFQURDT01NSVRURUQiLCJUQUJMT0NLIiwiVEFCTE9DS1giLCJQQUdMT0NLIiwiUk9XTE9DSyIsIk5PV0FJVCIsIlJFQURQQVNUIiwiWExPQ0siLCJTTkFQU0hPVCIsIk5PRVhQQU5EIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE1BQU1BLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxPQUFQLEdBQWlCO0FBQUU7QUFDcENDLEVBQUFBLE1BQU0sRUFBRSxRQUQwQjtBQUVsQ0MsRUFBQUEsZUFBZSxFQUFFLGlCQUZpQjtBQUdsQ0MsRUFBQUEsT0FBTyxFQUFFLFNBSHlCO0FBSWxDQyxFQUFBQSxjQUFjLEVBQUUsZ0JBSmtCO0FBS2xDQyxFQUFBQSxZQUFZLEVBQUUsY0FMb0I7QUFNbENDLEVBQUFBLGFBQWEsRUFBRSxlQU5tQjtBQU9sQ0MsRUFBQUEsT0FBTyxFQUFFLFNBUHlCO0FBUWxDQyxFQUFBQSxRQUFRLEVBQUUsVUFSd0I7QUFTbENDLEVBQUFBLE9BQU8sRUFBRSxTQVR5QjtBQVVsQ0MsRUFBQUEsT0FBTyxFQUFFLFNBVnlCO0FBV2xDQyxFQUFBQSxNQUFNLEVBQUUsUUFYMEI7QUFZbENDLEVBQUFBLFFBQVEsRUFBRSxVQVp3QjtBQWFsQ0MsRUFBQUEsS0FBSyxFQUFFLE9BYjJCO0FBY2xDQyxFQUFBQSxRQUFRLEVBQUUsVUFkd0I7QUFlbENDLEVBQUFBLFFBQVEsRUFBRTtBQWZ3QixDQUFwQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBbiBlbnVtIG9mIHRhYmxlIGhpbnRzIHRvIGJlIHVzZWQgaW4gbXNzcWwgZm9yIHF1ZXJ5aW5nIHdpdGggdGFibGUgaGludHNcbiAqXG4gKiBAcHJvcGVydHkgTk9MT0NLXG4gKiBAcHJvcGVydHkgUkVBRFVOQ09NTUlUVEVEXG4gKiBAcHJvcGVydHkgVVBETE9DS1xuICogQHByb3BlcnR5IFJFUEVBVEFCTEVSRUFEXG4gKiBAcHJvcGVydHkgU0VSSUFMSVpBQkxFXG4gKiBAcHJvcGVydHkgUkVBRENPTU1JVFRFRFxuICogQHByb3BlcnR5IFRBQkxPQ0tcbiAqIEBwcm9wZXJ0eSBUQUJMT0NLWFxuICogQHByb3BlcnR5IFBBR0xPQ0tcbiAqIEBwcm9wZXJ0eSBST1dMT0NLXG4gKiBAcHJvcGVydHkgTk9XQUlUXG4gKiBAcHJvcGVydHkgUkVBRFBBU1RcbiAqIEBwcm9wZXJ0eSBYTE9DS1xuICogQHByb3BlcnR5IFNOQVBTSE9UXG4gKiBAcHJvcGVydHkgTk9FWFBBTkRcbiAqL1xuY29uc3QgVGFibGVIaW50cyA9IG1vZHVsZS5leHBvcnRzID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIE5PTE9DSzogJ05PTE9DSycsXG4gIFJFQURVTkNPTU1JVFRFRDogJ1JFQURVTkNPTU1JVFRFRCcsXG4gIFVQRExPQ0s6ICdVUERMT0NLJyxcbiAgUkVQRUFUQUJMRVJFQUQ6ICdSRVBFQVRBQkxFUkVBRCcsXG4gIFNFUklBTElaQUJMRTogJ1NFUklBTElaQUJMRScsXG4gIFJFQURDT01NSVRURUQ6ICdSRUFEQ09NTUlUVEVEJyxcbiAgVEFCTE9DSzogJ1RBQkxPQ0snLFxuICBUQUJMT0NLWDogJ1RBQkxPQ0tYJyxcbiAgUEFHTE9DSzogJ1BBR0xPQ0snLFxuICBST1dMT0NLOiAnUk9XTE9DSycsXG4gIE5PV0FJVDogJ05PV0FJVCcsXG4gIFJFQURQQVNUOiAnUkVBRFBBU1QnLFxuICBYTE9DSzogJ1hMT0NLJyxcbiAgU05BUFNIT1Q6ICdTTkFQU0hPVCcsXG4gIE5PRVhQQU5EOiAnTk9FWFBBTkQnXG59O1xuIl19 \ No newline at end of file diff --git a/dist/transaction.js b/dist/transaction.js index d39c590..b0e381f 100644 --- a/dist/transaction.js +++ b/dist/transaction.js @@ -17,9 +17,7 @@ const Promise = require('./promise'); */ -let Transaction = -/*#__PURE__*/ -function () { +let Transaction = /*#__PURE__*/function () { /** * Creates a new transaction instance * @@ -331,4 +329,4 @@ function () { module.exports = Transaction; module.exports.Transaction = Transaction; module.exports.default = Transaction; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi90cmFuc2FjdGlvbi5qcyJdLCJuYW1lcyI6WyJQcm9taXNlIiwicmVxdWlyZSIsIlRyYW5zYWN0aW9uIiwic2VxdWVsaXplIiwib3B0aW9ucyIsInNhdmVwb2ludHMiLCJfYWZ0ZXJDb21taXRIb29rcyIsImdlbmVyYXRlVHJhbnNhY3Rpb25JZCIsImRpYWxlY3QiLCJRdWVyeUdlbmVyYXRvciIsIk9iamVjdCIsImFzc2lnbiIsInR5cGUiLCJ0cmFuc2FjdGlvblR5cGUiLCJpc29sYXRpb25MZXZlbCIsInJlYWRPbmx5IiwicGFyZW50IiwidHJhbnNhY3Rpb24iLCJpZCIsInB1c2giLCJuYW1lIiwibGVuZ3RoIiwiZmluaXNoZWQiLCJyZWplY3QiLCJFcnJvciIsIl9jbGVhckNscyIsImdldFF1ZXJ5SW50ZXJmYWNlIiwiY29tbWl0VHJhbnNhY3Rpb24iLCJmaW5hbGx5IiwiY2xlYW51cCIsInRhcCIsImVhY2giLCJob29rIiwicmVzb2x2ZSIsImFwcGx5IiwiY29ubmVjdGlvbiIsInJvbGxiYWNrVHJhbnNhY3Rpb24iLCJ1c2VDTFMiLCJjb25uZWN0aW9uUHJvbWlzZSIsInVuZGVmaW5lZCIsImFjcXVpcmVPcHRpb25zIiwidXVpZCIsImNvbm5lY3Rpb25NYW5hZ2VyIiwiZ2V0Q29ubmVjdGlvbiIsInRoZW4iLCJiZWdpbiIsInNldERlZmVycmFibGUiLCJjYXRjaCIsInNldHVwRXJyIiwicm9sbGJhY2siLCJjb25zdHJ1Y3RvciIsIl9jbHMiLCJzZXQiLCJkZWZlcnJhYmxlIiwiZGVmZXJDb25zdHJhaW50cyIsInF1ZXJ5SW50ZXJmYWNlIiwic3VwcG9ydHMiLCJzZXR0aW5nSXNvbGF0aW9uTGV2ZWxEdXJpbmdUcmFuc2FjdGlvbiIsInN0YXJ0VHJhbnNhY3Rpb24iLCJzZXRJc29sYXRpb25MZXZlbCIsInJlcyIsInJlbGVhc2VDb25uZWN0aW9uIiwiY2xzIiwiZ2V0IiwiZm4iLCJMT0NLIiwiREVGRVJSRUQiLCJJTU1FRElBVEUiLCJFWENMVVNJVkUiLCJSRUFEX1VOQ09NTUlUVEVEIiwiUkVBRF9DT01NSVRURUQiLCJSRVBFQVRBQkxFX1JFQUQiLCJTRVJJQUxJWkFCTEUiLCJVUERBVEUiLCJTSEFSRSIsIktFWV9TSEFSRSIsIk5PX0tFWV9VUERBVEUiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUEsTUFBTUEsT0FBTyxHQUFHQyxPQUFPLENBQUMsV0FBRCxDQUF2QjtBQUVBOzs7Ozs7Ozs7O0lBUU1DLFc7OztBQUNKOzs7Ozs7Ozs7QUFTQSx1QkFBWUMsU0FBWixFQUF1QkMsT0FBdkIsRUFBZ0M7QUFBQTs7QUFDOUIsU0FBS0QsU0FBTCxHQUFpQkEsU0FBakI7QUFDQSxTQUFLRSxVQUFMLEdBQWtCLEVBQWxCO0FBQ0EsU0FBS0MsaUJBQUwsR0FBeUIsRUFBekIsQ0FIOEIsQ0FLOUI7O0FBQ0EsVUFBTUMscUJBQXFCLEdBQUcsS0FBS0osU0FBTCxDQUFlSyxPQUFmLENBQXVCQyxjQUF2QixDQUFzQ0YscUJBQXBFO0FBRUEsU0FBS0gsT0FBTCxHQUFlTSxNQUFNLENBQUNDLE1BQVAsQ0FBYztBQUMzQkMsTUFBQUEsSUFBSSxFQUFFVCxTQUFTLENBQUNDLE9BQVYsQ0FBa0JTLGVBREc7QUFFM0JDLE1BQUFBLGNBQWMsRUFBRVgsU0FBUyxDQUFDQyxPQUFWLENBQWtCVSxjQUZQO0FBRzNCQyxNQUFBQSxRQUFRLEVBQUU7QUFIaUIsS0FBZCxFQUlaWCxPQUFPLElBQUksRUFKQyxDQUFmO0FBTUEsU0FBS1ksTUFBTCxHQUFjLEtBQUtaLE9BQUwsQ0FBYWEsV0FBM0I7O0FBRUEsUUFBSSxLQUFLRCxNQUFULEVBQWlCO0FBQ2YsV0FBS0UsRUFBTCxHQUFVLEtBQUtGLE1BQUwsQ0FBWUUsRUFBdEI7QUFDQSxXQUFLRixNQUFMLENBQVlYLFVBQVosQ0FBdUJjLElBQXZCLENBQTRCLElBQTVCO0FBQ0EsV0FBS0MsSUFBTCxHQUFhLEdBQUUsS0FBS0YsRUFBRyxPQUFNLEtBQUtGLE1BQUwsQ0FB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UUFBQUEsZ0JBQWdCLEVBQUUsa0JBRGI7QUFFTEMsUUFBQUEsY0FBYyxFQUFFLGdCQUZYO0FBR0xDLFFBQUFBLGVBQWUsRUFBRSxpQkFIWjtBQUlMQyxRQUFBQSxZQUFZLEVBQUU7QUFKVCxPQUFQO0FBTUQ7QUFHRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxQkF3Q2tCO0FBQ2hCLGFBQU87QUFDTEMsUUFBQUEsTUFBTSxFQUFFLFFBREg7QUFFTEMsUUFBQUEsS0FBSyxFQUFFLE9BRkY7QUFHTEMsUUFBQUEsU0FBUyxFQUFFLFdBSE47QUFJTEMsUUFBQUEsYUFBYSxFQUFFO0FBSlYsT0FBUDtBQU1EOzs7Ozs7QUFVSEMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCNUUsV0FBakI7QUFDQTJFLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlNUUsV0FBZixHQUE2QkEsV0FBN0I7QUFDQTJFLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCN0UsV0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBQcm9taXNlID0gcmVxdWlyZSgnLi9wcm9taXNlJyk7XHJcblxyXG4vKipcclxuICogVGhlIHRyYW5zYWN0aW9uIG9iamVjdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGEgcnVubmluZyB0cmFuc2FjdGlvbi5cclxuICogSXQgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGBTZXF1ZWxpemUudHJhbnNhY3Rpb24oKWAuXHJcbiAqIFRvIHJ1biBhIHF1ZXJ5IHVuZGVyIGEgdHJhbnNhY3Rpb24sIHlvdSBzaG91bGQgcGFzcyB0aGUgdHJhbnNhY3Rpb24gaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxyXG4gKlxyXG4gKiBAY2xhc3MgVHJhbnNhY3Rpb25cclxuICogQHNlZSB7QGxpbmsgU2VxdWVsaXplLnRyYW5zYWN0aW9ufVxyXG4gKi9cclxuY2xhc3MgVHJhbnNhY3Rpb24ge1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBuZXcgdHJhbnNhY3Rpb24gaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U2VxdWVsaXplfSBzZXF1ZWxpemUgQSBjb25maWd1cmVkIHNlcXVlbGl6ZSBJbnN0YW5jZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudHlwZV0gU2V0cyB0aGUgdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFNxbGl0ZSBvbmx5XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmlzb2xhdGlvbkxldmVsXSBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgb2YgdGhlIHRyYW5zYWN0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5kZWZlcnJhYmxlXSBTZXRzIHRoZSBjb25zdHJhaW50cyB0byBiZSBkZWZlcnJlZCBvciBpbW1lZGlhdGVseSBjaGVja2VkLiBQb3N0Z3JlU1FMIG9ubHlcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihzZXF1ZWxpemUsIG9wdGlvbnMpIHtcclxuICAgIHRoaXMuc2VxdWVsaXplID0gc2VxdWVsaXplO1xyXG4gICAgdGhpcy5zYXZlcG9pbnRzID0gW107XHJcbiAgICB0aGlzLl9hZnRlckNvbW1pdEhvb2tzID0gW107XHJcblxyXG4gICAgLy8gZ2V0IGRpYWxlY3Qgc3BlY2lmaWMgdHJhbnNhY3Rpb24gb3B0aW9uc1xyXG4gICAgY29uc3QgZ2VuZXJhdGVUcmFuc2FjdGlvbklkID0gdGhpcy5zZXF1ZWxpemUuZGlhbGVjdC5RdWVyeUdlbmVyYXRvci5nZW5lcmF0ZVRyYW5zYWN0aW9uSWQ7XHJcblxyXG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgIHR5cGU6IHNlcXVlbGl6ZS5vcHRpb25zLnRyYW5zYWN0aW9uVHlwZSxcclxuICAgICAgaXNvbGF0aW9uTGV2ZWw6IHNlcXVlbGl6ZS5vcHRpb25zLmlzb2xhdGlvbkxldmVsLFxyXG4gICAgICByZWFkT25seTogZmFsc2VcclxuICAgIH0sIG9wdGlvbnMgfHwge30pO1xyXG5cclxuICAgIHRoaXMucGFyZW50ID0gdGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uO1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCkge1xyXG4gICAgICB0aGlzLmlkID0gdGhpcy5wYXJlbnQuaWQ7XHJcbiAgICAgIHRoaXMucGFyZW50LnNhdmVwb2ludHMucHVzaCh0aGlzKTtcclxuICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5pZH0tc3AtJHt0aGlzLnBhcmVudC5zYXZlcG9pbnRzLmxlbmd0aH1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pZCA9IHRoaXMubmFtZSA9IGdlbmVyYXRlVHJhbnNhY3Rpb25JZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21taXQgdGhlIHRyYW5zYWN0aW9uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cclxuICAgKi9cclxuICBjb21taXQoKSB7XHJcbiAgICBpZiAodGhpcy5maW5pc2hlZCkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBUcmFuc2FjdGlvbiBjYW5ub3QgYmUgY29tbWl0dGVkIGJlY2F1c2UgaXQgaGFzIGJlZW4gZmluaXNoZWQgd2l0aCBzdGF0ZTogJHt0aGlzLmZpbmlzaGVkfWApKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jbGVhckNscygpO1xyXG5cclxuICAgIHJldHVybiB0aGlzXHJcbiAgICAgIC5zZXF1ZWxpemVcclxuICAgICAgLmdldFF1ZXJ5SW50ZXJmYWNlKClcclxuICAgICAgLmNvbW1pdFRyYW5zYWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucylcclxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmluaXNoZWQgPSAnY29tbWl0JztcclxuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbnVwKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9KS50YXAoXHJcbiAgICAgICAgKCkgPT4gUHJvbWlzZS5lYWNoKFxyXG4gICAgICAgICAgdGhpcy5fYWZ0ZXJDb21taXRIb29rcyxcclxuICAgICAgICAgIGhvb2sgPT4gUHJvbWlzZS5yZXNvbHZlKGhvb2suYXBwbHkodGhpcywgW3RoaXNdKSkpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSb2xsYmFjayAoYWJvcnQpIHRoZSB0cmFuc2FjdGlvblxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9XHJcbiAgICovXHJcbiAgcm9sbGJhY2soKSB7XHJcbiAgICBpZiAodGhpcy5maW5pc2hlZCkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcm9sbGVkIGJhY2sgYmVjYXVzZSBpdCBoYXMgYmVlbiBmaW5pc2hlZCB3aXRoIHN0YXRlOiAke3RoaXMuZmluaXNoZWR9YCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5jb25uZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSByb2xsZWQgYmFjayBiZWNhdXNlIGl0IG5ldmVyIHN0YXJ0ZWQnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY2xlYXJDbHMoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gICAgICAuc2VxdWVsaXplXHJcbiAgICAgIC5nZXRRdWVyeUludGVyZmFjZSgpXHJcbiAgICAgIC5yb2xsYmFja1RyYW5zYWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucylcclxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFudXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJlcGFyZUVudmlyb25tZW50KHVzZUNMUykge1xyXG4gICAgbGV0IGNvbm5lY3Rpb25Qcm9taXNlO1xyXG5cclxuICAgIGlmICh1c2VDTFMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB1c2VDTFMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhcmVudCkge1xyXG4gICAgICBjb25uZWN0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzLnBhcmVudC5jb25uZWN0aW9uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGFjcXVpcmVPcHRpb25zID0geyB1dWlkOiB0aGlzLmlkIH07XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVhZE9ubHkpIHtcclxuICAgICAgICBhY3F1aXJlT3B0aW9ucy50eXBlID0gJ1NFTEVDVCc7XHJcbiAgICAgIH1cclxuICAgICAgY29ubmVjdGlvblByb21pc2UgPSB0aGlzLnNlcXVlbGl6ZS5jb25uZWN0aW9uTWFuYWdlci5nZXRDb25uZWN0aW9uKGFjcXVpcmVPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29ubmVjdGlvblByb21pc2VcclxuICAgICAgLnRoZW4oY29ubmVjdGlvbiA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24udXVpZCA9IHRoaXMuaWQ7XHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iZWdpbigpXHJcbiAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnNldERlZmVycmFibGUoKSlcclxuICAgICAgICAgIC5jYXRjaChzZXR1cEVyciA9PiB0aGlzLnJvbGxiYWNrKCkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRocm93IHNldHVwRXJyO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICB9KVxyXG4gICAgICAudGFwKCgpID0+IHtcclxuICAgICAgICBpZiAodXNlQ0xTICYmIHRoaXMuc2VxdWVsaXplLmNvbnN0cnVjdG9yLl9jbHMpIHtcclxuICAgICAgICAgIHRoaXMuc2VxdWVsaXplLmNvbnN0cnVjdG9yLl9jbHMuc2V0KCd0cmFuc2FjdGlvbicsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXREZWZlcnJhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWZlcnJhYmxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgLnNlcXVlbGl6ZVxyXG4gICAgICAgIC5nZXRRdWVyeUludGVyZmFjZSgpXHJcbiAgICAgICAgLmRlZmVyQ29uc3RyYWludHModGhpcywgdGhpcy5vcHRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJlZ2luKCkge1xyXG4gICAgY29uc3QgcXVlcnlJbnRlcmZhY2UgPSB0aGlzLnNlcXVlbGl6ZS5nZXRRdWVyeUludGVyZmFjZSgpO1xyXG5cclxuICAgIGlmICggdGhpcy5zZXF1ZWxpemUuZGlhbGVjdC5zdXBwb3J0cy5zZXR0aW5nSXNvbGF0aW9uTGV2ZWxEdXJpbmdUcmFuc2FjdGlvbiApIHtcclxuICAgICAgcmV0dXJuIHF1ZXJ5SW50ZXJmYWNlLnN0YXJ0VHJhbnNhY3Rpb24odGhpcywgdGhpcy5vcHRpb25zKS50aGVuKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gcXVlcnlJbnRlcmZhY2Uuc2V0SXNvbGF0aW9uTGV2ZWwodGhpcywgdGhpcy5vcHRpb25zLmlzb2xhdGlvbkxldmVsLCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcXVlcnlJbnRlcmZhY2Uuc2V0SXNvbGF0aW9uTGV2ZWwodGhpcywgdGhpcy5vcHRpb25zLmlzb2xhdGlvbkxldmVsLCB0aGlzLm9wdGlvbnMpLnRoZW4oKCkgPT4ge1xyXG4gICAgICByZXR1cm4gcXVlcnlJbnRlcmZhY2Uuc3RhcnRUcmFuc2FjdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbGVhbnVwKCkge1xyXG4gICAgY29uc3QgcmVzID0gdGhpcy5zZXF1ZWxpemUuY29ubmVjdGlvbk1hbmFnZXIucmVsZWFzZUNvbm5lY3Rpb24odGhpcy5jb25uZWN0aW9uKTtcclxuICAgIHRoaXMuY29ubmVjdGlvbi51dWlkID0gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIF9jbGVhckNscygpIHtcclxuICAgIGNvbnN0IGNscyA9IHRoaXMuc2VxdWVsaXplLmNvbnN0cnVjdG9yLl9jbHM7XHJcblxyXG4gICAgaWYgKGNscykge1xyXG4gICAgICBpZiAoY2xzLmdldCgndHJhbnNhY3Rpb24nKSA9PT0gdGhpcykge1xyXG4gICAgICAgIGNscy5zZXQoJ3RyYW5zYWN0aW9uJywgbnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgaG9vayB0aGF0IGlzIHJ1biBhZnRlciBhIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggdGhlIGNvbW1pdHRlZCB0cmFuc2FjdGlvblxyXG4gICAqIEBuYW1lIGFmdGVyQ29tbWl0XHJcbiAgICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5UcmFuc2FjdGlvblxyXG4gICAqL1xyXG4gIGFmdGVyQ29tbWl0KGZuKSB7XHJcbiAgICBpZiAoIWZuIHx8IHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiZm5cIiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2FmdGVyQ29tbWl0SG9va3MucHVzaChmbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUeXBlcyBjYW4gYmUgc2V0IHBlci10cmFuc2FjdGlvbiBieSBwYXNzaW5nIGBvcHRpb25zLnR5cGVgIHRvIGBzZXF1ZWxpemUudHJhbnNhY3Rpb25gLlxyXG4gICAqIERlZmF1bHQgdG8gYERFRkVSUkVEYCBidXQgeW91IGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdCB0eXBlIGJ5IHBhc3NpbmcgYG9wdGlvbnMudHJhbnNhY3Rpb25UeXBlYCBpbiBgbmV3IFNlcXVlbGl6ZWAuXHJcbiAgICogU3FsaXRlIG9ubHkuXHJcbiAgICpcclxuICAgKiBQYXNzIGluIHRoZSBkZXNpcmVkIGxldmVsIGFzIHRoZSBmaXJzdCBhcmd1bWVudDpcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogcmV0dXJuIHNlcXVlbGl6ZS50cmFuc2FjdGlvbih7dHlwZTogU2VxdWVsaXplLlRyYW5zYWN0aW9uLlRZUEVTLkVYQ0xVU0lWRX0sIHRyYW5zYWN0aW9uID0+IHtcclxuICAgKiAgIC8vIHlvdXIgdHJhbnNhY3Rpb25zXHJcbiAgICogfSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAqICAgLy8gdHJhbnNhY3Rpb24gaGFzIGJlZW4gY29tbWl0dGVkLiBEbyBzb21ldGhpbmcgYWZ0ZXIgdGhlIGNvbW1pdCBpZiByZXF1aXJlZC5cclxuICAgKiB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAqICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIGVyci5cclxuICAgKiB9KTtcclxuICAgKlxyXG4gICAqIEBwcm9wZXJ0eSBERUZFUlJFRFxyXG4gICAqIEBwcm9wZXJ0eSBJTU1FRElBVEVcclxuICAgKiBAcHJvcGVydHkgRVhDTFVTSVZFXHJcbiAgICovXHJcbiAgc3RhdGljIGdldCBUWVBFUygpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIERFRkVSUkVEOiAnREVGRVJSRUQnLFxyXG4gICAgICBJTU1FRElBVEU6ICdJTU1FRElBVEUnLFxyXG4gICAgICBFWENMVVNJVkU6ICdFWENMVVNJVkUnXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXNvbGF0aW9uIGxldmVscyBjYW4gYmUgc2V0IHBlci10cmFuc2FjdGlvbiBieSBwYXNzaW5nIGBvcHRpb25zLmlzb2xhdGlvbkxldmVsYCB0byBgc2VxdWVsaXplLnRyYW5zYWN0aW9uYC5cclxuICAgKiBTZXF1ZWxpemUgdXNlcyB0aGUgZGVmYXVsdCBpc29sYXRpb24gbGV2ZWwgb2YgdGhlIGRhdGFiYXNlLCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgcGFzc2luZyBgb3B0aW9ucy5pc29sYXRpb25MZXZlbGAgaW4gU2VxdWVsaXplIGNvbnN0cnVjdG9yIG9wdGlvbnMuXHJcbiAgICpcclxuICAgKiBQYXNzIGluIHRoZSBkZXNpcmVkIGxldmVsIGFzIHRoZSBmaXJzdCBhcmd1bWVudDpcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogcmV0dXJuIHNlcXVlbGl6ZS50cmFuc2FjdGlvbih7aXNvbGF0aW9uTGV2ZWw6IFNlcXVlbGl6ZS5UcmFuc2FjdGlvbi5JU09MQVRJT05fTEVWRUxTLlNFUklBTElaQUJMRX0sIHRyYW5zYWN0aW9uID0+IHtcclxuICAgKiAgIC8vIHlvdXIgdHJhbnNhY3Rpb25zXHJcbiAgICogfSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAqICAgLy8gdHJhbnNhY3Rpb24gaGFzIGJlZW4gY29tbWl0dGVkLiBEbyBzb21ldGhpbmcgYWZ0ZXIgdGhlIGNvbW1pdCBpZiByZXF1aXJlZC5cclxuICAgKiB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAqICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIGVyci5cclxuICAgKiB9KTtcclxuICAgKlxyXG4gICAqIEBwcm9wZXJ0eSBSRUFEX1VOQ09NTUlUVEVEXHJcbiAgICogQHByb3BlcnR5IFJFQURfQ09NTUlUVEVEXHJcbiAgICogQHByb3BlcnR5IFJFUEVBVEFCTEVfUkVBRFxyXG4gICAqIEBwcm9wZXJ0eSBTRVJJQUxJWkFCTEVcclxuICAgKi9cclxuICBzdGF0aWMgZ2V0IElTT0xBVElPTl9MRVZFTFMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBSRUFEX1VOQ09NTUlUVEVEOiAnUkVBRCBVTkNPTU1JVFRFRCcsXHJcbiAgICAgIFJFQURfQ09NTUlUVEVEOiAnUkVBRCBDT01NSVRURUQnLFxyXG4gICAgICBSRVBFQVRBQkxFX1JFQUQ6ICdSRVBFQVRBQkxFIFJFQUQnLFxyXG4gICAgICBTRVJJQUxJWkFCTEU6ICdTRVJJQUxJWkFCTEUnXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFBvc3NpYmxlIG9wdGlvbnMgZm9yIHJvdyBsb2NraW5nLiBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYGZpbmRgIGNhbGxzOlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLyB0MSBpcyBhIHRyYW5zYWN0aW9uXHJcbiAgICogTW9kZWwuZmluZEFsbCh7XHJcbiAgICogICB3aGVyZTogLi4uLFxyXG4gICAqICAgdHJhbnNhY3Rpb246IHQxLFxyXG4gICAqICAgbG9jazogdDEuTE9DSy4uLlxyXG4gICAqIH0pO1xyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+UG9zdGdyZXMgYWxzbyBzdXBwb3J0cyBzcGVjaWZpYyBsb2NrcyB3aGlsZSBlYWdlciBsb2FkaW5nIGJ5IHVzaW5nIE9GOjwvY2FwdGlvbj5cclxuICAgKiBVc2VyTW9kZWwuZmluZEFsbCh7XHJcbiAgICogICB3aGVyZTogLi4uLFxyXG4gICAqICAgaW5jbHVkZTogW1Rhc2tNb2RlbCwgLi4uXSxcclxuICAgKiAgIHRyYW5zYWN0aW9uOiB0MSxcclxuICAgKiAgIGxvY2s6IHtcclxuICAgKiAgICAgbGV2ZWw6IHQxLkxPQ0suLi4sXHJcbiAgICogICAgIG9mOiBVc2VyTW9kZWxcclxuICAgKiAgIH1cclxuICAgKiB9KTtcclxuICAgKlxyXG4gICAqICMgVXNlck1vZGVsIHdpbGwgYmUgbG9ja2VkIGJ1dCBUYXNrTW9kZWwgd29uJ3QhXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5Zb3UgY2FuIGFsc28gc2tpcCBsb2NrZWQgcm93czo8L2NhcHRpb24+XHJcbiAgICogLy8gdDEgaXMgYSB0cmFuc2FjdGlvblxyXG4gICAqIE1vZGVsLmZpbmRBbGwoe1xyXG4gICAqICAgd2hlcmU6IC4uLixcclxuICAgKiAgIHRyYW5zYWN0aW9uOiB0MSxcclxuICAgKiAgIGxvY2s6IHRydWUsXHJcbiAgICogICBza2lwTG9ja2VkOiB0cnVlXHJcbiAgICogfSk7XHJcbiAgICogIyBUaGUgcXVlcnkgd2lsbCBub3cgcmV0dXJuIGFueSByb3dzIHRoYXQgYXJlbid0IGxvY2tlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAqIEBwcm9wZXJ0eSBVUERBVEVcclxuICAgKiBAcHJvcGVydHkgU0hBUkVcclxuICAgKiBAcHJvcGVydHkgS0VZX1NIQVJFIFBvc3RncmVzIDkuMysgb25seVxyXG4gICAqIEBwcm9wZXJ0eSBOT19LRVlfVVBEQVRFIFBvc3RncmVzIDkuMysgb25seVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXQgTE9DSygpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIFVQREFURTogJ1VQREFURScsXHJcbiAgICAgIFNIQVJFOiAnU0hBUkUnLFxyXG4gICAgICBLRVlfU0hBUkU6ICdLRVkgU0hBUkUnLFxyXG4gICAgICBOT19LRVlfVVBEQVRFOiAnTk8gS0VZIFVQREFURSdcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQbGVhc2Ugc2VlIHtAbGluayBUcmFuc2FjdGlvbi5MT0NLfVxyXG4gICAqL1xyXG4gIGdldCBMT0NLKCkge1xyXG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uLkxPQ0s7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zYWN0aW9uO1xyXG5tb2R1bGUuZXhwb3J0cy5UcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uO1xyXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNhY3Rpb247XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi90cmFuc2FjdGlvbi5qcyJdLCJuYW1lcyI6WyJQcm9taXNlIiwicmVxdWlyZSIsIlRyYW5zYWN0aW9uIiwic2VxdWVsaXplIiwib3B0aW9ucyIsInNhdmVwb2ludHMiLCJfYWZ0ZXJDb21taXRIb29rcyIsImdlbmVyYXRlVHJhbnNhY3Rpb25JZCIsImRpYWxlY3QiLCJRdWVyeUdlbmVyYXRvciIsIk9iamVjdCIsImFzc2lnbiIsInR5cGUiLCJ0cmFuc2FjdGlvblR5cGUiLCJpc29sYXRpb25MZXZlbCIsInJlYWRPbmx5IiwicGFyZW50IiwidHJhbnNhY3Rpb24iLCJpZCIsInB1c2giLCJuYW1lIiwibGVuZ3RoIiwiZmluaXNoZWQiLCJyZWplY3QiLCJFcnJvciIsIl9jbGVhckNscyIsImdldFF1ZXJ5SW50ZXJmYWNlIiwiY29tbWl0VHJhbnNhY3Rpb24iLCJmaW5hbGx5IiwiY2xlYW51cCIsInRhcCIsImVhY2giLCJob29rIiwicmVzb2x2ZSIsImFwcGx5IiwiY29ubmVjdGlvbiIsInJvbGxiYWNrVHJhbnNhY3Rpb24iLCJ1c2VDTFMiLCJjb25uZWN0aW9uUHJvbWlzZSIsInVuZGVmaW5lZCIsImFjcXVpcmVPcHRpb25zIiwidXVpZCIsImNvbm5lY3Rpb25NYW5hZ2VyIiwiZ2V0Q29ubmVjdGlvbiIsInRoZW4iLCJiZWdpbiIsInNldERlZmVycmFibGUiLCJjYXRjaCIsInNldHVwRXJyIiwicm9sbGJhY2siLCJjb25zdHJ1Y3RvciIsIl9jbHMiLCJzZXQiLCJkZWZlcnJhYmxlIiwiZGVmZXJDb25zdHJhaW50cyIsInF1ZXJ5SW50ZXJmYWNlIiwic3VwcG9ydHMiLCJzZXR0aW5nSXNvbGF0aW9uTGV2ZWxEdXJpbmdUcmFuc2FjdGlvbiIsInN0YXJ0VHJhbnNhY3Rpb24iLCJzZXRJc29sYXRpb25MZXZlbCIsInJlcyIsInJlbGVhc2VDb25uZWN0aW9uIiwiY2xzIiwiZ2V0IiwiZm4iLCJMT0NLIiwiREVGRVJSRUQiLCJJTU1FRElBVEUiLCJFWENMVVNJVkUiLCJSRUFEX1VOQ09NTUlUVEVEIiwiUkVBRF9DT01NSVRURUQiLCJSRVBFQVRBQkxFX1JFQUQiLCJTRVJJQUxJWkFCTEUiLCJVUERBVEUiLCJTSEFSRSIsIktFWV9TSEFSRSIsIk5PX0tFWV9VUERBVEUiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUEsTUFBTUEsT0FBTyxHQUFHQyxPQUFPLENBQUMsV0FBRCxDQUF2QjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztJQUNNQyxXO0FBQ0o7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0UsdUJBQVlDLFNBQVosRUFBdUJDLE9BQXZCLEVBQWdDO0FBQUE7O0FBQzlCLFNBQUtELFNBQUwsR0FBaUJBLFNBQWpCO0FBQ0EsU0FBS0UsVUFBTCxHQUFrQixFQUFsQjtBQUNBLFNBQUtDLGlCQUFMLEdBQXlCLEVBQXpCLENBSDhCLENBSzlCOztBQUNBLFVBQU1DLHFCQUFxQixHQUFHLEtBQUtKLFNBQUwsQ0FBZUssT0FBZixDQUF1QkMsY0FBdkIsQ0FBc0NGLHFCQUFwRTtBQUVBLFNBQUtILE9BQUwsR0FBZU0sTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDM0JDLE1BQUFBLElBQUksRUFBRVQsU0FBUyxDQUFDQyxPQUFWLENBQWtCUyxlQURHO0FBRTNCQyxNQUFBQSxjQUFjLEVBQUVYLFNBQVMsQ0FBQ0MsT0FBVixDQUFrQlUsY0FGUDtBQUczQkMsTUFBQUEsUUFBUSxFQUFFO0FBSGlCLEtBQWQsRUFJWlgsT0FBTyxJQUFJLEVBSkMsQ0FBZjtBQU1BLFNBQUtZLE1BQUwsR0FBYyxLQUFLWixPQUFMLENBQWFhLFdBQTNCOztBQUVBLFFBQUksS0FBS0QsTUFBVCxFQUFpQjtBQUNmLFdBQUtFLEVBQUwsR0FBVSxLQUFLRixNQUFMLENBQVlFLEVBQXRCO0FBQ0EsV0FBS0YsTUFBTCxDQUFZWCxVQUFaLENBQXVCYyxJQUF2QixDQUE0QixJQUE1QjtBQUNBLFdBQUtDLElBQUwsR0FBYSxHQUFFLEtBQUtGLEVBQUcsT0FBTSxLQUFLRixNQUFMLENBQVlYLFVBQVosQ0FBdUJnQixNQUFPLEVBQTNEO0FBQ0QsS0FKRCxNQUlPO0FBQ0wsV0FBS0gsRUFBTCxHQUFVLEtBQUtFLElBQUwsR0FBWWIscUJBQXFCLEVBQTNDO0FBQ0Q7O0FBRUQsV0FBTyxLQUFLSCxPQUFMLENBQWFhLFdBQXBCO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs2QkFDVztBQUNQLFVBQUksS0FBS0ssUUFBVCxFQUFtQjtBQUNqQixlQUFPdEIsT0FBTyxDQUFDdUIsTUFBUixDQUFlLElBQUlDLEtBQUosQ0FBVyw0RUFBMkUsS0FBS0YsUUFBUyxFQUFwRyxDQUFmLENBQVA7QUFDRDs7QUFFRCxXQUFLRyxTQUFMOztBQUVBLGFBQU8sS0FDSnRCLFNBREksQ0FFSnVCLGlCQUZJLEdBR0pDLGlCQUhJLENBR2MsSUFIZCxFQUdvQixLQUFLdkIsT0FIekIsRUFJSndCLE9BSkksQ0FJSSxNQUFNO0FBQ2IsYUFBS04sUUFBTCxHQUFnQixRQUFoQjs7QUFDQSxZQUFJLENBQUMsS0FBS04sTUFBVixFQUFrQjtBQUNoQixpQkFBTyxLQUFLYSxPQUFMLEVBQVA7QUFDRDs7QUFDRCxlQUFPLElBQVA7QUFDRCxPQVZJLEVBVUZDLEdBVkUsQ0FXSCxNQUFNOUIsT0FBTyxDQUFDK0IsSUFBUixDQUNKLEtBQUt6QixpQkFERCxFQUVKMEIsSUFBSSxJQUFJaEMsT0FBTyxDQUFDaUMsT0FBUixDQUFnQkQsSUFBSSxDQUFDRSxLQUFMLENBQVcsSUFBWCxFQUFpQixDQUFDLElBQUQsQ0FBakIsQ0FBaEIsQ0FGSixDQVhILENBQVA7QUFlRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7K0JBQ2E7QUFDVCxVQUFJLEtBQUtaLFFBQVQsRUFBbUI7QUFDakIsZUFBT3RCLE9BQU8sQ0FBQ3VCLE1BQVIsQ0FBZSxJQUFJQyxLQUFKLENBQVcsOEVBQTZFLEtBQUtGLFFBQVMsRUFBdEcsQ0FBZixDQUFQO0FBQ0Q7O0FBRUQsVUFBSSxDQUFDLEtBQUthLFVBQVYsRUFBc0I7QUFDcEIsZUFBT25DLE9BQU8sQ0FBQ3VCLE1BQVIsQ0FBZSxJQUFJQyxLQUFKLENBQVUsNERBQVYsQ0FBZixDQUFQO0FBQ0Q7O0FBRUQsV0FBS0MsU0FBTDs7QUFFQSxhQUFPLEtBQ0p0QixTQURJLENBRUp1QixpQkFGSSxHQUdKVSxtQkFISSxDQUdnQixJQUhoQixFQUdzQixLQUFLaEMsT0FIM0IsRUFJSndCLE9BSkksQ0FJSSxNQUFNO0FBQ2IsWUFBSSxDQUFDLEtBQUtaLE1BQVYsRUFBa0I7QUFDaEIsaUJBQU8sS0FBS2EsT0FBTCxFQUFQO0FBQ0Q7O0FBQ0QsZUFBTyxJQUFQO0FBQ0QsT0FUSSxDQUFQO0FBVUQ7Ozt1Q0FFa0JRLE0sRUFBUTtBQUN6QixVQUFJQyxpQkFBSjs7QUFFQSxVQUFJRCxNQUFNLEtBQUtFLFNBQWYsRUFBMEI7QUFDeEJGLFFBQUFBLE1BQU0sR0FBRyxJQUFUO0FBQ0Q7O0FBRUQsVUFBSSxLQUFLckIsTUFBVCxFQUFpQjtBQUNmc0IsUUFBQUEsaUJBQWlCLEdBQUd0QyxPQUFPLENBQUNpQyxPQUFSLENBQWdCLEtBQUtqQixNQUFMLENBQVltQixVQUE1QixDQUFwQjtBQUNELE9BRkQsTUFFTztBQUNMLGNBQU1LLGNBQWMsR0FBRztBQUFFQyxVQUFBQSxJQUFJLEVBQUUsS0FBS3ZCO0FBQWIsU0FBdkI7O0FBQ0EsWUFBSSxLQUFLZCxPQUFMLENBQWFXLFFBQWpCLEVBQTJCO0FBQ3pCeUIsVUFBQUEsY0FBYyxDQUFDNUIsSUFBZixHQUFzQixRQUF0QjtBQUNEOztBQUNEMEIsUUFBQUEsaUJBQWlCLEdBQUcsS0FBS25DLFNBQUwsQ0FBZXVDLGlCQUFmLENBQWlDQyxhQUFqQyxDQUErQ0gsY0FBL0MsQ0FBcEI7QUFDRDs7QUFFRCxhQUFPRixpQkFBaUIsQ0FDckJNLElBREksQ0FDQ1QsVUFBVSxJQUFJO0FBQ2xCLGFBQUtBLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsYUFBS0EsVUFBTCxDQUFnQk0sSUFBaEIsR0FBdUIsS0FBS3ZCLEVBQTVCO0FBQ0QsT0FKSSxFQUtKMEIsSUFMSSxDQUtDLE1BQU07QUFDVixlQUFPLEtBQUtDLEtBQUwsR0FDSkQsSUFESSxDQUNDLE1BQU0sS0FBS0UsYUFBTCxFQURQLEVBRUpDLEtBRkksQ0FFRUMsUUFBUSxJQUFJLEtBQUtDLFFBQUwsR0FBZ0JyQixPQUFoQixDQUF3QixNQUFNO0FBQy9DLGdCQUFNb0IsUUFBTjtBQUNELFNBRmtCLENBRmQsQ0FBUDtBQUtELE9BWEksRUFZSmxCLEdBWkksQ0FZQSxNQUFNO0FBQ1QsWUFBSU8sTUFBTSxJQUFJLEtBQUtsQyxTQUFMLENBQWUrQyxXQUFmLENBQTJCQyxJQUF6QyxFQUErQztBQUM3QyxlQUFLaEQsU0FBTCxDQUFlK0MsV0FBZixDQUEyQkMsSUFBM0IsQ0FBZ0NDLEdBQWhDLENBQW9DLGFBQXBDLEVBQW1ELElBQW5EO0FBQ0Q7O0FBQ0QsZUFBTyxJQUFQO0FBQ0QsT0FqQkksQ0FBUDtBQWtCRDs7O29DQUVlO0FBQ2QsVUFBSSxLQUFLaEQsT0FBTCxDQUFhaUQsVUFBakIsRUFBNkI7QUFDM0IsZUFBTyxLQUNKbEQsU0FESSxDQUVKdUIsaUJBRkksR0FHSjRCLGdCQUhJLENBR2EsSUFIYixFQUdtQixLQUFLbEQsT0FIeEIsQ0FBUDtBQUlEO0FBQ0Y7Ozs0QkFFTztBQUNOLFlBQU1tRCxjQUFjLEdBQUcsS0FBS3BELFNBQUwsQ0FBZXVCLGlCQUFmLEVBQXZCOztBQUVBLFVBQUssS0FBS3ZCLFNBQUwsQ0FBZUssT0FBZixDQUF1QmdELFFBQXZCLENBQWdDQyxzQ0FBckMsRUFBOEU7QUFDNUUsZUFBT0YsY0FBYyxDQUFDRyxnQkFBZixDQUFnQyxJQUFoQyxFQUFzQyxLQUFLdEQsT0FBM0MsRUFBb0R3QyxJQUFwRCxDQUF5RCxNQUFNO0FBQ3BFLGlCQUFPVyxjQUFjLENBQUNJLGlCQUFmLENBQWlDLElBQWpDLEVBQXVDLEtBQUt2RCxPQUFMLENBQWFVLGNBQXBELEVBQW9FLEtBQUtWLE9BQXpFLENBQVA7QUFDRCxTQUZNLENBQVA7QUFHRDs7QUFFRCxhQUFPbUQsY0FBYyxDQUFDSSxpQkFBZixDQUFpQyxJQUFqQyxFQUF1QyxLQUFLdkQsT0FBTCxDQUFhVSxjQUFwRCxFQUFvRSxLQUFLVixPQUF6RSxFQUFrRndDLElBQWxGLENBQXVGLE1BQU07QUFDbEcsZUFBT1csY0FBYyxDQUFDRyxnQkFBZixDQUFnQyxJQUFoQyxFQUFzQyxLQUFLdEQsT0FBM0MsQ0FBUDtBQUNELE9BRk0sQ0FBUDtBQUdEOzs7OEJBRVM7QUFDUixZQUFNd0QsR0FBRyxHQUFHLEtBQUt6RCxTQUFMLENBQWV1QyxpQkFBZixDQUFpQ21CLGlCQUFqQyxDQUFtRCxLQUFLMUIsVUFBeEQsQ0FBWjtBQUNBLFdBQUtBLFVBQUwsQ0FBZ0JNLElBQWhCLEdBQXVCRixTQUF2QjtBQUNBLGFBQU9xQixHQUFQO0FBQ0Q7OztnQ0FFVztBQUNWLFlBQU1FLEdBQUcsR0FBRyxLQUFLM0QsU0FBTCxDQUFlK0MsV0FBZixDQUEyQkMsSUFBdkM7O0FBRUEsVUFBSVcsR0FBSixFQUFTO0FBQ1AsWUFBSUEsR0FBRyxDQUFDQyxHQUFKLENBQVEsYUFBUixNQUEyQixJQUEvQixFQUFxQztBQUNuQ0QsVUFBQUEsR0FBRyxDQUFDVixHQUFKLENBQVEsYUFBUixFQUF1QixJQUF2QjtBQUNEO0FBQ0Y7QUFDRjtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O2dDQUNjWSxFLEVBQUk7QUFDZCxVQUFJLENBQUNBLEVBQUQsSUFBTyxPQUFPQSxFQUFQLEtBQWMsVUFBekIsRUFBcUM7QUFDbkMsY0FBTSxJQUFJeEMsS0FBSixDQUFVLHlCQUFWLENBQU47QUFDRDs7QUFDRCxXQUFLbEIsaUJBQUwsQ0FBdUJhLElBQXZCLENBQTRCNkMsRUFBNUI7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBd0ZFO0FBQ0Y7QUFDQTtxQkFDYTtBQUNULGFBQU85RCxXQUFXLENBQUMrRCxJQUFuQjtBQUNEOzs7cUJBNUZrQjtBQUNqQixhQUFPO0FBQ0xDLFFBQUFBLFFBQVEsRUFBRSxVQURMO0FBRUxDLFFBQUFBLFNBQVMsRUFBRSxXQUZOO0FBR0xDLFFBQUFBLFNBQVMsRUFBRTtBQUhOLE9BQVA7QUFLRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7cUJBQ2dDO0FBQzVCLGFBQU87QUFDTEMsUUFBQUEsZ0JBQWdCLEVBQUUsa0JBRGI7QUFFTEMsUUFBQUEsY0FBYyxFQUFFLGdCQUZYO0FBR0xDLFFBQUFBLGVBQWUsRUFBRSxpQkFIWjtBQUlMQyxRQUFBQSxZQUFZLEVBQUU7QUFKVCxPQUFQO0FBTUQ7QUFHRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztxQkFDb0I7QUFDaEIsYUFBTztBQUNMQyxRQUFBQSxNQUFNLEVBQUUsUUFESDtBQUVMQyxRQUFBQSxLQUFLLEVBQUUsT0FGRjtBQUdMQyxRQUFBQSxTQUFTLEVBQUUsV0FITjtBQUlMQyxRQUFBQSxhQUFhLEVBQUU7QUFKVixPQUFQO0FBTUQ7Ozs7OztBQVVIQyxNQUFNLENBQUNDLE9BQVAsR0FBaUI1RSxXQUFqQjtBQUNBMkUsTUFBTSxDQUFDQyxPQUFQLENBQWU1RSxXQUFmLEdBQTZCQSxXQUE3QjtBQUNBMkUsTUFBTSxDQUFDQyxPQUFQLENBQWVDLE9BQWYsR0FBeUI3RSxXQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJy4vcHJvbWlzZScpO1xuXG4vKipcbiAqIFRoZSB0cmFuc2FjdGlvbiBvYmplY3QgaXMgdXNlZCB0byBpZGVudGlmeSBhIHJ1bm5pbmcgdHJhbnNhY3Rpb24uXG4gKiBJdCBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgYFNlcXVlbGl6ZS50cmFuc2FjdGlvbigpYC5cbiAqIFRvIHJ1biBhIHF1ZXJ5IHVuZGVyIGEgdHJhbnNhY3Rpb24sIHlvdSBzaG91bGQgcGFzcyB0aGUgdHJhbnNhY3Rpb24gaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIEBjbGFzcyBUcmFuc2FjdGlvblxuICogQHNlZSB7QGxpbmsgU2VxdWVsaXplLnRyYW5zYWN0aW9ufVxuICovXG5jbGFzcyBUcmFuc2FjdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHRyYW5zYWN0aW9uIGluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7U2VxdWVsaXplfSBzZXF1ZWxpemUgQSBjb25maWd1cmVkIHNlcXVlbGl6ZSBJbnN0YW5jZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50eXBlXSBTZXRzIHRoZSB0eXBlIG9mIHRoZSB0cmFuc2FjdGlvbi4gU3FsaXRlIG9ubHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmlzb2xhdGlvbkxldmVsXSBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgb2YgdGhlIHRyYW5zYWN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZGVmZXJyYWJsZV0gU2V0cyB0aGUgY29uc3RyYWludHMgdG8gYmUgZGVmZXJyZWQgb3IgaW1tZWRpYXRlbHkgY2hlY2tlZC4gUG9zdGdyZVNRTCBvbmx5XG4gICAqL1xuICBjb25zdHJ1Y3RvcihzZXF1ZWxpemUsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnNlcXVlbGl6ZSA9IHNlcXVlbGl6ZTtcbiAgICB0aGlzLnNhdmVwb2ludHMgPSBbXTtcbiAgICB0aGlzLl9hZnRlckNvbW1pdEhvb2tzID0gW107XG5cbiAgICAvLyBnZXQgZGlhbGVjdCBzcGVjaWZpYyB0cmFuc2FjdGlvbiBvcHRpb25zXG4gICAgY29uc3QgZ2VuZXJhdGVUcmFuc2FjdGlvbklkID0gdGhpcy5zZXF1ZWxpemUuZGlhbGVjdC5RdWVyeUdlbmVyYXRvci5nZW5lcmF0ZVRyYW5zYWN0aW9uSWQ7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIHR5cGU6IHNlcXVlbGl6ZS5vcHRpb25zLnRyYW5zYWN0aW9uVHlwZSxcbiAgICAgIGlzb2xhdGlvbkxldmVsOiBzZXF1ZWxpemUub3B0aW9ucy5pc29sYXRpb25MZXZlbCxcbiAgICAgIHJlYWRPbmx5OiBmYWxzZVxuICAgIH0sIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdGhpcy5wYXJlbnQgPSB0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb247XG5cbiAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLnBhcmVudC5pZDtcbiAgICAgIHRoaXMucGFyZW50LnNhdmVwb2ludHMucHVzaCh0aGlzKTtcbiAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMuaWR9LXNwLSR7dGhpcy5wYXJlbnQuc2F2ZXBvaW50cy5sZW5ndGh9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pZCA9IHRoaXMubmFtZSA9IGdlbmVyYXRlVHJhbnNhY3Rpb25JZCgpO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0IHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGNvbW1pdCgpIHtcbiAgICBpZiAodGhpcy5maW5pc2hlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVHJhbnNhY3Rpb24gY2Fubm90IGJlIGNvbW1pdHRlZCBiZWNhdXNlIGl0IGhhcyBiZWVuIGZpbmlzaGVkIHdpdGggc3RhdGU6ICR7dGhpcy5maW5pc2hlZH1gKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2xlYXJDbHMoKTtcblxuICAgIHJldHVybiB0aGlzXG4gICAgICAuc2VxdWVsaXplXG4gICAgICAuZ2V0UXVlcnlJbnRlcmZhY2UoKVxuICAgICAgLmNvbW1pdFRyYW5zYWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucylcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5maW5pc2hlZCA9ICdjb21taXQnO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW51cCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSkudGFwKFxuICAgICAgICAoKSA9PiBQcm9taXNlLmVhY2goXG4gICAgICAgICAgdGhpcy5fYWZ0ZXJDb21taXRIb29rcyxcbiAgICAgICAgICBob29rID0+IFByb21pc2UucmVzb2x2ZShob29rLmFwcGx5KHRoaXMsIFt0aGlzXSkpKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xsYmFjayAoYWJvcnQpIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHJvbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmZpbmlzaGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcm9sbGVkIGJhY2sgYmVjYXVzZSBpdCBoYXMgYmVlbiBmaW5pc2hlZCB3aXRoIHN0YXRlOiAke3RoaXMuZmluaXNoZWR9YCkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcm9sbGVkIGJhY2sgYmVjYXVzZSBpdCBuZXZlciBzdGFydGVkJykpO1xuICAgIH1cblxuICAgIHRoaXMuX2NsZWFyQ2xzKCk7XG5cbiAgICByZXR1cm4gdGhpc1xuICAgICAgLnNlcXVlbGl6ZVxuICAgICAgLmdldFF1ZXJ5SW50ZXJmYWNlKClcbiAgICAgIC5yb2xsYmFja1RyYW5zYWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucylcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJlcGFyZUVudmlyb25tZW50KHVzZUNMUykge1xuICAgIGxldCBjb25uZWN0aW9uUHJvbWlzZTtcblxuICAgIGlmICh1c2VDTFMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXNlQ0xTID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgIGNvbm5lY3Rpb25Qcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMucGFyZW50LmNvbm5lY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhY3F1aXJlT3B0aW9ucyA9IHsgdXVpZDogdGhpcy5pZCB9O1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWFkT25seSkge1xuICAgICAgICBhY3F1aXJlT3B0aW9ucy50eXBlID0gJ1NFTEVDVCc7XG4gICAgICB9XG4gICAgICBjb25uZWN0aW9uUHJvbWlzZSA9IHRoaXMuc2VxdWVsaXplLmNvbm5lY3Rpb25NYW5hZ2VyLmdldENvbm5lY3Rpb24oYWNxdWlyZU9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBjb25uZWN0aW9uUHJvbWlzZVxuICAgICAgLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi51dWlkID0gdGhpcy5pZDtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJlZ2luKClcbiAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnNldERlZmVycmFibGUoKSlcbiAgICAgICAgICAuY2F0Y2goc2V0dXBFcnIgPT4gdGhpcy5yb2xsYmFjaygpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgc2V0dXBFcnI7XG4gICAgICAgICAgfSkpO1xuICAgICAgfSlcbiAgICAgIC50YXAoKCkgPT4ge1xuICAgICAgICBpZiAodXNlQ0xTICYmIHRoaXMuc2VxdWVsaXplLmNvbnN0cnVjdG9yLl9jbHMpIHtcbiAgICAgICAgICB0aGlzLnNlcXVlbGl6ZS5jb25zdHJ1Y3Rvci5fY2xzLnNldCgndHJhbnNhY3Rpb24nLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0RGVmZXJyYWJsZSgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlZmVycmFibGUpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgICAgIC5zZXF1ZWxpemVcbiAgICAgICAgLmdldFF1ZXJ5SW50ZXJmYWNlKClcbiAgICAgICAgLmRlZmVyQ29uc3RyYWludHModGhpcywgdGhpcy5vcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBiZWdpbigpIHtcbiAgICBjb25zdCBxdWVyeUludGVyZmFjZSA9IHRoaXMuc2VxdWVsaXplLmdldFF1ZXJ5SW50ZXJmYWNlKCk7XG5cbiAgICBpZiAoIHRoaXMuc2VxdWVsaXplLmRpYWxlY3Quc3VwcG9ydHMuc2V0dGluZ0lzb2xhdGlvbkxldmVsRHVyaW5nVHJhbnNhY3Rpb24gKSB7XG4gICAgICByZXR1cm4gcXVlcnlJbnRlcmZhY2Uuc3RhcnRUcmFuc2FjdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMpLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gcXVlcnlJbnRlcmZhY2Uuc2V0SXNvbGF0aW9uTGV2ZWwodGhpcywgdGhpcy5vcHRpb25zLmlzb2xhdGlvbkxldmVsLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5SW50ZXJmYWNlLnNldElzb2xhdGlvbkxldmVsKHRoaXMsIHRoaXMub3B0aW9ucy5pc29sYXRpb25MZXZlbCwgdGhpcy5vcHRpb25zKS50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiBxdWVyeUludGVyZmFjZS5zdGFydFRyYW5zYWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhbnVwKCkge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuc2VxdWVsaXplLmNvbm5lY3Rpb25NYW5hZ2VyLnJlbGVhc2VDb25uZWN0aW9uKHRoaXMuY29ubmVjdGlvbik7XG4gICAgdGhpcy5jb25uZWN0aW9uLnV1aWQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIF9jbGVhckNscygpIHtcbiAgICBjb25zdCBjbHMgPSB0aGlzLnNlcXVlbGl6ZS5jb25zdHJ1Y3Rvci5fY2xzO1xuXG4gICAgaWYgKGNscykge1xuICAgICAgaWYgKGNscy5nZXQoJ3RyYW5zYWN0aW9uJykgPT09IHRoaXMpIHtcbiAgICAgICAgY2xzLnNldCgndHJhbnNhY3Rpb24nLCBudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSBob29rIHRoYXQgaXMgcnVuIGFmdGVyIGEgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIHRoZSBjb21taXR0ZWQgdHJhbnNhY3Rpb25cbiAgICogQG5hbWUgYWZ0ZXJDb21taXRcbiAgICogQG1lbWJlcm9mIFNlcXVlbGl6ZS5UcmFuc2FjdGlvblxuICAgKi9cbiAgYWZ0ZXJDb21taXQoZm4pIHtcbiAgICBpZiAoIWZuIHx8IHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcImZuXCIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIHRoaXMuX2FmdGVyQ29tbWl0SG9va3MucHVzaChmbik7XG4gIH1cblxuICAvKipcbiAgICogVHlwZXMgY2FuIGJlIHNldCBwZXItdHJhbnNhY3Rpb24gYnkgcGFzc2luZyBgb3B0aW9ucy50eXBlYCB0byBgc2VxdWVsaXplLnRyYW5zYWN0aW9uYC5cbiAgICogRGVmYXVsdCB0byBgREVGRVJSRURgIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHR5cGUgYnkgcGFzc2luZyBgb3B0aW9ucy50cmFuc2FjdGlvblR5cGVgIGluIGBuZXcgU2VxdWVsaXplYC5cbiAgICogU3FsaXRlIG9ubHkuXG4gICAqXG4gICAqIFBhc3MgaW4gdGhlIGRlc2lyZWQgbGV2ZWwgYXMgdGhlIGZpcnN0IGFyZ3VtZW50OlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiByZXR1cm4gc2VxdWVsaXplLnRyYW5zYWN0aW9uKHt0eXBlOiBTZXF1ZWxpemUuVHJhbnNhY3Rpb24uVFlQRVMuRVhDTFVTSVZFfSwgdHJhbnNhY3Rpb24gPT4ge1xuICAgKiAgIC8vIHlvdXIgdHJhbnNhY3Rpb25zXG4gICAqIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICogICAvLyB0cmFuc2FjdGlvbiBoYXMgYmVlbiBjb21taXR0ZWQuIERvIHNvbWV0aGluZyBhZnRlciB0aGUgY29tbWl0IGlmIHJlcXVpcmVkLlxuICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgKiAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBlcnIuXG4gICAqIH0pO1xuICAgKlxuICAgKiBAcHJvcGVydHkgREVGRVJSRURcbiAgICogQHByb3BlcnR5IElNTUVESUFURVxuICAgKiBAcHJvcGVydHkgRVhDTFVTSVZFXG4gICAqL1xuICBzdGF0aWMgZ2V0IFRZUEVTKCkge1xuICAgIHJldHVybiB7XG4gICAgICBERUZFUlJFRDogJ0RFRkVSUkVEJyxcbiAgICAgIElNTUVESUFURTogJ0lNTUVESUFURScsXG4gICAgICBFWENMVVNJVkU6ICdFWENMVVNJVkUnXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJc29sYXRpb24gbGV2ZWxzIGNhbiBiZSBzZXQgcGVyLXRyYW5zYWN0aW9uIGJ5IHBhc3NpbmcgYG9wdGlvbnMuaXNvbGF0aW9uTGV2ZWxgIHRvIGBzZXF1ZWxpemUudHJhbnNhY3Rpb25gLlxuICAgKiBTZXF1ZWxpemUgdXNlcyB0aGUgZGVmYXVsdCBpc29sYXRpb24gbGV2ZWwgb2YgdGhlIGRhdGFiYXNlLCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgcGFzc2luZyBgb3B0aW9ucy5pc29sYXRpb25MZXZlbGAgaW4gU2VxdWVsaXplIGNvbnN0cnVjdG9yIG9wdGlvbnMuXG4gICAqXG4gICAqIFBhc3MgaW4gdGhlIGRlc2lyZWQgbGV2ZWwgYXMgdGhlIGZpcnN0IGFyZ3VtZW50OlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiByZXR1cm4gc2VxdWVsaXplLnRyYW5zYWN0aW9uKHtpc29sYXRpb25MZXZlbDogU2VxdWVsaXplLlRyYW5zYWN0aW9uLklTT0xBVElPTl9MRVZFTFMuU0VSSUFMSVpBQkxFfSwgdHJhbnNhY3Rpb24gPT4ge1xuICAgKiAgIC8vIHlvdXIgdHJhbnNhY3Rpb25zXG4gICAqIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICogICAvLyB0cmFuc2FjdGlvbiBoYXMgYmVlbiBjb21taXR0ZWQuIERvIHNvbWV0aGluZyBhZnRlciB0aGUgY29tbWl0IGlmIHJlcXVpcmVkLlxuICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgKiAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBlcnIuXG4gICAqIH0pO1xuICAgKlxuICAgKiBAcHJvcGVydHkgUkVBRF9VTkNPTU1JVFRFRFxuICAgKiBAcHJvcGVydHkgUkVBRF9DT01NSVRURURcbiAgICogQHByb3BlcnR5IFJFUEVBVEFCTEVfUkVBRFxuICAgKiBAcHJvcGVydHkgU0VSSUFMSVpBQkxFXG4gICAqL1xuICBzdGF0aWMgZ2V0IElTT0xBVElPTl9MRVZFTFMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFJFQURfVU5DT01NSVRURUQ6ICdSRUFEIFVOQ09NTUlUVEVEJyxcbiAgICAgIFJFQURfQ09NTUlUVEVEOiAnUkVBRCBDT01NSVRURUQnLFxuICAgICAgUkVQRUFUQUJMRV9SRUFEOiAnUkVQRUFUQUJMRSBSRUFEJyxcbiAgICAgIFNFUklBTElaQUJMRTogJ1NFUklBTElaQUJMRSdcbiAgICB9O1xuICB9XG5cblxuICAvKipcbiAgICogUG9zc2libGUgb3B0aW9ucyBmb3Igcm93IGxvY2tpbmcuIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgZmluZGAgY2FsbHM6XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIHQxIGlzIGEgdHJhbnNhY3Rpb25cbiAgICogTW9kZWwuZmluZEFsbCh7XG4gICAqICAgd2hlcmU6IC4uLixcbiAgICogICB0cmFuc2FjdGlvbjogdDEsXG4gICAqICAgbG9jazogdDEuTE9DSy4uLlxuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+UG9zdGdyZXMgYWxzbyBzdXBwb3J0cyBzcGVjaWZpYyBsb2NrcyB3aGlsZSBlYWdlciBsb2FkaW5nIGJ5IHVzaW5nIE9GOjwvY2FwdGlvbj5cbiAgICogVXNlck1vZGVsLmZpbmRBbGwoe1xuICAgKiAgIHdoZXJlOiAuLi4sXG4gICAqICAgaW5jbHVkZTogW1Rhc2tNb2RlbCwgLi4uXSxcbiAgICogICB0cmFuc2FjdGlvbjogdDEsXG4gICAqICAgbG9jazoge1xuICAgKiAgICAgbGV2ZWw6IHQxLkxPQ0suLi4sXG4gICAqICAgICBvZjogVXNlck1vZGVsXG4gICAqICAgfVxuICAgKiB9KTtcbiAgICpcbiAgICogIyBVc2VyTW9kZWwgd2lsbCBiZSBsb2NrZWQgYnV0IFRhc2tNb2RlbCB3b24ndCFcbiAgICpcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+WW91IGNhbiBhbHNvIHNraXAgbG9ja2VkIHJvd3M6PC9jYXB0aW9uPlxuICAgKiAvLyB0MSBpcyBhIHRyYW5zYWN0aW9uXG4gICAqIE1vZGVsLmZpbmRBbGwoe1xuICAgKiAgIHdoZXJlOiAuLi4sXG4gICAqICAgdHJhbnNhY3Rpb246IHQxLFxuICAgKiAgIGxvY2s6IHRydWUsXG4gICAqICAgc2tpcExvY2tlZDogdHJ1ZVxuICAgKiB9KTtcbiAgICogIyBUaGUgcXVlcnkgd2lsbCBub3cgcmV0dXJuIGFueSByb3dzIHRoYXQgYXJlbid0IGxvY2tlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqIEBwcm9wZXJ0eSBVUERBVEVcbiAgICogQHByb3BlcnR5IFNIQVJFXG4gICAqIEBwcm9wZXJ0eSBLRVlfU0hBUkUgUG9zdGdyZXMgOS4zKyBvbmx5XG4gICAqIEBwcm9wZXJ0eSBOT19LRVlfVVBEQVRFIFBvc3RncmVzIDkuMysgb25seVxuICAgKi9cbiAgc3RhdGljIGdldCBMT0NLKCkge1xuICAgIHJldHVybiB7XG4gICAgICBVUERBVEU6ICdVUERBVEUnLFxuICAgICAgU0hBUkU6ICdTSEFSRScsXG4gICAgICBLRVlfU0hBUkU6ICdLRVkgU0hBUkUnLFxuICAgICAgTk9fS0VZX1VQREFURTogJ05PIEtFWSBVUERBVEUnXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQbGVhc2Ugc2VlIHtAbGluayBUcmFuc2FjdGlvbi5MT0NLfVxuICAgKi9cbiAgZ2V0IExPQ0soKSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uLkxPQ0s7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2FjdGlvbjtcbm1vZHVsZS5leHBvcnRzLlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb247XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNhY3Rpb247XG4iXX0= \ No newline at end of file diff --git a/dist/utils.js b/dist/utils.js index 0d5ff09..99aeefa 100644 --- a/dist/utils.js +++ b/dist/utils.js @@ -4,15 +4,19 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -475,17 +479,17 @@ let SequelizeMethod = function SequelizeMethod() { exports.SequelizeMethod = SequelizeMethod; -let Fn = -/*#__PURE__*/ -function (_SequelizeMethod) { +let Fn = /*#__PURE__*/function (_SequelizeMethod) { _inherits(Fn, _SequelizeMethod); + var _super = _createSuper(Fn); + function Fn(fn, args) { var _this; _classCallCheck(this, Fn); - _this = _possibleConstructorReturn(this, _getPrototypeOf(Fn).call(this)); + _this = _super.call(this); _this.fn = fn; _this.args = args; return _this; @@ -503,17 +507,17 @@ function (_SequelizeMethod) { exports.Fn = Fn; -let Col = -/*#__PURE__*/ -function (_SequelizeMethod2) { +let Col = /*#__PURE__*/function (_SequelizeMethod2) { _inherits(Col, _SequelizeMethod2); + var _super2 = _createSuper(Col); + function Col(col, ...args) { var _this2; _classCallCheck(this, Col); - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(Col).call(this)); + _this2 = _super2.call(this); if (args.length > 0) { col = args; @@ -528,17 +532,17 @@ function (_SequelizeMethod2) { exports.Col = Col; -let Cast = -/*#__PURE__*/ -function (_SequelizeMethod3) { +let Cast = /*#__PURE__*/function (_SequelizeMethod3) { _inherits(Cast, _SequelizeMethod3); + var _super3 = _createSuper(Cast); + function Cast(val, type, json) { var _this3; _classCallCheck(this, Cast); - _this3 = _possibleConstructorReturn(this, _getPrototypeOf(Cast).call(this)); + _this3 = _super3.call(this); _this3.val = val; _this3.type = (type || '').trim(); _this3.json = json || false; @@ -550,17 +554,17 @@ function (_SequelizeMethod3) { exports.Cast = Cast; -let Literal = -/*#__PURE__*/ -function (_SequelizeMethod4) { +let Literal = /*#__PURE__*/function (_SequelizeMethod4) { _inherits(Literal, _SequelizeMethod4); + var _super4 = _createSuper(Literal); + function Literal(val) { var _this4; _classCallCheck(this, Literal); - _this4 = _possibleConstructorReturn(this, _getPrototypeOf(Literal).call(this)); + _this4 = _super4.call(this); _this4.val = val; return _this4; } @@ -570,17 +574,17 @@ function (_SequelizeMethod4) { exports.Literal = Literal; -let Json = -/*#__PURE__*/ -function (_SequelizeMethod5) { +let Json = /*#__PURE__*/function (_SequelizeMethod5) { _inherits(Json, _SequelizeMethod5); + var _super5 = _createSuper(Json); + function Json(conditionsOrPath, value) { var _this5; _classCallCheck(this, Json); - _this5 = _possibleConstructorReturn(this, _getPrototypeOf(Json).call(this)); + _this5 = _super5.call(this); if (_.isObject(conditionsOrPath)) { _this5.conditions = conditionsOrPath; @@ -600,17 +604,17 @@ function (_SequelizeMethod5) { exports.Json = Json; -let Where = -/*#__PURE__*/ -function (_SequelizeMethod6) { +let Where = /*#__PURE__*/function (_SequelizeMethod6) { _inherits(Where, _SequelizeMethod6); + var _super6 = _createSuper(Where); + function Where(attribute, comparator, logic) { var _this6; _classCallCheck(this, Where); - _this6 = _possibleConstructorReturn(this, _getPrototypeOf(Where).call(this)); + _this6 = _super6.call(this); if (logic === undefined) { logic = comparator; @@ -779,4 +783,4 @@ function intersects(arr1, arr2) { } exports.intersects = intersects; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJEYXRhVHlwZXMiLCJyZXF1aXJlIiwiU3FsU3RyaW5nIiwiXyIsInV1aWR2MSIsInV1aWR2NCIsIlByb21pc2UiLCJvcGVyYXRvcnMiLCJvcGVyYXRvcnNTZXQiLCJTZXQiLCJ2YWx1ZXMiLCJpbmZsZWN0aW9uIiwiZXhwb3J0cyIsImNsYXNzVG9JbnZva2FibGUiLCJ1c2VJbmZsZWN0aW9uIiwiX2luZmxlY3Rpb24iLCJjYW1lbGl6ZUlmIiwic3RyIiwiY29uZGl0aW9uIiwicmVzdWx0IiwiY2FtZWxpemUiLCJ1bmRlcnNjb3JlZElmIiwidW5kZXJzY29yZSIsImlzUHJpbWl0aXZlIiwidmFsIiwidHlwZSIsIm1lcmdlRGVmYXVsdHMiLCJhIiwiYiIsIm1lcmdlV2l0aCIsIm9iamVjdFZhbHVlIiwiaXNQbGFpbk9iamVjdCIsInVuZGVmaW5lZCIsIm1lcmdlIiwib2JqIiwiYXJndW1lbnRzIiwiZm9yT3duIiwidmFsdWUiLCJrZXkiLCJBcnJheSIsImlzQXJyYXkiLCJjb25jYXQiLCJzcGxpY2VTdHIiLCJpbmRleCIsImNvdW50IiwiYWRkIiwic2xpY2UiLCJ0cmltIiwicmVwbGFjZSIsIm1hdGNoIiwiYyIsInRvVXBwZXJDYXNlIiwic2luZ3VsYXJpemUiLCJwbHVyYWxpemUiLCJmb3JtYXQiLCJhcnIiLCJkaWFsZWN0IiwidGltZVpvbmUiLCJmb3JtYXROYW1lZFBhcmFtZXRlcnMiLCJzcWwiLCJwYXJhbWV0ZXJzIiwiY2xvbmVEZWVwIiwib25seVBsYWluIiwiY2xvbmVEZWVwV2l0aCIsImVsZW0iLCJjbG9uZSIsIm1hcEZpbmRlck9wdGlvbnMiLCJvcHRpb25zIiwiTW9kZWwiLCJhdHRyaWJ1dGVzIiwiX2luamVjdERlcGVuZGVudFZpcnR1YWxBdHRyaWJ1dGVzIiwiZmlsdGVyIiwidiIsIl92aXJ0dWFsQXR0cmlidXRlcyIsImhhcyIsIm1hcE9wdGlvbkZpZWxkTmFtZXMiLCJtYXAiLCJhdHRyIiwicmF3QXR0cmlidXRlcyIsImZpZWxkIiwid2hlcmUiLCJtYXBXaGVyZUZpZWxkTmFtZXMiLCJnZXRDb21wbGV4S2V5cyIsImZvckVhY2giLCJhdHRyaWJ1dGUiLCJyYXdBdHRyaWJ1dGUiLCJmaWVsZE5hbWUiLCJIU1RPUkUiLCJKU09OIiwibWFwVmFsdWVGaWVsZE5hbWVzIiwiZGF0YVZhbHVlcyIsImZpZWxkcyIsImlzQ29sU3RyaW5nIiwibGVuZ3RoIiwiY2FuVHJlYXRBcnJheUFzQW5kIiwic29tZSIsImFyZyIsIldoZXJlIiwiY29tYmluZVRhYmxlTmFtZXMiLCJ0YWJsZU5hbWUxIiwidGFibGVOYW1lMiIsInRvTG93ZXJDYXNlIiwidG9EZWZhdWx0VmFsdWUiLCJ0bXAiLCJBQlNUUkFDVCIsInRvU3FsIiwiVVVJRFYxIiwiVVVJRFY0IiwiTk9XIiwibm93IiwiZGVmYXVsdFZhbHVlU2NoZW1hYmxlIiwicmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoIiwiaGFzaCIsIm9taXROdWxsIiwiYWxsb3dOdWxsIiwiX2hhc2giLCJmb3JJbiIsImluY2x1ZGVzIiwiZW5kc1dpdGgiLCJzdGFjayIsIm9yaWciLCJFcnJvciIsInByZXBhcmVTdGFja1RyYWNlIiwiZXJyIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJlcnJTdGFjayIsImRpYWxlY3RzIiwiZCIsIkRhdGUiLCJzZXRNaWxsaXNlY29uZHMiLCJUSUNLX0NIQVIiLCJhZGRUaWNrcyIsInMiLCJ0aWNrQ2hhciIsInJlbW92ZVRpY2tzIiwiUmVnRXhwIiwiZmxhdHRlbk9iamVjdERlZXAiLCJmbGF0dGVuZWRPYmoiLCJmbGF0dGVuT2JqZWN0Iiwic3ViUGF0aCIsIk9iamVjdCIsImtleXMiLCJwYXRoVG9Qcm9wZXJ0eSIsImdldCIsIlNlcXVlbGl6ZU1ldGhvZCIsIkZuIiwiZm4iLCJhcmdzIiwiQ29sIiwiY29sIiwiQ2FzdCIsImpzb24iLCJMaXRlcmFsIiwiSnNvbiIsImNvbmRpdGlvbnNPclBhdGgiLCJpc09iamVjdCIsImNvbmRpdGlvbnMiLCJwYXRoIiwiY29tcGFyYXRvciIsImxvZ2ljIiwiZ2V0T3BlcmF0b3JzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0Q29tcGxleFNpemUiLCJpc1doZXJlRW1wdHkiLCJpc0VtcHR5IiwiZ2VuZXJhdGVFbnVtTmFtZSIsInRhYmxlTmFtZSIsImNvbHVtbk5hbWUiLCJjYW1lbGl6ZU9iamVjdEtleXMiLCJuZXdPYmoiLCJkZWZhdWx0cyIsIm9iamVjdCIsInNvdXJjZXMiLCJzb3VyY2UiLCJlcSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIm5hbWVJbmRleCIsIm5hbWUiLCJqb2luIiwiaW50ZXJzZWN0cyIsImFycjEiLCJhcnIyIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxNQUFNQyxTQUFTLEdBQUdELE9BQU8sQ0FBQyxjQUFELENBQXpCOztBQUNBLE1BQU1FLENBQUMsR0FBR0YsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUcsTUFBTSxHQUFHSCxPQUFPLENBQUMsU0FBRCxDQUF0Qjs7QUFDQSxNQUFNSSxNQUFNLEdBQUdKLE9BQU8sQ0FBQyxTQUFELENBQXRCOztBQUNBLE1BQU1LLE9BQU8sR0FBR0wsT0FBTyxDQUFDLFdBQUQsQ0FBdkI7O0FBQ0EsTUFBTU0sU0FBUyxHQUFHTixPQUFPLENBQUMsYUFBRCxDQUF6Qjs7QUFDQSxNQUFNTyxZQUFZLEdBQUcsSUFBSUMsR0FBSixDQUFRTixDQUFDLENBQUNPLE1BQUYsQ0FBU0gsU0FBVCxDQUFSLENBQXJCOztBQUVBLElBQUlJLFVBQVUsR0FBR1YsT0FBTyxDQUFDLFlBQUQsQ0FBeEI7O0FBRUFXLE9BQU8sQ0FBQ0MsZ0JBQVIsR0FBMkJaLE9BQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9DWSxnQkFBL0Q7QUFFQUQsT0FBTyxDQUFDTixPQUFSLEdBQWtCQSxPQUFsQjs7QUFFQSxTQUFTUSxhQUFULENBQXVCQyxX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ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmNvbnN0IERhdGFUeXBlcyA9IHJlcXVpcmUoJy4vZGF0YS10eXBlcycpO1xyXG5jb25zdCBTcWxTdHJpbmcgPSByZXF1aXJlKCcuL3NxbC1zdHJpbmcnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCB1dWlkdjEgPSByZXF1aXJlKCd1dWlkL3YxJyk7XHJcbmNvbnN0IHV1aWR2NCA9IHJlcXVpcmUoJ3V1aWQvdjQnKTtcclxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJy4vcHJvbWlzZScpO1xyXG5jb25zdCBvcGVyYXRvcnMgPSByZXF1aXJlKCcuL29wZXJhdG9ycycpO1xyXG5jb25zdCBvcGVyYXRvcnNTZXQgPSBuZXcgU2V0KF8udmFsdWVzKG9wZXJhdG9ycykpO1xyXG5cclxubGV0IGluZmxlY3Rpb24gPSByZXF1aXJlKCdpbmZsZWN0aW9uJyk7XHJcblxyXG5leHBvcnRzLmNsYXNzVG9JbnZva2FibGUgPSByZXF1aXJlKCcuL3V0aWxzL2NsYXNzVG9JbnZva2FibGUnKS5jbGFzc1RvSW52b2thYmxlO1xyXG5cclxuZXhwb3J0cy5Qcm9taXNlID0gUHJvbWlzZTtcclxuXHJcbmZ1bmN0aW9uIHVzZUluZmxlY3Rpb24oX2luZmxlY3Rpb24pIHtcclxuICBpbmZsZWN0aW9uID0gX2luZmxlY3Rpb247XHJcbn1cclxuZXhwb3J0cy51c2VJbmZsZWN0aW9uID0gdXNlSW5mbGVjdGlvbjtcclxuXHJcbmZ1bmN0aW9uIGNhbWVsaXplSWYoc3RyLCBjb25kaXRpb24pIHtcclxuICBsZXQgcmVzdWx0ID0gc3RyO1xyXG5cclxuICBpZiAoY29uZGl0aW9uKSB7XHJcbiAgICByZXN1bHQgPSBjYW1lbGl6ZShzdHIpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5leHBvcnRzLmNhbWVsaXplSWYgPSBjYW1lbGl6ZUlmO1xyXG5cclxuZnVuY3Rpb24gdW5kZXJzY29yZWRJZihzdHIsIGNvbmRpdGlvbikge1xyXG4gIGxldCByZXN1bHQgPSBzdHI7XHJcblxyXG4gIGlmIChjb25kaXRpb24pIHtcclxuICAgIHJlc3VsdCA9IHVuZGVyc2NvcmUoc3RyKTtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZXhwb3J0cy51bmRlcnNjb3JlZElmID0gdW5kZXJzY29yZWRJZjtcclxuXHJcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbCkge1xyXG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsO1xyXG4gIHJldHVybiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnYm9vbGVhbic7XHJcbn1cclxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xyXG5cclxuLy8gU2FtZSBjb25jZXB0IGFzIF8ubWVyZ2UsIGJ1dCBkb24ndCBvdmVyd3JpdGUgcHJvcGVydGllcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFzc2lnbmVkXHJcbmZ1bmN0aW9uIG1lcmdlRGVmYXVsdHMoYSwgYikge1xyXG4gIHJldHVybiBfLm1lcmdlV2l0aChhLCBiLCBvYmplY3RWYWx1ZSA9PiB7XHJcbiAgICAvLyBJZiBpdCdzIGFuIG9iamVjdCwgbGV0IF8gaGFuZGxlIGl0IHRoaXMgdGltZSwgd2Ugd2lsbCBiZSBjYWxsZWQgYWdhaW4gZm9yIGVhY2ggcHJvcGVydHlcclxuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KG9iamVjdFZhbHVlKSAmJiBvYmplY3RWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBvYmplY3RWYWx1ZTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5leHBvcnRzLm1lcmdlRGVmYXVsdHMgPSBtZXJnZURlZmF1bHRzO1xyXG5cclxuLy8gQW4gYWx0ZXJuYXRpdmUgdG8gXy5tZXJnZSwgd2hpY2ggZG9lc24ndCBjbG9uZSBpdHMgYXJndW1lbnRzXHJcbi8vIENsb25pbmcgaXMgYSBiYWQgaWRlYSBiZWNhdXNlIG9wdGlvbnMgYXJndW1lbnRzIG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gc2VxdWVsaXplXHJcbi8vIG1vZGVscyAtIHdoaWNoIGFnYWluIHJlZmVyZW5jZSBkYXRhYmFzZSBsaWJzIHdoaWNoIGRvbid0IGxpa2UgdG8gYmUgY2xvbmVkIChpbiBwYXJ0aWN1bGFyIHBnLW5hdGl2ZSlcclxuZnVuY3Rpb24gbWVyZ2UoKSB7XHJcbiAgY29uc3QgcmVzdWx0ID0ge307XHJcblxyXG4gIGZvciAoY29uc3Qgb2JqIG9mIGFyZ3VtZW50cykge1xyXG4gICAgXy5mb3JPd24ob2JqLCAodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghcmVzdWx0W2tleV0pIHtcclxuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QodmFsdWUpICYmIF8uaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkpIHtcclxuICAgICAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEFycmF5LmlzQXJyYXkocmVzdWx0W2tleV0pKSB7XHJcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlLmNvbmNhdChyZXN1bHRba2V5XSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xyXG5cclxuZnVuY3Rpb24gc3BsaWNlU3RyKHN0ciwgaW5kZXgsIGNvdW50LCBhZGQpIHtcclxuICByZXR1cm4gc3RyLnNsaWNlKDAsIGluZGV4KSArIGFkZCArIHN0ci5zbGljZShpbmRleCArIGNvdW50KTtcclxufVxyXG5leHBvcnRzLnNwbGljZVN0ciA9IHNwbGljZVN0cjtcclxuXHJcbmZ1bmN0aW9uIGNhbWVsaXplKHN0cikge1xyXG4gIHJldHVybiBzdHIudHJpbSgpLnJlcGxhY2UoL1stX1xcc10rKC4pPy9nLCAobWF0Y2gsIGMpID0+IGMudG9VcHBlckNhc2UoKSk7XHJcbn1cclxuZXhwb3J0cy5jYW1lbGl6ZSA9IGNhbWVsaXplO1xyXG5cclxuZnVuY3Rpb24gdW5kZXJzY29yZShzdHIpIHtcclxuICByZXR1cm4gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHN0cik7XHJcbn1cclxuZXhwb3J0cy51bmRlcnNjb3JlID0gdW5kZXJzY29yZTtcclxuXHJcbmZ1bmN0aW9uIHNpbmd1bGFyaXplKHN0cikge1xyXG4gIHJldHVybiBpbmZsZWN0aW9uLnNpbmd1bGFyaXplKHN0cik7XHJcbn1cclxuZXhwb3J0cy5zaW5ndWxhcml6ZSA9IHNpbmd1bGFyaXplO1xyXG5cclxuZnVuY3Rpb24gcGx1cmFsaXplKHN0cikge1xyXG4gIHJldHVybiBpbmZsZWN0aW9uLnBsdXJhbGl6ZShzdHIpO1xyXG59XHJcbmV4cG9ydHMucGx1cmFsaXplID0gcGx1cmFsaXplO1xyXG5cclxuZnVuY3Rpb24gZm9ybWF0KGFyciwgZGlhbGVjdCkge1xyXG4gIGNvbnN0IHRpbWVab25lID0gbnVsbDtcclxuICAvLyBNYWtlIGEgY2xvbmUgb2YgdGhlIGFycmF5IGJlYWN1c2UgZm9ybWF0IG1vZGlmaWVzIHRoZSBwYXNzZWQgYXJnc1xyXG4gIHJldHVybiBTcWxTdHJpbmcuZm9ybWF0KGFyclswXSwgYXJyLnNsaWNlKDEpLCB0aW1lWm9uZSwgZGlhbGVjdCk7XHJcbn1cclxuZXhwb3J0cy5mb3JtYXQgPSBmb3JtYXQ7XHJcblxyXG5mdW5jdGlvbiBmb3JtYXROYW1lZFBhcmFtZXRlcnMoc3FsLCBwYXJhbWV0ZXJzLCBkaWFsZWN0KSB7XHJcbiAgY29uc3QgdGltZVpvbmUgPSBudWxsO1xyXG4gIHJldHVybiBTcWxTdHJpbmcuZm9ybWF0TmFtZWRQYXJhbWV0ZXJzKHNxbCwgcGFyYW1ldGVycywgdGltZVpvbmUsIGRpYWxlY3QpO1xyXG59XHJcbmV4cG9ydHMuZm9ybWF0TmFtZWRQYXJhbWV0ZXJzID0gZm9ybWF0TmFtZWRQYXJhbWV0ZXJzO1xyXG5cclxuZnVuY3Rpb24gY2xvbmVEZWVwKG9iaiwgb25seVBsYWluKSB7XHJcbiAgb2JqID0gb2JqIHx8IHt9O1xyXG4gIHJldHVybiBfLmNsb25lRGVlcFdpdGgob2JqLCBlbGVtID0+IHtcclxuICAgIC8vIERvIG5vdCB0cnkgdG8gY3VzdG9taXplIGNsb25pbmcgb2YgYXJyYXlzIG9yIFBPSk9zXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtKSB8fCBfLmlzUGxhaW5PYmplY3QoZWxlbSkpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB3ZSBzcGVjaWZpZWQgdG8gY2xvbmUgb25seSBwbGFpbiBvYmplY3RzICYgYXJyYXlzLCB3ZSBpZ25vcmUgZXZlcnloaW5nIGVsc2VcclxuICAgIC8vIEluIGFueSBjYXNlLCBkb24ndCBjbG9uZSBzdHVmZiB0aGF0J3MgYW4gb2JqZWN0LCBidXQgbm90IGEgcGxhaW4gb25lIC0gZnggZXhhbXBsZSBzZXF1ZWxpemUgbW9kZWxzIGFuZCBpbnN0YW5jZXNcclxuICAgIGlmIChvbmx5UGxhaW4gfHwgdHlwZW9mIGVsZW0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHJldHVybiBlbGVtO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFByZXNlcnZlIHNwZWNpYWwgZGF0YS10eXBlcyBsaWtlIGBmbmAgYWNyb3NzIGNsb25lcy4gXy5nZXQoKSBpcyB1c2VkIGZvciBjaGVja2luZyB1cCB0aGUgcHJvdG90eXBlIGNoYWluXHJcbiAgICBpZiAoZWxlbSAmJiB0eXBlb2YgZWxlbS5jbG9uZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICByZXR1cm4gZWxlbS5jbG9uZSgpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcbmV4cG9ydHMuY2xvbmVEZWVwID0gY2xvbmVEZWVwO1xyXG5cclxuLyogRXhwYW5kIGFuZCBub3JtYWxpemUgZmluZGVyIG9wdGlvbnMgKi9cclxuZnVuY3Rpb24gbWFwRmluZGVyT3B0aW9ucyhvcHRpb25zLCBNb2RlbCkge1xyXG4gIGlmIChvcHRpb25zLmF0dHJpYnV0ZXMgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmF0dHJpYnV0ZXMpKSB7XHJcbiAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBNb2RlbC5faW5qZWN0RGVwZW5kZW50VmlydHVhbEF0dHJpYnV0ZXMob3B0aW9ucy5hdHRyaWJ1dGVzKTtcclxuICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcy5maWx0ZXIodiA9PiAhTW9kZWwuX3ZpcnR1YWxBdHRyaWJ1dGVzLmhhcyh2KSk7XHJcbiAgfVxyXG5cclxuICBtYXBPcHRpb25GaWVsZE5hbWVzKG9wdGlvbnMsIE1vZGVsKTtcclxuXHJcbiAgcmV0dXJuIG9wdGlvbnM7XHJcbn1cclxuZXhwb3J0cy5tYXBGaW5kZXJPcHRpb25zID0gbWFwRmluZGVyT3B0aW9ucztcclxuXHJcbi8qIFVzZWQgdG8gbWFwIGZpZWxkIG5hbWVzIGluIGF0dHJpYnV0ZXMgYW5kIHdoZXJlIGNvbmRpdGlvbnMgKi9cclxuZnVuY3Rpb24gbWFwT3B0aW9uRmllbGROYW1lcyhvcHRpb25zLCBNb2RlbCkge1xyXG4gIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuYXR0cmlidXRlcykpIHtcclxuICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcy5tYXAoYXR0ciA9PiB7XHJcbiAgICAgIC8vIE9iamVjdCBsb29rdXBzIHdpbGwgZm9yY2UgYW55IHZhcmlhYmxlIHRvIHN0cmluZ3MsIHdlIGRvbid0IHdhbnQgdGhhdCBmb3Igc3BlY2lhbCBvYmplY3RzIGV0Y1xyXG4gICAgICBpZiAodHlwZW9mIGF0dHIgIT09ICdzdHJpbmcnKSByZXR1cm4gYXR0cjtcclxuICAgICAgLy8gTWFwIGF0dHJpYnV0ZXMgdG8gYWxpYXNlZCBzeW50YXggYXR0cmlidXRlc1xyXG4gICAgICBpZiAoTW9kZWwucmF3QXR0cmlidXRlc1thdHRyXSAmJiBhdHRyICE9PSBNb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJdLmZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIFtNb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJdLmZpZWxkLCBhdHRyXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYXR0cjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaWYgKG9wdGlvbnMud2hlcmUgJiYgXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMud2hlcmUpKSB7XHJcbiAgICBvcHRpb25zLndoZXJlID0gbWFwV2hlcmVGaWVsZE5hbWVzKG9wdGlvbnMud2hlcmUsIE1vZGVsKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBvcHRpb25zO1xyXG59XHJcbmV4cG9ydHMubWFwT3B0aW9uRmllbGROYW1lcyA9IG1hcE9wdGlvbkZpZWxkTmFtZXM7XHJcblxyXG5mdW5jdGlvbiBtYXBXaGVyZUZpZWxkTmFtZXMoYXR0cmlidXRlcywgTW9kZWwpIHtcclxuICBpZiAoYXR0cmlidXRlcykge1xyXG4gICAgZ2V0Q29tcGxleEtleXMoYXR0cmlidXRlcykuZm9yRWFjaChhdHRyaWJ1dGUgPT4ge1xyXG4gICAgICBjb25zdCByYXdBdHRyaWJ1dGUgPSBNb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XHJcblxyXG4gICAgICBpZiAocmF3QXR0cmlidXRlICYmIHJhd0F0dHJpYnV0ZS5maWVsZCAhPT0gcmF3QXR0cmlidXRlLmZpZWxkTmFtZSkge1xyXG4gICAgICAgIGF0dHJpYnV0ZXNbcmF3QXR0cmlidXRlLmZpZWxkXSA9IGF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcclxuICAgICAgICBkZWxldGUgYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGF0dHJpYnV0ZXNbYXR0cmlidXRlXSlcclxuICAgICAgICAmJiAhKHJhd0F0dHJpYnV0ZSAmJiAoXHJcbiAgICAgICAgICByYXdBdHRyaWJ1dGUudHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5IU1RPUkVcclxuICAgICAgICAgIHx8IHJhd0F0dHJpYnV0ZS50eXBlIGluc3RhbmNlb2YgRGF0YVR5cGVzLkpTT04pKSkgeyAvLyBQcmV2ZW50IHJlbmFtaW5nIG9mIEhTVE9SRSAmIEpTT04gZmllbGRzXHJcbiAgICAgICAgYXR0cmlidXRlc1thdHRyaWJ1dGVdID0gbWFwT3B0aW9uRmllbGROYW1lcyh7XHJcbiAgICAgICAgICB3aGVyZTogYXR0cmlidXRlc1thdHRyaWJ1dGVdXHJcbiAgICAgICAgfSwgTW9kZWwpLndoZXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pKSB7XHJcbiAgICAgICAgYXR0cmlidXRlc1thdHRyaWJ1dGVdLmZvckVhY2goKHdoZXJlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdCh3aGVyZSkpIHtcclxuICAgICAgICAgICAgYXR0cmlidXRlc1thdHRyaWJ1dGVdW2luZGV4XSA9IG1hcFdoZXJlRmllbGROYW1lcyh3aGVyZSwgTW9kZWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYXR0cmlidXRlcztcclxufVxyXG5leHBvcnRzLm1hcFdoZXJlRmllbGROYW1lcyA9IG1hcFdoZXJlRmllbGROYW1lcztcclxuXHJcbi8qIFVzZWQgdG8gbWFwIGZpZWxkIG5hbWVzIGluIHZhbHVlcyAqL1xyXG5mdW5jdGlvbiBtYXBWYWx1ZUZpZWxkTmFtZXMoZGF0YVZhbHVlcywgZmllbGRzLCBNb2RlbCkge1xyXG4gIGNvbnN0IHZhbHVlcyA9IHt9O1xyXG5cclxuICBmb3IgKGNvbnN0IGF0dHIgb2YgZmllbGRzKSB7XHJcbiAgICBpZiAoZGF0YVZhbHVlc1thdHRyXSAhPT0gdW5kZWZpbmVkICYmICFNb2RlbC5fdmlydHVhbEF0dHJpYnV0ZXMuaGFzKGF0dHIpKSB7XHJcbiAgICAgIC8vIEZpZWxkIG5hbWUgbWFwcGluZ1xyXG4gICAgICBpZiAoTW9kZWwucmF3QXR0cmlidXRlc1thdHRyXSAmJiBNb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJdLmZpZWxkICYmIE1vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGQgIT09IGF0dHIpIHtcclxuICAgICAgICB2YWx1ZXNbTW9kZWwucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZF0gPSBkYXRhVmFsdWVzW2F0dHJdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlc1thdHRyXSA9IGRhdGFWYWx1ZXNbYXR0cl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB2YWx1ZXM7XHJcbn1cclxuZXhwb3J0cy5tYXBWYWx1ZUZpZWxkTmFtZXMgPSBtYXBWYWx1ZUZpZWxkTmFtZXM7XHJcblxyXG5mdW5jdGlvbiBpc0NvbFN0cmluZyh2YWx1ZSkge1xyXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlWzBdID09PSAnJCcgJiYgdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV0gPT09ICckJztcclxufVxyXG5leHBvcnRzLmlzQ29sU3RyaW5nID0gaXNDb2xTdHJpbmc7XHJcblxyXG5mdW5jdGlvbiBjYW5UcmVhdEFycmF5QXNBbmQoYXJyKSB7XHJcbiAgcmV0dXJuIGFyci5zb21lKGFyZyA9PiBfLmlzUGxhaW5PYmplY3QoYXJnKSB8fCBhcmcgaW5zdGFuY2VvZiBXaGVyZSk7XHJcbn1cclxuZXhwb3J0cy5jYW5UcmVhdEFycmF5QXNBbmQgPSBjYW5UcmVhdEFycmF5QXNBbmQ7XHJcblxyXG5mdW5jdGlvbiBjb21iaW5lVGFibGVOYW1lcyh0YWJsZU5hbWUxLCB0YWJsZU5hbWUyKSB7XHJcbiAgcmV0dXJuIHRhYmxlTmFtZTEudG9Mb3dlckNhc2UoKSA8IHRhYmxlTmFtZTIudG9Mb3dlckNhc2UoKSA/IHRhYmxlTmFtZTEgKyB0YWJsZU5hbWUyIDogdGFibGVOYW1lMiArIHRhYmxlTmFtZTE7XHJcbn1cclxuZXhwb3J0cy5jb21iaW5lVGFibGVOYW1lcyA9IGNvbWJpbmVUYWJsZU5hbWVzO1xyXG5cclxuZnVuY3Rpb24gdG9EZWZhdWx0VmFsdWUodmFsdWUsIGRpYWxlY3QpIHtcclxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICBjb25zdCB0bXAgPSB2YWx1ZSgpO1xyXG4gICAgaWYgKHRtcCBpbnN0YW5jZW9mIERhdGFUeXBlcy5BQlNUUkFDVCkge1xyXG4gICAgICByZXR1cm4gdG1wLnRvU3FsKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG1wO1xyXG4gIH1cclxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuVVVJRFYxKSB7XHJcbiAgICByZXR1cm4gdXVpZHYxKCk7XHJcbiAgfVxyXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5VVUlEVjQpIHtcclxuICAgIHJldHVybiB1dWlkdjQoKTtcclxuICB9XHJcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YVR5cGVzLk5PVykge1xyXG4gICAgcmV0dXJuIG5vdyhkaWFsZWN0KTtcclxuICB9XHJcbiAgaWYgKF8uaXNQbGFpbk9iamVjdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgIHJldHVybiBfLmNsb25lKHZhbHVlKTtcclxuICB9XHJcbiAgcmV0dXJuIHZhbHVlO1xyXG59XHJcbmV4cG9ydHMudG9EZWZhdWx0VmFsdWUgPSB0b0RlZmF1bHRWYWx1ZTtcclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmUgaWYgdGhlIGRlZmF1bHQgdmFsdWUgcHJvdmlkZWQgZXhpc3RzIGFuZCBjYW4gYmUgZGVzY3JpYmVkXHJcbiAqIGluIGEgZGIgc2NoZW1hIHVzaW5nIHRoZSBERUZBVUxUIGRpcmVjdGl2ZS5cclxuICpcclxuICogQHBhcmFtICB7Kn0gdmFsdWUgQW55IGRlZmF1bHQgdmFsdWUuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufSB5ZXMgLyBuby5cclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGRlZmF1bHRWYWx1ZVNjaGVtYWJsZSh2YWx1ZSkge1xyXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICAvLyBUT0RPIHRoaXMgd2lsbCBiZSBzY2hlbWFibGUgd2hlbiBhbGwgc3VwcG9ydGVkIGRiXHJcbiAgLy8gaGF2ZSBiZWVuIG5vcm1hbGl6ZWQgZm9yIHRoaXMgY2FzZVxyXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5OT1cpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5VVUlEVjEgfHwgdmFsdWUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuVVVJRFY0KSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdFZhbHVlU2NoZW1hYmxlID0gZGVmYXVsdFZhbHVlU2NoZW1hYmxlO1xyXG5cclxuZnVuY3Rpb24gcmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoKGhhc2gsIG9taXROdWxsLCBvcHRpb25zKSB7XHJcbiAgbGV0IHJlc3VsdCA9IGhhc2g7XHJcblxyXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gIG9wdGlvbnMuYWxsb3dOdWxsID0gb3B0aW9ucy5hbGxvd051bGwgfHwgW107XHJcblxyXG4gIGlmIChvbWl0TnVsbCkge1xyXG4gICAgY29uc3QgX2hhc2ggPSB7fTtcclxuXHJcbiAgICBfLmZvckluKGhhc2gsICh2YWwsIGtleSkgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucy5hbGxvd051bGwuaW5jbHVkZXMoa2V5KSB8fCBrZXkuZW5kc1dpdGgoJ0lkJykgfHwgdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgX2hhc2hba2V5XSA9IHZhbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmVzdWx0ID0gX2hhc2g7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmV4cG9ydHMucmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoID0gcmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoO1xyXG5cclxuZnVuY3Rpb24gc3RhY2soKSB7XHJcbiAgY29uc3Qgb3JpZyA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xyXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gKF8sIHN0YWNrKSA9PiBzdGFjaztcclxuICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoKTtcclxuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIHN0YWNrKTtcclxuICBjb25zdCBlcnJTdGFjayA9IGVyci5zdGFjaztcclxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IG9yaWc7XHJcbiAgcmV0dXJuIGVyclN0YWNrO1xyXG59XHJcbmV4cG9ydHMuc3RhY2sgPSBzdGFjaztcclxuXHJcbmNvbnN0IGRpYWxlY3RzID0gbmV3IFNldChbJ21hcmlhZGInLCAnbXlzcWwnLCAncG9zdGdyZXMnLCAnc3FsaXRlJywgJ21zc3FsJ10pO1xyXG5cclxuZnVuY3Rpb24gbm93KGRpYWxlY3QpIHtcclxuICBjb25zdCBkID0gbmV3IERhdGUoKTtcclxuICBpZiAoIWRpYWxlY3RzLmhhcyhkaWFsZWN0KSkge1xyXG4gICAgZC5zZXRNaWxsaXNlY29uZHMoMCk7XHJcbiAgfVxyXG4gIHJldHVybiBkO1xyXG59XHJcbmV4cG9ydHMubm93ID0gbm93O1xyXG5cclxuLy8gTm90ZTogVXNlIHRoZSBgcXVvdGVJZGVudGlmaWVyKClgIGFuZCBgZXNjYXBlKClgIG1ldGhvZHMgb24gdGhlXHJcbi8vIGBRdWVyeUludGVyZmFjZWAgaW5zdGVhZCBmb3IgbW9yZSBwb3J0YWJsZSBjb2RlLlxyXG5cclxuY29uc3QgVElDS19DSEFSID0gJ2AnO1xyXG5leHBvcnRzLlRJQ0tfQ0hBUiA9IFRJQ0tfQ0hBUjtcclxuXHJcbmZ1bmN0aW9uIGFkZFRpY2tzKHMsIHRpY2tDaGFyKSB7XHJcbiAgdGlja0NoYXIgPSB0aWNrQ2hhciB8fCBUSUNLX0NIQVI7XHJcbiAgcmV0dXJuIHRpY2tDaGFyICsgcmVtb3ZlVGlja3MocywgdGlja0NoYXIpICsgdGlja0NoYXI7XHJcbn1cclxuZXhwb3J0cy5hZGRUaWNrcyA9IGFkZFRpY2tzO1xyXG5cclxuZnVuY3Rpb24gcmVtb3ZlVGlja3MocywgdGlja0NoYXIpIHtcclxuICB0aWNrQ2hhciA9IHRpY2tDaGFyIHx8IFRJQ0tfQ0hBUjtcclxuICByZXR1cm4gcy5yZXBsYWNlKG5ldyBSZWdFeHAodGlja0NoYXIsICdnJyksICcnKTtcclxufVxyXG5leHBvcnRzLnJlbW92ZVRpY2tzID0gcmVtb3ZlVGlja3M7XHJcblxyXG4vKipcclxuICogUmVjZWl2ZXMgYSB0cmVlLWxpa2Ugb2JqZWN0IGFuZCByZXR1cm5zIGEgcGxhaW4gb2JqZWN0IHdoaWNoIGRlcHRoIGlzIDEuXHJcbiAqXHJcbiAqIC0gSW5wdXQ6XHJcbiAqXHJcbiAqICB7XHJcbiAqICAgIG5hbWU6ICdKb2huJyxcclxuICogICAgYWRkcmVzczoge1xyXG4gKiAgICAgIHN0cmVldDogJ0Zha2UgU3QuIDEyMycsXHJcbiAqICAgICAgY29vcmRpbmF0ZXM6IHtcclxuICogICAgICAgIGxvbmdpdHVkZTogNTUuNjc3OTYyNyxcclxuICogICAgICAgIGxhdGl0dWRlOiAxMi41OTY0MzEzXHJcbiAqICAgICAgfVxyXG4gKiAgICB9XHJcbiAqICB9XHJcbiAqXHJcbiAqIC0gT3V0cHV0OlxyXG4gKlxyXG4gKiAge1xyXG4gKiAgICBuYW1lOiAnSm9obicsXHJcbiAqICAgIGFkZHJlc3Muc3RyZWV0OiAnRmFrZSBTdC4gMTIzJyxcclxuICogICAgYWRkcmVzcy5jb29yZGluYXRlcy5sYXRpdHVkZTogNTUuNjc3OTYyNyxcclxuICogICAgYWRkcmVzcy5jb29yZGluYXRlcy5sb25naXR1ZGU6IDEyLjU5NjQzMTNcclxuICogIH1cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IHZhbHVlIGFuIE9iamVjdFxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBhIGZsYXR0ZW5lZCBvYmplY3RcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGZsYXR0ZW5PYmplY3REZWVwKHZhbHVlKSB7XHJcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QodmFsdWUpKSByZXR1cm4gdmFsdWU7XHJcbiAgY29uc3QgZmxhdHRlbmVkT2JqID0ge307XHJcblxyXG4gIGZ1bmN0aW9uIGZsYXR0ZW5PYmplY3Qob2JqLCBzdWJQYXRoKSB7XHJcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgY29uc3QgcGF0aFRvUHJvcGVydHkgPSBzdWJQYXRoID8gYCR7c3ViUGF0aH0uJHtrZXl9YCA6IGtleTtcclxuICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcgJiYgb2JqW2tleV0gIT09IG51bGwpIHtcclxuICAgICAgICBmbGF0dGVuT2JqZWN0KG9ialtrZXldLCBwYXRoVG9Qcm9wZXJ0eSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmxhdHRlbmVkT2JqW3BhdGhUb1Byb3BlcnR5XSA9IF8uZ2V0KG9iaiwga2V5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmxhdHRlbmVkT2JqO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZsYXR0ZW5PYmplY3QodmFsdWUsIHVuZGVmaW5lZCk7XHJcbn1cclxuZXhwb3J0cy5mbGF0dGVuT2JqZWN0RGVlcCA9IGZsYXR0ZW5PYmplY3REZWVwO1xyXG5cclxuLyoqXHJcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciByZXByZXNlbnRpbmcgU1FMIGZ1bmN0aW9ucywgYW5kIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUgZXNjYXBlZC5cclxuICogUGxlYXNlIGRvIG5vdCB1c2UgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5LCB1c2UgU2VxdWVsaXplLmZuIGFuZCBTZXF1ZWxpemUuY29sIGluc3RlYWQuXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jbGFzcyBTZXF1ZWxpemVNZXRob2Qge31cclxuZXhwb3J0cy5TZXF1ZWxpemVNZXRob2QgPSBTZXF1ZWxpemVNZXRob2Q7XHJcblxyXG5jbGFzcyBGbiBleHRlbmRzIFNlcXVlbGl6ZU1ldGhvZCB7XHJcbiAgY29uc3RydWN0b3IoZm4sIGFyZ3MpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmZuID0gZm47XHJcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xyXG4gIH1cclxuICBjbG9uZSgpIHtcclxuICAgIHJldHVybiBuZXcgRm4odGhpcy5mbiwgdGhpcy5hcmdzKTtcclxuICB9XHJcbn1cclxuZXhwb3J0cy5GbiA9IEZuO1xyXG5cclxuY2xhc3MgQ29sIGV4dGVuZHMgU2VxdWVsaXplTWV0aG9kIHtcclxuICBjb25zdHJ1Y3Rvcihjb2wsIC4uLmFyZ3MpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbCA9IGFyZ3M7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbCA9IGNvbDtcclxuICB9XHJcbn1cclxuZXhwb3J0cy5Db2wgPSBDb2w7XHJcblxyXG5jbGFzcyBDYXN0IGV4dGVuZHMgU2VxdWVsaXplTWV0aG9kIHtcclxuICBjb25zdHJ1Y3Rvcih2YWwsIHR5cGUsIGpzb24pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnZhbCA9IHZhbDtcclxuICAgIHRoaXMudHlwZSA9ICh0eXBlIHx8ICcnKS50cmltKCk7XHJcbiAgICB0aGlzLmpzb24gPSBqc29uIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG5leHBvcnRzLkNhc3QgPSBDYXN0O1xyXG5cclxuY2xhc3MgTGl0ZXJhbCBleHRlbmRzIFNlcXVlbGl6ZU1ldGhvZCB7XHJcbiAgY29uc3RydWN0b3IodmFsKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy52YWwgPSB2YWw7XHJcbiAgfVxyXG59XHJcbmV4cG9ydHMuTGl0ZXJhbCA9IExpdGVyYWw7XHJcblxyXG5jbGFzcyBKc29uIGV4dGVuZHMgU2VxdWVsaXplTWV0aG9kIHtcclxuICBjb25zdHJ1Y3Rvcihjb25kaXRpb25zT3JQYXRoLCB2YWx1ZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIGlmIChfLmlzT2JqZWN0KGNvbmRpdGlvbnNPclBhdGgpKSB7XHJcbiAgICAgIHRoaXMuY29uZGl0aW9ucyA9IGNvbmRpdGlvbnNPclBhdGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhdGggPSBjb25kaXRpb25zT3JQYXRoO1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuZXhwb3J0cy5Kc29uID0gSnNvbjtcclxuXHJcbmNsYXNzIFdoZXJlIGV4dGVuZHMgU2VxdWVsaXplTWV0aG9kIHtcclxuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGUsIGNvbXBhcmF0b3IsIGxvZ2ljKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgaWYgKGxvZ2ljID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgbG9naWMgPSBjb21wYXJhdG9yO1xyXG4gICAgICBjb21wYXJhdG9yID0gJz0nO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlID0gYXR0cmlidXRlO1xyXG4gICAgdGhpcy5jb21wYXJhdG9yID0gY29tcGFyYXRvcjtcclxuICAgIHRoaXMubG9naWMgPSBsb2dpYztcclxuICB9XHJcbn1cclxuZXhwb3J0cy5XaGVyZSA9IFdoZXJlO1xyXG5cclxuLy9Db2xsZWN0aW9uIG9mIGhlbHBlciBtZXRob2RzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHdvcmsgd2l0aCBzeW1ib2wgb3BlcmF0b3JzXHJcblxyXG4vKipcclxuICogZ2V0T3BlcmF0b3JzXHJcbiAqXHJcbiAqIEBwYXJhbSAge09iamVjdH0gb2JqXHJcbiAqIEByZXR1cm5zIHtBcnJheTxTeW1ib2w+fSBBbGwgb3BlcmF0b3JzIHByb3BlcnRpZXMgb2Ygb2JqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRPcGVyYXRvcnMob2JqKSB7XHJcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKS5maWx0ZXIocyA9PiBvcGVyYXRvcnNTZXQuaGFzKHMpKTtcclxufVxyXG5leHBvcnRzLmdldE9wZXJhdG9ycyA9IGdldE9wZXJhdG9ycztcclxuXHJcbi8qKlxyXG4gKiBnZXRDb21wbGV4S2V5c1xyXG4gKlxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9ialxyXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nfFN5bWJvbD59IEFsbCBrZXlzIGluY2x1ZGluZyBvcGVyYXRvcnNcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGdldENvbXBsZXhLZXlzKG9iaikge1xyXG4gIHJldHVybiBnZXRPcGVyYXRvcnMob2JqKS5jb25jYXQoT2JqZWN0LmtleXMob2JqKSk7XHJcbn1cclxuZXhwb3J0cy5nZXRDb21wbGV4S2V5cyA9IGdldENvbXBsZXhLZXlzO1xyXG5cclxuLyoqXHJcbiAqIGdldENvbXBsZXhTaXplXHJcbiAqXHJcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gb2JqXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9ICAgICAgTGVuZ3RoIG9mIG9iamVjdCBwcm9wZXJ0aWVzIGluY2x1ZGluZyBvcGVyYXRvcnMgaWYgb2JqIGlzIGFycmF5IHJldHVybnMgaXRzIGxlbmd0aFxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0Q29tcGxleFNpemUob2JqKSB7XHJcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5sZW5ndGggOiBnZXRDb21wbGV4S2V5cyhvYmopLmxlbmd0aDtcclxufVxyXG5leHBvcnRzLmdldENvbXBsZXhTaXplID0gZ2V0Q29tcGxleFNpemU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIGEgd2hlcmUgY2xhdXNlIGlzIGVtcHR5LCBldmVuIHdpdGggU3ltYm9sc1xyXG4gKlxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9ialxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGlzV2hlcmVFbXB0eShvYmopIHtcclxuICByZXR1cm4gISFvYmogJiYgXy5pc0VtcHR5KG9iaikgJiYgZ2V0T3BlcmF0b3JzKG9iaikubGVuZ3RoID09PSAwO1xyXG59XHJcbmV4cG9ydHMuaXNXaGVyZUVtcHR5ID0gaXNXaGVyZUVtcHR5O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRU5VTSBuYW1lIGJ5IGpvaW5pbmcgdGFibGUgYW5kIGNvbHVtbiBuYW1lXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWVcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbk5hbWVcclxuICogQHJldHVybnMge3N0cmluZ31cclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGdlbmVyYXRlRW51bU5hbWUodGFibGVOYW1lLCBjb2x1bW5OYW1lKSB7XHJcbiAgcmV0dXJuIGBlbnVtXyR7dGFibGVOYW1lfV8ke2NvbHVtbk5hbWV9YDtcclxufVxyXG5leHBvcnRzLmdlbmVyYXRlRW51bU5hbWUgPSBnZW5lcmF0ZUVudW1OYW1lO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYW4gbmV3IE9iamVjdCB3aGljaCBrZXlzIGFyZSBjYW1lbGl6ZWRcclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gY2FtZWxpemVPYmplY3RLZXlzKG9iaikge1xyXG4gIGNvbnN0IG5ld09iaiA9IG5ldyBPYmplY3QoKTtcclxuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcclxuICAgIG5ld09ialtjYW1lbGl6ZShrZXkpXSA9IG9ialtrZXldO1xyXG4gIH0pO1xyXG4gIHJldHVybiBuZXdPYmo7XHJcbn1cclxuZXhwb3J0cy5jYW1lbGl6ZU9iamVjdEtleXMgPSBjYW1lbGl6ZU9iamVjdEtleXM7XHJcblxyXG4vKipcclxuICogQXNzaWducyBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBhbmQgc3ltYm9sIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlXHJcbiAqIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cclxuICpcclxuICogaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy40I2RlZmF1bHRzXHJcbiAqXHJcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gZGVmYXVsdHMob2JqZWN0LCAuLi5zb3VyY2VzKSB7XHJcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XHJcblxyXG4gIHNvdXJjZXMuZm9yRWFjaChzb3VyY2UgPT4ge1xyXG4gICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICBzb3VyY2UgPSBPYmplY3Qoc291cmNlKTtcclxuXHJcbiAgICAgIGdldENvbXBsZXhLZXlzKHNvdXJjZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV07XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICBfLmVxKHZhbHVlLCBPYmplY3QucHJvdG90eXBlW2tleV0pICYmXHJcbiAgICAgICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXHJcblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gb2JqZWN0O1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdHMgPSBkZWZhdWx0cztcclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gaW5kZXhcclxuICogQHBhcmFtIHtBcnJheX0gIGluZGV4LmZpZWxkc1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2luZGV4Lm5hbWVdXHJcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gdGFibGVOYW1lXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBuYW1lSW5kZXgoaW5kZXgsIHRhYmxlTmFtZSkge1xyXG4gIGlmICh0YWJsZU5hbWUudGFibGVOYW1lKSB0YWJsZU5hbWUgPSB0YWJsZU5hbWUudGFibGVOYW1lO1xyXG5cclxuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbmRleCwgJ25hbWUnKSkge1xyXG4gICAgY29uc3QgZmllbGRzID0gaW5kZXguZmllbGRzLm1hcChcclxuICAgICAgZmllbGQgPT4gdHlwZW9mIGZpZWxkID09PSAnc3RyaW5nJyA/IGZpZWxkIDogZmllbGQubmFtZSB8fCBmaWVsZC5hdHRyaWJ1dGVcclxuICAgICk7XHJcbiAgICBpbmRleC5uYW1lID0gdW5kZXJzY29yZShgJHt0YWJsZU5hbWV9XyR7ZmllbGRzLmpvaW4oJ18nKX1gKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBpbmRleDtcclxufVxyXG5leHBvcnRzLm5hbWVJbmRleCA9IG5hbWVJbmRleDtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgMiBhcnJheXMgaW50ZXJzZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhcnIxXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGFycjJcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGludGVyc2VjdHMoYXJyMSwgYXJyMikge1xyXG4gIHJldHVybiBhcnIxLnNvbWUodiA9PiBhcnIyLmluY2x1ZGVzKHYpKTtcclxufVxyXG5leHBvcnRzLmludGVyc2VjdHMgPSBpbnRlcnNlY3RzO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJEYXRhVHlwZXMiLCJyZXF1aXJlIiwiU3FsU3RyaW5nIiwiXyIsInV1aWR2MSIsInV1aWR2NCIsIlByb21pc2UiLCJvcGVyYXRvcnMiLCJvcGVyYXRvcnNTZXQiLCJTZXQiLCJ2YWx1ZXMiLCJpbmZsZWN0aW9uIiwiZXhwb3J0cyIsImNsYXNzVG9JbnZva2FibGUiLCJ1c2VJbmZsZWN0aW9uIiwiX2luZmxlY3Rpb24iLCJjYW1lbGl6ZUlmIiwic3RyIiwiY29uZGl0aW9uIiwicmVzdWx0IiwiY2FtZWxpemUiLCJ1bmRlcnNjb3JlZElmIiwidW5kZXJzY29yZSIsImlzUHJpbWl0aXZlIiwidmFsIiwidHlwZSIsIm1lcmdlRGVmYXVsdHMiLCJhIiwiYiIsIm1lcmdlV2l0aCIsIm9iamVjdFZhbHVlIiwiaXNQbGFpbk9iamVjdCIsInVuZGVmaW5lZCIsIm1lcmdlIiwib2JqIiwiYXJndW1lbnRzIiwiZm9yT3duIiwidmFsdWUiLCJrZXkiLCJBcnJheSIsImlzQXJyYXkiLCJjb25jYXQiLCJzcGxpY2VTdHIiLCJpbmRleCIsImNvdW50IiwiYWRkIiwic2xpY2UiLCJ0cmltIiwicmVwbGFjZSIsIm1hdGNoIiwiYyIsInRvVXBwZXJDYXNlIiwic2luZ3VsYXJpemUiLCJwbHVyYWxpemUiLCJmb3JtYXQiLCJhcnIiLCJkaWFsZWN0IiwidGltZVpvbmUiLCJmb3JtYXROYW1lZFBhcmFtZXRlcnMiLCJzcWwiLCJwYXJhbWV0ZXJzIiwiY2xvbmVEZWVwIiwib25seVBsYWluIiwiY2xvbmVEZWVwV2l0aCIsImVsZW0iLCJjbG9uZSIsIm1hcEZpbmRlck9wdGlvbnMiLCJvcHRpb25zIiwiTW9kZWwiLCJhdHRyaWJ1dGVzIiwiX2luamVjdERlcGVuZGVudFZpcnR1YWxBdHRyaWJ1dGVzIiwiZmlsdGVyIiwidiIsIl92aXJ0dWFsQXR0cmlidXRlcyIsImhhcyIsIm1hcE9wdGlvbkZpZWxkTmFtZXMiLCJtYXAiLCJhdHRyIiwicmF3QXR0cmlidXRlcyIsImZpZWxkIiwid2hlcmUiLCJtYXBXaGVyZUZpZWxkTmFtZXMiLCJnZXRDb21wbGV4S2V5cyIsImZvckVhY2giLCJhdHRyaWJ1dGUiLCJyYXdBdHRyaWJ1dGUiLCJmaWVsZE5hbWUiLCJIU1RPUkUiLCJKU09OIiwibWFwVmFsdWVGaWVsZE5hbWVzIiwiZGF0YVZhbHVlcyIsImZpZWxkcyIsImlzQ29sU3RyaW5nIiwibGVuZ3RoIiwiY2FuVHJlYXRBcnJheUFzQW5kIiwic29tZSIsImFyZyIsIldoZXJlIiwiY29tYmluZVRhYmxlTmFtZXMiLCJ0YWJsZU5hbWUxIiwidGFibGVOYW1lMiIsInRvTG93ZXJDYXNlIiwidG9EZWZhdWx0VmFsdWUiLCJ0bXAiLCJBQlNUUkFDVCIsInRvU3FsIiwiVVVJRFYxIiwiVVVJRFY0IiwiTk9XIiwibm93IiwiZGVmYXVsdFZhbHVlU2NoZW1hYmxlIiwicmVtb3ZlTnVsbFZhbHVlc0Zyb21IYXNoIiwiaGFzaCIsIm9taXROdWxsIiwiYWxsb3dOdWxsIiwiX2hhc2giLCJmb3JJbiIsImluY2x1ZGVzIiwiZW5kc1dpdGgiLCJzdGFjayIsIm9yaWciLCJFcnJvciIsInByZXBhcmVTdGFja1RyYWNlIiwiZXJyIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJlcnJTdGFjayIsImRpYWxlY3RzIiwiZCIsIkRhdGUiLCJzZXRNaWxsaXNlY29uZHMiLCJUSUNLX0NIQVIiLCJhZGRUaWNrcyIsInMiLCJ0aWNrQ2hhciIsInJlbW92ZVRpY2tzIiwiUmVnRXhwIiwiZmxhdHRlbk9iamVjdERlZXAiLCJmbGF0dGVuZWRPYmoiLCJmbGF0dGVuT2JqZWN0Iiwic3ViUGF0aCIsIk9iamVjdCIsImtleXMiLCJwYXRoVG9Qcm9wZXJ0eSIsImdldCIsIlNlcXVlbGl6ZU1ldGhvZCIsIkZuIiwiZm4iLCJhcmdzIiwiQ29sIiwiY29sIiwiQ2FzdCIsImpzb24iLCJMaXRlcmFsIiwiSnNvbiIsImNvbmRpdGlvbnNPclBhdGgiLCJpc09iamVjdCIsImNvbmRpdGlvbnMiLCJwYXRoIiwiY29tcGFyYXRvciIsImxvZ2ljIiwiZ2V0T3BlcmF0b3JzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0Q29tcGxleFNpemUiLCJpc1doZXJlRW1wdHkiLCJpc0VtcHR5IiwiZ2VuZXJhdGVFbnVtTmFtZSIsInRhYmxlTmFtZSIsImNvbHVtbk5hbWUiLCJjYW1lbGl6ZU9iamVjdEtleXMiLCJuZXdPYmoiLCJkZWZhdWx0cyIsIm9iamVjdCIsInNvdXJjZXMiLCJzb3VyY2UiLCJlcSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIm5hbWVJbmRleCIsIm5hbWUiLCJqb2luIiwiaW50ZXJzZWN0cyIsImFycjEiLCJhcnIyIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsTUFBTUMsU0FBUyxHQUFHRCxPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxNQUFNRSxDQUFDLEdBQUdGLE9BQU8sQ0FBQyxRQUFELENBQWpCOztBQUNBLE1BQU1HLE1BQU0sR0FBR0gsT0FBTyxDQUFDLFNBQUQsQ0FBdEI7O0FBQ0EsTUFBTUksTUFBTSxHQUFHSixPQUFPLENBQUMsU0FBRCxDQUF0Qjs7QUFDQSxNQUFNSyxPQUFPLEdBQUdMLE9BQU8sQ0FBQyxXQUFELENBQXZCOztBQUNBLE1BQU1NLFNBQVMsR0FBR04sT0FBTyxDQUFDLGFBQUQsQ0FBekI7O0FBQ0EsTUFBTU8sWUFBWSxHQUFHLElBQUlDLEdBQUosQ0FBUU4sQ0FBQyxDQUFDTyxNQUFGLENBQVNILFNBQVQsQ0FBUixDQUFyQjs7QUFFQSxJQUFJSSxVQUFVLEdBQUdWLE9BQU8sQ0FBQyxZQUFELENBQXhCOztBQUVBVyxPQUFPLENBQUNDLGdCQUFSLEdBQTJCWixPQUFPLENBQUMsMEJBQUQsQ0FBUCxDQUFvQ1ksZ0JBQS9EO0FBRUFELE9BQU8sQ0FBQ04sT0FBUixHQUFrQkEsT0FBbEI7O0FBRUEsU0FBU1EsYUFBVCxDQUF1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U0FEcEQsQ0FBZjtBQUdBekMsSUFBQUEsS0FBSyxDQUFDd0ksSUFBTixHQUFhN0osVUFBVSxDQUFFLEdBQUVnSixTQUFVLElBQUczRSxNQUFNLENBQUN5RixJQUFQLENBQVksR0FBWixDQUFpQixFQUFsQyxDQUF2QjtBQUNEOztBQUVELFNBQU96SSxLQUFQO0FBQ0Q7O0FBQ0QvQixPQUFPLENBQUNzSyxTQUFSLEdBQW9CQSxTQUFwQjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFNBQVNHLFVBQVQsQ0FBb0JDLElBQXBCLEVBQTBCQyxJQUExQixFQUFnQztBQUM5QixTQUFPRCxJQUFJLENBQUN2RixJQUFMLENBQVV2QixDQUFDLElBQUkrRyxJQUFJLENBQUNsRSxRQUFMLENBQWM3QyxDQUFkLENBQWYsQ0FBUDtBQUNEOztBQUNENUQsT0FBTyxDQUFDeUssVUFBUixHQUFxQkEsVUFBckIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGFUeXBlcyA9IHJlcXVpcmUoJy4vZGF0YS10eXBlcycpO1xuY29uc3QgU3FsU3RyaW5nID0gcmVxdWlyZSgnLi9zcWwtc3RyaW5nJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCB1dWlkdjEgPSByZXF1aXJlKCd1dWlkL3YxJyk7XG5jb25zdCB1dWlkdjQgPSByZXF1aXJlKCd1dWlkL3Y0Jyk7XG5jb25zdCBQcm9taXNlID0gcmVxdWlyZSgnLi9wcm9taXNlJyk7XG5jb25zdCBvcGVyYXRvcnMgPSByZXF1aXJlKCcuL29wZXJhdG9ycycpO1xuY29uc3Qgb3BlcmF0b3JzU2V0ID0gbmV3IFNldChfLnZhbHVlcyhvcGVyYXRvcnMpKTtcblxubGV0IGluZmxlY3Rpb24gPSByZXF1aXJlKCdpbmZsZWN0aW9uJyk7XG5cbmV4cG9ydHMuY2xhc3NUb0ludm9rYWJsZSA9IHJlcXVpcmUoJy4vdXRpbHMvY2xhc3NUb0ludm9rYWJsZScpLmNsYXNzVG9JbnZva2FibGU7XG5cbmV4cG9ydHMuUHJvbWlzZSA9IFByb21pc2U7XG5cbmZ1bmN0aW9uIHVzZUluZmxlY3Rpb24oX2luZmxlY3Rpb24pIHtcbiAgaW5mbGVjdGlvbiA9IF9pbmZsZWN0aW9uO1xufVxuZXhwb3J0cy51c2VJbmZsZWN0aW9uID0gdXNlSW5mbGVjdGlvbjtcblxuZnVuY3Rpb24gY2FtZWxpemVJZihzdHIsIGNvbmRpdGlvbikge1xuICBsZXQgcmVzdWx0ID0gc3RyO1xuXG4gIGlmIChjb25kaXRpb24pIHtcbiAgICByZXN1bHQgPSBjYW1lbGl6ZShzdHIpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuY2FtZWxpemVJZiA9IGNhbWVsaXplSWY7XG5cbmZ1bmN0aW9uIHVuZGVyc2NvcmVkSWYoc3RyLCBjb25kaXRpb24pIHtcbiAgbGV0IHJlc3VsdCA9IHN0cjtcblxuICBpZiAoY29uZGl0aW9uKSB7XG4gICAgcmVzdWx0ID0gdW5kZXJzY29yZShzdHIpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMudW5kZXJzY29yZWRJZiA9IHVuZGVyc2NvcmVkSWY7XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbCkge1xuICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbDtcbiAgcmV0dXJuIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuLy8gU2FtZSBjb25jZXB0IGFzIF8ubWVyZ2UsIGJ1dCBkb24ndCBvdmVyd3JpdGUgcHJvcGVydGllcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFzc2lnbmVkXG5mdW5jdGlvbiBtZXJnZURlZmF1bHRzKGEsIGIpIHtcbiAgcmV0dXJuIF8ubWVyZ2VXaXRoKGEsIGIsIG9iamVjdFZhbHVlID0+IHtcbiAgICAvLyBJZiBpdCdzIGFuIG9iamVjdCwgbGV0IF8gaGFuZGxlIGl0IHRoaXMgdGltZSwgd2Ugd2lsbCBiZSBjYWxsZWQgYWdhaW4gZm9yIGVhY2ggcHJvcGVydHlcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChvYmplY3RWYWx1ZSkgJiYgb2JqZWN0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG9iamVjdFZhbHVlO1xuICAgIH1cbiAgfSk7XG59XG5leHBvcnRzLm1lcmdlRGVmYXVsdHMgPSBtZXJnZURlZmF1bHRzO1xuXG4vLyBBbiBhbHRlcm5hdGl2ZSB0byBfLm1lcmdlLCB3aGljaCBkb2Vzbid0IGNsb25lIGl0cyBhcmd1bWVudHNcbi8vIENsb25pbmcgaXMgYSBiYWQgaWRlYSBiZWNhdXNlIG9wdGlvbnMgYXJndW1lbnRzIG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gc2VxdWVsaXplXG4vLyBtb2RlbHMgLSB3aGljaCBhZ2FpbiByZWZlcmVuY2UgZGF0YWJhc2UgbGlicyB3aGljaCBkb24ndCBsaWtlIHRvIGJlIGNsb25lZCAoaW4gcGFydGljdWxhciBwZy1uYXRpdmUpXG5mdW5jdGlvbiBtZXJnZSgpIHtcbiAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgZm9yIChjb25zdCBvYmogb2YgYXJndW1lbnRzKSB7XG4gICAgXy5mb3JPd24ob2JqLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFyZXN1bHRba2V5XSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KHZhbHVlKSAmJiBfLmlzUGxhaW5PYmplY3QocmVzdWx0W2tleV0pKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEFycmF5LmlzQXJyYXkocmVzdWx0W2tleV0pKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZS5jb25jYXQocmVzdWx0W2tleV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG5cbmZ1bmN0aW9uIHNwbGljZVN0cihzdHIsIGluZGV4LCBjb3VudCwgYWRkKSB7XG4gIHJldHVybiBzdHIuc2xpY2UoMCwgaW5kZXgpICsgYWRkICsgc3RyLnNsaWNlKGluZGV4ICsgY291bnQpO1xufVxuZXhwb3J0cy5zcGxpY2VTdHIgPSBzcGxpY2VTdHI7XG5cbmZ1bmN0aW9uIGNhbWVsaXplKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0oKS5yZXBsYWNlKC9bLV9cXHNdKyguKT8vZywgKG1hdGNoLCBjKSA9PiBjLnRvVXBwZXJDYXNlKCkpO1xufVxuZXhwb3J0cy5jYW1lbGl6ZSA9IGNhbWVsaXplO1xuXG5mdW5jdGlvbiB1bmRlcnNjb3JlKHN0cikge1xuICByZXR1cm4gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHN0cik7XG59XG5leHBvcnRzLnVuZGVyc2NvcmUgPSB1bmRlcnNjb3JlO1xuXG5mdW5jdGlvbiBzaW5ndWxhcml6ZShzdHIpIHtcbiAgcmV0dXJuIGluZmxlY3Rpb24uc2luZ3VsYXJpemUoc3RyKTtcbn1cbmV4cG9ydHMuc2luZ3VsYXJpemUgPSBzaW5ndWxhcml6ZTtcblxuZnVuY3Rpb24gcGx1cmFsaXplKHN0cikge1xuICByZXR1cm4gaW5mbGVjdGlvbi5wbHVyYWxpemUoc3RyKTtcbn1cbmV4cG9ydHMucGx1cmFsaXplID0gcGx1cmFsaXplO1xuXG5mdW5jdGlvbiBmb3JtYXQoYXJyLCBkaWFsZWN0KSB7XG4gIGNvbnN0IHRpbWVab25lID0gbnVsbDtcbiAgLy8gTWFrZSBhIGNsb25lIG9mIHRoZSBhcnJheSBiZWFjdXNlIGZvcm1hdCBtb2RpZmllcyB0aGUgcGFzc2VkIGFyZ3NcbiAgcmV0dXJuIFNxbFN0cmluZy5mb3JtYXQoYXJyWzBdLCBhcnIuc2xpY2UoMSksIHRpbWVab25lLCBkaWFsZWN0KTtcbn1cbmV4cG9ydHMuZm9ybWF0ID0gZm9ybWF0O1xuXG5mdW5jdGlvbiBmb3JtYXROYW1lZFBhcmFtZXRlcnMoc3FsLCBwYXJhbWV0ZXJzLCBkaWFsZWN0KSB7XG4gIGNvbnN0IHRpbWVab25lID0gbnVsbDtcbiAgcmV0dXJuIFNxbFN0cmluZy5mb3JtYXROYW1lZFBhcmFtZXRlcnMoc3FsLCBwYXJhbWV0ZXJzLCB0aW1lWm9uZSwgZGlhbGVjdCk7XG59XG5leHBvcnRzLmZvcm1hdE5hbWVkUGFyYW1ldGVycyA9IGZvcm1hdE5hbWVkUGFyYW1ldGVycztcblxuZnVuY3Rpb24gY2xvbmVEZWVwKG9iaiwgb25seVBsYWluKSB7XG4gIG9iaiA9IG9iaiB8fCB7fTtcbiAgcmV0dXJuIF8uY2xvbmVEZWVwV2l0aChvYmosIGVsZW0gPT4ge1xuICAgIC8vIERvIG5vdCB0cnkgdG8gY3VzdG9taXplIGNsb25pbmcgb2YgYXJyYXlzIG9yIFBPSk9zXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbSkgfHwgXy5pc1BsYWluT2JqZWN0KGVsZW0pKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIElmIHdlIHNwZWNpZmllZCB0byBjbG9uZSBvbmx5IHBsYWluIG9iamVjdHMgJiBhcnJheXMsIHdlIGlnbm9yZSBldmVyeWhpbmcgZWxzZVxuICAgIC8vIEluIGFueSBjYXNlLCBkb24ndCBjbG9uZSBzdHVmZiB0aGF0J3MgYW4gb2JqZWN0LCBidXQgbm90IGEgcGxhaW4gb25lIC0gZnggZXhhbXBsZSBzZXF1ZWxpemUgbW9kZWxzIGFuZCBpbnN0YW5jZXNcbiAgICBpZiAob25seVBsYWluIHx8IHR5cGVvZiBlbGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGVsZW07XG4gICAgfVxuXG4gICAgLy8gUHJlc2VydmUgc3BlY2lhbCBkYXRhLXR5cGVzIGxpa2UgYGZuYCBhY3Jvc3MgY2xvbmVzLiBfLmdldCgpIGlzIHVzZWQgZm9yIGNoZWNraW5nIHVwIHRoZSBwcm90b3R5cGUgY2hhaW5cbiAgICBpZiAoZWxlbSAmJiB0eXBlb2YgZWxlbS5jbG9uZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGVsZW0uY2xvbmUoKTtcbiAgICB9XG4gIH0pO1xufVxuZXhwb3J0cy5jbG9uZURlZXAgPSBjbG9uZURlZXA7XG5cbi8qIEV4cGFuZCBhbmQgbm9ybWFsaXplIGZpbmRlciBvcHRpb25zICovXG5mdW5jdGlvbiBtYXBGaW5kZXJPcHRpb25zKG9wdGlvbnMsIE1vZGVsKSB7XG4gIGlmIChvcHRpb25zLmF0dHJpYnV0ZXMgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmF0dHJpYnV0ZXMpKSB7XG4gICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gTW9kZWwuX2luamVjdERlcGVuZGVudFZpcnR1YWxBdHRyaWJ1dGVzKG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzLmZpbHRlcih2ID0+ICFNb2RlbC5fdmlydHVhbEF0dHJpYnV0ZXMuaGFzKHYpKTtcbiAgfVxuXG4gIG1hcE9wdGlvbkZpZWxkTmFtZXMob3B0aW9ucywgTW9kZWwpO1xuXG4gIHJldHVybiBvcHRpb25zO1xufVxuZXhwb3J0cy5tYXBGaW5kZXJPcHRpb25zID0gbWFwRmluZGVyT3B0aW9ucztcblxuLyogVXNlZCB0byBtYXAgZmllbGQgbmFtZXMgaW4gYXR0cmlidXRlcyBhbmQgd2hlcmUgY29uZGl0aW9ucyAqL1xuZnVuY3Rpb24gbWFwT3B0aW9uRmllbGROYW1lcyhvcHRpb25zLCBNb2RlbCkge1xuICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmF0dHJpYnV0ZXMpKSB7XG4gICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzLm1hcChhdHRyID0+IHtcbiAgICAgIC8vIE9iamVjdCBsb29rdXBzIHdpbGwgZm9yY2UgYW55IHZhcmlhYmxlIHRvIHN0cmluZ3MsIHdlIGRvbid0IHdhbnQgdGhhdCBmb3Igc3BlY2lhbCBvYmplY3RzIGV0Y1xuICAgICAgaWYgKHR5cGVvZiBhdHRyICE9PSAnc3RyaW5nJykgcmV0dXJuIGF0dHI7XG4gICAgICAvLyBNYXAgYXR0cmlidXRlcyB0byBhbGlhc2VkIHN5bnRheCBhdHRyaWJ1dGVzXG4gICAgICBpZiAoTW9kZWwucmF3QXR0cmlidXRlc1thdHRyXSAmJiBhdHRyICE9PSBNb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJdLmZpZWxkKSB7XG4gICAgICAgIHJldHVybiBbTW9kZWwucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZCwgYXR0cl07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cjtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLndoZXJlICYmIF8uaXNQbGFpbk9iamVjdChvcHRpb25zLndoZXJlKSkge1xuICAgIG9wdGlvbnMud2hlcmUgPSBtYXBXaGVyZUZpZWxkTmFtZXMob3B0aW9ucy53aGVyZSwgTW9kZWwpO1xuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5leHBvcnRzLm1hcE9wdGlvbkZpZWxkTmFtZXMgPSBtYXBPcHRpb25GaWVsZE5hbWVzO1xuXG5mdW5jdGlvbiBtYXBXaGVyZUZpZWxkTmFtZXMoYXR0cmlidXRlcywgTW9kZWwpIHtcbiAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICBnZXRDb21wbGV4S2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICBjb25zdCByYXdBdHRyaWJ1dGUgPSBNb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG5cbiAgICAgIGlmIChyYXdBdHRyaWJ1dGUgJiYgcmF3QXR0cmlidXRlLmZpZWxkICE9PSByYXdBdHRyaWJ1dGUuZmllbGROYW1lKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbcmF3QXR0cmlidXRlLmZpZWxkXSA9IGF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcbiAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pXG4gICAgICAgICYmICEocmF3QXR0cmlidXRlICYmIChcbiAgICAgICAgICByYXdBdHRyaWJ1dGUudHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5IU1RPUkVcbiAgICAgICAgICB8fCByYXdBdHRyaWJ1dGUudHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5KU09OKSkpIHsgLy8gUHJldmVudCByZW5hbWluZyBvZiBIU1RPUkUgJiBKU09OIGZpZWxkc1xuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gPSBtYXBPcHRpb25GaWVsZE5hbWVzKHtcbiAgICAgICAgICB3aGVyZTogYXR0cmlidXRlc1thdHRyaWJ1dGVdXG4gICAgICAgIH0sIE1vZGVsKS53aGVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXR0cmlidXRlc1thdHRyaWJ1dGVdKSkge1xuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0uZm9yRWFjaCgod2hlcmUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdCh3aGVyZSkpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbYXR0cmlidXRlXVtpbmRleF0gPSBtYXBXaGVyZUZpZWxkTmFtZXMod2hlcmUsIE1vZGVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYXR0cmlidXRlcztcbn1cbmV4cG9ydHMubWFwV2hlcmVGaWVsZE5hbWVzID0gbWFwV2hlcmVGaWVsZE5hbWVzO1xuXG4vKiBVc2VkIHRvIG1hcCBmaWVsZCBuYW1lcyBpbiB2YWx1ZXMgKi9cbmZ1bmN0aW9uIG1hcFZhbHVlRmllbGROYW1lcyhkYXRhVmFsdWVzLCBmaWVsZHMsIE1vZGVsKSB7XG4gIGNvbnN0IHZhbHVlcyA9IHt9O1xuXG4gIGZvciAoY29uc3QgYXR0ciBvZiBmaWVsZHMpIHtcbiAgICBpZiAoZGF0YVZhbHVlc1thdHRyXSAhPT0gdW5kZWZpbmVkICYmICFNb2RlbC5fdmlydHVhbEF0dHJpYnV0ZXMuaGFzKGF0dHIpKSB7XG4gICAgICAvLyBGaWVsZCBuYW1lIG1hcHBpbmdcbiAgICAgIGlmIChNb2RlbC5yYXdBdHRyaWJ1dGVzW2F0dHJdICYmIE1vZGVsLnJhd0F0dHJpYnV0ZXNbYXR0cl0uZmllbGQgJiYgTW9kZWwucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZCAhPT0gYXR0cikge1xuICAgICAgICB2YWx1ZXNbTW9kZWwucmF3QXR0cmlidXRlc1thdHRyXS5maWVsZF0gPSBkYXRhVmFsdWVzW2F0dHJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVzW2F0dHJdID0gZGF0YVZhbHVlc1thdHRyXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuZXhwb3J0cy5tYXBWYWx1ZUZpZWxkTmFtZXMgPSBtYXBWYWx1ZUZpZWxkTmFtZXM7XG5cbmZ1bmN0aW9uIGlzQ29sU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlWzBdID09PSAnJCcgJiYgdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV0gPT09ICckJztcbn1cbmV4cG9ydHMuaXNDb2xTdHJpbmcgPSBpc0NvbFN0cmluZztcblxuZnVuY3Rpb24gY2FuVHJlYXRBcnJheUFzQW5kKGFycikge1xuICByZXR1cm4gYXJyLnNvbWUoYXJnID0+IF8uaXNQbGFpbk9iamVjdChhcmcpIHx8IGFyZyBpbnN0YW5jZW9mIFdoZXJlKTtcbn1cbmV4cG9ydHMuY2FuVHJlYXRBcnJheUFzQW5kID0gY2FuVHJlYXRBcnJheUFzQW5kO1xuXG5mdW5jdGlvbiBjb21iaW5lVGFibGVOYW1lcyh0YWJsZU5hbWUxLCB0YWJsZU5hbWUyKSB7XG4gIHJldHVybiB0YWJsZU5hbWUxLnRvTG93ZXJDYXNlKCkgPCB0YWJsZU5hbWUyLnRvTG93ZXJDYXNlKCkgPyB0YWJsZU5hbWUxICsgdGFibGVOYW1lMiA6IHRhYmxlTmFtZTIgKyB0YWJsZU5hbWUxO1xufVxuZXhwb3J0cy5jb21iaW5lVGFibGVOYW1lcyA9IGNvbWJpbmVUYWJsZU5hbWVzO1xuXG5mdW5jdGlvbiB0b0RlZmF1bHRWYWx1ZSh2YWx1ZSwgZGlhbGVjdCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgdG1wID0gdmFsdWUoKTtcbiAgICBpZiAodG1wIGluc3RhbmNlb2YgRGF0YVR5cGVzLkFCU1RSQUNUKSB7XG4gICAgICByZXR1cm4gdG1wLnRvU3FsKCk7XG4gICAgfVxuICAgIHJldHVybiB0bXA7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YVR5cGVzLlVVSURWMSkge1xuICAgIHJldHVybiB1dWlkdjEoKTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhVHlwZXMuVVVJRFY0KSB7XG4gICAgcmV0dXJuIHV1aWR2NCgpO1xuICB9XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5OT1cpIHtcbiAgICByZXR1cm4gbm93KGRpYWxlY3QpO1xuICB9XG4gIGlmIChfLmlzUGxhaW5PYmplY3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIF8uY2xvbmUodmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydHMudG9EZWZhdWx0VmFsdWUgPSB0b0RlZmF1bHRWYWx1ZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhlIGRlZmF1bHQgdmFsdWUgcHJvdmlkZWQgZXhpc3RzIGFuZCBjYW4gYmUgZGVzY3JpYmVkXG4gKiBpbiBhIGRiIHNjaGVtYSB1c2luZyB0aGUgREVGQVVMVCBkaXJlY3RpdmUuXG4gKlxuICogQHBhcmFtICB7Kn0gdmFsdWUgQW55IGRlZmF1bHQgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0geWVzIC8gbm8uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZhdWx0VmFsdWVTY2hlbWFibGUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgLy8gVE9ETyB0aGlzIHdpbGwgYmUgc2NoZW1hYmxlIHdoZW4gYWxsIHN1cHBvcnRlZCBkYlxuICAvLyBoYXZlIGJlZW4gbm9ybWFsaXplZCBmb3IgdGhpcyBjYXNlXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5OT1cpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YVR5cGVzLlVVSURWMSB8fCB2YWx1ZSBpbnN0YW5jZW9mIERhdGFUeXBlcy5VVUlEVjQpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuZGVmYXVsdFZhbHVlU2NoZW1hYmxlID0gZGVmYXVsdFZhbHVlU2NoZW1hYmxlO1xuXG5mdW5jdGlvbiByZW1vdmVOdWxsVmFsdWVzRnJvbUhhc2goaGFzaCwgb21pdE51bGwsIG9wdGlvbnMpIHtcbiAgbGV0IHJlc3VsdCA9IGhhc2g7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMuYWxsb3dOdWxsID0gb3B0aW9ucy5hbGxvd051bGwgfHwgW107XG5cbiAgaWYgKG9taXROdWxsKSB7XG4gICAgY29uc3QgX2hhc2ggPSB7fTtcblxuICAgIF8uZm9ySW4oaGFzaCwgKHZhbCwga2V5KSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5hbGxvd051bGwuaW5jbHVkZXMoa2V5KSB8fCBrZXkuZW5kc1dpdGgoJ0lkJykgfHwgdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIF9oYXNoW2tleV0gPSB2YWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXN1bHQgPSBfaGFzaDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnJlbW92ZU51bGxWYWx1ZXNGcm9tSGFzaCA9IHJlbW92ZU51bGxWYWx1ZXNGcm9tSGFzaDtcblxuZnVuY3Rpb24gc3RhY2soKSB7XG4gIGNvbnN0IG9yaWcgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSAoXywgc3RhY2spID0+IHN0YWNrO1xuICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCBzdGFjayk7XG4gIGNvbnN0IGVyclN0YWNrID0gZXJyLnN0YWNrO1xuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IG9yaWc7XG4gIHJldHVybiBlcnJTdGFjaztcbn1cbmV4cG9ydHMuc3RhY2sgPSBzdGFjaztcblxuY29uc3QgZGlhbGVjdHMgPSBuZXcgU2V0KFsnbWFyaWFkYicsICdteXNxbCcsICdwb3N0Z3JlcycsICdzcWxpdGUnLCAnbXNzcWwnXSk7XG5cbmZ1bmN0aW9uIG5vdyhkaWFsZWN0KSB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSgpO1xuICBpZiAoIWRpYWxlY3RzLmhhcyhkaWFsZWN0KSkge1xuICAgIGQuc2V0TWlsbGlzZWNvbmRzKDApO1xuICB9XG4gIHJldHVybiBkO1xufVxuZXhwb3J0cy5ub3cgPSBub3c7XG5cbi8vIE5vdGU6IFVzZSB0aGUgYHF1b3RlSWRlbnRpZmllcigpYCBhbmQgYGVzY2FwZSgpYCBtZXRob2RzIG9uIHRoZVxuLy8gYFF1ZXJ5SW50ZXJmYWNlYCBpbnN0ZWFkIGZvciBtb3JlIHBvcnRhYmxlIGNvZGUuXG5cbmNvbnN0IFRJQ0tfQ0hBUiA9ICdgJztcbmV4cG9ydHMuVElDS19DSEFSID0gVElDS19DSEFSO1xuXG5mdW5jdGlvbiBhZGRUaWNrcyhzLCB0aWNrQ2hhcikge1xuICB0aWNrQ2hhciA9IHRpY2tDaGFyIHx8IFRJQ0tfQ0hBUjtcbiAgcmV0dXJuIHRpY2tDaGFyICsgcmVtb3ZlVGlja3MocywgdGlja0NoYXIpICsgdGlja0NoYXI7XG59XG5leHBvcnRzLmFkZFRpY2tzID0gYWRkVGlja3M7XG5cbmZ1bmN0aW9uIHJlbW92ZVRpY2tzKHMsIHRpY2tDaGFyKSB7XG4gIHRpY2tDaGFyID0gdGlja0NoYXIgfHwgVElDS19DSEFSO1xuICByZXR1cm4gcy5yZXBsYWNlKG5ldyBSZWdFeHAodGlja0NoYXIsICdnJyksICcnKTtcbn1cbmV4cG9ydHMucmVtb3ZlVGlja3MgPSByZW1vdmVUaWNrcztcblxuLyoqXG4gKiBSZWNlaXZlcyBhIHRyZWUtbGlrZSBvYmplY3QgYW5kIHJldHVybnMgYSBwbGFpbiBvYmplY3Qgd2hpY2ggZGVwdGggaXMgMS5cbiAqXG4gKiAtIElucHV0OlxuICpcbiAqICB7XG4gKiAgICBuYW1lOiAnSm9obicsXG4gKiAgICBhZGRyZXNzOiB7XG4gKiAgICAgIHN0cmVldDogJ0Zha2UgU3QuIDEyMycsXG4gKiAgICAgIGNvb3JkaW5hdGVzOiB7XG4gKiAgICAgICAgbG9uZ2l0dWRlOiA1NS42Nzc5NjI3LFxuICogICAgICAgIGxhdGl0dWRlOiAxMi41OTY0MzEzXG4gKiAgICAgIH1cbiAqICAgIH1cbiAqICB9XG4gKlxuICogLSBPdXRwdXQ6XG4gKlxuICogIHtcbiAqICAgIG5hbWU6ICdKb2huJyxcbiAqICAgIGFkZHJlc3Muc3RyZWV0OiAnRmFrZSBTdC4gMTIzJyxcbiAqICAgIGFkZHJlc3MuY29vcmRpbmF0ZXMubGF0aXR1ZGU6IDU1LjY3Nzk2MjcsXG4gKiAgICBhZGRyZXNzLmNvb3JkaW5hdGVzLmxvbmdpdHVkZTogMTIuNTk2NDMxM1xuICogIH1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgYW4gT2JqZWN0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBhIGZsYXR0ZW5lZCBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5PYmplY3REZWVwKHZhbHVlKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICBjb25zdCBmbGF0dGVuZWRPYmogPSB7fTtcblxuICBmdW5jdGlvbiBmbGF0dGVuT2JqZWN0KG9iaiwgc3ViUGF0aCkge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgcGF0aFRvUHJvcGVydHkgPSBzdWJQYXRoID8gYCR7c3ViUGF0aH0uJHtrZXl9YCA6IGtleTtcbiAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnICYmIG9ialtrZXldICE9PSBudWxsKSB7XG4gICAgICAgIGZsYXR0ZW5PYmplY3Qob2JqW2tleV0sIHBhdGhUb1Byb3BlcnR5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZsYXR0ZW5lZE9ialtwYXRoVG9Qcm9wZXJ0eV0gPSBfLmdldChvYmosIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZsYXR0ZW5lZE9iajtcbiAgfVxuXG4gIHJldHVybiBmbGF0dGVuT2JqZWN0KHZhbHVlLCB1bmRlZmluZWQpO1xufVxuZXhwb3J0cy5mbGF0dGVuT2JqZWN0RGVlcCA9IGZsYXR0ZW5PYmplY3REZWVwO1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciByZXByZXNlbnRpbmcgU1FMIGZ1bmN0aW9ucywgYW5kIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUgZXNjYXBlZC5cbiAqIFBsZWFzZSBkbyBub3QgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSwgdXNlIFNlcXVlbGl6ZS5mbiBhbmQgU2VxdWVsaXplLmNvbCBpbnN0ZWFkLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU2VxdWVsaXplTWV0aG9kIHt9XG5leHBvcnRzLlNlcXVlbGl6ZU1ldGhvZCA9IFNlcXVlbGl6ZU1ldGhvZDtcblxuY2xhc3MgRm4gZXh0ZW5kcyBTZXF1ZWxpemVNZXRob2Qge1xuICBjb25zdHJ1Y3RvcihmbiwgYXJncykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5mbiA9IGZuO1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gIH1cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBGbih0aGlzLmZuLCB0aGlzLmFyZ3MpO1xuICB9XG59XG5leHBvcnRzLkZuID0gRm47XG5cbmNsYXNzIENvbCBleHRlbmRzIFNlcXVlbGl6ZU1ldGhvZCB7XG4gIGNvbnN0cnVjdG9yKGNvbCwgLi4uYXJncykge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgY29sID0gYXJncztcbiAgICB9XG4gICAgdGhpcy5jb2wgPSBjb2w7XG4gIH1cbn1cbmV4cG9ydHMuQ29sID0gQ29sO1xuXG5jbGFzcyBDYXN0IGV4dGVuZHMgU2VxdWVsaXplTWV0aG9kIHtcbiAgY29uc3RydWN0b3IodmFsLCB0eXBlLCBqc29uKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnZhbCA9IHZhbDtcbiAgICB0aGlzLnR5cGUgPSAodHlwZSB8fCAnJykudHJpbSgpO1xuICAgIHRoaXMuanNvbiA9IGpzb24gfHwgZmFsc2U7XG4gIH1cbn1cbmV4cG9ydHMuQ2FzdCA9IENhc3Q7XG5cbmNsYXNzIExpdGVyYWwgZXh0ZW5kcyBTZXF1ZWxpemVNZXRob2Qge1xuICBjb25zdHJ1Y3Rvcih2YWwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudmFsID0gdmFsO1xuICB9XG59XG5leHBvcnRzLkxpdGVyYWwgPSBMaXRlcmFsO1xuXG5jbGFzcyBKc29uIGV4dGVuZHMgU2VxdWVsaXplTWV0aG9kIHtcbiAgY29uc3RydWN0b3IoY29uZGl0aW9uc09yUGF0aCwgdmFsdWUpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmIChfLmlzT2JqZWN0KGNvbmRpdGlvbnNPclBhdGgpKSB7XG4gICAgICB0aGlzLmNvbmRpdGlvbnMgPSBjb25kaXRpb25zT3JQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhdGggPSBjb25kaXRpb25zT3JQYXRoO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmV4cG9ydHMuSnNvbiA9IEpzb247XG5cbmNsYXNzIFdoZXJlIGV4dGVuZHMgU2VxdWVsaXplTWV0aG9kIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlLCBjb21wYXJhdG9yLCBsb2dpYykge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGxvZ2ljID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvZ2ljID0gY29tcGFyYXRvcjtcbiAgICAgIGNvbXBhcmF0b3IgPSAnPSc7XG4gICAgfVxuXG4gICAgdGhpcy5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7XG4gICAgdGhpcy5jb21wYXJhdG9yID0gY29tcGFyYXRvcjtcbiAgICB0aGlzLmxvZ2ljID0gbG9naWM7XG4gIH1cbn1cbmV4cG9ydHMuV2hlcmUgPSBXaGVyZTtcblxuLy9Db2xsZWN0aW9uIG9mIGhlbHBlciBtZXRob2RzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHdvcmsgd2l0aCBzeW1ib2wgb3BlcmF0b3JzXG5cbi8qKlxuICogZ2V0T3BlcmF0b3JzXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheTxTeW1ib2w+fSBBbGwgb3BlcmF0b3JzIHByb3BlcnRpZXMgb2Ygb2JqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRvcnMob2JqKSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikuZmlsdGVyKHMgPT4gb3BlcmF0b3JzU2V0LmhhcyhzKSk7XG59XG5leHBvcnRzLmdldE9wZXJhdG9ycyA9IGdldE9wZXJhdG9ycztcblxuLyoqXG4gKiBnZXRDb21wbGV4S2V5c1xuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb2JqXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nfFN5bWJvbD59IEFsbCBrZXlzIGluY2x1ZGluZyBvcGVyYXRvcnNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldENvbXBsZXhLZXlzKG9iaikge1xuICByZXR1cm4gZ2V0T3BlcmF0b3JzKG9iaikuY29uY2F0KE9iamVjdC5rZXlzKG9iaikpO1xufVxuZXhwb3J0cy5nZXRDb21wbGV4S2V5cyA9IGdldENvbXBsZXhLZXlzO1xuXG4vKipcbiAqIGdldENvbXBsZXhTaXplXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSBvYmpcbiAqIEByZXR1cm5zIHtudW1iZXJ9ICAgICAgTGVuZ3RoIG9mIG9iamVjdCBwcm9wZXJ0aWVzIGluY2x1ZGluZyBvcGVyYXRvcnMgaWYgb2JqIGlzIGFycmF5IHJldHVybnMgaXRzIGxlbmd0aFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGxleFNpemUob2JqKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG9iaikgPyBvYmoubGVuZ3RoIDogZ2V0Q29tcGxleEtleXMob2JqKS5sZW5ndGg7XG59XG5leHBvcnRzLmdldENvbXBsZXhTaXplID0gZ2V0Q29tcGxleFNpemU7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgd2hlcmUgY2xhdXNlIGlzIGVtcHR5LCBldmVuIHdpdGggU3ltYm9sc1xuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb2JqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzV2hlcmVFbXB0eShvYmopIHtcbiAgcmV0dXJuICEhb2JqICYmIF8uaXNFbXB0eShvYmopICYmIGdldE9wZXJhdG9ycyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydHMuaXNXaGVyZUVtcHR5ID0gaXNXaGVyZUVtcHR5O1xuXG4vKipcbiAqIFJldHVybnMgRU5VTSBuYW1lIGJ5IGpvaW5pbmcgdGFibGUgYW5kIGNvbHVtbiBuYW1lXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbk5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUVudW1OYW1lKHRhYmxlTmFtZSwgY29sdW1uTmFtZSkge1xuICByZXR1cm4gYGVudW1fJHt0YWJsZU5hbWV9XyR7Y29sdW1uTmFtZX1gO1xufVxuZXhwb3J0cy5nZW5lcmF0ZUVudW1OYW1lID0gZ2VuZXJhdGVFbnVtTmFtZTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG5ldyBPYmplY3Qgd2hpY2gga2V5cyBhcmUgY2FtZWxpemVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybnMge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNhbWVsaXplT2JqZWN0S2V5cyhvYmopIHtcbiAgY29uc3QgbmV3T2JqID0gbmV3IE9iamVjdCgpO1xuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICBuZXdPYmpbY2FtZWxpemUoa2V5KV0gPSBvYmpba2V5XTtcbiAgfSk7XG4gIHJldHVybiBuZXdPYmo7XG59XG5leHBvcnRzLmNhbWVsaXplT2JqZWN0S2V5cyA9IGNhbWVsaXplT2JqZWN0S2V5cztcblxuLyoqXG4gKiBBc3NpZ25zIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGFuZCBzeW1ib2wga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAqIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqXG4gKiBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjQjZGVmYXVsdHNcbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZhdWx0cyhvYmplY3QsIC4uLnNvdXJjZXMpIHtcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG5cbiAgc291cmNlcy5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgc291cmNlID0gT2JqZWN0KHNvdXJjZSk7XG5cbiAgICAgIGdldENvbXBsZXhLZXlzKHNvdXJjZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgXy5lcSh2YWx1ZSwgT2JqZWN0LnByb3RvdHlwZVtrZXldKSAmJlxuICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcblxuICAgICAgICApIHtcbiAgICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvYmplY3Q7XG59XG5leHBvcnRzLmRlZmF1bHRzID0gZGVmYXVsdHM7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbmRleFxuICogQHBhcmFtIHtBcnJheX0gIGluZGV4LmZpZWxkc1xuICogQHBhcmFtIHtzdHJpbmd9IFtpbmRleC5uYW1lXVxuICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSB0YWJsZU5hbWVcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbmFtZUluZGV4KGluZGV4LCB0YWJsZU5hbWUpIHtcbiAgaWYgKHRhYmxlTmFtZS50YWJsZU5hbWUpIHRhYmxlTmFtZSA9IHRhYmxlTmFtZS50YWJsZU5hbWU7XG5cbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5kZXgsICduYW1lJykpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBpbmRleC5maWVsZHMubWFwKFxuICAgICAgZmllbGQgPT4gdHlwZW9mIGZpZWxkID09PSAnc3RyaW5nJyA/IGZpZWxkIDogZmllbGQubmFtZSB8fCBmaWVsZC5hdHRyaWJ1dGVcbiAgICApO1xuICAgIGluZGV4Lm5hbWUgPSB1bmRlcnNjb3JlKGAke3RhYmxlTmFtZX1fJHtmaWVsZHMuam9pbignXycpfWApO1xuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufVxuZXhwb3J0cy5uYW1lSW5kZXggPSBuYW1lSW5kZXg7XG5cbi8qKlxuICogQ2hlY2tzIGlmIDIgYXJyYXlzIGludGVyc2VjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnIxXG4gKiBAcGFyYW0ge0FycmF5fSBhcnIyXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbnRlcnNlY3RzKGFycjEsIGFycjIpIHtcbiAgcmV0dXJuIGFycjEuc29tZSh2ID0+IGFycjIuaW5jbHVkZXModikpO1xufVxuZXhwb3J0cy5pbnRlcnNlY3RzID0gaW50ZXJzZWN0cztcbiJdfQ== \ No newline at end of file diff --git a/dist/utils/classToInvokable.js b/dist/utils/classToInvokable.js index d844cf7..68c6fa5 100644 --- a/dist/utils/classToInvokable.js +++ b/dist/utils/classToInvokable.js @@ -26,4 +26,4 @@ function classToInvokable(Class) { } exports.classToInvokable = classToInvokable; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9jbGFzc1RvSW52b2thYmxlLmpzIl0sIm5hbWVzIjpbImNsYXNzVG9JbnZva2FibGUiLCJDbGFzcyIsIlByb3h5IiwiYXBwbHkiLCJUYXJnZXQiLCJ0aGlzQXJnIiwiYXJncyIsImNvbnN0cnVjdCIsImdldCIsInRhcmdldCIsInAiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUVBOzs7Ozs7Ozs7QUFRQSxTQUFTQSxnQkFBVCxDQUEwQkMsS0FBMUIsRUFBaUM7QUFDL0IsU0FBTyxJQUFJQyxLQUFKLENBQVVELEtBQVYsRUFBaUI7QUFDdEJFLElBQUFBLEtBQUssQ0FBQ0MsTUFBRCxFQUFTQyxPQUFULEVBQWtCQyxJQUFsQixFQUF3QjtBQUMzQixhQUFPLElBQUlGLE1BQUosQ0FBVyxHQUFHRSxJQUFkLENBQVA7QUFDRCxLQUhxQjs7QUFJdEJDLElBQUFBLFNBQVMsQ0FBQ0gsTUFBRCxFQUFTRSxJQUFULEVBQWU7QUFDdEIsYUFBTyxJQUFJRixNQUFKLENBQVcsR0FBR0UsSUFBZCxDQUFQO0FBQ0QsS0FOcUI7O0FBT3RCRSxJQUFBQSxHQUFHLENBQUNDLE1BQUQsRUFBU0MsQ0FBVCxFQUFZO0FBQ2IsYUFBT0QsTUFBTSxDQUFDQyxDQUFELENBQWI7QUFDRDs7QUFUcUIsR0FBakIsQ0FBUDtBQVdEOztBQUNEQyxPQUFPLENBQUNYLGdCQUFSLEdBQTJCQSxnQkFBM0IiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogV3JhcHMgYSBjb25zdHJ1Y3RvciB0byBub3QgbmVlZCB0aGUgYG5ld2Aga2V5d29yZCB1c2luZyBhIHByb3h5LlxyXG4gKiBPbmx5IHVzZWQgZm9yIGRhdGEgdHlwZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IENsYXNzIFRoZSBjbGFzcyBpbnN0YW5jZSB0byB3cmFwIGFzIGludm9jYWJsZS5cclxuICogQHJldHVybnMge1Byb3h5fSBXcmFwcGVkIGNsYXNzIGluc3RhbmNlLlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gY2xhc3NUb0ludm9rYWJsZShDbGFzcykge1xyXG4gIHJldHVybiBuZXcgUHJveHkoQ2xhc3MsIHtcclxuICAgIGFwcGx5KFRhcmdldCwgdGhpc0FyZywgYXJncykge1xyXG4gICAgICByZXR1cm4gbmV3IFRhcmdldCguLi5hcmdzKTtcclxuICAgIH0sXHJcbiAgICBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzKSB7XHJcbiAgICAgIHJldHVybiBuZXcgVGFyZ2V0KC4uLmFyZ3MpO1xyXG4gICAgfSxcclxuICAgIGdldCh0YXJnZXQsIHApIHtcclxuICAgICAgcmV0dXJuIHRhcmdldFtwXTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5leHBvcnRzLmNsYXNzVG9JbnZva2FibGUgPSBjbGFzc1RvSW52b2thYmxlO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9jbGFzc1RvSW52b2thYmxlLmpzIl0sIm5hbWVzIjpbImNsYXNzVG9JbnZva2FibGUiLCJDbGFzcyIsIlByb3h5IiwiYXBwbHkiLCJUYXJnZXQiLCJ0aGlzQXJnIiwiYXJncyIsImNvbnN0cnVjdCIsImdldCIsInRhcmdldCIsInAiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsU0FBU0EsZ0JBQVQsQ0FBMEJDLEtBQTFCLEVBQWlDO0FBQy9CLFNBQU8sSUFBSUMsS0FBSixDQUFVRCxLQUFWLEVBQWlCO0FBQ3RCRSxJQUFBQSxLQUFLLENBQUNDLE1BQUQsRUFBU0MsT0FBVCxFQUFrQkMsSUFBbEIsRUFBd0I7QUFDM0IsYUFBTyxJQUFJRixNQUFKLENBQVcsR0FBR0UsSUFBZCxDQUFQO0FBQ0QsS0FIcUI7O0FBSXRCQyxJQUFBQSxTQUFTLENBQUNILE1BQUQsRUFBU0UsSUFBVCxFQUFlO0FBQ3RCLGFBQU8sSUFBSUYsTUFBSixDQUFXLEdBQUdFLElBQWQsQ0FBUDtBQUNELEtBTnFCOztBQU90QkUsSUFBQUEsR0FBRyxDQUFDQyxNQUFELEVBQVNDLENBQVQsRUFBWTtBQUNiLGFBQU9ELE1BQU0sQ0FBQ0MsQ0FBRCxDQUFiO0FBQ0Q7O0FBVHFCLEdBQWpCLENBQVA7QUFXRDs7QUFDREMsT0FBTyxDQUFDWCxnQkFBUixHQUEyQkEsZ0JBQTNCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFdyYXBzIGEgY29uc3RydWN0b3IgdG8gbm90IG5lZWQgdGhlIGBuZXdgIGtleXdvcmQgdXNpbmcgYSBwcm94eS5cbiAqIE9ubHkgdXNlZCBmb3IgZGF0YSB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBDbGFzcyBUaGUgY2xhc3MgaW5zdGFuY2UgdG8gd3JhcCBhcyBpbnZvY2FibGUuXG4gKiBAcmV0dXJucyB7UHJveHl9IFdyYXBwZWQgY2xhc3MgaW5zdGFuY2UuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGFzc1RvSW52b2thYmxlKENsYXNzKSB7XG4gIHJldHVybiBuZXcgUHJveHkoQ2xhc3MsIHtcbiAgICBhcHBseShUYXJnZXQsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBuZXcgVGFyZ2V0KC4uLmFyZ3MpO1xuICAgIH0sXG4gICAgY29uc3RydWN0KFRhcmdldCwgYXJncykge1xuICAgICAgcmV0dXJuIG5ldyBUYXJnZXQoLi4uYXJncyk7XG4gICAgfSxcbiAgICBnZXQodGFyZ2V0LCBwKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0W3BdO1xuICAgIH1cbiAgfSk7XG59XG5leHBvcnRzLmNsYXNzVG9JbnZva2FibGUgPSBjbGFzc1RvSW52b2thYmxlO1xuIl19 \ No newline at end of file diff --git a/dist/utils/deprecations.js b/dist/utils/deprecations.js index eda3831..a9d5cf5 100644 --- a/dist/utils/deprecations.js +++ b/dist/utils/deprecations.js @@ -11,4 +11,4 @@ exports.noTrueLogging = deprecate(noop, 'The logging-option should be either a f exports.noStringOperators = deprecate(noop, 'String based operators are deprecated. Please use Symbol based operators for better security, read more at https://sequelize.org/master/manual/querying.html#operators', 'SEQUELIZE0003'); exports.noBoolOperatorAliases = deprecate(noop, 'A boolean value was passed to options.operatorsAliases. This is a no-op with v5 and should be removed.', 'SEQUELIZE0004'); exports.noDoubleNestedGroup = deprecate(noop, 'Passing a double nested nested array to `group` is unsupported and will be removed in v6.', 'SEQUELIZE0005'); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9kZXByZWNhdGlvbnMuanMiXSwibmFtZXMiOlsiZGVwcmVjYXRlIiwicmVxdWlyZSIsIm5vb3AiLCJleHBvcnRzIiwibm9SYXdBdHRyaWJ1dGVzIiwibm9UcnVlTG9nZ2luZyIsIm5vU3RyaW5nT3BlcmF0b3JzIiwibm9Cb29sT3BlcmF0b3JBbGlhc2VzIiwibm9Eb3VibGVOZXN0ZWRHcm91cCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQWdCQyxPQUFPLENBQUMsTUFBRCxDQUE3Qjs7QUFFQSxNQUFNQyxJQUFJLEdBQUcsTUFBTSxDQUFFLENBQXJCOztBQUVBQyxPQUFPLENBQUNDLGVBQVIsR0FBMEJKLFNBQVMsQ0FBQ0UsSUFBRCxFQUFPLDhEQUFQLEVBQXVFLGVBQXZFLENBQW5DO0FBQ0FDLE9BQU8sQ0FBQ0UsYUFBUixHQUF3QkwsU0FBUyxDQUFDRSxJQUFELEVBQU8sK0VBQVAsRUFBd0YsZUFBeEYsQ0FBakM7QUFDQUMsT0FBTyxDQUFDRyxpQkFBUixHQUE0Qk4sU0FBUyxDQUFDRSxJQUFELEVBQU8sd0tBQVAsRUFBaUwsZUFBakwsQ0FBckM7QUFDQUMsT0FBTyxDQUFDSSxxQkFBUixHQUFnQ1AsU0FBUyxDQUFDRSxJQUFELEVBQU8sd0dBQVAsRUFBaUgsZUFBakgsQ0FBekM7QUFDQUMsT0FBTyxDQUFDSyxtQkFBUixHQUE4QlIsU0FBUyxDQUFDRSxJQUFELEVBQU8sMkZBQVAsRUFBb0csZUFBcEcsQ0FBdkMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCB7IGRlcHJlY2F0ZSB9ID0gcmVxdWlyZSgndXRpbCcpO1xyXG5cclxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xyXG5cclxuZXhwb3J0cy5ub1Jhd0F0dHJpYnV0ZXMgPSBkZXByZWNhdGUobm9vcCwgJ1VzZSBzZXF1ZWxpemUuZm4gLyBzZXF1ZWxpemUubGl0ZXJhbCB0byBjb25zdHJ1Y3QgYXR0cmlidXRlcycsICdTRVFVRUxJWkUwMDAxJyk7XHJcbmV4cG9ydHMubm9UcnVlTG9nZ2luZyA9IGRlcHJlY2F0ZShub29wLCAnVGhlIGxvZ2dpbmctb3B0aW9uIHNob3VsZCBiZSBlaXRoZXIgYSBmdW5jdGlvbiBvciBmYWxzZS4gRGVmYXVsdDogY29uc29sZS5sb2cnLCAnU0VRVUVMSVpFMDAwMicpO1xyXG5leHBvcnRzLm5vU3RyaW5nT3BlcmF0b3JzID0gZGVwcmVjYXRlKG5vb3AsICdTdHJpbmcgYmFzZWQgb3BlcmF0b3JzIGFyZSBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFN5bWJvbCBiYXNlZCBvcGVyYXRvcnMgZm9yIGJldHRlciBzZWN1cml0eSwgcmVhZCBtb3JlIGF0IGh0dHBzOi8vc2VxdWVsaXplLm9yZy9tYXN0ZXIvbWFudWFsL3F1ZXJ5aW5nLmh0bWwjb3BlcmF0b3JzJywgJ1NFUVVFTElaRTAwMDMnKTtcclxuZXhwb3J0cy5ub0Jvb2xPcGVyYXRvckFsaWFzZXMgPSBkZXByZWNhdGUobm9vcCwgJ0EgYm9vbGVhbiB2YWx1ZSB3YXMgcGFzc2VkIHRvIG9wdGlvbnMub3BlcmF0b3JzQWxpYXNlcy4gVGhpcyBpcyBhIG5vLW9wIHdpdGggdjUgYW5kIHNob3VsZCBiZSByZW1vdmVkLicsICdTRVFVRUxJWkUwMDA0Jyk7XHJcbmV4cG9ydHMubm9Eb3VibGVOZXN0ZWRHcm91cCA9IGRlcHJlY2F0ZShub29wLCAnUGFzc2luZyBhIGRvdWJsZSBuZXN0ZWQgbmVzdGVkIGFycmF5IHRvIGBncm91cGAgaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2Ni4nLCAnU0VRVUVMSVpFMDAwNScpO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9kZXByZWNhdGlvbnMuanMiXSwibmFtZXMiOlsiZGVwcmVjYXRlIiwicmVxdWlyZSIsIm5vb3AiLCJleHBvcnRzIiwibm9SYXdBdHRyaWJ1dGVzIiwibm9UcnVlTG9nZ2luZyIsIm5vU3RyaW5nT3BlcmF0b3JzIiwibm9Cb29sT3BlcmF0b3JBbGlhc2VzIiwibm9Eb3VibGVOZXN0ZWRHcm91cCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQWdCQyxPQUFPLENBQUMsTUFBRCxDQUE3Qjs7QUFFQSxNQUFNQyxJQUFJLEdBQUcsTUFBTSxDQUFFLENBQXJCOztBQUVBQyxPQUFPLENBQUNDLGVBQVIsR0FBMEJKLFNBQVMsQ0FBQ0UsSUFBRCxFQUFPLDhEQUFQLEVBQXVFLGVBQXZFLENBQW5DO0FBQ0FDLE9BQU8sQ0FBQ0UsYUFBUixHQUF3QkwsU0FBUyxDQUFDRSxJQUFELEVBQU8sK0VBQVAsRUFBd0YsZUFBeEYsQ0FBakM7QUFDQUMsT0FBTyxDQUFDRyxpQkFBUixHQUE0Qk4sU0FBUyxDQUFDRSxJQUFELEVBQU8sd0tBQVAsRUFBaUwsZUFBakwsQ0FBckM7QUFDQUMsT0FBTyxDQUFDSSxxQkFBUixHQUFnQ1AsU0FBUyxDQUFDRSxJQUFELEVBQU8sd0dBQVAsRUFBaUgsZUFBakgsQ0FBekM7QUFDQUMsT0FBTyxDQUFDSyxtQkFBUixHQUE4QlIsU0FBUyxDQUFDRSxJQUFELEVBQU8sMkZBQVAsRUFBb0csZUFBcEcsQ0FBdkMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgZGVwcmVjYXRlIH0gPSByZXF1aXJlKCd1dGlsJyk7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuZXhwb3J0cy5ub1Jhd0F0dHJpYnV0ZXMgPSBkZXByZWNhdGUobm9vcCwgJ1VzZSBzZXF1ZWxpemUuZm4gLyBzZXF1ZWxpemUubGl0ZXJhbCB0byBjb25zdHJ1Y3QgYXR0cmlidXRlcycsICdTRVFVRUxJWkUwMDAxJyk7XG5leHBvcnRzLm5vVHJ1ZUxvZ2dpbmcgPSBkZXByZWNhdGUobm9vcCwgJ1RoZSBsb2dnaW5nLW9wdGlvbiBzaG91bGQgYmUgZWl0aGVyIGEgZnVuY3Rpb24gb3IgZmFsc2UuIERlZmF1bHQ6IGNvbnNvbGUubG9nJywgJ1NFUVVFTElaRTAwMDInKTtcbmV4cG9ydHMubm9TdHJpbmdPcGVyYXRvcnMgPSBkZXByZWNhdGUobm9vcCwgJ1N0cmluZyBiYXNlZCBvcGVyYXRvcnMgYXJlIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgU3ltYm9sIGJhc2VkIG9wZXJhdG9ycyBmb3IgYmV0dGVyIHNlY3VyaXR5LCByZWFkIG1vcmUgYXQgaHR0cHM6Ly9zZXF1ZWxpemUub3JnL21hc3Rlci9tYW51YWwvcXVlcnlpbmcuaHRtbCNvcGVyYXRvcnMnLCAnU0VRVUVMSVpFMDAwMycpO1xuZXhwb3J0cy5ub0Jvb2xPcGVyYXRvckFsaWFzZXMgPSBkZXByZWNhdGUobm9vcCwgJ0EgYm9vbGVhbiB2YWx1ZSB3YXMgcGFzc2VkIHRvIG9wdGlvbnMub3BlcmF0b3JzQWxpYXNlcy4gVGhpcyBpcyBhIG5vLW9wIHdpdGggdjUgYW5kIHNob3VsZCBiZSByZW1vdmVkLicsICdTRVFVRUxJWkUwMDA0Jyk7XG5leHBvcnRzLm5vRG91YmxlTmVzdGVkR3JvdXAgPSBkZXByZWNhdGUobm9vcCwgJ1Bhc3NpbmcgYSBkb3VibGUgbmVzdGVkIG5lc3RlZCBhcnJheSB0byBgZ3JvdXBgIGlzIHVuc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjYuJywgJ1NFUVVFTElaRTAwMDUnKTtcbiJdfQ== \ No newline at end of file diff --git a/dist/utils/logger.js b/dist/utils/logger.js index b61654d..cc45ca8 100644 --- a/dist/utils/logger.js +++ b/dist/utils/logger.js @@ -17,9 +17,7 @@ const debug = require('debug'); const util = require('util'); -let Logger = -/*#__PURE__*/ -function () { +let Logger = /*#__PURE__*/function () { function Logger(config) { _classCallCheck(this, Logger); @@ -52,4 +50,4 @@ function () { exports.logger = new Logger(); exports.Logger = Logger; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9sb2dnZXIuanMiXSwibmFtZXMiOlsiZGVidWciLCJyZXF1aXJlIiwidXRpbCIsIkxvZ2dlciIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsImNvbnRleHQiLCJtZXNzYWdlIiwiY29uc29sZSIsIndhcm4iLCJ2YWx1ZSIsImluc3BlY3QiLCJuYW1lIiwiZXhwb3J0cyIsImxvZ2dlciJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFRQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxPQUFELENBQXJCOztBQUNBLE1BQU1DLElBQUksR0FBR0QsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0lBRU1FLE07OztBQUNKLGtCQUFZQyxNQUFaLEVBQW9CO0FBQUE7O0FBRWxCLFNBQUtBLE1BQUwsR0FBY0MsTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDMUJDLE1BQUFBLE9BQU8sRUFBRSxXQURpQjtBQUUxQlAsTUFBQUEsS0FBSyxFQUFFO0FBRm1CLEtBQWQsRUFHWEksTUFIVyxDQUFkO0FBSUQ7Ozs7eUJBRUlJLE8sRUFBUztBQUNaO0FBQ0FDLE1BQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUFjLElBQUcsS0FBS04sTUFBTCxDQUFZRyxPQUFRLGNBQWFDLE9BQVEsRUFBMUQ7QUFDRDs7OzRCQUVPRyxLLEVBQU87QUFDYixhQUFPVCxJQUFJLENBQUNVLE9BQUwsQ0FBYUQsS0FBYixFQUFvQixLQUFwQixFQUEyQixDQUEzQixDQUFQO0FBQ0Q7OztpQ0FFWUUsSSxFQUFNO0FBQ2pCLGFBQU9iLEtBQUssQ0FBRSxHQUFFLEtBQUtJLE1BQUwsQ0FBWUcsT0FBUSxJQUFHTSxJQUFLLEVBQWhDLENBQVo7QUFDRDs7Ozs7O0FBR0hDLE9BQU8sQ0FBQ0MsTUFBUixHQUFpQixJQUFJWixNQUFKLEVBQWpCO0FBRUFXLE9BQU8sQ0FBQ1gsTUFBUixHQUFpQkEsTUFBakIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogU2VxdWVsaXplIG1vZHVsZSBmb3IgZGVidWcgYW5kIGRlcHJlY2F0aW9uIG1lc3NhZ2VzLlxyXG4gKiBJdCByZXF1aXJlIGEgYGNvbnRleHRgIGZvciB3aGljaCBtZXNzYWdlcyB3aWxsIGJlIHByaW50ZWQuXHJcbiAqXHJcbiAqIEBtb2R1bGUgbG9nZ2luZ1xyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuXHJcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKTtcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuXHJcbmNsYXNzIExvZ2dlciB7XHJcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XHJcblxyXG4gICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHtcclxuICAgICAgY29udGV4dDogJ3NlcXVlbGl6ZScsXHJcbiAgICAgIGRlYnVnOiB0cnVlXHJcbiAgICB9LCBjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgd2FybihtZXNzYWdlKSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgY29uc29sZS53YXJuKGAoJHt0aGlzLmNvbmZpZy5jb250ZXh0fSkgV2FybmluZzogJHttZXNzYWdlfWApO1xyXG4gIH1cclxuXHJcbiAgaW5zcGVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHV0aWwuaW5zcGVjdCh2YWx1ZSwgZmFsc2UsIDMpO1xyXG4gIH1cclxuXHJcbiAgZGVidWdDb250ZXh0KG5hbWUpIHtcclxuICAgIHJldHVybiBkZWJ1ZyhgJHt0aGlzLmNvbmZpZy5jb250ZXh0fToke25hbWV9YCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnRzLmxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcclxuXHJcbmV4cG9ydHMuTG9nZ2VyID0gTG9nZ2VyO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9sb2dnZXIuanMiXSwibmFtZXMiOlsiZGVidWciLCJyZXF1aXJlIiwidXRpbCIsIkxvZ2dlciIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsImNvbnRleHQiLCJtZXNzYWdlIiwiY29uc29sZSIsIndhcm4iLCJ2YWx1ZSIsImluc3BlY3QiLCJuYW1lIiwiZXhwb3J0cyIsImxvZ2dlciJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxPQUFELENBQXJCOztBQUNBLE1BQU1DLElBQUksR0FBR0QsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0lBRU1FLE07QUFDSixrQkFBWUMsTUFBWixFQUFvQjtBQUFBOztBQUVsQixTQUFLQSxNQUFMLEdBQWNDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQzFCQyxNQUFBQSxPQUFPLEVBQUUsV0FEaUI7QUFFMUJQLE1BQUFBLEtBQUssRUFBRTtBQUZtQixLQUFkLEVBR1hJLE1BSFcsQ0FBZDtBQUlEOzs7O3lCQUVJSSxPLEVBQVM7QUFDWjtBQUNBQyxNQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FBYyxJQUFHLEtBQUtOLE1BQUwsQ0FBWUcsT0FBUSxjQUFhQyxPQUFRLEVBQTFEO0FBQ0Q7Ozs0QkFFT0csSyxFQUFPO0FBQ2IsYUFBT1QsSUFBSSxDQUFDVSxPQUFMLENBQWFELEtBQWIsRUFBb0IsS0FBcEIsRUFBMkIsQ0FBM0IsQ0FBUDtBQUNEOzs7aUNBRVlFLEksRUFBTTtBQUNqQixhQUFPYixLQUFLLENBQUUsR0FBRSxLQUFLSSxNQUFMLENBQVlHLE9BQVEsSUFBR00sSUFBSyxFQUFoQyxDQUFaO0FBQ0Q7Ozs7OztBQUdIQyxPQUFPLENBQUNDLE1BQVIsR0FBaUIsSUFBSVosTUFBSixFQUFqQjtBQUVBVyxPQUFPLENBQUNYLE1BQVIsR0FBaUJBLE1BQWpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNlcXVlbGl6ZSBtb2R1bGUgZm9yIGRlYnVnIGFuZCBkZXByZWNhdGlvbiBtZXNzYWdlcy5cbiAqIEl0IHJlcXVpcmUgYSBgY29udGV4dGAgZm9yIHdoaWNoIG1lc3NhZ2VzIHdpbGwgYmUgcHJpbnRlZC5cbiAqXG4gKiBAbW9kdWxlIGxvZ2dpbmdcbiAqIEBwcml2YXRlXG4gKi9cblxuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuY2xhc3MgTG9nZ2VyIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG5cbiAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgY29udGV4dDogJ3NlcXVlbGl6ZScsXG4gICAgICBkZWJ1ZzogdHJ1ZVxuICAgIH0sIGNvbmZpZyk7XG4gIH1cblxuICB3YXJuKG1lc3NhZ2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihgKCR7dGhpcy5jb25maWcuY29udGV4dH0pIFdhcm5pbmc6ICR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIGluc3BlY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdXRpbC5pbnNwZWN0KHZhbHVlLCBmYWxzZSwgMyk7XG4gIH1cblxuICBkZWJ1Z0NvbnRleHQobmFtZSkge1xuICAgIHJldHVybiBkZWJ1ZyhgJHt0aGlzLmNvbmZpZy5jb250ZXh0fToke25hbWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0cy5sb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbmV4cG9ydHMuTG9nZ2VyID0gTG9nZ2VyO1xuIl19 \ No newline at end of file diff --git a/dist/utils/validator-extras.js b/dist/utils/validator-extras.js index 30e248c..f975538 100644 --- a/dist/utils/validator-extras.js +++ b/dist/utils/validator-extras.js @@ -119,4 +119,4 @@ validator.isDate = function (dateString) { }; exports.validator = validator; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy92YWxpZGF0b3ItZXh0cmFzLmpzIl0sIm5hbWVzIjpbIl8iLCJyZXF1aXJlIiwidmFsaWRhdG9yIiwiY2xvbmVEZWVwIiwibW9tZW50IiwiZXh0ZW5zaW9ucyIsImV4dGVuZCIsIm5hbWUiLCJmbiIsIm5vdEVtcHR5Iiwic3RyIiwibWF0Y2giLCJsZW4iLCJtaW4iLCJtYXgiLCJpc0xlbmd0aCIsImlzVXJsIiwiaXNVUkwiLCJpc0lQdjYiLCJpc0lQIiwiaXNJUHY0Iiwibm90SW4iLCJ2YWx1ZXMiLCJpc0luIiwicmVnZXgiLCJwYXR0ZXJuIiwibW9kaWZpZXJzIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJSZWdFeHAiLCJub3RSZWdleCIsImlzRGVjaW1hbCIsInZhbCIsIm51bWJlciIsInBhcnNlRmxvYXQiLCJpc05hTiIsIm5vdCIsImNvbnRhaW5zIiwiZWxlbSIsImluY2x1ZGVzIiwibm90Q29udGFpbnMiLCJpcyIsImV4cG9ydHMiLCJpc0ltbXV0YWJsZSIsInZhbHVlIiwidmFsaWRhdG9yQXJncyIsImZpZWxkIiwibW9kZWxJbnN0YW5jZSIsImlzTmV3UmVjb3JkIiwiZGF0YVZhbHVlcyIsIl9wcmV2aW91c0RhdGFWYWx1ZXMiLCJub3ROdWxsIiwidW5kZWZpbmVkIiwiZm9yRWFjaCIsImtleSIsImlzTnVsbCIsImlzRW1wdHkiLCJpc0RhdGUiLCJkYXRlU3RyaW5nIiwicGFyc2VkIiwiRGF0ZSIsInBhcnNlIiwiZGF0ZSIsInRvSVNPU3RyaW5nIiwiaXNWYWxpZCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsQ0FBQyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNQyxTQUFTLEdBQUdGLENBQUMsQ0FBQ0csU0FBRixDQUFZRixPQUFPLENBQUMsV0FBRCxDQUFuQixDQUFsQjs7QUFDQSxNQUFNRyxNQUFNLEdBQUdILE9BQU8sQ0FBQyxRQUFELENB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RSxDQUlBO0FBQ0E7OztBQUNBSixTQUFTLENBQUN3RCxNQUFWLEdBQW1CeEQsU0FBUyxDQUFDeUQsT0FBN0IsQyxDQUVBO0FBQ0E7O0FBQ0F6RCxTQUFTLENBQUMwRCxNQUFWLEdBQW1CLFVBQVNDLFVBQVQsRUFBcUI7QUFDdEM7QUFDQTtBQUNBLFFBQU1DLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVdILFVBQVgsQ0FBZjs7QUFDQSxNQUFJdkIsS0FBSyxDQUFDd0IsTUFBRCxDQUFULEVBQW1CO0FBQ2pCO0FBQ0EsV0FBTyxLQUFQO0FBQ0QsR0FQcUMsQ0FRdEM7QUFDQTs7O0FBQ0EsUUFBTUcsSUFBSSxHQUFHLElBQUlGLElBQUosQ0FBU0QsTUFBVCxDQUFiO0FBQ0EsU0FBTzFELE1BQU0sQ0FBQzZELElBQUksQ0FBQ0MsV0FBTCxFQUFELENBQU4sQ0FBMkJDLE9BQTNCLEVBQVA7QUFDRCxDQVpEOztBQWNBdEIsT0FBTyxDQUFDM0MsU0FBUixHQUFvQkEsU0FBcEIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcblxyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IHZhbGlkYXRvciA9IF8uY2xvbmVEZWVwKHJlcXVpcmUoJ3ZhbGlkYXRvcicpKTtcclxuY29uc3QgbW9tZW50ID0gcmVxdWlyZSgnbW9tZW50Jyk7XHJcblxyXG5jb25zdCBleHRlbnNpb25zID0ge1xyXG4gIGV4dGVuZChuYW1lLCBmbikge1xyXG4gICAgdGhpc1tuYW1lXSA9IGZuO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH0sXHJcbiAgbm90RW1wdHkoc3RyKSB7XHJcbiAgICByZXR1cm4gIXN0ci5tYXRjaCgvXltcXHNcXHRcXHJcXG5dKiQvKTtcclxuICB9LFxyXG4gIGxlbihzdHIsIG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0xlbmd0aChzdHIsIG1pbiwgbWF4KTtcclxuICB9LFxyXG4gIGlzVXJsKHN0cikge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNVUkwoc3RyKTtcclxuICB9LFxyXG4gIGlzSVB2NihzdHIpIHtcclxuICAgIHJldHVybiB0aGlzLmlzSVAoc3RyLCA2KTtcclxuICB9LFxyXG4gIGlzSVB2NChzdHIpIHtcclxuICAgIHJldHVybiB0aGlzLmlzSVAoc3RyLCA0KTtcclxuICB9LFxyXG4gIG5vdEluKHN0ciwgdmFsdWVzKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuaXNJbihzdHIsIHZhbHVlcyk7XHJcbiAgfSxcclxuICByZWdleChzdHIsIHBhdHRlcm4sIG1vZGlmaWVycykge1xyXG4gICAgc3RyICs9ICcnO1xyXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYXR0ZXJuKS5zbGljZSg4LCAtMSkgIT09ICdSZWdFeHAnKSB7XHJcbiAgICAgIHBhdHRlcm4gPSBuZXcgUmVnRXhwKHBhdHRlcm4sIG1vZGlmaWVycyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyLm1hdGNoKHBhdHRlcm4pO1xyXG4gIH0sXHJcbiAgbm90UmVnZXgoc3RyLCBwYXR0ZXJuLCBtb2RpZmllcnMpIHtcclxuICAgIHJldHVybiAhdGhpcy5yZWdleChzdHIsIHBhdHRlcm4sIG1vZGlmaWVycyk7XHJcbiAgfSxcclxuICBpc0RlY2ltYWwoc3RyKSB7XHJcbiAgICByZXR1cm4gc3RyICE9PSAnJyAmJiAhIXN0ci5tYXRjaCgvXig/Oi0/KD86WzAtOV0rKSk/KD86XFwuWzAtOV0qKT8oPzpbZUVdWystXT8oPzpbMC05XSspKT8kLyk7XHJcbiAgfSxcclxuICBtaW4oc3RyLCB2YWwpIHtcclxuICAgIGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQoc3RyKTtcclxuICAgIHJldHVybiBpc05hTihudW1iZXIpIHx8IG51bWJlciA+PSB2YWw7XHJcbiAgfSxcclxuICBtYXgoc3RyLCB2YWwpIHtcclxuICAgIGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQoc3RyKTtcclxuICAgIHJldHVybiBpc05hTihudW1iZXIpIHx8IG51bWJlciA8PSB2YWw7XHJcbiAgfSxcclxuICBub3Qoc3RyLCBwYXR0ZXJuLCBtb2RpZmllcnMpIHtcclxuICAgIHJldHVybiB0aGlzLm5vdFJlZ2V4KHN0ciwgcGF0dGVybiwgbW9kaWZpZXJzKTtcclxuICB9LFxyXG4gIGNvbnRhaW5zKHN0ciwgZWxlbSkge1xyXG4gICAgcmV0dXJuICEhZWxlbSAmJiBzdHIuaW5jbHVkZXMoZWxlbSk7XHJcbiAgfSxcclxuICBub3RDb250YWlucyhzdHIsIGVsZW0pIHtcclxuICAgIHJldHVybiAhdGhpcy5jb250YWlucyhzdHIsIGVsZW0pO1xyXG4gIH0sXHJcbiAgaXMoc3RyLCBwYXR0ZXJuLCBtb2RpZmllcnMpIHtcclxuICAgIHJldHVybiB0aGlzLnJlZ2V4KHN0ciwgcGF0dGVybiwgbW9kaWZpZXJzKTtcclxuICB9XHJcbn07XHJcbmV4cG9ydHMuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7XHJcblxyXG4vLyBpbnN0YW5jZSBiYXNlZCB2YWxpZGF0b3JzXHJcbnZhbGlkYXRvci5pc0ltbXV0YWJsZSA9IGZ1bmN0aW9uKHZhbHVlLCB2YWxpZGF0b3JBcmdzLCBmaWVsZCwgbW9kZWxJbnN0YW5jZSkge1xyXG4gIHJldHVybiBtb2RlbEluc3RhbmNlLmlzTmV3UmVjb3JkIHx8IG1vZGVsSW5zdGFuY2UuZGF0YVZhbHVlc1tmaWVsZF0gPT09IG1vZGVsSW5zdGFuY2UuX3ByZXZpb3VzRGF0YVZhbHVlc1tmaWVsZF07XHJcbn07XHJcblxyXG4vLyBleHRyYSB2YWxpZGF0b3JzXHJcbnZhbGlkYXRvci5ub3ROdWxsID0gZnVuY3Rpb24odmFsKSB7XHJcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZDtcclxufTtcclxuXHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc28vdmFsaWRhdG9yLmpzL2Jsb2IvNi4yLjAvdmFsaWRhdG9yLmpzXHJcbl8uZm9yRWFjaChleHRlbnNpb25zLCAoZXh0ZW5kLCBrZXkpID0+IHtcclxuICB2YWxpZGF0b3Jba2V5XSA9IGV4dGVuZDtcclxufSk7XHJcblxyXG4vLyBtYXAgaXNOdWxsIHRvIGlzRW1wdHlcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Nocmlzby92YWxpZGF0b3IuanMvY29tbWl0L2UzM2QzOGEyNmVlMmY5NjY2YjMxOWFkYjY3YzdmYzBkM2RlYTcxMjVcclxudmFsaWRhdG9yLmlzTnVsbCA9IHZhbGlkYXRvci5pc0VtcHR5O1xyXG5cclxuLy8gaXNEYXRlIHJlbW92ZWQgaW4gNy4wLjBcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Nocmlzby92YWxpZGF0b3IuanMvY29tbWl0LzA5NTUwOWZjNzA3YTRkYzBlOTlmODUxMzFkZjExNzZhZDYzODlmYzlcclxudmFsaWRhdG9yLmlzRGF0ZSA9IGZ1bmN0aW9uKGRhdGVTdHJpbmcpIHtcclxuICAvLyBhdm9pZCBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvXHJcbiAgLy8gYnkgZG9pbmcgYSBwcmVsaW1pbmFyeSBjaGVjayBvbiBgZGF0ZVN0cmluZ2BcclxuICBjb25zdCBwYXJzZWQgPSBEYXRlLnBhcnNlKGRhdGVTdHJpbmcpO1xyXG4gIGlmIChpc05hTihwYXJzZWQpKSB7XHJcbiAgICAvLyBmYWlsIGlmIHdlIGNhbid0IHBhcnNlIGl0XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8vIG90aGVyd2lzZSBjb252ZXJ0IHRvIElTTyA4NjAxIGFzIG1vbWVudCBwcmVmZXJzXHJcbiAgLy8gaHR0cDovL21vbWVudGpzLmNvbS9kb2NzLyMvcGFyc2luZy9zdHJpbmcvXHJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHBhcnNlZCk7XHJcbiAgcmV0dXJuIG1vbWVudChkYXRlLnRvSVNPU3RyaW5nKCkpLmlzVmFsaWQoKTtcclxufTtcclxuXHJcbmV4cG9ydHMudmFsaWRhdG9yID0gdmFsaWRhdG9yO1xyXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy92YWxpZGF0b3ItZXh0cmFzLmpzIl0sIm5hbWVzIjpbIl8iLCJyZXF1aXJlIiwidmFsaWRhdG9yIiwiY2xvbmVEZWVwIiwibW9tZW50IiwiZXh0ZW5zaW9ucyIsImV4dGVuZCIsIm5hbWUiLCJmbiIsIm5vdEVtcHR5Iiwic3RyIiwibWF0Y2giLCJsZW4iLCJtaW4iLCJtYXgiLCJpc0xlbmd0aCIsImlzVXJsIiwiaXNVUkwiLCJpc0lQdjYiLCJpc0lQIiwiaXNJUHY0Iiwibm90SW4iLCJ2YWx1ZXMiLCJpc0luIiwicmVnZXgiLCJwYXR0ZXJuIiwibW9kaWZpZXJzIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJSZWdFeHAiLCJub3RSZWdleCIsImlzRGVjaW1hbCIsInZhbCIsIm51bWJlciIsInBhcnNlRmxvYXQiLCJpc05hTiIsIm5vdCIsImNvbnRhaW5zIiwiZWxlbSIsImluY2x1ZGVzIiwibm90Q29udGFpbnMiLCJpcyIsImV4cG9ydHMiLCJpc0ltbXV0YWJsZSIsInZhbHVlIiwidmFsaWRhdG9yQXJncyIsImZpZWxkIiwibW9kZWxJbnN0YW5jZSIsImlzTmV3UmVjb3JkIiwiZGF0YVZhbHVlcyIsIl9wcmV2aW91c0RhdGFWYWx1ZXMiLCJub3ROdWxsIiwidW5kZWZpbmVkIiwiZm9yRWFjaCIsImtleSIsImlzTnVsbCIsImlzRW1wdHkiLCJpc0RhdGUiLCJkYXRlU3RyaW5nIiwicGFyc2VkIiwiRGF0ZSIsInBhcnNlIiwiZGF0ZSIsInRvSVNPU3RyaW5nIiwiaXNWYWxpZCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTUEsQ0FBQyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFqQjs7QUFDQSxNQUFNQyxTQUFTLEdBQUdGLENBQUMsQ0FBQ0csU0FBRixDQUFZRixPQUFPLENBQUMsV0FBRCxDQUFuQixDQUFsQjs7QUFDQSxNQUFNRyxNQUFNLEdBQUdILE9BQU8sQ0FBQyxRQUFELENB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RSxDQUlBO0FBQ0E7OztBQUNBSixTQUFTLENBQUN3RCxNQUFWLEdBQW1CeEQsU0FBUyxDQUFDeUQsT0FBN0IsQyxDQUVBO0FBQ0E7O0FBQ0F6RCxTQUFTLENBQUMwRCxNQUFWLEdBQW1CLFVBQVNDLFVBQVQsRUFBcUI7QUFDdEM7QUFDQTtBQUNBLFFBQU1DLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVdILFVBQVgsQ0FBZjs7QUFDQSxNQUFJdkIsS0FBSyxDQUFDd0IsTUFBRCxDQUFULEVBQW1CO0FBQ2pCO0FBQ0EsV0FBTyxLQUFQO0FBQ0QsR0FQcUMsQ0FRdEM7QUFDQTs7O0FBQ0EsUUFBTUcsSUFBSSxHQUFHLElBQUlGLElBQUosQ0FBU0QsTUFBVCxDQUFiO0FBQ0EsU0FBTzFELE1BQU0sQ0FBQzZELElBQUksQ0FBQ0MsV0FBTCxFQUFELENBQU4sQ0FBMkJDLE9BQTNCLEVBQVA7QUFDRCxDQVpEOztBQWNBdEIsT0FBTyxDQUFDM0MsU0FBUixHQUFvQkEsU0FBcEIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbmNvbnN0IHZhbGlkYXRvciA9IF8uY2xvbmVEZWVwKHJlcXVpcmUoJ3ZhbGlkYXRvcicpKTtcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xuXG5jb25zdCBleHRlbnNpb25zID0ge1xuICBleHRlbmQobmFtZSwgZm4pIHtcbiAgICB0aGlzW25hbWVdID0gZm47XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgbm90RW1wdHkoc3RyKSB7XG4gICAgcmV0dXJuICFzdHIubWF0Y2goL15bXFxzXFx0XFxyXFxuXSokLyk7XG4gIH0sXG4gIGxlbihzdHIsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNMZW5ndGgoc3RyLCBtaW4sIG1heCk7XG4gIH0sXG4gIGlzVXJsKHN0cikge1xuICAgIHJldHVybiB0aGlzLmlzVVJMKHN0cik7XG4gIH0sXG4gIGlzSVB2NihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5pc0lQKHN0ciwgNik7XG4gIH0sXG4gIGlzSVB2NChzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5pc0lQKHN0ciwgNCk7XG4gIH0sXG4gIG5vdEluKHN0ciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzSW4oc3RyLCB2YWx1ZXMpO1xuICB9LFxuICByZWdleChzdHIsIHBhdHRlcm4sIG1vZGlmaWVycykge1xuICAgIHN0ciArPSAnJztcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHBhdHRlcm4pLnNsaWNlKDgsIC0xKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICAgIHBhdHRlcm4gPSBuZXcgUmVnRXhwKHBhdHRlcm4sIG1vZGlmaWVycyk7XG4gICAgfVxuICAgIHJldHVybiBzdHIubWF0Y2gocGF0dGVybik7XG4gIH0sXG4gIG5vdFJlZ2V4KHN0ciwgcGF0dGVybiwgbW9kaWZpZXJzKSB7XG4gICAgcmV0dXJuICF0aGlzLnJlZ2V4KHN0ciwgcGF0dGVybiwgbW9kaWZpZXJzKTtcbiAgfSxcbiAgaXNEZWNpbWFsKHN0cikge1xuICAgIHJldHVybiBzdHIgIT09ICcnICYmICEhc3RyLm1hdGNoKC9eKD86LT8oPzpbMC05XSspKT8oPzpcXC5bMC05XSopPyg/OltlRV1bKy1dPyg/OlswLTldKykpPyQvKTtcbiAgfSxcbiAgbWluKHN0ciwgdmFsKSB7XG4gICAgY29uc3QgbnVtYmVyID0gcGFyc2VGbG9hdChzdHIpO1xuICAgIHJldHVybiBpc05hTihudW1iZXIpIHx8IG51bWJlciA+PSB2YWw7XG4gIH0sXG4gIG1heChzdHIsIHZhbCkge1xuICAgIGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQoc3RyKTtcbiAgICByZXR1cm4gaXNOYU4obnVtYmVyKSB8fCBudW1iZXIgPD0gdmFsO1xuICB9LFxuICBub3Qoc3RyLCBwYXR0ZXJuLCBtb2RpZmllcnMpIHtcbiAgICByZXR1cm4gdGhpcy5ub3RSZWdleChzdHIsIHBhdHRlcm4sIG1vZGlmaWVycyk7XG4gIH0sXG4gIGNvbnRhaW5zKHN0ciwgZWxlbSkge1xuICAgIHJldHVybiAhIWVsZW0gJiYgc3RyLmluY2x1ZGVzKGVsZW0pO1xuICB9LFxuICBub3RDb250YWlucyhzdHIsIGVsZW0pIHtcbiAgICByZXR1cm4gIXRoaXMuY29udGFpbnMoc3RyLCBlbGVtKTtcbiAgfSxcbiAgaXMoc3RyLCBwYXR0ZXJuLCBtb2RpZmllcnMpIHtcbiAgICByZXR1cm4gdGhpcy5yZWdleChzdHIsIHBhdHRlcm4sIG1vZGlmaWVycyk7XG4gIH1cbn07XG5leHBvcnRzLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zO1xuXG4vLyBpbnN0YW5jZSBiYXNlZCB2YWxpZGF0b3JzXG52YWxpZGF0b3IuaXNJbW11dGFibGUgPSBmdW5jdGlvbih2YWx1ZSwgdmFsaWRhdG9yQXJncywgZmllbGQsIG1vZGVsSW5zdGFuY2UpIHtcbiAgcmV0dXJuIG1vZGVsSW5zdGFuY2UuaXNOZXdSZWNvcmQgfHwgbW9kZWxJbnN0YW5jZS5kYXRhVmFsdWVzW2ZpZWxkXSA9PT0gbW9kZWxJbnN0YW5jZS5fcHJldmlvdXNEYXRhVmFsdWVzW2ZpZWxkXTtcbn07XG5cbi8vIGV4dHJhIHZhbGlkYXRvcnNcbnZhbGlkYXRvci5ub3ROdWxsID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNvL3ZhbGlkYXRvci5qcy9ibG9iLzYuMi4wL3ZhbGlkYXRvci5qc1xuXy5mb3JFYWNoKGV4dGVuc2lvbnMsIChleHRlbmQsIGtleSkgPT4ge1xuICB2YWxpZGF0b3Jba2V5XSA9IGV4dGVuZDtcbn0pO1xuXG4vLyBtYXAgaXNOdWxsIHRvIGlzRW1wdHlcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc28vdmFsaWRhdG9yLmpzL2NvbW1pdC9lMzNkMzhhMjZlZTJmOTY2NmIzMTlhZGI2N2M3ZmMwZDNkZWE3MTI1XG52YWxpZGF0b3IuaXNOdWxsID0gdmFsaWRhdG9yLmlzRW1wdHk7XG5cbi8vIGlzRGF0ZSByZW1vdmVkIGluIDcuMC4wXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNvL3ZhbGlkYXRvci5qcy9jb21taXQvMDk1NTA5ZmM3MDdhNGRjMGU5OWY4NTEzMWRmMTE3NmFkNjM4OWZjOVxudmFsaWRhdG9yLmlzRGF0ZSA9IGZ1bmN0aW9uKGRhdGVTdHJpbmcpIHtcbiAgLy8gYXZvaWQgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlL1xuICAvLyBieSBkb2luZyBhIHByZWxpbWluYXJ5IGNoZWNrIG9uIGBkYXRlU3RyaW5nYFxuICBjb25zdCBwYXJzZWQgPSBEYXRlLnBhcnNlKGRhdGVTdHJpbmcpO1xuICBpZiAoaXNOYU4ocGFyc2VkKSkge1xuICAgIC8vIGZhaWwgaWYgd2UgY2FuJ3QgcGFyc2UgaXRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gb3RoZXJ3aXNlIGNvbnZlcnQgdG8gSVNPIDg2MDEgYXMgbW9tZW50IHByZWZlcnNcbiAgLy8gaHR0cDovL21vbWVudGpzLmNvbS9kb2NzLyMvcGFyc2luZy9zdHJpbmcvXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwYXJzZWQpO1xuICByZXR1cm4gbW9tZW50KGRhdGUudG9JU09TdHJpbmcoKSkuaXNWYWxpZCgpO1xufTtcblxuZXhwb3J0cy52YWxpZGF0b3IgPSB2YWxpZGF0b3I7XG4iXX0= \ No newline at end of file From 57fbac03effb549394fd20689225f6eadc461158 Mon Sep 17 00:00:00 2001 From: prih Date: Mon, 14 Dec 2020 23:16:56 +0200 Subject: [PATCH 3/8] fix: connection.close --- dist/dialects/sqlite/connection-manager.js | 10 ++++++++-- lib/dialects/sqlite/connection-manager.js | 16 +++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/dist/dialects/sqlite/connection-manager.js b/dist/dialects/sqlite/connection-manager.js index 8e5d486..f61d584 100644 --- a/dist/dialects/sqlite/connection-manager.js +++ b/dist/dialects/sqlite/connection-manager.js @@ -69,7 +69,13 @@ let ConnectionManager = /*#__PURE__*/function (_AbstractConnectionMa) { _createClass(ConnectionManager, [{ key: "_onProcessExit", value: function _onProcessExit() { - const promises = Object.getOwnPropertyNames(this.connections).map(connection => Promise.fromCallback(callback => this.connections[connection].close(callback))); + const promises = Object.getOwnPropertyNames(this.connections).map(connection => { + return Promise.fromCallback(callback => { + return this.connections[connection].then(db => { + db.close(callback); + }); + }); + }); return Promise.all(promises).then(_get(_getPrototypeOf(ConnectionManager.prototype), "_onProcessExit", this).bind(this)); } // Expose this as a method so that the parsing may be updated when the user has added additional, custom types @@ -141,4 +147,4 @@ let ConnectionManager = /*#__PURE__*/function (_AbstractConnectionMa) { module.exports = ConnectionManager; module.exports.ConnectionManager = ConnectionManager; module.exports.default = ConnectionManager; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvY29ubmVjdGlvbi1tYW5hZ2VyLmpzIl0sIm5hbWVzIjpbIkFic3RyYWN0Q29ubmVjdGlvbk1hbmFnZXIiLCJyZXF1aXJlIiwiUHJvbWlzZSIsImxvZ2dlciIsImRlYnVnIiwiZGVidWdDb250ZXh0IiwiZGF0YVR5cGVzIiwic3FsaXRlIiwic2VxdWVsaXplRXJyb3JzIiwicGFyc2VyU3RvcmUiLCJDb25uZWN0aW9uTWFuYWdlciIsImRpYWxlY3QiLCJzZXF1ZWxpemUiLCJjb25uZWN0aW9ucyIsIm9wZW5EYXRhYmFzZSIsIl9sb2FkRGlhbGVjdE1vZHVsZSIsIm9wdGlvbnMiLCJkYXRhYmFzZSIsImRpYWxlY3RPcHRpb25zIiwidmVyc2lvbiIsImRlc2NyaXB0aW9uIiwic2l6ZSIsImNvbm4iLCJyZWZyZXNoVHlwZVBhcnNlciIsInByb21pc2VzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIm1hcCIsImNvbm5lY3Rpb24iLCJmcm9tQ2FsbGJhY2siLCJjYWxsYmFjayIsImNsb3NlIiwiYWxsIiwidGhlbiIsImJpbmQiLCJkYXRhVHlwZSIsInJlZnJlc2giLCJjbGVhciIsInV1aWQiLCJyZXNvbHZlIiwicmVqZWN0IiwiQ29ubmVjdGlvbkVycm9yIiwiRXJyb3IiLCJ0YXAiLCJjb25maWciLCJwYXNzd29yZCIsImV4ZWMiLCJzcWwiLCJlc2NhcGUiLCJhcmdzIiwiZm9yZWlnbktleXMiLCJmb3JjZSIsInVuZGVmaW5lZCIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSx5QkFBeUIsR0FBR0MsT0FBTyxDQUFDLGdDQUFELENBQXpDOztBQUNBLE1BQU1DLE9BQU8sR0FBR0QsT0FBTyxDQUFDLGVBQUQsQ0FBdkI7O0FBQ0EsTUFBTTtBQUFFRSxFQUFBQTtBQUFGLElBQWFGLE9BQU8sQ0FBQyxv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QUNHLEtBQVgsSUFBb0JILFVBQVUsQ0FBQ0csS0FBWCxFQUFwQjtBQUNBLGFBQUtULElBQUwsR0FBWThCLFNBQVo7QUFDQWhELFFBQUFBLEtBQUssQ0FBRSx1QkFBc0J3QixVQUFVLENBQUNVLElBQUssRUFBeEMsQ0FBTDtBQUNBLGVBQU8sS0FBS3pCLFdBQUwsQ0FBaUJlLFVBQVUsQ0FBQ1UsSUFBNUIsQ0FBUDtBQUNEO0FBQ0Y7Ozs7RUFwRzZCdEMseUI7O0FBdUdoQ3FELE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjVDLGlCQUFqQjtBQUNBMkMsTUFBTSxDQUFDQyxPQUFQLENBQWU1QyxpQkFBZixHQUFtQ0EsaUJBQW5DO0FBQ0EyQyxNQUFNLENBQUNDLE9BQVAsQ0FBZUMsT0FBZixHQUF5QjdDLGlCQUF6QiIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBBYnN0cmFjdENvbm5lY3Rpb25NYW5hZ2VyID0gcmVxdWlyZShcIi4uL2Fic3RyYWN0L2Nvbm5lY3Rpb24tbWFuYWdlclwiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZVwiKTtcbmNvbnN0IHsgbG9nZ2VyIH0gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nZ2VyXCIpO1xuY29uc3QgZGVidWcgPSBsb2dnZXIuZGVidWdDb250ZXh0KFwiY29ubmVjdGlvbjpzcWxpdGVcIik7XG5jb25zdCBkYXRhVHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vZGF0YS10eXBlc1wiKS5zcWxpdGU7XG5jb25zdCBzZXF1ZWxpemVFcnJvcnMgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3JzXCIpO1xuY29uc3QgcGFyc2VyU3RvcmUgPSByZXF1aXJlKFwiLi4vcGFyc2VyU3RvcmVcIikoXCJzcWxpdGVcIik7XG5cbmNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGV4dGVuZHMgQWJzdHJhY3RDb25uZWN0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKGRpYWxlY3QsIHNlcXVlbGl6ZSkge1xuICAgIHN1cGVyKGRpYWxlY3QsIHNlcXVlbGl6ZSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0ge307XG4gICAgY29uc3QgeyBvcGVuRGF0YWJhc2UgfSA9IHRoaXMuX2xvYWREaWFsZWN0TW9kdWxlKCk7XG4gICAgdGhpcy5vcGVuRGF0YWJhc2UgPSAoKSA9PlxuICAgICAgb3BlbkRhdGFiYXNlKFxuICAgICAgICB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRhdGFiYXNlLFxuICAgICAgICB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3RPcHRpb25zLnZlcnNpb24gfHwgXCIxLjBcIixcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0T3B0aW9ucy5kZXNjcmlwdGlvbiB8fFxuICAgICAgICAgIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGF0YWJhc2UsXG4gICAgICAgIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdE9wdGlvbnMuc2l6ZSB8fCA0ICogMTAyNCAqIDEwMjRcbiAgICAgICk7XG4gICAgdGhpcy5jb25uID0gdGhpcy5vcGVuRGF0YWJhc2UoKTtcbiAgICB0aGlzLnJlZnJlc2hUeXBlUGFyc2VyKGRhdGFUeXBlcyk7XG4gIH1cblxuICBfb25Qcm9jZXNzRXhpdCgpIHtcbiAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFxuICAgICAgdGhpcy5jb25uZWN0aW9uc1xuICAgICkubWFwKGNvbm5lY3Rpb24gPT5cbiAgICAgIFByb21pc2UuZnJvbUNhbGxiYWNrKGNhbGxiYWNrID0+XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbnNbY29ubmVjdGlvbl0uY2xvc2UoY2FsbGJhY2spXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihzdXBlci5fb25Qcm9jZXNzRXhpdC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8vIEV4cG9zZSB0aGlzIGFzIGEgbWV0aG9kIHNvIHRoYXQgdGhlIHBhcnNpbmcgbWF5IGJlIHVwZGF0ZWQgd2hlbiB0aGUgdXNlciBoYXMgYWRkZWQgYWRkaXRpb25hbCwgY3VzdG9tIHR5cGVzXG4gIF9yZWZyZXNoVHlwZVBhcnNlcihkYXRhVHlwZSkge1xuICAgIHBhcnNlclN0b3JlLnJlZnJlc2goZGF0YVR5cGUpO1xuICB9XG5cbiAgX2NsZWFyVHlwZVBhcnNlcigpIHtcbiAgICBwYXJzZXJTdG9yZS5jbGVhcigpO1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvbihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51dWlkID0gb3B0aW9ucy51dWlkIHx8IFwiZGVmYXVsdFwiO1xuXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbm5lY3Rpb25zW29wdGlvbnMudXVpZF0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25zW29wdGlvbnMudXVpZF0gPSAhdGhpcy5jb25uXG4gICAgICAgID8gdGhpcy5vcGVuRGF0YWJhc2UoKVxuICAgICAgICA6IHRoaXMuY29ubjtcbiAgICAgIGRlYnVnKGBjb25uZWN0aW9uIGFjcXVpcmVkICR7b3B0aW9ucy51dWlkfWApO1xuICAgICAgaWYgKCF0aGlzLmNvbm5lY3Rpb25zW29wdGlvbnMudXVpZF0pXG4gICAgICAgIHJldHVybiByZWplY3QoXG4gICAgICAgICAgbmV3IHNlcXVlbGl6ZUVycm9ycy5Db25uZWN0aW9uRXJyb3IoXG4gICAgICAgICAgICBuZXcgRXJyb3IoXCJEYXRhYmFzZSByZWZlcmVuY2Ugbm8gZm91bmQhXCIpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgcmVzb2x2ZSh0aGlzLmNvbm5lY3Rpb25zW29wdGlvbnMudXVpZF0pO1xuICAgIH0pLnRhcChjb25uZWN0aW9uID0+IHtcbiAgICAgIGlmICh0aGlzLnNlcXVlbGl6ZS5jb25maWcucGFzc3dvcmQpIHtcbiAgICAgICAgLy8gTWFrZSBpdCBwb3NzaWJsZSB0byBkZWZpbmUgYW5kIHVzZSBwYXNzd29yZCBmb3Igc3FsaXRlIGVuY3J5cHRpb24gcGx1Z2luIGxpa2Ugc3FsY2lwaGVyXG4gICAgICAgIGlmIChjb25uZWN0aW9uICYmIGNvbm5lY3Rpb24uZXhlYykge1xuICAgICAgICAgIGNvbm5lY3Rpb24uZXhlYyhcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNxbDogYFBSQUdNQSBLRVk9JHt0aGlzLnNlcXVlbGl6ZS5lc2NhcGUoXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZS5jb25maWcucGFzc3dvcmRcbiAgICAgICAgICAgICAgICApfTtgLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICgpID0+IHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZm9yZWlnbktleXMgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIE1ha2UgaXQgcG9zc2libGUgdG8gZGVmaW5lIGFuZCB1c2UgZm9yZWlnbiBrZXkgY29uc3RyYWludHMgdW5sZXNzXG4gICAgICAgIC8vIGV4cGxpY2l0bHkgZGlzYWxsb3dlZC4gSXQncyBzdGlsbCBvcHQtaW4gcGVyIHJlbGF0aW9uXG4gICAgICAgIGlmIChjb25uZWN0aW9uICYmIGNvbm5lY3Rpb24uZXhlYykge1xuICAgICAgICAgIGNvbm5lY3Rpb24uZXhlYyhcbiAgICAgICAgICAgIFt7IHNxbDogXCJQUkFHTUEgRk9SRUlHTl9LRVlTPU9OXCIsIGFyZ3M6IFtdIH1dLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAoKSA9PiB7fVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJlbGVhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24sIGZvcmNlKSB7XG4gICAgaWYgKGZvcmNlICE9PSB0cnVlKSByZXR1cm47XG5cbiAgICBpZiAoY29ubmVjdGlvbi51dWlkKSB7XG4gICAgICBjb25uZWN0aW9uLmNsb3NlICYmIGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHRoaXMuY29ubiA9IHVuZGVmaW5lZDtcbiAgICAgIGRlYnVnKGBjb25uZWN0aW9uIHJlbGVhc2VkICR7Y29ubmVjdGlvbi51dWlkfWApO1xuICAgICAgZGVsZXRlIHRoaXMuY29ubmVjdGlvbnNbY29ubmVjdGlvbi51dWlkXTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25uZWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzLkNvbm5lY3Rpb25NYW5hZ2VyID0gQ29ubmVjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gQ29ubmVjdGlvbk1hbmFnZXI7XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvY29ubmVjdGlvbi1tYW5hZ2VyLmpzIl0sIm5hbWVzIjpbIkFic3RyYWN0Q29ubmVjdGlvbk1hbmFnZXIiLCJyZXF1aXJlIiwiUHJvbWlzZSIsImxvZ2dlciIsImRlYnVnIiwiZGVidWdDb250ZXh0IiwiZGF0YVR5cGVzIiwic3FsaXRlIiwic2VxdWVsaXplRXJyb3JzIiwicGFyc2VyU3RvcmUiLCJDb25uZWN0aW9uTWFuYWdlciIsImRpYWxlY3QiLCJzZXF1ZWxpemUiLCJjb25uZWN0aW9ucyIsIm9wZW5EYXRhYmFzZSIsIl9sb2FkRGlhbGVjdE1vZHVsZSIsIm9wdGlvbnMiLCJkYXRhYmFzZSIsImRpYWxlY3RPcHRpb25zIiwidmVyc2lvbiIsImRlc2NyaXB0aW9uIiwic2l6ZSIsImNvbm4iLCJyZWZyZXNoVHlwZVBhcnNlciIsInByb21pc2VzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIm1hcCIsImNvbm5lY3Rpb24iLCJmcm9tQ2FsbGJhY2siLCJjYWxsYmFjayIsInRoZW4iLCJkYiIsImNsb3NlIiwiYWxsIiwiYmluZCIsImRhdGFUeXBlIiwicmVmcmVzaCIsImNsZWFyIiwidXVpZCIsInJlc29sdmUiLCJyZWplY3QiLCJDb25uZWN0aW9uRXJyb3IiLCJFcnJvciIsInRhcCIsImNvbmZpZyIsInBhc3N3b3JkIiwiZXhlYyIsInNxbCIsImVzY2FwZSIsImFyZ3MiLCJmb3JlaWduS2V5cyIsImZvcmNlIiwidW5kZWZpbmVkIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLHlCQUF5QixHQUFHQyxPQUFPLENBQUMsZ0NBQUQsQ0FBekM7O0FBQ0EsTUFBTUMsT0FBTyxHQUFHRCxPQUFPLENBQUMsZUFBRCxDQUF2Qjs7QUFDQSxNQUFNO0FBQUVFLEVBQUFBO0FBQUYsSUFBYUYsT0FBTyxD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RUFBWXdCLEssRUFBTztBQUNuQyxVQUFJQSxLQUFLLEtBQUssSUFBZCxFQUFvQjs7QUFFcEIsVUFBSXhCLFVBQVUsQ0FBQ1csSUFBZixFQUFxQjtBQUNuQlgsUUFBQUEsVUFBVSxDQUFDSyxLQUFYLElBQW9CTCxVQUFVLENBQUNLLEtBQVgsRUFBcEI7QUFDQSxhQUFLWCxJQUFMLEdBQVkrQixTQUFaO0FBQ0FqRCxRQUFBQSxLQUFLLENBQUUsdUJBQXNCd0IsVUFBVSxDQUFDVyxJQUFLLEVBQXhDLENBQUw7QUFDQSxlQUFPLEtBQUsxQixXQUFMLENBQWlCZSxVQUFVLENBQUNXLElBQTVCLENBQVA7QUFDRDtBQUNGOzs7O0VBdEc2QnZDLHlCOztBQXlHaENzRCxNQUFNLENBQUNDLE9BQVAsR0FBaUI3QyxpQkFBakI7QUFDQTRDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlN0MsaUJBQWYsR0FBbUNBLGlCQUFuQztBQUNBNEMsTUFBTSxDQUFDQyxPQUFQLENBQWVDLE9BQWYsR0FBeUI5QyxpQkFBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgQWJzdHJhY3RDb25uZWN0aW9uTWFuYWdlciA9IHJlcXVpcmUoXCIuLi9hYnN0cmFjdC9jb25uZWN0aW9uLW1hbmFnZXJcIik7XG5jb25zdCBQcm9taXNlID0gcmVxdWlyZShcIi4uLy4uL3Byb21pc2VcIik7XG5jb25zdCB7IGxvZ2dlciB9ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xvZ2dlclwiKTtcbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcImNvbm5lY3Rpb246c3FsaXRlXCIpO1xuY29uc3QgZGF0YVR5cGVzID0gcmVxdWlyZShcIi4uLy4uL2RhdGEtdHlwZXNcIikuc3FsaXRlO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xuXG5jbGFzcyBDb25uZWN0aW9uTWFuYWdlciBleHRlbmRzIEFic3RyYWN0Q29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcihkaWFsZWN0LCBzZXF1ZWxpemUpIHtcbiAgICBzdXBlcihkaWFsZWN0LCBzZXF1ZWxpemUpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHt9O1xuICAgIGNvbnN0IHsgb3BlbkRhdGFiYXNlIH0gPSB0aGlzLl9sb2FkRGlhbGVjdE1vZHVsZSgpO1xuICAgIHRoaXMub3BlbkRhdGFiYXNlID0gKCkgPT5cbiAgICAgIG9wZW5EYXRhYmFzZShcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kYXRhYmFzZSxcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0T3B0aW9ucy52ZXJzaW9uIHx8IFwiMS4wXCIsXG4gICAgICAgIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdE9wdGlvbnMuZGVzY3JpcHRpb24gfHxcbiAgICAgICAgICB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRhdGFiYXNlLFxuICAgICAgICB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3RPcHRpb25zLnNpemUgfHwgNCAqIDEwMjQgKiAxMDI0XG4gICAgICApO1xuICAgIHRoaXMuY29ubiA9IHRoaXMub3BlbkRhdGFiYXNlKCk7XG4gICAgdGhpcy5yZWZyZXNoVHlwZVBhcnNlcihkYXRhVHlwZXMpO1xuICB9XG5cbiAgX29uUHJvY2Vzc0V4aXQoKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3RcbiAgICAgIC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuY29ubmVjdGlvbnMpXG4gICAgICAubWFwKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5mcm9tQ2FsbGJhY2soY2FsbGJhY2sgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zW2Nvbm5lY3Rpb25dLnRoZW4oZGIgPT4ge1xuICAgICAgICAgICAgZGIuY2xvc2UoY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKHN1cGVyLl9vblByb2Nlc3NFeGl0LmJpbmQodGhpcykpO1xuICB9XG5cbiAgLy8gRXhwb3NlIHRoaXMgYXMgYSBtZXRob2Qgc28gdGhhdCB0aGUgcGFyc2luZyBtYXkgYmUgdXBkYXRlZCB3aGVuIHRoZSB1c2VyIGhhcyBhZGRlZCBhZGRpdGlvbmFsLCBjdXN0b20gdHlwZXNcbiAgX3JlZnJlc2hUeXBlUGFyc2VyKGRhdGFUeXBlKSB7XG4gICAgcGFyc2VyU3RvcmUucmVmcmVzaChkYXRhVHlwZSk7XG4gIH1cblxuICBfY2xlYXJUeXBlUGFyc2VyKCkge1xuICAgIHBhcnNlclN0b3JlLmNsZWFyKCk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLnV1aWQgPSBvcHRpb25zLnV1aWQgfHwgXCJkZWZhdWx0XCI7XG5cbiAgICBpZiAodGhpcy5jb25uZWN0aW9uc1tvcHRpb25zLnV1aWRdKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSA9ICF0aGlzLmNvbm5cbiAgICAgICAgPyB0aGlzLm9wZW5EYXRhYmFzZSgpXG4gICAgICAgIDogdGhpcy5jb25uO1xuICAgICAgZGVidWcoYGNvbm5lY3Rpb24gYWNxdWlyZWQgJHtvcHRpb25zLnV1aWR9YCk7XG4gICAgICBpZiAoIXRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSlcbiAgICAgICAgcmV0dXJuIHJlamVjdChcbiAgICAgICAgICBuZXcgc2VxdWVsaXplRXJyb3JzLkNvbm5lY3Rpb25FcnJvcihcbiAgICAgICAgICAgIG5ldyBFcnJvcihcIkRhdGFiYXNlIHJlZmVyZW5jZSBubyBmb3VuZCFcIilcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICByZXNvbHZlKHRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSk7XG4gICAgfSkudGFwKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgaWYgKHRoaXMuc2VxdWVsaXplLmNvbmZpZy5wYXNzd29yZCkge1xuICAgICAgICAvLyBNYWtlIGl0IHBvc3NpYmxlIHRvIGRlZmluZSBhbmQgdXNlIHBhc3N3b3JkIGZvciBzcWxpdGUgZW5jcnlwdGlvbiBwbHVnaW4gbGlrZSBzcWxjaXBoZXJcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24gJiYgY29ubmVjdGlvbi5leGVjKSB7XG4gICAgICAgICAgY29ubmVjdGlvbi5leGVjKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3FsOiBgUFJBR01BIEtFWT0ke3RoaXMuc2VxdWVsaXplLmVzY2FwZShcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplLmNvbmZpZy5wYXNzd29yZFxuICAgICAgICAgICAgICAgICl9O2AsXG4gICAgICAgICAgICAgICAgYXJnczogW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgKCkgPT4ge31cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZXF1ZWxpemUub3B0aW9ucy5mb3JlaWduS2V5cyAhPT0gZmFsc2UpIHtcbiAgICAgICAgLy8gTWFrZSBpdCBwb3NzaWJsZSB0byBkZWZpbmUgYW5kIHVzZSBmb3JlaWduIGtleSBjb25zdHJhaW50cyB1bmxlc3NcbiAgICAgICAgLy8gZXhwbGljaXRseSBkaXNhbGxvd2VkLiBJdCdzIHN0aWxsIG9wdC1pbiBwZXIgcmVsYXRpb25cbiAgICAgICAgaWYgKGNvbm5lY3Rpb24gJiYgY29ubmVjdGlvbi5leGVjKSB7XG4gICAgICAgICAgY29ubmVjdGlvbi5leGVjKFxuICAgICAgICAgICAgW3sgc3FsOiBcIlBSQUdNQSBGT1JFSUdOX0tFWVM9T05cIiwgYXJnczogW10gfV0sXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICgpID0+IHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVsZWFzZUNvbm5lY3Rpb24oY29ubmVjdGlvbiwgZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UgIT09IHRydWUpIHJldHVybjtcblxuICAgIGlmIChjb25uZWN0aW9uLnV1aWQpIHtcbiAgICAgIGNvbm5lY3Rpb24uY2xvc2UgJiYgY29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgdGhpcy5jb25uID0gdW5kZWZpbmVkO1xuICAgICAgZGVidWcoYGNvbm5lY3Rpb24gcmVsZWFzZWQgJHtjb25uZWN0aW9uLnV1aWR9YCk7XG4gICAgICBkZWxldGUgdGhpcy5jb25uZWN0aW9uc1tjb25uZWN0aW9uLnV1aWRdO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbm5lY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMuQ29ubmVjdGlvbk1hbmFnZXIgPSBDb25uZWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBDb25uZWN0aW9uTWFuYWdlcjtcbiJdfQ== \ No newline at end of file diff --git a/lib/dialects/sqlite/connection-manager.js b/lib/dialects/sqlite/connection-manager.js index 5ba5d7d..939f858 100644 --- a/lib/dialects/sqlite/connection-manager.js +++ b/lib/dialects/sqlite/connection-manager.js @@ -27,13 +27,15 @@ class ConnectionManager extends AbstractConnectionManager { } _onProcessExit() { - const promises = Object.getOwnPropertyNames( - this.connections - ).map(connection => - Promise.fromCallback(callback => - this.connections[connection].close(callback) - ) - ); + const promises = Object + .getOwnPropertyNames(this.connections) + .map(connection => { + return Promise.fromCallback(callback => { + return this.connections[connection].then(db => { + db.close(callback); + }); + }); + }); return Promise.all(promises).then(super._onProcessExit.bind(this)); } From 8c7898ffdba02d61934d9732dea442e01cb53e47 Mon Sep 17 00:00:00 2001 From: prih Date: Mon, 14 Dec 2020 23:59:02 +0200 Subject: [PATCH 4/8] . --- dist/dialects/sqlite/connection-manager.js | 12 +++++------- lib/dialects/sqlite/connection-manager.js | 12 ++++-------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/dist/dialects/sqlite/connection-manager.js b/dist/dialects/sqlite/connection-manager.js index f61d584..e0ed62e 100644 --- a/dist/dialects/sqlite/connection-manager.js +++ b/dist/dialects/sqlite/connection-manager.js @@ -69,13 +69,11 @@ let ConnectionManager = /*#__PURE__*/function (_AbstractConnectionMa) { _createClass(ConnectionManager, [{ key: "_onProcessExit", value: function _onProcessExit() { - const promises = Object.getOwnPropertyNames(this.connections).map(connection => { - return Promise.fromCallback(callback => { - return this.connections[connection].then(db => { - db.close(callback); - }); + const promises = [Promise.fromCallback(callback => { + return this.connections['default'].then(db => { + db.close(callback, callback); }); - }); + })]; return Promise.all(promises).then(_get(_getPrototypeOf(ConnectionManager.prototype), "_onProcessExit", this).bind(this)); } // Expose this as a method so that the parsing may be updated when the user has added additional, custom types @@ -147,4 +145,4 @@ let ConnectionManager = /*#__PURE__*/function (_AbstractConnectionMa) { module.exports = ConnectionManager; module.exports.ConnectionManager = ConnectionManager; module.exports.default = ConnectionManager; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvY29ubmVjdGlvbi1tYW5hZ2VyLmpzIl0sIm5hbWVzIjpbIkFic3RyYWN0Q29ubmVjdGlvbk1hbmFnZXIiLCJyZXF1aXJlIiwiUHJvbWlzZSIsImxvZ2dlciIsImRlYnVnIiwiZGVidWdDb250ZXh0IiwiZGF0YVR5cGVzIiwic3FsaXRlIiwic2VxdWVsaXplRXJyb3JzIiwicGFyc2VyU3RvcmUiLCJDb25uZWN0aW9uTWFuYWdlciIsImRpYWxlY3QiLCJzZXF1ZWxpemUiLCJjb25uZWN0aW9ucyIsIm9wZW5EYXRhYmFzZSIsIl9sb2FkRGlhbGVjdE1vZHVsZSIsIm9wdGlvbnMiLCJkYXRhYmFzZSIsImRpYWxlY3RPcHRpb25zIiwidmVyc2lvbiIsImRlc2NyaXB0aW9uIiwic2l6ZSIsImNvbm4iLCJyZWZyZXNoVHlwZVBhcnNlciIsInByb21pc2VzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIm1hcCIsImNvbm5lY3Rpb24iLCJmcm9tQ2FsbGJhY2siLCJjYWxsYmFjayIsInRoZW4iLCJkYiIsImNsb3NlIiwiYWxsIiwiYmluZCIsImRhdGFUeXBlIiwicmVmcmVzaCIsImNsZWFyIiwidXVpZCIsInJlc29sdmUiLCJyZWplY3QiLCJDb25uZWN0aW9uRXJyb3IiLCJFcnJvciIsInRhcCIsImNvbmZpZyIsInBhc3N3b3JkIiwiZXhlYyIsInNxbCIsImVzY2FwZSIsImFyZ3MiLCJmb3JlaWduS2V5cyIsImZvcmNlIiwidW5kZWZpbmVkIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLHlCQUF5QixHQUFHQyxPQUFPLENBQUMsZ0NBQUQsQ0FBekM7O0FBQ0EsTUFBTUMsT0FBTyxHQUFHRCxPQUFPLENBQUMsZUFBRCxDQUF2Qjs7QUFDQSxNQUFNO0FBQUVFLEVBQUFBO0FBQUYsSUFBYUYsT0FBTyxD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RUFBWXdCLEssRUFBTztBQUNuQyxVQUFJQSxLQUFLLEtBQUssSUFBZCxFQUFvQjs7QUFFcEIsVUFBSXhCLFVBQVUsQ0FBQ1csSUFBZixFQUFxQjtBQUNuQlgsUUFBQUEsVUFBVSxDQUFDSyxLQUFYLElBQW9CTCxVQUFVLENBQUNLLEtBQVgsRUFBcEI7QUFDQSxhQUFLWCxJQUFMLEdBQVkrQixTQUFaO0FBQ0FqRCxRQUFBQSxLQUFLLENBQUUsdUJBQXNCd0IsVUFBVSxDQUFDVyxJQUFLLEVBQXhDLENBQUw7QUFDQSxlQUFPLEtBQUsxQixXQUFMLENBQWlCZSxVQUFVLENBQUNXLElBQTVCLENBQVA7QUFDRDtBQUNGOzs7O0VBdEc2QnZDLHlCOztBQXlHaENzRCxNQUFNLENBQUNDLE9BQVAsR0FBaUI3QyxpQkFBakI7QUFDQTRDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlN0MsaUJBQWYsR0FBbUNBLGlCQUFuQztBQUNBNEMsTUFBTSxDQUFDQyxPQUFQLENBQWVDLE9BQWYsR0FBeUI5QyxpQkFBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgQWJzdHJhY3RDb25uZWN0aW9uTWFuYWdlciA9IHJlcXVpcmUoXCIuLi9hYnN0cmFjdC9jb25uZWN0aW9uLW1hbmFnZXJcIik7XG5jb25zdCBQcm9taXNlID0gcmVxdWlyZShcIi4uLy4uL3Byb21pc2VcIik7XG5jb25zdCB7IGxvZ2dlciB9ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xvZ2dlclwiKTtcbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcImNvbm5lY3Rpb246c3FsaXRlXCIpO1xuY29uc3QgZGF0YVR5cGVzID0gcmVxdWlyZShcIi4uLy4uL2RhdGEtdHlwZXNcIikuc3FsaXRlO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xuXG5jbGFzcyBDb25uZWN0aW9uTWFuYWdlciBleHRlbmRzIEFic3RyYWN0Q29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcihkaWFsZWN0LCBzZXF1ZWxpemUpIHtcbiAgICBzdXBlcihkaWFsZWN0LCBzZXF1ZWxpemUpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHt9O1xuICAgIGNvbnN0IHsgb3BlbkRhdGFiYXNlIH0gPSB0aGlzLl9sb2FkRGlhbGVjdE1vZHVsZSgpO1xuICAgIHRoaXMub3BlbkRhdGFiYXNlID0gKCkgPT5cbiAgICAgIG9wZW5EYXRhYmFzZShcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kYXRhYmFzZSxcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0T3B0aW9ucy52ZXJzaW9uIHx8IFwiMS4wXCIsXG4gICAgICAgIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdE9wdGlvbnMuZGVzY3JpcHRpb24gfHxcbiAgICAgICAgICB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRhdGFiYXNlLFxuICAgICAgICB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3RPcHRpb25zLnNpemUgfHwgNCAqIDEwMjQgKiAxMDI0XG4gICAgICApO1xuICAgIHRoaXMuY29ubiA9IHRoaXMub3BlbkRhdGFiYXNlKCk7XG4gICAgdGhpcy5yZWZyZXNoVHlwZVBhcnNlcihkYXRhVHlwZXMpO1xuICB9XG5cbiAgX29uUHJvY2Vzc0V4aXQoKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3RcbiAgICAgIC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuY29ubmVjdGlvbnMpXG4gICAgICAubWFwKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5mcm9tQ2FsbGJhY2soY2FsbGJhY2sgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zW2Nvbm5lY3Rpb25dLnRoZW4oZGIgPT4ge1xuICAgICAgICAgICAgZGIuY2xvc2UoY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKHN1cGVyLl9vblByb2Nlc3NFeGl0LmJpbmQodGhpcykpO1xuICB9XG5cbiAgLy8gRXhwb3NlIHRoaXMgYXMgYSBtZXRob2Qgc28gdGhhdCB0aGUgcGFyc2luZyBtYXkgYmUgdXBkYXRlZCB3aGVuIHRoZSB1c2VyIGhhcyBhZGRlZCBhZGRpdGlvbmFsLCBjdXN0b20gdHlwZXNcbiAgX3JlZnJlc2hUeXBlUGFyc2VyKGRhdGFUeXBlKSB7XG4gICAgcGFyc2VyU3RvcmUucmVmcmVzaChkYXRhVHlwZSk7XG4gIH1cblxuICBfY2xlYXJUeXBlUGFyc2VyKCkge1xuICAgIHBhcnNlclN0b3JlLmNsZWFyKCk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLnV1aWQgPSBvcHRpb25zLnV1aWQgfHwgXCJkZWZhdWx0XCI7XG5cbiAgICBpZiAodGhpcy5jb25uZWN0aW9uc1tvcHRpb25zLnV1aWRdKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSA9ICF0aGlzLmNvbm5cbiAgICAgICAgPyB0aGlzLm9wZW5EYXRhYmFzZSgpXG4gICAgICAgIDogdGhpcy5jb25uO1xuICAgICAgZGVidWcoYGNvbm5lY3Rpb24gYWNxdWlyZWQgJHtvcHRpb25zLnV1aWR9YCk7XG4gICAgICBpZiAoIXRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSlcbiAgICAgICAgcmV0dXJuIHJlamVjdChcbiAgICAgICAgICBuZXcgc2VxdWVsaXplRXJyb3JzLkNvbm5lY3Rpb25FcnJvcihcbiAgICAgICAgICAgIG5ldyBFcnJvcihcIkRhdGFiYXNlIHJlZmVyZW5jZSBubyBmb3VuZCFcIilcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICByZXNvbHZlKHRoaXMuY29ubmVjdGlvbnNbb3B0aW9ucy51dWlkXSk7XG4gICAgfSkudGFwKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgaWYgKHRoaXMuc2VxdWVsaXplLmNvbmZpZy5wYXNzd29yZCkge1xuICAgICAgICAvLyBNYWtlIGl0IHBvc3NpYmxlIHRvIGRlZmluZSBhbmQgdXNlIHBhc3N3b3JkIGZvciBzcWxpdGUgZW5jcnlwdGlvbiBwbHVnaW4gbGlrZSBzcWxjaXBoZXJcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24gJiYgY29ubmVjdGlvbi5leGVjKSB7XG4gICAgICAgICAgY29ubmVjdGlvbi5leGVjKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3FsOiBgUFJBR01BIEtFWT0ke3RoaXMuc2VxdWVsaXplLmVzY2FwZShcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplLmNvbmZpZy5wYXNzd29yZFxuICAgICAgICAgICAgICAgICl9O2AsXG4gICAgICAgICAgICAgICAgYXJnczogW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgKCkgPT4ge31cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZXF1ZWxpemUub3B0aW9ucy5mb3JlaWduS2V5cyAhPT0gZmFsc2UpIHtcbiAgICAgICAgLy8gTWFrZSBpdCBwb3NzaWJsZSB0byBkZWZpbmUgYW5kIHVzZSBmb3JlaWduIGtleSBjb25zdHJhaW50cyB1bmxlc3NcbiAgICAgICAgLy8gZXhwbGljaXRseSBkaXNhbGxvd2VkLiBJdCdzIHN0aWxsIG9wdC1pbiBwZXIgcmVsYXRpb25cbiAgICAgICAgaWYgKGNvbm5lY3Rpb24gJiYgY29ubmVjdGlvbi5leGVjKSB7XG4gICAgICAgICAgY29ubmVjdGlvbi5leGVjKFxuICAgICAgICAgICAgW3sgc3FsOiBcIlBSQUdNQSBGT1JFSUdOX0tFWVM9T05cIiwgYXJnczogW10gfV0sXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICgpID0+IHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVsZWFzZUNvbm5lY3Rpb24oY29ubmVjdGlvbiwgZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UgIT09IHRydWUpIHJldHVybjtcblxuICAgIGlmIChjb25uZWN0aW9uLnV1aWQpIHtcbiAgICAgIGNvbm5lY3Rpb24uY2xvc2UgJiYgY29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgdGhpcy5jb25uID0gdW5kZWZpbmVkO1xuICAgICAgZGVidWcoYGNvbm5lY3Rpb24gcmVsZWFzZWQgJHtjb25uZWN0aW9uLnV1aWR9YCk7XG4gICAgICBkZWxldGUgdGhpcy5jb25uZWN0aW9uc1tjb25uZWN0aW9uLnV1aWRdO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbm5lY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMuQ29ubmVjdGlvbk1hbmFnZXIgPSBDb25uZWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBDb25uZWN0aW9uTWFuYWdlcjtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvY29ubmVjdGlvbi1tYW5hZ2VyLmpzIl0sIm5hbWVzIjpbIkFic3RyYWN0Q29ubmVjdGlvbk1hbmFnZXIiLCJyZXF1aXJlIiwiUHJvbWlzZSIsImxvZ2dlciIsImRlYnVnIiwiZGVidWdDb250ZXh0IiwiZGF0YVR5cGVzIiwic3FsaXRlIiwic2VxdWVsaXplRXJyb3JzIiwicGFyc2VyU3RvcmUiLCJDb25uZWN0aW9uTWFuYWdlciIsImRpYWxlY3QiLCJzZXF1ZWxpemUiLCJjb25uZWN0aW9ucyIsIm9wZW5EYXRhYmFzZSIsIl9sb2FkRGlhbGVjdE1vZHVsZSIsIm9wdGlvbnMiLCJkYXRhYmFzZSIsImRpYWxlY3RPcHRpb25zIiwidmVyc2lvbiIsImRlc2NyaXB0aW9uIiwic2l6ZSIsImNvbm4iLCJyZWZyZXNoVHlwZVBhcnNlciIsInByb21pc2VzIiwiZnJvbUNhbGxiYWNrIiwiY2FsbGJhY2siLCJ0aGVuIiwiZGIiLCJjbG9zZSIsImFsbCIsImJpbmQiLCJkYXRhVHlwZSIsInJlZnJlc2giLCJjbGVhciIsInV1aWQiLCJyZXNvbHZlIiwicmVqZWN0IiwiQ29ubmVjdGlvbkVycm9yIiwiRXJyb3IiLCJ0YXAiLCJjb25uZWN0aW9uIiwiY29uZmlnIiwicGFzc3dvcmQiLCJleGVjIiwic3FsIiwiZXNjYXBlIiwiYXJncyIsImZvcmVpZ25LZXlzIiwiZm9yY2UiLCJ1bmRlZmluZWQiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEseUJBQXlCLEdBQUdDLE9BQU8sQ0FBQyxnQ0FBRCxDQUF6Qzs7QUFDQSxNQUFNQyxPQUFPLEdBQUdELE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU07QUFBRUUsRUFBQUE7QUFBRixJQUFhRixPQUFPLENBQUMsb0JBQUQsQ0FBMUI7O0FBQ0EsTUFBTUcsS0FBSyxHQUFH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WSxVQUFVLENBQUNaLEtBQVgsRUFBcEI7QUFDQSxhQUFLUCxJQUFMLEdBQVk0QixTQUFaO0FBQ0E5QyxRQUFBQSxLQUFLLENBQUUsdUJBQXNCcUMsVUFBVSxDQUFDTixJQUFLLEVBQXhDLENBQUw7QUFDQSxlQUFPLEtBQUt0QixXQUFMLENBQWlCNEIsVUFBVSxDQUFDTixJQUE1QixDQUFQO0FBQ0Q7QUFDRjs7OztFQWxHNkJuQyx5Qjs7QUFxR2hDbUQsTUFBTSxDQUFDQyxPQUFQLEdBQWlCMUMsaUJBQWpCO0FBQ0F5QyxNQUFNLENBQUNDLE9BQVAsQ0FBZTFDLGlCQUFmLEdBQW1DQSxpQkFBbkM7QUFDQXlDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCM0MsaUJBQXpCIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEFic3RyYWN0Q29ubmVjdGlvbk1hbmFnZXIgPSByZXF1aXJlKFwiLi4vYWJzdHJhY3QvY29ubmVjdGlvbi1tYW5hZ2VyXCIpO1xuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoXCIuLi8uLi9wcm9taXNlXCIpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dnZXJcIik7XG5jb25zdCBkZWJ1ZyA9IGxvZ2dlci5kZWJ1Z0NvbnRleHQoXCJjb25uZWN0aW9uOnNxbGl0ZVwiKTtcbmNvbnN0IGRhdGFUeXBlcyA9IHJlcXVpcmUoXCIuLi8uLi9kYXRhLXR5cGVzXCIpLnNxbGl0ZTtcbmNvbnN0IHNlcXVlbGl6ZUVycm9ycyA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvcnNcIik7XG5jb25zdCBwYXJzZXJTdG9yZSA9IHJlcXVpcmUoXCIuLi9wYXJzZXJTdG9yZVwiKShcInNxbGl0ZVwiKTtcblxuY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgZXh0ZW5kcyBBYnN0cmFjdENvbm5lY3Rpb25NYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoZGlhbGVjdCwgc2VxdWVsaXplKSB7XG4gICAgc3VwZXIoZGlhbGVjdCwgc2VxdWVsaXplKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB7fTtcbiAgICBjb25zdCB7IG9wZW5EYXRhYmFzZSB9ID0gdGhpcy5fbG9hZERpYWxlY3RNb2R1bGUoKTtcbiAgICB0aGlzLm9wZW5EYXRhYmFzZSA9ICgpID0+XG4gICAgICBvcGVuRGF0YWJhc2UoXG4gICAgICAgIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGF0YWJhc2UsXG4gICAgICAgIHRoaXMuc2VxdWVsaXplLm9wdGlvbnMuZGlhbGVjdE9wdGlvbnMudmVyc2lvbiB8fCBcIjEuMFwiLFxuICAgICAgICB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmRpYWxlY3RPcHRpb25zLmRlc2NyaXB0aW9uIHx8XG4gICAgICAgICAgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kYXRhYmFzZSxcbiAgICAgICAgdGhpcy5zZXF1ZWxpemUub3B0aW9ucy5kaWFsZWN0T3B0aW9ucy5zaXplIHx8IDQgKiAxMDI0ICogMTAyNFxuICAgICAgKTtcbiAgICB0aGlzLmNvbm4gPSB0aGlzLm9wZW5EYXRhYmFzZSgpO1xuICAgIHRoaXMucmVmcmVzaFR5cGVQYXJzZXIoZGF0YVR5cGVzKTtcbiAgfVxuXG4gIF9vblByb2Nlc3NFeGl0KCkge1xuICAgIGNvbnN0IHByb21pc2VzID0gW1Byb21pc2UuZnJvbUNhbGxiYWNrKGNhbGxiYWNrID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zWydkZWZhdWx0J10udGhlbihkYiA9PiB7XG4gICAgICAgIGRiLmNsb3NlKGNhbGxiYWNrLCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9KV07XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oc3VwZXIuX29uUHJvY2Vzc0V4aXQuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvLyBFeHBvc2UgdGhpcyBhcyBhIG1ldGhvZCBzbyB0aGF0IHRoZSBwYXJzaW5nIG1heSBiZSB1cGRhdGVkIHdoZW4gdGhlIHVzZXIgaGFzIGFkZGVkIGFkZGl0aW9uYWwsIGN1c3RvbSB0eXBlc1xuICBfcmVmcmVzaFR5cGVQYXJzZXIoZGF0YVR5cGUpIHtcbiAgICBwYXJzZXJTdG9yZS5yZWZyZXNoKGRhdGFUeXBlKTtcbiAgfVxuXG4gIF9jbGVhclR5cGVQYXJzZXIoKSB7XG4gICAgcGFyc2VyU3RvcmUuY2xlYXIoKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24ob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMudXVpZCA9IG9wdGlvbnMudXVpZCB8fCBcImRlZmF1bHRcIjtcblxuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25zW29wdGlvbnMudXVpZF0pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb25uZWN0aW9uc1tvcHRpb25zLnV1aWRdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0aW9uc1tvcHRpb25zLnV1aWRdID0gIXRoaXMuY29ublxuICAgICAgICA/IHRoaXMub3BlbkRhdGFiYXNlKClcbiAgICAgICAgOiB0aGlzLmNvbm47XG4gICAgICBkZWJ1ZyhgY29ubmVjdGlvbiBhY3F1aXJlZCAke29wdGlvbnMudXVpZH1gKTtcbiAgICAgIGlmICghdGhpcy5jb25uZWN0aW9uc1tvcHRpb25zLnV1aWRdKVxuICAgICAgICByZXR1cm4gcmVqZWN0KFxuICAgICAgICAgIG5ldyBzZXF1ZWxpemVFcnJvcnMuQ29ubmVjdGlvbkVycm9yKFxuICAgICAgICAgICAgbmV3IEVycm9yKFwiRGF0YWJhc2UgcmVmZXJlbmNlIG5vIGZvdW5kIVwiKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIHJlc29sdmUodGhpcy5jb25uZWN0aW9uc1tvcHRpb25zLnV1aWRdKTtcbiAgICB9KS50YXAoY29ubmVjdGlvbiA9PiB7XG4gICAgICBpZiAodGhpcy5zZXF1ZWxpemUuY29uZmlnLnBhc3N3b3JkKSB7XG4gICAgICAgIC8vIE1ha2UgaXQgcG9zc2libGUgdG8gZGVmaW5lIGFuZCB1c2UgcGFzc3dvcmQgZm9yIHNxbGl0ZSBlbmNyeXB0aW9uIHBsdWdpbiBsaWtlIHNxbGNpcGhlclxuICAgICAgICBpZiAoY29ubmVjdGlvbiAmJiBjb25uZWN0aW9uLmV4ZWMpIHtcbiAgICAgICAgICBjb25uZWN0aW9uLmV4ZWMoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcWw6IGBQUkFHTUEgS0VZPSR7dGhpcy5zZXF1ZWxpemUuZXNjYXBlKFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXF1ZWxpemUuY29uZmlnLnBhc3N3b3JkXG4gICAgICAgICAgICAgICAgKX07YCxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAoKSA9PiB7fVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLmZvcmVpZ25LZXlzICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBNYWtlIGl0IHBvc3NpYmxlIHRvIGRlZmluZSBhbmQgdXNlIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzIHVubGVzc1xuICAgICAgICAvLyBleHBsaWNpdGx5IGRpc2FsbG93ZWQuIEl0J3Mgc3RpbGwgb3B0LWluIHBlciByZWxhdGlvblxuICAgICAgICBpZiAoY29ubmVjdGlvbiAmJiBjb25uZWN0aW9uLmV4ZWMpIHtcbiAgICAgICAgICBjb25uZWN0aW9uLmV4ZWMoXG4gICAgICAgICAgICBbeyBzcWw6IFwiUFJBR01BIEZPUkVJR05fS0VZUz1PTlwiLCBhcmdzOiBbXSB9XSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgKCkgPT4ge31cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZWxlYXNlQ29ubmVjdGlvbihjb25uZWN0aW9uLCBmb3JjZSkge1xuICAgIGlmIChmb3JjZSAhPT0gdHJ1ZSkgcmV0dXJuO1xuXG4gICAgaWYgKGNvbm5lY3Rpb24udXVpZCkge1xuICAgICAgY29ubmVjdGlvbi5jbG9zZSAmJiBjb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICB0aGlzLmNvbm4gPSB1bmRlZmluZWQ7XG4gICAgICBkZWJ1ZyhgY29ubmVjdGlvbiByZWxlYXNlZCAke2Nvbm5lY3Rpb24udXVpZH1gKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbm5lY3Rpb25zW2Nvbm5lY3Rpb24udXVpZF07XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29ubmVjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cy5Db25uZWN0aW9uTWFuYWdlciA9IENvbm5lY3Rpb25NYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IENvbm5lY3Rpb25NYW5hZ2VyO1xuIl19 \ No newline at end of file diff --git a/lib/dialects/sqlite/connection-manager.js b/lib/dialects/sqlite/connection-manager.js index 939f858..ad9f56e 100644 --- a/lib/dialects/sqlite/connection-manager.js +++ b/lib/dialects/sqlite/connection-manager.js @@ -27,15 +27,11 @@ class ConnectionManager extends AbstractConnectionManager { } _onProcessExit() { - const promises = Object - .getOwnPropertyNames(this.connections) - .map(connection => { - return Promise.fromCallback(callback => { - return this.connections[connection].then(db => { - db.close(callback); - }); - }); + const promises = [Promise.fromCallback(callback => { + return this.connections['default'].then(db => { + db.close(callback, callback); }); + })]; return Promise.all(promises).then(super._onProcessExit.bind(this)); } From b0064d048ee51e7dfbe9af8ed55dfbfe13d6e044 Mon Sep 17 00:00:00 2001 From: prih Date: Tue, 15 Dec 2020 13:50:42 +0200 Subject: [PATCH 5/8] executeSql --- dist/dialects/sqlite/query.js | 82 +++++++++++++++++++++++++++-------- lib/dialects/sqlite/query.js | 52 +++++++++++++++++++++- 2 files changed, 115 insertions(+), 19 deletions(-) diff --git a/dist/dialects/sqlite/query.js b/dist/dialects/sqlite/query.js index ee64954..5cf57ed 100644 --- a/dist/dialects/sqlite/query.js +++ b/dist/dialects/sqlite/query.js @@ -319,14 +319,54 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { resolve(); } } else { - conn.transaction(function (t) { + var successCallback = function (_, results) { + try { + complete(); // `self` is passed from sqlite, we have no control over this. + // eslint-disable-next-line no-invalid-this + + if (results.rowsAffected) { + try { + self[self.getInsertIdField()] = results.insertId; + } catch (e) { + delete self[self.getInsertIdField()]; + } + } + + self.changes = results.rowsAffected; + results = query.convertToArray(results); + resolve(query._handleQueryResponse(self, columnTypes, undefined, results)); + return; + } catch (error) { + debug(error); + reject(error); + } + }; // eslint-disable-next-line + + + var errorCallback = function (_, err) { + try { + complete(); // `self` is passed from sqlite, we have no control over this. + // eslint-disable-next-line no-invalid-this + + resolve(query._handleQueryResponse(self, columnTypes, err)); + } catch (error) { + reject(error); + } + }; + + if (typeof conn.exec === "function") { + parameters = parameters || []; + } else parameters = []; + + conn.executeSql(self.sql, parameters, successCallback, errorCallback); + /*conn.transaction(function(t) { // cannot use arrow function here because the function is bound to the statement // eslint-disable-next-line - var successCallback = function (_, results) { + var successCallback = function(_, results) { try { - complete(); // `self` is passed from sqlite, we have no control over this. + complete(); + // `self` is passed from sqlite, we have no control over this. // eslint-disable-next-line no-invalid-this - if (results.rowsAffected) { try { self[self.getInsertIdField()] = results.insertId; @@ -334,35 +374,43 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { delete self[self.getInsertIdField()]; } } - self.changes = results.rowsAffected; results = query.convertToArray(results); - resolve(query._handleQueryResponse(self, columnTypes, undefined, results)); + resolve( + query._handleQueryResponse( + self, + columnTypes, + undefined, + results + ) + ); return; } catch (error) { debug(error); reject(error); } - }; // eslint-disable-next-line - - - var errorCallback = function (_, err) { + }; + // eslint-disable-next-line + var errorCallback = function(_, err) { try { - complete(); // `self` is passed from sqlite, we have no control over this. + complete(); + // `self` is passed from sqlite, we have no control over this. // eslint-disable-next-line no-invalid-this - resolve(query._handleQueryResponse(self, columnTypes, err)); } catch (error) { reject(error); } }; - if (typeof conn.exec === "function") { parameters = parameters || []; } else parameters = []; - - t.executeSql(self.sql, parameters, successCallback, errorCallback); - }); + t.executeSql( + self.sql, + parameters, + successCallback, + errorCallback + ); + });*/ } })); return null; @@ -654,4 +702,4 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { module.exports = Query; module.exports.Query = Query; module.exports.default = Query; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnkuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIlByb21pc2UiLCJBYnN0cmFjdFF1ZXJ5IiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsInBhcnNlclN0b3JlIiwibG9nZ2VyIiwiZGVidWciLCJkZWJ1Z0NvbnRleHQiLCJnZXRNZXRob2RzIiwib2JqIiwicHJvcGVydGllcyIsIlNldCIsImN1cnJlbnRPYmoiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibWFwIiwiaXRlbSIsImFkZCIsImdldFByb3RvdHlwZU9mIiwia2V5cyIsImZpbHRlciIsIlF1ZXJ5IiwiaW5jbHVkZSIsInByZWZpeCIsInJldCIsIl9pbmNsdWRlIiwia2V5IiwiYXMiLCJtb2RlbCIsIm1lcmdlIiwiX2NvbGxlY3RNb2RlbHMiLCJtZXRhRGF0YSIsImNvbHVtblR5cGVzIiwiZXJyIiwicmVzdWx0cyIsInNxbCIsImZvcm1hdEVycm9yIiwicmVzdWx0IiwiaW5zdGFuY2UiLCJpc0luc2VydFF1ZXJ5IiwiaGFuZGxlSW5zZXJ0UXVlcnkiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsInJhd0F0dHJpYnV0ZXMiLCJzdGFydElkIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImNoYW5nZXMiLCJpIiwicHVzaCIsImZpZWxkIiwiaXNTaG93VGFibGVzUXVlcnkiLCJyb3ciLCJuYW1lIiwiaXNTaG93Q29uc3RyYWludHNRdWVyeSIsInBhcnNlQ29uc3RyYWludHNGcm9tU3FsIiwiaXNTZWxlY3RRdWVyeSIsIm9wdGlvbnMiLCJyYXciLCJoYW5kbGVTZWxlY3RRdWVyeSIsInByZWZpeGVzIiwibWFwVmFsdWVzIiwidmFsdWUiLCJpbmNsdWRlcyIsImxhc3RpbmQiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsInRvU3RyaW5nIiwicmVwbGFjZSIsInRhYmxlVHlwZXMiLCJmb3JPd24iLCJhdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseVBhcnNlcnMiLCJpc1Nob3dPckRlc2NyaWJlUXVlcnkiLCJoYW5kbGVTaG93SW5kZXhlc1F1ZXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiX3Jlc3VsdCIsImRmbHRfdmFsdWUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwiYWxsb3dOdWxsIiwibm90bnVsbCIsInByaW1hcnlLZXkiLCJwayIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsInZlcnNpb24iLCJSQVciLCJpc1VwZGF0ZVF1ZXJ5IiwicGFyYW1ldGVycyIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiYmluZCIsImRpYWxlY3QiLCJza2lwVW5lc2NhcGUiLCJtZXRob2QiLCJnZXREYXRhYmFzZU1ldGhvZCIsImNvbXBsZXRlIiwiX2xvZ1F1ZXJ5IiwicXVlcnkiLCJzZWxmIiwiY29ubiIsImNvbm5lY3Rpb24iLCJyZXNvbHZlIiwiZXhlY3V0ZVNxbCIsInN0YXJ0c1dpdGgiLCJyZWplY3QiLCJleGVjIiwiYXJncyIsImV4ZWN1dGlvbkVycm9yIiwiY29udmVydFRvQXJyYXkiLCJfaGFuZGxlUXVlcnlSZXNwb25zZSIsImVycm9yIiwidHJhbnNhY3Rpb24iLCJ0Iiwic3VjY2Vzc0NhbGxiYWNrIiwicm93c0FmZmVjdGVkIiwiaW5zZXJ0SWQiLCJlIiwiZXJyb3JDYWxsYmFjayIsInRhYmxlTmFtZXMiLCJsZW5ndGgiLCJzcWxDb21tYW5kcyIsInNxbENtZCIsInJvd3MiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0YWJsZSIsImNvbHVtbnMiLCJtYXRjaCIsImNvbCIsImNvbE5hbWUiLCJjb2xUeXBlIiwidHJpbSIsInNwbGl0IiwidGhlbiIsImNvbnN0cmFpbnRzIiwicmVmZXJlbmNlVGFibGVOYW1lIiwicmVmZXJlbmNlVGFibGVLZXlzIiwidXBkYXRlQWN0aW9uIiwiZGVsZXRlQWN0aW9uIiwic3BsaWNlIiwiY29uc3RyYWludFNxbCIsInJlZmVyZW5jZXNSZWdleCIsInJlZmVyZW5jZUNvbmRpdGlvbnMiLCJyZW1vdmVUaWNrcyIsImNvbHVtbk5hbWVzIiwiY29sdW1uIiwiY29uc3RyYWludENvbmRpdGlvbiIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNvbnN0cmFpbnRUeXBlIiwiaW5kZXhPZiIsInRvVXBwZXJDYXNlIiwicGFyc2UiLCJnZXQiLCJ0aW1lem9uZSIsInNlcXVlbGl6ZSIsImNvZGUiLCJtZXNzYWdlIiwiRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvciIsInBhcmVudCIsImZpZWxkcyIsImNvbHVtbldpdGhUYWJsZSIsImVycm9ycyIsIlZhbGlkYXRpb25FcnJvckl0ZW0iLCJnZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlIiwidW5pcXVlS2V5cyIsImlzRXF1YWwiLCJtc2ciLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJEYXRhYmFzZUVycm9yIiwiZGF0YSIsInJldmVyc2UiLCJwcmltYXJ5IiwidW5pcXVlIiwicnVuIiwic2Vxbm8iLCJvcmRlciIsImlzQnVsa1VwZGF0ZVF1ZXJ5IiwidG9Mb3dlckNhc2UiLCJhcnJheSIsIl9hcnJheSIsInZhbHVlcyIsImJpbmRQYXJhbSIsInYiLCJza2lwVmFsdWVSZXBsYWNlIiwiayIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1HLGFBQWEsR0FBR0gsT0FBTyxDQUFDLG1CQUFELENBQTdCOztB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SixHQUFELEVBQU02SixTQUFOLENBQVA7QUFDRDs7OztFQW5DaUIvTCxhOztBQXVtQnBCbU0sTUFBTSxDQUFDQyxPQUFQLEdBQWlCaEwsS0FBakI7QUFDQStLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlaEwsS0FBZixHQUF1QkEsS0FBdkI7QUFDQStLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCakwsS0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZVwiKTtcbmNvbnN0IEFic3RyYWN0UXVlcnkgPSByZXF1aXJlKFwiLi4vYWJzdHJhY3QvcXVlcnlcIik7XG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3F1ZXJ5LXR5cGVzXCIpO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dnZXJcIik7XG5cbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcInNxbDpzcWxpdGVcIik7XG5jb25zdCBnZXRNZXRob2RzID0gb2JqID0+IHtcbiAgbGV0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG4gIGxldCBjdXJyZW50T2JqID0gb2JqO1xuICBkbyB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudE9iaikubWFwKGl0ZW0gPT4gcHJvcGVydGllcy5hZGQoaXRlbSkpO1xuICB9IHdoaWxlICgoY3VycmVudE9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50T2JqKSkpO1xuICByZXR1cm4gWy4uLnByb3BlcnRpZXMua2V5cygpXS5maWx0ZXIoaXRlbSA9PiB0eXBlb2Ygb2JqW2l0ZW1dID09PSBcImZ1bmN0aW9uXCIpO1xufTtcbmNsYXNzIFF1ZXJ5IGV4dGVuZHMgQWJzdHJhY3RRdWVyeSB7XG4gIGdldEluc2VydElkRmllbGQoKSB7XG4gICAgcmV0dXJuIFwibGFzdElEXCI7XG4gIH1cblxuICAvKipcbiAgICogcmV3cml0ZSBxdWVyeSB3aXRoIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlhbGVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0KSB7XG4gICAgbGV0IGJpbmRQYXJhbTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICAgIGJpbmRQYXJhbVtgJCR7aSArIDF9YF0gPSB2O1xuICAgICAgfSk7XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpKSB7XG4gICAgICAgICAgYmluZFBhcmFtW2AkJHtrfWBdID0gdmFsdWVzW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH1cbiAgICByZXR1cm4gW3NxbCwgYmluZFBhcmFtXTtcbiAgfVxuXG4gIF9jb2xsZWN0TW9kZWxzKGluY2x1ZGUsIHByZWZpeCkge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuXG4gICAgaWYgKGluY2x1ZGUpIHtcbiAgICAgIGZvciAoY29uc3QgX2luY2x1ZGUgb2YgaW5jbHVkZSkge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBpZiAoIXByZWZpeCkge1xuICAgICAgICAgIGtleSA9IF9pbmNsdWRlLmFzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IGAke3ByZWZpeH0uJHtfaW5jbHVkZS5hc31gO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXldID0gX2luY2x1ZGUubW9kZWw7XG5cbiAgICAgICAgaWYgKF9pbmNsdWRlLmluY2x1ZGUpIHtcbiAgICAgICAgICBfLm1lcmdlKHJldCwgdGhpcy5fY29sbGVjdE1vZGVscyhfaW5jbHVkZS5pbmNsdWRlLCBrZXkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBfaGFuZGxlUXVlcnlSZXNwb25zZShtZXRhRGF0YSwgY29sdW1uVHlwZXMsIGVyciwgcmVzdWx0cykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci5zcWwgPSB0aGlzLnNxbDtcbiAgICAgIHRocm93IHRoaXMuZm9ybWF0RXJyb3IoZXJyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuaW5zdGFuY2U7XG4gICAgLy8gYWRkIHRoZSBpbnNlcnRlZCByb3cgaWQgdG8gdGhlIGluc3RhbmNlXG4gICAgaWYgKHRoaXMuaXNJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5zZXJ0UXVlcnkocmVzdWx0cywgbWV0YURhdGEpO1xuICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgIC8vIGhhbmRsZSBidWxrQ3JlYXRlIEFJIHByaW1hcnkga2V5XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvKiAgbWV0YURhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdGF0ZW1lbnRcIiAmJiAqL1xuICAgICAgICAgIHRoaXMubW9kZWwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgPT09XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzdGFydElkID1cbiAgICAgICAgICAgIG1ldGFEYXRhW3RoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpXSAtIG1ldGFEYXRhLmNoYW5nZXMgKyAxO1xuXG4gICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SWQ7IGkgPCBzdGFydElkICsgbWV0YURhdGEuY2hhbmdlczsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgIFt0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICAgICAgICAgIC5maWVsZF06IGlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBtZXRhRGF0YVt0aGlzLmdldEluc2VydElkRmllbGQoKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Nob3dUYWJsZXNRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAocm93ID0+IHJvdy5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93Q29uc3RyYWludHNRdWVyeSgpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRzO1xuICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnNxbCkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHJlc3VsdHNbMF0uc3FsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0UXVlcnkoKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYXcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VsZWN0UXVlcnkocmVzdWx0cyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGlzIGEgbWFwIG9mIHByZWZpeCBzdHJpbmdzIHRvIG1vZGVscywgZS5nLiB1c2VyLnByb2plY3RzIC0+IFByb2plY3QgbW9kZWxcbiAgICAgIGNvbnN0IHByZWZpeGVzID0gdGhpcy5fY29sbGVjdE1vZGVscyh0aGlzLm9wdGlvbnMuaW5jbHVkZSk7XG5cbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMocmVzdWx0LCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0aW5kID0gbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG5cbiAgICAgICAgICAgIG1vZGVsID0gcHJlZml4ZXNbbmFtZS5zdWJzdHIoMCwgbGFzdGluZCldO1xuXG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIobGFzdGluZCArIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IHRoaXMub3B0aW9ucy5tb2RlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbFxuICAgICAgICAgICAgLmdldFRhYmxlTmFtZSgpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgY29uc3QgdGFibGVUeXBlcyA9IGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gfHwge307XG5cbiAgICAgICAgICBpZiAodGFibGVUeXBlcyAmJiAhKG5hbWUgaW4gdGFibGVUeXBlcykpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb2x1bW4gaXMgYWxpYXNlZFxuICAgICAgICAgICAgXy5mb3JPd24obW9kZWwucmF3QXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSBrZXkgJiYgYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJpYnV0ZS5maWVsZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFibGVUeXBlcywgbmFtZSlcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVBhcnNlcnModGFibGVUeXBlc1tuYW1lXSwgdmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZWxlY3RRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93T3JEZXNjcmliZVF1ZXJ5KCkpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgSU5ERVhfTElTVFwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2hvd0luZGV4ZXNRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIElOREVYX0lORk9cIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgVEFCTEVfSU5GT1wiKSkge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgc3FsaXRlIHdheSBvZiBnZXR0aW5nIHRoZSBtZXRhZGF0YSBvZiBhIHRhYmxlXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgZm9yIChjb25zdCBfcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAoX3Jlc3VsdC5kZmx0X3ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDb2x1bW4gc2NoZW1hIG9taXRzIGFueSBcIkRFRkFVTFQgLi4uXCJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9yZXN1bHQuZGZsdF92YWx1ZSA9PT0gXCJOVUxMXCIpIHtcbiAgICAgICAgICAgIC8vIENvbHVtbiBzY2hlbWEgaXMgYSBcIkRFRkFVTFQgTlVMTFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVzdWx0LmRmbHRfdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBfcmVzdWx0LnR5cGUsXG4gICAgICAgICAgICBhbGxvd051bGw6IF9yZXN1bHQubm90bnVsbCA9PT0gMCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IF9yZXN1bHQucGsgIT09IDBcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlc3VsdFtfcmVzdWx0Lm5hbWVdLnR5cGUgPT09IFwiVElOWUlOVCgxKVwiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSB7IFwiMFwiOiBmYWxzZSwgXCIxXCI6IHRydWUgfVtcbiAgICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSByZXN1bHRbXG4gICAgICAgICAgICAgIF9yZXN1bHQubmFtZVxuICAgICAgICAgICAgXS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvJy9nLCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5cztcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgZm9yZWlnbl9rZXlzXCIpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5X2xpc3RcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBbUXVlcnlUeXBlcy5CVUxLVVBEQVRFLCBRdWVyeVR5cGVzLkJVTEtERUxFVEVdLmluY2x1ZGVzKHRoaXMub3B0aW9ucy50eXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuIG1ldGFEYXRhLmNoYW5nZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5VUFNFUlQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5WRVJTSU9OKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1swXS52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuUkFXKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdHMsIG1ldGFEYXRhXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVRdWVyeSgpIHx8IHRoaXMuaXNJbnNlcnRRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0YURhdGEuY2hhbmdlc107XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gd2Vic3FsIDogcG9seWZpbGwgZm9yZWlnbiBrZXkgaHR0cHM6Ly9qdXN0YXRoZW9yeS5jb20vMjAwNC8xMS9zcWxpdGUtZm9yZWlnbi1rZXktdHJpZ2dlcnMvXG4gIHJ1bihzcWwsIHBhcmFtZXRlcnMpIHtcbiAgICAvLyBleGVjIGRvZXMgbm90IHN1cHBvcnQgYmluZCBwYXJhbWV0ZXJcbiAgICB0aGlzLnNxbCA9IEFic3RyYWN0UXVlcnkuZm9ybWF0QmluZFBhcmFtZXRlcnMoXG4gICAgICBzcWwsXG4gICAgICB0aGlzLm9wdGlvbnMuYmluZCxcbiAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0IHx8IFwic3FsaXRlXCIsXG4gICAgICB7IHNraXBVbmVzY2FwZTogZmFsc2UgfVxuICAgIClbMF07XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXREYXRhYmFzZU1ldGhvZCgpO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gdGhpcy5fbG9nUXVlcnkodGhpcy5zcWwsIGRlYnVnLCBwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXM7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29ubiA9IHRoaXMuY29ubmVjdGlvbjtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtblR5cGVzID0ge307XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGV4ZWN1dGVTcWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzcWwuc3RhcnRzV2l0aChcIi0tIFwiKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImV4ZWNcIikge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY29ubi5leGVjKFxuICAgICAgICAgICAgICAgICAgW3sgc3FsOiBzZWxmLnNxbCwgYXJnczogW10gfV0sXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIChleGVjdXRpb25FcnJvciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgcmV0dXJuIFBSQUdNQSBJTkRFWF9MSVNUIGFuZCBJTkRFWF9JTkZPXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGB0aGlzYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW5ub3QgdXNlIGFycm93IGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgYm91bmQgdG8gdGhlIHN0YXRlbWVudFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBgc2VsZmAgaXMgcGFzc2VkIGZyb20gc3FsaXRlLCB3ZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciB0aGlzLlxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXSA9IHJlc3VsdHMuaW5zZXJ0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZXMgPSByZXN1bHRzLnJvd3NBZmZlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShzZWxmLCBjb2x1bW5UeXBlcywgZXJyKSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25uLmV4ZWMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgICBzZWxmLnNxbCxcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBpZiAobWV0aG9kID09PSBcImFsbFwiKSB7XG4gICAgICAgIGxldCB0YWJsZU5hbWVzID0gW107XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnRhYmxlTmFtZXMpIHtcbiAgICAgICAgICB0YWJsZU5hbWVzID0gdGhpcy5vcHRpb25zLnRhYmxlTmFtZXM7XG4gICAgICAgIH0gZWxzZSBpZiAoL0ZST00gYCguKj8pYC9pLmV4ZWModGhpcy5zcWwpKSB7XG4gICAgICAgICAgdGFibGVOYW1lcy5wdXNoKC9GUk9NIGAoLio/KWAvaS5leGVjKHRoaXMuc3FsKVsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIG1ldGFkYXRhIGZvciB0aGUgdGFibGUsIHRoZXJlJ3Mgbm8gbmVlZCB0byBhc2sgZm9yIGl0IGFnYWluXG4gICAgICAgIHRhYmxlTmFtZXMgPSB0YWJsZU5hbWVzLmZpbHRlcihcbiAgICAgICAgICB0YWJsZU5hbWUgPT5cbiAgICAgICAgICAgICEodGFibGVOYW1lIGluIGNvbHVtblR5cGVzKSAmJiB0YWJsZU5hbWUgIT09IFwic3FsaXRlX21hc3RlclwiXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGFibGVOYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZXhlY3V0ZVNxbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zdCBzcWxDb21tYW5kcyA9IHRhYmxlTmFtZXMubWFwKHRhYmxlTmFtZSA9PiB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZSA9IHRhYmxlTmFtZS5yZXBsYWNlKC9gL2csIFwiXCIpO1xuICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICAgIHJldHVybiBbYFBSQUdNQSB0YWJsZV9pbmZvKFxcYCR7dGFibGVOYW1lfVxcYClgLCB0YWJsZU5hbWVdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25uLmV4ZWMoXG4gICAgICAgICAgICAgIHNxbENvbW1hbmRzLm1hcChzcWxDbWQgPT4gKHtcbiAgICAgICAgICAgICAgICBzcWw6IHNxbENtZFswXSxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXVxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAoZXJyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3FsQ29tbWFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gc3FsQ29tbWFuZHNbaV1bMV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHNbaV0ucm93cykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV1bcmVzdWx0Lm5hbWVdID0gcmVzdWx0LnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgdGFibGVOYW1lcy5mb3JFYWNoKCh0YWJsZU5hbWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgdC5leGVjdXRlU3FsKFxuICAgICAgICAgICAgICAgICAgYFNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPScke3RhYmxlTmFtZX0nIGFuZCB0eXBlPSd0YWJsZSdgLFxuICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbihfLCByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGUgPSByZXN1bHQucm93cy5pdGVtKDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRhYmxlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgXCJzcWxcIiBpbiB0YWJsZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0YWJsZS5zcWwgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgIC8vbWF0Y2ggY29sdW1uIG5hbWUgd2l0aCBkYXRhIHR5cGVzXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlLnNxbC5tYXRjaChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8oYFxcdytgKSgoXFxzKFtBLVpdKykoKFxcKFxcZCtcXCkpKT8pKS9nXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBzcGxpdCBjb2x1bW4gbmFtZXMgd2l0aCBkYXRhIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbY29sTmFtZSwgY29sVHlwZV0gPSBjb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIiBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV1bY29sTmFtZV0gPSBjb2xUeXBlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjb2x1bW5UeXBlcylcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbihfLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRhYmxlTmFtZXMubGVuZ3RoIC0gMSkgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKGV4ZWN1dGVTcWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4ZWN1dGVTcWwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHNxbCkge1xuICAgIGxldCBjb25zdHJhaW50cyA9IHNxbC5zcGxpdChcIkNPTlNUUkFJTlQgXCIpO1xuICAgIGxldCByZWZlcmVuY2VUYWJsZU5hbWUsIHJlZmVyZW5jZVRhYmxlS2V5cywgdXBkYXRlQWN0aW9uLCBkZWxldGVBY3Rpb247XG4gICAgY29uc3RyYWludHMuc3BsaWNlKDAsIDEpO1xuICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHMubWFwKGNvbnN0cmFpbnRTcWwgPT4ge1xuICAgICAgLy9QYXJzZSBmb3JlaWduIGtleSBzbmlwcGV0c1xuICAgICAgaWYgKGNvbnN0cmFpbnRTcWwuaW5jbHVkZXMoXCJSRUZFUkVOQ0VTXCIpKSB7XG4gICAgICAgIC8vUGFyc2Ugb3V0IHRoZSBjb25zdHJhaW50IGNvbmRpdGlvbiBmb3JtIHNxbCBzdHJpbmdcbiAgICAgICAgdXBkYXRlQWN0aW9uID0gY29uc3RyYWludFNxbC5tYXRjaChcbiAgICAgICAgICAvT04gVVBEQVRFIChDQVNDQURFfFNFVCBOVUxMfFJFU1RSSUNUfE5PIEFDVElPTnxTRVQgREVGQVVMVCl7MX0vXG4gICAgICAgICk7XG4gICAgICAgIGRlbGV0ZUFjdGlvbiA9IGNvbnN0cmFpbnRTcWwubWF0Y2goXG4gICAgICAgICAgL09OIERFTEVURSAoQ0FTQ0FERXxTRVQgTlVMTHxSRVNUUklDVHxOTyBBQ1RJT058U0VUIERFRkFVTFQpezF9L1xuICAgICAgICApO1xuXG4gICAgICAgIGlmICh1cGRhdGVBY3Rpb24pIHtcbiAgICAgICAgICB1cGRhdGVBY3Rpb24gPSB1cGRhdGVBY3Rpb25bMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsZXRlQWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlQWN0aW9uID0gZGVsZXRlQWN0aW9uWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlc1JlZ2V4ID0gL1JFRkVSRU5DRVMuK1xcKCg/OlteKShdK3xcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKlxcKS87XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUNvbmRpdGlvbnMgPSBjb25zdHJhaW50U3FsXG4gICAgICAgICAgLm1hdGNoKHJlZmVyZW5jZXNSZWdleClbMF1cbiAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICByZWZlcmVuY2VUYWJsZU5hbWUgPSBVdGlscy5yZW1vdmVUaWNrcyhyZWZlcmVuY2VDb25kaXRpb25zWzFdKTtcbiAgICAgICAgbGV0IGNvbHVtbk5hbWVzID0gcmVmZXJlbmNlQ29uZGl0aW9uc1syXTtcbiAgICAgICAgY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lcy5yZXBsYWNlKC9cXCh8XFwpL2csIFwiXCIpLnNwbGl0KFwiLCBcIik7XG4gICAgICAgIHJlZmVyZW5jZVRhYmxlS2V5cyA9IGNvbHVtbk5hbWVzLm1hcChjb2x1bW4gPT5cbiAgICAgICAgICBVdGlscy5yZW1vdmVUaWNrcyhjb2x1bW4pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRDb25kaXRpb24gPSBjb25zdHJhaW50U3FsLm1hdGNoKFxuICAgICAgICAvXFwoKD86W14pKF0rfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqXFwpL1xuICAgICAgKVswXTtcbiAgICAgIGNvbnN0cmFpbnRTcWwgPSBjb25zdHJhaW50U3FsLnJlcGxhY2UoL1xcKC4rXFwpLywgXCJcIik7XG4gICAgICBjb25zdCBjb25zdHJhaW50ID0gY29uc3RyYWludFNxbC5zcGxpdChcIiBcIik7XG5cbiAgICAgIGlmIChjb25zdHJhaW50WzFdID09PSBcIlBSSU1BUllcIiB8fCBjb25zdHJhaW50WzFdID09PSBcIkZPUkVJR05cIikge1xuICAgICAgICBjb25zdHJhaW50WzFdICs9IFwiIEtFWVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb25zdHJhaW50TmFtZTogVXRpbHMucmVtb3ZlVGlja3MoY29uc3RyYWludFswXSksXG4gICAgICAgIGNvbnN0cmFpbnRUeXBlOiBjb25zdHJhaW50WzFdLFxuICAgICAgICB1cGRhdGVBY3Rpb24sXG4gICAgICAgIGRlbGV0ZUFjdGlvbixcbiAgICAgICAgc3FsOiBzcWwucmVwbGFjZSgvXCIvZywgXCJgXCIpLCAvL1NxbGl0ZSByZXR1cm5zIGRvdWJsZSBxdW90ZXMgZm9yIHRhYmxlIG5hbWVcbiAgICAgICAgY29uc3RyYWludENvbmRpdGlvbixcbiAgICAgICAgcmVmZXJlbmNlVGFibGVOYW1lLFxuICAgICAgICByZWZlcmVuY2VUYWJsZUtleXNcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludHM7XG4gIH1cblxuICBhcHBseVBhcnNlcnModHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZS5pbmNsdWRlcyhcIihcIikpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgbGVuZ3RoIHBhcnRcbiAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cigwLCB0eXBlLmluZGV4T2YoXCIoXCIpKTtcbiAgICB9XG4gICAgdHlwZSA9IHR5cGUucmVwbGFjZShcIlVOU0lHTkVEXCIsIFwiXCIpLnJlcGxhY2UoXCJaRVJPRklMTFwiLCBcIlwiKTtcbiAgICB0eXBlID0gdHlwZS50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBwYXJzZSA9IHBhcnNlclN0b3JlLmdldCh0eXBlKTtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgcGFyc2UpIHtcbiAgICAgIHJldHVybiBwYXJzZSh2YWx1ZSwgeyB0aW1lem9uZTogdGhpcy5zZXF1ZWxpemUub3B0aW9ucy50aW1lem9uZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZm9ybWF0RXJyb3IoZXJyKSB7XG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBcIlNRTElURV9DT05TVFJBSU5UXCI6IHtcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiRk9SRUlHTiBLRVkgY29uc3RyYWludCBmYWlsZWRcIikpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5Gb3JlaWduS2V5Q29uc3RyYWludEVycm9yKHtcbiAgICAgICAgICAgIHBhcmVudDogZXJyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmllbGRzID0gW107XG5cbiAgICAgICAgLy8gU3FsaXRlIHByZSAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IGNvbHVtbnMgeCwgeSBhcmUgbm90IHVuaXF1ZVxuICAgICAgICBsZXQgbWF0Y2ggPSBlcnIubWVzc2FnZS5tYXRjaCgvY29sdW1ucyAoLio/KSBhcmUvKTtcbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmIG1hdGNoLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV0uc3BsaXQoXCIsIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTcWxpdGUgcG9zdCAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IFVOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogdGFibGUueCwgdGFibGUueVxuICAgICAgICAgIG1hdGNoID0gZXJyLm1lc3NhZ2UubWF0Y2goL1VOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogKC4qKS8pO1xuICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiBtYXRjaC5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV1cbiAgICAgICAgICAgICAgLnNwbGl0KFwiLCBcIilcbiAgICAgICAgICAgICAgLm1hcChjb2x1bW5XaXRoVGFibGUgPT4gY29sdW1uV2l0aFRhYmxlLnNwbGl0KFwiLlwiKVsxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGxldCBtZXNzYWdlID0gXCJWYWxpZGF0aW9uIGVycm9yXCI7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAgIG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9ySXRlbShcbiAgICAgICAgICAgICAgdGhpcy5nZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlKGZpZWxkKSxcbiAgICAgICAgICAgICAgXCJ1bmlxdWUgdmlvbGF0aW9uXCIsIC8vIHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnMuREIsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2VbZmllbGRdLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICBcIm5vdF91bmlxdWVcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgIF8uZm9yT3duKHRoaXMubW9kZWwudW5pcXVlS2V5cywgY29uc3RyYWludCA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pc0VxdWFsKGNvbnN0cmFpbnQuZmllbGRzLCBmaWVsZHMpICYmICEhY29uc3RyYWludC5tc2cpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGNvbnN0cmFpbnQubXNnO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5VbmlxdWVDb25zdHJhaW50RXJyb3Ioe1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgZXJyb3JzLFxuICAgICAgICAgIHBhcmVudDogZXJyLFxuICAgICAgICAgIGZpZWxkc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJTUUxJVEVfQlVTWVwiOlxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5UaW1lb3V0RXJyb3IoZXJyKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBzZXF1ZWxpemVFcnJvcnMuRGF0YWJhc2VFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNob3dJbmRleGVzUXVlcnkoZGF0YSkge1xuICAgIC8vIFNxbGl0ZSByZXR1cm5zIGluZGV4ZXMgc28gdGhlIG9uZSB0aGF0IHdhcyBkZWZpbmVkIGxhc3QgaXMgcmV0dXJuZWQgZmlyc3QuIExldHMgcmV2ZXJzZSB0aGF0IVxuICAgIHJldHVybiBQcm9taXNlLm1hcChkYXRhLnJldmVyc2UoKSwgaXRlbSA9PiB7XG4gICAgICBpdGVtLmZpZWxkcyA9IFtdO1xuICAgICAgaXRlbS5wcmltYXJ5ID0gZmFsc2U7XG4gICAgICBpdGVtLnVuaXF1ZSA9ICEhaXRlbS51bmlxdWU7XG4gICAgICBpdGVtLmNvbnN0cmFpbnROYW1lID0gaXRlbS5uYW1lO1xuICAgICAgcmV0dXJuIHRoaXMucnVuKGBQUkFHTUEgSU5ERVhfSU5GTyhcXGAke2l0ZW0ubmFtZX1cXGApYCkudGhlbihjb2x1bW5zID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICAgIGl0ZW0uZmllbGRzW2NvbHVtbi5zZXFub10gPSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmRlcjogdW5kZWZpbmVkXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhYmFzZU1ldGhvZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNxbC5pbmNsdWRlcyhcIlBSQUdNQVwiKSB8fFxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJDT01NSVRcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiUk9MTEJBQ0tcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiVFJBTlNBQ1RJT05cIilcbiAgICApIHtcbiAgICAgIHJldHVybiBcImV4ZWNcIjsgLy8gTmVlZGVkIHRvIHJ1biBuby1vcCB0cmFuc2FjdGlvblxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmlzSW5zZXJ0UXVlcnkoKSB8fFxuICAgICAgdGhpcy5pc1VwZGF0ZVF1ZXJ5KCkgfHxcbiAgICAgIHRoaXMuaXNCdWxrVXBkYXRlUXVlcnkoKSB8fFxuICAgICAgdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURSBURU1QT1JBUlkgVEFCTEVcIi50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuQlVMS0RFTEVURVxuICAgICkge1xuICAgICAgcmV0dXJuIFwicnVuXCI7XG4gICAgfVxuICAgIHJldHVybiBcImFsbFwiO1xuICB9XG4gIGNvbnZlcnRUb0FycmF5KHJlc3VsdHMpIHtcbiAgICBpZiAoIXJlc3VsdHMucm93cykgcmV0dXJuIFtdO1xuICAgIGlmIChcImFycmF5XCIgaW4gcmVzdWx0cyB8fCBcIl9hcnJheVwiIGluIHJlc3VsdHMucm93cylcbiAgICAgIHJldHVybiByZXN1bHRzLmFycmF5IHx8IHJlc3VsdHMucm93cy5fYXJyYXk7XG4gICAgaWYgKCFyZXN1bHRzLnJvd3MuaXRlbSkgcmV0dXJuIHJlc3VsdHMucm93cztcbiAgICBjb25zdCBkYXRhID0gbmV3IEFycmF5KHJlc3VsdHMucm93cy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkYXRhW2ldID0gcmVzdWx0cy5yb3dzLml0ZW0oaSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUXVlcnk7XG5tb2R1bGUuZXhwb3J0cy5RdWVyeSA9IFF1ZXJ5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IFF1ZXJ5O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnkuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIlByb21pc2UiLCJBYnN0cmFjdFF1ZXJ5IiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsInBhcnNlclN0b3JlIiwibG9nZ2VyIiwiZGVidWciLCJkZWJ1Z0NvbnRleHQiLCJnZXRNZXRob2RzIiwib2JqIiwicHJvcGVydGllcyIsIlNldCIsImN1cnJlbnRPYmoiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibWFwIiwiaXRlbSIsImFkZCIsImdldFByb3RvdHlwZU9mIiwia2V5cyIsImZpbHRlciIsIlF1ZXJ5IiwiaW5jbHVkZSIsInByZWZpeCIsInJldCIsIl9pbmNsdWRlIiwia2V5IiwiYXMiLCJtb2RlbCIsIm1lcmdlIiwiX2NvbGxlY3RNb2RlbHMiLCJtZXRhRGF0YSIsImNvbHVtblR5cGVzIiwiZXJyIiwicmVzdWx0cyIsInNxbCIsImZvcm1hdEVycm9yIiwicmVzdWx0IiwiaW5zdGFuY2UiLCJpc0luc2VydFF1ZXJ5IiwiaGFuZGxlSW5zZXJ0UXVlcnkiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsInJhd0F0dHJpYnV0ZXMiLCJzdGFydElkIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImNoYW5nZXMiLCJpIiwicHVzaCIsImZpZWxkIiwiaXNTaG93VGFibGVzUXVlcnkiLCJyb3ciLCJuYW1lIiwiaXNTaG93Q29uc3RyYWludHNRdWVyeSIsInBhcnNlQ29uc3RyYWludHNGcm9tU3FsIiwiaXNTZWxlY3RRdWVyeSIsIm9wdGlvbnMiLCJyYXciLCJoYW5kbGVTZWxlY3RRdWVyeSIsInByZWZpeGVzIiwibWFwVmFsdWVzIiwidmFsdWUiLCJpbmNsdWRlcyIsImxhc3RpbmQiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsInRvU3RyaW5nIiwicmVwbGFjZSIsInRhYmxlVHlwZXMiLCJmb3JPd24iLCJhdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseVBhcnNlcnMiLCJpc1Nob3dPckRlc2NyaWJlUXVlcnkiLCJoYW5kbGVTaG93SW5kZXhlc1F1ZXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiX3Jlc3VsdCIsImRmbHRfdmFsdWUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwiYWxsb3dOdWxsIiwibm90bnVsbCIsInByaW1hcnlLZXkiLCJwayIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsInZlcnNpb24iLCJSQVciLCJpc1VwZGF0ZVF1ZXJ5IiwicGFyYW1ldGVycyIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiYmluZCIsImRpYWxlY3QiLCJza2lwVW5lc2NhcGUiLCJtZXRob2QiLCJnZXREYXRhYmFzZU1ldGhvZCIsImNvbXBsZXRlIiwiX2xvZ1F1ZXJ5IiwicXVlcnkiLCJzZWxmIiwiY29ubiIsImNvbm5lY3Rpb24iLCJyZXNvbHZlIiwiZXhlY3V0ZVNxbCIsInN0YXJ0c1dpdGgiLCJyZWplY3QiLCJleGVjIiwiYXJncyIsImV4ZWN1dGlvbkVycm9yIiwiY29udmVydFRvQXJyYXkiLCJfaGFuZGxlUXVlcnlSZXNwb25zZSIsImVycm9yIiwic3VjY2Vzc0NhbGxiYWNrIiwicm93c0FmZmVjdGVkIiwiaW5zZXJ0SWQiLCJlIiwiZXJyb3JDYWxsYmFjayIsInRhYmxlTmFtZXMiLCJsZW5ndGgiLCJzcWxDb21tYW5kcyIsInNxbENtZCIsInJvd3MiLCJ0cmFuc2FjdGlvbiIsInQiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0YWJsZSIsImNvbHVtbnMiLCJtYXRjaCIsImNvbCIsImNvbE5hbWUiLCJjb2xUeXBlIiwidHJpbSIsInNwbGl0IiwidGhlbiIsImNvbnN0cmFpbnRzIiwicmVmZXJlbmNlVGFibGVOYW1lIiwicmVmZXJlbmNlVGFibGVLZXlzIiwidXBkYXRlQWN0aW9uIiwiZGVsZXRlQWN0aW9uIiwic3BsaWNlIiwiY29uc3RyYWludFNxbCIsInJlZmVyZW5jZXNSZWdleCIsInJlZmVyZW5jZUNvbmRpdGlvbnMiLCJyZW1vdmVUaWNrcyIsImNvbHVtbk5hbWVzIiwiY29sdW1uIiwiY29uc3RyYWludENvbmRpdGlvbiIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNvbnN0cmFpbnRUeXBlIiwiaW5kZXhPZiIsInRvVXBwZXJDYXNlIiwicGFyc2UiLCJnZXQiLCJ0aW1lem9uZSIsInNlcXVlbGl6ZSIsImNvZGUiLCJtZXNzYWdlIiwiRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvciIsInBhcmVudCIsImZpZWxkcyIsImNvbHVtbldpdGhUYWJsZSIsImVycm9ycyIsIlZhbGlkYXRpb25FcnJvckl0ZW0iLCJnZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlIiwidW5pcXVlS2V5cyIsImlzRXF1YWwiLCJtc2ciLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJEYXRhYmFzZUVycm9yIiwiZGF0YSIsInJldmVyc2UiLCJwcmltYXJ5IiwidW5pcXVlIiwicnVuIiwic2Vxbm8iLCJvcmRlciIsImlzQnVsa1VwZGF0ZVF1ZXJ5IiwidG9Mb3dlckNhc2UiLCJhcnJheSIsIl9hcnJheSIsInZhbHVlcyIsImJpbmRQYXJhbSIsInYiLCJza2lwVmFsdWVSZXBsYWNlIiwiayIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1HLGFBQWEsR0FBR0gsT0FBTyxDQUFDLG1CQUFELENBQTdCOztB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QTNCO0FBQ0Q7QUFDRjs7QUFDRGhLLFFBQUFBLEdBQUcsR0FBR2xDLGFBQWEsQ0FBQ2lHLG9CQUFkLENBQW1DL0QsR0FBbkMsRUFBd0M0SixNQUF4QyxFQUFnRDNGLE9BQWhELEVBQXlEO0FBQzdEOEYsVUFBQUEsZ0JBQWdCLEVBQUU7QUFEMkMsU0FBekQsRUFFSCxDQUZHLENBQU47QUFHRDs7QUFDRCxhQUFPLENBQUMvSixHQUFELEVBQU02SixTQUFOLENBQVA7QUFDRDs7OztFQW5DaUIvTCxhOztBQXVwQnBCbU0sTUFBTSxDQUFDQyxPQUFQLEdBQWlCaEwsS0FBakI7QUFDQStLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlaEwsS0FBZixHQUF1QkEsS0FBdkI7QUFDQStLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCakwsS0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZVwiKTtcbmNvbnN0IEFic3RyYWN0UXVlcnkgPSByZXF1aXJlKFwiLi4vYWJzdHJhY3QvcXVlcnlcIik7XG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3F1ZXJ5LXR5cGVzXCIpO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dnZXJcIik7XG5cbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcInNxbDpzcWxpdGVcIik7XG5jb25zdCBnZXRNZXRob2RzID0gb2JqID0+IHtcbiAgbGV0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG4gIGxldCBjdXJyZW50T2JqID0gb2JqO1xuICBkbyB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudE9iaikubWFwKGl0ZW0gPT4gcHJvcGVydGllcy5hZGQoaXRlbSkpO1xuICB9IHdoaWxlICgoY3VycmVudE9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50T2JqKSkpO1xuICByZXR1cm4gWy4uLnByb3BlcnRpZXMua2V5cygpXS5maWx0ZXIoaXRlbSA9PiB0eXBlb2Ygb2JqW2l0ZW1dID09PSBcImZ1bmN0aW9uXCIpO1xufTtcbmNsYXNzIFF1ZXJ5IGV4dGVuZHMgQWJzdHJhY3RRdWVyeSB7XG4gIGdldEluc2VydElkRmllbGQoKSB7XG4gICAgcmV0dXJuIFwibGFzdElEXCI7XG4gIH1cblxuICAvKipcbiAgICogcmV3cml0ZSBxdWVyeSB3aXRoIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlhbGVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0KSB7XG4gICAgbGV0IGJpbmRQYXJhbTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICAgIGJpbmRQYXJhbVtgJCR7aSArIDF9YF0gPSB2O1xuICAgICAgfSk7XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpKSB7XG4gICAgICAgICAgYmluZFBhcmFtW2AkJHtrfWBdID0gdmFsdWVzW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH1cbiAgICByZXR1cm4gW3NxbCwgYmluZFBhcmFtXTtcbiAgfVxuXG4gIF9jb2xsZWN0TW9kZWxzKGluY2x1ZGUsIHByZWZpeCkge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuXG4gICAgaWYgKGluY2x1ZGUpIHtcbiAgICAgIGZvciAoY29uc3QgX2luY2x1ZGUgb2YgaW5jbHVkZSkge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBpZiAoIXByZWZpeCkge1xuICAgICAgICAgIGtleSA9IF9pbmNsdWRlLmFzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IGAke3ByZWZpeH0uJHtfaW5jbHVkZS5hc31gO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXldID0gX2luY2x1ZGUubW9kZWw7XG5cbiAgICAgICAgaWYgKF9pbmNsdWRlLmluY2x1ZGUpIHtcbiAgICAgICAgICBfLm1lcmdlKHJldCwgdGhpcy5fY29sbGVjdE1vZGVscyhfaW5jbHVkZS5pbmNsdWRlLCBrZXkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBfaGFuZGxlUXVlcnlSZXNwb25zZShtZXRhRGF0YSwgY29sdW1uVHlwZXMsIGVyciwgcmVzdWx0cykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci5zcWwgPSB0aGlzLnNxbDtcbiAgICAgIHRocm93IHRoaXMuZm9ybWF0RXJyb3IoZXJyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuaW5zdGFuY2U7XG4gICAgLy8gYWRkIHRoZSBpbnNlcnRlZCByb3cgaWQgdG8gdGhlIGluc3RhbmNlXG4gICAgaWYgKHRoaXMuaXNJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5zZXJ0UXVlcnkocmVzdWx0cywgbWV0YURhdGEpO1xuICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgIC8vIGhhbmRsZSBidWxrQ3JlYXRlIEFJIHByaW1hcnkga2V5XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvKiAgbWV0YURhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdGF0ZW1lbnRcIiAmJiAqL1xuICAgICAgICAgIHRoaXMubW9kZWwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgPT09XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzdGFydElkID1cbiAgICAgICAgICAgIG1ldGFEYXRhW3RoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpXSAtIG1ldGFEYXRhLmNoYW5nZXMgKyAxO1xuXG4gICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SWQ7IGkgPCBzdGFydElkICsgbWV0YURhdGEuY2hhbmdlczsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgIFt0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICAgICAgICAgIC5maWVsZF06IGlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBtZXRhRGF0YVt0aGlzLmdldEluc2VydElkRmllbGQoKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Nob3dUYWJsZXNRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAocm93ID0+IHJvdy5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93Q29uc3RyYWludHNRdWVyeSgpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRzO1xuICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnNxbCkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHJlc3VsdHNbMF0uc3FsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0UXVlcnkoKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYXcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VsZWN0UXVlcnkocmVzdWx0cyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGlzIGEgbWFwIG9mIHByZWZpeCBzdHJpbmdzIHRvIG1vZGVscywgZS5nLiB1c2VyLnByb2plY3RzIC0+IFByb2plY3QgbW9kZWxcbiAgICAgIGNvbnN0IHByZWZpeGVzID0gdGhpcy5fY29sbGVjdE1vZGVscyh0aGlzLm9wdGlvbnMuaW5jbHVkZSk7XG5cbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMocmVzdWx0LCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0aW5kID0gbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG5cbiAgICAgICAgICAgIG1vZGVsID0gcHJlZml4ZXNbbmFtZS5zdWJzdHIoMCwgbGFzdGluZCldO1xuXG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIobGFzdGluZCArIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IHRoaXMub3B0aW9ucy5tb2RlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbFxuICAgICAgICAgICAgLmdldFRhYmxlTmFtZSgpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgY29uc3QgdGFibGVUeXBlcyA9IGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gfHwge307XG5cbiAgICAgICAgICBpZiAodGFibGVUeXBlcyAmJiAhKG5hbWUgaW4gdGFibGVUeXBlcykpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb2x1bW4gaXMgYWxpYXNlZFxuICAgICAgICAgICAgXy5mb3JPd24obW9kZWwucmF3QXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSBrZXkgJiYgYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJpYnV0ZS5maWVsZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFibGVUeXBlcywgbmFtZSlcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVBhcnNlcnModGFibGVUeXBlc1tuYW1lXSwgdmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZWxlY3RRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93T3JEZXNjcmliZVF1ZXJ5KCkpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgSU5ERVhfTElTVFwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2hvd0luZGV4ZXNRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIElOREVYX0lORk9cIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgVEFCTEVfSU5GT1wiKSkge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgc3FsaXRlIHdheSBvZiBnZXR0aW5nIHRoZSBtZXRhZGF0YSBvZiBhIHRhYmxlXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgZm9yIChjb25zdCBfcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAoX3Jlc3VsdC5kZmx0X3ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDb2x1bW4gc2NoZW1hIG9taXRzIGFueSBcIkRFRkFVTFQgLi4uXCJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9yZXN1bHQuZGZsdF92YWx1ZSA9PT0gXCJOVUxMXCIpIHtcbiAgICAgICAgICAgIC8vIENvbHVtbiBzY2hlbWEgaXMgYSBcIkRFRkFVTFQgTlVMTFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVzdWx0LmRmbHRfdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBfcmVzdWx0LnR5cGUsXG4gICAgICAgICAgICBhbGxvd051bGw6IF9yZXN1bHQubm90bnVsbCA9PT0gMCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IF9yZXN1bHQucGsgIT09IDBcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlc3VsdFtfcmVzdWx0Lm5hbWVdLnR5cGUgPT09IFwiVElOWUlOVCgxKVwiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSB7IFwiMFwiOiBmYWxzZSwgXCIxXCI6IHRydWUgfVtcbiAgICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSByZXN1bHRbXG4gICAgICAgICAgICAgIF9yZXN1bHQubmFtZVxuICAgICAgICAgICAgXS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvJy9nLCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5cztcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgZm9yZWlnbl9rZXlzXCIpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5X2xpc3RcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBbUXVlcnlUeXBlcy5CVUxLVVBEQVRFLCBRdWVyeVR5cGVzLkJVTEtERUxFVEVdLmluY2x1ZGVzKHRoaXMub3B0aW9ucy50eXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuIG1ldGFEYXRhLmNoYW5nZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5VUFNFUlQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5WRVJTSU9OKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1swXS52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuUkFXKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdHMsIG1ldGFEYXRhXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVRdWVyeSgpIHx8IHRoaXMuaXNJbnNlcnRRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0YURhdGEuY2hhbmdlc107XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gd2Vic3FsIDogcG9seWZpbGwgZm9yZWlnbiBrZXkgaHR0cHM6Ly9qdXN0YXRoZW9yeS5jb20vMjAwNC8xMS9zcWxpdGUtZm9yZWlnbi1rZXktdHJpZ2dlcnMvXG4gIHJ1bihzcWwsIHBhcmFtZXRlcnMpIHtcbiAgICAvLyBleGVjIGRvZXMgbm90IHN1cHBvcnQgYmluZCBwYXJhbWV0ZXJcbiAgICB0aGlzLnNxbCA9IEFic3RyYWN0UXVlcnkuZm9ybWF0QmluZFBhcmFtZXRlcnMoXG4gICAgICBzcWwsXG4gICAgICB0aGlzLm9wdGlvbnMuYmluZCxcbiAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0IHx8IFwic3FsaXRlXCIsXG4gICAgICB7IHNraXBVbmVzY2FwZTogZmFsc2UgfVxuICAgIClbMF07XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXREYXRhYmFzZU1ldGhvZCgpO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gdGhpcy5fbG9nUXVlcnkodGhpcy5zcWwsIGRlYnVnLCBwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXM7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29ubiA9IHRoaXMuY29ubmVjdGlvbjtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtblR5cGVzID0ge307XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGV4ZWN1dGVTcWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzcWwuc3RhcnRzV2l0aChcIi0tIFwiKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImV4ZWNcIikge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY29ubi5leGVjKFxuICAgICAgICAgICAgICAgICAgW3sgc3FsOiBzZWxmLnNxbCwgYXJnczogW10gfV0sXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIChleGVjdXRpb25FcnJvciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgcmV0dXJuIFBSQUdNQSBJTkRFWF9MSVNUIGFuZCBJTkRFWF9JTkZPXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGB0aGlzYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgc3VjY2Vzc0NhbGxiYWNrID0gZnVuY3Rpb24oXywgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgLy8gYHNlbGZgIGlzIHBhc3NlZCBmcm9tIHNxbGl0ZSwgd2UgaGF2ZSBubyBjb250cm9sIG92ZXIgdGhpcy5cbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldID0gcmVzdWx0cy5pbnNlcnRJZDtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VzID0gcmVzdWx0cy5yb3dzQWZmZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzID0gcXVlcnkuY29udmVydFRvQXJyYXkocmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGRlYnVnKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKHNlbGYsIGNvbHVtblR5cGVzLCBlcnIpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBbXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgY29ubi5leGVjdXRlU3FsKFxuICAgICAgICAgICAgICAgIHNlbGYuc3FsLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2tcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgLypjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW5ub3QgdXNlIGFycm93IGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgYm91bmQgdG8gdGhlIHN0YXRlbWVudFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBgc2VsZmAgaXMgcGFzc2VkIGZyb20gc3FsaXRlLCB3ZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciB0aGlzLlxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXSA9IHJlc3VsdHMuaW5zZXJ0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZXMgPSByZXN1bHRzLnJvd3NBZmZlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShzZWxmLCBjb2x1bW5UeXBlcywgZXJyKSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25uLmV4ZWMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgICBzZWxmLnNxbCxcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGlmIChtZXRob2QgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgbGV0IHRhYmxlTmFtZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMudGFibGVOYW1lcykge1xuICAgICAgICAgIHRhYmxlTmFtZXMgPSB0aGlzLm9wdGlvbnMudGFibGVOYW1lcztcbiAgICAgICAgfSBlbHNlIGlmICgvRlJPTSBgKC4qPylgL2kuZXhlYyh0aGlzLnNxbCkpIHtcbiAgICAgICAgICB0YWJsZU5hbWVzLnB1c2goL0ZST00gYCguKj8pYC9pLmV4ZWModGhpcy5zcWwpWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSwgdGhlcmUncyBubyBuZWVkIHRvIGFzayBmb3IgaXQgYWdhaW5cbiAgICAgICAgdGFibGVOYW1lcyA9IHRhYmxlTmFtZXMuZmlsdGVyKFxuICAgICAgICAgIHRhYmxlTmFtZSA9PlxuICAgICAgICAgICAgISh0YWJsZU5hbWUgaW4gY29sdW1uVHlwZXMpICYmIHRhYmxlTmFtZSAhPT0gXCJzcWxpdGVfbWFzdGVyXCJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0YWJsZU5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBleGVjdXRlU3FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNxbENvbW1hbmRzID0gdGFibGVOYW1lcy5tYXAodGFibGVOYW1lID0+IHtcbiAgICAgICAgICAgICAgdGFibGVOYW1lID0gdGFibGVOYW1lLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtgUFJBR01BIHRhYmxlX2luZm8oXFxgJHt0YWJsZU5hbWV9XFxgKWAsIHRhYmxlTmFtZV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbm4uZXhlYyhcbiAgICAgICAgICAgICAgc3FsQ29tbWFuZHMubWFwKHNxbENtZCA9PiAoe1xuICAgICAgICAgICAgICAgIHNxbDogc3FsQ21kWzBdLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcWxDb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBzcWxDb21tYW5kc1tpXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0c1tpXS5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXVtyZXN1bHQubmFtZV0gPSByZXN1bHQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbm4udHJhbnNhY3Rpb24oZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICB0YWJsZU5hbWVzLmZvckVhY2goKHRhYmxlTmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgICBgU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyR7dGFibGVOYW1lfScgYW5kIHR5cGU9J3RhYmxlJ2AsXG4gICAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKF8sIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZSA9IHJlc3VsdC5yb3dzLml0ZW0oMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiIGluIHRhYmxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRhYmxlLnNxbCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgLy9tYXRjaCBjb2x1bW4gbmFtZSB3aXRoIGRhdGEgdHlwZXNcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGUuc3FsLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgLyhgXFx3K2ApKChcXHMoW0EtWl0rKSgoXFwoXFxkK1xcKSkpPykpL2dcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IGNvbHVtbiBuYW1lcyB3aXRoIGRhdGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtjb2xOYW1lLCBjb2xUeXBlXSA9IGNvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvYC9nLCBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXVtjb2xOYW1lXSA9IGNvbFR5cGUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbHVtblR5cGVzKVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRhYmxlTmFtZXMubGVuZ3RoIC0gMSkgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKF8sIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGFibGVOYW1lcy5sZW5ndGggLSAxKSByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oZXhlY3V0ZVNxbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhlY3V0ZVNxbCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcGFyc2VDb25zdHJhaW50c0Zyb21TcWwoc3FsKSB7XG4gICAgbGV0IGNvbnN0cmFpbnRzID0gc3FsLnNwbGl0KFwiQ09OU1RSQUlOVCBcIik7XG4gICAgbGV0IHJlZmVyZW5jZVRhYmxlTmFtZSwgcmVmZXJlbmNlVGFibGVLZXlzLCB1cGRhdGVBY3Rpb24sIGRlbGV0ZUFjdGlvbjtcbiAgICBjb25zdHJhaW50cy5zcGxpY2UoMCwgMSk7XG4gICAgY29uc3RyYWludHMgPSBjb25zdHJhaW50cy5tYXAoY29uc3RyYWludFNxbCA9PiB7XG4gICAgICAvL1BhcnNlIGZvcmVpZ24ga2V5IHNuaXBwZXRzXG4gICAgICBpZiAoY29uc3RyYWludFNxbC5pbmNsdWRlcyhcIlJFRkVSRU5DRVNcIikpIHtcbiAgICAgICAgLy9QYXJzZSBvdXQgdGhlIGNvbnN0cmFpbnQgY29uZGl0aW9uIGZvcm0gc3FsIHN0cmluZ1xuICAgICAgICB1cGRhdGVBY3Rpb24gPSBjb25zdHJhaW50U3FsLm1hdGNoKFxuICAgICAgICAgIC9PTiBVUERBVEUgKENBU0NBREV8U0VUIE5VTEx8UkVTVFJJQ1R8Tk8gQUNUSU9OfFNFVCBERUZBVUxUKXsxfS9cbiAgICAgICAgKTtcbiAgICAgICAgZGVsZXRlQWN0aW9uID0gY29uc3RyYWludFNxbC5tYXRjaChcbiAgICAgICAgICAvT04gREVMRVRFIChDQVNDQURFfFNFVCBOVUxMfFJFU1RSSUNUfE5PIEFDVElPTnxTRVQgREVGQVVMVCl7MX0vXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHVwZGF0ZUFjdGlvbikge1xuICAgICAgICAgIHVwZGF0ZUFjdGlvbiA9IHVwZGF0ZUFjdGlvblsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWxldGVBY3Rpb24pIHtcbiAgICAgICAgICBkZWxldGVBY3Rpb24gPSBkZWxldGVBY3Rpb25bMV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWZlcmVuY2VzUmVnZXggPSAvUkVGRVJFTkNFUy4rXFwoKD86W14pKF0rfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqXFwpLztcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlQ29uZGl0aW9ucyA9IGNvbnN0cmFpbnRTcWxcbiAgICAgICAgICAubWF0Y2gocmVmZXJlbmNlc1JlZ2V4KVswXVxuICAgICAgICAgIC5zcGxpdChcIiBcIik7XG4gICAgICAgIHJlZmVyZW5jZVRhYmxlTmFtZSA9IFV0aWxzLnJlbW92ZVRpY2tzKHJlZmVyZW5jZUNvbmRpdGlvbnNbMV0pO1xuICAgICAgICBsZXQgY29sdW1uTmFtZXMgPSByZWZlcmVuY2VDb25kaXRpb25zWzJdO1xuICAgICAgICBjb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzLnJlcGxhY2UoL1xcKHxcXCkvZywgXCJcIikuc3BsaXQoXCIsIFwiKTtcbiAgICAgICAgcmVmZXJlbmNlVGFibGVLZXlzID0gY29sdW1uTmFtZXMubWFwKGNvbHVtbiA9PlxuICAgICAgICAgIFV0aWxzLnJlbW92ZVRpY2tzKGNvbHVtbilcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29uc3RyYWludENvbmRpdGlvbiA9IGNvbnN0cmFpbnRTcWwubWF0Y2goXG4gICAgICAgIC9cXCgoPzpbXikoXSt8XFwoKD86W14pKF0rfFxcKFteKShdKlxcKSkqXFwpKSpcXCkvXG4gICAgICApWzBdO1xuICAgICAgY29uc3RyYWludFNxbCA9IGNvbnN0cmFpbnRTcWwucmVwbGFjZSgvXFwoLitcXCkvLCBcIlwiKTtcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBjb25zdHJhaW50U3FsLnNwbGl0KFwiIFwiKTtcblxuICAgICAgaWYgKGNvbnN0cmFpbnRbMV0gPT09IFwiUFJJTUFSWVwiIHx8IGNvbnN0cmFpbnRbMV0gPT09IFwiRk9SRUlHTlwiKSB7XG4gICAgICAgIGNvbnN0cmFpbnRbMV0gKz0gXCIgS0VZXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnN0cmFpbnROYW1lOiBVdGlscy5yZW1vdmVUaWNrcyhjb25zdHJhaW50WzBdKSxcbiAgICAgICAgY29uc3RyYWludFR5cGU6IGNvbnN0cmFpbnRbMV0sXG4gICAgICAgIHVwZGF0ZUFjdGlvbixcbiAgICAgICAgZGVsZXRlQWN0aW9uLFxuICAgICAgICBzcWw6IHNxbC5yZXBsYWNlKC9cIi9nLCBcImBcIiksIC8vU3FsaXRlIHJldHVybnMgZG91YmxlIHF1b3RlcyBmb3IgdGFibGUgbmFtZVxuICAgICAgICBjb25zdHJhaW50Q29uZGl0aW9uLFxuICAgICAgICByZWZlcmVuY2VUYWJsZU5hbWUsXG4gICAgICAgIHJlZmVyZW5jZVRhYmxlS2V5c1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgfVxuXG4gIGFwcGx5UGFyc2Vycyh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlLmluY2x1ZGVzKFwiKFwiKSkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBsZW5ndGggcGFydFxuICAgICAgdHlwZSA9IHR5cGUuc3Vic3RyKDAsIHR5cGUuaW5kZXhPZihcIihcIikpO1xuICAgIH1cbiAgICB0eXBlID0gdHlwZS5yZXBsYWNlKFwiVU5TSUdORURcIiwgXCJcIikucmVwbGFjZShcIlpFUk9GSUxMXCIsIFwiXCIpO1xuICAgIHR5cGUgPSB0eXBlLnRyaW0oKS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IHBhcnNlID0gcGFyc2VyU3RvcmUuZ2V0KHR5cGUpO1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiBwYXJzZSkge1xuICAgICAgcmV0dXJuIHBhcnNlKHZhbHVlLCB7IHRpbWV6b25lOiB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLnRpbWV6b25lIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmb3JtYXRFcnJvcihlcnIpIHtcbiAgICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgICBjYXNlIFwiU1FMSVRFX0NPTlNUUkFJTlRcIjoge1xuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoXCJGT1JFSUdOIEtFWSBjb25zdHJhaW50IGZhaWxlZFwiKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgc2VxdWVsaXplRXJyb3JzLkZvcmVpZ25LZXlDb25zdHJhaW50RXJyb3Ioe1xuICAgICAgICAgICAgcGFyZW50OiBlcnJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaWVsZHMgPSBbXTtcblxuICAgICAgICAvLyBTcWxpdGUgcHJlIDIuMiBiZWhhdmlvciAtIEVycm9yOiBTUUxJVEVfQ09OU1RSQUlOVDogY29sdW1ucyB4LCB5IGFyZSBub3QgdW5pcXVlXG4gICAgICAgIGxldCBtYXRjaCA9IGVyci5tZXNzYWdlLm1hdGNoKC9jb2x1bW5zICguKj8pIGFyZS8pO1xuICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwgJiYgbWF0Y2gubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBmaWVsZHMgPSBtYXRjaFsxXS5zcGxpdChcIiwgXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNxbGl0ZSBwb3N0IDIuMiBiZWhhdmlvciAtIEVycm9yOiBTUUxJVEVfQ09OU1RSQUlOVDogVU5JUVVFIGNvbnN0cmFpbnQgZmFpbGVkOiB0YWJsZS54LCB0YWJsZS55XG4gICAgICAgICAgbWF0Y2ggPSBlcnIubWVzc2FnZS5tYXRjaCgvVU5JUVVFIGNvbnN0cmFpbnQgZmFpbGVkOiAoLiopLyk7XG4gICAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmIG1hdGNoLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICBmaWVsZHMgPSBtYXRjaFsxXVxuICAgICAgICAgICAgICAuc3BsaXQoXCIsIFwiKVxuICAgICAgICAgICAgICAubWFwKGNvbHVtbldpdGhUYWJsZSA9PiBjb2x1bW5XaXRoVGFibGUuc3BsaXQoXCIuXCIpWzFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBcIlZhbGlkYXRpb24gZXJyb3JcIjtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgICAgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3JJdGVtKFxuICAgICAgICAgICAgICB0aGlzLmdldFVuaXF1ZUNvbnN0cmFpbnRFcnJvck1lc3NhZ2UoZmllbGQpLFxuICAgICAgICAgICAgICBcInVuaXF1ZSB2aW9sYXRpb25cIiwgLy8gc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvckl0ZW0uT3JpZ2lucy5EQixcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZVtmaWVsZF0sXG4gICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UsXG4gICAgICAgICAgICAgIFwibm90X3VuaXF1ZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICAgICAgXy5mb3JPd24odGhpcy5tb2RlbC51bmlxdWVLZXlzLCBjb25zdHJhaW50ID0+IHtcbiAgICAgICAgICAgIGlmIChfLmlzRXF1YWwoY29uc3RyYWludC5maWVsZHMsIGZpZWxkcykgJiYgISFjb25zdHJhaW50Lm1zZykge1xuICAgICAgICAgICAgICBtZXNzYWdlID0gY29uc3RyYWludC5tc2c7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgc2VxdWVsaXplRXJyb3JzLlVuaXF1ZUNvbnN0cmFpbnRFcnJvcih7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBlcnJvcnMsXG4gICAgICAgICAgcGFyZW50OiBlcnIsXG4gICAgICAgICAgZmllbGRzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY2FzZSBcIlNRTElURV9CVVNZXCI6XG4gICAgICAgIHJldHVybiBuZXcgc2VxdWVsaXplRXJyb3JzLlRpbWVvdXRFcnJvcihlcnIpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5EYXRhYmFzZUVycm9yKGVycik7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU2hvd0luZGV4ZXNRdWVyeShkYXRhKSB7XG4gICAgLy8gU3FsaXRlIHJldHVybnMgaW5kZXhlcyBzbyB0aGUgb25lIHRoYXQgd2FzIGRlZmluZWQgbGFzdCBpcyByZXR1cm5lZCBmaXJzdC4gTGV0cyByZXZlcnNlIHRoYXQhXG4gICAgcmV0dXJuIFByb21pc2UubWFwKGRhdGEucmV2ZXJzZSgpLCBpdGVtID0+IHtcbiAgICAgIGl0ZW0uZmllbGRzID0gW107XG4gICAgICBpdGVtLnByaW1hcnkgPSBmYWxzZTtcbiAgICAgIGl0ZW0udW5pcXVlID0gISFpdGVtLnVuaXF1ZTtcbiAgICAgIGl0ZW0uY29uc3RyYWludE5hbWUgPSBpdGVtLm5hbWU7XG4gICAgICByZXR1cm4gdGhpcy5ydW4oYFBSQUdNQSBJTkRFWF9JTkZPKFxcYCR7aXRlbS5uYW1lfVxcYClgKS50aGVuKGNvbHVtbnMgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgICAgaXRlbS5maWVsZHNbY29sdW1uLnNlcW5vXSA9IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG9yZGVyOiB1bmRlZmluZWRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFiYXNlTWV0aG9kKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BXCIpIHx8XG4gICAgICB0aGlzLnNxbC5pbmNsdWRlcyhcIkNPTU1JVFwiKSB8fFxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJST0xMQkFDS1wiKSB8fFxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJUUkFOU0FDVElPTlwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIFwiZXhlY1wiOyAvLyBOZWVkZWQgdG8gcnVuIG5vLW9wIHRyYW5zYWN0aW9uXG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuaXNJbnNlcnRRdWVyeSgpIHx8XG4gICAgICB0aGlzLmlzVXBkYXRlUXVlcnkoKSB8fFxuICAgICAgdGhpcy5pc0J1bGtVcGRhdGVRdWVyeSgpIHx8XG4gICAgICB0aGlzLnNxbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRVwiLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICB0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5CVUxLREVMRVRFXG4gICAgKSB7XG4gICAgICByZXR1cm4gXCJydW5cIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiYWxsXCI7XG4gIH1cbiAgY29udmVydFRvQXJyYXkocmVzdWx0cykge1xuICAgIGlmICghcmVzdWx0cy5yb3dzKSByZXR1cm4gW107XG4gICAgaWYgKFwiYXJyYXlcIiBpbiByZXN1bHRzIHx8IFwiX2FycmF5XCIgaW4gcmVzdWx0cy5yb3dzKVxuICAgICAgcmV0dXJuIHJlc3VsdHMuYXJyYXkgfHwgcmVzdWx0cy5yb3dzLl9hcnJheTtcbiAgICBpZiAoIXJlc3VsdHMucm93cy5pdGVtKSByZXR1cm4gcmVzdWx0cy5yb3dzO1xuICAgIGNvbnN0IGRhdGEgPSBuZXcgQXJyYXkocmVzdWx0cy5yb3dzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRhdGFbaV0gPSByZXN1bHRzLnJvd3MuaXRlbShpKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBRdWVyeTtcbm1vZHVsZS5leHBvcnRzLlF1ZXJ5ID0gUXVlcnk7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gUXVlcnk7XG4iXX0= \ No newline at end of file diff --git a/lib/dialects/sqlite/query.js b/lib/dialects/sqlite/query.js index 2b2fe3f..dbf95c1 100644 --- a/lib/dialects/sqlite/query.js +++ b/lib/dialects/sqlite/query.js @@ -297,7 +297,55 @@ class Query extends AbstractQuery { resolve(); } } else { - conn.transaction(function(t) { + var successCallback = function(_, results) { + try { + complete(); + // `self` is passed from sqlite, we have no control over this. + // eslint-disable-next-line no-invalid-this + if (results.rowsAffected) { + try { + self[self.getInsertIdField()] = results.insertId; + } catch (e) { + delete self[self.getInsertIdField()]; + } + } + self.changes = results.rowsAffected; + results = query.convertToArray(results); + resolve( + query._handleQueryResponse( + self, + columnTypes, + undefined, + results + ) + ); + return; + } catch (error) { + debug(error); + reject(error); + } + }; + // eslint-disable-next-line + var errorCallback = function(_, err) { + try { + complete(); + // `self` is passed from sqlite, we have no control over this. + // eslint-disable-next-line no-invalid-this + resolve(query._handleQueryResponse(self, columnTypes, err)); + } catch (error) { + reject(error); + } + }; + if (typeof conn.exec === "function") { + parameters = parameters || []; + } else parameters = []; + conn.executeSql( + self.sql, + parameters, + successCallback, + errorCallback + ); + /*conn.transaction(function(t) { // cannot use arrow function here because the function is bound to the statement // eslint-disable-next-line var successCallback = function(_, results) { @@ -348,7 +396,7 @@ class Query extends AbstractQuery { successCallback, errorCallback ); - }); + });*/ } }) ); From 1b848b5ccfa156cb2982b162f2b24e10625dba10 Mon Sep 17 00:00:00 2001 From: prih Date: Tue, 15 Dec 2020 13:53:10 +0200 Subject: [PATCH 6/8] executeSql --- dist/dialects/sqlite/query.js | 68 ++++++++++++++++++++++++++--------- lib/dialects/sqlite/query.js | 38 ++++++++++++++++++-- 2 files changed, 87 insertions(+), 19 deletions(-) diff --git a/dist/dialects/sqlite/query.js b/dist/dialects/sqlite/query.js index 5cf57ed..689c548 100644 --- a/dist/dialects/sqlite/query.js +++ b/dist/dialects/sqlite/query.js @@ -456,29 +456,63 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { resolve(); }); } else { - conn.transaction(function (t) { - tableNames.forEach((tableName, index) => { - t.executeSql(`SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, [], function (_, result) { - const table = result.rows.item(0); + tableNames.forEach((tableName, index) => { + conn.executeSql(`SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, [], function (_, result) { + const table = result.rows.item(0); - if (typeof table === "object" && "sql" in table && typeof table.sql === "string") { - columnTypes[tableName] = {}; //match column name with data types + if (typeof table === "object" && "sql" in table && typeof table.sql === "string") { + columnTypes[tableName] = {}; //match column name with data types - const columns = table.sql.match(/(`\w+`)((\s([A-Z]+)((\(\d+\)))?))/g); // split column names with data type + const columns = table.sql.match(/(`\w+`)((\s([A-Z]+)((\(\d+\)))?))/g); // split column names with data type - for (const col of columns) { - const [colName, colType] = col.trim().replace(/\s+/g, " ").replace(/`/g, "").split(" "); - columnTypes[tableName][colName] = colType.trim(); - } - } //console.log(columnTypes) + for (const col of columns) { + const [colName, colType] = col.trim().replace(/\s+/g, " ").replace(/`/g, "").split(" "); + columnTypes[tableName][colName] = colType.trim(); + } + } //console.log(columnTypes) - if (index === tableNames.length - 1) resolve(); - }, function (_, error) { - if (index === tableNames.length - 1) resolve(); - }); + if (index === tableNames.length - 1) resolve(); + }, function (_, error) { + if (index === tableNames.length - 1) resolve(); }); }); + /*conn.transaction(function(t) { + tableNames.forEach((tableName, index) => { + t.executeSql( + `SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, + [], + function(_, result) { + const table = result.rows.item(0); + if ( + typeof table === "object" && + "sql" in table && + typeof table.sql === "string" + ) { + columnTypes[tableName] = {}; + //match column name with data types + const columns = table.sql.match( + /(`\w+`)((\s([A-Z]+)((\(\d+\)))?))/g + ); + // split column names with data type + for (const col of columns) { + const [colName, colType] = col + .trim() + .replace(/\s+/g, " ") + .replace(/`/g, "") + .split(" "); + columnTypes[tableName][colName] = colType.trim(); + } + } + //console.log(columnTypes) + if (index === tableNames.length - 1) resolve(); + }, + function(_, error) { + if (index === tableNames.length - 1) resolve(); + } + ); + }); + });*/ } }).then(executeSql); } @@ -702,4 +736,4 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { module.exports = Query; module.exports.Query = Query; module.exports.default = Query; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnkuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIlByb21pc2UiLCJBYnN0cmFjdFF1ZXJ5IiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsInBhcnNlclN0b3JlIiwibG9nZ2VyIiwiZGVidWciLCJkZWJ1Z0NvbnRleHQiLCJnZXRNZXRob2RzIiwib2JqIiwicHJvcGVydGllcyIsIlNldCIsImN1cnJlbnRPYmoiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibWFwIiwiaXRlbSIsImFkZCIsImdldFByb3RvdHlwZU9mIiwia2V5cyIsImZpbHRlciIsIlF1ZXJ5IiwiaW5jbHVkZSIsInByZWZpeCIsInJldCIsIl9pbmNsdWRlIiwia2V5IiwiYXMiLCJtb2RlbCIsIm1lcmdlIiwiX2NvbGxlY3RNb2RlbHMiLCJtZXRhRGF0YSIsImNvbHVtblR5cGVzIiwiZXJyIiwicmVzdWx0cyIsInNxbCIsImZvcm1hdEVycm9yIiwicmVzdWx0IiwiaW5zdGFuY2UiLCJpc0luc2VydFF1ZXJ5IiwiaGFuZGxlSW5zZXJ0UXVlcnkiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsInJhd0F0dHJpYnV0ZXMiLCJzdGFydElkIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImNoYW5nZXMiLCJpIiwicHVzaCIsImZpZWxkIiwiaXNTaG93VGFibGVzUXVlcnkiLCJyb3ciLCJuYW1lIiwiaXNTaG93Q29uc3RyYWludHNRdWVyeSIsInBhcnNlQ29uc3RyYWludHNGcm9tU3FsIiwiaXNTZWxlY3RRdWVyeSIsIm9wdGlvbnMiLCJyYXciLCJoYW5kbGVTZWxlY3RRdWVyeSIsInByZWZpeGVzIiwibWFwVmFsdWVzIiwidmFsdWUiLCJpbmNsdWRlcyIsImxhc3RpbmQiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsInRvU3RyaW5nIiwicmVwbGFjZSIsInRhYmxlVHlwZXMiLCJmb3JPd24iLCJhdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseVBhcnNlcnMiLCJpc1Nob3dPckRlc2NyaWJlUXVlcnkiLCJoYW5kbGVTaG93SW5kZXhlc1F1ZXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiX3Jlc3VsdCIsImRmbHRfdmFsdWUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwiYWxsb3dOdWxsIiwibm90bnVsbCIsInByaW1hcnlLZXkiLCJwayIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsInZlcnNpb24iLCJSQVciLCJpc1VwZGF0ZVF1ZXJ5IiwicGFyYW1ldGVycyIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiYmluZCIsImRpYWxlY3QiLCJza2lwVW5lc2NhcGUiLCJtZXRob2QiLCJnZXREYXRhYmFzZU1ldGhvZCIsImNvbXBsZXRlIiwiX2xvZ1F1ZXJ5IiwicXVlcnkiLCJzZWxmIiwiY29ubiIsImNvbm5lY3Rpb24iLCJyZXNvbHZlIiwiZXhlY3V0ZVNxbCIsInN0YXJ0c1dpdGgiLCJyZWplY3QiLCJleGVjIiwiYXJncyIsImV4ZWN1dGlvbkVycm9yIiwiY29udmVydFRvQXJyYXkiLCJfaGFuZGxlUXVlcnlSZXNwb25zZSIsImVycm9yIiwic3VjY2Vzc0NhbGxiYWNrIiwicm93c0FmZmVjdGVkIiwiaW5zZXJ0SWQiLCJlIiwiZXJyb3JDYWxsYmFjayIsInRhYmxlTmFtZXMiLCJsZW5ndGgiLCJzcWxDb21tYW5kcyIsInNxbENtZCIsInJvd3MiLCJ0cmFuc2FjdGlvbiIsInQiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0YWJsZSIsImNvbHVtbnMiLCJtYXRjaCIsImNvbCIsImNvbE5hbWUiLCJjb2xUeXBlIiwidHJpbSIsInNwbGl0IiwidGhlbiIsImNvbnN0cmFpbnRzIiwicmVmZXJlbmNlVGFibGVOYW1lIiwicmVmZXJlbmNlVGFibGVLZXlzIiwidXBkYXRlQWN0aW9uIiwiZGVsZXRlQWN0aW9uIiwic3BsaWNlIiwiY29uc3RyYWludFNxbCIsInJlZmVyZW5jZXNSZWdleCIsInJlZmVyZW5jZUNvbmRpdGlvbnMiLCJyZW1vdmVUaWNrcyIsImNvbHVtbk5hbWVzIiwiY29sdW1uIiwiY29uc3RyYWludENvbmRpdGlvbiIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNvbnN0cmFpbnRUeXBlIiwiaW5kZXhPZiIsInRvVXBwZXJDYXNlIiwicGFyc2UiLCJnZXQiLCJ0aW1lem9uZSIsInNlcXVlbGl6ZSIsImNvZGUiLCJtZXNzYWdlIiwiRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvciIsInBhcmVudCIsImZpZWxkcyIsImNvbHVtbldpdGhUYWJsZSIsImVycm9ycyIsIlZhbGlkYXRpb25FcnJvckl0ZW0iLCJnZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlIiwidW5pcXVlS2V5cyIsImlzRXF1YWwiLCJtc2ciLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJEYXRhYmFzZUVycm9yIiwiZGF0YSIsInJldmVyc2UiLCJwcmltYXJ5IiwidW5pcXVlIiwicnVuIiwic2Vxbm8iLCJvcmRlciIsImlzQnVsa1VwZGF0ZVF1ZXJ5IiwidG9Mb3dlckNhc2UiLCJhcnJheSIsIl9hcnJheSIsInZhbHVlcyIsImJpbmRQYXJhbSIsInYiLCJza2lwVmFsdWVSZXBsYWNlIiwiayIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1HLGFBQWEsR0FBR0gsT0FBTyxDQUFDLG1CQUFELENBQTdCOztB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QTNCO0FBQ0Q7QUFDRjs7QUFDRGhLLFFBQUFBLEdBQUcsR0FBR2xDLGFBQWEsQ0FBQ2lHLG9CQUFkLENBQW1DL0QsR0FBbkMsRUFBd0M0SixNQUF4QyxFQUFnRDNGLE9BQWhELEVBQXlEO0FBQzdEOEYsVUFBQUEsZ0JBQWdCLEVBQUU7QUFEMkMsU0FBekQsRUFFSCxDQUZHLENBQU47QUFHRDs7QUFDRCxhQUFPLENBQUMvSixHQUFELEVBQU02SixTQUFOLENBQVA7QUFDRDs7OztFQW5DaUIvTCxhOztBQXVwQnBCbU0sTUFBTSxDQUFDQyxPQUFQLEdBQWlCaEwsS0FBakI7QUFDQStLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlaEwsS0FBZixHQUF1QkEsS0FBdkI7QUFDQStLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCakwsS0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZVwiKTtcbmNvbnN0IEFic3RyYWN0UXVlcnkgPSByZXF1aXJlKFwiLi4vYWJzdHJhY3QvcXVlcnlcIik7XG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3F1ZXJ5LXR5cGVzXCIpO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dnZXJcIik7XG5cbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcInNxbDpzcWxpdGVcIik7XG5jb25zdCBnZXRNZXRob2RzID0gb2JqID0+IHtcbiAgbGV0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG4gIGxldCBjdXJyZW50T2JqID0gb2JqO1xuICBkbyB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudE9iaikubWFwKGl0ZW0gPT4gcHJvcGVydGllcy5hZGQoaXRlbSkpO1xuICB9IHdoaWxlICgoY3VycmVudE9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50T2JqKSkpO1xuICByZXR1cm4gWy4uLnByb3BlcnRpZXMua2V5cygpXS5maWx0ZXIoaXRlbSA9PiB0eXBlb2Ygb2JqW2l0ZW1dID09PSBcImZ1bmN0aW9uXCIpO1xufTtcbmNsYXNzIFF1ZXJ5IGV4dGVuZHMgQWJzdHJhY3RRdWVyeSB7XG4gIGdldEluc2VydElkRmllbGQoKSB7XG4gICAgcmV0dXJuIFwibGFzdElEXCI7XG4gIH1cblxuICAvKipcbiAgICogcmV3cml0ZSBxdWVyeSB3aXRoIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlhbGVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0KSB7XG4gICAgbGV0IGJpbmRQYXJhbTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICAgIGJpbmRQYXJhbVtgJCR7aSArIDF9YF0gPSB2O1xuICAgICAgfSk7XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpKSB7XG4gICAgICAgICAgYmluZFBhcmFtW2AkJHtrfWBdID0gdmFsdWVzW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH1cbiAgICByZXR1cm4gW3NxbCwgYmluZFBhcmFtXTtcbiAgfVxuXG4gIF9jb2xsZWN0TW9kZWxzKGluY2x1ZGUsIHByZWZpeCkge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuXG4gICAgaWYgKGluY2x1ZGUpIHtcbiAgICAgIGZvciAoY29uc3QgX2luY2x1ZGUgb2YgaW5jbHVkZSkge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBpZiAoIXByZWZpeCkge1xuICAgICAgICAgIGtleSA9IF9pbmNsdWRlLmFzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IGAke3ByZWZpeH0uJHtfaW5jbHVkZS5hc31gO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXldID0gX2luY2x1ZGUubW9kZWw7XG5cbiAgICAgICAgaWYgKF9pbmNsdWRlLmluY2x1ZGUpIHtcbiAgICAgICAgICBfLm1lcmdlKHJldCwgdGhpcy5fY29sbGVjdE1vZGVscyhfaW5jbHVkZS5pbmNsdWRlLCBrZXkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBfaGFuZGxlUXVlcnlSZXNwb25zZShtZXRhRGF0YSwgY29sdW1uVHlwZXMsIGVyciwgcmVzdWx0cykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci5zcWwgPSB0aGlzLnNxbDtcbiAgICAgIHRocm93IHRoaXMuZm9ybWF0RXJyb3IoZXJyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuaW5zdGFuY2U7XG4gICAgLy8gYWRkIHRoZSBpbnNlcnRlZCByb3cgaWQgdG8gdGhlIGluc3RhbmNlXG4gICAgaWYgKHRoaXMuaXNJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5zZXJ0UXVlcnkocmVzdWx0cywgbWV0YURhdGEpO1xuICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgIC8vIGhhbmRsZSBidWxrQ3JlYXRlIEFJIHByaW1hcnkga2V5XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvKiAgbWV0YURhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdGF0ZW1lbnRcIiAmJiAqL1xuICAgICAgICAgIHRoaXMubW9kZWwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgPT09XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzdGFydElkID1cbiAgICAgICAgICAgIG1ldGFEYXRhW3RoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpXSAtIG1ldGFEYXRhLmNoYW5nZXMgKyAxO1xuXG4gICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SWQ7IGkgPCBzdGFydElkICsgbWV0YURhdGEuY2hhbmdlczsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgIFt0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICAgICAgICAgIC5maWVsZF06IGlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBtZXRhRGF0YVt0aGlzLmdldEluc2VydElkRmllbGQoKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Nob3dUYWJsZXNRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAocm93ID0+IHJvdy5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93Q29uc3RyYWludHNRdWVyeSgpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRzO1xuICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnNxbCkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHJlc3VsdHNbMF0uc3FsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0UXVlcnkoKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYXcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VsZWN0UXVlcnkocmVzdWx0cyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGlzIGEgbWFwIG9mIHByZWZpeCBzdHJpbmdzIHRvIG1vZGVscywgZS5nLiB1c2VyLnByb2plY3RzIC0+IFByb2plY3QgbW9kZWxcbiAgICAgIGNvbnN0IHByZWZpeGVzID0gdGhpcy5fY29sbGVjdE1vZGVscyh0aGlzLm9wdGlvbnMuaW5jbHVkZSk7XG5cbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMocmVzdWx0LCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0aW5kID0gbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG5cbiAgICAgICAgICAgIG1vZGVsID0gcHJlZml4ZXNbbmFtZS5zdWJzdHIoMCwgbGFzdGluZCldO1xuXG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIobGFzdGluZCArIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IHRoaXMub3B0aW9ucy5tb2RlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbFxuICAgICAgICAgICAgLmdldFRhYmxlTmFtZSgpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgY29uc3QgdGFibGVUeXBlcyA9IGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gfHwge307XG5cbiAgICAgICAgICBpZiAodGFibGVUeXBlcyAmJiAhKG5hbWUgaW4gdGFibGVUeXBlcykpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb2x1bW4gaXMgYWxpYXNlZFxuICAgICAgICAgICAgXy5mb3JPd24obW9kZWwucmF3QXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSBrZXkgJiYgYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJpYnV0ZS5maWVsZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFibGVUeXBlcywgbmFtZSlcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVBhcnNlcnModGFibGVUeXBlc1tuYW1lXSwgdmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZWxlY3RRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93T3JEZXNjcmliZVF1ZXJ5KCkpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgSU5ERVhfTElTVFwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2hvd0luZGV4ZXNRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIElOREVYX0lORk9cIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgVEFCTEVfSU5GT1wiKSkge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgc3FsaXRlIHdheSBvZiBnZXR0aW5nIHRoZSBtZXRhZGF0YSBvZiBhIHRhYmxlXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgZm9yIChjb25zdCBfcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAoX3Jlc3VsdC5kZmx0X3ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDb2x1bW4gc2NoZW1hIG9taXRzIGFueSBcIkRFRkFVTFQgLi4uXCJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9yZXN1bHQuZGZsdF92YWx1ZSA9PT0gXCJOVUxMXCIpIHtcbiAgICAgICAgICAgIC8vIENvbHVtbiBzY2hlbWEgaXMgYSBcIkRFRkFVTFQgTlVMTFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVzdWx0LmRmbHRfdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBfcmVzdWx0LnR5cGUsXG4gICAgICAgICAgICBhbGxvd051bGw6IF9yZXN1bHQubm90bnVsbCA9PT0gMCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IF9yZXN1bHQucGsgIT09IDBcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlc3VsdFtfcmVzdWx0Lm5hbWVdLnR5cGUgPT09IFwiVElOWUlOVCgxKVwiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSB7IFwiMFwiOiBmYWxzZSwgXCIxXCI6IHRydWUgfVtcbiAgICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSByZXN1bHRbXG4gICAgICAgICAgICAgIF9yZXN1bHQubmFtZVxuICAgICAgICAgICAgXS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvJy9nLCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5cztcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgZm9yZWlnbl9rZXlzXCIpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5X2xpc3RcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBbUXVlcnlUeXBlcy5CVUxLVVBEQVRFLCBRdWVyeVR5cGVzLkJVTEtERUxFVEVdLmluY2x1ZGVzKHRoaXMub3B0aW9ucy50eXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuIG1ldGFEYXRhLmNoYW5nZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5VUFNFUlQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5WRVJTSU9OKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1swXS52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuUkFXKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdHMsIG1ldGFEYXRhXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVRdWVyeSgpIHx8IHRoaXMuaXNJbnNlcnRRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0YURhdGEuY2hhbmdlc107XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gd2Vic3FsIDogcG9seWZpbGwgZm9yZWlnbiBrZXkgaHR0cHM6Ly9qdXN0YXRoZW9yeS5jb20vMjAwNC8xMS9zcWxpdGUtZm9yZWlnbi1rZXktdHJpZ2dlcnMvXG4gIHJ1bihzcWwsIHBhcmFtZXRlcnMpIHtcbiAgICAvLyBleGVjIGRvZXMgbm90IHN1cHBvcnQgYmluZCBwYXJhbWV0ZXJcbiAgICB0aGlzLnNxbCA9IEFic3RyYWN0UXVlcnkuZm9ybWF0QmluZFBhcmFtZXRlcnMoXG4gICAgICBzcWwsXG4gICAgICB0aGlzLm9wdGlvbnMuYmluZCxcbiAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0IHx8IFwic3FsaXRlXCIsXG4gICAgICB7IHNraXBVbmVzY2FwZTogZmFsc2UgfVxuICAgIClbMF07XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXREYXRhYmFzZU1ldGhvZCgpO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gdGhpcy5fbG9nUXVlcnkodGhpcy5zcWwsIGRlYnVnLCBwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXM7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29ubiA9IHRoaXMuY29ubmVjdGlvbjtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtblR5cGVzID0ge307XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGV4ZWN1dGVTcWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzcWwuc3RhcnRzV2l0aChcIi0tIFwiKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImV4ZWNcIikge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY29ubi5leGVjKFxuICAgICAgICAgICAgICAgICAgW3sgc3FsOiBzZWxmLnNxbCwgYXJnczogW10gfV0sXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIChleGVjdXRpb25FcnJvciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgcmV0dXJuIFBSQUdNQSBJTkRFWF9MSVNUIGFuZCBJTkRFWF9JTkZPXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGB0aGlzYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgc3VjY2Vzc0NhbGxiYWNrID0gZnVuY3Rpb24oXywgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgLy8gYHNlbGZgIGlzIHBhc3NlZCBmcm9tIHNxbGl0ZSwgd2UgaGF2ZSBubyBjb250cm9sIG92ZXIgdGhpcy5cbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldID0gcmVzdWx0cy5pbnNlcnRJZDtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VzID0gcmVzdWx0cy5yb3dzQWZmZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzID0gcXVlcnkuY29udmVydFRvQXJyYXkocmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGRlYnVnKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKHNlbGYsIGNvbHVtblR5cGVzLCBlcnIpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBbXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgY29ubi5leGVjdXRlU3FsKFxuICAgICAgICAgICAgICAgIHNlbGYuc3FsLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2tcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgLypjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW5ub3QgdXNlIGFycm93IGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgYm91bmQgdG8gdGhlIHN0YXRlbWVudFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBgc2VsZmAgaXMgcGFzc2VkIGZyb20gc3FsaXRlLCB3ZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciB0aGlzLlxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXSA9IHJlc3VsdHMuaW5zZXJ0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZXMgPSByZXN1bHRzLnJvd3NBZmZlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShzZWxmLCBjb2x1bW5UeXBlcywgZXJyKSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25uLmV4ZWMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgICBzZWxmLnNxbCxcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGlmIChtZXRob2QgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgbGV0IHRhYmxlTmFtZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMudGFibGVOYW1lcykge1xuICAgICAgICAgIHRhYmxlTmFtZXMgPSB0aGlzLm9wdGlvbnMudGFibGVOYW1lcztcbiAgICAgICAgfSBlbHNlIGlmICgvRlJPTSBgKC4qPylgL2kuZXhlYyh0aGlzLnNxbCkpIHtcbiAgICAgICAgICB0YWJsZU5hbWVzLnB1c2goL0ZST00gYCguKj8pYC9pLmV4ZWModGhpcy5zcWwpWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSwgdGhlcmUncyBubyBuZWVkIHRvIGFzayBmb3IgaXQgYWdhaW5cbiAgICAgICAgdGFibGVOYW1lcyA9IHRhYmxlTmFtZXMuZmlsdGVyKFxuICAgICAgICAgIHRhYmxlTmFtZSA9PlxuICAgICAgICAgICAgISh0YWJsZU5hbWUgaW4gY29sdW1uVHlwZXMpICYmIHRhYmxlTmFtZSAhPT0gXCJzcWxpdGVfbWFzdGVyXCJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0YWJsZU5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBleGVjdXRlU3FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNxbENvbW1hbmRzID0gdGFibGVOYW1lcy5tYXAodGFibGVOYW1lID0+IHtcbiAgICAgICAgICAgICAgdGFibGVOYW1lID0gdGFibGVOYW1lLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtgUFJBR01BIHRhYmxlX2luZm8oXFxgJHt0YWJsZU5hbWV9XFxgKWAsIHRhYmxlTmFtZV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbm4uZXhlYyhcbiAgICAgICAgICAgICAgc3FsQ29tbWFuZHMubWFwKHNxbENtZCA9PiAoe1xuICAgICAgICAgICAgICAgIHNxbDogc3FsQ21kWzBdLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcWxDb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBzcWxDb21tYW5kc1tpXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0c1tpXS5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXVtyZXN1bHQubmFtZV0gPSByZXN1bHQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbm4udHJhbnNhY3Rpb24oZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICB0YWJsZU5hbWVzLmZvckVhY2goKHRhYmxlTmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgICBgU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JyR7dGFibGVOYW1lfScgYW5kIHR5cGU9J3RhYmxlJ2AsXG4gICAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKF8sIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZSA9IHJlc3VsdC5yb3dzLml0ZW0oMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiIGluIHRhYmxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRhYmxlLnNxbCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgLy9tYXRjaCBjb2x1bW4gbmFtZSB3aXRoIGRhdGEgdHlwZXNcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGUuc3FsLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgLyhgXFx3K2ApKChcXHMoW0EtWl0rKSgoXFwoXFxkK1xcKSkpPykpL2dcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IGNvbHVtbiBuYW1lcyB3aXRoIGRhdGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtjb2xOYW1lLCBjb2xUeXBlXSA9IGNvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvYC9nLCBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXVtjb2xOYW1lXSA9IGNvbFR5cGUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbHVtblR5cGVzKVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRhYmxlTmFtZXMubGVuZ3RoIC0gMSkgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKF8sIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGFibGVOYW1lcy5sZW5ndGggLSAxKSByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oZXhlY3V0ZVNxbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhlY3V0ZVNxbCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcGFyc2VDb25zdHJhaW50c0Zyb21TcWwoc3FsKSB7XG4gICAgbGV0IGNvbnN0cmFpbnRzID0gc3FsLnNwbGl0KFwiQ09OU1RSQUlOVCBcIik7XG4gICAgbGV0IHJlZmVyZW5jZVRhYmxlTmFtZSwgcmVmZXJlbmNlVGFibGVLZXlzLCB1cGRhdGVBY3Rpb24sIGRlbGV0ZUFjdGlvbjtcbiAgICBjb25zdHJhaW50cy5zcGxpY2UoMCwgMSk7XG4gICAgY29uc3RyYWludHMgPSBjb25zdHJhaW50cy5tYXAoY29uc3RyYWludFNxbCA9PiB7XG4gICAgICAvL1BhcnNlIGZvcmVpZ24ga2V5IHNuaXBwZXRzXG4gICAgICBpZiAoY29uc3RyYWludFNxbC5pbmNsdWRlcyhcIlJFRkVSRU5DRVNcIikpIHtcbiAgICAgICAgLy9QYXJzZSBvdXQgdGhlIGNvbnN0cmFpbnQgY29uZGl0aW9uIGZvcm0gc3FsIHN0cmluZ1xuICAgICAgICB1cGRhdGVBY3Rpb24gPSBjb25zdHJhaW50U3FsLm1hdGNoKFxuICAgICAgICAgIC9PTiBVUERBVEUgKENBU0NBREV8U0VUIE5VTEx8UkVTVFJJQ1R8Tk8gQUNUSU9OfFNFVCBERUZBVUxUKXsxfS9cbiAgICAgICAgKTtcbiAgICAgICAgZGVsZXRlQWN0aW9uID0gY29uc3RyYWludFNxbC5tYXRjaChcbiAgICAgICAgICAvT04gREVMRVRFIChDQVNDQURFfFNFVCBOVUxMfFJFU1RSSUNUfE5PIEFDVElPTnxTRVQgREVGQVVMVCl7MX0vXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHVwZGF0ZUFjdGlvbikge1xuICAgICAgICAgIHVwZGF0ZUFjdGlvbiA9IHVwZGF0ZUFjdGlvblsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWxldGVBY3Rpb24pIHtcbiAgICAgICAgICBkZWxldGVBY3Rpb24gPSBkZWxldGVBY3Rpb25bMV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWZlcmVuY2VzUmVnZXggPSAvUkVGRVJFTkNFUy4rXFwoKD86W14pKF0rfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqXFwpLztcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlQ29uZGl0aW9ucyA9IGNvbnN0cmFpbnRTcWxcbiAgICAgICAgICAubWF0Y2gocmVmZXJlbmNlc1JlZ2V4KVswXVxuICAgICAgICAgIC5zcGxpdChcIiBcIik7XG4gICAgICAgIHJlZmVyZW5jZVRhYmxlTmFtZSA9IFV0aWxzLnJlbW92ZVRpY2tzKHJlZmVyZW5jZUNvbmRpdGlvbnNbMV0pO1xuICAgICAgICBsZXQgY29sdW1uTmFtZXMgPSByZWZlcmVuY2VDb25kaXRpb25zWzJdO1xuICAgICAgICBjb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzLnJlcGxhY2UoL1xcKHxcXCkvZywgXCJcIikuc3BsaXQoXCIsIFwiKTtcbiAgICAgICAgcmVmZXJlbmNlVGFibGVLZXlzID0gY29sdW1uTmFtZXMubWFwKGNvbHVtbiA9PlxuICAgICAgICAgIFV0aWxzLnJlbW92ZVRpY2tzKGNvbHVtbilcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29uc3RyYWludENvbmRpdGlvbiA9IGNvbnN0cmFpbnRTcWwubWF0Y2goXG4gICAgICAgIC9cXCgoPzpbXikoXSt8XFwoKD86W14pKF0rfFxcKFteKShdKlxcKSkqXFwpKSpcXCkvXG4gICAgICApWzBdO1xuICAgICAgY29uc3RyYWludFNxbCA9IGNvbnN0cmFpbnRTcWwucmVwbGFjZSgvXFwoLitcXCkvLCBcIlwiKTtcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBjb25zdHJhaW50U3FsLnNwbGl0KFwiIFwiKTtcblxuICAgICAgaWYgKGNvbnN0cmFpbnRbMV0gPT09IFwiUFJJTUFSWVwiIHx8IGNvbnN0cmFpbnRbMV0gPT09IFwiRk9SRUlHTlwiKSB7XG4gICAgICAgIGNvbnN0cmFpbnRbMV0gKz0gXCIgS0VZXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnN0cmFpbnROYW1lOiBVdGlscy5yZW1vdmVUaWNrcyhjb25zdHJhaW50WzBdKSxcbiAgICAgICAgY29uc3RyYWludFR5cGU6IGNvbnN0cmFpbnRbMV0sXG4gICAgICAgIHVwZGF0ZUFjdGlvbixcbiAgICAgICAgZGVsZXRlQWN0aW9uLFxuICAgICAgICBzcWw6IHNxbC5yZXBsYWNlKC9cIi9nLCBcImBcIiksIC8vU3FsaXRlIHJldHVybnMgZG91YmxlIHF1b3RlcyBmb3IgdGFibGUgbmFtZVxuICAgICAgICBjb25zdHJhaW50Q29uZGl0aW9uLFxuICAgICAgICByZWZlcmVuY2VUYWJsZU5hbWUsXG4gICAgICAgIHJlZmVyZW5jZVRhYmxlS2V5c1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgfVxuXG4gIGFwcGx5UGFyc2Vycyh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlLmluY2x1ZGVzKFwiKFwiKSkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBsZW5ndGggcGFydFxuICAgICAgdHlwZSA9IHR5cGUuc3Vic3RyKDAsIHR5cGUuaW5kZXhPZihcIihcIikpO1xuICAgIH1cbiAgICB0eXBlID0gdHlwZS5yZXBsYWNlKFwiVU5TSUdORURcIiwgXCJcIikucmVwbGFjZShcIlpFUk9GSUxMXCIsIFwiXCIpO1xuICAgIHR5cGUgPSB0eXBlLnRyaW0oKS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IHBhcnNlID0gcGFyc2VyU3RvcmUuZ2V0KHR5cGUpO1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiBwYXJzZSkge1xuICAgICAgcmV0dXJuIHBhcnNlKHZhbHVlLCB7IHRpbWV6b25lOiB0aGlzLnNlcXVlbGl6ZS5vcHRpb25zLnRpbWV6b25lIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmb3JtYXRFcnJvcihlcnIpIHtcbiAgICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgICBjYXNlIFwiU1FMSVRFX0NPTlNUUkFJTlRcIjoge1xuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoXCJGT1JFSUdOIEtFWSBjb25zdHJhaW50IGZhaWxlZFwiKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgc2VxdWVsaXplRXJyb3JzLkZvcmVpZ25LZXlDb25zdHJhaW50RXJyb3Ioe1xuICAgICAgICAgICAgcGFyZW50OiBlcnJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaWVsZHMgPSBbXTtcblxuICAgICAgICAvLyBTcWxpdGUgcHJlIDIuMiBiZWhhdmlvciAtIEVycm9yOiBTUUxJVEVfQ09OU1RSQUlOVDogY29sdW1ucyB4LCB5IGFyZSBub3QgdW5pcXVlXG4gICAgICAgIGxldCBtYXRjaCA9IGVyci5tZXNzYWdlLm1hdGNoKC9jb2x1bW5zICguKj8pIGFyZS8pO1xuICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwgJiYgbWF0Y2gubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBmaWVsZHMgPSBtYXRjaFsxXS5zcGxpdChcIiwgXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNxbGl0ZSBwb3N0IDIuMiBiZWhhdmlvciAtIEVycm9yOiBTUUxJVEVfQ09OU1RSQUlOVDogVU5JUVVFIGNvbnN0cmFpbnQgZmFpbGVkOiB0YWJsZS54LCB0YWJsZS55XG4gICAgICAgICAgbWF0Y2ggPSBlcnIubWVzc2FnZS5tYXRjaCgvVU5JUVVFIGNvbnN0cmFpbnQgZmFpbGVkOiAoLiopLyk7XG4gICAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmIG1hdGNoLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICBmaWVsZHMgPSBtYXRjaFsxXVxuICAgICAgICAgICAgICAuc3BsaXQoXCIsIFwiKVxuICAgICAgICAgICAgICAubWFwKGNvbHVtbldpdGhUYWJsZSA9PiBjb2x1bW5XaXRoVGFibGUuc3BsaXQoXCIuXCIpWzFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBcIlZhbGlkYXRpb24gZXJyb3JcIjtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgICAgbmV3IHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3JJdGVtKFxuICAgICAgICAgICAgICB0aGlzLmdldFVuaXF1ZUNvbnN0cmFpbnRFcnJvck1lc3NhZ2UoZmllbGQpLFxuICAgICAgICAgICAgICBcInVuaXF1ZSB2aW9sYXRpb25cIiwgLy8gc2VxdWVsaXplRXJyb3JzLlZhbGlkYXRpb25FcnJvckl0ZW0uT3JpZ2lucy5EQixcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZVtmaWVsZF0sXG4gICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UsXG4gICAgICAgICAgICAgIFwibm90X3VuaXF1ZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICAgICAgXy5mb3JPd24odGhpcy5tb2RlbC51bmlxdWVLZXlzLCBjb25zdHJhaW50ID0+IHtcbiAgICAgICAgICAgIGlmIChfLmlzRXF1YWwoY29uc3RyYWludC5maWVsZHMsIGZpZWxkcykgJiYgISFjb25zdHJhaW50Lm1zZykge1xuICAgICAgICAgICAgICBtZXNzYWdlID0gY29uc3RyYWludC5tc2c7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgc2VxdWVsaXplRXJyb3JzLlVuaXF1ZUNvbnN0cmFpbnRFcnJvcih7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBlcnJvcnMsXG4gICAgICAgICAgcGFyZW50OiBlcnIsXG4gICAgICAgICAgZmllbGRzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY2FzZSBcIlNRTElURV9CVVNZXCI6XG4gICAgICAgIHJldHVybiBuZXcgc2VxdWVsaXplRXJyb3JzLlRpbWVvdXRFcnJvcihlcnIpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5EYXRhYmFzZUVycm9yKGVycik7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU2hvd0luZGV4ZXNRdWVyeShkYXRhKSB7XG4gICAgLy8gU3FsaXRlIHJldHVybnMgaW5kZXhlcyBzbyB0aGUgb25lIHRoYXQgd2FzIGRlZmluZWQgbGFzdCBpcyByZXR1cm5lZCBmaXJzdC4gTGV0cyByZXZlcnNlIHRoYXQhXG4gICAgcmV0dXJuIFByb21pc2UubWFwKGRhdGEucmV2ZXJzZSgpLCBpdGVtID0+IHtcbiAgICAgIGl0ZW0uZmllbGRzID0gW107XG4gICAgICBpdGVtLnByaW1hcnkgPSBmYWxzZTtcbiAgICAgIGl0ZW0udW5pcXVlID0gISFpdGVtLnVuaXF1ZTtcbiAgICAgIGl0ZW0uY29uc3RyYWludE5hbWUgPSBpdGVtLm5hbWU7XG4gICAgICByZXR1cm4gdGhpcy5ydW4oYFBSQUdNQSBJTkRFWF9JTkZPKFxcYCR7aXRlbS5uYW1lfVxcYClgKS50aGVuKGNvbHVtbnMgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgICAgaXRlbS5maWVsZHNbY29sdW1uLnNlcW5vXSA9IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG9yZGVyOiB1bmRlZmluZWRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFiYXNlTWV0aG9kKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BXCIpIHx8XG4gICAgICB0aGlzLnNxbC5pbmNsdWRlcyhcIkNPTU1JVFwiKSB8fFxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJST0xMQkFDS1wiKSB8fFxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJUUkFOU0FDVElPTlwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIFwiZXhlY1wiOyAvLyBOZWVkZWQgdG8gcnVuIG5vLW9wIHRyYW5zYWN0aW9uXG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuaXNJbnNlcnRRdWVyeSgpIHx8XG4gICAgICB0aGlzLmlzVXBkYXRlUXVlcnkoKSB8fFxuICAgICAgdGhpcy5pc0J1bGtVcGRhdGVRdWVyeSgpIHx8XG4gICAgICB0aGlzLnNxbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRVwiLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICB0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5CVUxLREVMRVRFXG4gICAgKSB7XG4gICAgICByZXR1cm4gXCJydW5cIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiYWxsXCI7XG4gIH1cbiAgY29udmVydFRvQXJyYXkocmVzdWx0cykge1xuICAgIGlmICghcmVzdWx0cy5yb3dzKSByZXR1cm4gW107XG4gICAgaWYgKFwiYXJyYXlcIiBpbiByZXN1bHRzIHx8IFwiX2FycmF5XCIgaW4gcmVzdWx0cy5yb3dzKVxuICAgICAgcmV0dXJuIHJlc3VsdHMuYXJyYXkgfHwgcmVzdWx0cy5yb3dzLl9hcnJheTtcbiAgICBpZiAoIXJlc3VsdHMucm93cy5pdGVtKSByZXR1cm4gcmVzdWx0cy5yb3dzO1xuICAgIGNvbnN0IGRhdGEgPSBuZXcgQXJyYXkocmVzdWx0cy5yb3dzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRhdGFbaV0gPSByZXN1bHRzLnJvd3MuaXRlbShpKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBRdWVyeTtcbm1vZHVsZS5leHBvcnRzLlF1ZXJ5ID0gUXVlcnk7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gUXVlcnk7XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnkuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIlByb21pc2UiLCJBYnN0cmFjdFF1ZXJ5IiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsInBhcnNlclN0b3JlIiwibG9nZ2VyIiwiZGVidWciLCJkZWJ1Z0NvbnRleHQiLCJnZXRNZXRob2RzIiwib2JqIiwicHJvcGVydGllcyIsIlNldCIsImN1cnJlbnRPYmoiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibWFwIiwiaXRlbSIsImFkZCIsImdldFByb3RvdHlwZU9mIiwia2V5cyIsImZpbHRlciIsIlF1ZXJ5IiwiaW5jbHVkZSIsInByZWZpeCIsInJldCIsIl9pbmNsdWRlIiwia2V5IiwiYXMiLCJtb2RlbCIsIm1lcmdlIiwiX2NvbGxlY3RNb2RlbHMiLCJtZXRhRGF0YSIsImNvbHVtblR5cGVzIiwiZXJyIiwicmVzdWx0cyIsInNxbCIsImZvcm1hdEVycm9yIiwicmVzdWx0IiwiaW5zdGFuY2UiLCJpc0luc2VydFF1ZXJ5IiwiaGFuZGxlSW5zZXJ0UXVlcnkiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsInJhd0F0dHJpYnV0ZXMiLCJzdGFydElkIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImNoYW5nZXMiLCJpIiwicHVzaCIsImZpZWxkIiwiaXNTaG93VGFibGVzUXVlcnkiLCJyb3ciLCJuYW1lIiwiaXNTaG93Q29uc3RyYWludHNRdWVyeSIsInBhcnNlQ29uc3RyYWludHNGcm9tU3FsIiwiaXNTZWxlY3RRdWVyeSIsIm9wdGlvbnMiLCJyYXciLCJoYW5kbGVTZWxlY3RRdWVyeSIsInByZWZpeGVzIiwibWFwVmFsdWVzIiwidmFsdWUiLCJpbmNsdWRlcyIsImxhc3RpbmQiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsInRvU3RyaW5nIiwicmVwbGFjZSIsInRhYmxlVHlwZXMiLCJmb3JPd24iLCJhdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseVBhcnNlcnMiLCJpc1Nob3dPckRlc2NyaWJlUXVlcnkiLCJoYW5kbGVTaG93SW5kZXhlc1F1ZXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiX3Jlc3VsdCIsImRmbHRfdmFsdWUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwiYWxsb3dOdWxsIiwibm90bnVsbCIsInByaW1hcnlLZXkiLCJwayIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsInZlcnNpb24iLCJSQVciLCJpc1VwZGF0ZVF1ZXJ5IiwicGFyYW1ldGVycyIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiYmluZCIsImRpYWxlY3QiLCJza2lwVW5lc2NhcGUiLCJtZXRob2QiLCJnZXREYXRhYmFzZU1ldGhvZCIsImNvbXBsZXRlIiwiX2xvZ1F1ZXJ5IiwicXVlcnkiLCJzZWxmIiwiY29ubiIsImNvbm5lY3Rpb24iLCJyZXNvbHZlIiwiZXhlY3V0ZVNxbCIsInN0YXJ0c1dpdGgiLCJyZWplY3QiLCJleGVjIiwiYXJncyIsImV4ZWN1dGlvbkVycm9yIiwiY29udmVydFRvQXJyYXkiLCJfaGFuZGxlUXVlcnlSZXNwb25zZSIsImVycm9yIiwic3VjY2Vzc0NhbGxiYWNrIiwicm93c0FmZmVjdGVkIiwiaW5zZXJ0SWQiLCJlIiwiZXJyb3JDYWxsYmFjayIsInRhYmxlTmFtZXMiLCJsZW5ndGgiLCJzcWxDb21tYW5kcyIsInNxbENtZCIsInJvd3MiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0YWJsZSIsImNvbHVtbnMiLCJtYXRjaCIsImNvbCIsImNvbE5hbWUiLCJjb2xUeXBlIiwidHJpbSIsInNwbGl0IiwidGhlbiIsImNvbnN0cmFpbnRzIiwicmVmZXJlbmNlVGFibGVOYW1lIiwicmVmZXJlbmNlVGFibGVLZXlzIiwidXBkYXRlQWN0aW9uIiwiZGVsZXRlQWN0aW9uIiwic3BsaWNlIiwiY29uc3RyYWludFNxbCIsInJlZmVyZW5jZXNSZWdleCIsInJlZmVyZW5jZUNvbmRpdGlvbnMiLCJyZW1vdmVUaWNrcyIsImNvbHVtbk5hbWVzIiwiY29sdW1uIiwiY29uc3RyYWludENvbmRpdGlvbiIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNvbnN0cmFpbnRUeXBlIiwiaW5kZXhPZiIsInRvVXBwZXJDYXNlIiwicGFyc2UiLCJnZXQiLCJ0aW1lem9uZSIsInNlcXVlbGl6ZSIsImNvZGUiLCJtZXNzYWdlIiwiRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvciIsInBhcmVudCIsImZpZWxkcyIsImNvbHVtbldpdGhUYWJsZSIsImVycm9ycyIsIlZhbGlkYXRpb25FcnJvckl0ZW0iLCJnZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlIiwidW5pcXVlS2V5cyIsImlzRXF1YWwiLCJtc2ciLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJEYXRhYmFzZUVycm9yIiwiZGF0YSIsInJldmVyc2UiLCJwcmltYXJ5IiwidW5pcXVlIiwicnVuIiwic2Vxbm8iLCJvcmRlciIsImlzQnVsa1VwZGF0ZVF1ZXJ5IiwidG9Mb3dlckNhc2UiLCJhcnJheSIsIl9hcnJheSIsInZhbHVlcyIsImJpbmRQYXJhbSIsInYiLCJza2lwVmFsdWVSZXBsYWNlIiwiayIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1HLGFBQWEsR0FBR0gsT0FBTyxDQUFDLG1CQUFELENBQTdCOztBQUNBLE1BQU1JLFVBQVUsR0FB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QVAsQ0FBWTBLLE1BQVosQ0FBaEIsRUFBcUM7QUFDbkNDLFlBQUFBLFNBQVMsQ0FBRSxJQUFHRyxDQUFFLEVBQVAsQ0FBVCxHQUFxQkosTUFBTSxDQUFDSSxDQUFELENBQTNCO0FBQ0Q7QUFDRjs7QUFDRDlKLFFBQUFBLEdBQUcsR0FBR2xDLGFBQWEsQ0FBQ2lHLG9CQUFkLENBQW1DL0QsR0FBbkMsRUFBd0MwSixNQUF4QyxFQUFnRHpGLE9BQWhELEVBQXlEO0FBQzdENEYsVUFBQUEsZ0JBQWdCLEVBQUU7QUFEMkMsU0FBekQsRUFFSCxDQUZHLENBQU47QUFHRDs7QUFDRCxhQUFPLENBQUM3SixHQUFELEVBQU0ySixTQUFOLENBQVA7QUFDRDs7OztFQW5DaUI3TCxhOztBQXlyQnBCaU0sTUFBTSxDQUFDQyxPQUFQLEdBQWlCOUssS0FBakI7QUFDQTZLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlOUssS0FBZixHQUF1QkEsS0FBdkI7QUFDQTZLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCL0ssS0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZVwiKTtcbmNvbnN0IEFic3RyYWN0UXVlcnkgPSByZXF1aXJlKFwiLi4vYWJzdHJhY3QvcXVlcnlcIik7XG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3F1ZXJ5LXR5cGVzXCIpO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dnZXJcIik7XG5cbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcInNxbDpzcWxpdGVcIik7XG5jb25zdCBnZXRNZXRob2RzID0gb2JqID0+IHtcbiAgbGV0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG4gIGxldCBjdXJyZW50T2JqID0gb2JqO1xuICBkbyB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudE9iaikubWFwKGl0ZW0gPT4gcHJvcGVydGllcy5hZGQoaXRlbSkpO1xuICB9IHdoaWxlICgoY3VycmVudE9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50T2JqKSkpO1xuICByZXR1cm4gWy4uLnByb3BlcnRpZXMua2V5cygpXS5maWx0ZXIoaXRlbSA9PiB0eXBlb2Ygb2JqW2l0ZW1dID09PSBcImZ1bmN0aW9uXCIpO1xufTtcbmNsYXNzIFF1ZXJ5IGV4dGVuZHMgQWJzdHJhY3RRdWVyeSB7XG4gIGdldEluc2VydElkRmllbGQoKSB7XG4gICAgcmV0dXJuIFwibGFzdElEXCI7XG4gIH1cblxuICAvKipcbiAgICogcmV3cml0ZSBxdWVyeSB3aXRoIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlhbGVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0KSB7XG4gICAgbGV0IGJpbmRQYXJhbTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICAgIGJpbmRQYXJhbVtgJCR7aSArIDF9YF0gPSB2O1xuICAgICAgfSk7XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpKSB7XG4gICAgICAgICAgYmluZFBhcmFtW2AkJHtrfWBdID0gdmFsdWVzW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH1cbiAgICByZXR1cm4gW3NxbCwgYmluZFBhcmFtXTtcbiAgfVxuXG4gIF9jb2xsZWN0TW9kZWxzKGluY2x1ZGUsIHByZWZpeCkge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuXG4gICAgaWYgKGluY2x1ZGUpIHtcbiAgICAgIGZvciAoY29uc3QgX2luY2x1ZGUgb2YgaW5jbHVkZSkge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBpZiAoIXByZWZpeCkge1xuICAgICAgICAgIGtleSA9IF9pbmNsdWRlLmFzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IGAke3ByZWZpeH0uJHtfaW5jbHVkZS5hc31gO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXldID0gX2luY2x1ZGUubW9kZWw7XG5cbiAgICAgICAgaWYgKF9pbmNsdWRlLmluY2x1ZGUpIHtcbiAgICAgICAgICBfLm1lcmdlKHJldCwgdGhpcy5fY29sbGVjdE1vZGVscyhfaW5jbHVkZS5pbmNsdWRlLCBrZXkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBfaGFuZGxlUXVlcnlSZXNwb25zZShtZXRhRGF0YSwgY29sdW1uVHlwZXMsIGVyciwgcmVzdWx0cykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci5zcWwgPSB0aGlzLnNxbDtcbiAgICAgIHRocm93IHRoaXMuZm9ybWF0RXJyb3IoZXJyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuaW5zdGFuY2U7XG4gICAgLy8gYWRkIHRoZSBpbnNlcnRlZCByb3cgaWQgdG8gdGhlIGluc3RhbmNlXG4gICAgaWYgKHRoaXMuaXNJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5zZXJ0UXVlcnkocmVzdWx0cywgbWV0YURhdGEpO1xuICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgIC8vIGhhbmRsZSBidWxrQ3JlYXRlIEFJIHByaW1hcnkga2V5XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvKiAgbWV0YURhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdGF0ZW1lbnRcIiAmJiAqL1xuICAgICAgICAgIHRoaXMubW9kZWwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgPT09XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzdGFydElkID1cbiAgICAgICAgICAgIG1ldGFEYXRhW3RoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpXSAtIG1ldGFEYXRhLmNoYW5nZXMgKyAxO1xuXG4gICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SWQ7IGkgPCBzdGFydElkICsgbWV0YURhdGEuY2hhbmdlczsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgIFt0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICAgICAgICAgIC5maWVsZF06IGlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBtZXRhRGF0YVt0aGlzLmdldEluc2VydElkRmllbGQoKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Nob3dUYWJsZXNRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAocm93ID0+IHJvdy5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93Q29uc3RyYWludHNRdWVyeSgpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRzO1xuICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnNxbCkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHJlc3VsdHNbMF0uc3FsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0UXVlcnkoKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYXcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VsZWN0UXVlcnkocmVzdWx0cyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGlzIGEgbWFwIG9mIHByZWZpeCBzdHJpbmdzIHRvIG1vZGVscywgZS5nLiB1c2VyLnByb2plY3RzIC0+IFByb2plY3QgbW9kZWxcbiAgICAgIGNvbnN0IHByZWZpeGVzID0gdGhpcy5fY29sbGVjdE1vZGVscyh0aGlzLm9wdGlvbnMuaW5jbHVkZSk7XG5cbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMocmVzdWx0LCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0aW5kID0gbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG5cbiAgICAgICAgICAgIG1vZGVsID0gcHJlZml4ZXNbbmFtZS5zdWJzdHIoMCwgbGFzdGluZCldO1xuXG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIobGFzdGluZCArIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IHRoaXMub3B0aW9ucy5tb2RlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbFxuICAgICAgICAgICAgLmdldFRhYmxlTmFtZSgpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgY29uc3QgdGFibGVUeXBlcyA9IGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gfHwge307XG5cbiAgICAgICAgICBpZiAodGFibGVUeXBlcyAmJiAhKG5hbWUgaW4gdGFibGVUeXBlcykpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb2x1bW4gaXMgYWxpYXNlZFxuICAgICAgICAgICAgXy5mb3JPd24obW9kZWwucmF3QXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSBrZXkgJiYgYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJpYnV0ZS5maWVsZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFibGVUeXBlcywgbmFtZSlcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVBhcnNlcnModGFibGVUeXBlc1tuYW1lXSwgdmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZWxlY3RRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93T3JEZXNjcmliZVF1ZXJ5KCkpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgSU5ERVhfTElTVFwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2hvd0luZGV4ZXNRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIElOREVYX0lORk9cIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgVEFCTEVfSU5GT1wiKSkge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgc3FsaXRlIHdheSBvZiBnZXR0aW5nIHRoZSBtZXRhZGF0YSBvZiBhIHRhYmxlXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgZm9yIChjb25zdCBfcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAoX3Jlc3VsdC5kZmx0X3ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDb2x1bW4gc2NoZW1hIG9taXRzIGFueSBcIkRFRkFVTFQgLi4uXCJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9yZXN1bHQuZGZsdF92YWx1ZSA9PT0gXCJOVUxMXCIpIHtcbiAgICAgICAgICAgIC8vIENvbHVtbiBzY2hlbWEgaXMgYSBcIkRFRkFVTFQgTlVMTFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVzdWx0LmRmbHRfdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBfcmVzdWx0LnR5cGUsXG4gICAgICAgICAgICBhbGxvd051bGw6IF9yZXN1bHQubm90bnVsbCA9PT0gMCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IF9yZXN1bHQucGsgIT09IDBcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlc3VsdFtfcmVzdWx0Lm5hbWVdLnR5cGUgPT09IFwiVElOWUlOVCgxKVwiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSB7IFwiMFwiOiBmYWxzZSwgXCIxXCI6IHRydWUgfVtcbiAgICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSByZXN1bHRbXG4gICAgICAgICAgICAgIF9yZXN1bHQubmFtZVxuICAgICAgICAgICAgXS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvJy9nLCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5cztcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgZm9yZWlnbl9rZXlzXCIpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5X2xpc3RcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBbUXVlcnlUeXBlcy5CVUxLVVBEQVRFLCBRdWVyeVR5cGVzLkJVTEtERUxFVEVdLmluY2x1ZGVzKHRoaXMub3B0aW9ucy50eXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuIG1ldGFEYXRhLmNoYW5nZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5VUFNFUlQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5WRVJTSU9OKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1swXS52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuUkFXKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdHMsIG1ldGFEYXRhXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVRdWVyeSgpIHx8IHRoaXMuaXNJbnNlcnRRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0YURhdGEuY2hhbmdlc107XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gd2Vic3FsIDogcG9seWZpbGwgZm9yZWlnbiBrZXkgaHR0cHM6Ly9qdXN0YXRoZW9yeS5jb20vMjAwNC8xMS9zcWxpdGUtZm9yZWlnbi1rZXktdHJpZ2dlcnMvXG4gIHJ1bihzcWwsIHBhcmFtZXRlcnMpIHtcbiAgICAvLyBleGVjIGRvZXMgbm90IHN1cHBvcnQgYmluZCBwYXJhbWV0ZXJcbiAgICB0aGlzLnNxbCA9IEFic3RyYWN0UXVlcnkuZm9ybWF0QmluZFBhcmFtZXRlcnMoXG4gICAgICBzcWwsXG4gICAgICB0aGlzLm9wdGlvbnMuYmluZCxcbiAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0IHx8IFwic3FsaXRlXCIsXG4gICAgICB7IHNraXBVbmVzY2FwZTogZmFsc2UgfVxuICAgIClbMF07XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXREYXRhYmFzZU1ldGhvZCgpO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gdGhpcy5fbG9nUXVlcnkodGhpcy5zcWwsIGRlYnVnLCBwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXM7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29ubiA9IHRoaXMuY29ubmVjdGlvbjtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtblR5cGVzID0ge307XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGV4ZWN1dGVTcWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzcWwuc3RhcnRzV2l0aChcIi0tIFwiKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImV4ZWNcIikge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY29ubi5leGVjKFxuICAgICAgICAgICAgICAgICAgW3sgc3FsOiBzZWxmLnNxbCwgYXJnczogW10gfV0sXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIChleGVjdXRpb25FcnJvciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgcmV0dXJuIFBSQUdNQSBJTkRFWF9MSVNUIGFuZCBJTkRFWF9JTkZPXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGB0aGlzYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgc3VjY2Vzc0NhbGxiYWNrID0gZnVuY3Rpb24oXywgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgLy8gYHNlbGZgIGlzIHBhc3NlZCBmcm9tIHNxbGl0ZSwgd2UgaGF2ZSBubyBjb250cm9sIG92ZXIgdGhpcy5cbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldID0gcmVzdWx0cy5pbnNlcnRJZDtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VzID0gcmVzdWx0cy5yb3dzQWZmZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzID0gcXVlcnkuY29udmVydFRvQXJyYXkocmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGRlYnVnKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKHNlbGYsIGNvbHVtblR5cGVzLCBlcnIpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBbXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgY29ubi5leGVjdXRlU3FsKFxuICAgICAgICAgICAgICAgIHNlbGYuc3FsLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2tcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgLypjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW5ub3QgdXNlIGFycm93IGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgYm91bmQgdG8gdGhlIHN0YXRlbWVudFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBgc2VsZmAgaXMgcGFzc2VkIGZyb20gc3FsaXRlLCB3ZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciB0aGlzLlxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXSA9IHJlc3VsdHMuaW5zZXJ0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZXMgPSByZXN1bHRzLnJvd3NBZmZlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShzZWxmLCBjb2x1bW5UeXBlcywgZXJyKSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25uLmV4ZWMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgICBzZWxmLnNxbCxcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGlmIChtZXRob2QgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgbGV0IHRhYmxlTmFtZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMudGFibGVOYW1lcykge1xuICAgICAgICAgIHRhYmxlTmFtZXMgPSB0aGlzLm9wdGlvbnMudGFibGVOYW1lcztcbiAgICAgICAgfSBlbHNlIGlmICgvRlJPTSBgKC4qPylgL2kuZXhlYyh0aGlzLnNxbCkpIHtcbiAgICAgICAgICB0YWJsZU5hbWVzLnB1c2goL0ZST00gYCguKj8pYC9pLmV4ZWModGhpcy5zcWwpWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSwgdGhlcmUncyBubyBuZWVkIHRvIGFzayBmb3IgaXQgYWdhaW5cbiAgICAgICAgdGFibGVOYW1lcyA9IHRhYmxlTmFtZXMuZmlsdGVyKFxuICAgICAgICAgIHRhYmxlTmFtZSA9PlxuICAgICAgICAgICAgISh0YWJsZU5hbWUgaW4gY29sdW1uVHlwZXMpICYmIHRhYmxlTmFtZSAhPT0gXCJzcWxpdGVfbWFzdGVyXCJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0YWJsZU5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBleGVjdXRlU3FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNxbENvbW1hbmRzID0gdGFibGVOYW1lcy5tYXAodGFibGVOYW1lID0+IHtcbiAgICAgICAgICAgICAgdGFibGVOYW1lID0gdGFibGVOYW1lLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtgUFJBR01BIHRhYmxlX2luZm8oXFxgJHt0YWJsZU5hbWV9XFxgKWAsIHRhYmxlTmFtZV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbm4uZXhlYyhcbiAgICAgICAgICAgICAgc3FsQ29tbWFuZHMubWFwKHNxbENtZCA9PiAoe1xuICAgICAgICAgICAgICAgIHNxbDogc3FsQ21kWzBdLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcWxDb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBzcWxDb21tYW5kc1tpXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0c1tpXS5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXVtyZXN1bHQubmFtZV0gPSByZXN1bHQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhYmxlTmFtZXMuZm9yRWFjaCgodGFibGVOYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25uLmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgYFNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPScke3RhYmxlTmFtZX0nIGFuZCB0eXBlPSd0YWJsZSdgLFxuICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKF8sIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGUgPSByZXN1bHQucm93cy5pdGVtKDApO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzcWxcIiBpbiB0YWJsZSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUuc3FsID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAvL21hdGNoIGNvbHVtbiBuYW1lIHdpdGggZGF0YSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGUuc3FsLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgICAgIC8oYFxcdytgKSgoXFxzKFtBLVpdKykoKFxcKFxcZCtcXCkpKT8pKS9nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IGNvbHVtbiBuYW1lcyB3aXRoIGRhdGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbE5hbWUsIGNvbFR5cGVdID0gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIiBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9gL2csIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV1bY29sTmFtZV0gPSBjb2xUeXBlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjb2x1bW5UeXBlcylcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGFibGVOYW1lcy5sZW5ndGggLSAxKSByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihfLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8qY29ubi50cmFuc2FjdGlvbihmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZXMuZm9yRWFjaCgodGFibGVOYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbChcbiAgICAgICAgICAgICAgICAgIGBTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nJHt0YWJsZU5hbWV9JyBhbmQgdHlwZT0ndGFibGUnYCxcbiAgICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oXywgcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gcmVzdWx0LnJvd3MuaXRlbSgwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0YWJsZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgIFwic3FsXCIgaW4gdGFibGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUuc3FsID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAvL21hdGNoIGNvbHVtbiBuYW1lIHdpdGggZGF0YSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0YWJsZS5zcWwubWF0Y2goXG4gICAgICAgICAgICAgICAgICAgICAgICAvKGBcXHcrYCkoKFxccyhbQS1aXSspKChcXChcXGQrXFwpKSk/KSkvZ1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3BsaXQgY29sdW1uIG5hbWVzIHdpdGggZGF0YSB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbE5hbWUsIGNvbFR5cGVdID0gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xccysvZywgXCIgXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9gL2csIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdW2NvbE5hbWVdID0gY29sVHlwZS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coY29sdW1uVHlwZXMpXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGFibGVOYW1lcy5sZW5ndGggLSAxKSByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oXywgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pOyovXG4gICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKGV4ZWN1dGVTcWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4ZWN1dGVTcWwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHNxbCkge1xuICAgIGxldCBjb25zdHJhaW50cyA9IHNxbC5zcGxpdChcIkNPTlNUUkFJTlQgXCIpO1xuICAgIGxldCByZWZlcmVuY2VUYWJsZU5hbWUsIHJlZmVyZW5jZVRhYmxlS2V5cywgdXBkYXRlQWN0aW9uLCBkZWxldGVBY3Rpb247XG4gICAgY29uc3RyYWludHMuc3BsaWNlKDAsIDEpO1xuICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHMubWFwKGNvbnN0cmFpbnRTcWwgPT4ge1xuICAgICAgLy9QYXJzZSBmb3JlaWduIGtleSBzbmlwcGV0c1xuICAgICAgaWYgKGNvbnN0cmFpbnRTcWwuaW5jbHVkZXMoXCJSRUZFUkVOQ0VTXCIpKSB7XG4gICAgICAgIC8vUGFyc2Ugb3V0IHRoZSBjb25zdHJhaW50IGNvbmRpdGlvbiBmb3JtIHNxbCBzdHJpbmdcbiAgICAgICAgdXBkYXRlQWN0aW9uID0gY29uc3RyYWludFNxbC5tYXRjaChcbiAgICAgICAgICAvT04gVVBEQVRFIChDQVNDQURFfFNFVCBOVUxMfFJFU1RSSUNUfE5PIEFDVElPTnxTRVQgREVGQVVMVCl7MX0vXG4gICAgICAgICk7XG4gICAgICAgIGRlbGV0ZUFjdGlvbiA9IGNvbnN0cmFpbnRTcWwubWF0Y2goXG4gICAgICAgICAgL09OIERFTEVURSAoQ0FTQ0FERXxTRVQgTlVMTHxSRVNUUklDVHxOTyBBQ1RJT058U0VUIERFRkFVTFQpezF9L1xuICAgICAgICApO1xuXG4gICAgICAgIGlmICh1cGRhdGVBY3Rpb24pIHtcbiAgICAgICAgICB1cGRhdGVBY3Rpb24gPSB1cGRhdGVBY3Rpb25bMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsZXRlQWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlQWN0aW9uID0gZGVsZXRlQWN0aW9uWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlc1JlZ2V4ID0gL1JFRkVSRU5DRVMuK1xcKCg/OlteKShdK3xcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKlxcKS87XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUNvbmRpdGlvbnMgPSBjb25zdHJhaW50U3FsXG4gICAgICAgICAgLm1hdGNoKHJlZmVyZW5jZXNSZWdleClbMF1cbiAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICByZWZlcmVuY2VUYWJsZU5hbWUgPSBVdGlscy5yZW1vdmVUaWNrcyhyZWZlcmVuY2VDb25kaXRpb25zWzFdKTtcbiAgICAgICAgbGV0IGNvbHVtbk5hbWVzID0gcmVmZXJlbmNlQ29uZGl0aW9uc1syXTtcbiAgICAgICAgY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lcy5yZXBsYWNlKC9cXCh8XFwpL2csIFwiXCIpLnNwbGl0KFwiLCBcIik7XG4gICAgICAgIHJlZmVyZW5jZVRhYmxlS2V5cyA9IGNvbHVtbk5hbWVzLm1hcChjb2x1bW4gPT5cbiAgICAgICAgICBVdGlscy5yZW1vdmVUaWNrcyhjb2x1bW4pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRDb25kaXRpb24gPSBjb25zdHJhaW50U3FsLm1hdGNoKFxuICAgICAgICAvXFwoKD86W14pKF0rfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqXFwpL1xuICAgICAgKVswXTtcbiAgICAgIGNvbnN0cmFpbnRTcWwgPSBjb25zdHJhaW50U3FsLnJlcGxhY2UoL1xcKC4rXFwpLywgXCJcIik7XG4gICAgICBjb25zdCBjb25zdHJhaW50ID0gY29uc3RyYWludFNxbC5zcGxpdChcIiBcIik7XG5cbiAgICAgIGlmIChjb25zdHJhaW50WzFdID09PSBcIlBSSU1BUllcIiB8fCBjb25zdHJhaW50WzFdID09PSBcIkZPUkVJR05cIikge1xuICAgICAgICBjb25zdHJhaW50WzFdICs9IFwiIEtFWVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb25zdHJhaW50TmFtZTogVXRpbHMucmVtb3ZlVGlja3MoY29uc3RyYWludFswXSksXG4gICAgICAgIGNvbnN0cmFpbnRUeXBlOiBjb25zdHJhaW50WzFdLFxuICAgICAgICB1cGRhdGVBY3Rpb24sXG4gICAgICAgIGRlbGV0ZUFjdGlvbixcbiAgICAgICAgc3FsOiBzcWwucmVwbGFjZSgvXCIvZywgXCJgXCIpLCAvL1NxbGl0ZSByZXR1cm5zIGRvdWJsZSBxdW90ZXMgZm9yIHRhYmxlIG5hbWVcbiAgICAgICAgY29uc3RyYWludENvbmRpdGlvbixcbiAgICAgICAgcmVmZXJlbmNlVGFibGVOYW1lLFxuICAgICAgICByZWZlcmVuY2VUYWJsZUtleXNcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludHM7XG4gIH1cblxuICBhcHBseVBhcnNlcnModHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZS5pbmNsdWRlcyhcIihcIikpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgbGVuZ3RoIHBhcnRcbiAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cigwLCB0eXBlLmluZGV4T2YoXCIoXCIpKTtcbiAgICB9XG4gICAgdHlwZSA9IHR5cGUucmVwbGFjZShcIlVOU0lHTkVEXCIsIFwiXCIpLnJlcGxhY2UoXCJaRVJPRklMTFwiLCBcIlwiKTtcbiAgICB0eXBlID0gdHlwZS50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBwYXJzZSA9IHBhcnNlclN0b3JlLmdldCh0eXBlKTtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgcGFyc2UpIHtcbiAgICAgIHJldHVybiBwYXJzZSh2YWx1ZSwgeyB0aW1lem9uZTogdGhpcy5zZXF1ZWxpemUub3B0aW9ucy50aW1lem9uZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZm9ybWF0RXJyb3IoZXJyKSB7XG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBcIlNRTElURV9DT05TVFJBSU5UXCI6IHtcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiRk9SRUlHTiBLRVkgY29uc3RyYWludCBmYWlsZWRcIikpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5Gb3JlaWduS2V5Q29uc3RyYWludEVycm9yKHtcbiAgICAgICAgICAgIHBhcmVudDogZXJyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmllbGRzID0gW107XG5cbiAgICAgICAgLy8gU3FsaXRlIHByZSAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IGNvbHVtbnMgeCwgeSBhcmUgbm90IHVuaXF1ZVxuICAgICAgICBsZXQgbWF0Y2ggPSBlcnIubWVzc2FnZS5tYXRjaCgvY29sdW1ucyAoLio/KSBhcmUvKTtcbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmIG1hdGNoLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV0uc3BsaXQoXCIsIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTcWxpdGUgcG9zdCAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IFVOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogdGFibGUueCwgdGFibGUueVxuICAgICAgICAgIG1hdGNoID0gZXJyLm1lc3NhZ2UubWF0Y2goL1VOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogKC4qKS8pO1xuICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiBtYXRjaC5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV1cbiAgICAgICAgICAgICAgLnNwbGl0KFwiLCBcIilcbiAgICAgICAgICAgICAgLm1hcChjb2x1bW5XaXRoVGFibGUgPT4gY29sdW1uV2l0aFRhYmxlLnNwbGl0KFwiLlwiKVsxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGxldCBtZXNzYWdlID0gXCJWYWxpZGF0aW9uIGVycm9yXCI7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAgIG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9ySXRlbShcbiAgICAgICAgICAgICAgdGhpcy5nZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlKGZpZWxkKSxcbiAgICAgICAgICAgICAgXCJ1bmlxdWUgdmlvbGF0aW9uXCIsIC8vIHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnMuREIsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2VbZmllbGRdLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICBcIm5vdF91bmlxdWVcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgIF8uZm9yT3duKHRoaXMubW9kZWwudW5pcXVlS2V5cywgY29uc3RyYWludCA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pc0VxdWFsKGNvbnN0cmFpbnQuZmllbGRzLCBmaWVsZHMpICYmICEhY29uc3RyYWludC5tc2cpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGNvbnN0cmFpbnQubXNnO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5VbmlxdWVDb25zdHJhaW50RXJyb3Ioe1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgZXJyb3JzLFxuICAgICAgICAgIHBhcmVudDogZXJyLFxuICAgICAgICAgIGZpZWxkc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJTUUxJVEVfQlVTWVwiOlxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5UaW1lb3V0RXJyb3IoZXJyKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBzZXF1ZWxpemVFcnJvcnMuRGF0YWJhc2VFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNob3dJbmRleGVzUXVlcnkoZGF0YSkge1xuICAgIC8vIFNxbGl0ZSByZXR1cm5zIGluZGV4ZXMgc28gdGhlIG9uZSB0aGF0IHdhcyBkZWZpbmVkIGxhc3QgaXMgcmV0dXJuZWQgZmlyc3QuIExldHMgcmV2ZXJzZSB0aGF0IVxuICAgIHJldHVybiBQcm9taXNlLm1hcChkYXRhLnJldmVyc2UoKSwgaXRlbSA9PiB7XG4gICAgICBpdGVtLmZpZWxkcyA9IFtdO1xuICAgICAgaXRlbS5wcmltYXJ5ID0gZmFsc2U7XG4gICAgICBpdGVtLnVuaXF1ZSA9ICEhaXRlbS51bmlxdWU7XG4gICAgICBpdGVtLmNvbnN0cmFpbnROYW1lID0gaXRlbS5uYW1lO1xuICAgICAgcmV0dXJuIHRoaXMucnVuKGBQUkFHTUEgSU5ERVhfSU5GTyhcXGAke2l0ZW0ubmFtZX1cXGApYCkudGhlbihjb2x1bW5zID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICAgIGl0ZW0uZmllbGRzW2NvbHVtbi5zZXFub10gPSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmRlcjogdW5kZWZpbmVkXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhYmFzZU1ldGhvZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNxbC5pbmNsdWRlcyhcIlBSQUdNQVwiKSB8fFxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJDT01NSVRcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiUk9MTEJBQ0tcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiVFJBTlNBQ1RJT05cIilcbiAgICApIHtcbiAgICAgIHJldHVybiBcImV4ZWNcIjsgLy8gTmVlZGVkIHRvIHJ1biBuby1vcCB0cmFuc2FjdGlvblxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmlzSW5zZXJ0UXVlcnkoKSB8fFxuICAgICAgdGhpcy5pc1VwZGF0ZVF1ZXJ5KCkgfHxcbiAgICAgIHRoaXMuaXNCdWxrVXBkYXRlUXVlcnkoKSB8fFxuICAgICAgdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURSBURU1QT1JBUlkgVEFCTEVcIi50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuQlVMS0RFTEVURVxuICAgICkge1xuICAgICAgcmV0dXJuIFwicnVuXCI7XG4gICAgfVxuICAgIHJldHVybiBcImFsbFwiO1xuICB9XG4gIGNvbnZlcnRUb0FycmF5KHJlc3VsdHMpIHtcbiAgICBpZiAoIXJlc3VsdHMucm93cykgcmV0dXJuIFtdO1xuICAgIGlmIChcImFycmF5XCIgaW4gcmVzdWx0cyB8fCBcIl9hcnJheVwiIGluIHJlc3VsdHMucm93cylcbiAgICAgIHJldHVybiByZXN1bHRzLmFycmF5IHx8IHJlc3VsdHMucm93cy5fYXJyYXk7XG4gICAgaWYgKCFyZXN1bHRzLnJvd3MuaXRlbSkgcmV0dXJuIHJlc3VsdHMucm93cztcbiAgICBjb25zdCBkYXRhID0gbmV3IEFycmF5KHJlc3VsdHMucm93cy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkYXRhW2ldID0gcmVzdWx0cy5yb3dzLml0ZW0oaSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUXVlcnk7XG5tb2R1bGUuZXhwb3J0cy5RdWVyeSA9IFF1ZXJ5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IFF1ZXJ5O1xuIl19 \ No newline at end of file diff --git a/lib/dialects/sqlite/query.js b/lib/dialects/sqlite/query.js index dbf95c1..342a4d8 100644 --- a/lib/dialects/sqlite/query.js +++ b/lib/dialects/sqlite/query.js @@ -445,7 +445,41 @@ class Query extends AbstractQuery { } ); } else { - conn.transaction(function(t) { + tableNames.forEach((tableName, index) => { + conn.executeSql( + `SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, + [], + function(_, result) { + const table = result.rows.item(0); + if ( + typeof table === "object" && + "sql" in table && + typeof table.sql === "string" + ) { + columnTypes[tableName] = {}; + //match column name with data types + const columns = table.sql.match( + /(`\w+`)((\s([A-Z]+)((\(\d+\)))?))/g + ); + // split column names with data type + for (const col of columns) { + const [colName, colType] = col + .trim() + .replace(/\s+/g, " ") + .replace(/`/g, "") + .split(" "); + columnTypes[tableName][colName] = colType.trim(); + } + } + //console.log(columnTypes) + if (index === tableNames.length - 1) resolve(); + }, + function(_, error) { + if (index === tableNames.length - 1) resolve(); + } + ); + }); + /*conn.transaction(function(t) { tableNames.forEach((tableName, index) => { t.executeSql( `SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, @@ -480,7 +514,7 @@ class Query extends AbstractQuery { } ); }); - }); + });*/ } }).then(executeSql); } From 4d8e741295d80669a7f68200e2139c1b3424bcab Mon Sep 17 00:00:00 2001 From: prih Date: Tue, 15 Dec 2020 14:03:15 +0200 Subject: [PATCH 7/8] executeSql --- dist/dialects/sqlite/query.js | 10 +++++----- lib/dialects/sqlite/query.js | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dist/dialects/sqlite/query.js b/dist/dialects/sqlite/query.js index 689c548..d5b5aac 100644 --- a/dist/dialects/sqlite/query.js +++ b/dist/dialects/sqlite/query.js @@ -319,7 +319,7 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { resolve(); } } else { - var successCallback = function (_, results) { + var successCallback = function (results) { try { complete(); // `self` is passed from sqlite, we have no control over this. // eslint-disable-next-line no-invalid-this @@ -343,7 +343,7 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { }; // eslint-disable-next-line - var errorCallback = function (_, err) { + var errorCallback = function (err) { try { complete(); // `self` is passed from sqlite, we have no control over this. // eslint-disable-next-line no-invalid-this @@ -457,7 +457,7 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { }); } else { tableNames.forEach((tableName, index) => { - conn.executeSql(`SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, [], function (_, result) { + conn.executeSql(`SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, [], function (result) { const table = result.rows.item(0); if (typeof table === "object" && "sql" in table && typeof table.sql === "string") { @@ -473,7 +473,7 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { if (index === tableNames.length - 1) resolve(); - }, function (_, error) { + }, function (error) { if (index === tableNames.length - 1) resolve(); }); }); @@ -736,4 +736,4 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { module.exports = Query; module.exports.Query = Query; module.exports.default = Query; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnkuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIlByb21pc2UiLCJBYnN0cmFjdFF1ZXJ5IiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsInBhcnNlclN0b3JlIiwibG9nZ2VyIiwiZGVidWciLCJkZWJ1Z0NvbnRleHQiLCJnZXRNZXRob2RzIiwib2JqIiwicHJvcGVydGllcyIsIlNldCIsImN1cnJlbnRPYmoiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibWFwIiwiaXRlbSIsImFkZCIsImdldFByb3RvdHlwZU9mIiwia2V5cyIsImZpbHRlciIsIlF1ZXJ5IiwiaW5jbHVkZSIsInByZWZpeCIsInJldCIsIl9pbmNsdWRlIiwia2V5IiwiYXMiLCJtb2RlbCIsIm1lcmdlIiwiX2NvbGxlY3RNb2RlbHMiLCJtZXRhRGF0YSIsImNvbHVtblR5cGVzIiwiZXJyIiwicmVzdWx0cyIsInNxbCIsImZvcm1hdEVycm9yIiwicmVzdWx0IiwiaW5zdGFuY2UiLCJpc0luc2VydFF1ZXJ5IiwiaGFuZGxlSW5zZXJ0UXVlcnkiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsInJhd0F0dHJpYnV0ZXMiLCJzdGFydElkIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImNoYW5nZXMiLCJpIiwicHVzaCIsImZpZWxkIiwiaXNTaG93VGFibGVzUXVlcnkiLCJyb3ciLCJuYW1lIiwiaXNTaG93Q29uc3RyYWludHNRdWVyeSIsInBhcnNlQ29uc3RyYWludHNGcm9tU3FsIiwiaXNTZWxlY3RRdWVyeSIsIm9wdGlvbnMiLCJyYXciLCJoYW5kbGVTZWxlY3RRdWVyeSIsInByZWZpeGVzIiwibWFwVmFsdWVzIiwidmFsdWUiLCJpbmNsdWRlcyIsImxhc3RpbmQiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsInRvU3RyaW5nIiwicmVwbGFjZSIsInRhYmxlVHlwZXMiLCJmb3JPd24iLCJhdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseVBhcnNlcnMiLCJpc1Nob3dPckRlc2NyaWJlUXVlcnkiLCJoYW5kbGVTaG93SW5kZXhlc1F1ZXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiX3Jlc3VsdCIsImRmbHRfdmFsdWUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwiYWxsb3dOdWxsIiwibm90bnVsbCIsInByaW1hcnlLZXkiLCJwayIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsInZlcnNpb24iLCJSQVciLCJpc1VwZGF0ZVF1ZXJ5IiwicGFyYW1ldGVycyIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiYmluZCIsImRpYWxlY3QiLCJza2lwVW5lc2NhcGUiLCJtZXRob2QiLCJnZXREYXRhYmFzZU1ldGhvZCIsImNvbXBsZXRlIiwiX2xvZ1F1ZXJ5IiwicXVlcnkiLCJzZWxmIiwiY29ubiIsImNvbm5lY3Rpb24iLCJyZXNvbHZlIiwiZXhlY3V0ZVNxbCIsInN0YXJ0c1dpdGgiLCJyZWplY3QiLCJleGVjIiwiYXJncyIsImV4ZWN1dGlvbkVycm9yIiwiY29udmVydFRvQXJyYXkiLCJfaGFuZGxlUXVlcnlSZXNwb25zZSIsImVycm9yIiwic3VjY2Vzc0NhbGxiYWNrIiwicm93c0FmZmVjdGVkIiwiaW5zZXJ0SWQiLCJlIiwiZXJyb3JDYWxsYmFjayIsInRhYmxlTmFtZXMiLCJsZW5ndGgiLCJzcWxDb21tYW5kcyIsInNxbENtZCIsInJvd3MiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0YWJsZSIsImNvbHVtbnMiLCJtYXRjaCIsImNvbCIsImNvbE5hbWUiLCJjb2xUeXBlIiwidHJpbSIsInNwbGl0IiwidGhlbiIsImNvbnN0cmFpbnRzIiwicmVmZXJlbmNlVGFibGVOYW1lIiwicmVmZXJlbmNlVGFibGVLZXlzIiwidXBkYXRlQWN0aW9uIiwiZGVsZXRlQWN0aW9uIiwic3BsaWNlIiwiY29uc3RyYWludFNxbCIsInJlZmVyZW5jZXNSZWdleCIsInJlZmVyZW5jZUNvbmRpdGlvbnMiLCJyZW1vdmVUaWNrcyIsImNvbHVtbk5hbWVzIiwiY29sdW1uIiwiY29uc3RyYWludENvbmRpdGlvbiIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNvbnN0cmFpbnRUeXBlIiwiaW5kZXhPZiIsInRvVXBwZXJDYXNlIiwicGFyc2UiLCJnZXQiLCJ0aW1lem9uZSIsInNlcXVlbGl6ZSIsImNvZGUiLCJtZXNzYWdlIiwiRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvciIsInBhcmVudCIsImZpZWxkcyIsImNvbHVtbldpdGhUYWJsZSIsImVycm9ycyIsIlZhbGlkYXRpb25FcnJvckl0ZW0iLCJnZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlIiwidW5pcXVlS2V5cyIsImlzRXF1YWwiLCJtc2ciLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJEYXRhYmFzZUVycm9yIiwiZGF0YSIsInJldmVyc2UiLCJwcmltYXJ5IiwidW5pcXVlIiwicnVuIiwic2Vxbm8iLCJvcmRlciIsImlzQnVsa1VwZGF0ZVF1ZXJ5IiwidG9Mb3dlckNhc2UiLCJhcnJheSIsIl9hcnJheSIsInZhbHVlcyIsImJpbmRQYXJhbSIsInYiLCJza2lwVmFsdWVSZXBsYWNlIiwiayIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1HLGFBQWEsR0FBR0gsT0FBTyxDQUFDLG1CQUFELENBQTdCOztBQUNBLE1BQU1JLFVBQVUsR0FB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QVAsQ0FBWTBLLE1BQVosQ0FBaEIsRUFBcUM7QUFDbkNDLFlBQUFBLFNBQVMsQ0FBRSxJQUFHRyxDQUFFLEVBQVAsQ0FBVCxHQUFxQkosTUFBTSxDQUFDSSxDQUFELENBQTNCO0FBQ0Q7QUFDRjs7QUFDRDlKLFFBQUFBLEdBQUcsR0FBR2xDLGFBQWEsQ0FBQ2lHLG9CQUFkLENBQW1DL0QsR0FBbkMsRUFBd0MwSixNQUF4QyxFQUFnRHpGLE9BQWhELEVBQXlEO0FBQzdENEYsVUFBQUEsZ0JBQWdCLEVBQUU7QUFEMkMsU0FBekQsRUFFSCxDQUZHLENBQU47QUFHRDs7QUFDRCxhQUFPLENBQUM3SixHQUFELEVBQU0ySixTQUFOLENBQVA7QUFDRDs7OztFQW5DaUI3TCxhOztBQXlyQnBCaU0sTUFBTSxDQUFDQyxPQUFQLEdBQWlCOUssS0FBakI7QUFDQTZLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlOUssS0FBZixHQUF1QkEsS0FBdkI7QUFDQTZLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCL0ssS0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZVwiKTtcbmNvbnN0IEFic3RyYWN0UXVlcnkgPSByZXF1aXJlKFwiLi4vYWJzdHJhY3QvcXVlcnlcIik7XG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3F1ZXJ5LXR5cGVzXCIpO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dnZXJcIik7XG5cbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcInNxbDpzcWxpdGVcIik7XG5jb25zdCBnZXRNZXRob2RzID0gb2JqID0+IHtcbiAgbGV0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG4gIGxldCBjdXJyZW50T2JqID0gb2JqO1xuICBkbyB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudE9iaikubWFwKGl0ZW0gPT4gcHJvcGVydGllcy5hZGQoaXRlbSkpO1xuICB9IHdoaWxlICgoY3VycmVudE9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50T2JqKSkpO1xuICByZXR1cm4gWy4uLnByb3BlcnRpZXMua2V5cygpXS5maWx0ZXIoaXRlbSA9PiB0eXBlb2Ygb2JqW2l0ZW1dID09PSBcImZ1bmN0aW9uXCIpO1xufTtcbmNsYXNzIFF1ZXJ5IGV4dGVuZHMgQWJzdHJhY3RRdWVyeSB7XG4gIGdldEluc2VydElkRmllbGQoKSB7XG4gICAgcmV0dXJuIFwibGFzdElEXCI7XG4gIH1cblxuICAvKipcbiAgICogcmV3cml0ZSBxdWVyeSB3aXRoIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlhbGVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0KSB7XG4gICAgbGV0IGJpbmRQYXJhbTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICAgIGJpbmRQYXJhbVtgJCR7aSArIDF9YF0gPSB2O1xuICAgICAgfSk7XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpKSB7XG4gICAgICAgICAgYmluZFBhcmFtW2AkJHtrfWBdID0gdmFsdWVzW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH1cbiAgICByZXR1cm4gW3NxbCwgYmluZFBhcmFtXTtcbiAgfVxuXG4gIF9jb2xsZWN0TW9kZWxzKGluY2x1ZGUsIHByZWZpeCkge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuXG4gICAgaWYgKGluY2x1ZGUpIHtcbiAgICAgIGZvciAoY29uc3QgX2luY2x1ZGUgb2YgaW5jbHVkZSkge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBpZiAoIXByZWZpeCkge1xuICAgICAgICAgIGtleSA9IF9pbmNsdWRlLmFzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IGAke3ByZWZpeH0uJHtfaW5jbHVkZS5hc31gO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXldID0gX2luY2x1ZGUubW9kZWw7XG5cbiAgICAgICAgaWYgKF9pbmNsdWRlLmluY2x1ZGUpIHtcbiAgICAgICAgICBfLm1lcmdlKHJldCwgdGhpcy5fY29sbGVjdE1vZGVscyhfaW5jbHVkZS5pbmNsdWRlLCBrZXkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBfaGFuZGxlUXVlcnlSZXNwb25zZShtZXRhRGF0YSwgY29sdW1uVHlwZXMsIGVyciwgcmVzdWx0cykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci5zcWwgPSB0aGlzLnNxbDtcbiAgICAgIHRocm93IHRoaXMuZm9ybWF0RXJyb3IoZXJyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuaW5zdGFuY2U7XG4gICAgLy8gYWRkIHRoZSBpbnNlcnRlZCByb3cgaWQgdG8gdGhlIGluc3RhbmNlXG4gICAgaWYgKHRoaXMuaXNJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5zZXJ0UXVlcnkocmVzdWx0cywgbWV0YURhdGEpO1xuICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgIC8vIGhhbmRsZSBidWxrQ3JlYXRlIEFJIHByaW1hcnkga2V5XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvKiAgbWV0YURhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdGF0ZW1lbnRcIiAmJiAqL1xuICAgICAgICAgIHRoaXMubW9kZWwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgPT09XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzdGFydElkID1cbiAgICAgICAgICAgIG1ldGFEYXRhW3RoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpXSAtIG1ldGFEYXRhLmNoYW5nZXMgKyAxO1xuXG4gICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SWQ7IGkgPCBzdGFydElkICsgbWV0YURhdGEuY2hhbmdlczsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgIFt0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICAgICAgICAgIC5maWVsZF06IGlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBtZXRhRGF0YVt0aGlzLmdldEluc2VydElkRmllbGQoKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Nob3dUYWJsZXNRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAocm93ID0+IHJvdy5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93Q29uc3RyYWludHNRdWVyeSgpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRzO1xuICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnNxbCkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHJlc3VsdHNbMF0uc3FsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0UXVlcnkoKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYXcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VsZWN0UXVlcnkocmVzdWx0cyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGlzIGEgbWFwIG9mIHByZWZpeCBzdHJpbmdzIHRvIG1vZGVscywgZS5nLiB1c2VyLnByb2plY3RzIC0+IFByb2plY3QgbW9kZWxcbiAgICAgIGNvbnN0IHByZWZpeGVzID0gdGhpcy5fY29sbGVjdE1vZGVscyh0aGlzLm9wdGlvbnMuaW5jbHVkZSk7XG5cbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMocmVzdWx0LCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0aW5kID0gbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG5cbiAgICAgICAgICAgIG1vZGVsID0gcHJlZml4ZXNbbmFtZS5zdWJzdHIoMCwgbGFzdGluZCldO1xuXG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIobGFzdGluZCArIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IHRoaXMub3B0aW9ucy5tb2RlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbFxuICAgICAgICAgICAgLmdldFRhYmxlTmFtZSgpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgY29uc3QgdGFibGVUeXBlcyA9IGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gfHwge307XG5cbiAgICAgICAgICBpZiAodGFibGVUeXBlcyAmJiAhKG5hbWUgaW4gdGFibGVUeXBlcykpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb2x1bW4gaXMgYWxpYXNlZFxuICAgICAgICAgICAgXy5mb3JPd24obW9kZWwucmF3QXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSBrZXkgJiYgYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJpYnV0ZS5maWVsZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFibGVUeXBlcywgbmFtZSlcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVBhcnNlcnModGFibGVUeXBlc1tuYW1lXSwgdmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZWxlY3RRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93T3JEZXNjcmliZVF1ZXJ5KCkpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgSU5ERVhfTElTVFwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2hvd0luZGV4ZXNRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIElOREVYX0lORk9cIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgVEFCTEVfSU5GT1wiKSkge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgc3FsaXRlIHdheSBvZiBnZXR0aW5nIHRoZSBtZXRhZGF0YSBvZiBhIHRhYmxlXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgZm9yIChjb25zdCBfcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAoX3Jlc3VsdC5kZmx0X3ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDb2x1bW4gc2NoZW1hIG9taXRzIGFueSBcIkRFRkFVTFQgLi4uXCJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9yZXN1bHQuZGZsdF92YWx1ZSA9PT0gXCJOVUxMXCIpIHtcbiAgICAgICAgICAgIC8vIENvbHVtbiBzY2hlbWEgaXMgYSBcIkRFRkFVTFQgTlVMTFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVzdWx0LmRmbHRfdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBfcmVzdWx0LnR5cGUsXG4gICAgICAgICAgICBhbGxvd051bGw6IF9yZXN1bHQubm90bnVsbCA9PT0gMCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IF9yZXN1bHQucGsgIT09IDBcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlc3VsdFtfcmVzdWx0Lm5hbWVdLnR5cGUgPT09IFwiVElOWUlOVCgxKVwiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSB7IFwiMFwiOiBmYWxzZSwgXCIxXCI6IHRydWUgfVtcbiAgICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSByZXN1bHRbXG4gICAgICAgICAgICAgIF9yZXN1bHQubmFtZVxuICAgICAgICAgICAgXS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvJy9nLCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5cztcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgZm9yZWlnbl9rZXlzXCIpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5X2xpc3RcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBbUXVlcnlUeXBlcy5CVUxLVVBEQVRFLCBRdWVyeVR5cGVzLkJVTEtERUxFVEVdLmluY2x1ZGVzKHRoaXMub3B0aW9ucy50eXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuIG1ldGFEYXRhLmNoYW5nZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5VUFNFUlQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5WRVJTSU9OKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1swXS52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuUkFXKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdHMsIG1ldGFEYXRhXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVRdWVyeSgpIHx8IHRoaXMuaXNJbnNlcnRRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0YURhdGEuY2hhbmdlc107XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gd2Vic3FsIDogcG9seWZpbGwgZm9yZWlnbiBrZXkgaHR0cHM6Ly9qdXN0YXRoZW9yeS5jb20vMjAwNC8xMS9zcWxpdGUtZm9yZWlnbi1rZXktdHJpZ2dlcnMvXG4gIHJ1bihzcWwsIHBhcmFtZXRlcnMpIHtcbiAgICAvLyBleGVjIGRvZXMgbm90IHN1cHBvcnQgYmluZCBwYXJhbWV0ZXJcbiAgICB0aGlzLnNxbCA9IEFic3RyYWN0UXVlcnkuZm9ybWF0QmluZFBhcmFtZXRlcnMoXG4gICAgICBzcWwsXG4gICAgICB0aGlzLm9wdGlvbnMuYmluZCxcbiAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0IHx8IFwic3FsaXRlXCIsXG4gICAgICB7IHNraXBVbmVzY2FwZTogZmFsc2UgfVxuICAgIClbMF07XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXREYXRhYmFzZU1ldGhvZCgpO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gdGhpcy5fbG9nUXVlcnkodGhpcy5zcWwsIGRlYnVnLCBwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXM7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29ubiA9IHRoaXMuY29ubmVjdGlvbjtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtblR5cGVzID0ge307XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGV4ZWN1dGVTcWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzcWwuc3RhcnRzV2l0aChcIi0tIFwiKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImV4ZWNcIikge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY29ubi5leGVjKFxuICAgICAgICAgICAgICAgICAgW3sgc3FsOiBzZWxmLnNxbCwgYXJnczogW10gfV0sXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIChleGVjdXRpb25FcnJvciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgcmV0dXJuIFBSQUdNQSBJTkRFWF9MSVNUIGFuZCBJTkRFWF9JTkZPXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGB0aGlzYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgc3VjY2Vzc0NhbGxiYWNrID0gZnVuY3Rpb24oXywgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgLy8gYHNlbGZgIGlzIHBhc3NlZCBmcm9tIHNxbGl0ZSwgd2UgaGF2ZSBubyBjb250cm9sIG92ZXIgdGhpcy5cbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldID0gcmVzdWx0cy5pbnNlcnRJZDtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VzID0gcmVzdWx0cy5yb3dzQWZmZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzID0gcXVlcnkuY29udmVydFRvQXJyYXkocmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGRlYnVnKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKHNlbGYsIGNvbHVtblR5cGVzLCBlcnIpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBbXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgY29ubi5leGVjdXRlU3FsKFxuICAgICAgICAgICAgICAgIHNlbGYuc3FsLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2tcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgLypjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW5ub3QgdXNlIGFycm93IGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgYm91bmQgdG8gdGhlIHN0YXRlbWVudFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBgc2VsZmAgaXMgcGFzc2VkIGZyb20gc3FsaXRlLCB3ZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciB0aGlzLlxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXSA9IHJlc3VsdHMuaW5zZXJ0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZXMgPSByZXN1bHRzLnJvd3NBZmZlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShzZWxmLCBjb2x1bW5UeXBlcywgZXJyKSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25uLmV4ZWMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgICBzZWxmLnNxbCxcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGlmIChtZXRob2QgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgbGV0IHRhYmxlTmFtZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMudGFibGVOYW1lcykge1xuICAgICAgICAgIHRhYmxlTmFtZXMgPSB0aGlzLm9wdGlvbnMudGFibGVOYW1lcztcbiAgICAgICAgfSBlbHNlIGlmICgvRlJPTSBgKC4qPylgL2kuZXhlYyh0aGlzLnNxbCkpIHtcbiAgICAgICAgICB0YWJsZU5hbWVzLnB1c2goL0ZST00gYCguKj8pYC9pLmV4ZWModGhpcy5zcWwpWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSwgdGhlcmUncyBubyBuZWVkIHRvIGFzayBmb3IgaXQgYWdhaW5cbiAgICAgICAgdGFibGVOYW1lcyA9IHRhYmxlTmFtZXMuZmlsdGVyKFxuICAgICAgICAgIHRhYmxlTmFtZSA9PlxuICAgICAgICAgICAgISh0YWJsZU5hbWUgaW4gY29sdW1uVHlwZXMpICYmIHRhYmxlTmFtZSAhPT0gXCJzcWxpdGVfbWFzdGVyXCJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0YWJsZU5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBleGVjdXRlU3FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNxbENvbW1hbmRzID0gdGFibGVOYW1lcy5tYXAodGFibGVOYW1lID0+IHtcbiAgICAgICAgICAgICAgdGFibGVOYW1lID0gdGFibGVOYW1lLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtgUFJBR01BIHRhYmxlX2luZm8oXFxgJHt0YWJsZU5hbWV9XFxgKWAsIHRhYmxlTmFtZV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbm4uZXhlYyhcbiAgICAgICAgICAgICAgc3FsQ29tbWFuZHMubWFwKHNxbENtZCA9PiAoe1xuICAgICAgICAgICAgICAgIHNxbDogc3FsQ21kWzBdLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcWxDb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBzcWxDb21tYW5kc1tpXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0c1tpXS5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXVtyZXN1bHQubmFtZV0gPSByZXN1bHQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhYmxlTmFtZXMuZm9yRWFjaCgodGFibGVOYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25uLmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgYFNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPScke3RhYmxlTmFtZX0nIGFuZCB0eXBlPSd0YWJsZSdgLFxuICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKF8sIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGUgPSByZXN1bHQucm93cy5pdGVtKDApO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzcWxcIiBpbiB0YWJsZSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUuc3FsID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAvL21hdGNoIGNvbHVtbiBuYW1lIHdpdGggZGF0YSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGUuc3FsLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgICAgIC8oYFxcdytgKSgoXFxzKFtBLVpdKykoKFxcKFxcZCtcXCkpKT8pKS9nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IGNvbHVtbiBuYW1lcyB3aXRoIGRhdGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbE5hbWUsIGNvbFR5cGVdID0gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIiBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9gL2csIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV1bY29sTmFtZV0gPSBjb2xUeXBlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjb2x1bW5UeXBlcylcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGFibGVOYW1lcy5sZW5ndGggLSAxKSByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihfLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8qY29ubi50cmFuc2FjdGlvbihmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZXMuZm9yRWFjaCgodGFibGVOYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbChcbiAgICAgICAgICAgICAgICAgIGBTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nJHt0YWJsZU5hbWV9JyBhbmQgdHlwZT0ndGFibGUnYCxcbiAgICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oXywgcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gcmVzdWx0LnJvd3MuaXRlbSgwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0YWJsZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgIFwic3FsXCIgaW4gdGFibGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUuc3FsID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAvL21hdGNoIGNvbHVtbiBuYW1lIHdpdGggZGF0YSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0YWJsZS5zcWwubWF0Y2goXG4gICAgICAgICAgICAgICAgICAgICAgICAvKGBcXHcrYCkoKFxccyhbQS1aXSspKChcXChcXGQrXFwpKSk/KSkvZ1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3BsaXQgY29sdW1uIG5hbWVzIHdpdGggZGF0YSB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbE5hbWUsIGNvbFR5cGVdID0gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xccysvZywgXCIgXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9gL2csIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdW2NvbE5hbWVdID0gY29sVHlwZS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coY29sdW1uVHlwZXMpXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGFibGVOYW1lcy5sZW5ndGggLSAxKSByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oXywgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pOyovXG4gICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKGV4ZWN1dGVTcWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4ZWN1dGVTcWwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHNxbCkge1xuICAgIGxldCBjb25zdHJhaW50cyA9IHNxbC5zcGxpdChcIkNPTlNUUkFJTlQgXCIpO1xuICAgIGxldCByZWZlcmVuY2VUYWJsZU5hbWUsIHJlZmVyZW5jZVRhYmxlS2V5cywgdXBkYXRlQWN0aW9uLCBkZWxldGVBY3Rpb247XG4gICAgY29uc3RyYWludHMuc3BsaWNlKDAsIDEpO1xuICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHMubWFwKGNvbnN0cmFpbnRTcWwgPT4ge1xuICAgICAgLy9QYXJzZSBmb3JlaWduIGtleSBzbmlwcGV0c1xuICAgICAgaWYgKGNvbnN0cmFpbnRTcWwuaW5jbHVkZXMoXCJSRUZFUkVOQ0VTXCIpKSB7XG4gICAgICAgIC8vUGFyc2Ugb3V0IHRoZSBjb25zdHJhaW50IGNvbmRpdGlvbiBmb3JtIHNxbCBzdHJpbmdcbiAgICAgICAgdXBkYXRlQWN0aW9uID0gY29uc3RyYWludFNxbC5tYXRjaChcbiAgICAgICAgICAvT04gVVBEQVRFIChDQVNDQURFfFNFVCBOVUxMfFJFU1RSSUNUfE5PIEFDVElPTnxTRVQgREVGQVVMVCl7MX0vXG4gICAgICAgICk7XG4gICAgICAgIGRlbGV0ZUFjdGlvbiA9IGNvbnN0cmFpbnRTcWwubWF0Y2goXG4gICAgICAgICAgL09OIERFTEVURSAoQ0FTQ0FERXxTRVQgTlVMTHxSRVNUUklDVHxOTyBBQ1RJT058U0VUIERFRkFVTFQpezF9L1xuICAgICAgICApO1xuXG4gICAgICAgIGlmICh1cGRhdGVBY3Rpb24pIHtcbiAgICAgICAgICB1cGRhdGVBY3Rpb24gPSB1cGRhdGVBY3Rpb25bMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsZXRlQWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlQWN0aW9uID0gZGVsZXRlQWN0aW9uWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlc1JlZ2V4ID0gL1JFRkVSRU5DRVMuK1xcKCg/OlteKShdK3xcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKlxcKS87XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUNvbmRpdGlvbnMgPSBjb25zdHJhaW50U3FsXG4gICAgICAgICAgLm1hdGNoKHJlZmVyZW5jZXNSZWdleClbMF1cbiAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICByZWZlcmVuY2VUYWJsZU5hbWUgPSBVdGlscy5yZW1vdmVUaWNrcyhyZWZlcmVuY2VDb25kaXRpb25zWzFdKTtcbiAgICAgICAgbGV0IGNvbHVtbk5hbWVzID0gcmVmZXJlbmNlQ29uZGl0aW9uc1syXTtcbiAgICAgICAgY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lcy5yZXBsYWNlKC9cXCh8XFwpL2csIFwiXCIpLnNwbGl0KFwiLCBcIik7XG4gICAgICAgIHJlZmVyZW5jZVRhYmxlS2V5cyA9IGNvbHVtbk5hbWVzLm1hcChjb2x1bW4gPT5cbiAgICAgICAgICBVdGlscy5yZW1vdmVUaWNrcyhjb2x1bW4pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRDb25kaXRpb24gPSBjb25zdHJhaW50U3FsLm1hdGNoKFxuICAgICAgICAvXFwoKD86W14pKF0rfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqXFwpL1xuICAgICAgKVswXTtcbiAgICAgIGNvbnN0cmFpbnRTcWwgPSBjb25zdHJhaW50U3FsLnJlcGxhY2UoL1xcKC4rXFwpLywgXCJcIik7XG4gICAgICBjb25zdCBjb25zdHJhaW50ID0gY29uc3RyYWludFNxbC5zcGxpdChcIiBcIik7XG5cbiAgICAgIGlmIChjb25zdHJhaW50WzFdID09PSBcIlBSSU1BUllcIiB8fCBjb25zdHJhaW50WzFdID09PSBcIkZPUkVJR05cIikge1xuICAgICAgICBjb25zdHJhaW50WzFdICs9IFwiIEtFWVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb25zdHJhaW50TmFtZTogVXRpbHMucmVtb3ZlVGlja3MoY29uc3RyYWludFswXSksXG4gICAgICAgIGNvbnN0cmFpbnRUeXBlOiBjb25zdHJhaW50WzFdLFxuICAgICAgICB1cGRhdGVBY3Rpb24sXG4gICAgICAgIGRlbGV0ZUFjdGlvbixcbiAgICAgICAgc3FsOiBzcWwucmVwbGFjZSgvXCIvZywgXCJgXCIpLCAvL1NxbGl0ZSByZXR1cm5zIGRvdWJsZSBxdW90ZXMgZm9yIHRhYmxlIG5hbWVcbiAgICAgICAgY29uc3RyYWludENvbmRpdGlvbixcbiAgICAgICAgcmVmZXJlbmNlVGFibGVOYW1lLFxuICAgICAgICByZWZlcmVuY2VUYWJsZUtleXNcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludHM7XG4gIH1cblxuICBhcHBseVBhcnNlcnModHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZS5pbmNsdWRlcyhcIihcIikpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgbGVuZ3RoIHBhcnRcbiAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cigwLCB0eXBlLmluZGV4T2YoXCIoXCIpKTtcbiAgICB9XG4gICAgdHlwZSA9IHR5cGUucmVwbGFjZShcIlVOU0lHTkVEXCIsIFwiXCIpLnJlcGxhY2UoXCJaRVJPRklMTFwiLCBcIlwiKTtcbiAgICB0eXBlID0gdHlwZS50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBwYXJzZSA9IHBhcnNlclN0b3JlLmdldCh0eXBlKTtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgcGFyc2UpIHtcbiAgICAgIHJldHVybiBwYXJzZSh2YWx1ZSwgeyB0aW1lem9uZTogdGhpcy5zZXF1ZWxpemUub3B0aW9ucy50aW1lem9uZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZm9ybWF0RXJyb3IoZXJyKSB7XG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBcIlNRTElURV9DT05TVFJBSU5UXCI6IHtcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiRk9SRUlHTiBLRVkgY29uc3RyYWludCBmYWlsZWRcIikpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5Gb3JlaWduS2V5Q29uc3RyYWludEVycm9yKHtcbiAgICAgICAgICAgIHBhcmVudDogZXJyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmllbGRzID0gW107XG5cbiAgICAgICAgLy8gU3FsaXRlIHByZSAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IGNvbHVtbnMgeCwgeSBhcmUgbm90IHVuaXF1ZVxuICAgICAgICBsZXQgbWF0Y2ggPSBlcnIubWVzc2FnZS5tYXRjaCgvY29sdW1ucyAoLio/KSBhcmUvKTtcbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmIG1hdGNoLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV0uc3BsaXQoXCIsIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTcWxpdGUgcG9zdCAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IFVOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogdGFibGUueCwgdGFibGUueVxuICAgICAgICAgIG1hdGNoID0gZXJyLm1lc3NhZ2UubWF0Y2goL1VOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogKC4qKS8pO1xuICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiBtYXRjaC5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV1cbiAgICAgICAgICAgICAgLnNwbGl0KFwiLCBcIilcbiAgICAgICAgICAgICAgLm1hcChjb2x1bW5XaXRoVGFibGUgPT4gY29sdW1uV2l0aFRhYmxlLnNwbGl0KFwiLlwiKVsxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGxldCBtZXNzYWdlID0gXCJWYWxpZGF0aW9uIGVycm9yXCI7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAgIG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9ySXRlbShcbiAgICAgICAgICAgICAgdGhpcy5nZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlKGZpZWxkKSxcbiAgICAgICAgICAgICAgXCJ1bmlxdWUgdmlvbGF0aW9uXCIsIC8vIHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnMuREIsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2VbZmllbGRdLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICBcIm5vdF91bmlxdWVcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgIF8uZm9yT3duKHRoaXMubW9kZWwudW5pcXVlS2V5cywgY29uc3RyYWludCA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pc0VxdWFsKGNvbnN0cmFpbnQuZmllbGRzLCBmaWVsZHMpICYmICEhY29uc3RyYWludC5tc2cpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGNvbnN0cmFpbnQubXNnO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5VbmlxdWVDb25zdHJhaW50RXJyb3Ioe1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgZXJyb3JzLFxuICAgICAgICAgIHBhcmVudDogZXJyLFxuICAgICAgICAgIGZpZWxkc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJTUUxJVEVfQlVTWVwiOlxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5UaW1lb3V0RXJyb3IoZXJyKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBzZXF1ZWxpemVFcnJvcnMuRGF0YWJhc2VFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNob3dJbmRleGVzUXVlcnkoZGF0YSkge1xuICAgIC8vIFNxbGl0ZSByZXR1cm5zIGluZGV4ZXMgc28gdGhlIG9uZSB0aGF0IHdhcyBkZWZpbmVkIGxhc3QgaXMgcmV0dXJuZWQgZmlyc3QuIExldHMgcmV2ZXJzZSB0aGF0IVxuICAgIHJldHVybiBQcm9taXNlLm1hcChkYXRhLnJldmVyc2UoKSwgaXRlbSA9PiB7XG4gICAgICBpdGVtLmZpZWxkcyA9IFtdO1xuICAgICAgaXRlbS5wcmltYXJ5ID0gZmFsc2U7XG4gICAgICBpdGVtLnVuaXF1ZSA9ICEhaXRlbS51bmlxdWU7XG4gICAgICBpdGVtLmNvbnN0cmFpbnROYW1lID0gaXRlbS5uYW1lO1xuICAgICAgcmV0dXJuIHRoaXMucnVuKGBQUkFHTUEgSU5ERVhfSU5GTyhcXGAke2l0ZW0ubmFtZX1cXGApYCkudGhlbihjb2x1bW5zID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICAgIGl0ZW0uZmllbGRzW2NvbHVtbi5zZXFub10gPSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmRlcjogdW5kZWZpbmVkXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhYmFzZU1ldGhvZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNxbC5pbmNsdWRlcyhcIlBSQUdNQVwiKSB8fFxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJDT01NSVRcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiUk9MTEJBQ0tcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiVFJBTlNBQ1RJT05cIilcbiAgICApIHtcbiAgICAgIHJldHVybiBcImV4ZWNcIjsgLy8gTmVlZGVkIHRvIHJ1biBuby1vcCB0cmFuc2FjdGlvblxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmlzSW5zZXJ0UXVlcnkoKSB8fFxuICAgICAgdGhpcy5pc1VwZGF0ZVF1ZXJ5KCkgfHxcbiAgICAgIHRoaXMuaXNCdWxrVXBkYXRlUXVlcnkoKSB8fFxuICAgICAgdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURSBURU1QT1JBUlkgVEFCTEVcIi50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuQlVMS0RFTEVURVxuICAgICkge1xuICAgICAgcmV0dXJuIFwicnVuXCI7XG4gICAgfVxuICAgIHJldHVybiBcImFsbFwiO1xuICB9XG4gIGNvbnZlcnRUb0FycmF5KHJlc3VsdHMpIHtcbiAgICBpZiAoIXJlc3VsdHMucm93cykgcmV0dXJuIFtdO1xuICAgIGlmIChcImFycmF5XCIgaW4gcmVzdWx0cyB8fCBcIl9hcnJheVwiIGluIHJlc3VsdHMucm93cylcbiAgICAgIHJldHVybiByZXN1bHRzLmFycmF5IHx8IHJlc3VsdHMucm93cy5fYXJyYXk7XG4gICAgaWYgKCFyZXN1bHRzLnJvd3MuaXRlbSkgcmV0dXJuIHJlc3VsdHMucm93cztcbiAgICBjb25zdCBkYXRhID0gbmV3IEFycmF5KHJlc3VsdHMucm93cy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkYXRhW2ldID0gcmVzdWx0cy5yb3dzLml0ZW0oaSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUXVlcnk7XG5tb2R1bGUuZXhwb3J0cy5RdWVyeSA9IFF1ZXJ5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IFF1ZXJ5O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnkuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIlByb21pc2UiLCJBYnN0cmFjdFF1ZXJ5IiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsInBhcnNlclN0b3JlIiwibG9nZ2VyIiwiZGVidWciLCJkZWJ1Z0NvbnRleHQiLCJnZXRNZXRob2RzIiwib2JqIiwicHJvcGVydGllcyIsIlNldCIsImN1cnJlbnRPYmoiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibWFwIiwiaXRlbSIsImFkZCIsImdldFByb3RvdHlwZU9mIiwia2V5cyIsImZpbHRlciIsIlF1ZXJ5IiwiaW5jbHVkZSIsInByZWZpeCIsInJldCIsIl9pbmNsdWRlIiwia2V5IiwiYXMiLCJtb2RlbCIsIm1lcmdlIiwiX2NvbGxlY3RNb2RlbHMiLCJtZXRhRGF0YSIsImNvbHVtblR5cGVzIiwiZXJyIiwicmVzdWx0cyIsInNxbCIsImZvcm1hdEVycm9yIiwicmVzdWx0IiwiaW5zdGFuY2UiLCJpc0luc2VydFF1ZXJ5IiwiaGFuZGxlSW5zZXJ0UXVlcnkiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsInJhd0F0dHJpYnV0ZXMiLCJzdGFydElkIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImNoYW5nZXMiLCJpIiwicHVzaCIsImZpZWxkIiwiaXNTaG93VGFibGVzUXVlcnkiLCJyb3ciLCJuYW1lIiwiaXNTaG93Q29uc3RyYWludHNRdWVyeSIsInBhcnNlQ29uc3RyYWludHNGcm9tU3FsIiwiaXNTZWxlY3RRdWVyeSIsIm9wdGlvbnMiLCJyYXciLCJoYW5kbGVTZWxlY3RRdWVyeSIsInByZWZpeGVzIiwibWFwVmFsdWVzIiwidmFsdWUiLCJpbmNsdWRlcyIsImxhc3RpbmQiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsInRvU3RyaW5nIiwicmVwbGFjZSIsInRhYmxlVHlwZXMiLCJmb3JPd24iLCJhdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseVBhcnNlcnMiLCJpc1Nob3dPckRlc2NyaWJlUXVlcnkiLCJoYW5kbGVTaG93SW5kZXhlc1F1ZXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiX3Jlc3VsdCIsImRmbHRfdmFsdWUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwiYWxsb3dOdWxsIiwibm90bnVsbCIsInByaW1hcnlLZXkiLCJwayIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsInZlcnNpb24iLCJSQVciLCJpc1VwZGF0ZVF1ZXJ5IiwicGFyYW1ldGVycyIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiYmluZCIsImRpYWxlY3QiLCJza2lwVW5lc2NhcGUiLCJtZXRob2QiLCJnZXREYXRhYmFzZU1ldGhvZCIsImNvbXBsZXRlIiwiX2xvZ1F1ZXJ5IiwicXVlcnkiLCJzZWxmIiwiY29ubiIsImNvbm5lY3Rpb24iLCJyZXNvbHZlIiwiZXhlY3V0ZVNxbCIsInN0YXJ0c1dpdGgiLCJyZWplY3QiLCJleGVjIiwiYXJncyIsImV4ZWN1dGlvbkVycm9yIiwiY29udmVydFRvQXJyYXkiLCJfaGFuZGxlUXVlcnlSZXNwb25zZSIsImVycm9yIiwic3VjY2Vzc0NhbGxiYWNrIiwicm93c0FmZmVjdGVkIiwiaW5zZXJ0SWQiLCJlIiwiZXJyb3JDYWxsYmFjayIsInRhYmxlTmFtZXMiLCJsZW5ndGgiLCJzcWxDb21tYW5kcyIsInNxbENtZCIsInJvd3MiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0YWJsZSIsImNvbHVtbnMiLCJtYXRjaCIsImNvbCIsImNvbE5hbWUiLCJjb2xUeXBlIiwidHJpbSIsInNwbGl0IiwidGhlbiIsImNvbnN0cmFpbnRzIiwicmVmZXJlbmNlVGFibGVOYW1lIiwicmVmZXJlbmNlVGFibGVLZXlzIiwidXBkYXRlQWN0aW9uIiwiZGVsZXRlQWN0aW9uIiwic3BsaWNlIiwiY29uc3RyYWludFNxbCIsInJlZmVyZW5jZXNSZWdleCIsInJlZmVyZW5jZUNvbmRpdGlvbnMiLCJyZW1vdmVUaWNrcyIsImNvbHVtbk5hbWVzIiwiY29sdW1uIiwiY29uc3RyYWludENvbmRpdGlvbiIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNvbnN0cmFpbnRUeXBlIiwiaW5kZXhPZiIsInRvVXBwZXJDYXNlIiwicGFyc2UiLCJnZXQiLCJ0aW1lem9uZSIsInNlcXVlbGl6ZSIsImNvZGUiLCJtZXNzYWdlIiwiRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvciIsInBhcmVudCIsImZpZWxkcyIsImNvbHVtbldpdGhUYWJsZSIsImVycm9ycyIsIlZhbGlkYXRpb25FcnJvckl0ZW0iLCJnZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlIiwidW5pcXVlS2V5cyIsImlzRXF1YWwiLCJtc2ciLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJEYXRhYmFzZUVycm9yIiwiZGF0YSIsInJldmVyc2UiLCJwcmltYXJ5IiwidW5pcXVlIiwicnVuIiwic2Vxbm8iLCJvcmRlciIsImlzQnVsa1VwZGF0ZVF1ZXJ5IiwidG9Mb3dlckNhc2UiLCJhcnJheSIsIl9hcnJheSIsInZhbHVlcyIsImJpbmRQYXJhbSIsInYiLCJza2lwVmFsdWVSZXBsYWNlIiwiayIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1HLGFBQWEsR0FBR0gsT0FBTyxDQUFDLG1CQUFELENBQTdCOztBQUNBLE1BQU1JLFVBQVUsR0FB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RyxDQUFFLEVBQVAsQ0FBVCxHQUFxQkosTUFBTSxDQUFDSSxDQUFELENBQTNCO0FBQ0Q7QUFDRjs7QUFDRDlKLFFBQUFBLEdBQUcsR0FBR2xDLGFBQWEsQ0FBQ2lHLG9CQUFkLENBQW1DL0QsR0FBbkMsRUFBd0MwSixNQUF4QyxFQUFnRHpGLE9BQWhELEVBQXlEO0FBQzdENEYsVUFBQUEsZ0JBQWdCLEVBQUU7QUFEMkMsU0FBekQsRUFFSCxDQUZHLENBQU47QUFHRDs7QUFDRCxhQUFPLENBQUM3SixHQUFELEVBQU0ySixTQUFOLENBQVA7QUFDRDs7OztFQW5DaUI3TCxhOztBQXlyQnBCaU0sTUFBTSxDQUFDQyxPQUFQLEdBQWlCOUssS0FBakI7QUFDQTZLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlOUssS0FBZixHQUF1QkEsS0FBdkI7QUFDQTZLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCL0ssS0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZVwiKTtcbmNvbnN0IEFic3RyYWN0UXVlcnkgPSByZXF1aXJlKFwiLi4vYWJzdHJhY3QvcXVlcnlcIik7XG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3F1ZXJ5LXR5cGVzXCIpO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dnZXJcIik7XG5cbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcInNxbDpzcWxpdGVcIik7XG5jb25zdCBnZXRNZXRob2RzID0gb2JqID0+IHtcbiAgbGV0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG4gIGxldCBjdXJyZW50T2JqID0gb2JqO1xuICBkbyB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudE9iaikubWFwKGl0ZW0gPT4gcHJvcGVydGllcy5hZGQoaXRlbSkpO1xuICB9IHdoaWxlICgoY3VycmVudE9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50T2JqKSkpO1xuICByZXR1cm4gWy4uLnByb3BlcnRpZXMua2V5cygpXS5maWx0ZXIoaXRlbSA9PiB0eXBlb2Ygb2JqW2l0ZW1dID09PSBcImZ1bmN0aW9uXCIpO1xufTtcbmNsYXNzIFF1ZXJ5IGV4dGVuZHMgQWJzdHJhY3RRdWVyeSB7XG4gIGdldEluc2VydElkRmllbGQoKSB7XG4gICAgcmV0dXJuIFwibGFzdElEXCI7XG4gIH1cblxuICAvKipcbiAgICogcmV3cml0ZSBxdWVyeSB3aXRoIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlhbGVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0KSB7XG4gICAgbGV0IGJpbmRQYXJhbTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICAgIGJpbmRQYXJhbVtgJCR7aSArIDF9YF0gPSB2O1xuICAgICAgfSk7XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpKSB7XG4gICAgICAgICAgYmluZFBhcmFtW2AkJHtrfWBdID0gdmFsdWVzW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH1cbiAgICByZXR1cm4gW3NxbCwgYmluZFBhcmFtXTtcbiAgfVxuXG4gIF9jb2xsZWN0TW9kZWxzKGluY2x1ZGUsIHByZWZpeCkge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuXG4gICAgaWYgKGluY2x1ZGUpIHtcbiAgICAgIGZvciAoY29uc3QgX2luY2x1ZGUgb2YgaW5jbHVkZSkge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBpZiAoIXByZWZpeCkge1xuICAgICAgICAgIGtleSA9IF9pbmNsdWRlLmFzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IGAke3ByZWZpeH0uJHtfaW5jbHVkZS5hc31gO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXldID0gX2luY2x1ZGUubW9kZWw7XG5cbiAgICAgICAgaWYgKF9pbmNsdWRlLmluY2x1ZGUpIHtcbiAgICAgICAgICBfLm1lcmdlKHJldCwgdGhpcy5fY29sbGVjdE1vZGVscyhfaW5jbHVkZS5pbmNsdWRlLCBrZXkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBfaGFuZGxlUXVlcnlSZXNwb25zZShtZXRhRGF0YSwgY29sdW1uVHlwZXMsIGVyciwgcmVzdWx0cykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci5zcWwgPSB0aGlzLnNxbDtcbiAgICAgIHRocm93IHRoaXMuZm9ybWF0RXJyb3IoZXJyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuaW5zdGFuY2U7XG4gICAgLy8gYWRkIHRoZSBpbnNlcnRlZCByb3cgaWQgdG8gdGhlIGluc3RhbmNlXG4gICAgaWYgKHRoaXMuaXNJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5zZXJ0UXVlcnkocmVzdWx0cywgbWV0YURhdGEpO1xuICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgIC8vIGhhbmRsZSBidWxrQ3JlYXRlIEFJIHByaW1hcnkga2V5XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvKiAgbWV0YURhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdGF0ZW1lbnRcIiAmJiAqL1xuICAgICAgICAgIHRoaXMubW9kZWwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgPT09XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzdGFydElkID1cbiAgICAgICAgICAgIG1ldGFEYXRhW3RoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpXSAtIG1ldGFEYXRhLmNoYW5nZXMgKyAxO1xuXG4gICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SWQ7IGkgPCBzdGFydElkICsgbWV0YURhdGEuY2hhbmdlczsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgIFt0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICAgICAgICAgIC5maWVsZF06IGlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBtZXRhRGF0YVt0aGlzLmdldEluc2VydElkRmllbGQoKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Nob3dUYWJsZXNRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAocm93ID0+IHJvdy5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93Q29uc3RyYWludHNRdWVyeSgpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRzO1xuICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnNxbCkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHJlc3VsdHNbMF0uc3FsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0UXVlcnkoKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYXcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VsZWN0UXVlcnkocmVzdWx0cyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGlzIGEgbWFwIG9mIHByZWZpeCBzdHJpbmdzIHRvIG1vZGVscywgZS5nLiB1c2VyLnByb2plY3RzIC0+IFByb2plY3QgbW9kZWxcbiAgICAgIGNvbnN0IHByZWZpeGVzID0gdGhpcy5fY29sbGVjdE1vZGVscyh0aGlzLm9wdGlvbnMuaW5jbHVkZSk7XG5cbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMocmVzdWx0LCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0aW5kID0gbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG5cbiAgICAgICAgICAgIG1vZGVsID0gcHJlZml4ZXNbbmFtZS5zdWJzdHIoMCwgbGFzdGluZCldO1xuXG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIobGFzdGluZCArIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IHRoaXMub3B0aW9ucy5tb2RlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbFxuICAgICAgICAgICAgLmdldFRhYmxlTmFtZSgpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgY29uc3QgdGFibGVUeXBlcyA9IGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gfHwge307XG5cbiAgICAgICAgICBpZiAodGFibGVUeXBlcyAmJiAhKG5hbWUgaW4gdGFibGVUeXBlcykpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb2x1bW4gaXMgYWxpYXNlZFxuICAgICAgICAgICAgXy5mb3JPd24obW9kZWwucmF3QXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSBrZXkgJiYgYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJpYnV0ZS5maWVsZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFibGVUeXBlcywgbmFtZSlcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVBhcnNlcnModGFibGVUeXBlc1tuYW1lXSwgdmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZWxlY3RRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93T3JEZXNjcmliZVF1ZXJ5KCkpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgSU5ERVhfTElTVFwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2hvd0luZGV4ZXNRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIElOREVYX0lORk9cIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgVEFCTEVfSU5GT1wiKSkge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgc3FsaXRlIHdheSBvZiBnZXR0aW5nIHRoZSBtZXRhZGF0YSBvZiBhIHRhYmxlXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgZm9yIChjb25zdCBfcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAoX3Jlc3VsdC5kZmx0X3ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDb2x1bW4gc2NoZW1hIG9taXRzIGFueSBcIkRFRkFVTFQgLi4uXCJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9yZXN1bHQuZGZsdF92YWx1ZSA9PT0gXCJOVUxMXCIpIHtcbiAgICAgICAgICAgIC8vIENvbHVtbiBzY2hlbWEgaXMgYSBcIkRFRkFVTFQgTlVMTFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVzdWx0LmRmbHRfdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBfcmVzdWx0LnR5cGUsXG4gICAgICAgICAgICBhbGxvd051bGw6IF9yZXN1bHQubm90bnVsbCA9PT0gMCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IF9yZXN1bHQucGsgIT09IDBcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlc3VsdFtfcmVzdWx0Lm5hbWVdLnR5cGUgPT09IFwiVElOWUlOVCgxKVwiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSB7IFwiMFwiOiBmYWxzZSwgXCIxXCI6IHRydWUgfVtcbiAgICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSByZXN1bHRbXG4gICAgICAgICAgICAgIF9yZXN1bHQubmFtZVxuICAgICAgICAgICAgXS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvJy9nLCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5cztcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgZm9yZWlnbl9rZXlzXCIpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5X2xpc3RcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBbUXVlcnlUeXBlcy5CVUxLVVBEQVRFLCBRdWVyeVR5cGVzLkJVTEtERUxFVEVdLmluY2x1ZGVzKHRoaXMub3B0aW9ucy50eXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuIG1ldGFEYXRhLmNoYW5nZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5VUFNFUlQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5WRVJTSU9OKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1swXS52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuUkFXKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdHMsIG1ldGFEYXRhXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVRdWVyeSgpIHx8IHRoaXMuaXNJbnNlcnRRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0YURhdGEuY2hhbmdlc107XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gd2Vic3FsIDogcG9seWZpbGwgZm9yZWlnbiBrZXkgaHR0cHM6Ly9qdXN0YXRoZW9yeS5jb20vMjAwNC8xMS9zcWxpdGUtZm9yZWlnbi1rZXktdHJpZ2dlcnMvXG4gIHJ1bihzcWwsIHBhcmFtZXRlcnMpIHtcbiAgICAvLyBleGVjIGRvZXMgbm90IHN1cHBvcnQgYmluZCBwYXJhbWV0ZXJcbiAgICB0aGlzLnNxbCA9IEFic3RyYWN0UXVlcnkuZm9ybWF0QmluZFBhcmFtZXRlcnMoXG4gICAgICBzcWwsXG4gICAgICB0aGlzLm9wdGlvbnMuYmluZCxcbiAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0IHx8IFwic3FsaXRlXCIsXG4gICAgICB7IHNraXBVbmVzY2FwZTogZmFsc2UgfVxuICAgIClbMF07XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXREYXRhYmFzZU1ldGhvZCgpO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gdGhpcy5fbG9nUXVlcnkodGhpcy5zcWwsIGRlYnVnLCBwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXM7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29ubiA9IHRoaXMuY29ubmVjdGlvbjtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtblR5cGVzID0ge307XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGV4ZWN1dGVTcWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzcWwuc3RhcnRzV2l0aChcIi0tIFwiKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImV4ZWNcIikge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY29ubi5leGVjKFxuICAgICAgICAgICAgICAgICAgW3sgc3FsOiBzZWxmLnNxbCwgYXJnczogW10gfV0sXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIChleGVjdXRpb25FcnJvciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgcmV0dXJuIFBSQUdNQSBJTkRFWF9MSVNUIGFuZCBJTkRFWF9JTkZPXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGB0aGlzYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgc3VjY2Vzc0NhbGxiYWNrID0gZnVuY3Rpb24ocmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgLy8gYHNlbGZgIGlzIHBhc3NlZCBmcm9tIHNxbGl0ZSwgd2UgaGF2ZSBubyBjb250cm9sIG92ZXIgdGhpcy5cbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldID0gcmVzdWx0cy5pbnNlcnRJZDtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VzID0gcmVzdWx0cy5yb3dzQWZmZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzID0gcXVlcnkuY29udmVydFRvQXJyYXkocmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGRlYnVnKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKHNlbGYsIGNvbHVtblR5cGVzLCBlcnIpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBbXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgY29ubi5leGVjdXRlU3FsKFxuICAgICAgICAgICAgICAgIHNlbGYuc3FsLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2tcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgLypjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW5ub3QgdXNlIGFycm93IGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgYm91bmQgdG8gdGhlIHN0YXRlbWVudFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBgc2VsZmAgaXMgcGFzc2VkIGZyb20gc3FsaXRlLCB3ZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciB0aGlzLlxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXSA9IHJlc3VsdHMuaW5zZXJ0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZXMgPSByZXN1bHRzLnJvd3NBZmZlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShzZWxmLCBjb2x1bW5UeXBlcywgZXJyKSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25uLmV4ZWMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgICBzZWxmLnNxbCxcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGlmIChtZXRob2QgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgbGV0IHRhYmxlTmFtZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMudGFibGVOYW1lcykge1xuICAgICAgICAgIHRhYmxlTmFtZXMgPSB0aGlzLm9wdGlvbnMudGFibGVOYW1lcztcbiAgICAgICAgfSBlbHNlIGlmICgvRlJPTSBgKC4qPylgL2kuZXhlYyh0aGlzLnNxbCkpIHtcbiAgICAgICAgICB0YWJsZU5hbWVzLnB1c2goL0ZST00gYCguKj8pYC9pLmV4ZWModGhpcy5zcWwpWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSwgdGhlcmUncyBubyBuZWVkIHRvIGFzayBmb3IgaXQgYWdhaW5cbiAgICAgICAgdGFibGVOYW1lcyA9IHRhYmxlTmFtZXMuZmlsdGVyKFxuICAgICAgICAgIHRhYmxlTmFtZSA9PlxuICAgICAgICAgICAgISh0YWJsZU5hbWUgaW4gY29sdW1uVHlwZXMpICYmIHRhYmxlTmFtZSAhPT0gXCJzcWxpdGVfbWFzdGVyXCJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0YWJsZU5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBleGVjdXRlU3FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNxbENvbW1hbmRzID0gdGFibGVOYW1lcy5tYXAodGFibGVOYW1lID0+IHtcbiAgICAgICAgICAgICAgdGFibGVOYW1lID0gdGFibGVOYW1lLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtgUFJBR01BIHRhYmxlX2luZm8oXFxgJHt0YWJsZU5hbWV9XFxgKWAsIHRhYmxlTmFtZV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbm4uZXhlYyhcbiAgICAgICAgICAgICAgc3FsQ29tbWFuZHMubWFwKHNxbENtZCA9PiAoe1xuICAgICAgICAgICAgICAgIHNxbDogc3FsQ21kWzBdLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcWxDb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBzcWxDb21tYW5kc1tpXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0c1tpXS5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXVtyZXN1bHQubmFtZV0gPSByZXN1bHQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhYmxlTmFtZXMuZm9yRWFjaCgodGFibGVOYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25uLmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgYFNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPScke3RhYmxlTmFtZX0nIGFuZCB0eXBlPSd0YWJsZSdgLFxuICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGUgPSByZXN1bHQucm93cy5pdGVtKDApO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzcWxcIiBpbiB0YWJsZSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUuc3FsID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAvL21hdGNoIGNvbHVtbiBuYW1lIHdpdGggZGF0YSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGUuc3FsLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgICAgIC8oYFxcdytgKSgoXFxzKFtBLVpdKykoKFxcKFxcZCtcXCkpKT8pKS9nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IGNvbHVtbiBuYW1lcyB3aXRoIGRhdGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbE5hbWUsIGNvbFR5cGVdID0gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIiBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9gL2csIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV1bY29sTmFtZV0gPSBjb2xUeXBlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjb2x1bW5UeXBlcylcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGFibGVOYW1lcy5sZW5ndGggLSAxKSByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8qY29ubi50cmFuc2FjdGlvbihmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZXMuZm9yRWFjaCgodGFibGVOYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbChcbiAgICAgICAgICAgICAgICAgIGBTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nJHt0YWJsZU5hbWV9JyBhbmQgdHlwZT0ndGFibGUnYCxcbiAgICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oXywgcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gcmVzdWx0LnJvd3MuaXRlbSgwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0YWJsZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgIFwic3FsXCIgaW4gdGFibGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUuc3FsID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAvL21hdGNoIGNvbHVtbiBuYW1lIHdpdGggZGF0YSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0YWJsZS5zcWwubWF0Y2goXG4gICAgICAgICAgICAgICAgICAgICAgICAvKGBcXHcrYCkoKFxccyhbQS1aXSspKChcXChcXGQrXFwpKSk/KSkvZ1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3BsaXQgY29sdW1uIG5hbWVzIHdpdGggZGF0YSB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbE5hbWUsIGNvbFR5cGVdID0gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xccysvZywgXCIgXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9gL2csIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdW2NvbE5hbWVdID0gY29sVHlwZS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coY29sdW1uVHlwZXMpXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGFibGVOYW1lcy5sZW5ndGggLSAxKSByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oXywgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pOyovXG4gICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKGV4ZWN1dGVTcWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4ZWN1dGVTcWwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHNxbCkge1xuICAgIGxldCBjb25zdHJhaW50cyA9IHNxbC5zcGxpdChcIkNPTlNUUkFJTlQgXCIpO1xuICAgIGxldCByZWZlcmVuY2VUYWJsZU5hbWUsIHJlZmVyZW5jZVRhYmxlS2V5cywgdXBkYXRlQWN0aW9uLCBkZWxldGVBY3Rpb247XG4gICAgY29uc3RyYWludHMuc3BsaWNlKDAsIDEpO1xuICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHMubWFwKGNvbnN0cmFpbnRTcWwgPT4ge1xuICAgICAgLy9QYXJzZSBmb3JlaWduIGtleSBzbmlwcGV0c1xuICAgICAgaWYgKGNvbnN0cmFpbnRTcWwuaW5jbHVkZXMoXCJSRUZFUkVOQ0VTXCIpKSB7XG4gICAgICAgIC8vUGFyc2Ugb3V0IHRoZSBjb25zdHJhaW50IGNvbmRpdGlvbiBmb3JtIHNxbCBzdHJpbmdcbiAgICAgICAgdXBkYXRlQWN0aW9uID0gY29uc3RyYWludFNxbC5tYXRjaChcbiAgICAgICAgICAvT04gVVBEQVRFIChDQVNDQURFfFNFVCBOVUxMfFJFU1RSSUNUfE5PIEFDVElPTnxTRVQgREVGQVVMVCl7MX0vXG4gICAgICAgICk7XG4gICAgICAgIGRlbGV0ZUFjdGlvbiA9IGNvbnN0cmFpbnRTcWwubWF0Y2goXG4gICAgICAgICAgL09OIERFTEVURSAoQ0FTQ0FERXxTRVQgTlVMTHxSRVNUUklDVHxOTyBBQ1RJT058U0VUIERFRkFVTFQpezF9L1xuICAgICAgICApO1xuXG4gICAgICAgIGlmICh1cGRhdGVBY3Rpb24pIHtcbiAgICAgICAgICB1cGRhdGVBY3Rpb24gPSB1cGRhdGVBY3Rpb25bMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsZXRlQWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlQWN0aW9uID0gZGVsZXRlQWN0aW9uWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlc1JlZ2V4ID0gL1JFRkVSRU5DRVMuK1xcKCg/OlteKShdK3xcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKlxcKS87XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUNvbmRpdGlvbnMgPSBjb25zdHJhaW50U3FsXG4gICAgICAgICAgLm1hdGNoKHJlZmVyZW5jZXNSZWdleClbMF1cbiAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICByZWZlcmVuY2VUYWJsZU5hbWUgPSBVdGlscy5yZW1vdmVUaWNrcyhyZWZlcmVuY2VDb25kaXRpb25zWzFdKTtcbiAgICAgICAgbGV0IGNvbHVtbk5hbWVzID0gcmVmZXJlbmNlQ29uZGl0aW9uc1syXTtcbiAgICAgICAgY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lcy5yZXBsYWNlKC9cXCh8XFwpL2csIFwiXCIpLnNwbGl0KFwiLCBcIik7XG4gICAgICAgIHJlZmVyZW5jZVRhYmxlS2V5cyA9IGNvbHVtbk5hbWVzLm1hcChjb2x1bW4gPT5cbiAgICAgICAgICBVdGlscy5yZW1vdmVUaWNrcyhjb2x1bW4pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRDb25kaXRpb24gPSBjb25zdHJhaW50U3FsLm1hdGNoKFxuICAgICAgICAvXFwoKD86W14pKF0rfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqXFwpL1xuICAgICAgKVswXTtcbiAgICAgIGNvbnN0cmFpbnRTcWwgPSBjb25zdHJhaW50U3FsLnJlcGxhY2UoL1xcKC4rXFwpLywgXCJcIik7XG4gICAgICBjb25zdCBjb25zdHJhaW50ID0gY29uc3RyYWludFNxbC5zcGxpdChcIiBcIik7XG5cbiAgICAgIGlmIChjb25zdHJhaW50WzFdID09PSBcIlBSSU1BUllcIiB8fCBjb25zdHJhaW50WzFdID09PSBcIkZPUkVJR05cIikge1xuICAgICAgICBjb25zdHJhaW50WzFdICs9IFwiIEtFWVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb25zdHJhaW50TmFtZTogVXRpbHMucmVtb3ZlVGlja3MoY29uc3RyYWludFswXSksXG4gICAgICAgIGNvbnN0cmFpbnRUeXBlOiBjb25zdHJhaW50WzFdLFxuICAgICAgICB1cGRhdGVBY3Rpb24sXG4gICAgICAgIGRlbGV0ZUFjdGlvbixcbiAgICAgICAgc3FsOiBzcWwucmVwbGFjZSgvXCIvZywgXCJgXCIpLCAvL1NxbGl0ZSByZXR1cm5zIGRvdWJsZSBxdW90ZXMgZm9yIHRhYmxlIG5hbWVcbiAgICAgICAgY29uc3RyYWludENvbmRpdGlvbixcbiAgICAgICAgcmVmZXJlbmNlVGFibGVOYW1lLFxuICAgICAgICByZWZlcmVuY2VUYWJsZUtleXNcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludHM7XG4gIH1cblxuICBhcHBseVBhcnNlcnModHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZS5pbmNsdWRlcyhcIihcIikpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgbGVuZ3RoIHBhcnRcbiAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cigwLCB0eXBlLmluZGV4T2YoXCIoXCIpKTtcbiAgICB9XG4gICAgdHlwZSA9IHR5cGUucmVwbGFjZShcIlVOU0lHTkVEXCIsIFwiXCIpLnJlcGxhY2UoXCJaRVJPRklMTFwiLCBcIlwiKTtcbiAgICB0eXBlID0gdHlwZS50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBwYXJzZSA9IHBhcnNlclN0b3JlLmdldCh0eXBlKTtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgcGFyc2UpIHtcbiAgICAgIHJldHVybiBwYXJzZSh2YWx1ZSwgeyB0aW1lem9uZTogdGhpcy5zZXF1ZWxpemUub3B0aW9ucy50aW1lem9uZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZm9ybWF0RXJyb3IoZXJyKSB7XG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBcIlNRTElURV9DT05TVFJBSU5UXCI6IHtcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiRk9SRUlHTiBLRVkgY29uc3RyYWludCBmYWlsZWRcIikpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5Gb3JlaWduS2V5Q29uc3RyYWludEVycm9yKHtcbiAgICAgICAgICAgIHBhcmVudDogZXJyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmllbGRzID0gW107XG5cbiAgICAgICAgLy8gU3FsaXRlIHByZSAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IGNvbHVtbnMgeCwgeSBhcmUgbm90IHVuaXF1ZVxuICAgICAgICBsZXQgbWF0Y2ggPSBlcnIubWVzc2FnZS5tYXRjaCgvY29sdW1ucyAoLio/KSBhcmUvKTtcbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmIG1hdGNoLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV0uc3BsaXQoXCIsIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTcWxpdGUgcG9zdCAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IFVOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogdGFibGUueCwgdGFibGUueVxuICAgICAgICAgIG1hdGNoID0gZXJyLm1lc3NhZ2UubWF0Y2goL1VOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogKC4qKS8pO1xuICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiBtYXRjaC5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV1cbiAgICAgICAgICAgICAgLnNwbGl0KFwiLCBcIilcbiAgICAgICAgICAgICAgLm1hcChjb2x1bW5XaXRoVGFibGUgPT4gY29sdW1uV2l0aFRhYmxlLnNwbGl0KFwiLlwiKVsxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGxldCBtZXNzYWdlID0gXCJWYWxpZGF0aW9uIGVycm9yXCI7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAgIG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9ySXRlbShcbiAgICAgICAgICAgICAgdGhpcy5nZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlKGZpZWxkKSxcbiAgICAgICAgICAgICAgXCJ1bmlxdWUgdmlvbGF0aW9uXCIsIC8vIHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnMuREIsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2VbZmllbGRdLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICBcIm5vdF91bmlxdWVcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgIF8uZm9yT3duKHRoaXMubW9kZWwudW5pcXVlS2V5cywgY29uc3RyYWludCA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pc0VxdWFsKGNvbnN0cmFpbnQuZmllbGRzLCBmaWVsZHMpICYmICEhY29uc3RyYWludC5tc2cpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGNvbnN0cmFpbnQubXNnO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5VbmlxdWVDb25zdHJhaW50RXJyb3Ioe1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgZXJyb3JzLFxuICAgICAgICAgIHBhcmVudDogZXJyLFxuICAgICAgICAgIGZpZWxkc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJTUUxJVEVfQlVTWVwiOlxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5UaW1lb3V0RXJyb3IoZXJyKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBzZXF1ZWxpemVFcnJvcnMuRGF0YWJhc2VFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNob3dJbmRleGVzUXVlcnkoZGF0YSkge1xuICAgIC8vIFNxbGl0ZSByZXR1cm5zIGluZGV4ZXMgc28gdGhlIG9uZSB0aGF0IHdhcyBkZWZpbmVkIGxhc3QgaXMgcmV0dXJuZWQgZmlyc3QuIExldHMgcmV2ZXJzZSB0aGF0IVxuICAgIHJldHVybiBQcm9taXNlLm1hcChkYXRhLnJldmVyc2UoKSwgaXRlbSA9PiB7XG4gICAgICBpdGVtLmZpZWxkcyA9IFtdO1xuICAgICAgaXRlbS5wcmltYXJ5ID0gZmFsc2U7XG4gICAgICBpdGVtLnVuaXF1ZSA9ICEhaXRlbS51bmlxdWU7XG4gICAgICBpdGVtLmNvbnN0cmFpbnROYW1lID0gaXRlbS5uYW1lO1xuICAgICAgcmV0dXJuIHRoaXMucnVuKGBQUkFHTUEgSU5ERVhfSU5GTyhcXGAke2l0ZW0ubmFtZX1cXGApYCkudGhlbihjb2x1bW5zID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICAgIGl0ZW0uZmllbGRzW2NvbHVtbi5zZXFub10gPSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmRlcjogdW5kZWZpbmVkXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhYmFzZU1ldGhvZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNxbC5pbmNsdWRlcyhcIlBSQUdNQVwiKSB8fFxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJDT01NSVRcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiUk9MTEJBQ0tcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiVFJBTlNBQ1RJT05cIilcbiAgICApIHtcbiAgICAgIHJldHVybiBcImV4ZWNcIjsgLy8gTmVlZGVkIHRvIHJ1biBuby1vcCB0cmFuc2FjdGlvblxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmlzSW5zZXJ0UXVlcnkoKSB8fFxuICAgICAgdGhpcy5pc1VwZGF0ZVF1ZXJ5KCkgfHxcbiAgICAgIHRoaXMuaXNCdWxrVXBkYXRlUXVlcnkoKSB8fFxuICAgICAgdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURSBURU1QT1JBUlkgVEFCTEVcIi50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuQlVMS0RFTEVURVxuICAgICkge1xuICAgICAgcmV0dXJuIFwicnVuXCI7XG4gICAgfVxuICAgIHJldHVybiBcImFsbFwiO1xuICB9XG4gIGNvbnZlcnRUb0FycmF5KHJlc3VsdHMpIHtcbiAgICBpZiAoIXJlc3VsdHMucm93cykgcmV0dXJuIFtdO1xuICAgIGlmIChcImFycmF5XCIgaW4gcmVzdWx0cyB8fCBcIl9hcnJheVwiIGluIHJlc3VsdHMucm93cylcbiAgICAgIHJldHVybiByZXN1bHRzLmFycmF5IHx8IHJlc3VsdHMucm93cy5fYXJyYXk7XG4gICAgaWYgKCFyZXN1bHRzLnJvd3MuaXRlbSkgcmV0dXJuIHJlc3VsdHMucm93cztcbiAgICBjb25zdCBkYXRhID0gbmV3IEFycmF5KHJlc3VsdHMucm93cy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkYXRhW2ldID0gcmVzdWx0cy5yb3dzLml0ZW0oaSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUXVlcnk7XG5tb2R1bGUuZXhwb3J0cy5RdWVyeSA9IFF1ZXJ5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IFF1ZXJ5O1xuIl19 \ No newline at end of file diff --git a/lib/dialects/sqlite/query.js b/lib/dialects/sqlite/query.js index 342a4d8..6379a3e 100644 --- a/lib/dialects/sqlite/query.js +++ b/lib/dialects/sqlite/query.js @@ -297,7 +297,7 @@ class Query extends AbstractQuery { resolve(); } } else { - var successCallback = function(_, results) { + var successCallback = function(results) { try { complete(); // `self` is passed from sqlite, we have no control over this. @@ -326,7 +326,7 @@ class Query extends AbstractQuery { } }; // eslint-disable-next-line - var errorCallback = function(_, err) { + var errorCallback = function(err) { try { complete(); // `self` is passed from sqlite, we have no control over this. @@ -449,7 +449,7 @@ class Query extends AbstractQuery { conn.executeSql( `SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, [], - function(_, result) { + function(result) { const table = result.rows.item(0); if ( typeof table === "object" && @@ -474,7 +474,7 @@ class Query extends AbstractQuery { //console.log(columnTypes) if (index === tableNames.length - 1) resolve(); }, - function(_, error) { + function(error) { if (index === tableNames.length - 1) resolve(); } ); From 3444a618354553e5bcfd0ed19df5191cc8485507 Mon Sep 17 00:00:00 2001 From: prih Date: Tue, 15 Dec 2020 15:15:01 +0200 Subject: [PATCH 8/8] . --- dist/dialects/sqlite/query.js | 148 ++++++++-------------------------- lib/dialects/sqlite/query.js | 90 +-------------------- 2 files changed, 37 insertions(+), 201 deletions(-) diff --git a/dist/dialects/sqlite/query.js b/dist/dialects/sqlite/query.js index d5b5aac..ee64954 100644 --- a/dist/dialects/sqlite/query.js +++ b/dist/dialects/sqlite/query.js @@ -319,54 +319,14 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { resolve(); } } else { - var successCallback = function (results) { - try { - complete(); // `self` is passed from sqlite, we have no control over this. - // eslint-disable-next-line no-invalid-this - - if (results.rowsAffected) { - try { - self[self.getInsertIdField()] = results.insertId; - } catch (e) { - delete self[self.getInsertIdField()]; - } - } - - self.changes = results.rowsAffected; - results = query.convertToArray(results); - resolve(query._handleQueryResponse(self, columnTypes, undefined, results)); - return; - } catch (error) { - debug(error); - reject(error); - } - }; // eslint-disable-next-line - - - var errorCallback = function (err) { - try { - complete(); // `self` is passed from sqlite, we have no control over this. - // eslint-disable-next-line no-invalid-this - - resolve(query._handleQueryResponse(self, columnTypes, err)); - } catch (error) { - reject(error); - } - }; - - if (typeof conn.exec === "function") { - parameters = parameters || []; - } else parameters = []; - - conn.executeSql(self.sql, parameters, successCallback, errorCallback); - /*conn.transaction(function(t) { + conn.transaction(function (t) { // cannot use arrow function here because the function is bound to the statement // eslint-disable-next-line - var successCallback = function(_, results) { + var successCallback = function (_, results) { try { - complete(); - // `self` is passed from sqlite, we have no control over this. + complete(); // `self` is passed from sqlite, we have no control over this. // eslint-disable-next-line no-invalid-this + if (results.rowsAffected) { try { self[self.getInsertIdField()] = results.insertId; @@ -374,43 +334,35 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { delete self[self.getInsertIdField()]; } } + self.changes = results.rowsAffected; results = query.convertToArray(results); - resolve( - query._handleQueryResponse( - self, - columnTypes, - undefined, - results - ) - ); + resolve(query._handleQueryResponse(self, columnTypes, undefined, results)); return; } catch (error) { debug(error); reject(error); } - }; - // eslint-disable-next-line - var errorCallback = function(_, err) { + }; // eslint-disable-next-line + + + var errorCallback = function (_, err) { try { - complete(); - // `self` is passed from sqlite, we have no control over this. + complete(); // `self` is passed from sqlite, we have no control over this. // eslint-disable-next-line no-invalid-this + resolve(query._handleQueryResponse(self, columnTypes, err)); } catch (error) { reject(error); } }; + if (typeof conn.exec === "function") { parameters = parameters || []; } else parameters = []; - t.executeSql( - self.sql, - parameters, - successCallback, - errorCallback - ); - });*/ + + t.executeSql(self.sql, parameters, successCallback, errorCallback); + }); } })); return null; @@ -456,63 +408,29 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { resolve(); }); } else { - tableNames.forEach((tableName, index) => { - conn.executeSql(`SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, [], function (result) { - const table = result.rows.item(0); + conn.transaction(function (t) { + tableNames.forEach((tableName, index) => { + t.executeSql(`SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, [], function (_, result) { + const table = result.rows.item(0); - if (typeof table === "object" && "sql" in table && typeof table.sql === "string") { - columnTypes[tableName] = {}; //match column name with data types + if (typeof table === "object" && "sql" in table && typeof table.sql === "string") { + columnTypes[tableName] = {}; //match column name with data types - const columns = table.sql.match(/(`\w+`)((\s([A-Z]+)((\(\d+\)))?))/g); // split column names with data type + const columns = table.sql.match(/(`\w+`)((\s([A-Z]+)((\(\d+\)))?))/g); // split column names with data type - for (const col of columns) { - const [colName, colType] = col.trim().replace(/\s+/g, " ").replace(/`/g, "").split(" "); - columnTypes[tableName][colName] = colType.trim(); - } - } //console.log(columnTypes) + for (const col of columns) { + const [colName, colType] = col.trim().replace(/\s+/g, " ").replace(/`/g, "").split(" "); + columnTypes[tableName][colName] = colType.trim(); + } + } //console.log(columnTypes) - if (index === tableNames.length - 1) resolve(); - }, function (error) { - if (index === tableNames.length - 1) resolve(); + if (index === tableNames.length - 1) resolve(); + }, function (_, error) { + if (index === tableNames.length - 1) resolve(); + }); }); }); - /*conn.transaction(function(t) { - tableNames.forEach((tableName, index) => { - t.executeSql( - `SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, - [], - function(_, result) { - const table = result.rows.item(0); - if ( - typeof table === "object" && - "sql" in table && - typeof table.sql === "string" - ) { - columnTypes[tableName] = {}; - //match column name with data types - const columns = table.sql.match( - /(`\w+`)((\s([A-Z]+)((\(\d+\)))?))/g - ); - // split column names with data type - for (const col of columns) { - const [colName, colType] = col - .trim() - .replace(/\s+/g, " ") - .replace(/`/g, "") - .split(" "); - columnTypes[tableName][colName] = colType.trim(); - } - } - //console.log(columnTypes) - if (index === tableNames.length - 1) resolve(); - }, - function(_, error) { - if (index === tableNames.length - 1) resolve(); - } - ); - }); - });*/ } }).then(executeSql); } @@ -736,4 +654,4 @@ let Query = /*#__PURE__*/function (_AbstractQuery) { module.exports = Query; module.exports.Query = Query; module.exports.default = Query; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnkuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIlByb21pc2UiLCJBYnN0cmFjdFF1ZXJ5IiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsInBhcnNlclN0b3JlIiwibG9nZ2VyIiwiZGVidWciLCJkZWJ1Z0NvbnRleHQiLCJnZXRNZXRob2RzIiwib2JqIiwicHJvcGVydGllcyIsIlNldCIsImN1cnJlbnRPYmoiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibWFwIiwiaXRlbSIsImFkZCIsImdldFByb3RvdHlwZU9mIiwia2V5cyIsImZpbHRlciIsIlF1ZXJ5IiwiaW5jbHVkZSIsInByZWZpeCIsInJldCIsIl9pbmNsdWRlIiwia2V5IiwiYXMiLCJtb2RlbCIsIm1lcmdlIiwiX2NvbGxlY3RNb2RlbHMiLCJtZXRhRGF0YSIsImNvbHVtblR5cGVzIiwiZXJyIiwicmVzdWx0cyIsInNxbCIsImZvcm1hdEVycm9yIiwicmVzdWx0IiwiaW5zdGFuY2UiLCJpc0luc2VydFF1ZXJ5IiwiaGFuZGxlSW5zZXJ0UXVlcnkiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsInJhd0F0dHJpYnV0ZXMiLCJzdGFydElkIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImNoYW5nZXMiLCJpIiwicHVzaCIsImZpZWxkIiwiaXNTaG93VGFibGVzUXVlcnkiLCJyb3ciLCJuYW1lIiwiaXNTaG93Q29uc3RyYWludHNRdWVyeSIsInBhcnNlQ29uc3RyYWludHNGcm9tU3FsIiwiaXNTZWxlY3RRdWVyeSIsIm9wdGlvbnMiLCJyYXciLCJoYW5kbGVTZWxlY3RRdWVyeSIsInByZWZpeGVzIiwibWFwVmFsdWVzIiwidmFsdWUiLCJpbmNsdWRlcyIsImxhc3RpbmQiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsInRvU3RyaW5nIiwicmVwbGFjZSIsInRhYmxlVHlwZXMiLCJmb3JPd24iLCJhdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseVBhcnNlcnMiLCJpc1Nob3dPckRlc2NyaWJlUXVlcnkiLCJoYW5kbGVTaG93SW5kZXhlc1F1ZXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiX3Jlc3VsdCIsImRmbHRfdmFsdWUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwiYWxsb3dOdWxsIiwibm90bnVsbCIsInByaW1hcnlLZXkiLCJwayIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsInZlcnNpb24iLCJSQVciLCJpc1VwZGF0ZVF1ZXJ5IiwicGFyYW1ldGVycyIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiYmluZCIsImRpYWxlY3QiLCJza2lwVW5lc2NhcGUiLCJtZXRob2QiLCJnZXREYXRhYmFzZU1ldGhvZCIsImNvbXBsZXRlIiwiX2xvZ1F1ZXJ5IiwicXVlcnkiLCJzZWxmIiwiY29ubiIsImNvbm5lY3Rpb24iLCJyZXNvbHZlIiwiZXhlY3V0ZVNxbCIsInN0YXJ0c1dpdGgiLCJyZWplY3QiLCJleGVjIiwiYXJncyIsImV4ZWN1dGlvbkVycm9yIiwiY29udmVydFRvQXJyYXkiLCJfaGFuZGxlUXVlcnlSZXNwb25zZSIsImVycm9yIiwic3VjY2Vzc0NhbGxiYWNrIiwicm93c0FmZmVjdGVkIiwiaW5zZXJ0SWQiLCJlIiwiZXJyb3JDYWxsYmFjayIsInRhYmxlTmFtZXMiLCJsZW5ndGgiLCJzcWxDb21tYW5kcyIsInNxbENtZCIsInJvd3MiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0YWJsZSIsImNvbHVtbnMiLCJtYXRjaCIsImNvbCIsImNvbE5hbWUiLCJjb2xUeXBlIiwidHJpbSIsInNwbGl0IiwidGhlbiIsImNvbnN0cmFpbnRzIiwicmVmZXJlbmNlVGFibGVOYW1lIiwicmVmZXJlbmNlVGFibGVLZXlzIiwidXBkYXRlQWN0aW9uIiwiZGVsZXRlQWN0aW9uIiwic3BsaWNlIiwiY29uc3RyYWludFNxbCIsInJlZmVyZW5jZXNSZWdleCIsInJlZmVyZW5jZUNvbmRpdGlvbnMiLCJyZW1vdmVUaWNrcyIsImNvbHVtbk5hbWVzIiwiY29sdW1uIiwiY29uc3RyYWludENvbmRpdGlvbiIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNvbnN0cmFpbnRUeXBlIiwiaW5kZXhPZiIsInRvVXBwZXJDYXNlIiwicGFyc2UiLCJnZXQiLCJ0aW1lem9uZSIsInNlcXVlbGl6ZSIsImNvZGUiLCJtZXNzYWdlIiwiRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvciIsInBhcmVudCIsImZpZWxkcyIsImNvbHVtbldpdGhUYWJsZSIsImVycm9ycyIsIlZhbGlkYXRpb25FcnJvckl0ZW0iLCJnZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlIiwidW5pcXVlS2V5cyIsImlzRXF1YWwiLCJtc2ciLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJEYXRhYmFzZUVycm9yIiwiZGF0YSIsInJldmVyc2UiLCJwcmltYXJ5IiwidW5pcXVlIiwicnVuIiwic2Vxbm8iLCJvcmRlciIsImlzQnVsa1VwZGF0ZVF1ZXJ5IiwidG9Mb3dlckNhc2UiLCJhcnJheSIsIl9hcnJheSIsInZhbHVlcyIsImJpbmRQYXJhbSIsInYiLCJza2lwVmFsdWVSZXBsYWNlIiwiayIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1HLGFBQWEsR0FBR0gsT0FBTyxDQUFDLG1CQUFELENBQTdCOztBQUNBLE1BQU1JLFVBQVUsR0FBR0osT0FBTyxDQUFDLG1CQUFELENBQTFCOztBQUNBLE1BQU1LLGVBQWUsR0FBR0wsT0FBTyxDQUFDLGNBQUQsQ0FBL0I7O0FBQ0EsTUFBTU0sV0FBVyxHQUFHTixPQUFPLENBQUMsZ0JBQUQsQ0FBUCxDQUEwQixRQUExQixDQUFwQjs7QUFDQSxNQUFNO0FBQUVPLEVBQUFBO0FBQUYsSUFBYVAsT0FBTyxDQUFDLG9CQUFELENBQTFCOztBQUVBLE1BQU1RLEtBQUssR0FBR0QsTUFBTSxDQUFDRSxZQUFQLENBQW9CLFlBQXBCLENBQWQ7O0FBQ0EsTUFBTUMsVUFBVSxHQUFHQyxHQUFHLElBQUk7QUFDeEIsTUFBSUMsVUFBVSxHQUFHLElBQUlDLEdBQUosRUFBakI7QUFDQSxNQUFJQyxVQUFVLEdBQUdILEdBQWpCOztBQUNBLEtBQUc7QUFDREksSUFBQUEsTUFBTSxDQUFDQyxtQkFBUCxDQUEyQkYsVUFBM0IsRUFBdUNHLEdBQXZDLENBQTJDQyxJQUFJLElBQUlOLFVBQVUsQ0FBQ08sR0FBWCxDQUFlRCxJQUFmLENBQW5EO0FBQ0QsR0FGRCxRQUVVSixVQUFVLEdBQUdDLE1BQU0sQ0FBQ0ssY0FBUCxDQUFzQk4sVUFBdEIsQ0FGdkI7O0FBR0EsU0FBTyxDQUFDLEdBQUdGLFVBQVUsQ0FBQ1MsSUFBWCxFQUFKLEVBQXVCQyxNQUF2QixDQUE4QkosSUFBSSxJQUFJLE9BQU9QLEdBQUcsQ0FBQ08sSUFBRCxDQUFWLEtBQXFCLFVBQTNELENBQVA7QUFDRCxDQVBEOztJQVFNSyxLOzs7Ozs7Ozs7Ozs7O3VDQUNlO0FBQ2pCLGFBQU8sUUFBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzttQ0F5QmlCQyxPLEVBQVNDLE0sRUFBUTtBQUM5QixZQUFNQyxHQUFHLEdBQUcsRUFBWjs7QUFFQSxVQUFJRixPQUFKLEVBQWE7QUFDWCxhQUFLLE1BQU1HLFFBQVgsSUFBdUJILE9BQXZCLEVBQWdDO0FBQzlCLGNBQUlJLEdBQUo7O0FBQ0EsY0FBSSxDQUFDSCxNQUFMLEVBQWE7QUFDWEcsWUFBQUEsR0FBRyxHQUFHRCxRQUFRLENBQUNFLEVBQWY7QUFDRCxXQUZELE1BRU87QUFDTEQsWUFBQUEsR0FBRyxHQUFJLEdBQUVILE1BQU8sSUFBR0UsUUFBUSxDQUFDRSxFQUFHLEVBQS9CO0FBQ0Q7O0FBQ0RILFVBQUFBLEdBQUcsQ0FBQ0UsR0FBRCxDQUFILEdBQVdELFFBQVEsQ0FBQ0csS0FBcEI7O0FBRUEsY0FBSUgsUUFBUSxDQUFDSCxPQUFiLEVBQXNCO0FBQ3BCekIsWUFBQUEsQ0FBQyxDQUFDZ0MsS0FBRixDQUFRTCxHQUFSLEVBQWEsS0FBS00sY0FBTCxDQUFvQkwsUUFBUSxDQUFDSCxPQUE3QixFQUFzQ0ksR0FBdEMsQ0FBYjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxhQUFPRixHQUFQO0FBQ0Q7Ozt5Q0FFb0JPLFEsRUFBVUMsVyxFQUFhQyxHLEVBQUtDLE8sRUFBUztBQUN4RCxVQUFJRCxHQUFKLEVBQVM7QUFDUEEsUUFBQUEsR0FBRyxDQUFDRSxHQUFKLEdBQVUsS0FBS0EsR0FBZjtBQUNBLGNBQU0sS0FBS0MsV0FBTCxDQUFpQkgsR0FBakIsQ0FBTjtBQUNEOztBQUNELFVBQUlJLE1BQU0sR0FBRyxLQUFLQyxRQUFsQixDQUx3RCxDQU14RDs7QUFDQSxVQUFJLEtBQUtDLGFBQUwsQ0FBbUJMLE9BQW5CLEVBQTRCSCxRQUE1QixDQUFKLEVBQTJDO0FBQ3pDLGFBQUtTLGlCQUFMLENBQXVCTixPQUF2QixFQUFnQ0gsUUFBaEM7O0FBQ0EsWUFBSSxDQUFDLEtBQUtPLFFBQVYsRUFBb0I7QUFDbEI7QUFDQTtBQUNFO0FBQ0EsZUFBS1YsS0FBTCxJQUNBLEtBQUtBLEtBQUwsQ0FBV2Esc0JBRFgsSUFFQSxLQUFLYixLQUFMLENBQVdhLHNCQUFYLEtBQ0UsS0FBS2IsS0FBTCxDQUFXYyxtQkFIYixJQUlBLEtBQUtkLEtBQUwsQ0FBV2UsYUFBWCxDQUF5QixLQUFLZixLQUFMLENBQVdjLG1CQUFwQyxDQU5GLEVBT0U7QUFDQSxrQkFBTUUsT0FBTyxHQUNYYixRQUFRLENBQUMsS0FBS2MsZ0JBQUwsRUFBRCxDQUFSLEdBQW9DZCxRQUFRLENBQUNlLE9BQTdDLEdBQXVELENBRHpEO0FBR0FULFlBQUFBLE1BQU0sR0FBRyxFQUFUOztBQUNBLGlCQUFLLElBQUlVLENBQUMsR0FBR0gsT0FBYixFQUFzQkcsQ0FBQyxHQUFHSCxPQUFPLEdBQUdiLFFBQVEsQ0FBQ2UsT0FBN0MsRUFBc0RDLENBQUMsRUFBdkQsRUFBMkQ7QUFDekRWLGNBQUFBLE1BQU0sQ0FBQ1csSUFBUCxDQUFZO0FBQ1YsaUJBQUMsS0FBS3BCLEtBQUwsQ0FBV2UsYUFBWCxDQUF5QixLQUFLZixLQUFMLENBQVdjLG1CQUFwQyxFQUNFTyxLQURILEdBQ1dGO0FBRkQsZUFBWjtBQUlEO0FBQ0YsV0FsQkQsTUFrQk87QUFDTFYsWUFBQUEsTUFBTSxHQUFHTixRQUFRLENBQUMsS0FBS2MsZ0JBQUwsRUFBRCxDQUFqQjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxVQUFJLEtBQUtLLGlCQUFMLEVBQUosRUFBOEI7QUFDNUIsZUFBT2hCLE9BQU8sQ0FBQ25CLEdBQVIsQ0FBWW9DLEdBQUcsSUFBSUEsR0FBRyxDQUFDQyxJQUF2QixDQUFQO0FBQ0Q7O0FBQ0QsVUFBSSxLQUFLQyxzQkFBTCxFQUFKLEVBQW1DO0FBQ2pDaEIsUUFBQUEsTUFBTSxHQUFHSCxPQUFUOztBQUNBLFlBQUlBLE9BQU8sSUFBSUEsT0FBTyxDQUFDLENBQUQsQ0FBbEIsSUFBeUJBLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBV0MsR0FBeEMsRUFBNkM7QUFDM0NFLFVBQUFBLE1BQU0sR0FBRyxLQUFLaUIsdUJBQUwsQ0FBNkJwQixPQUFPLENBQUMsQ0FBRCxDQUFQLENBQVdDLEdBQXhDLENBQVQ7QUFDRDs7QUFDRCxlQUFPRSxNQUFQO0FBQ0Q7O0FBQ0QsVUFBSSxLQUFLa0IsYUFBTCxFQUFKLEVBQTBCO0FBQ3hCLFlBQUksS0FBS0MsT0FBTCxDQUFhQyxHQUFqQixFQUFzQjtBQUNwQixpQkFBTyxLQUFLQyxpQkFBTCxDQUF1QnhCLE9BQXZCLENBQVA7QUFDRCxTQUh1QixDQUl4Qjs7O0FBQ0EsY0FBTXlCLFFBQVEsR0FBRyxLQUFLN0IsY0FBTCxDQUFvQixLQUFLMEIsT0FBTCxDQUFhbEMsT0FBakMsQ0FBakI7O0FBRUFZLFFBQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDbkIsR0FBUixDQUFZc0IsTUFBTSxJQUFJO0FBQzlCLGlCQUFPeEMsQ0FBQyxDQUFDK0QsU0FBRixDQUFZdkIsTUFBWixFQUFvQixDQUFDd0IsS0FBRCxFQUFRVCxJQUFSLEtBQWlCO0FBQzFDLGdCQUFJeEIsS0FBSjs7QUFDQSxnQkFBSXdCLElBQUksQ0FBQ1UsUUFBTCxDQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUN0QixvQkFBTUMsT0FBTyxHQUFHWCxJQUFJLENBQUNZLFdBQUwsQ0FBaUIsR0FBakIsQ0FBaEI7QUFFQXBDLGNBQUFBLEtBQUssR0FBRytCLFFBQVEsQ0FBQ1AsSUFBSSxDQUFDYSxNQUFMLENBQVksQ0FBWixFQUFlRixPQUFmLENBQUQsQ0FBaEI7QUFFQVgsY0FBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNhLE1BQUwsQ0FBWUYsT0FBTyxHQUFHLENBQXRCLENBQVA7QUFDRCxhQU5ELE1BTU87QUFDTG5DLGNBQUFBLEtBQUssR0FBRyxLQUFLNEIsT0FBTCxDQUFhNUIsS0FBckI7QUFDRDs7QUFFRCxrQkFBTXNDLFNBQVMsR0FBR3RDLEtBQUssQ0FDcEJ1QyxZQURlLEdBRWZDLFFBRmUsR0FHZkMsT0FIZSxDQUdQLElBSE8sRUFHRCxFQUhDLENBQWxCO0FBSUEsa0JBQU1DLFVBQVUsR0FBR3RDLFdBQVcsQ0FBQ2tDLFNBQUQsQ0FBWCxJQUEwQixFQUE3Qzs7QUFFQSxnQkFBSUksVUFBVSxJQUFJLEVBQUVsQixJQUFJLElBQUlrQixVQUFWLENBQWxCLEVBQXlDO0FBQ3ZDO0FBQ0F6RSxjQUFBQSxDQUFDLENBQUMwRSxNQUFGLENBQVMzQyxLQUFLLENBQUNlLGFBQWYsRUFBOEIsQ0FBQzZCLFNBQUQsRUFBWTlDLEdBQVosS0FBb0I7QUFDaEQsb0JBQUkwQixJQUFJLEtBQUsxQixHQUFULElBQWdCOEMsU0FBUyxDQUFDdkIsS0FBOUIsRUFBcUM7QUFDbkNHLGtCQUFBQSxJQUFJLEdBQUdvQixTQUFTLENBQUN2QixLQUFqQjtBQUNBLHlCQUFPLEtBQVA7QUFDRDtBQUNGLGVBTEQ7QUFNRDs7QUFFRCxtQkFBT3BDLE1BQU0sQ0FBQzRELFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ0wsVUFBckMsRUFBaURsQixJQUFqRCxJQUNILEtBQUt3QixZQUFMLENBQWtCTixVQUFVLENBQUNsQixJQUFELENBQTVCLEVBQW9DUyxLQUFwQyxDQURHLEdBRUhBLEtBRko7QUFHRCxXQS9CTSxDQUFQO0FBZ0NELFNBakNTLENBQVY7QUFtQ0EsZUFBTyxLQUFLSCxpQkFBTCxDQUF1QnhCLE9BQXZCLENBQVA7QUFDRDs7QUFDRCxVQUFJLEtBQUsyQyxxQkFBTCxFQUFKLEVBQWtDO0FBQ2hDLGVBQU8zQyxPQUFQO0FBQ0Q7O0FBQ0QsVUFBSSxLQUFLQyxHQUFMLENBQVMyQixRQUFULENBQWtCLG1CQUFsQixDQUFKLEVBQTRDO0FBQzFDLGVBQU8sS0FBS2dCLHNCQUFMLENBQTRCNUMsT0FBNUIsQ0FBUDtBQUNEOztBQUNELFVBQUksS0FBS0MsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQixtQkFBbEIsQ0FBSixFQUE0QztBQUMxQyxlQUFPNUIsT0FBUDtBQUNEOztBQUNELFVBQUksS0FBS0MsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQixtQkFBbEIsQ0FBSixFQUE0QztBQUMxQztBQUNBekIsUUFBQUEsTUFBTSxHQUFHLEVBQVQ7O0FBRUEsWUFBSTBDLEtBQUssQ0FBQ0MsT0FBTixDQUFjOUMsT0FBZCxDQUFKLEVBQTRCO0FBQzFCLGNBQUkrQyxZQUFKOztBQUNBLGVBQUssTUFBTUMsT0FBWCxJQUFzQmhELE9BQXRCLEVBQStCO0FBQzdCLGdCQUFJZ0QsT0FBTyxDQUFDQyxVQUFSLEtBQXVCLElBQTNCLEVBQWlDO0FBQy9CO0FBQ0FGLGNBQUFBLFlBQVksR0FBR0csU0FBZjtBQUNELGFBSEQsTUFHTyxJQUFJRixPQUFPLENBQUNDLFVBQVIsS0FBdUIsTUFBM0IsRUFBbUM7QUFDeEM7QUFDQUYsY0FBQUEsWUFBWSxHQUFHLElBQWY7QUFDRCxhQUhNLE1BR0E7QUFDTEEsY0FBQUEsWUFBWSxHQUFHQyxPQUFPLENBQUNDLFVBQXZCO0FBQ0Q7O0FBRUQ5QyxZQUFBQSxNQUFNLENBQUM2QyxPQUFPLENBQUM5QixJQUFULENBQU4sR0FBdUI7QUFDckJpQyxjQUFBQSxJQUFJLEVBQUVILE9BQU8sQ0FBQ0csSUFETztBQUVyQkMsY0FBQUEsU0FBUyxFQUFFSixPQUFPLENBQUNLLE9BQVIsS0FBb0IsQ0FGVjtBQUdyQk4sY0FBQUEsWUFIcUI7QUFJckJPLGNBQUFBLFVBQVUsRUFBRU4sT0FBTyxDQUFDTyxFQUFSLEtBQWU7QUFKTixhQUF2Qjs7QUFPQSxnQkFBSXBELE1BQU0sQ0FBQzZDLE9BQU8sQ0FBQzlCLElBQVQsQ0FBTixDQUFxQmlDLElBQXJCLEtBQThCLFlBQWxDLEVBQWdEO0FBQzlDaEQsY0FBQUEsTUFBTSxDQUFDNkMsT0FBTyxDQUFDOUIsSUFBVCxDQUFOLENBQXFCNkIsWUFBckIsR0FBb0M7QUFBRSxxQkFBSyxLQUFQO0FBQWMscUJBQUs7QUFBbkIsZ0JBQ2xDNUMsTUFBTSxDQUFDNkMsT0FBTyxDQUFDOUIsSUFBVCxDQUFOLENBQXFCNkIsWUFEYSxDQUFwQztBQUdEOztBQUVELGdCQUFJLE9BQU81QyxNQUFNLENBQUM2QyxPQUFPLENBQUM5QixJQUFULENBQU4sQ0FBcUI2QixZQUE1QixLQUE2QyxRQUFqRCxFQUEyRDtBQUN6RDVDLGNBQUFBLE1BQU0sQ0FBQzZDLE9BQU8sQ0FBQzlCLElBQVQsQ0FBTixDQUFxQjZCLFlBQXJCLEdBQW9DNUMsTUFBTSxDQUN4QzZDLE9BQU8sQ0FBQzlCLElBRGdDLENBQU4sQ0FFbEM2QixZQUZrQyxDQUVyQlosT0FGcUIsQ0FFYixJQUZhLEVBRVAsRUFGTyxDQUFwQztBQUdEO0FBQ0Y7QUFDRjs7QUFFRCxlQUFPaEMsTUFBUDtBQUNEOztBQUNELFVBQUksS0FBS0YsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQixzQkFBbEIsQ0FBSixFQUErQztBQUM3QyxlQUFPNUIsT0FBTyxDQUFDLENBQUQsQ0FBZDtBQUNEOztBQUNELFVBQUksS0FBS0MsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQixxQkFBbEIsQ0FBSixFQUE4QztBQUM1QyxlQUFPNUIsT0FBUDtBQUNEOztBQUNELFVBQUksS0FBS0MsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQix5QkFBbEIsQ0FBSixFQUFrRDtBQUNoRCxlQUFPNUIsT0FBUDtBQUNEOztBQUNELFVBQ0UsQ0FBQ2hDLFVBQVUsQ0FBQ3dGLFVBQVosRUFBd0J4RixVQUFVLENBQUN5RixVQUFuQyxFQUErQzdCLFFBQS9DLENBQXdELEtBQUtOLE9BQUwsQ0FBYTZCLElBQXJFLENBREYsRUFFRTtBQUNBLGVBQU90RCxRQUFRLENBQUNlLE9BQWhCO0FBQ0Q7O0FBQ0QsVUFBSSxLQUFLVSxPQUFMLENBQWE2QixJQUFiLEtBQXNCbkYsVUFBVSxDQUFDMEYsTUFBckMsRUFBNkM7QUFDM0MsZUFBT1IsU0FBUDtBQUNEOztBQUNELFVBQUksS0FBSzVCLE9BQUwsQ0FBYTZCLElBQWIsS0FBc0JuRixVQUFVLENBQUMyRixPQUFyQyxFQUE4QztBQUM1QyxlQUFPM0QsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXNEQsT0FBbEI7QUFDRDs7QUFDRCxVQUFJLEtBQUt0QyxPQUFMLENBQWE2QixJQUFiLEtBQXNCbkYsVUFBVSxDQUFDNkYsR0FBckMsRUFBMEM7QUFDeEMsZUFBTyxDQUFDN0QsT0FBRCxFQUFVSCxRQUFWLENBQVA7QUFDRDs7QUFDRCxVQUFJLEtBQUtpRSxhQUFMLE1BQXdCLEtBQUt6RCxhQUFMLEVBQTVCLEVBQWtEO0FBQ2hELGVBQU8sQ0FBQ0YsTUFBRCxFQUFTTixRQUFRLENBQUNlLE9BQWxCLENBQVA7QUFDRDs7QUFDRCxhQUFPVCxNQUFQO0FBQ0QsSyxDQUNEOzs7O3dCQUNJRixHLEVBQUs4RCxVLEVBQVk7QUFDbkI7QUFDQSxXQUFLOUQsR0FBTCxHQUFXbEMsYUFBYSxDQUFDaUcsb0JBQWQsQ0FDVC9ELEdBRFMsRUFFVCxLQUFLcUIsT0FBTCxDQUFhMkMsSUFGSixFQUdULEtBQUszQyxPQUFMLENBQWE0QyxPQUFiLElBQXdCLFFBSGYsRUFJVDtBQUFFQyxRQUFBQSxZQUFZLEVBQUU7QUFBaEIsT0FKUyxFQUtULENBTFMsQ0FBWDtBQU1BLFlBQU1DLE1BQU0sR0FBRyxLQUFLQyxpQkFBTCxFQUFmOztBQUNBLFlBQU1DLFFBQVEsR0FBRyxLQUFLQyxTQUFMLENBQWUsS0FBS3RFLEdBQXBCLEVBQXlCN0IsS0FBekIsRUFBZ0MyRixVQUFoQyxDQUFqQjs7QUFDQSxZQUFNUyxLQUFLLEdBQUcsSUFBZDtBQUNBLFlBQU1DLElBQUksR0FBRyxJQUFiO0FBQ0EsWUFBTUMsSUFBSSxHQUFHLEtBQUtDLFVBQWxCO0FBRUEsYUFBTyxJQUFJN0csT0FBSixDQUFZOEcsT0FBTyxJQUFJO0FBQzVCLGNBQU05RSxXQUFXLEdBQUcsRUFBcEIsQ0FENEIsQ0FFNUI7O0FBQ0EsY0FBTStFLFVBQVUsR0FBRyxNQUFNO0FBQ3ZCLGNBQUk1RSxHQUFHLENBQUM2RSxVQUFKLENBQWUsS0FBZixDQUFKLEVBQTJCO0FBQ3pCLG1CQUFPRixPQUFPLEVBQWQ7QUFDRDs7QUFDREEsVUFBQUEsT0FBTyxDQUNMLElBQUk5RyxPQUFKLENBQVksQ0FBQzhHLE9BQUQsRUFBVUcsTUFBVixLQUFxQjtBQUMvQixnQkFBSVgsTUFBTSxLQUFLLE1BQWYsRUFBdUI7QUFDckIsa0JBQUksT0FBT00sSUFBSSxDQUFDTSxJQUFaLEtBQXFCLFVBQXpCLEVBQXFDO0FBQ25DTixnQkFBQUEsSUFBSSxDQUFDTSxJQUFMLENBQ0UsQ0FBQztBQUFFL0Usa0JBQUFBLEdBQUcsRUFBRXdFLElBQUksQ0FBQ3hFLEdBQVo7QUFBaUJnRixrQkFBQUEsSUFBSSxFQUFFO0FBQXZCLGlCQUFELENBREYsRUFFRSxLQUZGLEVBR0UsQ0FBQ0MsY0FBRCxFQUFpQmxGLE9BQWpCLEtBQTZCO0FBQzNCLHNCQUFJO0FBQ0ZzRSxvQkFBQUEsUUFBUSxHQUROLENBRUY7O0FBQ0F0RSxvQkFBQUEsT0FBTyxHQUFHd0UsS0FBSyxDQUFDVyxjQUFOLENBQXFCbkYsT0FBTyxDQUFDLENBQUQsQ0FBNUIsQ0FBVixDQUhFLENBSUY7QUFDQTs7QUFDQTRFLG9CQUFBQSxPQUFPLENBQ0xKLEtBQUssQ0FBQ1ksb0JBQU4sQ0FDRVgsSUFERixFQUVFM0UsV0FGRixFQUdFb0YsY0FIRixFQUlFbEYsT0FKRixDQURLLENBQVA7QUFRQTtBQUNELG1CQWZELENBZUUsT0FBT3FGLEtBQVAsRUFBYztBQUNkTixvQkFBQUEsTUFBTSxDQUFDTSxLQUFELENBQU47QUFDRDtBQUNGLGlCQXRCSDtBQXdCRCxlQXpCRCxNQXlCTztBQUNMVCxnQkFBQUEsT0FBTztBQUNSO0FBQ0YsYUE3QkQsTUE2Qk87QUFDTCxrQkFBSVUsZUFBZSxHQUFHLFVBQVN0RixPQUFULEVBQWtCO0FBQ3RDLG9CQUFJO0FBQ0ZzRSxrQkFBQUEsUUFBUSxHQUROLENBRUY7QUFDQTs7QUFDQSxzQkFBSXRFLE9BQU8sQ0FBQ3VGLFlBQVosRUFBMEI7QUFDeEIsd0JBQUk7QUFDRmQsc0JBQUFBLElBQUksQ0FBQ0EsSUFBSSxDQUFDOUQsZ0JBQUwsRUFBRCxDQUFKLEdBQWdDWCxPQUFPLENBQUN3RixRQUF4QztBQUNELHFCQUZELENBRUUsT0FBT0MsQ0FBUCxFQUFVO0FBQ1YsNkJBQU9oQixJQUFJLENBQUNBLElBQUksQ0FBQzlELGdCQUFMLEVBQUQsQ0FBWDtBQUNEO0FBQ0Y7O0FBQ0Q4RCxrQkFBQUEsSUFBSSxDQUFDN0QsT0FBTCxHQUFlWixPQUFPLENBQUN1RixZQUF2QjtBQUNBdkYsa0JBQUFBLE9BQU8sR0FBR3dFLEtBQUssQ0FBQ1csY0FBTixDQUFxQm5GLE9BQXJCLENBQVY7QUFDQTRFLGtCQUFBQSxPQUFPLENBQ0xKLEtBQUssQ0FBQ1ksb0JBQU4sQ0FDRVgsSUFERixFQUVFM0UsV0FGRixFQUdFb0QsU0FIRixFQUlFbEQsT0FKRixDQURLLENBQVA7QUFRQTtBQUNELGlCQXRCRCxDQXNCRSxPQUFPcUYsS0FBUCxFQUFjO0FBQ2RqSCxrQkFBQUEsS0FBSyxDQUFDaUgsS0FBRCxDQUFMO0FBQ0FOLGtCQUFBQSxNQUFNLENBQUNNLEtBQUQsQ0FBTjtBQUNEO0FBQ0YsZUEzQkQsQ0FESyxDQTZCTDs7O0FBQ0Esa0JBQUlLLGFBQWEsR0FBRyxVQUFTM0YsR0FBVCxFQUFjO0FBQ2hDLG9CQUFJO0FBQ0Z1RSxrQkFBQUEsUUFBUSxHQUROLENBRUY7QUFDQTs7QUFDQU0sa0JBQUFBLE9BQU8sQ0FBQ0osS0FBSyxDQUFDWSxvQkFBTixDQUEyQlgsSUFBM0IsRUFBaUMzRSxXQUFqQyxFQUE4Q0MsR0FBOUMsQ0FBRCxDQUFQO0FBQ0QsaUJBTEQsQ0FLRSxPQUFPc0YsS0FBUCxFQUFjO0FBQ2ROLGtCQUFBQSxNQUFNLENBQUNNLEtBQUQsQ0FBTjtBQUNEO0FBQ0YsZUFURDs7QUFVQSxrQkFBSSxPQUFPWCxJQUFJLENBQUNNLElBQVosS0FBcUIsVUFBekIsRUFBcUM7QUFDbkNqQixnQkFBQUEsVUFBVSxHQUFHQSxVQUFVLElBQUksRUFBM0I7QUFDRCxlQUZELE1BRU9BLFVBQVUsR0FBRyxFQUFiOztBQUNQVyxjQUFBQSxJQUFJLENBQUNHLFVBQUwsQ0FDRUosSUFBSSxDQUFDeEUsR0FEUCxFQUVFOEQsVUFGRixFQUdFdUIsZUFIRixFQUlFSSxhQUpGO0FBTUE7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDYTtBQUNGLFdBcElELENBREssQ0FBUDtBQXVJQSxpQkFBTyxJQUFQO0FBQ0QsU0E1SUQ7O0FBOElBLFlBQUl0QixNQUFNLEtBQUssS0FBZixFQUFzQjtBQUNwQixjQUFJdUIsVUFBVSxHQUFHLEVBQWpCOztBQUNBLGNBQUksS0FBS3JFLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhcUUsVUFBakMsRUFBNkM7QUFDM0NBLFlBQUFBLFVBQVUsR0FBRyxLQUFLckUsT0FBTCxDQUFhcUUsVUFBMUI7QUFDRCxXQUZELE1BRU8sSUFBSSxnQkFBZ0JYLElBQWhCLENBQXFCLEtBQUsvRSxHQUExQixDQUFKLEVBQW9DO0FBQ3pDMEYsWUFBQUEsVUFBVSxDQUFDN0UsSUFBWCxDQUFnQixnQkFBZ0JrRSxJQUFoQixDQUFxQixLQUFLL0UsR0FBMUIsRUFBK0IsQ0FBL0IsQ0FBaEI7QUFDRCxXQU5tQixDQVFwQjs7O0FBQ0EwRixVQUFBQSxVQUFVLEdBQUdBLFVBQVUsQ0FBQ3pHLE1BQVgsQ0FDWDhDLFNBQVMsSUFDUCxFQUFFQSxTQUFTLElBQUlsQyxXQUFmLEtBQStCa0MsU0FBUyxLQUFLLGVBRnBDLENBQWI7O0FBSUEsY0FBSSxDQUFDMkQsVUFBVSxDQUFDQyxNQUFoQixFQUF3QjtBQUN0QixtQkFBT2YsVUFBVSxFQUFqQjtBQUNEOztBQUNELGlCQUFPLElBQUkvRyxPQUFKLENBQVk4RyxPQUFPLElBQUk7QUFDNUIsZ0JBQUksT0FBT0YsSUFBSSxDQUFDTSxJQUFaLEtBQXFCLFVBQXpCLEVBQXFDO0FBQ25DLG9CQUFNYSxXQUFXLEdBQUdGLFVBQVUsQ0FBQzlHLEdBQVgsQ0FBZW1ELFNBQVMsSUFBSTtBQUM5Q0EsZ0JBQUFBLFNBQVMsR0FBR0EsU0FBUyxDQUFDRyxPQUFWLENBQWtCLElBQWxCLEVBQXdCLEVBQXhCLENBQVo7QUFDQXJDLGdCQUFBQSxXQUFXLENBQUNrQyxTQUFELENBQVgsR0FBeUIsRUFBekI7QUFDQSx1QkFBTyxDQUFFLHVCQUFzQkEsU0FBVSxLQUFsQyxFQUF3Q0EsU0FBeEMsQ0FBUDtBQUNELGVBSm1CLENBQXBCO0FBS0EwQyxjQUFBQSxJQUFJLENBQUNNLElBQUwsQ0FDRWEsV0FBVyxDQUFDaEgsR0FBWixDQUFnQmlILE1BQU0sS0FBSztBQUN6QjdGLGdCQUFBQSxHQUFHLEVBQUU2RixNQUFNLENBQUMsQ0FBRCxDQURjO0FBRXpCYixnQkFBQUEsSUFBSSxFQUFFO0FBRm1CLGVBQUwsQ0FBdEIsQ0FERixFQUtFLEtBTEYsRUFNRSxDQUFDbEYsR0FBRCxFQUFNQyxPQUFOLEtBQWtCO0FBQ2hCLG9CQUFJLENBQUNELEdBQUwsRUFBVTtBQUNSLHVCQUFLLElBQUljLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdnRixXQUFXLENBQUNELE1BQWhDLEVBQXdDL0UsQ0FBQyxFQUF6QyxFQUE2QztBQUMzQywwQkFBTW1CLFNBQVMsR0FBRzZELFdBQVcsQ0FBQ2hGLENBQUQsQ0FBWCxDQUFlLENBQWYsQ0FBbEI7O0FBQ0EseUJBQUssTUFBTVYsTUFBWCxJQUFxQkgsT0FBTyxDQUFDYSxDQUFELENBQVAsQ0FBV2tGLElBQWhDLEVBQXNDO0FBQ3BDakcsc0JBQUFBLFdBQVcsQ0FBQ2tDLFNBQUQsQ0FBWCxDQUF1QjdCLE1BQU0sQ0FBQ2UsSUFBOUIsSUFBc0NmLE1BQU0sQ0FBQ2dELElBQTdDO0FBQ0Q7QUFDRjtBQUNGOztBQUNEeUIsZ0JBQUFBLE9BQU87QUFDUixlQWhCSDtBQWtCRCxhQXhCRCxNQXdCTztBQUNMZSxjQUFBQSxVQUFVLENBQUNLLE9BQVgsQ0FBbUIsQ0FBQ2hFLFNBQUQsRUFBWWlFLEtBQVosS0FBc0I7QUFDdkN2QixnQkFBQUEsSUFBSSxDQUFDRyxVQUFMLENBQ0csaURBQWdEN0MsU0FBVSxvQkFEN0QsRUFFRSxFQUZGLEVBR0UsVUFBUzdCLE1BQVQsRUFBaUI7QUFDZix3QkFBTStGLEtBQUssR0FBRy9GLE1BQU0sQ0FBQzRGLElBQVAsQ0FBWWpILElBQVosQ0FBaUIsQ0FBakIsQ0FBZDs7QUFDQSxzQkFDRSxPQUFPb0gsS0FBUCxLQUFpQixRQUFqQixJQUNBLFNBQVNBLEtBRFQsSUFFQSxPQUFPQSxLQUFLLENBQUNqRyxHQUFiLEtBQXFCLFFBSHZCLEVBSUU7QUFDQUgsb0JBQUFBLFdBQVcsQ0FBQ2tDLFNBQUQsQ0FBWCxHQUF5QixFQUF6QixDQURBLENBRUE7O0FBQ0EsMEJBQU1tRSxPQUFPLEdBQUdELEtBQUssQ0FBQ2pHLEdBQU4sQ0FBVW1HLEtBQVYsQ0FDZCxvQ0FEYyxDQUFoQixDQUhBLENBTUE7O0FBQ0EseUJBQUssTUFBTUMsR0FBWCxJQUFrQkYsT0FBbEIsRUFBMkI7QUFDekIsNEJBQU0sQ0FBQ0csT0FBRCxFQUFVQyxPQUFWLElBQXFCRixHQUFHLENBQzNCRyxJQUR3QixHQUV4QnJFLE9BRndCLENBRWhCLE1BRmdCLEVBRVIsR0FGUSxFQUd4QkEsT0FId0IsQ0FHaEIsSUFIZ0IsRUFHVixFQUhVLEVBSXhCc0UsS0FKd0IsQ0FJbEIsR0FKa0IsQ0FBM0I7QUFLQTNHLHNCQUFBQSxXQUFXLENBQUNrQyxTQUFELENBQVgsQ0FBdUJzRSxPQUF2QixJQUFrQ0MsT0FBTyxDQUFDQyxJQUFSLEVBQWxDO0FBQ0Q7QUFDRixtQkFyQmMsQ0FzQmY7OztBQUNBLHNCQUFJUCxLQUFLLEtBQUtOLFVBQVUsQ0FBQ0MsTUFBWCxHQUFvQixDQUFsQyxFQUFxQ2hCLE9BQU87QUFDN0MsaUJBM0JILEVBNEJFLFVBQVNTLEtBQVQsRUFBZ0I7QUFDZCxzQkFBSVksS0FBSyxLQUFLTixVQUFVLENBQUNDLE1BQVgsR0FBb0IsQ0FBbEMsRUFBcUNoQixPQUFPO0FBQzdDLGlCQTlCSDtBQWdDRCxlQWpDRDtBQWtDQTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDVztBQUNGLFdBakdNLEVBaUdKOEIsSUFqR0ksQ0FpR0M3QixVQWpHRCxDQUFQO0FBa0dEOztBQUNELGVBQU9BLFVBQVUsRUFBakI7QUFDRCxPQXJRTSxDQUFQO0FBc1FEOzs7NENBRXVCNUUsRyxFQUFLO0FBQzNCLFVBQUkwRyxXQUFXLEdBQUcxRyxHQUFHLENBQUN3RyxLQUFKLENBQVUsYUFBVixDQUFsQjtBQUNBLFVBQUlHLGtCQUFKLEVBQXdCQyxrQkFBeEIsRUFBNENDLFlBQTVDLEVBQTBEQyxZQUExRDtBQUNBSixNQUFBQSxXQUFXLENBQUNLLE1BQVosQ0FBbUIsQ0FBbkIsRUFBc0IsQ0FBdEI7QUFDQUwsTUFBQUEsV0FBVyxHQUFHQSxXQUFXLENBQUM5SCxHQUFaLENBQWdCb0ksYUFBYSxJQUFJO0FBQzdDO0FBQ0EsWUFBSUEsYUFBYSxDQUFDckYsUUFBZCxDQUF1QixZQUF2QixDQUFKLEVBQTBDO0FBQ3hDO0FBQ0FrRixVQUFBQSxZQUFZLEdBQUdHLGFBQWEsQ0FBQ2IsS0FBZCxDQUNiLGdFQURhLENBQWY7QUFHQVcsVUFBQUEsWUFBWSxHQUFHRSxhQUFhLENBQUNiLEtBQWQsQ0FDYixnRUFEYSxDQUFmOztBQUlBLGNBQUlVLFlBQUosRUFBa0I7QUFDaEJBLFlBQUFBLFlBQVksR0FBR0EsWUFBWSxDQUFDLENBQUQsQ0FBM0I7QUFDRDs7QUFFRCxjQUFJQyxZQUFKLEVBQWtCO0FBQ2hCQSxZQUFBQSxZQUFZLEdBQUdBLFlBQVksQ0FBQyxDQUFELENBQTNCO0FBQ0Q7O0FBRUQsZ0JBQU1HLGVBQWUsR0FBRyx3REFBeEI7QUFDQSxnQkFBTUMsbUJBQW1CLEdBQUdGLGFBQWEsQ0FDdENiLEtBRHlCLENBQ25CYyxlQURtQixFQUNGLENBREUsRUFFekJULEtBRnlCLENBRW5CLEdBRm1CLENBQTVCO0FBR0FHLFVBQUFBLGtCQUFrQixHQUFHL0ksS0FBSyxDQUFDdUosV0FBTixDQUFrQkQsbUJBQW1CLENBQUMsQ0FBRCxDQUFyQyxDQUFyQjtBQUNBLGNBQUlFLFdBQVcsR0FBR0YsbUJBQW1CLENBQUMsQ0FBRCxDQUFyQztBQUNBRSxVQUFBQSxXQUFXLEdBQUdBLFdBQVcsQ0FBQ2xGLE9BQVosQ0FBb0IsUUFBcEIsRUFBOEIsRUFBOUIsRUFBa0NzRSxLQUFsQyxDQUF3QyxJQUF4QyxDQUFkO0FBQ0FJLFVBQUFBLGtCQUFrQixHQUFHUSxXQUFXLENBQUN4SSxHQUFaLENBQWdCeUksTUFBTSxJQUN6Q3pKLEtBQUssQ0FBQ3VKLFdBQU4sQ0FBa0JFLE1BQWxCLENBRG1CLENBQXJCO0FBR0Q7O0FBRUQsY0FBTUMsbUJBQW1CLEdBQUdOLGFBQWEsQ0FBQ2IsS0FBZCxDQUMxQiw0Q0FEMEIsRUFFMUIsQ0FGMEIsQ0FBNUI7QUFHQWEsUUFBQUEsYUFBYSxHQUFHQSxhQUFhLENBQUM5RSxPQUFkLENBQXNCLFFBQXRCLEVBQWdDLEVBQWhDLENBQWhCO0FBQ0EsY0FBTXFGLFVBQVUsR0FBR1AsYUFBYSxDQUFDUixLQUFkLENBQW9CLEdBQXBCLENBQW5COztBQUVBLFlBQUllLFVBQVUsQ0FBQyxDQUFELENBQVYsS0FBa0IsU0FBbEIsSUFBK0JBLFVBQVUsQ0FBQyxDQUFELENBQVYsS0FBa0IsU0FBckQsRUFBZ0U7QUFDOURBLFVBQUFBLFVBQVUsQ0FBQyxDQUFELENBQVYsSUFBaUIsTUFBakI7QUFDRDs7QUFFRCxlQUFPO0FBQ0xDLFVBQUFBLGNBQWMsRUFBRTVKLEtBQUssQ0FBQ3VKLFdBQU4sQ0FBa0JJLFVBQVUsQ0FBQyxDQUFELENBQTVCLENBRFg7QUFFTEUsVUFBQUEsY0FBYyxFQUFFRixVQUFVLENBQUMsQ0FBRCxDQUZyQjtBQUdMVixVQUFBQSxZQUhLO0FBSUxDLFVBQUFBLFlBSks7QUFLTDlHLFVBQUFBLEdBQUcsRUFBRUEsR0FBRyxDQUFDa0MsT0FBSixDQUFZLElBQVosRUFBa0IsR0FBbEIsQ0FMQTtBQUt3QjtBQUM3Qm9GLFVBQUFBLG1CQU5LO0FBT0xYLFVBQUFBLGtCQVBLO0FBUUxDLFVBQUFBO0FBUkssU0FBUDtBQVVELE9BbkRhLENBQWQ7QUFxREEsYUFBT0YsV0FBUDtBQUNEOzs7aUNBRVl4RCxJLEVBQU14QixLLEVBQU87QUFDeEIsVUFBSXdCLElBQUksQ0FBQ3ZCLFFBQUwsQ0FBYyxHQUFkLENBQUosRUFBd0I7QUFDdEI7QUFDQXVCLFFBQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDcEIsTUFBTCxDQUFZLENBQVosRUFBZW9CLElBQUksQ0FBQ3dFLE9BQUwsQ0FBYSxHQUFiLENBQWYsQ0FBUDtBQUNEOztBQUNEeEUsTUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNoQixPQUFMLENBQWEsVUFBYixFQUF5QixFQUF6QixFQUE2QkEsT0FBN0IsQ0FBcUMsVUFBckMsRUFBaUQsRUFBakQsQ0FBUDtBQUNBZ0IsTUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNxRCxJQUFMLEdBQVlvQixXQUFaLEVBQVA7QUFDQSxZQUFNQyxLQUFLLEdBQUczSixXQUFXLENBQUM0SixHQUFaLENBQWdCM0UsSUFBaEIsQ0FBZDs7QUFDQSxVQUFJeEIsS0FBSyxLQUFLLElBQVYsSUFBa0JrRyxLQUF0QixFQUE2QjtBQUMzQixlQUFPQSxLQUFLLENBQUNsRyxLQUFELEVBQVE7QUFBRW9HLFVBQUFBLFFBQVEsRUFBRSxLQUFLQyxTQUFMLENBQWUxRyxPQUFmLENBQXVCeUc7QUFBbkMsU0FBUixDQUFaO0FBQ0Q7O0FBQ0QsYUFBT3BHLEtBQVA7QUFDRDs7O2dDQUVXNUIsRyxFQUFLO0FBQ2YsY0FBUUEsR0FBRyxDQUFDa0ksSUFBWjtBQUNFLGFBQUssbUJBQUw7QUFBMEI7QUFDeEIsZ0JBQUlsSSxHQUFHLENBQUNtSSxPQUFKLENBQVl0RyxRQUFaLENBQXFCLCtCQUFyQixDQUFKLEVBQTJEO0FBQ3pELHFCQUFPLElBQUkzRCxlQUFlLENBQUNrSyx5QkFBcEIsQ0FBOEM7QUFDbkRDLGdCQUFBQSxNQUFNLEVBQUVySTtBQUQyQyxlQUE5QyxDQUFQO0FBR0Q7O0FBRUQsZ0JBQUlzSSxNQUFNLEdBQUcsRUFBYixDQVB3QixDQVN4Qjs7QUFDQSxnQkFBSWpDLEtBQUssR0FBR3JHLEdBQUcsQ0FBQ21JLE9BQUosQ0FBWTlCLEtBQVosQ0FBa0IsbUJBQWxCLENBQVo7O0FBQ0EsZ0JBQUlBLEtBQUssS0FBSyxJQUFWLElBQWtCQSxLQUFLLENBQUNSLE1BQU4sSUFBZ0IsQ0FBdEMsRUFBeUM7QUFDdkN5QyxjQUFBQSxNQUFNLEdBQUdqQyxLQUFLLENBQUMsQ0FBRCxDQUFMLENBQVNLLEtBQVQsQ0FBZSxJQUFmLENBQVQ7QUFDRCxhQUZELE1BRU87QUFDTDtBQUNBTCxjQUFBQSxLQUFLLEdBQUdyRyxHQUFHLENBQUNtSSxPQUFKLENBQVk5QixLQUFaLENBQWtCLGdDQUFsQixDQUFSOztBQUNBLGtCQUFJQSxLQUFLLEtBQUssSUFBVixJQUFrQkEsS0FBSyxDQUFDUixNQUFOLElBQWdCLENBQXRDLEVBQXlDO0FBQ3ZDeUMsZ0JBQUFBLE1BQU0sR0FBR2pDLEtBQUssQ0FBQyxDQUFELENBQUwsQ0FDTkssS0FETSxDQUNBLElBREEsRUFFTjVILEdBRk0sQ0FFRnlKLGVBQWUsSUFBSUEsZUFBZSxDQUFDN0IsS0FBaEIsQ0FBc0IsR0FBdEIsRUFBMkIsQ0FBM0IsQ0FGakIsQ0FBVDtBQUdEO0FBQ0Y7O0FBRUQsa0JBQU04QixNQUFNLEdBQUcsRUFBZjtBQUNBLGdCQUFJTCxPQUFPLEdBQUcsa0JBQWQ7O0FBRUEsaUJBQUssTUFBTW5ILEtBQVgsSUFBb0JzSCxNQUFwQixFQUE0QjtBQUMxQkUsY0FBQUEsTUFBTSxDQUFDekgsSUFBUCxDQUNFLElBQUk3QyxlQUFlLENBQUN1SyxtQkFBcEIsQ0FDRSxLQUFLQywrQkFBTCxDQUFxQzFILEtBQXJDLENBREYsRUFFRSxrQkFGRixFQUVzQjtBQUNwQkEsY0FBQUEsS0FIRixFQUlFLEtBQUtYLFFBQUwsSUFBaUIsS0FBS0EsUUFBTCxDQUFjVyxLQUFkLENBSm5CLEVBS0UsS0FBS1gsUUFMUCxFQU1FLFlBTkYsQ0FERjtBQVVEOztBQUVELGdCQUFJLEtBQUtWLEtBQVQsRUFBZ0I7QUFDZC9CLGNBQUFBLENBQUMsQ0FBQzBFLE1BQUYsQ0FBUyxLQUFLM0MsS0FBTCxDQUFXZ0osVUFBcEIsRUFBZ0NsQixVQUFVLElBQUk7QUFDNUMsb0JBQUk3SixDQUFDLENBQUNnTCxPQUFGLENBQVVuQixVQUFVLENBQUNhLE1BQXJCLEVBQTZCQSxNQUE3QixLQUF3QyxDQUFDLENBQUNiLFVBQVUsQ0FBQ29CLEdBQXpELEVBQThEO0FBQzVEVixrQkFBQUEsT0FBTyxHQUFHVixVQUFVLENBQUNvQixHQUFyQjtBQUNBLHlCQUFPLEtBQVA7QUFDRDtBQUNGLGVBTEQ7QUFNRDs7QUFFRCxtQkFBTyxJQUFJM0ssZUFBZSxDQUFDNEsscUJBQXBCLENBQTBDO0FBQy9DWCxjQUFBQSxPQUQrQztBQUUvQ0ssY0FBQUEsTUFGK0M7QUFHL0NILGNBQUFBLE1BQU0sRUFBRXJJLEdBSHVDO0FBSS9Dc0ksY0FBQUE7QUFKK0MsYUFBMUMsQ0FBUDtBQU1EOztBQUNELGFBQUssYUFBTDtBQUNFLGlCQUFPLElBQUlwSyxlQUFlLENBQUM2SyxZQUFwQixDQUFpQy9JLEdBQWpDLENBQVA7O0FBRUY7QUFDRSxpQkFBTyxJQUFJOUIsZUFBZSxDQUFDOEssYUFBcEIsQ0FBa0NoSixHQUFsQyxDQUFQO0FBNURKO0FBOEREOzs7MkNBRXNCaUosSSxFQUFNO0FBQzNCO0FBQ0EsYUFBT2xMLE9BQU8sQ0FBQ2UsR0FBUixDQUFZbUssSUFBSSxDQUFDQyxPQUFMLEVBQVosRUFBNEJuSyxJQUFJLElBQUk7QUFDekNBLFFBQUFBLElBQUksQ0FBQ3VKLE1BQUwsR0FBYyxFQUFkO0FBQ0F2SixRQUFBQSxJQUFJLENBQUNvSyxPQUFMLEdBQWUsS0FBZjtBQUNBcEssUUFBQUEsSUFBSSxDQUFDcUssTUFBTCxHQUFjLENBQUMsQ0FBQ3JLLElBQUksQ0FBQ3FLLE1BQXJCO0FBQ0FySyxRQUFBQSxJQUFJLENBQUMySSxjQUFMLEdBQXNCM0ksSUFBSSxDQUFDb0MsSUFBM0I7QUFDQSxlQUFPLEtBQUtrSSxHQUFMLENBQVUsdUJBQXNCdEssSUFBSSxDQUFDb0MsSUFBSyxLQUExQyxFQUFnRHdGLElBQWhELENBQXFEUCxPQUFPLElBQUk7QUFDckUsZUFBSyxNQUFNbUIsTUFBWCxJQUFxQm5CLE9BQXJCLEVBQThCO0FBQzVCckgsWUFBQUEsSUFBSSxDQUFDdUosTUFBTCxDQUFZZixNQUFNLENBQUMrQixLQUFuQixJQUE0QjtBQUMxQi9HLGNBQUFBLFNBQVMsRUFBRWdGLE1BQU0sQ0FBQ3BHLElBRFE7QUFFMUIwRSxjQUFBQSxNQUFNLEVBQUUxQyxTQUZrQjtBQUcxQm9HLGNBQUFBLEtBQUssRUFBRXBHO0FBSG1CLGFBQTVCO0FBS0Q7O0FBRUQsaUJBQU9wRSxJQUFQO0FBQ0QsU0FWTSxDQUFQO0FBV0QsT0FoQk0sQ0FBUDtBQWlCRDs7O3dDQUVtQjtBQUNsQixVQUNFLEtBQUttQixHQUFMLENBQVMyQixRQUFULENBQWtCLFFBQWxCLEtBQ0EsS0FBSzNCLEdBQUwsQ0FBUzJCLFFBQVQsQ0FBa0IsUUFBbEIsQ0FEQSxJQUVBLEtBQUszQixHQUFMLENBQVMyQixRQUFULENBQWtCLFVBQWxCLENBRkEsSUFHQSxLQUFLM0IsR0FBTCxDQUFTMkIsUUFBVCxDQUFrQixhQUFsQixDQUpGLEVBS0U7QUFDQSxlQUFPLE1BQVAsQ0FEQSxDQUNlO0FBQ2hCOztBQUNELFVBQ0UsS0FBS3ZCLGFBQUwsTUFDQSxLQUFLeUQsYUFBTCxFQURBLElBRUEsS0FBS3lGLGlCQUFMLEVBRkEsSUFHQSxLQUFLdEosR0FBTCxDQUFTdUosV0FBVCxHQUF1QjVILFFBQXZCLENBQWdDLHlCQUF5QjRILFdBQXpCLEVBQWhDLENBSEEsSUFJQSxLQUFLbEksT0FBTCxDQUFhNkIsSUFBYixLQUFzQm5GLFVBQVUsQ0FBQ3lGLFVBTG5DLEVBTUU7QUFDQSxlQUFPLEtBQVA7QUFDRDs7QUFDRCxhQUFPLEtBQVA7QUFDRDs7O21DQUNjekQsTyxFQUFTO0FBQ3RCLFVBQUksQ0FBQ0EsT0FBTyxDQUFDK0YsSUFBYixFQUFtQixPQUFPLEVBQVA7QUFDbkIsVUFBSSxXQUFXL0YsT0FBWCxJQUFzQixZQUFZQSxPQUFPLENBQUMrRixJQUE5QyxFQUNFLE9BQU8vRixPQUFPLENBQUN5SixLQUFSLElBQWlCekosT0FBTyxDQUFDK0YsSUFBUixDQUFhMkQsTUFBckM7QUFDRixVQUFJLENBQUMxSixPQUFPLENBQUMrRixJQUFSLENBQWFqSCxJQUFsQixFQUF3QixPQUFPa0IsT0FBTyxDQUFDK0YsSUFBZjtBQUN4QixZQUFNaUQsSUFBSSxHQUFHLElBQUluRyxLQUFKLENBQVU3QyxPQUFPLENBQUMrRixJQUFSLENBQWFILE1BQXZCLENBQWI7O0FBQ0EsV0FBSyxJQUFJL0UsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2IsT0FBTyxDQUFDK0YsSUFBUixDQUFhSCxNQUFqQyxFQUF5Qy9FLENBQUMsRUFBMUMsRUFBOEM7QUFDNUNtSSxRQUFBQSxJQUFJLENBQUNuSSxDQUFELENBQUosR0FBVWIsT0FBTyxDQUFDK0YsSUFBUixDQUFhakgsSUFBYixDQUFrQitCLENBQWxCLENBQVY7QUFDRDs7QUFDRCxhQUFPbUksSUFBUDtBQUNEOzs7eUNBenFCMkIvSSxHLEVBQUswSixNLEVBQVF6RixPLEVBQVM7QUFDaEQsVUFBSTBGLFNBQUo7O0FBQ0EsVUFBSS9HLEtBQUssQ0FBQ0MsT0FBTixDQUFjNkcsTUFBZCxDQUFKLEVBQTJCO0FBQ3pCQyxRQUFBQSxTQUFTLEdBQUcsRUFBWjtBQUNBRCxRQUFBQSxNQUFNLENBQUMzRCxPQUFQLENBQWUsQ0FBQzZELENBQUQsRUFBSWhKLENBQUosS0FBVTtBQUN2QitJLFVBQUFBLFNBQVMsQ0FBRSxJQUFHL0ksQ0FBQyxHQUFHLENBQUUsRUFBWCxDQUFULEdBQXlCZ0osQ0FBekI7QUFDRCxTQUZEO0FBR0E1SixRQUFBQSxHQUFHLEdBQUdsQyxhQUFhLENBQUNpRyxvQkFBZCxDQUFtQy9ELEdBQW5DLEVBQXdDMEosTUFBeEMsRUFBZ0R6RixPQUFoRCxFQUF5RDtBQUM3RDRGLFVBQUFBLGdCQUFnQixFQUFFO0FBRDJDLFNBQXpELEVBRUgsQ0FGRyxDQUFOO0FBR0QsT0FSRCxNQVFPO0FBQ0xGLFFBQUFBLFNBQVMsR0FBRyxFQUFaOztBQUNBLFlBQUksT0FBT0QsTUFBUCxLQUFrQixRQUF0QixFQUFnQztBQUM5QixlQUFLLE1BQU1JLENBQVgsSUFBZ0JwTCxNQUFNLENBQUNNLElBQVAsQ0FBWTBLLE1BQVosQ0FBaEIsRUFBcUM7QUFDbkNDLFlBQUFBLFNBQVMsQ0FBRSxJQUFHRyxDQUFFLEVBQVAsQ0FBVCxHQUFxQkosTUFBTSxDQUFDSSxDQUFELENBQTNCO0FBQ0Q7QUFDRjs7QUFDRDlKLFFBQUFBLEdBQUcsR0FBR2xDLGFBQWEsQ0FBQ2lHLG9CQUFkLENBQW1DL0QsR0FBbkMsRUFBd0MwSixNQUF4QyxFQUFnRHpGLE9BQWhELEVBQXlEO0FBQzdENEYsVUFBQUEsZ0JBQWdCLEVBQUU7QUFEMkMsU0FBekQsRUFFSCxDQUZHLENBQU47QUFHRDs7QUFDRCxhQUFPLENBQUM3SixHQUFELEVBQU0ySixTQUFOLENBQVA7QUFDRDs7OztFQW5DaUI3TCxhOztBQXlyQnBCaU0sTUFBTSxDQUFDQyxPQUFQLEdBQWlCOUssS0FBakI7QUFDQTZLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlOUssS0FBZixHQUF1QkEsS0FBdkI7QUFDQTZLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCL0ssS0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZVwiKTtcbmNvbnN0IEFic3RyYWN0UXVlcnkgPSByZXF1aXJlKFwiLi4vYWJzdHJhY3QvcXVlcnlcIik7XG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3F1ZXJ5LXR5cGVzXCIpO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dnZXJcIik7XG5cbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcInNxbDpzcWxpdGVcIik7XG5jb25zdCBnZXRNZXRob2RzID0gb2JqID0+IHtcbiAgbGV0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG4gIGxldCBjdXJyZW50T2JqID0gb2JqO1xuICBkbyB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudE9iaikubWFwKGl0ZW0gPT4gcHJvcGVydGllcy5hZGQoaXRlbSkpO1xuICB9IHdoaWxlICgoY3VycmVudE9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50T2JqKSkpO1xuICByZXR1cm4gWy4uLnByb3BlcnRpZXMua2V5cygpXS5maWx0ZXIoaXRlbSA9PiB0eXBlb2Ygb2JqW2l0ZW1dID09PSBcImZ1bmN0aW9uXCIpO1xufTtcbmNsYXNzIFF1ZXJ5IGV4dGVuZHMgQWJzdHJhY3RRdWVyeSB7XG4gIGdldEluc2VydElkRmllbGQoKSB7XG4gICAgcmV0dXJuIFwibGFzdElEXCI7XG4gIH1cblxuICAvKipcbiAgICogcmV3cml0ZSBxdWVyeSB3aXRoIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlhbGVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0KSB7XG4gICAgbGV0IGJpbmRQYXJhbTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICAgIGJpbmRQYXJhbVtgJCR7aSArIDF9YF0gPSB2O1xuICAgICAgfSk7XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpKSB7XG4gICAgICAgICAgYmluZFBhcmFtW2AkJHtrfWBdID0gdmFsdWVzW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH1cbiAgICByZXR1cm4gW3NxbCwgYmluZFBhcmFtXTtcbiAgfVxuXG4gIF9jb2xsZWN0TW9kZWxzKGluY2x1ZGUsIHByZWZpeCkge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuXG4gICAgaWYgKGluY2x1ZGUpIHtcbiAgICAgIGZvciAoY29uc3QgX2luY2x1ZGUgb2YgaW5jbHVkZSkge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBpZiAoIXByZWZpeCkge1xuICAgICAgICAgIGtleSA9IF9pbmNsdWRlLmFzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IGAke3ByZWZpeH0uJHtfaW5jbHVkZS5hc31gO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXldID0gX2luY2x1ZGUubW9kZWw7XG5cbiAgICAgICAgaWYgKF9pbmNsdWRlLmluY2x1ZGUpIHtcbiAgICAgICAgICBfLm1lcmdlKHJldCwgdGhpcy5fY29sbGVjdE1vZGVscyhfaW5jbHVkZS5pbmNsdWRlLCBrZXkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBfaGFuZGxlUXVlcnlSZXNwb25zZShtZXRhRGF0YSwgY29sdW1uVHlwZXMsIGVyciwgcmVzdWx0cykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci5zcWwgPSB0aGlzLnNxbDtcbiAgICAgIHRocm93IHRoaXMuZm9ybWF0RXJyb3IoZXJyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuaW5zdGFuY2U7XG4gICAgLy8gYWRkIHRoZSBpbnNlcnRlZCByb3cgaWQgdG8gdGhlIGluc3RhbmNlXG4gICAgaWYgKHRoaXMuaXNJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5zZXJ0UXVlcnkocmVzdWx0cywgbWV0YURhdGEpO1xuICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgIC8vIGhhbmRsZSBidWxrQ3JlYXRlIEFJIHByaW1hcnkga2V5XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvKiAgbWV0YURhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdGF0ZW1lbnRcIiAmJiAqL1xuICAgICAgICAgIHRoaXMubW9kZWwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgPT09XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzdGFydElkID1cbiAgICAgICAgICAgIG1ldGFEYXRhW3RoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpXSAtIG1ldGFEYXRhLmNoYW5nZXMgKyAxO1xuXG4gICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SWQ7IGkgPCBzdGFydElkICsgbWV0YURhdGEuY2hhbmdlczsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgIFt0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICAgICAgICAgIC5maWVsZF06IGlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBtZXRhRGF0YVt0aGlzLmdldEluc2VydElkRmllbGQoKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Nob3dUYWJsZXNRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAocm93ID0+IHJvdy5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93Q29uc3RyYWludHNRdWVyeSgpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRzO1xuICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnNxbCkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHJlc3VsdHNbMF0uc3FsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0UXVlcnkoKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYXcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VsZWN0UXVlcnkocmVzdWx0cyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGlzIGEgbWFwIG9mIHByZWZpeCBzdHJpbmdzIHRvIG1vZGVscywgZS5nLiB1c2VyLnByb2plY3RzIC0+IFByb2plY3QgbW9kZWxcbiAgICAgIGNvbnN0IHByZWZpeGVzID0gdGhpcy5fY29sbGVjdE1vZGVscyh0aGlzLm9wdGlvbnMuaW5jbHVkZSk7XG5cbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMocmVzdWx0LCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0aW5kID0gbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG5cbiAgICAgICAgICAgIG1vZGVsID0gcHJlZml4ZXNbbmFtZS5zdWJzdHIoMCwgbGFzdGluZCldO1xuXG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIobGFzdGluZCArIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IHRoaXMub3B0aW9ucy5tb2RlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbFxuICAgICAgICAgICAgLmdldFRhYmxlTmFtZSgpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgY29uc3QgdGFibGVUeXBlcyA9IGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gfHwge307XG5cbiAgICAgICAgICBpZiAodGFibGVUeXBlcyAmJiAhKG5hbWUgaW4gdGFibGVUeXBlcykpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb2x1bW4gaXMgYWxpYXNlZFxuICAgICAgICAgICAgXy5mb3JPd24obW9kZWwucmF3QXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSBrZXkgJiYgYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJpYnV0ZS5maWVsZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFibGVUeXBlcywgbmFtZSlcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVBhcnNlcnModGFibGVUeXBlc1tuYW1lXSwgdmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZWxlY3RRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93T3JEZXNjcmliZVF1ZXJ5KCkpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgSU5ERVhfTElTVFwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2hvd0luZGV4ZXNRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIElOREVYX0lORk9cIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgVEFCTEVfSU5GT1wiKSkge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgc3FsaXRlIHdheSBvZiBnZXR0aW5nIHRoZSBtZXRhZGF0YSBvZiBhIHRhYmxlXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgZm9yIChjb25zdCBfcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAoX3Jlc3VsdC5kZmx0X3ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDb2x1bW4gc2NoZW1hIG9taXRzIGFueSBcIkRFRkFVTFQgLi4uXCJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9yZXN1bHQuZGZsdF92YWx1ZSA9PT0gXCJOVUxMXCIpIHtcbiAgICAgICAgICAgIC8vIENvbHVtbiBzY2hlbWEgaXMgYSBcIkRFRkFVTFQgTlVMTFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVzdWx0LmRmbHRfdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBfcmVzdWx0LnR5cGUsXG4gICAgICAgICAgICBhbGxvd051bGw6IF9yZXN1bHQubm90bnVsbCA9PT0gMCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IF9yZXN1bHQucGsgIT09IDBcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlc3VsdFtfcmVzdWx0Lm5hbWVdLnR5cGUgPT09IFwiVElOWUlOVCgxKVwiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSB7IFwiMFwiOiBmYWxzZSwgXCIxXCI6IHRydWUgfVtcbiAgICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSByZXN1bHRbXG4gICAgICAgICAgICAgIF9yZXN1bHQubmFtZVxuICAgICAgICAgICAgXS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvJy9nLCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5cztcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgZm9yZWlnbl9rZXlzXCIpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5X2xpc3RcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBbUXVlcnlUeXBlcy5CVUxLVVBEQVRFLCBRdWVyeVR5cGVzLkJVTEtERUxFVEVdLmluY2x1ZGVzKHRoaXMub3B0aW9ucy50eXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuIG1ldGFEYXRhLmNoYW5nZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5VUFNFUlQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5WRVJTSU9OKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1swXS52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuUkFXKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdHMsIG1ldGFEYXRhXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVRdWVyeSgpIHx8IHRoaXMuaXNJbnNlcnRRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0YURhdGEuY2hhbmdlc107XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gd2Vic3FsIDogcG9seWZpbGwgZm9yZWlnbiBrZXkgaHR0cHM6Ly9qdXN0YXRoZW9yeS5jb20vMjAwNC8xMS9zcWxpdGUtZm9yZWlnbi1rZXktdHJpZ2dlcnMvXG4gIHJ1bihzcWwsIHBhcmFtZXRlcnMpIHtcbiAgICAvLyBleGVjIGRvZXMgbm90IHN1cHBvcnQgYmluZCBwYXJhbWV0ZXJcbiAgICB0aGlzLnNxbCA9IEFic3RyYWN0UXVlcnkuZm9ybWF0QmluZFBhcmFtZXRlcnMoXG4gICAgICBzcWwsXG4gICAgICB0aGlzLm9wdGlvbnMuYmluZCxcbiAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0IHx8IFwic3FsaXRlXCIsXG4gICAgICB7IHNraXBVbmVzY2FwZTogZmFsc2UgfVxuICAgIClbMF07XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXREYXRhYmFzZU1ldGhvZCgpO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gdGhpcy5fbG9nUXVlcnkodGhpcy5zcWwsIGRlYnVnLCBwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXM7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29ubiA9IHRoaXMuY29ubmVjdGlvbjtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtblR5cGVzID0ge307XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGV4ZWN1dGVTcWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzcWwuc3RhcnRzV2l0aChcIi0tIFwiKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImV4ZWNcIikge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY29ubi5leGVjKFxuICAgICAgICAgICAgICAgICAgW3sgc3FsOiBzZWxmLnNxbCwgYXJnczogW10gfV0sXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIChleGVjdXRpb25FcnJvciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgcmV0dXJuIFBSQUdNQSBJTkRFWF9MSVNUIGFuZCBJTkRFWF9JTkZPXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGB0aGlzYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgc3VjY2Vzc0NhbGxiYWNrID0gZnVuY3Rpb24ocmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgLy8gYHNlbGZgIGlzIHBhc3NlZCBmcm9tIHNxbGl0ZSwgd2UgaGF2ZSBubyBjb250cm9sIG92ZXIgdGhpcy5cbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldID0gcmVzdWx0cy5pbnNlcnRJZDtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VzID0gcmVzdWx0cy5yb3dzQWZmZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzID0gcXVlcnkuY29udmVydFRvQXJyYXkocmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGRlYnVnKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKHNlbGYsIGNvbHVtblR5cGVzLCBlcnIpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBbXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgY29ubi5leGVjdXRlU3FsKFxuICAgICAgICAgICAgICAgIHNlbGYuc3FsLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2tcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgLypjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW5ub3QgdXNlIGFycm93IGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgYm91bmQgdG8gdGhlIHN0YXRlbWVudFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBgc2VsZmAgaXMgcGFzc2VkIGZyb20gc3FsaXRlLCB3ZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciB0aGlzLlxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXSA9IHJlc3VsdHMuaW5zZXJ0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZXMgPSByZXN1bHRzLnJvd3NBZmZlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShzZWxmLCBjb2x1bW5UeXBlcywgZXJyKSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25uLmV4ZWMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgICBzZWxmLnNxbCxcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGlmIChtZXRob2QgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgbGV0IHRhYmxlTmFtZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMudGFibGVOYW1lcykge1xuICAgICAgICAgIHRhYmxlTmFtZXMgPSB0aGlzLm9wdGlvbnMudGFibGVOYW1lcztcbiAgICAgICAgfSBlbHNlIGlmICgvRlJPTSBgKC4qPylgL2kuZXhlYyh0aGlzLnNxbCkpIHtcbiAgICAgICAgICB0YWJsZU5hbWVzLnB1c2goL0ZST00gYCguKj8pYC9pLmV4ZWModGhpcy5zcWwpWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSwgdGhlcmUncyBubyBuZWVkIHRvIGFzayBmb3IgaXQgYWdhaW5cbiAgICAgICAgdGFibGVOYW1lcyA9IHRhYmxlTmFtZXMuZmlsdGVyKFxuICAgICAgICAgIHRhYmxlTmFtZSA9PlxuICAgICAgICAgICAgISh0YWJsZU5hbWUgaW4gY29sdW1uVHlwZXMpICYmIHRhYmxlTmFtZSAhPT0gXCJzcWxpdGVfbWFzdGVyXCJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0YWJsZU5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBleGVjdXRlU3FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29ubi5leGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNxbENvbW1hbmRzID0gdGFibGVOYW1lcy5tYXAodGFibGVOYW1lID0+IHtcbiAgICAgICAgICAgICAgdGFibGVOYW1lID0gdGFibGVOYW1lLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtgUFJBR01BIHRhYmxlX2luZm8oXFxgJHt0YWJsZU5hbWV9XFxgKWAsIHRhYmxlTmFtZV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbm4uZXhlYyhcbiAgICAgICAgICAgICAgc3FsQ29tbWFuZHMubWFwKHNxbENtZCA9PiAoe1xuICAgICAgICAgICAgICAgIHNxbDogc3FsQ21kWzBdLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcWxDb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBzcWxDb21tYW5kc1tpXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0c1tpXS5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXVtyZXN1bHQubmFtZV0gPSByZXN1bHQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhYmxlTmFtZXMuZm9yRWFjaCgodGFibGVOYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25uLmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgYFNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPScke3RhYmxlTmFtZX0nIGFuZCB0eXBlPSd0YWJsZSdgLFxuICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGUgPSByZXN1bHQucm93cy5pdGVtKDApO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzcWxcIiBpbiB0YWJsZSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUuc3FsID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAvL21hdGNoIGNvbHVtbiBuYW1lIHdpdGggZGF0YSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGUuc3FsLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgICAgIC8oYFxcdytgKSgoXFxzKFtBLVpdKykoKFxcKFxcZCtcXCkpKT8pKS9nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IGNvbHVtbiBuYW1lcyB3aXRoIGRhdGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbE5hbWUsIGNvbFR5cGVdID0gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIiBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9gL2csIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV1bY29sTmFtZV0gPSBjb2xUeXBlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjb2x1bW5UeXBlcylcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGFibGVOYW1lcy5sZW5ndGggLSAxKSByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8qY29ubi50cmFuc2FjdGlvbihmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZXMuZm9yRWFjaCgodGFibGVOYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbChcbiAgICAgICAgICAgICAgICAgIGBTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nJHt0YWJsZU5hbWV9JyBhbmQgdHlwZT0ndGFibGUnYCxcbiAgICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oXywgcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gcmVzdWx0LnJvd3MuaXRlbSgwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0YWJsZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgIFwic3FsXCIgaW4gdGFibGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGFibGUuc3FsID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAvL21hdGNoIGNvbHVtbiBuYW1lIHdpdGggZGF0YSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0YWJsZS5zcWwubWF0Y2goXG4gICAgICAgICAgICAgICAgICAgICAgICAvKGBcXHcrYCkoKFxccyhbQS1aXSspKChcXChcXGQrXFwpKSk/KSkvZ1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3BsaXQgY29sdW1uIG5hbWVzIHdpdGggZGF0YSB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbE5hbWUsIGNvbFR5cGVdID0gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xccysvZywgXCIgXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9gL2csIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdW2NvbE5hbWVdID0gY29sVHlwZS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coY29sdW1uVHlwZXMpXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGFibGVOYW1lcy5sZW5ndGggLSAxKSByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oXywgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pOyovXG4gICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKGV4ZWN1dGVTcWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4ZWN1dGVTcWwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHNxbCkge1xuICAgIGxldCBjb25zdHJhaW50cyA9IHNxbC5zcGxpdChcIkNPTlNUUkFJTlQgXCIpO1xuICAgIGxldCByZWZlcmVuY2VUYWJsZU5hbWUsIHJlZmVyZW5jZVRhYmxlS2V5cywgdXBkYXRlQWN0aW9uLCBkZWxldGVBY3Rpb247XG4gICAgY29uc3RyYWludHMuc3BsaWNlKDAsIDEpO1xuICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHMubWFwKGNvbnN0cmFpbnRTcWwgPT4ge1xuICAgICAgLy9QYXJzZSBmb3JlaWduIGtleSBzbmlwcGV0c1xuICAgICAgaWYgKGNvbnN0cmFpbnRTcWwuaW5jbHVkZXMoXCJSRUZFUkVOQ0VTXCIpKSB7XG4gICAgICAgIC8vUGFyc2Ugb3V0IHRoZSBjb25zdHJhaW50IGNvbmRpdGlvbiBmb3JtIHNxbCBzdHJpbmdcbiAgICAgICAgdXBkYXRlQWN0aW9uID0gY29uc3RyYWludFNxbC5tYXRjaChcbiAgICAgICAgICAvT04gVVBEQVRFIChDQVNDQURFfFNFVCBOVUxMfFJFU1RSSUNUfE5PIEFDVElPTnxTRVQgREVGQVVMVCl7MX0vXG4gICAgICAgICk7XG4gICAgICAgIGRlbGV0ZUFjdGlvbiA9IGNvbnN0cmFpbnRTcWwubWF0Y2goXG4gICAgICAgICAgL09OIERFTEVURSAoQ0FTQ0FERXxTRVQgTlVMTHxSRVNUUklDVHxOTyBBQ1RJT058U0VUIERFRkFVTFQpezF9L1xuICAgICAgICApO1xuXG4gICAgICAgIGlmICh1cGRhdGVBY3Rpb24pIHtcbiAgICAgICAgICB1cGRhdGVBY3Rpb24gPSB1cGRhdGVBY3Rpb25bMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsZXRlQWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlQWN0aW9uID0gZGVsZXRlQWN0aW9uWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlc1JlZ2V4ID0gL1JFRkVSRU5DRVMuK1xcKCg/OlteKShdK3xcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKlxcKS87XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUNvbmRpdGlvbnMgPSBjb25zdHJhaW50U3FsXG4gICAgICAgICAgLm1hdGNoKHJlZmVyZW5jZXNSZWdleClbMF1cbiAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICByZWZlcmVuY2VUYWJsZU5hbWUgPSBVdGlscy5yZW1vdmVUaWNrcyhyZWZlcmVuY2VDb25kaXRpb25zWzFdKTtcbiAgICAgICAgbGV0IGNvbHVtbk5hbWVzID0gcmVmZXJlbmNlQ29uZGl0aW9uc1syXTtcbiAgICAgICAgY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lcy5yZXBsYWNlKC9cXCh8XFwpL2csIFwiXCIpLnNwbGl0KFwiLCBcIik7XG4gICAgICAgIHJlZmVyZW5jZVRhYmxlS2V5cyA9IGNvbHVtbk5hbWVzLm1hcChjb2x1bW4gPT5cbiAgICAgICAgICBVdGlscy5yZW1vdmVUaWNrcyhjb2x1bW4pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRDb25kaXRpb24gPSBjb25zdHJhaW50U3FsLm1hdGNoKFxuICAgICAgICAvXFwoKD86W14pKF0rfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqXFwpL1xuICAgICAgKVswXTtcbiAgICAgIGNvbnN0cmFpbnRTcWwgPSBjb25zdHJhaW50U3FsLnJlcGxhY2UoL1xcKC4rXFwpLywgXCJcIik7XG4gICAgICBjb25zdCBjb25zdHJhaW50ID0gY29uc3RyYWludFNxbC5zcGxpdChcIiBcIik7XG5cbiAgICAgIGlmIChjb25zdHJhaW50WzFdID09PSBcIlBSSU1BUllcIiB8fCBjb25zdHJhaW50WzFdID09PSBcIkZPUkVJR05cIikge1xuICAgICAgICBjb25zdHJhaW50WzFdICs9IFwiIEtFWVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb25zdHJhaW50TmFtZTogVXRpbHMucmVtb3ZlVGlja3MoY29uc3RyYWludFswXSksXG4gICAgICAgIGNvbnN0cmFpbnRUeXBlOiBjb25zdHJhaW50WzFdLFxuICAgICAgICB1cGRhdGVBY3Rpb24sXG4gICAgICAgIGRlbGV0ZUFjdGlvbixcbiAgICAgICAgc3FsOiBzcWwucmVwbGFjZSgvXCIvZywgXCJgXCIpLCAvL1NxbGl0ZSByZXR1cm5zIGRvdWJsZSBxdW90ZXMgZm9yIHRhYmxlIG5hbWVcbiAgICAgICAgY29uc3RyYWludENvbmRpdGlvbixcbiAgICAgICAgcmVmZXJlbmNlVGFibGVOYW1lLFxuICAgICAgICByZWZlcmVuY2VUYWJsZUtleXNcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludHM7XG4gIH1cblxuICBhcHBseVBhcnNlcnModHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZS5pbmNsdWRlcyhcIihcIikpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgbGVuZ3RoIHBhcnRcbiAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cigwLCB0eXBlLmluZGV4T2YoXCIoXCIpKTtcbiAgICB9XG4gICAgdHlwZSA9IHR5cGUucmVwbGFjZShcIlVOU0lHTkVEXCIsIFwiXCIpLnJlcGxhY2UoXCJaRVJPRklMTFwiLCBcIlwiKTtcbiAgICB0eXBlID0gdHlwZS50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBwYXJzZSA9IHBhcnNlclN0b3JlLmdldCh0eXBlKTtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgcGFyc2UpIHtcbiAgICAgIHJldHVybiBwYXJzZSh2YWx1ZSwgeyB0aW1lem9uZTogdGhpcy5zZXF1ZWxpemUub3B0aW9ucy50aW1lem9uZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZm9ybWF0RXJyb3IoZXJyKSB7XG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBcIlNRTElURV9DT05TVFJBSU5UXCI6IHtcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiRk9SRUlHTiBLRVkgY29uc3RyYWludCBmYWlsZWRcIikpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5Gb3JlaWduS2V5Q29uc3RyYWludEVycm9yKHtcbiAgICAgICAgICAgIHBhcmVudDogZXJyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmllbGRzID0gW107XG5cbiAgICAgICAgLy8gU3FsaXRlIHByZSAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IGNvbHVtbnMgeCwgeSBhcmUgbm90IHVuaXF1ZVxuICAgICAgICBsZXQgbWF0Y2ggPSBlcnIubWVzc2FnZS5tYXRjaCgvY29sdW1ucyAoLio/KSBhcmUvKTtcbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmIG1hdGNoLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV0uc3BsaXQoXCIsIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTcWxpdGUgcG9zdCAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IFVOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogdGFibGUueCwgdGFibGUueVxuICAgICAgICAgIG1hdGNoID0gZXJyLm1lc3NhZ2UubWF0Y2goL1VOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogKC4qKS8pO1xuICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiBtYXRjaC5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV1cbiAgICAgICAgICAgICAgLnNwbGl0KFwiLCBcIilcbiAgICAgICAgICAgICAgLm1hcChjb2x1bW5XaXRoVGFibGUgPT4gY29sdW1uV2l0aFRhYmxlLnNwbGl0KFwiLlwiKVsxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGxldCBtZXNzYWdlID0gXCJWYWxpZGF0aW9uIGVycm9yXCI7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAgIG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9ySXRlbShcbiAgICAgICAgICAgICAgdGhpcy5nZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlKGZpZWxkKSxcbiAgICAgICAgICAgICAgXCJ1bmlxdWUgdmlvbGF0aW9uXCIsIC8vIHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnMuREIsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2VbZmllbGRdLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICBcIm5vdF91bmlxdWVcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgIF8uZm9yT3duKHRoaXMubW9kZWwudW5pcXVlS2V5cywgY29uc3RyYWludCA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pc0VxdWFsKGNvbnN0cmFpbnQuZmllbGRzLCBmaWVsZHMpICYmICEhY29uc3RyYWludC5tc2cpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGNvbnN0cmFpbnQubXNnO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5VbmlxdWVDb25zdHJhaW50RXJyb3Ioe1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgZXJyb3JzLFxuICAgICAgICAgIHBhcmVudDogZXJyLFxuICAgICAgICAgIGZpZWxkc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJTUUxJVEVfQlVTWVwiOlxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5UaW1lb3V0RXJyb3IoZXJyKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBzZXF1ZWxpemVFcnJvcnMuRGF0YWJhc2VFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNob3dJbmRleGVzUXVlcnkoZGF0YSkge1xuICAgIC8vIFNxbGl0ZSByZXR1cm5zIGluZGV4ZXMgc28gdGhlIG9uZSB0aGF0IHdhcyBkZWZpbmVkIGxhc3QgaXMgcmV0dXJuZWQgZmlyc3QuIExldHMgcmV2ZXJzZSB0aGF0IVxuICAgIHJldHVybiBQcm9taXNlLm1hcChkYXRhLnJldmVyc2UoKSwgaXRlbSA9PiB7XG4gICAgICBpdGVtLmZpZWxkcyA9IFtdO1xuICAgICAgaXRlbS5wcmltYXJ5ID0gZmFsc2U7XG4gICAgICBpdGVtLnVuaXF1ZSA9ICEhaXRlbS51bmlxdWU7XG4gICAgICBpdGVtLmNvbnN0cmFpbnROYW1lID0gaXRlbS5uYW1lO1xuICAgICAgcmV0dXJuIHRoaXMucnVuKGBQUkFHTUEgSU5ERVhfSU5GTyhcXGAke2l0ZW0ubmFtZX1cXGApYCkudGhlbihjb2x1bW5zID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICAgIGl0ZW0uZmllbGRzW2NvbHVtbi5zZXFub10gPSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmRlcjogdW5kZWZpbmVkXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhYmFzZU1ldGhvZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNxbC5pbmNsdWRlcyhcIlBSQUdNQVwiKSB8fFxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJDT01NSVRcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiUk9MTEJBQ0tcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiVFJBTlNBQ1RJT05cIilcbiAgICApIHtcbiAgICAgIHJldHVybiBcImV4ZWNcIjsgLy8gTmVlZGVkIHRvIHJ1biBuby1vcCB0cmFuc2FjdGlvblxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmlzSW5zZXJ0UXVlcnkoKSB8fFxuICAgICAgdGhpcy5pc1VwZGF0ZVF1ZXJ5KCkgfHxcbiAgICAgIHRoaXMuaXNCdWxrVXBkYXRlUXVlcnkoKSB8fFxuICAgICAgdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURSBURU1QT1JBUlkgVEFCTEVcIi50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuQlVMS0RFTEVURVxuICAgICkge1xuICAgICAgcmV0dXJuIFwicnVuXCI7XG4gICAgfVxuICAgIHJldHVybiBcImFsbFwiO1xuICB9XG4gIGNvbnZlcnRUb0FycmF5KHJlc3VsdHMpIHtcbiAgICBpZiAoIXJlc3VsdHMucm93cykgcmV0dXJuIFtdO1xuICAgIGlmIChcImFycmF5XCIgaW4gcmVzdWx0cyB8fCBcIl9hcnJheVwiIGluIHJlc3VsdHMucm93cylcbiAgICAgIHJldHVybiByZXN1bHRzLmFycmF5IHx8IHJlc3VsdHMucm93cy5fYXJyYXk7XG4gICAgaWYgKCFyZXN1bHRzLnJvd3MuaXRlbSkgcmV0dXJuIHJlc3VsdHMucm93cztcbiAgICBjb25zdCBkYXRhID0gbmV3IEFycmF5KHJlc3VsdHMucm93cy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkYXRhW2ldID0gcmVzdWx0cy5yb3dzLml0ZW0oaSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUXVlcnk7XG5tb2R1bGUuZXhwb3J0cy5RdWVyeSA9IFF1ZXJ5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IFF1ZXJ5O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9kaWFsZWN0cy9zcWxpdGUvcXVlcnkuanMiXSwibmFtZXMiOlsiXyIsInJlcXVpcmUiLCJVdGlscyIsIlByb21pc2UiLCJBYnN0cmFjdFF1ZXJ5IiwiUXVlcnlUeXBlcyIsInNlcXVlbGl6ZUVycm9ycyIsInBhcnNlclN0b3JlIiwibG9nZ2VyIiwiZGVidWciLCJkZWJ1Z0NvbnRleHQiLCJnZXRNZXRob2RzIiwib2JqIiwicHJvcGVydGllcyIsIlNldCIsImN1cnJlbnRPYmoiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibWFwIiwiaXRlbSIsImFkZCIsImdldFByb3RvdHlwZU9mIiwia2V5cyIsImZpbHRlciIsIlF1ZXJ5IiwiaW5jbHVkZSIsInByZWZpeCIsInJldCIsIl9pbmNsdWRlIiwia2V5IiwiYXMiLCJtb2RlbCIsIm1lcmdlIiwiX2NvbGxlY3RNb2RlbHMiLCJtZXRhRGF0YSIsImNvbHVtblR5cGVzIiwiZXJyIiwicmVzdWx0cyIsInNxbCIsImZvcm1hdEVycm9yIiwicmVzdWx0IiwiaW5zdGFuY2UiLCJpc0luc2VydFF1ZXJ5IiwiaGFuZGxlSW5zZXJ0UXVlcnkiLCJhdXRvSW5jcmVtZW50QXR0cmlidXRlIiwicHJpbWFyeUtleUF0dHJpYnV0ZSIsInJhd0F0dHJpYnV0ZXMiLCJzdGFydElkIiwiZ2V0SW5zZXJ0SWRGaWVsZCIsImNoYW5nZXMiLCJpIiwicHVzaCIsImZpZWxkIiwiaXNTaG93VGFibGVzUXVlcnkiLCJyb3ciLCJuYW1lIiwiaXNTaG93Q29uc3RyYWludHNRdWVyeSIsInBhcnNlQ29uc3RyYWludHNGcm9tU3FsIiwiaXNTZWxlY3RRdWVyeSIsIm9wdGlvbnMiLCJyYXciLCJoYW5kbGVTZWxlY3RRdWVyeSIsInByZWZpeGVzIiwibWFwVmFsdWVzIiwidmFsdWUiLCJpbmNsdWRlcyIsImxhc3RpbmQiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsInRhYmxlTmFtZSIsImdldFRhYmxlTmFtZSIsInRvU3RyaW5nIiwicmVwbGFjZSIsInRhYmxlVHlwZXMiLCJmb3JPd24iLCJhdHRyaWJ1dGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseVBhcnNlcnMiLCJpc1Nob3dPckRlc2NyaWJlUXVlcnkiLCJoYW5kbGVTaG93SW5kZXhlc1F1ZXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiX3Jlc3VsdCIsImRmbHRfdmFsdWUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwiYWxsb3dOdWxsIiwibm90bnVsbCIsInByaW1hcnlLZXkiLCJwayIsIkJVTEtVUERBVEUiLCJCVUxLREVMRVRFIiwiVVBTRVJUIiwiVkVSU0lPTiIsInZlcnNpb24iLCJSQVciLCJpc1VwZGF0ZVF1ZXJ5IiwicGFyYW1ldGVycyIsImZvcm1hdEJpbmRQYXJhbWV0ZXJzIiwiYmluZCIsImRpYWxlY3QiLCJza2lwVW5lc2NhcGUiLCJtZXRob2QiLCJnZXREYXRhYmFzZU1ldGhvZCIsImNvbXBsZXRlIiwiX2xvZ1F1ZXJ5IiwicXVlcnkiLCJzZWxmIiwiY29ubiIsImNvbm5lY3Rpb24iLCJyZXNvbHZlIiwiZXhlY3V0ZVNxbCIsInN0YXJ0c1dpdGgiLCJyZWplY3QiLCJleGVjIiwiYXJncyIsImV4ZWN1dGlvbkVycm9yIiwiY29udmVydFRvQXJyYXkiLCJfaGFuZGxlUXVlcnlSZXNwb25zZSIsImVycm9yIiwidHJhbnNhY3Rpb24iLCJ0Iiwic3VjY2Vzc0NhbGxiYWNrIiwicm93c0FmZmVjdGVkIiwiaW5zZXJ0SWQiLCJlIiwiZXJyb3JDYWxsYmFjayIsInRhYmxlTmFtZXMiLCJsZW5ndGgiLCJzcWxDb21tYW5kcyIsInNxbENtZCIsInJvd3MiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0YWJsZSIsImNvbHVtbnMiLCJtYXRjaCIsImNvbCIsImNvbE5hbWUiLCJjb2xUeXBlIiwidHJpbSIsInNwbGl0IiwidGhlbiIsImNvbnN0cmFpbnRzIiwicmVmZXJlbmNlVGFibGVOYW1lIiwicmVmZXJlbmNlVGFibGVLZXlzIiwidXBkYXRlQWN0aW9uIiwiZGVsZXRlQWN0aW9uIiwic3BsaWNlIiwiY29uc3RyYWludFNxbCIsInJlZmVyZW5jZXNSZWdleCIsInJlZmVyZW5jZUNvbmRpdGlvbnMiLCJyZW1vdmVUaWNrcyIsImNvbHVtbk5hbWVzIiwiY29sdW1uIiwiY29uc3RyYWludENvbmRpdGlvbiIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50TmFtZSIsImNvbnN0cmFpbnRUeXBlIiwiaW5kZXhPZiIsInRvVXBwZXJDYXNlIiwicGFyc2UiLCJnZXQiLCJ0aW1lem9uZSIsInNlcXVlbGl6ZSIsImNvZGUiLCJtZXNzYWdlIiwiRm9yZWlnbktleUNvbnN0cmFpbnRFcnJvciIsInBhcmVudCIsImZpZWxkcyIsImNvbHVtbldpdGhUYWJsZSIsImVycm9ycyIsIlZhbGlkYXRpb25FcnJvckl0ZW0iLCJnZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlIiwidW5pcXVlS2V5cyIsImlzRXF1YWwiLCJtc2ciLCJVbmlxdWVDb25zdHJhaW50RXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJEYXRhYmFzZUVycm9yIiwiZGF0YSIsInJldmVyc2UiLCJwcmltYXJ5IiwidW5pcXVlIiwicnVuIiwic2Vxbm8iLCJvcmRlciIsImlzQnVsa1VwZGF0ZVF1ZXJ5IiwidG9Mb3dlckNhc2UiLCJhcnJheSIsIl9hcnJheSIsInZhbHVlcyIsImJpbmRQYXJhbSIsInYiLCJza2lwVmFsdWVSZXBsYWNlIiwiayIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU1BLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxlQUFELENBQXZCOztBQUNBLE1BQU1HLGFBQWEsR0FBR0gsT0FBTyxDQUFDLG1CQUFELENBQTdCOztB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SixHQUFELEVBQU02SixTQUFOLENBQVA7QUFDRDs7OztFQW5DaUIvTCxhOztBQXVtQnBCbU0sTUFBTSxDQUFDQyxPQUFQLEdBQWlCaEwsS0FBakI7QUFDQStLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlaEwsS0FBZixHQUF1QkEsS0FBdkI7QUFDQStLLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxPQUFmLEdBQXlCakwsS0FBekIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgXyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZVwiKTtcbmNvbnN0IEFic3RyYWN0UXVlcnkgPSByZXF1aXJlKFwiLi4vYWJzdHJhY3QvcXVlcnlcIik7XG5jb25zdCBRdWVyeVR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3F1ZXJ5LXR5cGVzXCIpO1xuY29uc3Qgc2VxdWVsaXplRXJyb3JzID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yc1wiKTtcbmNvbnN0IHBhcnNlclN0b3JlID0gcmVxdWlyZShcIi4uL3BhcnNlclN0b3JlXCIpKFwic3FsaXRlXCIpO1xuY29uc3QgeyBsb2dnZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dnZXJcIik7XG5cbmNvbnN0IGRlYnVnID0gbG9nZ2VyLmRlYnVnQ29udGV4dChcInNxbDpzcWxpdGVcIik7XG5jb25zdCBnZXRNZXRob2RzID0gb2JqID0+IHtcbiAgbGV0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG4gIGxldCBjdXJyZW50T2JqID0gb2JqO1xuICBkbyB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudE9iaikubWFwKGl0ZW0gPT4gcHJvcGVydGllcy5hZGQoaXRlbSkpO1xuICB9IHdoaWxlICgoY3VycmVudE9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50T2JqKSkpO1xuICByZXR1cm4gWy4uLnByb3BlcnRpZXMua2V5cygpXS5maWx0ZXIoaXRlbSA9PiB0eXBlb2Ygb2JqW2l0ZW1dID09PSBcImZ1bmN0aW9uXCIpO1xufTtcbmNsYXNzIFF1ZXJ5IGV4dGVuZHMgQWJzdHJhY3RRdWVyeSB7XG4gIGdldEluc2VydElkRmllbGQoKSB7XG4gICAgcmV0dXJuIFwibGFzdElEXCI7XG4gIH1cblxuICAvKipcbiAgICogcmV3cml0ZSBxdWVyeSB3aXRoIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlhbGVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0KSB7XG4gICAgbGV0IGJpbmRQYXJhbTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICAgIGJpbmRQYXJhbVtgJCR7aSArIDF9YF0gPSB2O1xuICAgICAgfSk7XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaW5kUGFyYW0gPSB7fTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpKSB7XG4gICAgICAgICAgYmluZFBhcmFtW2AkJHtrfWBdID0gdmFsdWVzW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzcWwgPSBBYnN0cmFjdFF1ZXJ5LmZvcm1hdEJpbmRQYXJhbWV0ZXJzKHNxbCwgdmFsdWVzLCBkaWFsZWN0LCB7XG4gICAgICAgIHNraXBWYWx1ZVJlcGxhY2U6IHRydWVcbiAgICAgIH0pWzBdO1xuICAgIH1cbiAgICByZXR1cm4gW3NxbCwgYmluZFBhcmFtXTtcbiAgfVxuXG4gIF9jb2xsZWN0TW9kZWxzKGluY2x1ZGUsIHByZWZpeCkge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuXG4gICAgaWYgKGluY2x1ZGUpIHtcbiAgICAgIGZvciAoY29uc3QgX2luY2x1ZGUgb2YgaW5jbHVkZSkge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBpZiAoIXByZWZpeCkge1xuICAgICAgICAgIGtleSA9IF9pbmNsdWRlLmFzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IGAke3ByZWZpeH0uJHtfaW5jbHVkZS5hc31gO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXldID0gX2luY2x1ZGUubW9kZWw7XG5cbiAgICAgICAgaWYgKF9pbmNsdWRlLmluY2x1ZGUpIHtcbiAgICAgICAgICBfLm1lcmdlKHJldCwgdGhpcy5fY29sbGVjdE1vZGVscyhfaW5jbHVkZS5pbmNsdWRlLCBrZXkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBfaGFuZGxlUXVlcnlSZXNwb25zZShtZXRhRGF0YSwgY29sdW1uVHlwZXMsIGVyciwgcmVzdWx0cykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci5zcWwgPSB0aGlzLnNxbDtcbiAgICAgIHRocm93IHRoaXMuZm9ybWF0RXJyb3IoZXJyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuaW5zdGFuY2U7XG4gICAgLy8gYWRkIHRoZSBpbnNlcnRlZCByb3cgaWQgdG8gdGhlIGluc3RhbmNlXG4gICAgaWYgKHRoaXMuaXNJbnNlcnRRdWVyeShyZXN1bHRzLCBtZXRhRGF0YSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5zZXJ0UXVlcnkocmVzdWx0cywgbWV0YURhdGEpO1xuICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgIC8vIGhhbmRsZSBidWxrQ3JlYXRlIEFJIHByaW1hcnkga2V5XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvKiAgbWV0YURhdGEuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdGF0ZW1lbnRcIiAmJiAqL1xuICAgICAgICAgIHRoaXMubW9kZWwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLmF1dG9JbmNyZW1lbnRBdHRyaWJ1dGUgPT09XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGUgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzdGFydElkID1cbiAgICAgICAgICAgIG1ldGFEYXRhW3RoaXMuZ2V0SW5zZXJ0SWRGaWVsZCgpXSAtIG1ldGFEYXRhLmNoYW5nZXMgKyAxO1xuXG4gICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SWQ7IGkgPCBzdGFydElkICsgbWV0YURhdGEuY2hhbmdlczsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgIFt0aGlzLm1vZGVsLnJhd0F0dHJpYnV0ZXNbdGhpcy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXVxuICAgICAgICAgICAgICAgIC5maWVsZF06IGlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBtZXRhRGF0YVt0aGlzLmdldEluc2VydElkRmllbGQoKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Nob3dUYWJsZXNRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAocm93ID0+IHJvdy5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93Q29uc3RyYWludHNRdWVyeSgpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRzO1xuICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnNxbCkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHJlc3VsdHNbMF0uc3FsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0UXVlcnkoKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYXcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VsZWN0UXVlcnkocmVzdWx0cyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGlzIGEgbWFwIG9mIHByZWZpeCBzdHJpbmdzIHRvIG1vZGVscywgZS5nLiB1c2VyLnByb2plY3RzIC0+IFByb2plY3QgbW9kZWxcbiAgICAgIGNvbnN0IHByZWZpeGVzID0gdGhpcy5fY29sbGVjdE1vZGVscyh0aGlzLm9wdGlvbnMuaW5jbHVkZSk7XG5cbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMocmVzdWx0LCAodmFsdWUsIG5hbWUpID0+IHtcbiAgICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0aW5kID0gbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG5cbiAgICAgICAgICAgIG1vZGVsID0gcHJlZml4ZXNbbmFtZS5zdWJzdHIoMCwgbGFzdGluZCldO1xuXG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIobGFzdGluZCArIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IHRoaXMub3B0aW9ucy5tb2RlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbFxuICAgICAgICAgICAgLmdldFRhYmxlTmFtZSgpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIik7XG4gICAgICAgICAgY29uc3QgdGFibGVUeXBlcyA9IGNvbHVtblR5cGVzW3RhYmxlTmFtZV0gfHwge307XG5cbiAgICAgICAgICBpZiAodGFibGVUeXBlcyAmJiAhKG5hbWUgaW4gdGFibGVUeXBlcykpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb2x1bW4gaXMgYWxpYXNlZFxuICAgICAgICAgICAgXy5mb3JPd24obW9kZWwucmF3QXR0cmlidXRlcywgKGF0dHJpYnV0ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSBrZXkgJiYgYXR0cmlidXRlLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJpYnV0ZS5maWVsZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFibGVUeXBlcywgbmFtZSlcbiAgICAgICAgICAgID8gdGhpcy5hcHBseVBhcnNlcnModGFibGVUeXBlc1tuYW1lXSwgdmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZWxlY3RRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaG93T3JEZXNjcmliZVF1ZXJ5KCkpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgSU5ERVhfTElTVFwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU2hvd0luZGV4ZXNRdWVyeShyZXN1bHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIElOREVYX0lORk9cIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgVEFCTEVfSU5GT1wiKSkge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgc3FsaXRlIHdheSBvZiBnZXR0aW5nIHRoZSBtZXRhZGF0YSBvZiBhIHRhYmxlXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgZm9yIChjb25zdCBfcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAoX3Jlc3VsdC5kZmx0X3ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDb2x1bW4gc2NoZW1hIG9taXRzIGFueSBcIkRFRkFVTFQgLi4uXCJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9yZXN1bHQuZGZsdF92YWx1ZSA9PT0gXCJOVUxMXCIpIHtcbiAgICAgICAgICAgIC8vIENvbHVtbiBzY2hlbWEgaXMgYSBcIkRFRkFVTFQgTlVMTFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVzdWx0LmRmbHRfdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBfcmVzdWx0LnR5cGUsXG4gICAgICAgICAgICBhbGxvd051bGw6IF9yZXN1bHQubm90bnVsbCA9PT0gMCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IF9yZXN1bHQucGsgIT09IDBcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlc3VsdFtfcmVzdWx0Lm5hbWVdLnR5cGUgPT09IFwiVElOWUlOVCgxKVwiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSB7IFwiMFwiOiBmYWxzZSwgXCIxXCI6IHRydWUgfVtcbiAgICAgICAgICAgICAgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0W19yZXN1bHQubmFtZV0uZGVmYXVsdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRbX3Jlc3VsdC5uYW1lXS5kZWZhdWx0VmFsdWUgPSByZXN1bHRbXG4gICAgICAgICAgICAgIF9yZXN1bHQubmFtZVxuICAgICAgICAgICAgXS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvJy9nLCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5cztcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcWwuaW5jbHVkZXMoXCJQUkFHTUEgZm9yZWlnbl9rZXlzXCIpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3FsLmluY2x1ZGVzKFwiUFJBR01BIGZvcmVpZ25fa2V5X2xpc3RcIikpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBbUXVlcnlUeXBlcy5CVUxLVVBEQVRFLCBRdWVyeVR5cGVzLkJVTEtERUxFVEVdLmluY2x1ZGVzKHRoaXMub3B0aW9ucy50eXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuIG1ldGFEYXRhLmNoYW5nZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5VUFNFUlQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PT0gUXVlcnlUeXBlcy5WRVJTSU9OKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1swXS52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuUkFXKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdHMsIG1ldGFEYXRhXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVRdWVyeSgpIHx8IHRoaXMuaXNJbnNlcnRRdWVyeSgpKSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0YURhdGEuY2hhbmdlc107XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gd2Vic3FsIDogcG9seWZpbGwgZm9yZWlnbiBrZXkgaHR0cHM6Ly9qdXN0YXRoZW9yeS5jb20vMjAwNC8xMS9zcWxpdGUtZm9yZWlnbi1rZXktdHJpZ2dlcnMvXG4gIHJ1bihzcWwsIHBhcmFtZXRlcnMpIHtcbiAgICAvLyBleGVjIGRvZXMgbm90IHN1cHBvcnQgYmluZCBwYXJhbWV0ZXJcbiAgICB0aGlzLnNxbCA9IEFic3RyYWN0UXVlcnkuZm9ybWF0QmluZFBhcmFtZXRlcnMoXG4gICAgICBzcWwsXG4gICAgICB0aGlzLm9wdGlvbnMuYmluZCxcbiAgICAgIHRoaXMub3B0aW9ucy5kaWFsZWN0IHx8IFwic3FsaXRlXCIsXG4gICAgICB7IHNraXBVbmVzY2FwZTogZmFsc2UgfVxuICAgIClbMF07XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXREYXRhYmFzZU1ldGhvZCgpO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gdGhpcy5fbG9nUXVlcnkodGhpcy5zcWwsIGRlYnVnLCBwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXM7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29ubiA9IHRoaXMuY29ubmVjdGlvbjtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtblR5cGVzID0ge307XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGV4ZWN1dGVTcWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzcWwuc3RhcnRzV2l0aChcIi0tIFwiKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImV4ZWNcIikge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY29ubi5leGVjKFxuICAgICAgICAgICAgICAgICAgW3sgc3FsOiBzZWxmLnNxbCwgYXJnczogW10gfV0sXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIChleGVjdXRpb25FcnJvciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgcmV0dXJuIFBSQUdNQSBJTkRFWF9MSVNUIGFuZCBJTkRFWF9JTkZPXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGB0aGlzYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW5ub3QgdXNlIGFycm93IGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgYm91bmQgdG8gdGhlIHN0YXRlbWVudFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBgc2VsZmAgaXMgcGFzc2VkIGZyb20gc3FsaXRlLCB3ZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciB0aGlzLlxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW52YWxpZC10aGlzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3NBZmZlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmW3NlbGYuZ2V0SW5zZXJ0SWRGaWVsZCgpXSA9IHJlc3VsdHMuaW5zZXJ0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZbc2VsZi5nZXRJbnNlcnRJZEZpZWxkKCldO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZXMgPSByZXN1bHRzLnJvd3NBZmZlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHF1ZXJ5LmNvbnZlcnRUb0FycmF5KHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Ll9oYW5kbGVRdWVyeVJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihfLCBlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGBzZWxmYCBpcyBwYXNzZWQgZnJvbSBzcWxpdGUsIHdlIGhhdmUgbm8gY29udHJvbCBvdmVyIHRoaXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShxdWVyeS5faGFuZGxlUXVlcnlSZXNwb25zZShzZWxmLCBjb2x1bW5UeXBlcywgZXJyKSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25uLmV4ZWMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoXG4gICAgICAgICAgICAgICAgICBzZWxmLnNxbCxcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBpZiAobWV0aG9kID09PSBcImFsbFwiKSB7XG4gICAgICAgIGxldCB0YWJsZU5hbWVzID0gW107XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnRhYmxlTmFtZXMpIHtcbiAgICAgICAgICB0YWJsZU5hbWVzID0gdGhpcy5vcHRpb25zLnRhYmxlTmFtZXM7XG4gICAgICAgIH0gZWxzZSBpZiAoL0ZST00gYCguKj8pYC9pLmV4ZWModGhpcy5zcWwpKSB7XG4gICAgICAgICAgdGFibGVOYW1lcy5wdXNoKC9GUk9NIGAoLio/KWAvaS5leGVjKHRoaXMuc3FsKVsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIG1ldGFkYXRhIGZvciB0aGUgdGFibGUsIHRoZXJlJ3Mgbm8gbmVlZCB0byBhc2sgZm9yIGl0IGFnYWluXG4gICAgICAgIHRhYmxlTmFtZXMgPSB0YWJsZU5hbWVzLmZpbHRlcihcbiAgICAgICAgICB0YWJsZU5hbWUgPT5cbiAgICAgICAgICAgICEodGFibGVOYW1lIGluIGNvbHVtblR5cGVzKSAmJiB0YWJsZU5hbWUgIT09IFwic3FsaXRlX21hc3RlclwiXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGFibGVOYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZXhlY3V0ZVNxbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNvbm4uZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zdCBzcWxDb21tYW5kcyA9IHRhYmxlTmFtZXMubWFwKHRhYmxlTmFtZSA9PiB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZSA9IHRhYmxlTmFtZS5yZXBsYWNlKC9gL2csIFwiXCIpO1xuICAgICAgICAgICAgICBjb2x1bW5UeXBlc1t0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICAgIHJldHVybiBbYFBSQUdNQSB0YWJsZV9pbmZvKFxcYCR7dGFibGVOYW1lfVxcYClgLCB0YWJsZU5hbWVdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25uLmV4ZWMoXG4gICAgICAgICAgICAgIHNxbENvbW1hbmRzLm1hcChzcWxDbWQgPT4gKHtcbiAgICAgICAgICAgICAgICBzcWw6IHNxbENtZFswXSxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXVxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAoZXJyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3FsQ29tbWFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gc3FsQ29tbWFuZHNbaV1bMV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHNbaV0ucm93cykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV1bcmVzdWx0Lm5hbWVdID0gcmVzdWx0LnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25uLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgdGFibGVOYW1lcy5mb3JFYWNoKCh0YWJsZU5hbWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgdC5leGVjdXRlU3FsKFxuICAgICAgICAgICAgICAgICAgYFNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPScke3RhYmxlTmFtZX0nIGFuZCB0eXBlPSd0YWJsZSdgLFxuICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbihfLCByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGUgPSByZXN1bHQucm93cy5pdGVtKDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRhYmxlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgXCJzcWxcIiBpbiB0YWJsZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0YWJsZS5zcWwgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uVHlwZXNbdGFibGVOYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgIC8vbWF0Y2ggY29sdW1uIG5hbWUgd2l0aCBkYXRhIHR5cGVzXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlLnNxbC5tYXRjaChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8oYFxcdytgKSgoXFxzKFtBLVpdKykoKFxcKFxcZCtcXCkpKT8pKS9nXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBzcGxpdCBjb2x1bW4gbmFtZXMgd2l0aCBkYXRhIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbY29sTmFtZSwgY29sVHlwZV0gPSBjb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIiBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2AvZywgXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblR5cGVzW3RhYmxlTmFtZV1bY29sTmFtZV0gPSBjb2xUeXBlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjb2x1bW5UeXBlcylcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0YWJsZU5hbWVzLmxlbmd0aCAtIDEpIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbihfLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRhYmxlTmFtZXMubGVuZ3RoIC0gMSkgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKGV4ZWN1dGVTcWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4ZWN1dGVTcWwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlQ29uc3RyYWludHNGcm9tU3FsKHNxbCkge1xuICAgIGxldCBjb25zdHJhaW50cyA9IHNxbC5zcGxpdChcIkNPTlNUUkFJTlQgXCIpO1xuICAgIGxldCByZWZlcmVuY2VUYWJsZU5hbWUsIHJlZmVyZW5jZVRhYmxlS2V5cywgdXBkYXRlQWN0aW9uLCBkZWxldGVBY3Rpb247XG4gICAgY29uc3RyYWludHMuc3BsaWNlKDAsIDEpO1xuICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHMubWFwKGNvbnN0cmFpbnRTcWwgPT4ge1xuICAgICAgLy9QYXJzZSBmb3JlaWduIGtleSBzbmlwcGV0c1xuICAgICAgaWYgKGNvbnN0cmFpbnRTcWwuaW5jbHVkZXMoXCJSRUZFUkVOQ0VTXCIpKSB7XG4gICAgICAgIC8vUGFyc2Ugb3V0IHRoZSBjb25zdHJhaW50IGNvbmRpdGlvbiBmb3JtIHNxbCBzdHJpbmdcbiAgICAgICAgdXBkYXRlQWN0aW9uID0gY29uc3RyYWludFNxbC5tYXRjaChcbiAgICAgICAgICAvT04gVVBEQVRFIChDQVNDQURFfFNFVCBOVUxMfFJFU1RSSUNUfE5PIEFDVElPTnxTRVQgREVGQVVMVCl7MX0vXG4gICAgICAgICk7XG4gICAgICAgIGRlbGV0ZUFjdGlvbiA9IGNvbnN0cmFpbnRTcWwubWF0Y2goXG4gICAgICAgICAgL09OIERFTEVURSAoQ0FTQ0FERXxTRVQgTlVMTHxSRVNUUklDVHxOTyBBQ1RJT058U0VUIERFRkFVTFQpezF9L1xuICAgICAgICApO1xuXG4gICAgICAgIGlmICh1cGRhdGVBY3Rpb24pIHtcbiAgICAgICAgICB1cGRhdGVBY3Rpb24gPSB1cGRhdGVBY3Rpb25bMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsZXRlQWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlQWN0aW9uID0gZGVsZXRlQWN0aW9uWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlc1JlZ2V4ID0gL1JFRkVSRU5DRVMuK1xcKCg/OlteKShdK3xcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKlxcKS87XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUNvbmRpdGlvbnMgPSBjb25zdHJhaW50U3FsXG4gICAgICAgICAgLm1hdGNoKHJlZmVyZW5jZXNSZWdleClbMF1cbiAgICAgICAgICAuc3BsaXQoXCIgXCIpO1xuICAgICAgICByZWZlcmVuY2VUYWJsZU5hbWUgPSBVdGlscy5yZW1vdmVUaWNrcyhyZWZlcmVuY2VDb25kaXRpb25zWzFdKTtcbiAgICAgICAgbGV0IGNvbHVtbk5hbWVzID0gcmVmZXJlbmNlQ29uZGl0aW9uc1syXTtcbiAgICAgICAgY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lcy5yZXBsYWNlKC9cXCh8XFwpL2csIFwiXCIpLnNwbGl0KFwiLCBcIik7XG4gICAgICAgIHJlZmVyZW5jZVRhYmxlS2V5cyA9IGNvbHVtbk5hbWVzLm1hcChjb2x1bW4gPT5cbiAgICAgICAgICBVdGlscy5yZW1vdmVUaWNrcyhjb2x1bW4pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRDb25kaXRpb24gPSBjb25zdHJhaW50U3FsLm1hdGNoKFxuICAgICAgICAvXFwoKD86W14pKF0rfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqXFwpL1xuICAgICAgKVswXTtcbiAgICAgIGNvbnN0cmFpbnRTcWwgPSBjb25zdHJhaW50U3FsLnJlcGxhY2UoL1xcKC4rXFwpLywgXCJcIik7XG4gICAgICBjb25zdCBjb25zdHJhaW50ID0gY29uc3RyYWludFNxbC5zcGxpdChcIiBcIik7XG5cbiAgICAgIGlmIChjb25zdHJhaW50WzFdID09PSBcIlBSSU1BUllcIiB8fCBjb25zdHJhaW50WzFdID09PSBcIkZPUkVJR05cIikge1xuICAgICAgICBjb25zdHJhaW50WzFdICs9IFwiIEtFWVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb25zdHJhaW50TmFtZTogVXRpbHMucmVtb3ZlVGlja3MoY29uc3RyYWludFswXSksXG4gICAgICAgIGNvbnN0cmFpbnRUeXBlOiBjb25zdHJhaW50WzFdLFxuICAgICAgICB1cGRhdGVBY3Rpb24sXG4gICAgICAgIGRlbGV0ZUFjdGlvbixcbiAgICAgICAgc3FsOiBzcWwucmVwbGFjZSgvXCIvZywgXCJgXCIpLCAvL1NxbGl0ZSByZXR1cm5zIGRvdWJsZSBxdW90ZXMgZm9yIHRhYmxlIG5hbWVcbiAgICAgICAgY29uc3RyYWludENvbmRpdGlvbixcbiAgICAgICAgcmVmZXJlbmNlVGFibGVOYW1lLFxuICAgICAgICByZWZlcmVuY2VUYWJsZUtleXNcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludHM7XG4gIH1cblxuICBhcHBseVBhcnNlcnModHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZS5pbmNsdWRlcyhcIihcIikpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgbGVuZ3RoIHBhcnRcbiAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cigwLCB0eXBlLmluZGV4T2YoXCIoXCIpKTtcbiAgICB9XG4gICAgdHlwZSA9IHR5cGUucmVwbGFjZShcIlVOU0lHTkVEXCIsIFwiXCIpLnJlcGxhY2UoXCJaRVJPRklMTFwiLCBcIlwiKTtcbiAgICB0eXBlID0gdHlwZS50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBwYXJzZSA9IHBhcnNlclN0b3JlLmdldCh0eXBlKTtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgcGFyc2UpIHtcbiAgICAgIHJldHVybiBwYXJzZSh2YWx1ZSwgeyB0aW1lem9uZTogdGhpcy5zZXF1ZWxpemUub3B0aW9ucy50aW1lem9uZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZm9ybWF0RXJyb3IoZXJyKSB7XG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBcIlNRTElURV9DT05TVFJBSU5UXCI6IHtcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiRk9SRUlHTiBLRVkgY29uc3RyYWludCBmYWlsZWRcIikpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5Gb3JlaWduS2V5Q29uc3RyYWludEVycm9yKHtcbiAgICAgICAgICAgIHBhcmVudDogZXJyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmllbGRzID0gW107XG5cbiAgICAgICAgLy8gU3FsaXRlIHByZSAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IGNvbHVtbnMgeCwgeSBhcmUgbm90IHVuaXF1ZVxuICAgICAgICBsZXQgbWF0Y2ggPSBlcnIubWVzc2FnZS5tYXRjaCgvY29sdW1ucyAoLio/KSBhcmUvKTtcbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmIG1hdGNoLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV0uc3BsaXQoXCIsIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTcWxpdGUgcG9zdCAyLjIgYmVoYXZpb3IgLSBFcnJvcjogU1FMSVRFX0NPTlNUUkFJTlQ6IFVOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogdGFibGUueCwgdGFibGUueVxuICAgICAgICAgIG1hdGNoID0gZXJyLm1lc3NhZ2UubWF0Y2goL1VOSVFVRSBjb25zdHJhaW50IGZhaWxlZDogKC4qKS8pO1xuICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiBtYXRjaC5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgZmllbGRzID0gbWF0Y2hbMV1cbiAgICAgICAgICAgICAgLnNwbGl0KFwiLCBcIilcbiAgICAgICAgICAgICAgLm1hcChjb2x1bW5XaXRoVGFibGUgPT4gY29sdW1uV2l0aFRhYmxlLnNwbGl0KFwiLlwiKVsxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGxldCBtZXNzYWdlID0gXCJWYWxpZGF0aW9uIGVycm9yXCI7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAgIG5ldyBzZXF1ZWxpemVFcnJvcnMuVmFsaWRhdGlvbkVycm9ySXRlbShcbiAgICAgICAgICAgICAgdGhpcy5nZXRVbmlxdWVDb25zdHJhaW50RXJyb3JNZXNzYWdlKGZpZWxkKSxcbiAgICAgICAgICAgICAgXCJ1bmlxdWUgdmlvbGF0aW9uXCIsIC8vIHNlcXVlbGl6ZUVycm9ycy5WYWxpZGF0aW9uRXJyb3JJdGVtLk9yaWdpbnMuREIsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2VbZmllbGRdLFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICBcIm5vdF91bmlxdWVcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgIF8uZm9yT3duKHRoaXMubW9kZWwudW5pcXVlS2V5cywgY29uc3RyYWludCA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pc0VxdWFsKGNvbnN0cmFpbnQuZmllbGRzLCBmaWVsZHMpICYmICEhY29uc3RyYWludC5tc2cpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGNvbnN0cmFpbnQubXNnO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5VbmlxdWVDb25zdHJhaW50RXJyb3Ioe1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgZXJyb3JzLFxuICAgICAgICAgIHBhcmVudDogZXJyLFxuICAgICAgICAgIGZpZWxkc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJTUUxJVEVfQlVTWVwiOlxuICAgICAgICByZXR1cm4gbmV3IHNlcXVlbGl6ZUVycm9ycy5UaW1lb3V0RXJyb3IoZXJyKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBzZXF1ZWxpemVFcnJvcnMuRGF0YWJhc2VFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNob3dJbmRleGVzUXVlcnkoZGF0YSkge1xuICAgIC8vIFNxbGl0ZSByZXR1cm5zIGluZGV4ZXMgc28gdGhlIG9uZSB0aGF0IHdhcyBkZWZpbmVkIGxhc3QgaXMgcmV0dXJuZWQgZmlyc3QuIExldHMgcmV2ZXJzZSB0aGF0IVxuICAgIHJldHVybiBQcm9taXNlLm1hcChkYXRhLnJldmVyc2UoKSwgaXRlbSA9PiB7XG4gICAgICBpdGVtLmZpZWxkcyA9IFtdO1xuICAgICAgaXRlbS5wcmltYXJ5ID0gZmFsc2U7XG4gICAgICBpdGVtLnVuaXF1ZSA9ICEhaXRlbS51bmlxdWU7XG4gICAgICBpdGVtLmNvbnN0cmFpbnROYW1lID0gaXRlbS5uYW1lO1xuICAgICAgcmV0dXJuIHRoaXMucnVuKGBQUkFHTUEgSU5ERVhfSU5GTyhcXGAke2l0ZW0ubmFtZX1cXGApYCkudGhlbihjb2x1bW5zID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICAgIGl0ZW0uZmllbGRzW2NvbHVtbi5zZXFub10gPSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmRlcjogdW5kZWZpbmVkXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhYmFzZU1ldGhvZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNxbC5pbmNsdWRlcyhcIlBSQUdNQVwiKSB8fFxuICAgICAgdGhpcy5zcWwuaW5jbHVkZXMoXCJDT01NSVRcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiUk9MTEJBQ0tcIikgfHxcbiAgICAgIHRoaXMuc3FsLmluY2x1ZGVzKFwiVFJBTlNBQ1RJT05cIilcbiAgICApIHtcbiAgICAgIHJldHVybiBcImV4ZWNcIjsgLy8gTmVlZGVkIHRvIHJ1biBuby1vcCB0cmFuc2FjdGlvblxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmlzSW5zZXJ0UXVlcnkoKSB8fFxuICAgICAgdGhpcy5pc1VwZGF0ZVF1ZXJ5KCkgfHxcbiAgICAgIHRoaXMuaXNCdWxrVXBkYXRlUXVlcnkoKSB8fFxuICAgICAgdGhpcy5zcWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURSBURU1QT1JBUlkgVEFCTEVcIi50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgdGhpcy5vcHRpb25zLnR5cGUgPT09IFF1ZXJ5VHlwZXMuQlVMS0RFTEVURVxuICAgICkge1xuICAgICAgcmV0dXJuIFwicnVuXCI7XG4gICAgfVxuICAgIHJldHVybiBcImFsbFwiO1xuICB9XG4gIGNvbnZlcnRUb0FycmF5KHJlc3VsdHMpIHtcbiAgICBpZiAoIXJlc3VsdHMucm93cykgcmV0dXJuIFtdO1xuICAgIGlmIChcImFycmF5XCIgaW4gcmVzdWx0cyB8fCBcIl9hcnJheVwiIGluIHJlc3VsdHMucm93cylcbiAgICAgIHJldHVybiByZXN1bHRzLmFycmF5IHx8IHJlc3VsdHMucm93cy5fYXJyYXk7XG4gICAgaWYgKCFyZXN1bHRzLnJvd3MuaXRlbSkgcmV0dXJuIHJlc3VsdHMucm93cztcbiAgICBjb25zdCBkYXRhID0gbmV3IEFycmF5KHJlc3VsdHMucm93cy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkYXRhW2ldID0gcmVzdWx0cy5yb3dzLml0ZW0oaSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUXVlcnk7XG5tb2R1bGUuZXhwb3J0cy5RdWVyeSA9IFF1ZXJ5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IFF1ZXJ5O1xuIl19 \ No newline at end of file diff --git a/lib/dialects/sqlite/query.js b/lib/dialects/sqlite/query.js index 6379a3e..2b2fe3f 100644 --- a/lib/dialects/sqlite/query.js +++ b/lib/dialects/sqlite/query.js @@ -297,55 +297,7 @@ class Query extends AbstractQuery { resolve(); } } else { - var successCallback = function(results) { - try { - complete(); - // `self` is passed from sqlite, we have no control over this. - // eslint-disable-next-line no-invalid-this - if (results.rowsAffected) { - try { - self[self.getInsertIdField()] = results.insertId; - } catch (e) { - delete self[self.getInsertIdField()]; - } - } - self.changes = results.rowsAffected; - results = query.convertToArray(results); - resolve( - query._handleQueryResponse( - self, - columnTypes, - undefined, - results - ) - ); - return; - } catch (error) { - debug(error); - reject(error); - } - }; - // eslint-disable-next-line - var errorCallback = function(err) { - try { - complete(); - // `self` is passed from sqlite, we have no control over this. - // eslint-disable-next-line no-invalid-this - resolve(query._handleQueryResponse(self, columnTypes, err)); - } catch (error) { - reject(error); - } - }; - if (typeof conn.exec === "function") { - parameters = parameters || []; - } else parameters = []; - conn.executeSql( - self.sql, - parameters, - successCallback, - errorCallback - ); - /*conn.transaction(function(t) { + conn.transaction(function(t) { // cannot use arrow function here because the function is bound to the statement // eslint-disable-next-line var successCallback = function(_, results) { @@ -396,7 +348,7 @@ class Query extends AbstractQuery { successCallback, errorCallback ); - });*/ + }); } }) ); @@ -445,41 +397,7 @@ class Query extends AbstractQuery { } ); } else { - tableNames.forEach((tableName, index) => { - conn.executeSql( - `SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, - [], - function(result) { - const table = result.rows.item(0); - if ( - typeof table === "object" && - "sql" in table && - typeof table.sql === "string" - ) { - columnTypes[tableName] = {}; - //match column name with data types - const columns = table.sql.match( - /(`\w+`)((\s([A-Z]+)((\(\d+\)))?))/g - ); - // split column names with data type - for (const col of columns) { - const [colName, colType] = col - .trim() - .replace(/\s+/g, " ") - .replace(/`/g, "") - .split(" "); - columnTypes[tableName][colName] = colType.trim(); - } - } - //console.log(columnTypes) - if (index === tableNames.length - 1) resolve(); - }, - function(error) { - if (index === tableNames.length - 1) resolve(); - } - ); - }); - /*conn.transaction(function(t) { + conn.transaction(function(t) { tableNames.forEach((tableName, index) => { t.executeSql( `SELECT sql FROM sqlite_master WHERE tbl_name='${tableName}' and type='table'`, @@ -514,7 +432,7 @@ class Query extends AbstractQuery { } ); }); - });*/ + }); } }).then(executeSql); }