Socket
Socket
Sign inDemoInstall

@atlas.js/atlas

Package Overview
Dependencies
Maintainers
2
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@atlas.js/atlas - npm Package Compare versions

Comparing version 2.0.0 to 2.1.0

17

CHANGELOG.md

@@ -6,2 +6,19 @@ # Change Log

<a name="2.1.0"></a>
# [2.1.0](https://github.com/strvcom/atlas.js/compare/@atlas.js/atlas@2.0.0...@atlas.js/atlas@2.1.0) (2018-07-12)
### Bug Fixes
* **atlas:** clean up observers after component stops ([ae31b16](https://github.com/strvcom/atlas.js/commit/ae31b16))
### Features
* **atlas:** allow components to only access dependencies they require ([653898d](https://github.com/strvcom/atlas.js/commit/653898d)), closes [#54](https://github.com/strvcom/atlas.js/issues/54)
* **atlas:** allow some components to not be exposed (internal) ([cd2c4a7](https://github.com/strvcom/atlas.js/commit/cd2c4a7)), closes [#46](https://github.com/strvcom/atlas.js/issues/46)
<a name="2.0.0"></a>

@@ -8,0 +25,0 @@ # 2.0.0 (2018-05-22)

11

package.json
{
"name": "@atlas.js/atlas",
"description": "The main package containing the core functionality of @atlas.js",
"version": "2.0.0",
"version": "2.1.0",
"author": "Robert Rossmann <robert.rossmann@strv.com>",

@@ -9,9 +9,8 @@ "bugs": "https://github.com/strvcom/atlas.js/issues",

"dependencies": {
"@atlas.js/action": "^1.1.0",
"@atlas.js/errors": "^0.2.0",
"@atlas.js/hook": "^2.0.0",
"@atlas.js/service": "^1.1.0",
"@atlas.js/action": "^1.1.1",
"@atlas.js/errors": "^0.2.1",
"@atlas.js/hook": "^2.0.1",
"@atlas.js/service": "^1.1.1",
"ajv": "^6.5.0",
"ajv-keywords": "^3.2.0",
"local-scope": "^1.2.0",
"lodash": "^4.17.4",

@@ -18,0 +17,0 @@ "pino": "^4.7.0"

@@ -18,4 +18,2 @@ "use strict";

var _create = _interopRequireDefault(require("local-scope/create"));
var _errors = require("@atlas.js/errors");

@@ -27,2 +25,8 @@

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _classPrivateFieldSet(receiver, privateMap, value) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to set private field on non-instance"); } privateMap.set(receiver, value); return value; }
function _classPrivateFieldGet(receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return privateMap.get(receiver); }
class Atlas {

@@ -106,34 +110,47 @@ static init(options = {}) {

get env() {
return _create.default.call(this).env;
return _classPrivateFieldGet(this, _env);
}
get root() {
return _create.default.call(this).root;
return _classPrivateFieldGet(this, _root);
}
get prepared() {
return _create.default.call(this).prepared;
return _classPrivateFieldGet(this, _prepared);
}
get started() {
return _create.default.call(this).started;
return _classPrivateFieldGet(this, _started);
}
constructor(options = {}) {
this.config = {};
this.services = {};
this.actions = {};
this.validator = null;
_create.default.call(this).env = options.env || process.env.NODE_ENV;
_create.default.call(this).root = options.root;
_create.default.call(this).prepared = false;
_create.default.call(this).started = false;
_create.default.call(this).catalog = {
_defineProperty(this, "config", {});
_defineProperty(this, "services", {});
_defineProperty(this, "actions", {});
_env.set(this, null);
_root.set(this, null);
_prepared.set(this, false);
_started.set(this, false);
_catalog.set(this, {
services: new Map(),
hooks: new Map(),
actions: new Map()
};
_create.default.call(this).observers = new Map();
});
if (!this.env) {
_observers.set(this, new Map());
_defineProperty(this, "validator", null);
_classPrivateFieldSet(this, _env, options.env || process.env.NODE_ENV);
_classPrivateFieldSet(this, _root, options.root);
if (!_classPrivateFieldGet(this, _env)) {
throw new _errors.FrameworkError('env not specified and NODE_ENV was not set');

@@ -170,3 +187,3 @@ }

aliases: opts.aliases
}, _create.default.call(this).catalog.services);
}, _classPrivateFieldGet(this, _catalog).services);

@@ -182,3 +199,3 @@ return this;

aliases: opts.aliases
}, _create.default.call(this).catalog.hooks);
}, _classPrivateFieldGet(this, _catalog).hooks);

@@ -194,3 +211,3 @@ return this;

aliases: opts.aliases
}, _create.default.call(this).catalog.actions);
}, _classPrivateFieldGet(this, _catalog).actions);

@@ -201,2 +218,4 @@ return this;

async prepare() {
var _context;
if (this.prepared) {

@@ -206,2 +225,4 @@ return this;

const catalog = _classPrivateFieldGet(this, _catalog);
const {

@@ -211,6 +232,4 @@ services,

hooks
} = _create.default.call(this).catalog;
} = catalog;
const observers = _create.default.call(this).observers;
for (const [alias, container] of hooks) {

@@ -222,15 +241,28 @@ if (!container.Component.observes) {

if (container.Component.observes === 'atlas') {
observers.set(alias, container);
_classPrivateFieldGet(this, _observers).set(alias, container);
}
}
await Promise.all(Array.from(hooks).map(([, container]) => container.prepare()));
await Promise.all(Array.from(actions).map(async ([alias, container]) => _private.expose.call(this, 'actions', alias, (await container.prepare({
hooks
})))));
await Promise.all(Array.from(services).map(async ([alias, container]) => _private.expose.call(this, 'services', alias, (await container.prepare({
hooks
})))));
_create.default.call(this).prepared = true;
await _private.dispatch.call(observers, 'afterPrepare', this);
void (await Promise.all([...Array.from(hooks).map(async ([, container]) => ({
expose: false,
value: await container.prepare({
catalog
})
})), ...Array.from(services).map(async ([alias, container]) => ({
expose: container.Component.internal ? false : 'services',
value: await container.prepare({
catalog
}),
alias
})), ...Array.from(actions).map(async ([alias, container]) => ({
expose: container.Component.internal ? false : 'actions',
value: await container.prepare({
catalog
}),
alias
}))])).filter(result => Boolean(result.expose)).forEach(result => _private.expose.call(this, result.expose, result.alias, result.value));
_classPrivateFieldSet(this, _prepared, true);
await (_context = _classPrivateFieldGet(this, _observers), _private.dispatch).call(_context, 'afterPrepare', this);
return this;

@@ -240,2 +272,4 @@ }

async start() {
var _context2;
const {

@@ -245,8 +279,6 @@ actions,

hooks
} = _create.default.call(this).catalog;
} = _classPrivateFieldGet(this, _catalog);
const observers = _create.default.call(this).observers;
await this.prepare();
await _private.dispatch.call(observers, 'beforeStart', this);
await (_context2 = _classPrivateFieldGet(this, _observers), _private.dispatch).call(_context2, 'beforeStart', this);
await Promise.all([...Array.from(hooks), ...Array.from(actions)].map(([, container]) => container.start({

@@ -256,6 +288,5 @@ hooks

for (const [alias, container] of services) {
for (const [, container] of services) {
try {
await container.start({
instance: this.services[alias],
hooks

@@ -271,4 +302,5 @@ });

_create.default.call(this).started = true;
await _private.dispatch.call(observers, 'afterStart', this);
_classPrivateFieldSet(this, _started, true);
await (_context2 = _classPrivateFieldGet(this, _observers), _private.dispatch).call(_context2, 'afterStart', this);
this.log.info('atlas:ready');

@@ -279,2 +311,4 @@ return this;

async stop() {
var _context3;
const {

@@ -284,7 +318,5 @@ services,

hooks
} = _create.default.call(this).catalog;
} = _classPrivateFieldGet(this, _catalog);
const observers = _create.default.call(this).observers;
await _private.dispatch.call(observers, 'beforeStop', this);
await (_context3 = _classPrivateFieldGet(this, _observers), _private.dispatch).call(_context3, 'beforeStop', this);
await Promise.all([...Array.from(hooks), ...Array.from(actions)].map(([, container]) => container.stop()));

@@ -295,6 +327,4 @@ let error;

try {
const instance = this.services[alias];
delete this.services[alias];
await container.stop({
instance,
hooks

@@ -304,2 +334,3 @@ });

error = err;
continue;
}

@@ -312,4 +343,6 @@ }

_create.default.call(this).started = false;
_create.default.call(this).prepared = false;
_classPrivateFieldSet(this, _started, false);
_classPrivateFieldSet(this, _prepared, false);
await _private.dispatch.call(hooks, 'afterStop', null);

@@ -327,3 +360,3 @@ this.log.info('atlas:stopped');

Atlas.defaults = {
_defineProperty(Atlas, "defaults", {
log: {

@@ -343,5 +376,18 @@ name: _path.default.basename(process.cwd()),

}
};
});
var _env = new WeakMap();
var _root = new WeakMap();
var _prepared = new WeakMap();
var _started = new WeakMap();
var _catalog = new WeakMap();
var _observers = new WeakMap();
var _default = Atlas;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0bGFzLm1qcyJdLCJuYW1lcyI6WyJBdGxhcyIsImluaXQiLCJvcHRpb25zIiwiY29uZmlnIiwiaG9va3MiLCJzZXJ2aWNlcyIsImFjdGlvbnMiLCJhbGlhc2VzIiwiYXRsYXMiLCJlbnYiLCJyb290IiwidHlwZXMiLCJwYXRocyIsIm1vZHVsZXMiLCJ0eXBlIiwicGF0aCIsInJlc29sdmUiLCJyZXF1aXJlIiwib3B0aW9uYWwiLCJsb2ciLCJkZWJ1ZyIsImJvb3RzdHJhcCIsImNvbXBvbmVudHMiLCJPYmplY3QiLCJrZXlzIiwiYWxpYXMiLCJIb29rIiwiZW50cmllcyIsImhvb2siLCJTZXJ2aWNlIiwic2VydmljZSIsIkFjdGlvbiIsImFjdGlvbiIsImhpZGRlbiIsInByZXBhcmVkIiwic3RhcnRlZCIsImNvbnN0cnVjdG9yIiwidmFsaWRhdG9yIiwicHJvY2VzcyIsIk5PREVfRU5WIiwiY2F0YWxvZyIsIk1hcCIsIm9ic2VydmVycyIsIkZyYW1ld29ya0Vycm9yIiwibWtjb25maWciLCJkZWZhdWx0cyIsIm1rbG9nIiwiQWp2Iiwia2V5d29yZHMiLCJsb2NhdGlvbiIsImFic29sdXRlIiwibG9hZCIsIm9wdHJlcXVpcmUiLCJjb250ZW50cyIsIm5vcm1hbGlzZSIsImRlZmF1bHQiLCJDb21wb25lbnQiLCJvcHRzIiwiY29tcG9uZW50IiwicHJlcGFyZSIsImNvbnRhaW5lciIsIm9ic2VydmVzIiwic2V0IiwiUHJvbWlzZSIsImFsbCIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImV4cG9zZSIsImRpc3BhdGNoIiwic3RhcnQiLCJpbnN0YW5jZSIsImVyciIsInN0b3AiLCJjYXRjaCIsInN0b3BFcnIiLCJmYXRhbCIsImluZm8iLCJlcnJvciIsInJldmVyc2UiLCJuYW1lIiwiYmFzZW5hbWUiLCJjd2QiLCJsZXZlbCIsInNlcmlhbGl6ZXJzIiwicGlubyIsInN0ZFNlcmlhbGl6ZXJzIiwicmVxIiwicmVzIiwiYWxsRXJyb3JzIiwidXNlRGVmYXVsdHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7OztBQWNBLE1BQU1BLEtBQU4sQ0FBWTtBQXVDVixTQUFPQyxJQUFQLENBQVlDLFVBQVUsRUFBdEIsRUFBMEI7QUFDeEIsOEJBQVNBLE9BQVQsRUFBa0I7QUFDaEJDLGNBQVEsUUFEUTtBQUVoQkMsYUFBTyxPQUZTO0FBR2hCQyxnQkFBVSxVQUhNO0FBSWhCQyxlQUFTLFNBSk87QUFLaEJDLGVBQVM7QUFMTyxLQUFsQjtBQVFBLFVBQU1DLFFBQVEsSUFBSSxJQUFKLENBQVM7QUFDckJDLFdBQUtQLFFBQVFPLEdBRFE7QUFFckJDLFlBQU1SLFFBQVFRLElBRk87QUFHckJQLGNBQVFELFFBQVFDO0FBSEssS0FBVCxDQUFkO0FBS0EsVUFBTVEsUUFBUSxDQUNaLE9BRFksRUFFWixVQUZZLEVBR1osU0FIWSxFQUlaLFNBSlksQ0FBZDtBQU1BLFVBQU1DLFFBQVEsRUFBZDtBQUNBLFVBQU1DLFVBQVUsRUFBaEI7O0FBRUEsU0FBSyxNQUFNQyxJQUFYLElBQW1CSCxLQUFuQixFQUEwQjtBQUN4QkMsWUFBTUUsSUFBTixJQUFjQyxjQUFLQyxPQUFMLENBQWFkLFFBQVFRLElBQXJCLEVBQTJCUixRQUFRWSxJQUFSLENBQTNCLENBQWQ7QUFDQUQsY0FBUUMsSUFBUixJQUFnQk4sTUFBTVMsT0FBTixDQUFjZixRQUFRWSxJQUFSLENBQWQsRUFBNkI7QUFBRUksa0JBQVU7QUFBWixPQUE3QixDQUFoQjtBQUNEOztBQUVEVixVQUFNVyxHQUFOLENBQVVDLEtBQVYsQ0FBZ0I7QUFBRVI7QUFBRixLQUFoQixFQUEyQixZQUEzQjtBQUVBLFdBQU8sS0FBS1MsU0FBTCxDQUFlYixLQUFmLEVBQXNCSyxPQUF0QixDQUFQO0FBQ0Q7O0FBcUJELFNBQU9RLFNBQVAsQ0FBaUJiLEtBQWpCLEVBQXdCSyxVQUFVLEVBQWxDLEVBQXNDO0FBQ3BDLDhCQUFTQSxPQUFULEVBQWtCO0FBR2hCVixjQUFRLFFBSFE7QUFLaEJHLGVBQVMsRUFMTztBQU1oQkYsYUFBTyxFQU5TO0FBT2hCQyxnQkFBVSxFQVBNO0FBUWhCRSxlQUFTO0FBQ1BELGlCQUFTLEVBREY7QUFFUEYsZUFBTyxFQUZBO0FBR1BDLGtCQUFVO0FBSEg7QUFSTyxLQUFsQjtBQWVBRyxVQUFNVyxHQUFOLENBQVVDLEtBQVYsQ0FBZ0I7QUFDZFgsV0FBS0QsTUFBTUMsR0FERztBQUVkQyxZQUFNRixNQUFNRSxJQUZFO0FBR2RZLGtCQUFZO0FBQ1ZoQixpQkFBU2lCLE9BQU9DLElBQVAsQ0FBWVgsUUFBUVAsT0FBcEIsQ0FEQztBQUVWRixlQUFPbUIsT0FBT0MsSUFBUCxDQUFZWCxRQUFRVCxLQUFwQixDQUZHO0FBR1ZDLGtCQUFVa0IsT0FBT0MsSUFBUCxDQUFZWCxRQUFRUixRQUFwQjtBQUhBO0FBSEUsS0FBaEIsRUFRRyxpQkFSSDs7QUFXQSxTQUFLLE1BQU0sQ0FBQ29CLEtBQUQsRUFBUUMsSUFBUixDQUFYLElBQTRCSCxPQUFPSSxPQUFQLENBQWVkLFFBQVFULEtBQXZCLENBQTVCLEVBQTJEO0FBQ3pELFlBQU1HLFVBQVVNLFFBQVFOLE9BQVIsQ0FBZ0JILEtBQWhCLENBQXNCcUIsS0FBdEIsQ0FBaEI7QUFDQWpCLFlBQU1vQixJQUFOLENBQVdILEtBQVgsRUFBa0JDLElBQWxCLEVBQXdCO0FBQUVuQjtBQUFGLE9BQXhCO0FBQ0Q7O0FBR0QsU0FBSyxNQUFNLENBQUNrQixLQUFELEVBQVFJLE9BQVIsQ0FBWCxJQUErQk4sT0FBT0ksT0FBUCxDQUFlZCxRQUFRUixRQUF2QixDQUEvQixFQUFpRTtBQUMvRCxZQUFNRSxVQUFVTSxRQUFRTixPQUFSLENBQWdCRixRQUFoQixDQUF5Qm9CLEtBQXpCLENBQWhCO0FBQ0FqQixZQUFNc0IsT0FBTixDQUFjTCxLQUFkLEVBQXFCSSxPQUFyQixFQUE4QjtBQUFFdEI7QUFBRixPQUE5QjtBQUNEOztBQUdELFNBQUssTUFBTSxDQUFDa0IsS0FBRCxFQUFRTSxNQUFSLENBQVgsSUFBOEJSLE9BQU9JLE9BQVAsQ0FBZWQsUUFBUVAsT0FBdkIsQ0FBOUIsRUFBK0Q7QUFDN0QsWUFBTUMsVUFBVU0sUUFBUU4sT0FBUixDQUFnQkQsT0FBaEIsQ0FBd0JtQixLQUF4QixDQUFoQjtBQUNBakIsWUFBTXdCLE1BQU4sQ0FBYVAsS0FBYixFQUFvQk0sTUFBcEIsRUFBNEI7QUFBRXhCO0FBQUYsT0FBNUI7QUFDRDs7QUFFRCxXQUFPQyxLQUFQO0FBQ0Q7O0FBV0QsTUFBSUMsR0FBSixHQUFVO0FBQ1IsV0FBYXdCLGVBQU4sWUFBZXhCLEdBQXRCO0FBQ0Q7O0FBVUQsTUFBSUMsSUFBSixHQUFXO0FBQ1QsV0FBYXVCLGVBQU4sWUFBZXZCLElBQXRCO0FBQ0Q7O0FBUUQsTUFBSXdCLFFBQUosR0FBZTtBQUNiLFdBQWFELGVBQU4sWUFBZUMsUUFBdEI7QUFDRDs7QUFRRCxNQUFJQyxPQUFKLEdBQWM7QUFDWixXQUFhRixlQUFOLFlBQWVFLE9BQXRCO0FBQ0Q7O0FBeUNEQyxjQUFZbEMsVUFBVSxFQUF0QixFQUEwQjtBQUFBLFNBbEMxQkMsTUFrQzBCLEdBbENqQixFQWtDaUI7QUFBQSxTQTNCMUJFLFFBMkIwQixHQTNCZixFQTJCZTtBQUFBLFNBcEIxQkMsT0FvQjBCLEdBcEJoQixFQW9CZ0I7QUFBQSxTQWQxQitCLFNBYzBCLEdBZGQsSUFjYztBQUdsQkosbUJBQU4sWUFBZXhCLEdBQWYsR0FBcUJQLFFBQVFPLEdBQVIsSUFBZTZCLFFBQVE3QixHQUFSLENBQVk4QixRQUFoRDtBQUNNTixtQkFBTixZQUFldkIsSUFBZixHQUFzQlIsUUFBUVEsSUFBOUI7QUFDTXVCLG1CQUFOLFlBQWVDLFFBQWYsR0FBMEIsS0FBMUI7QUFDTUQsbUJBQU4sWUFBZUUsT0FBZixHQUF5QixLQUF6QjtBQUNNRixtQkFBTixZQUFlTyxPQUFmLEdBQXlCO0FBQ3ZCbkMsZ0JBQVUsSUFBSW9DLEdBQUosRUFEYTtBQUV2QnJDLGFBQU8sSUFBSXFDLEdBQUosRUFGZ0I7QUFHdkJuQyxlQUFTLElBQUltQyxHQUFKO0FBSGMsS0FBekI7QUFLTVIsbUJBQU4sWUFBZVMsU0FBZixHQUEyQixJQUFJRCxHQUFKLEVBQTNCOztBQUdBLFFBQUksQ0FBQyxLQUFLaEMsR0FBVixFQUFlO0FBQ2IsWUFBTSxJQUFJa0Msc0JBQUosQ0FBbUIsNENBQW5CLENBQU47QUFDRDs7QUFFRCxRQUFJLE9BQU8sS0FBS2pDLElBQVosS0FBcUIsUUFBekIsRUFBbUM7QUFDakMsWUFBTSxJQUFJaUMsc0JBQUosQ0FBb0IsMENBQXlDekMsUUFBUVEsSUFBSyxFQUExRSxDQUFOO0FBQ0Q7O0FBRUQsU0FBS1AsTUFBTCxHQUFvQnlDLGlCQUFOLFlBQWUxQyxRQUFRQyxNQUF2QixFQUErQjtBQUMzQ0ssYUFBT1IsTUFBTTZDLFFBRDhCO0FBRTNDeEMsZ0JBQVUsRUFGaUM7QUFHM0NELGFBQU8sRUFIb0M7QUFJM0NFLGVBQVM7QUFKa0MsS0FBL0IsQ0FBZDtBQU9BLFNBQUthLEdBQUwsR0FBaUIyQixjQUFOLFlBQVksS0FBSzNDLE1BQUwsQ0FBWUssS0FBWixDQUFrQlcsR0FBOUIsQ0FBWDtBQUVBLFNBQUtrQixTQUFMLEdBQWlCLElBQUlVLFlBQUosQ0FBUSxLQUFLNUMsTUFBTCxDQUFZSyxLQUFaLENBQWtCNkIsU0FBMUIsQ0FBakI7QUFDQSw4QkFBWSxLQUFLQSxTQUFqQixFQUE0QixLQUFLbEMsTUFBTCxDQUFZSyxLQUFaLENBQWtCNkIsU0FBbEIsQ0FBNEJXLFFBQXhEO0FBQ0Q7O0FBZUQvQixVQUFRZ0MsUUFBUixFQUFrQi9DLFVBQVUsRUFBNUIsRUFBZ0M7QUFDOUIrQyxlQUFXL0MsUUFBUWdELFFBQVIsR0FDUEQsUUFETyxHQUVQbEMsY0FBS0MsT0FBTCxDQUFhLEtBQUtOLElBQWxCLEVBQXdCdUMsUUFBeEIsQ0FGSjtBQUlBLFVBQU1FLE9BQU9qRCxRQUFRZ0IsUUFBUixHQUNUa0MsbUJBRFMsR0FFVG5DLE9BRko7QUFHQSxVQUFNb0MsV0FBV0YsS0FBS0YsUUFBTCxDQUFqQjtBQUVBLFdBQU8vQyxRQUFRb0QsU0FBUixJQUFxQiwyQkFBY0QsU0FBU0UsT0FBdkIsQ0FBckIsR0FDSEYsU0FBU0UsT0FETixHQUVIRixRQUZKO0FBR0Q7O0FBYUR2QixVQUFRTCxLQUFSLEVBQWUrQixTQUFmLEVBQTBCQyxPQUFPLEVBQWpDLEVBQXFDO0FBQzdCQyxzQkFBTixZQUFnQjtBQUNkNUMsWUFBTSxTQURRO0FBRWRXLFdBRmM7QUFHZCtCLGVBSGM7QUFJZGpELGVBQVNrRCxLQUFLbEQ7QUFKQSxLQUFoQixFQUtTMEIsZUFBTixZQUFlTyxPQUFmLENBQXVCbkMsUUFMMUI7O0FBT0EsV0FBTyxJQUFQO0FBQ0Q7O0FBWUR1QixPQUFLSCxLQUFMLEVBQVkrQixTQUFaLEVBQXVCQyxPQUFPLEVBQTlCLEVBQWtDO0FBQzFCQyxzQkFBTixZQUFnQjtBQUNkNUMsWUFBTSxNQURRO0FBRWRXLFdBRmM7QUFHZCtCLGVBSGM7QUFJZGpELGVBQVNrRCxLQUFLbEQ7QUFKQSxLQUFoQixFQUtTMEIsZUFBTixZQUFlTyxPQUFmLENBQXVCcEMsS0FMMUI7O0FBT0EsV0FBTyxJQUFQO0FBQ0Q7O0FBYUQ0QixTQUFPUCxLQUFQLEVBQWMrQixTQUFkLEVBQXlCQyxPQUFPLEVBQWhDLEVBQW9DO0FBQzVCQyxzQkFBTixZQUFnQjtBQUNkNUMsWUFBTSxRQURRO0FBRWRXLFdBRmM7QUFHZCtCLGVBSGM7QUFJZGpELGVBQVNrRCxLQUFLbEQ7QUFKQSxLQUFoQixFQUtTMEIsZUFBTixZQUFlTyxPQUFmLENBQXVCbEMsT0FMMUI7O0FBT0EsV0FBTyxJQUFQO0FBQ0Q7O0FBV0QsUUFBTXFELE9BQU4sR0FBZ0I7QUFDZCxRQUFJLEtBQUt6QixRQUFULEVBQW1CO0FBQ2pCLGFBQU8sSUFBUDtBQUNEOztBQUVELFVBQU07QUFBRTdCLGNBQUY7QUFBWUMsYUFBWjtBQUFxQkY7QUFBckIsUUFBcUM2QixlQUFOLFlBQWVPLE9BQXBEOztBQUNBLFVBQU1FLFlBQWtCVCxlQUFOLFlBQWVTLFNBQWpDOztBQUVBLFNBQUssTUFBTSxDQUFDakIsS0FBRCxFQUFRbUMsU0FBUixDQUFYLElBQWlDeEQsS0FBakMsRUFBd0M7QUFDdEMsVUFBSSxDQUFDd0QsVUFBVUosU0FBVixDQUFvQkssUUFBekIsRUFBbUM7QUFDakMsY0FBTSxJQUFJbEIsc0JBQUosQ0FBb0IsUUFBT2xCLEtBQU0sMkNBQWpDLENBQU47QUFDRDs7QUFHRCxVQUFJbUMsVUFBVUosU0FBVixDQUFvQkssUUFBcEIsS0FBaUMsT0FBckMsRUFBOEM7QUFDNUNuQixrQkFBVW9CLEdBQVYsQ0FBY3JDLEtBQWQsRUFBcUJtQyxTQUFyQjtBQUNEO0FBQ0Y7O0FBR0QsVUFBTUcsUUFBUUMsR0FBUixDQUFZQyxNQUFNQyxJQUFOLENBQVc5RCxLQUFYLEVBQWtCK0QsR0FBbEIsQ0FBc0IsQ0FBQyxHQUFHUCxTQUFILENBQUQsS0FDdENBLFVBQVVELE9BQVYsRUFEZ0IsQ0FBWixDQUFOO0FBSUEsVUFBTUksUUFBUUMsR0FBUixDQUFZQyxNQUFNQyxJQUFOLENBQVc1RCxPQUFYLEVBQW9CNkQsR0FBcEIsQ0FBd0IsT0FBTyxDQUFDMUMsS0FBRCxFQUFRbUMsU0FBUixDQUFQLEtBQ2xDUSxlQUFOLFlBQWEsU0FBYixFQUF3QjNDLEtBQXhCLEdBQStCLE1BQU1tQyxVQUFVRCxPQUFWLENBQWtCO0FBQUV2RDtBQUFGLEtBQWxCLENBQXJDLEVBRGdCLENBQVosQ0FBTjtBQUlBLFVBQU0yRCxRQUFRQyxHQUFSLENBQVlDLE1BQU1DLElBQU4sQ0FBVzdELFFBQVgsRUFBcUI4RCxHQUFyQixDQUF5QixPQUFPLENBQUMxQyxLQUFELEVBQVFtQyxTQUFSLENBQVAsS0FDbkNRLGVBQU4sWUFBYSxVQUFiLEVBQXlCM0MsS0FBekIsR0FBZ0MsTUFBTW1DLFVBQVVELE9BQVYsQ0FBa0I7QUFBRXZEO0FBQUYsS0FBbEIsQ0FBdEMsRUFEZ0IsQ0FBWixDQUFOO0FBR002QixtQkFBTixZQUFlQyxRQUFmLEdBQTBCLElBQTFCO0FBQ0EsVUFBaUJtQyxpQkFBWCxpQkFBb0IsY0FBcEIsRUFBb0MsSUFBcEMsQ0FBTjtBQUVBLFdBQU8sSUFBUDtBQUNEOztBQU9ELFFBQU1DLEtBQU4sR0FBYztBQUNaLFVBQU07QUFBRWhFLGFBQUY7QUFBV0QsY0FBWDtBQUFxQkQ7QUFBckIsUUFBcUM2QixlQUFOLFlBQWVPLE9BQXBEOztBQUNBLFVBQU1FLFlBQWtCVCxlQUFOLFlBQWVTLFNBQWpDOztBQUVBLFVBQU0sS0FBS2lCLE9BQUwsRUFBTjtBQUNBLFVBQWlCVSxpQkFBWCxpQkFBb0IsYUFBcEIsRUFBbUMsSUFBbkMsQ0FBTjtBQUVBLFVBQU1OLFFBQVFDLEdBQVIsQ0FBWSxDQUNoQixHQUFHQyxNQUFNQyxJQUFOLENBQVc5RCxLQUFYLENBRGEsRUFFaEIsR0FBRzZELE1BQU1DLElBQU4sQ0FBVzVELE9BQVgsQ0FGYSxFQUdoQjZELEdBSGdCLENBR1osQ0FBQyxHQUFHUCxTQUFILENBQUQsS0FBbUJBLFVBQVVVLEtBQVYsQ0FBZ0I7QUFBRWxFO0FBQUYsS0FBaEIsQ0FIUCxDQUFaLENBQU47O0FBU0EsU0FBSyxNQUFNLENBQUNxQixLQUFELEVBQVFtQyxTQUFSLENBQVgsSUFBaUN2RCxRQUFqQyxFQUEyQztBQUN6QyxVQUFJO0FBQ0YsY0FBTXVELFVBQVVVLEtBQVYsQ0FBZ0I7QUFBRUMsb0JBQVUsS0FBS2xFLFFBQUwsQ0FBY29CLEtBQWQsQ0FBWjtBQUFrQ3JCO0FBQWxDLFNBQWhCLENBQU47QUFDRCxPQUZELENBRUUsT0FBT29FLEdBQVAsRUFBWTtBQUVaLGNBQU0sS0FBS0MsSUFBTCxHQUVIQyxLQUZHLENBRUdDLFdBQVcsS0FBSyxLQUFLeEQsR0FBTCxDQUFTeUQsS0FBVCxDQUFlO0FBQUVKLGVBQUtHO0FBQVAsU0FBZixFQUFpQyw4QkFBakMsQ0FGbkIsQ0FBTjtBQUtBLGNBQU1ILEdBQU47QUFDRDtBQUNGOztBQUVLdkMsbUJBQU4sWUFBZUUsT0FBZixHQUF5QixJQUF6QjtBQUNBLFVBQWlCa0MsaUJBQVgsaUJBQW9CLFlBQXBCLEVBQWtDLElBQWxDLENBQU47QUFDQSxTQUFLbEQsR0FBTCxDQUFTMEQsSUFBVCxDQUFjLGFBQWQ7QUFFQSxXQUFPLElBQVA7QUFDRDs7QUFVRCxRQUFNSixJQUFOLEdBQWE7QUFDWCxVQUFNO0FBQUVwRSxjQUFGO0FBQVlDLGFBQVo7QUFBcUJGO0FBQXJCLFFBQXFDNkIsZUFBTixZQUFlTyxPQUFwRDs7QUFDQSxVQUFNRSxZQUFrQlQsZUFBTixZQUFlUyxTQUFqQzs7QUFFQSxVQUFpQjJCLGlCQUFYLGlCQUFvQixZQUFwQixFQUFrQyxJQUFsQyxDQUFOO0FBRUEsVUFBTU4sUUFBUUMsR0FBUixDQUFZLENBQ2hCLEdBQUdDLE1BQU1DLElBQU4sQ0FBVzlELEtBQVgsQ0FEYSxFQUVoQixHQUFHNkQsTUFBTUMsSUFBTixDQUFXNUQsT0FBWCxDQUZhLEVBR2hCNkQsR0FIZ0IsQ0FHWixDQUFDLEdBQUdQLFNBQUgsQ0FBRCxLQUFtQkEsVUFBVWEsSUFBVixFQUhQLENBQVosQ0FBTjtBQUtBLFFBQUlLLEtBQUo7O0FBSUEsU0FBSyxNQUFNLENBQUNyRCxLQUFELEVBQVFtQyxTQUFSLENBQVgsSUFBaUNLLE1BQU1DLElBQU4sQ0FBVzdELFFBQVgsRUFBcUIwRSxPQUFyQixFQUFqQyxFQUFpRTtBQUMvRCxVQUFJO0FBQ0YsY0FBTVIsV0FBVyxLQUFLbEUsUUFBTCxDQUFjb0IsS0FBZCxDQUFqQjtBQUNBLGVBQU8sS0FBS3BCLFFBQUwsQ0FBY29CLEtBQWQsQ0FBUDtBQUNBLGNBQU1tQyxVQUFVYSxJQUFWLENBQWU7QUFBRUYsa0JBQUY7QUFBWW5FO0FBQVosU0FBZixDQUFOO0FBQ0QsT0FKRCxDQUlFLE9BQU9vRSxHQUFQLEVBQVk7QUFDWk0sZ0JBQVFOLEdBQVI7QUFHRDtBQUNGOztBQUdELFNBQUssTUFBTSxDQUFDL0MsS0FBRCxDQUFYLElBQXNCbkIsT0FBdEIsRUFBK0I7QUFDN0IsYUFBTyxLQUFLQSxPQUFMLENBQWFtQixLQUFiLENBQVA7QUFDRDs7QUFFS1EsbUJBQU4sWUFBZUUsT0FBZixHQUF5QixLQUF6QjtBQUNNRixtQkFBTixZQUFlQyxRQUFmLEdBQTBCLEtBQTFCO0FBRUEsVUFBYW1DLGlCQUFQLGFBQWdCLFdBQWhCLEVBQTZCLElBQTdCLENBQU47QUFDQSxTQUFLbEQsR0FBTCxDQUFTMEQsSUFBVCxDQUFjLGVBQWQ7O0FBR0EsUUFBSUMsS0FBSixFQUFXO0FBQ1QsWUFBTUEsS0FBTjtBQUNEOztBQUVELFdBQU8sSUFBUDtBQUNEOztBQTNlUzs7QUFBTjlFLEssQ0FDRzZDLFEsR0FBVztBQUNoQjFCLE9BQUs7QUFDSDZELFVBQU1qRSxjQUFLa0UsUUFBTCxDQUFjM0MsUUFBUTRDLEdBQVIsRUFBZCxDQURIO0FBRUhDLFdBQU8sTUFGSjtBQUdIQyxpQkFBYTtBQUNYWixXQUFLYSxjQUFLQyxjQUFMLENBQW9CZCxHQURkO0FBRVhlLFdBQUtGLGNBQUtDLGNBQUwsQ0FBb0JDLEdBRmQ7QUFHWEMsV0FBS0gsY0FBS0MsY0FBTCxDQUFvQkU7QUFIZDtBQUhWLEdBRFc7QUFXaEJuRCxhQUFXO0FBQ1RvRCxlQUFXLElBREY7QUFFVEMsaUJBQWEsSUFGSjtBQUdUMUMsY0FBVSxDQUNSLFFBRFE7QUFIRDtBQVhLLEM7ZUE2ZUxoRCxLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV2UgdXNlIGZvci1hd2FpdCBwYXR0ZXJuIHF1aXRlIGV4dGVuc2l2ZWx5IGhlcmUgZm9yIGxlZ2l0aW1hdGUgcHVycG9zZXNcbi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBBanYgZnJvbSAnYWp2J1xuaW1wb3J0IGFqdktleXdvcmRzIGZyb20gJ2Fqdi1rZXl3b3JkcydcbmltcG9ydCBwaW5vIGZyb20gJ3Bpbm8nXG5pbXBvcnQge1xuICBkZWZhdWx0c0RlZXAgYXMgZGVmYXVsdHMsXG4gIGlzUGxhaW5PYmplY3QsXG59IGZyb20gJ2xvZGFzaCdcbmltcG9ydCBoaWRkZW4gZnJvbSAnbG9jYWwtc2NvcGUvY3JlYXRlJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuaW1wb3J0IHtcbiAgZXhwb3NlLFxuICBkaXNwYXRjaCxcbiAgY29tcG9uZW50LFxuICBta2NvbmZpZyxcbiAgbWtsb2csXG4gIG9wdHJlcXVpcmUsXG59IGZyb20gJy4vcHJpdmF0ZSdcblxuLyoqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgeW91ciBhcHBsaWNhdGlvbiBhbmQgYWdncmVnYXRlcyBhbGwgY29tcG9uZW50cyB0b2dldGhlclxuICpcbiAqIFlvdSBzaG91bGQgZ2VuZXJhbGx5IGNyZWF0ZSBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGluIGEgcHJvZ3JhbS5cbiAqL1xuY2xhc3MgQXRsYXMge1xuICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgbG9nOiB7XG4gICAgICBuYW1lOiBwYXRoLmJhc2VuYW1lKHByb2Nlc3MuY3dkKCkpLFxuICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgIHNlcmlhbGl6ZXJzOiB7XG4gICAgICAgIGVycjogcGluby5zdGRTZXJpYWxpemVycy5lcnIsXG4gICAgICAgIHJlcTogcGluby5zdGRTZXJpYWxpemVycy5yZXEsXG4gICAgICAgIHJlczogcGluby5zdGRTZXJpYWxpemVycy5yZXMsXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICB2YWxpZGF0b3I6IHtcbiAgICAgIGFsbEVycm9yczogdHJ1ZSxcbiAgICAgIHVzZURlZmF1bHRzOiB0cnVlLFxuICAgICAga2V5d29yZHM6IFtcbiAgICAgICAgJ3R5cGVvZicsXG4gICAgICBdLFxuICAgIH0sXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGlzZSBhIGJyYW5kLW5ldyBhdGxhcyBpbnN0YW5jZSBmcm9tIHRoZSBnaXZlbiBtb2R1bGUgbG9jYXRpb25zXG4gICAqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBxdWlja2x5IGNvbmZpZ3VyZSBBdGxhcyBpbnN0YW5jZSBieSBzaW1wbHkgdGVsbGluZyBpdCB3aGVyZSB5b3VyIGNvbXBvbmVudHNcbiAgICogbGl2ZSBvbiB0aGUgZmlsZXN5c3RlbSwgYW5kIEF0bGFzIHdpbGwgbG9hZCB0aGVtIGZyb20gdGhlIGdpdmVuIG1vZHVsZSBsb2NhdGlvbnMgYW5kIGFkZCB0aGVtXG4gICAqIHRvIHRoZSBBdGxhcyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgIG9wdGlvbnMgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5lbnYgICAgICAgICAgICAgICAgICAgVGhlIGVudmlyb25tZW50IHVuZGVyIHdoaWNoIHRvIG9wZXJhdGVcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMucm9vdCAgICAgICAgICAgICAgICAgIFRoZSByb290IGRpcmVjdG9yeSB0byB3aGljaCBhbGwgb3RoZXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIG1lbnRpb25lZCBoZXJlIGFyZSByZWxhdGl2ZVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5jb25maWc9J2NvbmZpZycgICAgICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5ob29rcz0naG9va3MnICAgICAgICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgaG9va3NcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuc2VydmljZXM9J3NlcnZpY2VzJyAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIHNlcnZpY2VzXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmFjdGlvbnM9J2FjdGlvbnMnICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBhY3Rpb25zXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmFsaWFzZXM9J2FsaWFzZXMnICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBhbGlhc2VzXG4gICAqIEByZXR1cm4gICAge0F0bGFzfVxuICAgKi9cbiAgc3RhdGljIGluaXQob3B0aW9ucyA9IHt9KSB7XG4gICAgZGVmYXVsdHMob3B0aW9ucywge1xuICAgICAgY29uZmlnOiAnY29uZmlnJyxcbiAgICAgIGhvb2tzOiAnaG9va3MnLFxuICAgICAgc2VydmljZXM6ICdzZXJ2aWNlcycsXG4gICAgICBhY3Rpb25zOiAnYWN0aW9ucycsXG4gICAgICBhbGlhc2VzOiAnYWxpYXNlcycsXG4gICAgfSlcblxuICAgIGNvbnN0IGF0bGFzID0gbmV3IHRoaXMoe1xuICAgICAgZW52OiBvcHRpb25zLmVudixcbiAgICAgIHJvb3Q6IG9wdGlvbnMucm9vdCxcbiAgICAgIGNvbmZpZzogb3B0aW9ucy5jb25maWcsXG4gICAgfSlcbiAgICBjb25zdCB0eXBlcyA9IFtcbiAgICAgICdob29rcycsXG4gICAgICAnc2VydmljZXMnLFxuICAgICAgJ2FjdGlvbnMnLFxuICAgICAgJ2FsaWFzZXMnLFxuICAgIF1cbiAgICBjb25zdCBwYXRocyA9IHt9XG4gICAgY29uc3QgbW9kdWxlcyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIHBhdGhzW3R5cGVdID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMucm9vdCwgb3B0aW9uc1t0eXBlXSlcbiAgICAgIG1vZHVsZXNbdHlwZV0gPSBhdGxhcy5yZXF1aXJlKG9wdGlvbnNbdHlwZV0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICB9XG5cbiAgICBhdGxhcy5sb2cuZGVidWcoeyBwYXRocyB9LCAnYXRsYXM6aW5pdCcpXG5cbiAgICByZXR1cm4gdGhpcy5ib290c3RyYXAoYXRsYXMsIG1vZHVsZXMpXG4gIH1cblxuICAvKipcbiAgICogQm9vdHN0cmFwIHRoZSBnaXZlbiBBdGxhcyBpbnN0YW5jZSB3aXRoIHRoZSBwcm92aWRlZCBtb2R1bGVzXG4gICAqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBxdWlja2x5IHNldCB1cCB0aGUgZ2l2ZW4gQXRsYXMgaW5zdGFuY2UgdG8gdXNlIHRoZSBwcm92aWRlZCBjb21wb25lbnRzLiBUaGlzXG4gICAqIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0byBoYXZlIG11bHRpcGxlIGVudHJ5IHBvaW50cyB0byB5b3VyIHByb2dyYW0gYW5kIHNvbWUgZW50cnlwb2ludHMgc2hvdWxkXG4gICAqIG9ubHkgdXNlIHNvbWUgY29tcG9uZW50cyBhdmFpbGFibGUuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgd2hlbiBpbXBsZW1lbnRpbmcgd29ya2VyXG4gICAqIHByb2Nlc3NlcyB3aGVyZSB5b3Ugb25seSBuZWVkIGEgc3Vic2V0IG9mIGFsbCBhdmFpbGFibGUgY29tcG9uZW50cy4gVGhpcyBtZXRob2QsIHdoaWxlIG1vcmVcbiAgICogdmVyYm9zZSBhcyBBdGxhcy5pbml0KCksIHN0aWxsIGZyZWVzIHlvdSBmcm9tIG1hbnVhbGx5IGFkZGluZyBhbGwgdGhlIGNvbXBvbmVudHMgYnkgaGFuZCB3aGlsZVxuICAgKiBwcm92aWRpbmcgZ3JlYXRlciBmbGV4aWJpbGl0eSBhcyB0byB3aGljaCBjb21wb25lbnRzIHdpbGwgYmUgdXNlZC5cbiAgICpcbiAgICogQHBhcmFtICAgICB7QXRsYXN9ICAgYXRsYXMgICAgICAgICAgICAgICAgIFRoZSBBdGxhcyBpbnN0YW5jZSB0byBib290c3RyYXBcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgbW9kdWxlcz17fSAgICAgICAgICAgIEFsbCB0aGUgbW9kdWxlcyB3aGljaCBzaG91bGQgYmUgYWRkZWQgdG8gQXRsYXNcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgbW9kdWxlcy5hY3Rpb25zICAgICAgIEFjdGlvbnMgdG8gYWRkXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gIG1vZHVsZXMuaG9va3MgICAgICAgICBIb29rcyB0byBhZGRcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgbW9kdWxlcy5zZXJ2aWNlcyAgICAgIFNlcnZpY2VzIHRvIGFkZFxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICBtb2R1bGVzLmFsaWFzZXMgICAgICAgQWxpYXNlcyBmb3IgYWxsIHRoZSBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge0F0bGFzfSAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQXRsYXMgaW5zdGFuY2Ugd2l0aCBhbGwgY29tcG9uZW50cyBhZGRlZCwgcmVhZHlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHN0YXJ0ZWRcbiAgICovXG4gIHN0YXRpYyBib290c3RyYXAoYXRsYXMsIG1vZHVsZXMgPSB7fSkge1xuICAgIGRlZmF1bHRzKG1vZHVsZXMsIHtcbiAgICAgIC8vIGNvbmZpZyBtb2R1bGUgaXMgbG9hZGVkIGJ5IEF0bGFzIGluc3RhbmNlIGl0c2VsZiwgc28gaXQncyBva2F5IHRvIHVzZSBhIHN0cmluZyBoZXJlIGFuZCBsZXRcbiAgICAgIC8vIEF0bGFzIGxvYWQgaXRcbiAgICAgIGNvbmZpZzogJ2NvbmZpZycsXG4gICAgICAvLyBUaGUgZm9sbG93aW5nIG1vZHVsZXMgbXVzdCBhbHJlYWR5IGJlIHByb3ZpZGVkIGRpcmVjdGx5IGFzIHdlIHdvbid0IGxvYWQgdGhlbVxuICAgICAgYWN0aW9uczoge30sXG4gICAgICBob29rczoge30sXG4gICAgICBzZXJ2aWNlczoge30sXG4gICAgICBhbGlhc2VzOiB7XG4gICAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgICBob29rczoge30sXG4gICAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGF0bGFzLmxvZy5kZWJ1Zyh7XG4gICAgICBlbnY6IGF0bGFzLmVudixcbiAgICAgIHJvb3Q6IGF0bGFzLnJvb3QsXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIGFjdGlvbnM6IE9iamVjdC5rZXlzKG1vZHVsZXMuYWN0aW9ucyksXG4gICAgICAgIGhvb2tzOiBPYmplY3Qua2V5cyhtb2R1bGVzLmhvb2tzKSxcbiAgICAgICAgc2VydmljZXM6IE9iamVjdC5rZXlzKG1vZHVsZXMuc2VydmljZXMpLFxuICAgICAgfSxcbiAgICB9LCAnYXRsYXM6Ym9vdHN0cmFwJylcblxuICAgIC8vIEhvb2tzXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIEhvb2tdIG9mIE9iamVjdC5lbnRyaWVzKG1vZHVsZXMuaG9va3MpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gbW9kdWxlcy5hbGlhc2VzLmhvb2tzW2FsaWFzXVxuICAgICAgYXRsYXMuaG9vayhhbGlhcywgSG9vaywgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgLy8gU2VydmljZXNcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgU2VydmljZV0gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5zZXJ2aWNlcykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBtb2R1bGVzLmFsaWFzZXMuc2VydmljZXNbYWxpYXNdXG4gICAgICBhdGxhcy5zZXJ2aWNlKGFsaWFzLCBTZXJ2aWNlLCB7IGFsaWFzZXMgfSlcbiAgICB9XG5cbiAgICAvLyBBY3Rpb25zXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIEFjdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5hY3Rpb25zKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG1vZHVsZXMuYWxpYXNlcy5hY3Rpb25zW2FsaWFzXVxuICAgICAgYXRsYXMuYWN0aW9uKGFsaWFzLCBBY3Rpb24sIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIHJldHVybiBhdGxhc1xuICB9XG5cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdGhpcyBpbnN0YW5jZSBvcGVyYXRlc1xuICAgKlxuICAgKiBEZWZhdWx0cyB0byBOT0RFX0VOViBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge1N0cmluZ31cbiAgICovXG4gIGdldCBlbnYoKSB7XG4gICAgcmV0dXJuIHRoaXM6OmhpZGRlbigpLmVudlxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByb290IGZvbGRlciB3aGVyZSBhbGwgb3RoZXIgcGF0aHMgc2hvdWxkIGJlIHJlbGF0aXZlIHRvXG4gICAqXG4gICAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHNldCB0aGlzIHRvIHRoZSBwcm9qZWN0J3Mgcm9vdCBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtTdHJpbmd9XG4gICAqL1xuICBnZXQgcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkucm9vdFxuICB9XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgaW5zdGFuY2UgaW4gYSBwcmVwYXJlZCBzdGF0ZT9cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgcHJlcGFyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXM6OmhpZGRlbigpLnByZXBhcmVkXG4gIH1cblxuICAvKipcbiAgICogSXMgdGhpcyBpbnN0YW5jZSBpbiBhIHN0YXJ0ZWQgc3RhdGU/XG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHN0YXJ0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXM6OmhpZGRlbigpLnN0YXJ0ZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBBdGxhcyBjb25maWd1cmF0aW9uLCBhcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBjb25maWcgPSB7fVxuXG4gIC8qKlxuICAgKiBBbGwgc2VydmljZXMgYWRkZWQgdG8gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBAdHlwZSAgICB7T2JqZWN0fVxuICAgKi9cbiAgc2VydmljZXMgPSB7fVxuXG4gIC8qKlxuICAgKiBBbGwgYWN0aW9ucyBhZGRlZCB0byB0aGlzIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBhY3Rpb25zID0ge31cblxuICAvKipcbiAgICogQW4gaW5zdGFuY2Ugb2YgQWp2IHVzZWQgdG8gdmFsaWRhdGUgY29tcG9uZW50IGNvbmZpZ3VyYXRpb25cbiAgICogQHR5cGUgICAge0Fqdn1cbiAgICovXG4gIHZhbGlkYXRvciA9IG51bGxcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0aW9ucyAgICAgICAgICAgICBPcHRpb25zIGZvciB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zLmNvbmZpZyAgICAgIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgaW5zdGFuY2UgYW5kIGZvciBhbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzIG9yIG90aGVyIGNvbXBvbmVudHMgd2hpY2ggd2lsbCBiZSBhZGRlZCB0b1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbmNlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgb3B0aW9ucy5yb290ICAgICAgICBUaGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGluc3RhbmNlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgb3B0aW9ucy5lbnYgICAgICAgICBUaGUgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdGhpcyBpbnN0YW5jZSBvcGVyYXRlcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudHMgbWF5IHVzZSB0aGlzIHZhbHVlIGZvciB2YXJpb3VzIHB1cnBvc2VzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gTk9ERV9FTlYuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAvLyBJbml0aWFsaXNlIHByaXZhdGUgc3R1ZmZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvY2Vzcy1lbnZcbiAgICB0aGlzOjpoaWRkZW4oKS5lbnYgPSBvcHRpb25zLmVudiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOVlxuICAgIHRoaXM6OmhpZGRlbigpLnJvb3QgPSBvcHRpb25zLnJvb3RcbiAgICB0aGlzOjpoaWRkZW4oKS5wcmVwYXJlZCA9IGZhbHNlXG4gICAgdGhpczo6aGlkZGVuKCkuc3RhcnRlZCA9IGZhbHNlXG4gICAgdGhpczo6aGlkZGVuKCkuY2F0YWxvZyA9IHtcbiAgICAgIHNlcnZpY2VzOiBuZXcgTWFwKCksXG4gICAgICBob29rczogbmV3IE1hcCgpLFxuICAgICAgYWN0aW9uczogbmV3IE1hcCgpLFxuICAgIH1cbiAgICB0aGlzOjpoaWRkZW4oKS5vYnNlcnZlcnMgPSBuZXcgTWFwKClcblxuICAgIC8vIFNhZmV0eSBjaGVja3NcbiAgICBpZiAoIXRoaXMuZW52KSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoJ2VudiBub3Qgc3BlY2lmaWVkIGFuZCBOT0RFX0VOViB3YXMgbm90IHNldCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnJvb3QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYHJvb3QgbXVzdCBiZSBleHBsaWNpdGx5IHNwZWNpZmllZCwgZ290ICR7b3B0aW9ucy5yb290fWApXG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSB0aGlzOjpta2NvbmZpZyhvcHRpb25zLmNvbmZpZywge1xuICAgICAgYXRsYXM6IEF0bGFzLmRlZmF1bHRzLFxuICAgICAgc2VydmljZXM6IHt9LFxuICAgICAgaG9va3M6IHt9LFxuICAgICAgYWN0aW9uczoge30sXG4gICAgfSlcbiAgICAvLyBMb2dnZXIg8J+MslxuICAgIHRoaXMubG9nID0gdGhpczo6bWtsb2codGhpcy5jb25maWcuYXRsYXMubG9nKVxuICAgIC8vIEFqdiB2YWxpZGF0b3Ig4pyTXG4gICAgdGhpcy52YWxpZGF0b3IgPSBuZXcgQWp2KHRoaXMuY29uZmlnLmF0bGFzLnZhbGlkYXRvcilcbiAgICBhanZLZXl3b3Jkcyh0aGlzLnZhbGlkYXRvciwgdGhpcy5jb25maWcuYXRsYXMudmFsaWRhdG9yLmtleXdvcmRzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVpcmUgYSBtb2R1bGUgYnkgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdFxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGxvY2F0aW9uICAgICAgICAgIFRoZSBtb2R1bGUncyBsb2NhdGlvbiwgcmVsYXRpdmUgdG8gcm9vdFxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdGlvbnM9e30gICAgICAgIE9wdGlvbnNcbiAgICogQHBhcmFtICAgICB7Qm9vbGVhbn0gICBvcHRpb25zLm9wdGlvbmFsICBJZiB0cnVlLCB3aWxsIG5vdCB0aHJvdyBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGV4aXN0XG4gICAqIEBwYXJhbSAgICAge0Jvb2xlYW59ICAgb3B0aW9ucy5ub3JtYWxpc2UgSWYgdHJ1ZSwgaXQgd2lsbCBwcmVmZXIgdGhlIEVTIG1vZHVsZXMnIGRlZmF1bHQgZXhwb3J0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlciBuYW1lZCBleHBvcnRzIG9yIHRoZSBDb21tb25KUyBleHBvcnRzXG4gICAqIEBwYXJhbSAgICAge0Jvb2xlYW59ICAgb3B0aW9ucy5hYnNvbHV0ZSAgSWYgdHJ1ZSwgd2lsbCB0cnkgdG8gbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZpbmcgdGhlIG1vZHVsZSdzIG5hbWUgdG8gdGhlIHByb2plY3Qgcm9vdCAoaXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGxvYWQgdGhlIG1vZHVsZSB1c2luZyBzdGFuZGFyZCBOb2RlJ3MgbWVjaGFuaXNtKVxuICAgKiBAcmV0dXJuICAgIHttaXhlZH0gICAgICAgICAgICAgICAgICAgICAgIFRoZSBtb2R1bGUncyBjb250ZW50c1xuICAgKi9cbiAgcmVxdWlyZShsb2NhdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbG9jYXRpb24gPSBvcHRpb25zLmFic29sdXRlXG4gICAgICA/IGxvY2F0aW9uXG4gICAgICA6IHBhdGgucmVzb2x2ZSh0aGlzLnJvb3QsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgbG9hZCA9IG9wdGlvbnMub3B0aW9uYWxcbiAgICAgID8gb3B0cmVxdWlyZVxuICAgICAgOiByZXF1aXJlXG4gICAgY29uc3QgY29udGVudHMgPSBsb2FkKGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIG9wdGlvbnMubm9ybWFsaXNlICYmIGlzUGxhaW5PYmplY3QoY29udGVudHMuZGVmYXVsdClcbiAgICAgID8gY29udGVudHMuZGVmYXVsdFxuICAgICAgOiBjb250ZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgc2VydmljZSBpbnRvIHRoaXMgYXRsYXMgYXQgZ2l2ZW4gYWxpYXNcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICAgICAgVGhlIGFsaWFzIGZvciB0aGUgc2VydmljZSAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgZXhwb3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNlcnZpY2UncyBBUEkgb24gdGhlIGF0bGFzLnNlcnZpY2VzIG9iamVjdCBhbmQgZm9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBzZXJ2aWNlIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIHNlcnZpY2VcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBzZXJ2aWNlKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnc2VydmljZScsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLnNlcnZpY2VzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGhvb2sgaW50byB0aGlzIGF0bGFzIHVzaW5nIGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIGhvb2sgLSBpdCB3aWxsIGJlIHVzZWQgZm9yIHBhc3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBob29rIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIGhvb2tcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBob29rKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnaG9vaycsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLmhvb2tzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBhY3Rpb24gaW50byB0aGlzIGF0bGFzIGF0IGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIGFjdGlvbiAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgZXhwb3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFjdGlvbidzIEFQSSBvbiB0aGUgYXRsYXMuYWN0aW9ucyBvYmplY3QgYW5kIGZvclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBpdFxuICAgKiBAcGFyYW0gICAgIHtjbGFzc30gICAgIENvbXBvbmVudCAgICAgICBUaGUgYWN0aW9uIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIGFjdGlvblxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMuYWxpYXNlcyAgICBCaW5kaW5ncyB0byBvdGhlciBkZWZpbmVkIGNvbXBvbmVudHNcbiAgICogQHJldHVybiAgICB7dGhpc31cbiAgICovXG4gIGFjdGlvbihhbGlhcywgQ29tcG9uZW50LCBvcHRzID0ge30pIHtcbiAgICB0aGlzOjpjb21wb25lbnQoe1xuICAgICAgdHlwZTogJ2FjdGlvbicsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLmFjdGlvbnMpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgYWxsIHNlcnZpY2VzIGFuZCBob29rcyBmb3IgdXNlXG4gICAqXG4gICAqIEdlbmVyYWxseSB5b3Ugc2hvdWxkIHVzZSBgYXRsYXMuc3RhcnQoKWAgaW5zdGVhZCB0byBnZXQgeW91ciBpbnN0YW5jZSB1cCBhbmQgcnVubmluZy4gSG93ZXZlcixcbiAgICogc29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSB0byBnZXQgYWxsIHRoZSBzZXJ2aWNlcyBpbnRvIGEgXCJnZXQtcmVhZHlcIiBzdGF0ZSBiZWZvcmUgdGhleSBzdGFydFxuICAgKiBjb25uZWN0aW5nIHRvIHJlbW90ZSByZXNvdXJjZXMgb3IgZG9pbmcgYW55IGludGVuc2l2ZSBJL08gb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHByZXBhcmUoKSB7XG4gICAgaWYgKHRoaXMucHJlcGFyZWQpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgY29uc3QgeyBzZXJ2aWNlcywgYWN0aW9ucywgaG9va3MgfSA9IHRoaXM6OmhpZGRlbigpLmNhdGFsb2dcbiAgICBjb25zdCBvYnNlcnZlcnMgPSB0aGlzOjpoaWRkZW4oKS5vYnNlcnZlcnNcblxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBjb250YWluZXJdIG9mIGhvb2tzKSB7XG4gICAgICBpZiAoIWNvbnRhaW5lci5Db21wb25lbnQub2JzZXJ2ZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBIb29rICR7YWxpYXN9IGRvZXMgbm90IGhhdmUgc3RhdGljICdvYnNlcnZlcycgcHJvcGVydHlgKVxuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIG9ic2VydmVycyBvZiBBdGxhcyBpdHNlbGZcbiAgICAgIGlmIChjb250YWluZXIuQ29tcG9uZW50Lm9ic2VydmVzID09PSAnYXRsYXMnKSB7XG4gICAgICAgIG9ic2VydmVycy5zZXQoYWxpYXMsIGNvbnRhaW5lcilcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGhvb2tzXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShob29rcykubWFwKChbLCBjb250YWluZXJdKSA9PlxuICAgICAgY29udGFpbmVyLnByZXBhcmUoKSkpXG5cbiAgICAvLyBQcmVwYXJlIGFjdGlvbnMsIGluIHBhcmFsbGVsIPCfkqpcbiAgICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKGFjdGlvbnMpLm1hcChhc3luYyAoW2FsaWFzLCBjb250YWluZXJdKSA9PlxuICAgICAgdGhpczo6ZXhwb3NlKCdhY3Rpb25zJywgYWxpYXMsIGF3YWl0IGNvbnRhaW5lci5wcmVwYXJlKHsgaG9va3MgfSkpKSlcblxuICAgIC8vIFByZXBhcmUgYWxsIHNlcnZpY2VzLCBpbiBwYXJhbGxlbCDwn5KqXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShzZXJ2aWNlcykubWFwKGFzeW5jIChbYWxpYXMsIGNvbnRhaW5lcl0pID0+XG4gICAgICB0aGlzOjpleHBvc2UoJ3NlcnZpY2VzJywgYWxpYXMsIGF3YWl0IGNvbnRhaW5lci5wcmVwYXJlKHsgaG9va3MgfSkpKSlcblxuICAgIHRoaXM6OmhpZGRlbigpLnByZXBhcmVkID0gdHJ1ZVxuICAgIGF3YWl0IG9ic2VydmVyczo6ZGlzcGF0Y2goJ2FmdGVyUHJlcGFyZScsIHRoaXMpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGFsbCBzZXJ2aWNlc1xuICAgKlxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXM+fVxuICAgKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBzZXJ2aWNlcywgaG9va3MgfSA9IHRoaXM6OmhpZGRlbigpLmNhdGFsb2dcbiAgICBjb25zdCBvYnNlcnZlcnMgPSB0aGlzOjpoaWRkZW4oKS5vYnNlcnZlcnNcblxuICAgIGF3YWl0IHRoaXMucHJlcGFyZSgpXG4gICAgYXdhaXQgb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYmVmb3JlU3RhcnQnLCB0aGlzKVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgLi4uQXJyYXkuZnJvbShob29rcyksXG4gICAgICAuLi5BcnJheS5mcm9tKGFjdGlvbnMpLFxuICAgIF0ubWFwKChbLCBjb250YWluZXJdKSA9PiBjb250YWluZXIuc3RhcnQoeyBob29rcyB9KSkpXG5cbiAgICAvLyBTdGFydCBhbGwgc2VydmljZXMsIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIGluc3RhbmNlIPCfkqpcbiAgICAvLyBPcmRlcmluZyBpcyBpbXBvcnRhbnQgaGVyZSEgU29tZSBzZXJ2aWNlcyBzaG91bGQgYmUgc3RhcnRlZCBhcyB0aGUgbGFzdCBvbmVzIGJlY2F1c2UgdGhleVxuICAgIC8vIGV4cG9zZSBzb21lIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIG91dHNpZGUgd29ybGQgYW5kIHN0YXJ0aW5nIHRob3NlIGJlZm9yZSBpZS4gYSBkYXRhYmFzZVxuICAgIC8vIHNlcnZpY2UgaXMgc3RhcnRlZCBtaWdodCBicmVhayBzdHVmZiFcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgY29udGFpbmVyXSBvZiBzZXJ2aWNlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY29udGFpbmVyLnN0YXJ0KHsgaW5zdGFuY2U6IHRoaXMuc2VydmljZXNbYWxpYXNdLCBob29rcyB9KVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIFJvbGwgYmFja1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3AoKVxuICAgICAgICAgIC8vIFNoaXQganVzdCBnb3Qgc2VyaW91cyDwn5ixXG4gICAgICAgICAgLmNhdGNoKHN0b3BFcnIgPT4gdm9pZCB0aGlzLmxvZy5mYXRhbCh7IGVycjogc3RvcEVyciB9LCAnYXRsYXM6c3RhcnQ6cm9sbGJhY2stZmFpbHVyZScpKVxuXG4gICAgICAgIC8vIFJlLXRocm93IHRoZSBvcmlnaW5hbCBlcnJvciB3aGljaCBjYXVzZWQgQXRsYXMgdG8gZmFpbCB0byBzdGFydFxuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzOjpoaWRkZW4oKS5zdGFydGVkID0gdHJ1ZVxuICAgIGF3YWl0IG9ic2VydmVyczo6ZGlzcGF0Y2goJ2FmdGVyU3RhcnQnLCB0aGlzKVxuICAgIHRoaXMubG9nLmluZm8oJ2F0bGFzOnJlYWR5JylcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU3RvcCBhbGwgc2VydmljZXMsIHVucmVnaXN0ZXIgYWxsIGFjdGlvbnMgYW5kIGhvb2tzIGFuZCB1bnB1Ymxpc2ggYW55IEFQSXMgZXhwb3NlZCBieSB0aGVtXG4gICAqXG4gICAqIFRoaXMgcHV0cyB0aGUgd2hvbGUgYXBwbGljYXRpb24gaW50byBhIHN0YXRlIGFzIGl0IHdhcyBiZWZvcmUgYGF0bGFzLnByZXBhcmUoKWAgYW5kL29yXG4gICAqIGBhdGxhcy5zdGFydCgpYCB3YXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXM+fVxuICAgKi9cbiAgYXN5bmMgc3RvcCgpIHtcbiAgICBjb25zdCB7IHNlcnZpY2VzLCBhY3Rpb25zLCBob29rcyB9ID0gdGhpczo6aGlkZGVuKCkuY2F0YWxvZ1xuICAgIGNvbnN0IG9ic2VydmVycyA9IHRoaXM6OmhpZGRlbigpLm9ic2VydmVyc1xuXG4gICAgYXdhaXQgb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYmVmb3JlU3RvcCcsIHRoaXMpXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAuLi5BcnJheS5mcm9tKGhvb2tzKSxcbiAgICAgIC4uLkFycmF5LmZyb20oYWN0aW9ucyksXG4gICAgXS5tYXAoKFssIGNvbnRhaW5lcl0pID0+IGNvbnRhaW5lci5zdG9wKCkpKVxuXG4gICAgbGV0IGVycm9yXG5cbiAgICAvLyBTdG9wIGFsbCBzZXJ2aWNlcywgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdGhleSB3ZXJlIGFkZGVkIHRvIHRoZSBpbnN0YW5jZSDwn5KqXG4gICAgLy8gVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGUgbW9zdCBpbXBvcnRhbnQgc2VydmljZXMgYXJlIHN0b3BwZWQgZmlyc3QuXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIGNvbnRhaW5lcl0gb2YgQXJyYXkuZnJvbShzZXJ2aWNlcykucmV2ZXJzZSgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuc2VydmljZXNbYWxpYXNdXG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlcnZpY2VzW2FsaWFzXVxuICAgICAgICBhd2FpdCBjb250YWluZXIuc3RvcCh7IGluc3RhbmNlLCBob29rcyB9KVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycm9yID0gZXJyXG4gICAgICAgIC8vIExlYXZlIHRoaXMgc2VydmljZSBhcyBpcyBhbmQgbW92ZSB0byB0aGUgbmV4dCBzZXJ2aWNlLiBXZSBwcm9iYWJseSBjYW5ub3QgZG8gYW55dGhpbmcgdG9cbiAgICAgICAgLy8gcHJvcGVybHkgc3RvcCB0aGlzIHNlcnZpY2UuIPCfmYFcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVbnJlZ2lzdGVyIGFjdGlvbnNcbiAgICBmb3IgKGNvbnN0IFthbGlhc10gb2YgYWN0aW9ucykge1xuICAgICAgZGVsZXRlIHRoaXMuYWN0aW9uc1thbGlhc11cbiAgICB9XG5cbiAgICB0aGlzOjpoaWRkZW4oKS5zdGFydGVkID0gZmFsc2VcbiAgICB0aGlzOjpoaWRkZW4oKS5wcmVwYXJlZCA9IGZhbHNlXG5cbiAgICBhd2FpdCBob29rczo6ZGlzcGF0Y2goJ2FmdGVyU3RvcCcsIG51bGwpXG4gICAgdGhpcy5sb2cuaW5mbygnYXRsYXM6c3RvcHBlZCcpXG5cbiAgICAvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgdGhyb3duIGluIG9uZSBvZiB0aGUgc2VydmljZXMgZHVyaW5nIC5zdG9wKCksIHJlLXRocm93IGl0IG5vd1xuICAgIGlmIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0bGFzXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0bGFzLm1qcyJdLCJuYW1lcyI6WyJBdGxhcyIsImluaXQiLCJvcHRpb25zIiwiY29uZmlnIiwiaG9va3MiLCJzZXJ2aWNlcyIsImFjdGlvbnMiLCJhbGlhc2VzIiwiYXRsYXMiLCJlbnYiLCJyb290IiwidHlwZXMiLCJwYXRocyIsIm1vZHVsZXMiLCJ0eXBlIiwicGF0aCIsInJlc29sdmUiLCJyZXF1aXJlIiwib3B0aW9uYWwiLCJsb2ciLCJkZWJ1ZyIsImJvb3RzdHJhcCIsImNvbXBvbmVudHMiLCJPYmplY3QiLCJrZXlzIiwiYWxpYXMiLCJIb29rIiwiZW50cmllcyIsImhvb2siLCJTZXJ2aWNlIiwic2VydmljZSIsIkFjdGlvbiIsImFjdGlvbiIsInByZXBhcmVkIiwic3RhcnRlZCIsImNvbnN0cnVjdG9yIiwiTWFwIiwicHJvY2VzcyIsIk5PREVfRU5WIiwiRnJhbWV3b3JrRXJyb3IiLCJta2NvbmZpZyIsImRlZmF1bHRzIiwibWtsb2ciLCJ2YWxpZGF0b3IiLCJBanYiLCJrZXl3b3JkcyIsImxvY2F0aW9uIiwiYWJzb2x1dGUiLCJsb2FkIiwib3B0cmVxdWlyZSIsImNvbnRlbnRzIiwibm9ybWFsaXNlIiwiZGVmYXVsdCIsIkNvbXBvbmVudCIsIm9wdHMiLCJjb21wb25lbnQiLCJwcmVwYXJlIiwiY2F0YWxvZyIsImNvbnRhaW5lciIsIm9ic2VydmVzIiwic2V0IiwiUHJvbWlzZSIsImFsbCIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImV4cG9zZSIsInZhbHVlIiwiaW50ZXJuYWwiLCJmaWx0ZXIiLCJyZXN1bHQiLCJCb29sZWFuIiwiZm9yRWFjaCIsImRpc3BhdGNoIiwic3RhcnQiLCJlcnIiLCJzdG9wIiwiY2F0Y2giLCJzdG9wRXJyIiwiZmF0YWwiLCJpbmZvIiwiZXJyb3IiLCJyZXZlcnNlIiwibmFtZSIsImJhc2VuYW1lIiwiY3dkIiwibGV2ZWwiLCJzZXJpYWxpemVycyIsInBpbm8iLCJzdGRTZXJpYWxpemVycyIsInJlcSIsInJlcyIsImFs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QUFLO0FBQ0hnRSxVQUFNcEUsY0FBS3FFLFFBQUwsQ0FBYy9DLFFBQVFnRCxHQUFSLEVBQWQsQ0FESDtBQUVIQyxXQUFPLE1BRko7QUFHSEMsaUJBQWE7QUFDWFosV0FBS2EsY0FBS0MsY0FBTCxDQUFvQmQsR0FEZDtBQUVYZSxXQUFLRixjQUFLQyxjQUFMLENBQW9CQyxHQUZkO0FBR1hDLFdBQUtILGNBQUtDLGNBQUwsQ0FBb0JFO0FBSGQ7QUFIVixHQURXO0FBV2hCaEQsYUFBVztBQUNUaUQsZUFBVyxJQURGO0FBRVRDLGlCQUFhLElBRko7QUFHVGhELGNBQVUsQ0FDUixRQURRO0FBSEQ7QUFYSyxDOzs7Ozs7Ozs7Ozs7OztlQXVmTDdDLEsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXZSB1c2UgZm9yLWF3YWl0IHBhdHRlcm4gcXVpdGUgZXh0ZW5zaXZlbHkgaGVyZSBmb3IgbGVnaXRpbWF0ZSBwdXJwb3Nlc1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IEFqdiBmcm9tICdhanYnXG5pbXBvcnQgYWp2S2V5d29yZHMgZnJvbSAnYWp2LWtleXdvcmRzJ1xuaW1wb3J0IHBpbm8gZnJvbSAncGlubydcbmltcG9ydCB7XG4gIGRlZmF1bHRzRGVlcCBhcyBkZWZhdWx0cyxcbiAgaXNQbGFpbk9iamVjdCxcbn0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuaW1wb3J0IHtcbiAgZXhwb3NlLFxuICBkaXNwYXRjaCxcbiAgY29tcG9uZW50LFxuICBta2NvbmZpZyxcbiAgbWtsb2csXG4gIG9wdHJlcXVpcmUsXG59IGZyb20gJy4vcHJpdmF0ZSdcblxuLyoqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgeW91ciBhcHBsaWNhdGlvbiBhbmQgYWdncmVnYXRlcyBhbGwgY29tcG9uZW50cyB0b2dldGhlclxuICpcbiAqIFlvdSBzaG91bGQgZ2VuZXJhbGx5IGNyZWF0ZSBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGluIGEgcHJvZ3JhbS5cbiAqL1xuY2xhc3MgQXRsYXMge1xuICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgbG9nOiB7XG4gICAgICBuYW1lOiBwYXRoLmJhc2VuYW1lKHByb2Nlc3MuY3dkKCkpLFxuICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgIHNlcmlhbGl6ZXJzOiB7XG4gICAgICAgIGVycjogcGluby5zdGRTZXJpYWxpemVycy5lcnIsXG4gICAgICAgIHJlcTogcGluby5zdGRTZXJpYWxpemVycy5yZXEsXG4gICAgICAgIHJlczogcGluby5zdGRTZXJpYWxpemVycy5yZXMsXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICB2YWxpZGF0b3I6IHtcbiAgICAgIGFsbEVycm9yczogdHJ1ZSxcbiAgICAgIHVzZURlZmF1bHRzOiB0cnVlLFxuICAgICAga2V5d29yZHM6IFtcbiAgICAgICAgJ3R5cGVvZicsXG4gICAgICBdLFxuICAgIH0sXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGlzZSBhIGJyYW5kLW5ldyBhdGxhcyBpbnN0YW5jZSBmcm9tIHRoZSBnaXZlbiBtb2R1bGUgbG9jYXRpb25zXG4gICAqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBxdWlja2x5IGNvbmZpZ3VyZSBBdGxhcyBpbnN0YW5jZSBieSBzaW1wbHkgdGVsbGluZyBpdCB3aGVyZSB5b3VyIGNvbXBvbmVudHNcbiAgICogbGl2ZSBvbiB0aGUgZmlsZXN5c3RlbSwgYW5kIEF0bGFzIHdpbGwgbG9hZCB0aGVtIGZyb20gdGhlIGdpdmVuIG1vZHVsZSBsb2NhdGlvbnMgYW5kIGFkZCB0aGVtXG4gICAqIHRvIHRoZSBBdGxhcyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgIG9wdGlvbnMgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5lbnYgICAgICAgICAgICAgICAgICAgVGhlIGVudmlyb25tZW50IHVuZGVyIHdoaWNoIHRvIG9wZXJhdGVcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMucm9vdCAgICAgICAgICAgICAgICAgIFRoZSByb290IGRpcmVjdG9yeSB0byB3aGljaCBhbGwgb3RoZXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIG1lbnRpb25lZCBoZXJlIGFyZSByZWxhdGl2ZVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5jb25maWc9J2NvbmZpZycgICAgICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5ob29rcz0naG9va3MnICAgICAgICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgaG9va3NcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuc2VydmljZXM9J3NlcnZpY2VzJyAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIHNlcnZpY2VzXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmFjdGlvbnM9J2FjdGlvbnMnICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBhY3Rpb25zXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmFsaWFzZXM9J2FsaWFzZXMnICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBhbGlhc2VzXG4gICAqIEByZXR1cm4gICAge0F0bGFzfVxuICAgKi9cbiAgc3RhdGljIGluaXQob3B0aW9ucyA9IHt9KSB7XG4gICAgZGVmYXVsdHMob3B0aW9ucywge1xuICAgICAgY29uZmlnOiAnY29uZmlnJyxcbiAgICAgIGhvb2tzOiAnaG9va3MnLFxuICAgICAgc2VydmljZXM6ICdzZXJ2aWNlcycsXG4gICAgICBhY3Rpb25zOiAnYWN0aW9ucycsXG4gICAgICBhbGlhc2VzOiAnYWxpYXNlcycsXG4gICAgfSlcblxuICAgIGNvbnN0IGF0bGFzID0gbmV3IHRoaXMoe1xuICAgICAgZW52OiBvcHRpb25zLmVudixcbiAgICAgIHJvb3Q6IG9wdGlvbnMucm9vdCxcbiAgICAgIGNvbmZpZzogb3B0aW9ucy5jb25maWcsXG4gICAgfSlcbiAgICBjb25zdCB0eXBlcyA9IFtcbiAgICAgICdob29rcycsXG4gICAgICAnc2VydmljZXMnLFxuICAgICAgJ2FjdGlvbnMnLFxuICAgICAgJ2FsaWFzZXMnLFxuICAgIF1cbiAgICBjb25zdCBwYXRocyA9IHt9XG4gICAgY29uc3QgbW9kdWxlcyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIHBhdGhzW3R5cGVdID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMucm9vdCwgb3B0aW9uc1t0eXBlXSlcbiAgICAgIG1vZHVsZXNbdHlwZV0gPSBhdGxhcy5yZXF1aXJlKG9wdGlvbnNbdHlwZV0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICB9XG5cbiAgICBhdGxhcy5sb2cuZGVidWcoeyBwYXRocyB9LCAnYXRsYXM6aW5pdCcpXG5cbiAgICByZXR1cm4gdGhpcy5ib290c3RyYXAoYXRsYXMsIG1vZHVsZXMpXG4gIH1cblxuICAvKipcbiAgICogQm9vdHN0cmFwIHRoZSBnaXZlbiBBdGxhcyBpbnN0YW5jZSB3aXRoIHRoZSBwcm92aWRlZCBtb2R1bGVzXG4gICAqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBxdWlja2x5IHNldCB1cCB0aGUgZ2l2ZW4gQXRsYXMgaW5zdGFuY2UgdG8gdXNlIHRoZSBwcm92aWRlZCBjb21wb25lbnRzLiBUaGlzXG4gICAqIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0byBoYXZlIG11bHRpcGxlIGVudHJ5IHBvaW50cyB0byB5b3VyIHByb2dyYW0gYW5kIHNvbWUgZW50cnlwb2ludHMgc2hvdWxkXG4gICAqIG9ubHkgdXNlIHNvbWUgY29tcG9uZW50cyBhdmFpbGFibGUuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgd2hlbiBpbXBsZW1lbnRpbmcgd29ya2VyXG4gICAqIHByb2Nlc3NlcyB3aGVyZSB5b3Ugb25seSBuZWVkIGEgc3Vic2V0IG9mIGFsbCBhdmFpbGFibGUgY29tcG9uZW50cy4gVGhpcyBtZXRob2QsIHdoaWxlIG1vcmVcbiAgICogdmVyYm9zZSBhcyBBdGxhcy5pbml0KCksIHN0aWxsIGZyZWVzIHlvdSBmcm9tIG1hbnVhbGx5IGFkZGluZyBhbGwgdGhlIGNvbXBvbmVudHMgYnkgaGFuZCB3aGlsZVxuICAgKiBwcm92aWRpbmcgZ3JlYXRlciBmbGV4aWJpbGl0eSBhcyB0byB3aGljaCBjb21wb25lbnRzIHdpbGwgYmUgdXNlZC5cbiAgICpcbiAgICogQHBhcmFtICAgICB7QXRsYXN9ICAgYXRsYXMgICAgICAgICAgICAgICAgIFRoZSBBdGxhcyBpbnN0YW5jZSB0byBib290c3RyYXBcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgbW9kdWxlcz17fSAgICAgICAgICAgIEFsbCB0aGUgbW9kdWxlcyB3aGljaCBzaG91bGQgYmUgYWRkZWQgdG8gQXRsYXNcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgbW9kdWxlcy5hY3Rpb25zICAgICAgIEFjdGlvbnMgdG8gYWRkXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gIG1vZHVsZXMuaG9va3MgICAgICAgICBIb29rcyB0byBhZGRcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgbW9kdWxlcy5zZXJ2aWNlcyAgICAgIFNlcnZpY2VzIHRvIGFkZFxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICBtb2R1bGVzLmFsaWFzZXMgICAgICAgQWxpYXNlcyBmb3IgYWxsIHRoZSBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge0F0bGFzfSAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQXRsYXMgaW5zdGFuY2Ugd2l0aCBhbGwgY29tcG9uZW50cyBhZGRlZCwgcmVhZHlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHN0YXJ0ZWRcbiAgICovXG4gIHN0YXRpYyBib290c3RyYXAoYXRsYXMsIG1vZHVsZXMgPSB7fSkge1xuICAgIGRlZmF1bHRzKG1vZHVsZXMsIHtcbiAgICAgIC8vIGNvbmZpZyBtb2R1bGUgaXMgbG9hZGVkIGJ5IEF0bGFzIGluc3RhbmNlIGl0c2VsZiwgc28gaXQncyBva2F5IHRvIHVzZSBhIHN0cmluZyBoZXJlIGFuZCBsZXRcbiAgICAgIC8vIEF0bGFzIGxvYWQgaXRcbiAgICAgIGNvbmZpZzogJ2NvbmZpZycsXG4gICAgICAvLyBUaGUgZm9sbG93aW5nIG1vZHVsZXMgbXVzdCBhbHJlYWR5IGJlIHByb3ZpZGVkIGRpcmVjdGx5IGFzIHdlIHdvbid0IGxvYWQgdGhlbVxuICAgICAgYWN0aW9uczoge30sXG4gICAgICBob29rczoge30sXG4gICAgICBzZXJ2aWNlczoge30sXG4gICAgICBhbGlhc2VzOiB7XG4gICAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgICBob29rczoge30sXG4gICAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGF0bGFzLmxvZy5kZWJ1Zyh7XG4gICAgICBlbnY6IGF0bGFzLmVudixcbiAgICAgIHJvb3Q6IGF0bGFzLnJvb3QsXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIGFjdGlvbnM6IE9iamVjdC5rZXlzKG1vZHVsZXMuYWN0aW9ucyksXG4gICAgICAgIGhvb2tzOiBPYmplY3Qua2V5cyhtb2R1bGVzLmhvb2tzKSxcbiAgICAgICAgc2VydmljZXM6IE9iamVjdC5rZXlzKG1vZHVsZXMuc2VydmljZXMpLFxuICAgICAgfSxcbiAgICB9LCAnYXRsYXM6Ym9vdHN0cmFwJylcblxuICAgIC8vIEhvb2tzXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIEhvb2tdIG9mIE9iamVjdC5lbnRyaWVzKG1vZHVsZXMuaG9va3MpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gbW9kdWxlcy5hbGlhc2VzLmhvb2tzW2FsaWFzXVxuICAgICAgYXRsYXMuaG9vayhhbGlhcywgSG9vaywgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgLy8gU2VydmljZXNcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgU2VydmljZV0gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5zZXJ2aWNlcykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBtb2R1bGVzLmFsaWFzZXMuc2VydmljZXNbYWxpYXNdXG4gICAgICBhdGxhcy5zZXJ2aWNlKGFsaWFzLCBTZXJ2aWNlLCB7IGFsaWFzZXMgfSlcbiAgICB9XG5cbiAgICAvLyBBY3Rpb25zXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIEFjdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5hY3Rpb25zKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG1vZHVsZXMuYWxpYXNlcy5hY3Rpb25zW2FsaWFzXVxuICAgICAgYXRsYXMuYWN0aW9uKGFsaWFzLCBBY3Rpb24sIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIHJldHVybiBhdGxhc1xuICB9XG5cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdGhpcyBpbnN0YW5jZSBvcGVyYXRlc1xuICAgKlxuICAgKiBEZWZhdWx0cyB0byBOT0RFX0VOViBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge1N0cmluZ31cbiAgICovXG4gIGdldCBlbnYoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2VudlxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByb290IGZvbGRlciB3aGVyZSBhbGwgb3RoZXIgcGF0aHMgc2hvdWxkIGJlIHJlbGF0aXZlIHRvXG4gICAqXG4gICAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHNldCB0aGlzIHRvIHRoZSBwcm9qZWN0J3Mgcm9vdCBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtTdHJpbmd9XG4gICAqL1xuICBnZXQgcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy4jcm9vdFxuICB9XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgaW5zdGFuY2UgaW4gYSBwcmVwYXJlZCBzdGF0ZT9cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgcHJlcGFyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3ByZXBhcmVkXG4gIH1cblxuICAvKipcbiAgICogSXMgdGhpcyBpbnN0YW5jZSBpbiBhIHN0YXJ0ZWQgc3RhdGU/XG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHN0YXJ0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3N0YXJ0ZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBBdGxhcyBjb25maWd1cmF0aW9uLCBhcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBjb25maWcgPSB7fVxuXG4gIC8qKlxuICAgKiBBbGwgc2VydmljZXMgYWRkZWQgdG8gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBAdHlwZSAgICB7T2JqZWN0fVxuICAgKi9cbiAgc2VydmljZXMgPSB7fVxuXG4gIC8qKlxuICAgKiBBbGwgYWN0aW9ucyBhZGRlZCB0byB0aGlzIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBhY3Rpb25zID0ge31cblxuICAjZW52ID0gbnVsbFxuICAjcm9vdCA9IG51bGxcbiAgI3ByZXBhcmVkID0gZmFsc2VcbiAgI3N0YXJ0ZWQgPSBmYWxzZVxuICAjY2F0YWxvZyA9IHtcbiAgICBzZXJ2aWNlczogbmV3IE1hcCgpLFxuICAgIGhvb2tzOiBuZXcgTWFwKCksXG4gICAgYWN0aW9uczogbmV3IE1hcCgpLFxuICB9XG5cbiAgI29ic2VydmVycyA9IG5ldyBNYXAoKVxuXG4gIC8qKlxuICAgKiBBbiBpbnN0YW5jZSBvZiBBanYgdXNlZCB0byB2YWxpZGF0ZSBjb21wb25lbnQgY29uZmlndXJhdGlvblxuICAgKiBAdHlwZSAgICB7QWp2fVxuICAgKi9cbiAgdmFsaWRhdG9yID0gbnVsbFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zICAgICAgICAgICAgIE9wdGlvbnMgZm9yIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdGlvbnMuY29uZmlnICAgICAgQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBpbnN0YW5jZSBhbmQgZm9yIGFsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXMgb3Igb3RoZXIgY29tcG9uZW50cyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLnJvb3QgICAgICAgIFRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLmVudiAgICAgICAgIFRoZSBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGluc3RhbmNlIG9wZXJhdGVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50cyBtYXkgdXNlIHRoaXMgdmFsdWUgZm9yIHZhcmlvdXMgcHVycG9zZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBOT0RFX0VOVi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIEluaXRpYWxpc2UgcHJpdmF0ZSBzdHVmZlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm9jZXNzLWVudlxuICAgIHRoaXMuI2VudiA9IG9wdGlvbnMuZW52IHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WXG4gICAgdGhpcy4jcm9vdCA9IG9wdGlvbnMucm9vdFxuXG4gICAgLy8gU2FmZXR5IGNoZWNrc1xuICAgIGlmICghdGhpcy4jZW52KSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoJ2VudiBub3Qgc3BlY2lmaWVkIGFuZCBOT0RFX0VOViB3YXMgbm90IHNldCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnJvb3QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYHJvb3QgbXVzdCBiZSBleHBsaWNpdGx5IHNwZWNpZmllZCwgZ290ICR7b3B0aW9ucy5yb290fWApXG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSB0aGlzOjpta2NvbmZpZyhvcHRpb25zLmNvbmZpZywge1xuICAgICAgYXRsYXM6IEF0bGFzLmRlZmF1bHRzLFxuICAgICAgc2VydmljZXM6IHt9LFxuICAgICAgaG9va3M6IHt9LFxuICAgICAgYWN0aW9uczoge30sXG4gICAgfSlcbiAgICAvLyBMb2dnZXIg8J+MslxuICAgIHRoaXMubG9nID0gdGhpczo6bWtsb2codGhpcy5jb25maWcuYXRsYXMubG9nKVxuICAgIC8vIEFqdiB2YWxpZGF0b3Ig4pyTXG4gICAgdGhpcy52YWxpZGF0b3IgPSBuZXcgQWp2KHRoaXMuY29uZmlnLmF0bGFzLnZhbGlkYXRvcilcbiAgICBhanZLZXl3b3Jkcyh0aGlzLnZhbGlkYXRvciwgdGhpcy5jb25maWcuYXRsYXMudmFsaWRhdG9yLmtleXdvcmRzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVpcmUgYSBtb2R1bGUgYnkgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdFxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGxvY2F0aW9uICAgICAgICAgIFRoZSBtb2R1bGUncyBsb2NhdGlvbiwgcmVsYXRpdmUgdG8gcm9vdFxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdGlvbnM9e30gICAgICAgIE9wdGlvbnNcbiAgICogQHBhcmFtICAgICB7Qm9vbGVhbn0gICBvcHRpb25zLm9wdGlvbmFsICBJZiB0cnVlLCB3aWxsIG5vdCB0aHJvdyBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGV4aXN0XG4gICAqIEBwYXJhbSAgICAge0Jvb2xlYW59ICAgb3B0aW9ucy5ub3JtYWxpc2UgSWYgdHJ1ZSwgaXQgd2lsbCBwcmVmZXIgdGhlIEVTIG1vZHVsZXMnIGRlZmF1bHQgZXhwb3J0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlciBuYW1lZCBleHBvcnRzIG9yIHRoZSBDb21tb25KUyBleHBvcnRzXG4gICAqIEBwYXJhbSAgICAge0Jvb2xlYW59ICAgb3B0aW9ucy5hYnNvbHV0ZSAgSWYgdHJ1ZSwgd2lsbCB0cnkgdG8gbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZpbmcgdGhlIG1vZHVsZSdzIG5hbWUgdG8gdGhlIHByb2plY3Qgcm9vdCAoaXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGxvYWQgdGhlIG1vZHVsZSB1c2luZyBzdGFuZGFyZCBOb2RlJ3MgbWVjaGFuaXNtKVxuICAgKiBAcmV0dXJuICAgIHttaXhlZH0gICAgICAgICAgICAgICAgICAgICAgIFRoZSBtb2R1bGUncyBjb250ZW50c1xuICAgKi9cbiAgcmVxdWlyZShsb2NhdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbG9jYXRpb24gPSBvcHRpb25zLmFic29sdXRlXG4gICAgICA/IGxvY2F0aW9uXG4gICAgICA6IHBhdGgucmVzb2x2ZSh0aGlzLnJvb3QsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgbG9hZCA9IG9wdGlvbnMub3B0aW9uYWxcbiAgICAgID8gb3B0cmVxdWlyZVxuICAgICAgOiByZXF1aXJlXG4gICAgY29uc3QgY29udGVudHMgPSBsb2FkKGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIG9wdGlvbnMubm9ybWFsaXNlICYmIGlzUGxhaW5PYmplY3QoY29udGVudHMuZGVmYXVsdClcbiAgICAgID8gY29udGVudHMuZGVmYXVsdFxuICAgICAgOiBjb250ZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgc2VydmljZSBpbnRvIHRoaXMgYXRsYXMgYXQgZ2l2ZW4gYWxpYXNcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICAgICAgVGhlIGFsaWFzIGZvciB0aGUgc2VydmljZSAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgZXhwb3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNlcnZpY2UncyBBUEkgb24gdGhlIGF0bGFzLnNlcnZpY2VzIG9iamVjdCBhbmQgZm9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBzZXJ2aWNlIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIHNlcnZpY2VcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBzZXJ2aWNlKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnc2VydmljZScsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzLiNjYXRhbG9nLnNlcnZpY2VzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGhvb2sgaW50byB0aGlzIGF0bGFzIHVzaW5nIGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIGhvb2sgLSBpdCB3aWxsIGJlIHVzZWQgZm9yIHBhc3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBob29rIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIGhvb2tcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBob29rKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnaG9vaycsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzLiNjYXRhbG9nLmhvb2tzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBhY3Rpb24gaW50byB0aGlzIGF0bGFzIGF0IGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIGFjdGlvbiAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgZXhwb3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFjdGlvbidzIEFQSSBvbiB0aGUgYXRsYXMuYWN0aW9ucyBvYmplY3QgYW5kIGZvclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBpdFxuICAgKiBAcGFyYW0gICAgIHtjbGFzc30gICAgIENvbXBvbmVudCAgICAgICBUaGUgYWN0aW9uIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIGFjdGlvblxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMuYWxpYXNlcyAgICBCaW5kaW5ncyB0byBvdGhlciBkZWZpbmVkIGNvbXBvbmVudHNcbiAgICogQHJldHVybiAgICB7dGhpc31cbiAgICovXG4gIGFjdGlvbihhbGlhcywgQ29tcG9uZW50LCBvcHRzID0ge30pIHtcbiAgICB0aGlzOjpjb21wb25lbnQoe1xuICAgICAgdHlwZTogJ2FjdGlvbicsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzLiNjYXRhbG9nLmFjdGlvbnMpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgYWxsIHNlcnZpY2VzIGFuZCBob29rcyBmb3IgdXNlXG4gICAqXG4gICAqIEdlbmVyYWxseSB5b3Ugc2hvdWxkIHVzZSBgYXRsYXMuc3RhcnQoKWAgaW5zdGVhZCB0byBnZXQgeW91ciBpbnN0YW5jZSB1cCBhbmQgcnVubmluZy4gSG93ZXZlcixcbiAgICogc29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSB0byBnZXQgYWxsIHRoZSBzZXJ2aWNlcyBpbnRvIGEgXCJnZXQtcmVhZHlcIiBzdGF0ZSBiZWZvcmUgdGhleSBzdGFydFxuICAgKiBjb25uZWN0aW5nIHRvIHJlbW90ZSByZXNvdXJjZXMgb3IgZG9pbmcgYW55IGludGVuc2l2ZSBJL08gb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHByZXBhcmUoKSB7XG4gICAgaWYgKHRoaXMucHJlcGFyZWQpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgY29uc3QgY2F0YWxvZyA9IHRoaXMuI2NhdGFsb2dcbiAgICBjb25zdCB7IHNlcnZpY2VzLCBhY3Rpb25zLCBob29rcyB9ID0gY2F0YWxvZ1xuXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIGNvbnRhaW5lcl0gb2YgaG9va3MpIHtcbiAgICAgIGlmICghY29udGFpbmVyLkNvbXBvbmVudC5vYnNlcnZlcykge1xuICAgICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYEhvb2sgJHthbGlhc30gZG9lcyBub3QgaGF2ZSBzdGF0aWMgJ29ic2VydmVzJyBwcm9wZXJ0eWApXG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgb2JzZXJ2ZXJzIG9mIEF0bGFzIGl0c2VsZlxuICAgICAgaWYgKGNvbnRhaW5lci5Db21wb25lbnQub2JzZXJ2ZXMgPT09ICdhdGxhcycpIHtcbiAgICAgICAgdGhpcy4jb2JzZXJ2ZXJzLnNldChhbGlhcywgY29udGFpbmVyKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYWxsIGNvbXBvbmVudHMsIGluIHBhcmFsbGVsIPCfkqpcbiAgICB2b2lkIChhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAuLi5BcnJheS5mcm9tKGhvb2tzKS5tYXAoYXN5bmMgKFssIGNvbnRhaW5lcl0pID0+ICh7XG4gICAgICAgIGV4cG9zZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBhd2FpdCBjb250YWluZXIucHJlcGFyZSh7IGNhdGFsb2cgfSksXG4gICAgICB9KSksXG4gICAgICAuLi5BcnJheS5mcm9tKHNlcnZpY2VzKS5tYXAoYXN5bmMgKFthbGlhcywgY29udGFpbmVyXSkgPT4gKHtcbiAgICAgICAgZXhwb3NlOiBjb250YWluZXIuQ29tcG9uZW50LmludGVybmFsID8gZmFsc2UgOiAnc2VydmljZXMnLFxuICAgICAgICB2YWx1ZTogYXdhaXQgY29udGFpbmVyLnByZXBhcmUoeyBjYXRhbG9nIH0pLFxuICAgICAgICBhbGlhcyxcbiAgICAgIH0pKSxcbiAgICAgIC4uLkFycmF5LmZyb20oYWN0aW9ucykubWFwKGFzeW5jIChbYWxpYXMsIGNvbnRhaW5lcl0pID0+ICh7XG4gICAgICAgIGV4cG9zZTogY29udGFpbmVyLkNvbXBvbmVudC5pbnRlcm5hbCA/IGZhbHNlIDogJ2FjdGlvbnMnLFxuICAgICAgICB2YWx1ZTogYXdhaXQgY29udGFpbmVyLnByZXBhcmUoeyBjYXRhbG9nIH0pLFxuICAgICAgICBhbGlhcyxcbiAgICAgIH0pKSxcbiAgICBdKSlcbiAgICAgIC5maWx0ZXIocmVzdWx0ID0+IEJvb2xlYW4ocmVzdWx0LmV4cG9zZSkpXG4gICAgICAuZm9yRWFjaChyZXN1bHQgPT4gdGhpczo6ZXhwb3NlKHJlc3VsdC5leHBvc2UsIHJlc3VsdC5hbGlhcywgcmVzdWx0LnZhbHVlKSlcblxuICAgIHRoaXMuI3ByZXBhcmVkID0gdHJ1ZVxuICAgIGF3YWl0IHRoaXMuI29ic2VydmVyczo6ZGlzcGF0Y2goJ2FmdGVyUHJlcGFyZScsIHRoaXMpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGFsbCBzZXJ2aWNlc1xuICAgKlxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXM+fVxuICAgKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBzZXJ2aWNlcywgaG9va3MgfSA9IHRoaXMuI2NhdGFsb2dcblxuICAgIGF3YWl0IHRoaXMucHJlcGFyZSgpXG4gICAgYXdhaXQgdGhpcy4jb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYmVmb3JlU3RhcnQnLCB0aGlzKVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgLi4uQXJyYXkuZnJvbShob29rcyksXG4gICAgICAuLi5BcnJheS5mcm9tKGFjdGlvbnMpLFxuICAgIF0ubWFwKChbLCBjb250YWluZXJdKSA9PiBjb250YWluZXIuc3RhcnQoeyBob29rcyB9KSkpXG5cbiAgICAvLyBTdGFydCBhbGwgc2VydmljZXMsIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIGluc3RhbmNlIPCfkqpcbiAgICAvLyBPcmRlcmluZyBpcyBpbXBvcnRhbnQgaGVyZSEgU29tZSBzZXJ2aWNlcyBzaG91bGQgYmUgc3RhcnRlZCBhcyB0aGUgbGFzdCBvbmVzIGJlY2F1c2UgdGhleVxuICAgIC8vIGV4cG9zZSBzb21lIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIG91dHNpZGUgd29ybGQgYW5kIHN0YXJ0aW5nIHRob3NlIGJlZm9yZSBpZS4gYSBkYXRhYmFzZVxuICAgIC8vIHNlcnZpY2UgaXMgc3RhcnRlZCBtaWdodCBicmVhayBzdHVmZiFcbiAgICBmb3IgKGNvbnN0IFssIGNvbnRhaW5lcl0gb2Ygc2VydmljZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNvbnRhaW5lci5zdGFydCh7IGhvb2tzIH0pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gUm9sbCBiYWNrXG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcCgpXG4gICAgICAgICAgLy8gU2hpdCBqdXN0IGdvdCBzZXJpb3VzIPCfmLFcbiAgICAgICAgICAuY2F0Y2goc3RvcEVyciA9PiB2b2lkIHRoaXMubG9nLmZhdGFsKHsgZXJyOiBzdG9wRXJyIH0sICdhdGxhczpzdGFydDpyb2xsYmFjay1mYWlsdXJlJykpXG5cbiAgICAgICAgLy8gUmUtdGhyb3cgdGhlIG9yaWdpbmFsIGVycm9yIHdoaWNoIGNhdXNlZCBBdGxhcyB0byBmYWlsIHRvIHN0YXJ0XG4gICAgICAgIHRocm93IGVyclxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI3N0YXJ0ZWQgPSB0cnVlXG4gICAgYXdhaXQgdGhpcy4jb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYWZ0ZXJTdGFydCcsIHRoaXMpXG4gICAgdGhpcy5sb2cuaW5mbygnYXRsYXM6cmVhZHknKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIGFsbCBzZXJ2aWNlcywgdW5yZWdpc3RlciBhbGwgYWN0aW9ucyBhbmQgaG9va3MgYW5kIHVucHVibGlzaCBhbnkgQVBJcyBleHBvc2VkIGJ5IHRoZW1cbiAgICpcbiAgICogVGhpcyBwdXRzIHRoZSB3aG9sZSBhcHBsaWNhdGlvbiBpbnRvIGEgc3RhdGUgYXMgaXQgd2FzIGJlZm9yZSBgYXRsYXMucHJlcGFyZSgpYCBhbmQvb3JcbiAgICogYGF0bGFzLnN0YXJ0KClgIHdhcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIGNvbnN0IHsgc2VydmljZXMsIGFjdGlvbnMsIGhvb2tzIH0gPSB0aGlzLiNjYXRhbG9nXG5cbiAgICBhd2FpdCB0aGlzLiNvYnNlcnZlcnM6OmRpc3BhdGNoKCdiZWZvcmVTdG9wJywgdGhpcylcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIC4uLkFycmF5LmZyb20oaG9va3MpLFxuICAgICAgLi4uQXJyYXkuZnJvbShhY3Rpb25zKSxcbiAgICBdLm1hcCgoWywgY29udGFpbmVyXSkgPT4gY29udGFpbmVyLnN0b3AoKSkpXG5cbiAgICBsZXQgZXJyb3JcblxuICAgIC8vIFN0b3AgYWxsIHNlcnZpY2VzLCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIGluc3RhbmNlIPCfkqpcbiAgICAvLyBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoZSBtb3N0IGltcG9ydGFudCBzZXJ2aWNlcyBhcmUgc3RvcHBlZCBmaXJzdC5cbiAgICBmb3IgKGNvbnN0IFthbGlhcywgY29udGFpbmVyXSBvZiBBcnJheS5mcm9tKHNlcnZpY2VzKS5yZXZlcnNlKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlcnZpY2VzW2FsaWFzXVxuICAgICAgICBhd2FpdCBjb250YWluZXIuc3RvcCh7IGhvb2tzIH0pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyb3IgPSBlcnJcbiAgICAgICAgLy8gTGVhdmUgdGhpcyBzZXJ2aWNlIGFzIGlzIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHNlcnZpY2UuIFdlIHByb2JhYmx5IGNhbm5vdCBkbyBhbnl0aGluZyB0b1xuICAgICAgICAvLyBwcm9wZXJseSBzdG9wIHRoaXMgc2VydmljZS4g8J+ZgVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVucmVnaXN0ZXIgYWN0aW9uc1xuICAgIGZvciAoY29uc3QgW2FsaWFzXSBvZiBhY3Rpb25zKSB7XG4gICAgICBkZWxldGUgdGhpcy5hY3Rpb25zW2FsaWFzXVxuICAgIH1cblxuICAgIHRoaXMuI3N0YXJ0ZWQgPSBmYWxzZVxuICAgIHRoaXMuI3ByZXBhcmVkID0gZmFsc2VcblxuICAgIGF3YWl0IGhvb2tzOjpkaXNwYXRjaCgnYWZ0ZXJTdG9wJywgbnVsbClcbiAgICB0aGlzLmxvZy5pbmZvKCdhdGxhczpzdG9wcGVkJylcblxuICAgIC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciB0aHJvd24gaW4gb25lIG9mIHRoZSBzZXJ2aWNlcyBkdXJpbmcgLnN0b3AoKSwgcmUtdGhyb3cgaXQgbm93XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXRsYXNcbiJdfQ==

@@ -8,4 +8,2 @@ "use strict";

var _create = _interopRequireDefault(require("local-scope/create"));
var _errors = require("@atlas.js/errors");

@@ -19,2 +17,6 @@

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _classPrivateFieldGet(receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return privateMap.get(receiver); }
class ComponentContainer {

@@ -24,3 +26,10 @@ constructor(info, atlas) {

this.started = false;
_defineProperty(this, "started", false);
_defineProperty(this, "instance", null);
_observers.set(this, new Map());
_catalog.set(this, new Map());
this.type = info.type;

@@ -62,3 +71,2 @@ this.alias = info.alias;

const observers = new Map();
const config = (0, _lodash.defaultsDeep)(info.config, this.Component.defaults);

@@ -81,11 +89,16 @@

}),
component: resolve,
dispatch: _dispatch.default.bind(observers)
dispatch: (_context = _classPrivateFieldGet(this, _observers), _dispatch.default).bind(_context),
component: name => {
if (!_classPrivateFieldGet(this, _catalog).has(name)) {
throw new _errors.FrameworkError(`Alias for ${name} not defined`);
}
return _classPrivateFieldGet(this, _catalog).get(name).instance;
}
});
(_context = this.component, _create.default).call(_context).aliases = this.aliases;
(_context = this.component, _create.default).call(_context).observers = observers;
}
async prepare() {
async prepare(options) {
this.component.log.trace('prepare:before');
mkcatalog.call(this, _classPrivateFieldGet(this, _catalog), options);

@@ -95,5 +108,5 @@ switch (this.type) {

{
const instance = await this.component.prepare();
this.instance = await this.component.prepare();
this.component.log.trace('prepare:after');
return instance;
break;
}

@@ -105,9 +118,10 @@

this.component.log.trace('prepare:after');
return this.component;
this.instance = this.component;
break;
}
return this.instance;
}
async start(opts = {}) {
var _context2;
async start(opts) {
if (this.started) {

@@ -118,6 +132,5 @@ return this.component;

this.component.log.trace('start:before');
mkobservers.call(this, {
mkobservers.call(this, _classPrivateFieldGet(this, _observers), {
hooks: opts.hooks
});
const observers = (_context2 = this.component, _create.default).call(_context2).observers;

@@ -127,5 +140,7 @@ switch (this.type) {

await (async () => {
await _dispatch.default.call(observers, 'beforeStart', opts.instance);
await this.component.start(opts.instance);
await _dispatch.default.call(observers, 'afterStart', opts.instance);
var _context2;
await (_context2 = _classPrivateFieldGet(this, _observers), _dispatch.default).call(_context2, 'beforeStart', this.instance);
await this.component.start(this.instance);
await (_context2 = _classPrivateFieldGet(this, _observers), _dispatch.default).call(_context2, 'afterStart', this.instance);
})().catch(err => {

@@ -149,5 +164,3 @@ this.component.log.error({

async stop(opts = {}) {
var _context3;
async stop() {
if (!this.started) {

@@ -158,3 +171,2 @@ return;

this.component.log.trace('stop:before');
const observers = (_context3 = this.component, _create.default).call(_context3).observers;

@@ -164,5 +176,7 @@ switch (this.type) {

await (async () => {
await _dispatch.default.call(observers, 'beforeStop', opts.instance);
await this.component.stop(opts.instance);
await _dispatch.default.call(observers, 'afterStop', null);
var _context3;
await (_context3 = _classPrivateFieldGet(this, _observers), _dispatch.default).call(_context3, 'beforeStop', this.instance);
await this.component.stop(this.instance);
await (_context3 = _classPrivateFieldGet(this, _observers), _dispatch.default).call(_context3, 'afterStop', null);
})().catch(err => {

@@ -183,2 +197,7 @@ this.component.log.error({

_classPrivateFieldGet(this, _observers).clear();
_classPrivateFieldGet(this, _catalog).clear();
this.instance = null;
this.started = false;

@@ -189,12 +208,14 @@ }

function mkobservers({
var _observers = new WeakMap();
var _catalog = new WeakMap();
function mkobservers(observers, {
hooks
}) {
for (const [alias, container] of hooks) {
const target = (container.aliases || {})[container.Component.observes];
const target = container.aliases[container.Component.observes];
if (this.alias === target) {
var _context4;
(_context4 = this.component, _create.default).call(_context4).observers.set(alias, container);
observers.set(alias, container);
}

@@ -204,17 +225,29 @@ }

function resolve(name) {
const resolved = _create.default.call(this).aliases[name];
function mkcatalog(destination, {
catalog
}) {
for (const [alias, resolved] of Object.entries(this.aliases)) {
const [type] = alias.split(':');
if (!resolved) {
throw new _errors.FrameworkError(`Alias for ${name} not defined`);
}
const source = (() => {
switch (type) {
case 'service':
return catalog.services;
const [type] = name.split(':');
const component = this.atlas[`${type}s`][resolved];
case 'action':
return catalog.actions;
if (!component) {
throw new _errors.FrameworkError(`Unable to find ${type}:${resolved} aliased as ${name}`);
default:
throw new _errors.FrameworkError(`Invalid component type: ${type} used in alias ${alias}`);
}
})();
const dependency = source.get(this.aliases[alias]);
if (!dependency) {
throw new _errors.FrameworkError(`Unable to find ${type} ${resolved} aliased as ${alias}`);
}
destination.set(alias, dependency);
}
return component;
}

@@ -224,2 +257,2 @@

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudC1jb250YWluZXIubWpzIl0sIm5hbWVzIjpbIkNvbXBvbmVudENvbnRhaW5lciIsImNvbnN0cnVjdG9yIiwiaW5mbyIsImF0bGFzIiwic3RhcnRlZCIsInR5cGUiLCJhbGlhcyIsImFsaWFzZXMiLCJDb21wb25lbnQiLCJGcmFtZXdvcmtFcnJvciIsInByb3ZpZGVkIiwiT2JqZWN0Iiwia2V5cyIsInJlcXVpcmVkIiwicmVxdWlyZXMiLCJvYnNlcnZlcyIsInB1c2giLCJtaXNzaW5nIiwiZXh0cmEiLCJsZW5ndGgiLCJqb2luIiwib2JzZXJ2ZXJzIiwiTWFwIiwiY29uZmlnIiwiZGVmYXVsdHMiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZSIsIlZhbGlkYXRpb25FcnJvciIsImVycm9ycyIsImxvZyIsInRyYWNlIiwiY29tcG9uZW50IiwiY2hpbGQiLCJyZXNvbHZlIiwiZGlzcGF0Y2giLCJoaWRkZW4iLCJwcmVwYXJlIiwiaW5zdGFuY2UiLCJzdGFydCIsIm9wdHMiLCJta29ic2VydmVycyIsImhvb2tzIiwiY2F0Y2giLCJlcnIiLCJlcnJvciIsInN0b3AiLCJjb250YWluZXIiLCJ0YXJnZXQiLCJzZXQiLCJuYW1lIiwicmVzb2x2ZWQiLCJzcGxpdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUlBOztBQUlBOzs7O0FBT0EsTUFBTUEsa0JBQU4sQ0FBeUI7QUFvQnZCQyxjQUFZQyxJQUFaLEVBQWtCQyxLQUFsQixFQUF5QjtBQUFBOztBQUFBLFNBZnpCQyxPQWV5QixHQWZmLEtBZWU7QUFDdkIsU0FBS0MsSUFBTCxHQUFZSCxLQUFLRyxJQUFqQjtBQUNBLFNBQUtDLEtBQUwsR0FBYUosS0FBS0ksS0FBbEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVMLEtBQUtLLE9BQUwsSUFBZ0IsRUFBL0I7QUFDQSxTQUFLQyxTQUFMLEdBQWlCTixLQUFLTSxTQUF0Qjs7QUFFQSxRQUFJLE9BQU8sS0FBS0EsU0FBWixLQUEwQixVQUE5QixFQUEwQztBQUN4QyxZQUFNSCxPQUFPLE9BQU8sS0FBS0csU0FBekI7QUFDQSxZQUFNLElBQUlDLHNCQUFKLENBQW9CLGFBQVksS0FBS0osSUFBSyxJQUFHLEtBQUtDLEtBQU0sdUJBQXNCRCxJQUFLLEVBQW5GLENBQU47QUFDRDs7QUFHRCxVQUFNRSxVQUFVO0FBQ2RHLGdCQUFVQyxPQUFPQyxJQUFQLENBQVksS0FBS0wsT0FBakIsQ0FESTtBQUdkTSxnQkFBVSxDQUFDLElBQUcsS0FBS0wsU0FBTCxDQUFlTSxRQUFmLElBQTJCLEVBQTlCLENBQUQ7QUFISSxLQUFoQjs7QUFNQSxRQUFJLEtBQUtULElBQUwsS0FBYyxNQUFsQixFQUEwQjtBQUV4QixVQUFJLE9BQU8sS0FBS0csU0FBTCxDQUFlTyxRQUF0QixLQUFtQyxRQUF2QyxFQUFpRDtBQUMvQ1IsZ0JBQVFNLFFBQVIsQ0FBaUJHLElBQWpCLENBQXNCLEtBQUtSLFNBQUwsQ0FBZU8sUUFBckM7QUFDRDs7QUFHRCxVQUFJLEtBQUtQLFNBQUwsQ0FBZU8sUUFBZixLQUE0QixPQUFoQyxFQUF5QztBQUN2Q1IsZ0JBQVFHLFFBQVIsQ0FBaUJNLElBQWpCLENBQXNCLE9BQXRCO0FBQ0Q7QUFDRjs7QUFFRCxVQUFNQyxVQUFVLHdCQUFXVixRQUFRTSxRQUFuQixFQUE2Qk4sUUFBUUcsUUFBckMsQ0FBaEI7QUFDQSxVQUFNUSxRQUFRLHdCQUFXWCxRQUFRRyxRQUFuQixFQUE2QkgsUUFBUU0sUUFBckMsQ0FBZDs7QUFFQSxRQUFJSSxRQUFRRSxNQUFaLEVBQW9CO0FBQ2xCLFlBQU0sSUFBSVYsc0JBQUosQ0FBb0IsaUNBQWdDLEtBQUtILEtBQU0sS0FBSVcsUUFBUUcsSUFBUixDQUFhLElBQWIsQ0FBbUIsRUFBdEYsQ0FBTjtBQUNEOztBQUVELFFBQUlGLE1BQU1DLE1BQVYsRUFBa0I7QUFDaEIsWUFBTSxJQUFJVixzQkFBSixDQUFvQixrQ0FBaUMsS0FBS0gsS0FBTSxLQUFJWSxNQUFNRSxJQUFOLENBQVcsSUFBWCxDQUFpQixFQUFyRixDQUFOO0FBQ0Q7O0FBRUQsVUFBTUMsWUFBWSxJQUFJQyxHQUFKLEVBQWxCO0FBQ0EsVUFBTUMsU0FBUywwQkFBU3JCLEtBQUtxQixNQUFkLEVBQXNCLEtBQUtmLFNBQUwsQ0FBZWdCLFFBQXJDLENBQWY7O0FBRUEsUUFBSSxDQUFDdEIsS0FBS3VCLFNBQUwsQ0FBZUMsUUFBZixDQUF3QnhCLEtBQUtNLFNBQUwsQ0FBZWUsTUFBdkMsRUFBK0NBLE1BQS9DLENBQUwsRUFBNkQ7QUFDM0QsWUFBTSxJQUFJSSx1QkFBSixDQUFvQnpCLEtBQUt1QixTQUFMLENBQWVHLE1BQW5DLENBQU47QUFDRDs7QUFFRHpCLFVBQU0wQixHQUFOLENBQVVDLEtBQVYsQ0FBZ0I7QUFDZEMsaUJBQVcsS0FBS3pCLEtBREY7QUFFZGlCLGNBQVFyQixLQUFLcUIsTUFGQztBQUdkQyxnQkFBVSxLQUFLaEIsU0FBTCxDQUFlZ0I7QUFIWCxLQUFoQixFQUlHLGtCQUpIO0FBTUEsU0FBS08sU0FBTCxHQUFpQixJQUFJLEtBQUt2QixTQUFULENBQW1CO0FBQ2xDTCxXQURrQztBQUVsQ29CLFlBRmtDO0FBR2xDTSxXQUFLMUIsTUFBTTBCLEdBQU4sQ0FBVUcsS0FBVixDQUFnQjtBQUFFLFNBQUMsS0FBSzNCLElBQU4sR0FBYSxLQUFLQztBQUFwQixPQUFoQixDQUg2QjtBQUlsQ3lCLGlCQUFXRSxPQUp1QjtBQUtsQ0MsZ0JBQXFCQSxpQkFBckIsTUFBVWIsU0FBVjtBQUxrQyxLQUFuQixDQUFqQjtBQVNBLHFCQUFLVSxTQUFMLEVBQWdCSSxlQUFoQixpQkFBeUI1QixPQUF6QixHQUFtQyxLQUFLQSxPQUF4QztBQUNBLHFCQUFLd0IsU0FBTCxFQUFnQkksZUFBaEIsaUJBQXlCZCxTQUF6QixHQUFxQ0EsU0FBckM7QUFDRDs7QUFPRCxRQUFNZSxPQUFOLEdBQWdCO0FBQ2QsU0FBS0wsU0FBTCxDQUFlRixHQUFmLENBQW1CQyxLQUFuQixDQUF5QixnQkFBekI7O0FBRUEsWUFBUSxLQUFLekIsSUFBYjtBQUNFLFdBQUssU0FBTDtBQUFnQjtBQUNkLGdCQUFNZ0MsV0FBVyxNQUFNLEtBQUtOLFNBQUwsQ0FBZUssT0FBZixFQUF2QjtBQUNBLGVBQUtMLFNBQUwsQ0FBZUYsR0FBZixDQUFtQkMsS0FBbkIsQ0FBeUIsZUFBekI7QUFFQSxpQkFBT08sUUFBUDtBQUNEOztBQUNELFdBQUssTUFBTDtBQUNBLFdBQUssUUFBTDtBQUNBO0FBQ0UsYUFBS04sU0FBTCxDQUFlRixHQUFmLENBQW1CQyxLQUFuQixDQUF5QixlQUF6QjtBQUVBLGVBQU8sS0FBS0MsU0FBWjtBQVpKO0FBY0Q7O0FBVUQsUUFBTU8sS0FBTixDQUFZQyxPQUFPLEVBQW5CLEVBQXVCO0FBQUE7O0FBQ3JCLFFBQUksS0FBS25DLE9BQVQsRUFBa0I7QUFDaEIsYUFBTyxLQUFLMkIsU0FBWjtBQUNEOztBQUVELFNBQUtBLFNBQUwsQ0FBZUYsR0FBZixDQUFtQkMsS0FBbkIsQ0FBeUIsY0FBekI7QUFDTVUsZUFBTixZQUFrQjtBQUFFQyxhQUFPRixLQUFLRTtBQUFkLEtBQWxCO0FBRUEsVUFBTXBCLFlBQVksa0JBQUtVLFNBQUwsRUFBZ0JJLGVBQWhCLGtCQUF5QmQsU0FBM0M7O0FBRUEsWUFBUSxLQUFLaEIsSUFBYjtBQUNFLFdBQUssU0FBTDtBQUNFLGNBQU0sQ0FBQyxZQUFZO0FBQ2pCLGdCQUFpQjZCLGlCQUFYLGlCQUFvQixhQUFwQixFQUFtQ0ssS0FBS0YsUUFBeEMsQ0FBTjtBQUNBLGdCQUFNLEtBQUtOLFNBQUwsQ0FBZU8sS0FBZixDQUFxQkMsS0FBS0YsUUFBMUIsQ0FBTjtBQUNBLGdCQUFpQkgsaUJBQVgsaUJBQW9CLFlBQXBCLEVBQWtDSyxLQUFLRixRQUF2QyxDQUFOO0FBQ0QsU0FKSyxJQUtISyxLQUxHLENBS0dDLE9BQU87QUFDWixlQUFLWixTQUFMLENBQWVGLEdBQWYsQ0FBbUJlLEtBQW5CLENBQXlCO0FBQUVEO0FBQUYsV0FBekIsRUFBa0MsZUFBbEM7QUFDQSxnQkFBTUEsR0FBTjtBQUNELFNBUkcsQ0FBTjtBQVNBOztBQUVGLFdBQUssTUFBTDtBQUNBLFdBQUssUUFBTDtBQUNBO0FBQ0U7QUFoQko7O0FBbUJBLFNBQUt2QyxPQUFMLEdBQWUsSUFBZjtBQUVBLFdBQU8sS0FBSzJCLFNBQVo7QUFDRDs7QUFPRCxRQUFNYyxJQUFOLENBQVdOLE9BQU8sRUFBbEIsRUFBc0I7QUFBQTs7QUFDcEIsUUFBSSxDQUFDLEtBQUtuQyxPQUFWLEVBQW1CO0FBQ2pCO0FBQ0Q7O0FBRUQsU0FBSzJCLFNBQUwsQ0FBZUYsR0FBZixDQUFtQkMsS0FBbkIsQ0FBeUIsYUFBekI7QUFFQSxVQUFNVCxZQUFZLGtCQUFLVSxTQUFMLEVBQWdCSSxlQUFoQixrQkFBeUJkLFNBQTNDOztBQUVBLFlBQVEsS0FBS2hCLElBQWI7QUFDRSxXQUFLLFNBQUw7QUFDRSxjQUFNLENBQUMsWUFBWTtBQUNqQixnQkFBaUI2QixpQkFBWCxpQkFBb0IsWUFBcEIsRUFBa0NLLEtBQUtGLFFBQXZDLENBQU47QUFDQSxnQkFBTSxLQUFLTixTQUFMLENBQWVjLElBQWYsQ0FBb0JOLEtBQUtGLFFBQXpCLENBQU47QUFDQSxnQkFBaUJILGlCQUFYLGlCQUFvQixXQUFwQixFQUFpQyxJQUFqQyxDQUFOO0FBQ0QsU0FKSyxJQUtIUSxLQUxHLENBS0dDLE9BQU87QUFDWixlQUFLWixTQUFMLENBQWVGLEdBQWYsQ0FBbUJlLEtBQW5CLENBQXlCO0FBQUVEO0FBQUYsV0FBekIsRUFBa0MsY0FBbEM7QUFDQSxlQUFLdkMsT0FBTCxHQUFlLElBQWY7QUFDQSxnQkFBTXVDLEdBQU47QUFDRCxTQVRHLENBQU47QUFVQTs7QUFFRixXQUFLLE1BQUw7QUFDQSxXQUFLLFFBQUw7QUFDQTtBQUNFO0FBakJKOztBQW9CQSxTQUFLdkMsT0FBTCxHQUFlLEtBQWY7QUFDRDs7QUE1THNCOztBQXVNekIsU0FBU29DLFdBQVQsQ0FBcUI7QUFBRUM7QUFBRixDQUFyQixFQUFnQztBQUM5QixPQUFLLE1BQU0sQ0FBQ25DLEtBQUQsRUFBUXdDLFNBQVIsQ0FBWCxJQUFpQ0wsS0FBakMsRUFBd0M7QUFDdEMsVUFBTU0sU0FBUyxDQUFDRCxVQUFVdkMsT0FBVixJQUFxQixFQUF0QixFQUEwQnVDLFVBQVV0QyxTQUFWLENBQW9CTyxRQUE5QyxDQUFmOztBQUVBLFFBQUksS0FBS1QsS0FBTCxLQUFleUMsTUFBbkIsRUFBMkI7QUFBQTs7QUFDekIsd0JBQUtoQixTQUFMLEVBQWdCSSxlQUFoQixrQkFBeUJkLFNBQXpCLENBQW1DMkIsR0FBbkMsQ0FBdUMxQyxLQUF2QyxFQUE4Q3dDLFNBQTlDO0FBQ0Q7QUFDRjtBQUNGOztBQUdELFNBQVNiLE9BQVQsQ0FBaUJnQixJQUFqQixFQUF1QjtBQUNyQixRQUFNQyxXQUFpQmYsZUFBTixZQUFlNUIsT0FBZixDQUF1QjBDLElBQXZCLENBQWpCOztBQUVBLE1BQUksQ0FBQ0MsUUFBTCxFQUFlO0FBQ2IsVUFBTSxJQUFJekMsc0JBQUosQ0FBb0IsYUFBWXdDLElBQUssY0FBckMsQ0FBTjtBQUNEOztBQUVELFFBQU0sQ0FBQzVDLElBQUQsSUFBUzRDLEtBQUtFLEtBQUwsQ0FBVyxHQUFYLENBQWY7QUFFQSxRQUFNcEIsWUFBWSxLQUFLNUIsS0FBTCxDQUFZLEdBQUVFLElBQUssR0FBbkIsRUFBdUI2QyxRQUF2QixDQUFsQjs7QUFFQSxNQUFJLENBQUNuQixTQUFMLEVBQWdCO0FBQ2QsVUFBTSxJQUFJdEIsc0JBQUosQ0FBb0Isa0JBQWlCSixJQUFLLElBQUc2QyxRQUFTLGVBQWNELElBQUssRUFBekUsQ0FBTjtBQUNEOztBQUVELFNBQU9sQixTQUFQO0FBQ0Q7O2VBRWMvQixrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBoaWRkZW4gZnJvbSAnbG9jYWwtc2NvcGUvY3JlYXRlJ1xuaW1wb3J0IHtcbiAgRnJhbWV3b3JrRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcbmltcG9ydCB7XG4gIGRlZmF1bHRzRGVlcCBhcyBkZWZhdWx0cyxcbiAgZGlmZmVyZW5jZSxcbn0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IGRpc3BhdGNoIGZyb20gJy4vZGlzcGF0Y2gnXG5cbi8qKlxuICogVGhpcyBjbGFzcyBob2xkcyBhbmQgbWFuYWdlcyBhIGNvbXBvbmVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbXBvbmVudENvbnRhaW5lciB7XG4gIC8qKlxuICAgKiBJcyB0aGlzIGNvbXBvbmVudCBhbHJlYWR5IHN0YXJ0ZWQ/XG4gICAqIEB0eXBlICAgIHtCb29sZWFufVxuICAgKi9cbiAgc3RhcnRlZCA9IGZhbHNlXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgY29udGFpbmVyIGZvciBhIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICBpbmZvICAgICAgICAgICAgICBDb21wb25lbnQgaW5mb3JtYXRpb25cbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgICAgaW5mby50eXBlICAgICAgICAgVGhlIGNvbXBvbmVudCdzIHR5cGUgKHNlcnZpY2UsIGhvb2ssIGFjdGlvbilcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgICAgaW5mby5hbGlhcyAgICAgICAgVGhlIGNvbXBvbmVudCdzIHVzZXItc3BlY2lmaWVkIG5hbWUvYWxpYXNcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgICAgaW5mby5hbGlhc2VzICAgICAgQmluZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1c2VyIHRvIGxvY2F0ZSBvdGhlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzXG4gICAqIEBwYXJhbSAgICAge0NsYXNzfSAgICAgICAgIGluZm8uQ29tcG9uZW50ICAgIFRoZSBjb21wb25lbnQgY2xhc3NcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgICAgaW5mby5jb25maWcgICAgICAgVGhlIGNvbXBvbmVudCdzIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtICAgICB7QWp2fSAgICAgICAgICAgaW5mby52YWxpZGF0b3IgICAgQSBKU09OIHNjaGVtYSB2YWxpZGF0b3IgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7QXRsYXN9ICAgICAgICAgYXRsYXMgICAgICAgICAgICAgVGhlIEF0bGFzIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihpbmZvLCBhdGxhcykge1xuICAgIHRoaXMudHlwZSA9IGluZm8udHlwZVxuICAgIHRoaXMuYWxpYXMgPSBpbmZvLmFsaWFzXG4gICAgdGhpcy5hbGlhc2VzID0gaW5mby5hbGlhc2VzIHx8IHt9XG4gICAgdGhpcy5Db21wb25lbnQgPSBpbmZvLkNvbXBvbmVudFxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLkNvbXBvbmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiB0aGlzLkNvbXBvbmVudFxuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBDb21wb25lbnQgJHt0aGlzLnR5cGV9OiR7dGhpcy5hbGlhc30gbXVzdCBiZSBjbGFzcywgbm90ICR7dHlwZX1gKVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBjb21wb25lbnQgcmVjZWl2ZWQgYWxsIHRoZSBhbGlhc2VzIGl0IHJlcXVpcmVzXG4gICAgY29uc3QgYWxpYXNlcyA9IHtcbiAgICAgIHByb3ZpZGVkOiBPYmplY3Qua2V5cyh0aGlzLmFsaWFzZXMpLFxuICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgdG8gYXZvaWQgdGhlaXIgZnV0dXJlIG1vZGlmaWNhdGlvblxuICAgICAgcmVxdWlyZWQ6IFsuLi50aGlzLkNvbXBvbmVudC5yZXF1aXJlcyB8fCBbXV0sXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2hvb2snKSB7XG4gICAgICAvLyBSZXF1aXJlIG9ic2VydmVkIGNvbXBvbmVudHMgdG8gYmUgcmVzb2x2ZWQgdmlhIGFsaWFzXG4gICAgICBpZiAodHlwZW9mIHRoaXMuQ29tcG9uZW50Lm9ic2VydmVzID09PSAnc3RyaW5nJykge1xuICAgICAgICBhbGlhc2VzLnJlcXVpcmVkLnB1c2godGhpcy5Db21wb25lbnQub2JzZXJ2ZXMpXG4gICAgICB9XG5cbiAgICAgIC8vIERvIG5vdCByZXF1aXJlIGF0bGFzIHRvIGJlIGxpc3RlZCBpbiBhbGlhc2VzIC0gd2UgY2FuIHJlc29sdmUgaXQgYXV0b21hdGljYWxseVxuICAgICAgaWYgKHRoaXMuQ29tcG9uZW50Lm9ic2VydmVzID09PSAnYXRsYXMnKSB7XG4gICAgICAgIGFsaWFzZXMucHJvdmlkZWQucHVzaCgnYXRsYXMnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1pc3NpbmcgPSBkaWZmZXJlbmNlKGFsaWFzZXMucmVxdWlyZWQsIGFsaWFzZXMucHJvdmlkZWQpXG4gICAgY29uc3QgZXh0cmEgPSBkaWZmZXJlbmNlKGFsaWFzZXMucHJvdmlkZWQsIGFsaWFzZXMucmVxdWlyZWQpXG5cbiAgICBpZiAobWlzc2luZy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgJHt0aGlzLmFsaWFzfTogJHttaXNzaW5nLmpvaW4oJywgJyl9YClcbiAgICB9XG5cbiAgICBpZiAoZXh0cmEubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYFVubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCAke3RoaXMuYWxpYXN9OiAke2V4dHJhLmpvaW4oJywgJyl9YClcbiAgICB9XG5cbiAgICBjb25zdCBvYnNlcnZlcnMgPSBuZXcgTWFwKClcbiAgICBjb25zdCBjb25maWcgPSBkZWZhdWx0cyhpbmZvLmNvbmZpZywgdGhpcy5Db21wb25lbnQuZGVmYXVsdHMpXG5cbiAgICBpZiAoIWluZm8udmFsaWRhdG9yLnZhbGlkYXRlKGluZm8uQ29tcG9uZW50LmNvbmZpZywgY29uZmlnKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihpbmZvLnZhbGlkYXRvci5lcnJvcnMpXG4gICAgfVxuXG4gICAgYXRsYXMubG9nLnRyYWNlKHtcbiAgICAgIGNvbXBvbmVudDogdGhpcy5hbGlhcyxcbiAgICAgIGNvbmZpZzogaW5mby5jb25maWcsXG4gICAgICBkZWZhdWx0czogdGhpcy5Db21wb25lbnQuZGVmYXVsdHMsXG4gICAgfSwgJ2NvbXBvbmVudDpjb25maWcnKVxuXG4gICAgdGhpcy5jb21wb25lbnQgPSBuZXcgdGhpcy5Db21wb25lbnQoe1xuICAgICAgYXRsYXMsXG4gICAgICBjb25maWcsXG4gICAgICBsb2c6IGF0bGFzLmxvZy5jaGlsZCh7IFt0aGlzLnR5cGVdOiB0aGlzLmFsaWFzIH0pLFxuICAgICAgY29tcG9uZW50OiByZXNvbHZlLFxuICAgICAgZGlzcGF0Y2g6IG9ic2VydmVyczo6ZGlzcGF0Y2gsXG4gICAgfSlcblxuICAgIC8vIFNhdmUgdGhlIGFsaWFzZXMgZm9yIHRoaXMgY29tcG9uZW50XG4gICAgdGhpcy5jb21wb25lbnQ6OmhpZGRlbigpLmFsaWFzZXMgPSB0aGlzLmFsaWFzZXNcbiAgICB0aGlzLmNvbXBvbmVudDo6aGlkZGVuKCkub2JzZXJ2ZXJzID0gb2JzZXJ2ZXJzXG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBwcmVwYXJlKCkge1xuICAgIHRoaXMuY29tcG9uZW50LmxvZy50cmFjZSgncHJlcGFyZTpiZWZvcmUnKVxuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3NlcnZpY2UnOiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgdGhpcy5jb21wb25lbnQucHJlcGFyZSgpXG4gICAgICAgIHRoaXMuY29tcG9uZW50LmxvZy50cmFjZSgncHJlcGFyZTphZnRlcicpXG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlXG4gICAgICB9XG4gICAgICBjYXNlICdob29rJzpcbiAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNvbXBvbmVudC5sb2cudHJhY2UoJ3ByZXBhcmU6YWZ0ZXInKVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cz17fSAgICAgICAgIEFkZGl0aW9uYWwgb3B0aW9uc1xuICAgKiBAcGFyYW0gICAgIHtNYXB9ICAgICAgIG9wdHMuaG9va3MgICAgICBIb29rcyBhdmFpbGFibGUgaW4gdGhlIGFwcGxpY2F0aW9uXG4gICAqIEBwYXJhbSAgICAge2FueX0gICAgICAgb3B0cy5pbnN0YW5jZSAgIFRoZSBzZXJ2aWNlJ3MgZXhwb3NlZCBpbnN0YW5jZVxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXMuY29tcG9uZW50Pn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KG9wdHMgPSB7fSkge1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFxuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50LmxvZy50cmFjZSgnc3RhcnQ6YmVmb3JlJylcbiAgICB0aGlzOjpta29ic2VydmVycyh7IGhvb2tzOiBvcHRzLmhvb2tzIH0pXG5cbiAgICBjb25zdCBvYnNlcnZlcnMgPSB0aGlzLmNvbXBvbmVudDo6aGlkZGVuKCkub2JzZXJ2ZXJzXG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgIGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYmVmb3JlU3RhcnQnLCBvcHRzLmluc3RhbmNlKVxuICAgICAgICAgIGF3YWl0IHRoaXMuY29tcG9uZW50LnN0YXJ0KG9wdHMuaW5zdGFuY2UpXG4gICAgICAgICAgYXdhaXQgb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYWZ0ZXJTdGFydCcsIG9wdHMuaW5zdGFuY2UpXG4gICAgICAgIH0pKClcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmxvZy5lcnJvcih7IGVyciB9LCAnc3RhcnQ6ZmFpbHVyZScpXG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdob29rJzpcbiAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZCA9IHRydWVcblxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cz17fSAgICAgICAgIEFkZGl0aW9uYWwgb3B0aW9uc1xuICAgKiBAcGFyYW0gICAgIHthbnl9ICAgICAgIG9wdHMuaW5zdGFuY2UgICBUaGUgc2VydmljZSdzIGV4cG9zZWQgaW5zdGFuY2VcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0b3Aob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50LmxvZy50cmFjZSgnc3RvcDpiZWZvcmUnKVxuXG4gICAgY29uc3Qgb2JzZXJ2ZXJzID0gdGhpcy5jb21wb25lbnQ6OmhpZGRlbigpLm9ic2VydmVyc1xuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgICBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IG9ic2VydmVyczo6ZGlzcGF0Y2goJ2JlZm9yZVN0b3AnLCBvcHRzLmluc3RhbmNlKVxuICAgICAgICAgIGF3YWl0IHRoaXMuY29tcG9uZW50LnN0b3Aob3B0cy5pbnN0YW5jZSlcbiAgICAgICAgICBhd2FpdCBvYnNlcnZlcnM6OmRpc3BhdGNoKCdhZnRlclN0b3AnLCBudWxsKVxuICAgICAgICB9KSgpXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5sb2cuZXJyb3IoeyBlcnIgfSwgJ3N0b3A6ZmFpbHVyZScpXG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlXG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdob29rJzpcbiAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kIGFsbCBob29rcyB3aGljaCB3YW50IHRvIG9ic2VydmUgdGhpcyBjb21wb25lbnQncyBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgIG9wdHMgICAgICAgICAgRnVuY3Rpb24gcGFyYW1ldGVyc1xuICogQHBhcmFtICAgICB7TWFwfSAgICAgICAgIG9wdHMuaG9va3MgICAgQWxsIGhvb2tzIGtub3duIHRvIEF0bGFzXG4gKiBAcmV0dXJuICAgIHt2b2lkfVxuICovXG5mdW5jdGlvbiBta29ic2VydmVycyh7IGhvb2tzIH0pIHtcbiAgZm9yIChjb25zdCBbYWxpYXMsIGNvbnRhaW5lcl0gb2YgaG9va3MpIHtcbiAgICBjb25zdCB0YXJnZXQgPSAoY29udGFpbmVyLmFsaWFzZXMgfHwge30pW2NvbnRhaW5lci5Db21wb25lbnQub2JzZXJ2ZXNdXG5cbiAgICBpZiAodGhpcy5hbGlhcyA9PT0gdGFyZ2V0KSB7XG4gICAgICB0aGlzLmNvbXBvbmVudDo6aGlkZGVuKCkub2JzZXJ2ZXJzLnNldChhbGlhcywgY29udGFpbmVyKVxuICAgIH1cbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHJlc29sdmUobmFtZSkge1xuICBjb25zdCByZXNvbHZlZCA9IHRoaXM6OmhpZGRlbigpLmFsaWFzZXNbbmFtZV1cblxuICBpZiAoIXJlc29sdmVkKSB7XG4gICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBBbGlhcyBmb3IgJHtuYW1lfSBub3QgZGVmaW5lZGApXG4gIH1cblxuICBjb25zdCBbdHlwZV0gPSBuYW1lLnNwbGl0KCc6JylcbiAgLy8gVXNlIGEgcGx1cmFsIGZvcm0gb2YgdGhlIGNvbXBvbmVudCB0eXBlLCBpZS4sIGFjdGlvbiAtPiBhY3Rpb25zLCBzZXJ2aWNlIC0+IHNlcnZpY2VzIGV0Yy5cbiAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5hdGxhc1tgJHt0eXBlfXNgXVtyZXNvbHZlZF1cblxuICBpZiAoIWNvbXBvbmVudCkge1xuICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgVW5hYmxlIHRvIGZpbmQgJHt0eXBlfToke3Jlc29sdmVkfSBhbGlhc2VkIGFzICR7bmFtZX1gKVxuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnRDb250YWluZXJcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudC1jb250YWluZXIubWpzIl0sIm5hbWVzIjpbIkNvbXBvbmVudENvbnRhaW5lciIsImNvbnN0cnVjdG9yIiwiaW5mbyIsImF0bGFzIiwiTWFwIiwidHlwZSIsImFsaWFzIiwiYWxpYXNlcyIsIkNvbXBvbmVudCIsIkZyYW1ld29ya0Vycm9yIiwicHJvdmlkZWQiLCJPYmplY3QiLCJrZXlzIiwicmVxdWlyZWQiLCJyZXF1aXJlcyIsIm9ic2VydmVzIiwicHVzaCIsIm1pc3NpbmciLCJleHRyYSIsImxlbmd0aCIsImpvaW4iLCJjb25maWciLCJkZWZhdWx0cyIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwiVmFsaWRhdGlvbkVycm9yIiwiZXJyb3JzIiwibG9nIiwidHJhY2UiLCJjb21wb25lbnQiLCJjaGlsZCIsImRpc3BhdGNoIiwibmFtZSIsImhhcyIsImdldCIsImluc3RhbmNlIiwicHJlcGFyZSIsIm9wdGlvbnMiLCJta2NhdGFsb2ciLCJzdGFydCIsIm9wdHMiLCJzdGFydGVkIiwibWtvYnNlcnZlcnMiLCJob29rcyIsImNhdGNoIiwiZXJyIiwiZXJyb3IiLCJzdG9wIiwiY2xlYXIiLCJvYnNlcnZlcnMiLCJjb250YWluZXIiLCJ0YXJnZXQiLCJzZXQiLCJkZXN0aW5hdGlvbiIsImNhdGFsb2ciLCJyZXNvbHZlZCIsImVudHJpZXMiLCJzcGxpdCIsInNvdXJjZSIsInNlcnZpY2VzIiwiYWN0aW9ucyIsImRlcGVuZGVuY3kiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFJQTs7QUFJQTs7Ozs7Ozs7QUFPQSxNQUFNQSxrQkFBTixDQUF5QjtBQXlCdkJDLGNBQVlDLElBQVosRUFBa0JDLEtBQWxCLEVBQXlCO0FBQUE7O0FBQUEscUNBcEJmLEtBb0JlOztBQUFBLHNDQWxCZCxJQWtCYzs7QUFBQSx5QkFoQlosSUFBSUMsR0FBSixFQWdCWTs7QUFBQSx1QkFmZCxJQUFJQSxHQUFKLEVBZWM7O0FBQ3ZCLFNBQUtDLElBQUwsR0FBWUgsS0FB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WUFBTSxJQUFJcEQsc0JBQUosQ0FBb0Isa0JBQWlCSixJQUFLLElBQUdrRCxRQUFTLGVBQWNqRCxLQUFNLEVBQTFFLENBQU47QUFDRDs7QUFFRCtDLGdCQUFZRCxHQUFaLENBQWdCOUMsS0FBaEIsRUFBdUJ1RCxVQUF2QjtBQUNEO0FBQ0Y7O2VBRWM3RCxrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEZyYW1ld29ya0Vycm9yLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQge1xuICBkZWZhdWx0c0RlZXAgYXMgZGVmYXVsdHMsXG4gIGRpZmZlcmVuY2UsXG59IGZyb20gJ2xvZGFzaCdcbmltcG9ydCBkaXNwYXRjaCBmcm9tICcuL2Rpc3BhdGNoJ1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaG9sZHMgYW5kIG1hbmFnZXMgYSBjb21wb25lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDb21wb25lbnRDb250YWluZXIge1xuICAvKipcbiAgICogSXMgdGhpcyBjb21wb25lbnQgYWxyZWFkeSBzdGFydGVkP1xuICAgKiBAdHlwZSAgICB7Qm9vbGVhbn1cbiAgICovXG4gIHN0YXJ0ZWQgPSBmYWxzZVxuXG4gIGluc3RhbmNlID0gbnVsbFxuXG4gICNvYnNlcnZlcnMgPSBuZXcgTWFwKClcbiAgI2NhdGFsb2cgPSBuZXcgTWFwKClcblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBjb250YWluZXIgZm9yIGEgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgICAgIGluZm8gICAgICAgICAgICAgIENvbXBvbmVudCBpbmZvcm1hdGlvblxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgICBpbmZvLnR5cGUgICAgICAgICBUaGUgY29tcG9uZW50J3MgdHlwZSAoc2VydmljZSwgaG9vaywgYWN0aW9uKVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgICBpbmZvLmFsaWFzICAgICAgICBUaGUgY29tcG9uZW50J3MgdXNlci1zcGVjaWZpZWQgbmFtZS9hbGlhc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICBpbmZvLmFsaWFzZXMgICAgICBCaW5kaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIHVzZXIgdG8gbG9jYXRlIG90aGVyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNcbiAgICogQHBhcmFtICAgICB7Q2xhc3N9ICAgICAgICAgaW5mby5Db21wb25lbnQgICAgVGhlIGNvbXBvbmVudCBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICBpbmZvLmNvbmZpZyAgICAgICBUaGUgY29tcG9uZW50J3MgdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gICAgIHtBanZ9ICAgICAgICAgICBpbmZvLnZhbGlkYXRvciAgICBBIEpTT04gc2NoZW1hIHZhbGlkYXRvciBpbnN0YW5jZVxuICAgKiBAcGFyYW0gICAgIHtBdGxhc30gICAgICAgICBhdGxhcyAgICAgICAgICAgICBUaGUgQXRsYXMgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKGluZm8sIGF0bGFzKSB7XG4gICAgdGhpcy50eXBlID0gaW5mby50eXBlXG4gICAgdGhpcy5hbGlhcyA9IGluZm8uYWxpYXNcbiAgICB0aGlzLmFsaWFzZXMgPSBpbmZvLmFsaWFzZXMgfHwge31cbiAgICB0aGlzLkNvbXBvbmVudCA9IGluZm8uQ29tcG9uZW50XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuQ29tcG9uZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHRoaXMuQ29tcG9uZW50XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYENvbXBvbmVudCAke3RoaXMudHlwZX06JHt0aGlzLmFsaWFzfSBtdXN0IGJlIGNsYXNzLCBub3QgJHt0eXBlfWApXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGNvbXBvbmVudCByZWNlaXZlZCBhbGwgdGhlIGFsaWFzZXMgaXQgcmVxdWlyZXNcbiAgICBjb25zdCBhbGlhc2VzID0ge1xuICAgICAgcHJvdmlkZWQ6IE9iamVjdC5rZXlzKHRoaXMuYWxpYXNlcyksXG4gICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyB0byBhdm9pZCB0aGVpciBmdXR1cmUgbW9kaWZpY2F0aW9uXG4gICAgICByZXF1aXJlZDogWy4uLnRoaXMuQ29tcG9uZW50LnJlcXVpcmVzIHx8IFtdXSxcbiAgICB9XG5cbiAgICBpZiAodGhpcy50eXBlID09PSAnaG9vaycpIHtcbiAgICAgIC8vIFJlcXVpcmUgb2JzZXJ2ZWQgY29tcG9uZW50cyB0byBiZSByZXNvbHZlZCB2aWEgYWxpYXNcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5Db21wb25lbnQub2JzZXJ2ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGFsaWFzZXMucmVxdWlyZWQucHVzaCh0aGlzLkNvbXBvbmVudC5vYnNlcnZlcylcbiAgICAgIH1cblxuICAgICAgLy8gRG8gbm90IHJlcXVpcmUgYXRsYXMgdG8gYmUgbGlzdGVkIGluIGFsaWFzZXMgLSB3ZSBjYW4gcmVzb2x2ZSBpdCBhdXRvbWF0aWNhbGx5XG4gICAgICBpZiAodGhpcy5Db21wb25lbnQub2JzZXJ2ZXMgPT09ICdhdGxhcycpIHtcbiAgICAgICAgYWxpYXNlcy5wcm92aWRlZC5wdXNoKCdhdGxhcycpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWlzc2luZyA9IGRpZmZlcmVuY2UoYWxpYXNlcy5yZXF1aXJlZCwgYWxpYXNlcy5wcm92aWRlZClcbiAgICBjb25zdCBleHRyYSA9IGRpZmZlcmVuY2UoYWxpYXNlcy5wcm92aWRlZCwgYWxpYXNlcy5yZXF1aXJlZClcblxuICAgIGlmIChtaXNzaW5nLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBNaXNzaW5nIGFsaWFzZXMgZm9yIGNvbXBvbmVudCAke3RoaXMuYWxpYXN9OiAke21pc3Npbmcuam9pbignLCAnKX1gKVxuICAgIH1cblxuICAgIGlmIChleHRyYS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgVW5uZWVkZWQgYWxpYXNlcyBmb3IgY29tcG9uZW50ICR7dGhpcy5hbGlhc306ICR7ZXh0cmEuam9pbignLCAnKX1gKVxuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IGRlZmF1bHRzKGluZm8uY29uZmlnLCB0aGlzLkNvbXBvbmVudC5kZWZhdWx0cylcblxuICAgIGlmICghaW5mby52YWxpZGF0b3IudmFsaWRhdGUoaW5mby5Db21wb25lbnQuY29uZmlnLCBjb25maWcpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGluZm8udmFsaWRhdG9yLmVycm9ycylcbiAgICB9XG5cbiAgICBhdGxhcy5sb2cudHJhY2Uoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLmFsaWFzLFxuICAgICAgY29uZmlnOiBpbmZvLmNvbmZpZyxcbiAgICAgIGRlZmF1bHRzOiB0aGlzLkNvbXBvbmVudC5kZWZhdWx0cyxcbiAgICB9LCAnY29tcG9uZW50OmNvbmZpZycpXG5cbiAgICB0aGlzLmNvbXBvbmVudCA9IG5ldyB0aGlzLkNvbXBvbmVudCh7XG4gICAgICBhdGxhcyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGxvZzogYXRsYXMubG9nLmNoaWxkKHsgW3RoaXMudHlwZV06IHRoaXMuYWxpYXMgfSksXG4gICAgICBkaXNwYXRjaDogdGhpcy4jb2JzZXJ2ZXJzOjpkaXNwYXRjaCxcbiAgICAgIGNvbXBvbmVudDogbmFtZSA9PiB7XG4gICAgICAgIGlmICghdGhpcy4jY2F0YWxvZy5oYXMobmFtZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYEFsaWFzIGZvciAke25hbWV9IG5vdCBkZWZpbmVkYClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLiNjYXRhbG9nLmdldChuYW1lKS5pbnN0YW5jZVxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICAgIG9wdGlvbnMgICAgICAgICAgIElucHV0IG9wdGlvbnNcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgICAgICBvcHRpb25zLmNhdGFsb2cgICBBdGxhcyBjYXRhbG9nIG9mIGFsbCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBwcmVwYXJlKG9wdGlvbnMpIHtcbiAgICB0aGlzLmNvbXBvbmVudC5sb2cudHJhY2UoJ3ByZXBhcmU6YmVmb3JlJylcblxuICAgIHRoaXM6Om1rY2F0YWxvZyh0aGlzLiNjYXRhbG9nLCBvcHRpb25zKVxuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3NlcnZpY2UnOiB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBhd2FpdCB0aGlzLmNvbXBvbmVudC5wcmVwYXJlKClcbiAgICAgICAgdGhpcy5jb21wb25lbnQubG9nLnRyYWNlKCdwcmVwYXJlOmFmdGVyJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2hvb2snOlxuICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuY29tcG9uZW50LmxvZy50cmFjZSgncHJlcGFyZTphZnRlcicpXG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluc3RhbmNlXG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMgICAgICAgICAgICBBZGRpdGlvbmFsIG9wdGlvbnNcbiAgICogQHBhcmFtICAgICB7TWFwfSAgICAgICBvcHRzLmhvb2tzICAgICAgSG9va3MgYXZhaWxhYmxlIGluIHRoZSBhcHBsaWNhdGlvblxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXMuY29tcG9uZW50Pn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KG9wdHMpIHtcbiAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudC5sb2cudHJhY2UoJ3N0YXJ0OmJlZm9yZScpXG4gICAgdGhpczo6bWtvYnNlcnZlcnModGhpcy4jb2JzZXJ2ZXJzLCB7IGhvb2tzOiBvcHRzLmhvb2tzIH0pXG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgIGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy4jb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYmVmb3JlU3RhcnQnLCB0aGlzLmluc3RhbmNlKVxuICAgICAgICAgIGF3YWl0IHRoaXMuY29tcG9uZW50LnN0YXJ0KHRoaXMuaW5zdGFuY2UpXG4gICAgICAgICAgYXdhaXQgdGhpcy4jb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYWZ0ZXJTdGFydCcsIHRoaXMuaW5zdGFuY2UpXG4gICAgICAgIH0pKClcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmxvZy5lcnJvcih7IGVyciB9LCAnc3RhcnQ6ZmFpbHVyZScpXG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdob29rJzpcbiAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZCA9IHRydWVcblxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgdGhpcyBjb21wb25lbnQgYW5kIGNsZWFuIHVwIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlc1xuICAgKlxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgc3RvcCgpIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnQubG9nLnRyYWNlKCdzdG9wOmJlZm9yZScpXG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgIGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy4jb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYmVmb3JlU3RvcCcsIHRoaXMuaW5zdGFuY2UpXG4gICAgICAgICAgYXdhaXQgdGhpcy5jb21wb25lbnQuc3RvcCh0aGlzLmluc3RhbmNlKVxuICAgICAgICAgIGF3YWl0IHRoaXMuI29ic2VydmVyczo6ZGlzcGF0Y2goJ2FmdGVyU3RvcCcsIG51bGwpXG4gICAgICAgIH0pKClcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmxvZy5lcnJvcih7IGVyciB9LCAnc3RvcDpmYWlsdXJlJylcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWVcbiAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ2hvb2snOlxuICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgdGhpcy4jb2JzZXJ2ZXJzLmNsZWFyKClcbiAgICB0aGlzLiNjYXRhbG9nLmNsZWFyKClcbiAgICB0aGlzLmluc3RhbmNlID0gbnVsbFxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kIGFsbCBob29rcyB3aGljaCB3YW50IHRvIG9ic2VydmUgdGhpcyBjb21wb25lbnQncyBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7TWFwfSAgICAgICAgIG9ic2VydmVycyAgICAgVGhlIG9ic2VydmVycyB0byBjaGVja1xuICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgIG9wdHMgICAgICAgICAgRnVuY3Rpb24gcGFyYW1ldGVyc1xuICogQHBhcmFtICAgICB7TWFwfSAgICAgICAgIG9wdHMuaG9va3MgICAgQWxsIGhvb2tzIGtub3duIHRvIEF0bGFzXG4gKiBAcmV0dXJuICAgIHt2b2lkfVxuICovXG5mdW5jdGlvbiBta29ic2VydmVycyhvYnNlcnZlcnMsIHsgaG9va3MgfSkge1xuICBmb3IgKGNvbnN0IFthbGlhcywgY29udGFpbmVyXSBvZiBob29rcykge1xuICAgIGNvbnN0IHRhcmdldCA9IGNvbnRhaW5lci5hbGlhc2VzW2NvbnRhaW5lci5Db21wb25lbnQub2JzZXJ2ZXNdXG5cbiAgICBpZiAodGhpcy5hbGlhcyA9PT0gdGFyZ2V0KSB7XG4gICAgICBvYnNlcnZlcnMuc2V0KGFsaWFzLCBjb250YWluZXIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1rY2F0YWxvZyhkZXN0aW5hdGlvbiwgeyBjYXRhbG9nIH0pIHtcbiAgZm9yIChjb25zdCBbYWxpYXMsIHJlc29sdmVkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmFsaWFzZXMpKSB7XG4gICAgY29uc3QgW3R5cGVdID0gYWxpYXMuc3BsaXQoJzonKVxuICAgIGNvbnN0IHNvdXJjZSA9ICgoKSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnc2VydmljZSc6IHJldHVybiBjYXRhbG9nLnNlcnZpY2VzXG4gICAgICAgIGNhc2UgJ2FjdGlvbic6IHJldHVybiBjYXRhbG9nLmFjdGlvbnNcbiAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBJbnZhbGlkIGNvbXBvbmVudCB0eXBlOiAke3R5cGV9IHVzZWQgaW4gYWxpYXMgJHthbGlhc31gKVxuICAgICAgfVxuICAgIH0pKClcblxuICAgIGNvbnN0IGRlcGVuZGVuY3kgPSBzb3VyY2UuZ2V0KHRoaXMuYWxpYXNlc1thbGlhc10pXG5cbiAgICBpZiAoIWRlcGVuZGVuY3kpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgVW5hYmxlIHRvIGZpbmQgJHt0eXBlfSAke3Jlc29sdmVkfSBhbGlhc2VkIGFzICR7YWxpYXN9YClcbiAgICB9XG5cbiAgICBkZXN0aW5hdGlvbi5zZXQoYWxpYXMsIGRlcGVuZGVuY3kpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50Q29udGFpbmVyXG4iXX0=

@@ -24,4 +24,2 @@ "use strict";

await Promise.all(Array.from(tasks.values()));
for (const [hook, task] of tasks) {

@@ -33,2 +31,4 @@ task.catch(err => void hook.component.log.error({

}
await Promise.all(Array.from(tasks.values())).catch(() => {});
}

@@ -38,2 +38,2 @@

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRpc3BhdGNoLm1qcyJdLCJuYW1lcyI6WyJkaXNwYXRjaCIsImV2ZW50Iiwic3ViamVjdCIsInRhc2tzIiwiTWFwIiwiaG9vayIsImNvbXBvbmVudCIsImxvZyIsImRlYnVnIiwic2V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJhbGwiLCJBcnJheSIsImZyb20iLCJ2YWx1ZXMiLCJ0YXNrIiwiY2F0Y2giLCJlcnIiLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVlBLGVBQWVBLFFBQWYsQ0FBd0JDLEtBQXhCLEVBQStCQyxPQUEvQixFQUF3QztBQUN0QyxRQUFNQyxRQUFRLElBQUlDLEdBQUosRUFBZDs7QUFFQSxPQUFLLE1BQU0sR0FBR0MsSUFBSCxDQUFYLElBQXVCLElBQXZCLEVBQTZCO0FBRTNCLFFBQUksT0FBT0EsS0FBS0MsU0FBTCxDQUFlTCxLQUFmLENBQVAsS0FBaUMsVUFBckMsRUFBaUQ7QUFDL0NJLFdBQUtDLFNBQUwsQ0FBZUMsR0FBZixDQUFtQkMsS0FBbkIsQ0FBeUI7QUFBRVA7QUFBRixPQUF6QixFQUFvQyxZQUFwQztBQUNBRSxZQUFNTSxHQUFOLENBQVVKLElBQVYsRUFBZ0JLLFFBQVFDLE9BQVIsQ0FBZ0JOLEtBQUtDLFNBQUwsQ0FBZUwsS0FBZixFQUFzQkMsT0FBdEIsQ0FBaEIsQ0FBaEI7QUFDRCxLQUhELE1BR087QUFDTEcsV0FBS0MsU0FBTCxDQUFlQyxHQUFmLENBQW1CQyxLQUFuQixDQUF5QjtBQUFFUDtBQUFGLE9BQXpCLEVBQW9DLDRCQUFwQztBQUNEO0FBQ0Y7O0FBRUQsUUFBTVMsUUFBUUUsR0FBUixDQUFZQyxNQUFNQyxJQUFOLENBQVdYLE1BQU1ZLE1BQU4sRUFBWCxDQUFaLENBQU47O0FBS0EsT0FBSyxNQUFNLENBQUNWLElBQUQsRUFBT1csSUFBUCxDQUFYLElBQTJCYixLQUEzQixFQUFrQztBQUNoQ2EsU0FBS0MsS0FBTCxDQUFXQyxPQUFPLEtBQUtiLEtBQUtDLFNBQUwsQ0FBZUMsR0FBZixDQUFtQlksS0FBbkIsQ0FBeUI7QUFBRUQsU0FBRjtBQUFPakI7QUFBUCxLQUF6QixFQUF5QyxvQkFBekMsQ0FBdkI7QUFDRDtBQUNGOztlQUVjRCxRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEaXNwYXRjaCBhbiBldmVudCB0byBob29rc1xuICpcbiAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgdmFyaWFibGUgbnVtYmVyIG9mIGV2ZW50cyB0byBiZSBkaXNwYXRjaGVkIHRvIGhvb2tzXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBldmVudCdzIG5hbWVcbiAqIEBwYXJhbSAgICAge21peGVkfSAgICAgc3ViamVjdCAgIFRoZSB0aGluZyB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlIGV2ZW50IChpZS4gYSBjb21wb25lbnQpXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBnaXZlbiB0byB0aGUgZXZlbnQgaGFuZGxlciBvbiBpbnB1dC5cbiAqIEB0aGlzICAgICAgTWFwXG4gKiBAcmV0dXJuICAgIHtQcm9taXNlPHZvaWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBkaXNwYXRjaChldmVudCwgc3ViamVjdCkge1xuICBjb25zdCB0YXNrcyA9IG5ldyBNYXAoKVxuXG4gIGZvciAoY29uc3QgWywgaG9va10gb2YgdGhpcykge1xuICAgIC8vIElzIHRoaXMgaG9vayBsaXN0ZW5pbmcgZm9yIHRoZSBldmVudCBiZWluZyBkaXNwYXRjaGVkP1xuICAgIGlmICh0eXBlb2YgaG9vay5jb21wb25lbnRbZXZlbnRdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBob29rLmNvbXBvbmVudC5sb2cuZGVidWcoeyBldmVudCB9LCAnaG9vazpldmVudCcpXG4gICAgICB0YXNrcy5zZXQoaG9vaywgUHJvbWlzZS5yZXNvbHZlKGhvb2suY29tcG9uZW50W2V2ZW50XShzdWJqZWN0KSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGhvb2suY29tcG9uZW50LmxvZy5kZWJ1Zyh7IGV2ZW50IH0sICdob29rOmV2ZW50Om5vdC1pbXBsZW1lbnRlZCcpXG4gICAgfVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoQXJyYXkuZnJvbSh0YXNrcy52YWx1ZXMoKSkpXG5cbiAgLy8gRW5zdXJlIG5vIHVuY2F1Z2h0IGVycm9yIGVzY2FwZXMgZnJvbSB0aGlzIHBsYWNlXG4gIC8vIFRoaXMgdXRpbGlzZXMgdGhlIGZhY3QgdGhhdCB3ZSBjYW4gY2F0Y2ggYW55IFByb21pc2UtcmVsYXRlZCBlcnJvcnMgYnkgYXR0YWNoaW5nIGEgLmNhdGNoIGJsb2NrXG4gIC8vIHRvIHRoZSBwcm9taXNlLCBldmVuIGlmIHRoZSBwcm9taXNlIGJvZHkgaGFzIGFscmVhZHkgZXhlY3V0ZWQuIPCfkqFcbiAgZm9yIChjb25zdCBbaG9vaywgdGFza10gb2YgdGFza3MpIHtcbiAgICB0YXNrLmNhdGNoKGVyciA9PiB2b2lkIGhvb2suY29tcG9uZW50LmxvZy5lcnJvcih7IGVyciwgZXZlbnQgfSwgJ2hvb2s6ZXZlbnQ6ZmFpbHVyZScpKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRpc3BhdGNoLm1qcyJdLCJuYW1lcyI6WyJkaXNwYXRjaCIsImV2ZW50Iiwic3ViamVjdCIsInRhc2tzIiwiTWFwIiwiaG9vayIsImNvbXBvbmVudCIsImxvZyIsImRlYnVnIiwic2V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0YXNrIiwiY2F0Y2giLCJlcnIiLCJlcnJvciIsImFsbCIsIkFycmF5IiwiZnJvbSIsInZhbHVlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVlBLGVBQWVBLFFBQWYsQ0FBd0JDLEtBQXhCLEVBQStCQyxPQUEvQixFQUF3QztBQUN0QyxRQUFNQyxRQUFRLElBQUlDLEdBQUosRUFBZDs7QUFFQSxPQUFLLE1BQU0sR0FBR0MsSUFBSCxDQUFYLElBQXVCLElBQXZCLEVBQTZCO0FBRTNCLFFBQUksT0FBT0EsS0FBS0MsU0FBTCxDQUFlTCxLQUFmLENBQVAsS0FBaUMsVUFBckMsRUFBaUQ7QUFDL0NJLFdBQUtDLFNBQUwsQ0FBZUMsR0FBZixDQUFtQkMsS0FBbkIsQ0FBeUI7QUFBRVA7QUFBRixPQUF6QixFQUFvQyxZQUFwQztBQUNBRSxZQUFNTSxHQUFOLENBQVVKLElBQVYsRUFBZ0JLLFFBQVFDLE9BQVIsQ0FBZ0JOLEtBQUtDLFNBQUwsQ0FBZUwsS0FBZixFQUFzQkMsT0FBdEIsQ0FBaEIsQ0FBaEI7QUFDRCxLQUhELE1BR087QUFDTEcsV0FBS0MsU0FBTCxDQUFlQyxHQUFmLENBQW1CQyxLQUFuQixDQUF5QjtBQUFFUDtBQUFGLE9BQXpCLEVBQW9DLDRCQUFwQztBQUNEO0FBQ0Y7O0FBRUQsT0FBSyxNQUFNLENBQUNJLElBQUQsRUFBT08sSUFBUCxDQUFYLElBQTJCVCxLQUEzQixFQUFrQztBQUNoQ1MsU0FBS0MsS0FBTCxDQUFXQyxPQUFPLEtBQUtULEtBQUtDLFNBQUwsQ0FBZUMsR0FBZixDQUFtQlEsS0FBbkIsQ0FBeUI7QUFBRUQsU0FBRjtBQUFPYjtBQUFQLEtBQXpCLEVBQXlDLG9CQUF6QyxDQUF2QjtBQUNEOztBQUdELFFBQU1TLFFBQVFNLEdBQVIsQ0FBWUMsTUFBTUMsSUFBTixDQUFXZixNQUFNZ0IsTUFBTixFQUFYLENBQVosRUFDSE4sS0FERyxDQUNHLE1BQU0sQ0FBRSxDQURYLENBQU47QUFFRDs7ZUFFY2IsUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGlzcGF0Y2ggYW4gZXZlbnQgdG8gaG9va3NcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHZhcmlhYmxlIG51bWJlciBvZiBldmVudHMgdG8gYmUgZGlzcGF0Y2hlZCB0byBob29rc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgZXZlbnQncyBuYW1lXG4gKiBAcGFyYW0gICAgIHttaXhlZH0gICAgIHN1YmplY3QgICBUaGUgdGhpbmcgdGhhdCBpcyByZWxhdGVkIHRvIHRoZSBldmVudCAoaWUuIGEgY29tcG9uZW50KVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgZ2l2ZW4gdG8gdGhlIGV2ZW50IGhhbmRsZXIgb24gaW5wdXQuXG4gKiBAdGhpcyAgICAgIE1hcFxuICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnQsIHN1YmplY3QpIHtcbiAgY29uc3QgdGFza3MgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IFssIGhvb2tdIG9mIHRoaXMpIHtcbiAgICAvLyBJcyB0aGlzIGhvb2sgbGlzdGVuaW5nIGZvciB0aGUgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZD9cbiAgICBpZiAodHlwZW9mIGhvb2suY29tcG9uZW50W2V2ZW50XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaG9vay5jb21wb25lbnQubG9nLmRlYnVnKHsgZXZlbnQgfSwgJ2hvb2s6ZXZlbnQnKVxuICAgICAgdGFza3Muc2V0KGhvb2ssIFByb21pc2UucmVzb2x2ZShob29rLmNvbXBvbmVudFtldmVudF0oc3ViamVjdCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICBob29rLmNvbXBvbmVudC5sb2cuZGVidWcoeyBldmVudCB9LCAnaG9vazpldmVudDpub3QtaW1wbGVtZW50ZWQnKVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2hvb2ssIHRhc2tdIG9mIHRhc2tzKSB7XG4gICAgdGFzay5jYXRjaChlcnIgPT4gdm9pZCBob29rLmNvbXBvbmVudC5sb2cuZXJyb3IoeyBlcnIsIGV2ZW50IH0sICdob29rOmV2ZW50OmZhaWx1cmUnKSlcbiAgfVxuXG4gIC8vIEVuc3VyZSBubyB1bmNhdWdodCBlcnJvciBlc2NhcGVzIGZyb20gdGhpcyBwbGFjZVxuICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHRhc2tzLnZhbHVlcygpKSlcbiAgICAuY2F0Y2goKCkgPT4ge30pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoXG4iXX0=

@@ -13,2 +13,4 @@ "use strict";

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
describe('Atlas: cross-component communication', () => {

@@ -36,3 +38,3 @@ let atlas;

DummyService.requires = ['action:dummy'];
_defineProperty(DummyService, "requires", ['action:dummy']);

@@ -71,3 +73,4 @@ class DummyAction extends _action.default {}

DummyAction.requires = ['service:dummy'];
_defineProperty(DummyAction, "requires", ['service:dummy']);
atlas.service('dummy', DummyService);

@@ -84,3 +87,3 @@ atlas.action('dummy', DummyAction, {

});
xit('service can find internal action', async () => {
it('service can find internal action', async () => {
class DummyService extends _service.default {

@@ -93,7 +96,8 @@ start() {

DummyService.requires = ['action:internal'];
_defineProperty(DummyService, "requires", ['action:internal']);
class InternalAction extends _action.default {}
InternalAction.internal = true;
_defineProperty(InternalAction, "internal", true);
InternalAction.prototype.ping = sinon.stub();

@@ -110,3 +114,3 @@ atlas.service('dummy', DummyService, {

});
xit('action can find internal service', async () => {
it('action can find internal service', async () => {
const api = {

@@ -123,3 +127,3 @@ ping: sinon.stub()

InternalService.internal = true;
_defineProperty(InternalService, "internal", true);

@@ -133,3 +137,4 @@ class DummyAction extends _action.default {

DummyAction.requires = ['service:internal'];
_defineProperty(DummyAction, "requires", ['service:internal']);
atlas.service('internal', InternalService);

@@ -158,3 +163,27 @@ atlas.action('dummy', DummyAction, {

});
it('declaring a component of invalid type throws', () => {
class DummyAction extends _action.default {}
_defineProperty(DummyAction, "requires", ['invalid:name']);
atlas.action('dummy', DummyAction, {
aliases: {
'invalid:name': 'dummy'
}
});
return expect(atlas.start()).to.be.eventually.rejectedWith(_errors.FrameworkError, /Invalid component type: invalid used in alias invalid:name/);
});
it('resolving an alias into unknown component throws', () => {
class DummyAction extends _action.default {}
_defineProperty(DummyAction, "requires", ['service:dummy']);
atlas.action('dummy', DummyAction, {
aliases: {
'service:dummy': 'unknown'
}
});
return expect(atlas.start()).to.be.eventually.rejectedWith(_errors.FrameworkError, /Unable to find service unknown aliased as service:dummy/);
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFsaWFzaW5nLnRlc3QubWpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiYXRsYXMiLCJiZWZvcmVFYWNoIiwiQXRsYXMiLCJyb290IiwiX19kaXJuYW1lIiwiY29uZmlnIiwibG9nIiwibGV2ZWwiLCJpdCIsIkR1bW15U2VydmljZSIsIlNlcnZpY2UiLCJzdGFydCIsImNvbXBvbmVudCIsInBpbmciLCJyZXF1aXJlcyIsIkR1bW15QWN0aW9uIiwiQWN0aW9uIiwicHJvdG90eXBlIiwic2lub24iLCJzdHViIiwic2VydmljZSIsImFsaWFzZXMiLCJhY3Rpb24iLCJleHBlY3QiLCJ0byIsImhhdmUiLCJjYWxsQ291bnQiLCJiZWVuIiwiY2FsbGVkV2l0aCIsImFwaSIsInByZXBhcmUiLCJhY3Rpb25zIiwiZHVtbXkiLCJ4aXQiLCJJbnRlcm5hbEFjdGlvbiIsImludGVybmFsIiwiSW50ZXJuYWxTZXJ2aWNlIiwiYWxpYXMiLCJ0aHJvdyIsIkZyYW1ld29ya0Vycm9yIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUFBLFNBQVMsc0NBQVQsRUFBaUQsTUFBTTtBQUNyRCxNQUFJQyxLQUFKO0FBRUFDLGFBQVcsTUFBTTtBQUNmRCxZQUFRLElBQUlFLE9BQUosQ0FBVTtBQUNoQkMsWUFBTUMsU0FEVTtBQUVoQkMsY0FBUTtBQUFFTCxlQUFPO0FBQUVNLGVBQUs7QUFDdEJDLG1CQUFPO0FBRGU7QUFBUDtBQUFUO0FBRlEsS0FBVixDQUFSO0FBTUQsR0FQRDtBQVNBQyxLQUFHLHlCQUFILEVBQThCLFlBQVk7QUFDeEMsVUFBTUMsWUFBTixTQUEyQkMsZ0JBQTNCLENBQW1DO0FBR2pDQyxjQUFRO0FBQ04sYUFBS0MsU0FBTCxDQUFlLGNBQWYsRUFBK0JDLElBQS9CLENBQW9DLGVBQXBDO0FBQ0Q7O0FBTGdDOztBQUE3QkosZ0JBRGtDLENBRS9CSyxRQUYrQixHQUVwQixDQUFDLGNBQUQsQ0FGb0I7O0FBU3hDLFVBQU1DLFdBQU4sU0FB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LE1BQU4sQ0FBYSxPQUFiLEVBQXNCUCxXQUF0QjtBQUNBLFVBQU1mLE1BQU1XLEtBQU4sRUFBTjtBQUVBWSxXQUFPLE1BQU12QixNQUFNK0IsT0FBTixDQUFjQyxLQUFkLENBQW9CbkIsSUFBcEIsQ0FBeUIsZ0JBQXpCLENBQWIsRUFBeURXLEVBQXpELENBQTREYyxLQUE1RCxDQUFrRUMsc0JBQWxFO0FBQ0QsR0FWRDtBQVdELENBM0hEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCBTZXJ2aWNlIGZyb20gJ0BhdGxhcy5qcy9zZXJ2aWNlJ1xuaW1wb3J0IEFjdGlvbiBmcm9tICdAYXRsYXMuanMvYWN0aW9uJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuXG5kZXNjcmliZSgnQXRsYXM6IGNyb3NzLWNvbXBvbmVudCBjb21tdW5pY2F0aW9uJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhdGxhcyA9IG5ldyBBdGxhcyh7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHsgYXRsYXM6IHsgbG9nOiB7XG4gICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICB9IH0gfSxcbiAgICB9KVxuICB9KVxuXG4gIGl0KCdzZXJ2aWNlIGNhbiBmaW5kIGFjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICBjbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHtcbiAgICAgIHN0YXRpYyByZXF1aXJlcyA9IFsnYWN0aW9uOmR1bW15J11cblxuICAgICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50KCdhY3Rpb246ZHVtbXknKS5waW5nKCdzZXJ2aWNlOmR1bW15JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBEdW1teUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7fVxuXG4gICAgRHVtbXlBY3Rpb24ucHJvdG90eXBlLnBpbmcgPSBzaW5vbi5zdHViKClcblxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlLCB7IGFsaWFzZXM6IHsgJ2FjdGlvbjpkdW1teSc6ICdkdW1teScgfSB9KVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbilcblxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgIGV4cGVjdChEdW1teUFjdGlvbi5wcm90b3R5cGUucGluZykudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICBleHBlY3QoRHVtbXlBY3Rpb24ucHJvdG90eXBlLnBpbmcpLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKCdzZXJ2aWNlOmR1bW15JylcbiAgfSlcblxuICBpdCgnYWN0aW9uIGNhbiBmaW5kIHNlcnZpY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYXBpID0ge1xuICAgICAgcGluZzogc2lub24uc3R1YigpLFxuICAgIH1cblxuICAgIGNsYXNzIER1bW15U2VydmljZSBleHRlbmRzIFNlcnZpY2Uge1xuICAgICAgcHJlcGFyZSgpIHsgcmV0dXJuIGFwaSB9XG4gICAgfVxuXG4gICAgY2xhc3MgRHVtbXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICAgICAgc3RhdGljIHJlcXVpcmVzID0gWydzZXJ2aWNlOmR1bW15J11cbiAgICAgIHBpbmcoKSB7IHRoaXMuY29tcG9uZW50KCdzZXJ2aWNlOmR1bW15JykucGluZygnYWN0aW9uOmR1bW15JykgfVxuICAgIH1cblxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbiwgeyBhbGlhc2VzOiB7ICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyB9IH0pXG5cbiAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgYXRsYXMuYWN0aW9ucy5kdW1teS5waW5nKClcblxuICAgIGV4cGVjdChhcGkucGluZykudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICBleHBlY3QoYXBpLnBpbmcpLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKCdhY3Rpb246ZHVtbXknKVxuICB9KVxuXG4gIC8vIEBUT0RPOiBJbXBsZW1lbnQgaW50ZXJuYWwgY29tcG9uZW50c1xuICB4aXQoJ3NlcnZpY2UgY2FuIGZpbmQgaW50ZXJuYWwgYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgIGNsYXNzIER1bW15U2VydmljZSBleHRlbmRzIFNlcnZpY2Uge1xuICAgICAgc3RhdGljIHJlcXVpcmVzID0gWydhY3Rpb246aW50ZXJuYWwnXVxuICAgICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50KCdhY3Rpb246aW50ZXJuYWwnKS5waW5nKCdzZXJ2aWNlOmR1bW15JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbnRlcm5hbEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gICAgICBzdGF0aWMgaW50ZXJuYWwgPSB0cnVlXG4gICAgfVxuXG4gICAgSW50ZXJuYWxBY3Rpb24ucHJvdG90eXBlLnBpbmcgPSBzaW5vbi5zdHViKClcblxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlLCB7IGFsaWFzZXM6IHsgJ2FjdGlvbjppbnRlcm5hbCc6ICdpbnRlcm5hbCcgfSB9KVxuICAgIGF0bGFzLmFjdGlvbignaW50ZXJuYWwnLCBJbnRlcm5hbEFjdGlvbilcblxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgIGV4cGVjdChJbnRlcm5hbEFjdGlvbi5wcm90b3R5cGUucGluZykudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICBleHBlY3QoSW50ZXJuYWxBY3Rpb24ucHJvdG90eXBlLnBpbmcpLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKCdzZXJ2aWNlOmR1bW15JylcbiAgfSlcblxuICAvLyBAVE9ETzogSW1wbGVtZW50IGludGVybmFsIGNvbXBvbmVudHNcbiAgeGl0KCdhY3Rpb24gY2FuIGZpbmQgaW50ZXJuYWwgc2VydmljZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhcGkgPSB7XG4gICAgICBwaW5nOiBzaW5vbi5zdHViKCksXG4gICAgfVxuXG4gICAgY2xhc3MgSW50ZXJuYWxTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7XG4gICAgICBzdGF0aWMgaW50ZXJuYWwgPSB0cnVlXG5cbiAgICAgIHByZXBhcmUoKSB7IHJldHVybiBhcGkgfVxuICAgIH1cblxuICAgIGNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgICAgIHN0YXRpYyByZXF1aXJlcyA9IFsnc2VydmljZTppbnRlcm5hbCddXG5cbiAgICAgIHBpbmcoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50KCdzZXJ2aWNlOmludGVybmFsJykucGluZygnYWN0aW9uOmR1bW15JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhdGxhcy5zZXJ2aWNlKCdpbnRlcm5hbCcsIEludGVybmFsU2VydmljZSlcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24sIHsgYWxpYXNlczogeyAnc2VydmljZTppbnRlcm5hbCc6ICdpbnRlcm5hbCcgfSB9KVxuXG4gICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgIGF0bGFzLmFjdGlvbnMuZHVtbXkucGluZygpXG5cbiAgICBleHBlY3QoYXBpLnBpbmcpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgZXhwZWN0KGFwaS5waW5nKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aCgnYWN0aW9uOmR1bW15JylcbiAgfSlcblxuICBpdCgncmVxdWVzdGluZyB1bmtub3duIGNvbXBvbmVudCB0aHJvd3MnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xhc3MgRHVtbXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICAgICAgcGluZyhhbGlhcykge1xuICAgICAgICB0aGlzLmNvbXBvbmVudChhbGlhcylcbiAgICAgIH1cbiAgICB9XG4gICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIER1bW15QWN0aW9uKVxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5hY3Rpb25zLmR1bW15LnBpbmcoJ3NlcnZpY2U6bG9sc3ZjJykpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxufSlcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFsaWFzaW5nLnRlc3QubWpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiYXRsYXMiLCJiZWZvcmVFYWNoIiwiQXRsYXMiLCJyb290IiwiX19kaXJuYW1lIiwiY29uZmlnIiwibG9nIiwibGV2ZWwiLCJpdCIsIkR1bW15U2VydmljZSIsIlNlcnZpY2UiLCJzdGFydCIsImNvbXBvbmVudCIsInBpbmciLCJEdW1teUFjdGlvbiIsIkFjdGlvbiIsInByb3RvdHlwZSIsInNpbm9uIiwic3R1YiIsInNlcnZpY2UiLCJhbGlhc2VzIiwiYWN0aW9uIiwiZXhwZWN0IiwidG8iLCJoYXZlIiwiY2FsbENvdW50IiwiYmVlbiIsImNhbGxlZFdpdGgiLCJhcGkiLCJwcmVwYXJlIiwiYWN0aW9ucyIsImR1bW15IiwiSW50ZXJuYWxBY3Rpb24iLCJJbnRlcm5hbFNlcnZpY2UiLCJhbGlhcyIsInRocm93IiwiRnJhbWV3b3JrRXJyb3IiLCJiZSIsImV2ZW50dWFsbHkiLCJyZWplY3RlZFdpdGgiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBQSxTQUFTLHNDQUFULEVBQWlELE1BQU07QUFDckQsTUFBSUMsS0FBSjtBQUVBQyxhQUFXLE1BQU07QUFDZkQsWUFBUSxJQUFJRSxPQUFKLENBQVU7QUFDaEJDLFlBQU1DLFNBRFU7QUFFaEJDLGNBQVE7QUFBRUwsZUFBTztBQUFFTSxlQUFLO0FBQ3RCQyxtQkFBTztBQURlO0FBQVA7QUFBVDtBQUZRLEtBQVYsQ0FBUjtBQU1ELEdBUEQ7QUFTQUMsS0FBRyx5QkFBSCxFQUE4QixZQUFZO0FBQ3hDLFVBQU1DLFlBQU4sU0FBMkJDLGdCQUEzQixDQUFtQztBQUdqQ0MsY0FBUTtBQUNOLGFBQUtDLFNBQUwsQ0FBZSxjQUFmLEVBQStCQyxJQUEvQixDQUFvQyxlQUFwQztBQUNEOztBQUxnQzs7QUFESyxvQkFDbENKLFlBRGtDLGNBRXBCLENBQUMsY0FBRCxDQUZvQjs7QUFTeEMsVUFBTUssV0FBTixTQUEw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QUFNVyxLQUFOLEVBQU47QUFFQVcsV0FBTyxNQUFNdEIsTUFBTThCLE9BQU4sQ0FBY0MsS0FBZCxDQUFvQmxCLElBQXBCLENBQXlCLGdCQUF6QixDQUFiLEVBQXlEVSxFQUF6RCxDQUE0RFksS0FBNUQsQ0FBa0VDLHNCQUFsRTtBQUNELEdBVkQ7QUFZQTVCLEtBQUcsOENBQUgsRUFBbUQsTUFBTTtBQUN2RCxVQUFNTSxXQUFOLFNBQTBCQyxlQUExQixDQUFpQzs7QUFEc0Isb0JBQ2pERCxXQURpRCxjQUVuQyxDQUFDLGNBQUQsQ0FGbUM7O0FBS3ZEZCxVQUFNcUIsTUFBTixDQUFhLE9BQWIsRUFBc0JQLFdBQXRCLEVBQW1DO0FBQUVNLGVBQVM7QUFBRSx3QkFBZ0I7QUFBbEI7QUFBWCxLQUFuQztBQUVBLFdBQU9FLE9BQU90QixNQUFNVyxLQUFOLEVBQVAsRUFBc0JZLEVBQXRCLENBQXlCYyxFQUF6QixDQUE0QkMsVUFBNUIsQ0FBdUNDLFlBQXZDLENBQ0xILHNCQURLLEVBRUwsNERBRkssQ0FBUDtBQUlELEdBWEQ7QUFhQTVCLEtBQUcsa0RBQUgsRUFBdUQsTUFBTTtBQUMzRCxVQUFNTSxXQUFOLFNBQTBCQyxlQUExQixDQUFpQzs7QUFEMEIsb0JBQ3JERCxXQURxRCxjQUV2QyxDQUFDLGVBQUQsQ0FGdUM7O0FBSzNEZCxVQUFNcUIsTUFBTixDQUFhLE9BQWIsRUFBc0JQLFdBQXRCLEVBQW1DO0FBQUVNLGVBQVM7QUFBRSx5QkFBaUI7QUFBbkI7QUFBWCxLQUFuQztBQUVBLFdBQU9FLE9BQU90QixNQUFNVyxLQUFOLEVBQVAsRUFBc0JZLEVBQXRCLENBQXlCYyxFQUF6QixDQUE0QkMsVUFBNUIsQ0FBdUNDLFlBQXZDLENBQ0xILHNCQURLLEVBRUwseURBRkssQ0FBUDtBQUlELEdBWEQ7QUFZRCxDQW5KRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgU2VydmljZSBmcm9tICdAYXRsYXMuanMvc2VydmljZSdcbmltcG9ydCBBY3Rpb24gZnJvbSAnQGF0bGFzLmpzL2FjdGlvbidcbmltcG9ydCB7IEZyYW1ld29ya0Vycm9yIH0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcblxuZGVzY3JpYmUoJ0F0bGFzOiBjcm9zcy1jb21wb25lbnQgY29tbXVuaWNhdGlvbicsICgpID0+IHtcbiAgbGV0IGF0bGFzXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMoe1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7IGF0bGFzOiB7IGxvZzoge1xuICAgICAgICBsZXZlbDogJ3dhcm4nLFxuICAgICAgfSB9IH0sXG4gICAgfSlcbiAgfSlcblxuICBpdCgnc2VydmljZSBjYW4gZmluZCBhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgY2xhc3MgRHVtbXlTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7XG4gICAgICBzdGF0aWMgcmVxdWlyZXMgPSBbJ2FjdGlvbjpkdW1teSddXG5cbiAgICAgIHN0YXJ0KCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudCgnYWN0aW9uOmR1bW15JykucGluZygnc2VydmljZTpkdW1teScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgRHVtbXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge31cblxuICAgIER1bW15QWN0aW9uLnByb3RvdHlwZS5waW5nID0gc2lub24uc3R1YigpXG5cbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSwgeyBhbGlhc2VzOiB7ICdhY3Rpb246ZHVtbXknOiAnZHVtbXknIH0gfSlcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24pXG5cbiAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICBleHBlY3QoRHVtbXlBY3Rpb24ucHJvdG90eXBlLnBpbmcpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgZXhwZWN0KER1bW15QWN0aW9uLnByb3RvdHlwZS5waW5nKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aCgnc2VydmljZTpkdW1teScpXG4gIH0pXG5cbiAgaXQoJ2FjdGlvbiBjYW4gZmluZCBzZXJ2aWNlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGFwaSA9IHtcbiAgICAgIHBpbmc6IHNpbm9uLnN0dWIoKSxcbiAgICB9XG5cbiAgICBjbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHtcbiAgICAgIHByZXBhcmUoKSB7IHJldHVybiBhcGkgfVxuICAgIH1cblxuICAgIGNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgICAgIHN0YXRpYyByZXF1aXJlcyA9IFsnc2VydmljZTpkdW1teSddXG4gICAgICBwaW5nKCkgeyB0aGlzLmNvbXBvbmVudCgnc2VydmljZTpkdW1teScpLnBpbmcoJ2FjdGlvbjpkdW1teScpIH1cbiAgICB9XG5cbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24sIHsgYWxpYXNlczogeyAnc2VydmljZTpkdW1teSc6ICdkdW1teScgfSB9KVxuXG4gICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgIGF0bGFzLmFjdGlvbnMuZHVtbXkucGluZygpXG5cbiAgICBleHBlY3QoYXBpLnBpbmcpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgZXhwZWN0KGFwaS5waW5nKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aCgnYWN0aW9uOmR1bW15JylcbiAgfSlcblxuICBpdCgnc2VydmljZSBjYW4gZmluZCBpbnRlcm5hbCBhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgY2xhc3MgRHVtbXlTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7XG4gICAgICBzdGF0aWMgcmVxdWlyZXMgPSBbJ2FjdGlvbjppbnRlcm5hbCddXG4gICAgICBzdGFydCgpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnQoJ2FjdGlvbjppbnRlcm5hbCcpLnBpbmcoJ3NlcnZpY2U6ZHVtbXknKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEludGVybmFsQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgICAgIHN0YXRpYyBpbnRlcm5hbCA9IHRydWVcbiAgICB9XG5cbiAgICBJbnRlcm5hbEFjdGlvbi5wcm90b3R5cGUucGluZyA9IHNpbm9uLnN0dWIoKVxuXG4gICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UsIHsgYWxpYXNlczogeyAnYWN0aW9uOmludGVybmFsJzogJ2ludGVybmFsJyB9IH0pXG4gICAgYXRsYXMuYWN0aW9uKCdpbnRlcm5hbCcsIEludGVybmFsQWN0aW9uKVxuXG4gICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgZXhwZWN0KEludGVybmFsQWN0aW9uLnByb3RvdHlwZS5waW5nKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIGV4cGVjdChJbnRlcm5hbEFjdGlvbi5wcm90b3R5cGUucGluZykudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoJ3NlcnZpY2U6ZHVtbXknKVxuICB9KVxuXG4gIGl0KCdhY3Rpb24gY2FuIGZpbmQgaW50ZXJuYWwgc2VydmljZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhcGkgPSB7XG4gICAgICBwaW5nOiBzaW5vbi5zdHViKCksXG4gICAgfVxuXG4gICAgY2xhc3MgSW50ZXJuYWxTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7XG4gICAgICBzdGF0aWMgaW50ZXJuYWwgPSB0cnVlXG5cbiAgICAgIHByZXBhcmUoKSB7IHJldHVybiBhcGkgfVxuICAgIH1cblxuICAgIGNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgICAgIHN0YXRpYyByZXF1aXJlcyA9IFsnc2VydmljZTppbnRlcm5hbCddXG5cbiAgICAgIHBpbmcoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50KCdzZXJ2aWNlOmludGVybmFsJykucGluZygnYWN0aW9uOmR1bW15JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhdGxhcy5zZXJ2aWNlKCdpbnRlcm5hbCcsIEludGVybmFsU2VydmljZSlcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24sIHsgYWxpYXNlczogeyAnc2VydmljZTppbnRlcm5hbCc6ICdpbnRlcm5hbCcgfSB9KVxuXG4gICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgIGF0bGFzLmFjdGlvbnMuZHVtbXkucGluZygpXG5cbiAgICBleHBlY3QoYXBpLnBpbmcpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgZXhwZWN0KGFwaS5waW5nKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aCgnYWN0aW9uOmR1bW15JylcbiAgfSlcblxuICBpdCgncmVxdWVzdGluZyB1bmtub3duIGNvbXBvbmVudCB0aHJvd3MnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xhc3MgRHVtbXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICAgICAgcGluZyhhbGlhcykge1xuICAgICAgICB0aGlzLmNvbXBvbmVudChhbGlhcylcbiAgICAgIH1cbiAgICB9XG4gICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIER1bW15QWN0aW9uKVxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5hY3Rpb25zLmR1bW15LnBpbmcoJ3NlcnZpY2U6bG9sc3ZjJykpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxuXG4gIGl0KCdkZWNsYXJpbmcgYSBjb21wb25lbnQgb2YgaW52YWxpZCB0eXBlIHRocm93cycsICgpID0+IHtcbiAgICBjbGFzcyBEdW1teUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gICAgICBzdGF0aWMgcmVxdWlyZXMgPSBbJ2ludmFsaWQ6bmFtZSddXG4gICAgfVxuXG4gICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIER1bW15QWN0aW9uLCB7IGFsaWFzZXM6IHsgJ2ludmFsaWQ6bmFtZSc6ICdkdW1teScgfSB9KVxuXG4gICAgcmV0dXJuIGV4cGVjdChhdGxhcy5zdGFydCgpKS50by5iZS5ldmVudHVhbGx5LnJlamVjdGVkV2l0aChcbiAgICAgIEZyYW1ld29ya0Vycm9yLFxuICAgICAgL0ludmFsaWQgY29tcG9uZW50IHR5cGU6IGludmFsaWQgdXNlZCBpbiBhbGlhcyBpbnZhbGlkOm5hbWUvLFxuICAgIClcbiAgfSlcblxuICBpdCgncmVzb2x2aW5nIGFuIGFsaWFzIGludG8gdW5rbm93biBjb21wb25lbnQgdGhyb3dzJywgKCkgPT4ge1xuICAgIGNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgICAgIHN0YXRpYyByZXF1aXJlcyA9IFsnc2VydmljZTpkdW1teSddXG4gICAgfVxuXG4gICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIER1bW15QWN0aW9uLCB7IGFsaWFzZXM6IHsgJ3NlcnZpY2U6ZHVtbXknOiAndW5rbm93bicgfSB9KVxuXG4gICAgcmV0dXJuIGV4cGVjdChhdGxhcy5zdGFydCgpKS50by5iZS5ldmVudHVhbGx5LnJlamVjdGVkV2l0aChcbiAgICAgIEZyYW1ld29ya0Vycm9yLFxuICAgICAgL1VuYWJsZSB0byBmaW5kIHNlcnZpY2UgdW5rbm93biBhbGlhc2VkIGFzIHNlcnZpY2U6ZHVtbXkvLFxuICAgIClcbiAgfSlcbn0pXG4iXX0=

@@ -18,5 +18,5 @@ "use strict";

var _default = { ...stdSerializers,
custom: () => {}
custom: true
};
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcmlhbGlzZXJzLm1qcyJdLCJuYW1lcyI6WyJzdGRTZXJpYWxpemVycyIsImVyciIsInBpbm8iLCJyZXEiLCJyZXMiLCJjdXN0b20iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUVBLE1BQU1BLGlCQUFpQjtBQUNyQkMsT0FBS0MsY0FBS0YsY0FBTCxDQUFvQkMsR0FESjtBQUVyQkUsT0FBS0QsY0FBS0YsY0FBTCxDQUFvQkcsR0FGSjtBQUdyQkMsT0FBS0YsY0FBS0YsY0FBTCxDQUFvQkk7QUFISixDQUF2QjtlQU1lLEVBQ2IsR0FBR0osY0FEVTtBQUViSyxVQUFRLE1BQU0sQ0FBRTtBQUZILEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGlubyBmcm9tICdwaW5vJ1xuXG5jb25zdCBzdGRTZXJpYWxpemVycyA9IHtcbiAgZXJyOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLmVycixcbiAgcmVxOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLnJlcSxcbiAgcmVzOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLnJlcyxcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi5zdGRTZXJpYWxpemVycyxcbiAgY3VzdG9tOiAoKSA9PiB7fSxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcmlhbGlzZXJzLm1qcyJdLCJuYW1lcyI6WyJzdGRTZXJpYWxpemVycyIsImVyciIsInBpbm8iLCJyZXEiLCJyZXMiLCJjdXN0b20iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUVBLE1BQU1BLGlCQUFpQjtBQUNyQkMsT0FBS0MsY0FBS0YsY0FBTCxDQUFvQkMsR0FESjtBQUVyQkUsT0FBS0QsY0FBS0YsY0FBTCxDQUFvQkcsR0FGSjtBQUdyQkMsT0FBS0YsY0FBS0YsY0FBTCxDQUFvQkk7QUFISixDQUF2QjtlQU1lLEVBQ2IsR0FBR0osY0FEVTtBQUViSyxVQUFRO0FBRkssQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwaW5vIGZyb20gJ3Bpbm8nXG5cbmNvbnN0IHN0ZFNlcmlhbGl6ZXJzID0ge1xuICBlcnI6IHBpbm8uc3RkU2VyaWFsaXplcnMuZXJyLFxuICByZXE6IHBpbm8uc3RkU2VyaWFsaXplcnMucmVxLFxuICByZXM6IHBpbm8uc3RkU2VyaWFsaXplcnMucmVzLFxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnN0ZFNlcmlhbGl6ZXJzLFxuICBjdXN0b206IHRydWUsXG59XG4iXX0=

@@ -11,13 +11,15 @@ "use strict";

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
class DummyHook extends _hook.default {}
DummyHook.observes = 'action:dummy';
_defineProperty(DummyHook, "observes", 'action:dummy');
class AnotherHook extends _hook.default {}
AnotherHook.observes = 'action:dummy';
_defineProperty(AnotherHook, "observes", 'action:dummy');
class UnrelatedHook extends _hook.default {}
UnrelatedHook.observes = 'action:unrelated';
_defineProperty(UnrelatedHook, "observes", 'action:unrelated');

@@ -86,3 +88,30 @@ class DummyAction extends _action.default {

});
it('still resolves even if one of the hooks throws', async () => {
atlas = new _.Atlas({
root: __dirname,
config: {
atlas: {
log: {
level: 'fatal'
}
}
}
});
atlas.hook('dummy', DummyHook, {
aliases: {
'action:dummy': 'dummy'
}
});
atlas.hook('another', AnotherHook, {
aliases: {
'action:dummy': 'dummy'
}
});
atlas.action('dummy', DummyAction);
await atlas.start();
DummyHook.prototype.handleEvent = sinon.stub().resolves();
AnotherHook.prototype.handleEvent = sinon.stub().rejects(new Error('u-oh'));
return expect(atlas.actions.dummy.trigger('handleEvent')).to.not.be.eventually.rejectedWith(Error);
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRpc3BhdGNoLnRlc3QubWpzIl0sIm5hbWVzIjpbIkR1bW15SG9vayIsIkhvb2siLCJvYnNlcnZlcyIsIkFub3RoZXJIb29rIiwiVW5yZWxhdGVkSG9vayIsIkR1bW15QWN0aW9uIiwiQWN0aW9uIiwidHJpZ2dlciIsImV2ZW50IiwiY29udGV4dCIsImRpc3BhdGNoIiwiVW5yZWxhdGVkQWN0aW9uIiwiZGVzY3JpYmUiLCJhdGxhcyIsImJlZm9yZSIsIkF0bGFzIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsImxvZyIsImxldmVsIiwiaG9vayIsImFsaWFzZXMiLCJhY3Rpb24iLCJzdGFydCIsImJlZm9yZUVhY2giLCJwcm90b3R5cGUiLCJoYW5kbGVFdmVudCIsInNpbm9uIiwic3R1YiIsIml0IiwiYWN0aW9ucyIsImR1bW15IiwiZXhwZWN0IiwidG8iLCJoYXZlIiwiY2FsbENvdW50IiwiYmVlbiIsImNhbGxlZFdpdGgiLCJoYW5kbGVPdGhlckV2ZW50Iiwibm90IiwiZXZlbnR1YWxseSIsImJlIiwicmVqZWN0ZWRXaXRoIiwiRXJyb3IiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxTQUFOLFNBQXdCQyxhQUF4QixDQUE2Qjs7QUFBdkJELFMsQ0FDR0UsUSxHQUFXLGM7O0FBR3BCLE1BQU1DLFdBQU4sU0FBMEJGLGFBQTFCLENBQStCOztBQUF6QkUsVyxDQUNHRCxRLEdBQVcsYzs7QUFHcEIsTUFBTUUsYUFBTixTQUE0QkgsYUFBNUIsQ0FBaUM7O0FBQTNCRyxhLENBQ0dGLFEsR0FBVyxrQjs7QUFHcEIsTUFBTUcsV0FBTixTQUEwQkMsZUFBMUIsQ0FBaUM7QUFDL0JDLFVBQVFDLEtBQVIsRUFBZUMsT0FBZixFQUF3QjtBQUN0QixXQUFPLEtBQUtDLFFBQUwsQ0FBY0YsS0FBZCxFQUFxQkMsT0FBckIsQ0FBUDtBQUNEOztBQUg4Qjs7QUFNakMsTUFBTUUsZUFBTixTQUE4QkwsZUFBOUIsQ0FBcUM7O0FBRXJD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bSAnQGF0bGFzLmpzL2hvb2snXG5pbXBvcnQgQWN0aW9uIGZyb20gJ0BhdGxhcy5qcy9hY3Rpb24nXG5cbmNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge1xuICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYWN0aW9uOmR1bW15J1xufVxuXG5jbGFzcyBBbm90aGVySG9vayBleHRlbmRzIEhvb2sge1xuICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYWN0aW9uOmR1bW15J1xufVxuXG5jbGFzcyBVbnJlbGF0ZWRIb29rIGV4dGVuZHMgSG9vayB7XG4gIHN0YXRpYyBvYnNlcnZlcyA9ICdhY3Rpb246dW5yZWxhdGVkJ1xufVxuXG5jbGFzcyBEdW1teUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIHRyaWdnZXIoZXZlbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChldmVudCwgY29udGV4dClcbiAgfVxufVxuXG5jbGFzcyBVbnJlbGF0ZWRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge31cblxuZGVzY3JpYmUoJ0hvb2s6IGN1c3RvbSBldmVudHMnLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuXG4gIGJlZm9yZSgoKSA9PiB7XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMoe1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGF0bGFzOiB7IGxvZzogeyBsZXZlbDogJ3dhcm4nIH0gfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBhdGxhcy5ob29rKCdkdW1teScsIER1bW15SG9vaywgeyBhbGlhc2VzOiB7ICdhY3Rpb246ZHVtbXknOiAnZHVtbXknIH0gfSlcbiAgICBhdGxhcy5ob29rKCdhbm90aGVyJywgQW5vdGhlckhvb2ssIHsgYWxpYXNlczogeyAnYWN0aW9uOmR1bW15JzogJ2R1bW15JyB9IH0pXG4gICAgYXRsYXMuaG9vaygndW5yZWxhdGVkJywgVW5yZWxhdGVkSG9vaywgeyBhbGlhc2VzOiB7ICdhY3Rpb246dW5yZWxhdGVkJzogJ3VucmVsYXRlZCcgfSB9KVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbilcbiAgICBhdGxhcy5hY3Rpb24oJ3VucmVsYXRlZCcsIFVucmVsYXRlZEFjdGlvbilcblxuICAgIHJldHVybiBhdGxhcy5zdGFydCgpXG4gIH0pXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgRHVtbXlIb29rLnByb3RvdHlwZS5oYW5kbGVFdmVudCA9IHNpbm9uLnN0dWIoKVxuICAgIEFub3RoZXJIb29rLnByb3RvdHlwZS5oYW5kbGVFdmVudCA9IHNpbm9uLnN0dWIoKVxuICAgIFVucmVsYXRlZEhvb2sucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gc2lub24uc3R1YigpXG4gIH0pXG5cblxuICBpdCgnZGlzcGF0Y2hlcyBhIGN1c3RvbSBldmVudCBmcm9tIGEgY29tcG9uZW50IHRvIGFsbCBvYnNlcnZpbmcgaG9va3MnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IHt9XG5cbiAgICBhd2FpdCBhdGxhcy5hY3Rpb25zLmR1bW15LnRyaWdnZXIoJ2hhbmRsZUV2ZW50JywgY29udGV4dClcblxuICAgIGV4cGVjdChEdW1teUhvb2sucHJvdG90eXBlLmhhbmRsZUV2ZW50KS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIGV4cGVjdChEdW1teUhvb2sucHJvdG90eXBlLmhhbmRsZUV2ZW50KS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChjb250ZXh0KVxuICAgIGV4cGVjdChBbm90aGVySG9vay5wcm90b3R5cGUuaGFuZGxlRXZlbnQpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgZXhwZWN0KEFub3RoZXJIb29rLnByb3RvdHlwZS5oYW5kbGVFdmVudCkudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoY29udGV4dClcbiAgfSlcblxuICBpdCgnZG9lcyBub3QgZGlzcGF0Y2ggdGhlIGV2ZW50IHRvIGhvb2tzIG5vdCBvYnNlcnZpbmcgdGhlIGNvbXBvbmVudCcsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBhdGxhcy5hY3Rpb25zLmR1bW15LnRyaWdnZXIoJ2hhbmRsZUV2ZW50JylcblxuICAgIGV4cGVjdChVbnJlbGF0ZWRIb29rLnByb3RvdHlwZS5oYW5kbGVFdmVudCkudG8uaGF2ZS5jYWxsQ291bnQoMClcbiAgfSlcblxuICBpdCgnZG9lcyBub3QgY3Jhc2ggaWYgc29tZSBob29rIGRvZXMgbm90IGhhbmRsZSB0aGUgZGlzcGF0Y2hlZCBldmVudCcsICgpID0+IHtcbiAgICBEdW1teUhvb2sucHJvdG90eXBlLmhhbmRsZU90aGVyRXZlbnQgPSBzaW5vbi5zdHViKClcblxuICAgIHJldHVybiBleHBlY3QoYXRsYXMuYWN0aW9ucy5kdW1teS50cmlnZ2VyKCdoYW5kbGVPdGhlckV2ZW50JykpXG4gICAgICAudG8ubm90LmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKEVycm9yKVxuICB9KVxufSlcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRpc3BhdGNoLnRlc3QubWpzIl0sIm5hbWVzIjpbIkR1bW15SG9vayIsIkhvb2siLCJBbm90aGVySG9vayIsIlVucmVsYXRlZEhvb2siLCJEdW1teUFjdGlvbiIsIkFjdGlvbiIsInRyaWdnZXIiLCJldmVudCIsImNvbnRleHQiLCJkaXNwYXRjaCIsIlVucmVsYXRlZEFjdGlvbiIsImRlc2NyaWJlIiwiYXRsYXMiLCJiZWZvcmUiLCJBdGxhcyIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJsb2ciLCJsZXZlbCIsImhvb2siLCJhbGlhc2VzIiwiYWN0aW9uIiwic3RhcnQiLCJiZWZvcmVFYWNoIiwicHJvdG90eXBlIiwiaGFuZGxlRXZlbnQiLCJzaW5vbiIsInN0dWIiLCJpdCIsImFjdGlvbnMiLCJkdW1teSIsImV4cGVjdCIsInRvIiwiaGF2ZSIsImNhbGxDb3VudCIsImJlZW4iLCJjYWxsZWRXaXRoIiwiaGFuZGxlT3RoZXJFdmVudCIsIm5vdCIsImV2ZW50dWFsbHkiLCJiZSIsInJlamVjdGVkV2l0aCIsIkVycm9yIiwicmVzb2x2ZXMiLCJyZWplY3RzIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxNQUFNQSxTQUFOLFNBQXdCQyxhQUF4QixDQUE2Qjs7Z0JBQXZCRCxTLGNBQ2MsYzs7QUFHcEIsTUFBTUUsV0FBTixTQUEwQkQsYUFBMUIsQ0FBK0I7O2dCQUF6QkMsVyxjQUNjLGM7O0FBR3BCLE1BQU1DLGFBQU4sU0FBNEJGLGFBQTVCLENBQWlDOztnQkFBM0JFLGEsY0FDYyxrQjs7QUFHcEIsTUFBTUMsV0FBTixTQUEwQkMsZUFBMUIsQ0FBaUM7QUFDL0JDLFVBQVFDLEtBQVIsRUFBZUMsT0FBZixFQUF3QjtBQUN0QixXQUFPLEtBQUtDLFFBQUwsQ0FBY0YsS0FBZCxFQUFxQkMsT0FBckIsQ0FBUDtBQUNEOztBQUg4Qjs7QUFNakMsTUFBTUUsZUFBTixTQUE4QkwsZUFBOUIsQ0FBcUM7O0FBRXJDTSxTQUFTLHFC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QUFRO0FBQ05MLGVBQU87QUFBRU0sZUFBSztBQUFFQyxtQkFBTztBQUFUO0FBQVA7QUFERDtBQUZRLEtBQVYsQ0FBUjtBQU1BUCxVQUFNUSxJQUFOLENBQVcsT0FBWCxFQUFvQnBCLFNBQXBCLEVBQStCO0FBQUVxQixlQUFTO0FBQUUsd0JBQWdCO0FBQWxCO0FBQVgsS0FBL0I7QUFDQVQsVUFBTVEsSUFBTixDQUFXLFNBQVgsRUFBc0JsQixXQUF0QixFQUFtQztBQUFFbUIsZUFBUztBQUFFLHdCQUFnQjtBQUFsQjtBQUFYLEtBQW5DO0FBQ0FULFVBQU1VLE1BQU4sQ0FBYSxPQUFiLEVBQXNCbEIsV0FBdEI7QUFFQSxVQUFNUSxNQUFNVyxLQUFOLEVBQU47QUFFQXZCLGNBQVV5QixTQUFWLENBQW9CQyxXQUFwQixHQUFrQ0MsTUFBTUMsSUFBTixHQUFhZ0IsUUFBYixFQUFsQztBQUNBMUMsZ0JBQVl1QixTQUFaLENBQXNCQyxXQUF0QixHQUFvQ0MsTUFBTUMsSUFBTixHQUFhaUIsT0FBYixDQUFxQixJQUFJRixLQUFKLENBQVUsTUFBVixDQUFyQixDQUFwQztBQUVBLFdBQU9YLE9BQU9wQixNQUFNa0IsT0FBTixDQUFjQyxLQUFkLENBQW9CekIsT0FBcEIsQ0FBNEIsYUFBNUIsQ0FBUCxFQUNKMkIsRUFESSxDQUNETSxHQURDLENBQ0dFLEVBREgsQ0FDTUQsVUFETixDQUNpQkUsWUFEakIsQ0FDOEJDLEtBRDlCLENBQVA7QUFFRCxHQWxCRDtBQW1CRCxDQXJFRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcbmltcG9ydCBBY3Rpb24gZnJvbSAnQGF0bGFzLmpzL2FjdGlvbidcblxuY2xhc3MgRHVtbXlIb29rIGV4dGVuZHMgSG9vayB7XG4gIHN0YXRpYyBvYnNlcnZlcyA9ICdhY3Rpb246ZHVtbXknXG59XG5cbmNsYXNzIEFub3RoZXJIb29rIGV4dGVuZHMgSG9vayB7XG4gIHN0YXRpYyBvYnNlcnZlcyA9ICdhY3Rpb246ZHVtbXknXG59XG5cbmNsYXNzIFVucmVsYXRlZEhvb2sgZXh0ZW5kcyBIb29rIHtcbiAgc3RhdGljIG9ic2VydmVzID0gJ2FjdGlvbjp1bnJlbGF0ZWQnXG59XG5cbmNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgdHJpZ2dlcihldmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKGV2ZW50LCBjb250ZXh0KVxuICB9XG59XG5cbmNsYXNzIFVucmVsYXRlZEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7fVxuXG5kZXNjcmliZSgnSG9vazogY3VzdG9tIGV2ZW50cycsICgpID0+IHtcbiAgbGV0IGF0bGFzXG5cbiAgYmVmb3JlKCgpID0+IHtcbiAgICBhdGxhcyA9IG5ldyBBdGxhcyh7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYXRsYXM6IHsgbG9nOiB7IGxldmVsOiAnd2FybicgfSB9LFxuICAgICAgfSxcbiAgICB9KVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXlIb29rLCB7IGFsaWFzZXM6IHsgJ2FjdGlvbjpkdW1teSc6ICdkdW1teScgfSB9KVxuICAgIGF0bGFzLmhvb2soJ2Fub3RoZXInLCBBbm90aGVySG9vaywgeyBhbGlhc2VzOiB7ICdhY3Rpb246ZHVtbXknOiAnZHVtbXknIH0gfSlcbiAgICBhdGxhcy5ob29rKCd1bnJlbGF0ZWQnLCBVbnJlbGF0ZWRIb29rLCB7IGFsaWFzZXM6IHsgJ2FjdGlvbjp1bnJlbGF0ZWQnOiAndW5yZWxhdGVkJyB9IH0pXG4gICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIER1bW15QWN0aW9uKVxuICAgIGF0bGFzLmFjdGlvbigndW5yZWxhdGVkJywgVW5yZWxhdGVkQWN0aW9uKVxuXG4gICAgcmV0dXJuIGF0bGFzLnN0YXJ0KClcbiAgfSlcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBEdW1teUhvb2sucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gc2lub24uc3R1YigpXG4gICAgQW5vdGhlckhvb2sucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gc2lub24uc3R1YigpXG4gICAgVW5yZWxhdGVkSG9vay5wcm90b3R5cGUuaGFuZGxlRXZlbnQgPSBzaW5vbi5zdHViKClcbiAgfSlcblxuXG4gIGl0KCdkaXNwYXRjaGVzIGEgY3VzdG9tIGV2ZW50IGZyb20gYSBjb21wb25lbnQgdG8gYWxsIG9ic2VydmluZyBob29rcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0ge31cblxuICAgIGF3YWl0IGF0bGFzLmFjdGlvbnMuZHVtbXkudHJpZ2dlcignaGFuZGxlRXZlbnQnLCBjb250ZXh0KVxuXG4gICAgZXhwZWN0KER1bW15SG9vay5wcm90b3R5cGUuaGFuZGxlRXZlbnQpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgZXhwZWN0KER1bW15SG9vay5wcm90b3R5cGUuaGFuZGxlRXZlbnQpLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKGNvbnRleHQpXG4gICAgZXhwZWN0KEFub3RoZXJIb29rLnByb3RvdHlwZS5oYW5kbGVFdmVudCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICBleHBlY3QoQW5vdGhlckhvb2sucHJvdG90eXBlLmhhbmRsZUV2ZW50KS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChjb250ZXh0KVxuICB9KVxuXG4gIGl0KCdkb2VzIG5vdCBkaXNwYXRjaCB0aGUgZXZlbnQgdG8gaG9va3Mgbm90IG9ic2VydmluZyB0aGUgY29tcG9uZW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGF0bGFzLmFjdGlvbnMuZHVtbXkudHJpZ2dlcignaGFuZGxlRXZlbnQnKVxuXG4gICAgZXhwZWN0KFVucmVsYXRlZEhvb2sucHJvdG90eXBlLmhhbmRsZUV2ZW50KS50by5oYXZlLmNhbGxDb3VudCgwKVxuICB9KVxuXG4gIGl0KCdkb2VzIG5vdCBjcmFzaCBpZiBzb21lIGhvb2sgZG9lcyBub3QgaGFuZGxlIHRoZSBkaXNwYXRjaGVkIGV2ZW50JywgKCkgPT4ge1xuICAgIER1bW15SG9vay5wcm90b3R5cGUuaGFuZGxlT3RoZXJFdmVudCA9IHNpbm9uLnN0dWIoKVxuXG4gICAgcmV0dXJuIGV4cGVjdChhdGxhcy5hY3Rpb25zLmR1bW15LnRyaWdnZXIoJ2hhbmRsZU90aGVyRXZlbnQnKSlcbiAgICAgIC50by5ub3QuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3N0aWxsIHJlc29sdmVzIGV2ZW4gaWYgb25lIG9mIHRoZSBob29rcyB0aHJvd3MnLCBhc3luYyAoKSA9PiB7XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMoe1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGF0bGFzOiB7IGxvZzogeyBsZXZlbDogJ2ZhdGFsJyB9IH0sXG4gICAgICB9LFxuICAgIH0pXG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2ssIHsgYWxpYXNlczogeyAnYWN0aW9uOmR1bW15JzogJ2R1bW15JyB9IH0pXG4gICAgYXRsYXMuaG9vaygnYW5vdGhlcicsIEFub3RoZXJIb29rLCB7IGFsaWFzZXM6IHsgJ2FjdGlvbjpkdW1teSc6ICdkdW1teScgfSB9KVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbilcblxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgIER1bW15SG9vay5wcm90b3R5cGUuaGFuZGxlRXZlbnQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgIEFub3RoZXJIb29rLnByb3RvdHlwZS5oYW5kbGVFdmVudCA9IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcigndS1vaCcpKVxuXG4gICAgcmV0dXJuIGV4cGVjdChhdGxhcy5hY3Rpb25zLmR1bW15LnRyaWdnZXIoJ2hhbmRsZUV2ZW50JykpXG4gICAgICAudG8ubm90LmJlLmV2ZW50dWFsbHkucmVqZWN0ZWRXaXRoKEVycm9yKVxuICB9KVxufSlcbiJdfQ==

@@ -11,5 +11,8 @@ "use strict";

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
class DummyHook extends _hook.default {}
DummyHook.observes = 'atlas';
_defineProperty(DummyHook, "observes", 'atlas');
describe('Atlas::hook()', () => {

@@ -120,3 +123,4 @@ let atlas;

Dummy.observes = 'service:dummy';
_defineProperty(Dummy, "observes", 'service:dummy');
expect(() => {

@@ -133,3 +137,4 @@ atlas.hook('dummy', Dummy, {

Dummy.observes = 'service:dummy';
_defineProperty(Dummy, "observes", 'service:dummy');
expect(() => {

@@ -172,3 +177,4 @@ atlas.hook('dummy', Dummy);

Dummy.observes = 'atlas';
_defineProperty(Dummy, "observes", 'atlas');
expect(() => {

@@ -179,2 +185,2 @@ atlas.hook('dummy', Dummy);

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhvb2sudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlIb29rIiwiSG9vayIsIm9ic2VydmVzIiwiZGVzY3JpYmUiLCJhdGxhcyIsIm9wdGlvbnMiLCJiZWZvcmVFYWNoIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsImhvb2tzIiwiZHVtbXkiLCJ0ZXN0IiwiQXRsYXMiLCJpdCIsImV4cGVjdCIsImhvb2siLCJ0byIsImVxdWFsIiwidGhyb3ciLCJGcmFtZXdvcmtFcnJvciIsInNpbm9uIiwic3B5IiwiYXJncyIsImdldENhbGwiLCJoYXZlIiwicHJvcGVydHkiLCJsb2ciLCJiZSIsImFuIiwiY2hpbmRpbmdzIiwibWF0Y2giLCJjb21wb25lbnQiLCJhIiwiZGVmYXVsdHMiLCJkZWZhdWx0IiwicmVxdWlyZXMiLCJhbGlhc2VzIiwibm90IiwiRHVtbXkiLCJsb2wiLCJ0eXBlIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiVmFsaWRhdGlvbkVycm9yIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOzs7O0FBS0EsTUFBTUEsU0FBTixTQUF3QkMsYUFBeEIsQ0FBNkI7O0FBQXZCRCxTLENBQ0dFLFEsR0FBVyxPO0FBR3BCQyxTQUFTLGVBQVQsRUFBMEIsTUFBTTtBQUM5QixNQUFJQyxLQUFKO0FBQ0EsTUFBSUMsT0FBSjtBQUVBQyxhQUFXLE1BQU07QUFDZkQsY0FBVTtBQUNSRSxZQUFNQyxTQURFO0FBRVJDLGNBQVE7QUFDTkMsZUFBTztBQUNMQyxpQkFBTztBQUNMQyxrQkFBTTtBQUREO0FBREY7QUFERDtBQUZBLEtBQVY7QUFVQVIsWUFBUSxJQUFJUyxPQUFKLENBQVVSLE9BQVYsQ0FBUjtBQUNELEdBWkQ7QUFjQVMsS0FBRyxjQUFILEVBQW1CLE1BQU07QUFDdkJDLFdBQU9YLE1BQU1ZLElBQU4sQ0FBVyxPQUFYLEVBQW9CaEIsU0FBcEIsQ0FBUCxFQUF1Q2lCLEVBQXZDLENBQTBDQyxLQUExQyxDQUFnRGQsS0FB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ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcbmltcG9ydCB7XG4gIEZyYW1ld29ya0Vycm9yLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5cbmNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge1xuICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG59XG5cbmRlc2NyaWJlKCdBdGxhczo6aG9vaygpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gIH0pXG5cbiAgaXQoJ3JldHVybnMgdGhpcycsICgpID0+IHtcbiAgICBleHBlY3QoYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIGFsaWFzIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIGhvb2snLCAoKSA9PiB7XG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXlIb29rKSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIHRoZSBob29rIGlzIG5vdCBhIGNsYXNzL2Z1bmN0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5ob29rKCdkdW1teScsIHt9KSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSBhdGxhcyBvbiBob29rIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2suY29uZmlnID0ge31cbiAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2spXG4gICAgY29uc3QgYXJncyA9IGhvb2suZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnYXRsYXMnKVxuICAgIGV4cGVjdChhcmdzLmF0bGFzKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgYSBsb2dnZXIgaW5zdGFuY2Ugb24gaG9vayBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIGNvbnN0IGFyZ3MgPSBob29rLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2xvZycpXG4gICAgZXhwZWN0KGFyZ3MubG9nKS50by5iZS5hbignb2JqZWN0JylcbiAgICBleHBlY3QoYXJncy5sb2cuY2hpbmRpbmdzKS50by5tYXRjaCgvXCJob29rXCI6XCJkdW1teVwiLylcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgY29uZmlnIG9iamVjdCBvbiBob29rIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2suY29uZmlnID0ge31cbiAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2spXG4gICAgY29uc3QgYXJncyA9IGhvb2suZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29uZmlnJylcbiAgICBleHBlY3QoYXJncy5jb25maWcpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uZXF1YWwob3B0aW9ucy5jb25maWcuaG9va3MuZHVtbXkpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG9uIGhvb2sgY29uc3RydWN0b3IgYXJndW1lbnQgYXMgYGNvbXBvbmVudGAnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdjb21wb25lbnQnKVxuICAgIGV4cGVjdChhcmdzLmNvbXBvbmVudCkudG8uYmUuYSgnZnVuY3Rpb24nKVxuICB9KVxuXG4gIGl0KCdhcHBsaWVzIGRlZmF1bHRzIGRlZmluZWQgb24gaG9vayBvbiB0b3Agb2YgdXNlci1wcm92aWRlZCBjb25maWcnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGhvb2suZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZGVmYXVsdCcsIHRydWUpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsaWFzZXMgZG8gbm90IHNhdGlzZnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb21wb25lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGhvb2sucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknLCAnYWN0aW9uOmR1bW15J11cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBleHRyYW5lb3VzIGFsaWFzZXMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaywgeyBhbGlhc2VzOiB7XG4gICAgICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgICAgIH0gfSlcbiAgICB9KS50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL1VubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCBkdW1teS8pXG4gIH0pXG5cbiAgaXQoJ3dvcmtzIHdoZW4gYWxsIHJlcXVpcmVtZW50cyBhcmUgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2suY29uZmlnID0ge31cbiAgICBob29rLnJlcXVpcmVzID0gWydzZXJ2aWNlOmR1bW15JywgJ2FjdGlvbjpkdW1teSddXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaywgeyBhbGlhc2VzOiB7XG4gICAgICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgICAgICAgJ2FjdGlvbjpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcblxuICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBhbGlhc2VzIGluY2x1ZGUgdGhlIG9ic2VydmVkIGNvbXBvbmVudCcsICgpID0+IHtcbiAgICBjbGFzcyBEdW1teSBleHRlbmRzIEhvb2sge1xuICAgICAgc3RhdGljIG9ic2VydmVzID0gJ3NlcnZpY2U6ZHVtbXknXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXksIHsgYWxpYXNlczoge1xuICAgICAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIG9ic2VydmVkIGNvbXBvbmVudCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFsaWFzZXMnLCAoKSA9PiB7XG4gICAgY2xhc3MgRHVtbXkgZXh0ZW5kcyBIb29rIHtcbiAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdzZXJ2aWNlOmR1bW15J1xuICAgIH1cblxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5ob29rKCdkdW1teScsIER1bW15KVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB1c2VyIGNvbmZpZyBmYWlscyBjb21wb25lbnQgY29uZmlnIHNjaGVtYScsICgpID0+IHtcbiAgICBvcHRpb25zLmNvbmZpZy5ob29rcy5kdW1teSA9IHsgbG9sOiB0cnVlIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuXG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaykpLnRvLnRocm93KFZhbGlkYXRpb25FcnJvcilcbiAgfSlcblxuICBpdCgnd29ya3Mgd2hlbiB1c2VyIGNvbmZpZyBwYXNzZXMgY29tcG9uZW50IGNvbmZpZyBzY2hlbWEnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaykpLm5vdC50by50aHJvdyhWYWxpZGF0aW9uRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ2RvZXMgbm90IHRocm93IGlmIGEgaG9vayBvYnNlcnZlcyB0aGUgYXRsYXMgaW5zdGFuY2UgYW5kIGF0bGFzIGlzIG5vdCBpbiBhbGlhc2VzJywgKCkgPT4ge1xuICAgIGNsYXNzIER1bW15IGV4dGVuZHMgSG9vayB7XG4gICAgICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXkpXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcbn0pXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhvb2sudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlIb29rIiwiSG9vayIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJob29rcyIsImR1bW15IiwidGVzdCIsIkF0bGFzIiwiaXQiLCJleHBlY3QiLCJob29rIiwidG8iLCJlcXVhbCIsInRocm93IiwiRnJhbWV3b3JrRXJyb3IiLCJzaW5vbiIsInNweSIsImFyZ3MiLCJnZXRDYWxsIiwiaGF2ZSIsInByb3BlcnR5IiwibG9nIiwiYmUiLCJhbiIsImNoaW5kaW5ncyIsIm1hdGNoIiwiY29tcG9uZW50IiwiYSIsImRlZmF1bHRzIiwiZGVmYXVsdCIsInJlcXVpcmVzIiwiYWxpYXNlcyIsIm5vdCIsIkR1bW15IiwibG9sIiwidHlwZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIlZhbGlkYXRpb25FcnJvciJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFDQTs7QUFDQTs7Ozs7O0FBS0EsTUFBTUEsU0FBTixTQUF3QkMsYUFBeEIsQ0FBNkI7O2dCQUF2QkQsUyxjQUNjLE87O0FBR3BCRSxTQUFTLGVBQVQsRUFBMEIsTUFBTTtBQUM5QixNQUFJQyxLQUFKO0FBQ0EsTUFBSUMsT0FBSjtBQUVBQyxhQUFXLE1BQU07QUFDZkQsY0FBVTtBQUNSRSxZQUFNQyxTQURFO0FBRVJDLGNBQVE7QUFDTkMsZUFBTztBQUNMQyxpQkFBTztBQUNMQyxrQkFBTTtBQUREO0FBREY7QUFERDtBQUZBLEtBQVY7QUFVQVIsWUFBUSxJQUFJUyxPQUFKLENBQVVSLE9BQVYsQ0FBUjtBQUNELEdBWkQ7QUFjQVMsS0FBRyxjQUFILEVBQW1CLE1BQU07QUFDdkJDLFdBQU9YLE1BQU1ZLElBQU4sQ0FBVyxPQUFYLEVBQW9CZixTQUFwQixDQUFQLEVBQXVDZ0IsRUFBdkMsQ0FBMENDLEtBQTFDLENBQWdEZCxLQUFoRDtBQUNELEdBRkQ7QUFJ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XG5pbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcbmltcG9ydCB7XG4gIEZyYW1ld29ya0Vycm9yLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5cbmNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge1xuICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG59XG5cbmRlc2NyaWJlKCdBdGxhczo6aG9vaygpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gIH0pXG5cbiAgaXQoJ3JldHVybnMgdGhpcycsICgpID0+IHtcbiAgICBleHBlY3QoYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIGFsaWFzIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIGhvb2snLCAoKSA9PiB7XG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXlIb29rKSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIHRoZSBob29rIGlzIG5vdCBhIGNsYXNzL2Z1bmN0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5ob29rKCdkdW1teScsIHt9KSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSBhdGxhcyBvbiBob29rIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2suY29uZmlnID0ge31cbiAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2spXG4gICAgY29uc3QgYXJncyA9IGhvb2suZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnYXRsYXMnKVxuICAgIGV4cGVjdChhcmdzLmF0bGFzKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgYSBsb2dnZXIgaW5zdGFuY2Ugb24gaG9vayBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIGNvbnN0IGFyZ3MgPSBob29rLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2xvZycpXG4gICAgZXhwZWN0KGFyZ3MubG9nKS50by5iZS5hbignb2JqZWN0JylcbiAgICBleHBlY3QoYXJncy5sb2cuY2hpbmRpbmdzKS50by5tYXRjaCgvXCJob29rXCI6XCJkdW1teVwiLylcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgY29uZmlnIG9iamVjdCBvbiBob29rIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2suY29uZmlnID0ge31cbiAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2spXG4gICAgY29uc3QgYXJncyA9IGhvb2suZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29uZmlnJylcbiAgICBleHBlY3QoYXJncy5jb25maWcpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uZXF1YWwob3B0aW9ucy5jb25maWcuaG9va3MuZHVtbXkpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG9uIGhvb2sgY29uc3RydWN0b3IgYXJndW1lbnQgYXMgYGNvbXBvbmVudGAnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdjb21wb25lbnQnKVxuICAgIGV4cGVjdChhcmdzLmNvbXBvbmVudCkudG8uYmUuYSgnZnVuY3Rpb24nKVxuICB9KVxuXG4gIGl0KCdhcHBsaWVzIGRlZmF1bHRzIGRlZmluZWQgb24gaG9vayBvbiB0b3Agb2YgdXNlci1wcm92aWRlZCBjb25maWcnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGhvb2suZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZGVmYXVsdCcsIHRydWUpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsaWFzZXMgZG8gbm90IHNhdGlzZnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb21wb25lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGhvb2sucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknLCAnYWN0aW9uOmR1bW15J11cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBleHRyYW5lb3VzIGFsaWFzZXMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaywgeyBhbGlhc2VzOiB7XG4gICAgICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgICAgIH0gfSlcbiAgICB9KS50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL1VubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCBkdW1teS8pXG4gIH0pXG5cbiAgaXQoJ3dvcmtzIHdoZW4gYWxsIHJlcXVpcmVtZW50cyBhcmUgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2suY29uZmlnID0ge31cbiAgICBob29rLnJlcXVpcmVzID0gWydzZXJ2aWNlOmR1bW15JywgJ2FjdGlvbjpkdW1teSddXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaywgeyBhbGlhc2VzOiB7XG4gICAgICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgICAgICAgJ2FjdGlvbjpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcblxuICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBhbGlhc2VzIGluY2x1ZGUgdGhlIG9ic2VydmVkIGNvbXBvbmVudCcsICgpID0+IHtcbiAgICBjbGFzcyBEdW1teSBleHRlbmRzIEhvb2sge1xuICAgICAgc3RhdGljIG9ic2VydmVzID0gJ3NlcnZpY2U6ZHVtbXknXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXksIHsgYWxpYXNlczoge1xuICAgICAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIG9ic2VydmVkIGNvbXBvbmVudCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFsaWFzZXMnLCAoKSA9PiB7XG4gICAgY2xhc3MgRHVtbXkgZXh0ZW5kcyBIb29rIHtcbiAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdzZXJ2aWNlOmR1bW15J1xuICAgIH1cblxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5ob29rKCdkdW1teScsIER1bW15KVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB1c2VyIGNvbmZpZyBmYWlscyBjb21wb25lbnQgY29uZmlnIHNjaGVtYScsICgpID0+IHtcbiAgICBvcHRpb25zLmNvbmZpZy5ob29rcy5kdW1teSA9IHsgbG9sOiB0cnVlIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuXG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaykpLnRvLnRocm93KFZhbGlkYXRpb25FcnJvcilcbiAgfSlcblxuICBpdCgnd29ya3Mgd2hlbiB1c2VyIGNvbmZpZyBwYXNzZXMgY29tcG9uZW50IGNvbmZpZyBzY2hlbWEnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaykpLm5vdC50by50aHJvdyhWYWxpZGF0aW9uRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ2RvZXMgbm90IHRocm93IGlmIGEgaG9vayBvYnNlcnZlcyB0aGUgYXRsYXMgaW5zdGFuY2UgYW5kIGF0bGFzIGlzIG5vdCBpbiBhbGlhc2VzJywgKCkgPT4ge1xuICAgIGNsYXNzIER1bW15IGV4dGVuZHMgSG9vayB7XG4gICAgICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXkpXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcbn0pXG4iXX0=

@@ -12,6 +12,9 @@ "use strict";

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
class DummyHook extends _hook.default {}
exports.default = DummyHook;
DummyHook.observes = 'atlas';
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR1bW15Lm1qcyJdLCJuYW1lcyI6WyJEdW1teUhvb2siLCJIb29rIiwib2JzZXJ2ZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUVlLE1BQU1BLFNBQU4sU0FBd0JDLGFBQXhCLENBQTZCOzs7QUFBdkJELFMsQ0FDWkUsUSxHQUFXLE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVtbXlIb29rIGV4dGVuZHMgSG9vayB7XG4gIHN0YXRpYyBvYnNlcnZlcyA9ICdhdGxhcydcbn1cbiJdfQ==
_defineProperty(DummyHook, "observes", 'atlas');
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImR1bW15Lm1qcyJdLCJuYW1lcyI6WyJEdW1teUhvb2siLCJIb29rIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7OztBQUVlLE1BQU1BLFNBQU4sU0FBd0JDLGFBQXhCLENBQTZCOzs7O2dCQUF2QkQsUyxjQUNELE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVtbXlIb29rIGV4dGVuZHMgSG9vayB7XG4gIHN0YXRpYyBvYnNlcnZlcyA9ICdhdGxhcydcbn1cbiJdfQ==

@@ -15,2 +15,4 @@ "use strict";

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
class ServiceApi {}

@@ -20,16 +22,21 @@

DummyService.defaults = {
_defineProperty(DummyService, "defaults", {
default: true
};
});
class DummyHook extends _hook.default {}
DummyHook.observes = 'atlas';
DummyHook.defaults = {
_defineProperty(DummyHook, "observes", 'atlas');
_defineProperty(DummyHook, "defaults", {
default: true
};
});
class DummyAction extends _action.default {
dummyMethod() {}
constructor(...args) {
super(...args);
_defineProperty(this, "dummyMethod", sinon.stub());
}
}

@@ -92,6 +99,7 @@

});
xit('does not expose services marked as internal', async () => {
it('does not expose services marked as internal', async () => {
class InternalService extends _service.default {}
InternalService.internal = true;
_defineProperty(InternalService, "internal", true);
atlas.service('internal', InternalService);

@@ -109,6 +117,7 @@ await atlas.prepare();

});
xit('does not expose actions marked as internal', async () => {
it('does not expose actions marked as internal', async () => {
class InternalAction extends _action.default {}
InternalAction.internal = true;
_defineProperty(InternalAction, "internal", true);
atlas.action('internal', InternalAction);

@@ -137,3 +146,4 @@ await atlas.prepare();

Empty.observes = 'atlas';
_defineProperty(Empty, "observes", 'atlas');
atlas.hook('empty', Empty);

@@ -146,6 +156,6 @@ await atlas.prepare();

atlas.hook('empty', Empty);
return expect(atlas.prepare()).to.be.rejectedWith(_errors.FrameworkError, /does not have static 'observes' property/i);
return expect(atlas.prepare()).to.eventually.be.rejectedWith(_errors.FrameworkError, /does not have static 'observes' property/i);
});
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByZXBhcmUudGVzdC5tanMiXSwibmFtZXMiOlsiU2VydmljZUFwaSIsIkR1bW15U2VydmljZSIsIlNlcnZpY2UiLCJkZWZhdWx0cyIsImRlZmF1bHQiLCJEdW1teUhvb2siLCJIb29rIiwib2JzZXJ2ZXMiLCJEdW1teUFjdGlvbiIsIkFjdGlvbiIsImR1bW15TWV0aG9kIiwiZGVzY3JpYmUiLCJhdGxhcyIsIm9wdGlvbnMiLCJiZWZvcmVFYWNoIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsInNlcnZpY2VzIiwiZHVtbXkiLCJ0ZXN0IiwiaG9va3MiLCJBdGxhcyIsIml0IiwiZXhwZWN0IiwicHJlcGFyZSIsInRvIiwiYmUiLCJpbnN0YW5jZW9mIiwiUHJvbWlzZSIsImVxdWFsIiwicHJlcGFyZWQiLCJwcm90b3R5cGUiLCJzaW5vbiIsInN0dWIiLCJyZXNvbHZlcyIsInNlcnZpY2UiLCJoYXZlIiwiY2FsbENvdW50IiwiaW5zdGFuY2UiLCJhcGkiLCJwcm9wZXJ0eSIsInhpdCIsIkludGVybmFsU2VydmljZSIsImludGVybmFsIiwibm90IiwiYWN0aW9uIiwiYWN0aW9ucyIsInJlc3BvbmRUbyIsIkludGVybmFsQWN0aW9uIiwiYWZ0ZXJQcmVwYXJlIiwiaG9vayIsInByb3RvIiwiYmVlbiIsImNhbGxlZFdpdGgiLCJFbXB0eSIsInJlamVjdGVkV2l0aCIsIkZyYW1ld29ya0Vycm9yIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsVUFBTixDQUFpQjs7QUFFakIsTUFBTUMsWUFBTixTQUEyQkMsZ0JBQTNCLENBQW1DOztBQUE3QkQsWSxDQUNHRSxRLEdBQVc7QUFBRUMsV0FBUztBQUFYLEM7O0FBR3BCLE1BQU1DLFNBQU4sU0FBd0JDLGFBQXhCLENBQTZCOztBQUF2QkQsUyxDQUNHRSxRLEdBQVcsTztBQURkRixTLENBRUdGLFEsR0FBVztBQUFFQyxXQUFTO0FBQVgsQzs7QUFHcEIsTUFB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Q3hDLFlBQU1YLE1BQU1hLE9BQU4sRUFBTjtBQUVBRCxhQUFPbkIsVUFBVTJCLFNBQVYsQ0FBb0JrQixZQUEzQixFQUF5Q3hCLEVBQXpDLENBQTRDVyxJQUE1QyxDQUFpREMsU0FBakQsQ0FBMkQsQ0FBM0Q7QUFDRCxLQUpEO0FBTUFmLE9BQUcscURBQUgsRUFBMEQsWUFBWTtBQUNwRSxZQUFNNkIsUUFBUS9DLFVBQVUyQixTQUF4QjtBQUNBLFlBQU1wQixNQUFNYSxPQUFOLEVBQU47QUFFQUQsYUFBTzRCLE1BQU1GLFlBQWIsRUFBMkJ4QixFQUEzQixDQUE4QlcsSUFBOUIsQ0FBbUNnQixJQUFuQyxDQUF3Q0MsVUFBeEMsQ0FBbUQxQyxLQUFuRDtBQUNELEtBTEQ7QUFPQVcsT0FBRyx1REFBSCxFQUE0RCxZQUFZO0FBQ3RFLFlBQU1nQyxLQUFOLFNBQW9CakQsYUFBcEIsQ0FBeUI7O0FBQW5CaUQsV0FEZ0UsQ0FFN0RoRCxRQUY2RCxHQUVsRCxPQUZrRDtBQUt0RUssWUFBTXVDLElBQU4sQ0FBVyxPQUFYLEVBQW9CSSxLQUFwQjtBQUVBLFlBQU0zQyxNQUFNYSxPQUFOLEVBQU47QUFDRCxLQVJEO0FBVUFGLE9BQUcsd0VBQUgsRUFBNkUsTUFBTTtBQUNqRixZQUFNZ0MsS0FBTixTQUFvQmpELGFBQXBCLENBQXlCOztBQUV6Qk0sWUFBTXVDLElBQU4sQ0FBVyxPQUFYLEVBQW9CSSxLQUFwQjtBQUVBLGFBQU8vQixPQUFPWixNQUFNYSxPQUFOLEVBQVAsRUFBd0JDLEVBQXhCLENBQTJCQyxFQUEzQixDQUE4QjZCLFlBQTlCLENBQ0xDLHNCQURLLEVBRUwsMkNBRkssQ0FBUDtBQUlELEtBVEQ7QUFVRCxHQXpDRDtBQTBDRCxDQS9JRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgU2VydmljZSBmcm9tICdAYXRsYXMuanMvc2VydmljZSdcbmltcG9ydCBIb29rIGZyb20gJ0BhdGxhcy5qcy9ob29rJ1xuaW1wb3J0IEFjdGlvbiBmcm9tICdAYXRsYXMuanMvYWN0aW9uJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuXG5jbGFzcyBTZXJ2aWNlQXBpIHt9XG5cbmNsYXNzIER1bW15U2VydmljZSBleHRlbmRzIFNlcnZpY2Uge1xuICBzdGF0aWMgZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxufVxuXG5jbGFzcyBEdW1teUhvb2sgZXh0ZW5kcyBIb29rIHtcbiAgc3RhdGljIG9ic2VydmVzID0gJ2F0bGFzJ1xuICBzdGF0aWMgZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxufVxuXG5jbGFzcyBEdW1teUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIGR1bW15TWV0aG9kKCkge31cbn1cblxuZGVzY3JpYmUoJ0F0bGFzOjpwcmVwYXJlKCknLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuICBsZXQgb3B0aW9uc1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgc2VydmljZXM6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBob29rczoge1xuICAgICAgICAgIGR1bW15OiB7XG4gICAgICAgICAgICB0ZXN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICB9KVxuXG5cbiAgaXQoJ2lzIGFzeW5jJywgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5wcmVwYXJlKCkpLnRvLmJlLmluc3RhbmNlb2YoUHJvbWlzZSlcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhd2FpdCBhdGxhcy5wcmVwYXJlKCkpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCdzZXRzIGF0bGFzLnByZXBhcmVkIHRvIHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmVkKS50by5lcXVhbChmYWxzZSlcbiAgICBhd2FpdCBhdGxhcy5wcmVwYXJlKClcbiAgICBleHBlY3QoYXRsYXMucHJlcGFyZWQpLnRvLmVxdWFsKHRydWUpXG4gIH0pXG5cblxuICBkZXNjcmliZSgnU2VydmljZSBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnByZXBhcmUgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMobmV3IFNlcnZpY2VBcGkoKSlcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgIH0pXG5cblxuICAgIGl0KCdjYWxscyBwcmVwYXJlIG9uIHRoZSBzZXJ2aWNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgnZXhwb3NlcyB0aGUgcmV0dXJuZWQgaW5zdGFuY2Ugb24gYXRsYXMuc2VydmljZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHsgYXBpOiB0cnVlIH1cbiAgICAgIER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZS5yZXNvbHZlcyhpbnN0YW5jZSlcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QoYXRsYXMuc2VydmljZXMpLnRvLmhhdmUucHJvcGVydHkoJ2R1bW15JylcbiAgICAgIGV4cGVjdChhdGxhcy5zZXJ2aWNlcy5kdW1teSkudG8uZXF1YWwoaW5zdGFuY2UpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgbWV0aG9kIG9ubHkgb25jZSBmb3IgZWFjaCBzZXJ2aWNlIGZvciBtdWx0aXBsZSAucHJlcGFyZSgpIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG4gICAgICBhd2FpdCBhdGxhcy5wcmVwYXJlKClcblxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZSkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgLy8gQFRPRE86IEltcGxlbWVudCBpbnRlcm5hbCBjb21wb25lbnRzXG4gICAgeGl0KCdkb2VzIG5vdCBleHBvc2Ugc2VydmljZXMgbWFya2VkIGFzIGludGVybmFsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgSW50ZXJuYWxTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7XG4gICAgICAgIHN0YXRpYyBpbnRlcm5hbCA9IHRydWVcbiAgICAgIH1cbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2ludGVybmFsJywgSW50ZXJuYWxTZXJ2aWNlKVxuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG5cbiAgICAgIGV4cGVjdChhdGxhcy5zZXJ2aWNlcykubm90LnRvLmhhdmUucHJvcGVydHkoJ2ludGVybmFsJylcbiAgICB9KVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ0FjdGlvbiBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ2V4cG9zZXMgYWxsIGFjdGlvbnMgb24gdGhpcy5hY3Rpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIER1bW15QWN0aW9uKVxuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG5cbiAgICAgIGV4cGVjdChhdGxhcy5hY3Rpb25zKS50by5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgICBleHBlY3QoYXRsYXMuYWN0aW9ucy5kdW1teSkudG8ucmVzcG9uZFRvKCdkdW1teU1ldGhvZCcpXG4gICAgfSlcblxuICAgIC8vIEBUT0RPOiBJbXBsZW1lbnQgaW50ZXJuYWwgY29tcG9uZW50c1xuICAgIHhpdCgnZG9lcyBub3QgZXhwb3NlIGFjdGlvbnMgbWFya2VkIGFzIGludGVybmFsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgSW50ZXJuYWxBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICAgICAgICBzdGF0aWMgaW50ZXJuYWwgPSB0cnVlXG4gICAgICB9XG4gICAgICBhdGxhcy5hY3Rpb24oJ2ludGVybmFsJywgSW50ZXJuYWxBY3Rpb24pXG4gICAgICBhd2FpdCBhdGxhcy5wcmVwYXJlKClcblxuICAgICAgZXhwZWN0KGF0bGFzLmFjdGlvbnMpLm5vdC50by5oYXZlLnByb3BlcnR5KCdpbnRlcm5hbCcpXG4gICAgfSlcbiAgfSlcblxuICBkZXNjcmliZSgnSG9vayBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBEdW1teUhvb2sucHJvdG90eXBlLmFmdGVyUHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG5cbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgcHJlcGFyZSBob29rcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QoRHVtbXlIb29rLnByb3RvdHlwZS5hZnRlclByZXBhcmUpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgYWZ0ZXJQcmVwYXJlIGhvb2sgd2l0aCB0aGUgYXRsYXMgaW5zdGFuY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QocHJvdG8uYWZ0ZXJQcmVwYXJlKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICB9KVxuXG4gICAgaXQoJ2NhbiBoYW5kbGUgaG9va3Mgd2hpY2ggZG8gbm90IGltcGxlbWVudCBhbnkgbGlzdGVuZXJzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgRW1wdHkgZXh0ZW5kcyBIb29rIHtcbiAgICAgICAgc3RhdGljIG9ic2VydmVzID0gJ2F0bGFzJ1xuICAgICAgfVxuXG4gICAgICBhdGxhcy5ob29rKCdlbXB0eScsIEVtcHR5KVxuICAgICAgLy8gVGhpcyBub3QgdGhyb3dpbmcgd2lsbCBzdWZmaWNlIPCfmI5cbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuICAgIH0pXG5cbiAgICBpdCgndGhyb3dzIHdoZW4gYSBob29rIGRvZXMgbm90IGRlY2xhcmUgdGhlIGNvbXBvbmVudCB0aGV5IHdhbnQgdG8gb2JzZXJ2ZScsICgpID0+IHtcbiAgICAgIGNsYXNzIEVtcHR5IGV4dGVuZHMgSG9vayB7fVxuXG4gICAgICBhdGxhcy5ob29rKCdlbXB0eScsIEVtcHR5KVxuXG4gICAgICByZXR1cm4gZXhwZWN0KGF0bGFzLnByZXBhcmUoKSkudG8uYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICBGcmFtZXdvcmtFcnJvcixcbiAgICAgICAgL2RvZXMgbm90IGhhdmUgc3RhdGljICdvYnNlcnZlcycgcHJvcGVydHkvaSxcbiAgICAgIClcbiAgICB9KVxuICB9KVxufSlcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByZXBhcmUudGVzdC5tanMiXSwibmFtZXMiOlsiU2VydmljZUFwaSIsIkR1bW15U2VydmljZSIsIlNlcnZpY2UiLCJkZWZhdWx0IiwiRHVtbXlIb29rIiwiSG9vayIsIkR1bW15QWN0aW9uIiwiQWN0aW9uIiwic2lub24iLCJzdHViIiwiZGVzY3JpYmUiLCJhdGxhcyIsIm9wdGlvbnMiLCJiZWZvcmVFYWNoIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsInNlcnZpY2VzIiwiZHVtbXkiLCJ0ZXN0IiwiaG9va3MiLCJBdGxhcyIsIml0IiwiZXhwZWN0IiwicHJlcGFyZSIsInRvIiwiYmUiLCJpbnN0YW5jZW9mIiwiUHJvbWlzZSIsImVxdWFsIiwicHJlcGFyZWQiLCJwcm90b3R5cGUiLCJyZXNvbHZlcyIsInNlcnZpY2UiLCJoYXZlIiwiY2FsbENvdW50IiwiaW5zdGFuY2UiLCJhcGkiLCJwcm9wZXJ0eSIsIkludGVybmFsU2VydmljZSIsIm5vdCIsImFjdGlvbiIsImFjdGlvbnMiLCJyZXNwb25kVG8iLCJJbnRlcm5hbEFjdGlvbiIsImFmdGVyUHJlcGFyZSIsImhvb2siLCJwcm90byIsImJlZW4iLCJjYWxsZWRXaXRoIiwiRW1wdHkiLCJldmVudHVhbGx5IiwicmVqZWN0ZWRXaXRoIiwiRnJhbWV3b3JrRXJyb3IiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLFVBQU4sQ0FBaUI7O0FBRWpCLE1BQU1DLFlBQU4sU0FBMkJDLGdCQUEzQixDQUFtQzs7Z0JBQTdCRCxZLGNBQ2M7QUFBRUUsV0FBUztBQUFYLEM7O0FBR3BCLE1BQU1DLFNBQU4sU0FBd0JDLGFBQXhCLENBQTZCOztnQkFBdkJELFMsY0FDYyxPOztnQkFEZEEsUyxjQUVjO0FBQUVELFdBQVM7QUFBWCxDOztBQUdwQixNQUFNRyxXQUFOLFNBQTBCQyxlQUExQixDQUFpQztBQUFBO0FBQUE7O0FBQUEseUNBQ2pCQyxNQUFNQyxJ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MkIsU0FBVixDQUFvQmMsWUFBM0IsRUFBeUNwQixFQUF6QyxDQUE0Q1MsSUFBNUMsQ0FBaURDLFNBQWpELENBQTJELENBQTNEO0FBQ0QsS0FKRDtBQU1BYixPQUFHLHFEQUFILEVBQTBELFlBQVk7QUFDcEUsWUFBTXlCLFFBQVEzQyxVQUFVMkIsU0FBeEI7QUFDQSxZQUFNcEIsTUFBTWEsT0FBTixFQUFOO0FBRUFELGFBQU93QixNQUFNRixZQUFiLEVBQTJCcEIsRUFBM0IsQ0FBOEJTLElBQTlCLENBQW1DYyxJQUFuQyxDQUF3Q0MsVUFBeEMsQ0FBbUR0QyxLQUFuRDtBQUNELEtBTEQ7QUFPQVcsT0FBRyx1REFBSCxFQUE0RCxZQUFZO0FBQ3RFLFlBQU00QixLQUFOLFNBQW9CN0MsYUFBcEIsQ0FBeUI7O0FBRDZDLHNCQUNoRTZDLEtBRGdFLGNBRWxELE9BRmtEOztBQUt0RXZDLFlBQU1tQyxJQUFOLENBQVcsT0FBWCxFQUFvQkksS0FBcEI7QUFFQSxZQUFNdkMsTUFBTWEsT0FBTixFQUFOO0FBQ0QsS0FSRDtBQVVBRixPQUFHLHdFQUFILEVBQTZFLE1BQU07QUFDakYsWUFBTTRCLEtBQU4sU0FBb0I3QyxhQUFwQixDQUF5Qjs7QUFFekJNLFlBQU1tQyxJQUFOLENBQVcsT0FBWCxFQUFvQkksS0FBcEI7QUFFQSxhQUFPM0IsT0FBT1osTUFBTWEsT0FBTixFQUFQLEVBQXdCQyxFQUF4QixDQUEyQjBCLFVBQTNCLENBQXNDekIsRUFBdEMsQ0FBeUMwQixZQUF6QyxDQUNMQyxzQkFESyxFQUVMLDJDQUZLLENBQVA7QUFJRCxLQVREO0FBVUQsR0F6Q0Q7QUEwQ0QsQ0E3SUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0IFNlcnZpY2UgZnJvbSAnQGF0bGFzLmpzL3NlcnZpY2UnXG5pbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcbmltcG9ydCBBY3Rpb24gZnJvbSAnQGF0bGFzLmpzL2FjdGlvbidcbmltcG9ydCB7IEZyYW1ld29ya0Vycm9yIH0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcblxuY2xhc3MgU2VydmljZUFwaSB7fVxuXG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHtcbiAgc3RhdGljIGRlZmF1bHRzID0geyBkZWZhdWx0OiB0cnVlIH1cbn1cblxuY2xhc3MgRHVtbXlIb29rIGV4dGVuZHMgSG9vayB7XG4gIHN0YXRpYyBvYnNlcnZlcyA9ICdhdGxhcydcbiAgc3RhdGljIGRlZmF1bHRzID0geyBkZWZhdWx0OiB0cnVlIH1cbn1cblxuY2xhc3MgRHVtbXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICBkdW1teU1ldGhvZCA9IHNpbm9uLnN0dWIoKVxufVxuXG5kZXNjcmliZSgnQXRsYXM6OnByZXBhcmUoKScsICgpID0+IHtcbiAgbGV0IGF0bGFzXG4gIGxldCBvcHRpb25zXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IF9fZGlybmFtZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBzZXJ2aWNlczoge1xuICAgICAgICAgIGR1bW15OiB7XG4gICAgICAgICAgICB0ZXN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gIH0pXG5cblxuICBpdCgnaXMgYXN5bmMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmUoKSkudG8uYmUuaW5zdGFuY2VvZihQcm9taXNlKVxuICB9KVxuXG4gIGl0KCdyZXR1cm5zIHRoaXMnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF3YWl0IGF0bGFzLnByZXBhcmUoKSkudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3NldHMgYXRsYXMucHJlcGFyZWQgdG8gdHJ1ZScsIGFzeW5jICgpID0+IHtcbiAgICBleHBlY3QoYXRsYXMucHJlcGFyZWQpLnRvLmVxdWFsKGZhbHNlKVxuICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuICAgIGV4cGVjdChhdGxhcy5wcmVwYXJlZCkudG8uZXF1YWwodHJ1ZSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdTZXJ2aWNlIGludGVyYWN0aW9ucycsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhuZXcgU2VydmljZUFwaSgpKVxuICAgICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UpXG4gICAgfSlcblxuXG4gICAgaXQoJ2NhbGxzIHByZXBhcmUgb24gdGhlIHNlcnZpY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5wcmVwYXJlKClcbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnByZXBhcmUpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgfSlcblxuICAgIGl0KCdleHBvc2VzIHRoZSByZXR1cm5lZCBpbnN0YW5jZSBvbiBhdGxhcy5zZXJ2aWNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0geyBhcGk6IHRydWUgfVxuICAgICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlLnJlc29sdmVzKGluc3RhbmNlKVxuICAgICAgYXdhaXQgYXRsYXMucHJlcGFyZSgpXG5cbiAgICAgIGV4cGVjdChhdGxhcy5zZXJ2aWNlcykudG8uaGF2ZS5wcm9wZXJ0eSgnZHVtbXknKVxuICAgICAgZXhwZWN0KGF0bGFzLnNlcnZpY2VzLmR1bW15KS50by5lcXVhbChpbnN0YW5jZSlcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBtZXRob2Qgb25seSBvbmNlIGZvciBlYWNoIHNlcnZpY2UgZm9yIG11bHRpcGxlIC5wcmVwYXJlKCkgY2FsbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5wcmVwYXJlKClcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgnZG9lcyBub3QgZXhwb3NlIHNlcnZpY2VzIG1hcmtlZCBhcyBpbnRlcm5hbCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNsYXNzIEludGVybmFsU2VydmljZSBleHRlbmRzIFNlcnZpY2Uge1xuICAgICAgICBzdGF0aWMgaW50ZXJuYWwgPSB0cnVlXG4gICAgICB9XG4gICAgICBhdGxhcy5zZXJ2aWNlKCdpbnRlcm5hbCcsIEludGVybmFsU2VydmljZSlcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QoYXRsYXMuc2VydmljZXMpLm5vdC50by5oYXZlLnByb3BlcnR5KCdpbnRlcm5hbCcpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdBY3Rpb24gaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdleHBvc2VzIGFsbCBhY3Rpb25zIG9uIHRoaXMuYWN0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbilcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QoYXRsYXMuYWN0aW9ucykudG8uaGF2ZS5wcm9wZXJ0eSgnZHVtbXknKVxuICAgICAgZXhwZWN0KGF0bGFzLmFjdGlvbnMuZHVtbXkpLnRvLnJlc3BvbmRUbygnZHVtbXlNZXRob2QnKVxuICAgIH0pXG5cbiAgICBpdCgnZG9lcyBub3QgZXhwb3NlIGFjdGlvbnMgbWFya2VkIGFzIGludGVybmFsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgSW50ZXJuYWxBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICAgICAgICBzdGF0aWMgaW50ZXJuYWwgPSB0cnVlXG4gICAgICB9XG4gICAgICBhdGxhcy5hY3Rpb24oJ2ludGVybmFsJywgSW50ZXJuYWxBY3Rpb24pXG4gICAgICBhd2FpdCBhdGxhcy5wcmVwYXJlKClcblxuICAgICAgZXhwZWN0KGF0bGFzLmFjdGlvbnMpLm5vdC50by5oYXZlLnByb3BlcnR5KCdpbnRlcm5hbCcpXG4gICAgfSlcbiAgfSlcblxuICBkZXNjcmliZSgnSG9vayBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBEdW1teUhvb2sucHJvdG90eXBlLmFmdGVyUHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG5cbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgcHJlcGFyZSBob29rcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QoRHVtbXlIb29rLnByb3RvdHlwZS5hZnRlclByZXBhcmUpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgYWZ0ZXJQcmVwYXJlIGhvb2sgd2l0aCB0aGUgYXRsYXMgaW5zdGFuY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuXG4gICAgICBleHBlY3QocHJvdG8uYWZ0ZXJQcmVwYXJlKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICB9KVxuXG4gICAgaXQoJ2NhbiBoYW5kbGUgaG9va3Mgd2hpY2ggZG8gbm90IGltcGxlbWVudCBhbnkgbGlzdGVuZXJzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgRW1wdHkgZXh0ZW5kcyBIb29rIHtcbiAgICAgICAgc3RhdGljIG9ic2VydmVzID0gJ2F0bGFzJ1xuICAgICAgfVxuXG4gICAgICBhdGxhcy5ob29rKCdlbXB0eScsIEVtcHR5KVxuICAgICAgLy8gVGhpcyBub3QgdGhyb3dpbmcgd2lsbCBzdWZmaWNlIPCfmI5cbiAgICAgIGF3YWl0IGF0bGFzLnByZXBhcmUoKVxuICAgIH0pXG5cbiAgICBpdCgndGhyb3dzIHdoZW4gYSBob29rIGRvZXMgbm90IGRlY2xhcmUgdGhlIGNvbXBvbmVudCB0aGV5IHdhbnQgdG8gb2JzZXJ2ZScsICgpID0+IHtcbiAgICAgIGNsYXNzIEVtcHR5IGV4dGVuZHMgSG9vayB7fVxuXG4gICAgICBhdGxhcy5ob29rKCdlbXB0eScsIEVtcHR5KVxuXG4gICAgICByZXR1cm4gZXhwZWN0KGF0bGFzLnByZXBhcmUoKSkudG8uZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgIEZyYW1ld29ya0Vycm9yLFxuICAgICAgICAvZG9lcyBub3QgaGF2ZSBzdGF0aWMgJ29ic2VydmVzJyBwcm9wZXJ0eS9pLFxuICAgICAgKVxuICAgIH0pXG4gIH0pXG59KVxuIl19

@@ -11,2 +11,4 @@ "use strict";

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
class ServiceApi {}

@@ -18,3 +20,4 @@

DummyHook.observes = 'atlas';
_defineProperty(DummyHook, "observes", 'atlas');
describe('Atlas::start()', () => {

@@ -68,8 +71,7 @@ let atlas;

});
it('calls start with the instance returned from prepare() step', async function () {
this.sandbox.stub(atlas, 'prepare').resolves(atlas);
it('calls start with the instance returned from prepare() step', async () => {
const instance = {
test: true
};
atlas.services.dummy = instance;
DummyService.prototype.prepare.resolves(instance);
await atlas.start();

@@ -125,3 +127,4 @@ expect(DummyService.prototype.start).to.have.been.calledWith(instance);

Empty.observes = 'atlas';
_defineProperty(Empty, "observes", 'atlas');
atlas.hook('empty', Empty);

@@ -134,3 +137,4 @@ await atlas.start();

ComponentHook.observes = 'service:dummy';
_defineProperty(ComponentHook, "observes", 'service:dummy');
const events = ['beforeStart', 'afterStart'];

@@ -160,3 +164,4 @@ beforeEach(() => {

Empty.observes = 'service:dummy';
_defineProperty(Empty, "observes", 'service:dummy');
atlas.hook('empty', Empty, {

@@ -177,7 +182,8 @@ aliases: {

FirstHook.observes = 'service:first';
_defineProperty(FirstHook, "observes", 'service:first');
class SecondHook extends _hook.default {}
SecondHook.observes = 'service:second';
_defineProperty(SecondHook, "observes", 'service:second');
beforeEach(() => {

@@ -216,2 +222,2 @@ FirstService.prototype.start = sinon.stub().resolves();

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0YXJ0LnRlc3QubWpzIl0sIm5hbWVzIjpbIlNlcnZpY2VBcGkiLCJEdW1teVNlcnZpY2UiLCJTZXJ2aWNlIiwiRHVtbXlIb29rIiwiSG9vayIsIm9ic2VydmVzIiwiZGVzY3JpYmUiLCJhdGxhcyIsIm9wdGlvbnMiLCJiZWZvcmVFYWNoIiwicHJvdG90eXBlIiwicHJlcGFyZSIsInNpbm9uIiwic3R1YiIsInJlc29sdmVzIiwic3RhcnQiLCJzdG9wIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsImxvZyIsImxldmVsIiwic2VydmljZXMiLCJkdW1teSIsInRlc3QiLCJBdGxhcyIsIml0IiwiZXhwZWN0IiwidG8iLCJiZSIsImluc3RhbmNlb2YiLCJQcm9taXNlIiwiZXF1YWwiLCJzdGFydGVkIiwic2FuZGJveCIsImhhdmUiLCJjYWxsQ291bnQiLCJzZXJ2aWNlIiwiaW5zdGFuY2UiLCJiZWVuIiwiY2FsbGVkV2l0aCIsInJlamVjdHMiLCJFcnJvciIsImV2ZW50dWFsbHkiLCJyZWplY3RlZFdpdGgiLCJGYWlsaW5nU2VydmljZSIsImNhdGNoIiwiZXZlbnRzIiwiZXZlbnQiLCJob29rIiwicHJvdG8iLCJFbXB0eSIsIkNvbXBvbmVudEhvb2siLCJhbGlhc2VzIiwiRmlyc3RTZXJ2aWNlIiwiU2Vjb25kU2VydmljZSIsIkZpcnN0SG9vayIsIlNlY29uZEhvb2siLCJiZWZvcmVTdGFydCIsImFmdGVyU3RhcnQiLCJvcmRlciIsImNhbGxzRmFrZSIsInB1c2giLCJvcmRlcmVkIiwibWVtYmVycyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLFVBQU4sQ0FBaUI7O0FBRWpCLE1BQU1DLFlBQU4sU0FBMkJDLGdCQUEzQixDQUFtQzs7QUFFbkMsTUFBTUMsU0FBTixTQUF3QkMsYUFBeEIsQ0FBNkI7O0FBQXZCRCxTLENBQ0dFLFEsR0FBVyxPO0FBR3BCQyxTQUFTLGdCQUFULEVBQTJCLE1BQU07QUFDL0IsTUFBSUMs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Y2UgZnJvbSAnQGF0bGFzLmpzL3NlcnZpY2UnXG5pbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcblxuY2xhc3MgU2VydmljZUFwaSB7fVxuXG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG5cbmNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge1xuICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG59XG5cbmRlc2NyaWJlKCdBdGxhczo6c3RhcnQoKScsICgpID0+IHtcbiAgbGV0IGF0bGFzXG4gIGxldCBvcHRpb25zXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlID0gc2lub24uc3R1YigpLnJlc29sdmVzKG5ldyBTZXJ2aWNlQXBpKCkpXG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcblxuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYXRsYXM6IHtcbiAgICAgICAgICBsb2c6IHtcbiAgICAgICAgICAgIGxldmVsOiAnZmF0YWwnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZpY2VzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gIH0pXG5cblxuICBpdCgnaXMgYXN5bmMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0KCkpLnRvLmJlLmluc3RhbmNlb2YoUHJvbWlzZSlcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhd2FpdCBhdGxhcy5zdGFydCgpKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgnc2V0cyBhdGxhcy5zdGFydGVkIHRvIHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0ZWQpLnRvLmVxdWFsKGZhbHNlKVxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICBleHBlY3QoYXRsYXMuc3RhcnRlZCkudG8uZXF1YWwodHJ1ZSlcbiAgfSlcblxuICBpdCgnY2FsbHMgYXRsYXMucHJlcGFyZSgpJywgYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zYW5kYm94LnN0dWIoYXRsYXMsICdwcmVwYXJlJykucmVzb2x2ZXMoYXRsYXMpXG4gICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmUpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gIH0pXG5cblxuICBkZXNjcmliZSgnU2VydmljZSBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICB9KVxuXG5cbiAgICBpdCgnY2FsbHMgc3RhcnQgb24gdGhlIHNlcnZpY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHN0YXJ0IHdpdGggdGhlIGluc3RhbmNlIHJldHVybmVkIGZyb20gcHJlcGFyZSgpIHN0ZXAnLCBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuc2FuZGJveC5zdHViKGF0bGFzLCAncHJlcGFyZScpLnJlc29sdmVzKGF0bGFzKVxuXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHsgdGVzdDogdHJ1ZSB9XG4gICAgICBhdGxhcy5zZXJ2aWNlcy5kdW1teSA9IGluc3RhbmNlXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0YXJ0KS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChpbnN0YW5jZSlcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBtZXRob2Qgb25seSBvbmNlIGZvciBlYWNoIHNlcnZpY2UgZm9yIG11bHRpcGxlIC5zdGFydCgpIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgaXQoJ3JlLXRocm93cyBjb21wb25lbnQgZXJyb3JzIHRocm93biBkdXJpbmcgLnN0YXJ0KCknLCAoKSA9PiB7XG4gICAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0YXJ0LnJlamVjdHMobmV3IEVycm9yKCdmYWlsIScpKVxuXG4gICAgICByZXR1cm4gZXhwZWN0KGF0bGFzLnN0YXJ0KCkpLnRvLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKC9mYWlsIS8pXG4gICAgfSlcblxuICAgIGl0KCdzdG9wcyBhbHJlYWR5IHN0YXJ0ZWQgc2VydmljZSBpZiBvbmUgb2YgdGhlIGNvbXBvbmVudHMgZmFpbHMgdG8gc3RhcnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjbGFzcyBGYWlsaW5nU2VydmljZSBleHRlbmRzIFNlcnZpY2Uge31cbiAgICAgIHNpbm9uLnN0dWIoRmFpbGluZ1NlcnZpY2UucHJvdG90eXBlLCAnc3RhcnQnKS5yZWplY3RzKG5ldyBFcnJvcignZmFpbCEnKSlcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2ZhaWxpbmctc2VydmljZScsIEZhaWxpbmdTZXJ2aWNlKVxuXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7fSlcblxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RhcnQpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG4gIH0pXG5cblxuICBkZXNjcmliZSgnSG9vayBpbnRlcmFjdGlvbnMgKG9ic2VydmVzID0gYXRsYXMpJywgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdGFydCcsXG4gICAgICAnYWZ0ZXJTdGFydCcsXG4gICAgXVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAvLyBTdHViIG91dCBhbGwgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBEdW1teUhvb2sucHJvdG90eXBlW2V2ZW50XSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgICB9XG5cbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgc3RhcnQgaG9va3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAgIGV4cGVjdChEdW1teUhvb2sucHJvdG90eXBlW2V2ZW50XSkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBob29rcyB3aXRoIHRoZSBhdGxhcyBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gRHVtbXlIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBleHBlY3QocHJvdG9bZXZlbnRdKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaXQoJ2NhbiBoYW5kbGUgaG9va3Mgd2hpY2ggZG8gbm90IGltcGxlbWVudCBhbnkgbGlzdGVuZXJzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgRW1wdHkgZXh0ZW5kcyBIb29rIHtcbiAgICAgICAgc3RhdGljIG9ic2VydmVzID0gJ2F0bGFzJ1xuICAgICAgfVxuXG4gICAgICBhdGxhcy5ob29rKCdlbXB0eScsIEVtcHR5KVxuICAgICAgLy8gVGhpcyBub3QgdGhyb3dpbmcgd2lsbCBzdWZmaWNlIPCfmI5cbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICB9KVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ0hvb2sgaW50ZXJhY3Rpb25zIChvYnNlcnZlcyA9IGNvbXBvbmVudCknLCAoKSA9PiB7XG4gICAgY2xhc3MgQ29tcG9uZW50SG9vayBleHRlbmRzIEhvb2sge1xuICAgICAgc3RhdGljIG9ic2VydmVzID0gJ3NlcnZpY2U6ZHVtbXknXG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnRzID0gW1xuICAgICAgJ2JlZm9yZVN0YXJ0JyxcbiAgICAgICdhZnRlclN0YXJ0JyxcbiAgICBdXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAgIENvbXBvbmVudEhvb2sucHJvdG90eXBlW2V2ZW50XSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgICB9XG5cbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBDb21wb25lbnRIb29rLCB7IGFsaWFzZXM6IHsgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknIH0gfSlcbiAgICB9KVxuXG5cbiAgICBpdCgnY2FsbHMgdGhlIGhvb2tzIHdpdGggdGhlIGNvbXBvbmVudCBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gQ29tcG9uZW50SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXhwZWN0KHByb3RvW2V2ZW50XSkudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoYXRsYXMuc2VydmljZXMuZHVtbXkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGl0KCdjYW4gaGFuZGxlIGhvb2tzIHdoaWNoIGRvIG5vdCBpbXBsZW1lbnQgYW55IGxpc3RlbmVycycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNsYXNzIEVtcHR5IGV4dGVuZHMgSG9vayB7XG4gICAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdzZXJ2aWNlOmR1bW15J1xuICAgICAgfVxuXG4gICAgICBhdGxhcy5ob29rKCdlbXB0eScsIEVtcHR5LCB7IGFsaWFzZXM6IHsgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknIH0gfSlcbiAgICAgIC8vIFRoaXMgbm90IHRocm93aW5nIHdpbGwgc3VmZmljZSDwn5iOXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdIb29rIGV4ZWN1dGlvbiBvcmRlcicsICgpID0+IHtcbiAgICBjbGFzcyBGaXJzdFNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG5cbiAgICBjbGFzcyBTZWNvbmRTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7fVxuXG4gICAgY2xhc3MgRmlyc3RIb29rIGV4dGVuZHMgSG9vayB7XG4gICAgICBzdGF0aWMgb2JzZXJ2ZXMgPSAnc2VydmljZTpmaXJzdCdcbiAgICB9XG5cbiAgICBjbGFzcyBTZWNvbmRIb29rIGV4dGVuZHMgSG9vayB7XG4gICAgICBzdGF0aWMgb2JzZXJ2ZXMgPSAnc2VydmljZTpzZWNvbmQnXG4gICAgfVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBGaXJzdFNlcnZpY2UucHJvdG90eXBlLnN0YXJ0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIFNlY29uZFNlcnZpY2UucHJvdG90eXBlLnN0YXJ0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIEZpcnN0SG9vay5wcm90b3R5cGUuYmVmb3JlU3RhcnQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgRmlyc3RIb29rLnByb3RvdHlwZS5hZnRlclN0YXJ0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIFNlY29uZEhvb2sucHJvdG90eXBlLmJlZm9yZVN0YXJ0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIFNlY29uZEhvb2sucHJvdG90eXBlLmFmdGVyU3RhcnQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdmaXJzdCcsIEZpcnN0U2VydmljZSlcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ3NlY29uZCcsIFNlY29uZFNlcnZpY2UpXG4gICAgICBhdGxhcy5ob29rKCdmaXJzdCcsIEZpcnN0SG9vaywgeyBhbGlhc2VzOiB7ICdzZXJ2aWNlOmZpcnN0JzogJ2ZpcnN0JyB9IH0pXG4gICAgICBhdGxhcy5ob29rKCdzZWNvbmQnLCBTZWNvbmRIb29rLCB7IGFsaWFzZXM6IHsgJ3NlcnZpY2U6c2Vjb25kJzogJ3NlY29uZCcgfSB9KVxuICAgIH0pXG5cblxuICAgIGl0KCdncm91cHMgdGhlIGhvb2sgZXZlbnRzIHRvZ2V0aGVyIHdpdGggdGhlIHNlcnZpY2UgaXQgb2JzZXJ2ZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBvcmRlciA9IFtdXG5cbiAgICAgIEZpcnN0SG9vay5wcm90b3R5cGUuYmVmb3JlU3RhcnQuY2FsbHNGYWtlKCgpID0+IHZvaWQgb3JkZXIucHVzaCgnZmlyc3Q6YmVmb3JlU3RhcnQnKSlcbiAgICAgIEZpcnN0U2VydmljZS5wcm90b3R5cGUuc3RhcnQuY2FsbHNGYWtlKCgpID0+IHZvaWQgb3JkZXIucHVzaCgnZmlyc3Q6c3RhcnQnKSlcbiAgICAgIEZpcnN0SG9vay5wcm90b3R5cGUuYWZ0ZXJTdGFydC5jYWxsc0Zha2UoKCkgPT4gdm9pZCBvcmRlci5wdXNoKCdmaXJzdDphZnRlclN0YXJ0JykpXG4gICAgICBTZWNvbmRIb29rLnByb3RvdHlwZS5iZWZvcmVTdGFydC5jYWxsc0Zha2UoKCkgPT4gdm9pZCBvcmRlci5wdXNoKCdzZWNvbmQ6YmVmb3JlU3RhcnQnKSlcbiAgICAgIFNlY29uZFNlcnZpY2UucHJvdG90eXBlLnN0YXJ0LmNhbGxzRmFrZSgoKSA9PiB2b2lkIG9yZGVyLnB1c2goJ3NlY29uZDpzdGFydCcpKVxuICAgICAgU2Vjb25kSG9vay5wcm90b3R5cGUuYWZ0ZXJTdGFydC5jYWxsc0Zha2UoKCkgPT4gdm9pZCBvcmRlci5wdXNoKCdzZWNvbmQ6YWZ0ZXJTdGFydCcpKVxuXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICAgIGV4cGVjdChvcmRlcikudG8uaGF2ZS5vcmRlcmVkLm1lbWJlcnMoW1xuICAgICAgICAnZmlyc3Q6YmVmb3JlU3RhcnQnLFxuICAgICAgICAnZmlyc3Q6c3RhcnQnLFxuICAgICAgICAnZmlyc3Q6YWZ0ZXJTdGFydCcsXG4gICAgICAgICdzZWNvbmQ6YmVmb3JlU3RhcnQnLFxuICAgICAgICAnc2Vjb25kOnN0YXJ0JyxcbiAgICAgICAgJ3NlY29uZDphZnRlclN0YXJ0JyxcbiAgICAgIF0pXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0YXJ0LnRlc3QubWpzIl0sIm5hbWVzIjpbIlNlcnZpY2VBcGkiLCJEdW1teVNlcnZpY2UiLCJTZXJ2aWNlIiwiRHVtbXlIb29rIiwiSG9vayIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInByb3RvdHlwZSIsInByZXBhcmUiLCJzaW5vbiIsInN0dWIiLCJyZXNvbHZlcyIsInN0YXJ0Iiwic3RvcCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJsb2ciLCJsZXZlbCIsInNlcnZpY2VzIiwiZHVtbXkiLCJ0ZXN0IiwiQXRsYXMiLCJpdCIsImV4cGVjdCIsInRvIiwiYmUiLCJpbnN0YW5jZW9mIiwiUHJvbWlzZSIsImVxdWFsIiwic3RhcnRlZCIsInNhbmRib3giLCJoYXZlIiwiY2FsbENvdW50Iiwic2VydmljZSIsImluc3RhbmNlIiwiYmVlbiIsImNhbGxlZFdpdGgiLCJyZWplY3RzIiwiRXJyb3IiLCJldmVudHVhbGx5IiwicmVqZWN0ZWRXaXRoIiwiRmFpbGluZ1NlcnZpY2UiLCJjYXRjaCIsImV2ZW50cyIsImV2ZW50IiwiaG9vayIsInByb3RvIiwiRW1wdHkiLCJDb21wb25lbnRIb29rIiwiYWxpYXNlcyIsIkZpcnN0U2VydmljZSIsIlNlY29uZFNlcnZpY2UiLCJGaXJzdEhvb2siLCJTZWNvbmRIb29rIiwiYmVmb3JlU3RhcnQiLCJhZnRlclN0YXJ0Iiwib3JkZXIiLCJjYWxsc0Zha2UiLCJwdXNoIiwib3JkZXJlZCIsIm1lbWJlcnMiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLFVBQU4sQ0FBaUI7O0FBRWpCLE1BQU1DLFlBQU4sU0FBMkJDLGdCQUEzQixDQUFtQzs7QUFFbkMsTUFBTUMsU0FBTixTQUF3QkMsYUFBeEIsQ0FBNkI7O2dCQUF2QkQsUyxjQUNjLE87O0FBR3BCRSxTQUFTLGdCQUFULEVBQTJCLE1BQU07QUFDL0IsTUFBSUMsS0FBSjtBQUNBLE1BQUlD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RyxTQUFoQyxDQUEwQyxNQUFNLEtBQUtELE1BQU1FLElBQU4sQ0FBVyxtQkFBWCxDQUFyRDtBQUNBUixtQkFBYTVDLFNBQWIsQ0FBdUJLLEtBQXZCLENBQTZCOEMsU0FBN0IsQ0FBdUMsTUFBTSxLQUFLRCxNQUFNRSxJQUFOLENBQVcsYUFBWCxDQUFsRDtBQUNBTixnQkFBVTlDLFNBQVYsQ0FBb0JpRCxVQUFwQixDQUErQkUsU0FBL0IsQ0FBeUMsTUFBTSxLQUFLRCxNQUFNRSxJQUFOLENBQVcsa0JBQVgsQ0FBcEQ7QUFDQUwsaUJBQVcvQyxTQUFYLENBQXFCZ0QsV0FBckIsQ0FBaUNHLFNBQWpDLENBQTJDLE1BQU0sS0FBS0QsTUFBTUUsSUFBTixDQUFXLG9CQUFYLENBQXREO0FBQ0FQLG9CQUFjN0MsU0FBZCxDQUF3QkssS0FBeEIsQ0FBOEI4QyxTQUE5QixDQUF3QyxNQUFNLEtBQUtELE1BQU1FLElBQU4sQ0FBVyxjQUFYLENBQW5EO0FBQ0FMLGlCQUFXL0MsU0FBWCxDQUFxQmlELFVBQXJCLENBQWdDRSxTQUFoQyxDQUEwQyxNQUFNLEtBQUtELE1BQU1FLElBQU4sQ0FBVyxtQkFBWCxDQUFyRDtBQUVBLFlBQU12RCxNQUFNUSxLQUFOLEVBQU47QUFFQVksYUFBT2lDLEtBQVAsRUFBY2hDLEVBQWQsQ0FBaUJPLElBQWpCLENBQXNCNEIsT0FBdEIsQ0FBOEJDLE9BQTlCLENBQXNDLENBQ3BDLG1CQURvQyxFQUVwQyxhQUZvQyxFQUdwQyxrQkFIb0MsRUFJcEMsb0JBSm9DLEVBS3BDLGNBTG9DLEVBTXBDLG1CQU5vQyxDQUF0QztBQVFELEtBcEJEO0FBcUJELEdBakREO0FBa0RELENBeE9EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCBTZXJ2aWNlIGZyb20gJ0BhdGxhcy5qcy9zZXJ2aWNlJ1xuaW1wb3J0IEhvb2sgZnJvbSAnQGF0bGFzLmpzL2hvb2snXG5cbmNsYXNzIFNlcnZpY2VBcGkge31cblxuY2xhc3MgRHVtbXlTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7fVxuXG5jbGFzcyBEdW1teUhvb2sgZXh0ZW5kcyBIb29rIHtcbiAgc3RhdGljIG9ic2VydmVzID0gJ2F0bGFzJ1xufVxuXG5kZXNjcmliZSgnQXRsYXM6OnN0YXJ0KCknLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuICBsZXQgb3B0aW9uc1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhuZXcgU2VydmljZUFwaSgpKVxuICAgIER1bW15U2VydmljZS5wcm90b3R5cGUuc3RhcnQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgIER1bW15U2VydmljZS5wcm90b3R5cGUuc3RvcCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG5cbiAgICBvcHRpb25zID0ge1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGF0bGFzOiB7XG4gICAgICAgICAgbG9nOiB7XG4gICAgICAgICAgICBsZXZlbDogJ2ZhdGFsJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzZXJ2aWNlczoge1xuICAgICAgICAgIGR1bW15OiB7XG4gICAgICAgICAgICB0ZXN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICB9KVxuXG5cbiAgaXQoJ2lzIGFzeW5jJywgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5zdGFydCgpKS50by5iZS5pbnN0YW5jZW9mKFByb21pc2UpXG4gIH0pXG5cbiAgaXQoJ3JldHVybnMgdGhpcycsIGFzeW5jICgpID0+IHtcbiAgICBleHBlY3QoYXdhaXQgYXRsYXMuc3RhcnQoKSkudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3NldHMgYXRsYXMuc3RhcnRlZCB0byB0cnVlJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5zdGFydGVkKS50by5lcXVhbChmYWxzZSlcbiAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0ZWQpLnRvLmVxdWFsKHRydWUpXG4gIH0pXG5cbiAgaXQoJ2NhbGxzIGF0bGFzLnByZXBhcmUoKScsIGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2FuZGJveC5zdHViKGF0bGFzLCAncHJlcGFyZScpLnJlc29sdmVzKGF0bGFzKVxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgIGV4cGVjdChhdGxhcy5wcmVwYXJlKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ1NlcnZpY2UgaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UpXG4gICAgfSlcblxuXG4gICAgaXQoJ2NhbGxzIHN0YXJ0IG9uIHRoZSBzZXJ2aWNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RhcnQpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyBzdGFydCB3aXRoIHRoZSBpbnN0YW5jZSByZXR1cm5lZCBmcm9tIHByZXBhcmUoKSBzdGVwJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB7IHRlc3Q6IHRydWUgfVxuICAgICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlLnJlc29sdmVzKGluc3RhbmNlKVxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCkudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoaW5zdGFuY2UpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgbWV0aG9kIG9ubHkgb25jZSBmb3IgZWFjaCBzZXJ2aWNlIGZvciBtdWx0aXBsZSAuc3RhcnQoKSBjYWxscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RhcnQpLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgfSlcblxuICAgIGl0KCdyZS10aHJvd3MgY29tcG9uZW50IGVycm9ycyB0aHJvd24gZHVyaW5nIC5zdGFydCgpJywgKCkgPT4ge1xuICAgICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydC5yZWplY3RzKG5ldyBFcnJvcignZmFpbCEnKSlcblxuICAgICAgcmV0dXJuIGV4cGVjdChhdGxhcy5zdGFydCgpKS50by5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aCgvZmFpbCEvKVxuICAgIH0pXG5cbiAgICBpdCgnc3RvcHMgYWxyZWFkeSBzdGFydGVkIHNlcnZpY2UgaWYgb25lIG9mIHRoZSBjb21wb25lbnRzIGZhaWxzIHRvIHN0YXJ0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgRmFpbGluZ1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG4gICAgICBzaW5vbi5zdHViKEZhaWxpbmdTZXJ2aWNlLnByb3RvdHlwZSwgJ3N0YXJ0JykucmVqZWN0cyhuZXcgRXJyb3IoJ2ZhaWwhJykpXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdmYWlsaW5nLXNlcnZpY2UnLCBGYWlsaW5nU2VydmljZSlcblxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgICAgICAuY2F0Y2goKCkgPT4ge30pXG5cbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0YXJ0KS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RvcCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ0hvb2sgaW50ZXJhY3Rpb25zIChvYnNlcnZlcyA9IGF0bGFzKScsICgpID0+IHtcbiAgICBjb25zdCBldmVudHMgPSBbXG4gICAgICAnYmVmb3JlU3RhcnQnLFxuICAgICAgJ2FmdGVyU3RhcnQnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgfVxuXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXlIb29rKVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIHN0YXJ0IGhvb2tzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBleHBlY3QoRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0pLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgaG9va3Mgd2l0aCB0aGUgYXRsYXMgaW5zdGFuY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXhwZWN0KHByb3RvW2V2ZW50XSkudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoYXRsYXMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGl0KCdjYW4gaGFuZGxlIGhvb2tzIHdoaWNoIGRvIG5vdCBpbXBsZW1lbnQgYW55IGxpc3RlbmVycycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNsYXNzIEVtcHR5IGV4dGVuZHMgSG9vayB7XG4gICAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdhdGxhcydcbiAgICAgIH1cblxuICAgICAgYXRsYXMuaG9vaygnZW1wdHknLCBFbXB0eSlcbiAgICAgIC8vIFRoaXMgbm90IHRocm93aW5nIHdpbGwgc3VmZmljZSDwn5iOXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdIb29rIGludGVyYWN0aW9ucyAob2JzZXJ2ZXMgPSBjb21wb25lbnQpJywgKCkgPT4ge1xuICAgIGNsYXNzIENvbXBvbmVudEhvb2sgZXh0ZW5kcyBIb29rIHtcbiAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdzZXJ2aWNlOmR1bW15J1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdGFydCcsXG4gICAgICAnYWZ0ZXJTdGFydCcsXG4gICAgXVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBDb21wb25lbnRIb29rLnByb3RvdHlwZVtldmVudF0gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgfVxuXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgQ29tcG9uZW50SG9vaywgeyBhbGlhc2VzOiB7ICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyB9IH0pXG4gICAgfSlcblxuXG4gICAgaXQoJ2NhbGxzIHRoZSBob29rcyB3aXRoIHRoZSBjb21wb25lbnQgaW5zdGFuY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IENvbXBvbmVudEhvb2sucHJvdG90eXBlXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAgIGV4cGVjdChwcm90b1tldmVudF0pLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKGF0bGFzLnNlcnZpY2VzLmR1bW15KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FuIGhhbmRsZSBob29rcyB3aGljaCBkbyBub3QgaW1wbGVtZW50IGFueSBsaXN0ZW5lcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjbGFzcyBFbXB0eSBleHRlbmRzIEhvb2sge1xuICAgICAgICBzdGF0aWMgb2JzZXJ2ZXMgPSAnc2VydmljZTpkdW1teSdcbiAgICAgIH1cblxuICAgICAgYXRsYXMuaG9vaygnZW1wdHknLCBFbXB0eSwgeyBhbGlhc2VzOiB7ICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyB9IH0pXG4gICAgICAvLyBUaGlzIG5vdCB0aHJvd2luZyB3aWxsIHN1ZmZpY2Ug8J+YjlxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgIH0pXG4gIH0pXG5cblxuICBkZXNjcmliZSgnSG9vayBleGVjdXRpb24gb3JkZXInLCAoKSA9PiB7XG4gICAgY2xhc3MgRmlyc3RTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7fVxuXG4gICAgY2xhc3MgU2Vjb25kU2VydmljZSBleHRlbmRzIFNlcnZpY2Uge31cblxuICAgIGNsYXNzIEZpcnN0SG9vayBleHRlbmRzIEhvb2sge1xuICAgICAgc3RhdGljIG9ic2VydmVzID0gJ3NlcnZpY2U6Zmlyc3QnXG4gICAgfVxuXG4gICAgY2xhc3MgU2Vjb25kSG9vayBleHRlbmRzIEhvb2sge1xuICAgICAgc3RhdGljIG9ic2VydmVzID0gJ3NlcnZpY2U6c2Vjb25kJ1xuICAgIH1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgRmlyc3RTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgICBTZWNvbmRTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgICBGaXJzdEhvb2sucHJvdG90eXBlLmJlZm9yZVN0YXJ0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIEZpcnN0SG9vay5wcm90b3R5cGUuYWZ0ZXJTdGFydCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgICBTZWNvbmRIb29rLnByb3RvdHlwZS5iZWZvcmVTdGFydCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgICBTZWNvbmRIb29rLnByb3RvdHlwZS5hZnRlclN0YXJ0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcblxuICAgICAgYXRsYXMuc2VydmljZSgnZmlyc3QnLCBGaXJzdFNlcnZpY2UpXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdzZWNvbmQnLCBTZWNvbmRTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZmlyc3QnLCBGaXJzdEhvb2ssIHsgYWxpYXNlczogeyAnc2VydmljZTpmaXJzdCc6ICdmaXJzdCcgfSB9KVxuICAgICAgYXRsYXMuaG9vaygnc2Vjb25kJywgU2Vjb25kSG9vaywgeyBhbGlhc2VzOiB7ICdzZXJ2aWNlOnNlY29uZCc6ICdzZWNvbmQnIH0gfSlcbiAgICB9KVxuXG5cbiAgICBpdCgnZ3JvdXBzIHRoZSBob29rIGV2ZW50cyB0b2dldGhlciB3aXRoIHRoZSBzZXJ2aWNlIGl0IG9ic2VydmVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgb3JkZXIgPSBbXVxuXG4gICAgICBGaXJzdEhvb2sucHJvdG90eXBlLmJlZm9yZVN0YXJ0LmNhbGxzRmFrZSgoKSA9PiB2b2lkIG9yZGVyLnB1c2goJ2ZpcnN0OmJlZm9yZVN0YXJ0JykpXG4gICAgICBGaXJzdFNlcnZpY2UucHJvdG90eXBlLnN0YXJ0LmNhbGxzRmFrZSgoKSA9PiB2b2lkIG9yZGVyLnB1c2goJ2ZpcnN0OnN0YXJ0JykpXG4gICAgICBGaXJzdEhvb2sucHJvdG90eXBlLmFmdGVyU3RhcnQuY2FsbHNGYWtlKCgpID0+IHZvaWQgb3JkZXIucHVzaCgnZmlyc3Q6YWZ0ZXJTdGFydCcpKVxuICAgICAgU2Vjb25kSG9vay5wcm90b3R5cGUuYmVmb3JlU3RhcnQuY2FsbHNGYWtlKCgpID0+IHZvaWQgb3JkZXIucHVzaCgnc2Vjb25kOmJlZm9yZVN0YXJ0JykpXG4gICAgICBTZWNvbmRTZXJ2aWNlLnByb3RvdHlwZS5zdGFydC5jYWxsc0Zha2UoKCkgPT4gdm9pZCBvcmRlci5wdXNoKCdzZWNvbmQ6c3RhcnQnKSlcbiAgICAgIFNlY29uZEhvb2sucHJvdG90eXBlLmFmdGVyU3RhcnQuY2FsbHNGYWtlKCgpID0+IHZvaWQgb3JkZXIucHVzaCgnc2Vjb25kOmFmdGVyU3RhcnQnKSlcblxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgICBleHBlY3Qob3JkZXIpLnRvLmhhdmUub3JkZXJlZC5tZW1iZXJzKFtcbiAgICAgICAgJ2ZpcnN0OmJlZm9yZVN0YXJ0JyxcbiAgICAgICAgJ2ZpcnN0OnN0YXJ0JyxcbiAgICAgICAgJ2ZpcnN0OmFmdGVyU3RhcnQnLFxuICAgICAgICAnc2Vjb25kOmJlZm9yZVN0YXJ0JyxcbiAgICAgICAgJ3NlY29uZDpzdGFydCcsXG4gICAgICAgICdzZWNvbmQ6YWZ0ZXJTdGFydCcsXG4gICAgICBdKVxuICAgIH0pXG4gIH0pXG59KVxuIl19

@@ -13,2 +13,4 @@ "use strict";

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
class ServiceApi {}

@@ -22,3 +24,4 @@

DummyHook.observes = 'atlas';
_defineProperty(DummyHook, "observes", 'atlas');
describe('Atlas::stop()', () => {

@@ -140,3 +143,4 @@ let atlas;

ComponentHook.observes = 'service:dummy';
_defineProperty(ComponentHook, "observes", 'service:dummy');
const events = ['beforeStop', 'afterStop'];

@@ -177,2 +181,2 @@ beforeEach(() => {

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3AudGVzdC5tanMiXSwibmFtZXMiOlsiU2VydmljZUFwaSIsIkR1bW15U2VydmljZSIsIlNlcnZpY2UiLCJEdW1teUFjdGlvbiIsIkFjdGlvbiIsIkR1bW15SG9vayIsIkhvb2siLCJvYnNlcnZlcyIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInByb3RvdHlwZSIsInByZXBhcmUiLCJzaW5vbiIsInN0dWIiLCJyZXNvbHZlcyIsInN0b3AiLCJyb290IiwiX19kaXJuYW1lIiwiY29uZmlnIiwibG9nIiwibGV2ZWwiLCJzZXJ2aWNlcyIsImR1bW15IiwidGVzdCIsImhvb2tzIiwiQXRsYXMiLCJzZXJ2aWNlIiwiYWN0aW9uIiwiaG9vayIsInN0YXJ0IiwiaXQiLCJleHBlY3QiLCJ0byIsImJlIiwiaW5zdGFuY2VvZiIsIlByb21pc2UiLCJlcXVhbCIsInN0YXJ0ZWQiLCJwcmVwYXJlZCIsImhhdmUiLCJjYWxsQ291bnQiLCJpbnN0YW5jZSIsImJlZW4iLCJjYWxsZWRXaXRoIiwicHJvcGVydHkiLCJub3QiLCJyZWplY3RzIiwiRXJyb3IiLCJldmVudHVhbGx5IiwicmVqZWN0ZWRXaXRoIiwiRmFpbGluZ1NlcnZpY2UiLCJjYXRjaCIsImV2ZW50cyIsImV2ZW50IiwicHJvdG8iLCJiZWZvcmVTdG9wIiwiYXJncyIsImFmdGVyU3RvcCIsImxhc3RDYWxsIiwibGVuZ3RoIiwiQ29tcG9uZW50SG9vayIsImFsaWFzZXMiLCJhY3Rpb25zIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsVUFBTixDQUFpQjs7QUFFakIsTUFBTUMsWUFBTixTQUEyQkMsZ0JBQTNCLENBQW1DOztBQUVuQyxNQUFNQyxXQUFOLFNBQTBCQyxlQUExQixDQUFpQzs7QUFFakMsTUFBTUMsU0FBTixTQUF3QkMsYUFBeEIsQ0FBNkI7O0FBQXZCRCxTLENBQ0dFLFEsR0FBVyxPO0FBR3BCQyxTQUFTLGVBQVQsRUFBMEIsTUFBTTtBQUM5QixNQUFJQyxLQUFKO0FBQ0EsTUFBSUMsT0FBSjtBQUVBQyxhQUFXLE1BQU07QUFDZlYsaUJBQWFXLFNBQWIsQ0FBdUJDLE9BQXZCLEdBQWlDQyxNQUFNQyxJQUFOLEdBQWFDLFFBQWIsQ0FBc0IsSUFBSWhCLFVBQUosRUFBdEIsQ0FBakM7QUFDQUMsaUJBQWFXLFNBQWIsQ0FBdUJLLElBQXZCLEdBQThCSCxNQUFNQyxJQUFOLEdBQWFDLFFBQWIsRUFBOUI7QUFFQU4sY0FBVTtBQUNSUSxZQUFNQyxTQURFO0FBRVJDLGNBQVE7QUFDTlgsZUFBTztBQUNMWSxlQUFLO0FBQ0hDLG1CQUFPO0FBREo7QUFEQSxTQUREO0FBTU5DLGtCQUFVO0FBQ1JDLGlCQUFPO0FBQ0xDLGtCQUFNO0FBREQ7QUFEQyxTQU5KO0FBV05DLGVBQU87QUFDTEYsaUJBQU87QUFDTEMsa0JBQU07QUFERDtBQURGO0FBWEQ7QUFGQSxLQUFWO0FBb0JBaEIsWUFBUSxJQUFJa0IsT0FBSixDQUFVakIsT0FBVixDQUFSO0FBQ0FELFVBQU1tQixPQUFOLENBQWMsT0FBZCxFQUF1QjNCLFlBQXZCO0FBQ0FRLFVBQU1vQixNQUFOLENBQWEsT0FBYixFQUFzQjFCLFdBQXRCO0FBQ0FNLFVBQU1xQixJQUFOLENBQVcsT0FBWCxFQUFvQnpCLFNBQXBCO0FBRUEsV0FBT0ksTUFBTXNCLEtBQU4sRUFBUDtBQUNELEdBOUJEO0FBaUNBQyxLQUFHLFVBQUgsRUFBZSxNQUFNO0FBQ25CQyxXQUFPeEIsTUFBTVEsSUFBTixFQUFQLEVBQXFCaUIsRUFBckIsQ0FBd0JDLEVBQXhCLENBQTJCQyxVQUEzQixDQUFzQ0MsT0FBdEM7QUFDRCxHQUZEO0FBSUFMLEtBQUcsY0FBSCxFQUFtQixZQUFZO0FBQzdCQyxZQUFPLE1BQU14QixNQUFNUSxJQUFOLEVBQWIsR0FBMkJpQixFQUEzQixDQUE4QkksS0FBOUIsQ0FBb0M3QixLQUFwQztBQUNELEdBRkQ7QUFJQXVCLEtBQUcsZ0RBQUgsRUFBcUQsWUFBWTtBQUMvREMsV0FBT3hCLE1BQU04QixPQUFiLEVBQXNCTCxFQUF0QixDQUF5QkksS0FBekIsQ0FBK0IsSUFBL0I7QUFDQUwsV0FBT3hCLE1BQU0rQixRQUFiLEVBQXVCTixFQUF2QixDQUEwQkksS0FBMUIsQ0FBZ0MsSUFBaEM7QUFDQSxVQUFNN0IsTUFBTVEsSUFBTixFQUFOO0FBQ0FnQixXQUFPeEIsTUFBTThCLE9BQWIsRUFBc0JMLEVBQXRCLENBQXlCSSxLQUF6QixDQUErQixLQUEvQjtBQUNBTCxXQUFPeEIsTUFBTStCLFFBQWIsRUFBdUJOLEVBQXZCLENBQTBCSSxLQUExQixDQUFnQyxLQUFoQztBQUNELEdBTkQ7QUFTQTlCLFdBQVMsc0JBQVQsRUFBaUMsTUFBTTtBQUNyQ3dCLE9BQUcsMkJBQUgsRUFBZ0MsWUFBWTtBQUMxQyxZQUFNdkIsTUFBTVEsSUFBTixFQUFOO0FBQ0FnQixhQUFPaEMsYUFBYVcsU0FBYixDQUF1QkssSUFBOUIsRUFBb0NpQixFQUFwQyxDQUF1Q08sSUFBdkMsQ0FBNENDLFNBQTVDLENBQXNELENBQXREO0FBQ0QsS0FIRDtBQUtBVixPQUFHLGlFQUFILEVBQXNFLFlBQVk7QUFDaEYsWUFBTVcsV0FBVztBQUFFbEIsY0FBTTtBQUFSLE9BQWpCO0FBQ0F4QixtQkFBYVcsU0FBYixDQUF1QkMsT0FBdkIsQ0FBK0JHLFFBQS9CLENBQXdDMkIsUUFBeEM7QUFFQWxDLGNBQVEsSUFBSWtCLE9BQUosQ0FBVWpCLE9BQVYsQ0FBUjtBQUNBRCxZQUFNbUIsT0FBTixDQUFjLE9BQWQsRUFBdUIzQixZQUF2QjtBQUVBLFlBQU1RLE1BQU1zQixLQUFOLEVBQU47QUFDQSxZQUFNdEIsTUFBTVEsSUFBTixFQUFOO0FBRUFnQixhQUFPaEMsYUFBYVcsU0FBYixDQUF1QkssSUFBOUIsRUFBb0NpQixFQUFwQyxDQUF1Q08sSUFBdkMsQ0FBNENHLElBQTVDLENBQWlEQyxVQUFqRCxDQUE0REYsUUFBNUQ7QUFDRCxLQVhEO0FBYUFYLE9BQUcsd0VBQUgsRUFBNkUsWUFBWTtBQUN2RixZQUFNdkIsTUFBTVEsSUFBTixFQUFOO0FBQ0EsWUFBTVIsTUFBTVEsSUFBTixFQUFOO0FBRUFnQixhQUFPaEMsYUFBYVcsU0FBYixDQUF1QkssSUFBOUIsRUFBb0NpQixFQUFwQyxDQUF1Q08sSUFBdkMsQ0FBNENDLFNBQTVDLENBQXNELENBQXREO0FBQ0QsS0FMRDtBQU9BVixPQUFHLDhCQUFILEVBQW1DLFlBQVk7QUFDN0NDLGFBQU94QixNQUFNYyxRQUFiLEVBQXVCVyxFQUF2QixDQUEwQk8sSUFBMUIsQ0FBK0JLLFFBQS9CLENBQXdDLE9BQXhDO0FBQ0EsWUFBTXJDLE1BQU1RLElBQU4sRUFBTjtBQUNBZ0IsYUFBT3hCLE1BQU1jLFFBQWIsRUFBdUJXLEVBQXZCLENBQTBCYSxHQUExQixDQUE4Qk4sSUFBOUIsQ0FBbUNLLFFBQW5DLENBQTRDLE9BQTVDO0FBQ0QsS0FKRDtBQU1BZCxPQUFHLGtEQUFILEVBQXVELE1BQU07QUFDM0QvQixtQkFBYVcsU0FBYixDQUF1QkssSUFBdkIsQ0FBNEIrQixPQUE1QixDQUFvQyxJQUFJQyxLQUFKLENBQVUsT0FBVixDQUFwQztBQUVBLGFBQU9oQixPQUFPeEIsTUFBTVEsSUFBTixFQUFQLEVBQXFCaUIsRUFBckIsQ0FBd0JnQixVQUF4QixDQUFtQ2YsRUFBbkMsQ0FBc0NnQixZQUF0QyxDQUFtRCxPQUFuRCxDQUFQO0FBQ0QsS0FKRDtBQU1BbkIsT0FBRyx1RUFBSCxFQUE0RSxZQUFZO0FBQ3RGLFlBQU1vQixjQUFOLFNBQTZCbEQsZ0JBQTdCLENBQXFDOztBQUNyQ1ksWUFBTUMsSUFBTixDQUFXcUMsZUFBZXhDLFNBQTFCLEVBQXFDLE1BQXJDLEVBQTZDb0MsT0FBN0MsQ0FBcUQsSUFBSUMsS0FBSixDQUFVLE9BQVYsQ0FBckQ7QUFDQXhDLFlBQU1tQixPQUFOLENBQWMsaUJBQWQsRUFBaUN3QixjQUFqQztBQUVBLFlBQU0zQyxNQUFNc0IsS0FBTixFQUFOO0FBQ0EsWUFBTXRCLE1BQU1RLElBQU4sR0FDSG9DLEtBREcsQ0FDRyxNQUFNLENBQUUsQ0FEWCxDQUFOO0FBR0FwQixhQUFPbUIsZUFBZXhDLFNBQWYsQ0FBeUJLLElBQWhDLEVBQXNDaUIsRUFBdEMsQ0FBeUNPLElBQXpDLENBQThDQyxTQUE5QyxDQUF3RCxDQUF4RDtBQUNBVCxhQUFPaEMsYUFBYVcsU0FBYixDQUF1QkssSUFBOUIsRUFBb0NpQixFQUFwQyxDQUF1Q08sSUFBdkMsQ0FBNENDLFNBQTVDLENBQXNELENBQXREO0FBQ0QsS0FYRDtBQVlELEdBbEREO0FBcURBbEMsV0FBUyxzQ0FBVCxFQUFpRCxNQUFNO0FBQ3JELFVBQU04QyxTQUFTLENBQ2IsWUFEYSxFQUViLFdBRmEsQ0FBZjtBQUtBM0MsZUFBVyxNQUFNO0FBRWYsV0FBSyxNQUFNNEMsS0FBWCxJQUFvQkQsTUFBcEIsRUFBNEI7QUFDMUJqRCxrQkFBVU8sU0FBVixDQUFvQjJDLEtBQXBCLElBQTZCekMsTUFBTUMsSUFBTixHQUFhQyxRQUFiLEVBQTdCO0FBQ0Q7QUFDRixLQUxEO0FBT0FnQixPQUFHLHNCQUFILEVBQTJCLFlBQVk7QUFDckMsWUFBTXZCLE1BQU1RLElBQU4sRUFBTjs7QUFFQSxXQUFLLE1BQU1zQyxLQUFYLElBQW9CRCxNQUFwQixFQUE0QjtBQUMxQnJCLGVBQU81QixVQUFVTyxTQUFWLENBQW9CMkMsS0FBcEIsQ0FBUCxFQUFtQ3JCLEVBQW5DLENBQXNDTyxJQUF0QyxDQUEyQ0MsU0FBM0MsQ0FBcUQsQ0FBckQ7QUFDRDtBQUNGLEtBTkQ7QUFRQVYsT0FBRyx5REFBSCxFQUE4RCxZQUFZO0FBQ3hFLFlBQU13QixRQUFRbkQsVUFBVU8sU0FBeEI7QUFDQSxZQUFNSCxNQUFNUSxJQUFOLEVBQU47QUFFQWdCLGFBQU91QixNQUFNQyxVQUFiLEVBQXlCdkIsRUFBekIsQ0FBNEJPLElBQTVCLENBQWlDRyxJQUFqQyxDQUFzQ0MsVUFBdEMsQ0FBaURwQyxLQUFqRDtBQUNELEtBTEQ7QUFPQXVCLE9BQUcsb0NBQUgsRUFBeUMsWUFBWTtBQUNuRCxZQUFNd0IsUUFBUW5ELFVBQVVPLFNBQXhCO0FBQ0EsWUFBTUgsTUFBTVEsSUFBTixFQUFOO0FBQ0EsWUFBTXlDLE9BQU9GLE1BQU1HLFNBQU4sQ0FBZ0JDLFFBQWhCLENBQXlCRixJQUF0QztBQUVBekIsYUFBT3lCLElBQVAsRUFBYXhCLEVBQWIsQ0FBZ0JPLElBQWhCLENBQXFCb0IsTUFBckIsQ0FBNEIsQ0FBNUI7QUFDQTVCLGFBQU95QixLQUFLLENBQUwsQ0FBUCxFQUFnQnhCLEVBQWhCLENBQW1CSSxLQUFuQixDQUF5QixJQUF6QjtBQUNELEtBUEQ7QUFRRCxHQXBDRDtBQXVDQTlCLFdBQVMsMENBQVQsRUFBcUQsTUFBTTtBQUN6RCxVQUFNc0QsYUFBTixTQUE0QnhELGFBQTVCLENBQWlDOztBQUEzQndELGlCQURtRCxDQUVoRHZELFFBRmdELEdBRXJDLGVBRnFDO0FBS3pELFVBQU0rQyxTQUFTLENBQ2IsWUFEYSxFQUViLFdBRmEsQ0FBZjtBQUtBM0MsZUFBVyxNQUFNO0FBRWYsV0FBSyxNQUFNNEMsS0FBWCxJQUFvQkQsTUFBcEIsRUFBNEI7QUFDMUJRLHNCQUFjbEQsU0FBZCxDQUF3QjJDLEtBQXhCLElBQWlDekMsTUFBTUMsSUFBTixHQUFhQyxRQUFiLEVBQWpDO0FBQ0Q7O0FBRURQLGNBQVEsSUFBSWtCLE9BQUosQ0FBVWpCLE9BQVYsQ0FBUjtBQUNBRCxZQUFNbUIsT0FBTixDQUFjLE9BQWQsRUFBdUIzQixZQUF2QjtBQUNBUSxZQUFNcUIsSUFBTixDQUFXLE9BQVgsRUFBb0JnQyxhQUFwQixFQUFtQztBQUFFQyxpQkFBUztBQUFFLDJCQUFpQjtBQUFuQjtBQUFYLE9BQW5DO0FBRUEsYUFBT3RELE1BQU1zQixLQUFOLEVBQVA7QUFDRCxLQVhEO0FBYUFDLE9BQUcsdURBQUgsRUFBNEQsWUFBWTtBQUN0RSxZQUFNSixVQUFVbkIsTUFBTWMsUUFBTixDQUFlQyxLQUEvQjtBQUNBLFlBQU1nQyxRQUFRTSxjQUFjbEQsU0FBNUI7QUFDQSxZQUFNSCxNQUFNUSxJQUFOLEVBQU47QUFFQWdCLGFBQU91QixNQUFNQyxVQUFiLEVBQXlCdkIsRUFBekIsQ0FBNEJPLElBQTVCLENBQWlDRyxJQUFqQyxDQUFzQ0MsVUFBdEMsQ0FBaURqQixPQUFqRDtBQUNELEtBTkQ7QUFRQUksT0FBRyxvQ0FBSCxFQUF5QyxZQUFZO0FBQ25ELFlBQU13QixRQUFRTSxjQUFjbEQsU0FBNUI7QUFDQSxZQUFNSCxNQUFNUSxJQUFOLEVBQU47QUFFQWdCLGFBQU91QixNQUFNRyxTQUFiLEVBQXdCekIsRUFBeEIsQ0FBMkJPLElBQTNCLENBQWdDRyxJQUFoQyxDQUFxQ0MsVUFBckMsQ0FBZ0QsSUFBaEQ7QUFDRCxLQUxEO0FBTUQsR0FyQ0Q7QUF3Q0FyQyxXQUFTLHFCQUFULEVBQWdDLE1BQU07QUFDcEN3QixPQUFHLHNDQUFILEVBQTJDLFlBQVk7QUFFckRDLGFBQU94QixNQUFNdUQsT0FBYixFQUFzQjlCLEVBQXRCLENBQXlCTyxJQUF6QixDQUE4QkssUUFBOUIsQ0FBdUMsT0FBdkM7QUFFQSxZQUFNckMsTUFBTVEsSUFBTixFQUFOO0FBQ0FnQixhQUFPeEIsTUFBTXVELE9BQWIsRUFBc0I5QixFQUF0QixDQUF5QmEsR0FBekIsQ0FBNkJOLElBQTdCLENBQWtDSyxRQUFsQyxDQUEyQyxPQUEzQztBQUNELEtBTkQ7QUFPRCxHQVJEO0FBU0QsQ0FuTUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0IFNlcnZpY2UgZnJvbSAnQGF0bGFzLmpzL3NlcnZpY2UnXG5pbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcbmltcG9ydCBBY3Rpb24gZnJvbSAnQGF0bGFzLmpzL2FjdGlvbidcblxuY2xhc3MgU2VydmljZUFwaSB7fVxuXG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG5cbmNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHt9XG5cbmNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge1xuICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG59XG5cbmRlc2NyaWJlKCdBdGxhczo6c3RvcCgpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnByZXBhcmUgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMobmV3IFNlcnZpY2VBcGkoKSlcbiAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0b3AgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IF9fZGlybmFtZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBhdGxhczoge1xuICAgICAgICAgIGxvZzoge1xuICAgICAgICAgICAgbGV2ZWw6ICdmYXRhbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VydmljZXM6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBob29rczoge1xuICAgICAgICAgIGR1bW15OiB7XG4gICAgICAgICAgICB0ZXN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbilcbiAgICBhdGxhcy5ob29rKCdkdW1teScsIER1bW15SG9vaylcblxuICAgIHJldHVybiBhdGxhcy5zdGFydCgpXG4gIH0pXG5cblxuICBpdCgnaXMgYXN5bmMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0b3AoKSkudG8uYmUuaW5zdGFuY2VvZihQcm9taXNlKVxuICB9KVxuXG4gIGl0KCdyZXR1cm5zIHRoaXMnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF3YWl0IGF0bGFzLnN0b3AoKSkudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3NldHMgYXRsYXMuc3RhcnRlZCBhbmQgYXRsYXMucHJlcGFyZWQgdG8gZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0ZWQpLnRvLmVxdWFsKHRydWUpXG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmVkKS50by5lcXVhbCh0cnVlKVxuICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgIGV4cGVjdChhdGxhcy5zdGFydGVkKS50by5lcXVhbChmYWxzZSlcbiAgICBleHBlY3QoYXRsYXMucHJlcGFyZWQpLnRvLmVxdWFsKGZhbHNlKVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ1NlcnZpY2UgaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBzdG9wIG9uIHRoZSBzZXJ2aWNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgncGFzc2VzIHRoZSBleHBvc2VkIGluc3RhbmNlIHRvIHRoZSBzdG9wKCkgbWV0aG9kIG9uIHRoZSBzZXJ2aWNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB7IHRlc3Q6IHRydWUgfVxuICAgICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlLnJlc29sdmVzKGluc3RhbmNlKVxuXG4gICAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICAgICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UpXG5cbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChpbnN0YW5jZSlcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBtZXRob2Qgb25seSBvbmNlIGZvciBlYWNoIHNlcnZpY2UgZm9yIG11bHRpcGxlIC5zdG9wKCkgY2FsbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgncmVtb3ZlcyBnZXR0ZXJzIGZvciBzZXJ2aWNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGV4cGVjdChhdGxhcy5zZXJ2aWNlcykudG8uaGF2ZS5wcm9wZXJ0eSgnZHVtbXknKVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG4gICAgICBleHBlY3QoYXRsYXMuc2VydmljZXMpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgfSlcblxuICAgIGl0KCdyZS10aHJvd3MgY29tcG9uZW50IGVycm9ycyB0aHJvd24gZHVyaW5nIC5zdG9wKCknLCAoKSA9PiB7XG4gICAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0b3AucmVqZWN0cyhuZXcgRXJyb3IoJ2ZhaWwhJykpXG5cbiAgICAgIHJldHVybiBleHBlY3QoYXRsYXMuc3RvcCgpKS50by5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aCgvZmFpbCEvKVxuICAgIH0pXG5cbiAgICBpdCgnc3RvcHMgdGhlIG90aGVyIHNlcnZpY2VzIGlmIG9uZSBvZiB0aGUgc2VydmljZXMgdGhyb3dzIGR1cmluZyAuc3RvcCgpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgRmFpbGluZ1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG4gICAgICBzaW5vbi5zdHViKEZhaWxpbmdTZXJ2aWNlLnByb3RvdHlwZSwgJ3N0b3AnKS5yZWplY3RzKG5ldyBFcnJvcignZmFpbCEnKSlcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2ZhaWxpbmctc2VydmljZScsIEZhaWxpbmdTZXJ2aWNlKVxuXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcbiAgICAgICAgLmNhdGNoKCgpID0+IHt9KVxuXG4gICAgICBleHBlY3QoRmFpbGluZ1NlcnZpY2UucHJvdG90eXBlLnN0b3ApLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG4gIH0pXG5cblxuICBkZXNjcmliZSgnSG9vayBpbnRlcmFjdGlvbnMgKG9ic2VydmVzID0gYXRsYXMpJywgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdG9wJyxcbiAgICAgICdhZnRlclN0b3AnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIHN0b3AgaG9va3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXhwZWN0KER1bW15SG9vay5wcm90b3R5cGVbZXZlbnRdKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIGJlZm9yZVN0b3AgaG9vayB3aXRoIHRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gRHVtbXlIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG5cbiAgICAgIGV4cGVjdChwcm90by5iZWZvcmVTdG9wKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBhZnRlclN0b3AgaG9vayB3aXRoIG51bGwnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgY29uc3QgYXJncyA9IHByb3RvLmFmdGVyU3RvcC5sYXN0Q2FsbC5hcmdzXG5cbiAgICAgIGV4cGVjdChhcmdzKS50by5oYXZlLmxlbmd0aCgxKVxuICAgICAgZXhwZWN0KGFyZ3NbMF0pLnRvLmVxdWFsKG51bGwpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdIb29rIGludGVyYWN0aW9ucyAob2JzZXJ2ZXMgPSBjb21wb25lbnQpJywgKCkgPT4ge1xuICAgIGNsYXNzIENvbXBvbmVudEhvb2sgZXh0ZW5kcyBIb29rIHtcbiAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdzZXJ2aWNlOmR1bW15J1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdG9wJyxcbiAgICAgICdhZnRlclN0b3AnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgQ29tcG9uZW50SG9vay5wcm90b3R5cGVbZXZlbnRdID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIH1cblxuICAgICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBDb21wb25lbnRIb29rLCB7IGFsaWFzZXM6IHsgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknIH0gfSlcblxuICAgICAgcmV0dXJuIGF0bGFzLnN0YXJ0KClcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBiZWZvcmVTdG9wIGhvb2sgd2l0aCB0aGUgY29tcG9uZW50IGluc3RhbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmljZSA9IGF0bGFzLnNlcnZpY2VzLmR1bW15XG4gICAgICBjb25zdCBwcm90byA9IENvbXBvbmVudEhvb2sucHJvdG90eXBlXG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZXhwZWN0KHByb3RvLmJlZm9yZVN0b3ApLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKHNlcnZpY2UpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgYWZ0ZXJTdG9wIGhvb2sgd2l0aCBudWxsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvdG8gPSBDb21wb25lbnRIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG5cbiAgICAgIGV4cGVjdChwcm90by5hZnRlclN0b3ApLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKG51bGwpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdBY3Rpb24gaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdyZW1vdmVzIHRoZSBhY3Rpb24gZnJvbSB0aGlzLmFjdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBTYW5pdHkgY2hlY2tcbiAgICAgIGV4cGVjdChhdGxhcy5hY3Rpb25zKS50by5oYXZlLnByb3BlcnR5KCdkdW1teScpXG5cbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgZXhwZWN0KGF0bGFzLmFjdGlvbnMpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3AudGVzdC5tanMiXSwibmFtZXMiOlsiU2VydmljZUFwaSIsIkR1bW15U2VydmljZSIsIlNlcnZpY2UiLCJEdW1teUFjdGlvbiIsIkFjdGlvbiIsIkR1bW15SG9vayIsIkhvb2siLCJkZXNjcmliZSIsImF0bGFzIiwib3B0aW9ucyIsImJlZm9yZUVhY2giLCJwcm90b3R5cGUiLCJwcmVwYXJlIiwic2lub24iLCJzdHViIiwicmVzb2x2ZXMiLCJzdG9wIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsImxvZyIsImxldmVsIiwic2VydmljZXMiLCJkdW1teSIsInRlc3QiLCJob29rcyIsIkF0bGFzIiwic2VydmljZSIsImFjdGlvbiIsImhvb2siLCJzdGFydCIsIml0IiwiZXhwZWN0IiwidG8iLCJiZSIsImluc3RhbmNlb2YiLCJQcm9taXNlIiwiZXF1YWwiLCJzdGFydGVkIiwicHJlcGFyZWQiLCJoYXZlIiwiY2FsbENvdW50IiwiaW5zdGFuY2UiLCJiZWVuIiwiY2FsbGVkV2l0aCIsInByb3BlcnR5Iiwibm90IiwicmVqZWN0cyIsIkVycm9yIiwiZXZlbnR1YWxseSIsInJlamVjdGVkV2l0aCIsIkZhaWxpbmdTZXJ2aWNlIiwiY2F0Y2giLCJldmVudHMiLCJldmVudCIsInByb3RvIiwiYmVmb3JlU3RvcCIsImFyZ3MiLCJhZnRlclN0b3AiLCJsYXN0Q2FsbCIsImxlbmd0aCIsIkNvbXBvbmVudEhvb2siLCJhbGlhc2VzIiwiYWN0aW9ucyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsTUFBTUEsVUFBTixDQUFpQjs7QUFFakIsTUFBTUMsWUFBTixTQUEyQkMsZ0JBQTNCLENBQW1DOztBQUVuQyxNQUFNQyxXQUFOLFNBQTBCQyxlQUExQixDQUFpQzs7QUFFakMsTUFBTUMsU0FBTixTQUF3QkMsYUFBeEIsQ0FBNkI7O2dCQUF2QkQsUyxjQUNjLE87O0FBR3BCRSxTQUFTLGVBQVQsRUFBMEIsTUFBTTtBQUM5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LEtBTkQ7QUFRQUksT0FBRyxvQ0FBSCxFQUF5QyxZQUFZO0FBQ25ELFlBQU13QixRQUFRTSxjQUFjbEQsU0FBNUI7QUFDQSxZQUFNSCxNQUFNUSxJQUFOLEVBQU47QUFFQWdCLGFBQU91QixNQUFNRyxTQUFiLEVBQXdCekIsRUFBeEIsQ0FBMkJPLElBQTNCLENBQWdDRyxJQUFoQyxDQUFxQ0MsVUFBckMsQ0FBZ0QsSUFBaEQ7QUFDRCxLQUxEO0FBTUQsR0FyQ0Q7QUF3Q0FyQyxXQUFTLHFCQUFULEVBQWdDLE1BQU07QUFDcEN3QixPQUFHLHNDQUFILEVBQTJDLFlBQVk7QUFFckRDLGFBQU94QixNQUFNdUQsT0FBYixFQUFzQjlCLEVBQXRCLENBQXlCTyxJQUF6QixDQUE4QkssUUFBOUIsQ0FBdUMsT0FBdkM7QUFFQSxZQUFNckMsTUFBTVEsSUFBTixFQUFOO0FBQ0FnQixhQUFPeEIsTUFBTXVELE9BQWIsRUFBc0I5QixFQUF0QixDQUF5QmEsR0FBekIsQ0FBNkJOLElBQTdCLENBQWtDSyxRQUFsQyxDQUEyQyxPQUEzQztBQUNELEtBTkQ7QUFPRCxHQVJEO0FBU0QsQ0FuTUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0IFNlcnZpY2UgZnJvbSAnQGF0bGFzLmpzL3NlcnZpY2UnXG5pbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcbmltcG9ydCBBY3Rpb24gZnJvbSAnQGF0bGFzLmpzL2FjdGlvbidcblxuY2xhc3MgU2VydmljZUFwaSB7fVxuXG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG5cbmNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHt9XG5cbmNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge1xuICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG59XG5cbmRlc2NyaWJlKCdBdGxhczo6c3RvcCgpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnByZXBhcmUgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMobmV3IFNlcnZpY2VBcGkoKSlcbiAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0b3AgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IF9fZGlybmFtZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBhdGxhczoge1xuICAgICAgICAgIGxvZzoge1xuICAgICAgICAgICAgbGV2ZWw6ICdmYXRhbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VydmljZXM6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBob29rczoge1xuICAgICAgICAgIGR1bW15OiB7XG4gICAgICAgICAgICB0ZXN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbilcbiAgICBhdGxhcy5ob29rKCdkdW1teScsIER1bW15SG9vaylcblxuICAgIHJldHVybiBhdGxhcy5zdGFydCgpXG4gIH0pXG5cblxuICBpdCgnaXMgYXN5bmMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0b3AoKSkudG8uYmUuaW5zdGFuY2VvZihQcm9taXNlKVxuICB9KVxuXG4gIGl0KCdyZXR1cm5zIHRoaXMnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF3YWl0IGF0bGFzLnN0b3AoKSkudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3NldHMgYXRsYXMuc3RhcnRlZCBhbmQgYXRsYXMucHJlcGFyZWQgdG8gZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0ZWQpLnRvLmVxdWFsKHRydWUpXG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmVkKS50by5lcXVhbCh0cnVlKVxuICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgIGV4cGVjdChhdGxhcy5zdGFydGVkKS50by5lcXVhbChmYWxzZSlcbiAgICBleHBlY3QoYXRsYXMucHJlcGFyZWQpLnRvLmVxdWFsKGZhbHNlKVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ1NlcnZpY2UgaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBzdG9wIG9uIHRoZSBzZXJ2aWNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgncGFzc2VzIHRoZSBleHBvc2VkIGluc3RhbmNlIHRvIHRoZSBzdG9wKCkgbWV0aG9kIG9uIHRoZSBzZXJ2aWNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB7IHRlc3Q6IHRydWUgfVxuICAgICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlLnJlc29sdmVzKGluc3RhbmNlKVxuXG4gICAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICAgICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UpXG5cbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChpbnN0YW5jZSlcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBtZXRob2Qgb25seSBvbmNlIGZvciBlYWNoIHNlcnZpY2UgZm9yIG11bHRpcGxlIC5zdG9wKCkgY2FsbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgncmVtb3ZlcyBnZXR0ZXJzIGZvciBzZXJ2aWNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGV4cGVjdChhdGxhcy5zZXJ2aWNlcykudG8uaGF2ZS5wcm9wZXJ0eSgnZHVtbXknKVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG4gICAgICBleHBlY3QoYXRsYXMuc2VydmljZXMpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgfSlcblxuICAgIGl0KCdyZS10aHJvd3MgY29tcG9uZW50IGVycm9ycyB0aHJvd24gZHVyaW5nIC5zdG9wKCknLCAoKSA9PiB7XG4gICAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0b3AucmVqZWN0cyhuZXcgRXJyb3IoJ2ZhaWwhJykpXG5cbiAgICAgIHJldHVybiBleHBlY3QoYXRsYXMuc3RvcCgpKS50by5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aCgvZmFpbCEvKVxuICAgIH0pXG5cbiAgICBpdCgnc3RvcHMgdGhlIG90aGVyIHNlcnZpY2VzIGlmIG9uZSBvZiB0aGUgc2VydmljZXMgdGhyb3dzIGR1cmluZyAuc3RvcCgpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgRmFpbGluZ1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG4gICAgICBzaW5vbi5zdHViKEZhaWxpbmdTZXJ2aWNlLnByb3RvdHlwZSwgJ3N0b3AnKS5yZWplY3RzKG5ldyBFcnJvcignZmFpbCEnKSlcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2ZhaWxpbmctc2VydmljZScsIEZhaWxpbmdTZXJ2aWNlKVxuXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcbiAgICAgICAgLmNhdGNoKCgpID0+IHt9KVxuXG4gICAgICBleHBlY3QoRmFpbGluZ1NlcnZpY2UucHJvdG90eXBlLnN0b3ApLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG4gIH0pXG5cblxuICBkZXNjcmliZSgnSG9vayBpbnRlcmFjdGlvbnMgKG9ic2VydmVzID0gYXRsYXMpJywgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdG9wJyxcbiAgICAgICdhZnRlclN0b3AnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIHN0b3AgaG9va3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXhwZWN0KER1bW15SG9vay5wcm90b3R5cGVbZXZlbnRdKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIGJlZm9yZVN0b3AgaG9vayB3aXRoIHRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gRHVtbXlIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG5cbiAgICAgIGV4cGVjdChwcm90by5iZWZvcmVTdG9wKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBhZnRlclN0b3AgaG9vayB3aXRoIG51bGwnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgY29uc3QgYXJncyA9IHByb3RvLmFmdGVyU3RvcC5sYXN0Q2FsbC5hcmdzXG5cbiAgICAgIGV4cGVjdChhcmdzKS50by5oYXZlLmxlbmd0aCgxKVxuICAgICAgZXhwZWN0KGFyZ3NbMF0pLnRvLmVxdWFsKG51bGwpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdIb29rIGludGVyYWN0aW9ucyAob2JzZXJ2ZXMgPSBjb21wb25lbnQpJywgKCkgPT4ge1xuICAgIGNsYXNzIENvbXBvbmVudEhvb2sgZXh0ZW5kcyBIb29rIHtcbiAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdzZXJ2aWNlOmR1bW15J1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdG9wJyxcbiAgICAgICdhZnRlclN0b3AnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgQ29tcG9uZW50SG9vay5wcm90b3R5cGVbZXZlbnRdID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgICAgIH1cblxuICAgICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBDb21wb25lbnRIb29rLCB7IGFsaWFzZXM6IHsgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknIH0gfSlcblxuICAgICAgcmV0dXJuIGF0bGFzLnN0YXJ0KClcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBiZWZvcmVTdG9wIGhvb2sgd2l0aCB0aGUgY29tcG9uZW50IGluc3RhbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmljZSA9IGF0bGFzLnNlcnZpY2VzLmR1bW15XG4gICAgICBjb25zdCBwcm90byA9IENvbXBvbmVudEhvb2sucHJvdG90eXBlXG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZXhwZWN0KHByb3RvLmJlZm9yZVN0b3ApLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKHNlcnZpY2UpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgYWZ0ZXJTdG9wIGhvb2sgd2l0aCBudWxsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvdG8gPSBDb21wb25lbnRIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG5cbiAgICAgIGV4cGVjdChwcm90by5hZnRlclN0b3ApLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKG51bGwpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdBY3Rpb24gaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdyZW1vdmVzIHRoZSBhY3Rpb24gZnJvbSB0aGlzLmFjdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBTYW5pdHkgY2hlY2tcbiAgICAgIGV4cGVjdChhdGxhcy5hY3Rpb25zKS50by5oYXZlLnByb3BlcnR5KCdkdW1teScpXG5cbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgZXhwZWN0KGF0bGFzLmFjdGlvbnMpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc