appium-remote-debugger 8.13.2 → 9.0.0

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.
@@ -21,7 +21,7 @@ var _bluebird = _interopRequireDefault(require("bluebird"));
21
21
 
22
22
  var _rpcMessageHandler = _interopRequireDefault(require("./rpc-message-handler"));
23
23
 
24
- var _appiumSupport = require("appium-support");
24
+ var _support = require("@appium/support");
25
25
 
26
26
  const DATA_LOG_LENGTH = {
27
27
  length: 200
@@ -32,7 +32,7 @@ const MIN_PLATFORM_FOR_TARGET_BASED = '12.2';
32
32
  const MIN_PLATFORM_NO_TARGET_EXISTS = '13.4';
33
33
 
34
34
  function isTargetBased(isSafari, platformVersion) {
35
- const isHighVersion = _appiumSupport.util.compareVersions(platformVersion, '>=', MIN_PLATFORM_FOR_TARGET_BASED);
35
+ const isHighVersion = _support.util.compareVersions(platformVersion, '>=', MIN_PLATFORM_FOR_TARGET_BASED);
36
36
 
37
37
  _logger.default.debug(`Checking which communication style to use (${isSafari ? '' : 'non-'}Safari on platform version '${platformVersion}')`);
38
38
 
@@ -57,8 +57,8 @@ class RpcClient {
57
57
  } = opts;
58
58
  this.isSafari = isSafari;
59
59
  this.isConnected = false;
60
- this.connId = _appiumSupport.util.uuidV4();
61
- this.senderId = _appiumSupport.util.uuidV4();
60
+ this.connId = _support.util.uuidV4();
61
+ this.senderId = _support.util.uuidV4();
62
62
  this.msgId = 0;
63
63
  this.logAllCommunication = logAllCommunication;
64
64
  this.logAllCommunicationHexDump = logAllCommunicationHexDump;
@@ -167,7 +167,7 @@ class RpcClient {
167
167
  }
168
168
 
169
169
  async send(command, opts = {}, waitForResponse = true) {
170
- const timer = new _appiumSupport.timing.Timer().start();
170
+ const timer = new _support.timing.Timer().start();
171
171
  const {
172
172
  appIdKey,
173
173
  pageIdKey
@@ -231,7 +231,7 @@ class RpcClient {
231
231
 
232
232
  const cmd = this.remoteMessages.getRemoteCommand(command, fullOpts);
233
233
 
234
- if (cmd === null || cmd === void 0 ? void 0 : (_cmd$__argument = cmd.__argument) === null || _cmd$__argument === void 0 ? void 0 : _cmd$__argument.WIRSocketDataKey) {
234
+ if (cmd !== null && cmd !== void 0 && (_cmd$__argument = cmd.__argument) !== null && _cmd$__argument !== void 0 && _cmd$__argument.WIRSocketDataKey) {
235
235
  if (_lodash.default.isNil(cmd.__argument.WIRSocketDataKey.id)) {
236
236
  cmd.__argument.WIRSocketDataKey.id = wrapperMsgId;
237
237
  }
@@ -260,7 +260,7 @@ class RpcClient {
260
260
 
261
261
  resolve(args);
262
262
  });
263
- } else if (cmd === null || cmd === void 0 ? void 0 : (_cmd$__argument2 = cmd.__argument) === null || _cmd$__argument2 === void 0 ? void 0 : _cmd$__argument2.WIRSocketDataKey) {
263
+ } else if (cmd !== null && cmd !== void 0 && (_cmd$__argument2 = cmd.__argument) !== null && _cmd$__argument2 !== void 0 && _cmd$__argument2.WIRSocketDataKey) {
264
264
  this.messageHandler.once(msgId.toString(), function (err, value) {
265
265
  if (err) {
266
266
  return reject(new Error(`Remote debugger error with code '${err.code}': ${err.message}`));
@@ -419,7 +419,7 @@ class RpcClient {
419
419
 
420
420
  _logger.default.debug('Sender key set');
421
421
 
422
- if (this.isTargetBased && _appiumSupport.util.compareVersions(this.platformVersion, '<', MIN_PLATFORM_NO_TARGET_EXISTS)) {
422
+ if (this.isTargetBased && _support.util.compareVersions(this.platformVersion, '<', MIN_PLATFORM_NO_TARGET_EXISTS)) {
423
423
  await this.send('Target.exists', sendOpts, false);
424
424
  }
425
425
 
@@ -568,4 +568,4 @@ class RpcClient {
568
568
  exports.default = RpcClient;require('source-map-support').install();
569
569
 
570
570
 
571
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ycGMvcnBjLWNsaWVudC5qcyJdLCJuYW1lcyI6WyJEQVRBX0xPR19MRU5HVEgiLCJsZW5ndGgiLCJXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCIsIldBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCIsIk1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEIiwiTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMiLCJpc1RhcmdldEJhc2VkIiwiaXNTYWZhcmkiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc0hpZ2hWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsImxvZyIsImRlYnVnIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX3RhcmdldHMiLCJfc2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsImJ1bmRsZUlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzb2NrZXRDaHVua1NpemUiLCJmdWxsUGFnZUluaXRpYWxpemF0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uSWQiLCJ1dWlkVjQiLCJzZW5kZXJJZCIsIm1zZ0lkIiwiX2NvbnRleHRzIiwiY29udGV4dHMiLCJuZWVkc1RhcmdldCIsInRhcmdldHMiLCJjb25uZWN0ZWQiLCJvbiIsImV2ZW50IiwibGlzdGVuZXIiLCJtZXNzYWdlSGFuZGxlciIsIm9uY2UiLCJvZmYiLCJ3YXJuIiwiX2lzVGFyZ2V0QmFzZWQiLCJyZW1vdGVNZXNzYWdlcyIsIlJlbW90ZU1lc3NhZ2VzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJhZGRUYXJnZXQiLCJiaW5kIiwidXBkYXRlVGFyZ2V0IiwicmVtb3ZlVGFyZ2V0Iiwib25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZCIsIm9uR2FyYmFnZUNvbGxlY3RlZCIsIndhaXRGb3JUYXJnZXQiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsImZvcmNlIiwiZ2V0VGFyZ2V0IiwiXyIsImlzRW1wdHkiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiZXJyb3IiLCJlcnIiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJFcnJvciIsInNlbmQiLCJjb21tYW5kIiwid2FpdEZvclJlc3BvbnNlIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0Iiwic2VuZFRvRGV2aWNlIiwidG9Mb3dlckNhc2UiLCJpbmZvIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsIndyYXBwZXJNc2dJZCIsInRvU3RyaW5nIiwidGFyZ2V0SWQiLCJmdWxsT3B0cyIsImRlZmF1bHRzIiwiaWQiLCJjbWQiLCJnZXRSZW1vdGVDb21tYW5kIiwiX19hcmd1bWVudCIsIldJUlNvY2tldERhdGFLZXkiLCJpc05pbCIsIkJ1ZmZlciIsImZyb20iLCJKU09OIiwic3RyaW5naWZ5IiwibWVzc2FnZUhhbmRsZWQiLCJ0cnVuY2F0ZSIsImxpc3RlbmVycyIsIl9fc2VsZWN0b3IiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwiYXJncyIsInZhbHVlIiwiY29kZSIsIm1zZyIsInJlcyIsInNlbmRNZXNzYWdlIiwiY29ubmVjdCIsImRpc2Nvbm5lY3QiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJyZWNlaXZlIiwiYXBwIiwidGFyZ2V0SW5mbyIsInBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24iLCJpc1Byb3Zpc2lvbmFsIiwiaGFzIiwib2xkVGFyZ2V0SWQiLCJuZXdUYXJnZXRJZCIsInByb3Zpc2lvbmFsIiwicGFnZSIsInRvUGFpcnMiLCJzZWxlY3RQYWdlIiwic2VuZE9wdHMiLCJlbmFibGVkIiwiT2JqZWN0IiwiYXNzaWduIiwiaW5pdGlhbGl6ZVBhZ2VGdWxsIiwiaW5pdGlhbGl6ZVBhZ2UiLCJkaXNhYmxlZCIsImluc3RydW1lbnRzIiwiYWN0aXZlIiwic3RhdGUiLCJkZXB0aCIsInNob3VsZFBhdXNlIiwibG9nZ2luZ0NoYW5uZWxzIiwic291cmNlIiwiY2hhbm5lbHMiLCJtYXAiLCJlbnRyeSIsImxldmVsIiwic2VsZWN0QXBwIiwib25BcHBDaGFuZ2UiLCJkaWN0Iiwib2xkQXBwSWRLZXkiLCJXSVJIb3N0QXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwiY29ycmVjdEFwcElkS2V5IiwiV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwicGFnZURpY3QiLCJjb25uZWN0ZWRBcHBJZEtleSIsImNvbnRleHQiLCJwdXNoIiwib25TY3JpcHRQYXJzZWQiLCJzY3JpcHRJbmZvIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLGVBQWUsR0FBRztBQUFDQyxFQUFBQSxNQUFNLEVBQUU7QUFBVCxDQUF4QjtBQUVBLE1BQU1DLHVCQUF1QixHQUFHLEtBQWhDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcsSUFBakM7QUFFQSxNQUFNQyw2QkFBNkIsR0FBRyxNQUF0QztBQUdBLE1BQU1DLDZCQUE2QixHQUFHLE1BQXRDOztBQUVBLFNBQVNDLGFBQVQsQ0FBd0JDLFFBQXhCLEVBQWtDQyxlQUFsQyxFQUFtRDtBQUlqRCxRQUFNQyxhQUFhLEdBQUdDLG9CQUFLQyxlQUFMLENBQXFCSCxlQUFyQixFQUFzQyxJQUF0QyxFQUE0Q0osNkJBQTVDLENBQXRCOztBQUNBUSxrQkFBSUMsS0FBSixDQUFXLDhDQUE2Q04sUUFBUSxHQUFHLEVBQUgsR0FBUSxNQUFPLCtCQUE4QkMsZUFBZ0IsSUFBN0g7O0FBQ0FJLGtCQUFJQyxLQUFKLENBQVcsMENBQXlDVCw2QkFBOEIsTUFBS0ssYUFBYyxFQUFyRzs7QUFDQSxTQUFPQSxhQUFQO0FBQ0Q7O0FBRWMsTUFBTUssU0FBTixDQUFnQjtBQUM3QkMsRUFBQUEsV0FBVyxDQUFFQyxJQUFJLEdBQUcsRUFBVCxFQUFhO0FBQ3RCLFNBQUtDLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxTQUFLQyxxQkFBTCxHQUE2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QUEwQjtBQUMvRGIsWUFBQUE7QUFEK0QsV0FBMUIsQ0FBdkM7QUFHRCxTQUpELENBSUUsT0FBT1MsR0FBUCxFQUFZO0FBQ1puRCwwQkFBSThCLElBQUosQ0FBVSw2QkFBNEJxQixHQUFHLENBQUNDLE9BQVEsRUFBbEQ7O0FBQ0FrQixVQUFBQSxNQUFNLENBQUNuQixHQUFELENBQU47QUFDRDs7QUFJRCxZQUFJTCxnQkFBRUMsT0FBRixDQUFVMEYsUUFBVixDQUFKLEVBQXlCO0FBQ3ZCLGNBQUkzQyxHQUFHLEdBQUcsZ0NBQVY7O0FBQ0E5RiwwQkFBSUMsS0FBSixDQUFVNkYsR0FBVjs7QUFDQXhCLFVBQUFBLE1BQU0sQ0FBQyxJQUFJaEIsS0FBSixDQUFVd0MsR0FBVixDQUFELENBQU47QUFDRCxTQUpELE1BSU87QUFDTHpCLFVBQUFBLE9BQU8sQ0FBQyxDQUFDcUUsaUJBQUQsRUFBb0JELFFBQXBCLENBQUQsQ0FBUDtBQUNEO0FBQ0YsT0FwQk0sR0FBUDtBQXFCRCxLQTdDWSxDQUFiO0FBOENEOztBQUVEbEcsRUFBQUEseUJBQXlCLENBQUVZLEdBQUYsRUFBT3dGLE9BQVAsRUFBZ0I7QUFJdkMsU0FBS3ZILFFBQUwsQ0FBY3dILElBQWQsQ0FBbUJELE9BQU8sQ0FBQy9ELEVBQTNCO0FBQ0Q7O0FBRURwQyxFQUFBQSxrQkFBa0IsR0FBSTtBQUVwQnhDLG9CQUFJQyxLQUFKLENBQVcsaUNBQVg7QUFDRDs7QUFFRDRJLEVBQUFBLGNBQWMsQ0FBRTFGLEdBQUYsRUFBTzJGLFVBQVAsRUFBbUI7QUFFL0I5SSxvQkFBSUMsS0FBSixDQUFXLGtCQUFpQm1GLElBQUksQ0FBQ0MsU0FBTCxDQUFleUQsVUFBZixDQUEyQixFQUF2RDtBQUNEOztBQWxpQjRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlbW90ZU1lc3NhZ2VzIGZyb20gJy4vcmVtb3RlLW1lc3NhZ2VzJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IFJwY01lc3NhZ2VIYW5kbGVyIGZyb20gJy4vcnBjLW1lc3NhZ2UtaGFuZGxlcic7XG5pbXBvcnQgeyB1dGlsLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cblxuY29uc3QgREFUQV9MT0dfTEVOR1RIID0ge2xlbmd0aDogMjAwfTtcblxuY29uc3QgV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCA9IDEwMDA7XG5cbmNvbnN0IE1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEID0gJzEyLjInO1xuXG4vLyBgVGFyZ2V0LmV4aXN0c2AgcHJvdG9jb2wgbWV0aG9kIHdhcyByZW1vdmVkIGZyb20gV2ViS2l0aW4gMTMuNFxuY29uc3QgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMgPSAnMTMuNCc7XG5cbmZ1bmN0aW9uIGlzVGFyZ2V0QmFzZWQgKGlzU2FmYXJpLCBwbGF0Zm9ybVZlcnNpb24pIHtcbiAgLy8gT24gaU9TIDEyLjIgdGhlIG1lc3NhZ2VzIGdldCBzZW50IHRocm91Z2ggdGhlIFRhcmdldCBkb21haW5cbiAgLy8gT24gaU9TIDEzLjArLCBXS1dlYlZpZXcgYWxzbyBuZWVkcyB0byBmb2xsb3cgdGhlIFRhcmdldCBkb21haW4sXG4gIC8vIHNvIGhlcmUgb25seSBjaGVjayB0aGUgdGFyZ2V0IE9TIHZlcnNpb24gYXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLlxuICBjb25zdCBpc0hpZ2hWZXJzaW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnMocGxhdGZvcm1WZXJzaW9uLCAnPj0nLCBNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRCk7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgd2hpY2ggY29tbXVuaWNhdGlvbiBzdHlsZSB0byB1c2UgKCR7aXNTYWZhcmkgPyAnJyA6ICdub24tJ31TYWZhcmkgb24gcGxhdGZvcm0gdmVyc2lvbiAnJHtwbGF0Zm9ybVZlcnNpb259JylgKTtcbiAgbG9nLmRlYnVnKGBQbGF0Zm9ybSB2ZXJzaW9uIGVxdWFsIG9yIGhpZ2hlciB0aGFuICcke01JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEfSc6ICR7aXNIaWdoVmVyc2lvbn1gKTtcbiAgcmV0dXJuIGlzSGlnaFZlcnNpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJwY0NsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICB0aGlzLl90YXJnZXRzID0gW107XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIW9wdHMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG5cbiAgICBjb25zdCB7XG4gICAgICBidW5kbGVJZCxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbiA9IHt9LFxuICAgICAgaXNTYWZhcmkgPSB0cnVlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbiA9IGZhbHNlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBmYWxzZSxcbiAgICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgICAgc29ja2V0Q2h1bmtTaXplLFxuICAgICAgZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgdGhpcy5pc1NhZmFyaSA9IGlzU2FmYXJpO1xuXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLnNlbmRlcklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLm1zZ0lkID0gMDtcblxuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbiA9IGxvZ0FsbENvbW11bmljYXRpb247XG4gICAgdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCA9IGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wO1xuICAgIHRoaXMuc29ja2V0Q2h1bmtTaXplID0gc29ja2V0Q2h1bmtTaXplO1xuICAgIHRoaXMud2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGggPSB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDtcblxuICAgIHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZ1bGxQYWdlSW5pdGlhbGl6YXRpb247XG5cbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG5cbiAgICB0aGlzLl9jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuX3RhcmdldHMgPSB7fTtcblxuICAgIC8vIHN0YXJ0IHdpdGggYSBiZXN0IGd1ZXNzIGZvciB0aGUgcHJvdG9jb2xcbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkKGlzU2FmYXJpLCB0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gIH1cblxuICBnZXQgY29udGV4dHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0cztcbiAgfVxuXG4gIGdldCBuZWVkc1RhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgJiYgdGhpcy5pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IHRhcmdldHMgKCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXRzO1xuICB9XG5cbiAgZ2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cblxuICBzZXQgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgKHNob3VsZENoZWNrRm9yVGFyZ2V0KSB7XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIXNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgZ2V0IGlzQ29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQ7XG4gIH1cblxuICBzZXQgaXNDb25uZWN0ZWQgKGNvbm5lY3RlZCkge1xuICAgIHRoaXMuY29ubmVjdGVkID0gISFjb25uZWN0ZWQ7XG4gIH1cblxuICBvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25jZSAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmYgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIGxvZy53YXJuKGBTZXR0aW5nIGNvbW11bmljYXRpb24gcHJvdG9jb2w6IHVzaW5nICR7aXNUYXJnZXRCYXNlZCA/ICdUYXJnZXQtYmFzZWQnIDogJ2Z1bGwgV2ViIEluc3BlY3RvciBwcm90b2NvbCd9IGNvbW11bmljYXRpb25gKTtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcblxuICAgIGlmICghdGhpcy5yZW1vdGVNZXNzYWdlcykge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcyA9IG5ldyBSZW1vdGVNZXNzYWdlcyhpc1RhcmdldEJhc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBuZXcgUnBjTWVzc2FnZUhhbmRsZXIoaXNUYXJnZXRCYXNlZCk7XG5cbiAgICAgIC8vIGFkZCBoYW5kbGVycyBmb3IgaW50ZXJuYWwgZXZlbnRzXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIHRoaXMuYWRkVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0JywgdGhpcy51cGRhdGVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgdGhpcy5yZW1vdmVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdSdW50aW1lLmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkJywgdGhpcy5vbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignSGVhcC5nYXJiYWdlQ29sbGVjdGVkJywgdGhpcy5vbkdhcmJhZ2VDb2xsZWN0ZWQuYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclRhcmdldCAoYXBwSWRLZXksIHBhZ2VJZEtleSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UgJiYgIXRoaXMubmVlZHNUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2Ugd2FpdGluZyBpcyBuZWNlc3NhcnkgdG8gc2VlIHdoYXQgdGhlIHRhcmdldCBpc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+ICFfLmlzRW1wdHkodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpLCB7XG4gICAgICAgIHdhaXRNczogV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCxcbiAgICAgICAgZXJyb3I6ICdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb25kaXRpb24gdW5tZXQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRhcmdldHMgZm91bmQsIHVuYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGRldmljZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmQgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3Qge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXlcbiAgICB9ID0gb3B0cztcbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYXBwSWRLZXkpICYmICFfLmlzRW1wdHkocGFnZUlkS2V5KSkge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCB7IG1lc3NhZ2UgPSAnJyB9ID0gZXJyO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKGAndGFyZ2V0JyBkb21haW4gd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICAgIGxvZy5pbmZvKCdUaGUgdGFyZ2V0IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLiAnICtcbiAgICAgICAgICAnV2lsbCBmb2xsb3cgbm9uLXRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLicpO1xuICAgICAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoYGRvbWFpbiB3YXMgbm90IGZvdW5kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBzb21lIGFyZ3VtZW50cyBvZiBtZXRob2RgKSB8fFxuICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoYG1pc3NpbmcgdGFyZ2V0YCkpIHtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbG9nLmRlYnVnKGBTZW5kaW5nIHRvIFdlYiBJbnNwZWN0b3IgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRUb0RldmljZSAoY29tbWFuZCwgb3B0cyA9IHt9LCB3YWl0Rm9yUmVzcG9uc2UgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2hlbmV2ZXIgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAvLyByZXBsaWVzIHRvIG91ciByZXF1ZXN0XG5cbiAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIG1lc3NhZ2VzIGNvbWluZyBhbmQgZ29pbmcgdXNpbmcgYSBzaW1wbGUgc2VxdWVudGlhbCBpZFxuICAgICAgY29uc3QgbXNnSWQgPSB0aGlzLm1zZ0lkKys7XG4gICAgICBsZXQgd3JhcHBlck1zZ0lkID0gbXNnSWQ7XG4gICAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICAgIC8vIGZvciB0YXJnZXQtYmFzZSBjb21tdW5pY2F0aW9uLCBldmVyeXRoaW5nIGlzIHdyYXBwZWQgdXBcbiAgICAgICAgd3JhcHBlck1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgICAvLyBhY2tub3dsZWRnZSB3cmFwcGVyIG1lc3NhZ2VcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbih3cmFwcGVyTXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwcElkS2V5ID0gb3B0cy5hcHBJZEtleTtcbiAgICAgIGNvbnN0IHBhZ2VJZEtleSA9IG9wdHMucGFnZUlkS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SWQgPSB0aGlzLmdldFRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcblxuICAgICAgLy8gcmV0cmlldmUgdGhlIGNvcnJlY3QgY29tbWFuZCB0byBzZW5kXG4gICAgICBjb25zdCBmdWxsT3B0cyA9IF8uZGVmYXVsdHMoe1xuICAgICAgICBjb25uSWQ6IHRoaXMuY29ubklkLFxuICAgICAgICBzZW5kZXJJZDogdGhpcy5zZW5kZXJJZCxcbiAgICAgICAgdGFyZ2V0SWQsXG4gICAgICAgIGlkOiBtc2dJZCxcbiAgICAgIH0sIG9wdHMpO1xuICAgICAgY29uc3QgY21kID0gdGhpcy5yZW1vdGVNZXNzYWdlcy5nZXRSZW1vdGVDb21tYW5kKGNvbW1hbmQsIGZ1bGxPcHRzKTtcblxuICAgICAgaWYgKGNtZD8uX19hcmd1bWVudD8uV0lSU29ja2V0RGF0YUtleSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG1lc3NhZ2UgYmVpbmcgc2VudCBoYXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZFxuICAgICAgICBpZiAoXy5pc05pbChjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkKSkge1xuICAgICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkuaWQgPSB3cmFwcGVyTXNnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSA9XG4gICAgICAgICAgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSkpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZUhhbmRsZWQgPSB0cnVlO1xuICAgICAgaWYgKCF3YWl0Rm9yUmVzcG9uc2UpIHtcbiAgICAgICAgLy8gdGhlIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCBhcyBzb29uIGFzIHRoZSBzb2NrZXQgaGFzIGJlZW4gc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBkbyBub3QgbG9nIHJlY2VpcHRzXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCB3YWl0aW5nIGZvciB0aGlzLCBhbmQgaWYgaXQgZXJyb3JzIGl0IGlzIG1vc3QgbGlrZWx5XG4gICAgICAgICAgICAvLyBhIHByb3RvY29sIGNoYW5nZS4gTG9nIGFuZCBjaGVjayBkdXJpbmcgdGVzdGluZ1xuICAgICAgICAgICAgbG9nLmVycm9yKGBSZWNlaXZlZCBlcnJvciBmcm9tIHNlbmQgdGhhdCBpcyBub3QgYmVpbmcgd2FpdGVkIGZvciAoaWQ6ICR7bXNnSWR9KTogJyR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShlcnIpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICAgIC8vIHJlamVjdCwgdGhvdWdoIGl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoaXMgd2lsbCBiZSB0cmlnZ2VyZWQsIHNpbmNlXG4gICAgICAgICAgICAvLyB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBkaXJlY3RsdHkgYWZ0ZXIgc2VuZC4gT24gdGhlIG9mZiBjaGFuY2UsXG4gICAgICAgICAgICAvLyB0aG91Z2gsIGl0IHdpbGwgYWxlcnQgb2YgYSBwcm90b2NvbCBjaGFuZ2UuXG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyLmxpc3RlbmVycyhjbWQuX19zZWxlY3RvcikubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcihjbWQuX19zZWxlY3RvciwgZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIERBVEFfTE9HX0xFTkdUSCl9J2ApO1xuICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKG1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYFJlbW90ZSBkZWJ1Z2dlciBlcnJvciB3aXRoIGNvZGUgJyR7ZXJyLmNvZGV9JzogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgZGF0YSByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGVsc2UgaXMgaGFuZGxpbmcgdGhpbmdzLCBzbyBqdXN0IHJlc29sdmUgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZW50XG4gICAgICAgIG1lc3NhZ2VIYW5kbGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1zZyA9IGBTZW5kaW5nICcke2NtZC5fX3NlbGVjdG9yfScgbWVzc2FnZWAgK1xuICAgICAgICAoZnVsbE9wdHMuYXBwSWRLZXkgPyBgIHRvIGFwcCAnJHtmdWxsT3B0cy5hcHBJZEtleX0nYCA6ICcnKSArXG4gICAgICAgIChmdWxsT3B0cy5wYWdlSWRLZXkgPyBgLCBwYWdlICcke2Z1bGxPcHRzLnBhZ2VJZEtleX0nYCA6ICcnKSArXG4gICAgICAgICh0aGlzLm5lZWRzVGFyZ2V0ICYmIHRhcmdldElkID8gYCwgdGFyZ2V0ICcke3RhcmdldElkfSdgIDogJycpICtcbiAgICAgICAgYCAoaWQ6ICR7bXNnSWR9KTogJyR7Y29tbWFuZH0nYDtcbiAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kTWVzc2FnZShjbWQpO1xuICAgICAgICBpZiAoIW1lc3NhZ2VIYW5kbGVkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGhhbmRsZXJzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHJlc29sdmluZyxcbiAgICAgICAgICAvLyBhbmQgbm8gZXJyb3JzIHNlbmRpbmcgdGhlIG1lc3NhZ2Ugb3ZlciB0aGUgc29ja2V0LCBzbyByZXNvbHZlXG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnY29ubmVjdCcgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKC8qIGNvbW1hbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdzZW5kTWVzc2FnZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKC8qIGRhdGEgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdyZWNlaXZlJyBmdW5jdGlvbmApO1xuICB9XG5cbiAgYWRkVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLndhcm4oYFJlY2VpdmVkICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcgZXZlbnQgZm9yIGFwcCAnJHthcHB9JyB3aXRoIG5vIHRhcmdldC4gU2tpcHBpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24pICYmICF0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyBwZW5kaW5nIHJlcXVlc3Q6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldEluZm8uaXNQcm92aXNpb25hbCkge1xuICAgICAgbG9nLmRlYnVnKGBQcm92aXNpb25hbCB0YXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcH0nLCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScuIElnbm9yaW5nIHVudGlsIHRhcmdldCB1cGRhdGUgZXZlbnRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSB0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb247XG5cbiAgICBsb2cuZGVidWcoYFRhcmdldCBjcmVhdGVkIGZvciBhcHAgJyR7YXBwSWRLZXl9JyBhbmQgcGFnZSAnJHtwYWdlSWRLZXl9JzogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbmZvKX1gKTtcbiAgICBpZiAoXy5oYXModGhpcy50YXJnZXRzW2FwcElkS2V5XSwgcGFnZUlkS2V5KSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBpcyBhbHJlYWR5IGEgdGFyZ2V0IGZvciB0aGlzIGFwcCBhbmQgcGFnZSAoJyR7dGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldfScpLiBUaGlzIG1pZ2h0IGNhdXNlIHByb2JsZW1zYCk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0c1thcHBdID0gdGhpcy50YXJnZXRzW2FwcF0gfHwge307XG4gICAgdGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldID0gdGFyZ2V0SW5mby50YXJnZXRJZDtcbiAgfVxuXG4gIHVwZGF0ZVRhcmdldCAoZXJyLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCkge1xuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IHVwZGF0ZWQgZm9yIGFwcCAnJHthcHB9Jy4gT2xkIHRhcmdldDogJyR7b2xkVGFyZ2V0SWR9JywgbmV3IHRhcmdldDogJyR7bmV3VGFyZ2V0SWR9J2ApO1xuICAgIGlmICghdGhpcy50YXJnZXRzW2FwcF0pIHtcbiAgICAgIGxvZy53YXJuKGBObyBleGlzdGluZyB0YXJnZXQgZm9yIGFwcCAnJHthcHB9Jy4gTm90IHN1cmUgd2hhdCB0byBkb2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBzYXZlIHRoaXMsIHRvIGJlIHVzZWQgaWYvd2hlbiB0aGUgZXhpc3RpbmcgdGFyZ2V0IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsID0ge1xuICAgICAgb2xkVGFyZ2V0SWQsXG4gICAgICBuZXdUYXJnZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcgZXZlbnQgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgZGVzdHJveWVkIGZvciBhcHAgJyR7YXBwfSc6ICR7dGFyZ2V0SW5mby50YXJnZXRJZH1gKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhcmdldHMgYW5kIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBhIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0XG4gICAgaWYgKHRoaXMudGFyZ2V0c1thcHBdPy5wcm92aXNpb25hbD8ub2xkVGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgIGNvbnN0IHtvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWR9ID0gdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG4gICAgICBkZWxldGUgdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG5cbiAgICAgIC8vIHdlIGRvIG5vdCBrbm93IHRoZSBwYWdlLCBzbyBnbyB0aHJvdWdoIGFuZCBmaW5kIHRoZSBleGlzdGluZyB0YXJnZXRcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgICAgaWYgKHRhcmdldElkID09PSBvbGRUYXJnZXRJZCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgcHJvdmlzaW9uYWwgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIFVwZGF0aW5nYCk7XG4gICAgICAgICAgdGFyZ2V0c1twYWdlXSA9IG5ld1RhcmdldElkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLndhcm4oYFByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nIGZvdW5kLCBidXQgbm8gc3VpdGFibGUgZXhpc3RpbmcgdGFyZ2V0IGZvdW5kLiBUaGlzIG1heSBjYXVzZSBwcm9ibGVtc2ApO1xuICAgICAgbG9nLndhcm4oYE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIEV4aXN0aW5nIHRhcmdldHM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0cyl9YCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gd2FpdGluZyBwcm92aXNpb25hbCB0YXJnZXQsIGp1c3QgZ2V0IHJpZCBvZiB0aGUgZXhpc3Rpbmcgb25lXG4gICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMudGFyZ2V0c1thcHBdO1xuICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgIGlmICh0YXJnZXRJZCA9PT0gdGFyZ2V0SW5mby50YXJnZXRJZCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0c1twYWdlXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFRhcmdldCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScgZGVsZXRlZCBmb3IgYXBwICcke2FwcH0nLCBidXQgbm8gc3VjaCB0YXJnZXQgZXhpc3RzYCk7XG4gIH1cblxuICBnZXRUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICByZXR1cm4gKHRoaXMudGFyZ2V0c1thcHBJZEtleV0gfHwge30pW3BhZ2VJZEtleV07XG4gIH1cblxuICBhc3luYyBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uID0gW2FwcElkS2V5LCBwYWdlSWRLZXldO1xuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHN0ZXBzIHRoYXQgdGhlIERlc2t0b3AgU2FmYXJpIHN5c3RlbVxuICAgIC8vIGdvZXMgdGhyb3VnaCB0byBpbml0aWFsaXplIHRoZSBXZWIgSW5zcGVjdG9yIHNlc3Npb25cblxuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIC8vIGhpZ2hsaWdodCBhbmQgdGhlbiB1bi1oaWdobGlnaHQgdGhlIHdlYnZpZXdcbiAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgW3RydWUsIGZhbHNlXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdpbmRpY2F0ZVdlYlZpZXcnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgZW5hYmxlZCxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnc2V0U2VuZGVyS2V5Jywgc2VuZE9wdHMpO1xuICAgIGxvZy5kZWJ1ZygnU2VuZGVyIGtleSBzZXQnKTtcblxuICAgIGlmICh0aGlzLmlzVGFyZ2V0QmFzZWQgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5wbGF0Zm9ybVZlcnNpb24sICc8JywgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmQoJ1RhcmdldC5leGlzdHMnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUGFnZUZ1bGwoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUGVyZm9ybSB0aGUgbWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBnZXQgdGhlIFdlYiBJbnNwZWN0b3Igd29ya2luZ1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUnVudGltZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSGVhcC5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5pbml0aWFsaXplZCcsIHNlbmRPcHRzLCBmYWxzZSk7XG4gIH1cblxuICAvKlxuICAgKiBNaW1pYyBldmVyeSBzdGVwIHRoYXQgRGVza3RvcCBTYWZhcmkgRGV2ZWxvcCB0b29scyB1c2VzIHRvIGluaXRpYWxpemUgYVxuICAgKiBXZWIgSW5zcGVjdG9yIHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlRnVsbCAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXNrcyB0byBpbml0aWFsaXplXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmdldFJlc291cmNlVHJlZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET01TdG9yYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEYXRhYmFzZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5kZXhlZERCLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDU1MuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ01lbW9yeS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEluc3RydW1lbnRzJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBpbnN0cnVtZW50czogWydUaW1lbGluZScsICdTY3JpcHRQcm9maWxlcicsICdDUFUnXSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEF1dG9DYXB0dXJlRW5hYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBzdGF0ZTogJ25vbmUnLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VPbkFzc2VydGlvbnMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGRlcHRoOiAyMDAsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc2hvdWxkUGF1c2U6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdMYXllclRyZWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1dvcmtlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ2FudmFzLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET00uZ2V0RG9jdW1lbnQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGNvbnN0IGxvZ2dpbmdDaGFubmVscyA9IGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5nZXRMb2dnaW5nQ2hhbm5lbHMnLCBzZW5kT3B0cyk7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgKGxvZ2dpbmdDaGFubmVscy5jaGFubmVscyB8fCBbXSkubWFwKChlbnRyeSkgPT4gZW50cnkuc291cmNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLnNldExvZ2dpbmdDaGFubmVsTGV2ZWwnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZXZlbDogJ3ZlcmJvc2UnLFxuICAgICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0QXBwIChhcHBJZEtleSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2NhbCBjYWxsYmFjaywgdGVtcG9yYXJpbHkgYWRkZWQgYXMgY2FsbGJhY2sgdG9cbiAgICAgIC8vIGBfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOmAgcmVtb3RlIGRlYnVnZ2VyIHJlc3BvbnNlXG4gICAgICAvLyB0byBoYW5kbGUgdGhlIGluaXRpYWwgY29ubmVjdGlvblxuICAgICAgY29uc3Qgb25BcHBDaGFuZ2UgPSAoZXJyLCBkaWN0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnJvbSB0aGUgZGljdGlvbmFyeSByZXR1cm5lZCwgZ2V0IHRoZSBpZHNcbiAgICAgICAgY29uc3Qgb2xkQXBwSWRLZXkgPSBkaWN0LldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RBcHBJZEtleSA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYSByZXBvcnQgb2YgYSBwcm94eSByZWRpcmVjdCBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXJcbiAgICAgICAgLy8gd2Ugd2FudCB0byB1cGRhdGUgb3VyIGRpY3Rpb25hcnkgYW5kIGdldCBhIG5ldyBhcHAgaWRcbiAgICAgICAgaWYgKG9sZEFwcElkS2V5ICYmIGNvcnJlY3RBcHBJZEtleSAhPT0gb2xkQXBwSWRLZXkpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFdlIHdlcmUgbm90aWZpZWQgd2UgbWlnaHQgaGF2ZSBjb25uZWN0ZWQgdG8gdGhlIHdyb25nIGFwcC4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBVc2luZyBpZCAke2NvcnJlY3RBcHBJZEtleX0gaW5zdGVhZCBvZiAke29sZEFwcElkS2V5fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTmV3IGFwcGxpY2F0aW9uIGhhcyBjb25uZWN0ZWQnKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5wcmVwZW5kT25jZUxpc3RlbmVyKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIG9uQXBwQ2hhbmdlKTtcblxuICAgICAgLy8gZG8gdGhlIGFjdHVhbCBjb25uZWN0aW5nIHRvIHRoZSBhcHBcbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgcGFnZURpY3QsIGNvbm5lY3RlZEFwcElkS2V5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIChbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMuc2VuZCgnY29ubmVjdFRvQXBwJywge1xuICAgICAgICAgICAgYXBwSWRLZXlcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gY29ubmVjdCB0byBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIGNvbm5lY3QgbG9naWMgaGFwcGVucywgYnV0IHdpdGggYW4gZW1wdHkgZGljdGlvbmFyeVxuICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICBsZXQgbXNnID0gJ0VtcHR5IHBhZ2UgZGljdGlvbmFyeSByZWNlaXZlZCc7XG4gICAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKFtjb25uZWN0ZWRBcHBJZEtleSwgcGFnZURpY3RdKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRXhlY3V0aW9uQ29udGV4dENyZWF0ZWQgKGVyciwgY29udGV4dCkge1xuICAgIC8vIHsgaWQ6IDIsIGlzUGFnZUNvbnRleHQ6IHRydWUsIG5hbWU6ICcnLCBmcmFtZUlkOiAnMC4xJyB9XG4gICAgLy8gcmlnaHQgbm93IHdlIGhhdmUgbm8gd2F5IHRvIG1hcCBjb250ZXh0cyB0byBhcHBzL3BhZ2VzXG4gICAgLy8gc28ganVzdCBzdG9yZVxuICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0LmlkKTtcbiAgfVxuXG4gIG9uR2FyYmFnZUNvbGxlY3RlZCAoKSB7XG4gICAgLy8ganVzdCB3YW50IHRvIGxvZyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLCBhcyBpdCBjYW4gYWZmZWN0IG9wZXJ0aW9uXG4gICAgbG9nLmRlYnVnKGBXZWIgSW5zcGVjdG9yIGdhcmJhZ2UgY29sbGVjdGVkYCk7XG4gIH1cblxuICBvblNjcmlwdFBhcnNlZCAoZXJyLCBzY3JpcHRJbmZvKSB7XG4gICAgLy8geyBzY3JpcHRJZDogJzEzJywgdXJsOiAnJywgc3RhcnRMaW5lOiAwLCBzdGFydENvbHVtbjogMCwgZW5kTGluZTogODIsIGVuZENvbHVtbjogMyB9XG4gICAgbG9nLmRlYnVnKGBTY3JpcHQgcGFyc2VkOiAke0pTT04uc3RyaW5naWZ5KHNjcmlwdEluZm8pfWApO1xuICB9XG59XG4iXSwiZmlsZSI6ImxpYi9ycGMvcnBjLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
571
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ycGMvcnBjLWNsaWVudC5qcyJdLCJuYW1lcyI6WyJEQVRBX0xPR19MRU5HVEgiLCJsZW5ndGgiLCJXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCIsIldBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCIsIk1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEIiwiTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMiLCJpc1RhcmdldEJhc2VkIiwiaXNTYWZhcmkiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc0hpZ2hWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsImxvZyIsImRlYnVnIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX3RhcmdldHMiLCJfc2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsImJ1bmRsZUlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzb2NrZXRDaHVua1NpemUiLCJmdWxsUGFnZUluaXRpYWxpemF0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uSWQiLCJ1dWlkVjQiLCJzZW5kZXJJZCIsIm1zZ0lkIiwiX2NvbnRleHRzIiwiY29udGV4dHMiLCJuZWVkc1RhcmdldCIsInRhcmdldHMiLCJjb25uZWN0ZWQiLCJvbiIsImV2ZW50IiwibGlzdGVuZXIiLCJtZXNzYWdlSGFuZGxlciIsIm9uY2UiLCJvZmYiLCJ3YXJuIiwiX2lzVGFyZ2V0QmFzZWQiLCJyZW1vdGVNZXNzYWdlcyIsIlJlbW90ZU1lc3NhZ2VzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJhZGRUYXJnZXQiLCJiaW5kIiwidXBkYXRlVGFyZ2V0IiwicmVtb3ZlVGFyZ2V0Iiwib25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZCIsIm9uR2FyYmFnZUNvbGxlY3RlZCIsIndhaXRGb3JUYXJnZXQiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsImZvcmNlIiwiZ2V0VGFyZ2V0IiwiXyIsImlzRW1wdHkiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiZXJyb3IiLCJlcnIiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJFcnJvciIsInNlbmQiLCJjb21tYW5kIiwid2FpdEZvclJlc3BvbnNlIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0Iiwic2VuZFRvRGV2aWNlIiwidG9Mb3dlckNhc2UiLCJpbmZvIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsIndyYXBwZXJNc2dJZCIsInRvU3RyaW5nIiwidGFyZ2V0SWQiLCJmdWxsT3B0cyIsImRlZmF1bHRzIiwiaWQiLCJjbWQiLCJnZXRSZW1vdGVDb21tYW5kIiwiX19hcmd1bWVudCIsIldJUlNvY2tldERhdGFLZXkiLCJpc05pbCIsIkJ1ZmZlciIsImZyb20iLCJKU09OIiwic3RyaW5naWZ5IiwibWVzc2FnZUhhbmRsZWQiLCJ0cnVuY2F0ZSIsImxpc3RlbmVycyIsIl9fc2VsZWN0b3IiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwiYXJncyIsInZhbHVlIiwiY29kZSIsIm1zZyIsInJlcyIsInNlbmRNZXNzYWdlIiwiY29ubmVjdCIsImRpc2Nvbm5lY3QiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJyZWNlaXZlIiwiYXBwIiwidGFyZ2V0SW5mbyIsInBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24iLCJpc1Byb3Zpc2lvbmFsIiwiaGFzIiwib2xkVGFyZ2V0SWQiLCJuZXdUYXJnZXRJZCIsInByb3Zpc2lvbmFsIiwicGFnZSIsInRvUGFpcnMiLCJzZWxlY3RQYWdlIiwic2VuZE9wdHMiLCJlbmFibGVkIiwiT2JqZWN0IiwiYXNzaWduIiwiaW5pdGlhbGl6ZVBhZ2VGdWxsIiwiaW5pdGlhbGl6ZVBhZ2UiLCJkaXNhYmxlZCIsImluc3RydW1lbnRzIiwiYWN0aXZlIiwic3RhdGUiLCJkZXB0aCIsInNob3VsZFBhdXNlIiwibG9nZ2luZ0NoYW5uZWxzIiwic291cmNlIiwiY2hhbm5lbHMiLCJtYXAiLCJlbnRyeSIsImxldmVsIiwic2VsZWN0QXBwIiwib25BcHBDaGFuZ2UiLCJkaWN0Iiwib2xkQXBwSWRLZXkiLCJXSVJIb3N0QXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwiY29ycmVjdEFwcElkS2V5IiwiV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwicGFnZURpY3QiLCJjb25uZWN0ZWRBcHBJZEtleSIsImNvbnRleHQiLCJwdXNoIiwib25TY3JpcHRQYXJzZWQiLCJzY3JpcHRJbmZvIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLGVBQWUsR0FBRztBQUFDQyxFQUFBQSxNQUFNLEVBQUU7QUFBVCxDQUF4QjtBQUVBLE1BQU1DLHVCQUF1QixHQUFHLEtBQWhDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcsSUFBakM7QUFFQSxNQUFNQyw2QkFBNkIsR0FBRyxNQUF0QztBQUdBLE1BQU1DLDZCQUE2QixHQUFHLE1BQXRDOztBQUVBLFNBQVNDLGFBQVQsQ0FBd0JDLFFBQXhCLEVBQWtDQyxlQUFsQyxFQUFtRDtBQUlqRCxRQUFNQyxhQUFhLEdBQUdDLGNBQUtDLGVBQUwsQ0FBcUJILGVBQXJCLEVBQXNDLElBQXRDLEVBQTRDSiw2QkFBNUMsQ0FBdEI7O0FBQ0FRLGtCQUFJQyxLQUFKLENBQVcsOENBQTZDTixRQUFRLEdBQUcsRUFBSCxHQUFRLE1BQU8sK0JBQThCQyxlQUFnQixJQUE3SDs7QUFDQUksa0JBQUlDLEtBQUosQ0FBVywwQ0FBeUNULDZCQUE4QixNQUFLSyxhQUFjLEVBQXJHOztBQUNBLFNBQU9BLGFBQVA7QUFDRDs7QUFFYyxNQUFNSyxTQUFOLENBQWdCO0FBQzdCQyxFQUFBQSxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7QUFDdEIsU0FBS0MsUUFBTCxHQUFnQixFQUFoQjtBQUNBLFNBQUtDLHFCQUFMLEdBQTZC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MUIsQ0FBdkM7QUFHRCxTQUpELENBSUUsT0FBT1MsR0FBUCxFQUFZO0FBQ1puRCwwQkFBSThCLElBQUosQ0FBVSw2QkFBNEJxQixHQUFHLENBQUNDLE9BQVEsRUFBbEQ7O0FBQ0FrQixVQUFBQSxNQUFNLENBQUNuQixHQUFELENBQU47QUFDRDs7QUFJRCxZQUFJTCxnQkFBRUMsT0FBRixDQUFVMEYsUUFBVixDQUFKLEVBQXlCO0FBQ3ZCLGNBQUkzQyxHQUFHLEdBQUcsZ0NBQVY7O0FBQ0E5RiwwQkFBSUMsS0FBSixDQUFVNkYsR0FBVjs7QUFDQXhCLFVBQUFBLE1BQU0sQ0FBQyxJQUFJaEIsS0FBSixDQUFVd0MsR0FBVixDQUFELENBQU47QUFDRCxTQUpELE1BSU87QUFDTHpCLFVBQUFBLE9BQU8sQ0FBQyxDQUFDcUUsaUJBQUQsRUFBb0JELFFBQXBCLENBQUQsQ0FBUDtBQUNEO0FBQ0YsT0FwQk0sR0FBUDtBQXFCRCxLQTdDWSxDQUFiO0FBOENEOztBQUVEbEcsRUFBQUEseUJBQXlCLENBQUVZLEdBQUYsRUFBT3dGLE9BQVAsRUFBZ0I7QUFJdkMsU0FBS3ZILFFBQUwsQ0FBY3dILElBQWQsQ0FBbUJELE9BQU8sQ0FBQy9ELEVBQTNCO0FBQ0Q7O0FBRURwQyxFQUFBQSxrQkFBa0IsR0FBSTtBQUVwQnhDLG9CQUFJQyxLQUFKLENBQVcsaUNBQVg7QUFDRDs7QUFFRDRJLEVBQUFBLGNBQWMsQ0FBRTFGLEdBQUYsRUFBTzJGLFVBQVAsRUFBbUI7QUFFL0I5SSxvQkFBSUMsS0FBSixDQUFXLGtCQUFpQm1GLElBQUksQ0FBQ0MsU0FBTCxDQUFleUQsVUFBZixDQUEyQixFQUF2RDtBQUNEOztBQWxpQjRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlbW90ZU1lc3NhZ2VzIGZyb20gJy4vcmVtb3RlLW1lc3NhZ2VzJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IFJwY01lc3NhZ2VIYW5kbGVyIGZyb20gJy4vcnBjLW1lc3NhZ2UtaGFuZGxlcic7XG5pbXBvcnQgeyB1dGlsLCB0aW1pbmcgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IERBVEFfTE9HX0xFTkdUSCA9IHtsZW5ndGg6IDIwMH07XG5cbmNvbnN0IFdBSVRfRk9SX1RBUkdFVF9USU1FT1VUID0gMTAwMDA7XG5jb25zdCBXQUlUX0ZPUl9UQVJHRVRfSU5URVJWQUwgPSAxMDAwO1xuXG5jb25zdCBNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRCA9ICcxMi4yJztcblxuLy8gYFRhcmdldC5leGlzdHNgIHByb3RvY29sIG1ldGhvZCB3YXMgcmVtb3ZlZCBmcm9tIFdlYktpdGluIDEzLjRcbmNvbnN0IE1JTl9QTEFURk9STV9OT19UQVJHRVRfRVhJU1RTID0gJzEzLjQnO1xuXG5mdW5jdGlvbiBpc1RhcmdldEJhc2VkIChpc1NhZmFyaSwgcGxhdGZvcm1WZXJzaW9uKSB7XG4gIC8vIE9uIGlPUyAxMi4yIHRoZSBtZXNzYWdlcyBnZXQgc2VudCB0aHJvdWdoIHRoZSBUYXJnZXQgZG9tYWluXG4gIC8vIE9uIGlPUyAxMy4wKywgV0tXZWJWaWV3IGFsc28gbmVlZHMgdG8gZm9sbG93IHRoZSBUYXJnZXQgZG9tYWluLFxuICAvLyBzbyBoZXJlIG9ubHkgY2hlY2sgdGhlIHRhcmdldCBPUyB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci5cbiAgY29uc3QgaXNIaWdoVmVyc2lvbiA9IHV0aWwuY29tcGFyZVZlcnNpb25zKHBsYXRmb3JtVmVyc2lvbiwgJz49JywgTUlOX1BMQVRGT1JNX0ZPUl9UQVJHRVRfQkFTRUQpO1xuICBsb2cuZGVidWcoYENoZWNraW5nIHdoaWNoIGNvbW11bmljYXRpb24gc3R5bGUgdG8gdXNlICgke2lzU2FmYXJpID8gJycgOiAnbm9uLSd9U2FmYXJpIG9uIHBsYXRmb3JtIHZlcnNpb24gJyR7cGxhdGZvcm1WZXJzaW9ufScpYCk7XG4gIGxvZy5kZWJ1ZyhgUGxhdGZvcm0gdmVyc2lvbiBlcXVhbCBvciBoaWdoZXIgdGhhbiAnJHtNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRH0nOiAke2lzSGlnaFZlcnNpb259YCk7XG4gIHJldHVybiBpc0hpZ2hWZXJzaW9uO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgdGhpcy5fdGFyZ2V0cyA9IFtdO1xuICAgIHRoaXMuX3Nob3VsZENoZWNrRm9yVGFyZ2V0ID0gISFvcHRzLnNob3VsZENoZWNrRm9yVGFyZ2V0O1xuXG4gICAgY29uc3Qge1xuICAgICAgYnVuZGxlSWQsXG4gICAgICBwbGF0Zm9ybVZlcnNpb24gPSB7fSxcbiAgICAgIGlzU2FmYXJpID0gdHJ1ZSxcbiAgICAgIGxvZ0FsbENvbW11bmljYXRpb24gPSBmYWxzZSxcbiAgICAgIGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wID0gZmFsc2UsXG4gICAgICB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCxcbiAgICAgIHNvY2tldENodW5rU2l6ZSxcbiAgICAgIGZ1bGxQYWdlSW5pdGlhbGl6YXRpb24gPSBmYWxzZSxcbiAgICB9ID0gb3B0cztcblxuICAgIHRoaXMuaXNTYWZhcmkgPSBpc1NhZmFyaTtcblxuICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5JZCA9IHV0aWwudXVpZFY0KCk7XG4gICAgdGhpcy5zZW5kZXJJZCA9IHV0aWwudXVpZFY0KCk7XG4gICAgdGhpcy5tc2dJZCA9IDA7XG5cbiAgICB0aGlzLmxvZ0FsbENvbW11bmljYXRpb24gPSBsb2dBbGxDb21tdW5pY2F0aW9uO1xuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBsb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcDtcbiAgICB0aGlzLnNvY2tldENodW5rU2l6ZSA9IHNvY2tldENodW5rU2l6ZTtcbiAgICB0aGlzLndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoID0gd2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGg7XG5cbiAgICB0aGlzLmZ1bGxQYWdlSW5pdGlhbGl6YXRpb24gPSBmdWxsUGFnZUluaXRpYWxpemF0aW9uO1xuXG4gICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuXG4gICAgdGhpcy5fY29udGV4dHMgPSBbXTtcbiAgICB0aGlzLl90YXJnZXRzID0ge307XG5cbiAgICAvLyBzdGFydCB3aXRoIGEgYmVzdCBndWVzcyBmb3IgdGhlIHByb3RvY29sXG4gICAgdGhpcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZChpc1NhZmFyaSwgdGhpcy5wbGF0Zm9ybVZlcnNpb24pO1xuICB9XG5cbiAgZ2V0IGNvbnRleHRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dHM7XG4gIH1cblxuICBnZXQgbmVlZHNUYXJnZXQgKCkge1xuICAgIHJldHVybiB0aGlzLnNob3VsZENoZWNrRm9yVGFyZ2V0ICYmIHRoaXMuaXNUYXJnZXRCYXNlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFyZ2V0cztcbiAgfVxuXG4gIGdldCBzaG91bGRDaGVja0ZvclRhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgc2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0IChzaG91bGRDaGVja0ZvclRhcmdldCkge1xuICAgIHRoaXMuX3Nob3VsZENoZWNrRm9yVGFyZ2V0ID0gISFzaG91bGRDaGVja0ZvclRhcmdldDtcbiAgfVxuXG4gIGdldCBpc0Nvbm5lY3RlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGVkO1xuICB9XG5cbiAgc2V0IGlzQ29ubmVjdGVkIChjb25uZWN0ZWQpIHtcbiAgICB0aGlzLmNvbm5lY3RlZCA9ICEhY29ubmVjdGVkO1xuICB9XG5cbiAgb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24oZXZlbnQsIGxpc3RlbmVyKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9uY2UgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb2ZmIChldmVudCwgbGlzdGVuZXIpIHtcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9mZihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0IGlzVGFyZ2V0QmFzZWQgKGlzVGFyZ2V0QmFzZWQpIHtcbiAgICBsb2cud2FybihgU2V0dGluZyBjb21tdW5pY2F0aW9uIHByb3RvY29sOiB1c2luZyAke2lzVGFyZ2V0QmFzZWQgPyAnVGFyZ2V0LWJhc2VkJyA6ICdmdWxsIFdlYiBJbnNwZWN0b3IgcHJvdG9jb2wnfSBjb21tdW5pY2F0aW9uYCk7XG4gICAgdGhpcy5faXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG5cbiAgICBpZiAoIXRoaXMucmVtb3RlTWVzc2FnZXMpIHtcbiAgICAgIHRoaXMucmVtb3RlTWVzc2FnZXMgPSBuZXcgUmVtb3RlTWVzc2FnZXMoaXNUYXJnZXRCYXNlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3RlTWVzc2FnZXMuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbmV3IFJwY01lc3NhZ2VIYW5kbGVyKGlzVGFyZ2V0QmFzZWQpO1xuXG4gICAgICAvLyBhZGQgaGFuZGxlcnMgZm9yIGludGVybmFsIGV2ZW50c1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LnRhcmdldENyZWF0ZWQnLCB0aGlzLmFkZFRhcmdldC5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24oJ1RhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCcsIHRoaXMudXBkYXRlVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcsIHRoaXMucmVtb3ZlVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignUnVudGltZS5leGVjdXRpb25Db250ZXh0Q3JlYXRlZCcsIHRoaXMub25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZC5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24oJ0hlYXAuZ2FyYmFnZUNvbGxlY3RlZCcsIHRoaXMub25HYXJiYWdlQ29sbGVjdGVkLmJpbmQodGhpcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1RhcmdldEJhc2VkICgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNUYXJnZXRCYXNlZDtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXksIGZvcmNlID0gZmFsc2UpIHtcbiAgICBpZiAoIWZvcmNlICYmICF0aGlzLm5lZWRzVGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0VGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlIHdhaXRpbmcgaXMgbmVjZXNzYXJ5IHRvIHNlZSB3aGF0IHRoZSB0YXJnZXQgaXNcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbigoKSA9PiAhXy5pc0VtcHR5KHRoaXMuZ2V0VGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpKSwge1xuICAgICAgICB3YWl0TXM6IFdBSVRfRk9SX1RBUkdFVF9USU1FT1VULFxuICAgICAgICBpbnRlcnZhbE1zOiBXQUlUX0ZPUl9UQVJHRVRfSU5URVJWQUwsXG4gICAgICAgIGVycm9yOiAnTm8gdGFyZ2V0cyBmb3VuZCwgdW5hYmxlIHRvIGNvbW11bmljYXRlIHdpdGggZGV2aWNlJyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ29uZGl0aW9uIHVubWV0JykpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kIChjb21tYW5kLCBvcHRzID0ge30sIHdhaXRGb3JSZXNwb25zZSA9IHRydWUpIHtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5XG4gICAgfSA9IG9wdHM7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KGFwcElkS2V5KSAmJiAhXy5pc0VtcHR5KHBhZ2VJZEtleSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsZXQgeyBtZXNzYWdlID0gJycgfSA9IGVycjtcbiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhgJ3RhcmdldCcgZG9tYWluIHdhcyBub3QgZm91bmRgKSkge1xuICAgICAgICBsb2cuaW5mbygnVGhlIHRhcmdldCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBUYXJnZXQgYmFzZWQgY29tbXVuaWNhdGlvbi4gJyArXG4gICAgICAgICAgJ1dpbGwgZm9sbG93IG5vbi10YXJnZXQgYmFzZWQgY29tbXVuaWNhdGlvbi4nKTtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNlbmRUb0RldmljZShjb21tYW5kLCBvcHRzLCB3YWl0Rm9yUmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmluY2x1ZGVzKGBkb21haW4gd2FzIG5vdCBmb3VuZGApIHx8XG4gICAgICAgICAgbWVzc2FnZS5pbmNsdWRlcyhgc29tZSBhcmd1bWVudHMgb2YgbWV0aG9kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBtaXNzaW5nIHRhcmdldGApKSB7XG4gICAgICAgIHRoaXMuaXNUYXJnZXRCYXNlZCA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGxvZy5kZWJ1ZyhgU2VuZGluZyB0byBXZWIgSW5zcGVjdG9yIHRvb2sgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kVG9EZXZpY2UgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBwcm9taXNlIHRvIGJlIHJlc29sdmVkIHdoZW5ldmVyIHJlbW90ZSBkZWJ1Z2dlclxuICAgICAgLy8gcmVwbGllcyB0byBvdXIgcmVxdWVzdFxuXG4gICAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBtZXNzYWdlcyBjb21pbmcgYW5kIGdvaW5nIHVzaW5nIGEgc2ltcGxlIHNlcXVlbnRpYWwgaWRcbiAgICAgIGNvbnN0IG1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgbGV0IHdyYXBwZXJNc2dJZCA9IG1zZ0lkO1xuICAgICAgaWYgKHRoaXMuaXNUYXJnZXRCYXNlZCkge1xuICAgICAgICAvLyBmb3IgdGFyZ2V0LWJhc2UgY29tbXVuaWNhdGlvbiwgZXZlcnl0aGluZyBpcyB3cmFwcGVkIHVwXG4gICAgICAgIHdyYXBwZXJNc2dJZCA9IHRoaXMubXNnSWQrKztcbiAgICAgICAgLy8gYWNrbm93bGVkZ2Ugd3JhcHBlciBtZXNzYWdlXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24od3JhcHBlck1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcHBJZEtleSA9IG9wdHMuYXBwSWRLZXk7XG4gICAgICBjb25zdCBwYWdlSWRLZXkgPSBvcHRzLnBhZ2VJZEtleTtcbiAgICAgIGNvbnN0IHRhcmdldElkID0gdGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG5cbiAgICAgIC8vIHJldHJpZXZlIHRoZSBjb3JyZWN0IGNvbW1hbmQgdG8gc2VuZFxuICAgICAgY29uc3QgZnVsbE9wdHMgPSBfLmRlZmF1bHRzKHtcbiAgICAgICAgY29ubklkOiB0aGlzLmNvbm5JZCxcbiAgICAgICAgc2VuZGVySWQ6IHRoaXMuc2VuZGVySWQsXG4gICAgICAgIHRhcmdldElkLFxuICAgICAgICBpZDogbXNnSWQsXG4gICAgICB9LCBvcHRzKTtcbiAgICAgIGNvbnN0IGNtZCA9IHRoaXMucmVtb3RlTWVzc2FnZXMuZ2V0UmVtb3RlQ29tbWFuZChjb21tYW5kLCBmdWxsT3B0cyk7XG5cbiAgICAgIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBtZXNzYWdlIGJlaW5nIHNlbnQgaGFzIGFsbCB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWRcbiAgICAgICAgaWYgKF8uaXNOaWwoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleS5pZCkpIHtcbiAgICAgICAgICBjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkID0gd3JhcHBlck1zZ0lkO1xuICAgICAgICB9XG4gICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkgPVxuICAgICAgICAgIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkpKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1lc3NhZ2VIYW5kbGVkID0gdHJ1ZTtcbiAgICAgIGlmICghd2FpdEZvclJlc3BvbnNlKSB7XG4gICAgICAgIC8vIHRoZSBwcm9taXNlIHdpbGwgYmUgcmVzb2x2ZWQgYXMgc29vbiBhcyB0aGUgc29ja2V0IGhhcyBiZWVuIHNlbnRcbiAgICAgICAgbWVzc2FnZUhhbmRsZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gZG8gbm90IGxvZyByZWNlaXB0c1xuICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uY2UobXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgdGhpcywgYW5kIGlmIGl0IGVycm9ycyBpdCBpcyBtb3N0IGxpa2VseVxuICAgICAgICAgICAgLy8gYSBwcm90b2NvbCBjaGFuZ2UuIExvZyBhbmQgY2hlY2sgZHVyaW5nIHRlc3RpbmdcbiAgICAgICAgICAgIGxvZy5lcnJvcihgUmVjZWl2ZWQgZXJyb3IgZnJvbSBzZW5kIHRoYXQgaXMgbm90IGJlaW5nIHdhaXRlZCBmb3IgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoZXJyKSwgREFUQV9MT0dfTEVOR1RIKX0nYCk7XG4gICAgICAgICAgICAvLyByZWplY3QsIHRob3VnaCBpdCBpcyB2ZXJ5IHJhcmUgdGhhdCB0aGlzIHdpbGwgYmUgdHJpZ2dlcmVkLCBzaW5jZVxuICAgICAgICAgICAgLy8gdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgZGlyZWN0bHR5IGFmdGVyIHNlbmQuIE9uIHRoZSBvZmYgY2hhbmNlLFxuICAgICAgICAgICAgLy8gdGhvdWdoLCBpdCB3aWxsIGFsZXJ0IG9mIGEgcHJvdG9jb2wgY2hhbmdlLlxuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXNzYWdlSGFuZGxlci5saXN0ZW5lcnMoY21kLl9fc2VsZWN0b3IpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnByZXBlbmRPbmNlTGlzdGVuZXIoY21kLl9fc2VsZWN0b3IsIGZ1bmN0aW9uIChlcnIsIC4uLmFyZ3MpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgcmVzcG9uc2UgZnJvbSBzZW5kIChpZDogJHttc2dJZH0pOiAnJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGFyZ3MpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY21kPy5fX2FyZ3VtZW50Py5XSVJTb2NrZXREYXRhS2V5KSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyLCB2YWx1ZSkge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBSZW1vdGUgZGVidWdnZXIgZXJyb3Igd2l0aCBjb2RlICcke2Vyci5jb2RlfSc6ICR7ZXJyLm1lc3NhZ2V9YCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cuZGVidWcoYFJlY2VpdmVkIGRhdGEgcmVzcG9uc2UgZnJvbSBzZW5kIChpZDogJHttc2dJZH0pOiAnJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgREFUQV9MT0dfTEVOR1RIKX0nYCk7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm90aGluZyBlbHNlIGlzIGhhbmRsaW5nIHRoaW5ncywgc28ganVzdCByZXNvbHZlIHdoZW4gdGhlIG1lc3NhZ2UgaXMgc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtc2cgPSBgU2VuZGluZyAnJHtjbWQuX19zZWxlY3Rvcn0nIG1lc3NhZ2VgICtcbiAgICAgICAgKGZ1bGxPcHRzLmFwcElkS2V5ID8gYCB0byBhcHAgJyR7ZnVsbE9wdHMuYXBwSWRLZXl9J2AgOiAnJykgK1xuICAgICAgICAoZnVsbE9wdHMucGFnZUlkS2V5ID8gYCwgcGFnZSAnJHtmdWxsT3B0cy5wYWdlSWRLZXl9J2AgOiAnJykgK1xuICAgICAgICAodGhpcy5uZWVkc1RhcmdldCAmJiB0YXJnZXRJZCA/IGAsIHRhcmdldCAnJHt0YXJnZXRJZH0nYCA6ICcnKSArXG4gICAgICAgIGAgKGlkOiAke21zZ0lkfSk6ICcke2NvbW1hbmR9J2A7XG4gICAgICBsb2cuZGVidWcobXNnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VuZE1lc3NhZ2UoY21kKTtcbiAgICAgICAgaWYgKCFtZXNzYWdlSGFuZGxlZCkge1xuICAgICAgICAgIC8vIFRoZXJlIGFyZSBubyBoYW5kbGVycyB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGJlZm9yZSByZXNvbHZpbmcsXG4gICAgICAgICAgLy8gYW5kIG5vIGVycm9ycyBzZW5kaW5nIHRoZSBtZXNzYWdlIG92ZXIgdGhlIHNvY2tldCwgc28gcmVzb2x2ZVxuICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN1Yi1jbGFzc2VzIG5lZWQgdG8gaW1wbGVtZW50IGEgJ2Nvbm5lY3QnIGZ1bmN0aW9uYCk7XG4gIH1cblxuICBhc3luYyBkaXNjb25uZWN0ICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRNZXNzYWdlICgvKiBjb21tYW5kICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnc2VuZE1lc3NhZ2UnIGZ1bmN0aW9uYCk7XG4gIH1cblxuICBhc3luYyByZWNlaXZlICgvKiBkYXRhICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAncmVjZWl2ZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFkZFRhcmdldCAoZXJyLCBhcHAsIHRhcmdldEluZm8pIHtcbiAgICBpZiAoXy5pc05pbCh0YXJnZXRJbmZvPy50YXJnZXRJZCkpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkodGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uKSAmJiAhdGFyZ2V0SW5mby5pc1Byb3Zpc2lvbmFsKSB7XG4gICAgICBsb2cud2FybihgUmVjZWl2ZWQgJ1RhcmdldC50YXJnZXRDcmVhdGVkJyBldmVudCBmb3IgYXBwICcke2FwcH0nIHdpdGggbm8gcGVuZGluZyByZXF1ZXN0OiAke0pTT04uc3RyaW5naWZ5KHRhcmdldEluZm8pfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUHJvdmlzaW9uYWwgdGFyZ2V0IGNyZWF0ZWQgZm9yIGFwcCAnJHthcHB9JywgJyR7dGFyZ2V0SW5mby50YXJnZXRJZH0nLiBJZ25vcmluZyB1bnRpbCB0YXJnZXQgdXBkYXRlIGV2ZW50YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgW2FwcElkS2V5LCBwYWdlSWRLZXldID0gdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uO1xuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcElkS2V5fScgYW5kIHBhZ2UgJyR7cGFnZUlkS2V5fSc6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgaWYgKF8uaGFzKHRoaXMudGFyZ2V0c1thcHBJZEtleV0sIHBhZ2VJZEtleSkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlcmUgaXMgYWxyZWFkeSBhIHRhcmdldCBmb3IgdGhpcyBhcHAgYW5kIHBhZ2UgKCcke3RoaXMudGFyZ2V0c1thcHBJZEtleV1bcGFnZUlkS2V5XX0nKS4gVGhpcyBtaWdodCBjYXVzZSBwcm9ibGVtc2ApO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldHNbYXBwXSA9IHRoaXMudGFyZ2V0c1thcHBdIHx8IHt9O1xuICAgIHRoaXMudGFyZ2V0c1thcHBJZEtleV1bcGFnZUlkS2V5XSA9IHRhcmdldEluZm8udGFyZ2V0SWQ7XG4gIH1cblxuICB1cGRhdGVUYXJnZXQgKGVyciwgYXBwLCBvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWQpIHtcbiAgICBsb2cuZGVidWcoYFRhcmdldCB1cGRhdGVkIGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfSdgKTtcbiAgICBpZiAoIXRoaXMudGFyZ2V0c1thcHBdKSB7XG4gICAgICBsb2cud2FybihgTm8gZXhpc3RpbmcgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE5vdCBzdXJlIHdoYXQgdG8gZG9gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gc2F2ZSB0aGlzLCB0byBiZSB1c2VkIGlmL3doZW4gdGhlIGV4aXN0aW5nIHRhcmdldCBpcyBkZXN0cm95ZWRcbiAgICB0aGlzLnRhcmdldHNbYXBwXS5wcm92aXNpb25hbCA9IHtcbiAgICAgIG9sZFRhcmdldElkLFxuICAgICAgbmV3VGFyZ2V0SWQsXG4gICAgfTtcbiAgfVxuXG4gIHJlbW92ZVRhcmdldCAoZXJyLCBhcHAsIHRhcmdldEluZm8pIHtcbiAgICBpZiAoXy5pc05pbCh0YXJnZXRJbmZvPy50YXJnZXRJZCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgJ1RhcmdldC50YXJnZXREZXN0cm95ZWQnIGV2ZW50IHdpdGggbm8gdGFyZ2V0LiBTa2lwcGluZ2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IGRlc3Ryb3llZCBmb3IgYXBwICcke2FwcH0nOiAke3RhcmdldEluZm8udGFyZ2V0SWR9YCk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXJnZXRzIGFuZCBmaW5kIHRoZSBvbmUgdGhhdCBoYXMgYSB3YWl0aW5nIHByb3Zpc2lvbmFsIHRhcmdldFxuICAgIGlmICh0aGlzLnRhcmdldHNbYXBwXT8ucHJvdmlzaW9uYWw/Lm9sZFRhcmdldElkID09PSB0YXJnZXRJbmZvLnRhcmdldElkKSB7XG4gICAgICBjb25zdCB7b2xkVGFyZ2V0SWQsIG5ld1RhcmdldElkfSA9IHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsO1xuICAgICAgZGVsZXRlIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsO1xuXG4gICAgICAvLyB3ZSBkbyBub3Qga25vdyB0aGUgcGFnZSwgc28gZ28gdGhyb3VnaCBhbmQgZmluZCB0aGUgZXhpc3RpbmcgdGFyZ2V0XG4gICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy50YXJnZXRzW2FwcF07XG4gICAgICBmb3IgKGNvbnN0IFtwYWdlLCB0YXJnZXRJZF0gb2YgXy50b1BhaXJzKHRhcmdldHMpKSB7XG4gICAgICAgIGlmICh0YXJnZXRJZCA9PT0gb2xkVGFyZ2V0SWQpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYEZvdW5kIHByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nLiBPbGQgdGFyZ2V0OiAnJHtvbGRUYXJnZXRJZH0nLCBuZXcgdGFyZ2V0OiAnJHtuZXdUYXJnZXRJZH0nLiBVcGRhdGluZ2ApO1xuICAgICAgICAgIHRhcmdldHNbcGFnZV0gPSBuZXdUYXJnZXRJZDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZy53YXJuKGBQcm92aXNpb25hbCB0YXJnZXQgZm9yIGFwcCAnJHthcHB9JyBmb3VuZCwgYnV0IG5vIHN1aXRhYmxlIGV4aXN0aW5nIHRhcmdldCBmb3VuZC4gVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXNgKTtcbiAgICAgIGxvZy53YXJuKGBPbGQgdGFyZ2V0OiAnJHtvbGRUYXJnZXRJZH0nLCBuZXcgdGFyZ2V0OiAnJHtuZXdUYXJnZXRJZH0nLiBFeGlzdGluZyB0YXJnZXRzOiAke0pTT04uc3RyaW5naWZ5KHRhcmdldHMpfWApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZXJlIGlzIG5vIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0LCBqdXN0IGdldCByaWQgb2YgdGhlIGV4aXN0aW5nIG9uZVxuICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICBmb3IgKGNvbnN0IFtwYWdlLCB0YXJnZXRJZF0gb2YgXy50b1BhaXJzKHRhcmdldHMpKSB7XG4gICAgICBpZiAodGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgICAgZGVsZXRlIHRhcmdldHNbcGFnZV07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgJyR7dGFyZ2V0SW5mby50YXJnZXRJZH0nIGRlbGV0ZWQgZm9yIGFwcCAnJHthcHB9JywgYnV0IG5vIHN1Y2ggdGFyZ2V0IGV4aXN0c2ApO1xuICB9XG5cbiAgZ2V0VGFyZ2V0IChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgcmV0dXJuICh0aGlzLnRhcmdldHNbYXBwSWRLZXldIHx8IHt9KVtwYWdlSWRLZXldO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0UGFnZSAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIHRoaXMucGVuZGluZ1RhcmdldE5vdGlmaWNhdGlvbiA9IFthcHBJZEtleSwgcGFnZUlkS2V5XTtcbiAgICB0aGlzLnNob3VsZENoZWNrRm9yVGFyZ2V0ID0gZmFsc2U7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSBzdGVwcyB0aGF0IHRoZSBEZXNrdG9wIFNhZmFyaSBzeXN0ZW1cbiAgICAvLyBnb2VzIHRocm91Z2ggdG8gaW5pdGlhbGl6ZSB0aGUgV2ViIEluc3BlY3RvciBzZXNzaW9uXG5cbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICAvLyBoaWdobGlnaHQgYW5kIHRoZW4gdW4taGlnaGxpZ2h0IHRoZSB3ZWJ2aWV3XG4gICAgZm9yIChjb25zdCBlbmFibGVkIG9mIFt0cnVlLCBmYWxzZV0pIHtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZCgnaW5kaWNhdGVXZWJWaWV3JywgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIGVuYWJsZWQsXG4gICAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ3NldFNlbmRlcktleScsIHNlbmRPcHRzKTtcbiAgICBsb2cuZGVidWcoJ1NlbmRlciBrZXkgc2V0Jyk7XG5cbiAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkICYmIHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMucGxhdGZvcm1WZXJzaW9uLCAnPCcsIE1JTl9QTEFURk9STV9OT19UQVJHRVRfRVhJU1RTKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdUYXJnZXQuZXhpc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3VsZENoZWNrRm9yVGFyZ2V0ID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmZ1bGxQYWdlSW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2VGdWxsKGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQYWdlKGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIFBlcmZvcm0gdGhlIG1pbmltYWwgaW5pdGlhbGl6YXRpb24gdG8gZ2V0IHRoZSBXZWIgSW5zcGVjdG9yIHdvcmtpbmdcbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgY29uc3Qgc2VuZE9wdHMgPSB7XG4gICAgICBhcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleSxcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1BhZ2UuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhc2tzIHRvIGluaXRpYWxpemVcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ05ldHdvcmsuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgLypcbiAgICogTWltaWMgZXZlcnkgc3RlcCB0aGF0IERlc2t0b3AgU2FmYXJpIERldmVsb3AgdG9vbHMgdXNlcyB0byBpbml0aWFsaXplIGFcbiAgICogV2ViIEluc3BlY3RvciBzZXNzaW9uXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplUGFnZUZ1bGwgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5nZXRSZXNvdXJjZVRyZWUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5zZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRE9NU3RvcmFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGF0YWJhc2UuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luZGV4ZWREQi5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ1NTLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdSdW50aW1lLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdIZWFwLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdNZW1vcnkuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0FwcGxpY2F0aW9uQ2FjaGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0FwcGxpY2F0aW9uQ2FjaGUuZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cycsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdUaW1lbGluZS5zZXRJbnN0cnVtZW50cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgaW5zdHJ1bWVudHM6IFsnVGltZWxpbmUnLCAnU2NyaXB0UHJvZmlsZXInLCAnQ1BVJ10sXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdUaW1lbGluZS5zZXRBdXRvQ2FwdHVyZUVuYWJsZWQnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBhY3RpdmU6IHRydWUsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc3RhdGU6ICdub25lJyxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25Bc3NlcnRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldEFzeW5jU3RhY2tUcmFjZURlcHRoJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkZXB0aDogMjAwLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIHNob3VsZFBhdXNlOiBmYWxzZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTGF5ZXJUcmVlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdXb3JrZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NhbnZhcy5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRE9NLmdldERvY3VtZW50Jywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBjb25zdCBsb2dnaW5nQ2hhbm5lbHMgPSBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZ2V0TG9nZ2luZ0NoYW5uZWxzJywgc2VuZE9wdHMpO1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIChsb2dnaW5nQ2hhbm5lbHMuY2hhbm5lbHMgfHwgW10pLm1hcCgoZW50cnkpID0+IGVudHJ5LnNvdXJjZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5zZXRMb2dnaW5nQ2hhbm5lbExldmVsJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgbGV2ZWw6ICd2ZXJib3NlJyxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmluaXRpYWxpemVkJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdEFwcCAoYXBwSWRLZXkpIHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gbG9jYWwgY2FsbGJhY2ssIHRlbXBvcmFyaWx5IGFkZGVkIGFzIGNhbGxiYWNrIHRvXG4gICAgICAvLyBgX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDpgIHJlbW90ZSBkZWJ1Z2dlciByZXNwb25zZVxuICAgICAgLy8gdG8gaGFuZGxlIHRoZSBpbml0aWFsIGNvbm5lY3Rpb25cbiAgICAgIGNvbnN0IG9uQXBwQ2hhbmdlID0gKGVyciwgZGljdCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZyb20gdGhlIGRpY3Rpb25hcnkgcmV0dXJuZWQsIGdldCB0aGUgaWRzXG4gICAgICAgIGNvbnN0IG9sZEFwcElkS2V5ID0gZGljdC5XSVJIb3N0QXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgICBjb25zdCBjb3JyZWN0QXBwSWRLZXkgPSBkaWN0LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcblxuICAgICAgICAvLyBpZiB0aGlzIGlzIGEgcmVwb3J0IG9mIGEgcHJveHkgcmVkaXJlY3QgZnJvbSB0aGUgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAgIC8vIHdlIHdhbnQgdG8gdXBkYXRlIG91ciBkaWN0aW9uYXJ5IGFuZCBnZXQgYSBuZXcgYXBwIGlkXG4gICAgICAgIGlmIChvbGRBcHBJZEtleSAmJiBjb3JyZWN0QXBwSWRLZXkgIT09IG9sZEFwcElkS2V5KSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBXZSB3ZXJlIG5vdGlmaWVkIHdlIG1pZ2h0IGhhdmUgY29ubmVjdGVkIHRvIHRoZSB3cm9uZyBhcHAuIGAgK1xuICAgICAgICAgICAgICAgICAgICBgVXNpbmcgaWQgJHtjb3JyZWN0QXBwSWRLZXl9IGluc3RlYWQgb2YgJHtvbGRBcHBJZEtleX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ05ldyBhcHBsaWNhdGlvbiBoYXMgY29ubmVjdGVkJykpO1xuICAgICAgfTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcignX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDonLCBvbkFwcENoYW5nZSk7XG5cbiAgICAgIC8vIGRvIHRoZSBhY3R1YWwgY29ubmVjdGluZyB0byB0aGUgYXBwXG4gICAgICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IHBhZ2VEaWN0LCBjb25uZWN0ZWRBcHBJZEtleTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAoW2Nvbm5lY3RlZEFwcElkS2V5LCBwYWdlRGljdF0gPSBhd2FpdCB0aGlzLnNlbmQoJ2Nvbm5lY3RUb0FwcCcsIHtcbiAgICAgICAgICAgIGFwcElkS2V5XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cud2FybihgVW5hYmxlIHRvIGNvbm5lY3QgdG8gYXBwOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc29tZXRpbWVzIHRoZSBjb25uZWN0IGxvZ2ljIGhhcHBlbnMsIGJ1dCB3aXRoIGFuIGVtcHR5IGRpY3Rpb25hcnlcbiAgICAgICAgLy8gd2hpY2ggbGVhZHMgdG8gdGhlIHJlbW90ZSBkZWJ1Z2dlciBnZXR0aW5nIGRpc2Nvbm5lY3RlZCwgYW5kIGludG8gYSBsb29wXG4gICAgICAgIGlmIChfLmlzRW1wdHkocGFnZURpY3QpKSB7XG4gICAgICAgICAgbGV0IG1zZyA9ICdFbXB0eSBwYWdlIGRpY3Rpb25hcnkgcmVjZWl2ZWQnO1xuICAgICAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IobXNnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSk7XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkIChlcnIsIGNvbnRleHQpIHtcbiAgICAvLyB7IGlkOiAyLCBpc1BhZ2VDb250ZXh0OiB0cnVlLCBuYW1lOiAnJywgZnJhbWVJZDogJzAuMScgfVxuICAgIC8vIHJpZ2h0IG5vdyB3ZSBoYXZlIG5vIHdheSB0byBtYXAgY29udGV4dHMgdG8gYXBwcy9wYWdlc1xuICAgIC8vIHNvIGp1c3Qgc3RvcmVcbiAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dC5pZCk7XG4gIH1cblxuICBvbkdhcmJhZ2VDb2xsZWN0ZWQgKCkge1xuICAgIC8vIGp1c3Qgd2FudCB0byBsb2cgdGhhdCB0aGlzIGlzIGhhcHBlbmluZywgYXMgaXQgY2FuIGFmZmVjdCBvcGVydGlvblxuICAgIGxvZy5kZWJ1ZyhgV2ViIEluc3BlY3RvciBnYXJiYWdlIGNvbGxlY3RlZGApO1xuICB9XG5cbiAgb25TY3JpcHRQYXJzZWQgKGVyciwgc2NyaXB0SW5mbykge1xuICAgIC8vIHsgc2NyaXB0SWQ6ICcxMycsIHVybDogJycsIHN0YXJ0TGluZTogMCwgc3RhcnRDb2x1bW46IDAsIGVuZExpbmU6IDgyLCBlbmRDb2x1bW46IDMgfVxuICAgIGxvZy5kZWJ1ZyhgU2NyaXB0IHBhcnNlZDogJHtKU09OLnN0cmluZ2lmeShzY3JpcHRJbmZvKX1gKTtcbiAgfVxufVxuIl0sImZpbGUiOiJsaWIvcnBjL3JwYy1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -13,7 +13,7 @@ var _logger = _interopRequireDefault(require("../logger"));
13
13
 
14
14
  var _lodash = _interopRequireDefault(require("lodash"));
15
15
 
16
- var _appiumSupport = require("appium-support");
16
+ var _support = require("@appium/support");
17
17
 
18
18
  var _events = _interopRequireDefault(require("events"));
19
19
 
@@ -205,7 +205,7 @@ class RpcMessageHandler extends _events.default {
205
205
  } catch (err) {
206
206
  _logger.default.error(`Unexpected message format from Web Inspector:`);
207
207
 
208
- this.warn(_appiumSupport.util.jsonStringify(plist));
208
+ this.warn(_support.util.jsonStringify(plist));
209
209
  throw err;
210
210
  }
211
211
  } else {
@@ -214,10 +214,10 @@ class RpcMessageHandler extends _events.default {
214
214
 
215
215
  let error = dataKey.error || null;
216
216
 
217
- if ((_result2 = result) === null || _result2 === void 0 ? void 0 : _result2.wasThrown) {
217
+ if ((_result2 = result) !== null && _result2 !== void 0 && _result2.wasThrown) {
218
218
  var _result3, _result3$result, _result4, _result4$result, _result5, _result5$result, _result6, _result6$result;
219
219
 
220
- const message = ((_result3 = result) === null || _result3 === void 0 ? void 0 : (_result3$result = _result3.result) === null || _result3$result === void 0 ? void 0 : _result3$result.value) || ((_result4 = result) === null || _result4 === void 0 ? void 0 : (_result4$result = _result4.result) === null || _result4$result === void 0 ? void 0 : _result4$result.description) ? ((_result5 = result) === null || _result5 === void 0 ? void 0 : (_result5$result = _result5.result) === null || _result5$result === void 0 ? void 0 : _result5$result.value) || ((_result6 = result) === null || _result6 === void 0 ? void 0 : (_result6$result = _result6.result) === null || _result6$result === void 0 ? void 0 : _result6$result.description) : 'Error occurred in handling data message';
220
+ const message = (_result3 = result) !== null && _result3 !== void 0 && (_result3$result = _result3.result) !== null && _result3$result !== void 0 && _result3$result.value || (_result4 = result) !== null && _result4 !== void 0 && (_result4$result = _result4.result) !== null && _result4$result !== void 0 && _result4$result.description ? ((_result5 = result) === null || _result5 === void 0 ? void 0 : (_result5$result = _result5.result) === null || _result5$result === void 0 ? void 0 : _result5$result.value) || ((_result6 = result) === null || _result6 === void 0 ? void 0 : (_result6$result = _result6.result) === null || _result6$result === void 0 ? void 0 : _result6$result.description) : 'Error occurred in handling data message';
221
221
  error = new Error(message);
222
222
  }
223
223
 
@@ -229,4 +229,4 @@ class RpcMessageHandler extends _events.default {
229
229
  exports.default = RpcMessageHandler;require('source-map-support').install();
230
230
 
231
231
 
232
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ycGMvcnBjLW1lc3NhZ2UtaGFuZGxlci5qcyJdLCJuYW1lcyI6WyJScGNNZXNzYWdlSGFuZGxlciIsIkV2ZW50RW1pdHRlcnMiLCJjb25zdHJ1Y3RvciIsImlzVGFyZ2V0QmFzZWQiLCJfaXNUYXJnZXRCYXNlZCIsImhhbmRsZU1lc3NhZ2UiLCJwbGlzdCIsInNlbGVjdG9yIiwiX19zZWxlY3RvciIsImxvZyIsImRlYnVnIiwiYXJndW1lbnQiLCJfX2FyZ3VtZW50IiwiZW1pdCIsIldJUlNpbXVsYXRvck5hbWVLZXkiLCJXSVJTaW11bGF0b3JCdWlsZEtleSIsIldJUlNpbXVsYXRvclByb2R1Y3RWZXJzaW9uS2V5IiwiV0lSQXBwbGljYXRpb25EaWN0aW9uYXJ5S2V5IiwiV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwiV0lSTGlzdGluZ0tleSIsImhhbmRsZURhdGFNZXNzYWdlIiwicGFyc2VEYXRhS2V5IiwiSlNPTiIsInBhcnNlIiwiV0lSTWVzc2FnZURhdGFLZXkiLCJ0b1N0cmluZyIsImVyciIsImVycm9yIiwiXyIsInRydW5jYXRlIiwic3RyaW5naWZ5IiwibGVuZ3RoIiwiRXJyb3IiLCJtZXNzYWdlIiwiZGlzcGF0Y2hEYXRhTWVzc2FnZSIsIm1zZ0lkIiwibWV0aG9kIiwicGFyYW1zIiwicmVzdWx0IiwiaXNFbXB0eSIsImxpc3RlbmVyQ291bnQiLCJoYXMiLCJ2YWx1ZSIsImV2ZW50TmFtZXMiLCJhcmdzIiwicHVzaCIsInJlY29yZCIsImNvbnRleHQiLCJzdGFydHNXaXRoIiwibmFtZSIsImRhdGFLZXkiLCJpZCIsImFwcCIsInRhcmdldEluZm8iLCJvbGRUYXJnZXRJZCIsIm5ld1RhcmdldElkIiwidGFyZ2V0SWQiLCJ3YXJuIiwidXRpbCIsImpzb25TdHJpbmdpZnkiLCJ3YXNUaHJvd24iLCJkZXNjcmlwdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHZSxNQUFNQSxpQkFB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LE1BQWpCO0FBQ0FFLFFBQUFBLE1BQU0sR0FBR0wsT0FBTyxDQUFDSyxNQUFSLElBQWtCTCxPQUEzQjtBQUNBSSxRQUFBQSxNQUFNLEdBQUdDLE1BQU0sQ0FBQ0QsTUFBaEI7QUFDRCxPQU5ELENBTUUsT0FBT1gsR0FBUCxFQUFZO0FBR1pqQix3QkFBSWtCLEtBQUosQ0FBVywrQ0FBWDs7QUFDQSxhQUFLOEIsSUFBTCxDQUFVQyxvQkFBS0MsYUFBTCxDQUFtQnJELEtBQW5CLENBQVY7QUFDQSxjQUFNb0IsR0FBTjtBQUNEO0FBQ0YsS0F0QkQsTUFzQk87QUFDTFcsTUFBQUEsTUFBTSxHQUFHYSxPQUFPLENBQUNiLE1BQWpCO0FBQ0Q7O0FBR0QsUUFBSVYsS0FBSyxHQUFHdUIsT0FBTyxDQUFDdkIsS0FBUixJQUFpQixJQUE3Qjs7QUFDQSxvQkFBSVcsTUFBSiw2Q0FBSSxTQUFRc0IsU0FBWixFQUF1QjtBQUFBOztBQUNyQixZQUFNM0IsT0FBTyxHQUFJLGFBQUFLLE1BQU0sVUFBTiwrREFBUUEsTUFBUixvRUFBZ0JJLEtBQWhCLGtCQUF5QkosTUFBekIsZ0VBQXlCLFNBQVFBLE1BQWpDLG9EQUF5QixnQkFBZ0J1QixXQUF6QyxDQUFELEdBQ1gsYUFBQXZCLE1BQU0sVUFBTiwrREFBUUEsTUFBUixvRUFBZ0JJLEtBQWhCLGtCQUF5QkosTUFBekIsZ0VBQXlCLFNBQVFBLE1BQWpDLG9EQUF5QixnQkFBZ0J1QixXQUF6QyxDQURXLEdBRVoseUNBRko7QUFHQWxDLE1BQUFBLEtBQUssR0FBRyxJQUFJSyxLQUFKLENBQVVDLE9BQVYsQ0FBUjtBQUNEOztBQUVELFVBQU0sS0FBS0MsbUJBQUwsQ0FBeUJDLEtBQXpCLEVBQWdDQyxNQUFoQyxFQUF3Q0MsTUFBeEMsRUFBZ0RDLE1BQWhELEVBQXdEWCxLQUF4RCxDQUFOO0FBQ0Q7O0FBNU0wRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IEV2ZW50RW1pdHRlcnMgZnJvbSAnZXZlbnRzJztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNNZXNzYWdlSGFuZGxlciBleHRlbmRzIEV2ZW50RW1pdHRlcnMge1xuICBjb25zdHJ1Y3RvciAoaXNUYXJnZXRCYXNlZCA9IGZhbHNlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBnZXQgaXNUYXJnZXRCYXNlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIHRoaXMuX2lzVGFyZ2V0QmFzZWQgPSAhIWlzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBhc3luYyBoYW5kbGVNZXNzYWdlIChwbGlzdCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gcGxpc3QuX19zZWxlY3RvcjtcbiAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICBsb2cuZGVidWcoJ0dvdCBhbiBpbnZhbGlkIHBsaXN0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXJndW1lbnQgPSBwbGlzdC5fX2FyZ3VtZW50O1xuICAgIHN3aXRjaCAoc2VsZWN0b3IpIHtcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0U2V0dXA6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydFNldHVwOicsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBhcmd1bWVudC5XSVJTaW11bGF0b3JOYW1lS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUlNpbXVsYXRvckJ1aWxkS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUlNpbXVsYXRvclByb2R1Y3RWZXJzaW9uS2V5XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19yZXBvcnRDb25uZWN0ZWRBcHBsaWNhdGlvbkxpc3Q6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydENvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdDonLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgYXJndW1lbnQuV0lSQXBwbGljYXRpb25EaWN0aW9uYXJ5S2V5XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvblNlbnRMaXN0aW5nOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19mb3J3YXJkR2V0TGlzdGluZzonLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUkxpc3RpbmdLZXlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvbkRpc2Nvbm5lY3RlZDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfYXBwbGljYXRpb25EaXNjb25uZWN0ZWQ6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19hcHBsaWNhdGlvblVwZGF0ZWQ6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0Q29ubmVjdGVkRHJpdmVyTGlzdDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfcmVwb3J0Q29ubmVjdGVkRHJpdmVyTGlzdDonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19yZXBvcnRDdXJyZW50U3RhdGU6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydEN1cnJlbnRTdGF0ZTonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvblNlbnREYXRhOic6XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRGF0YU1lc3NhZ2UocGxpc3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxvZy5kZWJ1ZyhgRGVidWdnZXIgZ290IGEgbWVzc2FnZSBmb3IgJyR7c2VsZWN0b3J9JyBhbmQgaGF2ZSBubyBgICtcbiAgICAgICAgICBgaGFuZGxlciwgZG9pbmcgbm90aGluZy5gKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZURhdGFLZXkgKHBsaXN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHBsaXN0Ll9fYXJndW1lbnQuV0lSTWVzc2FnZURhdGFLZXkudG9TdHJpbmcoJ3V0ZjgnKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoYFVucGFyc2VhYmxlIG1lc3NhZ2UgZGF0YTogJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KHBsaXN0KSwge2xlbmd0aDogMTAwfSl9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIGRhdGE6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcGF0Y2hEYXRhTWVzc2FnZSAobXNnSWQsIG1ldGhvZCwgcGFyYW1zLCByZXN1bHQsIGVycm9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIGlmICghXy5pc0VtcHR5KG1zZ0lkKSkge1xuICAgICAgbG9nLmRlYnVnKGBIYW5kbGluZyBtZXNzYWdlIChpZDogJyR7bXNnSWR9JylgKTtcbiAgICB9XG5cbiAgICBpZiAobXNnSWQpIHtcbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyQ291bnQobXNnSWQpKSB7XG4gICAgICAgIGlmIChfLmhhcyhyZXN1bHQ/LnJlc3VsdCwgJ3ZhbHVlJykpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVzdWx0LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdChtc2dJZCwgZXJyb3IsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZXJyb3IoYFdlYiBJbnNwZWN0b3IgcmV0dXJuZWQgZGF0YSBmb3IgbWVzc2FnZSAnJHttc2dJZH0nIGAgK1xuICAgICAgICAgIGBidXQgd2Ugd2VyZSBub3Qgd2FpdGluZyBmb3IgdGhhdCBtZXNzYWdlISBgICtcbiAgICAgICAgICBgcmVzdWx0OiAnJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfSc7IGAgK1xuICAgICAgICAgIGBlcnJvcjogJyR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfSdgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZXZlbnROYW1lcyA9IFttZXRob2RdO1xuICAgIGxldCBhcmdzID0gW3BhcmFtc107XG5cbiAgICAvLyBzb21lIGV2ZW50cyBoYXZlIGRpZmZlcmVudCBuYW1lcywgb3IgdGhlIGFyZ3VtZW50cyBhcmUgbWFwcGVkIGZyb20gdGhlXG4gICAgLy8gcGFyYW1ldGVycyByZWNlaXZlZFxuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdQYWdlLmZyYW1lU3RvcHBlZExvYWRpbmcnOlxuICAgICAgICBldmVudE5hbWVzLnB1c2goJ1BhZ2UuZnJhbWVOYXZpZ2F0ZWQnKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnUGFnZS5mcmFtZU5hdmlnYXRlZCc6XG4gICAgICAgIGFyZ3MgPSBbYCcke21ldGhvZH0nIGV2ZW50YF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGltZWxpbmUuZXZlbnRSZWNvcmRlZCc6XG4gICAgICAgIGFyZ3MgPSBbcGFyYW1zIHx8IHBhcmFtcy5yZWNvcmRdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0NvbnNvbGUubWVzc2FnZUFkZGVkJzpcbiAgICAgICAgYXJncyA9IFtwYXJhbXMubWVzc2FnZV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUnVudGltZS5leGVjdXRpb25Db250ZXh0Q3JlYXRlZCc6XG4gICAgICAgIGFyZ3MgPSBbcGFyYW1zLmNvbnRleHRdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHBhc3NcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKF8uc3RhcnRzV2l0aChtZXRob2QsICdOZXR3b3JrLicpKSB7XG4gICAgICAvLyBhZ2dyZWdhdGUgTmV0d29yayBldmVudHMsIGFuZCBhZGQgb3JpZ2luYWwgbWV0aG9kIG5hbWUgdG8gdGhlIGFyZ3VtZW50c1xuICAgICAgZXZlbnROYW1lcy5wdXNoKCdOZXR3b3JrRXZlbnQnKTtcbiAgICAgIGFyZ3MucHVzaChtZXRob2QpO1xuICAgIH1cbiAgICBpZiAoXy5zdGFydHNXaXRoKG1ldGhvZCwgJ0NvbnNvbGUuJykpIHtcbiAgICAgIC8vIGFnZ3JlZ2F0ZSBOZXR3b3JrIGV2ZW50cywgYW5kIGFkZCBvcmlnaW5hbCBtZXRob2QgbmFtZSB0byB0aGUgYXJndW1lbnRzXG4gICAgICBldmVudE5hbWVzLnB1c2goJ0NvbnNvbGVFdmVudCcpO1xuICAgICAgYXJncy5wdXNoKG1ldGhvZCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGV2ZW50TmFtZXMpIHtcbiAgICAgIHRoaXMuZW1pdChuYW1lLCBlcnJvciwgLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlRGF0YU1lc3NhZ2UgKHBsaXN0KSB7XG4gICAgY29uc3QgZGF0YUtleSA9IHRoaXMucGFyc2VEYXRhS2V5KHBsaXN0KTtcbiAgICBsZXQgbXNnSWQgPSAoZGF0YUtleS5pZCB8fCAnJykudG9TdHJpbmcoKTtcbiAgICBsZXQgcmVzdWx0ID0gZGF0YUtleS5yZXN1bHQ7XG5cbiAgICBsZXQgbWV0aG9kID0gZGF0YUtleS5tZXRob2Q7XG4gICAgbGV0IHBhcmFtcztcblxuICAgIGlmIChtZXRob2QgPT09ICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcpIHtcbiAgICAgIC8vIHRoaXMgaXMgaW4gcmVzcG9uc2UgdG8gYSBgX3JwY19mb3J3YXJkU29ja2V0U2V0dXA6YCBjYWxsXG4gICAgICAvLyB0YXJnZXRJbmZvOiB7IHRhcmdldElkOiAncGFnZS0xJywgdHlwZTogJ3BhZ2UnIH1cbiAgICAgIGNvbnN0IGFwcCA9IHBsaXN0Ll9fYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SW5mbyA9IGRhdGFLZXkucGFyYW1zLnRhcmdldEluZm87XG4gICAgICB0aGlzLmVtaXQoJ1RhcmdldC50YXJnZXRDcmVhdGVkJywgbnVsbCwgYXBwLCB0YXJnZXRJbmZvKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ1RhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCcpIHtcbiAgICAgIGNvbnN0IGFwcCA9IHBsaXN0Ll9fYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgY29uc3Qgb2xkVGFyZ2V0SWQgPSBkYXRhS2V5LnBhcmFtcy5vbGRUYXJnZXRJZDtcbiAgICAgIGNvbnN0IG5ld1RhcmdldElkID0gZGF0YUtleS5wYXJhbXMubmV3VGFyZ2V0SWQ7XG4gICAgICB0aGlzLmVtaXQoJ1RhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCcsIG51bGwsIGFwcCwgb2xkVGFyZ2V0SWQsIG5ld1RhcmdldElkKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ1RhcmdldC50YXJnZXREZXN0cm95ZWQnKSB7XG4gICAgICBjb25zdCBhcHAgPSBwbGlzdC5fX2FyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcbiAgICAgIGNvbnN0IHRhcmdldEluZm8gPSBkYXRhS2V5LnBhcmFtcy50YXJnZXRJbmZvIHx8IHt0YXJnZXRJZDogZGF0YUtleS5wYXJhbXMudGFyZ2V0SWR9O1xuICAgICAgdGhpcy5lbWl0KCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgbnVsbCwgYXBwLCB0YXJnZXRJbmZvKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGFLZXkuZXJyb3IgJiYgdGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICBpZiAoZGF0YUtleS5tZXRob2QgIT09ICdUYXJnZXQuZGlzcGF0Y2hNZXNzYWdlRnJvbVRhcmdldCcpIHtcbiAgICAgICAgLy8gdGhpcyBzb3J0IG9mIG1lc3NhZ2UsIGF0IHRoaXMgcG9pbnQsIGlzIGp1c3QgYW4gYWNrbm93bGVkZ2VtZW50XG4gICAgICAgIC8vIHRoYXQgdGhlIG9yaWdpbmFsIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIFRhcmdldC1iYXNlZCBtZXNzYWdlIHdyYXBwaW5nIGEgcHJvdG9jb2wgbWVzc2FnZVxuICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICB0cnkge1xuICAgICAgICBtZXNzYWdlID0gSlNPTi5wYXJzZShkYXRhS2V5LnBhcmFtcy5tZXNzYWdlKTtcbiAgICAgICAgbXNnSWQgPSBtZXNzYWdlLmlkO1xuICAgICAgICBtZXRob2QgPSBtZXNzYWdlLm1ldGhvZDtcbiAgICAgICAgcmVzdWx0ID0gbWVzc2FnZS5yZXN1bHQgfHwgbWVzc2FnZTtcbiAgICAgICAgcGFyYW1zID0gcmVzdWx0LnBhcmFtcztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBpZiB0aGlzIGhhcHBlbnMgdGhlbiBzb21lIGFzcGVjdCBvZiB0aGUgcHJvdG9jb2wgaXMgbWlzc2luZyB0byB1c1xuICAgICAgICAvLyBzbyBwcmludCB0aGUgZW50aXJlIG1lc3NhZ2UgdG8gZ2V0IHZpc2liaWl0eSBpbnRvIHdoYXQgaXMgZ29pbmcgb25cbiAgICAgICAgbG9nLmVycm9yKGBVbmV4cGVjdGVkIG1lc3NhZ2UgZm9ybWF0IGZyb20gV2ViIEluc3BlY3RvcjpgKTtcbiAgICAgICAgdGhpcy53YXJuKHV0aWwuanNvblN0cmluZ2lmeShwbGlzdCkpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtcyA9IGRhdGFLZXkucGFyYW1zO1xuICAgIH1cblxuICAgIC8vIHdlIGNhbiBnZXQgYW4gZXJyb3IsIG9yIHdlIGNhbiBnZXQgYSByZXNwb25zZSB0aGF0IGlzIGFuIGVycm9yXG4gICAgbGV0IGVycm9yID0gZGF0YUtleS5lcnJvciB8fCBudWxsO1xuICAgIGlmIChyZXN1bHQ/Lndhc1Rocm93bikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IChyZXN1bHQ/LnJlc3VsdD8udmFsdWUgfHwgcmVzdWx0Py5yZXN1bHQ/LmRlc2NyaXB0aW9uKVxuICAgICAgICA/IChyZXN1bHQ/LnJlc3VsdD8udmFsdWUgfHwgcmVzdWx0Py5yZXN1bHQ/LmRlc2NyaXB0aW9uKVxuICAgICAgICA6ICdFcnJvciBvY2N1cnJlZCBpbiBoYW5kbGluZyBkYXRhIG1lc3NhZ2UnO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaERhdGFNZXNzYWdlKG1zZ0lkLCBtZXRob2QsIHBhcmFtcywgcmVzdWx0LCBlcnJvcik7XG4gIH1cbn1cbiJdLCJmaWxlIjoibGliL3JwYy9ycGMtbWVzc2FnZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
232
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ycGMvcnBjLW1lc3NhZ2UtaGFuZGxlci5qcyJdLCJuYW1lcyI6WyJScGNNZXNzYWdlSGFuZGxlciIsIkV2ZW50RW1pdHRlcnMiLCJjb25zdHJ1Y3RvciIsImlzVGFyZ2V0QmFzZWQiLCJfaXNUYXJnZXRCYXNlZCIsImhhbmRsZU1lc3NhZ2UiLCJwbGlzdCIsInNlbGVjdG9yIiwiX19zZWxlY3RvciIsImxvZyIsImRlYnVnIiwiYXJndW1lbnQiLCJfX2FyZ3VtZW50IiwiZW1pdCIsIldJUlNpbXVsYXRvck5hbWVLZXkiLCJXSVJTaW11bGF0b3JCdWlsZEtleSIsIldJUlNpbXVsYXRvclByb2R1Y3RWZXJzaW9uS2V5IiwiV0lSQXBwbGljYXRpb25EaWN0aW9uYXJ5S2V5IiwiV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwiV0lSTGlzdGluZ0tleSIsImhhbmRsZURhdGFNZXNzYWdlIiwicGFyc2VEYXRhS2V5IiwiSlNPTiIsInBhcnNlIiwiV0lSTWVzc2FnZURhdGFLZXkiLCJ0b1N0cmluZyIsImVyciIsImVycm9yIiwiXyIsInRydW5jYXRlIiwic3RyaW5naWZ5IiwibGVuZ3RoIiwiRXJyb3IiLCJtZXNzYWdlIiwiZGlzcGF0Y2hEYXRhTWVzc2FnZSIsIm1zZ0lkIiwibWV0aG9kIiwicGFyYW1zIiwicmVzdWx0IiwiaXNFbXB0eSIsImxpc3RlbmVyQ291bnQiLCJoYXMiLCJ2YWx1ZSIsImV2ZW50TmFtZXMiLCJhcmdzIiwicHVzaCIsInJlY29yZCIsImNvbnRleHQiLCJzdGFydHNXaXRoIiwibmFtZSIsImRhdGFLZXkiLCJpZCIsImFwcCIsInRhcmdldEluZm8iLCJvbGRUYXJnZXRJZCIsIm5ld1RhcmdldElkIiwidGFyZ2V0SWQiLCJ3YXJuIiwidXRpbCIsImpzb25TdHJpbmdpZnkiLCJ3YXNUaHJvd24iLCJkZXNjcmlwdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHZSxNQUFNQSxpQkFB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akI7QUFDQUUsUUFBQUEsTUFBTSxHQUFHTCxPQUFPLENBQUNLLE1BQVIsSUFBa0JMLE9BQTNCO0FBQ0FJLFFBQUFBLE1BQU0sR0FBR0MsTUFBTSxDQUFDRCxNQUFoQjtBQUNELE9BTkQsQ0FNRSxPQUFPWCxHQUFQLEVBQVk7QUFHWmpCLHdCQUFJa0IsS0FBSixDQUFXLCtDQUFYOztBQUNBLGFBQUs4QixJQUFMLENBQVVDLGNBQUtDLGFBQUwsQ0FBbUJyRCxLQUFuQixDQUFWO0FBQ0EsY0FBTW9CLEdBQU47QUFDRDtBQUNGLEtBdEJELE1Bc0JPO0FBQ0xXLE1BQUFBLE1BQU0sR0FBR2EsT0FBTyxDQUFDYixNQUFqQjtBQUNEOztBQUdELFFBQUlWLEtBQUssR0FBR3VCLE9BQU8sQ0FBQ3ZCLEtBQVIsSUFBaUIsSUFBN0I7O0FBQ0Esb0JBQUlXLE1BQUoscUNBQUksU0FBUXNCLFNBQVosRUFBdUI7QUFBQTs7QUFDckIsWUFBTTNCLE9BQU8sR0FBSSxZQUFBSyxNQUFNLFVBQU4sdURBQVFBLE1BQVIsNERBQWdCSSxLQUFoQixnQkFBeUJKLE1BQXpCLHdEQUF5QixTQUFRQSxNQUFqQyw0Q0FBeUIsZ0JBQWdCdUIsV0FBMUMsR0FDWCxhQUFBdkIsTUFBTSxVQUFOLCtEQUFRQSxNQUFSLG9FQUFnQkksS0FBaEIsa0JBQXlCSixNQUF6QixnRUFBeUIsU0FBUUEsTUFBakMsb0RBQXlCLGdCQUFnQnVCLFdBQXpDLENBRFcsR0FFWix5Q0FGSjtBQUdBbEMsTUFBQUEsS0FBSyxHQUFHLElBQUlLLEtBQUosQ0FBVUMsT0FBVixDQUFSO0FBQ0Q7O0FBRUQsVUFBTSxLQUFLQyxtQkFBTCxDQUF5QkMsS0FBekIsRUFBZ0NDLE1BQWhDLEVBQXdDQyxNQUF4QyxFQUFnREMsTUFBaEQsRUFBd0RYLEtBQXhELENBQU47QUFDRDs7QUE1TTBEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IEV2ZW50RW1pdHRlcnMgZnJvbSAnZXZlbnRzJztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNNZXNzYWdlSGFuZGxlciBleHRlbmRzIEV2ZW50RW1pdHRlcnMge1xuICBjb25zdHJ1Y3RvciAoaXNUYXJnZXRCYXNlZCA9IGZhbHNlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBnZXQgaXNUYXJnZXRCYXNlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIHRoaXMuX2lzVGFyZ2V0QmFzZWQgPSAhIWlzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBhc3luYyBoYW5kbGVNZXNzYWdlIChwbGlzdCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gcGxpc3QuX19zZWxlY3RvcjtcbiAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICBsb2cuZGVidWcoJ0dvdCBhbiBpbnZhbGlkIHBsaXN0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXJndW1lbnQgPSBwbGlzdC5fX2FyZ3VtZW50O1xuICAgIHN3aXRjaCAoc2VsZWN0b3IpIHtcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0U2V0dXA6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydFNldHVwOicsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBhcmd1bWVudC5XSVJTaW11bGF0b3JOYW1lS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUlNpbXVsYXRvckJ1aWxkS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUlNpbXVsYXRvclByb2R1Y3RWZXJzaW9uS2V5XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19yZXBvcnRDb25uZWN0ZWRBcHBsaWNhdGlvbkxpc3Q6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydENvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdDonLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgYXJndW1lbnQuV0lSQXBwbGljYXRpb25EaWN0aW9uYXJ5S2V5XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvblNlbnRMaXN0aW5nOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19mb3J3YXJkR2V0TGlzdGluZzonLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUkxpc3RpbmdLZXlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvbkRpc2Nvbm5lY3RlZDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfYXBwbGljYXRpb25EaXNjb25uZWN0ZWQ6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19hcHBsaWNhdGlvblVwZGF0ZWQ6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0Q29ubmVjdGVkRHJpdmVyTGlzdDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfcmVwb3J0Q29ubmVjdGVkRHJpdmVyTGlzdDonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19yZXBvcnRDdXJyZW50U3RhdGU6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydEN1cnJlbnRTdGF0ZTonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvblNlbnREYXRhOic6XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRGF0YU1lc3NhZ2UocGxpc3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxvZy5kZWJ1ZyhgRGVidWdnZXIgZ290IGEgbWVzc2FnZSBmb3IgJyR7c2VsZWN0b3J9JyBhbmQgaGF2ZSBubyBgICtcbiAgICAgICAgICBgaGFuZGxlciwgZG9pbmcgbm90aGluZy5gKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZURhdGFLZXkgKHBsaXN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHBsaXN0Ll9fYXJndW1lbnQuV0lSTWVzc2FnZURhdGFLZXkudG9TdHJpbmcoJ3V0ZjgnKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoYFVucGFyc2VhYmxlIG1lc3NhZ2UgZGF0YTogJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KHBsaXN0KSwge2xlbmd0aDogMTAwfSl9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIGRhdGE6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcGF0Y2hEYXRhTWVzc2FnZSAobXNnSWQsIG1ldGhvZCwgcGFyYW1zLCByZXN1bHQsIGVycm9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIGlmICghXy5pc0VtcHR5KG1zZ0lkKSkge1xuICAgICAgbG9nLmRlYnVnKGBIYW5kbGluZyBtZXNzYWdlIChpZDogJyR7bXNnSWR9JylgKTtcbiAgICB9XG5cbiAgICBpZiAobXNnSWQpIHtcbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyQ291bnQobXNnSWQpKSB7XG4gICAgICAgIGlmIChfLmhhcyhyZXN1bHQ/LnJlc3VsdCwgJ3ZhbHVlJykpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVzdWx0LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdChtc2dJZCwgZXJyb3IsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZXJyb3IoYFdlYiBJbnNwZWN0b3IgcmV0dXJuZWQgZGF0YSBmb3IgbWVzc2FnZSAnJHttc2dJZH0nIGAgK1xuICAgICAgICAgIGBidXQgd2Ugd2VyZSBub3Qgd2FpdGluZyBmb3IgdGhhdCBtZXNzYWdlISBgICtcbiAgICAgICAgICBgcmVzdWx0OiAnJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfSc7IGAgK1xuICAgICAgICAgIGBlcnJvcjogJyR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfSdgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZXZlbnROYW1lcyA9IFttZXRob2RdO1xuICAgIGxldCBhcmdzID0gW3BhcmFtc107XG5cbiAgICAvLyBzb21lIGV2ZW50cyBoYXZlIGRpZmZlcmVudCBuYW1lcywgb3IgdGhlIGFyZ3VtZW50cyBhcmUgbWFwcGVkIGZyb20gdGhlXG4gICAgLy8gcGFyYW1ldGVycyByZWNlaXZlZFxuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdQYWdlLmZyYW1lU3RvcHBlZExvYWRpbmcnOlxuICAgICAgICBldmVudE5hbWVzLnB1c2goJ1BhZ2UuZnJhbWVOYXZpZ2F0ZWQnKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnUGFnZS5mcmFtZU5hdmlnYXRlZCc6XG4gICAgICAgIGFyZ3MgPSBbYCcke21ldGhvZH0nIGV2ZW50YF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGltZWxpbmUuZXZlbnRSZWNvcmRlZCc6XG4gICAgICAgIGFyZ3MgPSBbcGFyYW1zIHx8IHBhcmFtcy5yZWNvcmRdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0NvbnNvbGUubWVzc2FnZUFkZGVkJzpcbiAgICAgICAgYXJncyA9IFtwYXJhbXMubWVzc2FnZV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUnVudGltZS5leGVjdXRpb25Db250ZXh0Q3JlYXRlZCc6XG4gICAgICAgIGFyZ3MgPSBbcGFyYW1zLmNvbnRleHRdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHBhc3NcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKF8uc3RhcnRzV2l0aChtZXRob2QsICdOZXR3b3JrLicpKSB7XG4gICAgICAvLyBhZ2dyZWdhdGUgTmV0d29yayBldmVudHMsIGFuZCBhZGQgb3JpZ2luYWwgbWV0aG9kIG5hbWUgdG8gdGhlIGFyZ3VtZW50c1xuICAgICAgZXZlbnROYW1lcy5wdXNoKCdOZXR3b3JrRXZlbnQnKTtcbiAgICAgIGFyZ3MucHVzaChtZXRob2QpO1xuICAgIH1cbiAgICBpZiAoXy5zdGFydHNXaXRoKG1ldGhvZCwgJ0NvbnNvbGUuJykpIHtcbiAgICAgIC8vIGFnZ3JlZ2F0ZSBOZXR3b3JrIGV2ZW50cywgYW5kIGFkZCBvcmlnaW5hbCBtZXRob2QgbmFtZSB0byB0aGUgYXJndW1lbnRzXG4gICAgICBldmVudE5hbWVzLnB1c2goJ0NvbnNvbGVFdmVudCcpO1xuICAgICAgYXJncy5wdXNoKG1ldGhvZCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGV2ZW50TmFtZXMpIHtcbiAgICAgIHRoaXMuZW1pdChuYW1lLCBlcnJvciwgLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlRGF0YU1lc3NhZ2UgKHBsaXN0KSB7XG4gICAgY29uc3QgZGF0YUtleSA9IHRoaXMucGFyc2VEYXRhS2V5KHBsaXN0KTtcbiAgICBsZXQgbXNnSWQgPSAoZGF0YUtleS5pZCB8fCAnJykudG9TdHJpbmcoKTtcbiAgICBsZXQgcmVzdWx0ID0gZGF0YUtleS5yZXN1bHQ7XG5cbiAgICBsZXQgbWV0aG9kID0gZGF0YUtleS5tZXRob2Q7XG4gICAgbGV0IHBhcmFtcztcblxuICAgIGlmIChtZXRob2QgPT09ICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcpIHtcbiAgICAgIC8vIHRoaXMgaXMgaW4gcmVzcG9uc2UgdG8gYSBgX3JwY19mb3J3YXJkU29ja2V0U2V0dXA6YCBjYWxsXG4gICAgICAvLyB0YXJnZXRJbmZvOiB7IHRhcmdldElkOiAncGFnZS0xJywgdHlwZTogJ3BhZ2UnIH1cbiAgICAgIGNvbnN0IGFwcCA9IHBsaXN0Ll9fYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SW5mbyA9IGRhdGFLZXkucGFyYW1zLnRhcmdldEluZm87XG4gICAgICB0aGlzLmVtaXQoJ1RhcmdldC50YXJnZXRDcmVhdGVkJywgbnVsbCwgYXBwLCB0YXJnZXRJbmZvKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ1RhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCcpIHtcbiAgICAgIGNvbnN0IGFwcCA9IHBsaXN0Ll9fYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgY29uc3Qgb2xkVGFyZ2V0SWQgPSBkYXRhS2V5LnBhcmFtcy5vbGRUYXJnZXRJZDtcbiAgICAgIGNvbnN0IG5ld1RhcmdldElkID0gZGF0YUtleS5wYXJhbXMubmV3VGFyZ2V0SWQ7XG4gICAgICB0aGlzLmVtaXQoJ1RhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCcsIG51bGwsIGFwcCwgb2xkVGFyZ2V0SWQsIG5ld1RhcmdldElkKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ1RhcmdldC50YXJnZXREZXN0cm95ZWQnKSB7XG4gICAgICBjb25zdCBhcHAgPSBwbGlzdC5fX2FyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcbiAgICAgIGNvbnN0IHRhcmdldEluZm8gPSBkYXRhS2V5LnBhcmFtcy50YXJnZXRJbmZvIHx8IHt0YXJnZXRJZDogZGF0YUtleS5wYXJhbXMudGFyZ2V0SWR9O1xuICAgICAgdGhpcy5lbWl0KCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgbnVsbCwgYXBwLCB0YXJnZXRJbmZvKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGFLZXkuZXJyb3IgJiYgdGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICBpZiAoZGF0YUtleS5tZXRob2QgIT09ICdUYXJnZXQuZGlzcGF0Y2hNZXNzYWdlRnJvbVRhcmdldCcpIHtcbiAgICAgICAgLy8gdGhpcyBzb3J0IG9mIG1lc3NhZ2UsIGF0IHRoaXMgcG9pbnQsIGlzIGp1c3QgYW4gYWNrbm93bGVkZ2VtZW50XG4gICAgICAgIC8vIHRoYXQgdGhlIG9yaWdpbmFsIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIFRhcmdldC1iYXNlZCBtZXNzYWdlIHdyYXBwaW5nIGEgcHJvdG9jb2wgbWVzc2FnZVxuICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICB0cnkge1xuICAgICAgICBtZXNzYWdlID0gSlNPTi5wYXJzZShkYXRhS2V5LnBhcmFtcy5tZXNzYWdlKTtcbiAgICAgICAgbXNnSWQgPSBtZXNzYWdlLmlkO1xuICAgICAgICBtZXRob2QgPSBtZXNzYWdlLm1ldGhvZDtcbiAgICAgICAgcmVzdWx0ID0gbWVzc2FnZS5yZXN1bHQgfHwgbWVzc2FnZTtcbiAgICAgICAgcGFyYW1zID0gcmVzdWx0LnBhcmFtcztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBpZiB0aGlzIGhhcHBlbnMgdGhlbiBzb21lIGFzcGVjdCBvZiB0aGUgcHJvdG9jb2wgaXMgbWlzc2luZyB0byB1c1xuICAgICAgICAvLyBzbyBwcmludCB0aGUgZW50aXJlIG1lc3NhZ2UgdG8gZ2V0IHZpc2liaWl0eSBpbnRvIHdoYXQgaXMgZ29pbmcgb25cbiAgICAgICAgbG9nLmVycm9yKGBVbmV4cGVjdGVkIG1lc3NhZ2UgZm9ybWF0IGZyb20gV2ViIEluc3BlY3RvcjpgKTtcbiAgICAgICAgdGhpcy53YXJuKHV0aWwuanNvblN0cmluZ2lmeShwbGlzdCkpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtcyA9IGRhdGFLZXkucGFyYW1zO1xuICAgIH1cblxuICAgIC8vIHdlIGNhbiBnZXQgYW4gZXJyb3IsIG9yIHdlIGNhbiBnZXQgYSByZXNwb25zZSB0aGF0IGlzIGFuIGVycm9yXG4gICAgbGV0IGVycm9yID0gZGF0YUtleS5lcnJvciB8fCBudWxsO1xuICAgIGlmIChyZXN1bHQ/Lndhc1Rocm93bikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IChyZXN1bHQ/LnJlc3VsdD8udmFsdWUgfHwgcmVzdWx0Py5yZXN1bHQ/LmRlc2NyaXB0aW9uKVxuICAgICAgICA/IChyZXN1bHQ/LnJlc3VsdD8udmFsdWUgfHwgcmVzdWx0Py5yZXN1bHQ/LmRlc2NyaXB0aW9uKVxuICAgICAgICA6ICdFcnJvciBvY2N1cnJlZCBpbiBoYW5kbGluZyBkYXRhIG1lc3NhZ2UnO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaERhdGFNZXNzYWdlKG1zZ0lkLCBtZXRob2QsIHBhcmFtcywgcmVzdWx0LCBlcnJvcik7XG4gIH1cbn1cbiJdLCJmaWxlIjoibGliL3JwYy9ycGMtbWVzc2FnZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -5,15 +5,15 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.RESPONSE_LOG_LENGTH = void 0;
8
9
  exports.appInfoFromDict = appInfoFromDict;
9
- exports.pageArrayFromDict = pageArrayFromDict;
10
+ exports.checkParams = checkParams;
11
+ exports.convertResult = convertResult;
12
+ exports.deferredPromise = deferredPromise;
10
13
  exports.getDebuggerAppKey = getDebuggerAppKey;
11
14
  exports.getPossibleDebuggerAppKeys = getPossibleDebuggerAppKeys;
12
- exports.checkParams = checkParams;
15
+ exports.pageArrayFromDict = pageArrayFromDict;
13
16
  exports.simpleStringify = simpleStringify;
14
- exports.deferredPromise = deferredPromise;
15
- exports.convertResult = convertResult;
16
- exports.RESPONSE_LOG_LENGTH = void 0;
17
17
 
18
18
  require("source-map-support/register");
19
19
 
@@ -23,9 +23,9 @@ var _lodash = _interopRequireDefault(require("lodash"));
23
23
 
24
24
  var _bluebird = _interopRequireDefault(require("bluebird"));
25
25
 
26
- var _appiumBaseDriver = require("appium-base-driver");
26
+ var _baseDriver = require("@appium/base-driver");
27
27
 
28
- var _appiumSupport = require("appium-support");
28
+ var _support = require("@appium/support");
29
29
 
30
30
  const WEB_CONTENT_BUNDLE_ID = 'com.apple.WebKit.WebContent';
31
31
  const WEB_CONTENT_PROCESS_BUNDLE_ID = 'process-com.apple.WebKit.WebContent';
@@ -165,7 +165,7 @@ function checkParams(params) {
165
165
  const errors = _lodash.default.toPairs(params).filter(([, value]) => _lodash.default.isNil(value)).map(([param]) => param);
166
166
 
167
167
  if (errors.length) {
168
- throw new Error(`Missing ${_appiumSupport.util.pluralize('parameter', errors.length)}: ${errors.join(', ')}`);
168
+ throw new Error(`Missing ${_support.util.pluralize('parameter', errors.length)}: ${errors.join(', ')}`);
169
169
  }
170
170
  }
171
171
 
@@ -211,7 +211,7 @@ function convertResult(res) {
211
211
  }
212
212
 
213
213
  if (res.status && res.status !== 0) {
214
- throw (0, _appiumBaseDriver.errorFromMJSONWPStatusCode)(res.status, res.value.message || res.value);
214
+ throw (0, _baseDriver.errorFromMJSONWPStatusCode)(res.status, res.value.message || res.value);
215
215
  }
216
216
 
217
217
  const value = _lodash.default.has(res, 'value') ? res.value : res;
@@ -226,4 +226,4 @@ function convertResult(res) {
226
226
  }require('source-map-support').install();
227
227
 
228
228
 
229
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJXRUJfQ09OVEVOVF9CVU5ETEVfSUQiLCJXRUJfQ09OVEVOVF9QUk9DRVNTX0JVTkRMRV9JRCIsIlNBRkFSSV9WSUVXX1BST0NFU1NfQlVORExFX0lEIiwiU0FGQVJJX1ZJRVdfQlVORExFX0lEIiwiV0lMRENBUkRfQlVORExFX0lEIiwiSU5BQ1RJVkVfQVBQX0NPREUiLCJBQ0NFUFRFRF9QQUdFX1RZUEVTIiwiUkVTUE9OU0VfTE9HX0xFTkdUSCIsImFwcEluZm9Gcm9tRGljdCIsImRpY3QiLCJpZCIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImlzUHJveHkiLCJfIiwiaXNTdHJpbmciLCJXSVJJc0FwcGxpY2F0aW9uUHJveHlLZXkiLCJ0b0xvd2VyQ2FzZSIsImlzQXV0b21hdGlvbkVuYWJsZWQiLCJXSVJSZW1vdGVBdXRvbWF0aW9uRW5hYmxlZEtleSIsImhhcyIsIldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkiLCJlbnRyeSIsIm5hbWUiLCJXSVJBcHBsaWNhdGlvbk5hbWVLZXkiLCJidW5kbGVJZCIsIldJUkFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcktleSIsImhvc3RJZCIsIldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXkiLCJpc0FjdGl2ZSIsIldJUklzQXBwbGljYXRpb25BY3RpdmVLZXkiLCJwYWdlQXJyYXlGcm9tRGljdCIsInBhZ2VEaWN0IiwibmV3UGFnZUFycmF5IiwidmFsdWVzIiwiaXNVbmRlZmluZWQiLCJXSVJUeXBlS2V5IiwiaW5jbHVkZXMiLCJwdXNoIiwiV0lSUGFnZUlkZW50aWZpZXJLZXkiLCJ0aXRsZSIsIldJUlRpdGxlS2V5IiwidXJsIiwiV0lSVVJMS2V5IiwiaXNLZXkiLCJXSVJDb25uZWN0aW9uSWRlbnRpZmllcktleSIsImdldERlYnVnZ2VyQXBwS2V5IiwiYXBwRGljdCIsImFwcElkIiwia2V5IiwiZGF0YSIsInRvUGFpcnMiLCJsb2ciLCJkZWJ1ZyIsInByb3h5QXBwSWQiLCJhcHBJZEZvckJ1bmRsZSIsImVuZHNXaXRoIiwiZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMiLCJidW5kbGVJZHMiLCJwcm94aWVkQXBwSWRzIiwicG9zc2libGVCdW5kbGVJZHMiLCJ1bmlxIiwiam9pbiIsImNoZWNrUGFyYW1zIiwicGFyYW1zIiwiZXJyb3JzIiwiZmlsdGVyIiwidmFsdWUiLCJpc05pbCIsIm1hcCIsInBhcmFtIiwibGVuZ3RoIiwiRXJyb3IiLCJ1dGlsIiwicGx1cmFsaXplIiwic2ltcGxlU3RyaW5naWZ5IiwibXVsdGlsaW5lIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFuVmFsdWUiLCJjbG9uZSIsInByb3BlcnR5IiwiZGVmZXJyZWRQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInByb21pc2UiLCJCIiwicmVzIiwicmVqIiwiY29udmVydFJlc3VsdCIsInRydW5jYXRlIiwicGFyc2UiLCJlcnIiLCJpc09iamVjdCIsInN0YXR1cyIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxxQkFBcUIsR0FBRyw2QkFBOUI7QUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxxQ0FBdEM7QUFDQSxNQUFNQyw2QkFBNkIsR0FBRywyQkFBdEM7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyw2QkFBOUI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxHQUEzQjtBQUVBLE1BQU1DLGlCQUFpQixHQUFHLENBQTFCO0FBR0EsTUFBTUMsbUJBQW1CLEdBQUcsQ0FDMUIsWUFEMEIsRUFFMUIsZ0JBRjBCLEVBRzFCLGFBSDBCLENBQTVCO0FBTUEsTUFBTUMsbUJBQW1CLEdBQUcsR0FBNUI7OztBQU1BLFNBQVNDLGVBQVQsQ0FBMEJDLElBQTFCLEVBQWdDO0FBQzlCLFFBQU1DLEVBQUUsR0FBR0QsSUFBSSxDQUFDRSwyQkFBaEI7QUFDQSxRQUFNQyxPQUFPLEdBQUdDLGdCQUFF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QyxPQUFwQyxFQUE2QyxVQUE3QyxDQUF2QixFQUFpRjtBQUMvRSxhQUFPZCxLQUFLLENBQUNjLFFBQUQsQ0FBWjtBQUNEO0FBQ0Y7O0FBQ0QsU0FBT2QsS0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcblxuXG5jb25zdCBXRUJfQ09OVEVOVF9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50JztcbmNvbnN0IFdFQl9DT05URU5UX1BST0NFU1NfQlVORExFX0lEID0gJ3Byb2Nlc3MtY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50JztcbmNvbnN0IFNBRkFSSV9WSUVXX1BST0NFU1NfQlVORExFX0lEID0gJ3Byb2Nlc3MtU2FmYXJpVmlld1NlcnZpY2UnO1xuY29uc3QgU0FGQVJJX1ZJRVdfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5TYWZhcmlWaWV3U2VydmljZSc7XG5jb25zdCBXSUxEQ0FSRF9CVU5ETEVfSUQgPSAnKic7XG5cbmNvbnN0IElOQUNUSVZFX0FQUF9DT0RFID0gMDtcblxuLy8gdmFsdWVzIGZvciB0aGUgcGFnZSBgV0lSVHlwZUtleWAgZW50cnlcbmNvbnN0IEFDQ0VQVEVEX1BBR0VfVFlQRVMgPSBbXG4gICdXSVJUeXBlV2ViJywgLy8gdXAgdG8gaU9TIDExLjNcbiAgJ1dJUlR5cGVXZWJQYWdlJywgLy8gaU9TIDExLjRcbiAgJ1dJUlR5cGVQYWdlJywgLy8gaU9TIDExLjQgd2Vidmlld1xuXTtcblxuY29uc3QgUkVTUE9OU0VfTE9HX0xFTkdUSCA9IDEwMDtcblxuLypcbiAqIFRha2VzIGEgZGljdGlvbmFyeSBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXIgYW5kIG1ha2VzIGEgbW9yZSBtYW5hZ2VhYmxlXG4gKiBkaWN0aW9uYXJ5IHdob3NlIGtleXMgYXJlIHVuZGVyc3RhbmRhYmxlXG4gKi9cbmZ1bmN0aW9uIGFwcEluZm9Gcm9tRGljdCAoZGljdCkge1xuICBjb25zdCBpZCA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICBjb25zdCBpc1Byb3h5ID0gXy5pc1N0cmluZyhkaWN0LldJUklzQXBwbGljYXRpb25Qcm94eUtleSlcbiAgICA/IGRpY3QuV0lSSXNBcHBsaWNhdGlvblByb3h5S2V5LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xuICAgIDogZGljdC5XSVJJc0FwcGxpY2F0aW9uUHJveHlLZXk7XG4gIC8vIGF1dG9tYXRpb24gZW5hYmxlZCBjYW4gYmUgZWl0aGVyIGZyb20gdGhlIGtleXNcbiAgLy8gICAtIFdJUlJlbW90ZUF1dG9tYXRpb25FbmFibGVkS2V5IChib29sZWFuKVxuICAvLyAgIC0gV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eUtleSAoc3RyaW5nIG9yIGJvb2xlYW4pXG4gIGxldCBpc0F1dG9tYXRpb25FbmFibGVkID0gISFkaWN0LldJUlJlbW90ZUF1dG9tYXRpb25FbmFibGVkS2V5O1xuICBpZiAoXy5oYXMoZGljdCwgJ1dJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXknKSkge1xuICAgIGlmIChfLmlzU3RyaW5nKGRpY3QuV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eUtleSkpIHtcbiAgICAgIGlzQXV0b21hdGlvbkVuYWJsZWQgPSBkaWN0LldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkgPT09ICdXSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5VW5rbm93bidcbiAgICAgICAgPyAnVW5rbm93bidcbiAgICAgICAgOiBkaWN0LldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkgPT09ICdXSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5QXZhaWxhYmxlJztcbiAgICB9IGVsc2Uge1xuICAgICAgaXNBdXRvbWF0aW9uRW5hYmxlZCA9ICEhZGljdC5XSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5S2V5O1xuICAgIH1cbiAgfVxuICBjb25zdCBlbnRyeSA9IHtcbiAgICBpZCxcbiAgICBpc1Byb3h5LFxuICAgIG5hbWU6IGRpY3QuV0lSQXBwbGljYXRpb25OYW1lS2V5LFxuICAgIGJ1bmRsZUlkOiBkaWN0LldJUkFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcktleSxcbiAgICBob3N0SWQ6IGRpY3QuV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSxcbiAgICBpc0FjdGl2ZTogZGljdC5XSVJJc0FwcGxpY2F0aW9uQWN0aXZlS2V5ICE9PSBJTkFDVElWRV9BUFBfQ09ERSxcbiAgICBpc0F1dG9tYXRpb25FbmFibGVkLFxuICB9O1xuXG4gIHJldHVybiBbaWQsIGVudHJ5XTtcbn1cblxuLypcbiAqIFRha2UgYSBkaWN0aW9uYXJ5IGZyb20gdGhlIHJlbW90ZSBkZWJ1Z2dlciBhbmQgbWFrZXMgYSBtb3JlIG1hbmFnZWFibGVcbiAqIGRpY3Rpb25hcnkgb2YgcGFnZXMgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiBwYWdlQXJyYXlGcm9tRGljdCAocGFnZURpY3QpIHtcbiAgaWYgKHBhZ2VEaWN0LmlkKSB7XG4gICAgLy8gdGhlIHBhZ2UgaXMgYWxyZWFkeSB0cmFuc2xhdGVkLCBzbyB3cmFwIGluIGFuIGFycmF5IGFuZCBwYXNzIGJhY2tcbiAgICByZXR1cm4gW3BhZ2VEaWN0XTtcbiAgfVxuICBsZXQgbmV3UGFnZUFycmF5ID0gW107XG4gIGZvciAoY29uc3QgZGljdCBvZiBfLnZhbHVlcyhwYWdlRGljdCkpIHtcbiAgICAvLyBjb3VudCBvbmx5IFdJUlR5cGVXZWIgcGFnZXMgYW5kIGlnbm9yZSBhbGwgb3RoZXJzIChXSVJUeXBlSmF2YVNjcmlwdCBldGMpXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoZGljdC5XSVJUeXBlS2V5KSB8fCBBQ0NFUFRFRF9QQUdFX1RZUEVTLmluY2x1ZGVzKGRpY3QuV0lSVHlwZUtleSkpIHtcbiAgICAgIG5ld1BhZ2VBcnJheS5wdXNoKHtcbiAgICAgICAgaWQ6IGRpY3QuV0lSUGFnZUlkZW50aWZpZXJLZXksXG4gICAgICAgIHRpdGxlOiBkaWN0LldJUlRpdGxlS2V5LFxuICAgICAgICB1cmw6IGRpY3QuV0lSVVJMS2V5LFxuICAgICAgICBpc0tleTogIV8uaXNVbmRlZmluZWQoZGljdC5XSVJDb25uZWN0aW9uSWRlbnRpZmllcktleSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1BhZ2VBcnJheTtcbn1cblxuLypcbiAqIEdpdmVuIGEgYnVuZGxlIGlkLCBmaW5kcyB0aGUgY29ycmVjdCByZW1vdGUgZGVidWdnZXIgYXBwIHRoYXQgaXNcbiAqIGNvbm5lY3RlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVidWdnZXJBcHBLZXkgKGJ1bmRsZUlkLCBhcHBEaWN0KSB7XG4gIGxldCBhcHBJZDtcbiAgZm9yIChjb25zdCBba2V5LCBkYXRhXSBvZiBfLnRvUGFpcnMoYXBwRGljdCkpIHtcbiAgICBpZiAoZGF0YS5idW5kbGVJZCA9PT0gYnVuZGxlSWQpIHtcbiAgICAgIGFwcElkID0ga2V5O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8vIG5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgcGljayBhIHByb3h5IGZvciB0aGlzIGluc3RlYWRcbiAgaWYgKGFwcElkKSB7XG4gICAgbG9nLmRlYnVnKGBGb3VuZCBhcHAgaWQga2V5ICcke2FwcElkfScgZm9yIGJ1bmRsZSAnJHtidW5kbGVJZH0nYCk7XG4gICAgbGV0IHByb3h5QXBwSWQ7XG4gICAgZm9yIChjb25zdCBba2V5LCBkYXRhXSBvZiBfLnRvUGFpcnMoYXBwRGljdCkpIHtcbiAgICAgIGlmIChkYXRhLmlzUHJveHkgJiYgZGF0YS5ob3N0SWQgPT09IGFwcElkKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgc2VwYXJhdGUgYnVuZGxlSWQgJyR7ZGF0YS5idW5kbGVJZH0nIGAgK1xuICAgICAgICAgICAgICAgICAgYGFjdGluZyBhcyBwcm94eSBmb3IgJyR7YnVuZGxlSWR9Jywgd2l0aCBhcHAgaWQgJyR7a2V5fSdgKTtcbiAgICAgICAgLy8gc2V0IHRoZSBhcHAgaWQuLi4gdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCwgc28ganVzdCBrZWVwIHJlLWFzc2lnbmluZ1xuICAgICAgICBwcm94eUFwcElkID0ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJveHlBcHBJZCkge1xuICAgICAgYXBwSWQgPSBwcm94eUFwcElkO1xuICAgICAgbG9nLmRlYnVnKGBVc2luZyBwcm94aWVkIGFwcCBpZCAnJHthcHBJZH0nYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFwcElkO1xufVxuXG5mdW5jdGlvbiBhcHBJZEZvckJ1bmRsZSAoYnVuZGxlSWQsIGFwcERpY3QpIHtcbiAgbGV0IGFwcElkO1xuICBmb3IgKGNvbnN0IFtrZXksIGRhdGFdIG9mIF8udG9QYWlycyhhcHBEaWN0KSkge1xuICAgIGlmIChkYXRhLmJ1bmRsZUlkLmVuZHNXaXRoKGJ1bmRsZUlkKSkge1xuICAgICAgYXBwSWQgPSBrZXk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBpZiBub3RoaW5nIGlzIGZvdW5kLCB0cnkgdG8gZ2V0IHRoZSBnZW5lcmljIGFwcFxuICBpZiAoIWFwcElkICYmIGJ1bmRsZUlkICE9PSBXRUJfQ09OVEVOVF9CVU5ETEVfSUQpIHtcbiAgICByZXR1cm4gYXBwSWRGb3JCdW5kbGUoV0VCX0NPTlRFTlRfQlVORExFX0lELCBhcHBEaWN0KTtcbiAgfVxuXG4gIHJldHVybiBhcHBJZDtcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMgKGJ1bmRsZUlkcywgYXBwRGljdCkge1xuICBsZXQgcHJveGllZEFwcElkcyA9IFtdO1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIHBvc3NpYmxlIGJ1bmRsZSBpZGVudGlmaWVyc1xuICBjb25zdCBwb3NzaWJsZUJ1bmRsZUlkcyA9IF8udW5pcShbXG4gICAgV0VCX0NPTlRFTlRfQlVORExFX0lELFxuICAgIFdFQl9DT05URU5UX1BST0NFU1NfQlVORExFX0lELFxuICAgIFNBRkFSSV9WSUVXX1BST0NFU1NfQlVORExFX0lELFxuICAgIFNBRkFSSV9WSUVXX0JVTkRMRV9JRCxcbiAgICBXSUxEQ0FSRF9CVU5ETEVfSUQsXG4gICAgLi4uYnVuZGxlSWRzLFxuICBdKTtcbiAgbG9nLmRlYnVnKGBDaGVja2luZyBmb3IgYnVuZGxlIGlkZW50aWZpZXJzOiAke3Bvc3NpYmxlQnVuZGxlSWRzLmpvaW4oJywgJyl9YCk7XG4gIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgcG9zc2libGVCdW5kbGVJZHMpIHtcbiAgICBjb25zdCBhcHBJZCA9IGFwcElkRm9yQnVuZGxlKGJ1bmRsZUlkLCBhcHBEaWN0KTtcblxuICAgIC8vIG5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgcGljayBhIHByb3h5IGZvciB0aGlzIGluc3RlYWRcbiAgICBpZiAoYXBwSWQpIHtcbiAgICAgIHByb3hpZWRBcHBJZHMucHVzaChhcHBJZCk7XG4gICAgICBsb2cuZGVidWcoYEZvdW5kIGFwcCBpZCBrZXkgJyR7YXBwSWR9JyBmb3IgYnVuZGxlICcke2J1bmRsZUlkfSdgKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgZGF0YV0gb2YgXy50b1BhaXJzKGFwcERpY3QpKSB7XG4gICAgICAgIGlmIChkYXRhLmlzUHJveHkgJiYgZGF0YS5ob3N0SWQgPT09IGFwcElkKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBGb3VuZCBzZXBhcmF0ZSBidW5kbGVJZCAnJHtkYXRhLmJ1bmRsZUlkfScgYCArXG4gICAgICAgICAgICAgICAgICAgIGBhY3RpbmcgYXMgcHJveHkgZm9yICcke2J1bmRsZUlkfScsIHdpdGggYXBwIGlkICcke2tleX0nYCk7XG4gICAgICAgICAgcHJveGllZEFwcElkcy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gXy51bmlxKHByb3hpZWRBcHBJZHMpO1xufVxuXG5mdW5jdGlvbiBjaGVja1BhcmFtcyAocGFyYW1zKSB7XG4gIC8vIGNoZWNrIGlmIGFsbCBwYXJhbWV0ZXJzIGhhdmUgYSB2YWx1ZVxuICBjb25zdCBlcnJvcnMgPSBfLnRvUGFpcnMocGFyYW1zKVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gXy5pc05pbCh2YWx1ZSkpXG4gICAgLm1hcCgoW3BhcmFtXSkgPT4gcGFyYW0pO1xuICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAke3V0aWwucGx1cmFsaXplKCdwYXJhbWV0ZXInLCBlcnJvcnMubGVuZ3RoKX06ICR7ZXJyb3JzLmpvaW4oJywgJyl9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2ltcGxlU3RyaW5naWZ5ICh2YWx1ZSwgbXVsdGlsaW5lID0gZmFsc2UpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cblxuICAvLyB3ZSBnZXQgYmFjayBvYmplY3RzIHNvbWV0aW1lcyB3aXRoIHN0cmluZyB2ZXJzaW9ucyBvZiBmdW5jdGlvbnNcbiAgLy8gd2hpY2ggbXVkZHkgdGhlIGxvZ3NcbiAgbGV0IGNsZWFuVmFsdWUgPSBfLmNsb25lKHZhbHVlKTtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBbJ2NlaWwnLCAnY2xvbmUnLCAnZmxvb3InLCAncm91bmQnLCAnc2NhbGUnLCAndG9TdHJpbmcnXSkge1xuICAgIGRlbGV0ZSBjbGVhblZhbHVlW3Byb3BlcnR5XTtcbiAgfVxuICByZXR1cm4gbXVsdGlsaW5lID8gSlNPTi5zdHJpbmdpZnkoY2xlYW5WYWx1ZSwgbnVsbCwgMikgOiBKU09OLnN0cmluZ2lmeShjbGVhblZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZGVmZXJyZWRQcm9taXNlICgpIHtcbiAgLy8gaHR0cDovL2JsdWViaXJkanMuY29tL2RvY3MvYXBpL2RlZmVycmVkLW1pZ3JhdGlvbi5odG1sXG4gIGxldCByZXNvbHZlO1xuICBsZXQgcmVqZWN0O1xuICBjb25zdCBwcm9taXNlID0gbmV3IEIoKHJlcywgcmVqKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wYXJhbS1uYW1lc1xuICAgIHJlc29sdmUgPSByZXM7XG4gICAgcmVqZWN0ID0gcmVqO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwcm9taXNlLFxuICAgIHJlc29sdmUsXG4gICAgcmVqZWN0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSZXN1bHQgKHJlcykge1xuICBpZiAoXy5pc1VuZGVmaW5lZChyZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGdldCBPSyByZXN1bHQgZnJvbSByZW1vdGUgZGVidWdnZXIuIFJlc3VsdCB3YXM6ICR7Xy50cnVuY2F0ZShzaW1wbGVTdHJpbmdpZnkocmVzKSwge2xlbmd0aDogUkVTUE9OU0VfTE9HX0xFTkdUSH0pfWApO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcocmVzKSkge1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBKU09OLnBhcnNlKHJlcyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyB3ZSBtaWdodCBnZXQgYSBzZXJpYWxpemVkIG9iamVjdCwgYnV0IHdlIG1pZ2h0IG5vdFxuICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIGl0IGlzIGp1c3QgYSB2YWx1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICghXy5pc09iamVjdChyZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXN1bHQgaGFzIHVuZXhwZWN0ZWQgdHlwZTogKCR7dHlwZW9mIHJlc30pLmApO1xuICB9XG5cbiAgaWYgKHJlcy5zdGF0dXMgJiYgcmVzLnN0YXR1cyAhPT0gMCkge1xuICAgIC8vIHdlIGdvdCBzb21lIGZvcm0gb2YgZXJyb3IuXG4gICAgdGhyb3cgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUocmVzLnN0YXR1cywgcmVzLnZhbHVlLm1lc3NhZ2UgfHwgcmVzLnZhbHVlKTtcbiAgfVxuXG4gIC8vIHdpdGggZWl0aGVyIGhhdmUgYW4gb2JqZWN0IHdpdGggYSBgdmFsdWVgIHByb3BlcnR5IChldmVuIGlmIGBudWxsYCksXG4gIC8vIG9yIGEgcGxhaW4gb2JqZWN0XG4gIGNvbnN0IHZhbHVlID0gXy5oYXMocmVzLCAndmFsdWUnKSA/IHJlcy52YWx1ZSA6IHJlcztcblxuICAvLyBnZXQgcmlkIG9mIG5vaXN5IGZ1bmN0aW9ucyBvbiBvYmplY3RzXG4gIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgWydjZWlsJywgJ2Nsb25lJywgJ2Zsb29yJywgJ3JvdW5kJywgJ3NjYWxlJywgJ3RvU3RyaW5nJ10pIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtwcm9wZXJ0eV07XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IHtcbiAgYXBwSW5mb0Zyb21EaWN0LCBwYWdlQXJyYXlGcm9tRGljdCwgZ2V0RGVidWdnZXJBcHBLZXksXG4gIGdldFBvc3NpYmxlRGVidWdnZXJBcHBLZXlzLCBjaGVja1BhcmFtcywgc2ltcGxlU3RyaW5naWZ5LCBkZWZlcnJlZFByb21pc2UsXG4gIGNvbnZlcnRSZXN1bHQsIFJFU1BPTlNFX0xPR19MRU5HVEgsXG59O1xuIl0sImZpbGUiOiJsaWIvdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
229
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJXRUJfQ09OVEVOVF9CVU5ETEVfSUQiLCJXRUJfQ09OVEVOVF9QUk9DRVNTX0JVTkRMRV9JRCIsIlNBRkFSSV9WSUVXX1BST0NFU1NfQlVORExFX0lEIiwiU0FGQVJJX1ZJRVdfQlVORExFX0lEIiwiV0lMRENBUkRfQlVORExFX0lEIiwiSU5BQ1RJVkVfQVBQX0NPREUiLCJBQ0NFUFRFRF9QQUdFX1RZUEVTIiwiUkVTUE9OU0VfTE9HX0xFTkdUSCIsImFwcEluZm9Gcm9tRGljdCIsImRpY3QiLCJpZCIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImlzUHJveHkiLCJfIiwiaXNTdHJpbmciLCJXSVJJc0FwcGxpY2F0aW9uUHJveHlLZXkiLCJ0b0xvd2VyQ2FzZSIsImlzQXV0b21hdGlvbkVuYWJsZWQiLCJXSVJSZW1vdGVBdXRvbWF0aW9uRW5hYmxlZEtleSIsImhhcyIsIldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkiLCJlbnRyeSIsIm5hbWUiLCJXSVJBcHBsaWNhdGlvbk5hbWVLZXkiLCJidW5kbGVJZCIsIldJUkFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcktleSIsImhvc3RJZCIsIldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXkiLCJpc0FjdGl2ZSIsIldJUklzQXBwbGljYXRpb25BY3RpdmVLZXkiLCJwYWdlQXJyYXlGcm9tRGljdCIsInBhZ2VEaWN0IiwibmV3UGFnZUFycmF5IiwidmFsdWVzIiwiaXNVbmRlZmluZWQiLCJXSVJUeXBlS2V5IiwiaW5jbHVkZXMiLCJwdXNoIiwiV0lSUGFnZUlkZW50aWZpZXJLZXkiLCJ0aXRsZSIsIldJUlRpdGxlS2V5IiwidXJsIiwiV0lSVVJMS2V5IiwiaXNLZXkiLCJXSVJDb25uZWN0aW9uSWRlbnRpZmllcktleSIsImdldERlYnVnZ2VyQXBwS2V5IiwiYXBwRGljdCIsImFwcElkIiwia2V5IiwiZGF0YSIsInRvUGFpcnMiLCJsb2ciLCJkZWJ1ZyIsInByb3h5QXBwSWQiLCJhcHBJZEZvckJ1bmRsZSIsImVuZHNXaXRoIiwiZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMiLCJidW5kbGVJZHMiLCJwcm94aWVkQXBwSWRzIiwicG9zc2libGVCdW5kbGVJZHMiLCJ1bmlxIiwiam9pbiIsImNoZWNrUGFyYW1zIiwicGFyYW1zIiwiZXJyb3JzIiwiZmlsdGVyIiwidmFsdWUiLCJpc05pbCIsIm1hcCIsInBhcmFtIiwibGVuZ3RoIiwiRXJyb3IiLCJ1dGlsIiwicGx1cmFsaXplIiwic2ltcGxlU3RyaW5naWZ5IiwibXVsdGlsaW5lIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFuVmFsdWUiLCJjbG9uZSIsInByb3BlcnR5IiwiZGVmZXJyZWRQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInByb21pc2UiLCJCIiwicmVzIiwicmVqIiwiY29udmVydFJlc3VsdCIsInRydW5jYXRlIiwicGFyc2UiLCJlcnIiLCJpc09iamVjdCIsInN0YXR1cyIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxxQkFBcUIsR0FBRyw2QkFBOUI7QUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxxQ0FBdEM7QUFDQSxNQUFNQyw2QkFBNkIsR0FBRywyQkFBdEM7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyw2QkFBOUI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxHQUEzQjtBQUVBLE1BQU1DLGlCQUFpQixHQUFHLENBQTFCO0FBR0EsTUFBTUMsbUJBQW1CLEdBQUcsQ0FDMUIsWUFEMEIsRUFFMUIsZ0JBRjBCLEVBRzFCLGFBSDBCLENBQTVCO0FBTUEsTUFBTUMsbUJBQW1CLEdBQUcsR0FBNUI7OztBQU1BLFNBQVNDLGVBQVQsQ0FBMEJDLElBQTFCLEVBQWdDO0FBQzlCLFFBQU1DLEVBQUUsR0FBR0QsSUFBSSxDQUFDRSwyQkFBaEI7QUFDQSxRQUFNQyxPQUFPLEdBQUdDLGdCQUFFQyxRQUFGLENBQVdMLElBQUksQ0FBQ00sd0JBQWhCLElBQ1pOLElBQUksQ0FBQ00sd0JBQUwsQ0FBOEJDLFdBQTlCLE9BQWdELE1BRHBDLEdBRVpQLElBQUksQ0FBQ00sd0JBRlQ7QUFNQSxNQUFJRSxtQkFBbUIsR0FBRyxDQUFDLENBQUNSLElBQUksQ0FBQ1MsNkJBQWpDOztBQUNBLE1BQUlMLGdCQUFFTSxHQUFGLENBQU1WLElBQU4sRUFBWSw4QkFBWixDQUFKLEVBQWlEO0FBQy9DLFFBQUlJLGdCQUFFQyxRQUFGLENBQVdMLElBQUksQ0FBQ1csNEJBQWhCLENBQUosRUFBbUQ7QUFDakRILE1BQUFBLG1CQUFtQixHQUFHUixJQUFJLENBQUNXLDRCQUFMLEtBQXNDLGtDQUF0QyxHQUNsQixTQURrQixHQUVsQlgsSUFBSSxDQUFDVyw0QkFBTCxLQUFzQyxvQ0FGMUM7QUFHRCxLQUpELE1BSU87QUFDTEgsTUFBQUEsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDUixJQUFJLENBQUNXLDRCQUE3QjtBQUNEO0FBQ0Y7O0FBQ0QsUUFBTUMsS0FBSyxHQUFHO0FBQ1pYLElBQUFBLEVBRFk7QUFFWkUsSUFBQUEsT0FGWTtBQUdaVSxJQUFBQSxJQUFJLEVBQUViLElBQUksQ0FBQ2MscUJBSEM7QUFJWkMsSUFBQUEsUUFBUSxFQUFFZixJQUFJLENBQUNnQixpQ0FKSDtBQUtaQyxJQUFBQSxNQUFNLEVBQUVqQixJQUFJLENBQUNrQiwrQkFMRDtBQU1aQyxJQUFBQSxRQUFRLEVBQUVuQixJQUFJLENBQUNvQix5QkFBTCxLQUFtQ3hCLGlCQU5qQztBQU9aWSxJQUFBQTtBQVBZLEdBQWQ7QUFVQSxTQUFPLENBQUNQLEVBQUQsRUFBS1csS0FBTCxDQUFQO0FBQ0Q7O0FBTUQsU0FBU1MsaUJBQVQsQ0FBNEJDLFFBQTVCLEVBQXNDO0FBQ3BDLE1BQUlBLFFBQVEsQ0FBQ3JCLEVBQWIsRUFBaUI7QUFFZixXQUFPLENBQUNxQixRQUFELENBQVA7QUFDRDs7QUFDRCxNQUFJQyxZQUFZLEdBQUcsRUFBbkI7O0FBQ0EsT0FBSyxNQUFNdkIsSUFBWCxJQUFtQkksZ0JBQUVvQixNQUFGLENBQVNGLFFBQVQsQ0FBbkIsRUFBdUM7QUFFckMsUUFBSWxCLGdCQUFFcUIsV0FBRixDQUFjekIsSUFBSSxDQUFDMEIsVUFBbkIsS0FBa0M3QixtQkFBbUIsQ0FBQzhCLFFBQXBCLENBQTZCM0IsSUFBSSxDQUFDMEIsVUFBbEMsQ0FBdEMsRUFBcUY7QUFDbkZILE1BQUFBLFlBQVksQ0FBQ0ssSUFBYixDQUFrQjtBQUNoQjNCLFFBQUFBLEVBQUUsRUFBRUQsSUFBSSxDQUFDNkIsb0JBRE87QUFFaEJDLFFBQUFBLEtBQUssRUFBRTlCLElBQUksQ0FBQytCLFdBRkk7QUFHaEJDLFFBQUFBLEdBQUcsRUFBRWhDLElBQUksQ0FBQ2lDLFNBSE07QUFJaEJDLFFBQUFBLEtBQUssRUFBRSxDQUFDOUIsZ0JBQUVxQixXQUFGLENBQWN6QixJQUFJLENBQUNtQywwQkFBbkI7QUFKUSxPQUFsQjtBQU1EO0FBQ0Y7O0FBQ0QsU0FBT1osWUFBUDtBQUNEOztBQU1ELFNBQVNhLGlCQUFULENBQTRCckIsUUFBNUIsRUFBc0NzQixPQUF0QyxFQUErQztBQUM3QyxNQUFJQyxLQUFKOztBQUNBLE9BQUssTUFBTSxDQUFDQyxHQUFELEVBQU1DLElBQU4sQ0FBWCxJQUEwQnBDLGdCQUFFcUMsT0FBRixDQUFVSixPQUFWLENBQTFCLEVBQThDO0FBQzVDLFFBQUlHLElBQUksQ0FBQ3pCLFFBQUwsS0FBa0JBLFFBQXRCLEVBQWdDO0FBQzlCdUIsTUFBQUEsS0FBSyxHQUFHQyxHQUFSO0FBQ0E7QUFDRDtBQUNGOztBQUVELE1BQUlELEtBQUosRUFBVztBQUNUSSxvQkFBSUMsS0FBSixDQUFXLHFCQUFvQkwsS0FBTSxpQkFBZ0J2QixRQUFTLEdBQTlEOztBQUNBLFFBQUk2QixVQUFKOztBQUNBLFNBQUssTUFBTSxDQUFDTCxHQUFELEVBQU1DLElBQU4sQ0FBWCxJQUEwQnBDLGdCQUFFcUMsT0FBRixDQUFVSixPQUFWLENBQTFCLEVBQThDO0FBQzVDLFVBQUlHLElBQUksQ0FBQ3JDLE9BQUwsSUFBZ0JxQyxJQUFJLENBQUN2QixNQUFMLEtBQWdCcUIsS0FBcEMsRUFBMkM7QUFDekNJLHdCQUFJQyxLQUFKLENBQVcsNEJBQTJCSCxJQUFJLENBQUN6QixRQUFTLElBQTFDLEdBQ0Msd0JBQXVCQSxRQUFTLG1CQUFrQndCLEdBQUksR0FEakU7O0FBR0FLLFFBQUFBLFVBQVUsR0FBR0wsR0FBYjtBQUNEO0FBQ0Y7O0FBQ0QsUUFBSUssVUFBSixFQUFnQjtBQUNkTixNQUFBQSxLQUFLLEdBQUdNLFVBQVI7O0FBQ0FGLHNCQUFJQyxLQUFKLENBQVcseUJBQXdCTCxLQUFNLEdBQXpDO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPQSxLQUFQO0FBQ0Q7O0FBRUQsU0FBU08sY0FBVCxDQUF5QjlCLFFBQXpCLEVBQW1Dc0IsT0FBbkMsRUFBNEM7QUFDMUMsTUFBSUMsS0FBSjs7QUFDQSxPQUFLLE1BQU0sQ0FBQ0MsR0FBRCxFQUFNQyxJQUFOLENBQVgsSUFBMEJwQyxnQkFBRXFDLE9BQUYsQ0FBVUosT0FBVixDQUExQixFQUE4QztBQUM1QyxRQUFJRyxJQUFJLENBQUN6QixRQUFMLENBQWMrQixRQUFkLENBQXVCL0IsUUFBdkIsQ0FBSixFQUFzQztBQUNwQ3VCLE1BQUFBLEtBQUssR0FBR0MsR0FBUjtBQUNBO0FBQ0Q7QUFDRjs7QUFHRCxNQUFJLENBQUNELEtBQUQsSUFBVXZCLFFBQVEsS0FBS3hCLHFCQUEzQixFQUFrRDtBQUNoRCxXQUFPc0QsY0FBYyxDQUFDdEQscUJBQUQsRUFBd0I4QyxPQUF4QixDQUFyQjtBQUNEOztBQUVELFNBQU9DLEtBQVA7QUFDRDs7QUFFRCxTQUFTUywwQkFBVCxDQUFxQ0MsU0FBckMsRUFBZ0RYLE9BQWhELEVBQXlEO0FBQ3ZELE1BQUlZLGFBQWEsR0FBRyxFQUFwQjs7QUFHQSxRQUFNQyxpQkFBaUIsR0FBRzlDLGdCQUFFK0MsSUFBRixDQUFPLENBQy9CNUQscUJBRCtCLEVBRS9CQyw2QkFGK0IsRUFHL0JDLDZCQUgrQixFQUkvQkMscUJBSitCLEVBSy9CQyxrQkFMK0IsRUFNL0IsR0FBR3FELFNBTjRCLENBQVAsQ0FBMUI7O0FBUUFOLGtCQUFJQyxLQUFKLENBQVcsb0NBQW1DTyxpQkFBaUIsQ0FBQ0UsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBNkIsRUFBM0U7O0FBQ0EsT0FBSyxNQUFNckMsUUFBWCxJQUF1Qm1DLGlCQUF2QixFQUEwQztBQUN4QyxVQUFNWixLQUFLLEdBQUdPLGNBQWMsQ0FBQzlCLFFBQUQsRUFBV3NCLE9BQVgsQ0FBNUI7O0FBR0EsUUFBSUMsS0FBSixFQUFXO0FBQ1RXLE1BQUFBLGFBQWEsQ0FBQ3JCLElBQWQsQ0FBbUJVLEtBQW5COztBQUNBSSxzQkFBSUMsS0FBSixDQUFXLHFCQUFvQkwsS0FBTSxpQkFBZ0J2QixRQUFTLEdBQTlEOztBQUNBLFdBQUssTUFBTSxDQUFDd0IsR0FBRCxFQUFNQyxJQUFOLENBQVgsSUFBMEJwQyxnQkFBRXFDLE9BQUYsQ0FBVUosT0FBVixDQUExQixFQUE4QztBQUM1QyxZQUFJRyxJQUFJLENBQUNyQyxPQUFMLElBQWdCcUMsSUFBSSxDQUFDdkIsTUFBTCxLQUFnQnFCLEtBQXBDLEVBQTJDO0FBQ3pDSSwwQkFBSUMsS0FBSixDQUFXLDRCQUEyQkgsSUFBSSxDQUFDekIsUUFBUyxJQUExQyxHQUNDLHdCQUF1QkEsUUFBUyxtQkFBa0J3QixHQUFJLEdBRGpFOztBQUVBVSxVQUFBQSxhQUFhLENBQUNyQixJQUFkLENBQW1CVyxHQUFuQjtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUVELFNBQU9uQyxnQkFBRStDLElBQUYsQ0FBT0YsYUFBUCxDQUFQO0FBQ0Q7O0FBRUQsU0FBU0ksV0FBVCxDQUFzQkMsTUFBdEIsRUFBOEI7QUFFNUIsUUFBTUMsTUFBTSxHQUFHbkQsZ0JBQUVxQyxPQUFGLENBQVVhLE1BQVYsRUFDWkUsTUFEWSxDQUNMLENBQUMsR0FBR0MsS0FBSCxDQUFELEtBQWVyRCxnQkFBRXNELEtBQUYsQ0FBUUQsS0FBUixDQURWLEVBRVpFLEdBRlksQ0FFUixDQUFDLENBQUNDLEtBQUQsQ0FBRCxLQUFhQSxLQUZMLENBQWY7O0FBR0EsTUFBSUwsTUFBTSxDQUFDTSxNQUFYLEVBQW1CO0FBQ2pCLFVBQU0sSUFBSUMsS0FBSixDQUFXLFdBQVVDLGNBQUtDLFNBQUwsQ0FBZSxXQUFmLEVBQTRCVCxNQUFNLENBQUNNLE1BQW5DLENBQTJDLEtBQUlOLE1BQU0sQ0FBQ0gsSUFBUCxDQUFZLElBQVosQ0FBa0IsRUFBdEYsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQsU0FBU2EsZUFBVCxDQUEwQlIsS0FBMUIsRUFBaUNTLFNBQVMsR0FBRyxLQUE3QyxFQUFvRDtBQUNsRCxNQUFJLENBQUNULEtBQUwsRUFBWTtBQUNWLFdBQU9VLElBQUksQ0FBQ0MsU0FBTCxDQUFlWCxLQUFmLENBQVA7QUFDRDs7QUFJRCxNQUFJWSxVQUFVLEdBQUdqRSxnQkFBRWtFLEtBQUYsQ0FBUWIsS0FBUixDQUFqQjs7QUFDQSxPQUFLLE1BQU1jLFFBQVgsSUFBdUIsQ0FBQyxNQUFELEVBQVMsT0FBVCxFQUFrQixPQUFsQixFQUEyQixPQUEzQixFQUFvQyxPQUFwQyxFQUE2QyxVQUE3QyxDQUF2QixFQUFpRjtBQUMvRSxXQUFPRixVQUFVLENBQUNFLFFBQUQsQ0FBakI7QUFDRDs7QUFDRCxTQUFPTCxTQUFTLEdBQUdDLElBQUksQ0FBQ0MsU0FBTCxDQUFlQyxVQUFmLEVBQTJCLElBQTNCLEVBQWlDLENBQWpDLENBQUgsR0FBeUNGLElBQUksQ0FBQ0MsU0FBTCxDQUFlQyxVQUFmLENBQXpEO0FBQ0Q7O0FBRUQsU0FBU0csZUFBVCxHQUE0QjtBQUUxQixNQUFJQyxPQUFKO0FBQ0EsTUFBSUMsTUFBSjtBQUNBLFFBQU1DLE9BQU8sR0FBRyxJQUFJQyxpQkFBSixDQUFNLENBQUNDLEdBQUQsRUFBTUMsR0FBTixLQUFjO0FBQ2xDTCxJQUFBQSxPQUFPLEdBQUdJLEdBQVY7QUFDQUgsSUFBQUEsTUFBTSxHQUFHSSxHQUFUO0FBQ0QsR0FIZSxDQUFoQjtBQUlBLFNBQU87QUFDTEgsSUFBQUEsT0FESztBQUVMRixJQUFBQSxPQUZLO0FBR0xDLElBQUFBO0FBSEssR0FBUDtBQUtEOztBQUVELFNBQVNLLGFBQVQsQ0FBd0JGLEdBQXhCLEVBQTZCO0FBQzNCLE1BQUl6RSxnQkFBRXFCLFdBQUYsQ0FBY29ELEdBQWQsQ0FBSixFQUF3QjtBQUN0QixVQUFNLElBQUlmLEtBQUosQ0FBVywyREFBMEQxRCxnQkFBRTRFLFFBQUYsQ0FBV2YsZUFBZSxDQUFDWSxHQUFELENBQTFCLEVBQWlDO0FBQUNoQixNQUFBQSxNQUFNLEVBQUUvRDtBQUFULEtBQWpDLENBQWdFLEVBQXJJLENBQU47QUFDRCxHQUZELE1BRU8sSUFBSU0sZ0JBQUVDLFFBQUYsQ0FBV3dFLEdBQVgsQ0FBSixFQUFxQjtBQUMxQixRQUFJO0FBQ0ZBLE1BQUFBLEdBQUcsR0FBR1YsSUFBSSxDQUFDYyxLQUFMLENBQVdKLEdBQVgsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPSyxHQUFQLEVBQVksQ0FHYjtBQUNGLEdBUE0sTUFPQSxJQUFJLENBQUM5RSxnQkFBRStFLFFBQUYsQ0FBV04sR0FBWCxDQUFMLEVBQXNCO0FBQzNCLFVBQU0sSUFBSWYsS0FBSixDQUFXLGdDQUErQixPQUFPZSxHQUFJLElBQXJELENBQU47QUFDRDs7QUFFRCxNQUFJQSxHQUFHLENBQUNPLE1BQUosSUFBY1AsR0FBRyxDQUFDTyxNQUFKLEtBQWUsQ0FBakMsRUFBb0M7QUFFbEMsVUFBTSw0Q0FBMkJQLEdBQUcsQ0FBQ08sTUFBL0IsRUFBdUNQLEdBQUcsQ0FBQ3BCLEtBQUosQ0FBVTRCLE9BQVYsSUFBcUJSLEdBQUcsQ0FBQ3BCLEtBQWhFLENBQU47QUFDRDs7QUFJRCxRQUFNQSxLQUFLLEdBQUdyRCxnQkFBRU0sR0FBRixDQUFNbUUsR0FBTixFQUFXLE9BQVgsSUFBc0JBLEdBQUcsQ0FBQ3BCLEtBQTFCLEdBQWtDb0IsR0FBaEQ7O0FBR0EsTUFBSXpFLGdCQUFFK0UsUUFBRixDQUFXMUIsS0FBWCxDQUFKLEVBQXVCO0FBQ3JCLFNBQUssTUFBTWMsUUFBWCxJQUF1QixDQUFDLE1BQUQsRUFBUyxPQUFULEVBQWtCLE9BQWxCLEVBQTJCLE9BQTNCLEVBQW9DLE9BQXBDLEVBQTZDLFVBQTdDLENBQXZCLEVBQWlGO0FBQy9FLGFBQU9kLEtBQUssQ0FBQ2MsUUFBRCxDQUFaO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPZCxLQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgV0VCX0NPTlRFTlRfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudCc7XG5jb25zdCBXRUJfQ09OVEVOVF9QUk9DRVNTX0JVTkRMRV9JRCA9ICdwcm9jZXNzLWNvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudCc7XG5jb25zdCBTQUZBUklfVklFV19QUk9DRVNTX0JVTkRMRV9JRCA9ICdwcm9jZXNzLVNhZmFyaVZpZXdTZXJ2aWNlJztcbmNvbnN0IFNBRkFSSV9WSUVXX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUuU2FmYXJpVmlld1NlcnZpY2UnO1xuY29uc3QgV0lMRENBUkRfQlVORExFX0lEID0gJyonO1xuXG5jb25zdCBJTkFDVElWRV9BUFBfQ09ERSA9IDA7XG5cbi8vIHZhbHVlcyBmb3IgdGhlIHBhZ2UgYFdJUlR5cGVLZXlgIGVudHJ5XG5jb25zdCBBQ0NFUFRFRF9QQUdFX1RZUEVTID0gW1xuICAnV0lSVHlwZVdlYicsIC8vIHVwIHRvIGlPUyAxMS4zXG4gICdXSVJUeXBlV2ViUGFnZScsIC8vIGlPUyAxMS40XG4gICdXSVJUeXBlUGFnZScsIC8vIGlPUyAxMS40IHdlYnZpZXdcbl07XG5cbmNvbnN0IFJFU1BPTlNFX0xPR19MRU5HVEggPSAxMDA7XG5cbi8qXG4gKiBUYWtlcyBhIGRpY3Rpb25hcnkgZnJvbSB0aGUgcmVtb3RlIGRlYnVnZ2VyIGFuZCBtYWtlcyBhIG1vcmUgbWFuYWdlYWJsZVxuICogZGljdGlvbmFyeSB3aG9zZSBrZXlzIGFyZSB1bmRlcnN0YW5kYWJsZVxuICovXG5mdW5jdGlvbiBhcHBJbmZvRnJvbURpY3QgKGRpY3QpIHtcbiAgY29uc3QgaWQgPSBkaWN0LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcbiAgY29uc3QgaXNQcm94eSA9IF8uaXNTdHJpbmcoZGljdC5XSVJJc0FwcGxpY2F0aW9uUHJveHlLZXkpXG4gICAgPyBkaWN0LldJUklzQXBwbGljYXRpb25Qcm94eUtleS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcbiAgICA6IGRpY3QuV0lSSXNBcHBsaWNhdGlvblByb3h5S2V5O1xuICAvLyBhdXRvbWF0aW9uIGVuYWJsZWQgY2FuIGJlIGVpdGhlciBmcm9tIHRoZSBrZXlzXG4gIC8vICAgLSBXSVJSZW1vdGVBdXRvbWF0aW9uRW5hYmxlZEtleSAoYm9vbGVhbilcbiAgLy8gICAtIFdJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkgKHN0cmluZyBvciBib29sZWFuKVxuICBsZXQgaXNBdXRvbWF0aW9uRW5hYmxlZCA9ICEhZGljdC5XSVJSZW1vdGVBdXRvbWF0aW9uRW5hYmxlZEtleTtcbiAgaWYgKF8uaGFzKGRpY3QsICdXSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5S2V5JykpIHtcbiAgICBpZiAoXy5pc1N0cmluZyhkaWN0LldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkpKSB7XG4gICAgICBpc0F1dG9tYXRpb25FbmFibGVkID0gZGljdC5XSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5S2V5ID09PSAnV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eVVua25vd24nXG4gICAgICAgID8gJ1Vua25vd24nXG4gICAgICAgIDogZGljdC5XSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5S2V5ID09PSAnV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eUF2YWlsYWJsZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQXV0b21hdGlvbkVuYWJsZWQgPSAhIWRpY3QuV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eUtleTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW50cnkgPSB7XG4gICAgaWQsXG4gICAgaXNQcm94eSxcbiAgICBuYW1lOiBkaWN0LldJUkFwcGxpY2F0aW9uTmFtZUtleSxcbiAgICBidW5kbGVJZDogZGljdC5XSVJBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXksXG4gICAgaG9zdElkOiBkaWN0LldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXksXG4gICAgaXNBY3RpdmU6IGRpY3QuV0lSSXNBcHBsaWNhdGlvbkFjdGl2ZUtleSAhPT0gSU5BQ1RJVkVfQVBQX0NPREUsXG4gICAgaXNBdXRvbWF0aW9uRW5hYmxlZCxcbiAgfTtcblxuICByZXR1cm4gW2lkLCBlbnRyeV07XG59XG5cbi8qXG4gKiBUYWtlIGEgZGljdGlvbmFyeSBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXIgYW5kIG1ha2VzIGEgbW9yZSBtYW5hZ2VhYmxlXG4gKiBkaWN0aW9uYXJ5IG9mIHBhZ2VzIGF2YWlsYWJsZS5cbiAqL1xuZnVuY3Rpb24gcGFnZUFycmF5RnJvbURpY3QgKHBhZ2VEaWN0KSB7XG4gIGlmIChwYWdlRGljdC5pZCkge1xuICAgIC8vIHRoZSBwYWdlIGlzIGFscmVhZHkgdHJhbnNsYXRlZCwgc28gd3JhcCBpbiBhbiBhcnJheSBhbmQgcGFzcyBiYWNrXG4gICAgcmV0dXJuIFtwYWdlRGljdF07XG4gIH1cbiAgbGV0IG5ld1BhZ2VBcnJheSA9IFtdO1xuICBmb3IgKGNvbnN0IGRpY3Qgb2YgXy52YWx1ZXMocGFnZURpY3QpKSB7XG4gICAgLy8gY291bnQgb25seSBXSVJUeXBlV2ViIHBhZ2VzIGFuZCBpZ25vcmUgYWxsIG90aGVycyAoV0lSVHlwZUphdmFTY3JpcHQgZXRjKVxuICAgIGlmIChfLmlzVW5kZWZpbmVkKGRpY3QuV0lSVHlwZUtleSkgfHwgQUNDRVBURURfUEFHRV9UWVBFUy5pbmNsdWRlcyhkaWN0LldJUlR5cGVLZXkpKSB7XG4gICAgICBuZXdQYWdlQXJyYXkucHVzaCh7XG4gICAgICAgIGlkOiBkaWN0LldJUlBhZ2VJZGVudGlmaWVyS2V5LFxuICAgICAgICB0aXRsZTogZGljdC5XSVJUaXRsZUtleSxcbiAgICAgICAgdXJsOiBkaWN0LldJUlVSTEtleSxcbiAgICAgICAgaXNLZXk6ICFfLmlzVW5kZWZpbmVkKGRpY3QuV0lSQ29ubmVjdGlvbklkZW50aWZpZXJLZXkpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdQYWdlQXJyYXk7XG59XG5cbi8qXG4gKiBHaXZlbiBhIGJ1bmRsZSBpZCwgZmluZHMgdGhlIGNvcnJlY3QgcmVtb3RlIGRlYnVnZ2VyIGFwcCB0aGF0IGlzXG4gKiBjb25uZWN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldERlYnVnZ2VyQXBwS2V5IChidW5kbGVJZCwgYXBwRGljdCkge1xuICBsZXQgYXBwSWQ7XG4gIGZvciAoY29uc3QgW2tleSwgZGF0YV0gb2YgXy50b1BhaXJzKGFwcERpY3QpKSB7XG4gICAgaWYgKGRhdGEuYnVuZGxlSWQgPT09IGJ1bmRsZUlkKSB7XG4gICAgICBhcHBJZCA9IGtleTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICAvLyBub3cgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHBpY2sgYSBwcm94eSBmb3IgdGhpcyBpbnN0ZWFkXG4gIGlmIChhcHBJZCkge1xuICAgIGxvZy5kZWJ1ZyhgRm91bmQgYXBwIGlkIGtleSAnJHthcHBJZH0nIGZvciBidW5kbGUgJyR7YnVuZGxlSWR9J2ApO1xuICAgIGxldCBwcm94eUFwcElkO1xuICAgIGZvciAoY29uc3QgW2tleSwgZGF0YV0gb2YgXy50b1BhaXJzKGFwcERpY3QpKSB7XG4gICAgICBpZiAoZGF0YS5pc1Byb3h5ICYmIGRhdGEuaG9zdElkID09PSBhcHBJZCkge1xuICAgICAgICBsb2cuZGVidWcoYEZvdW5kIHNlcGFyYXRlIGJ1bmRsZUlkICcke2RhdGEuYnVuZGxlSWR9JyBgICtcbiAgICAgICAgICAgICAgICAgIGBhY3RpbmcgYXMgcHJveHkgZm9yICcke2J1bmRsZUlkfScsIHdpdGggYXBwIGlkICcke2tleX0nYCk7XG4gICAgICAgIC8vIHNldCB0aGUgYXBwIGlkLi4uIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQsIHNvIGp1c3Qga2VlcCByZS1hc3NpZ25pbmdcbiAgICAgICAgcHJveHlBcHBJZCA9IGtleTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3h5QXBwSWQpIHtcbiAgICAgIGFwcElkID0gcHJveHlBcHBJZDtcbiAgICAgIGxvZy5kZWJ1ZyhgVXNpbmcgcHJveGllZCBhcHAgaWQgJyR7YXBwSWR9J2ApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcHBJZDtcbn1cblxuZnVuY3Rpb24gYXBwSWRGb3JCdW5kbGUgKGJ1bmRsZUlkLCBhcHBEaWN0KSB7XG4gIGxldCBhcHBJZDtcbiAgZm9yIChjb25zdCBba2V5LCBkYXRhXSBvZiBfLnRvUGFpcnMoYXBwRGljdCkpIHtcbiAgICBpZiAoZGF0YS5idW5kbGVJZC5lbmRzV2l0aChidW5kbGVJZCkpIHtcbiAgICAgIGFwcElkID0ga2V5O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgbm90aGluZyBpcyBmb3VuZCwgdHJ5IHRvIGdldCB0aGUgZ2VuZXJpYyBhcHBcbiAgaWYgKCFhcHBJZCAmJiBidW5kbGVJZCAhPT0gV0VCX0NPTlRFTlRfQlVORExFX0lEKSB7XG4gICAgcmV0dXJuIGFwcElkRm9yQnVuZGxlKFdFQl9DT05URU5UX0JVTkRMRV9JRCwgYXBwRGljdCk7XG4gIH1cblxuICByZXR1cm4gYXBwSWQ7XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlRGVidWdnZXJBcHBLZXlzIChidW5kbGVJZHMsIGFwcERpY3QpIHtcbiAgbGV0IHByb3hpZWRBcHBJZHMgPSBbXTtcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBwb3NzaWJsZSBidW5kbGUgaWRlbnRpZmllcnNcbiAgY29uc3QgcG9zc2libGVCdW5kbGVJZHMgPSBfLnVuaXEoW1xuICAgIFdFQl9DT05URU5UX0JVTkRMRV9JRCxcbiAgICBXRUJfQ09OVEVOVF9QUk9DRVNTX0JVTkRMRV9JRCxcbiAgICBTQUZBUklfVklFV19QUk9DRVNTX0JVTkRMRV9JRCxcbiAgICBTQUZBUklfVklFV19CVU5ETEVfSUQsXG4gICAgV0lMRENBUkRfQlVORExFX0lELFxuICAgIC4uLmJ1bmRsZUlkcyxcbiAgXSk7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgZm9yIGJ1bmRsZSBpZGVudGlmaWVyczogJHtwb3NzaWJsZUJ1bmRsZUlkcy5qb2luKCcsICcpfWApO1xuICBmb3IgKGNvbnN0IGJ1bmRsZUlkIG9mIHBvc3NpYmxlQnVuZGxlSWRzKSB7XG4gICAgY29uc3QgYXBwSWQgPSBhcHBJZEZvckJ1bmRsZShidW5kbGVJZCwgYXBwRGljdCk7XG5cbiAgICAvLyBub3cgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHBpY2sgYSBwcm94eSBmb3IgdGhpcyBpbnN0ZWFkXG4gICAgaWYgKGFwcElkKSB7XG4gICAgICBwcm94aWVkQXBwSWRzLnB1c2goYXBwSWQpO1xuICAgICAgbG9nLmRlYnVnKGBGb3VuZCBhcHAgaWQga2V5ICcke2FwcElkfScgZm9yIGJ1bmRsZSAnJHtidW5kbGVJZH0nYCk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGRhdGFdIG9mIF8udG9QYWlycyhhcHBEaWN0KSkge1xuICAgICAgICBpZiAoZGF0YS5pc1Byb3h5ICYmIGRhdGEuaG9zdElkID09PSBhcHBJZCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgc2VwYXJhdGUgYnVuZGxlSWQgJyR7ZGF0YS5idW5kbGVJZH0nIGAgK1xuICAgICAgICAgICAgICAgICAgICBgYWN0aW5nIGFzIHByb3h5IGZvciAnJHtidW5kbGVJZH0nLCB3aXRoIGFwcCBpZCAnJHtrZXl9J2ApO1xuICAgICAgICAgIHByb3hpZWRBcHBJZHMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF8udW5pcShwcm94aWVkQXBwSWRzKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tQYXJhbXMgKHBhcmFtcykge1xuICAvLyBjaGVjayBpZiBhbGwgcGFyYW1ldGVycyBoYXZlIGEgdmFsdWVcbiAgY29uc3QgZXJyb3JzID0gXy50b1BhaXJzKHBhcmFtcylcbiAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+IF8uaXNOaWwodmFsdWUpKVxuICAgIC5tYXAoKFtwYXJhbV0pID0+IHBhcmFtKTtcbiAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgJHt1dGlsLnBsdXJhbGl6ZSgncGFyYW1ldGVyJywgZXJyb3JzLmxlbmd0aCl9OiAke2Vycm9ycy5qb2luKCcsICcpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpbXBsZVN0cmluZ2lmeSAodmFsdWUsIG11bHRpbGluZSA9IGZhbHNlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG5cbiAgLy8gd2UgZ2V0IGJhY2sgb2JqZWN0cyBzb21ldGltZXMgd2l0aCBzdHJpbmcgdmVyc2lvbnMgb2YgZnVuY3Rpb25zXG4gIC8vIHdoaWNoIG11ZGR5IHRoZSBsb2dzXG4gIGxldCBjbGVhblZhbHVlID0gXy5jbG9uZSh2YWx1ZSk7XG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgWydjZWlsJywgJ2Nsb25lJywgJ2Zsb29yJywgJ3JvdW5kJywgJ3NjYWxlJywgJ3RvU3RyaW5nJ10pIHtcbiAgICBkZWxldGUgY2xlYW5WYWx1ZVtwcm9wZXJ0eV07XG4gIH1cbiAgcmV0dXJuIG11bHRpbGluZSA/IEpTT04uc3RyaW5naWZ5KGNsZWFuVmFsdWUsIG51bGwsIDIpIDogSlNPTi5zdHJpbmdpZnkoY2xlYW5WYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGRlZmVycmVkUHJvbWlzZSAoKSB7XG4gIC8vIGh0dHA6Ly9ibHVlYmlyZGpzLmNvbS9kb2NzL2FwaS9kZWZlcnJlZC1taWdyYXRpb24uaHRtbFxuICBsZXQgcmVzb2x2ZTtcbiAgbGV0IHJlamVjdDtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBCKChyZXMsIHJlaikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcGFyYW0tbmFtZXNcbiAgICByZXNvbHZlID0gcmVzO1xuICAgIHJlamVjdCA9IHJlajtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcHJvbWlzZSxcbiAgICByZXNvbHZlLFxuICAgIHJlamVjdFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmVzdWx0IChyZXMpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocmVzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGlkIG5vdCBnZXQgT0sgcmVzdWx0IGZyb20gcmVtb3RlIGRlYnVnZ2VyLiBSZXN1bHQgd2FzOiAke18udHJ1bmNhdGUoc2ltcGxlU3RyaW5naWZ5KHJlcyksIHtsZW5ndGg6IFJFU1BPTlNFX0xPR19MRU5HVEh9KX1gKTtcbiAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKHJlcykpIHtcbiAgICB0cnkge1xuICAgICAgcmVzID0gSlNPTi5wYXJzZShyZXMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gd2UgbWlnaHQgZ2V0IGEgc2VyaWFsaXplZCBvYmplY3QsIGJ1dCB3ZSBtaWdodCBub3RcbiAgICAgIC8vIGlmIHdlIGdldCBoZXJlLCBpdCBpcyBqdXN0IGEgdmFsdWVcbiAgICB9XG4gIH0gZWxzZSBpZiAoIV8uaXNPYmplY3QocmVzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVzdWx0IGhhcyB1bmV4cGVjdGVkIHR5cGU6ICgke3R5cGVvZiByZXN9KS5gKTtcbiAgfVxuXG4gIGlmIChyZXMuc3RhdHVzICYmIHJlcy5zdGF0dXMgIT09IDApIHtcbiAgICAvLyB3ZSBnb3Qgc29tZSBmb3JtIG9mIGVycm9yLlxuICAgIHRocm93IGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKHJlcy5zdGF0dXMsIHJlcy52YWx1ZS5tZXNzYWdlIHx8IHJlcy52YWx1ZSk7XG4gIH1cblxuICAvLyB3aXRoIGVpdGhlciBoYXZlIGFuIG9iamVjdCB3aXRoIGEgYHZhbHVlYCBwcm9wZXJ0eSAoZXZlbiBpZiBgbnVsbGApLFxuICAvLyBvciBhIHBsYWluIG9iamVjdFxuICBjb25zdCB2YWx1ZSA9IF8uaGFzKHJlcywgJ3ZhbHVlJykgPyByZXMudmFsdWUgOiByZXM7XG5cbiAgLy8gZ2V0IHJpZCBvZiBub2lzeSBmdW5jdGlvbnMgb24gb2JqZWN0c1xuICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIFsnY2VpbCcsICdjbG9uZScsICdmbG9vcicsICdyb3VuZCcsICdzY2FsZScsICd0b1N0cmluZyddKSB7XG4gICAgICBkZWxldGUgdmFsdWVbcHJvcGVydHldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCB7XG4gIGFwcEluZm9Gcm9tRGljdCwgcGFnZUFycmF5RnJvbURpY3QsIGdldERlYnVnZ2VyQXBwS2V5LFxuICBnZXRQb3NzaWJsZURlYnVnZ2VyQXBwS2V5cywgY2hlY2tQYXJhbXMsIHNpbXBsZVN0cmluZ2lmeSwgZGVmZXJyZWRQcm9taXNlLFxuICBjb252ZXJ0UmVzdWx0LCBSRVNQT05TRV9MT0dfTEVOR1RILFxufTtcbiJdLCJmaWxlIjoibGliL3V0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
package/lib/atoms.js CHANGED
@@ -1,4 +1,4 @@
1
- import { fs } from 'appium-support';
1
+ import { fs } from '@appium/support';
2
2
  import path from 'path';
3
3
  import _ from 'lodash';
4
4
  import log from './logger';
package/lib/logger.js CHANGED
@@ -1,4 +1,4 @@
1
- import { logger } from 'appium-support';
1
+ import { logger } from '@appium/support';
2
2
 
3
3
 
4
4
  const log = logger.getLogger('RemoteDebugger');
@@ -2,7 +2,7 @@ import log from '../logger';
2
2
  import { appInfoFromDict, pageArrayFromDict, getDebuggerAppKey,
3
3
  getPossibleDebuggerAppKeys, simpleStringify, deferredPromise } from '../utils';
4
4
  import events from './events';
5
- import { timing } from 'appium-support';
5
+ import { timing } from '@appium/support';
6
6
  import { retryInterval, waitForCondition } from 'asyncbox';
7
7
  import _ from 'lodash';
8
8