@appium/base-driver 8.3.1 → 8.4.2
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/build/lib/basedriver/capabilities.d.ts +80 -0
- package/build/lib/basedriver/capabilities.d.ts.map +1 -0
- package/build/lib/basedriver/capabilities.js +11 -10
- package/build/lib/basedriver/commands/event.d.ts +9 -0
- package/build/lib/basedriver/commands/event.d.ts.map +1 -0
- package/build/lib/basedriver/commands/event.js +21 -21
- package/build/lib/basedriver/commands/find.d.ts +11 -0
- package/build/lib/basedriver/commands/find.d.ts.map +1 -0
- package/build/lib/basedriver/commands/find.js +44 -37
- package/build/lib/basedriver/commands/index.d.ts +8 -0
- package/build/lib/basedriver/commands/index.d.ts.map +1 -0
- package/build/lib/basedriver/commands/index.js +17 -14
- package/build/lib/basedriver/commands/log.d.ts +12 -0
- package/build/lib/basedriver/commands/log.d.ts.map +1 -0
- package/build/lib/basedriver/commands/log.js +24 -26
- package/build/lib/basedriver/commands/session.d.ts +11 -0
- package/build/lib/basedriver/commands/session.d.ts.map +1 -0
- package/build/lib/basedriver/commands/session.js +21 -147
- package/build/lib/basedriver/commands/settings.d.ts +10 -0
- package/build/lib/basedriver/commands/settings.d.ts.map +1 -0
- package/build/lib/basedriver/commands/settings.js +19 -17
- package/build/lib/basedriver/commands/timeout.d.ts +8 -0
- package/build/lib/basedriver/commands/timeout.d.ts.map +1 -0
- package/build/lib/basedriver/commands/timeout.js +118 -137
- package/build/lib/basedriver/core.d.ts +235 -0
- package/build/lib/basedriver/core.d.ts.map +1 -0
- package/build/lib/basedriver/core.js +283 -0
- package/build/lib/basedriver/desired-caps.d.ts +5 -0
- package/build/lib/basedriver/desired-caps.d.ts.map +1 -0
- package/build/lib/basedriver/desired-caps.js +1 -1
- package/build/lib/basedriver/device-settings.d.ts +32 -0
- package/build/lib/basedriver/device-settings.d.ts.map +1 -0
- package/build/lib/basedriver/device-settings.js +19 -11
- package/build/lib/basedriver/driver.d.ts +83 -0
- package/build/lib/basedriver/driver.d.ts.map +1 -0
- package/build/lib/basedriver/driver.js +100 -266
- package/build/lib/basedriver/helpers.d.ts +132 -0
- package/build/lib/basedriver/helpers.d.ts.map +1 -0
- package/build/lib/basedriver/helpers.js +17 -1
- package/build/lib/basedriver/logger.d.ts +3 -0
- package/build/lib/basedriver/logger.d.ts.map +1 -0
- package/build/lib/constants.d.ts +9 -0
- package/build/lib/constants.d.ts.map +1 -0
- package/build/lib/express/crash.d.ts +3 -0
- package/build/lib/express/crash.d.ts.map +1 -0
- package/build/lib/express/express-logging.d.ts +3 -0
- package/build/lib/express/express-logging.d.ts.map +1 -0
- package/build/lib/express/idempotency.d.ts +2 -0
- package/build/lib/express/idempotency.d.ts.map +1 -0
- package/build/lib/express/logger.d.ts +3 -0
- package/build/lib/express/logger.d.ts.map +1 -0
- package/build/lib/express/middleware.d.ts +9 -0
- package/build/lib/express/middleware.d.ts.map +1 -0
- package/build/lib/express/server.d.ts +10 -0
- package/build/lib/express/server.d.ts.map +1 -0
- package/build/lib/express/static.d.ts +6 -0
- package/build/lib/express/static.d.ts.map +1 -0
- package/build/lib/express/websocket.d.ts +64 -0
- package/build/lib/express/websocket.d.ts.map +1 -0
- package/build/lib/express/websocket.js +39 -38
- package/build/lib/helpers/capabilities.d.ts +13 -0
- package/build/lib/helpers/capabilities.d.ts.map +1 -0
- package/build/lib/helpers/capabilities.js +41 -1
- package/build/lib/index.d.ts +183 -0
- package/build/lib/index.d.ts.map +1 -0
- package/build/lib/index.js +40 -20
- package/build/lib/jsonwp-proxy/protocol-converter.d.ts +48 -0
- package/build/lib/jsonwp-proxy/protocol-converter.d.ts.map +1 -0
- package/build/lib/jsonwp-proxy/proxy.d.ts +41 -0
- package/build/lib/jsonwp-proxy/proxy.d.ts.map +1 -0
- package/build/lib/jsonwp-proxy/proxy.js +24 -6
- package/build/lib/jsonwp-status/status.d.ts +159 -0
- package/build/lib/jsonwp-status/status.d.ts.map +1 -0
- package/build/lib/protocol/errors.d.ts +310 -0
- package/build/lib/protocol/errors.d.ts.map +1 -0
- package/build/lib/protocol/errors.js +81 -2
- package/build/lib/protocol/helpers.d.ts +22 -0
- package/build/lib/protocol/helpers.d.ts.map +1 -0
- package/build/lib/protocol/index.d.ts +16 -0
- package/build/lib/protocol/index.d.ts.map +1 -0
- package/build/lib/protocol/index.js +7 -7
- package/build/lib/protocol/protocol.d.ts +11 -0
- package/build/lib/protocol/protocol.d.ts.map +1 -0
- package/build/lib/protocol/protocol.js +2 -6
- package/build/lib/protocol/routes.d.ts +6 -0
- package/build/lib/protocol/routes.d.ts.map +1 -0
- package/build/lib/protocol/routes.js +17 -1
- package/build/lib/protocol/validators.d.ts +8 -0
- package/build/lib/protocol/validators.d.ts.map +1 -0
- package/build/test/basedriver/driver-tests.js +30 -3
- package/build/test/e2e/basedriver/websockets.e2e.spec.js +12 -7
- package/build/test/unit/basedriver/commands/event.spec.js +7 -7
- package/build/test/unit/basedriver/commands/log.spec.js +31 -24
- package/build/test/unit/basedriver/timeout.spec.js +1 -1
- package/build/test/unit/protocol/routes.spec.js +2 -2
- package/build/tsconfig.tsbuildinfo +1 -0
- package/lib/basedriver/capabilities.js +49 -10
- package/lib/basedriver/commands/event.js +49 -31
- package/lib/basedriver/commands/find.js +108 -43
- package/lib/basedriver/commands/index.js +25 -19
- package/lib/basedriver/commands/log.js +60 -33
- package/lib/basedriver/commands/session.js +39 -141
- package/lib/basedriver/commands/settings.js +33 -13
- package/lib/basedriver/commands/timeout.js +153 -153
- package/lib/basedriver/core.js +497 -0
- package/lib/basedriver/desired-caps.js +1 -1
- package/lib/basedriver/device-settings.js +47 -12
- package/lib/basedriver/driver.js +273 -395
- package/lib/basedriver/helpers.js +18 -2
- package/lib/express/websocket.js +35 -32
- package/lib/helpers/capabilities.js +60 -1
- package/lib/index.js +16 -12
- package/lib/jsonwp-proxy/proxy.js +26 -6
- package/lib/protocol/errors.js +42 -42
- package/lib/protocol/index.js +4 -4
- package/lib/protocol/protocol.js +1 -3
- package/lib/protocol/routes.js +9 -0
- package/package.json +14 -11
- package/test/basedriver/driver-tests.js +31 -2
- package/index.d.ts +0 -386
|
@@ -19,6 +19,33 @@ var _sinon = require("sinon");
|
|
|
19
19
|
|
|
20
20
|
function baseDriverUnitTests(DriverClass, defaultCaps = {}) {
|
|
21
21
|
const className = DriverClass.name || '(unknown driver)';
|
|
22
|
+
describe('static property', function () {
|
|
23
|
+
describe('baseVersion', function () {
|
|
24
|
+
it('should exist', function () {
|
|
25
|
+
DriverClass.baseVersion.should.exist;
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('Log prefix', function () {
|
|
30
|
+
it('should setup log prefix', async function () {
|
|
31
|
+
const d = new DriverClass();
|
|
32
|
+
const previousPrefix = d.log.prefix;
|
|
33
|
+
await d.createSession({
|
|
34
|
+
alwaysMatch: Object.assign({}, defaultCaps, {
|
|
35
|
+
platformName: 'Fake',
|
|
36
|
+
'appium:deviceName': 'Commodore 64'
|
|
37
|
+
}),
|
|
38
|
+
firstMatch: [{}]
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
previousPrefix.should.not.eql(d.log.prefix);
|
|
43
|
+
} finally {
|
|
44
|
+
await d.deleteSession();
|
|
45
|
+
previousPrefix.should.eql(d.log.prefix);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
});
|
|
22
49
|
describe(`BaseDriver (as ${className})`, function () {
|
|
23
50
|
let d, w3cCaps;
|
|
24
51
|
let sandbox;
|
|
@@ -174,8 +201,8 @@ function baseDriverUnitTests(DriverClass, defaultCaps = {}) {
|
|
|
174
201
|
throw new Error('multipass');
|
|
175
202
|
}.bind(d);
|
|
176
203
|
|
|
177
|
-
afterEach(function () {
|
|
178
|
-
d.clearNewCommandTimeout();
|
|
204
|
+
afterEach(async function () {
|
|
205
|
+
await d.clearNewCommandTimeout();
|
|
179
206
|
});
|
|
180
207
|
it('should queue commands and.executeCommand/respond in the order received', async function () {
|
|
181
208
|
let numCmds = 10;
|
|
@@ -542,4 +569,4 @@ function baseDriverUnitTests(DriverClass, defaultCaps = {}) {
|
|
|
542
569
|
|
|
543
570
|
var _default = baseDriverUnitTests;
|
|
544
571
|
exports.default = _default;
|
|
545
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvYmFzZWRyaXZlci9kcml2ZXItdGVzdHMuanMiXSwibmFtZXMiOlsiYmFzZURyaXZlclVuaXRUZXN0cyIsIkRyaXZlckNsYXNzIiwiZGVmYXVsdENhcHMiLCJjbGFzc05hbWUiLCJuYW1lIiwiZGVzY3JpYmUiLCJkIiwidzNjQ2FwcyIsInNhbmRib3giLCJiZWZvcmVFYWNoIiwiYWx3YXlzTWF0Y2giLCJPYmplY3QiLCJhc3NpZ24iLCJwbGF0Zm9ybU5hbWUiLCJmaXJzdE1hdGNoIiwiYWZ0ZXJFYWNoIiwiZGVsZXRlU2Vzc2lvbiIsInJlc3RvcmUiLCJpdCIsInNob3VsZCIsImV4aXN0IiwiYmFzZVZlcnNpb24iLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJlcWwiLCJzZXNzSWQiLCJjcmVhdGVTZXNzaW9uIiwiYmUiLCJhIiwibGVuZ3RoIiwiYWJvdmUiLCJfIiwiY2xvbmVEZWVwIiwiZXZlbnR1YWxseSIsInJlamVjdGVkV2l0aCIsInNlc3Npb25JZDEiLCJlcXVhbCIsInNlc3Npb25JZCIsInNlc3Npb25JZDIiLCJub3QiLCJjYXBzIiwiZ2V0U2Vzc2lvbiIsInNlc3Npb25zIiwiZ2V0U2Vzc2lvbnMiLCJjbG9uZSIsImluY2x1ZGUiLCJpZCIsImNhcGFiaWxpdGllcyIsImRldmljZU5hbWUiLCJCIiwiZGVsYXkiLCJiaW5kIiwiY21kUHJvbWlzZSIsImV4ZWN1dGVDb21tYW5kIiwicCIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwiRXJyb3IiLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsInN0YXJ0VW5leHBlY3RlZFNodXRkb3duIiwib2xkRGVsZXRlU2Vzc2lvbiIsInByb3RvY29sIiwiZHJpdmVyRm9yU2Vzc2lvbiIsIndhaXRNcyIsIkRhdGUiLCJub3ciLCJjbGVhck5ld0NvbW1hbmRUaW1lb3V0IiwibnVtQ21kcyIsImNtZHMiLCJpIiwicHVzaCIsInJlc3VsdHMiLCJhbGwiLCJzZXR0bGUiLCJ2YWx1ZSIsInJlYXNvbiIsIm1lc3NhZ2UiLCJjb250YWluIiwiYmVmb3JlIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsInRpbWVvdXRzIiwiaW1wbGljaXRXYWl0TXMiLCJ1bmRlZmluZWQiLCJnZXRUaW1lb3V0cyIsImhhdmUiLCJwcm9wZXJ0eSIsImRlZXAiLCJpbXBsaWNpdCIsImNvbW1hbmQiLCJuZXdDYXBzIiwicHJveHlBY3RpdmUiLCJhbiIsImluc3RhbmNlb2YiLCJGdW5jdGlvbiIsImZhbHNlIiwidGhyb3ciLCJnZXRQcm94eUF2b2lkTGlzdCIsIkFycmF5IiwiY2FuUHJveHkiLCJhdm9pZFN0dWIiLCJzdHViIiwicmV0dXJucyIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJ0cnVlIiwiYmVmb3JlU3RhcnRUaW1lIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiZXZlbnRIaXN0b3J5IiwiY29tbWFuZHMiLCJuZXdTZXNzaW9uUmVxdWVzdGVkIiwibmV3U2Vzc2lvblN0YXJ0ZWQiLCJjbWQiLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwibG9nRXZlbnQiLCJmb28iLCJiYXIiLCJyZXMiLCJldmVudHMiLCJldmVudFRpbWluZ3MiLCJyZXNldCIsIm9iaiIsImQxIiwiRGV2aWNlU2V0dGluZ3MiLCJkMiIsIl9zZXR0aW5ncyIsImRlbnlJbnNlY3VyZSIsImFsbG93SW5zZWN1cmUiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiaXNGZWF0dXJlRW5hYmxlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQSxTQUFTQSxtQkFBVCxDQUE4QkMsV0FBOUIsRUFBMkNDLFdBQVcsR0FBRyxFQUF6RCxFQUE2RDtBQUUzRCxRQUFNQyxTQUFTLEdBQUdGLFdBQVcsQ0FBQ0csSUFBWixJQUFvQixrQkFBdEM7QUFHQUMsRUFBQUEsUUFBUSxDQUFFLGtCQUFpQkYsU0FBVSxHQUE3QixFQUFpQyxZQUFZO0FBQ25ELFFBQUlHLENBQUosRUFBT0MsT0FBUDtBQUVBLFFBQUlDLE9BQUo7QUFFQUMsSUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDckJELE1BQUFBLE9BQU8sR0FBRywyQkFBVjtBQUNBRixNQUFBQSxDQUFDLEdBQUcsSUFBSUwsV0FBSixFQUFKO0FBQ0FNLE1BQUFBLE9BQU8sR0FBRztBQUNSRyxRQUFBQSxXQUFXLEVBQUVDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JWLFdBQWxCLEVBQStCO0FBQzFDVyxVQUFBQSxZQUFZLEVBQUUsTUFENEI7QUFFMUMsK0JBQXFCO0FBRnFCLFNBQS9CLENBREw7QUFLUkMsUUFBQUEsVUFBVSxFQUFFLENBQUMsRUFBRDtBQUxKLE9BQVY7QUFPRCxLQVZTLENBQVY7QUFXQUMsSUFBQUEsU0FBUyxDQUFDLGtCQUFrQjtBQUMxQixZQUFNVCxDQUFDLENBQUNVLGFBQUYsRUFBTjtBQUNBUixNQUFBQSxPQUFPLENBQUNTLE9BQVI7QUFDRCxLQUhRLENBQVQ7QUFLQUMsSUFBQUEsRUFBRSxDQUFDLDhDQUFELEVBQWlELFlBQVk7QUFDN0RDLE1BQUFBLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhbkIsV0FBVyxDQUFDb0IsV0FBekI7QUFDRCxLQUZDLENBQUY7QUFJQUgsSUFBQUEsRUFBRSxDQUFDLHNDQUFELEVBQXlDLGtCQUFrQjtBQUMzRCxVQUFJSSxNQUFNLEdBQUcsTUFBTWhCLENBQUMsQ0FBQ2lCLFNBQUYsRUFBbkI7QUFDQUQsTUFBQUEsTUFBTSxDQUFDSCxNQUFQLENBQWNLLEdBQWQsQ0FBa0IsRUFBbEI7QUFDRCxLQUhDLENBQUY7QUFLQU4sSUFBQUEsRUFBRSxDQUFDLDhDQUFELEVBQWlELGtCQUFrQjtBQUNuRSxVQUFJLENBQUNPLE1BQUQsSUFBVyxNQUFNbkIsQ0FBQyxDQUFDb0IsYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0Qm5CLE9BQTVCLENBQXJCO0FBQ0FZLE1BQUFBLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhSyxNQUFiO0FBQ0FBLE1BQUFBLE1BQU0sQ0FBQ04sTUFBUCxDQUFjUSxFQUFkLENBQWlCQyxDQUFqQixDQUFtQixRQUFuQjtBQUNBSCxNQUFBQSxNQUFNLENBQUNJLE1BQVAsQ0FBY1YsTUFBZCxDQUFxQlEsRUFBckIsQ0FBd0JHLEtBQXhCLENBQThCLENBQTlCO0FBQ0QsS0FMQyxDQUFGO0FBT0FaLElBQUFBLEVBQUUsQ0FBQyxvRUFBRCxFQUF1RSxrQkFBa0I7QUFDekYsWUFBTVosQ0FBQyxDQUFDb0IsYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0QkssZ0JBQUVDLFNBQUYsQ0FBWXpCLE9BQVosQ0FBNUIsQ0FBTjtBQUNBLFlBQU1ELENBQUMsQ0FBQ29CLGFBQUYsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsRUFBNEJLLGdCQUFFQyxTQUFGLENBQVl6QixPQUFaLENBQTVCLEVBQWtEWSxNQUFsRCxDQUF5RGMsVUFBekQsQ0FBb0VOLEVBQXBFLENBQXVFTyxZQUF2RSxDQUFvRixTQUFwRixDQUFOO0FBQ0QsS0FIQyxDQUFGO0FBS0FoQixJQUFBQSxFQUFFLENBQUMsb0NBQUQsRUFBdUMsa0JBQWtCO0FBQ3pELFVBQUlpQixVQUFVLEdBQUcsTUFBTTdCLENBQUMsQ0FBQ29CLGFBQUYsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsRUFBNEJLLGdCQUFFQyxTQUFGLENBQVl6QixPQUFaLENBQTVCLENBQXZCO0FBQ0EsWUFBTUQsQ0FBQyxDQUFDVSxhQUFGLEVBQU47QUFDQUcsTUFBQUEsTUFBTSxDQUFDaUIsS0FBUCxDQUFhOUIsQ0FBQyxDQUFDK0IsU0FBZixFQUEwQixJQUExQjtBQUNBLFVBQUlDLFVBQVUsR0FBRyxNQUFNaEMsQ0FBQyxDQUFDb0IsYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0QkssZ0JBQUVDLFNBQUYsQ0FBWXpCLE9BQVosQ0FBNUIsQ0FBdkI7QUFDQTRCLE1BQUFBLFVBQVUsQ0FBQ2hCLE1BQVgsQ0FBa0JvQixHQUFsQixDQUFzQmYsR0FBdEIsQ0FBMEJjLFVBQTFCO0FBQ0QsS0FOQyxDQUFGO0FBUUFwQixJQUFBQSxFQUFFLENBQUMsZ0NBQUQsRUFBbUMsa0JBQWtCO0FBQ3JELFVBQUksR0FBR3NCLElBQUgsSUFBVyxNQUFNbEMsQ0FBQyxDQUFDb0IsYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0Qm5CLE9BQTVCLENBQXJCO0FBQ0FpQyxNQUFBQSxJQUFJLENBQUNyQixNQUFMLENBQVlpQixLQUFaLENBQWtCLE1BQU05QixDQUFDLENBQUNtQyxVQUFGLEVBQXhCO0FBQ0QsS0FIQyxDQUFGO0FBS0F2QixJQUFBQSxFQUFFLENBQUMsNkNBQUQsRUFBZ0Qsa0JBQWtCO0FBQ2xFLFVBQUl3QixRQUFRLEdBQUcsTUFBTXBDLENBQUMsQ0FBQ3FDLFdBQUYsRUFBckI7QUFDQUQsTUFBQUEsUUFBUSxDQUFDYixNQUFULENBQWdCVixNQUFoQixDQUF1QmlCLEtBQXZCLENBQTZCLENBQTdCO0FBQ0QsS0FIQyxDQUFGO0FBS0FsQixJQUFBQSxFQUFFLENBQUMsd0JBQUQsRUFBMkIsa0JBQWtCO0FBQzdDLFlBQU1zQixJQUFJLEdBQUdULGdCQUFFYSxLQUFGLENBQVFyQyxPQUFSLENBQWI7O0FBQ0FpQyxNQUFBQSxJQUFJLENBQUNaLENBQUwsR0FBUyxLQUFUO0FBQ0EsWUFBTXRCLENBQUMsQ0FBQ29CLGFBQUYsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsRUFBNEJjLElBQTVCLENBQU47QUFDQSxVQUFJRSxRQUFRLEdBQUcsTUFBTXBDLENBQUMsQ0FBQ3FDLFdBQUYsRUFBckI7QUFFQUQsTUFBQUEsUUFBUSxDQUFDYixNQUFULENBQWdCVixNQUFoQixDQUF1QmlCLEtBQXZCLENBQTZCLENBQTdCO0FBQ0FNLE1BQUFBLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWXZCLE1BQVosQ0FBbUIwQixPQUFuQixDQUEyQjtBQUN6QkMsUUFBQUEsRUFBRSxFQUFFeEMsQ0FBQyxDQUFDK0I7QUFEbUIsT0FBM0I7QUFHQUssTUFBQUEsUUFBUSxDQUFDLENBQUQsQ0FBUixDQUFZSyxZQUFaLENBQXlCNUIsTUFBekIsQ0FBZ0MwQixPQUFoQyxDQUF3QztBQUN0Q0csUUFBQUEsVUFBVSxFQUFFLGNBRDBCO0FBRXRDbkMsUUFBQUEsWUFBWSxFQUFFO0FBRndCLE9BQXhDO0FBSUQsS0FkQyxDQUFGO0FBZ0JBSyxJQUFBQSxFQUFFLENBQUMsa0RBQUQsRUFBcUQsa0JBQWtCO0FBRXZFWixNQUFBQSxDQUFDLENBQUNpQixTQUFGLEdBQWMsa0JBQWtCO0FBQzlCLGNBQU0wQixrQkFBRUMsS0FBRixDQUFRLElBQVIsQ0FBTjtBQUNBLGVBQU8sYUFBUDtBQUNELE9BSGEsQ0FHWkMsSUFIWSxDQUdQN0MsQ0FITyxDQUFkOztBQUlBLFVBQUk4QyxVQUFVLEdBQUc5QyxDQUFDLENBQUMrQyxjQUFGLENBQWlCLFdBQWpCLENBQWpCO0FBQ0EsWUFBTUosa0JBQUVDLEtBQUYsQ0FBUSxFQUFSLENBQU47QUFDQSxZQUFNSSxDQUFDLEdBQUcsSUFBSUwsaUJBQUosQ0FBTSxDQUFDTSxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDbkNDLFFBQUFBLFVBQVUsQ0FBQyxNQUFNRCxNQUFNLENBQUMsSUFBSUUsS0FBSixDQUFVLDZFQUFWLENBQUQsQ0FBYixFQUF5RyxJQUF6RyxDQUFWO0FBQ0FwRCxRQUFBQSxDQUFDLENBQUNxRCxvQkFBRixDQUF1QkosT0FBdkI7QUFDRCxPQUhTLENBQVY7QUFJQWpELE1BQUFBLENBQUMsQ0FBQ3NELHVCQUFGLENBQTBCLElBQUlGLEtBQUosQ0FBVSxZQUFWLENBQTFCO0FBQ0EsWUFBTU4sVUFBVSxDQUFDakMsTUFBWCxDQUFrQlEsRUFBbEIsQ0FBcUJPLFlBQXJCLENBQWtDLFlBQWxDLENBQU47QUFDQSxZQUFNb0IsQ0FBTjtBQUNELEtBZkMsQ0FBRjtBQWlCQXBDLElBQUFBLEVBQUUsQ0FBQyw0REFBRCxFQUErRCxrQkFBa0I7QUFFakZaLE1BQUFBLENBQUMsQ0FBQ3VELGdCQUFGLEdBQXFCdkQsQ0FBQyxDQUFDVSxhQUF2Qjs7QUFDQVYsTUFBQUEsQ0FBQyxDQUFDVSxhQUFGLEdBQWtCLGtCQUFrQjtBQUNsQyxjQUFNaUMsa0JBQUVDLEtBQUYsQ0FBUSxHQUFSLENBQU47QUFDQSxjQUFNLEtBQUtXLGdCQUFMLEVBQU47QUFDRCxPQUhpQixDQUdoQlYsSUFIZ0IsQ0FHWDdDLENBSFcsQ0FBbEI7O0FBSUEsWUFBTUEsQ0FBQyxDQUFDb0IsYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0Qm5CLE9BQTVCLENBQU47QUFDQSxZQUFNK0MsQ0FBQyxHQUFHLElBQUlMLGlCQUFKLENBQU0sQ0FBQ00sT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ25DQyxRQUFBQSxVQUFVLENBQUMsTUFBTUQsTUFBTSxDQUFDLElBQUlFLEtBQUosQ0FBVSw2RUFBVixDQUFELENBQWIsRUFBeUcsSUFBekcsQ0FBVjtBQUNBcEQsUUFBQUEsQ0FBQyxDQUFDcUQsb0JBQUYsQ0FBdUJKLE9BQXZCO0FBQ0QsT0FIUyxDQUFWO0FBSUFqRCxNQUFBQSxDQUFDLENBQUNzRCx1QkFBRixDQUEwQixJQUFJRixLQUFKLENBQVUsWUFBVixDQUExQjtBQUNBLFlBQU1KLENBQU47QUFDQSxZQUFNaEQsQ0FBQyxDQUFDK0MsY0FBRixDQUFpQixZQUFqQixFQUErQmxDLE1BQS9CLENBQXNDUSxFQUF0QyxDQUF5Q08sWUFBekMsQ0FBc0QsV0FBdEQsQ0FBTjtBQUNELEtBZkMsQ0FBRjtBQWlCQWhCLElBQUFBLEVBQUUsQ0FBQyxvREFBRCxFQUF1RCxrQkFBa0I7QUFFekVaLE1BQUFBLENBQUMsQ0FBQ3VELGdCQUFGLEdBQXFCdkQsQ0FBQyxDQUFDVSxhQUF2Qjs7QUFDQVYsTUFBQUEsQ0FBQyxDQUFDVSxhQUFGLEdBQWtCLGtCQUFrQjtBQUNsQyxjQUFNaUMsa0JBQUVDLEtBQUYsQ0FBUSxHQUFSLENBQU47QUFDQSxjQUFNLEtBQUtXLGdCQUFMLEVBQU47QUFDRCxPQUhpQixDQUdoQlYsSUFIZ0IsQ0FHWDdDLENBSFcsQ0FBbEI7O0FBS0EsWUFBTUEsQ0FBQyxDQUFDb0IsYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0QkssZ0JBQUVDLFNBQUYsQ0FBWXpCLE9BQVosQ0FBNUIsQ0FBTjtBQUNBLFlBQU0rQyxDQUFDLEdBQUcsSUFBSUwsaUJBQUosQ0FBTSxDQUFDTSxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDbkNDLFFBQUFBLFVBQVUsQ0FBQyxNQUFNRCxNQUFNLENBQUMsSUFBSUUsS0FBSixDQUFVLDZFQUFWLENBQUQsQ0FBYixFQUF5RyxJQUF6RyxDQUFWO0FBQ0FwRCxRQUFBQSxDQUFDLENBQUNxRCxvQkFBRixDQUF1QkosT0FBdkI7QUFDRCxPQUhTLENBQVY7QUFJQWpELE1BQUFBLENBQUMsQ0FBQ3NELHVCQUFGLENBQTBCLElBQUlGLEtBQUosQ0FBVSxZQUFWLENBQTFCO0FBQ0EsWUFBTUosQ0FBTjtBQUVBLFlBQU1oRCxDQUFDLENBQUMrQyxjQUFGLENBQWlCLFlBQWpCLEVBQStCbEMsTUFBL0IsQ0FBc0NRLEVBQXRDLENBQXlDTyxZQUF6QyxDQUFzRCxXQUF0RCxDQUFOO0FBQ0EsWUFBTWUsa0JBQUVDLEtBQUYsQ0FBUSxHQUFSLENBQU47QUFFQSxZQUFNNUMsQ0FBQyxDQUFDK0MsY0FBRixDQUFpQixlQUFqQixFQUFrQyxJQUFsQyxFQUF3QyxJQUF4QyxFQUE4Q3RCLGdCQUFFQyxTQUFGLENBQVl6QixPQUFaLENBQTlDLENBQU47QUFDQSxZQUFNRCxDQUFDLENBQUNVLGFBQUYsRUFBTjtBQUNELEtBckJDLENBQUY7QUF1QkFFLElBQUFBLEVBQUUsQ0FBQyxtREFBRCxFQUFzRCxrQkFBa0I7QUFFeEUsWUFBTVosQ0FBQyxDQUFDK0MsY0FBRixDQUFpQixlQUFqQixFQUFrQyxJQUFsQyxFQUF3QyxJQUF4QyxFQUE4QztBQUNsRDNDLFFBQUFBLFdBQVcsRUFBRUMsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQlYsV0FBbEIsRUFBK0I7QUFDMUNXLFVBQUFBLFlBQVksRUFBRSxNQUQ0QjtBQUUxQywrQkFBcUI7QUFGcUIsU0FBL0IsQ0FEcUM7QUFLbERDLFFBQUFBLFVBQVUsRUFBRSxDQUFDLEVBQUQ7QUFMc0MsT0FBOUMsQ0FBTjtBQVFBUixNQUFBQSxDQUFDLENBQUN3RCxRQUFGLENBQVczQyxNQUFYLENBQWtCaUIsS0FBbEIsQ0FBd0IsS0FBeEI7QUFDRCxLQVhDLENBQUY7QUFhQS9CLElBQUFBLFFBQVEsQ0FBQyxvQkFBRCxFQUF1QixZQUFZO0FBQ3pDYSxNQUFBQSxFQUFFLENBQUMsOENBQUQsRUFBaUQsa0JBQWtCO0FBQ25FLGNBQU1aLENBQUMsQ0FBQ29CLGFBQUYsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsRUFBNEI7QUFBQ2hCLFVBQUFBLFdBQVcsRUFBRXFCLGdCQUFFYSxLQUFGLENBQVExQyxXQUFSLENBQWQ7QUFBb0NZLFVBQUFBLFVBQVUsRUFBRSxDQUFDLEVBQUQ7QUFBaEQsU0FBNUIsQ0FBTjtBQUNBUixRQUFBQSxDQUFDLENBQUN3RCxRQUFGLENBQVczQyxNQUFYLENBQWtCaUIsS0FBbEIsQ0FBd0IsS0FBeEI7QUFDRCxPQUhDLENBQUY7QUFJRCxLQUxPLENBQVI7QUFPQWxCLElBQUFBLEVBQUUsQ0FBQyxrREFBRCxFQUFxRCxrQkFBa0I7QUFDdkUsVUFBSSxDQUFDTyxNQUFELElBQVcsTUFBTW5CLENBQUMsQ0FBQ29CLGFBQUYsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsRUFBNEJuQixPQUE1QixDQUFyQjtBQUNBRCxNQUFBQSxDQUFDLENBQUN5RCxnQkFBRixDQUFtQnRDLE1BQW5CLEVBQTJCTixNQUEzQixDQUFrQ0ssR0FBbEMsQ0FBc0NsQixDQUF0QztBQUNELEtBSEMsQ0FBRjtBQUtBRCxJQUFBQSxRQUFRLENBQUMsZUFBRCxFQUFrQixZQUFZO0FBQ3BDLFVBQUlDLENBQUMsR0FBRyxJQUFJTCxXQUFKLEVBQVI7QUFFQSxVQUFJK0QsTUFBTSxHQUFHLEVBQWI7O0FBQ0ExRCxNQUFBQSxDQUFDLENBQUNpQixTQUFGLEdBQWMsa0JBQWtCO0FBQzlCLGNBQU0wQixrQkFBRUMsS0FBRixDQUFRYyxNQUFSLENBQU47QUFDQSxlQUFPQyxJQUFJLENBQUNDLEdBQUwsRUFBUDtBQUNELE9BSGEsQ0FHWmYsSUFIWSxDQUdQN0MsQ0FITyxDQUFkOztBQUtBQSxNQUFBQSxDQUFDLENBQUNxQyxXQUFGLEdBQWdCLGtCQUFrQjtBQUNoQyxjQUFNTSxrQkFBRUMsS0FBRixDQUFRYyxNQUFSLENBQU47QUFDQSxjQUFNLElBQUlOLEtBQUosQ0FBVSxXQUFWLENBQU47QUFDRCxPQUhlLENBR2RQLElBSGMsQ0FHVDdDLENBSFMsQ0FBaEI7O0FBS0FTLE1BQUFBLFNBQVMsQ0FBQyxZQUFZO0FBQ3BCVCxRQUFBQSxDQUFDLENBQUM2RCxzQkFBRjtBQUNELE9BRlEsQ0FBVDtBQUlBakQsTUFBQUEsRUFBRSxDQUFDLHdFQUFELEVBQTJFLGtCQUFrQjtBQUM3RixZQUFJa0QsT0FBTyxHQUFHLEVBQWQ7QUFDQSxZQUFJQyxJQUFJLEdBQUcsRUFBWDs7QUFDQSxhQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdGLE9BQXBCLEVBQTZCRSxDQUFDLEVBQTlCLEVBQWtDO0FBQ2hDRCxVQUFBQSxJQUFJLENBQUNFLElBQUwsQ0FBVWpFLENBQUMsQ0FBQytDLGNBQUYsQ0FBaUIsV0FBakIsQ0FBVjtBQUNEOztBQUNELFlBQUltQixPQUFPLEdBQUcsTUFBTXZCLGtCQUFFd0IsR0FBRixDQUFNSixJQUFOLENBQXBCOztBQUNBLGFBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0YsT0FBcEIsRUFBNkJFLENBQUMsRUFBOUIsRUFBa0M7QUFDaEMsY0FBSUUsT0FBTyxDQUFDRixDQUFELENBQVAsSUFBY0UsT0FBTyxDQUFDRixDQUFDLEdBQUcsQ0FBTCxDQUF6QixFQUFrQztBQUNoQyxrQkFBTSxJQUFJWixLQUFKLENBQVUseUJBQVYsQ0FBTjtBQUNEO0FBQ0Y7QUFDRixPQVpDLENBQUY7QUFjQXhDLE1BQUFBLEVBQUUsQ0FBQyw2Q0FBRCxFQUFnRCxrQkFBa0I7QUFDbEUsWUFBSWtELE9BQU8sR0FBRyxFQUFkO0FBQ0EsWUFBSUMsSUFBSSxHQUFHLEVBQVg7O0FBQ0EsYUFBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRixPQUFwQixFQUE2QkUsQ0FBQyxFQUE5QixFQUFrQztBQUNoQyxjQUFJQSxDQUFDLEtBQUssQ0FBVixFQUFhO0FBQ1hELFlBQUFBLElBQUksQ0FBQ0UsSUFBTCxDQUFVakUsQ0FBQyxDQUFDK0MsY0FBRixDQUFpQixhQUFqQixDQUFWO0FBQ0QsV0FGRCxNQUVPO0FBQ0xnQixZQUFBQSxJQUFJLENBQUNFLElBQUwsQ0FBVWpFLENBQUMsQ0FBQytDLGNBQUYsQ0FBaUIsV0FBakIsQ0FBVjtBQUNEO0FBQ0Y7O0FBQ0QsWUFBSW1CLE9BQU8sR0FBRyxNQUFNdkIsa0JBQUV5QixNQUFGLENBQVNMLElBQVQsQ0FBcEI7O0FBQ0EsYUFBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHLENBQXBCLEVBQXVCQSxDQUFDLEVBQXhCLEVBQTRCO0FBQzFCLGNBQUlFLE9BQU8sQ0FBQ0YsQ0FBRCxDQUFQLENBQVdLLEtBQVgsTUFBc0JILE9BQU8sQ0FBQ0YsQ0FBQyxHQUFHLENBQUwsQ0FBUCxDQUFlSyxLQUFmLEVBQTFCLEVBQWtEO0FBQ2hELGtCQUFNLElBQUlqQixLQUFKLENBQVUseUJBQVYsQ0FBTjtBQUNEO0FBQ0Y7O0FBQ0RjLFFBQUFBLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBV0ksTUFBWCxHQUFvQkMsT0FBcEIsQ0FBNEIxRCxNQUE1QixDQUFtQzJELE9BQW5DLENBQTJDLFdBQTNDOztBQUNBLGFBQUssSUFBSVIsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0YsT0FBcEIsRUFBNkJFLENBQUMsRUFBOUIsRUFBa0M7QUFDaEMsY0FBSUUsT0FBTyxDQUFDRixDQUFELENBQVAsQ0FBV0ssS0FBWCxNQUFzQkgsT0FBTyxDQUFDRixDQUFDLEdBQUcsQ0FBTCxDQUFQLENBQWVLLEtBQWYsRUFBMUIsRUFBa0Q7QUFDaEQsa0JBQU0sSUFBSWpCLEtBQUosQ0FBVSx5QkFBVixDQUFOO0FBQ0Q7QUFDRjtBQUNGLE9BdEJDLENBQUY7QUF3QkF4QyxNQUFBQSxFQUFFLENBQUMsNENBQUQsRUFBK0Msa0JBQWtCO0FBQ2pFLFlBQUlrRCxPQUFPLEdBQUcsRUFBZDtBQUNBLFlBQUlDLElBQUksR0FBRyxFQUFYOztBQUNBLGFBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0YsT0FBcEIsRUFBNkJFLENBQUMsRUFBOUIsRUFBa0M7QUFDaENELFVBQUFBLElBQUksQ0FBQ0UsSUFBTCxDQUFVakUsQ0FBQyxDQUFDK0MsY0FBRixDQUFpQixXQUFqQixDQUFWO0FBQ0Q7O0FBQ0QsWUFBSW1CLE9BQU8sR0FBRyxNQUFNdkIsa0JBQUV3QixHQUFGLENBQU1KLElBQU4sQ0FBcEI7QUFDQUEsUUFBQUEsSUFBSSxHQUFHLEVBQVA7O0FBQ0EsYUFBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRixPQUFwQixFQUE2QkUsQ0FBQyxFQUE5QixFQUFrQztBQUNoQ0QsVUFBQUEsSUFBSSxDQUFDRSxJQUFMLENBQVVqRSxDQUFDLENBQUMrQyxjQUFGLENBQWlCLFdBQWpCLENBQVY7QUFDRDs7QUFDRG1CLFFBQUFBLE9BQU8sR0FBRyxNQUFNdkIsa0JBQUV3QixHQUFGLENBQU1KLElBQU4sQ0FBaEI7O0FBQ0EsYUFBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRixPQUFwQixFQUE2QkUsQ0FBQyxFQUE5QixFQUFrQztBQUNoQyxjQUFJRSxPQUFPLENBQUNGLENBQUQsQ0FBUCxJQUFjRSxPQUFPLENBQUNGLENBQUMsR0FBRyxDQUFMLENBQXpCLEVBQWtDO0FBQ2hDLGtCQUFNLElBQUlaLEtBQUosQ0FBVSx5QkFBVixDQUFOO0FBQ0Q7QUFDRjtBQUNGLE9BakJDLENBQUY7QUFrQkQsS0ExRU8sQ0FBUjtBQTRFQXJELElBQUFBLFFBQVEsQ0FBQyxVQUFELEVBQWEsWUFBWTtBQUMvQjBFLE1BQUFBLE1BQU0sQ0FBQyxrQkFBa0I7QUFDdkIsY0FBTXpFLENBQUMsQ0FBQ29CLGFBQUYsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsRUFBNEJuQixPQUE1QixDQUFOO0FBQ0QsT0FGSyxDQUFOO0FBR0FGLE1BQUFBLFFBQVEsQ0FBQyxTQUFELEVBQVksWUFBWTtBQUM5QmEsUUFBQUEsRUFBRSxDQUFDLHlCQUFELEVBQTRCLFlBQVk7QUFDeENaLFVBQUFBLENBQUMsQ0FBQzBFLG1CQUFGLENBQXNCN0QsTUFBdEIsQ0FBNkJpQixLQUE3QixDQUFtQyxLQUFuQztBQUNELFNBRkMsQ0FBRjtBQUdBbEIsUUFBQUEsRUFBRSxDQUFDLHVDQUFELEVBQTBDLGtCQUFrQjtBQUM1RCxnQkFBTVosQ0FBQyxDQUFDMkUsUUFBRixDQUFXLFNBQVgsRUFBc0IsRUFBdEIsQ0FBTjtBQUNBM0UsVUFBQUEsQ0FBQyxDQUFDMEUsbUJBQUYsQ0FBc0I3RCxNQUF0QixDQUE2QmlCLEtBQTdCLENBQW1DLEVBQW5DO0FBQ0QsU0FIQyxDQUFGO0FBSUQsT0FSTyxDQUFSO0FBU0EvQixNQUFBQSxRQUFRLENBQUMsVUFBRCxFQUFhLFlBQVk7QUFDL0JhLFFBQUFBLEVBQUUsQ0FBQyw2QkFBRCxFQUFnQyxZQUFZO0FBQzVDWixVQUFBQSxDQUFDLENBQUM0RSxjQUFGLENBQWlCL0QsTUFBakIsQ0FBd0JpQixLQUF4QixDQUE4QixDQUE5QjtBQUNELFNBRkMsQ0FBRjtBQUdBbEIsUUFBQUEsRUFBRSxDQUFDLHVDQUFELEVBQTBDLGtCQUFrQjtBQUM1RCxnQkFBTVosQ0FBQyxDQUFDMkUsUUFBRixDQUFXLFVBQVgsRUFBdUIsRUFBdkIsQ0FBTjtBQUNBM0UsVUFBQUEsQ0FBQyxDQUFDNEUsY0FBRixDQUFpQi9ELE1BQWpCLENBQXdCaUIsS0FBeEIsQ0FBOEIsRUFBOUI7QUFDRCxTQUhDLENBQUY7QUFJRCxPQVJPLENBQVI7QUFTRCxLQXRCTyxDQUFSO0FBd0JBL0IsSUFBQUEsUUFBUSxDQUFDLGdCQUFELEVBQW1CLFlBQVk7QUFDckNJLE1BQUFBLFVBQVUsQ0FBQyxrQkFBa0I7QUFDM0IsY0FBTUgsQ0FBQyxDQUFDb0IsYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0Qm5CLE9BQTVCLENBQU47QUFDRCxPQUZTLENBQVY7QUFHQVEsTUFBQUEsU0FBUyxDQUFDLGtCQUFrQjtBQUMxQixjQUFNVCxDQUFDLENBQUNVLGFBQUYsRUFBTjtBQUNELE9BRlEsQ0FBVDtBQUdBRSxNQUFBQSxFQUFFLENBQUMsaUNBQUQsRUFBb0Msa0JBQWtCO0FBQ3RELGNBQU1aLENBQUMsQ0FBQzJFLFFBQUYsQ0FBV0UsU0FBWCxFQUFzQkEsU0FBdEIsRUFBaUNBLFNBQWpDLEVBQTRDQSxTQUE1QyxFQUF1RCxJQUF2RCxDQUFOO0FBQ0EsY0FBTTdFLENBQUMsQ0FBQzhFLFdBQUYsR0FBZ0JqRSxNQUFoQixDQUF1QmMsVUFBdkIsQ0FBa0NvRCxJQUFsQyxDQUF1Q0MsUUFBdkMsQ0FBZ0QsVUFBaEQsRUFBNEQsSUFBNUQsQ0FBTjtBQUNBLGNBQU1oRixDQUFDLENBQUMyRSxRQUFGLENBQVcsU0FBWCxFQUFzQixJQUF0QixDQUFOO0FBQ0EsY0FBTTNFLENBQUMsQ0FBQzhFLFdBQUYsR0FBZ0JqRSxNQUFoQixDQUF1QmMsVUFBdkIsQ0FBa0NzRCxJQUFsQyxDQUF1Q25ELEtBQXZDLENBQTZDO0FBQ2pEb0QsVUFBQUEsUUFBUSxFQUFFLElBRHVDO0FBRWpEQyxVQUFBQSxPQUFPLEVBQUU7QUFGd0MsU0FBN0MsQ0FBTjtBQUlBLGNBQU1uRixDQUFDLENBQUMyRSxRQUFGLENBQVdFLFNBQVgsRUFBc0JBLFNBQXRCLEVBQWlDQSxTQUFqQyxFQUE0Q0EsU0FBNUMsRUFBdUQsSUFBdkQsQ0FBTjtBQUNBLGNBQU03RSxDQUFDLENBQUM4RSxXQUFGLEdBQWdCakUsTUFBaEIsQ0FBdUJjLFVBQXZCLENBQWtDc0QsSUFBbEMsQ0FBdUNuRCxLQUF2QyxDQUE2QztBQUNqRG9ELFVBQUFBLFFBQVEsRUFBRSxJQUR1QztBQUVqREMsVUFBQUEsT0FBTyxFQUFFO0FBRndDLFNBQTdDLENBQU47QUFJRCxPQWJDLENBQUY7QUFjRCxLQXJCTyxDQUFSO0FBdUJBcEYsSUFBQUEsUUFBUSxDQUFDLHFCQUFELEVBQXdCLFlBQVk7QUFDMUNhLE1BQUFBLEVBQUUsQ0FBQyx3REFBRCxFQUEyRCxrQkFBa0I7QUFDN0UsY0FBTXdFLE9BQU8sR0FBRztBQUNkaEYsVUFBQUEsV0FBVyxFQUFFQyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCVixXQUFsQixFQUErQjtBQUMxQ1csWUFBQUEsWUFBWSxFQUFFLE1BRDRCO0FBRTFDLGlDQUFxQixjQUZxQjtBQUcxQyxnQ0FBb0IsSUFIc0I7QUFJMUMsOEJBQWtCO0FBSndCLFdBQS9CO0FBREMsU0FBaEI7QUFRQSxjQUFNUCxDQUFDLENBQUNvQixhQUFGLENBQWdCLElBQWhCLEVBQXNCLElBQXRCLEVBQTRCZ0UsT0FBNUIsRUFBcUN2RSxNQUFyQyxDQUE0Q2MsVUFBNUMsQ0FBdUROLEVBQXZELENBQTBETyxZQUExRCxDQUNGLG9CQURFLENBQU47QUFFRCxPQVhDLENBQUY7QUFZRCxLQWJPLENBQVI7QUFlQTdCLElBQUFBLFFBQVEsQ0FBQyxVQUFELEVBQWEsWUFBWTtBQUMvQixVQUFJb0IsTUFBSjtBQUNBaEIsTUFBQUEsVUFBVSxDQUFDLGtCQUFrQjtBQUMzQixTQUFDZ0IsTUFBRCxJQUFXLE1BQU1uQixDQUFDLENBQUNvQixhQUFGLENBQWdCLElBQWhCLEVBQXNCLElBQXRCLEVBQTRCbkIsT0FBNUIsQ0FBakI7QUFDRCxPQUZTLENBQVY7QUFHQUYsTUFBQUEsUUFBUSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUNuQ2EsUUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUM3QlosVUFBQUEsQ0FBQyxDQUFDcUYsV0FBRixDQUFjeEUsTUFBZCxDQUFxQlEsRUFBckIsQ0FBd0JpRSxFQUF4QixDQUEyQkMsVUFBM0IsQ0FBc0NDLFFBQXRDO0FBQ0QsU0FGQyxDQUFGO0FBR0E1RSxRQUFBQSxFQUFFLENBQUMscUJBQUQsRUFBd0IsWUFBWTtBQUNwQ1osVUFBQUEsQ0FBQyxDQUFDcUYsV0FBRixDQUFjbEUsTUFBZCxFQUFzQk4sTUFBdEIsQ0FBNkJRLEVBQTdCLENBQWdDb0UsS0FBaEM7QUFDRCxTQUZDLENBQUY7QUFHQTdFLFFBQUFBLEVBQUUsQ0FBQywrQ0FBRCxFQUFrRCxZQUFZO0FBQzlELFdBQUMsTUFBTTtBQUFFWixZQUFBQSxDQUFDLENBQUNxRixXQUFGLENBQWMsS0FBZDtBQUF1QixXQUFoQyxFQUFrQ3hFLE1BQWxDLENBQXlDNkUsS0FBekM7QUFDRCxTQUZDLENBQUY7QUFHRCxPQVZPLENBQVI7QUFZQTNGLE1BQUFBLFFBQVEsQ0FBQyxvQkFBRCxFQUF1QixZQUFZO0FBQ3pDYSxRQUFBQSxFQUFFLENBQUMsY0FBRCxFQUFpQixZQUFZO0FBQzdCWixVQUFBQSxDQUFDLENBQUMyRixpQkFBRixDQUFvQjlFLE1BQXBCLENBQTJCUSxFQUEzQixDQUE4QmlFLEVBQTlCLENBQWlDQyxVQUFqQyxDQUE0Q0MsUUFBNUM7QUFDRCxTQUZDLENBQUY7QUFHQTVFLFFBQUFBLEVBQUUsQ0FBQyx3QkFBRCxFQUEyQixZQUFZO0FBQ3ZDWixVQUFBQSxDQUFDLENBQUMyRixpQkFBRixDQUFvQnhFLE1BQXBCLEVBQTRCTixNQUE1QixDQUFtQ1EsRUFBbkMsQ0FBc0NpRSxFQUF0QyxDQUF5Q0MsVUFBekMsQ0FBb0RLLEtBQXBEO0FBQ0QsU0FGQyxDQUFGO0FBR0FoRixRQUFBQSxFQUFFLENBQUMsK0NBQUQsRUFBa0QsWUFBWTtBQUM5RCxXQUFDLE1BQU07QUFBRVosWUFBQUEsQ0FBQyxDQUFDMkYsaUJBQUYsQ0FBb0IsS0FBcEI7QUFBNkIsV0FBdEMsRUFBd0M5RSxNQUF4QyxDQUErQzZFLEtBQS9DO0FBQ0QsU0FGQyxDQUFGO0FBR0QsT0FWTyxDQUFSO0FBWUEzRixNQUFBQSxRQUFRLENBQUMsV0FBRCxFQUFjLFlBQVk7QUFDaENhLFFBQUFBLEVBQUUsQ0FBQyxnQ0FBRCxFQUFtQyxZQUFZO0FBQy9DWixVQUFBQSxDQUFDLENBQUM2RixRQUFGLENBQVdoRixNQUFYLENBQWtCUSxFQUFsQixDQUFxQmlFLEVBQXJCLENBQXdCQyxVQUF4QixDQUFtQ0MsUUFBbkM7QUFDRCxTQUZDLENBQUY7QUFHQTVFLFFBQUFBLEVBQUUsQ0FBQyx3Q0FBRCxFQUEyQyxZQUFZO0FBQ3ZEWixVQUFBQSxDQUFDLENBQUM2RixRQUFGLENBQVcxRSxNQUFYLEVBQW1CTixNQUFuQixDQUEwQlEsRUFBMUIsQ0FBNkJDLENBQTdCLENBQStCLFNBQS9CO0FBQ0QsU0FGQyxDQUFGO0FBR0FWLFFBQUFBLEVBQUUsQ0FBQywrQ0FBRCxFQUFrRCxZQUFZO0FBQzlELFdBQUMsTUFBTTtBQUFFWixZQUFBQSxDQUFDLENBQUM2RixRQUFGO0FBQWUsV0FBeEIsRUFBMEJoRixNQUExQixDQUFpQzZFLEtBQWpDO0FBQ0QsU0FGQyxDQUFGO0FBR0QsT0FWTyxDQUFSO0FBWUEzRixNQUFBQSxRQUFRLENBQUMsc0JBQUQsRUFBeUIsWUFBWTtBQUMzQ2EsUUFBQUEsRUFBRSxDQUFDLHdDQUFELEVBQTJDLFlBQVk7QUFDdkQsZ0JBQU1rRixTQUFTLEdBQUc1RixPQUFPLENBQUM2RixJQUFSLENBQWEvRixDQUFiLEVBQWdCLG1CQUFoQixDQUFsQjtBQUNBOEYsVUFBQUEsU0FBUyxDQUFDRSxPQUFWLENBQWtCLENBQUMsQ0FBQyxNQUFELEVBQVMsT0FBVCxDQUFELEVBQW9CLENBQUMsS0FBRCxDQUFwQixDQUFsQjtBQUNBLFdBQUMsTUFBTTtBQUFFaEcsWUFBQUEsQ0FBQyxDQUFDaUcsbUJBQUY7QUFBMEIsV0FBbkMsRUFBcUNwRixNQUFyQyxDQUE0QzZFLEtBQTVDO0FBQ0FJLFVBQUFBLFNBQVMsQ0FBQ0UsT0FBVixDQUFrQixDQUFDLENBQUMsTUFBRCxFQUFTLE9BQVQsQ0FBRCxFQUFvQixDQUFDLEtBQUQsRUFBUSxNQUFSLEVBQWdCLEtBQWhCLENBQXBCLENBQWxCO0FBQ0EsV0FBQyxNQUFNO0FBQUVoRyxZQUFBQSxDQUFDLENBQUNpRyxtQkFBRjtBQUEwQixXQUFuQyxFQUFxQ3BGLE1BQXJDLENBQTRDNkUsS0FBNUM7QUFDQUksVUFBQUEsU0FBUyxDQUFDbkYsT0FBVjtBQUNELFNBUEMsQ0FBRjtBQVFBQyxRQUFBQSxFQUFFLENBQUMsZ0NBQUQsRUFBbUMsWUFBWTtBQUMvQyxnQkFBTWtGLFNBQVMsR0FBRzVGLE9BQU8sQ0FBQzZGLElBQVIsQ0FBYS9GLENBQWIsRUFBZ0IsbUJBQWhCLENBQWxCO0FBQ0E4RixVQUFBQSxTQUFTLENBQUNFLE9BQVYsQ0FBa0IsQ0FBQyxDQUFDLE1BQUQsRUFBUyxNQUFULENBQUQsRUFBbUIsQ0FBQyxRQUFELEVBQVcsTUFBWCxDQUFuQixDQUFsQjtBQUNBLFdBQUMsTUFBTTtBQUFFaEcsWUFBQUEsQ0FBQyxDQUFDaUcsbUJBQUY7QUFBMEIsV0FBbkMsRUFBcUNwRixNQUFyQyxDQUE0QzZFLEtBQTVDO0FBQ0FJLFVBQUFBLFNBQVMsQ0FBQ25GLE9BQVY7QUFDRCxTQUxDLENBQUY7QUFNQUMsUUFBQUEsRUFBRSxDQUFDLGdDQUFELEVBQW1DLFlBQVk7QUFDL0MsZ0JBQU1rRixTQUFTLEdBQUc1RixPQUFPLENBQUM2RixJQUFSLENBQWEvRixDQUFiLEVBQWdCLG1CQUFoQixDQUFsQjtBQUNBOEYsVUFBQUEsU0FBUyxDQUFDRSxPQUFWLENBQWtCLENBQUMsQ0FBQyxNQUFELEVBQVMsTUFBVCxDQUFELEVBQW1CLENBQUMsS0FBRCxFQUFRLE1BQVIsQ0FBbkIsQ0FBbEI7QUFDQSxXQUFDLE1BQU07QUFBRWhHLFlBQUFBLENBQUMsQ0FBQ2lHLG1CQUFGO0FBQTBCLFdBQW5DLEVBQXFDcEYsTUFBckMsQ0FBNEM2RSxLQUE1QztBQUNBSSxVQUFBQSxTQUFTLENBQUNuRixPQUFWO0FBQ0QsU0FMQyxDQUFGO0FBTUFDLFFBQUFBLEVBQUUsQ0FBQyxpREFBRCxFQUFvRCxZQUFZO0FBQ2hFLGdCQUFNa0YsU0FBUyxHQUFHNUYsT0FBTyxDQUFDNkYsSUFBUixDQUFhL0YsQ0FBYixFQUFnQixtQkFBaEIsQ0FBbEI7QUFDQThGLFVBQUFBLFNBQVMsQ0FBQ0UsT0FBVixDQUFrQixDQUFDLENBQUMsTUFBRCxFQUFTLFFBQVQsQ0FBRCxDQUFsQjtBQUNBaEcsVUFBQUEsQ0FBQyxDQUFDaUcsbUJBQUYsQ0FBc0IsSUFBdEIsRUFBNEIsTUFBNUIsRUFBb0MsVUFBcEMsRUFBZ0RwRixNQUFoRCxDQUF1RFEsRUFBdkQsQ0FBMEQ2RSxJQUExRDtBQUNBSixVQUFBQSxTQUFTLENBQUNuRixPQUFWO0FBQ0QsU0FMQyxDQUFGO0FBTUFDLFFBQUFBLEVBQUUsQ0FBQyxxQ0FBRCxFQUF3QyxZQUFZO0FBQ3BELGdCQUFNa0YsU0FBUyxHQUFHNUYsT0FBTyxDQUFDNkYsSUFBUixDQUFhL0YsQ0FBYixFQUFnQixtQkFBaEIsQ0FBbEI7QUFDQThGLFVBQUFBLFNBQVMsQ0FBQ0UsT0FBVixDQUFrQixDQUFDLENBQUMsTUFBRCxFQUFTLFFBQVQsQ0FBRCxDQUFsQjtBQUNBaEcsVUFBQUEsQ0FBQyxDQUFDaUcsbUJBQUYsQ0FBc0IsSUFBdEIsRUFBNEIsTUFBNUIsRUFBb0MsVUFBcEMsRUFBZ0RwRixNQUFoRCxDQUF1RFEsRUFBdkQsQ0FBMEQ2RSxJQUExRDtBQUNBSixVQUFBQSxTQUFTLENBQUNuRixPQUFWO0FBQ0QsU0FMQyxDQUFGO0FBTUFDLFFBQUFBLEVBQUUsQ0FBQyxzREFBRCxFQUF5RCxZQUFZO0FBQ3JFLGdCQUFNa0YsU0FBUyxHQUFHNUYsT0FBTyxDQUFDNkYsSUFBUixDQUFhL0YsQ0FBYixFQUFnQixtQkFBaEIsQ0FBbEI7QUFDQThGLFVBQUFBLFNBQVMsQ0FBQ0UsT0FBVixDQUFrQixDQUFDLENBQUMsTUFBRCxFQUFTLFFBQVQsQ0FBRCxDQUFsQjtBQUNBaEcsVUFBQUEsQ0FBQyxDQUFDaUcsbUJBQUYsQ0FBc0IsSUFBdEIsRUFBNEIsS0FBNUIsRUFBbUMsVUFBbkMsRUFBK0NwRixNQUEvQyxDQUFzRFEsRUFBdEQsQ0FBeURvRSxLQUF6RDtBQUNBekYsVUFBQUEsQ0FBQyxDQUFDaUcsbUJBQUYsQ0FBc0IsSUFBdEIsRUFBNEIsTUFBNUIsRUFBb0MsTUFBcEMsRUFBNENwRixNQUE1QyxDQUFtRFEsRUFBbkQsQ0FBc0RvRSxLQUF0RDtBQUNBSyxVQUFBQSxTQUFTLENBQUNuRixPQUFWO0FBQ0QsU0FOQyxDQUFGO0FBT0QsT0F4Q08sQ0FBUjtBQXlDRCxLQWxGTyxDQUFSO0FBb0ZBWixJQUFBQSxRQUFRLENBQUMsd0JBQUQsRUFBMkIsWUFBWTtBQUM3QyxVQUFJb0csZUFBSjtBQUNBaEcsTUFBQUEsVUFBVSxDQUFDLGtCQUFrQjtBQUMzQmdHLFFBQUFBLGVBQWUsR0FBR3hDLElBQUksQ0FBQ0MsR0FBTCxFQUFsQjtBQUNBNUQsUUFBQUEsQ0FBQyxDQUFDb0csa0JBQUYsR0FBdUIsS0FBdkI7QUFDQSxjQUFNcEcsQ0FBQyxDQUFDK0MsY0FBRixDQUFpQixlQUFqQixFQUFrQyxJQUFsQyxFQUF3QyxJQUF4QyxFQUE4QztBQUFDM0MsVUFBQUEsV0FBVyxFQUFFLEVBQUMsR0FBR1I7QUFBSixXQUFkO0FBQWdDWSxVQUFBQSxVQUFVLEVBQUUsQ0FBQyxFQUFEO0FBQTVDLFNBQTlDLENBQU47QUFDRCxPQUpTLENBQVY7QUFLQVQsTUFBQUEsUUFBUSxDQUFDLGVBQUQsRUFBa0IsWUFBWTtBQUNwQ2EsUUFBQUEsRUFBRSxDQUFDLHNDQUFELEVBQXlDLFlBQVk7QUFDckRDLFVBQUFBLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhZCxDQUFDLENBQUNxRyxZQUFmO0FBQ0F4RixVQUFBQSxNQUFNLENBQUNDLEtBQVAsQ0FBYWQsQ0FBQyxDQUFDcUcsWUFBRixDQUFlQyxRQUE1QjtBQUNELFNBSEMsQ0FBRjtBQUtBMUYsUUFBQUEsRUFBRSxDQUFDLHdEQUFELEVBQTJELFlBQVk7QUFDdkUsY0FBSTtBQUFDMkYsWUFBQUEsbUJBQUQ7QUFBc0JDLFlBQUFBO0FBQXRCLGNBQTJDeEcsQ0FBQyxDQUFDcUcsWUFBakQ7QUFDQUUsVUFBQUEsbUJBQW1CLENBQUMxRixNQUFwQixDQUEyQmtFLElBQTNCLENBQWdDeEQsTUFBaEMsQ0FBdUMsQ0FBdkM7QUFDQWlGLFVBQUFBLGlCQUFpQixDQUFDM0YsTUFBbEIsQ0FBeUJrRSxJQUF6QixDQUE4QnhELE1BQTlCLENBQXFDLENBQXJDO0FBQ0FnRixVQUFBQSxtQkFBbUIsQ0FBQyxDQUFELENBQW5CLENBQXVCMUYsTUFBdkIsQ0FBOEJRLEVBQTlCLENBQWlDQyxDQUFqQyxDQUFtQyxRQUFuQztBQUNBa0YsVUFBQUEsaUJBQWlCLENBQUMsQ0FBRCxDQUFqQixDQUFxQjNGLE1BQXJCLENBQTRCUSxFQUE1QixDQUErQkMsQ0FBL0IsQ0FBaUMsUUFBakM7QUFDQSxXQUFDaUYsbUJBQW1CLENBQUMsQ0FBRCxDQUFuQixJQUEwQkosZUFBM0IsRUFBNEN0RixNQUE1QyxDQUFtRFEsRUFBbkQsQ0FBc0Q2RSxJQUF0RDtBQUNBLFdBQUNNLGlCQUFpQixDQUFDLENBQUQsQ0FBakIsSUFBd0JELG1CQUFtQixDQUFDLENBQUQsQ0FBNUMsRUFBaUQxRixNQUFqRCxDQUF3RFEsRUFBeEQsQ0FBMkQ2RSxJQUEzRDtBQUNELFNBUkMsQ0FBRjtBQVVBdEYsUUFBQUEsRUFBRSxDQUFDLGdDQUFELEVBQW1DLGtCQUFrQjtBQUNyRCxnQkFBTVosQ0FBQyxDQUFDK0MsY0FBRixDQUFpQixXQUFqQixFQUE4QixFQUE5QixDQUFOO0FBQ0EvQyxVQUFBQSxDQUFDLENBQUNxRyxZQUFGLENBQWVDLFFBQWYsQ0FBd0IvRSxNQUF4QixDQUErQlYsTUFBL0IsQ0FBc0NpQixLQUF0QyxDQUE0QyxDQUE1QztBQUNBOUIsVUFBQUEsQ0FBQyxDQUFDcUcsWUFBRixDQUFlQyxRQUFmLENBQXdCLENBQXhCLEVBQTJCRyxHQUEzQixDQUErQjVGLE1BQS9CLENBQXNDaUIsS0FBdEMsQ0FBNEMsV0FBNUM7QUFDQTlCLFVBQUFBLENBQUMsQ0FBQ3FHLFlBQUYsQ0FBZUMsUUFBZixDQUF3QixDQUF4QixFQUEyQkksU0FBM0IsQ0FBcUM3RixNQUFyQyxDQUE0Q1EsRUFBNUMsQ0FBK0NDLENBQS9DLENBQWlELFFBQWpEO0FBQ0F0QixVQUFBQSxDQUFDLENBQUNxRyxZQUFGLENBQWVDLFFBQWYsQ0FBd0IsQ0FBeEIsRUFBMkJLLE9BQTNCLENBQW1DOUYsTUFBbkMsQ0FBMENRLEVBQTFDLENBQTZDQyxDQUE3QyxDQUErQyxRQUEvQztBQUNELFNBTkMsQ0FBRjtBQU9ELE9BdkJPLENBQVI7QUF3QkF2QixNQUFBQSxRQUFRLENBQUMsV0FBRCxFQUFjLFlBQVk7QUFDaENhLFFBQUFBLEVBQUUsQ0FBQyx1Q0FBRCxFQUEwQyxZQUFZO0FBQ3REWixVQUFBQSxDQUFDLENBQUM0RyxRQUFGLENBQVcsS0FBWDtBQUNBNUcsVUFBQUEsQ0FBQyxDQUFDcUcsWUFBRixDQUFlUSxHQUFmLENBQW1CLENBQW5CLEVBQXNCaEcsTUFBdEIsQ0FBNkJRLEVBQTdCLENBQWdDQyxDQUFoQyxDQUFrQyxRQUFsQztBQUNBLFdBQUN0QixDQUFDLENBQUNxRyxZQUFGLENBQWVRLEdBQWYsQ0FBbUIsQ0FBbkIsS0FBeUJWLGVBQTFCLEVBQTJDdEYsTUFBM0MsQ0FBa0RRLEVBQWxELENBQXFENkUsSUFBckQ7QUFDRCxTQUpDLENBQUY7QUFLQXRGLFFBQUFBLEVBQUUsQ0FBQyx1REFBRCxFQUEwRCxZQUFZO0FBQ3RFLFdBQUMsTUFBTTtBQUNMWixZQUFBQSxDQUFDLENBQUM0RyxRQUFGLENBQVcsVUFBWDtBQUNELFdBRkQsRUFFRy9GLE1BRkgsQ0FFVTZFLEtBRlY7QUFHQSxXQUFDLE1BQU07QUFDTDFGLFlBQUFBLENBQUMsQ0FBQzRHLFFBQUYsQ0FBVyxDQUFYO0FBQ0QsV0FGRCxFQUVHL0YsTUFGSCxDQUVVNkUsS0FGVjtBQUdBLFdBQUMsTUFBTTtBQUNMMUYsWUFBQUEsQ0FBQyxDQUFDNEcsUUFBRixDQUFXLEVBQVg7QUFDRCxXQUZELEVBRUcvRixNQUZILENBRVU2RSxLQUZWO0FBR0QsU0FWQyxDQUFGO0FBV0QsT0FqQk8sQ0FBUjtBQWtCQTlFLE1BQUFBLEVBQUUsQ0FBQyxvREFBRCxFQUF1RCxZQUFZO0FBQ25FWixRQUFBQSxDQUFDLENBQUM0RyxRQUFGLENBQVcsS0FBWDtBQUNBNUcsUUFBQUEsQ0FBQyxDQUFDNEcsUUFBRixDQUFXLEtBQVg7QUFDQTVHLFFBQUFBLENBQUMsQ0FBQ3FHLFlBQUYsQ0FBZVMsR0FBZixDQUFtQmpHLE1BQW5CLENBQTBCa0UsSUFBMUIsQ0FBK0J4RCxNQUEvQixDQUFzQyxDQUF0QztBQUNBdkIsUUFBQUEsQ0FBQyxDQUFDcUcsWUFBRixDQUFlUyxHQUFmLENBQW1CLENBQW5CLEVBQXNCakcsTUFBdEIsQ0FBNkJRLEVBQTdCLENBQWdDQyxDQUFoQyxDQUFrQyxRQUFsQztBQUNBLFNBQUN0QixDQUFDLENBQUNxRyxZQUFGLENBQWVTLEdBQWYsQ0FBbUIsQ0FBbkIsS0FBeUI5RyxDQUFDLENBQUNxRyxZQUFGLENBQWVTLEdBQWYsQ0FBbUIsQ0FBbkIsQ0FBMUIsRUFBaURqRyxNQUFqRCxDQUF3RFEsRUFBeEQsQ0FBMkQ2RSxJQUEzRDtBQUNELE9BTkMsQ0FBRjtBQU9BbkcsTUFBQUEsUUFBUSxDQUFDLHVCQUFELEVBQTBCLFlBQVk7QUFDNUNhLFFBQUFBLEVBQUUsQ0FBQywrREFBRCxFQUFrRSxrQkFBa0I7QUFDcEYsY0FBSW1HLEdBQUcsR0FBRyxNQUFNL0csQ0FBQyxDQUFDbUMsVUFBRixFQUFoQjtBQUNBdEIsVUFBQUEsTUFBTSxDQUFDb0IsR0FBUCxDQUFXbkIsS0FBWCxDQUFpQmlHLEdBQUcsQ0FBQ0MsTUFBckI7QUFFQWhILFVBQUFBLENBQUMsQ0FBQ2tDLElBQUYsQ0FBTytFLFlBQVAsR0FBc0IsSUFBdEI7QUFDQUYsVUFBQUEsR0FBRyxHQUFHLE1BQU0vRyxDQUFDLENBQUNtQyxVQUFGLEVBQVo7QUFDQXRCLFVBQUFBLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhaUcsR0FBRyxDQUFDQyxNQUFqQjtBQUNBbkcsVUFBQUEsTUFBTSxDQUFDQyxLQUFQLENBQWFpRyxHQUFHLENBQUNDLE1BQUosQ0FBV1QsbUJBQXhCO0FBQ0FRLFVBQUFBLEdBQUcsQ0FBQ0MsTUFBSixDQUFXVCxtQkFBWCxDQUErQixDQUEvQixFQUFrQzFGLE1BQWxDLENBQXlDUSxFQUF6QyxDQUE0Q0MsQ0FBNUMsQ0FBOEMsUUFBOUM7QUFDRCxTQVRDLENBQUY7QUFVRCxPQVhPLENBQVI7QUFZRCxLQXBFTyxDQUFSO0FBcUVBdkIsSUFBQUEsUUFBUSxDQUFDLFFBQUQsRUFBVyxZQUFZO0FBQzdCYSxNQUFBQSxFQUFFLENBQUMscURBQUQsRUFBd0Qsa0JBQWtCO0FBQzFFLGNBQU1zQixJQUFJLEdBQUc7QUFDWDlCLFVBQUFBLFdBQVcsRUFBRUMsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQjtBQUM3QiwwQkFBYyxNQURlO0FBRTdCLGlDQUFxQixNQUZRO0FBRzdCLHFDQUF5QixNQUhJO0FBSTdCQyxZQUFBQSxZQUFZLEVBQUU7QUFKZSxXQUFsQixFQUtWWCxXQUxVLENBREY7QUFPWFksVUFBQUEsVUFBVSxFQUFFLENBQUMsRUFBRDtBQVBELFNBQWI7QUFTQSxjQUFNUixDQUFDLENBQUNvQixhQUFGLENBQWdCeUQsU0FBaEIsRUFBMkJBLFNBQTNCLEVBQXNDM0MsSUFBdEMsQ0FBTjtBQUNBbEMsUUFBQUEsQ0FBQyxDQUFDd0QsUUFBRixDQUFXM0MsTUFBWCxDQUFrQmlCLEtBQWxCLENBQXdCLEtBQXhCO0FBQ0EsY0FBTTlCLENBQUMsQ0FBQ2tILEtBQUYsRUFBTjtBQUNBbEgsUUFBQUEsQ0FBQyxDQUFDd0QsUUFBRixDQUFXM0MsTUFBWCxDQUFrQmlCLEtBQWxCLENBQXdCLEtBQXhCO0FBQ0QsT0FkQyxDQUFGO0FBZUQsS0FoQk8sQ0FBUjtBQWlCRCxHQWxkTyxDQUFSO0FBb2RBL0IsRUFBQUEsUUFBUSxDQUFDLGdCQUFELEVBQW1CLFlBQVk7QUFDckNhLElBQUFBLEVBQUUsQ0FBQyw0REFBRCxFQUErRCxZQUFZO0FBQzNFLFVBQUl1RyxHQUFHLEdBQUc7QUFBQ04sUUFBQUEsR0FBRyxFQUFFO0FBQU4sT0FBVjtBQUNBLFVBQUlPLEVBQUUsR0FBRyxJQUFJQyxtQkFBSixDQUFtQkYsR0FBbkIsQ0FBVDtBQUNBLFVBQUlHLEVBQUUsR0FBRyxJQUFJRCxtQkFBSixDQUFtQkYsR0FBbkIsQ0FBVDtBQUNBQyxNQUFBQSxFQUFFLENBQUNHLFNBQUgsQ0FBYVYsR0FBYixHQUFtQixLQUFuQjs7QUFDQU8sTUFBQUEsRUFBRSxDQUFDRyxTQUFILENBQWExRyxNQUFiLENBQW9Cb0IsR0FBcEIsQ0FBd0JmLEdBQXhCLENBQTRCb0csRUFBRSxDQUFDQyxTQUEvQjtBQUNELEtBTkMsQ0FBRjtBQU9ELEdBUk8sQ0FBUjtBQVVBeEgsRUFBQUEsUUFBUSxDQUFDLG1CQUFELEVBQXNCLFlBQVk7QUFDeEMsVUFBTUMsQ0FBQyxHQUFHLElBQUlMLFdBQUosRUFBVjtBQUVBYyxJQUFBQSxTQUFTLENBQUMsWUFBWTtBQUNwQlQsTUFBQUEsQ0FBQyxDQUFDd0gsWUFBRixHQUFpQixJQUFqQjtBQUNBeEgsTUFBQUEsQ0FBQyxDQUFDeUgsYUFBRixHQUFrQixJQUFsQjtBQUNBekgsTUFBQUEsQ0FBQyxDQUFDMEgsc0JBQUYsR0FBMkIsSUFBM0I7QUFDRCxLQUpRLENBQVQ7QUFNQTlHLElBQUFBLEVBQUUsQ0FBQywrREFBRCxFQUFrRSxZQUFZO0FBQzlFWixNQUFBQSxDQUFDLENBQUN5SCxhQUFGLEdBQWtCLENBQUMsS0FBRCxFQUFRLEtBQVIsQ0FBbEI7QUFDQXpILE1BQUFBLENBQUMsQ0FBQzJILGdCQUFGLENBQW1CLEtBQW5CLEVBQTBCOUcsTUFBMUIsQ0FBaUNRLEVBQWpDLENBQW9DNkUsSUFBcEM7QUFDQWxHLE1BQUFBLENBQUMsQ0FBQzJILGdCQUFGLENBQW1CLEtBQW5CLEVBQTBCOUcsTUFBMUIsQ0FBaUNRLEVBQWpDLENBQW9DNkUsSUFBcEM7QUFDQWxHLE1BQUFBLENBQUMsQ0FBQzJILGdCQUFGLENBQW1CLEtBQW5CLEVBQTBCOUcsTUFBMUIsQ0FBaUNRLEVBQWpDLENBQW9Db0UsS0FBcEM7QUFDRCxLQUxDLENBQUY7QUFPQTdFLElBQUFBLEVBQUUsQ0FBQywwREFBRCxFQUE2RCxZQUFZO0FBQ3pFWixNQUFBQSxDQUFDLENBQUN5SCxhQUFGLEdBQWtCLEVBQWxCO0FBQ0F6SCxNQUFBQSxDQUFDLENBQUMySCxnQkFBRixDQUFtQixLQUFuQixFQUEwQjlHLE1BQTFCLENBQWlDUSxFQUFqQyxDQUFvQ29FLEtBQXBDO0FBQ0QsS0FIQyxDQUFGO0FBS0E3RSxJQUFBQSxFQUFFLENBQUMsNkNBQUQsRUFBZ0QsWUFBWTtBQUM1RFosTUFBQUEsQ0FBQyxDQUFDeUgsYUFBRixHQUFrQixDQUFDLEtBQUQsRUFBUSxLQUFSLENBQWxCO0FBQ0F6SCxNQUFBQSxDQUFDLENBQUN3SCxZQUFGLEdBQWlCLENBQUMsS0FBRCxDQUFqQjtBQUNBeEgsTUFBQUEsQ0FBQyxDQUFDMkgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI5RyxNQUExQixDQUFpQ1EsRUFBakMsQ0FBb0NvRSxLQUFwQztBQUNBekYsTUFBQUEsQ0FBQyxDQUFDMkgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI5RyxNQUExQixDQUFpQ1EsRUFBakMsQ0FBb0M2RSxJQUFwQztBQUNBbEcsTUFBQUEsQ0FBQyxDQUFDMkgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI5RyxNQUExQixDQUFpQ1EsRUFBakMsQ0FBb0NvRSxLQUFwQztBQUNELEtBTkMsQ0FBRjtBQVFBN0UsSUFBQUEsRUFBRSxDQUFDLDRDQUFELEVBQStDLFlBQVk7QUFDM0RaLE1BQUFBLENBQUMsQ0FBQzBILHNCQUFGLEdBQTJCLElBQTNCO0FBQ0ExSCxNQUFBQSxDQUFDLENBQUMySCxnQkFBRixDQUFtQixLQUFuQixFQUEwQjlHLE1BQTFCLENBQWlDUSxFQUFqQyxDQUFvQzZFLElBQXBDO0FBQ0FsRyxNQUFBQSxDQUFDLENBQUMySCxnQkFBRixDQUFtQixLQUFuQixFQUEwQjlHLE1BQTFCLENBQWlDUSxFQUFqQyxDQUFvQzZFLElBQXBDO0FBQ0FsRyxNQUFBQSxDQUFDLENBQUMySCxnQkFBRixDQUFtQixLQUFuQixFQUEwQjlHLE1BQTFCLENBQWlDUSxFQUFqQyxDQUFvQzZFLElBQXBDO0FBQ0QsS0FMQyxDQUFGO0FBT0F0RixJQUFBQSxFQUFFLENBQUMsdUNBQUQsRUFBMEMsWUFBWTtBQUN0RFosTUFBQUEsQ0FBQyxDQUFDMEgsc0JBQUYsR0FBMkIsSUFBM0I7QUFDQTFILE1BQUFBLENBQUMsQ0FBQ3dILFlBQUYsR0FBaUIsQ0FBQyxLQUFELEVBQVEsS0FBUixDQUFqQjtBQUNBeEgsTUFBQUEsQ0FBQyxDQUFDMkgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI5RyxNQUExQixDQUFpQ1EsRUFBakMsQ0FBb0NvRSxLQUFwQztBQUNBekYsTUFBQUEsQ0FBQyxDQUFDMkgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI5RyxNQUExQixDQUFpQ1EsRUFBakMsQ0FBb0NvRSxLQUFwQztBQUNBekYsTUFBQUEsQ0FBQyxDQUFDMkgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI5RyxNQUExQixDQUFpQ1EsRUFBakMsQ0FBb0M2RSxJQUFwQztBQUNELEtBTkMsQ0FBRjtBQU9ELEdBM0NPLENBQVI7QUE0Q0Q7O2VBRWN4RyxtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgeyBjcmVhdGVTYW5kYm94IH0gZnJvbSAnc2lub24nO1xuXG5cbi8vIHdyYXAgdGhlc2UgdGVzdHMgaW4gYSBmdW5jdGlvbiBzbyB3ZSBjYW4gZXhwb3J0IHRoZSB0ZXN0cyBhbmQgcmUtdXNlIHRoZW1cbi8vIGZvciBhY3R1YWwgZHJpdmVyIGltcGxlbWVudGF0aW9uc1xuZnVuY3Rpb24gYmFzZURyaXZlclVuaXRUZXN0cyAoRHJpdmVyQ2xhc3MsIGRlZmF1bHRDYXBzID0ge30pIHtcbiAgLy8gdG8gZGlzcGxheSB0aGUgZHJpdmVyIHVuZGVyIHRlc3QgaW4gcmVwb3J0XG4gIGNvbnN0IGNsYXNzTmFtZSA9IERyaXZlckNsYXNzLm5hbWUgfHwgJyh1bmtub3duIGRyaXZlciknO1xuXG5cbiAgZGVzY3JpYmUoYEJhc2VEcml2ZXIgKGFzICR7Y2xhc3NOYW1lfSlgLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGQsIHczY0NhcHM7XG5cbiAgICBsZXQgc2FuZGJveDtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveCA9IGNyZWF0ZVNhbmRib3goKTtcbiAgICAgIGQgPSBuZXcgRHJpdmVyQ2xhc3MoKTtcbiAgICAgIHczY0NhcHMgPSB7XG4gICAgICAgIGFsd2F5c01hdGNoOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q2Fwcywge1xuICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ0Zha2UnLFxuICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdDb21tb2RvcmUgNjQnLFxuICAgICAgICB9KSxcbiAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcG9ydCB0aGUgdmVyc2lvbiBvZiBCYXNlRHJpdmVyIHVzZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZXhpc3QoRHJpdmVyQ2xhc3MuYmFzZVZlcnNpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RhdHVzIG9iamVjdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBzdGF0dXMgPSBhd2FpdCBkLmdldFN0YXR1cygpO1xuICAgICAgc3RhdHVzLnNob3VsZC5lcWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzZXNzaW9uSWQgZnJvbSBjcmVhdGVTZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IFtzZXNzSWRdID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHczY0NhcHMpO1xuICAgICAgc2hvdWxkLmV4aXN0KHNlc3NJZCk7XG4gICAgICBzZXNzSWQuc2hvdWxkLmJlLmEoJ3N0cmluZycpO1xuICAgICAgc2Vzc0lkLmxlbmd0aC5zaG91bGQuYmUuYWJvdmUoNSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHN0YXJ0IHR3byBzZXNzaW9ucyB3aXRob3V0IGNsb3NpbmcgdGhlIGZpcnN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBfLmNsb25lRGVlcCh3M2NDYXBzKSkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKCdzZXNzaW9uJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gZGVsZXRlIGEgc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBzZXNzaW9uSWQxID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKGQuc2Vzc2lvbklkLCBudWxsKTtcbiAgICAgIGxldCBzZXNzaW9uSWQyID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIHNlc3Npb25JZDEuc2hvdWxkLm5vdC5lcWwoc2Vzc2lvbklkMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCB0aGUgY3VycmVudCBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IFssIGNhcHNdID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHczY0NhcHMpO1xuICAgICAgY2Fwcy5zaG91bGQuZXF1YWwoYXdhaXQgZC5nZXRTZXNzaW9uKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gc2Vzc2lvbnMgaWYgbm8gc2Vzc2lvbiBleGlzdHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgc2Vzc2lvbnMgPSBhd2FpdCBkLmdldFNlc3Npb25zKCk7XG4gICAgICBzZXNzaW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gc2Vzc2lvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjYXBzID0gXy5jbG9uZSh3M2NDYXBzKTtcbiAgICAgIGNhcHMuYSA9ICdjYXAnO1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIGNhcHMpO1xuICAgICAgbGV0IHNlc3Npb25zID0gYXdhaXQgZC5nZXRTZXNzaW9ucygpO1xuXG4gICAgICBzZXNzaW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgc2Vzc2lvbnNbMF0uc2hvdWxkLmluY2x1ZGUoe1xuICAgICAgICBpZDogZC5zZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgc2Vzc2lvbnNbMF0uY2FwYWJpbGl0aWVzLnNob3VsZC5pbmNsdWRlKHtcbiAgICAgICAgZGV2aWNlTmFtZTogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgIHBsYXRmb3JtTmFtZTogJ0Zha2UnXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZnVsZmlsbCBhbiB1bmV4cGVjdGVkIGRyaXZlciBxdWl0IHByb21pc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBtYWtlIGEgY29tbWFuZCB0aGF0IHdpbGwgd2FpdCBhIGJpdCBzbyB3ZSBjYW4gY3Jhc2ggd2hpbGUgaXQncyBydW5uaW5nXG4gICAgICBkLmdldFN0YXR1cyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgICAgcmV0dXJuICdnb29kIHN0YXR1cyc7XG4gICAgICB9LmJpbmQoZCk7XG4gICAgICBsZXQgY21kUHJvbWlzZSA9IGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFN0YXR1cycpO1xuICAgICAgYXdhaXQgQi5kZWxheSgxMCk7XG4gICAgICBjb25zdCBwID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ29uVW5leHBlY3RlZFNodXRkb3duIGV2ZW50IGlzIGV4cGVjdGVkIHRvIGJlIGZpcmVkIHdpdGhpbiA1IHNlY29uZHMgdGltZW91dCcpKSwgNTAwMCk7XG4gICAgICAgIGQub25VbmV4cGVjdGVkU2h1dGRvd24ocmVzb2x2ZSk7XG4gICAgICB9KTtcbiAgICAgIGQuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24obmV3IEVycm9yKCdXZSBjcmFzaGVkJykpO1xuICAgICAgYXdhaXQgY21kUHJvbWlzZS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9XZSBjcmFzaGVkLyk7XG4gICAgICBhd2FpdCBwO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgY29tbWFuZHMgaW4gbWlkZGxlIG9mIHVuZXhwZWN0ZWQgc2h1dGRvd24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBtYWtlIGEgY29tbWFuZCB0aGF0IHdpbGwgd2FpdCBhIGJpdCBzbyB3ZSBjYW4gY3Jhc2ggd2hpbGUgaXQncyBydW5uaW5nXG4gICAgICBkLm9sZERlbGV0ZVNlc3Npb24gPSBkLmRlbGV0ZVNlc3Npb247XG4gICAgICBkLmRlbGV0ZVNlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbGREZWxldGVTZXNzaW9uKCk7XG4gICAgICB9LmJpbmQoZCk7XG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICBjb25zdCBwID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ29uVW5leHBlY3RlZFNodXRkb3duIGV2ZW50IGlzIGV4cGVjdGVkIHRvIGJlIGZpcmVkIHdpdGhpbiA1IHNlY29uZHMgdGltZW91dCcpKSwgNTAwMCk7XG4gICAgICAgIGQub25VbmV4cGVjdGVkU2h1dGRvd24ocmVzb2x2ZSk7XG4gICAgICB9KTtcbiAgICAgIGQuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24obmV3IEVycm9yKCdXZSBjcmFzaGVkJykpO1xuICAgICAgYXdhaXQgcDtcbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFNlc3Npb24nKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zaHV0IGRvd24vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxsb3cgbmV3IGNvbW1hbmRzIGFmdGVyIGRvbmUgc2h1dHRpbmcgZG93bicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIG1ha2UgYSBjb21tYW5kIHRoYXQgd2lsbCB3YWl0IGEgYml0IHNvIHdlIGNhbiBjcmFzaCB3aGlsZSBpdCdzIHJ1bm5pbmdcbiAgICAgIGQub2xkRGVsZXRlU2Vzc2lvbiA9IGQuZGVsZXRlU2Vzc2lvbjtcbiAgICAgIGQuZGVsZXRlU2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDApO1xuICAgICAgICBhd2FpdCB0aGlzLm9sZERlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH0uYmluZChkKTtcblxuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIGNvbnN0IHAgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignb25VbmV4cGVjdGVkU2h1dGRvd24gZXZlbnQgaXMgZXhwZWN0ZWQgdG8gYmUgZmlyZWQgd2l0aGluIDUgc2Vjb25kcyB0aW1lb3V0JykpLCA1MDAwKTtcbiAgICAgICAgZC5vblVuZXhwZWN0ZWRTaHV0ZG93bihyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgICAgZC5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoJ1dlIGNyYXNoZWQnKSk7XG4gICAgICBhd2FpdCBwO1xuXG4gICAgICBhd2FpdCBkLmV4ZWN1dGVDb21tYW5kKCdnZXRTZXNzaW9uJykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvc2h1dCBkb3duLyk7XG4gICAgICBhd2FpdCBCLmRlbGF5KDUwMCk7XG5cbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2NyZWF0ZVNlc3Npb24nLCBudWxsLCBudWxsLCBfLmNsb25lRGVlcCh3M2NDYXBzKSk7XG4gICAgICBhd2FpdCBkLmRlbGV0ZVNlc3Npb24oKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBXM0MgYW5kIEpTT05XUCBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGVzdCBXM0MgKGxlYXZlIGZpcnN0IDIgYXJncyBudWxsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBKU09OV1AgYXJncylcbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2NyZWF0ZVNlc3Npb24nLCBudWxsLCBudWxsLCB7XG4gICAgICAgIGFsd2F5c01hdGNoOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q2Fwcywge1xuICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ0Zha2UnLFxuICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdDb21tb2RvcmUgNjQnLFxuICAgICAgICB9KSxcbiAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgIH0pO1xuXG4gICAgICBkLnByb3RvY29sLnNob3VsZC5lcXVhbCgnVzNDJyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncHJvdG9jb2wgZGV0ZWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCB1c2UgVzNDIGlmIG9ubHkgVzNDIGNhcHMgYXJlIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwge2Fsd2F5c01hdGNoOiBfLmNsb25lKGRlZmF1bHRDYXBzKSwgZmlyc3RNYXRjaDogW3t9XX0pO1xuICAgICAgICBkLnByb3RvY29sLnNob3VsZC5lcXVhbCgnVzNDJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBhIG1ldGhvZCB0byBnZXQgZHJpdmVyIGZvciBhIHNlc3Npb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgW3Nlc3NJZF0gPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICBkLmRyaXZlckZvclNlc3Npb24oc2Vzc0lkKS5zaG91bGQuZXFsKGQpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvbW1hbmQgcXVldWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgZCA9IG5ldyBEcml2ZXJDbGFzcygpO1xuXG4gICAgICBsZXQgd2FpdE1zID0gMTA7XG4gICAgICBkLmdldFN0YXR1cyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSh3YWl0TXMpO1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgICAgIH0uYmluZChkKTtcblxuICAgICAgZC5nZXRTZXNzaW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSh3YWl0TXMpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpcGFzcycpO1xuICAgICAgfS5iaW5kKGQpO1xuXG4gICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBkLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHF1ZXVlIGNvbW1hbmRzIGFuZC5leGVjdXRlQ29tbWFuZC9yZXNwb25kIGluIHRoZSBvcmRlciByZWNlaXZlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG51bUNtZHMgPSAxMDtcbiAgICAgICAgbGV0IGNtZHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJykpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgQi5hbGwoY21kcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdHNbaV0gPD0gcmVzdWx0c1tpIC0gMV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR290IHJlc3VsdCBvdXQgb2Ygb3JkZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBlcnJvcnMgY29ycmVjdGx5IHdoZW4gcXVldWluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG51bUNtZHMgPSAxMDtcbiAgICAgICAgbGV0IGNtZHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSA9PT0gNSkge1xuICAgICAgICAgICAgY21kcy5wdXNoKGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFNlc3Npb25zJykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IEIuc2V0dGxlKGNtZHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDU7IGkrKykge1xuICAgICAgICAgIGlmIChyZXN1bHRzW2ldLnZhbHVlKCkgPD0gcmVzdWx0c1tpIC0gMV0udmFsdWUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHb3QgcmVzdWx0IG91dCBvZiBvcmRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHRzWzVdLnJlYXNvbigpLm1lc3NhZ2Uuc2hvdWxkLmNvbnRhaW4oJ211bHRpcGFzcycpO1xuICAgICAgICBmb3IgKGxldCBpID0gNzsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGlmIChyZXN1bHRzW2ldLnZhbHVlKCkgPD0gcmVzdWx0c1tpIC0gMV0udmFsdWUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHb3QgcmVzdWx0IG91dCBvZiBvcmRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IGNhcmUgaWYgcXVldWUgZW1wdGllcyBmb3IgYSBiaXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBudW1DbWRzID0gMTA7XG4gICAgICAgIGxldCBjbWRzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgY21kcy5wdXNoKGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFN0YXR1cycpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IEIuYWxsKGNtZHMpO1xuICAgICAgICBjbWRzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgY21kcy5wdXNoKGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFN0YXR1cycpKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRzID0gYXdhaXQgQi5hbGwoY21kcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdHNbaV0gPD0gcmVzdWx0c1tpIC0gMV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR290IHJlc3VsdCBvdXQgb2Ygb3JkZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3RpbWVvdXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHczY0NhcHMpO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnY29tbWFuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBleGlzdCBieSBkZWZhdWx0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXF1YWwoNjAwMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBiZSBzZXR0YWJsZSB0aHJvdWdoIGB0aW1lb3V0c2AnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgZC50aW1lb3V0cygnY29tbWFuZCcsIDIwKTtcbiAgICAgICAgICBkLm5ld0NvbW1hbmRUaW1lb3V0TXMuc2hvdWxkLmVxdWFsKDIwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCdpbXBsaWNpdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBub3QgZXhpc3QgYnkgZGVmYXVsdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcXVhbCgwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgYmUgc2V0dGFibGUgdGhyb3VnaCBgdGltZW91dHNgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGF3YWl0IGQudGltZW91dHMoJ2ltcGxpY2l0JywgMjApO1xuICAgICAgICAgIGQuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxdWFsKDIwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd0aW1lb3V0cyAoVzNDKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICB9KTtcbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGdldCB0aW1lb3V0cyB0aGF0IHdlIHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDEwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuaGF2ZS5wcm9wZXJ0eSgnaW1wbGljaXQnLCAxMDAwKTtcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cygnY29tbWFuZCcsIDIwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuZGVlcC5lcXVhbCh7XG4gICAgICAgICAgaW1wbGljaXQ6IDEwMDAsXG4gICAgICAgICAgY29tbWFuZDogMjAwMCxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGQudGltZW91dHModW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAzMDAwKTtcbiAgICAgICAgYXdhaXQgZC5nZXRUaW1lb3V0cygpLnNob3VsZC5ldmVudHVhbGx5LmRlZXAuZXF1YWwoe1xuICAgICAgICAgIGltcGxpY2l0OiAzMDAwLFxuICAgICAgICAgIGNvbW1hbmQ6IDIwMDAsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncmVzZXQgY29tcGF0aWJpbGl0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IGJvdGggZnVsbFJlc2V0IGFuZCBub1Jlc2V0IHRvIGJlIHRydWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG5ld0NhcHMgPSB7XG4gICAgICAgICAgYWx3YXlzTWF0Y2g6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDYXBzLCB7XG4gICAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdGYWtlJyxcbiAgICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdDb21tb2RvcmUgNjQnLFxuICAgICAgICAgICAgJ2FwcGl1bTpmdWxsUmVzZXQnOiB0cnVlLFxuICAgICAgICAgICAgJ2FwcGl1bTpub1Jlc2V0JzogdHJ1ZVxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgbmV3Q2Fwcykuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgL25vUmVzZXQuK2Z1bGxSZXNldC8pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncHJveHlpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgc2Vzc0lkO1xuICAgICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtzZXNzSWRdID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHczY0NhcHMpO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnI3Byb3h5QWN0aXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGV4aXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQucHJveHlBY3RpdmUuc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoRnVuY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5wcm94eUFjdGl2ZShzZXNzSWQpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBzZXNzaW9uSWQgaXMgd3JvbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHsgZC5wcm94eUFjdGl2ZSgnYWFhJyk7IH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJyNnZXRQcm94eUF2b2lkTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBleGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmdldFByb3h5QXZvaWRMaXN0LnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEZ1bmN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc0lkKS5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihBcnJheSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gc2Vzc2lvbklkIGlzIHdyb25nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7IGQuZ2V0UHJveHlBdm9pZExpc3QoJ2FhYScpOyB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCcjY2FuUHJveHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBhICNjYW5Qcm94eSBtZXRob2QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5jYW5Qcm94eS5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihGdW5jdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIGJvb2xlYW4gZnJvbSAjY2FuUHJveHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5jYW5Qcm94eShzZXNzSWQpLnNob3VsZC5iZS5hKCdib29sZWFuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gc2Vzc2lvbklkIGlzIHdyb25nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7IGQuY2FuUHJveHkoKTsgfSkuc2hvdWxkLnRocm93O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnI3Byb3h5Um91dGVJc0F2b2lkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgZm9ybSBvZiBhdm9pZGFuY2UgbGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhdm9pZFN0dWIgPSBzYW5kYm94LnN0dWIoZCwgJ2dldFByb3h5QXZvaWRMaXN0Jyk7XG4gICAgICAgICAgYXZvaWRTdHViLnJldHVybnMoW1snUE9TVCcsIC9cXC9mb28vXSwgWydHRVQnXV0pO1xuICAgICAgICAgICgoKSA9PiB7IGQucHJveHlSb3V0ZUlzQXZvaWRlZCgpOyB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgICAgYXZvaWRTdHViLnJldHVybnMoW1snUE9TVCcsIC9cXC9mb28vXSwgWydHRVQnLCAvXmZvby8sICdiYXInXV0pO1xuICAgICAgICAgICgoKSA9PiB7IGQucHJveHlSb3V0ZUlzQXZvaWRlZCgpOyB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgICAgYXZvaWRTdHViLnJlc3RvcmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IGJhZCBodHRwIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2FuZGJveC5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXR1cm5zKFtbJ1BPU1QnLCAvXmZvby9dLCBbJ0JBWkVURScsIC9eYmFyL11dKTtcbiAgICAgICAgICAoKCkgPT4geyBkLnByb3h5Um91dGVJc0F2b2lkZWQoKTsgfSkuc2hvdWxkLnRocm93O1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXN0b3JlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBub24tcmVnZXggcm91dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15mb28vXSwgWydHRVQnLCAnL2JhciddXSk7XG4gICAgICAgICAgKCgpID0+IHsgZC5wcm94eVJvdXRlSXNBdm9pZGVkKCk7IH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgICBhdm9pZFN0dWIucmVzdG9yZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3Igcm91dGVzIGluIHRoZSBhdm9pZCBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15cXC9mb28vXV0pO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZChudWxsLCAnUE9TVCcsICcvZm9vL2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXN0b3JlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHN0cmlwIGF3YXkgYW55IHdkL2h1YiBwcmVmaXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2FuZGJveC5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXR1cm5zKFtbJ1BPU1QnLCAvXlxcL2Zvby9dXSk7XG4gICAgICAgICAgZC5wcm94eVJvdXRlSXNBdm9pZGVkKG51bGwsICdQT1NUJywgJy9mb28vYmFyJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgICAgYXZvaWRTdHViLnJlc3RvcmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciByb3V0ZXMgbm90IGluIHRoZSBhdm9pZCBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15cXC9mb28vXV0pO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZChudWxsLCAnR0VUJywgJy9mb28vYmFyJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZChudWxsLCAnUE9TVCcsICcvYm9vJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXN0b3JlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXZlbnQgdGltaW5nIGZyYW1ld29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBiZWZvcmVTdGFydFRpbWU7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYmVmb3JlU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZC5zaG91bGRWYWxpZGF0ZUNhcHMgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnY3JlYXRlU2Vzc2lvbicsIG51bGwsIG51bGwsIHthbHdheXNNYXRjaDogey4uLmRlZmF1bHRDYXBzfSwgZmlyc3RNYXRjaDogW3t9XX0pO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnI2V2ZW50SGlzdG9yeScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGFuIGV2ZW50SGlzdG9yeSBwcm9wZXJ0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaG91bGQuZXhpc3QoZC5ldmVudEhpc3RvcnkpO1xuICAgICAgICAgIHNob3VsZC5leGlzdChkLmV2ZW50SGlzdG9yeS5jb21tYW5kcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBhIHNlc3Npb24gc3RhcnQgdGltaW5nIGFmdGVyIHNlc3Npb24gc3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGV0IHtuZXdTZXNzaW9uUmVxdWVzdGVkLCBuZXdTZXNzaW9uU3RhcnRlZH0gPSBkLmV2ZW50SGlzdG9yeTtcbiAgICAgICAgICBuZXdTZXNzaW9uUmVxdWVzdGVkLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgICAgICBuZXdTZXNzaW9uU3RhcnRlZC5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICAgICAgbmV3U2Vzc2lvblJlcXVlc3RlZFswXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgICAgbmV3U2Vzc2lvblN0YXJ0ZWRbMF0uc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICAgIChuZXdTZXNzaW9uUmVxdWVzdGVkWzBdID49IGJlZm9yZVN0YXJ0VGltZSkuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgICAgKG5ld1Nlc3Npb25TdGFydGVkWzBdID49IG5ld1Nlc3Npb25SZXF1ZXN0ZWRbMF0pLnNob3VsZC5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGluY2x1ZGUgYSBjb21tYW5kcyBsaXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFN0YXR1cycsIFtdKTtcbiAgICAgICAgICBkLmV2ZW50SGlzdG9yeS5jb21tYW5kcy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgICAgICAgIGQuZXZlbnRIaXN0b3J5LmNvbW1hbmRzWzFdLmNtZC5zaG91bGQuZXF1YWwoJ2dldFN0YXR1cycpO1xuICAgICAgICAgIGQuZXZlbnRIaXN0b3J5LmNvbW1hbmRzWzFdLnN0YXJ0VGltZS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgICAgZC5ldmVudEhpc3RvcnkuY29tbWFuZHNbMV0uZW5kVGltZS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnI2xvZ0V2ZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGFsbG93IGxvZ2dpbmcgYXJiaXRyYXJ5IGV2ZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmxvZ0V2ZW50KCdmb28nKTtcbiAgICAgICAgICBkLmV2ZW50SGlzdG9yeS5mb29bMF0uc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICAgIChkLmV2ZW50SGlzdG9yeS5mb29bMF0gPj0gYmVmb3JlU3RhcnRUaW1lKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IHJlc2VydmVkIG9yIG9kZGx5IGZvcm1lZCBldmVudCBuYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgZC5sb2dFdmVudCgnY29tbWFuZHMnKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3coKTtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgZC5sb2dFdmVudCgxKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3coKTtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgZC5sb2dFdmVudCh7fSk7XG4gICAgICAgICAgfSkuc2hvdWxkLnRocm93KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGFsbG93IGxvZ2dpbmcgdGhlIHNhbWUgZXZlbnQgbXVsdGlwbGUgdGltZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGQubG9nRXZlbnQoJ2JhcicpO1xuICAgICAgICBkLmxvZ0V2ZW50KCdiYXInKTtcbiAgICAgICAgZC5ldmVudEhpc3RvcnkuYmFyLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgICAgZC5ldmVudEhpc3RvcnkuYmFyWzFdLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgKGQuZXZlbnRIaXN0b3J5LmJhclsxXSA+PSBkLmV2ZW50SGlzdG9yeS5iYXJbMF0pLnNob3VsZC5iZS50cnVlO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnZ2V0U2Vzc2lvbiBkZWNvcmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGRlY29yYXRlIGdldFNlc3Npb24gcmVzcG9uc2UgaWYgb3B0LWluIGNhcCBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsZXQgcmVzID0gYXdhaXQgZC5nZXRTZXNzaW9uKCk7XG4gICAgICAgICAgc2hvdWxkLm5vdC5leGlzdChyZXMuZXZlbnRzKTtcblxuICAgICAgICAgIGQuY2Fwcy5ldmVudFRpbWluZ3MgPSB0cnVlO1xuICAgICAgICAgIHJlcyA9IGF3YWl0IGQuZ2V0U2Vzc2lvbigpO1xuICAgICAgICAgIHNob3VsZC5leGlzdChyZXMuZXZlbnRzKTtcbiAgICAgICAgICBzaG91bGQuZXhpc3QocmVzLmV2ZW50cy5uZXdTZXNzaW9uUmVxdWVzdGVkKTtcbiAgICAgICAgICByZXMuZXZlbnRzLm5ld1Nlc3Npb25SZXF1ZXN0ZWRbMF0uc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCcucmVzZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJlc2V0IGFzIFczQyBpZiB0aGUgb3JpZ2luYWwgc2Vzc2lvbiB3YXMgVzNDJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjYXBzID0ge1xuICAgICAgICAgIGFsd2F5c01hdGNoOiBPYmplY3QuYXNzaWduKHt9LCB7XG4gICAgICAgICAgICAnYXBwaXVtOmFwcCc6ICdGYWtlJyxcbiAgICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdGYWtlJyxcbiAgICAgICAgICAgICdhcHBpdW06YXV0b21hdGlvbk5hbWUnOiAnRmFrZScsXG4gICAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdGYWtlJyxcbiAgICAgICAgICB9LCBkZWZhdWx0Q2FwcyksXG4gICAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjYXBzKTtcbiAgICAgICAgZC5wcm90b2NvbC5zaG91bGQuZXF1YWwoJ1czQycpO1xuICAgICAgICBhd2FpdCBkLnJlc2V0KCk7XG4gICAgICAgIGQucHJvdG9jb2wuc2hvdWxkLmVxdWFsKCdXM0MnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRGV2aWNlU2V0dGluZ3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBub3QgaG9sZCBvbiB0byByZWZlcmVuY2Ugb2YgZGVmYXVsdHMgaW4gY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgb2JqID0ge2ZvbzogJ2Jhcid9O1xuICAgICAgbGV0IGQxID0gbmV3IERldmljZVNldHRpbmdzKG9iaik7XG4gICAgICBsZXQgZDIgPSBuZXcgRGV2aWNlU2V0dGluZ3Mob2JqKTtcbiAgICAgIGQxLl9zZXR0aW5ncy5mb28gPSAnYmF6JztcbiAgICAgIGQxLl9zZXR0aW5ncy5zaG91bGQubm90LmVxbChkMi5fc2V0dGluZ3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnLmlzRmVhdHVyZUVuYWJsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZCA9IG5ldyBEcml2ZXJDbGFzcygpO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuZGVueUluc2VjdXJlID0gbnVsbDtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IG51bGw7XG4gICAgICBkLnJlbGF4ZWRTZWN1cml0eUVuYWJsZWQgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzYXkgYSBmZWF0dXJlIGlzIGVuYWJsZWQgd2hlbiBpdCBpcyBleHBsaWNpdGx5IGFsbG93ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkLmFsbG93SW5zZWN1cmUgPSBbJ2ZvbycsICdiYXInXTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnZm9vJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNheSBhIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgaWYgaXQgaXMgbm90IGVuYWJsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkLmFsbG93SW5zZWN1cmUgPSBbXTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnZm9vJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcmVmZXIgZGVueUluc2VjdXJlIHRvIGFsbG93SW5zZWN1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkLmFsbG93SW5zZWN1cmUgPSBbJ2ZvbycsICdiYXInXTtcbiAgICAgIGQuZGVueUluc2VjdXJlID0gWydmb28nXTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnZm9vJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXInKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmF6Jykuc2hvdWxkLmJlLmZhbHNlO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBnbG9iYWwgc2V0dGluZyBmb3IgaW5zZWN1cml0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IHRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2ZvbycpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXInKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmF6Jykuc2hvdWxkLmJlLnRydWU7XG4gICAgfSk7XG5cbiAgICBpdCgnZ2xvYmFsIHNldHRpbmcgc2hvdWxkIGJlIG92ZXJyaWRlYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IHRydWU7XG4gICAgICBkLmRlbnlJbnNlY3VyZSA9IFsnZm9vJywgJ2JhciddO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmF6Jykuc2hvdWxkLmJlLnRydWU7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRHJpdmVyVW5pdFRlc3RzO1xuIl19
|
|
572
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvYmFzZWRyaXZlci9kcml2ZXItdGVzdHMuanMiXSwibmFtZXMiOlsiYmFzZURyaXZlclVuaXRUZXN0cyIsIkRyaXZlckNsYXNzIiwiZGVmYXVsdENhcHMiLCJjbGFzc05hbWUiLCJuYW1lIiwiZGVzY3JpYmUiLCJpdCIsImJhc2VWZXJzaW9uIiwic2hvdWxkIiwiZXhpc3QiLCJkIiwicHJldmlvdXNQcmVmaXgiLCJsb2ciLCJwcmVmaXgiLCJjcmVhdGVTZXNzaW9uIiwiYWx3YXlzTWF0Y2giLCJPYmplY3QiLCJhc3NpZ24iLCJwbGF0Zm9ybU5hbWUiLCJmaXJzdE1hdGNoIiwibm90IiwiZXFsIiwiZGVsZXRlU2Vzc2lvbiIsInczY0NhcHMiLCJzYW5kYm94IiwiYmVmb3JlRWFjaCIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJzZXNzSWQiLCJiZSIsImEiLCJsZW5ndGgiLCJhYm92ZSIsIl8iLCJjbG9uZURlZXAiLCJldmVudHVhbGx5IiwicmVqZWN0ZWRXaXRoIiwic2Vzc2lvbklkMSIsImVxdWFsIiwic2Vzc2lvbklkIiwic2Vzc2lvbklkMiIsImNhcHMiLCJnZXRTZXNzaW9uIiwic2Vzc2lvbnMiLCJnZXRTZXNzaW9ucyIsImNsb25lIiwiaW5jbHVkZSIsImlkIiwiY2FwYWJpbGl0aWVzIiwiZGV2aWNlTmFtZSIsIkIiLCJkZWxheSIsImJpbmQiLCJjbWRQcm9taXNlIiwiZXhlY3V0ZUNvbW1hbmQiLCJwIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJFcnJvciIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJvbGREZWxldGVTZXNzaW9uIiwicHJvdG9jb2wiLCJkcml2ZXJGb3JTZXNzaW9uIiwid2FpdE1zIiwiRGF0ZSIsIm5vdyIsImNsZWFyTmV3Q29tbWFuZFRpbWVvdXQiLCJudW1DbWRzIiwiY21kcyIsImkiLCJwdXNoIiwicmVzdWx0cyIsImFsbCIsInNldHRsZSIsInZhbHVlIiwicmVhc29uIiwibWVzc2FnZSIsImNvbnRhaW4iLCJiZWZvcmUiLCJuZXdDb21tYW5kVGltZW91dE1zIiwidGltZW91dHMiLCJpbXBsaWNpdFdhaXRNcyIsInVuZGVmaW5lZCIsImdldFRpbWVvdXRzIiwiaGF2ZSIsInByb3BlcnR5IiwiZGVlcCIsImltcGxpY2l0IiwiY29tbWFuZCIsIm5ld0NhcHMiLCJwcm94eUFjdGl2ZSIsImFuIiwiaW5zdGFuY2VvZiIsIkZ1bmN0aW9uIiwiZmFsc2UiLCJ0aHJvdyIsImdldFByb3h5QXZvaWRMaXN0IiwiQXJyYXkiLCJjYW5Qcm94eSIsImF2b2lkU3R1YiIsInN0dWIiLCJyZXR1cm5zIiwicHJveHlSb3V0ZUlzQXZvaWRlZCIsInRydWUiLCJiZWZvcmVTdGFydFRpbWUiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJldmVudEhpc3RvcnkiLCJjb21tYW5kcyIsIm5ld1Nlc3Npb25SZXF1ZXN0ZWQiLCJuZXdTZXNzaW9uU3RhcnRlZCIsImNtZCIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJsb2dFdmVudCIsImZvbyIsImJhciIsInJlcyIsImV2ZW50cyIsImV2ZW50VGltaW5ncyIsInJlc2V0Iiwib2JqIiwiZDEiLCJEZXZpY2VTZXR0aW5ncyIsImQyIiwiX3NldHRpbmdzIiwiZGVueUluc2VjdXJlIiwiYWxsb3dJbnNlY3VyZSIsInJlbGF4ZWRTZWN1cml0eUVuYWJsZWQiLCJpc0ZlYXR1cmVFbmFibGVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUtBLFNBQVNBLG1CQUFULENBQThCQyxXQUE5QixFQUEyQ0MsV0FBVyxHQUFHLEVBQXpELEVBQTZEO0FBRTNELFFBQU1DLFNBQVMsR0FBR0YsV0FBVyxDQUFDRyxJQUFaLElBQW9CLGtCQUF0QztBQUVBQyxFQUFBQSxRQUFRLENBQUMsaUJBQUQsRUFBb0IsWUFBWTtBQUN0Q0EsSUFBQUEsUUFBUSxDQUFDLGFBQUQsRUFBZ0IsWUFBWTtBQUNsQ0MsTUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUM3QkwsUUFBQUEsV0FBVyxDQUFDTSxXQUFaLENBQXdCQyxNQUF4QixDQUErQkMsS0FBL0I7QUFDRCxPQUZDLENBQUY7QUFHRCxLQUpPLENBQVI7QUFLRCxHQU5PLENBQVI7QUFRQUosRUFBQUEsUUFBUSxDQUFDLFlBQUQsRUFBZSxZQUFZO0FBRWpDQyxJQUFBQSxFQUFFLENBQUMseUJBQUQsRUFBNEIsa0JBQWtCO0FBQzlDLFlBQU1JLENBQUMsR0FBRyxJQUFJVCxXQUFKLEVBQVY7QUFDQSxZQUFNVSxjQUFjLEdBQUdELENBQUMsQ0FBQ0UsR0FBRixDQUFNQyxNQUE3QjtBQUNBLFlBQU1ILENBQUMsQ0FBQ0ksYUFBRixDQUFnQjtBQUNwQkMsUUFBQUEsV0FBVyxFQUFFQyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCZixXQUFsQixFQUErQjtBQUMxQ2dCLFVBQUFBLFlBQVksRUFBRSxNQUQ0QjtBQUUxQywrQkFBcUI7QUFGcUIsU0FBL0IsQ0FETztBQUtwQkMsUUFBQUEsVUFBVSxFQUFFLENBQUMsRUFBRDtBQUxRLE9BQWhCLENBQU47O0FBT0EsVUFBSTtBQUNGUixRQUFBQSxjQUFjLENBQUNILE1BQWYsQ0FBc0JZLEdBQXRCLENBQTBCQyxHQUExQixDQUE4QlgsQ0FBQyxDQUFDRSxHQUFGLENBQU1DLE1BQXBDO0FBQ0QsT0FGRCxTQUVVO0FBQ1IsY0FBTUgsQ0FBQyxDQUFDWSxhQUFGLEVBQU47QUFDQVgsUUFBQUEsY0FBYyxDQUFDSCxNQUFmLENBQXNCYSxHQUF0QixDQUEwQlgsQ0FBQyxDQUFDRSxHQUFGLENBQU1DLE1BQWhDO0FBQ0Q7QUFDRixLQWhCQyxDQUFGO0FBa0JELEdBcEJPLENBQVI7QUFzQkFSLEVBQUFBLFFBQVEsQ0FBRSxrQkFBaUJGLFNBQVUsR0FBN0IsRUFBaUMsWUFBWTtBQUNuRCxRQUFJTyxDQUFKLEVBQU9hLE9BQVA7QUFFQSxRQUFJQyxPQUFKO0FBRUFDLElBQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCRCxNQUFBQSxPQUFPLEdBQUcsMkJBQVY7QUFDQWQsTUFBQUEsQ0FBQyxHQUFHLElBQUlULFdBQUosRUFBSjtBQUNBc0IsTUFBQUEsT0FBTyxHQUFHO0FBQ1JSLFFBQUFBLFdBQVcsRUFBRUMsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQmYsV0FBbEIsRUFBK0I7QUFDMUNnQixVQUFBQSxZQUFZLEVBQUUsTUFENEI7QUFFMUMsK0JBQXFCO0FBRnFCLFNBQS9CLENBREw7QUFLUkMsUUFBQUEsVUFBVSxFQUFFLENBQUMsRUFBRDtBQUxKLE9BQVY7QUFPRCxLQVZTLENBQVY7QUFXQU8sSUFBQUEsU0FBUyxDQUFDLGtCQUFrQjtBQUMxQixZQUFNaEIsQ0FBQyxDQUFDWSxhQUFGLEVBQU47QUFDQUUsTUFBQUEsT0FBTyxDQUFDRyxPQUFSO0FBQ0QsS0FIUSxDQUFUO0FBS0FyQixJQUFBQSxFQUFFLENBQUMsOENBQUQsRUFBaUQsWUFBWTtBQUM3REUsTUFBQUEsTUFBTSxDQUFDQyxLQUFQLENBQWFSLFdBQVcsQ0FBQ00sV0FBekI7QUFDRCxLQUZDLENBQUY7QUFJQUQsSUFBQUEsRUFBRSxDQUFDLHNDQUFELEVBQXlDLGtCQUFrQjtBQUMzRCxVQUFJc0IsTUFBTSxHQUFHLE1BQU1sQixDQUFDLENBQUNtQixTQUFGLEVBQW5CO0FBQ0FELE1BQUFBLE1BQU0sQ0FBQ3BCLE1BQVAsQ0FBY2EsR0FBZCxDQUFrQixFQUFsQjtBQUNELEtBSEMsQ0FBRjtBQUtBZixJQUFBQSxFQUFFLENBQUMsOENBQUQsRUFBaUQsa0JBQWtCO0FBQ25FLFVBQUksQ0FBQ3dCLE1BQUQsSUFBVyxNQUFNcEIsQ0FBQyxDQUFDSSxhQUFGLENBQWdCLElBQWhCLEVBQXNCLElBQXRCLEVBQTRCUyxPQUE1QixDQUFyQjtBQUNBZixNQUFBQSxNQUFNLENBQUNDLEtBQVAsQ0FBYXFCLE1BQWI7QUFDQUEsTUFBQUEsTUFBTSxDQUFDdEIsTUFBUCxDQUFjdUIsRUFBZCxDQUFpQkMsQ0FBakIsQ0FBbUIsUUFBbkI7QUFDQUYsTUFBQUEsTUFBTSxDQUFDRyxNQUFQLENBQWN6QixNQUFkLENBQXFCdUIsRUFBckIsQ0FBd0JHLEtBQXhCLENBQThCLENBQTlCO0FBQ0QsS0FMQyxDQUFGO0FBT0E1QixJQUFBQSxFQUFFLENBQUMsb0VBQUQsRUFBdUUsa0JBQWtCO0FBQ3pGLFlBQU1JLENBQUMsQ0FBQ0ksYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0QnFCLGdCQUFFQyxTQUFGLENBQVliLE9BQVosQ0FBNUIsQ0FBTjtBQUNBLFlBQU1iLENBQUMsQ0FBQ0ksYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0QnFCLGdCQUFFQyxTQUFGLENBQVliLE9BQVosQ0FBNUIsRUFBa0RmLE1BQWxELENBQXlENkIsVUFBekQsQ0FBb0VOLEVBQXBFLENBQXVFTyxZQUF2RSxDQUFvRixTQUFwRixDQUFOO0FBQ0QsS0FIQyxDQUFGO0FBS0FoQyxJQUFBQSxFQUFFLENBQUMsb0NBQUQsRUFBdUMsa0JBQWtCO0FBQ3pELFVBQUlpQyxVQUFVLEdBQUcsTUFBTTdCLENBQUMsQ0FBQ0ksYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0QnFCLGdCQUFFQyxTQUFGLENBQVliLE9BQVosQ0FBNUIsQ0FBdkI7QUFDQSxZQUFNYixDQUFDLENBQUNZLGFBQUYsRUFBTjtBQUNBZCxNQUFBQSxNQUFNLENBQUNnQyxLQUFQLENBQWE5QixDQUFDLENBQUMrQixTQUFmLEVBQTBCLElBQTFCO0FBQ0EsVUFBSUMsVUFBVSxHQUFHLE1BQU1oQyxDQUFDLENBQUNJLGFBQUYsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsRUFBNEJxQixnQkFBRUMsU0FBRixDQUFZYixPQUFaLENBQTVCLENBQXZCO0FBQ0FnQixNQUFBQSxVQUFVLENBQUMvQixNQUFYLENBQWtCWSxHQUFsQixDQUFzQkMsR0FBdEIsQ0FBMEJxQixVQUExQjtBQUNELEtBTkMsQ0FBRjtBQVFBcEMsSUFBQUEsRUFBRSxDQUFDLGdDQUFELEVBQW1DLGtCQUFrQjtBQUNyRCxVQUFJLEdBQUdxQyxJQUFILElBQVcsTUFBTWpDLENBQUMsQ0FBQ0ksYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0QlMsT0FBNUIsQ0FBckI7QUFDQW9CLE1BQUFBLElBQUksQ0FBQ25DLE1BQUwsQ0FBWWdDLEtBQVosQ0FBa0IsTUFBTTlCLENBQUMsQ0FBQ2tDLFVBQUYsRUFBeEI7QUFDRCxLQUhDLENBQUY7QUFLQXRDLElBQUFBLEVBQUUsQ0FBQyw2Q0FBRCxFQUFnRCxrQkFBa0I7QUFDbEUsVUFBSXVDLFFBQVEsR0FBRyxNQUFNbkMsQ0FBQyxDQUFDb0MsV0FBRixFQUFyQjtBQUNBRCxNQUFBQSxRQUFRLENBQUNaLE1BQVQsQ0FBZ0J6QixNQUFoQixDQUF1QmdDLEtBQXZCLENBQTZCLENBQTdCO0FBQ0QsS0FIQyxDQUFGO0FBS0FsQyxJQUFBQSxFQUFFLENBQUMsd0JBQUQsRUFBMkIsa0JBQWtCO0FBQzdDLFlBQU1xQyxJQUFJLEdBQUdSLGdCQUFFWSxLQUFGLENBQVF4QixPQUFSLENBQWI7O0FBQ0FvQixNQUFBQSxJQUFJLENBQUNYLENBQUwsR0FBUyxLQUFUO0FBQ0EsWUFBTXRCLENBQUMsQ0FBQ0ksYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0QjZCLElBQTVCLENBQU47QUFDQSxVQUFJRSxRQUFRLEdBQUcsTUFBTW5DLENBQUMsQ0FBQ29DLFdBQUYsRUFBckI7QUFFQUQsTUFBQUEsUUFBUSxDQUFDWixNQUFULENBQWdCekIsTUFBaEIsQ0FBdUJnQyxLQUF2QixDQUE2QixDQUE3QjtBQUNBSyxNQUFBQSxRQUFRLENBQUMsQ0FBRCxDQUFSLENBQVlyQyxNQUFaLENBQW1Cd0MsT0FBbkIsQ0FBMkI7QUFDekJDLFFBQUFBLEVBQUUsRUFBRXZDLENBQUMsQ0FBQytCO0FBRG1CLE9BQTNCO0FBR0FJLE1BQUFBLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWUssWUFBWixDQUF5QjFDLE1BQXpCLENBQWdDd0MsT0FBaEMsQ0FBd0M7QUFDdENHLFFBQUFBLFVBQVUsRUFBRSxjQUQwQjtBQUV0Q2pDLFFBQUFBLFlBQVksRUFBRTtBQUZ3QixPQUF4QztBQUlELEtBZEMsQ0FBRjtBQWdCQVosSUFBQUEsRUFBRSxDQUFDLGtEQUFELEVBQXFELGtCQUFrQjtBQUV2RUksTUFBQUEsQ0FBQyxDQUFDbUIsU0FBRixHQUFjLGtCQUFrQjtBQUM5QixjQUFNdUIsa0JBQUVDLEtBQUYsQ0FBUSxJQUFSLENBQU47QUFDQSxlQUFPLGFBQVA7QUFDRCxPQUhhLENBR1pDLElBSFksQ0FHUDVDLENBSE8sQ0FBZDs7QUFJQSxVQUFJNkMsVUFBVSxHQUFHN0MsQ0FBQyxDQUFDOEMsY0FBRixDQUFpQixXQUFqQixDQUFqQjtBQUNBLFlBQU1KLGtCQUFFQyxLQUFGLENBQVEsRUFBUixDQUFOO0FBQ0EsWUFBTUksQ0FBQyxHQUFHLElBQUlMLGlCQUFKLENBQU0sQ0FBQ00sT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ25DQyxRQUFBQSxVQUFVLENBQUMsTUFBTUQsTUFBTSxDQUFDLElBQUlFLEtBQUosQ0FBVSw2RUFBVixDQUFELENBQWIsRUFBeUcsSUFBekcsQ0FBVjtBQUNBbkQsUUFBQUEsQ0FBQyxDQUFDb0Qsb0JBQUYsQ0FBdUJKLE9BQXZCO0FBQ0QsT0FIUyxDQUFWO0FBSUFoRCxNQUFBQSxDQUFDLENBQUNxRCx1QkFBRixDQUEwQixJQUFJRixLQUFKLENBQVUsWUFBVixDQUExQjtBQUNBLFlBQU1OLFVBQVUsQ0FBQy9DLE1BQVgsQ0FBa0J1QixFQUFsQixDQUFxQk8sWUFBckIsQ0FBa0MsWUFBbEMsQ0FBTjtBQUNBLFlBQU1tQixDQUFOO0FBQ0QsS0FmQyxDQUFGO0FBaUJBbkQsSUFBQUEsRUFBRSxDQUFDLDREQUFELEVBQStELGtCQUFrQjtBQUVqRkksTUFBQUEsQ0FBQyxDQUFDc0QsZ0JBQUYsR0FBcUJ0RCxDQUFDLENBQUNZLGFBQXZCOztBQUNBWixNQUFBQSxDQUFDLENBQUNZLGFBQUYsR0FBa0Isa0JBQWtCO0FBQ2xDLGNBQU04QixrQkFBRUMsS0FBRixDQUFRLEdBQVIsQ0FBTjtBQUNBLGNBQU0sS0FBS1csZ0JBQUwsRUFBTjtBQUNELE9BSGlCLENBR2hCVixJQUhnQixDQUdYNUMsQ0FIVyxDQUFsQjs7QUFJQSxZQUFNQSxDQUFDLENBQUNJLGFBQUYsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsRUFBNEJTLE9BQTVCLENBQU47QUFDQSxZQUFNa0MsQ0FBQyxHQUFHLElBQUlMLGlCQUFKLENBQU0sQ0FBQ00sT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ25DQyxRQUFBQSxVQUFVLENBQUMsTUFBTUQsTUFBTSxDQUFDLElBQUlFLEtBQUosQ0FBVSw2RUFBVixDQUFELENBQWIsRUFBeUcsSUFBekcsQ0FBVjtBQUNBbkQsUUFBQUEsQ0FBQyxDQUFDb0Qsb0JBQUYsQ0FBdUJKLE9BQXZCO0FBQ0QsT0FIUyxDQUFWO0FBSUFoRCxNQUFBQSxDQUFDLENBQUNxRCx1QkFBRixDQUEwQixJQUFJRixLQUFKLENBQVUsWUFBVixDQUExQjtBQUNBLFlBQU1KLENBQU47QUFDQSxZQUFNL0MsQ0FBQyxDQUFDOEMsY0FBRixDQUFpQixZQUFqQixFQUErQmhELE1BQS9CLENBQXNDdUIsRUFBdEMsQ0FBeUNPLFlBQXpDLENBQXNELFdBQXRELENBQU47QUFDRCxLQWZDLENBQUY7QUFpQkFoQyxJQUFBQSxFQUFFLENBQUMsb0RBQUQsRUFBdUQsa0JBQWtCO0FBRXpFSSxNQUFBQSxDQUFDLENBQUNzRCxnQkFBRixHQUFxQnRELENBQUMsQ0FBQ1ksYUFBdkI7O0FBQ0FaLE1BQUFBLENBQUMsQ0FBQ1ksYUFBRixHQUFrQixrQkFBa0I7QUFDbEMsY0FBTThCLGtCQUFFQyxLQUFGLENBQVEsR0FBUixDQUFOO0FBQ0EsY0FBTSxLQUFLVyxnQkFBTCxFQUFOO0FBQ0QsT0FIaUIsQ0FHaEJWLElBSGdCLENBR1g1QyxDQUhXLENBQWxCOztBQUtBLFlBQU1BLENBQUMsQ0FBQ0ksYUFBRixDQUFnQixJQUFoQixFQUFzQixJQUF0QixFQUE0QnFCLGdCQUFFQyxTQUFGLENBQVliLE9BQVosQ0FBNUIsQ0FBTjtBQUNBLFlBQU1rQyxDQUFDLEdBQUcsSUFBSUwsaUJBQUosQ0FBTSxDQUFDTSxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDbkNDLFFBQUFBLFVBQVUsQ0FBQyxNQUFNRCxNQUFNLENBQUMsSUFBSUUsS0FBSixDQUFVLDZFQUFWLENBQUQsQ0FBYixFQUF5RyxJQUF6RyxDQUFWO0FBQ0FuRCxRQUFBQSxDQUFDLENBQUNvRCxvQkFBRixDQUF1QkosT0FBdkI7QUFDRCxPQUhTLENBQVY7QUFJQWhELE1BQUFBLENBQUMsQ0FBQ3FELHVCQUFGLENBQTBCLElBQUlGLEtBQUosQ0FBVSxZQUFWLENBQTFCO0FBQ0EsWUFBTUosQ0FBTjtBQUVBLFlBQU0vQyxDQUFDLENBQUM4QyxjQUFGLENBQWlCLFlBQWpCLEVBQStCaEQsTUFBL0IsQ0FBc0N1QixFQUF0QyxDQUF5Q08sWUFBekMsQ0FBc0QsV0FBdEQsQ0FBTjtBQUNBLFlBQU1jLGtCQUFFQyxLQUFGLENBQVEsR0FBUixDQUFOO0FBRUEsWUFBTTNDLENBQUMsQ0FBQzhDLGNBQUYsQ0FBaUIsZUFBakIsRUFBa0MsSUFBbEMsRUFBd0MsSUFBeEMsRUFBOENyQixnQkFBRUMsU0FBRixDQUFZYixPQUFaLENBQTlDLENBQU47QUFDQSxZQUFNYixDQUFDLENBQUNZLGFBQUYsRUFBTjtBQUNELEtBckJDLENBQUY7QUF1QkFoQixJQUFBQSxFQUFFLENBQUMsbURBQUQsRUFBc0Qsa0JBQWtCO0FBRXhFLFlBQU1JLENBQUMsQ0FBQzhDLGNBQUYsQ0FBaUIsZUFBakIsRUFBa0MsSUFBbEMsRUFBd0MsSUFBeEMsRUFBOEM7QUFDbER6QyxRQUFBQSxXQUFXLEVBQUVDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JmLFdBQWxCLEVBQStCO0FBQzFDZ0IsVUFBQUEsWUFBWSxFQUFFLE1BRDRCO0FBRTFDLCtCQUFxQjtBQUZxQixTQUEvQixDQURxQztBQUtsREMsUUFBQUEsVUFBVSxFQUFFLENBQUMsRUFBRDtBQUxzQyxPQUE5QyxDQUFOO0FBUUFULE1BQUFBLENBQUMsQ0FBQ3VELFFBQUYsQ0FBV3pELE1BQVgsQ0FBa0JnQyxLQUFsQixDQUF3QixLQUF4QjtBQUNELEtBWEMsQ0FBRjtBQWFBbkMsSUFBQUEsUUFBUSxDQUFDLG9CQUFELEVBQXVCLFlBQVk7QUFDekNDLE1BQUFBLEVBQUUsQ0FBQyw4Q0FBRCxFQUFpRCxrQkFBa0I7QUFDbkUsY0FBTUksQ0FBQyxDQUFDSSxhQUFGLENBQWdCLElBQWhCLEVBQXNCLElBQXRCLEVBQTRCO0FBQUNDLFVBQUFBLFdBQVcsRUFBRW9CLGdCQUFFWSxLQUFGLENBQVE3QyxXQUFSLENBQWQ7QUFBb0NpQixVQUFBQSxVQUFVLEVBQUUsQ0FBQyxFQUFEO0FBQWhELFNBQTVCLENBQU47QUFDQVQsUUFBQUEsQ0FBQyxDQUFDdUQsUUFBRixDQUFXekQsTUFBWCxDQUFrQmdDLEtBQWxCLENBQXdCLEtBQXhCO0FBQ0QsT0FIQyxDQUFGO0FBSUQsS0FMTyxDQUFSO0FBT0FsQyxJQUFBQSxFQUFFLENBQUMsa0RBQUQsRUFBcUQsa0JBQWtCO0FBQ3ZFLFVBQUksQ0FBQ3dCLE1BQUQsSUFBVyxNQUFNcEIsQ0FBQyxDQUFDSSxhQUFGLENBQWdCLElBQWhCLEVBQXNCLElBQXRCLEVBQTRCUyxPQUE1QixDQUFyQjtBQUNBYixNQUFBQSxDQUFDLENBQUN3RCxnQkFBRixDQUFtQnBDLE1BQW5CLEVBQTJCdEIsTUFBM0IsQ0FBa0NhLEdBQWxDLENBQXNDWCxDQUF0QztBQUNELEtBSEMsQ0FBRjtBQUtBTCxJQUFBQSxRQUFRLENBQUMsZUFBRCxFQUFrQixZQUFZO0FBQ3BDLFVBQUlLLENBQUMsR0FBRyxJQUFJVCxXQUFKLEVBQVI7QUFFQSxVQUFJa0UsTUFBTSxHQUFHLEVBQWI7O0FBQ0F6RCxNQUFBQSxDQUFDLENBQUNtQixTQUFGLEdBQWMsa0JBQWtCO0FBQzlCLGNBQU11QixrQkFBRUMsS0FBRixDQUFRYyxNQUFSLENBQU47QUFDQSxlQUFPQyxJQUFJLENBQUNDLEdBQUwsRUFBUDtBQUNELE9BSGEsQ0FHWmYsSUFIWSxDQUdQNUMsQ0FITyxDQUFkOztBQUtBQSxNQUFBQSxDQUFDLENBQUNvQyxXQUFGLEdBQWdCLGtCQUFrQjtBQUNoQyxjQUFNTSxrQkFBRUMsS0FBRixDQUFRYyxNQUFSLENBQU47QUFDQSxjQUFNLElBQUlOLEtBQUosQ0FBVSxXQUFWLENBQU47QUFDRCxPQUhlLENBR2RQLElBSGMsQ0FHVDVDLENBSFMsQ0FBaEI7O0FBS0FnQixNQUFBQSxTQUFTLENBQUMsa0JBQWtCO0FBQzFCLGNBQU1oQixDQUFDLENBQUM0RCxzQkFBRixFQUFOO0FBQ0QsT0FGUSxDQUFUO0FBSUFoRSxNQUFBQSxFQUFFLENBQUMsd0VBQUQsRUFBMkUsa0JBQWtCO0FBQzdGLFlBQUlpRSxPQUFPLEdBQUcsRUFBZDtBQUNBLFlBQUlDLElBQUksR0FBRyxFQUFYOztBQUNBLGFBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0YsT0FBcEIsRUFBNkJFLENBQUMsRUFBOUIsRUFBa0M7QUFDaENELFVBQUFBLElBQUksQ0FBQ0UsSUFBTCxDQUFVaEUsQ0FBQyxDQUFDOEMsY0FBRixDQUFpQixXQUFqQixDQUFWO0FBQ0Q7O0FBQ0QsWUFBSW1CLE9BQU8sR0FBRyxNQUFNdkIsa0JBQUV3QixHQUFGLENBQU1KLElBQU4sQ0FBcEI7O0FBQ0EsYUFBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRixPQUFwQixFQUE2QkUsQ0FBQyxFQUE5QixFQUFrQztBQUNoQyxjQUFJRSxPQUFPLENBQUNGLENBQUQsQ0FBUCxJQUFjRSxPQUFPLENBQUNGLENBQUMsR0FBRyxDQUFMLENBQXpCLEVBQWtDO0FBQ2hDLGtCQUFNLElBQUlaLEtBQUosQ0FBVSx5QkFBVixDQUFOO0FBQ0Q7QUFDRjtBQUNGLE9BWkMsQ0FBRjtBQWNBdkQsTUFBQUEsRUFBRSxDQUFDLDZDQUFELEVBQWdELGtCQUFrQjtBQUNsRSxZQUFJaUUsT0FBTyxHQUFHLEVBQWQ7QUFDQSxZQUFJQyxJQUFJLEdBQUcsRUFBWDs7QUFDQSxhQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdGLE9BQXBCLEVBQTZCRSxDQUFDLEVBQTlCLEVBQWtDO0FBQ2hDLGNBQUlBLENBQUMsS0FBSyxDQUFWLEVBQWE7QUFDWEQsWUFBQUEsSUFBSSxDQUFDRSxJQUFMLENBQVVoRSxDQUFDLENBQUM4QyxjQUFGLENBQWlCLGFBQWpCLENBQVY7QUFDRCxXQUZELE1BRU87QUFDTGdCLFlBQUFBLElBQUksQ0FBQ0UsSUFBTCxDQUFVaEUsQ0FBQyxDQUFDOEMsY0FBRixDQUFpQixXQUFqQixDQUFWO0FBQ0Q7QUFDRjs7QUFDRCxZQUFJbUIsT0FBTyxHQUFHLE1BQU12QixrQkFBRXlCLE1BQUYsQ0FBU0wsSUFBVCxDQUFwQjs7QUFDQSxhQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcsQ0FBcEIsRUFBdUJBLENBQUMsRUFBeEIsRUFBNEI7QUFDMUIsY0FBSUUsT0FBTyxDQUFDRixDQUFELENBQVAsQ0FBV0ssS0FBWCxNQUFzQkgsT0FBTyxDQUFDRixDQUFDLEdBQUcsQ0FBTCxDQUFQLENBQWVLLEtBQWYsRUFBMUIsRUFBa0Q7QUFDaEQsa0JBQU0sSUFBSWpCLEtBQUosQ0FBVSx5QkFBVixDQUFOO0FBQ0Q7QUFDRjs7QUFDRGMsUUFBQUEsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXSSxNQUFYLEdBQW9CQyxPQUFwQixDQUE0QnhFLE1BQTVCLENBQW1DeUUsT0FBbkMsQ0FBMkMsV0FBM0M7O0FBQ0EsYUFBSyxJQUFJUixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRixPQUFwQixFQUE2QkUsQ0FBQyxFQUE5QixFQUFrQztBQUNoQyxjQUFJRSxPQUFPLENBQUNGLENBQUQsQ0FBUCxDQUFXSyxLQUFYLE1BQXNCSCxPQUFPLENBQUNGLENBQUMsR0FBRyxDQUFMLENBQVAsQ0FBZUssS0FBZixFQUExQixFQUFrRDtBQUNoRCxrQkFBTSxJQUFJakIsS0FBSixDQUFVLHlCQUFWLENBQU47QUFDRDtBQUNGO0FBQ0YsT0F0QkMsQ0FBRjtBQXdCQXZELE1BQUFBLEVBQUUsQ0FBQyw0Q0FBRCxFQUErQyxrQkFBa0I7QUFDakUsWUFBSWlFLE9BQU8sR0FBRyxFQUFkO0FBQ0EsWUFBSUMsSUFBSSxHQUFHLEVBQVg7O0FBQ0EsYUFBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRixPQUFwQixFQUE2QkUsQ0FBQyxFQUE5QixFQUFrQztBQUNoQ0QsVUFBQUEsSUFBSSxDQUFDRSxJQUFMLENBQVVoRSxDQUFDLENBQUM4QyxjQUFGLENBQWlCLFdBQWpCLENBQVY7QUFDRDs7QUFDRCxZQUFJbUIsT0FBTyxHQUFHLE1BQU12QixrQkFBRXdCLEdBQUYsQ0FBTUosSUFBTixDQUFwQjtBQUNBQSxRQUFBQSxJQUFJLEdBQUcsRUFBUDs7QUFDQSxhQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdGLE9BQXBCLEVBQTZCRSxDQUFDLEVBQTlCLEVBQWtDO0FBQ2hDRCxVQUFBQSxJQUFJLENBQUNFLElBQUwsQ0FBVWhFLENBQUMsQ0FBQzhDLGNBQUYsQ0FBaUIsV0FBakIsQ0FBVjtBQUNEOztBQUNEbUIsUUFBQUEsT0FBTyxHQUFHLE1BQU12QixrQkFBRXdCLEdBQUYsQ0FBTUosSUFBTixDQUFoQjs7QUFDQSxhQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdGLE9BQXBCLEVBQTZCRSxDQUFDLEVBQTlCLEVBQWtDO0FBQ2hDLGNBQUlFLE9BQU8sQ0FBQ0YsQ0FBRCxDQUFQLElBQWNFLE9BQU8sQ0FBQ0YsQ0FBQyxHQUFHLENBQUwsQ0FBekIsRUFBa0M7QUFDaEMsa0JBQU0sSUFBSVosS0FBSixDQUFVLHlCQUFWLENBQU47QUFDRDtBQUNGO0FBQ0YsT0FqQkMsQ0FBRjtBQWtCRCxLQTFFTyxDQUFSO0FBNEVBeEQsSUFBQUEsUUFBUSxDQUFDLFVBQUQsRUFBYSxZQUFZO0FBQy9CNkUsTUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QixjQUFNeEUsQ0FBQyxDQUFDSSxhQUFGLENBQWdCLElBQWhCLEVBQXNCLElBQXRCLEVBQTRCUyxPQUE1QixDQUFOO0FBQ0QsT0FGSyxDQUFOO0FBR0FsQixNQUFBQSxRQUFRLENBQUMsU0FBRCxFQUFZLFlBQVk7QUFDOUJDLFFBQUFBLEVBQUUsQ0FBQyx5QkFBRCxFQUE0QixZQUFZO0FBQ3hDSSxVQUFBQSxDQUFDLENBQUN5RSxtQkFBRixDQUFzQjNFLE1BQXRCLENBQTZCZ0MsS0FBN0IsQ0FBbUMsS0FBbkM7QUFDRCxTQUZDLENBQUY7QUFHQWxDLFFBQUFBLEVBQUUsQ0FBQyx1Q0FBRCxFQUEwQyxrQkFBa0I7QUFDNUQsZ0JBQU1JLENBQUMsQ0FBQzBFLFFBQUYsQ0FBVyxTQUFYLEVBQXNCLEVBQXRCLENBQU47QUFDQTFFLFVBQUFBLENBQUMsQ0FBQ3lFLG1CQUFGLENBQXNCM0UsTUFBdEIsQ0FBNkJnQyxLQUE3QixDQUFtQyxFQUFuQztBQUNELFNBSEMsQ0FBRjtBQUlELE9BUk8sQ0FBUjtBQVNBbkMsTUFBQUEsUUFBUSxDQUFDLFVBQUQsRUFBYSxZQUFZO0FBQy9CQyxRQUFBQSxFQUFFLENBQUMsNkJBQUQsRUFBZ0MsWUFBWTtBQUM1Q0ksVUFBQUEsQ0FBQyxDQUFDMkUsY0FBRixDQUFpQjdFLE1BQWpCLENBQXdCZ0MsS0FBeEIsQ0FBOEIsQ0FBOUI7QUFDRCxTQUZDLENBQUY7QUFHQWxDLFFBQUFBLEVBQUUsQ0FBQyx1Q0FBRCxFQUEwQyxrQkFBa0I7QUFDNUQsZ0JBQU1JLENBQUMsQ0FBQzBFLFFBQUYsQ0FBVyxVQUFYLEVBQXVCLEVBQXZCLENBQU47QUFDQTFFLFVBQUFBLENBQUMsQ0FBQzJFLGNBQUYsQ0FBaUI3RSxNQUFqQixDQUF3QmdDLEtBQXhCLENBQThCLEVBQTlCO0FBQ0QsU0FIQyxDQUFGO0FBSUQsT0FSTyxDQUFSO0FBU0QsS0F0Qk8sQ0FBUjtBQXdCQW5DLElBQUFBLFFBQVEsQ0FBQyxnQkFBRCxFQUFtQixZQUFZO0FBQ3JDb0IsTUFBQUEsVUFBVSxDQUFDLGtCQUFrQjtBQUMzQixjQUFNZixDQUFDLENBQUNJLGFBQUYsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsRUFBNEJTLE9BQTVCLENBQU47QUFDRCxPQUZTLENBQVY7QUFHQUcsTUFBQUEsU0FBUyxDQUFDLGtCQUFrQjtBQUMxQixjQUFNaEIsQ0FBQyxDQUFDWSxhQUFGLEVBQU47QUFDRCxPQUZRLENBQVQ7QUFHQWhCLE1BQUFBLEVBQUUsQ0FBQyxpQ0FBRCxFQUFvQyxrQkFBa0I7QUFDdEQsY0FBTUksQ0FBQyxDQUFDMEUsUUFBRixDQUFXRSxTQUFYLEVBQXNCQSxTQUF0QixFQUFpQ0EsU0FBakMsRUFBNENBLFNBQTVDLEVBQXVELElBQXZELENBQU47QUFDQSxjQUFNNUUsQ0FBQyxDQUFDNkUsV0FBRixHQUFnQi9FLE1BQWhCLENBQXVCNkIsVUFBdkIsQ0FBa0NtRCxJQUFsQyxDQUF1Q0MsUUFBdkMsQ0FBZ0QsVUFBaEQsRUFBNEQsSUFBNUQsQ0FBTjtBQUNBLGNBQU0vRSxDQUFDLENBQUMwRSxRQUFGLENBQVcsU0FBWCxFQUFzQixJQUF0QixDQUFOO0FBQ0EsY0FBTTFFLENBQUMsQ0FBQzZFLFdBQUYsR0FBZ0IvRSxNQUFoQixDQUF1QjZCLFVBQXZCLENBQWtDcUQsSUFBbEMsQ0FBdUNsRCxLQUF2QyxDQUE2QztBQUNqRG1ELFVBQUFBLFFBQVEsRUFBRSxJQUR1QztBQUVqREMsVUFBQUEsT0FBTyxFQUFFO0FBRndDLFNBQTdDLENBQU47QUFJQSxjQUFNbEYsQ0FBQyxDQUFDMEUsUUFBRixDQUFXRSxTQUFYLEVBQXNCQSxTQUF0QixFQUFpQ0EsU0FBakMsRUFBNENBLFNBQTVDLEVBQXVELElBQXZELENBQU47QUFDQSxjQUFNNUUsQ0FBQyxDQUFDNkUsV0FBRixHQUFnQi9FLE1BQWhCLENBQXVCNkIsVUFBdkIsQ0FBa0NxRCxJQUFsQyxDQUF1Q2xELEtBQXZDLENBQTZDO0FBQ2pEbUQsVUFBQUEsUUFBUSxFQUFFLElBRHVDO0FBRWpEQyxVQUFBQSxPQUFPLEVBQUU7QUFGd0MsU0FBN0MsQ0FBTjtBQUlELE9BYkMsQ0FBRjtBQWNELEtBckJPLENBQVI7QUF1QkF2RixJQUFBQSxRQUFRLENBQUMscUJBQUQsRUFBd0IsWUFBWTtBQUMxQ0MsTUFBQUEsRUFBRSxDQUFDLHdEQUFELEVBQTJELGtCQUFrQjtBQUM3RSxjQUFNdUYsT0FBTyxHQUFHO0FBQ2Q5RSxVQUFBQSxXQUFXLEVBQUVDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JmLFdBQWxCLEVBQStCO0FBQzFDZ0IsWUFBQUEsWUFBWSxFQUFFLE1BRDRCO0FBRTFDLGlDQUFxQixjQUZxQjtBQUcxQyxnQ0FBb0IsSUFIc0I7QUFJMUMsOEJBQWtCO0FBSndCLFdBQS9CO0FBREMsU0FBaEI7QUFRQSxjQUFNUixDQUFDLENBQUNJLGFBQUYsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsRUFBNEIrRSxPQUE1QixFQUFxQ3JGLE1BQXJDLENBQTRDNkIsVUFBNUMsQ0FBdUROLEVBQXZELENBQTBETyxZQUExRCxDQUNGLG9CQURFLENBQU47QUFFRCxPQVhDLENBQUY7QUFZRCxLQWJPLENBQVI7QUFlQWpDLElBQUFBLFFBQVEsQ0FBQyxVQUFELEVBQWEsWUFBWTtBQUMvQixVQUFJeUIsTUFBSjtBQUNBTCxNQUFBQSxVQUFVLENBQUMsa0JBQWtCO0FBQzNCLFNBQUNLLE1BQUQsSUFBVyxNQUFNcEIsQ0FBQyxDQUFDSSxhQUFGLENBQWdCLElBQWhCLEVBQXNCLElBQXRCLEVBQTRCUyxPQUE1QixDQUFqQjtBQUNELE9BRlMsQ0FBVjtBQUdBbEIsTUFBQUEsUUFBUSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUNuQ0MsUUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUM3QkksVUFBQUEsQ0FBQyxDQUFDb0YsV0FBRixDQUFjdEYsTUFBZCxDQUFxQnVCLEVBQXJCLENBQXdCZ0UsRUFBeEIsQ0FBMkJDLFVBQTNCLENBQXNDQyxRQUF0QztBQUNELFNBRkMsQ0FBRjtBQUdBM0YsUUFBQUEsRUFBRSxDQUFDLHFCQUFELEVBQXdCLFlBQVk7QUFDcENJLFVBQUFBLENBQUMsQ0FBQ29GLFdBQUYsQ0FBY2hFLE1BQWQsRUFBc0J0QixNQUF0QixDQUE2QnVCLEVBQTdCLENBQWdDbUUsS0FBaEM7QUFDRCxTQUZDLENBQUY7QUFHQTVGLFFBQUFBLEVBQUUsQ0FBQywrQ0FBRCxFQUFrRCxZQUFZO0FBQzlELFdBQUMsTUFBTTtBQUFFSSxZQUFBQSxDQUFDLENBQUNvRixXQUFGLENBQWMsS0FBZDtBQUF1QixXQUFoQyxFQUFrQ3RGLE1BQWxDLENBQXlDMkYsS0FBekM7QUFDRCxTQUZDLENBQUY7QUFHRCxPQVZPLENBQVI7QUFZQTlGLE1BQUFBLFFBQVEsQ0FBQyxvQkFBRCxFQUF1QixZQUFZO0FBQ3pDQyxRQUFBQSxFQUFFLENBQUMsY0FBRCxFQUFpQixZQUFZO0FBQzdCSSxVQUFBQSxDQUFDLENBQUMwRixpQkFBRixDQUFvQjVGLE1BQXBCLENBQTJCdUIsRUFBM0IsQ0FBOEJnRSxFQUE5QixDQUFpQ0MsVUFBakMsQ0FBNENDLFFBQTVDO0FBQ0QsU0FGQyxDQUFGO0FBR0EzRixRQUFBQSxFQUFFLENBQUMsd0JBQUQsRUFBMkIsWUFBWTtBQUN2Q0ksVUFBQUEsQ0FBQyxDQUFDMEYsaUJBQUYsQ0FBb0J0RSxNQUFwQixFQUE0QnRCLE1BQTVCLENBQW1DdUIsRUFBbkMsQ0FBc0NnRSxFQUF0QyxDQUF5Q0MsVUFBekMsQ0FBb0RLLEtBQXBEO0FBQ0QsU0FGQyxDQUFGO0FBR0EvRixRQUFBQSxFQUFFLENBQUMsK0NBQUQsRUFBa0QsWUFBWTtBQUM5RCxXQUFDLE1BQU07QUFBRUksWUFBQUEsQ0FBQyxDQUFDMEYsaUJBQUYsQ0FBb0IsS0FBcEI7QUFBNkIsV0FBdEMsRUFBd0M1RixNQUF4QyxDQUErQzJGLEtBQS9DO0FBQ0QsU0FGQyxDQUFGO0FBR0QsT0FWTyxDQUFSO0FBWUE5RixNQUFBQSxRQUFRLENBQUMsV0FBRCxFQUFjLFlBQVk7QUFDaENDLFFBQUFBLEVBQUUsQ0FBQyxnQ0FBRCxFQUFtQyxZQUFZO0FBQy9DSSxVQUFBQSxDQUFDLENBQUM0RixRQUFGLENBQVc5RixNQUFYLENBQWtCdUIsRUFBbEIsQ0FBcUJnRSxFQUFyQixDQUF3QkMsVUFBeEIsQ0FBbUNDLFFBQW5DO0FBQ0QsU0FGQyxDQUFGO0FBR0EzRixRQUFBQSxFQUFFLENBQUMsd0NBQUQsRUFBMkMsWUFBWTtBQUN2REksVUFBQUEsQ0FBQyxDQUFDNEYsUUFBRixDQUFXeEUsTUFBWCxFQUFtQnRCLE1BQW5CLENBQTBCdUIsRUFBMUIsQ0FBNkJDLENBQTdCLENBQStCLFNBQS9CO0FBQ0QsU0FGQyxDQUFGO0FBR0ExQixRQUFBQSxFQUFFLENBQUMsK0NBQUQsRUFBa0QsWUFBWTtBQUM5RCxXQUFDLE1BQU07QUFBRUksWUFBQUEsQ0FBQyxDQUFDNEYsUUFBRjtBQUFlLFdBQXhCLEVBQTBCOUYsTUFBMUIsQ0FBaUMyRixLQUFqQztBQUNELFNBRkMsQ0FBRjtBQUdELE9BVk8sQ0FBUjtBQVlBOUYsTUFBQUEsUUFBUSxDQUFDLHNCQUFELEVBQXlCLFlBQVk7QUFDM0NDLFFBQUFBLEVBQUUsQ0FBQyx3Q0FBRCxFQUEyQyxZQUFZO0FBQ3ZELGdCQUFNaUcsU0FBUyxHQUFHL0UsT0FBTyxDQUFDZ0YsSUFBUixDQUFhOUYsQ0FBYixFQUFnQixtQkFBaEIsQ0FBbEI7QUFDQTZGLFVBQUFBLFNBQVMsQ0FBQ0UsT0FBVixDQUFrQixDQUFDLENBQUMsTUFBRCxFQUFTLE9BQVQsQ0FBRCxFQUFvQixDQUFDLEtBQUQsQ0FBcEIsQ0FBbEI7QUFDQSxXQUFDLE1BQU07QUFBRS9GLFlBQUFBLENBQUMsQ0FBQ2dHLG1CQUFGO0FBQTBCLFdBQW5DLEVBQXFDbEcsTUFBckMsQ0FBNEMyRixLQUE1QztBQUNBSSxVQUFBQSxTQUFTLENBQUNFLE9BQVYsQ0FBa0IsQ0FBQyxDQUFDLE1BQUQsRUFBUyxPQUFULENBQUQsRUFBb0IsQ0FBQyxLQUFELEVBQVEsTUFBUixFQUFnQixLQUFoQixDQUFwQixDQUFsQjtBQUNBLFdBQUMsTUFBTTtBQUFFL0YsWUFBQUEsQ0FBQyxDQUFDZ0csbUJBQUY7QUFBMEIsV0FBbkMsRUFBcUNsRyxNQUFyQyxDQUE0QzJGLEtBQTVDO0FBQ0FJLFVBQUFBLFNBQVMsQ0FBQzVFLE9BQVY7QUFDRCxTQVBDLENBQUY7QUFRQXJCLFFBQUFBLEVBQUUsQ0FBQyxnQ0FBRCxFQUFtQyxZQUFZO0FBQy9DLGdCQUFNaUcsU0FBUyxHQUFHL0UsT0FBTyxDQUFDZ0YsSUFBUixDQUFhOUYsQ0FBYixFQUFnQixtQkFBaEIsQ0FBbEI7QUFDQTZGLFVBQUFBLFNBQVMsQ0FBQ0UsT0FBVixDQUFrQixDQUFDLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBRCxFQUFtQixDQUFDLFFBQUQsRUFBVyxNQUFYLENBQW5CLENBQWxCO0FBQ0EsV0FBQyxNQUFNO0FBQUUvRixZQUFBQSxDQUFDLENBQUNnRyxtQkFBRjtBQUEwQixXQUFuQyxFQUFxQ2xHLE1BQXJDLENBQTRDMkYsS0FBNUM7QUFDQUksVUFBQUEsU0FBUyxDQUFDNUUsT0FBVjtBQUNELFNBTEMsQ0FBRjtBQU1BckIsUUFBQUEsRUFBRSxDQUFDLGdDQUFELEVBQW1DLFlBQVk7QUFDL0MsZ0JBQU1pRyxTQUFTLEdBQUcvRSxPQUFPLENBQUNnRixJQUFSLENBQWE5RixDQUFiLEVBQWdCLG1CQUFoQixDQUFsQjtBQUNBNkYsVUFBQUEsU0FBUyxDQUFDRSxPQUFWLENBQWtCLENBQUMsQ0FBQyxNQUFELEVBQVMsTUFBVCxDQUFELEVBQW1CLENBQUMsS0FBRCxFQUFRLE1BQVIsQ0FBbkIsQ0FBbEI7QUFDQSxXQUFDLE1BQU07QUFBRS9GLFlBQUFBLENBQUMsQ0FBQ2dHLG1CQUFGO0FBQTBCLFdBQW5DLEVBQXFDbEcsTUFBckMsQ0FBNEMyRixLQUE1QztBQUNBSSxVQUFBQSxTQUFTLENBQUM1RSxPQUFWO0FBQ0QsU0FMQyxDQUFGO0FBTUFyQixRQUFBQSxFQUFFLENBQUMsaURBQUQsRUFBb0QsWUFBWTtBQUNoRSxnQkFBTWlHLFNBQVMsR0FBRy9FLE9BQU8sQ0FBQ2dGLElBQVIsQ0FBYTlGLENBQWIsRUFBZ0IsbUJBQWhCLENBQWxCO0FBQ0E2RixVQUFBQSxTQUFTLENBQUNFLE9BQVYsQ0FBa0IsQ0FBQyxDQUFDLE1BQUQsRUFBUyxRQUFULENBQUQsQ0FBbEI7QUFDQS9GLFVBQUFBLENBQUMsQ0FBQ2dHLG1CQUFGLENBQXNCLElBQXRCLEVBQTRCLE1BQTVCLEVBQW9DLFVBQXBDLEVBQWdEbEcsTUFBaEQsQ0FBdUR1QixFQUF2RCxDQUEwRDRFLElBQTFEO0FBQ0FKLFVBQUFBLFNBQVMsQ0FBQzVFLE9BQVY7QUFDRCxTQUxDLENBQUY7QUFNQXJCLFFBQUFBLEVBQUUsQ0FBQyxxQ0FBRCxFQUF3QyxZQUFZO0FBQ3BELGdCQUFNaUcsU0FBUyxHQUFHL0UsT0FBTyxDQUFDZ0YsSUFBUixDQUFhOUYsQ0FBYixFQUFnQixtQkFBaEIsQ0FBbEI7QUFDQTZGLFVBQUFBLFNBQVMsQ0FBQ0UsT0FBVixDQUFrQixDQUFDLENBQUMsTUFBRCxFQUFTLFFBQVQsQ0FBRCxDQUFsQjtBQUNBL0YsVUFBQUEsQ0FBQyxDQUFDZ0csbUJBQUYsQ0FBc0IsSUFBdEIsRUFBNEIsTUFBNUIsRUFBb0MsVUFBcEMsRUFBZ0RsRyxNQUFoRCxDQUF1RHVCLEVBQXZELENBQTBENEUsSUFBMUQ7QUFDQUosVUFBQUEsU0FBUyxDQUFDNUUsT0FBVjtBQUNELFNBTEMsQ0FBRjtBQU1BckIsUUFBQUEsRUFBRSxDQUFDLHNEQUFELEVBQXlELFlBQVk7QUFDckUsZ0JBQU1pRyxTQUFTLEdBQUcvRSxPQUFPLENBQUNnRixJQUFSLENBQWE5RixDQUFiLEVBQWdCLG1CQUFoQixDQUFsQjtBQUNBNkYsVUFBQUEsU0FBUyxDQUFDRSxPQUFWLENBQWtCLENBQUMsQ0FBQyxNQUFELEVBQVMsUUFBVCxDQUFELENBQWxCO0FBQ0EvRixVQUFBQSxDQUFDLENBQUNnRyxtQkFBRixDQUFzQixJQUF0QixFQUE0QixLQUE1QixFQUFtQyxVQUFuQyxFQUErQ2xHLE1BQS9DLENBQXNEdUIsRUFBdEQsQ0FBeURtRSxLQUF6RDtBQUNBeEYsVUFBQUEsQ0FBQyxDQUFDZ0csbUJBQUYsQ0FBc0IsSUFBdEIsRUFBNEIsTUFBNUIsRUFBb0MsTUFBcEMsRUFBNENsRyxNQUE1QyxDQUFtRHVCLEVBQW5ELENBQXNEbUUsS0FBdEQ7QUFDQUssVUFBQUEsU0FBUyxDQUFDNUUsT0FBVjtBQUNELFNBTkMsQ0FBRjtBQU9ELE9BeENPLENBQVI7QUF5Q0QsS0FsRk8sQ0FBUjtBQW9GQXRCLElBQUFBLFFBQVEsQ0FBQyx3QkFBRCxFQUEyQixZQUFZO0FBQzdDLFVBQUl1RyxlQUFKO0FBQ0FuRixNQUFBQSxVQUFVLENBQUMsa0JBQWtCO0FBQzNCbUYsUUFBQUEsZUFBZSxHQUFHeEMsSUFBSSxDQUFDQyxHQUFMLEVBQWxCO0FBQ0EzRCxRQUFBQSxDQUFDLENBQUNtRyxrQkFBRixHQUF1QixLQUF2QjtBQUNBLGNBQU1uRyxDQUFDLENBQUM4QyxjQUFGLENBQWlCLGVBQWpCLEVBQWtDLElBQWxDLEVBQXdDLElBQXhDLEVBQThDO0FBQUN6QyxVQUFBQSxXQUFXLEVBQUUsRUFBQyxHQUFHYjtBQUFKLFdBQWQ7QUFBZ0NpQixVQUFBQSxVQUFVLEVBQUUsQ0FBQyxFQUFEO0FBQTVDLFNBQTlDLENBQU47QUFDRCxPQUpTLENBQVY7QUFLQWQsTUFBQUEsUUFBUSxDQUFDLGVBQUQsRUFBa0IsWUFBWTtBQUNwQ0MsUUFBQUEsRUFBRSxDQUFDLHNDQUFELEVBQXlDLFlBQVk7QUFDckRFLFVBQUFBLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhQyxDQUFDLENBQUNvRyxZQUFmO0FBQ0F0RyxVQUFBQSxNQUFNLENBQUNDLEtBQVAsQ0FBYUMsQ0FBQyxDQUFDb0csWUFBRixDQUFlQyxRQUE1QjtBQUNELFNBSEMsQ0FBRjtBQUtBekcsUUFBQUEsRUFBRSxDQUFDLHdEQUFELEVBQTJELFlBQVk7QUFDdkUsY0FBSTtBQUFDMEcsWUFBQUEsbUJBQUQ7QUFBc0JDLFlBQUFBO0FBQXRCLGNBQTJDdkcsQ0FBQyxDQUFDb0csWUFBakQ7QUFDQUUsVUFBQUEsbUJBQW1CLENBQUN4RyxNQUFwQixDQUEyQmdGLElBQTNCLENBQWdDdkQsTUFBaEMsQ0FBdUMsQ0FBdkM7QUFDQWdGLFVBQUFBLGlCQUFpQixDQUFDekcsTUFBbEIsQ0FBeUJnRixJQUF6QixDQUE4QnZELE1BQTlCLENBQXFDLENBQXJDO0FBQ0ErRSxVQUFBQSxtQkFBbUIsQ0FBQyxDQUFELENBQW5CLENBQXVCeEcsTUFBdkIsQ0FBOEJ1QixFQUE5QixDQUFpQ0MsQ0FBakMsQ0FBbUMsUUFBbkM7QUFDQWlGLFVBQUFBLGlCQUFpQixDQUFDLENBQUQsQ0FBakIsQ0FBcUJ6RyxNQUFyQixDQUE0QnVCLEVBQTVCLENBQStCQyxDQUEvQixDQUFpQyxRQUFqQztBQUNBLFdBQUNnRixtQkFBbUIsQ0FBQyxDQUFELENBQW5CLElBQTBCSixlQUEzQixFQUE0Q3BHLE1BQTVDLENBQW1EdUIsRUFBbkQsQ0FBc0Q0RSxJQUF0RDtBQUNBLFdBQUNNLGlCQUFpQixDQUFDLENBQUQsQ0FBakIsSUFBd0JELG1CQUFtQixDQUFDLENBQUQsQ0FBNUMsRUFBaUR4RyxNQUFqRCxDQUF3RHVCLEVBQXhELENBQTJENEUsSUFBM0Q7QUFDRCxTQVJDLENBQUY7QUFVQXJHLFFBQUFBLEVBQUUsQ0FBQyxnQ0FBRCxFQUFtQyxrQkFBa0I7QUFDckQsZ0JBQU1JLENBQUMsQ0FBQzhDLGNBQUYsQ0FBaUIsV0FBakIsRUFBOEIsRUFBOUIsQ0FBTjtBQUNBOUMsVUFBQUEsQ0FBQyxDQUFDb0csWUFBRixDQUFlQyxRQUFmLENBQXdCOUUsTUFBeEIsQ0FBK0J6QixNQUEvQixDQUFzQ2dDLEtBQXRDLENBQTRDLENBQTVDO0FBQ0E5QixVQUFBQSxDQUFDLENBQUNvRyxZQUFGLENBQWVDLFFBQWYsQ0FBd0IsQ0FBeEIsRUFBMkJHLEdBQTNCLENBQStCMUcsTUFBL0IsQ0FBc0NnQyxLQUF0QyxDQUE0QyxXQUE1QztBQUNBOUIsVUFBQUEsQ0FBQyxDQUFDb0csWUFBRixDQUFlQyxRQUFmLENBQXdCLENBQXhCLEVBQTJCSSxTQUEzQixDQUFxQzNHLE1BQXJDLENBQTRDdUIsRUFBNUMsQ0FBK0NDLENBQS9DLENBQWlELFFBQWpEO0FBQ0F0QixVQUFBQSxDQUFDLENBQUNvRyxZQUFGLENBQWVDLFFBQWYsQ0FBd0IsQ0FBeEIsRUFBMkJLLE9BQTNCLENBQW1DNUcsTUFBbkMsQ0FBMEN1QixFQUExQyxDQUE2Q0MsQ0FBN0MsQ0FBK0MsUUFBL0M7QUFDRCxTQU5DLENBQUY7QUFPRCxPQXZCTyxDQUFSO0FBd0JBM0IsTUFBQUEsUUFBUSxDQUFDLFdBQUQsRUFBYyxZQUFZO0FBQ2hDQyxRQUFBQSxFQUFFLENBQUMsdUNBQUQsRUFBMEMsWUFBWTtBQUN0REksVUFBQUEsQ0FBQyxDQUFDMkcsUUFBRixDQUFXLEtBQVg7QUFDQTNHLFVBQUFBLENBQUMsQ0FBQ29HLFlBQUYsQ0FBZVEsR0FBZixDQUFtQixDQUFuQixFQUFzQjlHLE1BQXRCLENBQTZCdUIsRUFBN0IsQ0FBZ0NDLENBQWhDLENBQWtDLFFBQWxDO0FBQ0EsV0FBQ3RCLENBQUMsQ0FBQ29HLFlBQUYsQ0FBZVEsR0FBZixDQUFtQixDQUFuQixLQUF5QlYsZUFBMUIsRUFBMkNwRyxNQUEzQyxDQUFrRHVCLEVBQWxELENBQXFENEUsSUFBckQ7QUFDRCxTQUpDLENBQUY7QUFLQXJHLFFBQUFBLEVBQUUsQ0FBQyx1REFBRCxFQUEwRCxZQUFZO0FBQ3RFLFdBQUMsTUFBTTtBQUNMSSxZQUFBQSxDQUFDLENBQUMyRyxRQUFGLENBQVcsVUFBWDtBQUNELFdBRkQsRUFFRzdHLE1BRkgsQ0FFVTJGLEtBRlY7QUFHQSxXQUFDLE1BQU07QUFDTHpGLFlBQUFBLENBQUMsQ0FBQzJHLFFBQUYsQ0FBVyxDQUFYO0FBQ0QsV0FGRCxFQUVHN0csTUFGSCxDQUVVMkYsS0FGVjtBQUdBLFdBQUMsTUFBTTtBQUNMekYsWUFBQUEsQ0FBQyxDQUFDMkcsUUFBRixDQUFXLEVBQVg7QUFDRCxXQUZELEVBRUc3RyxNQUZILENBRVUyRixLQUZWO0FBR0QsU0FWQyxDQUFGO0FBV0QsT0FqQk8sQ0FBUjtBQWtCQTdGLE1BQUFBLEVBQUUsQ0FBQyxvREFBRCxFQUF1RCxZQUFZO0FBQ25FSSxRQUFBQSxDQUFDLENBQUMyRyxRQUFGLENBQVcsS0FBWDtBQUNBM0csUUFBQUEsQ0FBQyxDQUFDMkcsUUFBRixDQUFXLEtBQVg7QUFDQTNHLFFBQUFBLENBQUMsQ0FBQ29HLFlBQUYsQ0FBZVMsR0FBZixDQUFtQi9HLE1BQW5CLENBQTBCZ0YsSUFBMUIsQ0FBK0J2RCxNQUEvQixDQUFzQyxDQUF0QztBQUNBdkIsUUFBQUEsQ0FBQyxDQUFDb0csWUFBRixDQUFlUyxHQUFmLENBQW1CLENBQW5CLEVBQXNCL0csTUFBdEIsQ0FBNkJ1QixFQUE3QixDQUFnQ0MsQ0FBaEMsQ0FBa0MsUUFBbEM7QUFDQSxTQUFDdEIsQ0FBQyxDQUFDb0csWUFBRixDQUFlUyxHQUFmLENBQW1CLENBQW5CLEtBQXlCN0csQ0FBQyxDQUFDb0csWUFBRixDQUFlUyxHQUFmLENBQW1CLENBQW5CLENBQTFCLEVBQWlEL0csTUFBakQsQ0FBd0R1QixFQUF4RCxDQUEyRDRFLElBQTNEO0FBQ0QsT0FOQyxDQUFGO0FBT0F0RyxNQUFBQSxRQUFRLENBQUMsdUJBQUQsRUFBMEIsWUFBWTtBQUM1Q0MsUUFBQUEsRUFBRSxDQUFDLCtEQUFELEVBQWtFLGtCQUFrQjtBQUNwRixjQUFJa0gsR0FBRyxHQUFHLE1BQU05RyxDQUFDLENBQUNrQyxVQUFGLEVBQWhCO0FBQ0FwQyxVQUFBQSxNQUFNLENBQUNZLEdBQVAsQ0FBV1gsS0FBWCxDQUFpQitHLEdBQUcsQ0FBQ0MsTUFBckI7QUFFQS9HLFVBQUFBLENBQUMsQ0FBQ2lDLElBQUYsQ0FBTytFLFlBQVAsR0FBc0IsSUFBdEI7QUFDQUYsVUFBQUEsR0FBRyxHQUFHLE1BQU05RyxDQUFDLENBQUNrQyxVQUFGLEVBQVo7QUFDQXBDLFVBQUFBLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhK0csR0FBRyxDQUFDQyxNQUFqQjtBQUNBakgsVUFBQUEsTUFBTSxDQUFDQyxLQUFQLENBQWErRyxHQUFHLENBQUNDLE1BQUosQ0FBV1QsbUJBQXhCO0FBQ0FRLFVBQUFBLEdBQUcsQ0FBQ0MsTUFBSixDQUFXVCxtQkFBWCxDQUErQixDQUEvQixFQUFrQ3hHLE1BQWxDLENBQXlDdUIsRUFBekMsQ0FBNENDLENBQTVDLENBQThDLFFBQTlDO0FBQ0QsU0FUQyxDQUFGO0FBVUQsT0FYTyxDQUFSO0FBWUQsS0FwRU8sQ0FBUjtBQXFFQTNCLElBQUFBLFFBQVEsQ0FBQyxRQUFELEVBQVcsWUFBWTtBQUM3QkMsTUFBQUEsRUFBRSxDQUFDLHFEQUFELEVBQXdELGtCQUFrQjtBQUMxRSxjQUFNcUMsSUFBSSxHQUFHO0FBQ1g1QixVQUFBQSxXQUFXLEVBQUVDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0I7QUFDN0IsMEJBQWMsTUFEZTtBQUU3QixpQ0FBcUIsTUFGUTtBQUc3QixxQ0FBeUIsTUFISTtBQUk3QkMsWUFBQUEsWUFBWSxFQUFFO0FBSmUsV0FBbEIsRUFLVmhCLFdBTFUsQ0FERjtBQU9YaUIsVUFBQUEsVUFBVSxFQUFFLENBQUMsRUFBRDtBQVBELFNBQWI7QUFTQSxjQUFNVCxDQUFDLENBQUNJLGFBQUYsQ0FBZ0J3RSxTQUFoQixFQUEyQkEsU0FBM0IsRUFBc0MzQyxJQUF0QyxDQUFOO0FBQ0FqQyxRQUFBQSxDQUFDLENBQUN1RCxRQUFGLENBQVd6RCxNQUFYLENBQWtCZ0MsS0FBbEIsQ0FBd0IsS0FBeEI7QUFDQSxjQUFNOUIsQ0FBQyxDQUFDaUgsS0FBRixFQUFOO0FBQ0FqSCxRQUFBQSxDQUFDLENBQUN1RCxRQUFGLENBQVd6RCxNQUFYLENBQWtCZ0MsS0FBbEIsQ0FBd0IsS0FBeEI7QUFDRCxPQWRDLENBQUY7QUFlRCxLQWhCTyxDQUFSO0FBaUJELEdBbGRPLENBQVI7QUFvZEFuQyxFQUFBQSxRQUFRLENBQUMsZ0JBQUQsRUFBbUIsWUFBWTtBQUNyQ0MsSUFBQUEsRUFBRSxDQUFDLDREQUFELEVBQStELFlBQVk7QUFDM0UsVUFBSXNILEdBQUcsR0FBRztBQUFDTixRQUFBQSxHQUFHLEVBQUU7QUFBTixPQUFWO0FBQ0EsVUFBSU8sRUFBRSxHQUFHLElBQUlDLG1CQUFKLENBQW1CRixHQUFuQixDQUFUO0FBQ0EsVUFBSUcsRUFBRSxHQUFHLElBQUlELG1CQUFKLENBQW1CRixHQUFuQixDQUFUO0FBQ0FDLE1BQUFBLEVBQUUsQ0FBQ0csU0FBSCxDQUFhVixHQUFiLEdBQW1CLEtBQW5COztBQUNBTyxNQUFBQSxFQUFFLENBQUNHLFNBQUgsQ0FBYXhILE1BQWIsQ0FBb0JZLEdBQXBCLENBQXdCQyxHQUF4QixDQUE0QjBHLEVBQUUsQ0FBQ0MsU0FBL0I7QUFDRCxLQU5DLENBQUY7QUFPRCxHQVJPLENBQVI7QUFVQTNILEVBQUFBLFFBQVEsQ0FBQyxtQkFBRCxFQUFzQixZQUFZO0FBQ3hDLFVBQU1LLENBQUMsR0FBRyxJQUFJVCxXQUFKLEVBQVY7QUFFQXlCLElBQUFBLFNBQVMsQ0FBQyxZQUFZO0FBQ3BCaEIsTUFBQUEsQ0FBQyxDQUFDdUgsWUFBRixHQUFpQixJQUFqQjtBQUNBdkgsTUFBQUEsQ0FBQyxDQUFDd0gsYUFBRixHQUFrQixJQUFsQjtBQUNBeEgsTUFBQUEsQ0FBQyxDQUFDeUgsc0JBQUYsR0FBMkIsSUFBM0I7QUFDRCxLQUpRLENBQVQ7QUFNQTdILElBQUFBLEVBQUUsQ0FBQywrREFBRCxFQUFrRSxZQUFZO0FBQzlFSSxNQUFBQSxDQUFDLENBQUN3SCxhQUFGLEdBQWtCLENBQUMsS0FBRCxFQUFRLEtBQVIsQ0FBbEI7QUFDQXhILE1BQUFBLENBQUMsQ0FBQzBILGdCQUFGLENBQW1CLEtBQW5CLEVBQTBCNUgsTUFBMUIsQ0FBaUN1QixFQUFqQyxDQUFvQzRFLElBQXBDO0FBQ0FqRyxNQUFBQSxDQUFDLENBQUMwSCxnQkFBRixDQUFtQixLQUFuQixFQUEwQjVILE1BQTFCLENBQWlDdUIsRUFBakMsQ0FBb0M0RSxJQUFwQztBQUNBakcsTUFBQUEsQ0FBQyxDQUFDMEgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI1SCxNQUExQixDQUFpQ3VCLEVBQWpDLENBQW9DbUUsS0FBcEM7QUFDRCxLQUxDLENBQUY7QUFPQTVGLElBQUFBLEVBQUUsQ0FBQywwREFBRCxFQUE2RCxZQUFZO0FBQ3pFSSxNQUFBQSxDQUFDLENBQUN3SCxhQUFGLEdBQWtCLEVBQWxCO0FBQ0F4SCxNQUFBQSxDQUFDLENBQUMwSCxnQkFBRixDQUFtQixLQUFuQixFQUEwQjVILE1BQTFCLENBQWlDdUIsRUFBakMsQ0FBb0NtRSxLQUFwQztBQUNELEtBSEMsQ0FBRjtBQUtBNUYsSUFBQUEsRUFBRSxDQUFDLDZDQUFELEVBQWdELFlBQVk7QUFDNURJLE1BQUFBLENBQUMsQ0FBQ3dILGFBQUYsR0FBa0IsQ0FBQyxLQUFELEVBQVEsS0FBUixDQUFsQjtBQUNBeEgsTUFBQUEsQ0FBQyxDQUFDdUgsWUFBRixHQUFpQixDQUFDLEtBQUQsQ0FBakI7QUFDQXZILE1BQUFBLENBQUMsQ0FBQzBILGdCQUFGLENBQW1CLEtBQW5CLEVBQTBCNUgsTUFBMUIsQ0FBaUN1QixFQUFqQyxDQUFvQ21FLEtBQXBDO0FBQ0F4RixNQUFBQSxDQUFDLENBQUMwSCxnQkFBRixDQUFtQixLQUFuQixFQUEwQjVILE1BQTFCLENBQWlDdUIsRUFBakMsQ0FBb0M0RSxJQUFwQztBQUNBakcsTUFBQUEsQ0FBQyxDQUFDMEgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI1SCxNQUExQixDQUFpQ3VCLEVBQWpDLENBQW9DbUUsS0FBcEM7QUFDRCxLQU5DLENBQUY7QUFRQTVGLElBQUFBLEVBQUUsQ0FBQyw0Q0FBRCxFQUErQyxZQUFZO0FBQzNESSxNQUFBQSxDQUFDLENBQUN5SCxzQkFBRixHQUEyQixJQUEzQjtBQUNBekgsTUFBQUEsQ0FBQyxDQUFDMEgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI1SCxNQUExQixDQUFpQ3VCLEVBQWpDLENBQW9DNEUsSUFBcEM7QUFDQWpHLE1BQUFBLENBQUMsQ0FBQzBILGdCQUFGLENBQW1CLEtBQW5CLEVBQTBCNUgsTUFBMUIsQ0FBaUN1QixFQUFqQyxDQUFvQzRFLElBQXBDO0FBQ0FqRyxNQUFBQSxDQUFDLENBQUMwSCxnQkFBRixDQUFtQixLQUFuQixFQUEwQjVILE1BQTFCLENBQWlDdUIsRUFBakMsQ0FBb0M0RSxJQUFwQztBQUNELEtBTEMsQ0FBRjtBQU9BckcsSUFBQUEsRUFBRSxDQUFDLHVDQUFELEVBQTBDLFlBQVk7QUFDdERJLE1BQUFBLENBQUMsQ0FBQ3lILHNCQUFGLEdBQTJCLElBQTNCO0FBQ0F6SCxNQUFBQSxDQUFDLENBQUN1SCxZQUFGLEdBQWlCLENBQUMsS0FBRCxFQUFRLEtBQVIsQ0FBakI7QUFDQXZILE1BQUFBLENBQUMsQ0FBQzBILGdCQUFGLENBQW1CLEtBQW5CLEVBQTBCNUgsTUFBMUIsQ0FBaUN1QixFQUFqQyxDQUFvQ21FLEtBQXBDO0FBQ0F4RixNQUFBQSxDQUFDLENBQUMwSCxnQkFBRixDQUFtQixLQUFuQixFQUEwQjVILE1BQTFCLENBQWlDdUIsRUFBakMsQ0FBb0NtRSxLQUFwQztBQUNBeEYsTUFBQUEsQ0FBQyxDQUFDMEgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI1SCxNQUExQixDQUFpQ3VCLEVBQWpDLENBQW9DNEUsSUFBcEM7QUFDRCxLQU5DLENBQUY7QUFPRCxHQTNDTyxDQUFSO0FBNENEOztlQUVjM0csbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9saWInO1xuaW1wb3J0IHsgY3JlYXRlU2FuZGJveCB9IGZyb20gJ3Npbm9uJztcblxuXG4vLyB3cmFwIHRoZXNlIHRlc3RzIGluIGEgZnVuY3Rpb24gc28gd2UgY2FuIGV4cG9ydCB0aGUgdGVzdHMgYW5kIHJlLXVzZSB0aGVtXG4vLyBmb3IgYWN0dWFsIGRyaXZlciBpbXBsZW1lbnRhdGlvbnNcbmZ1bmN0aW9uIGJhc2VEcml2ZXJVbml0VGVzdHMgKERyaXZlckNsYXNzLCBkZWZhdWx0Q2FwcyA9IHt9KSB7XG4gIC8vIHRvIGRpc3BsYXkgdGhlIGRyaXZlciB1bmRlciB0ZXN0IGluIHJlcG9ydFxuICBjb25zdCBjbGFzc05hbWUgPSBEcml2ZXJDbGFzcy5uYW1lIHx8ICcodW5rbm93biBkcml2ZXIpJztcblxuICBkZXNjcmliZSgnc3RhdGljIHByb3BlcnR5JywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdiYXNlVmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgZXhpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIERyaXZlckNsYXNzLmJhc2VWZXJzaW9uLnNob3VsZC5leGlzdDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTG9nIHByZWZpeCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgc2V0dXAgbG9nIHByZWZpeCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGQgPSBuZXcgRHJpdmVyQ2xhc3MoKTtcbiAgICAgIGNvbnN0IHByZXZpb3VzUHJlZml4ID0gZC5sb2cucHJlZml4O1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDYXBzLCB7XG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZScsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgIH0pLFxuICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgfSk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmV2aW91c1ByZWZpeC5zaG91bGQubm90LmVxbChkLmxvZy5wcmVmaXgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXdhaXQgZC5kZWxldGVTZXNzaW9uKCk7XG4gICAgICAgIHByZXZpb3VzUHJlZml4LnNob3VsZC5lcWwoZC5sb2cucHJlZml4KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9KTtcblxuICBkZXNjcmliZShgQmFzZURyaXZlciAoYXMgJHtjbGFzc05hbWV9KWAsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZCwgdzNjQ2FwcztcblxuICAgIGxldCBzYW5kYm94O1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kYm94ID0gY3JlYXRlU2FuZGJveCgpO1xuICAgICAgZCA9IG5ldyBEcml2ZXJDbGFzcygpO1xuICAgICAgdzNjQ2FwcyA9IHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDYXBzLCB7XG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZScsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgIH0pLFxuICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZC5kZWxldGVTZXNzaW9uKCk7XG4gICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVwb3J0IHRoZSB2ZXJzaW9uIG9mIEJhc2VEcml2ZXIgdXNlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC5leGlzdChEcml2ZXJDbGFzcy5iYXNlVmVyc2lvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzdGF0dXMgb2JqZWN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHN0YXR1cyA9IGF3YWl0IGQuZ2V0U3RhdHVzKCk7XG4gICAgICBzdGF0dXMuc2hvdWxkLmVxbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIHNlc3Npb25JZCBmcm9tIGNyZWF0ZVNlc3Npb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgW3Nlc3NJZF0gPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICBzaG91bGQuZXhpc3Qoc2Vzc0lkKTtcbiAgICAgIHNlc3NJZC5zaG91bGQuYmUuYSgnc3RyaW5nJyk7XG4gICAgICBzZXNzSWQubGVuZ3RoLnNob3VsZC5iZS5hYm92ZSg1KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGJlIGFibGUgdG8gc3RhcnQgdHdvIHNlc3Npb25zIHdpdGhvdXQgY2xvc2luZyB0aGUgZmlyc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZURlZXAodzNjQ2FwcykpO1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoJ3Nlc3Npb24nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYmUgYWJsZSB0byBkZWxldGUgYSBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHNlc3Npb25JZDEgPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZURlZXAodzNjQ2FwcykpO1xuICAgICAgYXdhaXQgZC5kZWxldGVTZXNzaW9uKCk7XG4gICAgICBzaG91bGQuZXF1YWwoZC5zZXNzaW9uSWQsIG51bGwpO1xuICAgICAgbGV0IHNlc3Npb25JZDIgPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZURlZXAodzNjQ2FwcykpO1xuICAgICAgc2Vzc2lvbklkMS5zaG91bGQubm90LmVxbChzZXNzaW9uSWQyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IHRoZSBjdXJyZW50IHNlc3Npb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgWywgY2Fwc10gPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICBjYXBzLnNob3VsZC5lcXVhbChhd2FpdCBkLmdldFNlc3Npb24oKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBzZXNzaW9ucyBpZiBubyBzZXNzaW9uIGV4aXN0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBzZXNzaW9ucyA9IGF3YWl0IGQuZ2V0U2Vzc2lvbnMoKTtcbiAgICAgIHNlc3Npb25zLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBzZXNzaW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhcHMgPSBfLmNsb25lKHczY0NhcHMpO1xuICAgICAgY2Fwcy5hID0gJ2NhcCc7XG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgY2Fwcyk7XG4gICAgICBsZXQgc2Vzc2lvbnMgPSBhd2FpdCBkLmdldFNlc3Npb25zKCk7XG5cbiAgICAgIHNlc3Npb25zLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBzZXNzaW9uc1swXS5zaG91bGQuaW5jbHVkZSh7XG4gICAgICAgIGlkOiBkLnNlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBzZXNzaW9uc1swXS5jYXBhYmlsaXRpZXMuc2hvdWxkLmluY2x1ZGUoe1xuICAgICAgICBkZXZpY2VOYW1lOiAnQ29tbW9kb3JlIDY0JyxcbiAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZSdcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmdWxmaWxsIGFuIHVuZXhwZWN0ZWQgZHJpdmVyIHF1aXQgcHJvbWlzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIG1ha2UgYSBjb21tYW5kIHRoYXQgd2lsbCB3YWl0IGEgYml0IHNvIHdlIGNhbiBjcmFzaCB3aGlsZSBpdCdzIHJ1bm5pbmdcbiAgICAgIGQuZ2V0U3RhdHVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBCLmRlbGF5KDEwMDApO1xuICAgICAgICByZXR1cm4gJ2dvb2Qgc3RhdHVzJztcbiAgICAgIH0uYmluZChkKTtcbiAgICAgIGxldCBjbWRQcm9taXNlID0gZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJyk7XG4gICAgICBhd2FpdCBCLmRlbGF5KDEwKTtcbiAgICAgIGNvbnN0IHAgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignb25VbmV4cGVjdGVkU2h1dGRvd24gZXZlbnQgaXMgZXhwZWN0ZWQgdG8gYmUgZmlyZWQgd2l0aGluIDUgc2Vjb25kcyB0aW1lb3V0JykpLCA1MDAwKTtcbiAgICAgICAgZC5vblVuZXhwZWN0ZWRTaHV0ZG93bihyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgICAgZC5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoJ1dlIGNyYXNoZWQnKSk7XG4gICAgICBhd2FpdCBjbWRQcm9taXNlLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL1dlIGNyYXNoZWQvKTtcbiAgICAgIGF3YWl0IHA7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyBjb21tYW5kcyBpbiBtaWRkbGUgb2YgdW5leHBlY3RlZCBzaHV0ZG93bicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIG1ha2UgYSBjb21tYW5kIHRoYXQgd2lsbCB3YWl0IGEgYml0IHNvIHdlIGNhbiBjcmFzaCB3aGlsZSBpdCdzIHJ1bm5pbmdcbiAgICAgIGQub2xkRGVsZXRlU2Vzc2lvbiA9IGQuZGVsZXRlU2Vzc2lvbjtcbiAgICAgIGQuZGVsZXRlU2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDApO1xuICAgICAgICBhd2FpdCB0aGlzLm9sZERlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH0uYmluZChkKTtcbiAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB3M2NDYXBzKTtcbiAgICAgIGNvbnN0IHAgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignb25VbmV4cGVjdGVkU2h1dGRvd24gZXZlbnQgaXMgZXhwZWN0ZWQgdG8gYmUgZmlyZWQgd2l0aGluIDUgc2Vjb25kcyB0aW1lb3V0JykpLCA1MDAwKTtcbiAgICAgICAgZC5vblVuZXhwZWN0ZWRTaHV0ZG93bihyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgICAgZC5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoJ1dlIGNyYXNoZWQnKSk7XG4gICAgICBhd2FpdCBwO1xuICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnZ2V0U2Vzc2lvbicpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NodXQgZG93bi8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBuZXcgY29tbWFuZHMgYWZ0ZXIgZG9uZSBzaHV0dGluZyBkb3duJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gbWFrZSBhIGNvbW1hbmQgdGhhdCB3aWxsIHdhaXQgYSBiaXQgc28gd2UgY2FuIGNyYXNoIHdoaWxlIGl0J3MgcnVubmluZ1xuICAgICAgZC5vbGREZWxldGVTZXNzaW9uID0gZC5kZWxldGVTZXNzaW9uO1xuICAgICAgZC5kZWxldGVTZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBCLmRlbGF5KDEwMCk7XG4gICAgICAgIGF3YWl0IHRoaXMub2xkRGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfS5iaW5kKGQpO1xuXG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZURlZXAodzNjQ2FwcykpO1xuICAgICAgY29uc3QgcCA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdvblVuZXhwZWN0ZWRTaHV0ZG93biBldmVudCBpcyBleHBlY3RlZCB0byBiZSBmaXJlZCB3aXRoaW4gNSBzZWNvbmRzIHRpbWVvdXQnKSksIDUwMDApO1xuICAgICAgICBkLm9uVW5leHBlY3RlZFNodXRkb3duKHJlc29sdmUpO1xuICAgICAgfSk7XG4gICAgICBkLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKG5ldyBFcnJvcignV2UgY3Jhc2hlZCcpKTtcbiAgICAgIGF3YWl0IHA7XG5cbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFNlc3Npb24nKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zaHV0IGRvd24vKTtcbiAgICAgIGF3YWl0IEIuZGVsYXkoNTAwKTtcblxuICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnY3JlYXRlU2Vzc2lvbicsIG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIFczQyBhbmQgSlNPTldQIHNlc3Npb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUZXN0IFczQyAobGVhdmUgZmlyc3QgMiBhcmdzIG51bGwgYmVjYXVzZSB0aG9zZSBhcmUgdGhlIEpTT05XUCBhcmdzKVxuICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnY3JlYXRlU2Vzc2lvbicsIG51bGwsIG51bGwsIHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDYXBzLCB7XG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZScsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgIH0pLFxuICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgfSk7XG5cbiAgICAgIGQucHJvdG9jb2wuc2hvdWxkLmVxdWFsKCdXM0MnKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwcm90b2NvbCBkZXRlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHVzZSBXM0MgaWYgb25seSBXM0MgY2FwcyBhcmUgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB7YWx3YXlzTWF0Y2g6IF8uY2xvbmUoZGVmYXVsdENhcHMpLCBmaXJzdE1hdGNoOiBbe31dfSk7XG4gICAgICAgIGQucHJvdG9jb2wuc2hvdWxkLmVxdWFsKCdXM0MnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGEgbWV0aG9kIHRvIGdldCBkcml2ZXIgZm9yIGEgc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBbc2Vzc0lkXSA9IGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB3M2NDYXBzKTtcbiAgICAgIGQuZHJpdmVyRm9yU2Vzc2lvbihzZXNzSWQpLnNob3VsZC5lcWwoZCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY29tbWFuZCBxdWV1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBkID0gbmV3IERyaXZlckNsYXNzKCk7XG5cbiAgICAgIGxldCB3YWl0TXMgPSAxMDtcbiAgICAgIGQuZ2V0U3RhdHVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBCLmRlbGF5KHdhaXRNcyk7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpO1xuICAgICAgfS5iaW5kKGQpO1xuXG4gICAgICBkLmdldFNlc3Npb25zID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBCLmRlbGF5KHdhaXRNcyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbXVsdGlwYXNzJyk7XG4gICAgICB9LmJpbmQoZCk7XG5cbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcXVldWUgY29tbWFuZHMgYW5kLmV4ZWN1dGVDb21tYW5kL3Jlc3BvbmQgaW4gdGhlIG9yZGVyIHJlY2VpdmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbnVtQ21kcyA9IDEwO1xuICAgICAgICBsZXQgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBCLmFsbChjbWRzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBpZiAocmVzdWx0c1tpXSA8PSByZXN1bHRzW2kgLSAxXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHb3QgcmVzdWx0IG91dCBvZiBvcmRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGVycm9ycyBjb3JyZWN0bHkgd2hlbiBxdWV1aW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbnVtQ21kcyA9IDEwO1xuICAgICAgICBsZXQgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGlmIChpID09PSA1KSB7XG4gICAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U2Vzc2lvbnMnKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgQi5zZXR0bGUoY21kcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgNTsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdHNbaV0udmFsdWUoKSA8PSByZXN1bHRzW2kgLSAxXS52YWx1ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dvdCByZXN1bHQgb3V0IG9mIG9yZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHNbNV0ucmVhc29uKCkubWVzc2FnZS5zaG91bGQuY29udGFpbignbXVsdGlwYXNzJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSA3OyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdHNbaV0udmFsdWUoKSA8PSByZXN1bHRzW2kgLSAxXS52YWx1ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dvdCByZXN1bHQgb3V0IG9mIG9yZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBub3QgY2FyZSBpZiBxdWV1ZSBlbXB0aWVzIGZvciBhIGJpdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG51bUNtZHMgPSAxMDtcbiAgICAgICAgbGV0IGNtZHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJykpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgQi5hbGwoY21kcyk7XG4gICAgICAgIGNtZHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJykpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHMgPSBhd2FpdCBCLmFsbChjbWRzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBpZiAocmVzdWx0c1tpXSA8PSByZXN1bHRzW2kgLSAxXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHb3QgcmVzdWx0IG91dCBvZiBvcmRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndGltZW91dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCdjb21tYW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGV4aXN0IGJ5IGRlZmF1bHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5uZXdDb21tYW5kVGltZW91dE1zLnNob3VsZC5lcXVhbCg2MDAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIGJlIHNldHRhYmxlIHRocm91Z2ggYHRpbWVvdXRzYCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCBkLnRpbWVvdXRzKCdjb21tYW5kJywgMjApO1xuICAgICAgICAgIGQubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXF1YWwoMjApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJ2ltcGxpY2l0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIG5vdCBleGlzdCBieSBkZWZhdWx0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxdWFsKDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBiZSBzZXR0YWJsZSB0aHJvdWdoIGB0aW1lb3V0c2AnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgZC50aW1lb3V0cygnaW1wbGljaXQnLCAyMCk7XG4gICAgICAgICAgZC5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXF1YWwoMjApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3RpbWVvdXRzIChXM0MpJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB3M2NDYXBzKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZC5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgZ2V0IHRpbWVvdXRzIHRoYXQgd2Ugc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLnRpbWVvdXRzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgMTAwMCk7XG4gICAgICAgIGF3YWl0IGQuZ2V0VGltZW91dHMoKS5zaG91bGQuZXZlbnR1YWxseS5oYXZlLnByb3BlcnR5KCdpbXBsaWNpdCcsIDEwMDApO1xuICAgICAgICBhd2FpdCBkLnRpbWVvdXRzKCdjb21tYW5kJywgMjAwMCk7XG4gICAgICAgIGF3YWl0IGQuZ2V0VGltZW91dHMoKS5zaG91bGQuZXZlbnR1YWxseS5kZWVwLmVxdWFsKHtcbiAgICAgICAgICBpbXBsaWNpdDogMTAwMCxcbiAgICAgICAgICBjb21tYW5kOiAyMDAwLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDMwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuZGVlcC5lcXVhbCh7XG4gICAgICAgICAgaW1wbGljaXQ6IDMwMDAsXG4gICAgICAgICAgY29tbWFuZDogMjAwMCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdyZXNldCBjb21wYXRpYmlsaXR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgYm90aCBmdWxsUmVzZXQgYW5kIG5vUmVzZXQgdG8gYmUgdHJ1ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbmV3Q2FwcyA9IHtcbiAgICAgICAgICBhbHdheXNNYXRjaDogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENhcHMsIHtcbiAgICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ0Zha2UnLFxuICAgICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgICAgICAnYXBwaXVtOmZ1bGxSZXNldCc6IHRydWUsXG4gICAgICAgICAgICAnYXBwaXVtOm5vUmVzZXQnOiB0cnVlXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBuZXdDYXBzKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgICAvbm9SZXNldC4rZnVsbFJlc2V0Lyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwcm94eWluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBzZXNzSWQ7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW3Nlc3NJZF0gPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCcjcHJveHlBY3RpdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZXhpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5wcm94eUFjdGl2ZS5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihGdW5jdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLnByb3h5QWN0aXZlKHNlc3NJZCkuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHNlc3Npb25JZCBpcyB3cm9uZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4geyBkLnByb3h5QWN0aXZlKCdhYWEnKTsgfSkuc2hvdWxkLnRocm93O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnI2dldFByb3h5QXZvaWRMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGV4aXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQuZ2V0UHJveHlBdm9pZExpc3Quc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoRnVuY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5nZXRQcm94eUF2b2lkTGlzdChzZXNzSWQpLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEFycmF5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBzZXNzaW9uSWQgaXMgd3JvbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHsgZC5nZXRQcm94eUF2b2lkTGlzdCgnYWFhJyk7IH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJyNjYW5Qcm94eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGEgI2NhblByb3h5IG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmNhblByb3h5LnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEZ1bmN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgYm9vbGVhbiBmcm9tICNjYW5Qcm94eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmNhblByb3h5KHNlc3NJZCkuc2hvdWxkLmJlLmEoJ2Jvb2xlYW4nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBzZXNzaW9uSWQgaXMgd3JvbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHsgZC5jYW5Qcm94eSgpOyB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCcjcHJveHlSb3V0ZUlzQXZvaWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBmb3JtIG9mIGF2b2lkYW5jZSBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL1xcL2Zvby9dLCBbJ0dFVCddXSk7XG4gICAgICAgICAgKCgpID0+IHsgZC5wcm94eVJvdXRlSXNBdm9pZGVkKCk7IH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL1xcL2Zvby9dLCBbJ0dFVCcsIC9eZm9vLywgJ2JhciddXSk7XG4gICAgICAgICAgKCgpID0+IHsgZC5wcm94eVJvdXRlSXNBdm9pZGVkKCk7IH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgICBhdm9pZFN0dWIucmVzdG9yZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZWplY3QgYmFkIGh0dHAgbWV0aG9kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhdm9pZFN0dWIgPSBzYW5kYm94LnN0dWIoZCwgJ2dldFByb3h5QXZvaWRMaXN0Jyk7XG4gICAgICAgICAgYXZvaWRTdHViLnJldHVybnMoW1snUE9TVCcsIC9eZm9vL10sIFsnQkFaRVRFJywgL15iYXIvXV0pO1xuICAgICAgICAgICgoKSA9PiB7IGQucHJveHlSb3V0ZUlzQXZvaWRlZCgpOyB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgICAgYXZvaWRTdHViLnJlc3RvcmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IG5vbi1yZWdleCByb3V0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2FuZGJveC5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXR1cm5zKFtbJ1BPU1QnLCAvXmZvby9dLCBbJ0dFVCcsICcvYmFyJ11dKTtcbiAgICAgICAgICAoKCkgPT4geyBkLnByb3h5Um91dGVJc0F2b2lkZWQoKTsgfSkuc2hvdWxkLnRocm93O1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXN0b3JlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciByb3V0ZXMgaW4gdGhlIGF2b2lkIGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2FuZGJveC5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXR1cm5zKFtbJ1BPU1QnLCAvXlxcL2Zvby9dXSk7XG4gICAgICAgICAgZC5wcm94eVJvdXRlSXNBdm9pZGVkKG51bGwsICdQT1NUJywgJy9mb28vYmFyJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgICAgYXZvaWRTdHViLnJlc3RvcmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgc3RyaXAgYXdheSBhbnkgd2QvaHViIHByZWZpeCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhdm9pZFN0dWIgPSBzYW5kYm94LnN0dWIoZCwgJ2dldFByb3h5QXZvaWRMaXN0Jyk7XG4gICAgICAgICAgYXZvaWRTdHViLnJldHVybnMoW1snUE9TVCcsIC9eXFwvZm9vL11dKTtcbiAgICAgICAgICBkLnByb3h5Um91dGVJc0F2b2lkZWQobnVsbCwgJ1BPU1QnLCAnL2Zvby9iYXInKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgICBhdm9pZFN0dWIucmVzdG9yZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIHJvdXRlcyBub3QgaW4gdGhlIGF2b2lkIGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2FuZGJveC5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXR1cm5zKFtbJ1BPU1QnLCAvXlxcL2Zvby9dXSk7XG4gICAgICAgICAgZC5wcm94eVJvdXRlSXNBdm9pZGVkKG51bGwsICdHRVQnLCAnL2Zvby9iYXInKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICAgICAgZC5wcm94eVJvdXRlSXNBdm9pZGVkKG51bGwsICdQT1NUJywgJy9ib28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICAgICAgYXZvaWRTdHViLnJlc3RvcmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdldmVudCB0aW1pbmcgZnJhbWV3b3JrJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGJlZm9yZVN0YXJ0VGltZTtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBiZWZvcmVTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBkLnNob3VsZFZhbGlkYXRlQ2FwcyA9IGZhbHNlO1xuICAgICAgICBhd2FpdCBkLmV4ZWN1dGVDb21tYW5kKCdjcmVhdGVTZXNzaW9uJywgbnVsbCwgbnVsbCwge2Fsd2F5c01hdGNoOiB7Li4uZGVmYXVsdENhcHN9LCBmaXJzdE1hdGNoOiBbe31dfSk7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCcjZXZlbnRIaXN0b3J5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYW4gZXZlbnRIaXN0b3J5IHByb3BlcnR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNob3VsZC5leGlzdChkLmV2ZW50SGlzdG9yeSk7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0KGQuZXZlbnRIaXN0b3J5LmNvbW1hbmRzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGEgc2Vzc2lvbiBzdGFydCB0aW1pbmcgYWZ0ZXIgc2Vzc2lvbiBzdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsZXQge25ld1Nlc3Npb25SZXF1ZXN0ZWQsIG5ld1Nlc3Npb25TdGFydGVkfSA9IGQuZXZlbnRIaXN0b3J5O1xuICAgICAgICAgIG5ld1Nlc3Npb25SZXF1ZXN0ZWQuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgICAgIG5ld1Nlc3Npb25TdGFydGVkLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgICAgICBuZXdTZXNzaW9uUmVxdWVzdGVkWzBdLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgICBuZXdTZXNzaW9uU3RhcnRlZFswXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgICAgKG5ld1Nlc3Npb25SZXF1ZXN0ZWRbMF0gPj0gYmVmb3JlU3RhcnRUaW1lKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgICAobmV3U2Vzc2lvblN0YXJ0ZWRbMF0gPj0gbmV3U2Vzc2lvblJlcXVlc3RlZFswXSkuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSBhIGNvbW1hbmRzIGxpc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJywgW10pO1xuICAgICAgICAgIGQuZXZlbnRIaXN0b3J5LmNvbW1hbmRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG4gICAgICAgICAgZC5ldmVudEhpc3RvcnkuY29tbWFuZHNbMV0uY21kLnNob3VsZC5lcXVhbCgnZ2V0U3RhdHVzJyk7XG4gICAgICAgICAgZC5ldmVudEhpc3RvcnkuY29tbWFuZHNbMV0uc3RhcnRUaW1lLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgICBkLmV2ZW50SGlzdG9yeS5jb21tYW5kc1sxXS5lbmRUaW1lLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCcjbG9nRXZlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgYWxsb3cgbG9nZ2luZyBhcmJpdHJhcnkgZXZlbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQubG9nRXZlbnQoJ2ZvbycpO1xuICAgICAgICAgIGQuZXZlbnRIaXN0b3J5LmZvb1swXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgICAgKGQuZXZlbnRIaXN0b3J5LmZvb1swXSA+PSBiZWZvcmVTdGFydFRpbWUpLnNob3VsZC5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgcmVzZXJ2ZWQgb3Igb2RkbHkgZm9ybWVkIGV2ZW50IG5hbWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICBkLmxvZ0V2ZW50KCdjb21tYW5kcycpO1xuICAgICAgICAgIH0pLnNob3VsZC50aHJvdygpO1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICBkLmxvZ0V2ZW50KDEpO1xuICAgICAgICAgIH0pLnNob3VsZC50aHJvdygpO1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICBkLmxvZ0V2ZW50KHt9KTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3coKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgYWxsb3cgbG9nZ2luZyB0aGUgc2FtZSBldmVudCBtdWx0aXBsZSB0aW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZC5sb2dFdmVudCgnYmFyJyk7XG4gICAgICAgIGQubG9nRXZlbnQoJ2JhcicpO1xuICAgICAgICBkLmV2ZW50SGlzdG9yeS5iYXIuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgICAgICBkLmV2ZW50SGlzdG9yeS5iYXJbMV0uc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICAoZC5ldmVudEhpc3RvcnkuYmFyWzFdID49IGQuZXZlbnRIaXN0b3J5LmJhclswXSkuc2hvdWxkLmJlLnRydWU7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCdnZXRTZXNzaW9uIGRlY29yYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZGVjb3JhdGUgZ2V0U2Vzc2lvbiByZXNwb25zZSBpZiBvcHQtaW4gY2FwIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCByZXMgPSBhd2FpdCBkLmdldFNlc3Npb24oKTtcbiAgICAgICAgICBzaG91bGQubm90LmV4aXN0KHJlcy5ldmVudHMpO1xuXG4gICAgICAgICAgZC5jYXBzLmV2ZW50VGltaW5ncyA9IHRydWU7XG4gICAgICAgICAgcmVzID0gYXdhaXQgZC5nZXRTZXNzaW9uKCk7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0KHJlcy5ldmVudHMpO1xuICAgICAgICAgIHNob3VsZC5leGlzdChyZXMuZXZlbnRzLm5ld1Nlc3Npb25SZXF1ZXN0ZWQpO1xuICAgICAgICAgIHJlcy5ldmVudHMubmV3U2Vzc2lvblJlcXVlc3RlZFswXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJy5yZXNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgcmVzZXQgYXMgVzNDIGlmIHRoZSBvcmlnaW5hbCBzZXNzaW9uIHdhcyBXM0MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNhcHMgPSB7XG4gICAgICAgICAgYWx3YXlzTWF0Y2g6IE9iamVjdC5hc3NpZ24oe30sIHtcbiAgICAgICAgICAgICdhcHBpdW06YXBwJzogJ0Zha2UnLFxuICAgICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0Zha2UnLFxuICAgICAgICAgICAgJ2FwcGl1bTphdXRvbWF0aW9uTmFtZSc6ICdGYWtlJyxcbiAgICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ0Zha2UnLFxuICAgICAgICAgIH0sIGRlZmF1bHRDYXBzKSxcbiAgICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24odW5kZWZpbmVkLCB1bmRlZmluZWQsIGNhcHMpO1xuICAgICAgICBkLnByb3RvY29sLnNob3VsZC5lcXVhbCgnVzNDJyk7XG4gICAgICAgIGF3YWl0IGQucmVzZXQoKTtcbiAgICAgICAgZC5wcm90b2NvbC5zaG91bGQuZXF1YWwoJ1czQycpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdEZXZpY2VTZXR0aW5ncycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIG5vdCBob2xkIG9uIHRvIHJlZmVyZW5jZSBvZiBkZWZhdWx0cyBpbiBjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBvYmogPSB7Zm9vOiAnYmFyJ307XG4gICAgICBsZXQgZDEgPSBuZXcgRGV2aWNlU2V0dGluZ3Mob2JqKTtcbiAgICAgIGxldCBkMiA9IG5ldyBEZXZpY2VTZXR0aW5ncyhvYmopO1xuICAgICAgZDEuX3NldHRpbmdzLmZvbyA9ICdiYXonO1xuICAgICAgZDEuX3NldHRpbmdzLnNob3VsZC5ub3QuZXFsKGQyLl9zZXR0aW5ncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcuaXNGZWF0dXJlRW5hYmxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkID0gbmV3IERyaXZlckNsYXNzKCk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgZC5kZW55SW5zZWN1cmUgPSBudWxsO1xuICAgICAgZC5hbGxvd0luc2VjdXJlID0gbnVsbDtcbiAgICAgIGQucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IG51bGw7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNheSBhIGZlYXR1cmUgaXMgZW5hYmxlZCB3aGVuIGl0IGlzIGV4cGxpY2l0bHkgYWxsb3dlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFsnZm9vJywgJ2JhciddO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmFyJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JheicpLnNob3VsZC5iZS5mYWxzZTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2F5IGEgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCBpZiBpdCBpcyBub3QgZW5hYmxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFtdO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZWZlciBkZW55SW5zZWN1cmUgdG8gYWxsb3dJbnNlY3VyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFsnZm9vJywgJ2JhciddO1xuICAgICAgZC5kZW55SW5zZWN1cmUgPSBbJ2ZvbyddO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFsbG93IGdsb2JhbCBzZXR0aW5nIGZvciBpbnNlY3VyaXR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgZC5yZWxheGVkU2VjdXJpdHlFbmFibGVkID0gdHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnZm9vJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUudHJ1ZTtcbiAgICB9KTtcblxuICAgIGl0KCdnbG9iYWwgc2V0dGluZyBzaG91bGQgYmUgb3ZlcnJpZGVhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgZC5yZWxheGVkU2VjdXJpdHlFbmFibGVkID0gdHJ1ZTtcbiAgICAgIGQuZGVueUluc2VjdXJlID0gWydmb28nLCAnYmFyJ107XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2ZvbycpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmFyJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUudHJ1ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VEcml2ZXJVbml0VGVzdHM7XG4iXX0=
|
|
@@ -54,15 +54,20 @@ describe('Websockets (e2e)', function () {
|
|
|
54
54
|
|
|
55
55
|
await new _bluebird.default((resolve, reject) => {
|
|
56
56
|
const client = new _ws.default(`ws://${_helpers.TEST_HOST}:${port}${endpoint}`);
|
|
57
|
-
client.
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
client.once('connection', (ws, req) => {
|
|
58
|
+
try {
|
|
59
|
+
ws.should.not.be.empty;
|
|
60
|
+
req.connection.remoteAddress.should.not.be.empty;
|
|
61
|
+
} catch (e) {
|
|
62
|
+
reject(e);
|
|
63
|
+
}
|
|
60
64
|
});
|
|
61
|
-
client.
|
|
62
|
-
|
|
65
|
+
client.once('message', data => {
|
|
66
|
+
const dataStr = _lodash.default.isString(data) ? data : data.toString();
|
|
67
|
+
dataStr.should.eql(WS_DATA);
|
|
63
68
|
resolve();
|
|
64
69
|
});
|
|
65
|
-
client.
|
|
70
|
+
client.once('error', reject);
|
|
66
71
|
setTimeout(() => reject(new Error('No websocket messages have been received after the timeout')), timeout);
|
|
67
72
|
});
|
|
68
73
|
(await baseServer.removeWebSocketHandler(endpoint)).should.be.true;
|
|
@@ -79,4 +84,4 @@ describe('Websockets (e2e)', function () {
|
|
|
79
84
|
});
|
|
80
85
|
});
|
|
81
86
|
});
|
|
82
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvZTJlL2Jhc2Vkcml2ZXIvd2Vic29ja2V0cy5lMmUuc3BlYy5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImJhc2VTZXJ2ZXIiLCJkcml2ZXIiLCJwb3J0IiwiU0VTU0lPTl9JRCIsIldTX0RBVEEiLCJiZWZvcmUiLCJGYWtlRHJpdmVyIiwic2Vzc2lvbklkIiwicm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIiwiYWZ0ZXIiLCJjbG9zZSIsIml0Iiwid3NzIiwiV2ViU29ja2V0IiwiU2VydmVyIiwibm9TZXJ2ZXIiLCJvbiIsIndzIiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJzZW5kIiwicHJldmlvdXNMaXN0ZW5lckNvdW50IiwibGlzdGVuZXJDb3VudCIsImVuZHBvaW50IiwiREVGQVVMVF9XU19QQVRITkFNRV9QUkVGSVgiLCJ0aW1lb3V0IiwiYWRkV2ViU29ja2V0SGFuZGxlciIsInNob3VsZCIsImJlIiwiYWJvdmUiLCJfIiwia2V5cyIsImdldFdlYlNvY2tldEhhbmRsZXJzIiwibGVuZ3RoIiwiZXFsIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJjbGllbnQiLCJURVNUX0hPU1QiLCJvbmNlIiwicmVxIiwibm90IiwiZW1wdHkiLCJjb25uZWN0aW9uIiwicmVtb3RlQWRkcmVzcyIsImUiLCJkYXRhIiwiZGF0YVN0ciIsImlzU3RyaW5nIiwidG9TdHJpbmciLCJzZXRUaW1lb3V0IiwiRXJyb3IiLCJyZW1vdmVXZWJTb2NrZXRIYW5kbGVyIiwidHJ1ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0FBLFFBQVEsQ0FBQyxrQkFBRCxFQUFxQixZQUFZO0FBQ3ZDLE1BQUlDLFVBQUo7QUFDQSxNQUFJQyxNQUFKO0FBQ0EsTUFBSUMsSUFBSjtBQUNBLFFBQU1DLFVBQVUsR0FBRyxLQUFuQjtBQUNBLFFBQU1DLE9BQU8sR0FBRyxPQUFoQjtBQUVBQyxFQUFBQSxNQUFNLENBQUMsa0JBQWtCO0FBQ3ZCSixJQUFBQSxNQUFNLEdBQUcsSUFBSUssc0JBQUosRUFBVDtBQUNBTCxJQUFBQSxNQUFNLENBQUNNLFNBQVAsR0FBbUJKLFVBQW5CO0FBQ0FELElBQUFBLElBQUksR0FBRyxNQUFNLDJCQUFiO0FBQ0FGLElBQUFBLFVBQVUsR0FBRyxNQUFNLGlCQUFPO0FBQ3hCUSxNQUFBQSx3QkFBd0IsRUFBRSxtQ0FBeUJQLE1BQXpCLENBREY7QUFFeEJDLE1BQUFBO0FBRndCLEtBQVAsQ0FBbkI7QUFJRCxHQVJLLENBQU47QUFTQU8sRUFBQUEsS0FBSyxDQUFDLGtCQUFrQjtBQUN0QixVQUFNVCxVQUFVLENBQUNVLEtBQVgsRUFBTjtBQUNELEdBRkksQ0FBTDtBQUlBWCxFQUFBQSxRQUFRLENBQUMscUJBQUQsRUFBd0IsWUFBWTtBQUMxQ1ksSUFBQUEsRUFBRSxDQUFDLHVEQUFELEVBQTBELGtCQUFrQjtBQUM1RSxZQUFNQyxHQUFHLEdBQUcsSUFBSUMsWUFBVUMsTUFBZCxDQUFxQjtBQUMvQkMsUUFBQUEsUUFBUSxFQUFFO0FBRHFCLE9BQXJCLENBQVo7QUFHQUgsTUFBQUEsR0FBRyxDQUFDSSxFQUFKLENBQU8sWUFBUCxFQUFzQkMsRUFBRCxJQUFRO0FBQzNCLFlBQUlBLEVBQUUsSUFBSUEsRUFBRSxDQUFDQyxVQUFILEtBQWtCTCxZQUFVTSxJQUF0QyxFQUE0QztBQUMxQ0YsVUFBQUEsRUFBRSxDQUFDRyxJQUFILENBQVFoQixPQUFSO0FBQ0Q7QUFDRixPQUpEO0FBS0EsWUFBTWlCLHFCQUFxQixHQUFHckIsVUFBVSxDQUFDc0IsYUFBWCxDQUF5QixTQUF6QixDQUE5QjtBQUNBLFlBQU1DLFFBQVEsR0FBSSxHQUFFQywrQkFBMkIsUUFBL0M7QUFDQSxZQUFNQyxPQUFPLEdBQUcsSUFBaEI7QUFDQSxZQUFNekIsVUFBVSxDQUFDMEIsbUJBQVgsQ0FBK0JILFFBQS9CLEVBQXlDWCxHQUF6QyxDQUFOO0FBQ0FaLE1BQUFBLFVBQVUsQ0FBQ3NCLGFBQVgsQ0FBeUIsU0FBekIsRUFBb0NLLE1BQXBDLENBQTJDQyxFQUEzQyxDQUE4Q0MsS0FBOUMsQ0FBb0RSLHFCQUFwRDs7QUFDQVMsc0JBQUVDLElBQUYsQ0FBTyxNQUFNL0IsVUFBVSxDQUFDZ0Msb0JBQVgsRUFBYixFQUFnREMsTUFBaEQsQ0FBdUROLE1BQXZELENBQThETyxHQUE5RCxDQUFrRSxDQUFsRTs7QUFDQSxZQUFNLElBQUlDLGlCQUFKLENBQU0sQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQy9CLGNBQU1DLE1BQU0sR0FBRyxJQUFJekIsV0FBSixDQUFlLFFBQU8wQixrQkFBVSxJQUFHckMsSUFBSyxHQUFFcUIsUUFBUyxFQUFuRCxDQUFmO0FBQ0FlLFFBQUFBLE1BQU0sQ0FBQ0UsSUFBUCxDQUFZLFlBQVosRUFBMEIsQ0FBQ3ZCLEVBQUQsRUFBS3dCLEdBQUwsS0FBYTtBQUNyQyxjQUFJO0FBQ0Z4QixZQUFBQSxFQUFFLENBQUNVLE1BQUgsQ0FBVWUsR0FBVixDQUFjZCxFQUFkLENBQWlCZSxLQUFqQjtBQUNBRixZQUFBQSxHQUFHLENBQUNHLFVBQUosQ0FBZUMsYUFBZixDQUE2QmxCLE1BQTdCLENBQW9DZSxHQUFwQyxDQUF3Q2QsRUFBeEMsQ0FBMkNlLEtBQTNDO0FBQ0QsV0FIRCxDQUdFLE9BQU9HLENBQVAsRUFBVTtBQUNWVCxZQUFBQSxNQUFNLENBQUNTLENBQUQsQ0FBTjtBQUNEO0FBQ0YsU0FQRDtBQVFBUixRQUFBQSxNQUFNLENBQUNFLElBQVAsQ0FBWSxTQUFaLEVBQXdCTyxJQUFELElBQVU7QUFDL0IsZ0JBQU1DLE9BQU8sR0FBR2xCLGdCQUFFbUIsUUFBRixDQUFXRixJQUFYLElBQW1CQSxJQUFuQixHQUEwQkEsSUFBSSxDQUFDRyxRQUFMLEVBQTFDO0FBQ0FGLFVBQUFBLE9BQU8sQ0FBQ3JCLE1BQVIsQ0FBZU8sR0FBZixDQUFtQjlCLE9BQW5CO0FBQ0FnQyxVQUFBQSxPQUFPO0FBQ1IsU0FKRDtBQUtBRSxRQUFBQSxNQUFNLENBQUNFLElBQVAsQ0FBWSxPQUFaLEVBQXFCSCxNQUFyQjtBQUNBYyxRQUFBQSxVQUFVLENBQUMsTUFBTWQsTUFBTSxDQUFDLElBQUllLEtBQUosQ0FBVSw0REFBVixDQUFELENBQWIsRUFDUjNCLE9BRFEsQ0FBVjtBQUVELE9BbEJLLENBQU47QUFvQkEsT0FBQyxNQUFNekIsVUFBVSxDQUFDcUQsc0JBQVgsQ0FBa0M5QixRQUFsQyxDQUFQLEVBQW9ESSxNQUFwRCxDQUEyREMsRUFBM0QsQ0FBOEQwQixJQUE5RDs7QUFDQXhCLHNCQUFFQyxJQUFGLENBQU8sTUFBTS9CLFVBQVUsQ0FBQ2dDLG9CQUFYLEVBQWIsRUFBZ0RDLE1BQWhELENBQXVETixNQUF2RCxDQUE4RE8sR0FBOUQsQ0FBa0UsQ0FBbEU7O0FBQ0EsWUFBTSxJQUFJQyxpQkFBSixDQUFNLENBQUNDLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUMvQixjQUFNQyxNQUFNLEdBQUcsSUFBSXpCLFdBQUosQ0FBZSxRQUFPMEIsa0JBQVUsSUFBR3JDLElBQUssR0FBRXFCLFFBQVMsRUFBbkQsQ0FBZjtBQUNBZSxRQUFBQSxNQUFNLENBQUN0QixFQUFQLENBQVUsU0FBVixFQUFzQitCLElBQUQsSUFDbkJWLE1BQU0sQ0FBQyxJQUFJZSxLQUFKLENBQVcsdURBQUQsR0FDZCxzQkFBcUJMLElBQUsseUJBRHRCLENBQUQsQ0FEUjtBQUlBVCxRQUFBQSxNQUFNLENBQUN0QixFQUFQLENBQVUsT0FBVixFQUFtQm9CLE9BQW5CO0FBQ0FlLFFBQUFBLFVBQVUsQ0FBQ2YsT0FBRCxFQUFVWCxPQUFWLENBQVY7QUFDRCxPQVJLLENBQU47QUFTQXpCLE1BQUFBLFVBQVUsQ0FBQ3NCLGFBQVgsQ0FBeUIsU0FBekIsRUFBb0NLLE1BQXBDLENBQTJDQyxFQUEzQyxDQUE4Q0MsS0FBOUMsQ0FBb0RSLHFCQUFwRDtBQUNELEtBL0NDLENBQUY7QUFnREQsR0FqRE8sQ0FBUjtBQWtERCxDQXRFTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIHNlcnZlciwgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCBERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWFxufSBmcm9tICcuLi8uLi8uLi9saWInO1xuaW1wb3J0IHsgRmFrZURyaXZlciB9IGZyb20gJy4uL3Byb3RvY29sL2Zha2UtZHJpdmVyJztcbmltcG9ydCBXZWJTb2NrZXQgZnJvbSAnd3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtURVNUX0hPU1QsIGdldFRlc3RQb3J0fSBmcm9tICcuLi8uLi9oZWxwZXJzJztcblxuXG5kZXNjcmliZSgnV2Vic29ja2V0cyAoZTJlKScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJhc2VTZXJ2ZXI7XG4gIGxldCBkcml2ZXI7XG4gIGxldCBwb3J0O1xuICBjb25zdCBTRVNTSU9OX0lEID0gJ2Zvbyc7XG4gIGNvbnN0IFdTX0RBVEEgPSAnSGVsbG8nO1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZHJpdmVyID0gbmV3IEZha2VEcml2ZXIoKTtcbiAgICBkcml2ZXIuc2Vzc2lvbklkID0gU0VTU0lPTl9JRDtcbiAgICBwb3J0ID0gYXdhaXQgZ2V0VGVzdFBvcnQoKTtcbiAgICBiYXNlU2VydmVyID0gYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uKGRyaXZlciksXG4gICAgICBwb3J0LFxuICAgIH0pO1xuICB9KTtcbiAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGJhc2VTZXJ2ZXIuY2xvc2UoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dlYiBzb2NrZXRzIHN1cHBvcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIGFkZCB3ZWJzb2NrZXQgaGFuZGxlciBhbmQgcmVtb3ZlIGl0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd3NzID0gbmV3IFdlYlNvY2tldC5TZXJ2ZXIoe1xuICAgICAgICBub1NlcnZlcjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgd3NzLm9uKCdjb25uZWN0aW9uJywgKHdzKSA9PiB7XG4gICAgICAgIGlmICh3cyAmJiB3cy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgICAgIHdzLnNlbmQoV1NfREFUQSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJldmlvdXNMaXN0ZW5lckNvdW50ID0gYmFzZVNlcnZlci5saXN0ZW5lckNvdW50KCd1cGdyYWRlJyk7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IGAke0RFRkFVTFRfV1NfUEFUSE5BTUVfUFJFRklYfS9oZWxsb2A7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gNTAwMDtcbiAgICAgIGF3YWl0IGJhc2VTZXJ2ZXIuYWRkV2ViU29ja2V0SGFuZGxlcihlbmRwb2ludCwgd3NzKTtcbiAgICAgIGJhc2VTZXJ2ZXIubGlzdGVuZXJDb3VudCgndXBncmFkZScpLnNob3VsZC5iZS5hYm92ZShwcmV2aW91c0xpc3RlbmVyQ291bnQpO1xuICAgICAgXy5rZXlzKGF3YWl0IGJhc2VTZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMoKSkubGVuZ3RoLnNob3VsZC5lcWwoMSk7XG4gICAgICBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBXZWJTb2NrZXQoYHdzOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0ke2VuZHBvaW50fWApO1xuICAgICAgICBjbGllbnQub25jZSgnY29ubmVjdGlvbicsICh3cywgcmVxKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdzLnNob3VsZC5ub3QuYmUuZW1wdHk7XG4gICAgICAgICAgICByZXEuY29ubmVjdGlvbi5yZW1vdGVBZGRyZXNzLnNob3VsZC5ub3QuYmUuZW1wdHk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNsaWVudC5vbmNlKCdtZXNzYWdlJywgKGRhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhU3RyID0gXy5pc1N0cmluZyhkYXRhKSA/IGRhdGEgOiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgICAgZGF0YVN0ci5zaG91bGQuZXFsKFdTX0RBVEEpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNsaWVudC5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignTm8gd2Vic29ja2V0IG1lc3NhZ2VzIGhhdmUgYmVlbiByZWNlaXZlZCBhZnRlciB0aGUgdGltZW91dCcpKSxcbiAgICAgICAgICB0aW1lb3V0KTtcbiAgICAgIH0pO1xuXG4gICAgICAoYXdhaXQgYmFzZVNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKGVuZHBvaW50KSkuc2hvdWxkLmJlLnRydWU7XG4gICAgICBfLmtleXMoYXdhaXQgYmFzZVNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycygpKS5sZW5ndGguc2hvdWxkLmVxbCgwKTtcbiAgICAgIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fSR7ZW5kcG9pbnR9YCk7XG4gICAgICAgIGNsaWVudC5vbignbWVzc2FnZScsIChkYXRhKSA9PlxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYE5vIHdlYnNvY2tldCBtZXNzYWdlcyBhcmUgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGhhbmRsZXIgYCArXG4gICAgICAgICAgICBgaGFzIGJlZW4gcmVtb3ZlZC4gJyR7ZGF0YX0nIGlzIHJlY2VpdmVkIGluc3RlYWQuIGApKVxuICAgICAgICApO1xuICAgICAgICBjbGllbnQub24oJ2Vycm9yJywgcmVzb2x2ZSk7XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCk7XG4gICAgICB9KTtcbiAgICAgIGJhc2VTZXJ2ZXIubGlzdGVuZXJDb3VudCgndXBncmFkZScpLnNob3VsZC5iZS5hYm92ZShwcmV2aW91c0xpc3RlbmVyQ291bnQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -43,7 +43,7 @@ describe('#getLogEvents', function () {
|
|
|
43
43
|
});
|
|
44
44
|
|
|
45
45
|
d._eventHistory.testCommand = ['1', '2', '3'];
|
|
46
|
-
await d.getLogEvents().should.eql({
|
|
46
|
+
(await d.getLogEvents()).should.eql({
|
|
47
47
|
commands: [],
|
|
48
48
|
testCommand: ['1', '2', '3']
|
|
49
49
|
});
|
|
@@ -56,7 +56,7 @@ describe('#getLogEvents', function () {
|
|
|
56
56
|
});
|
|
57
57
|
|
|
58
58
|
d._eventHistory.testCommand = ['1', '2', '3'];
|
|
59
|
-
await d.getLogEvents('testCommand').should.eql({
|
|
59
|
+
(await d.getLogEvents('testCommand')).should.eql({
|
|
60
60
|
testCommand: ['1', '2', '3']
|
|
61
61
|
});
|
|
62
62
|
});
|
|
@@ -68,7 +68,7 @@ describe('#getLogEvents', function () {
|
|
|
68
68
|
});
|
|
69
69
|
|
|
70
70
|
d._eventHistory.testCommand = ['1', '2', '3'];
|
|
71
|
-
await d.getLogEvents('testCommandDummy').should.eql({});
|
|
71
|
+
(await d.getLogEvents('testCommandDummy')).should.eql({});
|
|
72
72
|
});
|
|
73
73
|
it('should filter with multiple event keys', async function () {
|
|
74
74
|
const d = new _lib.BaseDriver();
|
|
@@ -79,7 +79,7 @@ describe('#getLogEvents', function () {
|
|
|
79
79
|
|
|
80
80
|
d._eventHistory.testCommand = ['1', '2', '3'];
|
|
81
81
|
d._eventHistory.testCommand2 = ['4', '5'];
|
|
82
|
-
await d.getLogEvents(['testCommand', 'testCommand2']).should.eql({
|
|
82
|
+
(await d.getLogEvents(['testCommand', 'testCommand2'])).should.eql({
|
|
83
83
|
testCommand: ['1', '2', '3'],
|
|
84
84
|
testCommand2: ['4', '5']
|
|
85
85
|
});
|
|
@@ -92,7 +92,7 @@ describe('#getLogEvents', function () {
|
|
|
92
92
|
});
|
|
93
93
|
|
|
94
94
|
d._eventHistory['custom:appiumEvent'] = ['1', '2', '3'];
|
|
95
|
-
await d.getLogEvents(['custom:appiumEvent']).should.eql({
|
|
95
|
+
(await d.getLogEvents(['custom:appiumEvent'])).should.eql({
|
|
96
96
|
'custom:appiumEvent': ['1', '2', '3']
|
|
97
97
|
});
|
|
98
98
|
});
|
|
@@ -104,7 +104,7 @@ describe('#getLogEvents', function () {
|
|
|
104
104
|
});
|
|
105
105
|
|
|
106
106
|
d._eventHistory.testCommand = ['1', '2', '3'];
|
|
107
|
-
await d.getLogEvents(['noEventName']).should.eql({});
|
|
107
|
+
(await d.getLogEvents(['noEventName'])).should.eql({});
|
|
108
108
|
});
|
|
109
109
|
});
|
|
110
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iYXNlZHJpdmVyL2NvbW1hbmRzL2V2ZW50LnNwZWMuanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJpdCIsImQiLCJCYXNlRHJpdmVyIiwiX2V2ZW50SGlzdG9yeSIsInNob3VsZCIsImVxbCIsImNvbW1hbmRzIiwibG9nQ3VzdG9tRXZlbnQiLCJfIiwia2V5cyIsImxvZ0V2ZW50IiwiZXZlbnRzIiwiZ2V0TG9nRXZlbnRzIiwidGVzdENvbW1hbmQiLCJ0ZXN0Q29tbWFuZDIiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUlBQSxRQUFRLENBQUMsdUJBQUQsRUFBMEIsWUFBWTtBQUM1Q0MsRUFBQUEsRUFBRSxDQUFDLGdDQUFELEVBQW1DLGtCQUFrQjtBQUNyRCxVQUFNQyxDQUFDLEdBQUcsSUFBSUMsZUFBSixFQUFWOztBQUNBRCxJQUFBQSxDQUFDLENBQUNFLGFBQUYsQ0FBZ0JDLE1BQWhCLENBQXVCQyxHQUF2QixDQUEyQjtBQUFDQyxNQUFBQSxRQUFRLEVBQUU7QUFBWCxLQUEzQjs7QUFDQSxVQUFNTCxDQUFDLENBQUNNLGNBQUYsQ0FBaUIsT0FBakIsRUFBMEIsU0FBMUIsQ0FBTjs7QUFDQUMsb0JBQUVDLElBQUYsQ0FBT1IsQ0FBQyxDQUFDRSxhQUFULEVBQXdCQyxNQUF4QixDQUErQkMsR0FBL0IsQ0FBbUMsQ0FBQyxVQUFELEVBQWEsZUFBYixDQUFuQztBQUNELEdBTEMsQ0FBRjtBQU1BTCxFQUFBQSxFQUFFLENBQUMsNkNBQUQsRUFBZ0Qsa0JBQWtCO0FBQ2xFLFVBQU1DLENBQUMsR0FBRyxJQUFJQyxlQUFKLEVBQVY7O0FBQ0FELElBQUFBLENBQUMsQ0FBQ0UsYUFBRixDQUFnQkMsTUFBaEIsQ0FBdUJDLEdBQXZCLENBQTJCO0FBQUNDLE1BQUFBLFFBQVEsRUFBRTtBQUFYLEtBQTNCOztBQUNBTCxJQUFBQSxDQUFDLENBQUNTLFFBQUYsQ0FBVyxhQUFYO0FBQ0EsVUFBTVQsQ0FBQyxD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QyxNQUFNWixDQUFDLENBQUNXLFlBQUYsQ0FBZSxDQUFDLGFBQUQsQ0FBZixDQUFQLEVBQXdDUixNQUF4QyxDQUErQ0MsR0FBL0MsQ0FBbUQsRUFBbkQ7QUFDRCxHQUxDLENBQUY7QUFNRCxDQW5ETyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9saWInO1xuXG5cblxuZGVzY3JpYmUoJ2xvZ2dpbmcgY3VzdG9tIGV2ZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgaXQoJ3Nob3VsZCBhbGxvdyBsb2dnaW5nIG9mIGV2ZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICBkLl9ldmVudEhpc3Rvcnkuc2hvdWxkLmVxbCh7Y29tbWFuZHM6IFtdfSk7XG4gICAgYXdhaXQgZC5sb2dDdXN0b21FdmVudCgnbXlvcmcnLCAnbXlldmVudCcpO1xuICAgIF8ua2V5cyhkLl9ldmVudEhpc3RvcnkpLnNob3VsZC5lcWwoWydjb21tYW5kcycsICdteW9yZzpteWV2ZW50J10pO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBnZXQgYWxsIGV2ZW50cyBpbmNsdWRpbmcgY3VzdG9tIG9uZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZCA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnNob3VsZC5lcWwoe2NvbW1hbmRzOiBbXX0pO1xuICAgIGQubG9nRXZlbnQoJ2FwcGl1bUV2ZW50Jyk7XG4gICAgYXdhaXQgZC5sb2dDdXN0b21FdmVudCgnbXlvcmcnLCAnbXlldmVudCcpO1xuICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IGQuZ2V0TG9nRXZlbnRzKCk7XG4gICAgXy5rZXlzKGV2ZW50cykuc2hvdWxkLmVxbChbJ2NvbW1hbmRzJywgJ2FwcGl1bUV2ZW50JywgJ215b3JnOm15ZXZlbnQnXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCcjZ2V0TG9nRXZlbnRzJywgZnVuY3Rpb24gKCkge1xuICBpdCgnc2hvdWxkIGFsbG93IHRvIGdldCBhbGwgZXZlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGQgPSBuZXcgQmFzZURyaXZlcigpO1xuICAgIGQuX2V2ZW50SGlzdG9yeS5zaG91bGQuZXFsKHtjb21tYW5kczogW119KTtcbiAgICBkLl9ldmVudEhpc3RvcnkudGVzdENvbW1hbmQgPSBbJzEnLCAnMicsICczJ107XG4gICAgKGF3YWl0IGQuZ2V0TG9nRXZlbnRzKCkpLnNob3VsZC5lcWwoe1xuICAgICAgY29tbWFuZHM6IFtdLCB0ZXN0Q29tbWFuZDogWycxJywgJzInLCAnMyddXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmlsdGVyIHdpdGggdGVzdENvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZCA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnNob3VsZC5lcWwoe2NvbW1hbmRzOiBbXX0pO1xuICAgIGQuX2V2ZW50SGlzdG9yeS50ZXN0Q29tbWFuZCA9IFsnMScsICcyJywgJzMnXTtcbiAgICAoYXdhaXQgZC5nZXRMb2dFdmVudHMoJ3Rlc3RDb21tYW5kJykpLnNob3VsZC5lcWwoe1xuICAgICAgdGVzdENvbW1hbmQ6IFsnMScsICcyJywgJzMnXVxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBmaWx0ZXIgd2l0aCB3cm9uZyBidXQgY2FuIGJlIGEgcGFydCBvZiB0aGUgZXZlbnQgbmFtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICBkLl9ldmVudEhpc3Rvcnkuc2hvdWxkLmVxbCh7Y29tbWFuZHM6IFtdfSk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnRlc3RDb21tYW5kID0gWycxJywgJzInLCAnMyddO1xuICAgIChhd2FpdCBkLmdldExvZ0V2ZW50cygndGVzdENvbW1hbmREdW1teScpKS5zaG91bGQuZXFsKHt9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmaWx0ZXIgd2l0aCBtdWx0aXBsZSBldmVudCBrZXlzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGQgPSBuZXcgQmFzZURyaXZlcigpO1xuICAgIGQuX2V2ZW50SGlzdG9yeS5zaG91bGQuZXFsKHtjb21tYW5kczogW119KTtcbiAgICBkLl9ldmVudEhpc3RvcnkudGVzdENvbW1hbmQgPSBbJzEnLCAnMicsICczJ107XG4gICAgZC5fZXZlbnRIaXN0b3J5LnRlc3RDb21tYW5kMiA9IFsnNCcsICc1J107XG4gICAgKGF3YWl0IGQuZ2V0TG9nRXZlbnRzKFsndGVzdENvbW1hbmQnLCAndGVzdENvbW1hbmQyJ10pKS5zaG91bGQuZXFsKHtcbiAgICAgIHRlc3RDb21tYW5kOiBbJzEnLCAnMicsICczJ10sIHRlc3RDb21tYW5kMjogWyc0JywgJzUnXVxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZpbHRlciB3aXRoIGN1c3RvbSBldmVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZCA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgZC5fZXZlbnRIaXN0b3J5LnNob3VsZC5lcWwoe2NvbW1hbmRzOiBbXX0pO1xuICAgIGQuX2V2ZW50SGlzdG9yeVsnY3VzdG9tOmFwcGl1bUV2ZW50J10gPSBbJzEnLCAnMicsICczJ107XG4gICAgKGF3YWl0IGQuZ2V0TG9nRXZlbnRzKFsnY3VzdG9tOmFwcGl1bUV2ZW50J10pKS5zaG91bGQuZXFsKHtcbiAgICAgICdjdXN0b206YXBwaXVtRXZlbnQnOiBbJzEnLCAnMicsICczJ11cbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgZmlsdGVyIHdpdGggbm8gZXhpc3RlZCBldmVudCBuYW1lJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGQgPSBuZXcgQmFzZURyaXZlcigpO1xuICAgIGQuX2V2ZW50SGlzdG9yeS5zaG91bGQuZXFsKHtjb21tYW5kczogW119KTtcbiAgICBkLl9ldmVudEhpc3RvcnkudGVzdENvbW1hbmQgPSBbJzEnLCAnMicsICczJ107XG4gICAgKGF3YWl0IGQuZ2V0TG9nRXZlbnRzKFsnbm9FdmVudE5hbWUnXSkpLnNob3VsZC5lcWwoe30pO1xuICB9KTtcbn0pO1xuIl19
|