@appium/base-driver 8.2.3 → 8.3.1
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.js +2 -4
- package/build/lib/basedriver/commands/event.js +2 -4
- package/build/lib/basedriver/commands/find.js +5 -14
- package/build/lib/basedriver/commands/index.js +2 -4
- package/build/lib/basedriver/commands/log.js +4 -9
- package/build/lib/basedriver/commands/session.js +19 -30
- package/build/lib/basedriver/commands/settings.js +5 -11
- package/build/lib/basedriver/commands/timeout.js +11 -18
- package/build/lib/basedriver/desired-caps.js +2 -4
- package/build/lib/basedriver/device-settings.js +15 -5
- package/build/lib/basedriver/driver.js +36 -23
- package/build/lib/basedriver/helpers.js +10 -12
- package/build/lib/basedriver/logger.js +2 -4
- package/build/lib/constants.js +2 -4
- package/build/lib/express/crash.js +2 -4
- package/build/lib/express/express-logging.js +3 -5
- package/build/lib/express/idempotency.js +3 -5
- package/build/lib/express/logger.js +2 -4
- package/build/lib/express/middleware.js +2 -4
- package/build/lib/express/server.js +2 -4
- package/build/lib/express/static.js +2 -4
- package/build/lib/express/websocket.js +2 -4
- package/build/lib/helpers/capabilities.js +37 -0
- package/build/lib/index.js +4 -8
- package/build/lib/jsonwp-proxy/protocol-converter.js +19 -15
- package/build/lib/jsonwp-proxy/proxy.js +20 -15
- package/build/lib/jsonwp-status/status.js +2 -4
- package/build/lib/protocol/errors.js +2 -4
- package/build/lib/protocol/helpers.js +2 -4
- package/build/lib/protocol/index.js +2 -4
- package/build/lib/protocol/protocol.js +37 -30
- package/build/lib/protocol/routes.js +68 -4
- package/build/lib/protocol/validators.js +2 -4
- package/build/test/basedriver/README.md +5 -0
- package/build/test/basedriver/driver-e2e-tests.js +2 -4
- package/build/test/basedriver/driver-tests.js +12 -17
- package/build/test/basedriver/index.js +2 -4
- package/build/test/e2e/basedriver/driver.e2e.spec.js +15 -0
- package/build/test/e2e/basedriver/helpers.e2e.spec.js +192 -0
- package/build/test/e2e/basedriver/websockets.e2e.spec.js +82 -0
- package/build/test/e2e/express/server.e2e.spec.js +159 -0
- package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +59 -0
- package/build/test/e2e/protocol/fake-driver.js +163 -0
- package/build/test/e2e/protocol/helpers.js +25 -0
- package/build/test/e2e/protocol/protocol.e2e.spec.js +1186 -0
- package/build/test/helpers.js +2 -4
- package/build/test/unit/basedriver/capabilities.spec.js +672 -0
- package/build/test/unit/basedriver/capability.spec.js +353 -0
- package/build/test/unit/basedriver/commands/event.spec.js +110 -0
- package/build/test/unit/basedriver/commands/log.spec.js +85 -0
- package/build/test/unit/basedriver/driver.spec.js +15 -0
- package/build/test/unit/basedriver/helpers.spec.js +151 -0
- package/build/test/unit/basedriver/timeout.spec.js +135 -0
- package/build/test/unit/express/server.spec.js +155 -0
- package/build/test/unit/express/static.spec.js +26 -0
- package/build/test/unit/jsonwp-proxy/mock-request.js +91 -0
- package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +171 -0
- package/build/test/unit/jsonwp-proxy/proxy.spec.js +292 -0
- package/build/test/unit/jsonwp-proxy/url.spec.js +165 -0
- package/build/test/unit/jsonwp-status/status.spec.js +34 -0
- package/build/test/unit/protocol/errors.spec.js +390 -0
- package/build/test/unit/protocol/routes.spec.js +80 -0
- package/build/test/unit/protocol/validator.spec.js +149 -0
- package/lib/basedriver/commands/find.js +3 -6
- package/lib/basedriver/commands/log.js +2 -4
- package/lib/basedriver/commands/session.js +21 -22
- package/lib/basedriver/commands/settings.js +3 -5
- package/lib/basedriver/commands/timeout.js +9 -10
- package/lib/basedriver/device-settings.js +10 -1
- package/lib/basedriver/driver.js +36 -12
- package/lib/basedriver/helpers.js +13 -11
- package/lib/express/express-logging.js +1 -1
- package/lib/express/idempotency.js +1 -1
- package/lib/helpers/capabilities.js +25 -0
- package/lib/index.js +2 -2
- package/lib/jsonwp-proxy/protocol-converter.js +14 -13
- package/lib/jsonwp-proxy/proxy.js +16 -12
- package/lib/protocol/protocol.js +34 -29
- package/lib/protocol/routes.js +60 -1
- package/package.json +36 -24
- package/test/basedriver/README.md +5 -0
- package/test/basedriver/driver-e2e-tests.js +1 -1
- package/test/basedriver/driver-tests.js +12 -7
- package/build/lib/protocol/sessions-cache.js +0 -88
- package/build/test/basedriver/capabilities-specs.js +0 -632
- package/build/test/basedriver/capability-specs.js +0 -396
- package/build/test/basedriver/commands/event-specs.js +0 -112
- package/build/test/basedriver/commands/log-specs.js +0 -80
- package/build/test/basedriver/driver-e2e-specs.js +0 -17
- package/build/test/basedriver/driver-specs.js +0 -17
- package/build/test/basedriver/helpers-e2e-specs.js +0 -194
- package/build/test/basedriver/helpers-specs.js +0 -153
- package/build/test/basedriver/timeout-specs.js +0 -139
- package/build/test/basedriver/websockets-e2e-specs.js +0 -84
- package/build/test/express/server-e2e-specs.js +0 -156
- package/build/test/express/server-specs.js +0 -151
- package/build/test/express/static-specs.js +0 -23
- package/build/test/jsonwp-proxy/mock-request.js +0 -93
- package/build/test/jsonwp-proxy/protocol-converter-specs.js +0 -173
- package/build/test/jsonwp-proxy/proxy-e2e-specs.js +0 -61
- package/build/test/jsonwp-proxy/proxy-specs.js +0 -294
- package/build/test/jsonwp-proxy/url-specs.js +0 -167
- package/build/test/jsonwp-status/status-specs.js +0 -36
- package/build/test/protocol/errors-specs.js +0 -388
- package/build/test/protocol/fake-driver.js +0 -168
- package/build/test/protocol/helpers.js +0 -27
- package/build/test/protocol/protocol-e2e-specs.js +0 -1182
- package/build/test/protocol/routes-specs.js +0 -82
- package/build/test/protocol/validator-specs.js +0 -151
- package/lib/protocol/sessions-cache.js +0 -74
- package/test/basedriver/capabilities-specs.js +0 -505
- package/test/basedriver/capability-specs.js +0 -409
- package/test/basedriver/commands/event-specs.js +0 -74
- package/test/basedriver/commands/log-specs.js +0 -70
- package/test/basedriver/driver-e2e-specs.js +0 -8
- package/test/basedriver/driver-specs.js +0 -8
- package/test/basedriver/fixtures/BadZippedApp.zip +0 -1
- package/test/basedriver/fixtures/FakeAndroidApp.apk +0 -1
- package/test/basedriver/fixtures/FakeAndroidApp.asd +0 -0
- package/test/basedriver/fixtures/FakeIOSApp.app +0 -1
- package/test/basedriver/fixtures/FakeIOSApp.app.zip +0 -0
- package/test/basedriver/fixtures/FakeIOSApp.ipa +0 -0
- package/test/basedriver/fixtures/custom-element-finder-bad.js +0 -5
- package/test/basedriver/fixtures/custom-element-finder.js +0 -29
- package/test/basedriver/helpers-e2e-specs.js +0 -187
- package/test/basedriver/helpers-specs.js +0 -137
- package/test/basedriver/timeout-specs.js +0 -133
- package/test/basedriver/websockets-e2e-specs.js +0 -75
|
@@ -9,8 +9,6 @@ exports.helpers = exports.default = exports.commands = void 0;
|
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
12
|
-
var _logger = _interopRequireDefault(require("../logger"));
|
|
13
|
-
|
|
14
12
|
var _asyncbox = require("asyncbox");
|
|
15
13
|
|
|
16
14
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
@@ -28,7 +26,7 @@ const MIN_TIMEOUT = 0;
|
|
|
28
26
|
|
|
29
27
|
commands.timeouts = async function timeouts(type, ms, script, pageLoad, implicit) {
|
|
30
28
|
if (_support.util.hasValue(type) && _support.util.hasValue(ms)) {
|
|
31
|
-
|
|
29
|
+
this.log.debug(`MJSONWP timeout arguments: ${JSON.stringify({
|
|
32
30
|
type,
|
|
33
31
|
ms
|
|
34
32
|
})}}`);
|
|
@@ -55,7 +53,7 @@ commands.timeouts = async function timeouts(type, ms, script, pageLoad, implicit
|
|
|
55
53
|
}
|
|
56
54
|
}
|
|
57
55
|
|
|
58
|
-
|
|
56
|
+
this.log.debug(`W3C timeout argument: ${JSON.stringify({
|
|
59
57
|
script,
|
|
60
58
|
pageLoad,
|
|
61
59
|
implicit
|
|
@@ -95,11 +93,10 @@ commands.implicitWait = async function implicitWait(ms) {
|
|
|
95
93
|
|
|
96
94
|
helpers.setImplicitWait = function setImplicitWait(ms) {
|
|
97
95
|
this.implicitWaitMs = ms;
|
|
98
|
-
|
|
99
|
-
_logger.default.debug(`Set implicit wait to ${ms}ms`);
|
|
96
|
+
this.log.debug(`Set implicit wait to ${ms}ms`);
|
|
100
97
|
|
|
101
98
|
if (this.managedDrivers && this.managedDrivers.length) {
|
|
102
|
-
|
|
99
|
+
this.log.debug('Setting implicit wait on managed drivers');
|
|
103
100
|
|
|
104
101
|
for (let driver of this.managedDrivers) {
|
|
105
102
|
if (_lodash.default.isFunction(driver.setImplicitWait)) {
|
|
@@ -131,11 +128,10 @@ commands.newCommandTimeout = async function newCommandTimeout(ms) {
|
|
|
131
128
|
|
|
132
129
|
helpers.setNewCommandTimeout = function setNewCommandTimeout(ms) {
|
|
133
130
|
this.newCommandTimeoutMs = ms;
|
|
134
|
-
|
|
135
|
-
_logger.default.debug(`Set new command timeout to ${ms}ms`);
|
|
131
|
+
this.log.debug(`Set new command timeout to ${ms}ms`);
|
|
136
132
|
|
|
137
133
|
if (this.managedDrivers && this.managedDrivers.length) {
|
|
138
|
-
|
|
134
|
+
this.log.debug('Setting new command timeout on managed drivers');
|
|
139
135
|
|
|
140
136
|
for (let driver of this.managedDrivers) {
|
|
141
137
|
if (_lodash.default.isFunction(driver.setNewCommandTimeout)) {
|
|
@@ -156,15 +152,14 @@ helpers.startNewCommandTimeout = function startNewCommandTimeout() {
|
|
|
156
152
|
this.clearNewCommandTimeout();
|
|
157
153
|
if (!this.newCommandTimeoutMs) return;
|
|
158
154
|
this.noCommandTimer = setTimeout(async () => {
|
|
159
|
-
|
|
160
|
-
|
|
155
|
+
this.log.warn(`Shutting down because we waited ` + `${this.newCommandTimeoutMs / 1000.0} seconds for a command`);
|
|
161
156
|
const errorMessage = `New Command Timeout of ` + `${this.newCommandTimeoutMs / 1000.0} seconds ` + `expired. Try customizing the timeout using the ` + `'newCommandTimeout' desired capability`;
|
|
162
157
|
await this.startUnexpectedShutdown(new Error(errorMessage));
|
|
163
158
|
}, this.newCommandTimeoutMs);
|
|
164
159
|
};
|
|
165
160
|
|
|
166
161
|
helpers.implicitWaitForCondition = async function implicitWaitForCondition(condFn) {
|
|
167
|
-
|
|
162
|
+
this.log.debug(`Waiting up to ${this.implicitWaitMs} ms for condition`);
|
|
168
163
|
|
|
169
164
|
let wrappedCondFn = async (...args) => {
|
|
170
165
|
this.clearNewCommandTimeout();
|
|
@@ -174,7 +169,7 @@ helpers.implicitWaitForCondition = async function implicitWaitForCondition(condF
|
|
|
174
169
|
return await (0, _asyncbox.waitForCondition)(wrappedCondFn, {
|
|
175
170
|
waitMs: this.implicitWaitMs,
|
|
176
171
|
intervalMs: 500,
|
|
177
|
-
logger:
|
|
172
|
+
logger: this.log
|
|
178
173
|
});
|
|
179
174
|
};
|
|
180
175
|
|
|
@@ -190,7 +185,5 @@ helpers.parseTimeoutArgument = function parseTimeoutArgument(ms) {
|
|
|
190
185
|
|
|
191
186
|
Object.assign(extensions, commands, helpers);
|
|
192
187
|
var _default = extensions;
|
|
193
|
-
exports.default = _default;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL3RpbWVvdXQuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsIk1JTl9USU1FT1VUIiwidGltZW91dHMiLCJ0eXBlIiwibXMiLCJzY3JpcHQiLCJwYWdlTG9hZCIsImltcGxpY2l0IiwidXRpbCIsImhhc1ZhbHVlIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwibmV3Q29tbWFuZFRpbWVvdXQiLCJpbXBsaWNpdFdhaXRNSlNPTldQIiwicGFnZUxvYWRUaW1lb3V0TUpTT05XUCIsInNjcmlwdFRpbWVvdXRNSlNPTldQIiwiRXJyb3IiLCJzY3JpcHRUaW1lb3V0VzNDIiwicGFnZUxvYWRUaW1lb3V0VzNDIiwiaW1wbGljaXRXYWl0VzNDIiwiZ2V0VGltZW91dHMiLCJjb21tYW5kIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsImltcGxpY2l0V2FpdE1zIiwiaW1wbGljaXRXYWl0Iiwic2V0SW1wbGljaXRXYWl0IiwicGFyc2VUaW1lb3V0QXJndW1lbnQiLCJtYW5hZ2VkRHJpdmVycyIsImxlbmd0aCIsImRyaXZlciIsIl8iLCJpc0Z1bmN0aW9uIiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsInNldE5ld0NvbW1hbmRUaW1lb3V0IiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsIm5vQ29tbWFuZFRpbWVyIiwiY2xlYXJUaW1lb3V0Iiwic3RhcnROZXdDb21tYW5kVGltZW91dCIsInNldFRpbWVvdXQiLCJ3YXJuIiwiZXJyb3JNZXNzYWdlIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJjb25kRm4iLCJ3cmFwcGVkQ29uZEZuIiwiYXJncyIsIndhaXRNcyIsImludGVydmFsTXMiLCJsb2dnZXIiLCJkdXJhdGlvbiIsInBhcnNlSW50IiwiaXNOYU4iLCJVbmtub3duRXJyb3IiLCJPYmplY3QiLCJhc3NpZ24i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QUwsQ0FBNkIsSUFBSTFCLEtBQUosQ0FBVXlCLFlBQVYsQ0FBN0IsQ0FBTjtBQUNELEdBUitCLEVBUTdCLEtBQUtuQixtQkFSd0IsQ0FBaEM7QUFTRCxDQWhCRDs7QUFrQkF6QixPQUFPLENBQUM4Qyx3QkFBUixHQUFtQyxlQUFlQSx3QkFBZixDQUF5Q0MsTUFBekMsRUFBaUQ7QUFDbEZwQyxrQkFBSUMsS0FBSixDQUFXLGlCQUFnQixLQUFLYyxjQUFlLG1CQUEvQzs7QUFDQSxNQUFJc0IsYUFBYSxHQUFHLE9BQU8sR0FBR0MsSUFBVixLQUFtQjtBQUVyQyxTQUFLWCxzQkFBTDtBQUVBLFdBQU8sTUFBTVMsTUFBTSxDQUFDLEdBQUdFLElBQUosQ0FBbkI7QUFDRCxHQUxEOztBQU1BLFNBQU8sTUFBTSxnQ0FBaUJELGFBQWpCLEVBQWdDO0FBQzNDRSxJQUFBQSxNQUFNLEVBQUUsS0FBS3hCLGNBRDhCO0FBQ2R5QixJQUFBQSxVQUFVLEVBQUUsR0FERTtBQUNHQyxJQUFBQSxNQUFNLEVBQUV6QztBQURYLEdBQWhDLENBQWI7QUFHRCxDQVhEOztBQWFBWCxPQUFPLENBQUM2QixvQkFBUixHQUErQixTQUFTQSxvQkFBVCxDQUErQnhCLEVBQS9CLEVBQW1DO0FBQ2hFLE1BQUlnRCxRQUFRLEdBQUdDLFFBQVEsQ0FBQ2pELEVBQUQsRUFBSyxFQUFMLENBQXZCOztBQUNBLE1BQUk0QixnQkFBRXNCLEtBQUYsQ0FBUUYsUUFBUixLQUFxQkEsUUFBUSxHQUFHbkQsV0FBcEMsRUFBaUQ7QUFDL0MsVUFBTSxJQUFJaUMsaUJBQU9xQixZQUFYLENBQXlCLDBCQUF5Qm5ELEVBQUcsR0FBckQsQ0FBTjtBQUNEOztBQUNELFNBQU9nRCxRQUFQO0FBQ0QsQ0FORDs7QUFRQUksTUFBTSxDQUFDQyxNQUFQLENBQWN6RCxVQUFkLEVBQTBCRixRQUExQixFQUFvQ0MsT0FBcEM7ZUFFZUMsVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICcuLi8uLi9wcm90b2NvbCc7XG5cblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb25zdCBNSU5fVElNRU9VVCA9IDA7XG5cbmNvbW1hbmRzLnRpbWVvdXRzID0gYXN5bmMgZnVuY3Rpb24gdGltZW91dHMgKHR5cGUsIG1zLCBzY3JpcHQsIHBhZ2VMb2FkLCBpbXBsaWNpdCkge1xuICBpZiAodXRpbC5oYXNWYWx1ZSh0eXBlKSAmJiB1dGlsLmhhc1ZhbHVlKG1zKSkge1xuICAgIGxvZy5kZWJ1ZyhgTUpTT05XUCB0aW1lb3V0IGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeSh7dHlwZSwgbXN9KX19YCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvbW1hbmQnOlxuICAgICAgICBhd2FpdCB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0KG1zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnaW1wbGljaXQnOlxuICAgICAgICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdE1KU09OV1AobXMpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdwYWdlIGxvYWQnOlxuICAgICAgICBhd2FpdCB0aGlzLnBhZ2VMb2FkVGltZW91dE1KU09OV1AobXMpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdzY3JpcHQnOlxuICAgICAgICBhd2FpdCB0aGlzLnNjcmlwdFRpbWVvdXRNSlNPTldQKG1zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHt0eXBlfScgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBNSlNPTldQIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICAvLyBPdGhlcndpc2UgYXNzdW1lIGl0IGlzIFczQyBwcm90b2NvbFxuICBsb2cuZGVidWcoYFczQyB0aW1lb3V0IGFyZ3VtZW50OiAke0pTT04uc3RyaW5naWZ5KHtzY3JpcHQsIHBhZ2VMb2FkLCBpbXBsaWNpdH0pfX1gKTtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoc2NyaXB0KSkge1xuICAgIGF3YWl0IHRoaXMuc2NyaXB0VGltZW91dFczQyhzY3JpcHQpO1xuICB9XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHBhZ2VMb2FkKSkge1xuICAgIGF3YWl0IHRoaXMucGFnZUxvYWRUaW1lb3V0VzNDKHBhZ2VMb2FkKTtcbiAgfVxuICBpZiAodXRpbC5oYXNWYWx1ZShpbXBsaWNpdCkpIHtcbiAgICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdFczQyhpbXBsaWNpdCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFRpbWVvdXRzID0gYXN5bmMgZnVuY3Rpb24gZ2V0VGltZW91dHMgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kOiB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMsXG4gICAgaW1wbGljaXQ6IHRoaXMuaW1wbGljaXRXYWl0TXMsXG4gIH07XG59O1xuXG4vLyBpbXBsaWNpdFxuY29tbWFuZHMuaW1wbGljaXRXYWl0VzNDID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0VzNDIChtcykge1xuICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdChtcyk7XG59O1xuXG5jb21tYW5kcy5pbXBsaWNpdFdhaXRNSlNPTldQID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0TUpTT05XUCAobXMpIHtcbiAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXQobXMpO1xufTtcblxuY29tbWFuZHMuaW1wbGljaXRXYWl0ID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0IChtcykge1xuICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdCh0aGlzLnBhcnNlVGltZW91dEFyZ3VtZW50KG1zKSk7XG59O1xuXG5oZWxwZXJzLnNldEltcGxpY2l0V2FpdCA9IGZ1bmN0aW9uIHNldEltcGxpY2l0V2FpdCAobXMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRoaXMuaW1wbGljaXRXYWl0TXMgPSBtcztcbiAgbG9nLmRlYnVnKGBTZXQgaW1wbGljaXQgd2FpdCB0byAke21zfW1zYCk7XG4gIGlmICh0aGlzLm1hbmFnZWREcml2ZXJzICYmIHRoaXMubWFuYWdlZERyaXZlcnMubGVuZ3RoKSB7XG4gICAgbG9nLmRlYnVnKCdTZXR0aW5nIGltcGxpY2l0IHdhaXQgb24gbWFuYWdlZCBkcml2ZXJzJyk7XG4gICAgZm9yIChsZXQgZHJpdmVyIG9mIHRoaXMubWFuYWdlZERyaXZlcnMpIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oZHJpdmVyLnNldEltcGxpY2l0V2FpdCkpIHtcbiAgICAgICAgZHJpdmVyLnNldEltcGxpY2l0V2FpdChtcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vLyBwYWdlTG9hZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5jb21tYW5kcy5wYWdlTG9hZFRpbWVvdXRXM0MgPSBhc3luYyBmdW5jdGlvbiBwYWdlTG9hZFRpbWVvdXRXM0MgKG1zKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yIHBhZ2VMb2FkLicpO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5jb21tYW5kcy5wYWdlTG9hZFRpbWVvdXRNSlNPTldQID0gYXN5bmMgZnVuY3Rpb24gcGFnZUxvYWRUaW1lb3V0TUpTT05XUCAobXMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcignTm90IGltcGxlbWVudGVkIHlldCBmb3IgcGFnZUxvYWQuJyk7XG59O1xuXG4vLyBzY3JpcHRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuY29tbWFuZHMuc2NyaXB0VGltZW91dFczQyA9IGFzeW5jIGZ1bmN0aW9uIHNjcmlwdFRpbWVvdXRXM0MgKG1zKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yIHNjcmlwdC4nKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuY29tbWFuZHMuc2NyaXB0VGltZW91dE1KU09OV1AgPSBhc3luYyBmdW5jdGlvbiBzY3JpcHRUaW1lb3V0TUpTT05XUCAobXMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcignTm90IGltcGxlbWVudGVkIHlldCBmb3Igc2NyaXB0LicpO1xufTtcblxuLy8gY29tbWFuZFxuY29tbWFuZHMubmV3Q29tbWFuZFRpbWVvdXQgPSBhc3luYyBmdW5jdGlvbiBuZXdDb21tYW5kVGltZW91dCAobXMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRoaXMuc2V0TmV3Q29tbWFuZFRpbWVvdXQodGhpcy5wYXJzZVRpbWVvdXRBcmd1bWVudChtcykpO1xufTtcblxuaGVscGVycy5zZXROZXdDb21tYW5kVGltZW91dCA9IGZ1bmN0aW9uIHNldE5ld0NvbW1hbmRUaW1lb3V0IChtcykge1xuICB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMgPSBtcztcbiAgbG9nLmRlYnVnKGBTZXQgbmV3IGNvbW1hbmQgdGltZW91dCB0byAke21zfW1zYCk7XG4gIGlmICh0aGlzLm1hbmFnZWREcml2ZXJzICYmIHRoaXMubWFuYWdlZERyaXZlcnMubGVuZ3RoKSB7XG4gICAgbG9nLmRlYnVnKCdTZXR0aW5nIG5ldyBjb21tYW5kIHRpbWVvdXQgb24gbWFuYWdlZCBkcml2ZXJzJyk7XG4gICAgZm9yIChsZXQgZHJpdmVyIG9mIHRoaXMubWFuYWdlZERyaXZlcnMpIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oZHJpdmVyLnNldE5ld0NvbW1hbmRUaW1lb3V0KSkge1xuICAgICAgICBkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQobXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy5jbGVhck5ld0NvbW1hbmRUaW1lb3V0ID0gZnVuY3Rpb24gY2xlYXJOZXdDb21tYW5kVGltZW91dCAoKSB7XG4gIGlmICh0aGlzLm5vQ29tbWFuZFRpbWVyKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubm9Db21tYW5kVGltZXIpO1xuICAgIHRoaXMubm9Db21tYW5kVGltZXIgPSBudWxsO1xuICB9XG59O1xuXG5oZWxwZXJzLnN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQgPSBmdW5jdGlvbiBzdGFydE5ld0NvbW1hbmRUaW1lb3V0ICgpIHtcbiAgLy8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyByb2d1ZSB0aW1lb3V0c1xuICB0aGlzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKTtcblxuICAvLyBpZiBjb21tYW5kIHRpbWVvdXQgaXMgMCwgaXQgaXMgZGlzYWJsZWRcbiAgaWYgKCF0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuXG4gIHRoaXMubm9Db21tYW5kVGltZXIgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICBsb2cud2FybihgU2h1dHRpbmcgZG93biBiZWNhdXNlIHdlIHdhaXRlZCBgICtcbiAgICAgICAgICAgICAgYCR7dGhpcy5uZXdDb21tYW5kVGltZW91dE1zIC8gMTAwMC4wfSBzZWNvbmRzIGZvciBhIGNvbW1hbmRgKTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgTmV3IENvbW1hbmQgVGltZW91dCBvZiBgICtcbiAgICAgICAgICAgICAgYCR7dGhpcy5uZXdDb21tYW5kVGltZW91dE1zIC8gMTAwMC4wfSBzZWNvbmRzIGAgK1xuICAgICAgICAgICAgICBgZXhwaXJlZC4gVHJ5IGN1c3RvbWl6aW5nIHRoZSB0aW1lb3V0IHVzaW5nIHRoZSBgICtcbiAgICAgICAgICAgICAgYCduZXdDb21tYW5kVGltZW91dCcgZGVzaXJlZCBjYXBhYmlsaXR5YDtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpKTtcbiAgfSwgdGhpcy5uZXdDb21tYW5kVGltZW91dE1zKTtcbn07XG5cbmhlbHBlcnMuaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uIChjb25kRm4pIHtcbiAgbG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5pbXBsaWNpdFdhaXRNc30gbXMgZm9yIGNvbmRpdGlvbmApO1xuICBsZXQgd3JhcHBlZENvbmRGbiA9IGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgLy8gcmVzZXQgY29tbWFuZCB0aW1lb3V0XG4gICAgdGhpcy5jbGVhck5ld0NvbW1hbmRUaW1lb3V0KCk7XG5cbiAgICByZXR1cm4gYXdhaXQgY29uZEZuKC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4gYXdhaXQgd2FpdEZvckNvbmRpdGlvbih3cmFwcGVkQ29uZEZuLCB7XG4gICAgd2FpdE1zOiB0aGlzLmltcGxpY2l0V2FpdE1zLCBpbnRlcnZhbE1zOiA1MDAsIGxvZ2dlcjogbG9nXG4gIH0pO1xufTtcblxuaGVscGVycy5wYXJzZVRpbWVvdXRBcmd1bWVudCA9IGZ1bmN0aW9uIHBhcnNlVGltZW91dEFyZ3VtZW50IChtcykge1xuICBsZXQgZHVyYXRpb24gPSBwYXJzZUludChtcywgMTApO1xuICBpZiAoXy5pc05hTihkdXJhdGlvbikgfHwgZHVyYXRpb24gPCBNSU5fVElNRU9VVCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBJbnZhbGlkIHRpbWVvdXQgdmFsdWUgJyR7bXN9J2ApO1xuICB9XG4gIHJldHVybiBkdXJhdGlvbjtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL3RpbWVvdXQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4ifQ==
|
|
188
|
+
exports.default = _default;
|
|
189
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL3RpbWVvdXQuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsIk1JTl9USU1FT1VUIiwidGltZW91dHMiLCJ0eXBlIiwibXMiLCJzY3JpcHQiLCJwYWdlTG9hZCIsImltcGxpY2l0IiwidXRpbCIsImhhc1ZhbHVlIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwibmV3Q29tbWFuZFRpbWVvdXQiLCJpbXBsaWNpdFdhaXRNSlNPTldQIiwicGFnZUxvYWRUaW1lb3V0TUpTT05XUCIsInNjcmlwdFRpbWVvdXRNSlNPTldQIiwiRXJyb3IiLCJzY3JpcHRUaW1lb3V0VzNDIiwicGFnZUxvYWRUaW1lb3V0VzNDIiwiaW1wbGljaXRXYWl0VzNDIiwiZ2V0VGltZW91dHMiLCJjb21tYW5kIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsImltcGxpY2l0V2FpdE1zIiwiaW1wbGljaXRXYWl0Iiwic2V0SW1wbGljaXRXYWl0IiwicGFyc2VUaW1lb3V0QXJndW1lbnQiLCJtYW5hZ2VkRHJpdmVycyIsImxlbmd0aCIsImRyaXZlciIsIl8iLCJpc0Z1bmN0aW9uIiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsInNldE5ld0NvbW1hbmRUaW1lb3V0IiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsIm5vQ29tbWFuZFRpbWVyIiwiY2xlYXJUaW1lb3V0Iiwic3RhcnROZXdDb21tYW5kVGltZW91dCIsInNldFRpbWVvdXQiLCJ3YXJuIiwiZXJyb3JNZXNzYWdlIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJjb25kRm4iLCJ3cmFwcGVkQ29uZEZuIiwiYXJncyIsIndhaXRNcyIsImludGVydmFsTXMiLCJsb2dnZXIiLCJkdXJhdGlvbiIsInBhcnNlSW50IiwiaXNOYU4iLCJVbmtub3duRXJyb3IiLCJPYmpl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QztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJy4uLy4uL3Byb3RvY29sJztcblxuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IE1JTl9USU1FT1VUID0gMDtcblxuY29tbWFuZHMudGltZW91dHMgPSBhc3luYyBmdW5jdGlvbiB0aW1lb3V0cyAodHlwZSwgbXMsIHNjcmlwdCwgcGFnZUxvYWQsIGltcGxpY2l0KSB7XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHR5cGUpICYmIHV0aWwuaGFzVmFsdWUobXMpKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYE1KU09OV1AgdGltZW91dCBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoe3R5cGUsIG1zfSl9fWApO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjb21tYW5kJzpcbiAgICAgICAgYXdhaXQgdGhpcy5uZXdDb21tYW5kVGltZW91dChtcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2ltcGxpY2l0JzpcbiAgICAgICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXRNSlNPTldQKG1zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAncGFnZSBsb2FkJzpcbiAgICAgICAgYXdhaXQgdGhpcy5wYWdlTG9hZFRpbWVvdXRNSlNPTldQKG1zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnc2NyaXB0JzpcbiAgICAgICAgYXdhaXQgdGhpcy5zY3JpcHRUaW1lb3V0TUpTT05XUChtcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7dHlwZX0nIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgTUpTT05XUCB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gT3RoZXJ3aXNlIGFzc3VtZSBpdCBpcyBXM0MgcHJvdG9jb2xcbiAgdGhpcy5sb2cuZGVidWcoYFczQyB0aW1lb3V0IGFyZ3VtZW50OiAke0pTT04uc3RyaW5naWZ5KHtzY3JpcHQsIHBhZ2VMb2FkLCBpbXBsaWNpdH0pfX1gKTtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoc2NyaXB0KSkge1xuICAgIGF3YWl0IHRoaXMuc2NyaXB0VGltZW91dFczQyhzY3JpcHQpO1xuICB9XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHBhZ2VMb2FkKSkge1xuICAgIGF3YWl0IHRoaXMucGFnZUxvYWRUaW1lb3V0VzNDKHBhZ2VMb2FkKTtcbiAgfVxuICBpZiAodXRpbC5oYXNWYWx1ZShpbXBsaWNpdCkpIHtcbiAgICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdFczQyhpbXBsaWNpdCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFRpbWVvdXRzID0gYXN5bmMgZnVuY3Rpb24gZ2V0VGltZW91dHMgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kOiB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMsXG4gICAgaW1wbGljaXQ6IHRoaXMuaW1wbGljaXRXYWl0TXMsXG4gIH07XG59O1xuXG4vLyBpbXBsaWNpdFxuY29tbWFuZHMuaW1wbGljaXRXYWl0VzNDID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0VzNDIChtcykge1xuICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdChtcyk7XG59O1xuXG5jb21tYW5kcy5pbXBsaWNpdFdhaXRNSlNPTldQID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0TUpTT05XUCAobXMpIHtcbiAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXQobXMpO1xufTtcblxuY29tbWFuZHMuaW1wbGljaXRXYWl0ID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0IChtcykge1xuICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdCh0aGlzLnBhcnNlVGltZW91dEFyZ3VtZW50KG1zKSk7XG59O1xuXG5oZWxwZXJzLnNldEltcGxpY2l0V2FpdCA9IGZ1bmN0aW9uIHNldEltcGxpY2l0V2FpdCAobXMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRoaXMuaW1wbGljaXRXYWl0TXMgPSBtcztcbiAgdGhpcy5sb2cuZGVidWcoYFNldCBpbXBsaWNpdCB3YWl0IHRvICR7bXN9bXNgKTtcbiAgaWYgKHRoaXMubWFuYWdlZERyaXZlcnMgJiYgdGhpcy5tYW5hZ2VkRHJpdmVycy5sZW5ndGgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnU2V0dGluZyBpbXBsaWNpdCB3YWl0IG9uIG1hbmFnZWQgZHJpdmVycycpO1xuICAgIGZvciAobGV0IGRyaXZlciBvZiB0aGlzLm1hbmFnZWREcml2ZXJzKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGRyaXZlci5zZXRJbXBsaWNpdFdhaXQpKSB7XG4gICAgICAgIGRyaXZlci5zZXRJbXBsaWNpdFdhaXQobXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLy8gcGFnZUxvYWRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuY29tbWFuZHMucGFnZUxvYWRUaW1lb3V0VzNDID0gYXN5bmMgZnVuY3Rpb24gcGFnZUxvYWRUaW1lb3V0VzNDIChtcykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0IGZvciBwYWdlTG9hZC4nKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuY29tbWFuZHMucGFnZUxvYWRUaW1lb3V0TUpTT05XUCA9IGFzeW5jIGZ1bmN0aW9uIHBhZ2VMb2FkVGltZW91dE1KU09OV1AgKG1zKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yIHBhZ2VMb2FkLicpO1xufTtcblxuLy8gc2NyaXB0XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmNvbW1hbmRzLnNjcmlwdFRpbWVvdXRXM0MgPSBhc3luYyBmdW5jdGlvbiBzY3JpcHRUaW1lb3V0VzNDIChtcykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0IGZvciBzY3JpcHQuJyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmNvbW1hbmRzLnNjcmlwdFRpbWVvdXRNSlNPTldQID0gYXN5bmMgZnVuY3Rpb24gc2NyaXB0VGltZW91dE1KU09OV1AgKG1zKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yIHNjcmlwdC4nKTtcbn07XG5cbi8vIGNvbW1hbmRcbmNvbW1hbmRzLm5ld0NvbW1hbmRUaW1lb3V0ID0gYXN5bmMgZnVuY3Rpb24gbmV3Q29tbWFuZFRpbWVvdXQgKG1zKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aGlzLnNldE5ld0NvbW1hbmRUaW1lb3V0KHRoaXMucGFyc2VUaW1lb3V0QXJndW1lbnQobXMpKTtcbn07XG5cbmhlbHBlcnMuc2V0TmV3Q29tbWFuZFRpbWVvdXQgPSBmdW5jdGlvbiBzZXROZXdDb21tYW5kVGltZW91dCAobXMpIHtcbiAgdGhpcy5uZXdDb21tYW5kVGltZW91dE1zID0gbXM7XG4gIHRoaXMubG9nLmRlYnVnKGBTZXQgbmV3IGNvbW1hbmQgdGltZW91dCB0byAke21zfW1zYCk7XG4gIGlmICh0aGlzLm1hbmFnZWREcml2ZXJzICYmIHRoaXMubWFuYWdlZERyaXZlcnMubGVuZ3RoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1NldHRpbmcgbmV3IGNvbW1hbmQgdGltZW91dCBvbiBtYW5hZ2VkIGRyaXZlcnMnKTtcbiAgICBmb3IgKGxldCBkcml2ZXIgb2YgdGhpcy5tYW5hZ2VkRHJpdmVycykge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQpKSB7XG4gICAgICAgIGRyaXZlci5zZXROZXdDb21tYW5kVGltZW91dChtcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQgPSBmdW5jdGlvbiBjbGVhck5ld0NvbW1hbmRUaW1lb3V0ICgpIHtcbiAgaWYgKHRoaXMubm9Db21tYW5kVGltZXIpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5ub0NvbW1hbmRUaW1lcik7XG4gICAgdGhpcy5ub0NvbW1hbmRUaW1lciA9IG51bGw7XG4gIH1cbn07XG5cbmhlbHBlcnMuc3RhcnROZXdDb21tYW5kVGltZW91dCA9IGZ1bmN0aW9uIHN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQgKCkge1xuICAvLyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHJvZ3VlIHRpbWVvdXRzXG4gIHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuXG4gIC8vIGlmIGNvbW1hbmQgdGltZW91dCBpcyAwLCBpdCBpcyBkaXNhYmxlZFxuICBpZiAoIXRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcykgcmV0dXJuOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgdGhpcy5ub0NvbW1hbmRUaW1lciA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgIHRoaXMubG9nLndhcm4oYFNodXR0aW5nIGRvd24gYmVjYXVzZSB3ZSB3YWl0ZWQgYCArXG4gICAgICAgICAgICAgIGAke3RoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyAvIDEwMDAuMH0gc2Vjb25kcyBmb3IgYSBjb21tYW5kYCk7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYE5ldyBDb21tYW5kIFRpbWVvdXQgb2YgYCArXG4gICAgICAgICAgICAgIGAke3RoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyAvIDEwMDAuMH0gc2Vjb25kcyBgICtcbiAgICAgICAgICAgICAgYGV4cGlyZWQuIFRyeSBjdXN0b21pemluZyB0aGUgdGltZW91dCB1c2luZyB0aGUgYCArXG4gICAgICAgICAgICAgIGAnbmV3Q29tbWFuZFRpbWVvdXQnIGRlc2lyZWQgY2FwYWJpbGl0eWA7XG4gICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XG4gIH0sIHRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyk7XG59O1xuXG5oZWxwZXJzLmltcGxpY2l0V2FpdEZvckNvbmRpdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGltcGxpY2l0V2FpdEZvckNvbmRpdGlvbiAoY29uZEZuKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5pbXBsaWNpdFdhaXRNc30gbXMgZm9yIGNvbmRpdGlvbmApO1xuICBsZXQgd3JhcHBlZENvbmRGbiA9IGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgLy8gcmVzZXQgY29tbWFuZCB0aW1lb3V0XG4gICAgdGhpcy5jbGVhck5ld0NvbW1hbmRUaW1lb3V0KCk7XG5cbiAgICByZXR1cm4gYXdhaXQgY29uZEZuKC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4gYXdhaXQgd2FpdEZvckNvbmRpdGlvbih3cmFwcGVkQ29uZEZuLCB7XG4gICAgd2FpdE1zOiB0aGlzLmltcGxpY2l0V2FpdE1zLCBpbnRlcnZhbE1zOiA1MDAsIGxvZ2dlcjogdGhpcy5sb2dcbiAgfSk7XG59O1xuXG5oZWxwZXJzLnBhcnNlVGltZW91dEFyZ3VtZW50ID0gZnVuY3Rpb24gcGFyc2VUaW1lb3V0QXJndW1lbnQgKG1zKSB7XG4gIGxldCBkdXJhdGlvbiA9IHBhcnNlSW50KG1zLCAxMCk7XG4gIGlmIChfLmlzTmFOKGR1cmF0aW9uKSB8fCBkdXJhdGlvbiA8IE1JTl9USU1FT1VUKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoYEludmFsaWQgdGltZW91dCB2YWx1ZSAnJHttc30nYCk7XG4gIH1cbiAgcmV0dXJuIGR1cmF0aW9uO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdfQ==
|
|
@@ -169,7 +169,5 @@ _validate.default.promise = _bluebird.default;
|
|
|
169
169
|
|
|
170
170
|
_validate.default.prettify = function prettify(val) {
|
|
171
171
|
return val;
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2Rlc2lyZWQtY2Fwcy5qcyJdLCJuYW1lcyI6WyJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwicGxhdGZvcm1OYW1lIiwicHJlc2VuY2UiLCJpc1N0cmluZyIsImRldmljZU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJuZXdDb21tYW5kVGltZW91dCIsImlzTnVtYmVyIiwiYXV0b21hdGlvbk5hbWUiLCJhdXRvTGF1bmNoIiwiaXNCb29sZWFuIiwidWRpZCIsIm9yaWVudGF0aW9uIiwiaW5jbHVzaW9uIiwiYXV0b1dlYnZpZXciLCJub1Jlc2V0IiwiZnVsbFJlc2V0IiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJldmVudFRpbWluZ3MiLCJwcmludFBhZ2VTb3VyY2VPbkZpbmRGYWlsdXJlIiwidmFsaWRhdG9yIiwidmFsaWRhdG9ycyIsInZhbHVlIiwiaXNOYU4iLCJsb2ciLCJ3YXJuIiwiaW5jbHVkZXMiLCJpc09iamVjdCIsImlzQXJyYXkiLCJBcnJheSIsImRlcHJlY2F0ZWQiLCJvcHRpb25zIiwia2V5IiwiaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlIiwib3B0aW9uIiwidG9Mb3dlckNhc2UiLCJ0b1N0cmluZyIsInByb21pc2UiLCJCIiwicHJldHRpZnkiLCJ2YWwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBR0EsSUFBSUEsNEJBQTRCLEdBQUc7QUFDakNDLEVBQUFBLFlBQVksRUFBRTtBQUNaQyxJQUFBQSxRQUFRLEVBQUUsSUFERTtBQUVaQyxJQUFBQSxRQUFRLEVBQUU7QUFGRSxHQURtQjtBQUtqQ0MsRUFBQUEsVUFBVSxFQUFFO0FBQ1ZELElBQUFBLFFBQVEsRUFBRTtBQURBLEdBTHFCO0FBUWpDRSxFQUFBQSxlQUFlLEVBQUU7QUFDZkYsSUFBQUEsUUFBUSxFQUFFO0FBREssR0FSZ0I7QUFXakNHLEVBQUFBLGlCQUFpQixFQUFFO0FBQ2pCQyxJQUFBQSxRQUFRLEVB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UUFBVCxDQUFtQkMsR0FBbkIsRUFBd0I7QUFDM0MsU0FBT0EsR0FBUDtBQUNELENBRkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAndmFsaWRhdGUuanMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5cbmxldCBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzID0ge1xuICBwbGF0Zm9ybU5hbWU6IHtcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbiAgZGV2aWNlTmFtZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHBsYXRmb3JtVmVyc2lvbjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIG5ld0NvbW1hbmRUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYXV0b21hdGlvbk5hbWU6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhdXRvTGF1bmNoOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVkaWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBvcmllbnRhdGlvbjoge1xuICAgIGluY2x1c2lvbjogW1xuICAgICAgJ0xBTkRTQ0FQRScsXG4gICAgICAnUE9SVFJBSVQnXG4gICAgXVxuICB9LFxuICBhdXRvV2Vidmlldzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBub1Jlc2V0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGZ1bGxSZXNldDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBsYW5ndWFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGxvY2FsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGV2ZW50VGltaW5nczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBwcmludFBhZ2VTb3VyY2VPbkZpbmRGYWlsdXJlOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG59O1xuXG52YWxpZGF0b3IudmFsaWRhdG9ycy5pc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nICh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIHN0cmluZyc7XG59O1xudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNOdW1iZXIgPSBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBhbGxvdyBhIHN0cmluZyB2YWx1ZVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgbG9nLndhcm4oJ051bWJlciBjYXBhYmlsaXR5IHBhc3NlZCBpbiBhcyBzdHJpbmcuIEZ1bmN0aW9uYWxpdHkgbWF5IGJlIGNvbXByb21pc2VkLicpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuICdtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJztcbn07XG52YWxpZGF0b3IudmFsaWRhdG9ycy5pc0Jvb2xlYW4gPSBmdW5jdGlvbiBpc0Jvb2xlYW4gKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gYWxsb3cgYSBzdHJpbmcgdmFsdWVcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgWyd0cnVlJywgJ2ZhbHNlJywgJyddLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4nO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QgKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuICdtdXN0IGJlIG9mIHR5cGUgb2JqZWN0Jztcbn07XG52YWxpZGF0b3IudmFsaWRhdG9ycy5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheSAodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuICdtdXN0IGJlIG9mIHR5cGUgYXJyYXknO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkICh2YWx1ZSwgb3B0aW9ucywga2V5KSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgbG9nLndhcm4oYCR7a2V5fSBpcyBhIGRlcHJlY2F0ZWQgY2FwYWJpbGl0eWApO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSA9IGZ1bmN0aW9uIGluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSAodmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICd1bnJlY29nbmlzZWQnO1xuICB9XG4gIGZvciAobGV0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbi50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGAke3ZhbHVlfSBub3QgcGFydCBvZiAke29wdGlvbnMudG9TdHJpbmcoKX1gO1xufTtcblxudmFsaWRhdG9yLnByb21pc2UgPSBCO1xudmFsaWRhdG9yLnByZXR0aWZ5ID0gZnVuY3Rpb24gcHJldHRpZnkgKHZhbCkge1xuICByZXR1cm4gdmFsO1xufTtcblxuXG5leHBvcnQgeyBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzLCB2YWxpZGF0b3IgfTtcbiJdLCJmaWxlIjoibGliL2Jhc2Vkcml2ZXIvZGVzaXJlZC1jYXBzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
172
|
+
};
|
|
173
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2Rlc2lyZWQtY2Fwcy5qcyJdLCJuYW1lcyI6WyJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwicGxhdGZvcm1OYW1lIiwicHJlc2VuY2UiLCJpc1N0cmluZyIsImRldmljZU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJuZXdDb21tYW5kVGltZW91dCIsImlzTnVtYmVyIiwiYXV0b21hdGlvbk5hbWUiLCJhdXRvTGF1bmNoIiwiaXNCb29sZWFuIiwidWRpZCIsIm9yaWVudGF0aW9uIiwiaW5jbHVzaW9uIiwiYXV0b1dlYnZpZXciLCJub1Jlc2V0IiwiZnVsbFJlc2V0IiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJldmVudFRpbWluZ3MiLCJwcmludFBhZ2VTb3VyY2VPbkZpbmRGYWlsdXJlIiwidmFsaWRhdG9yIiwidmFsaWRhdG9ycyIsInZhbHVlIiwiaXNOYU4iLCJsb2ciLCJ3YXJuIiwiaW5jbHVkZXMiLCJpc09iamVjdCIsImlzQXJyYXkiLCJBcnJheSIsImRlcHJlY2F0ZWQiLCJvcHRpb25zIiwia2V5IiwiaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlIiwib3B0aW9uIiwidG9Mb3dlckNhc2UiLCJ0b1N0cmluZyIsInByb21pc2UiLCJCIiwicHJldHRpZnkiLCJ2YWwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBR0EsSUFBSUEsNEJBQTRCLEdBQUc7QUFDakNDLEVBQUFBLFlBQVksRUFBRTtBQUNaQyxJQUFBQSxRQUFRLEVBQUUsSUFERTtBQUVaQyxJQUFBQSxRQUFRLEVBQUU7QUFGRSxHQURtQjtBQUtqQ0MsRUFBQUEsVUFBVSxFQUFFO0FBQ1ZELElBQUFBLFFBQVEsRUFBRTtBQURBLEdBTHFCO0FBUWpDRSxFQUFBQSxlQUFlLEVBQUU7QUFDZkYsSUFBQUEsUUFBUSxFQUFFO0FBREssR0FSZ0I7QUFXakNHLEVBQUFBLGlCQUFpQixFQUFFO0FBQ2pCQyxJQUFB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cUIsU0FBU0EsUUFBVCxDQUFtQkMsR0FBbkIsRUFBd0I7QUFDM0MsU0FBT0EsR0FBUDtBQUNELENBRkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAndmFsaWRhdGUuanMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5cbmxldCBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzID0ge1xuICBwbGF0Zm9ybU5hbWU6IHtcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbiAgZGV2aWNlTmFtZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHBsYXRmb3JtVmVyc2lvbjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIG5ld0NvbW1hbmRUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYXV0b21hdGlvbk5hbWU6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhdXRvTGF1bmNoOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVkaWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBvcmllbnRhdGlvbjoge1xuICAgIGluY2x1c2lvbjogW1xuICAgICAgJ0xBTkRTQ0FQRScsXG4gICAgICAnUE9SVFJBSVQnXG4gICAgXVxuICB9LFxuICBhdXRvV2Vidmlldzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBub1Jlc2V0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGZ1bGxSZXNldDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBsYW5ndWFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGxvY2FsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGV2ZW50VGltaW5nczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBwcmludFBhZ2VTb3VyY2VPbkZpbmRGYWlsdXJlOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG59O1xuXG52YWxpZGF0b3IudmFsaWRhdG9ycy5pc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nICh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIHN0cmluZyc7XG59O1xudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNOdW1iZXIgPSBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBhbGxvdyBhIHN0cmluZyB2YWx1ZVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgbG9nLndhcm4oJ051bWJlciBjYXBhYmlsaXR5IHBhc3NlZCBpbiBhcyBzdHJpbmcuIEZ1bmN0aW9uYWxpdHkgbWF5IGJlIGNvbXByb21pc2VkLicpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuICdtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJztcbn07XG52YWxpZGF0b3IudmFsaWRhdG9ycy5pc0Jvb2xlYW4gPSBmdW5jdGlvbiBpc0Jvb2xlYW4gKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gYWxsb3cgYSBzdHJpbmcgdmFsdWVcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgWyd0cnVlJywgJ2ZhbHNlJywgJyddLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4nO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QgKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuICdtdXN0IGJlIG9mIHR5cGUgb2JqZWN0Jztcbn07XG52YWxpZGF0b3IudmFsaWRhdG9ycy5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheSAodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuICdtdXN0IGJlIG9mIHR5cGUgYXJyYXknO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkICh2YWx1ZSwgb3B0aW9ucywga2V5KSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgbG9nLndhcm4oYCR7a2V5fSBpcyBhIGRlcHJlY2F0ZWQgY2FwYWJpbGl0eWApO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSA9IGZ1bmN0aW9uIGluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSAodmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICd1bnJlY29nbmlzZWQnO1xuICB9XG4gIGZvciAobGV0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbi50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGAke3ZhbHVlfSBub3QgcGFydCBvZiAke29wdGlvbnMudG9TdHJpbmcoKX1gO1xufTtcblxudmFsaWRhdG9yLnByb21pc2UgPSBCO1xudmFsaWRhdG9yLnByZXR0aWZ5ID0gZnVuY3Rpb24gcHJldHRpZnkgKHZhbCkge1xuICByZXR1cm4gdmFsO1xufTtcblxuXG5leHBvcnQgeyBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzLCB2YWxpZGF0b3IgfTtcbiJdfQ==
|
|
@@ -13,6 +13,12 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
13
13
|
|
|
14
14
|
var _logger = _interopRequireDefault(require("./logger"));
|
|
15
15
|
|
|
16
|
+
var _support = require("@appium/support");
|
|
17
|
+
|
|
18
|
+
var _errors = require("../protocol/errors");
|
|
19
|
+
|
|
20
|
+
const MAX_SETTINGS_SIZE = 20 * 1024 * 1024;
|
|
21
|
+
|
|
16
22
|
class DeviceSettings {
|
|
17
23
|
constructor(defaultSettings = {}, onSettingsUpdate = null) {
|
|
18
24
|
this._settings = Object.assign({}, defaultSettings);
|
|
@@ -21,7 +27,13 @@ class DeviceSettings {
|
|
|
21
27
|
|
|
22
28
|
async update(newSettings) {
|
|
23
29
|
if (!_lodash.default.isPlainObject(newSettings)) {
|
|
24
|
-
throw new
|
|
30
|
+
throw new _errors.errors.InvalidArgumentError(`Settings update should be called with valid JSON. Got ` + `${JSON.stringify(newSettings)} instead`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (_support.node.getObjectSize({ ...this._settings,
|
|
34
|
+
...newSettings
|
|
35
|
+
}) >= MAX_SETTINGS_SIZE) {
|
|
36
|
+
throw new _errors.errors.InvalidArgumentError(`New settings cannot be applied, because the overall ` + `object size exceeds the allowed limit of ${_support.util.toReadableSizeString(MAX_SETTINGS_SIZE)}`);
|
|
25
37
|
}
|
|
26
38
|
|
|
27
39
|
for (const prop of _lodash.default.keys(newSettings)) {
|
|
@@ -50,7 +62,5 @@ class DeviceSettings {
|
|
|
50
62
|
|
|
51
63
|
exports.DeviceSettings = DeviceSettings;
|
|
52
64
|
var _default = DeviceSettings;
|
|
53
|
-
exports.default = _default;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2RldmljZS1zZXR0aW5ncy5qcyJdLCJuYW1lcyI6WyJEZXZpY2VTZXR0aW5ncyIsImNvbnN0cnVjdG9yIiwiZGVmYXVsdFNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsIl9zZXR0aW5ncyIsIk9iamVjdCIsImFzc2lnbiIsInVwZGF0ZSIsIm5ld1NldHRpbmdzIiwiXyIsImlzUGxhaW5PYmplY3QiLCJFcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJwcm9wIiwia2V5cyIsImlzVW5kZWZpbmVkIiwibG9nIiwiZGVidWciLCJpc0Z1bmN0aW9uIiwiZXJyb3JBbmRUaHJvdyIsIm5hbWUiLCJnZXRTZXR0aW5ncyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQSxNQUFNQSxjQUFOLENBQXFCO0FBRW5CQyxFQUFBQSxXQUFXLENBQUVDLGVBQWUsR0FBRyxFQUFwQixFQUF3QkMsZ0JBQWdCLEdBQUcsSUFBM0MsRUFBaUQ7QUFDMUQsU0FBS0MsU0FBTCxHQUFpQkMsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQkosZUFBbEIsQ0FBakI7QUFDQSxTQUFLQyxnQkFBTCxHQUF3QkEsZ0JBQXhCO0FBQ0Q7O0FBR1csUUFBTkksTUFBTSxDQUFFQyxXQUFGLEVBQWU7QUFDekIsUUFBSSxDQUFDQyxnQkFBRUMsYUFBRixDQUFnQkYsV0FBaEIsQ0FBTCxFQUFtQztBQUNqQyxZQUFNLElBQUlHLEtBQUosQ0FBVyx3REFBRCxHQUNiLEdBQUVDLElBQUksQ0FBQ0MsU0FBTCxDQUFlTCxXQUFmLENBQTRCLFVBRDNCLENBQU47QUFFRDs7QUFDRCxTQUFLLE1BQU1NLElBQVgsSUFBbUJMLGdCQUFFTSxJQUFGLENBQU9QLFdBQVAsQ0FBbkIsRUFBd0M7QUFDdEMsVUFBSSxDQUFDQyxnQkFBRU8sV0FBRixDQUFjLEtBQUtaLFNBQUwsQ0FBZVUsSUFBZixDQUFkLENBQUwsRUFBMEM7QUFDeEMsWUFBSSxLQUFLVixTQUFMLENBQWVVLElBQWYsTUFBeUJOLFdBQVcsQ0FBQ00sSUFBRCxDQUF4QyxFQUFnRDtBQUM5Q0csMEJBQUlDLEtBQUosQ0FBVyxpQkFBZ0JKLElBQUssc0RBQWhDOztBQUNBO0FBQ0Q7QUFDRjs7QUFFRCxVQUFJTCxnQkFBRVUsVUFBRixDQUFhLEtBQUtoQixnQkFBbEIsQ0FBSixFQUF5QztBQUN2QyxjQUFNLEtBQUtBLGdCQUFMLENBQXNCVyxJQUF0QixFQUE0Qk4sV0FBVyxDQUFDTSxJQUFELENBQXZDLEVBQStDLEtBQUtWLFNBQUwsQ0FBZVUsSUFBZixDQUEvQyxDQUFOO0FBQ0EsYUFBS1YsU0FBTCxDQUFlVSxJQUFmLElBQXVCTixXQUFXLENBQUNNLElBQUQsQ0FBbEM7QUFDRCxPQUhELE1BR087QUFDTEcsd0JBQUlHLGFBQUosQ0FBbUIsNkJBQUQsR0FDZix5Q0FBd0MsS0FBS25CLFdBQUwsQ0FBaUJvQixJQUFLLEdBRGpFO0FBRUQ7QUFDRjtBQUNGOztBQUVEQyxFQUFBQSxXQUFXLEdBQUk7QUFDYixXQUFPLEtBQUtsQixTQUFaO0FBQ0Q7O0FBakNrQjs7O2VBb0NOSixjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuXG5jbGFzcyBEZXZpY2VTZXR0aW5ncyB7XG5cbiAgY29uc3RydWN0b3IgKGRlZmF1bHRTZXR0aW5ncyA9IHt9LCBvblNldHRpbmdzVXBkYXRlID0gbnVsbCkge1xuICAgIHRoaXMuX3NldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzKTtcbiAgICB0aGlzLm9uU2V0dGluZ3NVcGRhdGUgPSBvblNldHRpbmdzVXBkYXRlO1xuICB9XG5cbiAgLy8gY2FsbHMgdXBkYXRlU2V0dGluZ3MgZnJvbSBpbXBsZW1lbnRpbmcgZHJpdmVyIGV2ZXJ5IHRpbWUgYSBzZXR0aW5nIGlzIGNoYW5nZWQuXG4gIGFzeW5jIHVwZGF0ZSAobmV3U2V0dGluZ3MpIHtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChuZXdTZXR0aW5ncykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2V0dGluZ3MgdXBkYXRlIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB2YWxpZCBKU09OLiBHb3QgYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KG5ld1NldHRpbmdzKX0gaW5zdGVhZGApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgXy5rZXlzKG5ld1NldHRpbmdzKSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuX3NldHRpbmdzW3Byb3BdKSkge1xuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3NbcHJvcF0gPT09IG5ld1NldHRpbmdzW3Byb3BdKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBUaGUgdmFsdWUgb2YgJyR7cHJvcH0nIHNldHRpbmcgZGlkIG5vdCBjaGFuZ2UuIFNraXBwaW5nIHRoZSB1cGRhdGUgZm9yIGl0YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHVwZGF0ZSBzZXR0aW5nIG9ubHkgd2hlbiB0aGVyZSBpcyB1cGRhdGVTZXR0aW5ncyBkZWZpbmVkLlxuICAgICAgaWYgKF8uaXNGdW5jdGlvbih0aGlzLm9uU2V0dGluZ3NVcGRhdGUpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub25TZXR0aW5nc1VwZGF0ZShwcm9wLCBuZXdTZXR0aW5nc1twcm9wXSwgdGhpcy5fc2V0dGluZ3NbcHJvcF0pO1xuICAgICAgICB0aGlzLl9zZXR0aW5nc1twcm9wXSA9IG5ld1NldHRpbmdzW3Byb3BdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYFVuYWJsZSB0byB1cGRhdGUgc2V0dGluZ3M7IGAgK1xuICAgICAgICAgIGBvblNldHRpbmdzVXBkYXRlIG1ldGhvZCBub3QgZm91bmQgb24gJyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSdgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRTZXR0aW5ncyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERldmljZVNldHRpbmdzO1xuZXhwb3J0IHsgRGV2aWNlU2V0dGluZ3MgfTtcbiJdLCJmaWxlIjoibGliL2Jhc2Vkcml2ZXIvZGV2aWNlLXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
65
|
+
exports.default = _default;
|
|
66
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2RldmljZS1zZXR0aW5ncy5qcyJdLCJuYW1lcyI6WyJNQVhfU0VUVElOR1NfU0laRSIsIkRldmljZVNldHRpbmdzIiwiY29uc3RydWN0b3IiLCJkZWZhdWx0U2V0dGluZ3MiLCJvblNldHRpbmdzVXBkYXRlIiwiX3NldHRpbmdzIiwiT2JqZWN0IiwiYXNzaWduIiwidXBkYXRlIiwibmV3U2V0dGluZ3MiLCJfIiwiaXNQbGFpbk9iamVjdCIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5vZGUiLCJnZXRPYmplY3RTaXplIiwidXRpbCIsInRvUmVhZGFibGVTaXplU3RyaW5nIiwicHJvcCIsImtleXMiLCJpc1VuZGVmaW5lZCIsImxvZyIsImRlYnVnIiwiaXNGdW5jdGlvbiIsImVycm9yQW5kVGhyb3ciLCJuYW1lIiwiZ2V0U2V0dGluZ3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsS0FBSyxJQUFMLEdBQVksSUFBdEM7O0FBRUEsTUFBTUMsY0FBTixDQUFxQjtBQUVuQkMsRUFBQUEsV0FBVyxDQUFFQyxlQUFlLEdBQUcsRUFBcEIsRUFBd0JDLGdCQUFnQixHQUFHLElBQTNDLEVBQWlEO0FBQzFELFNBQUtDLFNBQUwsR0FBaUJDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JKLGVBQWxCLENBQWpCO0FBQ0EsU0FBS0MsZ0JBQUwsR0FBd0JBLGdCQUF4QjtBQUNEOztBQUdXLFFBQU5JLE1BQU0sQ0FBRUMsV0FBRixFQUFlO0FBQ3pCLFFBQUksQ0FBQ0MsZ0JBQUVDLGFBQUYsQ0FBZ0JGLFdBQWhCLENBQUwsRUFBbUM7QUFDakMsWUFBTSxJQUFJRyxlQUFPQyxvQkFBWCxDQUFpQyx3REFBRCxHQUNuQyxHQUFFQyxJQUFJLENBQUNDLFNBQUwsQ0FBZU4sV0FBZixDQUE0QixVQUQzQixDQUFOO0FBRUQ7O0FBQ0QsUUFBSU8sY0FBS0MsYUFBTCxDQUFtQixFQUFDLEdBQUcsS0FBS1osU0FBVDtBQUFvQixTQUFHSTtBQUF2QixLQUFuQixLQUEyRFQsaUJBQS9ELEVBQWtGO0FBQ2hGLFlBQU0sSUFBSVksZUFBT0Msb0JBQVgsQ0FBaUMsc0RBQUQsR0FDbkMsNENBQTJDSyxjQUFLQyxvQkFBTCxDQUEwQm5CLGlCQUExQixDQUE2QyxFQURyRixDQUFOO0FBRUQ7O0FBRUQsU0FBSyxNQUFNb0IsSUFBWCxJQUFtQlYsZ0JBQUVXLElBQUYsQ0FBT1osV0FBUCxDQUFuQixFQUF3QztBQUN0QyxVQUFJLENBQUNDLGdCQUFFWSxXQUFGLENBQWMsS0FBS2pCLFNBQUwsQ0FBZWUsSUFBZixDQUFkLENBQUwsRUFBMEM7QUFDeEMsWUFBSSxLQUFLZixTQUFMLENBQWVlLElBQWYsTUFBeUJYLFdBQVcsQ0FBQ1csSUFBRCxDQUF4QyxFQUFnRDtBQUM5Q0csMEJBQUlDLEtBQUosQ0FBVyxpQkFBZ0JKLElBQUssc0RBQWhDOztBQUNBO0FBQ0Q7QUFDRjs7QUFFRCxVQUFJVixnQkFBRWUsVUFBRixDQUFhLEtBQUtyQixnQkFBbEIsQ0FBSixFQUF5QztBQUN2QyxjQUFNLEtBQUtBLGdCQUFMLENBQXNCZ0IsSUFBdEIsRUFBNEJYLFdBQVcsQ0FBQ1csSUFBRCxDQUF2QyxFQUErQyxLQUFLZixTQUFMLENBQWVlLElBQWYsQ0FBL0MsQ0FBTjtBQUNBLGFBQUtmLFNBQUwsQ0FBZWUsSUFBZixJQUF1QlgsV0FBVyxDQUFDVyxJQUFELENBQWxDO0FBQ0QsT0FIRCxNQUdPO0FBQ0xHLHdCQUFJRyxhQUFKLENBQW1CLDZCQUFELEdBQ2YseUNBQXdDLEtBQUt4QixXQUFMLENBQWlCeUIsSUFBSyxHQURqRTtBQUVEO0FBQ0Y7QUFDRjs7QUFFREMsRUFBQUEsV0FBVyxHQUFJO0FBQ2IsV0FBTyxLQUFLdkIsU0FBWjtBQUNEOztBQXRDa0I7OztlQXlDTkosYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IG5vZGUsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnLi4vcHJvdG9jb2wvZXJyb3JzJztcblxuY29uc3QgTUFYX1NFVFRJTkdTX1NJWkUgPSAyMCAqIDEwMjQgKiAxMDI0OyAvLyAyMCBNQlxuXG5jbGFzcyBEZXZpY2VTZXR0aW5ncyB7XG5cbiAgY29uc3RydWN0b3IgKGRlZmF1bHRTZXR0aW5ncyA9IHt9LCBvblNldHRpbmdzVXBkYXRlID0gbnVsbCkge1xuICAgIHRoaXMuX3NldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzKTtcbiAgICB0aGlzLm9uU2V0dGluZ3NVcGRhdGUgPSBvblNldHRpbmdzVXBkYXRlO1xuICB9XG5cbiAgLy8gY2FsbHMgdXBkYXRlU2V0dGluZ3MgZnJvbSBpbXBsZW1lbnRpbmcgZHJpdmVyIGV2ZXJ5IHRpbWUgYSBzZXR0aW5nIGlzIGNoYW5nZWQuXG4gIGFzeW5jIHVwZGF0ZSAobmV3U2V0dGluZ3MpIHtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChuZXdTZXR0aW5ncykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFNldHRpbmdzIHVwZGF0ZSBzaG91bGQgYmUgY2FsbGVkIHdpdGggdmFsaWQgSlNPTi4gR290IGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShuZXdTZXR0aW5ncyl9IGluc3RlYWRgKTtcbiAgICB9XG4gICAgaWYgKG5vZGUuZ2V0T2JqZWN0U2l6ZSh7Li4udGhpcy5fc2V0dGluZ3MsIC4uLm5ld1NldHRpbmdzfSkgPj0gTUFYX1NFVFRJTkdTX1NJWkUpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYE5ldyBzZXR0aW5ncyBjYW5ub3QgYmUgYXBwbGllZCwgYmVjYXVzZSB0aGUgb3ZlcmFsbCBgICtcbiAgICAgICAgYG9iamVjdCBzaXplIGV4Y2VlZHMgdGhlIGFsbG93ZWQgbGltaXQgb2YgJHt1dGlsLnRvUmVhZGFibGVTaXplU3RyaW5nKE1BWF9TRVRUSU5HU19TSVpFKX1gKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgXy5rZXlzKG5ld1NldHRpbmdzKSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuX3NldHRpbmdzW3Byb3BdKSkge1xuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3NbcHJvcF0gPT09IG5ld1NldHRpbmdzW3Byb3BdKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBUaGUgdmFsdWUgb2YgJyR7cHJvcH0nIHNldHRpbmcgZGlkIG5vdCBjaGFuZ2UuIFNraXBwaW5nIHRoZSB1cGRhdGUgZm9yIGl0YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHVwZGF0ZSBzZXR0aW5nIG9ubHkgd2hlbiB0aGVyZSBpcyB1cGRhdGVTZXR0aW5ncyBkZWZpbmVkLlxuICAgICAgaWYgKF8uaXNGdW5jdGlvbih0aGlzLm9uU2V0dGluZ3NVcGRhdGUpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub25TZXR0aW5nc1VwZGF0ZShwcm9wLCBuZXdTZXR0aW5nc1twcm9wXSwgdGhpcy5fc2V0dGluZ3NbcHJvcF0pO1xuICAgICAgICB0aGlzLl9zZXR0aW5nc1twcm9wXSA9IG5ld1NldHRpbmdzW3Byb3BdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYFVuYWJsZSB0byB1cGRhdGUgc2V0dGluZ3M7IGAgK1xuICAgICAgICAgIGBvblNldHRpbmdzVXBkYXRlIG1ldGhvZCBub3QgZm91bmQgb24gJyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSdgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRTZXR0aW5ncyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERldmljZVNldHRpbmdzO1xuZXhwb3J0IHsgRGV2aWNlU2V0dGluZ3MgfTtcbiJdfQ==
|
|
@@ -7,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = exports.BaseDriver = void 0;
|
|
9
9
|
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
10
|
require("source-map-support/register");
|
|
13
11
|
|
|
14
12
|
var _protocol = require("../protocol");
|
|
@@ -23,8 +21,6 @@ var _commands = _interopRequireDefault(require("./commands"));
|
|
|
23
21
|
|
|
24
22
|
var helpers = _interopRequireWildcard(require("./helpers"));
|
|
25
23
|
|
|
26
|
-
var _logger = _interopRequireDefault(require("./logger"));
|
|
27
|
-
|
|
28
24
|
var _deviceSettings = _interopRequireDefault(require("./device-settings"));
|
|
29
25
|
|
|
30
26
|
var _desiredCaps = require("./desired-caps");
|
|
@@ -59,6 +55,8 @@ const EVENT_SESSION_QUIT_DONE = 'quitSessionFinished';
|
|
|
59
55
|
const ON_UNEXPECTED_SHUTDOWN_EVENT = 'onUnexpectedShutdown';
|
|
60
56
|
|
|
61
57
|
class BaseDriver extends _protocol.Protocol {
|
|
58
|
+
static baseVersion = BASEDRIVER_VER;
|
|
59
|
+
|
|
62
60
|
constructor(opts = {}, shouldValidateCaps = true) {
|
|
63
61
|
super();
|
|
64
62
|
this.sessionId = null;
|
|
@@ -66,6 +64,7 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
66
64
|
this.caps = null;
|
|
67
65
|
this.originalCaps = null;
|
|
68
66
|
this.helpers = helpers;
|
|
67
|
+
this._log = null;
|
|
69
68
|
this.basePath = _constants.DEFAULT_BASE_PATH;
|
|
70
69
|
this.relaxedSecurityEnabled = false;
|
|
71
70
|
this.allowInsecure = [];
|
|
@@ -90,6 +89,28 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
90
89
|
this.protocol = null;
|
|
91
90
|
}
|
|
92
91
|
|
|
92
|
+
get log() {
|
|
93
|
+
if (!this._log) {
|
|
94
|
+
const instanceName = `${this.constructor.name}@${_support.node.getObjectId(this).substring(0, 4)}`;
|
|
95
|
+
const self = global.WeakRef ? new global.WeakRef(this) : this;
|
|
96
|
+
this._log = _support.logger.getLogger(() => {
|
|
97
|
+
let sessionId = self === null || self === void 0 ? void 0 : self.sessionId;
|
|
98
|
+
|
|
99
|
+
if (!sessionId && _lodash.default.isFunction(self.deref)) {
|
|
100
|
+
const ref = self.deref();
|
|
101
|
+
|
|
102
|
+
if (ref !== null && ref !== void 0 && ref.sessionId) {
|
|
103
|
+
sessionId = ref.sessionId;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return sessionId ? `${instanceName} (${sessionId.substring(0, 8)})` : instanceName;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return this._log;
|
|
112
|
+
}
|
|
113
|
+
|
|
93
114
|
onUnexpectedShutdown(handler) {
|
|
94
115
|
this.eventEmitter.on(ON_UNEXPECTED_SHUTDOWN_EVENT, handler);
|
|
95
116
|
}
|
|
@@ -124,7 +145,7 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
124
145
|
|
|
125
146
|
this._eventHistory[eventName].push(ts);
|
|
126
147
|
|
|
127
|
-
|
|
148
|
+
this.log.debug(`Event '${eventName}' logged at ${ts} (${logTime})`);
|
|
128
149
|
}
|
|
129
150
|
|
|
130
151
|
async getStatus() {
|
|
@@ -160,10 +181,10 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
160
181
|
let extraCaps = _lodash.default.difference(_lodash.default.keys(caps), _lodash.default.keys(this._constraints));
|
|
161
182
|
|
|
162
183
|
if (extraCaps.length) {
|
|
163
|
-
|
|
184
|
+
this.log.warn(`The following capabilities were provided, but are not ` + `recognized by Appium:`);
|
|
164
185
|
|
|
165
186
|
for (const cap of extraCaps) {
|
|
166
|
-
|
|
187
|
+
this.log.warn(` ${cap}`);
|
|
167
188
|
}
|
|
168
189
|
}
|
|
169
190
|
}
|
|
@@ -176,7 +197,7 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
176
197
|
try {
|
|
177
198
|
(0, _capabilities.validateCaps)(caps, this._constraints);
|
|
178
199
|
} catch (e) {
|
|
179
|
-
|
|
200
|
+
this.log.errorAndThrow(new _protocol.errors.SessionNotCreatedError(`The desiredCapabilities object was not valid for the ` + `following reason(s): ${e.message}`));
|
|
180
201
|
}
|
|
181
202
|
|
|
182
203
|
this.logExtraCaps(caps);
|
|
@@ -225,7 +246,7 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
225
246
|
let startTime = Date.now();
|
|
226
247
|
|
|
227
248
|
if (cmd === 'createSession') {
|
|
228
|
-
this.protocol = (0, _protocol.determineProtocol)(
|
|
249
|
+
this.protocol = (0, _protocol.determineProtocol)(args);
|
|
229
250
|
this.logEvent(EVENT_SESSION_INIT);
|
|
230
251
|
} else if (cmd === _protocol.DELETE_SESSION_COMMAND) {
|
|
231
252
|
this.logEvent(EVENT_SESSION_QUIT_START);
|
|
@@ -289,8 +310,7 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
289
310
|
|
|
290
311
|
validateLocatorStrategy(strategy, webContext = false) {
|
|
291
312
|
let validStrategies = this.locatorStrategies;
|
|
292
|
-
|
|
293
|
-
_logger.default.debug(`Valid locator strategies for this request: ${validStrategies.join(', ')}`);
|
|
313
|
+
this.log.debug(`Valid locator strategies for this request: ${validStrategies.join(', ')}`);
|
|
294
314
|
|
|
295
315
|
if (webContext) {
|
|
296
316
|
validStrategies = validStrategies.concat(this.webLocatorStrategies);
|
|
@@ -302,10 +322,8 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
302
322
|
}
|
|
303
323
|
|
|
304
324
|
async reset() {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
_logger.default.debug('Running generic full reset');
|
|
308
|
-
|
|
325
|
+
this.log.debug('Resetting app mid-session');
|
|
326
|
+
this.log.debug('Running generic full reset');
|
|
309
327
|
let currentConfig = {};
|
|
310
328
|
|
|
311
329
|
for (let property of ['implicitWaitMs', 'newCommandTimeoutMs', 'sessionId', 'resetOnUnexpectedShutdown']) {
|
|
@@ -316,9 +334,7 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
316
334
|
|
|
317
335
|
try {
|
|
318
336
|
await this.deleteSession(this.sessionId);
|
|
319
|
-
|
|
320
|
-
_logger.default.debug('Restarting app');
|
|
321
|
-
|
|
337
|
+
this.log.debug('Restarting app');
|
|
322
338
|
await this.createSession(undefined, undefined, this.originalCaps);
|
|
323
339
|
} finally {
|
|
324
340
|
for (let [key, value] of _lodash.default.toPairs(currentConfig)) {
|
|
@@ -378,14 +394,11 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
378
394
|
}
|
|
379
395
|
|
|
380
396
|
exports.BaseDriver = BaseDriver;
|
|
381
|
-
(0, _defineProperty2.default)(BaseDriver, "baseVersion", BASEDRIVER_VER);
|
|
382
397
|
|
|
383
398
|
for (let [cmd, fn] of _lodash.default.toPairs(_commands.default)) {
|
|
384
399
|
BaseDriver.prototype[cmd] = fn;
|
|
385
400
|
}
|
|
386
401
|
|
|
387
402
|
var _default = BaseDriver;
|
|
388
|
-
exports.default = _default;
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2RyaXZlci5qcyJdLCJuYW1lcyI6WyJ2ZXJzaW9uIiwiQkFTRURSSVZFUl9WRVIiLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJfX2Rpcm5hbWUiLCJCIiwiY29uZmlnIiwiY2FuY2VsbGF0aW9uIiwiTkVXX0NPTU1BTkRfVElNRU9VVF9NUyIsIkVWRU5UX1NFU1NJT05fSU5JVCIsIkVWRU5UX1NFU1NJT05fU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfRE9ORSIsIk9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQiLCJCYXNlRHJpdmVyIiwiUHJvdG9jb2wiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzZXNzaW9uSWQiLCJjYXBzIiwib3JpZ2luYWxDYXBzIiwiaGVscGVycyIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiYWxsb3dJbnNlY3VyZSIsImRlbnlJbnNlY3VyZSIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJpbXBsaWNpdFdhaXRNcyIsIl9jb25zdHJhaW50cyIsIl8iLCJjbG9uZURlZXAiLCJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsIm9zIiwidG1wZGlyIiwic2h1dGRvd25VbmV4cGVjdGVkbHkiLCJub0NvbW1hbmRUaW1lciIsImNvbW1hbmRzUXVldWVHdWFyZCIsIkFzeW5jTG9jayIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJub29wIiwiaW5pdGlhbE9wdHMiLCJtYW5hZ2VkRHJpdmVycyIsIl9ldmVudEhpc3RvcnkiLCJjb21tYW5kcyIsImV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlciIsInByb3RvY29sIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJoYW5kbGVyIiwib24iLCJkcml2ZXJEYXRhIiwiaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCIsImV2ZW50SGlzdG9yeSIsImxvZ0V2ZW50IiwiZXZlbnROYW1lIiwiRXJyb3IiLCJ0cyIsIkRhdGUiLCJub3ciLCJsb2dUaW1lIiwidG9UaW1lU3RyaW5nIiwicHVzaCIsImxvZyIsImRlYnVnIiwiZ2V0U3RhdHVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ2YWx1ZSIsInRvUGFpcnMiLCJwcmVzZW5jZSIsImFsbG93RW1wdHkiLCJzZXNzaW9uRXhpc3RzIiwiZHJpdmVyRm9yU2Vzc2lvbiIsImxvZ0V4dHJhQ2FwcyIsImV4dHJhQ2FwcyIsImRpZmZlcmVuY2UiLCJrZXlzIiwibGVuZ3RoIiwid2FybiIsImNhcCIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJtZXNzYWdlIiwiaXNNanNvbndwUHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJNSlNPTldQIiwiaXNXM0NQcm90b2NvbCIsIlczQyIsInNldFByb3RvY29sTUpTT05XUCIsInNldFByb3RvY29sVzNDIiwiaXNGZWF0dXJlRW5hYmxlZCIsIm5hbWUiLCJpbmNsdWRlcyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiZXhlY3V0ZUNvbW1hbmQiLCJjbWQiLCJhcmdzIiwic3RhcnRUaW1lIiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsImNsZWFyTmV3Q29tbWFuZFRpbWVvdXQiLCJOb1N1Y2hEcml2ZXJFcnJvciIsIk5vdFlldEltcGxlbWVudGVkRXJyb3IiLCJ1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lciIsImNvbW1hbmRFeGVjdXRvciIsInJhY2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmluYWxseSIsInJlbW92ZUxpc3RlbmVyIiwicmVzIiwiYWNxdWlyZSIsInN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQiLCJlbmRUaW1lIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJlcnIiLCJlbWl0IiwiZGVsZXRlU2Vzc2lvbiIsInZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJ3ZWJDb250ZXh0IiwidmFsaWRTdHJhdGVnaWVzIiwiam9pbiIsImNvbmNhdCIsIkludmFsaWRTZWxlY3RvckVycm9yIiwicmVzZXQiLCJjdXJyZW50Q29uZmlnIiwicHJvcGVydHkiLCJyZXNldE9uVW5leHBlY3RlZFNodXRkb3duIiwiY3JlYXRlU2Vzc2lvbiIsInVuZGVmaW5lZCIsImtleSIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJtZXRob2QiLCJ1cmwiLCJhdm9pZFNjaGVtYSIsImlzQXJyYXkiLCJhdm9pZE1ldGhvZCIsImF2b2lkUGF0aFJlZ2V4IiwiaXNSZWdFeHAiLCJub3JtYWxpemVkVXJsIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsInRlc3QiLCJhZGRNYW5hZ2VkRHJpdmVyIiwiZHJpdmVyIiwiZ2V0TWFuYWdlZERyaXZlcnMiLCJmbiIsInByb3RvdHlwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQSxNQUFNO0FBQUNBLEVBQUFBLE9BQU8sRUFBRUM7QUFBVixJQUE0QkMsWUFBR0MsbUJBQUgsQ0FBdUJDLFNBQXZCLENBQWxDOztBQUVBQyxrQkFBRUMsTUFBRixDQUFTO0FBQ1BDLEVBQUFBLFlBQVksRUFBRTtBQURQLENBQVQ7O0FBSUEsTUFBTUMsc0JBQXNCLEdBQUcsS0FBSyxJQUFwQztBQUVBLE1BQU1DLGtCQUFrQixHQUFHLHFCQUEzQjtBQUNBLE1BQU1DLG1C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ZUFHY3RKLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBQcm90b2NvbCwgZXJyb3JzLCBkZXRlcm1pbmVQcm90b2NvbCwgREVMRVRFX1NFU1NJT05fQ09NTUFORCxcbn0gZnJvbSAnLi4vcHJvdG9jb2wnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgUFJPVE9DT0xTLCBERUZBVUxUX0JBU0VfUEFUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgRGV2aWNlU2V0dGluZ3MgZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MnO1xuaW1wb3J0IHsgZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCB7IHZhbGlkYXRlQ2FwcyB9IGZyb20gJy4vY2FwYWJpbGl0aWVzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuLy8gZm9yIGNvbXBhdCB3aXRoIHJ1bm5pbmcgdGVzdHMgdHJhbnNwaWxlZCBhbmQgaW4tcGxhY2VcbmNvbnN0IHt2ZXJzaW9uOiBCQVNFRFJJVkVSX1ZFUn0gPSBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKF9fZGlybmFtZSk7XG5cbkIuY29uZmlnKHtcbiAgY2FuY2VsbGF0aW9uOiB0cnVlLFxufSk7XG5cbmNvbnN0IE5FV19DT01NQU5EX1RJTUVPVVRfTVMgPSA2MCAqIDEwMDA7XG5cbmNvbnN0IEVWRU5UX1NFU1NJT05fSU5JVCA9ICduZXdTZXNzaW9uUmVxdWVzdGVkJztcbmNvbnN0IEVWRU5UX1NFU1NJT05fU1RBUlQgPSAnbmV3U2Vzc2lvblN0YXJ0ZWQnO1xuY29uc3QgRVZFTlRfU0VTU0lPTl9RVUlUX1NUQVJUID0gJ3F1aXRTZXNzaW9uUmVxdWVzdGVkJztcbmNvbnN0IEVWRU5UX1NFU1NJT05fUVVJVF9ET05FID0gJ3F1aXRTZXNzaW9uRmluaXNoZWQnO1xuY29uc3QgT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCA9ICdvblVuZXhwZWN0ZWRTaHV0ZG93bic7XG5cbmNsYXNzIEJhc2VEcml2ZXIgZXh0ZW5kcyBQcm90b2NvbCB7XG5cbiAgLyoqXG4gICAqIE1ha2UgdGhlIGJhc2Vkcml2ZXIgdmVyc2lvbiBhdmFpbGFibGUgc28gZm9yIGFueSBkcml2ZXIgd2hpY2ggaW5oZXJpdHMgZnJvbSB0aGlzIHBhY2thZ2UsIHdlXG4gICAqIGtub3cgd2hpY2ggdmVyc2lvbiBvZiBiYXNlZHJpdmVyIGl0IGluaGVyaXRlZCBmcm9tXG4gICAqL1xuICBzdGF0aWMgYmFzZVZlcnNpb24gPSBCQVNFRFJJVkVSX1ZFUjtcblxuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIHNldHVwIHN0YXRlXG4gICAgdGhpcy5zZXNzaW9uSWQgPSBudWxsO1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5jYXBzID0gbnVsbDtcbiAgICB0aGlzLm9yaWdpbmFsQ2FwcyA9IG51bGw7IC8vIFRvIGdpdmUgdGhlIG9yaWdpbmFsIGNhcGFiaWxpdGllcyB0byByZXNldFxuICAgIHRoaXMuaGVscGVycyA9IGhlbHBlcnM7XG5cbiAgICAvLyBiYXNlUGF0aCBpcyB1c2VkIGZvciBzZXZlcmFsIHB1cnBvc2VzLCBmb3IgZXhhbXBsZSBpbiBzZXR0aW5nIHVwXG4gICAgLy8gcHJveHlpbmcgdG8gb3RoZXIgZHJpdmVycywgc2luY2Ugd2UgbmVlZCB0byBrbm93IHdoYXQgdGhlIGJhc2UgcGF0aFxuICAgIC8vIG9mIGFueSBpbmNvbWluZyByZXF1ZXN0IG1pZ2h0IGxvb2sgbGlrZS4gV2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0XG4gICAgLy8gaW5pdGlhbGx5IGJ1dCBpdCBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIGFueSBhY3R1YWwgcHJvZ3JhbVxuICAgIC8vIGV4ZWN1dGlvbiBieSB0aGUgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCB3aGljaCBpcyBuZWNlc3NhcmlseSBydW4gYXNcbiAgICAvLyB0aGUgZW50cnlwb2ludCBmb3IgYW55IEFwcGl1bSBzZXJ2ZXJcbiAgICB0aGlzLmJhc2VQYXRoID0gREVGQVVMVF9CQVNFX1BBVEg7XG5cbiAgICAvLyBpbml0aWFsaXplIHNlY3VyaXR5IG1vZGVzXG4gICAgdGhpcy5yZWxheGVkU2VjdXJpdHlFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5hbGxvd0luc2VjdXJlID0gW107XG4gICAgdGhpcy5kZW55SW5zZWN1cmUgPSBbXTtcblxuICAgIC8vIHRpbWVvdXQgaW5pdGlhbGl6YXRpb25cbiAgICB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMgPSBORVdfQ09NTUFORF9USU1FT1VUX01TO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSAwO1xuXG4gICAgdGhpcy5fY29uc3RyYWludHMgPSBfLmNsb25lRGVlcChkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzKTtcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW107XG4gICAgdGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyA9IFtdO1xuXG4gICAgLy8gdXNlIGEgY3VzdG9tIHRtcCBkaXIgdG8gYXZvaWQgbG9zaW5nIGRhdGEgYW5kIGFwcCB3aGVuIGNvbXB1dGVyIGlzXG4gICAgLy8gcmVzdGFydGVkXG4gICAgdGhpcy5vcHRzLnRtcERpciA9IHRoaXMub3B0cy50bXBEaXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgb3MudG1wZGlyKCk7XG5cbiAgICAvLyBiYXNlLWRyaXZlciBpbnRlcm5hbHNcbiAgICB0aGlzLnNodXRkb3duVW5leHBlY3RlZGx5ID0gZmFsc2U7XG4gICAgdGhpcy5ub0NvbW1hbmRUaW1lciA9IG51bGw7XG4gICAgdGhpcy5zaG91bGRWYWxpZGF0ZUNhcHMgPSBzaG91bGRWYWxpZGF0ZUNhcHM7XG4gICAgdGhpcy5jb21tYW5kc1F1ZXVlR3VhcmQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbiAgICAvLyBzZXR0aW5ncyBzaG91bGQgYmUgaW5zdGFudGlhdGVkIGJ5IGRyaXZlcnMgd2hpY2ggZXh0ZW5kIEJhc2VEcml2ZXIsIGJ1dFxuICAgIC8vIHdlIHNldCBpdCB0byBhbiBlbXB0eSBEZXZpY2VTZXR0aW5ncyBpbnN0YW5jZSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZVxuICAgIC8vIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGFwcGxpZWQgZXZlbiBpZiBhbiBleHRlbmRpbmcgZHJpdmVyIGRvZXNuJ3QgdXRpbGl6ZVxuICAgIC8vIHRoZSBzZXR0aW5ncyBmdW5jdGlvbmFsaXR5IGl0c2VsZlxuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moe30sIF8ubm9vcCk7XG5cbiAgICAvLyBrZWVwaW5nIHRyYWNrIG9mIGluaXRpYWwgb3B0c1xuICAgIHRoaXMuaW5pdGlhbE9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuXG4gICAgLy8gYWxsb3cgc3ViY2xhc3NlcyB0byBoYXZlIGludGVybmFsIGRyaXZlcnNcbiAgICB0aGlzLm1hbmFnZWREcml2ZXJzID0gW107XG5cbiAgICAvLyBzdG9yZSBldmVudCB0aW1pbmdzXG4gICAgdGhpcy5fZXZlbnRIaXN0b3J5ID0ge1xuICAgICAgY29tbWFuZHM6IFtdIC8vIGNvbW1hbmRzIGdldCBhIHNwZWNpYWwgcGxhY2VcbiAgICB9O1xuXG4gICAgLy8gdXNlZCB0byBoYW5kbGUgZHJpdmVyIGV2ZW50c1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgY2FsbGJhY2sgaGFuZGxlciBpZiBuZWVkZWQgdG8gZXhlY3V0ZSBhIGN1c3RvbSBwaWVjZSBvZiBjb2RlXG4gICAqIHdoZW4gdGhlIGRyaXZlciBpcyBzaHV0IGRvd24gdW5leHBlY3RlZGx5LiBNdWx0aXBsZSBjYWxscyB0byB0aGlzIG1ldGhvZFxuICAgKiB3aWxsIGNhdXNlIHRoZSBoYW5kbGVyIHRvIGJlIGV4ZWN1dGVkIG11dGlwbGUgdGltZXNcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgY29kZSB0byBiZSBleGVjdXRlZCBvbiB1bmV4cGVjdGVkIHNodXRkb3duLlxuICAgKiBUaGUgZnVuY3Rpb24gbWF5IGFjY2VwdCBvbmUgYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBhY3R1YWwgZXJyb3IgaW5zdGFuY2UsIHdoaWNoXG4gICAqIGNhdXNlZCB0aGUgZHJpdmVyIHRvIHNodXQgZG93bi5cbiAgICovXG4gIG9uVW5leHBlY3RlZFNodXRkb3duIChoYW5kbGVyKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgaGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IEFwcGl1bURyaXZlciB0byBzdG9yZSB0aGUgZGF0YSBvZiB0aGVcbiAgICogc3BlY2lmaWMgZHJpdmVyIHNlc3Npb25zLiBUaGlzIGRhdGEgY2FuIGJlIGxhdGVyIHVzZWQgdG8gYWRqdXN0XG4gICAqIHByb3BlcnRpZXMgZm9yIGRyaXZlciBpbnN0YW5jZXMgcnVubmluZyBpbiBwYXJhbGxlbC5cbiAgICogT3ZlcnJpZGUgaXQgaW4gaW5oZXJpdGVkIGRyaXZlciBjbGFzc2VzIGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fSBEcml2ZXIgcHJvcGVydGllcyBtYXBwaW5nXG4gICAqL1xuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIHdheSB7I2V4ZWN1dGVDb21tYW5kfSBtZXRob2RcbiAgICogaGFuZGxlcyBuZXcgZHJpdmVyIGNvbW1hbmRzIHJlY2VpdmVkIGZyb20gdGhlIGNsaWVudC5cbiAgICogT3ZlcnJpZGUgaXQgZm9yIGluaGVyaXRlZCBjbGFzc2VzIG9ubHkgaW4gc3BlY2lhbCBjYXNlcy5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIHRydWUgKGRlZmF1bHQpIHRoZW4gYWxsIHRoZSBjb21tYW5kc1xuICAgKiAgIHJlY2VpdmVkIGJ5IHRoZSBwYXJ0aWN1bGFyIGRyaXZlciBpbnN0YW5jZSBhcmUgZ29pbmcgdG8gYmUgcHV0IGludG8gdGhlIHF1ZXVlLFxuICAgKiAgIHNvIGVhY2ggZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgdW50aWwgdGhlIHByZXZpb3VzIGNvbW1hbmRcbiAgICogICBleGVjdXRpb24gaXMgY29tcGxldGVkLiBGYWxzZSB2YWx1ZSBkaXNhYmxlcyB0aGF0IHF1ZXVlLCBzbyBlYWNoIGRyaXZlciBjb21tYW5kXG4gICAqICAgaXMgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseSBhbmQgZG9lcyBub3Qgd2FpdCBmb3IgYW55dGhpbmcuXG4gICAqL1xuICBnZXQgaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKlxuICAgKiBtYWtlIGV2ZW50SGlzdG9yeSBhIHByb3BlcnR5IGFuZCByZXR1cm4gYSBjbG9uZWQgb2JqZWN0IHNvIGEgY29uc3VtZXIgY2FuJ3RcbiAgICogaW5hZHZlcnRlbnRseSBjaGFuZ2UgZGF0YSBvdXRzaWRlIG9mIGxvZ0V2ZW50XG4gICAqL1xuICBnZXQgZXZlbnRIaXN0b3J5ICgpIHtcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodGhpcy5fZXZlbnRIaXN0b3J5KTtcbiAgfVxuXG4gIC8qXG4gICAqIEFQSSBtZXRob2QgZm9yIGRyaXZlciBkZXZlbG9wZXJzIHRvIGxvZyB0aW1pbmdzIGZvciBpbXBvcnRhbnQgZXZlbnRzXG4gICAqL1xuICBsb2dFdmVudCAoZXZlbnROYW1lKSB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NvbW1hbmRzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9nIGNvbW1hbmRzIGRpcmVjdGx5Jyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXZlbnROYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGV2ZW50TmFtZSAke2V2ZW50TmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXSkge1xuICAgICAgdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0gPSBbXTtcbiAgICB9XG4gICAgY29uc3QgdHMgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGxvZ1RpbWUgPSAobmV3IERhdGUodHMpKS50b1RpbWVTdHJpbmcoKTtcbiAgICB0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXS5wdXNoKHRzKTtcbiAgICBsb2cuZGVidWcoYEV2ZW50ICcke2V2ZW50TmFtZX0nIGxvZ2dlZCBhdCAke3RzfSAoJHtsb2dUaW1lfSlgKTtcbiAgfVxuXG4gIC8qXG4gICAqIE92ZXJyaWRkZW4gaW4gYXBwaXVtIGRyaXZlciwgYnV0IGhlcmUgc28gdGhhdCBpbmRpdmlkdWFsIGRyaXZlcnMgY2FuIGJlXG4gICAqIHRlc3RlZCB3aXRoIGNsaWVudHMgdGhhdCBwb2xsXG4gICAqL1xuICBhc3luYyBnZXRTdGF0dXMgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyB3ZSBvbmx5IHdhbnQgc3ViY2xhc3NlcyB0byBldmVyIGV4dGVuZCB0aGUgY29udHJhaW50c1xuICBzZXQgZGVzaXJlZENhcENvbnN0cmFpbnRzIChjb25zdHJhaW50cykge1xuICAgIHRoaXMuX2NvbnN0cmFpbnRzID0gT2JqZWN0LmFzc2lnbih0aGlzLl9jb25zdHJhaW50cywgY29uc3RyYWludHMpO1xuICAgIC8vICdwcmVzZW5jZScgbWVhbnMgZGlmZmVyZW50IHRoaW5ncyBpbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHZhbGlkYXRvcixcbiAgICAvLyB3aGVuIHdlIHNheSAndHJ1ZScgd2UgbWVhbiB0aGF0IGl0IHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSBlbXB0eVxuICAgIGZvciAoY29uc3QgWywgdmFsdWVdIG9mIF8udG9QYWlycyh0aGlzLl9jb25zdHJhaW50cykpIHtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcmVzZW5jZSA9PT0gdHJ1ZSkge1xuICAgICAgICB2YWx1ZS5wcmVzZW5jZSA9IHtcbiAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgZGVzaXJlZENhcENvbnN0cmFpbnRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uc3RyYWludHM7XG4gIH1cblxuICAvLyBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBzaG91bGRcbiAgLy8gcmVzcG9uZCB3aXRoIGFuIGludmFsaWQgc2Vzc2lvbiByZXNwb25zZVxuICBzZXNzaW9uRXhpc3RzIChzZXNzaW9uSWQpIHtcbiAgICBpZiAoIXNlc3Npb25JZCkgcmV0dXJuIGZhbHNlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgcmV0dXJuIHNlc3Npb25JZCA9PT0gdGhpcy5zZXNzaW9uSWQ7XG4gIH1cblxuICAvLyBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbW1hbmQgc2hvdWxkXG4gIC8vIGJlIHByb3hpZWQgZGlyZWN0bHkgdG8gdGhlIGRyaXZlclxuICBkcml2ZXJGb3JTZXNzaW9uICgvKnNlc3Npb25JZCovKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsb2dFeHRyYUNhcHMgKGNhcHMpIHtcbiAgICBsZXQgZXh0cmFDYXBzID0gXy5kaWZmZXJlbmNlKF8ua2V5cyhjYXBzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ua2V5cyh0aGlzLl9jb25zdHJhaW50cykpO1xuICAgIGlmIChleHRyYUNhcHMubGVuZ3RoKSB7XG4gICAgICBsb2cud2FybihgVGhlIGZvbGxvd2luZyBjYXBhYmlsaXRpZXMgd2VyZSBwcm92aWRlZCwgYnV0IGFyZSBub3QgYCArXG4gICAgICAgICAgICAgICBgcmVjb2duaXplZCBieSBBcHBpdW06YCk7XG4gICAgICBmb3IgKGNvbnN0IGNhcCBvZiBleHRyYUNhcHMpIHtcbiAgICAgICAgbG9nLndhcm4oYCAgJHtjYXB9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghdGhpcy5zaG91bGRWYWxpZGF0ZUNhcHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZUNhcHMoY2FwcywgdGhpcy5fY29uc3RyYWludHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihgVGhlIGRlc2lyZWRDYXBhYmlsaXRpZXMgb2JqZWN0IHdhcyBub3QgdmFsaWQgZm9yIHRoZSBgICtcbiAgICAgICAgICAgICAgICAgICAgYGZvbGxvd2luZyByZWFzb24ocyk6ICR7ZS5tZXNzYWdlfWApKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ0V4dHJhQ2FwcyhjYXBzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNNanNvbndwUHJvdG9jb2wgKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIGlzVzNDUHJvdG9jb2wgKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDO1xuICB9XG5cbiAgc2V0UHJvdG9jb2xNSlNPTldQICgpIHtcbiAgICB0aGlzLnByb3RvY29sID0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBzZXRQcm90b2NvbFczQyAoKSB7XG4gICAgdGhpcy5wcm90b2NvbCA9IFBST1RPQ09MUy5XM0M7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZCB2aWEgaXRzIG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICovXG4gIGlzRmVhdHVyZUVuYWJsZWQgKG5hbWUpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGV4cGxpY2l0bHkgZGVuaWVkIHRoaXMgZmVhdHVyZSwgcmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5XG4gICAgaWYgKHRoaXMuZGVueUluc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5kZW55SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugc3BlY2lmaWNhbGx5IGhhdmUgYWxsb3dlZCB0aGUgZmVhdHVyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5hbGxvd0luc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5hbGxvd0luc2VjdXJlLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBpZiB3ZSd2ZSBnbG9iYWxseSBhbGxvd2VkIGluc2VjdXJlIGZlYXR1cmVzIGFuZCBub3QgZGVuaWVkXG4gICAgLy8gdGhpcyBvbmUsIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBhbGxvd2VkIGFueXRoaW5nIGluc2VjdXJlLCB0aGVuIHJlamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlcnQgdGhhdCBhIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgdGhyb3cgYSBoZWxwZnVsIGVycm9yIGlmIGl0J3NcbiAgICogbm90XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gbmFtZSBvZiBmZWF0dXJlL2NvbW1hbmRcbiAgICovXG4gIGVuc3VyZUZlYXR1cmVFbmFibGVkIChuYW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzRmVhdHVyZUVuYWJsZWQobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsbHkgaW5zZWN1cmUgZmVhdHVyZSAnJHtuYW1lfScgaGFzIG5vdCBiZWVuIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBlbmFibGVkLiBJZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBmZWF0dXJlIGFuZCBhY2NlcHQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHRoZSBzZWN1cml0eSByYW1pZmljYXRpb25zLCBwbGVhc2UgZG8gc28gYnkgZm9sbG93aW5nIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGB0aGUgZG9jdW1lbnRlZCBpbnN0cnVjdGlvbnMgYXQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bWAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAvYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vd3JpdGluZy1ydW5uaW5nLWFwcGl1bS9zZWN1cml0eS5tZGApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoaXMgaXMgdGhlIG1haW4gY29tbWFuZCBoYW5kbGVyIGZvciB0aGUgZHJpdmVyLiBJdCB3cmFwcyBjb21tYW5kXG4gIC8vIGV4ZWN1dGlvbiB3aXRoIHRpbWVvdXQgbG9naWMsIGNoZWNraW5nIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHNlc3Npb24sXG4gIC8vIGFuZCBlbnN1cmluZyB0aGF0IHdlIGV4ZWN1dGUgY29tbWFuZHMgb25lIGF0IGEgdGltZS4gVGhpcyBtZXRob2QgaXMgY2FsbGVkXG4gIC8vIGJ5IE1KU09OV1AncyBleHByZXNzIHJvdXRlci5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIC8vIGdldCBzdGFydCB0aW1lIGZvciB0aGlzIGNvbW1hbmQsIGFuZCBsb2cgaW4gc3BlY2lhbCBjYXNlc1xuICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKGNtZCA9PT0gJ2NyZWF0ZVNlc3Npb24nKSB7XG4gICAgICAvLyBJZiBjcmVhdGluZyBhIHNlc3Npb24gZGV0ZXJtaW5lIGlmIFczQyBvciBNSlNPTldQIHByb3RvY29sIHdhcyByZXF1ZXN0ZWQgYW5kIHJlbWVtYmVyIHRoZSBjaG9pY2VcbiAgICAgIHRoaXMucHJvdG9jb2wgPSBkZXRlcm1pbmVQcm90b2NvbCguLi5hcmdzKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9JTklUKTtcbiAgICB9IGVsc2UgaWYgKGNtZCA9PT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQpO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGhhZCBhIGNvbW1hbmQgdGltZXIgcnVubmluZywgY2xlYXIgaXQgbm93IHRoYXQgd2UncmUgc3RhcnRpbmdcbiAgICAvLyBhIG5ldyBjb21tYW5kIGFuZCBzbyBkb24ndCB3YW50IHRvIHRpbWUgb3V0XG4gICAgdGhpcy5jbGVhck5ld0NvbW1hbmRUaW1lb3V0KCk7XG5cbiAgICBpZiAodGhpcy5zaHV0ZG93blVuZXhwZWN0ZWRseSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcignVGhlIGRyaXZlciB3YXMgdW5leHBlY3RlZGx5IHNodXQgZG93biEnKTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRoaXMgY29tbWFuZCwgaXQgbXVzdCBub3QgYmUgaW1wbGVtZW50ZWRcbiAgICBpZiAoIXRoaXNbY21kXSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RZZXRJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgbGV0IHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyO1xuICAgIGNvbnN0IGNvbW1hbmRFeGVjdXRvciA9IGFzeW5jICgpID0+IGF3YWl0IEIucmFjZShbXG4gICAgICB0aGlzW2NtZF0oLi4uYXJncyksXG4gICAgICBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyID0gcmVqZWN0O1xuICAgICAgICB0aGlzLmV2ZW50RW1pdHRlci5vbihPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5ULCB1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lcik7XG4gICAgICB9KVxuICAgIF0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLnJlbW92ZUxpc3RlbmVyKE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQsIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyKTtcbiAgICAgICAgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuaXNDb21tYW5kc1F1ZXVlRW5hYmxlZFxuICAgICAgPyBhd2FpdCB0aGlzLmNvbW1hbmRzUXVldWVHdWFyZC5hY3F1aXJlKEJhc2VEcml2ZXIubmFtZSwgY29tbWFuZEV4ZWN1dG9yKVxuICAgICAgOiBhd2FpdCBjb21tYW5kRXhlY3V0b3IoKTtcblxuICAgIC8vIGlmIHdlIGhhdmUgc2V0IGEgbmV3IGNvbW1hbmQgdGltZW91dCAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCBzdGFydCBhXG4gICAgLy8gdGltZXIgb25jZSB3ZSd2ZSBmaW5pc2hlZCBleGVjdXRpbmcgdGhpcyBjb21tYW5kLiBJZiB3ZSBkb24ndCBjbGVhclxuICAgIC8vIHRoZSB0aW1lciAod2hpY2ggaXMgZG9uZSB3aGVuIGEgbmV3IGNvbW1hbmQgY29tZXMgaW4pLCB3ZSB3aWxsIHRyaWdnZXJcbiAgICAvLyBhdXRvbWF0aWMgc2Vzc2lvbiBkZWxldGlvbiBpbiB0aGlzLm9uQ29tbWFuZFRpbWVvdXQuIE9mIGNvdXJzZSB3ZSBkb24ndFxuICAgIC8vIHdhbnQgdG8gdHJpZ2dlciB0aGUgdGltZXIgd2hlbiB0aGUgdXNlciBpcyBzaHV0dGluZyBkb3duIHRoZSBzZXNzaW9uXG4gICAgLy8gaW50ZW50aW9uYWxseVxuICAgIGlmICh0aGlzLmlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQgJiYgY21kICE9PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICAvLyByZXNldHRpbmcgZXhpc3RpbmcgdGltZW91dFxuICAgICAgdGhpcy5zdGFydE5ld0NvbW1hbmRUaW1lb3V0KCk7XG4gICAgfVxuXG4gICAgLy8gbG9nIHRpbWluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvbW1hbmRcbiAgICBjb25zdCBlbmRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9ldmVudEhpc3RvcnkuY29tbWFuZHMucHVzaCh7Y21kLCBzdGFydFRpbWUsIGVuZFRpbWV9KTtcbiAgICBpZiAoY21kID09PSAnY3JlYXRlU2Vzc2lvbicpIHtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9TVEFSVCk7XG4gICAgfSBlbHNlIGlmIChjbWQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9RVUlUX0RPTkUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBhc3luYyBzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biAoZXJyID0gbmV3IGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcignVGhlIGRyaXZlciB3YXMgdW5leHBlY3RlZGx5IHNodXQgZG93biEnKSkge1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgZXJyKTsgLy8gYWxsb3cgb3RoZXJzIHRvIGxpc3RlbiBmb3IgdGhpc1xuICAgIHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24odGhpcy5zZXNzaW9uSWQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNodXRkb3duVW5leHBlY3RlZGx5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kgKHN0cmF0ZWd5LCB3ZWJDb250ZXh0ID0gZmFsc2UpIHtcbiAgICBsZXQgdmFsaWRTdHJhdGVnaWVzID0gdGhpcy5sb2NhdG9yU3RyYXRlZ2llcztcbiAgICBsb2cuZGVidWcoYFZhbGlkIGxvY2F0b3Igc3RyYXRlZ2llcyBmb3IgdGhpcyByZXF1ZXN0OiAke3ZhbGlkU3RyYXRlZ2llcy5qb2luKCcsICcpfWApO1xuXG4gICAgaWYgKHdlYkNvbnRleHQpIHtcbiAgICAgIHZhbGlkU3RyYXRlZ2llcyA9IHZhbGlkU3RyYXRlZ2llcy5jb25jYXQodGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmluY2x1ZGVzKHZhbGlkU3RyYXRlZ2llcywgc3RyYXRlZ3kpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRTZWxlY3RvckVycm9yKGBMb2NhdG9yIFN0cmF0ZWd5ICcke3N0cmF0ZWd5fScgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBzZXNzaW9uYCk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUmVzdGFydCB0aGUgc2Vzc2lvbiB3aXRoIHRoZSBvcmlnaW5hbCBjYXBzLFxuICAgKiBwcmVzZXJ2aW5nIHRoZSB0aW1lb3V0IGNvbmZpZy5cbiAgICovXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICBsb2cuZGVidWcoJ1Jlc2V0dGluZyBhcHAgbWlkLXNlc3Npb24nKTtcbiAgICBsb2cuZGVidWcoJ1J1bm5pbmcgZ2VuZXJpYyBmdWxsIHJlc2V0Jyk7XG5cbiAgICAvLyBwcmVzZXJ2aW5nIHN0YXRlXG4gICAgbGV0IGN1cnJlbnRDb25maWcgPSB7fTtcbiAgICBmb3IgKGxldCBwcm9wZXJ0eSBvZiBbJ2ltcGxpY2l0V2FpdE1zJywgJ25ld0NvbW1hbmRUaW1lb3V0TXMnLCAnc2Vzc2lvbklkJywgJ3Jlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24nXSkge1xuICAgICAgY3VycmVudENvbmZpZ1twcm9wZXJ0eV0gPSB0aGlzW3Byb3BlcnR5XTtcbiAgICB9XG5cbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gcHJlc2VydmUgdGhlIHVuZXhwZWN0ZWQgc2h1dGRvd24sIGFuZCBtYWtlIHN1cmUgaXQgaXMgbm90IGNhbmNlbGxlZCBkdXJpbmcgcmVzZXQuXG4gICAgdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duID0gKCkgPT4ge307XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKHRoaXMuc2Vzc2lvbklkKTtcbiAgICAgIGxvZy5kZWJ1ZygnUmVzdGFydGluZyBhcHAnKTtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU2Vzc2lvbih1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy5vcmlnaW5hbENhcHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBhbHdheXMgcmVzdG9yZSBzdGF0ZS5cbiAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoY3VycmVudENvbmZpZykpIHtcbiAgICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuICB9XG5cbiAgcHJveHlBY3RpdmUgKC8qIHNlc3Npb25JZCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgvKiBzZXNzaW9uSWQgKi8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjYW5Qcm94eSAoLyogc2Vzc2lvbklkICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBnaXZlbiBjb21tYW5kIHJvdXRlIChleHByZXNzZWQgYXMgbWV0aG9kIGFuZCB1cmwpIHNob3VsZCBub3QgYmVcbiAgICogcHJveGllZCBhY2NvcmRpbmcgdG8gdGhpcyBkcml2ZXJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCAtIHRoZSBjdXJyZW50IHNlc3Npb25JZCAoaW4gY2FzZSB0aGUgZHJpdmVyIHJ1bnNcbiAgICogbXVsdGlwbGUgc2Vzc2lvbiBpZHMgYW5kIHJlcXVpcmVzIGl0KS4gVGhpcyBpcyBub3QgdXNlZCBpbiB0aGlzIG1ldGhvZCBidXRcbiAgICogc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlIHRvIG92ZXJyaWRkZW4gbWV0aG9kcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCAtIEhUVFAgbWV0aG9kIG9mIHRoZSByb3V0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gdXJsIG9mIHRoZSByb3V0ZVxuICAgKiBAcGFyYW0gez8qfSBib2R5IC0gd2ViZHJpdmVyIHJlcXVlc3QgYm9keVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB3aGV0aGVyIHRoZSByb3V0ZSBzaG91bGQgYmUgYXZvaWRlZFxuICAgKi9cbiAgcHJveHlSb3V0ZUlzQXZvaWRlZCAoc2Vzc2lvbklkLCBtZXRob2QsIHVybC8qLCBib2R5Ki8pIHtcbiAgICBmb3IgKGxldCBhdm9pZFNjaGVtYSBvZiB0aGlzLmdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCkpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KGF2b2lkU2NoZW1hKSB8fCBhdm9pZFNjaGVtYS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm94eSBhdm9pZGFuY2UgbXVzdCBiZSBhIGxpc3Qgb2YgcGFpcnMnKTtcbiAgICAgIH1cbiAgICAgIGxldCBbYXZvaWRNZXRob2QsIGF2b2lkUGF0aFJlZ2V4XSA9IGF2b2lkU2NoZW1hO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKFsnR0VUJywgJ1BPU1QnLCAnREVMRVRFJ10sIGF2b2lkTWV0aG9kKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBwcm94eSBhdm9pZGFuY2UgbWV0aG9kICcke2F2b2lkTWV0aG9kfSdgKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc1JlZ0V4cChhdm9pZFBhdGhSZWdleCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm94eSBhdm9pZGFuY2UgcGF0aCBtdXN0IGJlIGEgcmVndWxhciBleHByZXNzaW9uJyk7XG4gICAgICB9XG4gICAgICBsZXQgbm9ybWFsaXplZFVybCA9IHVybC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke18uZXNjYXBlUmVnRXhwKHRoaXMuYmFzZVBhdGgpfWApLCAnJyk7XG4gICAgICBpZiAoYXZvaWRNZXRob2QgPT09IG1ldGhvZCAmJiBhdm9pZFBhdGhSZWdleC50ZXN0KG5vcm1hbGl6ZWRVcmwpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhZGRNYW5hZ2VkRHJpdmVyIChkcml2ZXIpIHtcbiAgICB0aGlzLm1hbmFnZWREcml2ZXJzLnB1c2goZHJpdmVyKTtcbiAgfVxuXG4gIGdldE1hbmFnZWREcml2ZXJzICgpIHtcbiAgICByZXR1cm4gdGhpcy5tYW5hZ2VkRHJpdmVycztcbiAgfVxufVxuXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICBCYXNlRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbmV4cG9ydCB7IEJhc2VEcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEJhc2VEcml2ZXI7XG4iXSwiZmlsZSI6ImxpYi9iYXNlZHJpdmVyL2RyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
403
|
+
exports.default = _default;
|
|
404
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2RyaXZlci5qcyJdLCJuYW1lcyI6WyJ2ZXJzaW9uIiwiQkFTRURSSVZFUl9WRVIiLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJfX2Rpcm5hbWUiLCJCIiwiY29uZmlnIiwiY2FuY2VsbGF0aW9uIiwiTkVXX0NPTU1BTkRfVElNRU9VVF9NUyIsIkVWRU5UX1NFU1NJT05fSU5JVCIsIkVWRU5UX1NFU1NJT05fU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfRE9ORSIsIk9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQiLCJCYXNlRHJpdmVyIiwiUHJvdG9jb2wiLCJiYXNlVmVyc2lvbiIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsInNlc3Npb25JZCIsImNhcHMiLCJvcmlnaW5hbENhcHMiLCJoZWxwZXJzIiwiX2xvZyIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiYWxsb3dJbnNlY3VyZSIsImRlbnlJbnNlY3VyZSIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJpbXBsaWNpdFdhaXRNcyIsIl9jb25zdHJhaW50cyIsIl8iLCJjbG9uZURlZXAiLCJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsIm9zIiwidG1wZGlyIiwic2h1dGRvd25VbmV4cGVjdGVkbHkiLCJub0NvbW1hbmRUaW1lciIsImNvbW1hbmRzUXVldWVHdWFyZCIsIkFzeW5jTG9jayIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJub29wIiwiaW5pdGlhbE9wdHMiLCJtYW5hZ2VkRHJpdmVycyIsIl9ldmVudEhpc3RvcnkiLCJjb21tYW5kcyIsImV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlciIsInByb3RvY29sIiwibG9nIiwiaW5zdGFuY2VOYW1lIiwibmFtZSIsIm5vZGUiLCJnZXRPYmplY3RJZCIsInN1YnN0cmluZyIsInNlbGYiLCJnbG9iYWwiLCJXZWFrUmVmIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiaXNGdW5jdGlvbiIsImRlcmVmIiwicmVmIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJoYW5kbGVyIiwib24iLCJkcml2ZXJEYXRhIiwiaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCIsImV2ZW50SGlzdG9yeSIsImxvZ0V2ZW50IiwiZXZlbnROYW1lIiwiRXJyb3IiLCJ0cyIsIkRhdGUiLCJub3ciLCJsb2dUaW1lIiwidG9UaW1lU3RyaW5nIiwicHVzaCIsImRlYnVnIiwiZ2V0U3RhdHVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ2YWx1ZSIsInRvUGFpcnMiLCJwcmVzZW5jZSIsImFsbG93RW1wdHkiLCJzZXNzaW9uRXhpc3RzIiwiZHJpdmVyRm9yU2Vzc2lvbiIsImxvZ0V4dHJhQ2FwcyIsImV4dHJhQ2FwcyIsImRpZmZlcmVuY2UiLCJrZXlzIiwibGVuZ3RoIiwid2FybiIsImNhcCIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJtZXNzYWdlIiwiaXNNanNvbndwUHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJNSlNPTldQIiwiaXNXM0NQcm90b2NvbCIsIlczQyIsInNldFByb3RvY29sTUpTT05XUCIsInNldFByb3RvY29sVzNDIiwiaXNGZWF0dXJlRW5hYmxlZCIsImluY2x1ZGVzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJleGVjdXRlQ29tbWFuZCIsImNtZCIsImFyZ3MiLCJzdGFydFRpbWUiLCJERUxFVEVfU0VTU0lPTl9DT01NQU5EIiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsIk5vU3VjaERyaXZlckVycm9yIiwiTm90WWV0SW1wbGVtZW50ZWRFcnJvciIsInVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyIiwiY29tbWFuZEV4ZWN1dG9yIiwicmFjZSIsInJlc29sdmUiLCJyZWplY3QiLCJmaW5hbGx5IiwicmVtb3ZlTGlzdGVuZXIiLCJyZXMiLCJhY3F1aXJlIiwic3RhcnROZXdDb21tYW5kVGltZW91dCIsImVuZFRpbWUiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImVyciIsImVtaXQiLCJkZWxldGVTZXNzaW9uIiwidmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kiLCJzdHJhdGVneSIsIndlYkNvbnRleHQiLCJ2YWxpZFN0cmF0ZWdpZXMiLCJqb2luIiwiY29uY2F0IiwiSW52YWxpZFNlbGVjdG9yRXJyb3IiLCJyZXNldCIsImN1cnJlbnRDb25maWciLCJwcm9wZXJ0eSIsInJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24iLCJjcmVhdGVTZXNzaW9uIiwidW5kZWZpbmVkIiwia2V5IiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5IiwicHJveHlSb3V0ZUlzQXZvaWRlZCIsIm1ldGhvZCIsInVybCIsImF2b2lkU2NoZW1hIiwiaXNBcnJheSIsImF2b2lkTWV0aG9kIiwiYXZvaWRQYXRoUmVnZXgiLCJpc1JlZ0V4cCIsIm5vcm1hbGl6ZWRVcmwiLCJyZXBsYWNlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwidGVzdCIsImFkZE1hbmFnZWREcml2ZXIiLCJkcml2ZXIiLCJnZXRNYW5hZ2VkRHJpdmVycyIsImZuIiwicHJvdG90eXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQSxNQUFNO0FBQUNBLEVBQUFBLE9BQU8sRUFBRUM7QUFBVixJQUE0QkMsWUFBR0MsbUJBQUgsQ0FBdUJDLFNB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LElBQUksQ0FBQ3VFLEdBQUQsRUFBTXVELEVBQU4sQ0FBVCxJQUFzQmpKLGdCQUFFNkQsT0FBRixDQUFVeEMsaUJBQVYsQ0FBdEIsRUFBMkM7QUFDekN4QyxFQUFBQSxVQUFVLENBQUNxSyxTQUFYLENBQXFCeEQsR0FBckIsSUFBNEJ1RCxFQUE1QjtBQUNEOztlQUdjcEssVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFByb3RvY29sLCBlcnJvcnMsIGRldGVybWluZVByb3RvY29sLCBERUxFVEVfU0VTU0lPTl9DT01NQU5ELFxufSBmcm9tICcuLi9wcm90b2NvbCc7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCBub2RlIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IFBST1RPQ09MUywgREVGQVVMVF9CQVNFX1BBVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCBEZXZpY2VTZXR0aW5ncyBmcm9tICcuL2RldmljZS1zZXR0aW5ncyc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVDYXBzIH0gZnJvbSAnLi9jYXBhYmlsaXRpZXMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG4vLyBmb3IgY29tcGF0IHdpdGggcnVubmluZyB0ZXN0cyB0cmFuc3BpbGVkIGFuZCBpbi1wbGFjZVxuY29uc3Qge3ZlcnNpb246IEJBU0VEUklWRVJfVkVSfSA9IGZzLnJlYWRQYWNrYWdlSnNvbkZyb20oX19kaXJuYW1lKTtcblxuQi5jb25maWcoe1xuICBjYW5jZWxsYXRpb246IHRydWUsXG59KTtcblxuY29uc3QgTkVXX0NPTU1BTkRfVElNRU9VVF9NUyA9IDYwICogMTAwMDtcblxuY29uc3QgRVZFTlRfU0VTU0lPTl9JTklUID0gJ25ld1Nlc3Npb25SZXF1ZXN0ZWQnO1xuY29uc3QgRVZFTlRfU0VTU0lPTl9TVEFSVCA9ICduZXdTZXNzaW9uU3RhcnRlZCc7XG5jb25zdCBFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQgPSAncXVpdFNlc3Npb25SZXF1ZXN0ZWQnO1xuY29uc3QgRVZFTlRfU0VTU0lPTl9RVUlUX0RPTkUgPSAncXVpdFNlc3Npb25GaW5pc2hlZCc7XG5jb25zdCBPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5UID0gJ29uVW5leHBlY3RlZFNodXRkb3duJztcblxuXG5jbGFzcyBCYXNlRHJpdmVyIGV4dGVuZHMgUHJvdG9jb2wge1xuXG4gIC8qKlxuICAgKiBNYWtlIHRoZSBiYXNlZHJpdmVyIHZlcnNpb24gYXZhaWxhYmxlIHNvIGZvciBhbnkgZHJpdmVyIHdoaWNoIGluaGVyaXRzIGZyb20gdGhpcyBwYWNrYWdlLCB3ZVxuICAgKiBrbm93IHdoaWNoIHZlcnNpb24gb2YgYmFzZWRyaXZlciBpdCBpbmhlcml0ZWQgZnJvbVxuICAgKi9cbiAgc3RhdGljIGJhc2VWZXJzaW9uID0gQkFTRURSSVZFUl9WRVI7XG5cbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBzZXR1cCBzdGF0ZVxuICAgIHRoaXMuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgIHRoaXMuY2FwcyA9IG51bGw7XG4gICAgdGhpcy5vcmlnaW5hbENhcHMgPSBudWxsOyAvLyBUbyBnaXZlIHRoZSBvcmlnaW5hbCBjYXBhYmlsaXRpZXMgdG8gcmVzZXRcbiAgICB0aGlzLmhlbHBlcnMgPSBoZWxwZXJzO1xuXG4gICAgdGhpcy5fbG9nID0gbnVsbDtcblxuICAgIC8vIGJhc2VQYXRoIGlzIHVzZWQgZm9yIHNldmVyYWwgcHVycG9zZXMsIGZvciBleGFtcGxlIGluIHNldHRpbmcgdXBcbiAgICAvLyBwcm94eWluZyB0byBvdGhlciBkcml2ZXJzLCBzaW5jZSB3ZSBuZWVkIHRvIGtub3cgd2hhdCB0aGUgYmFzZSBwYXRoXG4gICAgLy8gb2YgYW55IGluY29taW5nIHJlcXVlc3QgbWlnaHQgbG9vayBsaWtlLiBXZSBzZXQgaXQgdG8gdGhlIGRlZmF1bHRcbiAgICAvLyBpbml0aWFsbHkgYnV0IGl0IGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBkdXJpbmcgYW55IGFjdHVhbCBwcm9ncmFtXG4gICAgLy8gZXhlY3V0aW9uIGJ5IHRoZSByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sIHdoaWNoIGlzIG5lY2Vzc2FyaWx5IHJ1biBhc1xuICAgIC8vIHRoZSBlbnRyeXBvaW50IGZvciBhbnkgQXBwaXVtIHNlcnZlclxuICAgIHRoaXMuYmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSDtcblxuICAgIC8vIGluaXRpYWxpemUgc2VjdXJpdHkgbW9kZXNcbiAgICB0aGlzLnJlbGF4ZWRTZWN1cml0eUVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmFsbG93SW5zZWN1cmUgPSBbXTtcbiAgICB0aGlzLmRlbnlJbnNlY3VyZSA9IFtdO1xuXG4gICAgLy8gdGltZW91dCBpbml0aWFsaXphdGlvblxuICAgIHRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyA9IE5FV19DT01NQU5EX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5pbXBsaWNpdFdhaXRNcyA9IDA7XG5cbiAgICB0aGlzLl9jb25zdHJhaW50cyA9IF8uY2xvbmVEZWVwKGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMpO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXTtcbiAgICB0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzID0gW107XG5cbiAgICAvLyB1c2UgYSBjdXN0b20gdG1wIGRpciB0byBhdm9pZCBsb3NpbmcgZGF0YSBhbmQgYXBwIHdoZW4gY29tcHV0ZXIgaXNcbiAgICAvLyByZXN0YXJ0ZWRcbiAgICB0aGlzLm9wdHMudG1wRGlyID0gdGhpcy5vcHRzLnRtcERpciB8fFxuICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiB8fFxuICAgICAgICAgICAgICAgICAgICAgICBvcy50bXBkaXIoKTtcblxuICAgIC8vIGJhc2UtZHJpdmVyIGludGVybmFsc1xuICAgIHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkgPSBmYWxzZTtcbiAgICB0aGlzLm5vQ29tbWFuZFRpbWVyID0gbnVsbDtcbiAgICB0aGlzLnNob3VsZFZhbGlkYXRlQ2FwcyA9IHNob3VsZFZhbGlkYXRlQ2FwcztcbiAgICB0aGlzLmNvbW1hbmRzUXVldWVHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcblxuICAgIC8vIHNldHRpbmdzIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgYnkgZHJpdmVycyB3aGljaCBleHRlbmQgQmFzZURyaXZlciwgYnV0XG4gICAgLy8gd2Ugc2V0IGl0IHRvIGFuIGVtcHR5IERldmljZVNldHRpbmdzIGluc3RhbmNlIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlXG4gICAgLy8gZGVmYXVsdCBzZXR0aW5ncyBhcmUgYXBwbGllZCBldmVuIGlmIGFuIGV4dGVuZGluZyBkcml2ZXIgZG9lc24ndCB1dGlsaXplXG4gICAgLy8gdGhlIHNldHRpbmdzIGZ1bmN0aW9uYWxpdHkgaXRzZWxmXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7fSwgXy5ub29wKTtcblxuICAgIC8vIGtlZXBpbmcgdHJhY2sgb2YgaW5pdGlhbCBvcHRzXG4gICAgdGhpcy5pbml0aWFsT3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgICAvLyBhbGxvdyBzdWJjbGFzc2VzIHRvIGhhdmUgaW50ZXJuYWwgZHJpdmVyc1xuICAgIHRoaXMubWFuYWdlZERyaXZlcnMgPSBbXTtcblxuICAgIC8vIHN0b3JlIGV2ZW50IHRpbWluZ3NcbiAgICB0aGlzLl9ldmVudEhpc3RvcnkgPSB7XG4gICAgICBjb21tYW5kczogW10gLy8gY29tbWFuZHMgZ2V0IGEgc3BlY2lhbCBwbGFjZVxuICAgIH07XG5cbiAgICAvLyB1c2VkIHRvIGhhbmRsZSBkcml2ZXIgZXZlbnRzXG4gICAgdGhpcy5ldmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgfVxuXG4gIGdldCBsb2cgKCkge1xuICAgIGlmICghdGhpcy5fbG9nKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZU5hbWUgPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9QCR7bm9kZS5nZXRPYmplY3RJZCh0aGlzKS5zdWJzdHJpbmcoMCwgNCl9YDtcbiAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIHNlbGYgcmVmZXJlbmNlIHRvIGJlIGNhcHR1cmVkIGluc2lkZSB0aGUgYmVsb3cgY2xvc3VyZVxuICAgICAgLy8gdG8gYXZvaWQgcG9zc2libGUgbWVtb3J5IGxlYWtzLFxuICAgICAgLy8gYnV0IE5vZGVKUyBzdGFydGVkIHN1cHBvcnRpbmcgV2Vha1JlZiBvbmx5IHNpbmNlIHYuIDE0LjZcbiAgICAgIGNvbnN0IHNlbGYgPSBnbG9iYWwuV2Vha1JlZiA/IG5ldyBnbG9iYWwuV2Vha1JlZih0aGlzKSA6IHRoaXM7XG4gICAgICB0aGlzLl9sb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCgpID0+IHtcbiAgICAgICAgbGV0IHNlc3Npb25JZCA9IHNlbGY/LnNlc3Npb25JZDtcbiAgICAgICAgaWYgKCFzZXNzaW9uSWQgJiYgXy5pc0Z1bmN0aW9uKHNlbGYuZGVyZWYpKSB7XG4gICAgICAgICAgY29uc3QgcmVmID0gc2VsZi5kZXJlZigpO1xuICAgICAgICAgIGlmIChyZWY/LnNlc3Npb25JZCkge1xuICAgICAgICAgICAgc2Vzc2lvbklkID0gcmVmLnNlc3Npb25JZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlc3Npb25JZCA/IGAke2luc3RhbmNlTmFtZX0gKCR7c2Vzc2lvbklkLnN1YnN0cmluZygwLCA4KX0pYCA6IGluc3RhbmNlTmFtZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9sb2c7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgY2FsbGJhY2sgaGFuZGxlciBpZiBuZWVkZWQgdG8gZXhlY3V0ZSBhIGN1c3RvbSBwaWVjZSBvZiBjb2RlXG4gICAqIHdoZW4gdGhlIGRyaXZlciBpcyBzaHV0IGRvd24gdW5leHBlY3RlZGx5LiBNdWx0aXBsZSBjYWxscyB0byB0aGlzIG1ldGhvZFxuICAgKiB3aWxsIGNhdXNlIHRoZSBoYW5kbGVyIHRvIGJlIGV4ZWN1dGVkIG11dGlwbGUgdGltZXNcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgY29kZSB0byBiZSBleGVjdXRlZCBvbiB1bmV4cGVjdGVkIHNodXRkb3duLlxuICAgKiBUaGUgZnVuY3Rpb24gbWF5IGFjY2VwdCBvbmUgYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBhY3R1YWwgZXJyb3IgaW5zdGFuY2UsIHdoaWNoXG4gICAqIGNhdXNlZCB0aGUgZHJpdmVyIHRvIHNodXQgZG93bi5cbiAgICovXG4gIG9uVW5leHBlY3RlZFNodXRkb3duIChoYW5kbGVyKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgaGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IEFwcGl1bURyaXZlciB0byBzdG9yZSB0aGUgZGF0YSBvZiB0aGVcbiAgICogc3BlY2lmaWMgZHJpdmVyIHNlc3Npb25zLiBUaGlzIGRhdGEgY2FuIGJlIGxhdGVyIHVzZWQgdG8gYWRqdXN0XG4gICAqIHByb3BlcnRpZXMgZm9yIGRyaXZlciBpbnN0YW5jZXMgcnVubmluZyBpbiBwYXJhbGxlbC5cbiAgICogT3ZlcnJpZGUgaXQgaW4gaW5oZXJpdGVkIGRyaXZlciBjbGFzc2VzIGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fSBEcml2ZXIgcHJvcGVydGllcyBtYXBwaW5nXG4gICAqL1xuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIHdheSB7I2V4ZWN1dGVDb21tYW5kfSBtZXRob2RcbiAgICogaGFuZGxlcyBuZXcgZHJpdmVyIGNvbW1hbmRzIHJlY2VpdmVkIGZyb20gdGhlIGNsaWVudC5cbiAgICogT3ZlcnJpZGUgaXQgZm9yIGluaGVyaXRlZCBjbGFzc2VzIG9ubHkgaW4gc3BlY2lhbCBjYXNlcy5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIHRydWUgKGRlZmF1bHQpIHRoZW4gYWxsIHRoZSBjb21tYW5kc1xuICAgKiAgIHJlY2VpdmVkIGJ5IHRoZSBwYXJ0aWN1bGFyIGRyaXZlciBpbnN0YW5jZSBhcmUgZ29pbmcgdG8gYmUgcHV0IGludG8gdGhlIHF1ZXVlLFxuICAgKiAgIHNvIGVhY2ggZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgdW50aWwgdGhlIHByZXZpb3VzIGNvbW1hbmRcbiAgICogICBleGVjdXRpb24gaXMgY29tcGxldGVkLiBGYWxzZSB2YWx1ZSBkaXNhYmxlcyB0aGF0IHF1ZXVlLCBzbyBlYWNoIGRyaXZlciBjb21tYW5kXG4gICAqICAgaXMgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseSBhbmQgZG9lcyBub3Qgd2FpdCBmb3IgYW55dGhpbmcuXG4gICAqL1xuICBnZXQgaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKlxuICAgKiBtYWtlIGV2ZW50SGlzdG9yeSBhIHByb3BlcnR5IGFuZCByZXR1cm4gYSBjbG9uZWQgb2JqZWN0IHNvIGEgY29uc3VtZXIgY2FuJ3RcbiAgICogaW5hZHZlcnRlbnRseSBjaGFuZ2UgZGF0YSBvdXRzaWRlIG9mIGxvZ0V2ZW50XG4gICAqL1xuICBnZXQgZXZlbnRIaXN0b3J5ICgpIHtcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodGhpcy5fZXZlbnRIaXN0b3J5KTtcbiAgfVxuXG4gIC8qXG4gICAqIEFQSSBtZXRob2QgZm9yIGRyaXZlciBkZXZlbG9wZXJzIHRvIGxvZyB0aW1pbmdzIGZvciBpbXBvcnRhbnQgZXZlbnRzXG4gICAqL1xuICBsb2dFdmVudCAoZXZlbnROYW1lKSB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NvbW1hbmRzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9nIGNvbW1hbmRzIGRpcmVjdGx5Jyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXZlbnROYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGV2ZW50TmFtZSAke2V2ZW50TmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXSkge1xuICAgICAgdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0gPSBbXTtcbiAgICB9XG4gICAgY29uc3QgdHMgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGxvZ1RpbWUgPSAobmV3IERhdGUodHMpKS50b1RpbWVTdHJpbmcoKTtcbiAgICB0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXS5wdXNoKHRzKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRXZlbnQgJyR7ZXZlbnROYW1lfScgbG9nZ2VkIGF0ICR7dHN9ICgke2xvZ1RpbWV9KWApO1xuICB9XG5cbiAgLypcbiAgICogT3ZlcnJpZGRlbiBpbiBhcHBpdW0gZHJpdmVyLCBidXQgaGVyZSBzbyB0aGF0IGluZGl2aWR1YWwgZHJpdmVycyBjYW4gYmVcbiAgICogdGVzdGVkIHdpdGggY2xpZW50cyB0aGF0IHBvbGxcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIHdlIG9ubHkgd2FudCBzdWJjbGFzc2VzIHRvIGV2ZXIgZXh0ZW5kIHRoZSBjb250cmFpbnRzXG4gIHNldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgKGNvbnN0cmFpbnRzKSB7XG4gICAgdGhpcy5fY29uc3RyYWludHMgPSBPYmplY3QuYXNzaWduKHRoaXMuX2NvbnN0cmFpbnRzLCBjb25zdHJhaW50cyk7XG4gICAgLy8gJ3ByZXNlbmNlJyBtZWFucyBkaWZmZXJlbnQgdGhpbmdzIGluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgdmFsaWRhdG9yLFxuICAgIC8vIHdoZW4gd2Ugc2F5ICd0cnVlJyB3ZSBtZWFuIHRoYXQgaXQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIGVtcHR5XG4gICAgZm9yIChjb25zdCBbLCB2YWx1ZV0gb2YgXy50b1BhaXJzKHRoaXMuX2NvbnN0cmFpbnRzKSkge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnByZXNlbmNlID09PSB0cnVlKSB7XG4gICAgICAgIHZhbHVlLnByZXNlbmNlID0ge1xuICAgICAgICAgIGFsbG93RW1wdHk6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25zdHJhaW50cztcbiAgfVxuXG4gIC8vIG1ldGhvZCByZXF1aXJlZCBieSBNSlNPTldQIGluIG9yZGVyIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IHNob3VsZFxuICAvLyByZXNwb25kIHdpdGggYW4gaW52YWxpZCBzZXNzaW9uIHJlc3BvbnNlXG4gIHNlc3Npb25FeGlzdHMgKHNlc3Npb25JZCkge1xuICAgIGlmICghc2Vzc2lvbklkKSByZXR1cm4gZmFsc2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICByZXR1cm4gc2Vzc2lvbklkID09PSB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8vIG1ldGhvZCByZXF1aXJlZCBieSBNSlNPTldQIGluIG9yZGVyIHRvIGRldGVybWluZSBpZiB0aGUgY29tbWFuZCBzaG91bGRcbiAgLy8gYmUgcHJveGllZCBkaXJlY3RseSB0byB0aGUgZHJpdmVyXG4gIGRyaXZlckZvclNlc3Npb24gKC8qc2Vzc2lvbklkKi8pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxvZ0V4dHJhQ2FwcyAoY2Fwcykge1xuICAgIGxldCBleHRyYUNhcHMgPSBfLmRpZmZlcmVuY2UoXy5rZXlzKGNhcHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5rZXlzKHRoaXMuX2NvbnN0cmFpbnRzKSk7XG4gICAgaWYgKGV4dHJhQ2Fwcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYFRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzIHdlcmUgcHJvdmlkZWQsIGJ1dCBhcmUgbm90IGAgK1xuICAgICAgICAgICAgICAgYHJlY29nbml6ZWQgYnkgQXBwaXVtOmApO1xuICAgICAgZm9yIChjb25zdCBjYXAgb2YgZXh0cmFDYXBzKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYCAgJHtjYXB9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghdGhpcy5zaG91bGRWYWxpZGF0ZUNhcHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZUNhcHMoY2FwcywgdGhpcy5fY29uc3RyYWludHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3cobmV3IGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yKGBUaGUgZGVzaXJlZENhcGFiaWxpdGllcyBvYmplY3Qgd2FzIG5vdCB2YWxpZCBmb3IgdGhlIGAgK1xuICAgICAgICBgZm9sbG93aW5nIHJlYXNvbihzKTogJHtlLm1lc3NhZ2V9YCkpO1xuICAgIH1cblxuICAgIHRoaXMubG9nRXh0cmFDYXBzKGNhcHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc01qc29ud3BQcm90b2NvbCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2wgPT09IFBST1RPQ09MUy5NSlNPTldQO1xuICB9XG5cbiAgaXNXM0NQcm90b2NvbCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0M7XG4gIH1cblxuICBzZXRQcm90b2NvbE1KU09OV1AgKCkge1xuICAgIHRoaXMucHJvdG9jb2wgPSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIHNldFByb3RvY29sVzNDICgpIHtcbiAgICB0aGlzLnByb3RvY29sID0gUFJPVE9DT0xTLlczQztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIHZpYSBpdHMgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIG5hbWUgb2YgZmVhdHVyZS9jb21tYW5kXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cbiAgaXNGZWF0dXJlRW5hYmxlZCAobmFtZSkge1xuICAgIC8vIGlmIHdlIGhhdmUgZXhwbGljaXRseSBkZW5pZWQgdGhpcyBmZWF0dXJlLCByZXR1cm4gZmFsc2UgaW1tZWRpYXRlbHlcbiAgICBpZiAodGhpcy5kZW55SW5zZWN1cmUgJiYgXy5pbmNsdWRlcyh0aGlzLmRlbnlJbnNlY3VyZSwgbmFtZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBzcGVjaWZpY2FsbHkgaGF2ZSBhbGxvd2VkIHRoZSBmZWF0dXJlLCByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzLmFsbG93SW5zZWN1cmUgJiYgXy5pbmNsdWRlcyh0aGlzLmFsbG93SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UsIGlmIHdlJ3ZlIGdsb2JhbGx5IGFsbG93ZWQgaW5zZWN1cmUgZmVhdHVyZXMgYW5kIG5vdCBkZW5pZWRcbiAgICAvLyB0aGlzIG9uZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5yZWxheGVkU2VjdXJpdHlFbmFibGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlbid0IGFsbG93ZWQgYW55dGhpbmcgaW5zZWN1cmUsIHRoZW4gcmVqZWN0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VydCB0aGF0IGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIGFuZCB0aHJvdyBhIGhlbHBmdWwgZXJyb3IgaWYgaXQnc1xuICAgKiBub3RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAgKi9cbiAgZW5zdXJlRmVhdHVyZUVuYWJsZWQgKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMuaXNGZWF0dXJlRW5hYmxlZChuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb3RlbnRpYWxseSBpbnNlY3VyZSBmZWF0dXJlICcke25hbWV9JyBoYXMgbm90IGJlZW4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYGVuYWJsZWQuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgYW5kIGFjY2VwdCBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgdGhlIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMsIHBsZWFzZSBkbyBzbyBieSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHRoZSBkb2N1bWVudGVkIGluc3RydWN0aW9ucyBhdCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtYCArXG4gICAgICAgICAgICAgICAgICAgICAgYC9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3NlY3VyaXR5Lm1kYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyBpcyB0aGUgbWFpbiBjb21tYW5kIGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIuIEl0IHdyYXBzIGNvbW1hbmRcbiAgLy8gZXhlY3V0aW9uIHdpdGggdGltZW91dCBsb2dpYywgY2hlY2tpbmcgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgc2Vzc2lvbixcbiAgLy8gYW5kIGVuc3VyaW5nIHRoYXQgd2UgZXhlY3V0ZSBjb21tYW5kcyBvbmUgYXQgYSB0aW1lLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWRcbiAgLy8gYnkgTUpTT05XUCdzIGV4cHJlc3Mgcm91dGVyLlxuICBhc3luYyBleGVjdXRlQ29tbWFuZCAoY21kLCAuLi5hcmdzKSB7XG4gICAgLy8gZ2V0IHN0YXJ0IHRpbWUgZm9yIHRoaXMgY29tbWFuZCwgYW5kIGxvZyBpbiBzcGVjaWFsIGNhc2VzXG4gICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoY21kID09PSAnY3JlYXRlU2Vzc2lvbicpIHtcbiAgICAgIC8vIElmIGNyZWF0aW5nIGEgc2Vzc2lvbiBkZXRlcm1pbmUgaWYgVzNDIG9yIE1KU09OV1AgcHJvdG9jb2wgd2FzIHJlcXVlc3RlZCBhbmQgcmVtZW1iZXIgdGhlIGNob2ljZVxuICAgICAgdGhpcy5wcm90b2NvbCA9IGRldGVybWluZVByb3RvY29sKGFyZ3MpO1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX0lOSVQpO1xuICAgIH0gZWxzZSBpZiAoY21kID09PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICB0aGlzLmxvZ0V2ZW50KEVWRU5UX1NFU1NJT05fUVVJVF9TVEFSVCk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGFkIGEgY29tbWFuZCB0aW1lciBydW5uaW5nLCBjbGVhciBpdCBub3cgdGhhdCB3ZSdyZSBzdGFydGluZ1xuICAgIC8vIGEgbmV3IGNvbW1hbmQgYW5kIHNvIGRvbid0IHdhbnQgdG8gdGltZSBvdXRcbiAgICB0aGlzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKTtcblxuICAgIGlmICh0aGlzLnNodXRkb3duVW5leHBlY3RlZGx5KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaERyaXZlckVycm9yKCdUaGUgZHJpdmVyIHdhcyB1bmV4cGVjdGVkbHkgc2h1dCBkb3duIScpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdGhpcyBjb21tYW5kLCBpdCBtdXN0IG5vdCBiZSBpbXBsZW1lbnRlZFxuICAgIGlmICghdGhpc1tjbWRdKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBsZXQgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXI7XG4gICAgY29uc3QgY29tbWFuZEV4ZWN1dG9yID0gYXN5bmMgKCkgPT4gYXdhaXQgQi5yYWNlKFtcbiAgICAgIHRoaXNbY21kXSguLi5hcmdzKSxcbiAgICAgIG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIgPSByZWplY3Q7XG4gICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLm9uKE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQsIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyKTtcbiAgICAgIH0pXG4gICAgXSkuZmluYWxseSgoKSA9PiB7XG4gICAgICBpZiAodW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBtZW1vcnkgbGVha3NcbiAgICAgICAgdGhpcy5ldmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIpO1xuICAgICAgICB1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lciA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVzID0gdGhpcy5pc0NvbW1hbmRzUXVldWVFbmFibGVkXG4gICAgICA/IGF3YWl0IHRoaXMuY29tbWFuZHNRdWV1ZUd1YXJkLmFjcXVpcmUoQmFzZURyaXZlci5uYW1lLCBjb21tYW5kRXhlY3V0b3IpXG4gICAgICA6IGF3YWl0IGNvbW1hbmRFeGVjdXRvcigpO1xuXG4gICAgLy8gaWYgd2UgaGF2ZSBzZXQgYSBuZXcgY29tbWFuZCB0aW1lb3V0ICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIHN0YXJ0IGFcbiAgICAvLyB0aW1lciBvbmNlIHdlJ3ZlIGZpbmlzaGVkIGV4ZWN1dGluZyB0aGlzIGNvbW1hbmQuIElmIHdlIGRvbid0IGNsZWFyXG4gICAgLy8gdGhlIHRpbWVyICh3aGljaCBpcyBkb25lIHdoZW4gYSBuZXcgY29tbWFuZCBjb21lcyBpbiksIHdlIHdpbGwgdHJpZ2dlclxuICAgIC8vIGF1dG9tYXRpYyBzZXNzaW9uIGRlbGV0aW9uIGluIHRoaXMub25Db21tYW5kVGltZW91dC4gT2YgY291cnNlIHdlIGRvbid0XG4gICAgLy8gd2FudCB0byB0cmlnZ2VyIHRoZSB0aW1lciB3aGVuIHRoZSB1c2VyIGlzIHNodXR0aW5nIGRvd24gdGhlIHNlc3Npb25cbiAgICAvLyBpbnRlbnRpb25hbGx5XG4gICAgaWYgKHRoaXMuaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCAmJiBjbWQgIT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgIC8vIHJlc2V0dGluZyBleGlzdGluZyB0aW1lb3V0XG4gICAgICB0aGlzLnN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICAvLyBsb2cgdGltaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgY29tbWFuZFxuICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX2V2ZW50SGlzdG9yeS5jb21tYW5kcy5wdXNoKHtjbWQsIHN0YXJ0VGltZSwgZW5kVGltZX0pO1xuICAgIGlmIChjbWQgPT09ICdjcmVhdGVTZXNzaW9uJykge1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX1NUQVJUKTtcbiAgICB9IGVsc2UgaWYgKGNtZCA9PT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX1FVSVRfRE9ORSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VW5leHBlY3RlZFNodXRkb3duIChlcnIgPSBuZXcgZXJyb3JzLk5vU3VjaERyaXZlckVycm9yKCdUaGUgZHJpdmVyIHdhcyB1bmV4cGVjdGVkbHkgc2h1dCBkb3duIScpKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdChPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5ULCBlcnIpOyAvLyBhbGxvdyBvdGhlcnMgdG8gbGlzdGVuIGZvciB0aGlzXG4gICAgdGhpcy5zaHV0ZG93blVuZXhwZWN0ZWRseSA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbih0aGlzLnNlc3Npb25JZCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSAoc3RyYXRlZ3ksIHdlYkNvbnRleHQgPSBmYWxzZSkge1xuICAgIGxldCB2YWxpZFN0cmF0ZWdpZXMgPSB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzO1xuICAgIHRoaXMubG9nLmRlYnVnKGBWYWxpZCBsb2NhdG9yIHN0cmF0ZWdpZXMgZm9yIHRoaXMgcmVxdWVzdDogJHt2YWxpZFN0cmF0ZWdpZXMuam9pbignLCAnKX1gKTtcblxuICAgIGlmICh3ZWJDb250ZXh0KSB7XG4gICAgICB2YWxpZFN0cmF0ZWdpZXMgPSB2YWxpZFN0cmF0ZWdpZXMuY29uY2F0KHRoaXMud2ViTG9jYXRvclN0cmF0ZWdpZXMpO1xuICAgIH1cblxuICAgIGlmICghXy5pbmNsdWRlcyh2YWxpZFN0cmF0ZWdpZXMsIHN0cmF0ZWd5KSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkU2VsZWN0b3JFcnJvcihgTG9jYXRvciBTdHJhdGVneSAnJHtzdHJhdGVneX0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgc2Vzc2lvbmApO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIFJlc3RhcnQgdGhlIHNlc3Npb24gd2l0aCB0aGUgb3JpZ2luYWwgY2FwcyxcbiAgICogcHJlc2VydmluZyB0aGUgdGltZW91dCBjb25maWcuXG4gICAqL1xuICBhc3luYyByZXNldCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1Jlc2V0dGluZyBhcHAgbWlkLXNlc3Npb24nKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnUnVubmluZyBnZW5lcmljIGZ1bGwgcmVzZXQnKTtcblxuICAgIC8vIHByZXNlcnZpbmcgc3RhdGVcbiAgICBsZXQgY3VycmVudENvbmZpZyA9IHt9O1xuICAgIGZvciAobGV0IHByb3BlcnR5IG9mIFsnaW1wbGljaXRXYWl0TXMnLCAnbmV3Q29tbWFuZFRpbWVvdXRNcycsICdzZXNzaW9uSWQnLCAncmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biddKSB7XG4gICAgICBjdXJyZW50Q29uZmlnW3Byb3BlcnR5XSA9IHRoaXNbcHJvcGVydHldO1xuICAgIH1cblxuICAgIC8vIFdlIGFsc28gbmVlZCB0byBwcmVzZXJ2ZSB0aGUgdW5leHBlY3RlZCBzaHV0ZG93biwgYW5kIG1ha2Ugc3VyZSBpdCBpcyBub3QgY2FuY2VsbGVkIGR1cmluZyByZXNldC5cbiAgICB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24gPSAoKSA9PiB7fTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24odGhpcy5zZXNzaW9uSWQpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1Jlc3RhcnRpbmcgYXBwJyk7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVNlc3Npb24odW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMub3JpZ2luYWxDYXBzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gYWx3YXlzIHJlc3RvcmUgc3RhdGUuXG4gICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGN1cnJlbnRDb25maWcpKSB7XG4gICAgICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlICgvKiBzZXNzaW9uSWQgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoLyogc2Vzc2lvbklkICovKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY2FuUHJveHkgKC8qIHNlc3Npb25JZCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgZ2l2ZW4gY29tbWFuZCByb3V0ZSAoZXhwcmVzc2VkIGFzIG1ldGhvZCBhbmQgdXJsKSBzaG91bGQgbm90IGJlXG4gICAqIHByb3hpZWQgYWNjb3JkaW5nIHRvIHRoaXMgZHJpdmVyXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgLSB0aGUgY3VycmVudCBzZXNzaW9uSWQgKGluIGNhc2UgdGhlIGRyaXZlciBydW5zXG4gICAqIG11bHRpcGxlIHNlc3Npb24gaWRzIGFuZCByZXF1aXJlcyBpdCkuIFRoaXMgaXMgbm90IHVzZWQgaW4gdGhpcyBtZXRob2QgYnV0XG4gICAqIHNob3VsZCBiZSBtYWRlIGF2YWlsYWJsZSB0byBvdmVycmlkZGVuIG1ldGhvZHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgLSBIVFRQIG1ldGhvZCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIHVybCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIHs/Kn0gYm9keSAtIHdlYmRyaXZlciByZXF1ZXN0IGJvZHlcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gd2hldGhlciB0aGUgcm91dGUgc2hvdWxkIGJlIGF2b2lkZWRcbiAgICovXG4gIHByb3h5Um91dGVJc0F2b2lkZWQgKHNlc3Npb25JZCwgbWV0aG9kLCB1cmwvKiwgYm9keSovKSB7XG4gICAgZm9yIChsZXQgYXZvaWRTY2hlbWEgb2YgdGhpcy5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShhdm9pZFNjaGVtYSkgfHwgYXZvaWRTY2hlbWEubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJveHkgYXZvaWRhbmNlIG11c3QgYmUgYSBsaXN0IG9mIHBhaXJzJyk7XG4gICAgICB9XG4gICAgICBsZXQgW2F2b2lkTWV0aG9kLCBhdm9pZFBhdGhSZWdleF0gPSBhdm9pZFNjaGVtYTtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhbJ0dFVCcsICdQT1NUJywgJ0RFTEVURSddLCBhdm9pZE1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgcHJveHkgYXZvaWRhbmNlIG1ldGhvZCAnJHthdm9pZE1ldGhvZH0nYCk7XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNSZWdFeHAoYXZvaWRQYXRoUmVnZXgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJveHkgYXZvaWRhbmNlIHBhdGggbXVzdCBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuICAgICAgfVxuICAgICAgbGV0IG5vcm1hbGl6ZWRVcmwgPSB1cmwucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtfLmVzY2FwZVJlZ0V4cCh0aGlzLmJhc2VQYXRoKX1gKSwgJycpO1xuICAgICAgaWYgKGF2b2lkTWV0aG9kID09PSBtZXRob2QgJiYgYXZvaWRQYXRoUmVnZXgudGVzdChub3JtYWxpemVkVXJsKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYWRkTWFuYWdlZERyaXZlciAoZHJpdmVyKSB7XG4gICAgdGhpcy5tYW5hZ2VkRHJpdmVycy5wdXNoKGRyaXZlcik7XG4gIH1cblxuICBnZXRNYW5hZ2VkRHJpdmVycyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFuYWdlZERyaXZlcnM7XG4gIH1cbn1cblxuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgQmFzZURyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xufVxuXG5leHBvcnQgeyBCYXNlRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBCYXNlRHJpdmVyO1xuIl19
|