@appium/base-driver 8.2.2 → 8.2.3
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 +3 -1
- package/build/lib/basedriver/driver.js +4 -4
- package/build/lib/basedriver/helpers.js +137 -81
- package/build/lib/express/express-logging.js +2 -2
- package/build/lib/index.js +5 -3
- package/build/lib/jsonwp-proxy/protocol-converter.js +2 -5
- package/build/lib/jsonwp-proxy/proxy.js +2 -5
- package/build/lib/protocol/errors.js +4 -2
- package/build/lib/protocol/helpers.js +3 -20
- package/build/lib/protocol/protocol.js +9 -19
- package/build/test/basedriver/helpers-specs.js +5 -1
- package/build/test/jsonwp-proxy/proxy-e2e-specs.js +1 -2
- package/build/test/jsonwp-proxy/proxy-specs.js +1 -6
- package/build/test/protocol/protocol-e2e-specs.js +34 -94
- package/lib/basedriver/capabilities.js +3 -0
- package/lib/basedriver/driver.js +4 -4
- package/lib/basedriver/helpers.js +197 -81
- package/lib/express/express-logging.js +1 -1
- package/lib/index.js +4 -2
- package/lib/jsonwp-proxy/protocol-converter.js +1 -5
- package/lib/jsonwp-proxy/proxy.js +1 -3
- package/lib/protocol/errors.js +1 -1
- package/lib/protocol/helpers.js +5 -25
- package/lib/protocol/protocol.js +9 -25
- package/package.json +5 -5
- package/test/basedriver/helpers-specs.js +4 -0
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.Protocol = exports.DELETE_SESSION_COMMAND = exports.CREATE_SESSION_COMMAND = void 0;
|
|
8
|
+
exports.Protocol = exports.GET_STATUS_COMMAND = exports.DELETE_SESSION_COMMAND = exports.CREATE_SESSION_COMMAND = void 0;
|
|
9
9
|
exports.determineProtocol = determineProtocol;
|
|
10
10
|
exports.driverShouldDoJwpProxy = driverShouldDoJwpProxy;
|
|
11
11
|
exports.isSessionCommand = isSessionCommand;
|
|
@@ -35,6 +35,8 @@ const CREATE_SESSION_COMMAND = 'createSession';
|
|
|
35
35
|
exports.CREATE_SESSION_COMMAND = CREATE_SESSION_COMMAND;
|
|
36
36
|
const DELETE_SESSION_COMMAND = 'deleteSession';
|
|
37
37
|
exports.DELETE_SESSION_COMMAND = DELETE_SESSION_COMMAND;
|
|
38
|
+
const GET_STATUS_COMMAND = 'getStatus';
|
|
39
|
+
exports.GET_STATUS_COMMAND = GET_STATUS_COMMAND;
|
|
38
40
|
|
|
39
41
|
class Protocol {}
|
|
40
42
|
|
|
@@ -321,18 +323,7 @@ function buildHandler(app, method, path, spec, driver, isSessCmd) {
|
|
|
321
323
|
_sessionsCache.default.getLogger(req.params.sessionId || newSessionId, currentProtocol).debug(`Encountered internal error running command: ${errMsg}`);
|
|
322
324
|
}
|
|
323
325
|
|
|
324
|
-
|
|
325
|
-
[httpStatus, httpResBody] = (0, _errors.getResponseForW3CError)(actualErr);
|
|
326
|
-
} else if (currentProtocol === _constants.PROTOCOLS.MJSONWP) {
|
|
327
|
-
[httpStatus, httpResBody] = (0, _errors.getResponseForJsonwpError)(actualErr);
|
|
328
|
-
} else {
|
|
329
|
-
let jsonwpRes = (0, _errors.getResponseForJsonwpError)(actualErr);
|
|
330
|
-
let w3cRes = (0, _errors.getResponseForW3CError)(actualErr);
|
|
331
|
-
httpResBody = { ...jsonwpRes[1],
|
|
332
|
-
...w3cRes[1]
|
|
333
|
-
};
|
|
334
|
-
httpStatus = jsonwpRes[0];
|
|
335
|
-
}
|
|
326
|
+
[httpStatus, httpResBody] = (0, _errors.getResponseForW3CError)(actualErr);
|
|
336
327
|
}
|
|
337
328
|
|
|
338
329
|
if (_lodash.default.isString(httpResBody)) {
|
|
@@ -352,7 +343,7 @@ function buildHandler(app, method, path, spec, driver, isSessCmd) {
|
|
|
352
343
|
delete httpResBody.sessionId;
|
|
353
344
|
}
|
|
354
345
|
|
|
355
|
-
httpResBody = (0, _helpers.formatStatus)(httpResBody
|
|
346
|
+
httpResBody = (0, _helpers.formatStatus)(httpResBody);
|
|
356
347
|
res.status(httpStatus).json(httpResBody);
|
|
357
348
|
}
|
|
358
349
|
};
|
|
@@ -367,7 +358,7 @@ function driverShouldDoJwpProxy(driver, req, command) {
|
|
|
367
358
|
return false;
|
|
368
359
|
}
|
|
369
360
|
|
|
370
|
-
if (command ===
|
|
361
|
+
if (command === DELETE_SESSION_COMMAND) {
|
|
371
362
|
return false;
|
|
372
363
|
}
|
|
373
364
|
|
|
@@ -382,12 +373,11 @@ async function doJwpProxy(driver, req, res) {
|
|
|
382
373
|
_sessionsCache.default.getLogger(req.params.sessionId, extractProtocol(driver, req.params.sessionId)).info('Driver proxy active, passing request on via HTTP proxy');
|
|
383
374
|
|
|
384
375
|
if (!driver.canProxy(req.params.sessionId)) {
|
|
385
|
-
throw new Error('Trying to proxy to a
|
|
376
|
+
throw new Error('Trying to proxy to a server but the driver is unable to proxy');
|
|
386
377
|
}
|
|
387
378
|
|
|
388
379
|
try {
|
|
389
|
-
|
|
390
|
-
if (proxiedRes && proxiedRes.error) throw proxiedRes.error;
|
|
380
|
+
await driver.executeCommand('proxyReqRes', req, res, req.params.sessionId);
|
|
391
381
|
} catch (err) {
|
|
392
382
|
if ((0, _errors.isErrorType)(err, _errors.errors.ProxyRequestError)) {
|
|
393
383
|
throw err;
|
|
@@ -398,4 +388,4 @@ async function doJwpProxy(driver, req, res) {
|
|
|
398
388
|
}require('source-map-support').install();
|
|
399
389
|
|
|
400
390
|
|
|
401
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wcm90b2NvbC9wcm90b2NvbC5qcyJdLCJuYW1lcyI6WyJDUkVBVEVfU0VTU0lPTl9DT01NQU5EIiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsIlByb3RvY29sIiwiZGV0ZXJtaW5lUHJvdG9jb2wiLCJkZXNpcmVkQ2FwYWJpbGl0aWVzIiwicmVxdWlyZWRDYXBhYmlsaXRpZXMiLCJjYXBhYmlsaXRpZXMiLCJfIiwiaXNQbGFpbk9iamVjdCIsIlBST1RPQ09MUyIsIlczQyIsIk1KU09OV1AiLCJleHRyYWN0UHJvdG9jb2wiLCJkcml2ZXIiLCJzZXNzaW9uSWQiLCJkc3REcml2ZXIiLCJpc0Z1bmN0aW9uIiwiZHJpdmVyRm9yU2Vzc2lvbiIsInByb3RvY29sIiwiU0VTU0lPTlNfQ0FDSEUiLCJnZXRQcm90b2NvbCIsImlzU2Vzc2lvbkNvbW1hbmQiLCJjb21tYW5kIiwiaW5jbHVkZXMiLCJOT19TRVNTSU9OX0lEX0NPTU1BTkRTIiwid3JhcFBhcmFtcyIsInBhcmFtU2V0cyIsImpzb25PYmoiLCJyZXMiLCJpc0FycmF5IiwiaXNPYmplY3QiLCJ3cmFwIiwidW53cmFwUGFyYW1zIiwidW53cmFwIiwiY2hlY2tQYXJhbXMiLCJyZXF1aXJlZFBhcmFtcyIsIm9wdGlvbmFsUGFyYW1zIiwicmVjZWl2ZWRQYXJhbXMiLCJrZXlzIiwicmVxdWlyZWQiLCJmaXJzdCIsIm9wdGlvbmFsIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiZXJyb3JzIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwibGVuZ3RoIiwiaW5kZXhPZiIsInB1c2giLCJwYXJhbXMiLCJkaWZmZXJlbmNlIiwibWFrZUFyZ3MiLCJyZXF1ZXN0UGFyYW1zIiwicGF5bG9hZFBhcmFtcyIsInVybFBhcmFtcyIsInJldmVyc2UiLCJ3aXRob3V0IiwiYXJncyIsImZsYXR0ZW4iLCJtYXAiLCJwIiwiY29uY2F0IiwidSIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlc3Npb25FeGlzdHMiLCJFcnJvciIsImV4ZWN1dGVDb21tYW5kIiwiZXhlY3V0ZSIsImFkZFJvdXRlcyIsImFwcCIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJleHRyYU1ldGhvZE1hcCIsImFsbE1ldGhvZHMiLCJNRVRIT0RfTUFQIiwicGF0aCIsIm1ldGhvZHMiLCJ0b1BhaXJzIiwibWV0aG9kIiwic3BlYyIsImJ1aWxkSGFuZGxlciIsImlzU2Vzc0NtZCIsImFzeW5jSGFuZGxlciIsInJlcSIsImJvZHkiLCJodHRwUmVzQm9keSIsImh0dHBTdGF0dXMiLCJuZXdTZXNzaW9uSWQiLCJjdXJyZW50UHJvdG9jb2wiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImRpZFBsdWdpbk92ZXJyaWRlUHJveHkiLCJuZXZlclByb3h5IiwiZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSIsInBsdWdpbnNUb0hhbmRsZUNtZCIsImRvSndwUHJveHkiLCJnZXRMb2dnZXIiLCJkZWJ1ZyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJkcml2ZXJSZXMiLCJ2YWxpZGF0b3JzIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidHJ1bmNhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiTUFYX0xPR19CT0RZX0xFTkdUSCIsInJlcUZvclByb3h5IiwiaGFzIiwiZXJyb3IiLCJ2YWx1ZSIsInB1dFNlc3Npb24iLCJ1dGlsIiwiaGFzVmFsdWUiLCJzdGF0dXMiLCJpc05hTiIsInBhcnNlSW50Iiwic3RhY2t0cmFjZSIsInJlc2V0TG9nZ2VyIiwiZXJyIiwiYWN0dWFsRXJyIiwiZXJyTXNnIiwic3RhY2siLCJQcm94eVJlcXVlc3RFcnJvciIsImdldEFjdHVhbEVycm9yIiwianNvbndwUmVzIiwidzNjUmVzIiwiaXNTdHJpbmciLCJzZW5kIiwianNvbiIsInRvTG93ZXJDYXNlIiwiQiIsInJlc29sdmUiLCJkb25lIiwicHJveHlBY3RpdmUiLCJwcm94eVJvdXRlSXNBdm9pZGVkIiwib3JpZ2luYWxVcmwiLCJpbmZvIiwiY2FuUHJveHkiLCJwcm94aWVkUmVzIl0sIm1hcHBpbmdz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SUFBSW1ELEtBQUosQ0FBVSxrRUFBVixDQUFOO0FBQ0Q7O0FBQ0QsTUFBSTtBQUNGLFVBQU15RSxVQUFVLEdBQUcsTUFBTTdILE1BQU0sQ0FBQ3FELGNBQVAsQ0FBc0IsYUFBdEIsRUFBcUNpQixHQUFyQyxFQUEwQ3ZELEdBQTFDLEVBQStDdUQsR0FBRyxDQUFDbEMsTUFBSixDQUFXbkMsU0FBMUQsQ0FBekI7QUFDQSxRQUFJNEgsVUFBVSxJQUFJQSxVQUFVLENBQUM5QixLQUE3QixFQUFvQyxNQUFNOEIsVUFBVSxDQUFDOUIsS0FBakI7QUFDckMsR0FIRCxDQUdFLE9BQU9VLEdBQVAsRUFBWTtBQUNaLFFBQUkseUJBQVlBLEdBQVosRUFBaUIxRSxlQUFPOEUsaUJBQXhCLENBQUosRUFBZ0Q7QUFDOUMsWUFBTUosR0FBTjtBQUNELEtBRkQsTUFFTztBQUNMLFlBQU0sSUFBSXJELEtBQUosQ0FBVyxpQ0FBZ0NxRCxHQUFHLENBQUMzRSxPQUFRLEVBQXZELENBQU47QUFDRDtBQUNGO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyB2YWxpZGF0b3JzIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7XG4gIGVycm9ycywgaXNFcnJvclR5cGUsIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IsIGdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IsXG4gIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLCBlcnJvckZyb21XM0NKc29uQ29kZSxcbn0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgTUVUSE9EX01BUCwgTk9fU0VTU0lPTl9JRF9DT01NQU5EUyB9IGZyb20gJy4vcm91dGVzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIGZvcm1hdFJlc3BvbnNlVmFsdWUsIGZvcm1hdFN0YXR1cyxcbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IE1BWF9MT0dfQk9EWV9MRU5HVEgsIFBST1RPQ09MUywgREVGQVVMVF9CQVNFX1BBVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IFNFU1NJT05TX0NBQ0hFIGZyb20gJy4vc2Vzc2lvbnMtY2FjaGUnO1xuXG5cbmNvbnN0IENSRUFURV9TRVNTSU9OX0NPTU1BTkQgPSAnY3JlYXRlU2Vzc2lvbic7XG5jb25zdCBERUxFVEVfU0VTU0lPTl9DT01NQU5EID0gJ2RlbGV0ZVNlc3Npb24nO1xuXG5jbGFzcyBQcm90b2NvbCB7fVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVQcm90b2NvbCAoZGVzaXJlZENhcGFiaWxpdGllcywgcmVxdWlyZWRDYXBhYmlsaXRpZXMsIGNhcGFiaWxpdGllcykge1xuICByZXR1cm4gXy5pc1BsYWluT2JqZWN0KGNhcGFiaWxpdGllcykgP1xuICAgIFBST1RPQ09MUy5XM0MgOlxuICAgIFBST1RPQ09MUy5NSlNPTldQO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2wgKGRyaXZlciwgc2Vzc2lvbklkID0gbnVsbCkge1xuICBjb25zdCBkc3REcml2ZXIgPSBfLmlzRnVuY3Rpb24oZHJpdmVyLmRyaXZlckZvclNlc3Npb24pXG4gICAgPyBkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgOiBkcml2ZXI7XG4gIGlmIChkc3REcml2ZXIgPT09IGRyaXZlcikge1xuICAgIC8vIFNob3J0Y2lyY3VpdCBpZiB0aGUgZHJpdmVyIGluc3RhbmNlIGlzIG5vdCBhbiB1bWJyZWxsYSBkcml2ZXJcbiAgICAvLyBvciBpdCBpcyBGYWtlIGRyaXZlciBpbnN0YW5jZSwgd2hlcmUgYGRyaXZlci5kcml2ZXJGb3JTZXNzaW9uYFxuICAgIC8vIGFsd2F5cyByZXR1cm5zIHNlbGYgaW5zdGFuY2VcbiAgICByZXR1cm4gZHJpdmVyLnByb3RvY29sO1xuICB9XG5cbiAgLy8gRXh0cmFjdCB0aGUgcHJvdG9jb2wgZm9yIHRoZSBjdXJyZW50IHNlc3Npb24gaWYgdGhlIGdpdmVuIGRyaXZlciBpcyB0aGUgdW1icmVsbGEgb25lXG4gIHJldHVybiBkc3REcml2ZXIgPyBkc3REcml2ZXIucHJvdG9jb2wgOiBTRVNTSU9OU19DQUNIRS5nZXRQcm90b2NvbChzZXNzaW9uSWQpO1xufVxuXG5mdW5jdGlvbiBpc1Nlc3Npb25Db21tYW5kIChjb21tYW5kKSB7XG4gIHJldHVybiAhXy5pbmNsdWRlcyhOT19TRVNTSU9OX0lEX0NPTU1BTkRTLCBjb21tYW5kKTtcbn1cblxuZnVuY3Rpb24gd3JhcFBhcmFtcyAocGFyYW1TZXRzLCBqc29uT2JqKSB7XG4gIC8qIFRoZXJlIGFyZSBjb21tYW5kcyBsaWtlIHBlcmZvcm1Ub3VjaCB3aGljaCB0YWtlIGEgc2luZ2xlIHBhcmFtZXRlciAocHJpbWl0aXZlIHR5cGUgb3IgYXJyYXkpLlxuICAgKiBTb21lIGRyaXZlcnMgY2hvb3NlIHRvIHBhc3MgdGhpcyBwYXJhbWV0ZXIgYXMgYSB2YWx1ZSAoZWcuIFthY3Rpb24xLCBhY3Rpb24yLi4uXSkgd2hpbGUgb3RoZXJzIHRvXG4gICAqIHdyYXAgaXQgd2l0aGluIGFuIG9iamVjdChlZycge2dlc3R1cmU6ICBbYWN0aW9uMSwgYWN0aW9uMi4uLl19KSwgd2hpY2ggbWFrZXMgaXQgaGFyZCB0byB2YWxpZGF0ZS5cbiAgICogVGhlIHdyYXAgb3B0aW9uIGluIHRoZSBzcGVjIGVuZm9yY2Ugd3JhcHBpbmcgYmVmb3JlIHZhbGlkYXRpb24sIHNvIHRoYXQgYWxsIHBhcmFtcyBhcmUgd3JhcHBlZCBhdFxuICAgKiB0aGUgdGltZSB0aGV5IGFyZSB2YWxpZGF0ZWQgYW5kIGxhdGVyIHBhc3NlZCB0byB0aGUgY29tbWFuZHMuXG4gICAqL1xuICBsZXQgcmVzID0ganNvbk9iajtcbiAgaWYgKF8uaXNBcnJheShqc29uT2JqKSB8fCAhXy5pc09iamVjdChqc29uT2JqKSkge1xuICAgIHJlcyA9IHt9O1xuICAgIHJlc1twYXJhbVNldHMud3JhcF0gPSBqc29uT2JqO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIHVud3JhcFBhcmFtcyAocGFyYW1TZXRzLCBqc29uT2JqKSB7XG4gIC8qIFRoZXJlIGFyZSBjb21tYW5kcyBsaWtlIHNldE5ldHdvcmtDb25uZWN0aW9uIHdoaWNoIHNlbmQgcGFyYW1ldGVycyB3cmFwcGVkIGluc2lkZSBhIGtleSBzdWNoIGFzXG4gICAqIFwicGFyYW1ldGVyc1wiLiBUaGlzIGZ1bmN0aW9uIHVud3JhcHMgdGhlbSAoZWcuIHtcInBhcmFtZXRlcnNcIjoge1widHlwZVwiOiAxfX0gYmVjb21lcyB7XCJ0eXBlXCI6IDF9KS5cbiAgICovXG4gIGxldCByZXMgPSBqc29uT2JqO1xuICBpZiAoXy5pc09iamVjdChqc29uT2JqKSkge1xuICAgIC8vIHNvbWUgY2xpZW50cywgbGlrZSBydWJ5LCBkb24ndCB3cmFwXG4gICAgaWYgKGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF0pIHtcbiAgICAgIHJlcyA9IGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyYW1zIChwYXJhbVNldHMsIGpzb25PYmosIHByb3RvY29sKSB7XG4gIGxldCByZXF1aXJlZFBhcmFtcyA9IFtdO1xuICBsZXQgb3B0aW9uYWxQYXJhbXMgPSBbXTtcbiAgbGV0IHJlY2VpdmVkUGFyYW1zID0gXy5rZXlzKGpzb25PYmopO1xuXG4gIGlmIChwYXJhbVNldHMpIHtcbiAgICBpZiAocGFyYW1TZXRzLnJlcXVpcmVkKSB7XG4gICAgICAvLyB3ZSBtaWdodCBoYXZlIGFuIGFycmF5IG9mIHBhcmFtZXRlcnMsXG4gICAgICAvLyBvciBhbiBhcnJheSBvZiBhcnJheXMgb2YgcGFyYW1ldGVycywgc28gc3RhbmRhcmRpemVcbiAgICAgIGlmICghXy5pc0FycmF5KF8uZmlyc3QocGFyYW1TZXRzLnJlcXVpcmVkKSkpIHtcbiAgICAgICAgcmVxdWlyZWRQYXJhbXMgPSBbcGFyYW1TZXRzLnJlcXVpcmVkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVpcmVkUGFyYW1zID0gcGFyYW1TZXRzLnJlcXVpcmVkO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSBqdXN0IGFuIGFycmF5XG4gICAgaWYgKHBhcmFtU2V0cy5vcHRpb25hbCkge1xuICAgICAgb3B0aW9uYWxQYXJhbXMgPSBwYXJhbVNldHMub3B0aW9uYWw7XG4gICAgfVxuXG4gICAgLy8gSWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgYXMgdGhlICd2YWxpZGF0ZScga2V5LCBpdCB3aWxsIGhlcmUgYmUgY2FsbGVkIHdpdGhcbiAgICAvLyBqc29uT2JqIGFzIHRoZSBwYXJhbS4gSWYgaXQgcmV0dXJucyBzb21ldGhpbmcgZmFsc3ksIHZlcmlmaWNhdGlvbiB3aWxsIGJlXG4gICAgLy8gY29uc2lkZXJlZCB0byBoYXZlIHBhc3NlZC4gSWYgaXQgcmV0dXJucyBzb21ldGhpbmcgZWxzZSwgdGhhdCB3aWxsIGJlIHRoZVxuICAgIC8vIGFyZ3VtZW50IHRvIGFuIGVycm9yIHdoaWNoIGlzIHRocm93biB0byB0aGUgdXNlclxuICAgIGlmIChwYXJhbVNldHMudmFsaWRhdGUpIHtcbiAgICAgIGxldCBtZXNzYWdlID0gcGFyYW1TZXRzLnZhbGlkYXRlKGpzb25PYmosIHByb3RvY29sKTtcbiAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKG1lc3NhZ2UsIGpzb25PYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHdlIGhhdmUgbm8gcmVxdWlyZWQgcGFyYW1ldGVycywgYWxsIGlzIHdlbGxcbiAgaWYgKHJlcXVpcmVkUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHNvbWUgY2xpZW50cyBwYXNzIGluIHRoZSBzZXNzaW9uIGlkIGluIHRoZSBwYXJhbXNcbiAgaWYgKG9wdGlvbmFsUGFyYW1zLmluZGV4T2YoJ3Nlc3Npb25JZCcpID09PSAtMSkge1xuICAgIG9wdGlvbmFsUGFyYW1zLnB1c2goJ3Nlc3Npb25JZCcpO1xuICB9XG5cbiAgLy8gc29tZSBjbGllbnRzIHBhc3MgaW4gYW4gZWxlbWVudCBpZCBpbiB0aGUgcGFyYW1zXG4gIGlmIChvcHRpb25hbFBhcmFtcy5pbmRleE9mKCdpZCcpID09PSAtMSkge1xuICAgIG9wdGlvbmFsUGFyYW1zLnB1c2goJ2lkJyk7XG4gIH1cblxuICAvLyBnbyB0aHJvdWdoIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFuZCBjaGVjayBhZ2FpbnN0IG91ciBhcmd1bWVudHNcbiAgZm9yIChsZXQgcGFyYW1zIG9mIHJlcXVpcmVkUGFyYW1zKSB7XG4gICAgaWYgKF8uZGlmZmVyZW5jZShyZWNlaXZlZFBhcmFtcywgcGFyYW1zLCBvcHRpb25hbFBhcmFtcykubGVuZ3RoID09PSAwICYmXG4gICAgICAgIF8uZGlmZmVyZW5jZShwYXJhbXMsIHJlY2VpdmVkUGFyYW1zKS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIHdlIGhhdmUgYSBzZXQgb2YgcGFyYW1ldGVycyB0aGF0IGlzIGNvcnJlY3RcbiAgICAgIC8vIHNvIHNob3J0LWNpcmN1aXRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IGVycm9ycy5CYWRQYXJhbWV0ZXJzRXJyb3IocGFyYW1TZXRzLCByZWNlaXZlZFBhcmFtcyk7XG59XG5cbi8qXG4gKiBUaGlzIG1ldGhvZCB0YWtlcyAzIHBpZWNlcyBvZiBkYXRhOiByZXF1ZXN0IHBhcmFtZXRlcnMgKCdyZXF1ZXN0UGFyYW1zJyksXG4gKiBhIHJlcXVlc3QgSlNPTiBib2R5ICgnanNvbk9iaicpLCBhbmQgJ3BheWxvYWRQYXJhbXMnLCB3aGljaCBpcyB0aGUgc2VjdGlvblxuICogZnJvbSB0aGUgcm91dGUgZGVmaW5pdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIGVuZHBvaW50IHdoaWNoIGhhcyBpbnN0cnVjdGlvbnNcbiAqIG9uIGhhbmRsaW5nIHBhcmFtZXRlcnMuIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGxcbiAqIGJlIGFwcGxpZWQgdG8gYSBjb21tYW5kLlxuICovXG5mdW5jdGlvbiBtYWtlQXJncyAocmVxdWVzdFBhcmFtcywganNvbk9iaiwgcGF5bG9hZFBhcmFtcywgcHJvdG9jb2wpIHtcbiAgLy8gV2Ugd2FudCB0byBwYXNzIHRoZSBcInVybFwiIHBhcmFtZXRlcnMgdG8gdGhlIGNvbW1hbmRzIGluIHJldmVyc2Ugb3JkZXJcbiAgLy8gc2luY2UgdGhlIGNvbW1hbmQgd2lsbCBzb21ldGltZXMgd2FudCB0byBpZ25vcmUsIHNheSwgdGhlIHNlc3Npb25JZC5cbiAgLy8gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBwdXR0aW5nIHNlc3Npb25JZCBsYXN0LCB3aGljaCBtZWFucyBpbiBKUyB3ZSBjYW5cbiAgLy8gb21pdCBpdCBmcm9tIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaWYgd2UncmUgbm90IGdvaW5nIHRvIHVzZSBpdC5cbiAgbGV0IHVybFBhcmFtcyA9IF8ua2V5cyhyZXF1ZXN0UGFyYW1zKS5yZXZlcnNlKCk7XG5cbiAgLy8gSW4gdGhlIHNpbXBsZSBjYXNlLCB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBhcmUgYSBiYXNpYyBhcnJheSBpblxuICAvLyBwYXlsb2FkUGFyYW1zLnJlcXVpcmVkLCBzbyBzdGFydCB0aGVyZS4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZVxuICAvLyBtdWx0aXBsZSBvcHRpb25hbCBzZXRzIG9mIHJlcXVpcmVkIHBhcmFtcywgdGhvdWdoLCBzbyBoYW5kbGUgdGhhdCBjYXNlXG4gIC8vIHRvby5cbiAgbGV0IHJlcXVpcmVkUGFyYW1zID0gcGF5bG9hZFBhcmFtcy5yZXF1aXJlZDtcbiAgaWYgKF8uaXNBcnJheShfLmZpcnN0KHBheWxvYWRQYXJhbXMucmVxdWlyZWQpKSkge1xuICAgIC8vIElmIHRoZXJlIGFyZSBvcHRpb25hbCBzZXRzIG9mIHJlcXVpcmVkIHBhcmFtcywgdGhlbiB3ZSB3aWxsIGhhdmUgYW5cbiAgICAvLyBhcnJheSBvZiBhcnJheXMgaW4gcGF5bG9hZFBhcmFtcy5yZXF1aXJlZCwgc28gbG9vcCB0aHJvdWdoIGVhY2ggc2V0IGFuZFxuICAgIC8vIHBpY2sgdGhlIG9uZSB0aGF0IG1hdGNoZXMgd2hpY2ggSlNPTiBwYXJhbXMgd2VyZSBhY3R1YWxseSBzZW50LiBXZSd2ZVxuICAgIC8vIGFscmVhZHkgYmVlbiB0aHJvdWdoIHZhbGlkYXRpb24gc28gd2UncmUgZ3VhcmFudGVlZCB0byBmaW5kIGEgbWF0Y2guXG4gICAgbGV0IGtleXMgPSBfLmtleXMoanNvbk9iaik7XG4gICAgZm9yIChsZXQgcGFyYW1zIG9mIHBheWxvYWRQYXJhbXMucmVxdWlyZWQpIHtcbiAgICAgIGlmIChfLndpdGhvdXQocGFyYW1zLCAuLi5rZXlzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVxdWlyZWRQYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE5vdyB3ZSBjb25zdHJ1Y3Qgb3VyIGxpc3Qgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kXG4gIGxldCBhcmdzO1xuICBpZiAoXy5pc0Z1bmN0aW9uKHBheWxvYWRQYXJhbXMubWFrZUFyZ3MpKSB7XG4gICAgLy8gSW4gdGhlIHJvdXRlIHNwZWMsIGEgcGFydGljdWxhciByb3V0ZSBtaWdodCBkZWZpbmUgYSAnbWFrZUFyZ3MnIGZ1bmN0aW9uXG4gICAgLy8gaWYgaXQgd2FudHMgZnVsbCBjb250cm9sIG92ZXIgaG93IHRvIHR1cm4gSlNPTiBwYXJhbWV0ZXJzIGludG8gY29tbWFuZFxuICAgIC8vIGFyZ3VtZW50cy4gU28gd2UgcGFzcyBpdCB0aGUgSlNPTiBwYXJhbWV0ZXJzIGFuZCBpdCByZXR1cm5zIGFuIGFycmF5XG4gICAgLy8gd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBoYW5kbGluZyBjb21tYW5kLiBGb3IgZXhhbXBsZSBpZiBpdCByZXR1cm5zXG4gICAgLy8gWzEsIDIsIDNdLCB3ZSB3aWxsIGNhbGwgYGNvbW1hbmQoMSwgMiwgMywgLi4uKWAgKHVybCBwYXJhbXMgYXJlIHNlcGFyYXRlXG4gICAgLy8gZnJvbSBKU09OIHBhcmFtcyBhbmQgZ2V0IGNvbmNhdGVuYXRlZCBiZWxvdykuXG4gICAgYXJncyA9IHBheWxvYWRQYXJhbXMubWFrZUFyZ3MoanNvbk9iaiwgcHJvdG9jb2wpO1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSwgY29sbGVjdCBhbGwgdGhlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBwYXJhbXMgYW5kIGZsYXR0ZW4gdGhlbVxuICAgIC8vIGludG8gYW4gYXJndW1lbnQgYXJyYXlcbiAgICBhcmdzID0gXy5mbGF0dGVuKHJlcXVpcmVkUGFyYW1zKS5tYXAoKHApID0+IGpzb25PYmpbcF0pO1xuICAgIGlmIChwYXlsb2FkUGFyYW1zLm9wdGlvbmFsKSB7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoXy5mbGF0dGVuKHBheWxvYWRQYXJhbXMub3B0aW9uYWwpLm1hcCgocCkgPT4ganNvbk9ialtwXSkpO1xuICAgIH1cbiAgfVxuICAvLyBGaW5hbGx5LCBnZXQgb3VyIHVybCBwYXJhbXMgKHNlc3Npb24gaWQsIGVsZW1lbnQgaWQsIGV0Yy4uLikgb24gdGhlIGVuZCBvZlxuICAvLyB0aGUgbGlzdFxuICBhcmdzID0gYXJncy5jb25jYXQodXJsUGFyYW1zLm1hcCgodSkgPT4gcmVxdWVzdFBhcmFtc1t1XSkpO1xuICByZXR1cm4gYXJncztcbn1cblxuZnVuY3Rpb24gcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIChkcml2ZXIpIHtcbiAgaWYgKCFkcml2ZXIuc2Vzc2lvbkV4aXN0cykge1xuICAgIHRocm93IG5ldyBFcnJvcignRHJpdmVycyB1c2VkIHdpdGggTUpTT05XUCBtdXN0IGltcGxlbWVudCBgc2Vzc2lvbkV4aXN0c2AnKTtcbiAgfVxuXG4gIGlmICghKGRyaXZlci5leGVjdXRlQ29tbWFuZCB8fCBkcml2ZXIuZXhlY3V0ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RyaXZlcnMgdXNlZCB3aXRoIE1KU09OV1AgbXVzdCBpbXBsZW1lbnQgYGV4ZWN1dGVDb21tYW5kYCBvciBgZXhlY3V0ZWAnKTtcbiAgfVxuXG4gIC8vIHJldHVybiBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYWRkIGFsbCB0aGUgcm91dGVzIHRvIHRoZSBkcml2ZXIuIEhlcmUgZXh0cmFNZXRob2RzIG1pZ2h0IGJlXG4gIC8vIHBhc3NlZCBpbiBhcyBkZWZpbmVkIGJ5IEFwcGl1bSBwbHVnaW5zLCBzbyB3ZSBuZWVkIHRvIGFkZCB0aG9zZSB0byB0aGUgZGVmYXVsdCBsaXN0XG4gIHJldHVybiBmdW5jdGlvbiBhZGRSb3V0ZXMgKGFwcCwge2Jhc2VQYXRoID0gREVGQVVMVF9CQVNFX1BBVEgsIGV4dHJhTWV0aG9kTWFwID0ge319KSB7XG4gICAgLy8gc3RvcmUgYmFzZVBhdGggb24gdGhlIGRyaXZlciBpbnN0YW5jZSBzbyBpdCBjYW4gdXNlIGl0IGlmIG5lY2Vzc2FyeVxuICAgIC8vIGZvciBleGFtcGxlIGluIGRldGVybWluaW5nIHByb3h5IGF2b2lkYW5jZVxuICAgIGRyaXZlci5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuXG4gICAgY29uc3QgYWxsTWV0aG9kcyA9IHsuLi5NRVRIT0RfTUFQLCAuLi5leHRyYU1ldGhvZE1hcH07XG5cbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBtZXRob2RzXSBvZiBfLnRvUGFpcnMoYWxsTWV0aG9kcykpIHtcbiAgICAgIGZvciAoY29uc3QgW21ldGhvZCwgc3BlY10gb2YgXy50b1BhaXJzKG1ldGhvZHMpKSB7XG4gICAgICAgIC8vIHNldCB1cCB0aGUgZXhwcmVzcyByb3V0ZSBoYW5kbGVyXG4gICAgICAgIGJ1aWxkSGFuZGxlcihhcHAsIG1ldGhvZCwgYCR7YmFzZVBhdGh9JHtwYXRofWAsIHNwZWMsIGRyaXZlciwgaXNTZXNzaW9uQ29tbWFuZChzcGVjLmNvbW1hbmQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkSGFuZGxlciAoYXBwLCBtZXRob2QsIHBhdGgsIHNwZWMsIGRyaXZlciwgaXNTZXNzQ21kKSB7XG4gIGxldCBhc3luY0hhbmRsZXIgPSBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBsZXQganNvbk9iaiA9IHJlcS5ib2R5O1xuICAgIGxldCBodHRwUmVzQm9keSA9IHt9O1xuICAgIGxldCBodHRwU3RhdHVzID0gMjAwO1xuICAgIGxldCBuZXdTZXNzaW9uSWQ7XG4gICAgbGV0IGN1cnJlbnRQcm90b2NvbCA9IGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBpZiB0aGlzIGlzIGEgc2Vzc2lvbiBjb21tYW5kIGJ1dCB3ZSBkb24ndCBoYXZlIGEgc2Vzc2lvbixcbiAgICAgIC8vIGVycm9yIG91dCBlYXJseSAoZXNwZWNpYWxseSBiZWZvcmUgcHJveHlpbmcpXG4gICAgICBpZiAoaXNTZXNzQ21kICYmICFkcml2ZXIuc2Vzc2lvbkV4aXN0cyhyZXEucGFyYW1zLnNlc3Npb25JZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcigpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgZHJpdmVyIGlzIGN1cnJlbnRseSBwcm94eWluZyBjb21tYW5kcyB0byBhbm90aGVyIEpTT05XUCBzZXJ2ZXIsIGJ5cGFzcyBhbGwgb3VyXG4gICAgICAvLyBjaGVja3MgYW5kIGFzc3VtZSB0aGUgdXBzdHJlYW0gc2VydmVyIGtub3dzIHdoYXQgaXQncyBkb2luZy4gQnV0IGtlZXAgdGhpcyBpbiB0aGVcbiAgICAgIC8vIHRyeS9jYXRjaCBibG9jayBzbyBpZiBwcm94eWluZyBpdHNlbGYgZmFpbHMsIHdlIGdpdmUgYSBtZXNzYWdlIHRvIHRoZSBjbGllbnQuIE9mIGNvdXJzZSB3ZVxuICAgICAgLy8gb25seSB3YW50IHRvIGRvIHRoZXNlIHdoZW4gd2UgaGF2ZSBhIHNlc3Npb24gY29tbWFuZDsgdGhlIEFwcGl1bSBkcml2ZXIgbXVzdCBiZVxuICAgICAgLy8gcmVzcG9uc2libGUgZm9yIHN0YXJ0L3N0b3Agc2Vzc2lvbiwgZXRjLi4uIFdlIGFsc28gYWxsb3cgdGhlIGNvbW1hbmQgc3BlYyB0byBkZWNsYXJlIHRoYXRcbiAgICAgIC8vIHRoaXMgY29tbWFuZCBzaG91bGQgbmV2ZXIgYmUgcHJveGllZCAod2hpY2ggaXMgdXNlZnVsIGZvciBwbHVnaW4gZGV2ZWxvcGVycyB3aG8gYWRkXG4gICAgICAvLyBjb21tYW5kcyBhbmQgZ2VuZXJhbGx5IHdvdWxkIG5vdCB3YW50IHRoYXQgY29tbWFuZCB0byBiZSBwcm94aWVkIGluc3RlYWQgb2YgaGFuZGxlZCBieSB0aGVcbiAgICAgIC8vIHBsdWdpbilcbiAgICAgIGxldCBkaWRQbHVnaW5PdmVycmlkZVByb3h5ID0gZmFsc2U7XG4gICAgICBpZiAoaXNTZXNzQ21kICYmICFzcGVjLm5ldmVyUHJveHkgJiYgZHJpdmVyU2hvdWxkRG9Kd3BQcm94eShkcml2ZXIsIHJlcSwgc3BlYy5jb21tYW5kKSkge1xuICAgICAgICBpZiAoIWRyaXZlci5wbHVnaW5zVG9IYW5kbGVDbWQgfHxcbiAgICAgICAgICAgIGRyaXZlci5wbHVnaW5zVG9IYW5kbGVDbWQoc3BlYy5jb21tYW5kLCByZXEucGFyYW1zLnNlc3Npb25JZCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYXdhaXQgZG9Kd3BQcm94eShkcml2ZXIsIHJlcSwgcmVzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgU0VTU0lPTlNfQ0FDSEUuZ2V0TG9nZ2VyKHJlcS5wYXJhbXMuc2Vzc2lvbklkLCBjdXJyZW50UHJvdG9jb2wpLmRlYnVnKGBXb3VsZCBoYXZlIHByb3hpZWQgYCArXG4gICAgICAgICAgYGNvbW1hbmQgZGlyZWN0bHksIGJ1dCBhIHBsdWdpbiBleGlzdHMgd2hpY2ggbWlnaHQgcmVxdWlyZSBpdHMgdmFsdWUsIHNvIHdpbGwgbGV0IGAgK1xuICAgICAgICAgIGBpdHMgdmFsdWUgYmUgY29sbGVjdGVkIGludGVybmFsbHkgYW5kIG1hZGUgcGFydCBvZiBwbHVnaW4gY2hhaW5gKTtcbiAgICAgICAgZGlkUGx1Z2luT3ZlcnJpZGVQcm94eSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGEgY29tbWFuZCBpcyBub3QgaW4gb3VyIG1ldGhvZCBtYXAsIGl0J3MgYmVjYXVzZSB3ZVxuICAgICAgLy8gaGF2ZSBubyBwbGFucyB0byBldmVyIGltcGxlbWVudCBpdFxuICAgICAgaWYgKCFzcGVjLmNvbW1hbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHdyYXAgcGFyYW1zIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHNwZWMucGF5bG9hZFBhcmFtcyAmJiBzcGVjLnBheWxvYWRQYXJhbXMud3JhcCkge1xuICAgICAgICBqc29uT2JqID0gd3JhcFBhcmFtcyhzcGVjLnBheWxvYWRQYXJhbXMsIGpzb25PYmopO1xuICAgICAgfVxuXG4gICAgICAvLyB1bndyYXAgcGFyYW1zIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHNwZWMucGF5bG9hZFBhcmFtcyAmJiBzcGVjLnBheWxvYWRQYXJhbXMudW53cmFwKSB7XG4gICAgICAgIGpzb25PYmogPSB1bndyYXBQYXJhbXMoc3BlYy5wYXlsb2FkUGFyYW1zLCBqc29uT2JqKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwZWMuY29tbWFuZCA9PT0gQ1JFQVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgICAvLyB0cnkgdG8gZGV0ZXJtaW5lIHByb3RvY29sIGJ5IHNlc3Npb24gY3JlYXRpb24gYXJncywgc28gd2UgY2FuIHRocm93IGFcbiAgICAgICAgLy8gcHJvcGVybHkgZm9ybWF0dGVkIGVycm9yIGlmIGFyZ3VtZW50cyB2YWxpZGF0aW9uIGZhaWxzXG4gICAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGRldGVybWluZVByb3RvY29sKC4uLm1ha2VBcmdzKHJlcS5wYXJhbXMsIGpzb25PYmosIHNwZWMucGF5bG9hZFBhcmFtcyB8fCB7fSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUganNvbiBwYXlsb2FkIGNvbmZvcm1zIHRvIHRoZSBzcGVjXG4gICAgICBjaGVja1BhcmFtcyhzcGVjLnBheWxvYWRQYXJhbXMsIGpzb25PYmosIGN1cnJlbnRQcm90b2NvbCk7XG5cbiAgICAgIC8vIHR1cm4gdGhlIGNvbW1hbmQgYW5kIGpzb24gcGF5bG9hZCBpbnRvIGFuIGFyZ3VtZW50IGxpc3QgZm9yXG4gICAgICAvLyB0aGUgZHJpdmVyIG1ldGhvZHNcbiAgICAgIGxldCBhcmdzID0gbWFrZUFyZ3MocmVxLnBhcmFtcywganNvbk9iaiwgc3BlYy5wYXlsb2FkUGFyYW1zIHx8IHt9LCBjdXJyZW50UHJvdG9jb2wpO1xuICAgICAgbGV0IGRyaXZlclJlcztcbiAgICAgIC8vIHZhbGlkYXRlIGNvbW1hbmQgYXJncyBhY2NvcmRpbmcgdG8gTUpTT05XUFxuICAgICAgaWYgKHZhbGlkYXRvcnNbc3BlYy5jb21tYW5kXSkge1xuICAgICAgICB2YWxpZGF0b3JzW3NwZWMuY29tbWFuZF0oLi4uYXJncyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJ1biB0aGUgZHJpdmVyIGNvbW1hbmQgd3JhcHBlZCBpbnNpZGUgdGhlIGFyZ3VtZW50IHZhbGlkYXRvcnNcbiAgICAgIFNFU1NJT05TX0NBQ0hFLmdldExvZ2dlcihyZXEucGFyYW1zLnNlc3Npb25JZCwgY3VycmVudFByb3RvY29sKS5kZWJ1ZyhgQ2FsbGluZyBgICtcbiAgICAgICAgYCR7ZHJpdmVyLmNvbnN0cnVjdG9yLm5hbWV9LiR7c3BlYy5jb21tYW5kfSgpIHdpdGggYXJnczogYCArXG4gICAgICAgIF8udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIHtsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEh9KSk7XG5cbiAgICAgIGlmIChkaWRQbHVnaW5PdmVycmlkZVByb3h5KSB7XG4gICAgICAgIC8vIFRPRE8gZm9yIG5vdyB3ZSBhZGQgdGhpcyBpbmZvcm1hdGlvbiBvbiB0aGUgYXJncyBsaXN0LCBidXQgdGhhdCdzIG1peGluZyBwdXJwb3NlcyBoZXJlLlxuICAgICAgICAvLyBXZSByZWFsbHkgc2hvdWxkIGFkZCBhbm90aGVyICdvcHRpb25zJyBwYXJhbWV0ZXIgdG8gJ2V4ZWN1dGVDb21tYW5kJywgYnV0IHRoaXMgd291bGQgYmVcbiAgICAgICAgLy8gYSBicmVha2luZyBjaGFuZ2UgZm9yIGFsbCBkcml2ZXJzIHNvIHdvdWxkIG5lZWQgdG8gYmUgaGFuZGxlZCBjYXJlZnVsbHkuXG4gICAgICAgIGFyZ3MucHVzaCh7cmVxRm9yUHJveHk6IHJlcX0pO1xuICAgICAgfVxuXG4gICAgICBkcml2ZXJSZXMgPSBhd2FpdCBkcml2ZXIuZXhlY3V0ZUNvbW1hbmQoc3BlYy5jb21tYW5kLCAuLi5hcmdzKTtcblxuICAgICAgLy8gR2V0IHRoZSBwcm90b2NvbCBhZnRlciBleGVjdXRlQ29tbWFuZFxuICAgICAgY3VycmVudFByb3RvY29sID0gZXh0cmFjdFByb3RvY29sKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpIHx8IGN1cnJlbnRQcm90b2NvbDtcblxuICAgICAgLy8gSWYgYGV4ZWN1dGVDb21tYW5kYCB3YXMgb3ZlcnJpZGRlbiBhbmQgdGhlIG1ldGhvZCByZXR1cm5zIGFuIG9iamVjdFxuICAgICAgLy8gd2l0aCBhIHByb3RvY29sIGFuZCB2YWx1ZS9lcnJvciBwcm9wZXJ0eSwgcmUtYXNzaWduIHRoZSBwcm90b2NvbFxuICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChkcml2ZXJSZXMpICYmIF8uaGFzKGRyaXZlclJlcywgJ3Byb3RvY29sJykpIHtcbiAgICAgICAgY3VycmVudFByb3RvY29sID0gZHJpdmVyUmVzLnByb3RvY29sIHx8IGN1cnJlbnRQcm90b2NvbDtcbiAgICAgICAgaWYgKGRyaXZlclJlcy5lcnJvcikge1xuICAgICAgICAgIHRocm93IGRyaXZlclJlcy5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBkcml2ZXJSZXMgPSBkcml2ZXJSZXMudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHVucGFjayBjcmVhdGVTZXNzaW9uIHJlc3BvbnNlXG4gICAgICBpZiAoc3BlYy5jb21tYW5kID09PSBDUkVBVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICAgIG5ld1Nlc3Npb25JZCA9IGRyaXZlclJlc1swXTtcbiAgICAgICAgU0VTU0lPTlNfQ0FDSEUucHV0U2Vzc2lvbihuZXdTZXNzaW9uSWQsIGN1cnJlbnRQcm90b2NvbCk7XG4gICAgICAgIFNFU1NJT05TX0NBQ0hFLmdldExvZ2dlcihuZXdTZXNzaW9uSWQsIGN1cnJlbnRQcm90b2NvbClcbiAgICAgICAgICAuZGVidWcoYENhY2hlZCB0aGUgcHJvdG9jb2wgdmFsdWUgJyR7Y3VycmVudFByb3RvY29sfScgZm9yIHRoZSBuZXcgc2Vzc2lvbiAke25ld1Nlc3Npb25JZH1gKTtcbiAgICAgICAgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1ApIHtcbiAgICAgICAgICBkcml2ZXJSZXMgPSBkcml2ZXJSZXNbMV07XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDKSB7XG4gICAgICAgICAgZHJpdmVyUmVzID0ge1xuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiBkcml2ZXJSZXNbMV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkcml2ZXJSZXMgPSBmb3JtYXRSZXNwb25zZVZhbHVlKGRyaXZlclJlcyk7XG5cbiAgICAgIC8vIGRlbGV0ZSBzaG91bGQgbm90IHJldHVybiBhbnl0aGluZyBldmVuIGlmIHN1Y2Nlc3NmdWxcbiAgICAgIGlmIChzcGVjLmNvbW1hbmQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgICAgU0VTU0lPTlNfQ0FDSEUuZ2V0TG9nZ2VyKHJlcS5wYXJhbXMuc2Vzc2lvbklkLCBjdXJyZW50UHJvdG9jb2wpXG4gICAgICAgICAgLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZTogJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGRyaXZlclJlcyksIHtsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEh9KX1gKTtcbiAgICAgICAgU0VTU0lPTlNfQ0FDSEUuZ2V0TG9nZ2VyKHJlcS5wYXJhbXMuc2Vzc2lvbklkLCBjdXJyZW50UHJvdG9jb2wpLmRlYnVnKCdCdXQgZGVsZXRpbmcgc2Vzc2lvbiwgc28gbm90IHJldHVybmluZycpO1xuICAgICAgICBkcml2ZXJSZXMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgc3RhdHVzIGlzIG5vdCAwLCAgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGZvciBzdGF0dXMgY29kZS5cbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKGRyaXZlclJlcykpIHtcbiAgICAgICAgaWYgKHV0aWwuaGFzVmFsdWUoZHJpdmVyUmVzLnN0YXR1cykgJiYgIWlzTmFOKGRyaXZlclJlcy5zdGF0dXMpICYmIHBhcnNlSW50KGRyaXZlclJlcy5zdGF0dXMsIDEwKSAhPT0gMCkge1xuICAgICAgICAgIHRocm93IGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGRyaXZlclJlcy5zdGF0dXMsIGRyaXZlclJlcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGRyaXZlclJlcy52YWx1ZSkgJiYgZHJpdmVyUmVzLnZhbHVlLmVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JGcm9tVzNDSnNvbkNvZGUoZHJpdmVyUmVzLnZhbHVlLmVycm9yLCBkcml2ZXJSZXMudmFsdWUubWVzc2FnZSwgZHJpdmVyUmVzLnZhbHVlLnN0YWNrdHJhY2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGh0dHBSZXNCb2R5LnZhbHVlID0gZHJpdmVyUmVzO1xuICAgICAgU0VTU0lPTlNfQ0FDSEUuZ2V0TG9nZ2VyKHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG5ld1Nlc3Npb25JZCwgY3VycmVudFByb3RvY29sKS5kZWJ1ZyhgUmVzcG9uZGluZyBgICtcbiAgICAgICAgYHRvIGNsaWVudCB3aXRoIGRyaXZlci4ke3NwZWMuY29tbWFuZH0oKSByZXN1bHQ6ICR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShkcml2ZXJSZXMpLCB7bGVuZ3RoOiBNQVhfTE9HX0JPRFlfTEVOR1RIfSl9YCk7XG5cbiAgICAgIGlmIChzcGVjLmNvbW1hbmQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBrZWVwIHRoZSBsb2dnZXIgaW5zdGFuY2UgaW4gdGhlIGNhY2hlXG4gICAgICAgIC8vIGFmdGVyIHRoZSBzZXNzaW9uIGlzIGRlbGV0ZWQsIGJlY2F1c2UgaXQgY29udGFpbnMgdGhlIGxvZ2dpbmcgaGlzdG9yeVxuICAgICAgICAvLyBhbmQgY29uc3VtZXMgdGhlIG1lbW9yeVxuICAgICAgICBTRVNTSU9OU19DQUNIRS5yZXNldExvZ2dlcihyZXEucGFyYW1zLnNlc3Npb25JZCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBpZiBhbnl0aGluZyBnb2VzIHdyb25nLCBmaWd1cmUgb3V0IHdoYXQgb3VyIHJlc3BvbnNlIHNob3VsZCBiZVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCB3ZSBlbmNvdW50ZXJlZFxuICAgICAgbGV0IGFjdHVhbEVyciA9IGVycjtcblxuICAgICAgY3VycmVudFByb3RvY29sID0gY3VycmVudFByb3RvY29sIHx8IGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG5ld1Nlc3Npb25JZCk7XG5cbiAgICAgIGxldCBlcnJNc2cgPSBlcnIuc3RhY2t0cmFjZSB8fCBlcnIuc3RhY2s7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoZXJyTXNnLCBlcnIubWVzc2FnZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIG1lc3NhZ2UgaGFzIG1vcmUgaW5mb3JtYXRpb24sIGFkZCBpdC4gYnV0IG9mdGVuIHRoZSBtZXNzYWdlXG4gICAgICAgIC8vIGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBzdGFjayB0cmFjZVxuICAgICAgICBlcnJNc2cgPSBgJHtlcnIubWVzc2FnZX0ke2Vyck1zZyA/ICgnXFxuJyArIGVyck1zZykgOiAnJ31gO1xuICAgICAgfVxuICAgICAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlByb3h5UmVxdWVzdEVycm9yKSkge1xuICAgICAgICBhY3R1YWxFcnIgPSBlcnIuZ2V0QWN0dWFsRXJyb3IoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFNFU1NJT05TX0NBQ0hFLmdldExvZ2dlcihyZXEucGFyYW1zLnNlc3Npb25JZCB8fCBuZXdTZXNzaW9uSWQsIGN1cnJlbnRQcm90b2NvbClcbiAgICAgICAgICAuZGVidWcoYEVuY291bnRlcmVkIGludGVybmFsIGVycm9yIHJ1bm5pbmcgY29tbWFuZDogJHtlcnJNc2d9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50UHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0MpIHtcbiAgICAgICAgW2h0dHBTdGF0dXMsIGh0dHBSZXNCb2R5XSA9IGdldFJlc3BvbnNlRm9yVzNDRXJyb3IoYWN0dWFsRXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuTUpTT05XUCkge1xuICAgICAgICBbaHR0cFN0YXR1cywgaHR0cFJlc0JvZHldID0gZ2V0UmVzcG9uc2VGb3JKc29ud3BFcnJvcihhY3R1YWxFcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgaXQncyB1bmtub3duIHdoYXQgdGhlIHByb3RvY29sIGlzIChsaWtlIGlmIGl0J3MgYGdldFN0YXR1c2AgcHJpb3IgdG8gYGNyZWF0ZVNlc3Npb25gKSwgbWVyZ2UgdGhlIHJlc3BvbnNlc1xuICAgICAgICAvLyB0b2dldGhlciB0byBiZSBwcm90b2NvbC1hZ25vc3RpY1xuICAgICAgICBsZXQganNvbndwUmVzID0gZ2V0UmVzcG9uc2VGb3JKc29ud3BFcnJvcihhY3R1YWxFcnIpO1xuICAgICAgICBsZXQgdzNjUmVzID0gZ2V0UmVzcG9uc2VGb3JXM0NFcnJvcihhY3R1YWxFcnIpO1xuXG4gICAgICAgIGh0dHBSZXNCb2R5ID0ge1xuICAgICAgICAgIC4uLmpzb253cFJlc1sxXSxcbiAgICAgICAgICAuLi53M2NSZXNbMV0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVXNlIHRoZSBKU09OV1Agc3RhdHVzIGNvZGUgKHdoaWNoIGlzIHVzdWFsbHkgNTAwKVxuICAgICAgICBodHRwU3RhdHVzID0ganNvbndwUmVzWzBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlY29kZSB0aGUgcmVzcG9uc2UsIHdoaWNoIGlzIGVpdGhlciBhIHN0cmluZyBvciBqc29uXG4gICAgaWYgKF8uaXNTdHJpbmcoaHR0cFJlc0JvZHkpKSB7XG4gICAgICByZXMuc3RhdHVzKGh0dHBTdGF0dXMpLnNlbmQoaHR0cFJlc0JvZHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV3U2Vzc2lvbklkKSB7XG4gICAgICAgIGlmIChjdXJyZW50UHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0MpIHtcbiAgICAgICAgICBodHRwUmVzQm9keS52YWx1ZS5zZXNzaW9uSWQgPSBuZXdTZXNzaW9uSWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaHR0cFJlc0JvZHkuc2Vzc2lvbklkID0gbmV3U2Vzc2lvbklkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBodHRwUmVzQm9keS5zZXNzaW9uSWQgPSByZXEucGFyYW1zLnNlc3Npb25JZCB8fCBudWxsO1xuICAgICAgfVxuICAgICAgLy8gRG9uJ3QgaW5jbHVkZSBzZXNzaW9uSWQgaW4gVzNDIHJlc3BvbnNlc1xuICAgICAgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQykge1xuICAgICAgICBkZWxldGUgaHR0cFJlc0JvZHkuc2Vzc2lvbklkO1xuICAgICAgfVxuXG4gICAgICBodHRwUmVzQm9keSA9IGZvcm1hdFN0YXR1cyhodHRwUmVzQm9keSwgaHR0cFN0YXR1cywgY3VycmVudFByb3RvY29sKTtcbiAgICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cykuanNvbihodHRwUmVzQm9keSk7XG4gICAgfVxuICB9O1xuICAvLyBhZGQgdGhlIG1ldGhvZCB0byB0aGUgYXBwXG4gIGFwcFttZXRob2QudG9Mb3dlckNhc2UoKV0ocGF0aCwgKHJlcSwgcmVzKSA9PiB7XG4gICAgQi5yZXNvbHZlKGFzeW5jSGFuZGxlcihyZXEsIHJlcykpLmRvbmUoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRyaXZlclNob3VsZERvSndwUHJveHkgKGRyaXZlciwgcmVxLCBjb21tYW5kKSB7XG4gIC8vIGRyaXZlcnMgbmVlZCB0byBleHBsaWNpdGx5IHNheSB3aGVuIHRoZSBwcm94eSBpcyBhY3RpdmVcbiAgaWYgKCFkcml2ZXIucHJveHlBY3RpdmUocmVxLnBhcmFtcy5zZXNzaW9uSWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gd2Ugc2hvdWxkIG5ldmVyIHByb3h5IGRlbGV0ZVNlc3Npb24gYmVjYXVzZSB3ZSBuZWVkIHRvIGdpdmUgdGhlIGNvbnRhaW5pbmdcbiAgLy8gZHJpdmVyIGFuIG9wcG9ydHVuaXR5IHRvIGNsZWFuIGl0c2VsZiB1cFxuICBpZiAoY29tbWFuZCA9PT0gJ2RlbGV0ZVNlc3Npb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gdmFsaWRhdGUgYXZvaWRhbmNlIHNjaGVtYSwgYW5kIHNheSB3ZSBzaG91bGRuJ3QgcHJveHkgaWYgYW55dGhpbmcgaW4gdGhlXG4gIC8vIGF2b2lkIGxpc3QgbWF0Y2hlcyBvdXIgcmVxXG4gIGlmIChkcml2ZXIucHJveHlSb3V0ZUlzQXZvaWRlZChyZXEucGFyYW1zLnNlc3Npb25JZCwgcmVxLm1ldGhvZCwgcmVxLm9yaWdpbmFsVXJsLCByZXEuYm9keSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZG9Kd3BQcm94eSAoZHJpdmVyLCByZXEsIHJlcykge1xuICBTRVNTSU9OU19DQUNIRS5nZXRMb2dnZXIocmVxLnBhcmFtcy5zZXNzaW9uSWQsIGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKSlcbiAgICAuaW5mbygnRHJpdmVyIHByb3h5IGFjdGl2ZSwgcGFzc2luZyByZXF1ZXN0IG9uIHZpYSBIVFRQIHByb3h5Jyk7XG5cbiAgLy8gY2hlY2sgdGhhdCB0aGUgaW5uZXIgZHJpdmVyIGhhcyBhIHByb3h5IGZ1bmN0aW9uXG4gIGlmICghZHJpdmVyLmNhblByb3h5KHJlcS5wYXJhbXMuc2Vzc2lvbklkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIHByb3h5IHRvIGEgSlNPTldQIHNlcnZlciBidXQgZHJpdmVyIGlzIHVuYWJsZSB0byBwcm94eScpO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcHJveGllZFJlcyA9IGF3YWl0IGRyaXZlci5leGVjdXRlQ29tbWFuZCgncHJveHlSZXFSZXMnLCByZXEsIHJlcywgcmVxLnBhcmFtcy5zZXNzaW9uSWQpO1xuICAgIGlmIChwcm94aWVkUmVzICYmIHByb3hpZWRSZXMuZXJyb3IpIHRocm93IHByb3hpZWRSZXMuZXJyb3I7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlByb3h5UmVxdWVzdEVycm9yKSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwcm94eS4gUHJveHkgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG5cblxuZXhwb3J0IHtcbiAgUHJvdG9jb2wsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgaXNTZXNzaW9uQ29tbWFuZCxcbiAgZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSwgZGV0ZXJtaW5lUHJvdG9jb2wsIENSRUFURV9TRVNTSU9OX0NPTU1BTkQsIERFTEVURV9TRVNTSU9OX0NPTU1BTkQsXG59O1xuIl0sImZpbGUiOiJsaWIvcHJvdG9jb2wvcHJvdG9jb2wuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
391
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wcm90b2NvbC9wcm90b2NvbC5qcyJdLCJuYW1lcyI6WyJDUkVBVEVfU0VTU0lPTl9DT01NQU5EIiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsIkdFVF9TVEFUVVNfQ09NTUFORCIsIlByb3RvY29sIiwiZGV0ZXJtaW5lUHJvdG9jb2wiLCJkZXNpcmVkQ2FwYWJpbGl0aWVzIiwicmVxdWlyZWRDYXBhYmlsaXRpZXMiLCJjYXBhYmlsaXRpZXMiLCJfIiwiaXNQbGFpbk9iamVjdCIsIlBST1RPQ09MUyIsIlczQyIsIk1KU09OV1AiLCJleHRyYWN0UHJvdG9jb2wiLCJkcml2ZXIiLCJzZXNzaW9uSWQiLCJkc3REcml2ZXIiLCJpc0Z1bmN0aW9uIiwiZHJpdmVyRm9yU2Vzc2lvbiIsInByb3RvY29sIiwiU0VTU0lPTlNfQ0FDSEUiLCJnZXRQcm90b2NvbCIsImlzU2Vzc2lvbkNvbW1hbmQiLCJjb21tYW5kIiwiaW5jbHVkZXMiLCJOT19TRVNTSU9OX0lEX0NPTU1BTkRTIiwid3JhcFBhcmFtcyIsInBhcmFtU2V0cyIsImpzb25PYmoiLCJyZXMiLCJpc0FycmF5IiwiaXNPYmplY3QiLCJ3cmFwIiwidW53cmFwUGFyYW1zIiwidW53cmFwIiwiY2hlY2tQYXJhbXMiLCJyZXF1aXJlZFBhcmFtcyIsIm9wdGlvbmFsUGFyYW1zIiwicmVjZWl2ZWRQYXJhbXMiLCJrZXlzIiwicmVxdWlyZWQiLCJmaXJzdCIsIm9wdGlvbmFsIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiZXJyb3JzIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwibGVuZ3RoIiwiaW5kZXhPZiIsInB1c2giLCJwYXJhbXMiLCJkaWZmZXJlbmNlIiwibWFrZUFyZ3MiLCJyZXF1ZXN0UGFyYW1zIiwicGF5bG9hZFBhcmFtcyIsInVybFBhcmFtcyIsInJldmVyc2UiLCJ3aXRob3V0IiwiYXJncyIsImZsYXR0ZW4iLCJtYXAiLCJwIiwiY29uY2F0IiwidSIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlc3Npb25FeGlzdHMiLCJFcnJvciIsImV4ZWN1dGVDb21tYW5kIiwiZXhlY3V0ZSIsImFkZFJvdXRlcyIsImFwcCIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJleHRyYU1ldGhvZE1hcCIsImFsbE1ldGhvZHMiLCJNRVRIT0RfTUFQIiwicGF0aCIsIm1ldGhvZHMiLCJ0b1BhaXJzIiwibWV0aG9kIiwic3BlYyIsImJ1aWxkSGFuZGxlciIsImlzU2Vzc0NtZCIsImFzeW5jSGFuZGxlciIsInJlcSIsImJvZHkiLCJodHRwUmVzQm9keSIsImh0dHBTdGF0dXMiLCJuZXdTZXNzaW9uSWQiLCJjdXJyZW50UHJvdG9jb2wiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImRpZFBsdWdpbk92ZXJyaWRlUHJveHkiLCJuZXZlclByb3h5IiwiZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSIsInBsdWdpbnNUb0hhbmRsZUNtZCIsImRvSndwUHJveHkiLCJnZXRMb2dnZXIiLCJkZWJ1ZyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJkcml2ZXJSZXMiLCJ2YWxpZGF0b3JzIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidHJ1bmNhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiTUFYX0xPR19CT0RZX0xFTkdUSCIsInJlcUZvclByb3h5IiwiaGFzIiwiZXJyb3IiLCJ2YWx1ZSIsInB1dFNlc3Npb24iLCJ1dGlsIiwiaGFzVmFsdWUiLCJzdGF0dXMiLCJpc05hTiIsInBhcnNlSW50Iiwic3RhY2t0cmFjZSIsInJlc2V0TG9nZ2VyIiwiZXJyIiwiYWN0dWFsRXJyIiwiZXJyTXNnIiwic3RhY2siLCJQcm94eVJlcXVlc3RFcnJvciIsImdldEFjdHVhbEVycm9yIiwiaXNTdHJpbmciLCJzZW5kIiwianNvbiIsInRvTG93ZXJDYXNlIiwiQiIsInJlc29sdmUiLCJkb25lIiwicHJveHlBY3RpdmUiLCJwcm94eVJvdXRlSXNBdm9pZGVkIiwib3JpZ2luYWxVcmwiLCJpbmZvIiwiY2FuUHJveHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7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XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHZhbGlkYXRvcnMgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtcbiAgZXJyb3JzLCBpc0Vycm9yVHlwZSwgZ2V0UmVzcG9uc2VGb3JXM0NFcnJvcixcbiAgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUsIGVycm9yRnJvbVczQ0pzb25Db2RlLFxufSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBNRVRIT0RfTUFQLCBOT19TRVNTSU9OX0lEX0NPTU1BTkRTIH0gZnJvbSAnLi9yb3V0ZXMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtcbiAgZm9ybWF0UmVzcG9uc2VWYWx1ZSwgZm9ybWF0U3RhdHVzLFxufSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgTUFYX0xPR19CT0RZX0xFTkdUSCwgUFJPVE9DT0xTLCBERUZBVUxUX0JBU0VfUEFUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgU0VTU0lPTlNfQ0FDSEUgZnJvbSAnLi9zZXNzaW9ucy1jYWNoZSc7XG5cblxuY29uc3QgQ1JFQVRFX1NFU1NJT05fQ09NTUFORCA9ICdjcmVhdGVTZXNzaW9uJztcbmNvbnN0IERFTEVURV9TRVNTSU9OX0NPTU1BTkQgPSAnZGVsZXRlU2Vzc2lvbic7XG5jb25zdCBHRVRfU1RBVFVTX0NPTU1BTkQgPSAnZ2V0U3RhdHVzJztcblxuY2xhc3MgUHJvdG9jb2wge31cblxuZnVuY3Rpb24gZGV0ZXJtaW5lUHJvdG9jb2wgKGRlc2lyZWRDYXBhYmlsaXRpZXMsIHJlcXVpcmVkQ2FwYWJpbGl0aWVzLCBjYXBhYmlsaXRpZXMpIHtcbiAgcmV0dXJuIF8uaXNQbGFpbk9iamVjdChjYXBhYmlsaXRpZXMpID9cbiAgICBQUk9UT0NPTFMuVzNDIDpcbiAgICBQUk9UT0NPTFMuTUpTT05XUDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFByb3RvY29sIChkcml2ZXIsIHNlc3Npb25JZCA9IG51bGwpIHtcbiAgY29uc3QgZHN0RHJpdmVyID0gXy5pc0Z1bmN0aW9uKGRyaXZlci5kcml2ZXJGb3JTZXNzaW9uKVxuICAgID8gZHJpdmVyLmRyaXZlckZvclNlc3Npb24oc2Vzc2lvbklkKVxuICAgIDogZHJpdmVyO1xuICBpZiAoZHN0RHJpdmVyID09PSBkcml2ZXIpIHtcbiAgICAvLyBTaG9ydGNpcmN1aXQgaWYgdGhlIGRyaXZlciBpbnN0YW5jZSBpcyBub3QgYW4gdW1icmVsbGEgZHJpdmVyXG4gICAgLy8gb3IgaXQgaXMgRmFrZSBkcml2ZXIgaW5zdGFuY2UsIHdoZXJlIGBkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbmBcbiAgICAvLyBhbHdheXMgcmV0dXJucyBzZWxmIGluc3RhbmNlXG4gICAgcmV0dXJuIGRyaXZlci5wcm90b2NvbDtcbiAgfVxuXG4gIC8vIEV4dHJhY3QgdGhlIHByb3RvY29sIGZvciB0aGUgY3VycmVudCBzZXNzaW9uIGlmIHRoZSBnaXZlbiBkcml2ZXIgaXMgdGhlIHVtYnJlbGxhIG9uZVxuICByZXR1cm4gZHN0RHJpdmVyID8gZHN0RHJpdmVyLnByb3RvY29sIDogU0VTU0lPTlNfQ0FDSEUuZ2V0UHJvdG9jb2woc2Vzc2lvbklkKTtcbn1cblxuZnVuY3Rpb24gaXNTZXNzaW9uQ29tbWFuZCAoY29tbWFuZCkge1xuICByZXR1cm4gIV8uaW5jbHVkZXMoTk9fU0VTU0lPTl9JRF9DT01NQU5EUywgY29tbWFuZCk7XG59XG5cbmZ1bmN0aW9uIHdyYXBQYXJhbXMgKHBhcmFtU2V0cywganNvbk9iaikge1xuICAvKiBUaGVyZSBhcmUgY29tbWFuZHMgbGlrZSBwZXJmb3JtVG91Y2ggd2hpY2ggdGFrZSBhIHNpbmdsZSBwYXJhbWV0ZXIgKHByaW1pdGl2ZSB0eXBlIG9yIGFycmF5KS5cbiAgICogU29tZSBkcml2ZXJzIGNob29zZSB0byBwYXNzIHRoaXMgcGFyYW1ldGVyIGFzIGEgdmFsdWUgKGVnLiBbYWN0aW9uMSwgYWN0aW9uMi4uLl0pIHdoaWxlIG90aGVycyB0b1xuICAgKiB3cmFwIGl0IHdpdGhpbiBhbiBvYmplY3QoZWcnIHtnZXN0dXJlOiAgW2FjdGlvbjEsIGFjdGlvbjIuLi5dfSksIHdoaWNoIG1ha2VzIGl0IGhhcmQgdG8gdmFsaWRhdGUuXG4gICAqIFRoZSB3cmFwIG9wdGlvbiBpbiB0aGUgc3BlYyBlbmZvcmNlIHdyYXBwaW5nIGJlZm9yZSB2YWxpZGF0aW9uLCBzbyB0aGF0IGFsbCBwYXJhbXMgYXJlIHdyYXBwZWQgYXRcbiAgICogdGhlIHRpbWUgdGhleSBhcmUgdmFsaWRhdGVkIGFuZCBsYXRlciBwYXNzZWQgdG8gdGhlIGNvbW1hbmRzLlxuICAgKi9cbiAgbGV0IHJlcyA9IGpzb25PYmo7XG4gIGlmIChfLmlzQXJyYXkoanNvbk9iaikgfHwgIV8uaXNPYmplY3QoanNvbk9iaikpIHtcbiAgICByZXMgPSB7fTtcbiAgICByZXNbcGFyYW1TZXRzLndyYXBdID0ganNvbk9iajtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiB1bndyYXBQYXJhbXMgKHBhcmFtU2V0cywganNvbk9iaikge1xuICAvKiBUaGVyZSBhcmUgY29tbWFuZHMgbGlrZSBzZXROZXR3b3JrQ29ubmVjdGlvbiB3aGljaCBzZW5kIHBhcmFtZXRlcnMgd3JhcHBlZCBpbnNpZGUgYSBrZXkgc3VjaCBhc1xuICAgKiBcInBhcmFtZXRlcnNcIi4gVGhpcyBmdW5jdGlvbiB1bndyYXBzIHRoZW0gKGVnLiB7XCJwYXJhbWV0ZXJzXCI6IHtcInR5cGVcIjogMX19IGJlY29tZXMge1widHlwZVwiOiAxfSkuXG4gICAqL1xuICBsZXQgcmVzID0ganNvbk9iajtcbiAgaWYgKF8uaXNPYmplY3QoanNvbk9iaikpIHtcbiAgICAvLyBzb21lIGNsaWVudHMsIGxpa2UgcnVieSwgZG9uJ3Qgd3JhcFxuICAgIGlmIChqc29uT2JqW3BhcmFtU2V0cy51bndyYXBdKSB7XG4gICAgICByZXMgPSBqc29uT2JqW3BhcmFtU2V0cy51bndyYXBdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBjaGVja1BhcmFtcyAocGFyYW1TZXRzLCBqc29uT2JqLCBwcm90b2NvbCkge1xuICBsZXQgcmVxdWlyZWRQYXJhbXMgPSBbXTtcbiAgbGV0IG9wdGlvbmFsUGFyYW1zID0gW107XG4gIGxldCByZWNlaXZlZFBhcmFtcyA9IF8ua2V5cyhqc29uT2JqKTtcblxuICBpZiAocGFyYW1TZXRzKSB7XG4gICAgaWYgKHBhcmFtU2V0cy5yZXF1aXJlZCkge1xuICAgICAgLy8gd2UgbWlnaHQgaGF2ZSBhbiBhcnJheSBvZiBwYXJhbWV0ZXJzLFxuICAgICAgLy8gb3IgYW4gYXJyYXkgb2YgYXJyYXlzIG9mIHBhcmFtZXRlcnMsIHNvIHN0YW5kYXJkaXplXG4gICAgICBpZiAoIV8uaXNBcnJheShfLmZpcnN0KHBhcmFtU2V0cy5yZXF1aXJlZCkpKSB7XG4gICAgICAgIHJlcXVpcmVkUGFyYW1zID0gW3BhcmFtU2V0cy5yZXF1aXJlZF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1aXJlZFBhcmFtcyA9IHBhcmFtU2V0cy5yZXF1aXJlZDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gb3B0aW9uYWwgcGFyYW1ldGVycyBhcmUganVzdCBhbiBhcnJheVxuICAgIGlmIChwYXJhbVNldHMub3B0aW9uYWwpIHtcbiAgICAgIG9wdGlvbmFsUGFyYW1zID0gcGFyYW1TZXRzLm9wdGlvbmFsO1xuICAgIH1cblxuICAgIC8vIElmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIGFzIHRoZSAndmFsaWRhdGUnIGtleSwgaXQgd2lsbCBoZXJlIGJlIGNhbGxlZCB3aXRoXG4gICAgLy8ganNvbk9iaiBhcyB0aGUgcGFyYW0uIElmIGl0IHJldHVybnMgc29tZXRoaW5nIGZhbHN5LCB2ZXJpZmljYXRpb24gd2lsbCBiZVxuICAgIC8vIGNvbnNpZGVyZWQgdG8gaGF2ZSBwYXNzZWQuIElmIGl0IHJldHVybnMgc29tZXRoaW5nIGVsc2UsIHRoYXQgd2lsbCBiZSB0aGVcbiAgICAvLyBhcmd1bWVudCB0byBhbiBlcnJvciB3aGljaCBpcyB0aHJvd24gdG8gdGhlIHVzZXJcbiAgICBpZiAocGFyYW1TZXRzLnZhbGlkYXRlKSB7XG4gICAgICBsZXQgbWVzc2FnZSA9IHBhcmFtU2V0cy52YWxpZGF0ZShqc29uT2JqLCBwcm90b2NvbCk7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcihtZXNzYWdlLCBqc29uT2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBpZiB3ZSBoYXZlIG5vIHJlcXVpcmVkIHBhcmFtZXRlcnMsIGFsbCBpcyB3ZWxsXG4gIGlmIChyZXF1aXJlZFBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBzb21lIGNsaWVudHMgcGFzcyBpbiB0aGUgc2Vzc2lvbiBpZCBpbiB0aGUgcGFyYW1zXG4gIGlmIChvcHRpb25hbFBhcmFtcy5pbmRleE9mKCdzZXNzaW9uSWQnKSA9PT0gLTEpIHtcbiAgICBvcHRpb25hbFBhcmFtcy5wdXNoKCdzZXNzaW9uSWQnKTtcbiAgfVxuXG4gIC8vIHNvbWUgY2xpZW50cyBwYXNzIGluIGFuIGVsZW1lbnQgaWQgaW4gdGhlIHBhcmFtc1xuICBpZiAob3B0aW9uYWxQYXJhbXMuaW5kZXhPZignaWQnKSA9PT0gLTEpIHtcbiAgICBvcHRpb25hbFBhcmFtcy5wdXNoKCdpZCcpO1xuICB9XG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBhbmQgY2hlY2sgYWdhaW5zdCBvdXIgYXJndW1lbnRzXG4gIGZvciAobGV0IHBhcmFtcyBvZiByZXF1aXJlZFBhcmFtcykge1xuICAgIGlmIChfLmRpZmZlcmVuY2UocmVjZWl2ZWRQYXJhbXMsIHBhcmFtcywgb3B0aW9uYWxQYXJhbXMpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICBfLmRpZmZlcmVuY2UocGFyYW1zLCByZWNlaXZlZFBhcmFtcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyB3ZSBoYXZlIGEgc2V0IG9mIHBhcmFtZXRlcnMgdGhhdCBpcyBjb3JyZWN0XG4gICAgICAvLyBzbyBzaG9ydC1jaXJjdWl0XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKHBhcmFtU2V0cywgcmVjZWl2ZWRQYXJhbXMpO1xufVxuXG4vKlxuICogVGhpcyBtZXRob2QgdGFrZXMgMyBwaWVjZXMgb2YgZGF0YTogcmVxdWVzdCBwYXJhbWV0ZXJzICgncmVxdWVzdFBhcmFtcycpLFxuICogYSByZXF1ZXN0IEpTT04gYm9keSAoJ2pzb25PYmonKSwgYW5kICdwYXlsb2FkUGFyYW1zJywgd2hpY2ggaXMgdGhlIHNlY3Rpb25cbiAqIGZyb20gdGhlIHJvdXRlIGRlZmluaXRpb24gZm9yIGEgcGFydGljdWxhciBlbmRwb2ludCB3aGljaCBoYXMgaW5zdHJ1Y3Rpb25zXG4gKiBvbiBoYW5kbGluZyBwYXJhbWV0ZXJzLiBUaGlzIG1ldGhvZCByZXR1cm5zIGFuIGFycmF5IG9mIGFyZ3VtZW50cyB3aGljaCB3aWxsXG4gKiBiZSBhcHBsaWVkIHRvIGEgY29tbWFuZC5cbiAqL1xuZnVuY3Rpb24gbWFrZUFyZ3MgKHJlcXVlc3RQYXJhbXMsIGpzb25PYmosIHBheWxvYWRQYXJhbXMsIHByb3RvY29sKSB7XG4gIC8vIFdlIHdhbnQgdG8gcGFzcyB0aGUgXCJ1cmxcIiBwYXJhbWV0ZXJzIHRvIHRoZSBjb21tYW5kcyBpbiByZXZlcnNlIG9yZGVyXG4gIC8vIHNpbmNlIHRoZSBjb21tYW5kIHdpbGwgc29tZXRpbWVzIHdhbnQgdG8gaWdub3JlLCBzYXksIHRoZSBzZXNzaW9uSWQuXG4gIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgcHV0dGluZyBzZXNzaW9uSWQgbGFzdCwgd2hpY2ggbWVhbnMgaW4gSlMgd2UgY2FuXG4gIC8vIG9taXQgaXQgZnJvbSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGlmIHdlJ3JlIG5vdCBnb2luZyB0byB1c2UgaXQuXG4gIGxldCB1cmxQYXJhbXMgPSBfLmtleXMocmVxdWVzdFBhcmFtcykucmV2ZXJzZSgpO1xuXG4gIC8vIEluIHRoZSBzaW1wbGUgY2FzZSwgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIGEgYmFzaWMgYXJyYXkgaW5cbiAgLy8gcGF5bG9hZFBhcmFtcy5yZXF1aXJlZCwgc28gc3RhcnQgdGhlcmUuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVyZSBhcmVcbiAgLy8gbXVsdGlwbGUgb3B0aW9uYWwgc2V0cyBvZiByZXF1aXJlZCBwYXJhbXMsIHRob3VnaCwgc28gaGFuZGxlIHRoYXQgY2FzZVxuICAvLyB0b28uXG4gIGxldCByZXF1aXJlZFBhcmFtcyA9IHBheWxvYWRQYXJhbXMucmVxdWlyZWQ7XG4gIGlmIChfLmlzQXJyYXkoXy5maXJzdChwYXlsb2FkUGFyYW1zLnJlcXVpcmVkKSkpIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgb3B0aW9uYWwgc2V0cyBvZiByZXF1aXJlZCBwYXJhbXMsIHRoZW4gd2Ugd2lsbCBoYXZlIGFuXG4gICAgLy8gYXJyYXkgb2YgYXJyYXlzIGluIHBheWxvYWRQYXJhbXMucmVxdWlyZWQsIHNvIGxvb3AgdGhyb3VnaCBlYWNoIHNldCBhbmRcbiAgICAvLyBwaWNrIHRoZSBvbmUgdGhhdCBtYXRjaGVzIHdoaWNoIEpTT04gcGFyYW1zIHdlcmUgYWN0dWFsbHkgc2VudC4gV2UndmVcbiAgICAvLyBhbHJlYWR5IGJlZW4gdGhyb3VnaCB2YWxpZGF0aW9uIHNvIHdlJ3JlIGd1YXJhbnRlZWQgdG8gZmluZCBhIG1hdGNoLlxuICAgIGxldCBrZXlzID0gXy5rZXlzKGpzb25PYmopO1xuICAgIGZvciAobGV0IHBhcmFtcyBvZiBwYXlsb2FkUGFyYW1zLnJlcXVpcmVkKSB7XG4gICAgICBpZiAoXy53aXRob3V0KHBhcmFtcywgLi4ua2V5cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlcXVpcmVkUGFyYW1zID0gcGFyYW1zO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBOb3cgd2UgY29uc3RydWN0IG91ciBsaXN0IG9mIGFyZ3VtZW50cyB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY29tbWFuZFxuICBsZXQgYXJncztcbiAgaWYgKF8uaXNGdW5jdGlvbihwYXlsb2FkUGFyYW1zLm1ha2VBcmdzKSkge1xuICAgIC8vIEluIHRoZSByb3V0ZSBzcGVjLCBhIHBhcnRpY3VsYXIgcm91dGUgbWlnaHQgZGVmaW5lIGEgJ21ha2VBcmdzJyBmdW5jdGlvblxuICAgIC8vIGlmIGl0IHdhbnRzIGZ1bGwgY29udHJvbCBvdmVyIGhvdyB0byB0dXJuIEpTT04gcGFyYW1ldGVycyBpbnRvIGNvbW1hbmRcbiAgICAvLyBhcmd1bWVudHMuIFNvIHdlIHBhc3MgaXQgdGhlIEpTT04gcGFyYW1ldGVycyBhbmQgaXQgcmV0dXJucyBhbiBhcnJheVxuICAgIC8vIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgaGFuZGxpbmcgY29tbWFuZC4gRm9yIGV4YW1wbGUgaWYgaXQgcmV0dXJuc1xuICAgIC8vIFsxLCAyLCAzXSwgd2Ugd2lsbCBjYWxsIGBjb21tYW5kKDEsIDIsIDMsIC4uLilgICh1cmwgcGFyYW1zIGFyZSBzZXBhcmF0ZVxuICAgIC8vIGZyb20gSlNPTiBwYXJhbXMgYW5kIGdldCBjb25jYXRlbmF0ZWQgYmVsb3cpLlxuICAgIGFyZ3MgPSBwYXlsb2FkUGFyYW1zLm1ha2VBcmdzKGpzb25PYmosIHByb3RvY29sKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIGNvbGxlY3QgYWxsIHRoZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgcGFyYW1zIGFuZCBmbGF0dGVuIHRoZW1cbiAgICAvLyBpbnRvIGFuIGFyZ3VtZW50IGFycmF5XG4gICAgYXJncyA9IF8uZmxhdHRlbihyZXF1aXJlZFBhcmFtcykubWFwKChwKSA9PiBqc29uT2JqW3BdKTtcbiAgICBpZiAocGF5bG9hZFBhcmFtcy5vcHRpb25hbCkge1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KF8uZmxhdHRlbihwYXlsb2FkUGFyYW1zLm9wdGlvbmFsKS5tYXAoKHApID0+IGpzb25PYmpbcF0pKTtcbiAgICB9XG4gIH1cbiAgLy8gRmluYWxseSwgZ2V0IG91ciB1cmwgcGFyYW1zIChzZXNzaW9uIGlkLCBlbGVtZW50IGlkLCBldGMuLi4pIG9uIHRoZSBlbmQgb2ZcbiAgLy8gdGhlIGxpc3RcbiAgYXJncyA9IGFyZ3MuY29uY2F0KHVybFBhcmFtcy5tYXAoKHUpID0+IHJlcXVlc3RQYXJhbXNbdV0pKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmZ1bmN0aW9uIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiAoZHJpdmVyKSB7XG4gIGlmICghZHJpdmVyLnNlc3Npb25FeGlzdHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RyaXZlcnMgdXNlZCB3aXRoIE1KU09OV1AgbXVzdCBpbXBsZW1lbnQgYHNlc3Npb25FeGlzdHNgJyk7XG4gIH1cblxuICBpZiAoIShkcml2ZXIuZXhlY3V0ZUNvbW1hbmQgfHwgZHJpdmVyLmV4ZWN1dGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEcml2ZXJzIHVzZWQgd2l0aCBNSlNPTldQIG11c3QgaW1wbGVtZW50IGBleGVjdXRlQ29tbWFuZGAgb3IgYGV4ZWN1dGVgJyk7XG4gIH1cblxuICAvLyByZXR1cm4gYSBmdW5jdGlvbiB3aGljaCB3aWxsIGFkZCBhbGwgdGhlIHJvdXRlcyB0byB0aGUgZHJpdmVyLiBIZXJlIGV4dHJhTWV0aG9kcyBtaWdodCBiZVxuICAvLyBwYXNzZWQgaW4gYXMgZGVmaW5lZCBieSBBcHBpdW0gcGx1Z2lucywgc28gd2UgbmVlZCB0byBhZGQgdGhvc2UgdG8gdGhlIGRlZmF1bHQgbGlzdFxuICByZXR1cm4gZnVuY3Rpb24gYWRkUm91dGVzIChhcHAsIHtiYXNlUGF0aCA9IERFRkFVTFRfQkFTRV9QQVRILCBleHRyYU1ldGhvZE1hcCA9IHt9fSkge1xuICAgIC8vIHN0b3JlIGJhc2VQYXRoIG9uIHRoZSBkcml2ZXIgaW5zdGFuY2Ugc28gaXQgY2FuIHVzZSBpdCBpZiBuZWNlc3NhcnlcbiAgICAvLyBmb3IgZXhhbXBsZSBpbiBkZXRlcm1pbmluZyBwcm94eSBhdm9pZGFuY2VcbiAgICBkcml2ZXIuYmFzZVBhdGggPSBiYXNlUGF0aDtcblxuICAgIGNvbnN0IGFsbE1ldGhvZHMgPSB7Li4uTUVUSE9EX01BUCwgLi4uZXh0cmFNZXRob2RNYXB9O1xuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgbWV0aG9kc10gb2YgXy50b1BhaXJzKGFsbE1ldGhvZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFttZXRob2QsIHNwZWNdIG9mIF8udG9QYWlycyhtZXRob2RzKSkge1xuICAgICAgICAvLyBzZXQgdXAgdGhlIGV4cHJlc3Mgcm91dGUgaGFuZGxlclxuICAgICAgICBidWlsZEhhbmRsZXIoYXBwLCBtZXRob2QsIGAke2Jhc2VQYXRofSR7cGF0aH1gLCBzcGVjLCBkcml2ZXIsIGlzU2Vzc2lvbkNvbW1hbmQoc3BlYy5jb21tYW5kKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEhhbmRsZXIgKGFwcCwgbWV0aG9kLCBwYXRoLCBzcGVjLCBkcml2ZXIsIGlzU2Vzc0NtZCkge1xuICBsZXQgYXN5bmNIYW5kbGVyID0gYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgbGV0IGpzb25PYmogPSByZXEuYm9keTtcbiAgICBsZXQgaHR0cFJlc0JvZHkgPSB7fTtcbiAgICBsZXQgaHR0cFN0YXR1cyA9IDIwMDtcbiAgICBsZXQgbmV3U2Vzc2lvbklkO1xuICAgIGxldCBjdXJyZW50UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2woZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gaWYgdGhpcyBpcyBhIHNlc3Npb24gY29tbWFuZCBidXQgd2UgZG9uJ3QgaGF2ZSBhIHNlc3Npb24sXG4gICAgICAvLyBlcnJvciBvdXQgZWFybHkgKGVzcGVjaWFsbHkgYmVmb3JlIHByb3h5aW5nKVxuICAgICAgaWYgKGlzU2Vzc0NtZCAmJiAhZHJpdmVyLnNlc3Npb25FeGlzdHMocmVxLnBhcmFtcy5zZXNzaW9uSWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRHJpdmVyRXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIGRyaXZlciBpcyBjdXJyZW50bHkgcHJveHlpbmcgY29tbWFuZHMgdG8gYW5vdGhlciBKU09OV1Agc2VydmVyLCBieXBhc3MgYWxsIG91clxuICAgICAgLy8gY2hlY2tzIGFuZCBhc3N1bWUgdGhlIHVwc3RyZWFtIHNlcnZlciBrbm93cyB3aGF0IGl0J3MgZG9pbmcuIEJ1dCBrZWVwIHRoaXMgaW4gdGhlXG4gICAgICAvLyB0cnkvY2F0Y2ggYmxvY2sgc28gaWYgcHJveHlpbmcgaXRzZWxmIGZhaWxzLCB3ZSBnaXZlIGEgbWVzc2FnZSB0byB0aGUgY2xpZW50LiBPZiBjb3Vyc2Ugd2VcbiAgICAgIC8vIG9ubHkgd2FudCB0byBkbyB0aGVzZSB3aGVuIHdlIGhhdmUgYSBzZXNzaW9uIGNvbW1hbmQ7IHRoZSBBcHBpdW0gZHJpdmVyIG11c3QgYmVcbiAgICAgIC8vIHJlc3BvbnNpYmxlIGZvciBzdGFydC9zdG9wIHNlc3Npb24sIGV0Yy4uLiBXZSBhbHNvIGFsbG93IHRoZSBjb21tYW5kIHNwZWMgdG8gZGVjbGFyZSB0aGF0XG4gICAgICAvLyB0aGlzIGNvbW1hbmQgc2hvdWxkIG5ldmVyIGJlIHByb3hpZWQgKHdoaWNoIGlzIHVzZWZ1bCBmb3IgcGx1Z2luIGRldmVsb3BlcnMgd2hvIGFkZFxuICAgICAgLy8gY29tbWFuZHMgYW5kIGdlbmVyYWxseSB3b3VsZCBub3Qgd2FudCB0aGF0IGNvbW1hbmQgdG8gYmUgcHJveGllZCBpbnN0ZWFkIG9mIGhhbmRsZWQgYnkgdGhlXG4gICAgICAvLyBwbHVnaW4pXG4gICAgICBsZXQgZGlkUGx1Z2luT3ZlcnJpZGVQcm94eSA9IGZhbHNlO1xuICAgICAgaWYgKGlzU2Vzc0NtZCAmJiAhc3BlYy5uZXZlclByb3h5ICYmIGRyaXZlclNob3VsZERvSndwUHJveHkoZHJpdmVyLCByZXEsIHNwZWMuY29tbWFuZCkpIHtcbiAgICAgICAgaWYgKCFkcml2ZXIucGx1Z2luc1RvSGFuZGxlQ21kIHx8XG4gICAgICAgICAgICBkcml2ZXIucGx1Z2luc1RvSGFuZGxlQ21kKHNwZWMuY29tbWFuZCwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGF3YWl0IGRvSndwUHJveHkoZHJpdmVyLCByZXEsIHJlcyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFNFU1NJT05TX0NBQ0hFLmdldExvZ2dlcihyZXEucGFyYW1zLnNlc3Npb25JZCwgY3VycmVudFByb3RvY29sKS5kZWJ1ZyhgV291bGQgaGF2ZSBwcm94aWVkIGAgK1xuICAgICAgICAgIGBjb21tYW5kIGRpcmVjdGx5LCBidXQgYSBwbHVnaW4gZXhpc3RzIHdoaWNoIG1pZ2h0IHJlcXVpcmUgaXRzIHZhbHVlLCBzbyB3aWxsIGxldCBgICtcbiAgICAgICAgICBgaXRzIHZhbHVlIGJlIGNvbGxlY3RlZCBpbnRlcm5hbGx5IGFuZCBtYWRlIHBhcnQgb2YgcGx1Z2luIGNoYWluYCk7XG4gICAgICAgIGRpZFBsdWdpbk92ZXJyaWRlUHJveHkgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiBhIGNvbW1hbmQgaXMgbm90IGluIG91ciBtZXRob2QgbWFwLCBpdCdzIGJlY2F1c2Ugd2VcbiAgICAgIC8vIGhhdmUgbm8gcGxhbnMgdG8gZXZlciBpbXBsZW1lbnQgaXRcbiAgICAgIGlmICghc3BlYy5jb21tYW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgICAgfVxuXG4gICAgICAvLyB3cmFwIHBhcmFtcyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChzcGVjLnBheWxvYWRQYXJhbXMgJiYgc3BlYy5wYXlsb2FkUGFyYW1zLndyYXApIHtcbiAgICAgICAganNvbk9iaiA9IHdyYXBQYXJhbXMoc3BlYy5wYXlsb2FkUGFyYW1zLCBqc29uT2JqKTtcbiAgICAgIH1cblxuICAgICAgLy8gdW53cmFwIHBhcmFtcyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChzcGVjLnBheWxvYWRQYXJhbXMgJiYgc3BlYy5wYXlsb2FkUGFyYW1zLnVud3JhcCkge1xuICAgICAgICBqc29uT2JqID0gdW53cmFwUGFyYW1zKHNwZWMucGF5bG9hZFBhcmFtcywganNvbk9iaik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcGVjLmNvbW1hbmQgPT09IENSRUFURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGRldGVybWluZSBwcm90b2NvbCBieSBzZXNzaW9uIGNyZWF0aW9uIGFyZ3MsIHNvIHdlIGNhbiB0aHJvdyBhXG4gICAgICAgIC8vIHByb3Blcmx5IGZvcm1hdHRlZCBlcnJvciBpZiBhcmd1bWVudHMgdmFsaWRhdGlvbiBmYWlsc1xuICAgICAgICBjdXJyZW50UHJvdG9jb2wgPSBkZXRlcm1pbmVQcm90b2NvbCguLi5tYWtlQXJncyhyZXEucGFyYW1zLCBqc29uT2JqLCBzcGVjLnBheWxvYWRQYXJhbXMgfHwge30pKTtcbiAgICAgIH1cblxuICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGpzb24gcGF5bG9hZCBjb25mb3JtcyB0byB0aGUgc3BlY1xuICAgICAgY2hlY2tQYXJhbXMoc3BlYy5wYXlsb2FkUGFyYW1zLCBqc29uT2JqLCBjdXJyZW50UHJvdG9jb2wpO1xuXG4gICAgICAvLyB0dXJuIHRoZSBjb21tYW5kIGFuZCBqc29uIHBheWxvYWQgaW50byBhbiBhcmd1bWVudCBsaXN0IGZvclxuICAgICAgLy8gdGhlIGRyaXZlciBtZXRob2RzXG4gICAgICBsZXQgYXJncyA9IG1ha2VBcmdzKHJlcS5wYXJhbXMsIGpzb25PYmosIHNwZWMucGF5bG9hZFBhcmFtcyB8fCB7fSwgY3VycmVudFByb3RvY29sKTtcbiAgICAgIGxldCBkcml2ZXJSZXM7XG4gICAgICAvLyB2YWxpZGF0ZSBjb21tYW5kIGFyZ3MgYWNjb3JkaW5nIHRvIE1KU09OV1BcbiAgICAgIGlmICh2YWxpZGF0b3JzW3NwZWMuY29tbWFuZF0pIHtcbiAgICAgICAgdmFsaWRhdG9yc1tzcGVjLmNvbW1hbmRdKC4uLmFyZ3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBydW4gdGhlIGRyaXZlciBjb21tYW5kIHdyYXBwZWQgaW5zaWRlIHRoZSBhcmd1bWVudCB2YWxpZGF0b3JzXG4gICAgICBTRVNTSU9OU19DQUNIRS5nZXRMb2dnZXIocmVxLnBhcmFtcy5zZXNzaW9uSWQsIGN1cnJlbnRQcm90b2NvbCkuZGVidWcoYENhbGxpbmcgYCArXG4gICAgICAgIGAke2RyaXZlci5jb25zdHJ1Y3Rvci5uYW1lfS4ke3NwZWMuY29tbWFuZH0oKSB3aXRoIGFyZ3M6IGAgK1xuICAgICAgICBfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGFyZ3MpLCB7bGVuZ3RoOiBNQVhfTE9HX0JPRFlfTEVOR1RIfSkpO1xuXG4gICAgICBpZiAoZGlkUGx1Z2luT3ZlcnJpZGVQcm94eSkge1xuICAgICAgICAvLyBUT0RPIGZvciBub3cgd2UgYWRkIHRoaXMgaW5mb3JtYXRpb24gb24gdGhlIGFyZ3MgbGlzdCwgYnV0IHRoYXQncyBtaXhpbmcgcHVycG9zZXMgaGVyZS5cbiAgICAgICAgLy8gV2UgcmVhbGx5IHNob3VsZCBhZGQgYW5vdGhlciAnb3B0aW9ucycgcGFyYW1ldGVyIHRvICdleGVjdXRlQ29tbWFuZCcsIGJ1dCB0aGlzIHdvdWxkIGJlXG4gICAgICAgIC8vIGEgYnJlYWtpbmcgY2hhbmdlIGZvciBhbGwgZHJpdmVycyBzbyB3b3VsZCBuZWVkIHRvIGJlIGhhbmRsZWQgY2FyZWZ1bGx5LlxuICAgICAgICBhcmdzLnB1c2goe3JlcUZvclByb3h5OiByZXF9KTtcbiAgICAgIH1cblxuICAgICAgZHJpdmVyUmVzID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVDb21tYW5kKHNwZWMuY29tbWFuZCwgLi4uYXJncyk7XG5cbiAgICAgIC8vIEdldCB0aGUgcHJvdG9jb2wgYWZ0ZXIgZXhlY3V0ZUNvbW1hbmRcbiAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKSB8fCBjdXJyZW50UHJvdG9jb2w7XG5cbiAgICAgIC8vIElmIGBleGVjdXRlQ29tbWFuZGAgd2FzIG92ZXJyaWRkZW4gYW5kIHRoZSBtZXRob2QgcmV0dXJucyBhbiBvYmplY3RcbiAgICAgIC8vIHdpdGggYSBwcm90b2NvbCBhbmQgdmFsdWUvZXJyb3IgcHJvcGVydHksIHJlLWFzc2lnbiB0aGUgcHJvdG9jb2xcbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZHJpdmVyUmVzKSAmJiBfLmhhcyhkcml2ZXJSZXMsICdwcm90b2NvbCcpKSB7XG4gICAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGRyaXZlclJlcy5wcm90b2NvbCB8fCBjdXJyZW50UHJvdG9jb2w7XG4gICAgICAgIGlmIChkcml2ZXJSZXMuZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBkcml2ZXJSZXMuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZHJpdmVyUmVzID0gZHJpdmVyUmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyB1bnBhY2sgY3JlYXRlU2Vzc2lvbiByZXNwb25zZVxuICAgICAgaWYgKHNwZWMuY29tbWFuZCA9PT0gQ1JFQVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgICBuZXdTZXNzaW9uSWQgPSBkcml2ZXJSZXNbMF07XG4gICAgICAgIFNFU1NJT05TX0NBQ0hFLnB1dFNlc3Npb24obmV3U2Vzc2lvbklkLCBjdXJyZW50UHJvdG9jb2wpO1xuICAgICAgICBTRVNTSU9OU19DQUNIRS5nZXRMb2dnZXIobmV3U2Vzc2lvbklkLCBjdXJyZW50UHJvdG9jb2wpXG4gICAgICAgICAgLmRlYnVnKGBDYWNoZWQgdGhlIHByb3RvY29sIHZhbHVlICcke2N1cnJlbnRQcm90b2NvbH0nIGZvciB0aGUgbmV3IHNlc3Npb24gJHtuZXdTZXNzaW9uSWR9YCk7XG4gICAgICAgIGlmIChjdXJyZW50UHJvdG9jb2wgPT09IFBST1RPQ09MUy5NSlNPTldQKSB7XG4gICAgICAgICAgZHJpdmVyUmVzID0gZHJpdmVyUmVzWzFdO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQykge1xuICAgICAgICAgIGRyaXZlclJlcyA9IHtcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogZHJpdmVyUmVzWzFdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZHJpdmVyUmVzID0gZm9ybWF0UmVzcG9uc2VWYWx1ZShkcml2ZXJSZXMpO1xuXG4gICAgICAvLyBkZWxldGUgc2hvdWxkIG5vdCByZXR1cm4gYW55dGhpbmcgZXZlbiBpZiBzdWNjZXNzZnVsXG4gICAgICBpZiAoc3BlYy5jb21tYW5kID09PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICAgIFNFU1NJT05TX0NBQ0hFLmdldExvZ2dlcihyZXEucGFyYW1zLnNlc3Npb25JZCwgY3VycmVudFByb3RvY29sKVxuICAgICAgICAgIC5kZWJ1ZyhgUmVjZWl2ZWQgcmVzcG9uc2U6ICR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShkcml2ZXJSZXMpLCB7bGVuZ3RoOiBNQVhfTE9HX0JPRFlfTEVOR1RIfSl9YCk7XG4gICAgICAgIFNFU1NJT05TX0NBQ0hFLmdldExvZ2dlcihyZXEucGFyYW1zLnNlc3Npb25JZCwgY3VycmVudFByb3RvY29sKS5kZWJ1ZygnQnV0IGRlbGV0aW5nIHNlc3Npb24sIHNvIG5vdCByZXR1cm5pbmcnKTtcbiAgICAgICAgZHJpdmVyUmVzID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHN0YXR1cyBpcyBub3QgMCwgIHRocm93IHRoZSBhcHByb3ByaWF0ZSBlcnJvciBmb3Igc3RhdHVzIGNvZGUuXG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZShkcml2ZXJSZXMpKSB7XG4gICAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKGRyaXZlclJlcy5zdGF0dXMpICYmICFpc05hTihkcml2ZXJSZXMuc3RhdHVzKSAmJiBwYXJzZUludChkcml2ZXJSZXMuc3RhdHVzLCAxMCkgIT09IDApIHtcbiAgICAgICAgICB0aHJvdyBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZShkcml2ZXJSZXMuc3RhdHVzLCBkcml2ZXJSZXMudmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChkcml2ZXJSZXMudmFsdWUpICYmIGRyaXZlclJlcy52YWx1ZS5lcnJvcikge1xuICAgICAgICAgIHRocm93IGVycm9yRnJvbVczQ0pzb25Db2RlKGRyaXZlclJlcy52YWx1ZS5lcnJvciwgZHJpdmVyUmVzLnZhbHVlLm1lc3NhZ2UsIGRyaXZlclJlcy52YWx1ZS5zdGFja3RyYWNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBodHRwUmVzQm9keS52YWx1ZSA9IGRyaXZlclJlcztcbiAgICAgIFNFU1NJT05TX0NBQ0hFLmdldExvZ2dlcihyZXEucGFyYW1zLnNlc3Npb25JZCB8fCBuZXdTZXNzaW9uSWQsIGN1cnJlbnRQcm90b2NvbCkuZGVidWcoYFJlc3BvbmRpbmcgYCArXG4gICAgICAgIGB0byBjbGllbnQgd2l0aCBkcml2ZXIuJHtzcGVjLmNvbW1hbmR9KCkgcmVzdWx0OiAke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoZHJpdmVyUmVzKSwge2xlbmd0aDogTUFYX0xPR19CT0RZX0xFTkdUSH0pfWApO1xuXG4gICAgICBpZiAoc3BlYy5jb21tYW5kID09PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8ga2VlcCB0aGUgbG9nZ2VyIGluc3RhbmNlIGluIHRoZSBjYWNoZVxuICAgICAgICAvLyBhZnRlciB0aGUgc2Vzc2lvbiBpcyBkZWxldGVkLCBiZWNhdXNlIGl0IGNvbnRhaW5zIHRoZSBsb2dnaW5nIGhpc3RvcnlcbiAgICAgICAgLy8gYW5kIGNvbnN1bWVzIHRoZSBtZW1vcnlcbiAgICAgICAgU0VTU0lPTlNfQ0FDSEUucmVzZXRMb2dnZXIocmVxLnBhcmFtcy5zZXNzaW9uSWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gaWYgYW55dGhpbmcgZ29lcyB3cm9uZywgZmlndXJlIG91dCB3aGF0IG91ciByZXNwb25zZSBzaG91bGQgYmVcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGVycm9yIHRoYXQgd2UgZW5jb3VudGVyZWRcbiAgICAgIGxldCBhY3R1YWxFcnIgPSBlcnI7XG5cbiAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGN1cnJlbnRQcm90b2NvbCB8fCBleHRyYWN0UHJvdG9jb2woZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCB8fCBuZXdTZXNzaW9uSWQpO1xuXG4gICAgICBsZXQgZXJyTXNnID0gZXJyLnN0YWNrdHJhY2UgfHwgZXJyLnN0YWNrO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKGVyck1zZywgZXJyLm1lc3NhZ2UpKSB7XG4gICAgICAgIC8vIGlmIHRoZSBtZXNzYWdlIGhhcyBtb3JlIGluZm9ybWF0aW9uLCBhZGQgaXQuIGJ1dCBvZnRlbiB0aGUgbWVzc2FnZVxuICAgICAgICAvLyBpcyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgc3RhY2sgdHJhY2VcbiAgICAgICAgZXJyTXNnID0gYCR7ZXJyLm1lc3NhZ2V9JHtlcnJNc2cgPyAoJ1xcbicgKyBlcnJNc2cpIDogJyd9YDtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Qcm94eVJlcXVlc3RFcnJvcikpIHtcbiAgICAgICAgYWN0dWFsRXJyID0gZXJyLmdldEFjdHVhbEVycm9yKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBTRVNTSU9OU19DQUNIRS5nZXRMb2dnZXIocmVxLnBhcmFtcy5zZXNzaW9uSWQgfHwgbmV3U2Vzc2lvbklkLCBjdXJyZW50UHJvdG9jb2wpXG4gICAgICAgICAgLmRlYnVnKGBFbmNvdW50ZXJlZCBpbnRlcm5hbCBlcnJvciBydW5uaW5nIGNvbW1hbmQ6ICR7ZXJyTXNnfWApO1xuICAgICAgfVxuXG4gICAgICBbaHR0cFN0YXR1cywgaHR0cFJlc0JvZHldID0gZ2V0UmVzcG9uc2VGb3JXM0NFcnJvcihhY3R1YWxFcnIpO1xuICAgIH1cblxuICAgIC8vIGRlY29kZSB0aGUgcmVzcG9uc2UsIHdoaWNoIGlzIGVpdGhlciBhIHN0cmluZyBvciBqc29uXG4gICAgaWYgKF8uaXNTdHJpbmcoaHR0cFJlc0JvZHkpKSB7XG4gICAgICByZXMuc3RhdHVzKGh0dHBTdGF0dXMpLnNlbmQoaHR0cFJlc0JvZHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV3U2Vzc2lvbklkKSB7XG4gICAgICAgIGlmIChjdXJyZW50UHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0MpIHtcbiAgICAgICAgICBodHRwUmVzQm9keS52YWx1ZS5zZXNzaW9uSWQgPSBuZXdTZXNzaW9uSWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaHR0cFJlc0JvZHkuc2Vzc2lvbklkID0gbmV3U2Vzc2lvbklkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBodHRwUmVzQm9keS5zZXNzaW9uSWQgPSByZXEucGFyYW1zLnNlc3Npb25JZCB8fCBudWxsO1xuICAgICAgfVxuICAgICAgLy8gRG9uJ3QgaW5jbHVkZSBzZXNzaW9uSWQgaW4gVzNDIHJlc3BvbnNlc1xuICAgICAgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQykge1xuICAgICAgICBkZWxldGUgaHR0cFJlc0JvZHkuc2Vzc2lvbklkO1xuICAgICAgfVxuXG4gICAgICBodHRwUmVzQm9keSA9IGZvcm1hdFN0YXR1cyhodHRwUmVzQm9keSk7XG4gICAgICByZXMuc3RhdHVzKGh0dHBTdGF0dXMpLmpzb24oaHR0cFJlc0JvZHkpO1xuICAgIH1cbiAgfTtcbiAgLy8gYWRkIHRoZSBtZXRob2QgdG8gdGhlIGFwcFxuICBhcHBbbWV0aG9kLnRvTG93ZXJDYXNlKCldKHBhdGgsIChyZXEsIHJlcykgPT4ge1xuICAgIEIucmVzb2x2ZShhc3luY0hhbmRsZXIocmVxLCByZXMpKS5kb25lKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkcml2ZXJTaG91bGREb0p3cFByb3h5IChkcml2ZXIsIHJlcSwgY29tbWFuZCkge1xuICAvLyBkcml2ZXJzIG5lZWQgdG8gZXhwbGljaXRseSBzYXkgd2hlbiB0aGUgcHJveHkgaXMgYWN0aXZlXG4gIGlmICghZHJpdmVyLnByb3h5QWN0aXZlKHJlcS5wYXJhbXMuc2Vzc2lvbklkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHdlIHNob3VsZCBuZXZlciBwcm94eSBkZWxldGVTZXNzaW9uIGJlY2F1c2Ugd2UgbmVlZCB0byBnaXZlIHRoZSBjb250YWluaW5nXG4gIC8vIGRyaXZlciBhbiBvcHBvcnR1bml0eSB0byBjbGVhbiBpdHNlbGYgdXBcbiAgaWYgKGNvbW1hbmQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyB2YWxpZGF0ZSBhdm9pZGFuY2Ugc2NoZW1hLCBhbmQgc2F5IHdlIHNob3VsZG4ndCBwcm94eSBpZiBhbnl0aGluZyBpbiB0aGVcbiAgLy8gYXZvaWQgbGlzdCBtYXRjaGVzIG91ciByZXFcbiAgaWYgKGRyaXZlci5wcm94eVJvdXRlSXNBdm9pZGVkKHJlcS5wYXJhbXMuc2Vzc2lvbklkLCByZXEubWV0aG9kLCByZXEub3JpZ2luYWxVcmwsIHJlcS5ib2R5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb0p3cFByb3h5IChkcml2ZXIsIHJlcSwgcmVzKSB7XG4gIFNFU1NJT05TX0NBQ0hFLmdldExvZ2dlcihyZXEucGFyYW1zLnNlc3Npb25JZCwgZXh0cmFjdFByb3RvY29sKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpKVxuICAgIC5pbmZvKCdEcml2ZXIgcHJveHkgYWN0aXZlLCBwYXNzaW5nIHJlcXVlc3Qgb24gdmlhIEhUVFAgcHJveHknKTtcblxuICAvLyBjaGVjayB0aGF0IHRoZSBpbm5lciBkcml2ZXIgaGFzIGEgcHJveHkgZnVuY3Rpb25cbiAgaWYgKCFkcml2ZXIuY2FuUHJveHkocmVxLnBhcmFtcy5zZXNzaW9uSWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gcHJveHkgdG8gYSBzZXJ2ZXIgYnV0IHRoZSBkcml2ZXIgaXMgdW5hYmxlIHRvIHByb3h5Jyk7XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCBkcml2ZXIuZXhlY3V0ZUNvbW1hbmQoJ3Byb3h5UmVxUmVzJywgcmVxLCByZXMsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlByb3h5UmVxdWVzdEVycm9yKSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwcm94eS4gUHJveHkgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG5cblxuZXhwb3J0IHtcbiAgUHJvdG9jb2wsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgaXNTZXNzaW9uQ29tbWFuZCxcbiAgZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSwgZGV0ZXJtaW5lUHJvdG9jb2wsIENSRUFURV9TRVNTSU9OX0NPTU1BTkQsXG4gIERFTEVURV9TRVNTSU9OX0NPTU1BTkQsIEdFVF9TVEFUVVNfQ09NTUFORCxcbn07XG4iXSwiZmlsZSI6ImxpYi9wcm90b2NvbC9wcm90b2NvbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -117,6 +117,10 @@ describe('helpers', function () {
|
|
|
117
117
|
sandbox.stub(_support.zip, 'extractAllTo').resolves();
|
|
118
118
|
sandbox.stub(_support.zip, 'assertValidZip').resolves();
|
|
119
119
|
sandbox.stub(_support.fs, 'mv').resolves();
|
|
120
|
+
sandbox.stub(_support.fs, 'stat').resolves({
|
|
121
|
+
isFile: () => true,
|
|
122
|
+
isDirectory: () => false
|
|
123
|
+
});
|
|
120
124
|
sandbox.stub(_support.fs, 'exists').resolves(true);
|
|
121
125
|
sandbox.stub(_support.fs, 'hash').resolves('0xDEADBEEF');
|
|
122
126
|
sandbox.stub(_support.fs, 'glob').resolves(['/path/to/an.apk']);
|
|
@@ -146,4 +150,4 @@ describe('parseCapsArray', function () {
|
|
|
146
150
|
});require('source-map-support').install();
|
|
147
151
|
|
|
148
152
|
|
|
149
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9oZWxwZXJzLXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaXQiLCJzaG91bGQiLCJiZSIsInRydWUiLCJmYWxzZSIsImVxbCIsInVuZGVmaW5lZCIsImZvckVhY2giLCJpdGVtIiwiZXF1YWwiLCJpbnB1dCIsImhlbGxvIiwid29ybGQiLCJmb28iLCJleHBlY3RlZE91dHB1dCIsIkZPTyIsImRlZXAiLCJzYW5kYm94IiwiYmVmb3JlRWFjaCIsInNpbm9uIiwiY3JlYXRlU2FuZGJveCIsInN0dWIiLCJ6aXAiLCJyZXNvbHZlcyIsImZzIiwidGVtcERpciIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJleHRyYWN0QWxsVG8iLCJnZXRDYWxsIiwibGFzdEFyZyIsInVzZVN5c3RlbVVuemlwIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFHQUEsUUFBUSxDQUFDLFNBQUQsRUFBWSxZQUFZO0FBQzlCQSxFQUFBQSxRQUFRLENBQUMsb0JBQUQsRUFBdUIsWUFBWTtBQUN6Q0MsSUFBQUEsRUFBRSxDQUFDLG9DQUFELEVBQXVDLFlBQVk7QUFDbkQsc0NBQWtCLG1CQUFsQixFQUF1Q0MsTUFBdkMsQ0FBOENDLEVBQTlDLENBQWlEQyxJQUFqRDtBQUNELEtBRkMsQ0FBRjtBQUdBSCxJQUFBQSxFQUFFLENBQUMsK0NBQUQsRUFBa0QsWUFBWTtBQUM5RCxzQ0FBa0IsS0FBbEIsRUFBeUJDLE1BQXpCLENBQWdDQyxFQUFoQyxDQUFtQ0UsS0FBbkM7QUFDQSxzQ0FBa0IsaUJBQWxCLEVBQXFDSCxNQUFyQyxDQUE0Q0MsRUFBNUMsQ0FBK0NFLEtBQS9DO0FBQ0Esc0NBQWtCLGlCQUFsQixFQUFxQ0gsTUFBckMsQ0FBNENDLEVBQTVDLENBQStDRSxLQUEvQztBQUNELEtBSkMsQ0FBRjtBQUtELEdBVE8sQ0FBUjtBQVdBTCxFQUFBQSxRQUFRLENBQUMsZ0JBQUQsRUFBbUIsWUFBWTtBQUNyQ0MsSUFBQUEsRUFBRSxDQUFDLG1DQUFELEVBQXNDLFlBQVk7QUFDbEQsa0NBQWM7QUFBQyxlQUFPO0FBQVIsT0FBZCxFQUFzQyxLQUF0QyxFQUE2QyxLQUE3QyxFQUFvREMsTUFBcEQsQ0FBMkRJLEdBQTNELENBQStEO0FBQUMsZUFBTyxhQUFSO0FBQXVCLGVBQU87QUFBOUIsT0FBL0Q7QUFDRCxLQUZDLENBQUY7QUFHQUwsSUFBQUEsRUFBRSxDQUFDLG9EQUFELEVBQXVELFlBQVk7QUFDbkUsa0NBQWM7QUFBQyxlQUFPO0FBQUMsaUJBQU87QUFBUjtBQUFSLE9BQWQsRUFBK0MsS0FBL0MsRUFBc0QsS0FBdEQsRUFBNkRDLE1BQTdELENBQW9FSSxHQUFwRSxDQUF3RTtBQUFDLGVBQU87QUFBQyxpQkFBTyxhQUFSO0FBQXVCLGlCQUFPO0FBQTlCO0FBQVIsT0FBeEU7QUFDRCxLQUZDLENBQUY7QUFHQUwsSUFBQUEsRUFBRSxDQUFDLGlEQUFELEVBQW9ELFlBQVk7QUFDaEUsa0NBQWMsQ0FDWjtBQUFDLGVBQU87QUFBQyxpQkFBTztBQUFSO0FBQVIsT0FEWSxFQUVaO0FBQUMsZUFBTztBQUFSLE9BRlksQ0FBZCxFQUdHLEtBSEgsRUFHVSxLQUhWLEVBR2lCQyxNQUhqQixDQUd3QkksR0FIeEIsQ0FHNEIsQ0FDMUI7QUFBQyxlQUFPO0FBQUMsaUJBQU8sYUFBUjtBQUF1QixpQkFBTztBQUE5QjtBQUFSLE9BRDBCLEVBRTFCO0FBQUMsZUFBTyxhQUFSO0FBQXVCLGVBQU87QUFBOUIsT0FGMEIsQ0FINUI7QUFPRCxLQVJDLENBQUY7QUFTQUwsSUFBQUEsRUFBRSxDQUFDLDRCQUFELEVBQStCLFlBQVk7QUFDM0Msa0NBQWM7QUFDWixrQkFBVTtBQUNSLGlCQUFPO0FBREMsU0FERTtBQUlaLGtCQUFVO0FBQ1IsaUJBQU87QUFEQztBQUpFLE9BQWQsRUFPRyxLQVBILEVBT1UsS0FQVixFQU9pQkMsTUFQakIsQ0FPd0JJLEdBUHhCLENBTzRCO0FBQzFCLGtCQUFVO0FBQ1IsaUJBQU8sYUFEQztBQUVSLGlCQUFPO0FBRkMsU0FEZ0I7QUFLMUIsa0JBQVU7QUFDUixpQkFBTyxhQURDO0FBRVIsaUJBQU87QUFGQztBQUxnQixPQVA1QjtBQWlCRCxLQWxCQyxDQUFGO0FBbUJBTCxJQUFBQSxFQUFFLENBQUMsc0NBQUQsRUFBeUMsWUFBWTtBQUNyRCxPQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBQyxDQUFSLEVBQVcsSUFBWCxFQUFpQixLQUFqQixFQUF3QixJQUF4QixFQUE4Qk0sU0FBOUIsRUFBeUMsRUFBekMsRUFBNkMsYUFBN0MsRUFBNERDLE9BQTVELENBQXFFQyxJQUFELElBQVU7QUFDNUVQLFFBQUFBLE1BQU0sQ0FBQ1EsS0FBUCxDQUFhLDRCQUFjRCxJQUFkLENBQWIsRUFBa0NBLElBQWxDO0FBQ0QsT0FGRDtBQUdELEtBSkMsQ0FBRjtBQUtBUixJQUFBQSxFQUFFLENBQUMsMkNBQUQsRUFBOEMsWUFBWTtBQUMxRCxZQUFNVSxLQUFLLEdBQUcsQ0FDWjtBQUFDLGVBQU87QUFBUixPQURZLEVBRVo7QUFDRUMsUUFBQUEsS0FBSyxFQUFFO0FBQ0xDLFVBQUFBLEtBQUssRUFBRTtBQUNMLG1CQUFPO0FBREY7QUFERixTQURUO0FBTUVDLFFBQUFBLEdBQUcsRUFBRTtBQU5QLE9BRlksRUFVWixLQVZZLEVBV1osSUFYWSxFQVlaLENBWlksQ0FBZDtBQWNBLFlBQU1DLGNBQWMsR0FBRyxDQUNyQjtBQUFDLGVBQU8sS0FBUjtBQUFlLGVBQU87QUFBdEIsT0FEcUIsRUFFckI7QUFDRUgsUUFBQUEsS0FBSyxFQUFFO0FBQ0xDLFVBQUFBLEtBQUssRUFBRTtBQUNMLG1CQUFPLEtBREY7QUFFTCxtQkFBTztBQUZGO0FBREYsU0FEVDtBQU9FQyxRQUFBQSxHQUFHLEVBQUUsTUFQUDtBQVFFRSxRQUFBQSxHQUFHLEVBQUU7QUFSUCxPQUZxQixFQVlyQixLQVpxQixFQWFyQixJQWJxQixFQWNyQixDQWRxQixDQUF2QjtBQWdCQSxrQ0FBY0wsS0FBZCxFQUFxQixLQUFyQixFQUE0QixLQUE1QixFQUFtQ1QsTUFBbkMsQ0FBMENlLElBQTFDLENBQStDUCxLQUEvQyxDQUFxREssY0FBckQ7QUFDRCxLQWhDQyxDQUFGO0FBaUNELEdBekVPLENBQVI7QUEyRUFmLEVBQUFBLFFBQVEsQ0FBQyxlQUFELEVBQWtCLFlBQVk7QUFDcEMsUUFBSWtCLE9BQUo7QUFFQUMsSUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDckJELE1BQUFBLE9BQU8sR0FBR0UsZUFBTUMsYUFBTixFQUFWO0FBQ0FILE1BQUFBLE9BQU8sQ0FBQ0ksSUFBUixDQUFhQyxZQUFiLEVBQWtCLGNBQWxCLEVBQWtDQyxRQUFsQztBQUNBTixNQUFBQSxPQUFPLENBQUNJLElBQVIsQ0FBYUMsWUFBYixFQUFrQixnQkFBbEIsRUFBb0NDLFFBQXBDO0FBQ0FOLE1BQUFBLE9BQU8sQ0FBQ0ksSUFBUixDQUFhRyxXQUFiLEVBQWlCLElBQWpCLEVBQXVCRCxRQUF2QjtBQUNBTixNQUFBQSxPQUFPLENBQUNJLElBQVIsQ0FBYUcsV0FBYixFQUFpQixRQUFqQixFQUEyQkQsUUFBM0IsQ0FBb0MsSUFBcEM7QUFDQU4sTUFBQUEsT0FBTyxDQUFDSSxJQUFSLENBQWFHLFdBQWIsRUFBaUIsTUFBakIsRUFBeUJELFFBQXpCLENBQWtDLFlBQWxDO0FBQ0FOLE1BQUFBLE9BQU8sQ0FBQ0ksSUFBUixDQUFhRyxXQUFiLEVBQWlCLE1BQWpCLEVBQXlCRCxRQUF6QixDQUFrQyxDQUFDLGlCQUFELENBQWxDO0FBQ0FOLE1BQUFBLE9BQU8sQ0FBQ0ksSUFBUixDQUFhRyxXQUFiLEVBQWlCLFFBQWpCLEVBQTJCRCxRQUEzQjtBQUNBTixNQUFBQSxPQUFPLENBQUNJLElBQVIsQ0FBYUksZ0JBQWIsRUFBc0IsU0FBdEIsRUFBaUNGLFFBQWpDLENBQTBDLFdBQTFDO0FBQ0QsS0FWUyxDQUFWO0FBWUFHLElBQUFBLFNBQVMsQ0FBQyxZQUFZO0FBQ3BCVCxNQUFBQSxPQUFPLENBQUNVLE9BQVI7QUFDRCxLQUZRLENBQVQ7QUFJQTNCLElBQUFBLEVBQUUsQ0FBQyw4REFBRCxFQUFpRSxrQkFBa0I7QUFDbkYsWUFBTSwyQkFBYSxxQkFBYixFQUFvQyxNQUFwQyxDQUFOO0FBQ0FzQixtQkFBSU0sWUFBSixDQUFpQkMsT0FBakIsQ0FBeUIsQ0FBekIsRUFBNEJDLE9BQTVCLENBQW9DQyxjQUFwQyxDQUFtRDlCLE1BQW5ELENBQTBEQyxFQUExRCxDQUE2REMsSUFBN0Q7QUFDRCxLQUhDLENBQUY7QUFJRCxHQXZCTyxDQUFSO0FBd0JELENBL0dPLENBQVI7QUFpSEFKLFFBQVEsQ0FBQyxnQkFBRCxFQUFtQixZQUFZO0FBQ3JDQyxFQUFBQSxFQUFFLENBQUMsZ0NBQUQsRUFBbUMsWUFBWTtBQUMvQyxpQ0FBZSxpQkFBZixFQUFrQ0MsTUFBbEMsQ0FBeUNJLEdBQXpDLENBQTZDLENBQUMsaUJBQUQsQ0FBN0M7QUFDRCxHQUZDLENBQUY7QUFHQUwsRUFBQUEsRUFBRSxDQUFDLHlDQUFELEVBQTRDLFlBQVk7QUFDeEQsaUNBQWUscUJBQWYsRUFBc0NDLE1BQXRDLENBQTZDSSxHQUE3QyxDQUFpRCxDQUFDLGlCQUFELENBQWpEO0FBQ0EsaUNBQWUsd0NBQWYsRUFBeURKLE1BQXpELENBQWdFSSxHQUFoRSxDQUFvRSxDQUNsRSxpQkFEa0UsRUFFbEUsa0JBRmtFLENBQXBFO0FBSUQsR0FOQyxDQUFGO0FBT0FMLEVBQUFBLEVBQUUsQ0FBQyx1Q0FBRCxFQUEwQyxZQUFZO0FBQ3RELGlDQUFlLENBQUMsR0FBRCxFQUFNLEdBQU4sQ0FBZixFQUEyQkMsTUFBM0IsQ0FBa0NJLEdBQWxDLENBQXNDLENBQUMsR0FBRCxFQUFNLEdBQU4sQ0FBdEM7QUFDRCxHQUZDLENBQUY7QUFHRCxDQWRPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB6aXAsIGZzLCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGNvbmZpZ3VyZUFwcCwgaXNQYWNrYWdlT3JCdW5kbGUsIGR1cGxpY2F0ZUtleXMsIHBhcnNlQ2Fwc0FycmF5IH0gZnJvbSAnLi4vLi4vbGliL2Jhc2Vkcml2ZXIvaGVscGVycyc7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuXG5cbmRlc2NyaWJlKCdoZWxwZXJzJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnI2lzUGFja2FnZU9yQnVuZGxlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYWNjZXB0IHBhY2thZ2VzIGFuZCBidW5kbGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNQYWNrYWdlT3JCdW5kbGUoJ2lvLmFwcGl1bS50ZXN0YXBwJykuc2hvdWxkLmJlLnRydWU7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBub3QgYWNjZXB0IG5vbi1wYWNrYWdlcyBvciBub24tYnVuZGxlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzUGFja2FnZU9yQnVuZGxlKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICBpc1BhY2thZ2VPckJ1bmRsZSgnL3BhdGgvdG8vYW4uYXBwJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgaXNQYWNrYWdlT3JCdW5kbGUoJy9wYXRoL3RvL2FuLmFwaycpLnNob3VsZC5iZS5mYWxzZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJyNkdXBsaWNhdGVLZXlzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdHJhbnNsYXRlIGtleSBpbiBhbiBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkdXBsaWNhdGVLZXlzKHsnZm9vJzogJ2hlbGxvIHdvcmxkJ30sICdmb28nLCAnYmFyJykuc2hvdWxkLmVxbCh7J2Zvbyc6ICdoZWxsbyB3b3JsZCcsICdiYXInOiAnaGVsbG8gd29ybGQnfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0cmFuc2xhdGUga2V5IGluIGFuIG9iamVjdCB3aXRoaW4gYW4gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgZHVwbGljYXRlS2V5cyh7J2tleSc6IHsnZm9vJzogJ2hlbGxvIHdvcmxkJ319LCAnZm9vJywgJ2JhcicpLnNob3VsZC5lcWwoeydrZXknOiB7J2Zvbyc6ICdoZWxsbyB3b3JsZCcsICdiYXInOiAnaGVsbG8gd29ybGQnfX0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdHJhbnNsYXRlIGtleSBpbiBhbiBvYmplY3Qgd2l0aCBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGR1cGxpY2F0ZUtleXMoW1xuICAgICAgICB7J2tleSc6IHsnZm9vJzogJ2hlbGxvIHdvcmxkJ319LFxuICAgICAgICB7J2Zvbyc6ICdIRUxMTyBXT1JMRCd9XG4gICAgICBdLCAnZm9vJywgJ2JhcicpLnNob3VsZC5lcWwoW1xuICAgICAgICB7J2tleSc6IHsnZm9vJzogJ2hlbGxvIHdvcmxkJywgJ2Jhcic6ICdoZWxsbyB3b3JsZCd9fSxcbiAgICAgICAgeydmb28nOiAnSEVMTE8gV09STEQnLCAnYmFyJzogJ0hFTExPIFdPUkxEJ31cbiAgICAgIF0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZHVwbGljYXRlIGJvdGgga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGR1cGxpY2F0ZUtleXMoe1xuICAgICAgICAna2V5T25lJzoge1xuICAgICAgICAgICdmb28nOiAnaGVsbG8gd29ybGQnLFxuICAgICAgICB9LFxuICAgICAgICAna2V5VHdvJzoge1xuICAgICAgICAgICdiYXInOiAnSEVMTE8gV09STEQnLFxuICAgICAgICB9LFxuICAgICAgfSwgJ2ZvbycsICdiYXInKS5zaG91bGQuZXFsKHtcbiAgICAgICAgJ2tleU9uZSc6IHtcbiAgICAgICAgICAnZm9vJzogJ2hlbGxvIHdvcmxkJyxcbiAgICAgICAgICAnYmFyJzogJ2hlbGxvIHdvcmxkJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ2tleVR3byc6IHtcbiAgICAgICAgICAnYmFyJzogJ0hFTExPIFdPUkxEJyxcbiAgICAgICAgICAnZm9vJzogJ0hFTExPIFdPUkxEJyxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBub3QgZG8gYW55dGhpbmcgdG8gcHJpbWl0aXZlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFswLCAxLCAtMSwgdHJ1ZSwgZmFsc2UsIG51bGwsIHVuZGVmaW5lZCwgJycsICdIZWxsbyBXb3JsZCddLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGR1cGxpY2F0ZUtleXMoaXRlbSksIGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZW5hbWUga2V5cyBvbiBiaWcgY29tcGxleCBvYmplY3RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5wdXQgPSBbXG4gICAgICAgIHsnZm9vJzogJ2Jhcid9LFxuICAgICAgICB7XG4gICAgICAgICAgaGVsbG86IHtcbiAgICAgICAgICAgIHdvcmxkOiB7XG4gICAgICAgICAgICAgICdmb28nOiAnQkFSJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZvbzogJ2JhaHInXG4gICAgICAgIH0sXG4gICAgICAgICdmb28nLFxuICAgICAgICBudWxsLFxuICAgICAgICAwXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSBbXG4gICAgICAgIHsnZm9vJzogJ2JhcicsICdGT08nOiAnYmFyJ30sXG4gICAgICAgIHtcbiAgICAgICAgICBoZWxsbzoge1xuICAgICAgICAgICAgd29ybGQ6IHtcbiAgICAgICAgICAgICAgJ2Zvbyc6ICdCQVInLFxuICAgICAgICAgICAgICAnRk9PJzogJ0JBUicsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmb286ICdiYWhyJyxcbiAgICAgICAgICBGT086ICdiYWhyJ1xuICAgICAgICB9LFxuICAgICAgICAnZm9vJyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMFxuICAgICAgXTtcbiAgICAgIGR1cGxpY2F0ZUtleXMoaW5wdXQsICdmb28nLCAnRk9PJykuc2hvdWxkLmRlZXAuZXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnI2NvbmZpZ3VyZUFwcCcsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgc2FuZGJveDtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICAgIHNhbmRib3guc3R1Yih6aXAsICdleHRyYWN0QWxsVG8nKS5yZXNvbHZlcygpO1xuICAgICAgc2FuZGJveC5zdHViKHppcCwgJ2Fzc2VydFZhbGlkWmlwJykucmVzb2x2ZXMoKTtcbiAgICAgIHNhbmRib3guc3R1YihmcywgJ212JykucmVzb2x2ZXMoKTtcbiAgICAgIHNhbmRib3guc3R1YihmcywgJ2V4aXN0cycpLnJlc29sdmVzKHRydWUpO1xuICAgICAgc2FuZGJveC5zdHViKGZzLCAnaGFzaCcpLnJlc29sdmVzKCcweERFQURCRUVGJyk7XG4gICAgICBzYW5kYm94LnN0dWIoZnMsICdnbG9iJykucmVzb2x2ZXMoWycvcGF0aC90by9hbi5hcGsnXSk7XG4gICAgICBzYW5kYm94LnN0dWIoZnMsICdyaW1yYWYnKS5yZXNvbHZlcygpO1xuICAgICAgc2FuZGJveC5zdHViKHRlbXBEaXIsICdvcGVuRGlyJykucmVzb2x2ZXMoJy9zb21lL2RpcicpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIFwidXNlU3lzdGVtVW56aXBcIiBmbGFnIHRocm91Z2ggdG8gQGFwcGl1bS9zdXBwb3J0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgY29uZmlndXJlQXBwKCcvcGF0aC90by9hbi5hcGsuemlwJywgJy5hcGsnKTtcbiAgICAgIHppcC5leHRyYWN0QWxsVG8uZ2V0Q2FsbCgwKS5sYXN0QXJnLnVzZVN5c3RlbVVuemlwLnNob3VsZC5iZS50cnVlO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgncGFyc2VDYXBzQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdzaG91bGQgcGFyc2Ugc3RyaW5nIGludG8gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgcGFyc2VDYXBzQXJyYXkoJy90bXAvbXkvYXBwLnppcCcpLnNob3VsZC5lcWwoWycvdG1wL215L2FwcC56aXAnXSk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIHBhcnNlIGFycmF5IGFzIHN0cmluZyBpbnRvIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgIHBhcnNlQ2Fwc0FycmF5KCdbXCIvdG1wL215L2FwcC56aXBcIl0nKS5zaG91bGQuZXFsKFsnL3RtcC9teS9hcHAuemlwJ10pO1xuICAgIHBhcnNlQ2Fwc0FycmF5KCdbXCIvdG1wL215L2FwcC56aXBcIixcIi90bXAvbXkvYXBwMi56aXBcIl0nKS5zaG91bGQuZXFsKFtcbiAgICAgICcvdG1wL215L2FwcC56aXAnLFxuICAgICAgJy90bXAvbXkvYXBwMi56aXAnXG4gICAgXSk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRob3V0IGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICBwYXJzZUNhcHNBcnJheShbJ2EnLCAnYiddKS5zaG91bGQuZXFsKFsnYScsICdiJ10pO1xuICB9KTtcbn0pOyJdLCJmaWxlIjoidGVzdC9iYXNlZHJpdmVyL2hlbHBlcnMtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
153
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9oZWxwZXJzLXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaXQiLCJzaG91bGQiLCJiZSIsInRydWUiLCJmYWxzZSIsImVxbCIsInVuZGVmaW5lZCIsImZvckVhY2giLCJpdGVtIiwiZXF1YWwiLCJpbnB1dCIsImhlbGxvIiwid29ybGQiLCJmb28iLCJleHBlY3RlZE91dHB1dCIsIkZPTyIsImRlZXAiLCJzYW5kYm94IiwiYmVmb3JlRWFjaCIsInNpbm9uIiwiY3JlYXRlU2FuZGJveCIsInN0dWIiLCJ6aXAiLCJyZXNvbHZlcyIsImZzIiwiaXNGaWxlIiwiaXNEaXJlY3RvcnkiLCJ0ZW1wRGlyIiwiYWZ0ZXJFYWNoIiwicmVzdG9yZSIsImV4dHJhY3RBbGxUbyIsImdldENhbGwiLCJsYXN0QXJnIiwidXNlU3lzdGVtVW56aXAiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBQSxRQUFRLENBQUMsU0FBRCxFQUFZLFlBQVk7QUFDOUJBLEVBQUFBLFFBQVEsQ0FBQyxvQkFBRCxFQUF1QixZQUFZO0FBQ3pDQyxJQUFBQSxFQUFFLENBQUMsb0NBQUQsRUFBdUMsWUFBWTtBQUNuRCxzQ0FBa0IsbUJBQWxCLEVBQXVDQyxNQUF2QyxDQUE4Q0MsRUFBOUMsQ0FBaURDLElBQWpEO0FBQ0QsS0FGQyxDQUFGO0FBR0FILElBQUFBLEVBQUUsQ0FBQywrQ0FBRCxFQUFrRCxZQUFZO0FBQzlELHNDQUFrQixLQUFsQixFQUF5QkMsTUFBekIsQ0FBZ0NDLEVBQWhDLENBQW1DRSxLQUFuQztBQUNBLHNDQUFrQixpQkFBbEIsRUFBcUNILE1BQXJDLENBQTRDQyxFQUE1QyxDQUErQ0UsS0FBL0M7QUFDQSxzQ0FBa0IsaUJBQWxCLEVBQXFDSCxNQUFyQyxDQUE0Q0MsRUFBNUMsQ0FBK0NFLEtBQS9DO0FBQ0QsS0FKQyxDQUFGO0FBS0QsR0FUTyxDQUFSO0FBV0FMLEVBQUFBLFFBQVEsQ0FBQyxnQkFBRCxFQUFtQixZ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ZnMsIHRlbXBEaXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgY29uZmlndXJlQXBwLCBpc1BhY2thZ2VPckJ1bmRsZSwgZHVwbGljYXRlS2V5cywgcGFyc2VDYXBzQXJyYXkgfSBmcm9tICcuLi8uLi9saWIvYmFzZWRyaXZlci9oZWxwZXJzJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5cblxuZGVzY3JpYmUoJ2hlbHBlcnMnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCcjaXNQYWNrYWdlT3JCdW5kbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgcGFja2FnZXMgYW5kIGJ1bmRsZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1BhY2thZ2VPckJ1bmRsZSgnaW8uYXBwaXVtLnRlc3RhcHAnKS5zaG91bGQuYmUudHJ1ZTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIG5vdCBhY2NlcHQgbm9uLXBhY2thZ2VzIG9yIG5vbi1idW5kbGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNQYWNrYWdlT3JCdW5kbGUoJ2ZvbycpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgIGlzUGFja2FnZU9yQnVuZGxlKCcvcGF0aC90by9hbi5hcHAnKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICBpc1BhY2thZ2VPckJ1bmRsZSgnL3BhdGgvdG8vYW4uYXBrJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnI2R1cGxpY2F0ZUtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0cmFuc2xhdGUga2V5IGluIGFuIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGR1cGxpY2F0ZUtleXMoeydmb28nOiAnaGVsbG8gd29ybGQnfSwgJ2ZvbycsICdiYXInKS5zaG91bGQuZXFsKHsnZm9vJzogJ2hlbGxvIHdvcmxkJywgJ2Jhcic6ICdoZWxsbyB3b3JsZCd9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHRyYW5zbGF0ZSBrZXkgaW4gYW4gb2JqZWN0IHdpdGhpbiBhbiBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkdXBsaWNhdGVLZXlzKHsna2V5Jzogeydmb28nOiAnaGVsbG8gd29ybGQnfX0sICdmb28nLCAnYmFyJykuc2hvdWxkLmVxbCh7J2tleSc6IHsnZm9vJzogJ2hlbGxvIHdvcmxkJywgJ2Jhcic6ICdoZWxsbyB3b3JsZCd9fSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0cmFuc2xhdGUga2V5IGluIGFuIG9iamVjdCB3aXRoIGFuIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgZHVwbGljYXRlS2V5cyhbXG4gICAgICAgIHsna2V5Jzogeydmb28nOiAnaGVsbG8gd29ybGQnfX0sXG4gICAgICAgIHsnZm9vJzogJ0hFTExPIFdPUkxEJ31cbiAgICAgIF0sICdmb28nLCAnYmFyJykuc2hvdWxkLmVxbChbXG4gICAgICAgIHsna2V5Jzogeydmb28nOiAnaGVsbG8gd29ybGQnLCAnYmFyJzogJ2hlbGxvIHdvcmxkJ319LFxuICAgICAgICB7J2Zvbyc6ICdIRUxMTyBXT1JMRCcsICdiYXInOiAnSEVMTE8gV09STEQnfVxuICAgICAgXSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBkdXBsaWNhdGUgYm90aCBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZHVwbGljYXRlS2V5cyh7XG4gICAgICAgICdrZXlPbmUnOiB7XG4gICAgICAgICAgJ2Zvbyc6ICdoZWxsbyB3b3JsZCcsXG4gICAgICAgIH0sXG4gICAgICAgICdrZXlUd28nOiB7XG4gICAgICAgICAgJ2Jhcic6ICdIRUxMTyBXT1JMRCcsXG4gICAgICAgIH0sXG4gICAgICB9LCAnZm9vJywgJ2JhcicpLnNob3VsZC5lcWwoe1xuICAgICAgICAna2V5T25lJzoge1xuICAgICAgICAgICdmb28nOiAnaGVsbG8gd29ybGQnLFxuICAgICAgICAgICdiYXInOiAnaGVsbG8gd29ybGQnLFxuICAgICAgICB9LFxuICAgICAgICAna2V5VHdvJzoge1xuICAgICAgICAgICdiYXInOiAnSEVMTE8gV09STEQnLFxuICAgICAgICAgICdmb28nOiAnSEVMTE8gV09STEQnLFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIG5vdCBkbyBhbnl0aGluZyB0byBwcmltaXRpdmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgWzAsIDEsIC0xLCB0cnVlLCBmYWxzZSwgbnVsbCwgdW5kZWZpbmVkLCAnJywgJ0hlbGxvIFdvcmxkJ10uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBzaG91bGQuZXF1YWwoZHVwbGljYXRlS2V5cyhpdGVtKSwgaXRlbSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJlbmFtZSBrZXlzIG9uIGJpZyBjb21wbGV4IG9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IFtcbiAgICAgICAgeydmb28nOiAnYmFyJ30sXG4gICAgICAgIHtcbiAgICAgICAgICBoZWxsbzoge1xuICAgICAgICAgICAgd29ybGQ6IHtcbiAgICAgICAgICAgICAgJ2Zvbyc6ICdCQVInLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZm9vOiAnYmFocidcbiAgICAgICAgfSxcbiAgICAgICAgJ2ZvbycsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDBcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9IFtcbiAgICAgICAgeydmb28nOiAnYmFyJywgJ0ZPTyc6ICdiYXInfSxcbiAgICAgICAge1xuICAgICAgICAgIGhlbGxvOiB7XG4gICAgICAgICAgICB3b3JsZDoge1xuICAgICAgICAgICAgICAnZm9vJzogJ0JBUicsXG4gICAgICAgICAgICAgICdGT08nOiAnQkFSJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZvbzogJ2JhaHInLFxuICAgICAgICAgIEZPTzogJ2JhaHInXG4gICAgICAgIH0sXG4gICAgICAgICdmb28nLFxuICAgICAgICBudWxsLFxuICAgICAgICAwXG4gICAgICBdO1xuICAgICAgZHVwbGljYXRlS2V5cyhpbnB1dCwgJ2ZvbycsICdGT08nKS5zaG91bGQuZGVlcC5lcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcjY29uZmlndXJlQXBwJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBzYW5kYm94O1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgICAgc2FuZGJveC5zdHViKHppcCwgJ2V4dHJhY3RBbGxUbycpLnJlc29sdmVzKCk7XG4gICAgICBzYW5kYm94LnN0dWIoemlwLCAnYXNzZXJ0VmFsaWRaaXAnKS5yZXNvbHZlcygpO1xuICAgICAgc2FuZGJveC5zdHViKGZzLCAnbXYnKS5yZXNvbHZlcygpO1xuICAgICAgc2FuZGJveC5zdHViKGZzLCAnc3RhdCcpLnJlc29sdmVzKHtcbiAgICAgICAgaXNGaWxlOiAoKSA9PiB0cnVlLFxuICAgICAgICBpc0RpcmVjdG9yeTogKCkgPT4gZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIHNhbmRib3guc3R1YihmcywgJ2V4aXN0cycpLnJlc29sdmVzKHRydWUpO1xuICAgICAgc2FuZGJveC5zdHViKGZzLCAnaGFzaCcpLnJlc29sdmVzKCcweERFQURCRUVGJyk7XG4gICAgICBzYW5kYm94LnN0dWIoZnMsICdnbG9iJykucmVzb2x2ZXMoWycvcGF0aC90by9hbi5hcGsnXSk7XG4gICAgICBzYW5kYm94LnN0dWIoZnMsICdyaW1yYWYnKS5yZXNvbHZlcygpO1xuICAgICAgc2FuZGJveC5zdHViKHRlbXBEaXIsICdvcGVuRGlyJykucmVzb2x2ZXMoJy9zb21lL2RpcicpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIFwidXNlU3lzdGVtVW56aXBcIiBmbGFnIHRocm91Z2ggdG8gQGFwcGl1bS9zdXBwb3J0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgY29uZmlndXJlQXBwKCcvcGF0aC90by9hbi5hcGsuemlwJywgJy5hcGsnKTtcbiAgICAgIHppcC5leHRyYWN0QWxsVG8uZ2V0Q2FsbCgwKS5sYXN0QXJnLnVzZVN5c3RlbVVuemlwLnNob3VsZC5iZS50cnVlO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgncGFyc2VDYXBzQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdzaG91bGQgcGFyc2Ugc3RyaW5nIGludG8gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgcGFyc2VDYXBzQXJyYXkoJy90bXAvbXkvYXBwLnppcCcpLnNob3VsZC5lcWwoWycvdG1wL215L2FwcC56aXAnXSk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIHBhcnNlIGFycmF5IGFzIHN0cmluZyBpbnRvIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgIHBhcnNlQ2Fwc0FycmF5KCdbXCIvdG1wL215L2FwcC56aXBcIl0nKS5zaG91bGQuZXFsKFsnL3RtcC9teS9hcHAuemlwJ10pO1xuICAgIHBhcnNlQ2Fwc0FycmF5KCdbXCIvdG1wL215L2FwcC56aXBcIixcIi90bXAvbXkvYXBwMi56aXBcIl0nKS5zaG91bGQuZXFsKFtcbiAgICAgICcvdG1wL215L2FwcC56aXAnLFxuICAgICAgJy90bXAvbXkvYXBwMi56aXAnXG4gICAgXSk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRob3V0IGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICBwYXJzZUNhcHNBcnJheShbJ2EnLCAnYiddKS5zaG91bGQuZXFsKFsnYScsICdiJ10pO1xuICB9KTtcbn0pOyJdLCJmaWxlIjoidGVzdC9iYXNlZHJpdmVyL2hlbHBlcnMtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -21,7 +21,6 @@ describe('proxy', function () {
|
|
|
21
21
|
it('should proxy status straight', async function () {
|
|
22
22
|
let [res, resBody] = await jwproxy.proxy('/status', 'GET');
|
|
23
23
|
res.statusCode.should.equal(200);
|
|
24
|
-
resBody.status.should.equal(0);
|
|
25
24
|
resBody.value.should.equal(`I'm fine`);
|
|
26
25
|
});
|
|
27
26
|
it('should proxy status as command', async function () {
|
|
@@ -59,4 +58,4 @@ describe('proxy', function () {
|
|
|
59
58
|
});require('source-map-support').install();
|
|
60
59
|
|
|
61
60
|
|
|
62
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvanNvbndwLXByb3h5L3Byb3h5LWUyZS1zcGVjcy5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImp3cHJveHkiLCJKV1Byb3h5IiwiYmFzZVNlcnZlciIsImJlZm9yZSIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsIkZha2VEcml2ZXIiLCJwb3J0IiwiYWZ0ZXIiLCJjbG9zZSIsIml0IiwicmVzIiwicmVzQm9keSIsInByb3h5Iiwic3RhdHVzQ29kZSIsInNob3VsZCIsImVxdWFsIiwidmFsdWUiLCJjb21tYW5kIiwiZXFsIiwiYWZ0ZXJFYWNoIiwiY2FwcyIsImJyb3dzZXJOYW1lIiwiY2FwYWJpbGl0aWVzIiwiYWx3YXlzTWF0Y2giLCJoYXZlIiwicHJvcGVydHkiLCJzZXNzaW9uSWQiLCJsZW5ndGgiLCJiZWZvcmVFYWNoIiwiZGVzaXJlZENhcGFiaWxpdGllcyIsIm5vdCIsImV4aXN0Il0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBQ0E7O0FBRUFBLFFBQVEsQ0FBQyxPQUFELEVBQVUsWUFBWTtBQUM1QixRQUFNQyxPQUFPLEdBQUcsSUFBSUMsWUFBSixFQUFoQjtBQUNBLE1BQUlDLFVBQUo7QUFDQUMsRUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QkQsSUFBQUEsVUFBVSxHQUFHLE1BQU0saUJBQU87QUFDeEJFLE1BQUFBLHdCQUF3QixFQUFFLG1DQUF5QixJQUFJQyxzQkFBSixFQUF6QixDQURGO0FBRXhCQyxNQUFBQSxJQUFJLEVBQUU7QUFGa0IsS0FBUCxDQUFuQjtBQUlELEdBTEssQ0FBTjtBQU1BQyxFQUFBQSxLQUFLLENBQUMsa0JBQWtCO0FBQ3RCLFVBQU1MLFVBQVUsQ0FBQ00sS0FBWCxFQUFOO0FBQ0QsR0FGSSxDQUFMO0FBSUFDLEVBQUFBLEVBQUUsQ0FBQyw4QkFBRCxFQUFpQyxrQkFBa0I7QUFDbkQsUUFBSSxDQUFDQyxHQUFELEVBQU1DLE9BQU4sSUFBaUIsTUFBTVgsT0FBTyxDQUFDWSxLQUFSLENBQWMsU0FBZCxFQUF5QixLQUF6QixDQUEzQjtBQUNBRixJQUFBQSxHQUFHLENBQUNHLFVBQUosQ0FBZUMsTUFBZixDQUFzQkMsS0FBdEIsQ0FBNEIsR0FBNUI7QUFDQUosSUFBQUEsT0FBTyxDQUFDSyxLQUFSLENBQWNGLE1BQWQsQ0FBcUJDLEtBQXJCLENBQTRCLFVBQTVCO0FBQ0QsR0FKQyxDQUFGO0FBS0FOLEVBQUFBLEVBQUUsQ0FBQyxnQ0FBRCxFQUFtQyxrQkFBa0I7QUFDckQsVUFBTUMsR0FBRyxHQUFHLE1BQU1WLE9BQU8sQ0FBQ2lCLE9BQVIsQ0FBZ0IsU0FBaEIsRUFBMkIsS0FBM0IsQ0FBbEI7QUFDQVAsSUFBQUEsR0FBRyxDQUFDSSxNQUFKLENBQVdJLEdBQVgsQ0FBZ0IsVUFBaEI7QUFDRCxHQUhDLENBQUY7QUFJQW5CLEVBQUFBLFFBQVEsQ0FBQyxhQUFELEVBQWdCLFlBQVk7QUFDbENvQixJQUFBQSxTQUFTLENBQUMsa0JBQWtCO0FBQzFCLFlBQU1uQixPQUFPLENBQUNpQixPQUFSLENBQWdCLEVBQWhCLEVBQW9CLFFBQXBCLENBQU47QUFDRCxLQUZRLENBQVQ7QUFHQVIsSUFBQUEsRUFBRSxDQUFDLDRCQUFELEVBQStCLGtCQUFrQjtBQUNqRCxZQUFNVyxJQUFJLEdBQUc7QUFBQ0MsUUFBQUEsV0FBVyxFQUFFO0FBQWQsT0FBYjtBQUNBLFlBQU1YLEdBQUcsR0FBRyxNQUFNVixPQUFPLENBQUNpQixPQUFSLENBQWdCLFVBQWhCLEVBQTRCLE1BQTVCLEVBQW9DO0FBQUNLLFFBQUFBLFlBQVksRUFBRTtBQUFDQyxVQUFBQSxXQUFXLEVBQUVIO0FBQWQ7QUFBZixPQUFwQyxDQUFsQjtBQUNBVixNQUFBQSxHQUFHLENBQUNZLFlBQUosQ0FBaUJDLFdBQWpCLENBQTZCVCxNQUE3QixDQUFvQ1UsSUFBcEMsQ0FBeUNDLFFBQXpDLENBQWtELGFBQWxEO0FBQ0F6QixNQUFBQSxPQUFPLENBQUMwQixTQUFSLENBQWtCWixNQUFsQixDQUF5QlUsSUFBekIsQ0FBOEJHLE1BQTlCLENBQXFDLEVBQXJDO0FBQ0QsS0FMQyxDQUFGO0FBTUQsR0FWTyxDQUFSO0FBV0E1QixFQUFBQSxRQUFRLENBQUMsZ0JBQUQsRUFBbUIsWUFBWTtBQUNyQzZCLElBQUFBLFVBQVUsQ0FBQyxrQkFBa0I7QUFDM0IsWUFBTTVCLE9BQU8sQ0FBQ2lCLE9BQVIsQ0FBZ0IsVUFBaEIsRUFBNEIsTUFBNUIsRUFBb0M7QUFBQ1ksUUFBQUEsbUJBQW1CLEVBQUU7QUFBdEIsT0FBcEMsQ0FBTjtBQUNELEtBRlMsQ0FBVjtBQUdBcEIsSUFBQUEsRUFBRSxDQUFDLHVCQUFELEVBQTBCLGtCQUFrQjtBQUM1QyxZQUFNQyxHQUFHLEdBQUcsTUFBTVYsT0FBTyxDQUFDaUIsT0FBUixDQUFnQixFQUFoQixFQUFvQixRQUFwQixDQUFsQjtBQUNBSCxNQUFBQSxNQUFNLENBQUNnQixHQUFQLENBQVdDLEtBQVgsQ0FBaUJyQixHQUFqQjtBQUNELEtBSEMsQ0FBRjtBQUlELEdBUk8sQ0FBUjtBQVNELENBMUNPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKV1Byb3h5LCBzZXJ2ZXIsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgeyBGYWtlRHJpdmVyIH0gZnJvbSAnLi4vcHJvdG9jb2wvZmFrZS1kcml2ZXInO1xuXG5kZXNjcmliZSgncHJveHknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGp3cHJveHkgPSBuZXcgSldQcm94eSgpO1xuICBsZXQgYmFzZVNlcnZlcjtcbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlU2VydmVyID0gYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uKG5ldyBGYWtlRHJpdmVyKCkpLFxuICAgICAgcG9ydDogNDQ0NCxcbiAgICB9KTtcbiAgfSk7XG4gIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBiYXNlU2VydmVyLmNsb3NlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcHJveHkgc3RhdHVzIHN0cmFpZ2h0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGxldCBbcmVzLCByZXNCb2R5XSA9IGF3YWl0IGp3cHJveHkucHJveHkoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgcmVzLnN0YXR1c0NvZGUuc2hvdWxkLmVxdWFsKDIwMCk7XG4gICAgcmVzQm9keS52YWx1ZS5zaG91bGQuZXF1YWwoYEknbSBmaW5lYCk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIHByb3h5IHN0YXR1cyBhcyBjb21tYW5kJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGp3cHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICByZXMuc2hvdWxkLmVxbChgSSdtIGZpbmVgKTtcbiAgfSk7XG4gIGRlc2NyaWJlKCduZXcgc2Vzc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgandwcm94eS5jb21tYW5kKCcnLCAnREVMRVRFJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBzdGFydCBhIG5ldyBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2FwcyA9IHticm93c2VyTmFtZTogJ2Zha2UnfTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGp3cHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtjYXBhYmlsaXRpZXM6IHthbHdheXNNYXRjaDogY2Fwc319KTtcbiAgICAgIHJlcy5jYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2guc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Jyb3dzZXJOYW1lJyk7XG4gICAgICBqd3Byb3h5LnNlc3Npb25JZC5zaG91bGQuaGF2ZS5sZW5ndGgoNDgpO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2RlbGV0ZSBzZXNzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge2Rlc2lyZWRDYXBhYmlsaXRpZXM6IHt9fSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBxdWl0IGEgc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGp3cHJveHkuY29tbWFuZCgnJywgJ0RFTEVURScpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChyZXMpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2pzb253cC1wcm94eS9wcm94eS1lMmUtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -235,7 +235,6 @@ describe('proxy', function () {
|
|
|
235
235
|
res.headers['content-type'].should.equal('application/json; charset=utf-8');
|
|
236
236
|
res.sentCode.should.equal(200);
|
|
237
237
|
res.sentBody.should.eql({
|
|
238
|
-
status: 0,
|
|
239
238
|
value: {
|
|
240
239
|
foo: 'bar'
|
|
241
240
|
}
|
|
@@ -248,7 +247,6 @@ describe('proxy', function () {
|
|
|
248
247
|
let [req, res] = buildReqRes('/element/200/value', 'GET');
|
|
249
248
|
await j.proxyReqRes(req, res);
|
|
250
249
|
res.sentBody.should.eql({
|
|
251
|
-
status: 0,
|
|
252
250
|
value: 'foobar',
|
|
253
251
|
sessionId: '123'
|
|
254
252
|
});
|
|
@@ -260,7 +258,6 @@ describe('proxy', function () {
|
|
|
260
258
|
let [req, res] = buildReqRes('/session/456/element/200/value', 'POST');
|
|
261
259
|
await j.proxyReqRes(req, res);
|
|
262
260
|
res.sentBody.should.eql({
|
|
263
|
-
status: 0,
|
|
264
261
|
value: 'foobar',
|
|
265
262
|
sessionId: '456'
|
|
266
263
|
});
|
|
@@ -272,7 +269,6 @@ describe('proxy', function () {
|
|
|
272
269
|
let [req, res] = buildReqRes('/status', 'GET');
|
|
273
270
|
await j.proxyReqRes(req, res);
|
|
274
271
|
res.sentBody.should.eql({
|
|
275
|
-
status: 0,
|
|
276
272
|
value: {
|
|
277
273
|
'foo': 'bar'
|
|
278
274
|
}
|
|
@@ -286,7 +282,6 @@ describe('proxy', function () {
|
|
|
286
282
|
await j.proxyReqRes(req, res);
|
|
287
283
|
res.sentCode.should.equal(100);
|
|
288
284
|
res.sentBody.should.eql({
|
|
289
|
-
status: 0,
|
|
290
285
|
value: {
|
|
291
286
|
message: 'chrome not reachable'
|
|
292
287
|
}
|
|
@@ -296,4 +291,4 @@ describe('proxy', function () {
|
|
|
296
291
|
});require('source-map-support').install();
|
|
297
292
|
|
|
298
293
|
|
|
299
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvanNvbndwLXByb3h5L3Byb3h5LXNwZWNzLmpzIl0sIm5hbWVzIjpbImJ1aWxkUmVxUmVzIiwidXJsIiwibWV0aG9kIiwiYm9keSIsInJlcSIsIm9yaWdpbmFsVXJsIiwicmVzIiwiaGVhZGVycyIsInNldCIsImsiLCJ2Iiwic3RhdHVzIiwiY29kZSIsInNlbnRDb2RlIiwic2VuZCIsIkpTT04iLCJwYXJzZSIsImUiLCJzZW50Qm9keSIsImRlc2NyaWJlIiwicG9ydCIsIm1vY2tQcm94eSIsIm9wdHMiLCJzZXJ2ZXIiLCJURVNUX0hPU1QiLCJwcm94eSIsIkpXUHJveHkiLCJyZXF1ZXN0IiwiYXJncyIsImJlZm9yZSIsIml0IiwiaiIsInNob3VsZCIsImVxdWFsIiwiZGVzaXJlZENhcGFiaWxpdGllcyIsInN0YXR1c0NvZGUiLCJlcWwiLCJzZXNzaW9uSWQiLCJ2YWx1ZSIsImJyb3dzZXJOYW1lIiwiZ2V0VXJsRm9yUHJveHkiLCJyZXFCYXNlUGF0aCIsIm5ld1VybCIsImVyciIsImV4aXN0IiwibWVzc2FnZSIsImNvbnRhaW4iLCJmb28iLCJldmVudHVhbGx5IiwiYmUiLCJyZWplY3RlZFdpdGgiLCJnZXRBY3R1YWxFcnJvciIsImVycm9ycyIsIkVsZW1lbnROb3RWaXNpYmxlRXJyb3IiLCJ0cnVlIiwiY29tbWFuZCIsImVycm9yIiwicHJveHlSZXFSZXMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLFNBQVNBLFdBQVQsQ0FBc0JDLEdBQXRCLEVBQTJCQyxNQUEzQixFQUFtQ0MsSUFBbkMsRUFBeUM7QUFDdkMsTUFBSUMsR0FBRyxHQUFHO0FBQUNDLElBQUFBLFdBQVcsRUFBRUosR0FBZDtBQUFtQkMsSUFBQUEsTUFBbkI7QUFBMkJDLElBQUFBO0FBQTNCLEdBQVY7QUFDQSxNQUFJRyxHQUFHLEdBQUcsRUFBVjtBQUNBQSxFQUFBQSxHQUFHLENBQUNDLE9BQUosR0FBYyxFQUFkOztBQUNBRCxFQUFBQSxH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QUFTLEVBQUU7QUFBWixPQUFELENBQWpCO0FBQ0EsVUFBSSxDQUFDakMsR0FBRCxFQUFNRSxHQUFOLElBQWFOLFdBQVcsQ0FBQyxXQUFELEVBQWMsS0FBZCxDQUE1QjtBQUNBLFlBQU0rQixDQUFDLENBQUMwQixXQUFGLENBQWNyRCxHQUFkLEVBQW1CRSxHQUFuQixDQUFOO0FBQ0FBLE1BQUFBLEdBQUcsQ0FBQ08sUUFBSixDQUFhbUIsTUFBYixDQUFvQkMsS0FBcEIsQ0FBMEIsR0FBMUI7QUFDQTNCLE1BQUFBLEdBQUcsQ0FBQ1ksUUFBSixDQUFhYyxNQUFiLENBQW9CSSxHQUFwQixDQUF3QjtBQUFDekIsUUFBQUEsTUFBTSxFQUFFLENBQVQ7QUFBWTJCLFFBQUFBLEtBQUssRUFBRTtBQUFDTyxVQUFBQSxPQUFPLEVBQUU7QUFBVjtBQUFuQixPQUF4QjtBQUNELEtBTkMsQ0FBRjtBQU9ELEdBbENPLENBQVI7QUFtQ0QsQ0E5S08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnLi4vLi4vbGliJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4vbW9jay1yZXF1ZXN0JztcbmltcG9ydCB7IGlzRXJyb3JUeXBlLCBlcnJvcnMgfSBmcm9tICcuLi8uLi9saWIvcHJvdG9jb2wvZXJyb3JzJztcbmltcG9ydCB7IGdldFRlc3RQb3J0LCBURVNUX0hPU1QgfSBmcm9tICcuLi9oZWxwZXJzJztcblxuZnVuY3Rpb24gYnVpbGRSZXFSZXMgKHVybCwgbWV0aG9kLCBib2R5KSB7XG4gIGxldCByZXEgPSB7b3JpZ2luYWxVcmw6IHVybCwgbWV0aG9kLCBib2R5fTtcbiAgbGV0IHJlcyA9IHt9O1xuICByZXMuaGVhZGVycyA9IHt9O1xuICByZXMuc2V0ID0gKGssIHYpID0+IHsgcmVzW2tdID0gdjsgfTtcbiAgcmVzLnN0YXR1cyA9IChjb2RlKSA9PiB7XG4gICAgcmVzLnNlbnRDb2RlID0gY29kZTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuICByZXMuc2VuZCA9IChib2R5KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmVzLnNlbnRCb2R5ID0gYm9keTtcbiAgfTtcbiAgcmV0dXJuIFtyZXEsIHJlc107XG59XG5cbmRlc2NyaWJlKCdwcm94eScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHBvcnQ7XG5cbiAgZnVuY3Rpb24gbW9ja1Byb3h5IChvcHRzID0ge30pIHtcbiAgICAvLyBzZXRzIGRlZmF1bHQgc2VydmVyL3BvcnRcbiAgICBvcHRzID0ge3NlcnZlcjogVEVTVF9IT1NULCBwb3J0LCAuLi5vcHRzfTtcbiAgICBsZXQgcHJveHkgPSBuZXcgSldQcm94eShvcHRzKTtcbiAgICBwcm94eS5yZXF1ZXN0ID0gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXF1ZXN0KC4uLmFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIHByb3h5O1xuICB9XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBwb3J0ID0gYXdhaXQgZ2V0VGVzdFBvcnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBvdmVycmlkZSBkZWZhdWx0IHBhcmFtcycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2VydmVyOiAnMTI3LjAuMC4yJywgcG9ydH0pO1xuICAgIGouc2VydmVyLnNob3VsZC5lcXVhbCgnMTI3LjAuMC4yJyk7XG4gICAgai5wb3J0LnNob3VsZC5lcXVhbChwb3J0KTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgc2F2ZSBzZXNzaW9uIGlkIG9uIHNlc3Npb24gY3JlYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGogPSBtb2NrUHJveHkoKTtcbiAgICBsZXQgW3JlcywgYm9keV0gPSBhd2FpdCBqLnByb3h5KCcvc2Vzc2lvbicsICdQT1NUJywge2Rlc2lyZWRDYXBhYmlsaXRpZXM6IHt9fSk7XG4gICAgcmVzLnN0YXR1c0NvZGUuc2hvdWxkLmVxdWFsKDIwMCk7XG4gICAgYm9keS5zaG91bGQuZXFsKHtzdGF0dXM6IDAsIHNlc3Npb25JZDogJzEyMycsIHZhbHVlOiB7YnJvd3Nlck5hbWU6ICdib28nfX0pO1xuICAgIGouc2Vzc2lvbklkLnNob3VsZC5lcXVhbCgnMTIzJyk7XG4gIH0pO1xuICBkZXNjcmliZSgnZ2V0VXJsRm9yUHJveHknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBtb2RpZnkgc2Vzc2lvbiBpZCwgaG9zdCwgYW5kIHBvcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgai5nZXRVcmxGb3JQcm94eSgnaHR0cDovL2hvc3QuY29tOjEyMzQvc2Vzc2lvbi80NTYvZWxlbWVudC8yMDAvdmFsdWUnKVxuICAgICAgIC5zaG91bGQuZXFsKGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vc2Vzc2lvbi8xMjMvZWxlbWVudC8yMDAvdmFsdWVgKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHByZXBlbmQgc2NoZW1lLCBob3N0IGFuZCBwb3J0IGlmIG5vdCBwcm92aWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KHtzZXNzaW9uSWQ6ICcxMjMnfSk7XG4gICAgICBqLmdldFVybEZvclByb3h5KCcvc2Vzc2lvbi80NTYvZWxlbWVudC8yMDAvdmFsdWUnKVxuICAgICAgIC5zaG91bGQuZXFsKGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vc2Vzc2lvbi8xMjMvZWxlbWVudC8yMDAvdmFsdWVgKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJlc3BlY3Qgbm9uc3RhbmRhcmQgaW5jb21pbmcgcmVxdWVzdCBiYXNlIHBhdGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJywgcmVxQmFzZVBhdGg6ICcnfSk7XG4gICAgICBqLmdldFVybEZvclByb3h5KCcvc2Vzc2lvbi80NTYvZWxlbWVudC8yMDAvdmFsdWUnKVxuICAgICAgIC5zaG91bGQuZXFsKGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vc2Vzc2lvbi8xMjMvZWxlbWVudC8yMDAvdmFsdWVgKTtcblxuICAgICAgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJywgcmVxQmFzZVBhdGg6ICcvbXkvYmFzZS9wYXRoJ30pO1xuICAgICAgai5nZXRVcmxGb3JQcm94eSgnL215L2Jhc2UvcGF0aC9zZXNzaW9uLzQ1Ni9lbGVtZW50LzIwMC92YWx1ZScpXG4gICAgICAgLnNob3VsZC5lcWwoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9zZXNzaW9uLzEyMy9lbGVtZW50LzIwMC92YWx1ZWApO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgd29yayB3aXRoIHVybHMgd2hpY2ggZG8gbm90IGhhdmUgc2Vzc2lvbiBpZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgai5nZXRVcmxGb3JQcm94eSgnaHR0cDovL2hvc3QuY29tOjEyMzQvc2Vzc2lvbicpXG4gICAgICAgLnNob3VsZC5lcWwoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9zZXNzaW9uYCk7XG5cbiAgICAgIGxldCBuZXdVcmwgPSBqLmdldFVybEZvclByb3h5KCcvc2Vzc2lvbicpO1xuICAgICAgbmV3VXJsLnNob3VsZC5lcWwoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9zZXNzaW9uYCk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBpZiB1cmwgcmVxdWlyZXMgYSBzZXNzaW9uSWQgYnV0IGl0cyBudWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoKTtcbiAgICAgIGxldCBlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgai5nZXRVcmxGb3JQcm94eSgnL3Nlc3Npb24vNDU2L2VsZW1lbnQvMjAwL3ZhbHVlJyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZSA9IGVycjtcbiAgICAgIH1cbiAgICAgIHNob3VsZC5leGlzdChlKTtcbiAgICAgIGUubWVzc2FnZS5zaG91bGQuY29udGFpbignd2l0aG91dCBzZXNzaW9uIGlkJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdXJsIGRvZXMgbm90IHJlcXVpcmUgYSBzZXNzaW9uIGlkIGFuZCBpdHMgbnVsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KCk7XG4gICAgICBsZXQgbmV3VXJsID0gai5nZXRVcmxGb3JQcm94eSgnL3N0YXR1cycpO1xuXG4gICAgICBzaG91bGQuZXhpc3QobmV3VXJsKTtcbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKCdzdHJhaWdodCBwcm94eScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBwcm94eSBzdHJhaWdodCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KCk7XG4gICAgICBsZXQgW3JlcywgYm9keV0gPSBhd2FpdCBqLnByb3h5KCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgcmVzLnN0YXR1c0NvZGUuc2hvdWxkLmVxdWFsKDIwMCk7XG4gICAgICBib2R5LnNob3VsZC5lcWwoe3N0YXR1czogMCwgdmFsdWU6IHtmb286ICdiYXInfX0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcGFzcyBhbG9uZyByZXF1ZXN0IGVycm9ycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KHtzZXNzaW9uSWQ6ICcxMjMnfSk7XG4gICAgICBqLnByb3h5KCcvYmFkdXJsJywgJ0dFVCcpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aCgnQ291bGQgbm90IHByb3h5Jyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBwcm94eSBlcnJvciByZXNwb25zZXMgYW5kIGNvZGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGoucHJveHkoJy9lbGVtZW50L2JhZC90ZXh0JywgJ0dFVCcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpc0Vycm9yVHlwZShlLmdldEFjdHVhbEVycm9yKCksIGVycm9ycy5FbGVtZW50Tm90VmlzaWJsZUVycm9yKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKCdjb21tYW5kIHByb3h5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHByb3h5IGNvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSgpO1xuICAgICAgbGV0IHJlcyA9IGF3YWl0IGouY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIHJlcy5zaG91bGQuZXFsKHtmb286ICdiYXInfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBwYXNzIGFsb25nIHJlcXVlc3QgZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGouY29tbWFuZCgnL2JhZHVybCcsICdHRVQnKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoJ0NvdWxkIG5vdCBwcm94eScpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhIGNvbW1hbmQgZmFpbHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgbGV0IGUgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgai5jb21tYW5kKCcvZWxlbWVudC9iYWQvdGV4dCcsICdHRVQnKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlID0gZXJyO1xuICAgICAgfVxuICAgICAgc2hvdWxkLmV4aXN0KGUpO1xuICAgICAgZS5tZXNzYWdlLnNob3VsZC5jb250YWluKCdJbnZpc2libGUgZWxlbWVudCcpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhIGNvbW1hbmQgZmFpbHMgd2l0aCBhIDIwMCBiZWNhdXNlIHRoZSBzdGF0dXMgaXMgbm90IDAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgbGV0IGUgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgai5jb21tYW5kKCcvZWxlbWVudC8yMDAvdGV4dCcsICdHRVQnKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlID0gZXJyO1xuICAgICAgfVxuICAgICAgc2hvdWxkLmV4aXN0KGUpO1xuICAgICAgZS5lcnJvci5zaG91bGQuZXFsKCdlbGVtZW50IG5vdCB2aXNpYmxlJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGEgY29tbWFuZCBmYWlscyB3aXRoIGEgMTAwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGxldCBlID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGouY29tbWFuZCgnL3Nlc3Npb24vYmFkY2hyb21lL25vY2hyb21lJywgJ0dFVCcpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGUgPSBlcnI7XG4gICAgICB9XG4gICAgICBzaG91bGQuZXhpc3QoZSk7XG4gICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmNvbnRhaW4oJ2Nocm9tZSBub3QgcmVhY2hhYmxlJyk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgncmVxL3JlcyBwcm94eScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBwcm94eSB2aWEgcmVxIGFuZCBzZW5kIHRvIHJlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KCk7XG4gICAgICBsZXQgW3JlcSwgcmVzXSA9IGJ1aWxkUmVxUmVzKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgYXdhaXQgai5wcm94eVJlcVJlcyhyZXEsIHJlcyk7XG4gICAgICByZXMuaGVhZGVyc1snY29udGVudC10eXBlJ10uc2hvdWxkLmVxdWFsKCdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXMuc2VudENvZGUuc2hvdWxkLmVxdWFsKDIwMCk7XG4gICAgICByZXMuc2VudEJvZHkuc2hvdWxkLmVxbCh7c3RhdHVzOiAwLCB2YWx1ZToge2ZvbzogJ2Jhcid9fSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXdyaXRlIHRoZSBpbm5lciBzZXNzaW9uIGlkIHNvIGl0IGRvZXNudCBjaGFuZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgbGV0IFtyZXEsIHJlc10gPSBidWlsZFJlcVJlcygnL2VsZW1lbnQvMjAwL3ZhbHVlJywgJ0dFVCcpO1xuICAgICAgYXdhaXQgai5wcm94eVJlcVJlcyhyZXEsIHJlcyk7XG4gICAgICByZXMuc2VudEJvZHkuc2hvdWxkLmVxbCh7c3RhdHVzOiAwLCB2YWx1ZTogJ2Zvb2JhcicsIHNlc3Npb25JZDogJzEyMyd9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJld3JpdGUgdGhlIGlubmVyIHNlc3Npb24gaWQgd2l0aCBzZXNzaW9uSWQgaW4gdXJsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGxldCBbcmVxLCByZXNdID0gYnVpbGRSZXFSZXMoJy9zZXNzaW9uLzQ1Ni9lbGVtZW50LzIwMC92YWx1ZScsICdQT1NUJyk7XG4gICAgICBhd2FpdCBqLnByb3h5UmVxUmVzKHJlcSwgcmVzKTtcbiAgICAgIHJlcy5zZW50Qm9keS5zaG91bGQuZXFsKHtzdGF0dXM6IDAsIHZhbHVlOiAnZm9vYmFyJywgc2Vzc2lvbklkOiAnNDU2J30pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcGFzcyB0aHJvdWdoIHVybHMgdGhhdCBkbyBub3QgcmVxdWlyZSBzZXNzaW9uIElEcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KHtzZXNzaW9uSWQ6ICcxMjMnfSk7XG4gICAgICBsZXQgW3JlcSwgcmVzXSA9IGJ1aWxkUmVxUmVzKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgYXdhaXQgai5wcm94eVJlcVJlcyhyZXEsIHJlcyk7XG4gICAgICByZXMuc2VudEJvZHkuc2hvdWxkLmVxbCh7c3RhdHVzOiAwLCB2YWx1ZTogeydmb28nOiAnYmFyJ319KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHByb3h5IHN0cmFuZ2UgcmVzcG9uc2VzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGxldCBbcmVxLCByZXNdID0gYnVpbGRSZXFSZXMoJy9ub2Nocm9tZScsICdHRVQnKTtcbiAgICAgIGF3YWl0IGoucHJveHlSZXFSZXMocmVxLCByZXMpO1xuICAgICAgcmVzLnNlbnRDb2RlLnNob3VsZC5lcXVhbCgxMDApO1xuICAgICAgcmVzLnNlbnRCb2R5LnNob3VsZC5lcWwoe3N0YXR1czogMCwgdmFsdWU6IHttZXNzYWdlOiAnY2hyb21lIG5vdCByZWFjaGFibGUnfX0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2pzb253cC1wcm94eS9wcm94eS1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
294
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvanNvbndwLXByb3h5L3Byb3h5LXNwZWNzLmpzIl0sIm5hbWVzIjpbImJ1aWxkUmVxUmVzIiwidXJsIiwibWV0aG9kIiwiYm9keSIsInJlcSIsIm9yaWdpbmFsVXJsIiwicmVzIiwiaGVhZGVycyIsInNldCIsImsiLCJ2Iiwic3RhdHVzIiwiY29kZSIsInNlbnRDb2RlIiwic2VuZCIsIkpTT04iLCJwYXJzZSIsImUiLCJzZW50Qm9keSIsImRlc2NyaWJlIiwicG9ydCIsIm1vY2tQcm94eSIsIm9wdHMiLCJzZXJ2ZXIiLCJURVNUX0hPU1QiLCJwcm94eSIsIkpXUHJveHkiLCJyZXF1ZXN0IiwiYXJncyIsImJlZm9yZSIsIml0IiwiaiIsInNob3VsZCIsImVxdWFsIiwiZGVzaXJlZENhcGFiaWxpdGllcyIsInN0YXR1c0NvZGUiLCJlcWwiLCJzZXNzaW9uSWQiLCJ2YWx1ZSIsImJyb3dzZXJOYW1lIiwiZ2V0VXJsRm9yUHJveHkiLCJyZXFCYXNlUGF0aCIsIm5ld1VybCIsImVyciIsImV4aXN0IiwibWVzc2FnZSIsImNvbnRhaW4iLCJmb28iLCJldmVudHVhbGx5IiwiYmUiLCJyZWplY3RlZFdpdGgiLCJnZXRBY3R1YWxFcnJvciIsImVycm9ycyIsIkVsZW1lbnROb3RWaXNpYmxlRXJyb3IiLCJ0cnVlIiwiY29tbWFuZCIsImVycm9yIiwicHJveHlSZXFSZXMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLFNBQVNBLFdBQVQsQ0FBc0JDLEdBQXRCLEVBQTJCQyxNQUEzQixFQUFtQ0MsSUFBbkMsRUFBeUM7QUFDdkMsTUFBSUMsR0FBRyxHQUFHO0FBQUNDLElBQUFBLFdBQVcsRUFBRUosR0FBZDtBQUFtQkMsSUFBQUEsTUFBbkI7QUFBMkJDLElBQUFBO0FBQTNCLEdBQVY7QUFDQSxNQUFJRyxHQUFHLEdBQUcsRUFBVjtBQUNBQSxFQUFBQSxHQUFHLENBQUNDLE9BQUosR0FBYyxFQUFkOztBQUNBRCxFQUFBQSxH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QUFGLENBQWNyRCxHQUFkLEVBQW1CRSxHQUFuQixDQUFOO0FBQ0FBLE1BQUFBLEdBQUcsQ0FBQ08sUUFBSixDQUFhbUIsTUFBYixDQUFvQkMsS0FBcEIsQ0FBMEIsR0FBMUI7QUFDQTNCLE1BQUFBLEdBQUcsQ0FBQ1ksUUFBSixDQUFhYyxNQUFiLENBQW9CSSxHQUFwQixDQUF3QjtBQUFDRSxRQUFBQSxLQUFLLEVBQUU7QUFBQ08sVUFBQUEsT0FBTyxFQUFFO0FBQVY7QUFBUixPQUF4QjtBQUNELEtBTkMsQ0FBRjtBQU9ELEdBbENPLENBQVI7QUFtQ0QsQ0E5S08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnLi4vLi4vbGliJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4vbW9jay1yZXF1ZXN0JztcbmltcG9ydCB7IGlzRXJyb3JUeXBlLCBlcnJvcnMgfSBmcm9tICcuLi8uLi9saWIvcHJvdG9jb2wvZXJyb3JzJztcbmltcG9ydCB7IGdldFRlc3RQb3J0LCBURVNUX0hPU1QgfSBmcm9tICcuLi9oZWxwZXJzJztcblxuZnVuY3Rpb24gYnVpbGRSZXFSZXMgKHVybCwgbWV0aG9kLCBib2R5KSB7XG4gIGxldCByZXEgPSB7b3JpZ2luYWxVcmw6IHVybCwgbWV0aG9kLCBib2R5fTtcbiAgbGV0IHJlcyA9IHt9O1xuICByZXMuaGVhZGVycyA9IHt9O1xuICByZXMuc2V0ID0gKGssIHYpID0+IHsgcmVzW2tdID0gdjsgfTtcbiAgcmVzLnN0YXR1cyA9IChjb2RlKSA9PiB7XG4gICAgcmVzLnNlbnRDb2RlID0gY29kZTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuICByZXMuc2VuZCA9IChib2R5KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmVzLnNlbnRCb2R5ID0gYm9keTtcbiAgfTtcbiAgcmV0dXJuIFtyZXEsIHJlc107XG59XG5cbmRlc2NyaWJlKCdwcm94eScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHBvcnQ7XG5cbiAgZnVuY3Rpb24gbW9ja1Byb3h5IChvcHRzID0ge30pIHtcbiAgICAvLyBzZXRzIGRlZmF1bHQgc2VydmVyL3BvcnRcbiAgICBvcHRzID0ge3NlcnZlcjogVEVTVF9IT1NULCBwb3J0LCAuLi5vcHRzfTtcbiAgICBsZXQgcHJveHkgPSBuZXcgSldQcm94eShvcHRzKTtcbiAgICBwcm94eS5yZXF1ZXN0ID0gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXF1ZXN0KC4uLmFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIHByb3h5O1xuICB9XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBwb3J0ID0gYXdhaXQgZ2V0VGVzdFBvcnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBvdmVycmlkZSBkZWZhdWx0IHBhcmFtcycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2VydmVyOiAnMTI3LjAuMC4yJywgcG9ydH0pO1xuICAgIGouc2VydmVyLnNob3VsZC5lcXVhbCgnMTI3LjAuMC4yJyk7XG4gICAgai5wb3J0LnNob3VsZC5lcXVhbChwb3J0KTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgc2F2ZSBzZXNzaW9uIGlkIG9uIHNlc3Npb24gY3JlYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGogPSBtb2NrUHJveHkoKTtcbiAgICBsZXQgW3JlcywgYm9keV0gPSBhd2FpdCBqLnByb3h5KCcvc2Vzc2lvbicsICdQT1NUJywge2Rlc2lyZWRDYXBhYmlsaXRpZXM6IHt9fSk7XG4gICAgcmVzLnN0YXR1c0NvZGUuc2hvdWxkLmVxdWFsKDIwMCk7XG4gICAgYm9keS5zaG91bGQuZXFsKHtzdGF0dXM6IDAsIHNlc3Npb25JZDogJzEyMycsIHZhbHVlOiB7YnJvd3Nlck5hbWU6ICdib28nfX0pO1xuICAgIGouc2Vzc2lvbklkLnNob3VsZC5lcXVhbCgnMTIzJyk7XG4gIH0pO1xuICBkZXNjcmliZSgnZ2V0VXJsRm9yUHJveHknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBtb2RpZnkgc2Vzc2lvbiBpZCwgaG9zdCwgYW5kIHBvcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgai5nZXRVcmxGb3JQcm94eSgnaHR0cDovL2hvc3QuY29tOjEyMzQvc2Vzc2lvbi80NTYvZWxlbWVudC8yMDAvdmFsdWUnKVxuICAgICAgIC5zaG91bGQuZXFsKGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vc2Vzc2lvbi8xMjMvZWxlbWVudC8yMDAvdmFsdWVgKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHByZXBlbmQgc2NoZW1lLCBob3N0IGFuZCBwb3J0IGlmIG5vdCBwcm92aWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KHtzZXNzaW9uSWQ6ICcxMjMnfSk7XG4gICAgICBqLmdldFVybEZvclByb3h5KCcvc2Vzc2lvbi80NTYvZWxlbWVudC8yMDAvdmFsdWUnKVxuICAgICAgIC5zaG91bGQuZXFsKGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vc2Vzc2lvbi8xMjMvZWxlbWVudC8yMDAvdmFsdWVgKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJlc3BlY3Qgbm9uc3RhbmRhcmQgaW5jb21pbmcgcmVxdWVzdCBiYXNlIHBhdGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJywgcmVxQmFzZVBhdGg6ICcnfSk7XG4gICAgICBqLmdldFVybEZvclByb3h5KCcvc2Vzc2lvbi80NTYvZWxlbWVudC8yMDAvdmFsdWUnKVxuICAgICAgIC5zaG91bGQuZXFsKGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vc2Vzc2lvbi8xMjMvZWxlbWVudC8yMDAvdmFsdWVgKTtcblxuICAgICAgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJywgcmVxQmFzZVBhdGg6ICcvbXkvYmFzZS9wYXRoJ30pO1xuICAgICAgai5nZXRVcmxGb3JQcm94eSgnL215L2Jhc2UvcGF0aC9zZXNzaW9uLzQ1Ni9lbGVtZW50LzIwMC92YWx1ZScpXG4gICAgICAgLnNob3VsZC5lcWwoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9zZXNzaW9uLzEyMy9lbGVtZW50LzIwMC92YWx1ZWApO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgd29yayB3aXRoIHVybHMgd2hpY2ggZG8gbm90IGhhdmUgc2Vzc2lvbiBpZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgai5nZXRVcmxGb3JQcm94eSgnaHR0cDovL2hvc3QuY29tOjEyMzQvc2Vzc2lvbicpXG4gICAgICAgLnNob3VsZC5lcWwoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9zZXNzaW9uYCk7XG5cbiAgICAgIGxldCBuZXdVcmwgPSBqLmdldFVybEZvclByb3h5KCcvc2Vzc2lvbicpO1xuICAgICAgbmV3VXJsLnNob3VsZC5lcWwoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9zZXNzaW9uYCk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBpZiB1cmwgcmVxdWlyZXMgYSBzZXNzaW9uSWQgYnV0IGl0cyBudWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoKTtcbiAgICAgIGxldCBlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgai5nZXRVcmxGb3JQcm94eSgnL3Nlc3Npb24vNDU2L2VsZW1lbnQvMjAwL3ZhbHVlJyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZSA9IGVycjtcbiAgICAgIH1cbiAgICAgIHNob3VsZC5leGlzdChlKTtcbiAgICAgIGUubWVzc2FnZS5zaG91bGQuY29udGFpbignd2l0aG91dCBzZXNzaW9uIGlkJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdXJsIGRvZXMgbm90IHJlcXVpcmUgYSBzZXNzaW9uIGlkIGFuZCBpdHMgbnVsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KCk7XG4gICAgICBsZXQgbmV3VXJsID0gai5nZXRVcmxGb3JQcm94eSgnL3N0YXR1cycpO1xuXG4gICAgICBzaG91bGQuZXhpc3QobmV3VXJsKTtcbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKCdzdHJhaWdodCBwcm94eScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBwcm94eSBzdHJhaWdodCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KCk7XG4gICAgICBsZXQgW3JlcywgYm9keV0gPSBhd2FpdCBqLnByb3h5KCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgcmVzLnN0YXR1c0NvZGUuc2hvdWxkLmVxdWFsKDIwMCk7XG4gICAgICBib2R5LnNob3VsZC5lcWwoe3N0YXR1czogMCwgdmFsdWU6IHtmb286ICdiYXInfX0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcGFzcyBhbG9uZyByZXF1ZXN0IGVycm9ycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KHtzZXNzaW9uSWQ6ICcxMjMnfSk7XG4gICAgICBqLnByb3h5KCcvYmFkdXJsJywgJ0dFVCcpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aCgnQ291bGQgbm90IHByb3h5Jyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBwcm94eSBlcnJvciByZXNwb25zZXMgYW5kIGNvZGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGoucHJveHkoJy9lbGVtZW50L2JhZC90ZXh0JywgJ0dFVCcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpc0Vycm9yVHlwZShlLmdldEFjdHVhbEVycm9yKCksIGVycm9ycy5FbGVtZW50Tm90VmlzaWJsZUVycm9yKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKCdjb21tYW5kIHByb3h5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHByb3h5IGNvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSgpO1xuICAgICAgbGV0IHJlcyA9IGF3YWl0IGouY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIHJlcy5zaG91bGQuZXFsKHtmb286ICdiYXInfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBwYXNzIGFsb25nIHJlcXVlc3QgZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGouY29tbWFuZCgnL2JhZHVybCcsICdHRVQnKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoJ0NvdWxkIG5vdCBwcm94eScpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhIGNvbW1hbmQgZmFpbHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgbGV0IGUgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgai5jb21tYW5kKCcvZWxlbWVudC9iYWQvdGV4dCcsICdHRVQnKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlID0gZXJyO1xuICAgICAgfVxuICAgICAgc2hvdWxkLmV4aXN0KGUpO1xuICAgICAgZS5tZXNzYWdlLnNob3VsZC5jb250YWluKCdJbnZpc2libGUgZWxlbWVudCcpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhIGNvbW1hbmQgZmFpbHMgd2l0aCBhIDIwMCBiZWNhdXNlIHRoZSBzdGF0dXMgaXMgbm90IDAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgbGV0IGUgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgai5jb21tYW5kKCcvZWxlbWVudC8yMDAvdGV4dCcsICdHRVQnKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlID0gZXJyO1xuICAgICAgfVxuICAgICAgc2hvdWxkLmV4aXN0KGUpO1xuICAgICAgZS5lcnJvci5zaG91bGQuZXFsKCdlbGVtZW50IG5vdCB2aXNpYmxlJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGEgY29tbWFuZCBmYWlscyB3aXRoIGEgMTAwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGxldCBlID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGouY29tbWFuZCgnL3Nlc3Npb24vYmFkY2hyb21lL25vY2hyb21lJywgJ0dFVCcpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGUgPSBlcnI7XG4gICAgICB9XG4gICAgICBzaG91bGQuZXhpc3QoZSk7XG4gICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmNvbnRhaW4oJ2Nocm9tZSBub3QgcmVhY2hhYmxlJyk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgncmVxL3JlcyBwcm94eScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBwcm94eSB2aWEgcmVxIGFuZCBzZW5kIHRvIHJlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KCk7XG4gICAgICBsZXQgW3JlcSwgcmVzXSA9IGJ1aWxkUmVxUmVzKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgYXdhaXQgai5wcm94eVJlcVJlcyhyZXEsIHJlcyk7XG4gICAgICByZXMuaGVhZGVyc1snY29udGVudC10eXBlJ10uc2hvdWxkLmVxdWFsKCdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXMuc2VudENvZGUuc2hvdWxkLmVxdWFsKDIwMCk7XG4gICAgICByZXMuc2VudEJvZHkuc2hvdWxkLmVxbCh7dmFsdWU6IHtmb286ICdiYXInfX0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV3cml0ZSB0aGUgaW5uZXIgc2Vzc2lvbiBpZCBzbyBpdCBkb2VzbnQgY2hhbmdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGogPSBtb2NrUHJveHkoe3Nlc3Npb25JZDogJzEyMyd9KTtcbiAgICAgIGxldCBbcmVxLCByZXNdID0gYnVpbGRSZXFSZXMoJy9lbGVtZW50LzIwMC92YWx1ZScsICdHRVQnKTtcbiAgICAgIGF3YWl0IGoucHJveHlSZXFSZXMocmVxLCByZXMpO1xuICAgICAgcmVzLnNlbnRCb2R5LnNob3VsZC5lcWwoe3ZhbHVlOiAnZm9vYmFyJywgc2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV3cml0ZSB0aGUgaW5uZXIgc2Vzc2lvbiBpZCB3aXRoIHNlc3Npb25JZCBpbiB1cmwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgaiA9IG1vY2tQcm94eSh7c2Vzc2lvbklkOiAnMTIzJ30pO1xuICAgICAgbGV0IFtyZXEsIHJlc10gPSBidWlsZFJlcVJlcygnL3Nlc3Npb24vNDU2L2VsZW1lbnQvMjAwL3ZhbHVlJywgJ1BPU1QnKTtcbiAgICAgIGF3YWl0IGoucHJveHlSZXFSZXMocmVxLCByZXMpO1xuICAgICAgcmVzLnNlbnRCb2R5LnNob3VsZC5lcWwoe3ZhbHVlOiAnZm9vYmFyJywgc2Vzc2lvbklkOiAnNDU2J30pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcGFzcyB0aHJvdWdoIHVybHMgdGhhdCBkbyBub3QgcmVxdWlyZSBzZXNzaW9uIElEcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KHtzZXNzaW9uSWQ6ICcxMjMnfSk7XG4gICAgICBsZXQgW3JlcSwgcmVzXSA9IGJ1aWxkUmVxUmVzKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgYXdhaXQgai5wcm94eVJlcVJlcyhyZXEsIHJlcyk7XG4gICAgICByZXMuc2VudEJvZHkuc2hvdWxkLmVxbCh7dmFsdWU6IHsnZm9vJzogJ2Jhcid9fSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBwcm94eSBzdHJhbmdlIHJlc3BvbnNlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBqID0gbW9ja1Byb3h5KHtzZXNzaW9uSWQ6ICcxMjMnfSk7XG4gICAgICBsZXQgW3JlcSwgcmVzXSA9IGJ1aWxkUmVxUmVzKCcvbm9jaHJvbWUnLCAnR0VUJyk7XG4gICAgICBhd2FpdCBqLnByb3h5UmVxUmVzKHJlcSwgcmVzKTtcbiAgICAgIHJlcy5zZW50Q29kZS5zaG91bGQuZXF1YWwoMTAwKTtcbiAgICAgIHJlcy5zZW50Qm9keS5zaG91bGQuZXFsKHt2YWx1ZToge21lc3NhZ2U6ICdjaHJvbWUgbm90IHJlYWNoYWJsZSd9fSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvanNvbndwLXByb3h5L3Byb3h5LXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|