appium 2.0.0-beta.23 → 2.0.0-beta.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/build/lib/appium.js +19 -7
- package/build/lib/cli/args.js +13 -15
- package/build/lib/cli/parser.js +2 -2
- package/build/lib/config.js +31 -24
- package/build/lib/extension-config.js +1 -1
- package/build/lib/main.js +29 -28
- package/build/lib/plugins.js +4 -2
- package/build/lib/schema/arg-spec.js +5 -3
- package/build/lib/schema/cli-args.js +7 -13
- package/build/lib/schema/schema.js +80 -9
- package/build/lib/utils.js +16 -36
- package/build/test/cli/cli-helpers.js +1 -1
- package/build/test/config-specs.js +122 -35
- package/build/test/driver-specs.js +96 -31
- package/build/test/fixtures/flattened-schema.js +31 -3
- package/build/test/parser-specs.js +69 -64
- package/build/test/schema/cli-args-specs.js +4 -27
- package/build/test/schema/schema-specs.js +56 -38
- package/build/test/utils-specs.js +24 -2
- package/lib/appium.js +45 -8
- package/lib/cli/args.js +17 -14
- package/lib/cli/parser.js +1 -1
- package/lib/config.js +75 -31
- package/lib/extension-config.js +1 -1
- package/lib/main.js +87 -37
- package/lib/plugins.js +2 -0
- package/lib/schema/arg-spec.js +8 -2
- package/lib/schema/cli-args.js +6 -30
- package/lib/schema/schema.js +142 -22
- package/lib/utils.js +28 -29
- package/package.json +4 -4
- package/types/types.d.ts +5 -0
|
@@ -4,30 +4,31 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
|
|
5
5
|
require("source-map-support/register");
|
|
6
6
|
|
|
7
|
-
var _appium = require("../lib/appium");
|
|
8
|
-
|
|
9
7
|
var _baseDriver = require("@appium/base-driver");
|
|
10
8
|
|
|
11
9
|
var _fakeDriver = require("@appium/fake-driver");
|
|
12
10
|
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
var _schema = require("../lib/schema/schema");
|
|
11
|
+
var _asyncbox = require("asyncbox");
|
|
16
12
|
|
|
17
13
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
18
14
|
|
|
19
15
|
var _sinon = _interopRequireDefault(require("sinon"));
|
|
20
16
|
|
|
21
|
-
var
|
|
17
|
+
var _appium = require("../lib/appium");
|
|
18
|
+
|
|
19
|
+
var _schema = require("../lib/schema/schema");
|
|
22
20
|
|
|
23
21
|
var _utils = require("../lib/utils");
|
|
24
22
|
|
|
23
|
+
var _helpers = require("./helpers");
|
|
24
|
+
|
|
25
25
|
const SESSION_ID = 1;
|
|
26
26
|
describe('AppiumDriver', function () {
|
|
27
27
|
beforeEach(function () {
|
|
28
28
|
(0, _schema.resetSchema)();
|
|
29
|
+
(0, _schema.finalizeSchema)();
|
|
29
30
|
});
|
|
30
|
-
describe('
|
|
31
|
+
describe('instance method', function () {
|
|
31
32
|
function getDriverAndFakeDriver(appiumArgs = {}, DriverClass = _fakeDriver.FakeDriver) {
|
|
32
33
|
const appium = new _appium.AppiumDriver(appiumArgs);
|
|
33
34
|
const fakeDriver = new DriverClass();
|
|
@@ -283,39 +284,103 @@ describe('AppiumDriver', function () {
|
|
|
283
284
|
_lodash.default.keys(appium.sessions).should.not.contain(sessionId);
|
|
284
285
|
});
|
|
285
286
|
});
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
class NoArgsPlugin {}
|
|
287
|
+
describe('createPluginInstances', function () {
|
|
288
|
+
class NoArgsPlugin {}
|
|
289
289
|
|
|
290
|
-
|
|
290
|
+
NoArgsPlugin.pluginName = 'noargs';
|
|
291
291
|
|
|
292
|
-
|
|
292
|
+
class ArgsPlugin {}
|
|
293
293
|
|
|
294
|
-
|
|
295
|
-
it('should not set CLI args if none are sent', function () {
|
|
296
|
-
const appium = new _appium.AppiumDriver({});
|
|
297
|
-
appium.pluginClasses = [NoArgsPlugin, ArgsPlugin];
|
|
294
|
+
ArgsPlugin.pluginName = 'args';
|
|
298
295
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
randomArg:
|
|
296
|
+
class ArrayArgPlugin {}
|
|
297
|
+
|
|
298
|
+
ArrayArgPlugin.pluginName = 'arrayarg';
|
|
299
|
+
beforeEach(function () {
|
|
300
|
+
(0, _schema.resetSchema)();
|
|
301
|
+
(0, _schema.registerSchema)('plugin', ArgsPlugin.pluginName, {
|
|
302
|
+
type: 'object',
|
|
303
|
+
properties: {
|
|
304
|
+
randomArg: {
|
|
305
|
+
type: 'number',
|
|
306
|
+
default: 2000
|
|
307
|
+
}
|
|
308
308
|
}
|
|
309
|
-
}
|
|
309
|
+
});
|
|
310
|
+
(0, _schema.registerSchema)('plugin', ArrayArgPlugin.pluginName, {
|
|
311
|
+
type: 'object',
|
|
312
|
+
properties: {
|
|
313
|
+
arr: {
|
|
314
|
+
type: 'array',
|
|
315
|
+
default: []
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
(0, _schema.finalizeSchema)();
|
|
320
|
+
});
|
|
321
|
+
describe('when args are not present', function () {
|
|
322
|
+
it('should not set CLI args', function () {
|
|
323
|
+
const appium = new _appium.AppiumDriver({});
|
|
324
|
+
appium.pluginClasses = [NoArgsPlugin, ArgsPlugin];
|
|
325
|
+
|
|
326
|
+
for (const plugin of appium.createPluginInstances()) {
|
|
327
|
+
should.not.exist(plugin.cliArgs);
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
describe('when args are equal to the schema defaults', function () {
|
|
332
|
+
it('should not set CLI args', function () {
|
|
333
|
+
const appium = new _appium.AppiumDriver({
|
|
334
|
+
plugin: {
|
|
335
|
+
[ArgsPlugin.pluginName]: {
|
|
336
|
+
randomArg: 2000
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
appium.pluginClasses = [NoArgsPlugin, ArgsPlugin];
|
|
341
|
+
|
|
342
|
+
for (const plugin of appium.createPluginInstances()) {
|
|
343
|
+
should.not.exist(plugin.cliArgs);
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
describe('when the default is an "object"', function () {
|
|
347
|
+
it('should not set CLI args', function () {
|
|
348
|
+
const appium = new _appium.AppiumDriver({
|
|
349
|
+
plugin: {
|
|
350
|
+
[ArrayArgPlugin.pluginName]: {
|
|
351
|
+
arr: []
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
appium.pluginClasses = [NoArgsPlugin, ArgsPlugin, ArrayArgPlugin];
|
|
356
|
+
|
|
357
|
+
for (const plugin of appium.createPluginInstances()) {
|
|
358
|
+
should.not.exist(plugin.cliArgs);
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
});
|
|
310
362
|
});
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
363
|
+
describe('when args are not equal to the schema defaults', function () {
|
|
364
|
+
it('should add cliArgs to the plugin', function () {
|
|
365
|
+
const appium = new _appium.AppiumDriver({
|
|
366
|
+
plugin: {
|
|
367
|
+
args: {
|
|
368
|
+
randomArg: 1234
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
});
|
|
372
|
+
appium.pluginClasses = [ArgsPlugin];
|
|
373
|
+
|
|
374
|
+
const plugin = _lodash.default.first(appium.createPluginInstances());
|
|
375
|
+
|
|
376
|
+
plugin.cliArgs.should.eql({
|
|
377
|
+
randomArg: 1234
|
|
378
|
+
});
|
|
379
|
+
});
|
|
315
380
|
});
|
|
316
381
|
});
|
|
317
382
|
});
|
|
318
383
|
});require('source-map-support').install();
|
|
319
384
|
|
|
320
385
|
|
|
321
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZHJpdmVyLXNwZWNzLmpzIl0sIm5hbWVzIjpbIlNFU1NJT05fSUQiLCJkZXNjcmliZSIsImJlZm9yZUVhY2giLCJnZXREcml2ZXJBbmRGYWtlRHJpdmVyIiwiYXBwaXVtQXJncyIsIkRyaXZlckNsYXNzIiwiRmFrZURyaXZlciIsImFwcGl1bSIsIkFwcGl1bURyaXZlciIsImZha2VEcml2ZXIiLCJtb2NrRmFrZURyaXZlciIsInNpbm9uIiwibW9jayIsIl9mYWtlRHJpdmVyIiwibW9ja2VkRHJpdmVyUmV0dXJuZXJDbGFzcyIsIkRyaXZlciIsIl9maW5kTWF0Y2hpbmdEcml2ZXIiLCJkcml2ZXIiLCJ2ZXJzaW9uIiwiZHJpdmVyTmFtZSIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJkZWxldGVTZXNzaW9uIiwiaXQiLCJleHBlY3RzIiwib25jZSIsIndpdGhFeGFjdEFyZ3MiLCJXM0NfQ0FQUyIsInJldHVybnMiLCJXM0NfUFJFRklYRURfQ0FQUyIsImNyZWF0ZVNlc3Npb24iLCJ2ZXJpZnkiLCJkZWZhdWx0Q2FwcyIsImFsbENhcHMiLCJhbHdheXNNYXRjaCIsImFyZ3MiLCJkZWZhdWx0Q2FwYWJpbGl0aWVzIiwid2l0aEFyZ3MiLCJwbGF0Zm9ybU5hbWUiLCJzZXNzaW9uT3ZlcnJpZGUiLCJmYWtlRHJpdmVycyIsIm1vY2tGYWtlRHJpdmVycyIsIl8iLCJtYXAiLCJmZCIsInRocm93cyIsInNlc3Npb25zIiwiZ2V0U2Vzc2lvbnMiLCJzaG91bGQiLCJoYXZlIiwibGVuZ3RoIiwibWZkIiwidW5kZWZpbmVkIiwiQkFTRV9DQVBTIiwidzNjQ2FwcyIsImZpcnN0TWF0Y2giLCJqc29ud3BDYXBzIiwiYXV0b21hdGlvbk5hbWUiLCJzb21lT3RoZXJQYXJhbSIsIm5ldmVyIiwiQXJnc0RyaXZlciIsIkJhc2VEcml2ZXIiLCJmYWtlIiwicmFuZG9tQXJnIiwidmFsdWUiLCJjbGlBcmdzIiwiZXFsIiwic2Vzc2lvbklkIiwib2JqZWN0IiwiYmVmb3JlIiwic2Vzc2lvbiIsImlkIiwiYmUiLCJhbiIsImVtcHR5IiwiY2FwczEiLCJjYXBzMiIsInNlc3Npb24xSWQiLCJzZXNzaW9uMUNhcHMiLCJzZXNzaW9uMklkIiwic2Vzc2lvbjJDYXBzIiwiZXF1YWwiLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJidWlsZCIsImV4aXN0IiwiY2xvbmUiLCJrZXlzIiwiY29udGFpbiIsImV2ZW50RW1pdHRlciIsImVtaXQiLCJFcnJvciIsIm5vdCIsIk5vQXJnc1BsdWdpbiIsInBsdWdpbk5hbWUiLCJBcmdzUGx1Z2luIiwicGx1Z2luQ2xhc3NlcyIsInBsdWdpbiIsImNyZWF0ZVBsdWdpbkluc3RhbmNlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsVUFBVSxHQUFHLENBQW5CO0FBRUFDLFFBQVEsQ0FBQyxjQUFELEVBQWlCLFlBQVk7QUFDbkNDLEVBQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCO0FBQ0QsR0FGUyxDQUFWO0FBR0FELEVBQUFBLFFBQVEsQ0FBQyxjQUFELEVBQWlCLFlBQVk7QUFDbkMsYUFBU0Usc0JBQVQsQ0FBaUNDLFVBQVUsR0FBRyxFQUE5QyxFQUFrREMsV0FBVyxHQUFHQyxzQkFBaEUsRUFBNEU7QUFDMUUsWUFBTUMsTUFBTSxHQUFHLElBQUlDLG9CQUFKLENBQWlCSixVQUFqQixDQUFmO0FBQ0EsWUFBTUssVUFBVSxHQUFHLElBQUlKLFdBQUosRUFBbkI7O0FBQ0EsWUFBTUssY0FBYyxHQUFHQyxlQUFNQyxJQUFOLENBQVdILFVBQVgsQ0FBdkI7O0FBQ0FDLE1BQUFBLGNBQWMsQ0FBQ0csV0FBZixHQUE2QkosVUFBN0I7O0FBQ0EsWUFBTUsseUJBQXlCLEdBQUcsU0FBU0MsTUFBVCxHQUFtQjtBQUNuRCxlQUFPTixVQUFQO0FBQ0QsT0FGRDs7QUFJQUYsTUFBQUEsTUFBTSxDQUFDUyxtQkFBUCxHQUE2QixZQUFZO0FBQ3ZDLGVBQU87QUFDTEMs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RUFBRSxDQUFDLDBDQUFELEVBQTZDLFlBQVk7QUFDekQsWUFBTWhCLE1BQU0sR0FBRyxJQUFJQyxvQkFBSixDQUFpQixFQUFqQixDQUFmO0FBQ0FELE1BQUFBLE1BQU0sQ0FBQ3lGLGFBQVAsR0FBdUIsQ0FBQ0gsWUFBRCxFQUFlRSxVQUFmLENBQXZCOztBQUNBLFdBQUssTUFBTUUsTUFBWCxJQUFxQjFGLE1BQU0sQ0FBQzJGLHFCQUFQLEVBQXJCLEVBQXFEO0FBQ25EbEQsUUFBQUEsTUFBTSxDQUFDNEMsR0FBUCxDQUFXUCxLQUFYLENBQWlCWSxNQUFNLENBQUNoQyxPQUF4QjtBQUNEO0FBQ0YsS0FOQyxDQUFGO0FBT0ExQyxJQUFBQSxFQUFFLENBQUMsaURBQUQsRUFBb0QsWUFBWTtBQUNoRSxZQUFNaEIsTUFBTSxHQUFHLElBQUlDLG9CQUFKLENBQWlCO0FBQUN5RixRQUFBQSxNQUFNLEVBQUU7QUFBQzlELFVBQUFBLElBQUksRUFBRTtBQUFDNEIsWUFBQUEsU0FBUyxFQUFFO0FBQVo7QUFBUDtBQUFULE9BQWpCLENBQWY7QUFDQXhELE1BQUFBLE1BQU0sQ0FBQ3lGLGFBQVAsR0FBdUIsQ0FBQ0QsVUFBRCxDQUF2QjtBQUNBLFlBQU1FLE1BQU0sR0FBRzFGLE1BQU0sQ0FBQzJGLHFCQUFQLEdBQStCLENBQS9CLENBQWY7QUFDQUQsTUFBQUEsTUFBTSxDQUFDaEMsT0FBUCxDQUFlakIsTUFBZixDQUFzQmtCLEdBQXRCLENBQTBCO0FBQUNILFFBQUFBLFNBQVMsRUFBRTtBQUFaLE9BQTFCO0FBQ0QsS0FMQyxDQUFGO0FBTUQsR0FwQk8sQ0FBUjtBQXFCRCxDQWhTTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1vY2hhXG5cbmltcG9ydCB7IEFwcGl1bURyaXZlciB9IGZyb20gJy4uL2xpYi9hcHBpdW0nO1xuaW1wb3J0IHsgQmFzZURyaXZlciB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgRmFrZURyaXZlciB9IGZyb20gJ0BhcHBpdW0vZmFrZS1kcml2ZXInO1xuaW1wb3J0IHsgQkFTRV9DQVBTLCBXM0NfQ0FQUywgVzNDX1BSRUZJWEVEX0NBUFMgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtyZXNldFNjaGVtYX0gZnJvbSAnLi4vbGliL3NjaGVtYS9zY2hlbWEnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGluc2VydEFwcGl1bVByZWZpeGVzLCByZW1vdmVBcHBpdW1QcmVmaXhlcyB9IGZyb20gJy4uL2xpYi91dGlscyc7XG5cblxuY29uc3QgU0VTU0lPTl9JRCA9IDE7XG5cbmRlc2NyaWJlKCdBcHBpdW1Ecml2ZXInLCBmdW5jdGlvbiAoKSB7XG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHJlc2V0U2NoZW1hKCk7XG4gIH0pO1xuICBkZXNjcmliZSgnQXBwaXVtRHJpdmVyJywgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGdldERyaXZlckFuZEZha2VEcml2ZXIgKGFwcGl1bUFyZ3MgPSB7fSwgRHJpdmVyQ2xhc3MgPSBGYWtlRHJpdmVyKSB7XG4gICAgICBjb25zdCBhcHBpdW0gPSBuZXcgQXBwaXVtRHJpdmVyKGFwcGl1bUFyZ3MpO1xuICAgICAgY29uc3QgZmFrZURyaXZlciA9IG5ldyBEcml2ZXJDbGFzcygpO1xuICAgICAgY29uc3QgbW9ja0Zha2VEcml2ZXIgPSBzaW5vbi5tb2NrKGZha2VEcml2ZXIpO1xuICAgICAgbW9ja0Zha2VEcml2ZXIuX2Zha2VEcml2ZXIgPSBmYWtlRHJpdmVyO1xuICAgICAgY29uc3QgbW9ja2VkRHJpdmVyUmV0dXJuZXJDbGFzcyA9IGZ1bmN0aW9uIERyaXZlciAoKSB7XG4gICAgICAgIHJldHVybiBmYWtlRHJpdmVyO1xuICAgICAgfTtcblxuICAgICAgYXBwaXVtLl9maW5kTWF0Y2hpbmdEcml2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZHJpdmVyOiBtb2NrZWREcml2ZXJSZXR1cm5lckNsYXNzLFxuICAgICAgICAgIHZlcnNpb246ICcxLjIuMycsXG4gICAgICAgICAgZHJpdmVyTmFtZTogJ2Zha2UnLFxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBbYXBwaXVtLCBtb2NrRmFrZURyaXZlcl07XG4gICAgfVxuICAgIGRlc2NyaWJlKCdjcmVhdGVTZXNzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGFwcGl1bTtcbiAgICAgIGxldCBtb2NrRmFrZURyaXZlcjtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBbYXBwaXVtLCBtb2NrRmFrZURyaXZlcl0gPSBnZXREcml2ZXJBbmRGYWtlRHJpdmVyKCk7XG4gICAgICB9KTtcbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnJlc3RvcmUoKTtcbiAgICAgICAgYXdhaXQgYXBwaXVtLmRlbGV0ZVNlc3Npb24oU0VTU0lPTl9JRCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoYHNob3VsZCBjYWxsIGlubmVyIGRyaXZlcidzIGNyZWF0ZVNlc3Npb24gd2l0aCBkZXNpcmVkIGNhcGFiaWxpdGllc2AsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoRXhhY3RBcmdzKG51bGwsIG51bGwsIFczQ19DQVBTLCBbXSlcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoVzNDX1BSRUZJWEVEX0NBUFMpXSk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIFczQ19DQVBTKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIudmVyaWZ5KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KGBzaG91bGQgY2FsbCBpbm5lciBkcml2ZXIncyBjcmVhdGVTZXNzaW9uIHdpdGggZGVzaXJlZCBhbmQgZGVmYXVsdCBjYXBhYmlsaXRpZXNgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBkZWZhdWx0Q2FwcyA9IHsnYXBwaXVtOnNvbWVDYXAnOiAnaGVsbG8nfTtcbiAgICAgICAgbGV0IGFsbENhcHMgPSB7Li4uVzNDX0NBUFMsIGFsd2F5c01hdGNoOiB7Li4uVzNDX0NBUFMuYWx3YXlzTWF0Y2gsIC4uLmRlZmF1bHRDYXBzfX07XG4gICAgICAgIGFwcGl1bS5hcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMgPSBkZWZhdWx0Q2FwcztcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoQXJncyhudWxsLCBudWxsLCBhbGxDYXBzKVxuICAgICAgICAgIC5yZXR1cm5zKFtTRVNTSU9OX0lELCByZW1vdmVBcHBpdW1QcmVmaXhlcyhhbGxDYXBzLmFsd2F5c01hdGNoKV0pO1xuICAgICAgICBhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBXM0NfQ0FQUyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdChgc2hvdWxkIGNhbGwgaW5uZXIgZHJpdmVyJ3MgY3JlYXRlU2Vzc2lvbiB3aXRoIGRlc2lyZWQgYW5kIGRlZmF1bHQgY2FwYWJpbGl0aWVzIHdpdGhvdXQgb3ZlcnJpZGluZyBjYXBzYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBhIGRlZmF1bHQgY2FwYWJpbGl0eSB3aXRoIHRoZSBzYW1lIGtleSBhcyBhIGRlc2lyZWQgY2FwYWJpbGl0eVxuICAgICAgICAvLyBzaG91bGQgZG8gbm90aGluZ1xuICAgICAgICBsZXQgZGVmYXVsdENhcHMgPSB7cGxhdGZvcm1OYW1lOiAnRXJzYXR6J307XG4gICAgICAgIGFwcGl1bS5hcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMgPSBkZWZhdWx0Q2FwcztcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoQXJncyhudWxsLCBudWxsLCBXM0NfQ0FQUylcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoVzNDX1BSRUZJWEVEX0NBUFMpXSk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIFczQ19DQVBTKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIudmVyaWZ5KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQga2lsbCBhbGwgb3RoZXIgc2Vzc2lvbnMgaWYgc2Vzc2lvbk92ZXJyaWRlIGlzIG9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhcHBpdW0uYXJncy5zZXNzaW9uT3ZlcnJpZGUgPSB0cnVlO1xuXG4gICAgICAgIC8vIG1vY2sgdGhyZWUgc2Vzc2lvbnMgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHRoZSBuZXcgb25lIGlzIGNyZWF0ZWRcbiAgICAgICAgbGV0IGZha2VEcml2ZXJzID0gW1xuICAgICAgICAgIG5ldyBGYWtlRHJpdmVyKCksXG4gICAgICAgICAgbmV3IEZha2VEcml2ZXIoKSxcbiAgICAgICAgICBuZXcgRmFrZURyaXZlcigpLFxuICAgICAgICBdO1xuICAgICAgICBsZXQgbW9ja0Zha2VEcml2ZXJzID0gXy5tYXAoZmFrZURyaXZlcnMsIChmZCkgPT4gc2lub24ubW9jayhmZCkpO1xuICAgICAgICBtb2NrRmFrZURyaXZlcnNbMF0uZXhwZWN0cygnZGVsZXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXJzWzFdLmV4cGVjdHMoJ2RlbGV0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKClcbiAgICAgICAgICAudGhyb3dzKCdDYW5ub3Qgc2h1dCBkb3duIEFuZHJvaWQgZHJpdmVyOyBpdCBoYXMgYWxyZWFkeSBzaHV0IGRvd24nKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXJzWzJdLmV4cGVjdHMoJ2RlbGV0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCk7XG4gICAgICAgIGFwcGl1bS5zZXNzaW9uc1snYWJjLTEyMy14eXonXSA9IGZha2VEcml2ZXJzWzBdO1xuICAgICAgICBhcHBpdW0uc2Vzc2lvbnNbJ3h5ei0zMjEtYWJjJ10gPSBmYWtlRHJpdmVyc1sxXTtcbiAgICAgICAgYXBwaXVtLnNlc3Npb25zWycxMjMtYWJjLXh5eiddID0gZmFrZURyaXZlcnNbMl07XG5cbiAgICAgICAgbGV0IHNlc3Npb25zID0gYXdhaXQgYXBwaXVtLmdldFNlc3Npb25zKCk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5oYXZlLmxlbmd0aCgzKTtcblxuICAgICAgICBtb2NrRmFrZURyaXZlci5leHBlY3RzKCdjcmVhdGVTZXNzaW9uJylcbiAgICAgICAgICAub25jZSgpLndpdGhFeGFjdEFyZ3MobnVsbCwgbnVsbCwgVzNDX0NBUFMsIFtdKVxuICAgICAgICAgIC5yZXR1cm5zKFtTRVNTSU9OX0lELCByZW1vdmVBcHBpdW1QcmVmaXhlcyhXM0NfUFJFRklYRURfQ0FQUyldKTtcbiAgICAgICAgYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgVzNDX0NBUFMpO1xuXG4gICAgICAgIHNlc3Npb25zID0gYXdhaXQgYXBwaXVtLmdldFNlc3Npb25zKCk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcblxuICAgICAgICBmb3IgKGxldCBtZmQgb2YgbW9ja0Zha2VEcml2ZXJzKSB7XG4gICAgICAgICAgbWZkLnZlcmlmeSgpO1xuICAgICAgICB9XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgXCJjcmVhdGVTZXNzaW9uXCIgd2l0aCBXM0MgY2FwYWJpbGl0aWVzIGFyZ3VtZW50LCBpZiBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoQXJncyhudWxsLCB1bmRlZmluZWQsIFczQ19DQVBTKVxuICAgICAgICAgIC5yZXR1cm5zKFtTRVNTSU9OX0lELCBCQVNFX0NBUFNdKTtcbiAgICAgICAgYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24odW5kZWZpbmVkLCB1bmRlZmluZWQsIFczQ19DQVBTKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIudmVyaWZ5KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgY2FsbCBcImNyZWF0ZVNlc3Npb25cIiB3aXRoIFczQyBjYXBhYmlsaXRpZXMgYXJndW1lbnQgd2l0aCBhZGRpdGlvbmFsIHByb3ZpZGVkIHBhcmFtZXRlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCB3M2NDYXBzID0ge1xuICAgICAgICAgIC4uLlczQ19DQVBTLFxuICAgICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgICAuLi5XM0NfQ0FQUy5hbHdheXNNYXRjaCxcbiAgICAgICAgICAgICdhcHBpdW06c29tZU90aGVyUGFybSc6ICdzb21lT3RoZXJQYXJtJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBtb2NrRmFrZURyaXZlci5leHBlY3RzKCdjcmVhdGVTZXNzaW9uJylcbiAgICAgICAgICAub25jZSgpLndpdGhBcmdzKG51bGwsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICAgICAgLi4udzNjQ2Fwcy5hbHdheXNNYXRjaCxcbiAgICAgICAgICAgICAgJ2FwcGl1bTpzb21lT3RoZXJQYXJtJzogJ3NvbWVPdGhlclBhcm0nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgaW5zZXJ0QXBwaXVtUHJlZml4ZXMoQkFTRV9DQVBTKV0pO1xuXG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB3M2NDYXBzKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIudmVyaWZ5KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgbm90IGNhbGwgXCJjcmVhdGVTZXNzaW9uXCIgd2l0aCBKU09OV1AgY2FwYWJpbGl0aWVzIGlmIFczQyBoYXMgaW5jb21wbGV0ZSBjYXBhYmlsaXRpZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHczY0NhcHMgPSB7XG4gICAgICAgICAgLi4uVzNDX0NBUFMsXG4gICAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICAgICdhcHBpdW06c29tZU90aGVyUGFybSc6ICdzb21lT3RoZXJQYXJtJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGpzb253cENhcHMgPSB7XG4gICAgICAgICAgLi4uQkFTRV9DQVBTLFxuICAgICAgICAgIGF1dG9tYXRpb25OYW1lOiAnRmFrZScsXG4gICAgICAgICAgc29tZU90aGVyUGFyYW06ICdzb21lT3RoZXJQYXJhbScsXG4gICAgICAgIH07XG5cbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpLm5ldmVyKCk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKGpzb253cENhcHMsIHVuZGVmaW5lZCwgdzNjQ2Fwcyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYXNzaWduIGFyZ3MgdG8gcHJvcGVydHkgYGNsaUFyZ3NgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGFzcyBBcmdzRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJncyA9IHtkcml2ZXI6IHtmYWtlOiB7cmFuZG9tQXJnOiAxMjM0fX19O1xuICAgICAgICBbYXBwaXVtLCBtb2NrRmFrZURyaXZlcl0gPSBnZXREcml2ZXJBbmRGYWtlRHJpdmVyKGFyZ3MsIEFyZ3NEcml2ZXIpO1xuICAgICAgICBjb25zdCB7dmFsdWV9ID0gYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24odW5kZWZpbmVkLCB1bmRlZmluZWQsIFczQ19DQVBTKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtb2NrRmFrZURyaXZlci5fZmFrZURyaXZlci5jbGlBcmdzLnNob3VsZC5lcWwoe3JhbmRvbUFyZzogMTIzNH0pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGFwcGl1bS5kZWxldGVTZXNzaW9uKHZhbHVlWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2RlbGV0ZVNlc3Npb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgYXBwaXVtO1xuICAgICAgbGV0IG1vY2tGYWtlRHJpdmVyO1xuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIFthcHBpdW0sIG1vY2tGYWtlRHJpdmVyXSA9IGdldERyaXZlckFuZEZha2VEcml2ZXIoKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIucmVzdG9yZSgpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUgc2Vzc2lvbiBpZiBpdCBpcyBmb3VuZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IFtzZXNzaW9uSWRdID0gKGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIFczQ19DQVBTKSkudmFsdWU7XG4gICAgICAgIGxldCBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5kZWxldGVTZXNzaW9uKHNlc3Npb25JZCk7XG4gICAgICAgIHNlc3Npb25zID0gYXdhaXQgYXBwaXVtLmdldFNlc3Npb25zKCk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5oYXZlLmxlbmd0aCgwKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIGlubmVyIGRyaXZlclxcJ3MgZGVsZXRlU2Vzc2lvbiBtZXRob2QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IFtzZXNzaW9uSWRdID0gKGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIFczQ19DQVBTKSkudmFsdWU7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2RlbGV0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCkud2l0aEV4YWN0QXJncyhzZXNzaW9uSWQsIFtdKVxuICAgICAgICAgIC5yZXR1cm5zKCk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5kZWxldGVTZXNzaW9uKHNlc3Npb25JZCk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuXG4gICAgICAgIC8vIGNsZWFudXAsIHNpbmNlIHdlIGZha2VkIHRoZSBkZWxldGUgc2Vzc2lvbiBjYWxsXG4gICAgICAgIGF3YWl0IG1vY2tGYWtlRHJpdmVyLm9iamVjdC5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnZ2V0U2Vzc2lvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgYXBwaXVtLCBtb2NrRmFrZURyaXZlcjtcbiAgICAgIGxldCBzZXNzaW9ucztcbiAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIFthcHBpdW0sIG1vY2tGYWtlRHJpdmVyXSA9IGdldERyaXZlckFuZEZha2VEcml2ZXIoKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChsZXQgc2Vzc2lvbiBvZiBzZXNzaW9ucykge1xuICAgICAgICAgIGF3YWl0IGFwcGl1bS5kZWxldGVTZXNzaW9uKHNlc3Npb24uaWQpO1xuICAgICAgICB9XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgb2Ygc2Vzc2lvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlc3Npb25zID0gYXdhaXQgYXBwaXVtLmdldFNlc3Npb25zKCk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5iZS5hbignYXJyYXknKTtcbiAgICAgICAgc2Vzc2lvbnMuc2hvdWxkLmJlLmVtcHR5O1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBzZXNzaW9ucyBjcmVhdGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY2FwczEgPSB7YWx3YXlzTWF0Y2g6IHsuLi5XM0NfUFJFRklYRURfQ0FQUywgJ2FwcGl1bTpjYXAnOiAndmFsdWUnfX07XG4gICAgICAgIGxldCBjYXBzMiA9IHthbHdheXNNYXRjaDogey4uLlczQ19QUkVGSVhFRF9DQVBTLCAnYXBwaXVtOmNhcCc6ICdvdGhlciB2YWx1ZSd9fTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpLm9uY2UoKVxuICAgICAgICAgIC5yZXR1cm5zKFsnZmFrZS1zZXNzaW9uLWlkLTEnLCByZW1vdmVBcHBpdW1QcmVmaXhlcyhjYXBzMS5hbHdheXNNYXRjaCldKTtcbiAgICAgICAgbGV0IFtzZXNzaW9uMUlkLCBzZXNzaW9uMUNhcHNdID0gKGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIGNhcHMxKSkudmFsdWU7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKS5vbmNlKClcbiAgICAgICAgICAucmV0dXJucyhbJ2Zha2Utc2Vzc2lvbi1pZC0yJywgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoY2FwczIuYWx3YXlzTWF0Y2gpXSk7XG4gICAgICAgIGxldCBbc2Vzc2lvbjJJZCwgc2Vzc2lvbjJDYXBzXSA9IChhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBjYXBzMikpLnZhbHVlO1xuXG4gICAgICAgIHNlc3Npb25zID0gYXdhaXQgYXBwaXVtLmdldFNlc3Npb25zKCk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5iZS5hbignYXJyYXknKTtcbiAgICAgICAgc2Vzc2lvbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgICAgICBzZXNzaW9uc1swXS5pZC5zaG91bGQuZXF1YWwoc2Vzc2lvbjFJZCk7XG4gICAgICAgIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMxLmFsd2F5c01hdGNoKS5zaG91bGQuZXFsKHNlc3Npb24xQ2Fwcyk7XG4gICAgICAgIHNlc3Npb25zWzFdLmlkLnNob3VsZC5lcXVhbChzZXNzaW9uMklkKTtcbiAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoY2FwczIuYWx3YXlzTWF0Y2gpLnNob3VsZC5lcWwoc2Vzc2lvbjJDYXBzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRTdGF0dXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgYXBwaXVtO1xuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXBwaXVtID0gbmV3IEFwcGl1bURyaXZlcih7fSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RhdHVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgc3RhdHVzID0gYXdhaXQgYXBwaXVtLmdldFN0YXR1cygpO1xuICAgICAgICBzdGF0dXMuYnVpbGQuc2hvdWxkLmV4aXN0O1xuICAgICAgICBzdGF0dXMuYnVpbGQudmVyc2lvbi5zaG91bGQuZXhpc3Q7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnc2Vzc2lvbkV4aXN0cycsIGZ1bmN0aW9uICgpIHtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnYXR0YWNoVW5leHBlY3RlZFNodXRkb3duSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBhcHBpdW07XG4gICAgICBsZXQgbW9ja0Zha2VEcml2ZXI7XG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW2FwcGl1bSwgbW9ja0Zha2VEcml2ZXJdID0gZ2V0RHJpdmVyQW5kRmFrZURyaXZlcigpO1xuICAgICAgfSk7XG4gICAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBtb2NrRmFrZURyaXZlci5vYmplY3QuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgICBtb2NrRmFrZURyaXZlci5yZXN0b3JlKCk7XG4gICAgICAgIGFwcGl1bS5hcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMgPSB7fTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlbW92ZSBzZXNzaW9uIGlmIGlubmVyIGRyaXZlciB1bmV4cGVjdGVkbHkgZXhpdHMgd2l0aCBhbiBlcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IFtzZXNzaW9uSWQsXSA9IChhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBfLmNsb25lKFczQ19DQVBTKSkpLnZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbW1hLXNwYWNpbmdcbiAgICAgICAgXy5rZXlzKGFwcGl1bS5zZXNzaW9ucykuc2hvdWxkLmNvbnRhaW4oc2Vzc2lvbklkKTtcbiAgICAgICAgYXBwaXVtLnNlc3Npb25zW3Nlc3Npb25JZF0uZXZlbnRFbWl0dGVyLmVtaXQoJ29uVW5leHBlY3RlZFNodXRkb3duJywgbmV3IEVycm9yKCdPb3BzJykpO1xuICAgICAgICAvLyBsZXQgZXZlbnQgbG9vcCBzcGluIHNvIHJlamVjdGlvbiBpcyBoYW5kbGVkXG4gICAgICAgIGF3YWl0IHNsZWVwKDEpO1xuICAgICAgICBfLmtleXMoYXBwaXVtLnNlc3Npb25zKS5zaG91bGQubm90LmNvbnRhaW4oc2Vzc2lvbklkKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCByZW1vdmUgc2Vzc2lvbiBpZiBpbm5lciBkcml2ZXIgdW5leHBlY3RlZGx5IGV4aXRzIHdpdGggbm8gZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBbc2Vzc2lvbklkLF0gPSAoYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZShXM0NfQ0FQUykpKS52YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb21tYS1zcGFjaW5nXG4gICAgICAgIF8ua2V5cyhhcHBpdW0uc2Vzc2lvbnMpLnNob3VsZC5jb250YWluKHNlc3Npb25JZCk7XG4gICAgICAgIGFwcGl1bS5zZXNzaW9uc1tzZXNzaW9uSWRdLmV2ZW50RW1pdHRlci5lbWl0KCdvblVuZXhwZWN0ZWRTaHV0ZG93bicpO1xuICAgICAgICAvLyBsZXQgZXZlbnQgbG9vcCBzcGluIHNvIHJlamVjdGlvbiBpcyBoYW5kbGVkXG4gICAgICAgIGF3YWl0IHNsZWVwKDEpO1xuICAgICAgICBfLmtleXMoYXBwaXVtLnNlc3Npb25zKS5zaG91bGQubm90LmNvbnRhaW4oc2Vzc2lvbklkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJyNjcmVhdGVQbHVnaW5JbnN0YW5jZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY2xhc3MgTm9BcmdzUGx1Z2luIHt9XG4gICAgTm9BcmdzUGx1Z2luLnBsdWdpbk5hbWUgPSAnbm9hcmdzJztcblxuICAgIGNsYXNzIEFyZ3NQbHVnaW4ge31cbiAgICBBcmdzUGx1Z2luLnBsdWdpbk5hbWUgPSAnYXJncyc7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBzZXQgQ0xJIGFyZ3MgaWYgbm9uZSBhcmUgc2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFwcGl1bSA9IG5ldyBBcHBpdW1Ecml2ZXIoe30pO1xuICAgICAgYXBwaXVtLnBsdWdpbkNsYXNzZXMgPSBbTm9BcmdzUGx1Z2luLCBBcmdzUGx1Z2luXTtcbiAgICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIGFwcGl1bS5jcmVhdGVQbHVnaW5JbnN0YW5jZXMoKSkge1xuICAgICAgICBzaG91bGQubm90LmV4aXN0KHBsdWdpbi5jbGlBcmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGFkZCBjbGlBcmdzIHRvIHRoZSBwbHVnaW4gb25jZSB2YWxpZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhcHBpdW0gPSBuZXcgQXBwaXVtRHJpdmVyKHtwbHVnaW46IHthcmdzOiB7cmFuZG9tQXJnOiAxMjM0fX19KTtcbiAgICAgIGFwcGl1bS5wbHVnaW5DbGFzc2VzID0gW0FyZ3NQbHVnaW5dO1xuICAgICAgY29uc3QgcGx1Z2luID0gYXBwaXVtLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpWzBdO1xuICAgICAgcGx1Z2luLmNsaUFyZ3Muc2hvdWxkLmVxbCh7cmFuZG9tQXJnOiAxMjM0fSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvZHJpdmVyLXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
386
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZHJpdmVyLXNwZWNzLmpzIl0sIm5hbWVzIjpbIlNFU1NJT05fSUQiLCJkZXNjcmliZSIsImJlZm9yZUVhY2giLCJnZXREcml2ZXJBbmRGYWtlRHJpdmVyIiwiYXBwaXVtQXJncyIsIkRyaXZlckNsYXNzIiwiRmFrZURyaXZlciIsImFwcGl1bSIsIkFwcGl1bURyaXZlciIsImZha2VEcml2ZXIiLCJtb2NrRmFrZURyaXZlciIsInNpbm9uIiwibW9jayIsIl9mYWtlRHJpdmVyIiwibW9ja2VkRHJpdmVyUmV0dXJuZXJDbGFzcyIsIkRyaXZlciIsIl9maW5kTWF0Y2hpbmdEcml2ZXIiLCJkcml2ZXIiLCJ2ZXJzaW9uIiwiZHJpdmVyTmFtZSIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJkZWxldGVTZXNzaW9uIiwiaXQiLCJleHBlY3RzIiwib25jZSIsIndpdGhFeGFjdEFyZ3MiLCJXM0NfQ0FQUyIsInJldHVybnMiLCJXM0NfUFJFRklYRURfQ0FQUyIsImNyZWF0ZVNlc3Npb24iLCJ2ZXJpZnkiLCJkZWZhdWx0Q2FwcyIsImFsbENhcHMiLCJhbHdheXNNYXRjaCIsImFyZ3MiLCJkZWZhdWx0Q2FwYWJpbGl0aWVzIiwid2l0aEFyZ3MiLCJwbGF0Zm9ybU5hbWUiLCJzZXNzaW9uT3ZlcnJpZGUiLCJmYWtlRHJpdmVycyIsIm1vY2tGYWtlRHJpdmVycyIsIl8iLCJtYXAiLCJmZCIsInRocm93cyIsInNlc3Npb25zIiwiZ2V0U2Vzc2lvbnMiLCJzaG91bGQiLCJoYXZlIiwibGVuZ3RoIiwibWZkIiwidW5kZWZpbmVkIiwiQkFTRV9DQVBTIiwidzNjQ2FwcyIsImZpcnN0TWF0Y2giLCJqc29ud3BDYXBzIiwiYXV0b21hdGlvbk5hbWUiLCJzb21lT3RoZXJQYXJhbSIsIm5ldmVyIiwiQXJnc0RyaXZlciIsIkJhc2VEcml2ZXIiLCJmYWtlIiwicmFuZG9tQXJnIiwidmFsdWUiLCJjbGlBcmdzIiwiZXFsIiwic2Vzc2lvbklkIiwib2JqZWN0IiwiYmVmb3JlIiwic2Vzc2lvbiIsImlkIiwiYmUiLCJhbiIsImVtcHR5IiwiY2FwczEiLCJjYXBzMiIsInNlc3Npb24xSWQiLCJzZXNzaW9uMUNhcHMiLCJzZXNzaW9uMklkIiwic2Vzc2lvbjJDYXBzIiwiZXF1YWwiLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJidWlsZCIsImV4aXN0IiwiY2xvbmUiLCJrZXlzIiwiY29udGFpbiIsImV2ZW50RW1pdHRlciIsImVtaXQiLCJFcnJvciIsIm5vdCIsIk5vQXJnc1BsdWdpbiIsInBsdWdpbk5hbWUiLCJBcmdzUGx1Z2luIiwiQXJyYXlBcmdQbHVnaW4iLCJ0eXBlIiwicHJvcGVydGllcyIsImRlZmF1bHQiLCJhcnIiLCJwbHVnaW5DbGFzc2VzIiwicGx1Z2luIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2VzIiwiZmlyc3QiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFVBQVUsR0FBRyxDQUFuQjtBQUVBQyxRQUFRLENBQUMsY0FBRCxFQUFpQixZQUFZO0FBQ25DQyxFQUFBQSxVQUFVLENBQUMsWUFBWTtBQUNyQjtBQUNBO0FBQ0QsR0FIUyxDQUFWO0FBSUFELEVBQUFBLFFBQVEsQ0FBQyxpQkFBRCxFQUFvQixZQUFZO0FBQ3RDLGFBQVNFLHNCQUFULENBQWlDQyxVQUFVLEdBQUcsRUFBOUMsRUFBa0RDLFdBQVcsR0FBR0Msc0JBQWhFLEVBQTRFO0FBQzFFLFlBQU1DLE1BQU0sR0FBRyxJQUFJQyxvQkFBSixDQUFpQkosVUFBakIsQ0FBZjtBQUNBLFlBQU1LLFVBQVUsR0FBRyxJQUFJSixXQUFKLEVBQW5COztBQUNBLFlBQU1LLGNBQWMsR0FBR0MsZUFBTUMsSUFBTixDQUFXSCxVQUFYLENBQXZCOztBQUNBQyxNQUFBQSxjQUFjLENBQUNHLFdBQWYsR0FBNkJKLFVBQTdCOztBQUNBLFlBQU1LLHlCQUF5QixHQUFHLFNBQVNDLE1BQVQsR0FBbUI7QUFDbkQsZUFBT04sVUFBUDtB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RjtBQU9ELFNBUk8sQ0FBUjtBQVNELE9BbEJPLENBQVI7QUFvQkFoRSxNQUFBQSxRQUFRLENBQUMsZ0RBQUQsRUFBbUQsWUFBWTtBQUNyRXNCLFFBQUFBLEVBQUUsQ0FBQyxrQ0FBRCxFQUFxQyxZQUFZO0FBQ2pELGdCQUFNaEIsTUFBTSxHQUFHLElBQUlDLG9CQUFKLENBQWlCO0FBQUM4RixZQUFBQSxNQUFNLEVBQUU7QUFBQ25FLGNBQUFBLElBQUksRUFBRTtBQUFDNEIsZ0JBQUFBLFNBQVMsRUFBRTtBQUFaO0FBQVA7QUFBVCxXQUFqQixDQUFmO0FBQ0F4RCxVQUFBQSxNQUFNLENBQUM4RixhQUFQLEdBQXVCLENBQUNOLFVBQUQsQ0FBdkI7O0FBQ0EsZ0JBQU1PLE1BQU0sR0FBRzVELGdCQUFFOEQsS0FBRixDQUFRakcsTUFBTSxDQUFDZ0cscUJBQVAsRUFBUixDQUFmOztBQUNBRCxVQUFBQSxNQUFNLENBQUNyQyxPQUFQLENBQWVqQixNQUFmLENBQXNCa0IsR0FBdEIsQ0FBMEI7QUFBQ0gsWUFBQUEsU0FBUyxFQUFFO0FBQVosV0FBMUI7QUFDRCxTQUxDLENBQUY7QUFNRCxPQVBPLENBQVI7QUFRRCxLQTFFTyxDQUFSO0FBMkVELEdBalZPLENBQVI7QUFrVkQsQ0F2Vk8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQgeyBCYXNlRHJpdmVyIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBGYWtlRHJpdmVyIH0gZnJvbSAnQGFwcGl1bS9mYWtlLWRyaXZlcic7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgQXBwaXVtRHJpdmVyIH0gZnJvbSAnLi4vbGliL2FwcGl1bSc7XG5pbXBvcnQgeyBmaW5hbGl6ZVNjaGVtYSwgcmVnaXN0ZXJTY2hlbWEsIHJlc2V0U2NoZW1hIH0gZnJvbSAnLi4vbGliL3NjaGVtYS9zY2hlbWEnO1xuaW1wb3J0IHsgaW5zZXJ0QXBwaXVtUHJlZml4ZXMsIHJlbW92ZUFwcGl1bVByZWZpeGVzIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IEJBU0VfQ0FQUywgVzNDX0NBUFMsIFczQ19QUkVGSVhFRF9DQVBTIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuXG5jb25zdCBTRVNTSU9OX0lEID0gMTtcblxuZGVzY3JpYmUoJ0FwcGl1bURyaXZlcicsIGZ1bmN0aW9uICgpIHtcbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgcmVzZXRTY2hlbWEoKTtcbiAgICBmaW5hbGl6ZVNjaGVtYSgpO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2luc3RhbmNlIG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBnZXREcml2ZXJBbmRGYWtlRHJpdmVyIChhcHBpdW1BcmdzID0ge30sIERyaXZlckNsYXNzID0gRmFrZURyaXZlcikge1xuICAgICAgY29uc3QgYXBwaXVtID0gbmV3IEFwcGl1bURyaXZlcihhcHBpdW1BcmdzKTtcbiAgICAgIGNvbnN0IGZha2VEcml2ZXIgPSBuZXcgRHJpdmVyQ2xhc3MoKTtcbiAgICAgIGNvbnN0IG1vY2tGYWtlRHJpdmVyID0gc2lub24ubW9jayhmYWtlRHJpdmVyKTtcbiAgICAgIG1vY2tGYWtlRHJpdmVyLl9mYWtlRHJpdmVyID0gZmFrZURyaXZlcjtcbiAgICAgIGNvbnN0IG1vY2tlZERyaXZlclJldHVybmVyQ2xhc3MgPSBmdW5jdGlvbiBEcml2ZXIgKCkge1xuICAgICAgICByZXR1cm4gZmFrZURyaXZlcjtcbiAgICAgIH07XG5cbiAgICAgIGFwcGl1bS5fZmluZE1hdGNoaW5nRHJpdmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRyaXZlcjogbW9ja2VkRHJpdmVyUmV0dXJuZXJDbGFzcyxcbiAgICAgICAgICB2ZXJzaW9uOiAnMS4yLjMnLFxuICAgICAgICAgIGRyaXZlck5hbWU6ICdmYWtlJyxcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gW2FwcGl1bSwgbW9ja0Zha2VEcml2ZXJdO1xuICAgIH1cbiAgICBkZXNjcmliZSgnY3JlYXRlU2Vzc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBhcHBpdW07XG4gICAgICBsZXQgbW9ja0Zha2VEcml2ZXI7XG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW2FwcGl1bSwgbW9ja0Zha2VEcml2ZXJdID0gZ2V0RHJpdmVyQW5kRmFrZURyaXZlcigpO1xuICAgICAgfSk7XG4gICAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NrRmFrZURyaXZlci5yZXN0b3JlKCk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5kZWxldGVTZXNzaW9uKFNFU1NJT05fSUQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KGBzaG91bGQgY2FsbCBpbm5lciBkcml2ZXIncyBjcmVhdGVTZXNzaW9uIHdpdGggZGVzaXJlZCBjYXBhYmlsaXRpZXNgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCkud2l0aEV4YWN0QXJncyhudWxsLCBudWxsLCBXM0NfQ0FQUywgW10pXG4gICAgICAgICAgLnJldHVybnMoW1NFU1NJT05fSUQsIHJlbW92ZUFwcGl1bVByZWZpeGVzKFczQ19QUkVGSVhFRF9DQVBTKV0pO1xuICAgICAgICBhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBXM0NfQ0FQUyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdChgc2hvdWxkIGNhbGwgaW5uZXIgZHJpdmVyJ3MgY3JlYXRlU2Vzc2lvbiB3aXRoIGRlc2lyZWQgYW5kIGRlZmF1bHQgY2FwYWJpbGl0aWVzYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgZGVmYXVsdENhcHMgPSB7J2FwcGl1bTpzb21lQ2FwJzogJ2hlbGxvJ307XG4gICAgICAgIGxldCBhbGxDYXBzID0gey4uLlczQ19DQVBTLCBhbHdheXNNYXRjaDogey4uLlczQ19DQVBTLmFsd2F5c01hdGNoLCAuLi5kZWZhdWx0Q2Fwc319O1xuICAgICAgICBhcHBpdW0uYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzID0gZGVmYXVsdENhcHM7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCkud2l0aEFyZ3MobnVsbCwgbnVsbCwgYWxsQ2FwcylcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoYWxsQ2Fwcy5hbHdheXNNYXRjaCldKTtcbiAgICAgICAgYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgVzNDX0NBUFMpO1xuICAgICAgICBtb2NrRmFrZURyaXZlci52ZXJpZnkoKTtcbiAgICAgIH0pO1xuICAgICAgaXQoYHNob3VsZCBjYWxsIGlubmVyIGRyaXZlcidzIGNyZWF0ZVNlc3Npb24gd2l0aCBkZXNpcmVkIGFuZCBkZWZhdWx0IGNhcGFiaWxpdGllcyB3aXRob3V0IG92ZXJyaWRpbmcgY2Fwc2AsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gYSBkZWZhdWx0IGNhcGFiaWxpdHkgd2l0aCB0aGUgc2FtZSBrZXkgYXMgYSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAgICAgICAgLy8gc2hvdWxkIGRvIG5vdGhpbmdcbiAgICAgICAgbGV0IGRlZmF1bHRDYXBzID0ge3BsYXRmb3JtTmFtZTogJ0Vyc2F0eid9O1xuICAgICAgICBhcHBpdW0uYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzID0gZGVmYXVsdENhcHM7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCkud2l0aEFyZ3MobnVsbCwgbnVsbCwgVzNDX0NBUFMpXG4gICAgICAgICAgLnJldHVybnMoW1NFU1NJT05fSUQsIHJlbW92ZUFwcGl1bVByZWZpeGVzKFczQ19QUkVGSVhFRF9DQVBTKV0pO1xuICAgICAgICBhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBXM0NfQ0FQUyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGtpbGwgYWxsIG90aGVyIHNlc3Npb25zIGlmIHNlc3Npb25PdmVycmlkZSBpcyBvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXBwaXVtLmFyZ3Muc2Vzc2lvbk92ZXJyaWRlID0gdHJ1ZTtcblxuICAgICAgICAvLyBtb2NrIHRocmVlIHNlc3Npb25zIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB0aGUgbmV3IG9uZSBpcyBjcmVhdGVkXG4gICAgICAgIGxldCBmYWtlRHJpdmVycyA9IFtcbiAgICAgICAgICBuZXcgRmFrZURyaXZlcigpLFxuICAgICAgICAgIG5ldyBGYWtlRHJpdmVyKCksXG4gICAgICAgICAgbmV3IEZha2VEcml2ZXIoKSxcbiAgICAgICAgXTtcbiAgICAgICAgbGV0IG1vY2tGYWtlRHJpdmVycyA9IF8ubWFwKGZha2VEcml2ZXJzLCAoZmQpID0+IHNpbm9uLm1vY2soZmQpKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXJzWzBdLmV4cGVjdHMoJ2RlbGV0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyc1sxXS5leHBlY3RzKCdkZWxldGVTZXNzaW9uJylcbiAgICAgICAgICAub25jZSgpXG4gICAgICAgICAgLnRocm93cygnQ2Fubm90IHNodXQgZG93biBBbmRyb2lkIGRyaXZlcjsgaXQgaGFzIGFscmVhZHkgc2h1dCBkb3duJyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyc1syXS5leHBlY3RzKCdkZWxldGVTZXNzaW9uJylcbiAgICAgICAgICAub25jZSgpO1xuICAgICAgICBhcHBpdW0uc2Vzc2lvbnNbJ2FiYy0xMjMteHl6J10gPSBmYWtlRHJpdmVyc1swXTtcbiAgICAgICAgYXBwaXVtLnNlc3Npb25zWyd4eXotMzIxLWFiYyddID0gZmFrZURyaXZlcnNbMV07XG4gICAgICAgIGFwcGl1bS5zZXNzaW9uc1snMTIzLWFiYy14eXonXSA9IGZha2VEcml2ZXJzWzJdO1xuXG4gICAgICAgIGxldCBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMyk7XG5cbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoRXhhY3RBcmdzKG51bGwsIG51bGwsIFczQ19DQVBTLCBbXSlcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoVzNDX1BSRUZJWEVEX0NBUFMpXSk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIFczQ19DQVBTKTtcblxuICAgICAgICBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG5cbiAgICAgICAgZm9yIChsZXQgbWZkIG9mIG1vY2tGYWtlRHJpdmVycykge1xuICAgICAgICAgIG1mZC52ZXJpZnkoKTtcbiAgICAgICAgfVxuICAgICAgICBtb2NrRmFrZURyaXZlci52ZXJpZnkoKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIFwiY3JlYXRlU2Vzc2lvblwiIHdpdGggVzNDIGNhcGFiaWxpdGllcyBhcmd1bWVudCwgaWYgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCkud2l0aEFyZ3MobnVsbCwgdW5kZWZpbmVkLCBXM0NfQ0FQUylcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgQkFTRV9DQVBTXSk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBXM0NfQ0FQUyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgXCJjcmVhdGVTZXNzaW9uXCIgd2l0aCBXM0MgY2FwYWJpbGl0aWVzIGFyZ3VtZW50IHdpdGggYWRkaXRpb25hbCBwcm92aWRlZCBwYXJhbWV0ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdzNjQ2FwcyA9IHtcbiAgICAgICAgICAuLi5XM0NfQ0FQUyxcbiAgICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgICAgLi4uVzNDX0NBUFMuYWx3YXlzTWF0Y2gsXG4gICAgICAgICAgICAnYXBwaXVtOnNvbWVPdGhlclBhcm0nOiAnc29tZU90aGVyUGFybScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoQXJncyhudWxsLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgICAgIC4uLnczY0NhcHMuYWx3YXlzTWF0Y2gsXG4gICAgICAgICAgICAgICdhcHBpdW06c29tZU90aGVyUGFybSc6ICdzb21lT3RoZXJQYXJtJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJldHVybnMoW1NFU1NJT05fSUQsIGluc2VydEFwcGl1bVByZWZpeGVzKEJBU0VfQ0FQUyldKTtcblxuICAgICAgICBhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbih1bmRlZmluZWQsIHVuZGVmaW5lZCwgdzNjQ2Fwcyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIG5vdCBjYWxsIFwiY3JlYXRlU2Vzc2lvblwiIHdpdGggSlNPTldQIGNhcGFiaWxpdGllcyBpZiBXM0MgaGFzIGluY29tcGxldGUgY2FwYWJpbGl0aWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3M2NDYXBzID0ge1xuICAgICAgICAgIC4uLlczQ19DQVBTLFxuICAgICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgICAnYXBwaXVtOnNvbWVPdGhlclBhcm0nOiAnc29tZU90aGVyUGFybScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBqc29ud3BDYXBzID0ge1xuICAgICAgICAgIC4uLkJBU0VfQ0FQUyxcbiAgICAgICAgICBhdXRvbWF0aW9uTmFtZTogJ0Zha2UnLFxuICAgICAgICAgIHNvbWVPdGhlclBhcmFtOiAnc29tZU90aGVyUGFyYW0nLFxuICAgICAgICB9O1xuXG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKS5uZXZlcigpO1xuICAgICAgICBhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihqc29ud3BDYXBzLCB1bmRlZmluZWQsIHczY0NhcHMpO1xuICAgICAgICBtb2NrRmFrZURyaXZlci52ZXJpZnkoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGFzc2lnbiBhcmdzIHRvIHByb3BlcnR5IGBjbGlBcmdzYCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2xhc3MgQXJnc0RyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7ZHJpdmVyOiB7ZmFrZToge3JhbmRvbUFyZzogMTIzNH19fTtcbiAgICAgICAgW2FwcGl1bSwgbW9ja0Zha2VEcml2ZXJdID0gZ2V0RHJpdmVyQW5kRmFrZURyaXZlcihhcmdzLCBBcmdzRHJpdmVyKTtcbiAgICAgICAgY29uc3Qge3ZhbHVlfSA9IGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBXM0NfQ0FQUyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9ja0Zha2VEcml2ZXIuX2Zha2VEcml2ZXIuY2xpQXJncy5zaG91bGQuZXFsKHtyYW5kb21Bcmc6IDEyMzR9KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBhd2FpdCBhcHBpdW0uZGVsZXRlU2Vzc2lvbih2YWx1ZVswXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdkZWxldGVTZXNzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGFwcGl1bTtcbiAgICAgIGxldCBtb2NrRmFrZURyaXZlcjtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBbYXBwaXVtLCBtb2NrRmFrZURyaXZlcl0gPSBnZXREcml2ZXJBbmRGYWtlRHJpdmVyKCk7XG4gICAgICB9KTtcbiAgICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCByZW1vdmUgdGhlIHNlc3Npb24gaWYgaXQgaXMgZm91bmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBbc2Vzc2lvbklkXSA9IChhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBXM0NfQ0FQUykpLnZhbHVlO1xuICAgICAgICBsZXQgc2Vzc2lvbnMgPSBhd2FpdCBhcHBpdW0uZ2V0U2Vzc2lvbnMoKTtcbiAgICAgICAgc2Vzc2lvbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgICBhd2FpdCBhcHBpdW0uZGVsZXRlU2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgICAgICBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgY2FsbCBpbm5lciBkcml2ZXJcXCdzIGRlbGV0ZVNlc3Npb24gbWV0aG9kJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBbc2Vzc2lvbklkXSA9IChhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBXM0NfQ0FQUykpLnZhbHVlO1xuICAgICAgICBtb2NrRmFrZURyaXZlci5leHBlY3RzKCdkZWxldGVTZXNzaW9uJylcbiAgICAgICAgICAub25jZSgpLndpdGhFeGFjdEFyZ3Moc2Vzc2lvbklkLCBbXSlcbiAgICAgICAgICAucmV0dXJucygpO1xuICAgICAgICBhd2FpdCBhcHBpdW0uZGVsZXRlU2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgICAgICBtb2NrRmFrZURyaXZlci52ZXJpZnkoKTtcblxuICAgICAgICAvLyBjbGVhbnVwLCBzaW5jZSB3ZSBmYWtlZCB0aGUgZGVsZXRlIHNlc3Npb24gY2FsbFxuICAgICAgICBhd2FpdCBtb2NrRmFrZURyaXZlci5vYmplY3QuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2dldFNlc3Npb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGFwcGl1bSwgbW9ja0Zha2VEcml2ZXI7XG4gICAgICBsZXQgc2Vzc2lvbnM7XG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBbYXBwaXVtLCBtb2NrRmFrZURyaXZlcl0gPSBnZXREcml2ZXJBbmRGYWtlRHJpdmVyKCk7XG4gICAgICB9KTtcbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAobGV0IHNlc3Npb24gb2Ygc2Vzc2lvbnMpIHtcbiAgICAgICAgICBhd2FpdCBhcHBpdW0uZGVsZXRlU2Vzc2lvbihzZXNzaW9uLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBtb2NrRmFrZURyaXZlci5yZXN0b3JlKCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGFycmF5IG9mIHNlc3Npb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuYmUuYW4oJ2FycmF5Jyk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5iZS5lbXB0eTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gc2Vzc2lvbnMgY3JlYXRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNhcHMxID0ge2Fsd2F5c01hdGNoOiB7Li4uVzNDX1BSRUZJWEVEX0NBUFMsICdhcHBpdW06Y2FwJzogJ3ZhbHVlJ319O1xuICAgICAgICBsZXQgY2FwczIgPSB7YWx3YXlzTWF0Y2g6IHsuLi5XM0NfUFJFRklYRURfQ0FQUywgJ2FwcGl1bTpjYXAnOiAnb3RoZXIgdmFsdWUnfX07XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKS5vbmNlKClcbiAgICAgICAgICAucmV0dXJucyhbJ2Zha2Utc2Vzc2lvbi1pZC0xJywgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoY2FwczEuYWx3YXlzTWF0Y2gpXSk7XG4gICAgICAgIGxldCBbc2Vzc2lvbjFJZCwgc2Vzc2lvbjFDYXBzXSA9IChhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBjYXBzMSkpLnZhbHVlO1xuICAgICAgICBtb2NrRmFrZURyaXZlci5leHBlY3RzKCdjcmVhdGVTZXNzaW9uJykub25jZSgpXG4gICAgICAgICAgLnJldHVybnMoWydmYWtlLXNlc3Npb24taWQtMicsIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMyLmFsd2F5c01hdGNoKV0pO1xuICAgICAgICBsZXQgW3Nlc3Npb24ySWQsIHNlc3Npb24yQ2Fwc10gPSAoYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgY2FwczIpKS52YWx1ZTtcblxuICAgICAgICBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuYmUuYW4oJ2FycmF5Jyk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgICAgc2Vzc2lvbnNbMF0uaWQuc2hvdWxkLmVxdWFsKHNlc3Npb24xSWQpO1xuICAgICAgICByZW1vdmVBcHBpdW1QcmVmaXhlcyhjYXBzMS5hbHdheXNNYXRjaCkuc2hvdWxkLmVxbChzZXNzaW9uMUNhcHMpO1xuICAgICAgICBzZXNzaW9uc1sxXS5pZC5zaG91bGQuZXF1YWwoc2Vzc2lvbjJJZCk7XG4gICAgICAgIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMyLmFsd2F5c01hdGNoKS5zaG91bGQuZXFsKHNlc3Npb24yQ2Fwcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnZ2V0U3RhdHVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGFwcGl1bTtcbiAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFwcGl1bSA9IG5ldyBBcHBpdW1Ecml2ZXIoe30pO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0YXR1cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHN0YXR1cyA9IGF3YWl0IGFwcGl1bS5nZXRTdGF0dXMoKTtcbiAgICAgICAgc3RhdHVzLmJ1aWxkLnNob3VsZC5leGlzdDtcbiAgICAgICAgc3RhdHVzLmJ1aWxkLnZlcnNpb24uc2hvdWxkLmV4aXN0O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ3Nlc3Npb25FeGlzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2F0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgYXBwaXVtO1xuICAgICAgbGV0IG1vY2tGYWtlRHJpdmVyO1xuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIFthcHBpdW0sIG1vY2tGYWtlRHJpdmVyXSA9IGdldERyaXZlckFuZEZha2VEcml2ZXIoKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgbW9ja0Zha2VEcml2ZXIub2JqZWN0LmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIucmVzdG9yZSgpO1xuICAgICAgICBhcHBpdW0uYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzID0ge307XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZW1vdmUgc2Vzc2lvbiBpZiBpbm5lciBkcml2ZXIgdW5leHBlY3RlZGx5IGV4aXRzIHdpdGggYW4gZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBbc2Vzc2lvbklkLF0gPSAoYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZShXM0NfQ0FQUykpKS52YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb21tYS1zcGFjaW5nXG4gICAgICAgIF8ua2V5cyhhcHBpdW0uc2Vzc2lvbnMpLnNob3VsZC5jb250YWluKHNlc3Npb25JZCk7XG4gICAgICAgIGFwcGl1bS5zZXNzaW9uc1tzZXNzaW9uSWRdLmV2ZW50RW1pdHRlci5lbWl0KCdvblVuZXhwZWN0ZWRTaHV0ZG93bicsIG5ldyBFcnJvcignT29wcycpKTtcbiAgICAgICAgLy8gbGV0IGV2ZW50IGxvb3Agc3BpbiBzbyByZWplY3Rpb24gaXMgaGFuZGxlZFxuICAgICAgICBhd2FpdCBzbGVlcCgxKTtcbiAgICAgICAgXy5rZXlzKGFwcGl1bS5zZXNzaW9ucykuc2hvdWxkLm5vdC5jb250YWluKHNlc3Npb25JZCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgcmVtb3ZlIHNlc3Npb24gaWYgaW5uZXIgZHJpdmVyIHVuZXhwZWN0ZWRseSBleGl0cyB3aXRoIG5vIGVycm9yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgW3Nlc3Npb25JZCxdID0gKGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmUoVzNDX0NBUFMpKSkudmFsdWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29tbWEtc3BhY2luZ1xuICAgICAgICBfLmtleXMoYXBwaXVtLnNlc3Npb25zKS5zaG91bGQuY29udGFpbihzZXNzaW9uSWQpO1xuICAgICAgICBhcHBpdW0uc2Vzc2lvbnNbc2Vzc2lvbklkXS5ldmVudEVtaXR0ZXIuZW1pdCgnb25VbmV4cGVjdGVkU2h1dGRvd24nKTtcbiAgICAgICAgLy8gbGV0IGV2ZW50IGxvb3Agc3BpbiBzbyByZWplY3Rpb24gaXMgaGFuZGxlZFxuICAgICAgICBhd2FpdCBzbGVlcCgxKTtcbiAgICAgICAgXy5rZXlzKGFwcGl1bS5zZXNzaW9ucykuc2hvdWxkLm5vdC5jb250YWluKHNlc3Npb25JZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnY3JlYXRlUGx1Z2luSW5zdGFuY2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2xhc3MgTm9BcmdzUGx1Z2luIHt9XG4gICAgICBOb0FyZ3NQbHVnaW4ucGx1Z2luTmFtZSA9ICdub2FyZ3MnO1xuXG4gICAgICBjbGFzcyBBcmdzUGx1Z2luIHt9XG4gICAgICBBcmdzUGx1Z2luLnBsdWdpbk5hbWUgPSAnYXJncyc7XG5cbiAgICAgIGNsYXNzIEFycmF5QXJnUGx1Z2luIHt9XG4gICAgICBBcnJheUFyZ1BsdWdpbi5wbHVnaW5OYW1lID0gJ2FycmF5YXJnJztcblxuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlc2V0U2NoZW1hKCk7XG4gICAgICAgIC8vIHRvIGVzdGFibGlzaCBkZWZhdWx0cywgd2UgbmVlZCB0byByZWdpc3RlciBhIHNjaGVtYSBmb3IgdGhlIHBsdWdpbi5cbiAgICAgICAgLy8gbm90ZSB0aGF0IHRoZSBgbm9hcmdzYCBwbHVnaW4gZG9lcyBub3QgbmVlZCBhIHNjaGVtYSwgYmVjYXVzZSBpdFxuICAgICAgICAvLyBhY2NlcHRzIG5vIGFyZ3VtZW50cy5cbiAgICAgICAgcmVnaXN0ZXJTY2hlbWEoJ3BsdWdpbicsIEFyZ3NQbHVnaW4ucGx1Z2luTmFtZSwge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHJhbmRvbUFyZzoge1xuICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogMjAwMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJlZ2lzdGVyU2NoZW1hKCdwbHVnaW4nLCBBcnJheUFyZ1BsdWdpbi5wbHVnaW5OYW1lLCB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgYXJyOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZmluYWxpemVTY2hlbWEoKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBhcmdzIGFyZSBub3QgcHJlc2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBub3Qgc2V0IENMSSBhcmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFwcGl1bSA9IG5ldyBBcHBpdW1Ecml2ZXIoe30pO1xuICAgICAgICAgIGFwcGl1bS5wbHVnaW5DbGFzc2VzID0gW05vQXJnc1BsdWdpbiwgQXJnc1BsdWdpbl07XG4gICAgICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgYXBwaXVtLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpKSB7XG4gICAgICAgICAgICBzaG91bGQubm90LmV4aXN0KHBsdWdpbi5jbGlBcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIGFyZ3MgYXJlIGVxdWFsIHRvIHRoZSBzY2hlbWEgZGVmYXVsdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgbm90IHNldCBDTEkgYXJncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhcHBpdW0gPSBuZXcgQXBwaXVtRHJpdmVyKHtwbHVnaW46IHtbQXJnc1BsdWdpbi5wbHVnaW5OYW1lXToge3JhbmRvbUFyZzogMjAwMH19fSk7XG4gICAgICAgICAgYXBwaXVtLnBsdWdpbkNsYXNzZXMgPSBbTm9BcmdzUGx1Z2luLCBBcmdzUGx1Z2luXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBhcHBpdW0uY3JlYXRlUGx1Z2luSW5zdGFuY2VzKCkpIHtcbiAgICAgICAgICAgIHNob3VsZC5ub3QuZXhpc3QocGx1Z2luLmNsaUFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gdGhlIGRlZmF1bHQgaXMgYW4gXCJvYmplY3RcIicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBzZXQgQ0xJIGFyZ3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBhcHBpdW0gPSBuZXcgQXBwaXVtRHJpdmVyKHtwbHVnaW46IHtbQXJyYXlBcmdQbHVnaW4ucGx1Z2luTmFtZV06IHthcnI6IFtdfX19KTtcbiAgICAgICAgICAgIGFwcGl1bS5wbHVnaW5DbGFzc2VzID0gW05vQXJnc1BsdWdpbiwgQXJnc1BsdWdpbiwgQXJyYXlBcmdQbHVnaW5dO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgYXBwaXVtLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpKSB7XG4gICAgICAgICAgICAgIHNob3VsZC5ub3QuZXhpc3QocGx1Z2luLmNsaUFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBhcmdzIGFyZSBub3QgZXF1YWwgdG8gdGhlIHNjaGVtYSBkZWZhdWx0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBhZGQgY2xpQXJncyB0byB0aGUgcGx1Z2luJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFwcGl1bSA9IG5ldyBBcHBpdW1Ecml2ZXIoe3BsdWdpbjoge2FyZ3M6IHtyYW5kb21Bcmc6IDEyMzR9fX0pO1xuICAgICAgICAgIGFwcGl1bS5wbHVnaW5DbGFzc2VzID0gW0FyZ3NQbHVnaW5dO1xuICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IF8uZmlyc3QoYXBwaXVtLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpKTtcbiAgICAgICAgICBwbHVnaW4uY2xpQXJncy5zaG91bGQuZXFsKHtyYW5kb21Bcmc6IDEyMzR9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoidGVzdC9kcml2ZXItc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|