appium-espresso-driver 2.5.0 → 2.7.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.
@@ -9,7 +9,7 @@ exports.default = exports.TEST_APK_PKG = exports.REQUIRED_PARAMS = exports.Espre
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
- var _baseDriver = require("@appium/base-driver");
12
+ var _driver = require("appium/driver");
13
13
 
14
14
  var _asyncbox = require("asyncbox");
15
15
 
@@ -17,7 +17,7 @@ var _serverBuilder = require("./server-builder");
17
17
 
18
18
  var _path = _interopRequireDefault(require("path"));
19
19
 
20
- var _support = require("@appium/support");
20
+ var _support = require("appium/support");
21
21
 
22
22
  var _package = require("../../package.json");
23
23
 
@@ -38,7 +38,7 @@ exports.REQUIRED_PARAMS = REQUIRED_PARAMS;
38
38
  const ESPRESSO_SERVER_LAUNCH_TIMEOUT_MS = 45000;
39
39
  const TARGET_PACKAGE_CONTAINER = '/data/local/tmp/espresso.apppackage';
40
40
 
41
- class EspressoProxy extends _baseDriver.JWProxy {
41
+ class EspressoProxy extends _driver.JWProxy {
42
42
  async proxyCommand(url, method, body = null) {
43
43
  const {
44
44
  crashed,
@@ -46,7 +46,7 @@ class EspressoProxy extends _baseDriver.JWProxy {
46
46
  } = this.instrumentationState;
47
47
 
48
48
  if (exited) {
49
- throw new _baseDriver.errors.InvalidContextError(`'${method} ${url}' cannot be proxied to Espresso server because ` + `the instrumentation process has ${crashed ? 'crashed' : 'been unexpectedly terminated'}. ` + `Check the Appium server log and the logcat output for more details`);
49
+ throw new _driver.errors.InvalidContextError(`'${method} ${url}' cannot be proxied to Espresso server because ` + `the instrumentation process has ${crashed ? 'crashed' : 'been unexpectedly terminated'}. ` + `Check the Appium server log and the logcat output for more details`);
50
50
  }
51
51
 
52
52
  return await super.proxyCommand(url, method, body);
@@ -354,4 +354,4 @@ var _default = EspressoRunner;
354
354
  exports.default = _default;require('source-map-support').install();
355
355
 
356
356
 
357
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2VzcHJlc3NvLXJ1bm5lci5qcyIsIm5hbWVzIjpbIlRFU1RfU0VSVkVSX1JPT1QiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsIlRFU1RfQVBLX1BLRyIsIlJFUVVJUkVEX1BBUkFNUyIsIkVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUyIsIlRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUiIsIkVzcHJlc3NvUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImNyYXNoZWQiLCJleGl0ZWQiLCJpbnN0cnVtZW50YXRpb25TdGF0ZSIsImVycm9ycyIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJFc3ByZXNzb1J1bm5lciIsImNvbnN0cnVjdG9yIiwibG9nIiwib3B0cyIsInJlcSIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiandwcm94eSIsInNlcnZlciIsImhvc3QiLCJwb3J0Iiwic3lzdGVtUG9ydCIsImJhc2UiLCJrZWVwQWxpdmUiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJjb21tYW5kIiwibW9kU2VydmVyTmFtZSIsImZzIiwic2FuaXRpemVOYW1lIiwidmVyc2lvbiIsImFwcFBhY2thZ2UiLCJhZGIiLCJjdXJEZXZpY2VJZCIsInJlcGxhY2VtZW50IiwibW9kU2VydmVyUGF0aCIsInRtcERpciIsInNob3dHcmFkbGVMb2ciLCJlc3ByZXNzb0J1aWxkQ29uZmlnIiwic2VydmVyTGF1bmNoVGltZW91dCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInNpZ25pbmdDb25maWciLCJidWlsZFNlcnZlclNpZ25pbmdDb25maWciLCJrZXlzdG9yZUZpbGUiLCJpc0FwcFBhY2thZ2VDaGFuZ2VkIiwiZmlsZUV4aXN0cyIsImRlYnVnIiwicHJldmlvdXNBcHBQYWNrYWdlIiwic2hlbGwiLCJ0cmltIiwiaW5zdGFsbFNlcnZlciIsImFwcFN0YXRlIiwiZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUiLCJzaG91bGRVbmluc3RhbGxBcHAiLCJBUFBfSU5TVEFMTF9TVEFURSIsIk9MREVSX1ZFUlNJT05fSU5TVEFMTEVEIiwiTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJpbmNsdWRlcyIsInNob3VsZEluc3RhbGxBcHAiLCJOT1RfSU5TVEFMTEVEIiwiaW5mbyIsInVuaW5zdGFsbEFwayIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwiaW5zdGFsbCIsInJlcGxhY2UiLCJ0aW1lb3V0IiwiZXJyb3JBbmRUaHJvdyIsImluc3RhbGxUZXN0QXBrIiwicmVidWlsZCIsImZvcmNlRXNwcmVzc29SZWJ1aWxkIiwiZXhpc3RzIiwidW5saW5rIiwiYnVpbGROZXdNb2RTZXJ2ZXIiLCJpc1NpZ25lZCIsImNoZWNrQXBrQ2VydCIsInNpZ24iLCJidWlsZENvbmZpZ3VyYXRpb24iLCJidWlsZENvbmZpZ3VyYXRpb25TdHIiLCJyZWFkRmlsZSIsIkpTT04iLCJwYXJzZSIsImUiLCJlcnJvciIsImRpck5hbWUiLCJzZXJ2ZXJQYXRoIiwicmltcmFmIiwibWtkaXJwIiwiY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseSIsIlNlcnZlckJ1aWxkZXIiLCJ0ZXN0QXBwUGFja2FnZSIsImJ1aWxkIiwiYXBrUGF0aCIsImNvcHlGaWxlIiwiY2xlYW51cFNlc3Npb25MZWZ0b3ZlcnMiLCJ2YWx1ZSIsImF4aW9zIiwiZGF0YSIsImFjdGl2ZVNlc3Npb25JZHMiLCJtYXAiLCJzZXNzIiwiaWQiLCJsZW5ndGgiLCJzdHJpbmdpZnkiLCJCIiwiYWxsIiwiZGVsYXkiLCJzdGFydFNlc3Npb24iLCJjYXBzIiwiY21kIiwicHJvY2VzcyIsImVudiIsIkVTUFJFU1NPX0pBVkFfREVCVUciLCJfIiwiaXNCb29sZWFuIiwicHVzaCIsImpvaW4iLCJoYXNTb2NrZXRFcnJvciIsImluc3RQcm9jZXNzIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0ZG91dCIsInN0ZGVyciIsImxpbmUiLCJpc0VtcHR5IiwidG9Mb3dlckNhc2UiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsInRlc3QiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInJlY29yZFRhcmdldEFwcFBhY2thZ2UiLCJkZWxldGVTZXNzaW9uIiwiaXNSdW5uaW5nIiwic3RvcCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9lc3ByZXNzby1ydW5uZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgU2VydmVyQnVpbGRlciwgYnVpbGRTZXJ2ZXJTaWduaW5nQ29uZmlnIH0gZnJvbSAnLi9zZXJ2ZXItYnVpbGRlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZzLCB1dGlsLCBta2RpcnAsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGNvcHlHcmFkbGVQcm9qZWN0UmVjdXJzaXZlbHkgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cblxuY29uc3QgVEVTVF9TRVJWRVJfUk9PVCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICdlc3ByZXNzby1zZXJ2ZXInKTtcbmNvbnN0IFRFU1RfQVBLX1BLRyA9ICdpby5hcHBpdW0uZXNwcmVzc29zZXJ2ZXIudGVzdCc7XG5jb25zdCBSRVFVSVJFRF9QQVJBTVMgPSBbXG4gICdhZGInLFxuICAndG1wRGlyJyxcbiAgJ2hvc3QnLFxuICAnc3lzdGVtUG9ydCcsXG4gICdkZXZpY2VQb3J0JyxcbiAgJ2FwcFBhY2thZ2UnLFxuICAnZm9yY2VFc3ByZXNzb1JlYnVpbGQnLFxuXTtcbmNvbnN0IEVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUyA9IDQ1MDAwO1xuY29uc3QgVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSID0gJy9kYXRhL2xvY2FsL3RtcC9lc3ByZXNzby5hcHBwYWNrYWdlJztcblxuY2xhc3MgRXNwcmVzc29Qcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBhc3luYyBwcm94eUNvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGNvbnN0IHtjcmFzaGVkLCBleGl0ZWR9ID0gdGhpcy5pbnN0cnVtZW50YXRpb25TdGF0ZTtcbiAgICBpZiAoZXhpdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoYCcke21ldGhvZH0gJHt1cmx9JyBjYW5ub3QgYmUgcHJveGllZCB0byBFc3ByZXNzbyBzZXJ2ZXIgYmVjYXVzZSBgICtcbiAgICAgICAgYHRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyBoYXMgJHtjcmFzaGVkID8gJ2NyYXNoZWQnIDogJ2JlZW4gdW5leHBlY3RlZGx5IHRlcm1pbmF0ZWQnfS4gYCArXG4gICAgICAgIGBDaGVjayB0aGUgQXBwaXVtIHNlcnZlciBsb2cgYW5kIHRoZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnByb3h5Q29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cbn1cblxuY2xhc3MgRXNwcmVzc29SdW5uZXIge1xuICBjb25zdHJ1Y3RvciAobG9nLCBvcHRzID0ge30pIHtcbiAgICBmb3IgKGxldCByZXEgb2YgUkVRVUlSRURfUEFSQU1TKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgIXV0aWwuaGFzVmFsdWUob3B0c1tyZXFdKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wdGlvbiAnJHtyZXF9JyBpcyByZXF1aXJlZCFgKTtcbiAgICAgIH1cbiAgICAgIHRoaXNbcmVxXSA9IG9wdHNbcmVxXTtcbiAgICB9XG4gICAgdGhpcy5sb2cgPSBsb2c7XG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEVzcHJlc3NvUHJveHkoe1xuICAgICAgbG9nLFxuICAgICAgc2VydmVyOiB0aGlzLmhvc3QsXG4gICAgICBwb3J0OiB0aGlzLnN5c3RlbVBvcnQsXG4gICAgICBiYXNlOiAnJyxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzLmJpbmQodGhpcy5qd3Byb3h5KTtcbiAgICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5qd3Byb3h5KTtcbiAgICB0aGlzLmp3cHJveHkuaW5zdHJ1bWVudGF0aW9uU3RhdGUgPSB7XG4gICAgICBleGl0ZWQ6IGZhbHNlLFxuICAgICAgY3Jhc2hlZDogZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IG1vZFNlcnZlck5hbWUgPSBmcy5zYW5pdGl6ZU5hbWUoYCR7VEVTVF9BUEtfUEtHfV8ke3ZlcnNpb259XyR7dGhpcy5hcHBQYWNrYWdlfV8ke3RoaXMuYWRiLmN1ckRldmljZUlkfS5hcGtgLCB7XG4gICAgICByZXBsYWNlbWVudDogJy0nLFxuICAgIH0pO1xuICAgIHRoaXMubW9kU2VydmVyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLnRtcERpciwgbW9kU2VydmVyTmFtZSk7XG4gICAgdGhpcy5zaG93R3JhZGxlTG9nID0gb3B0cy5zaG93R3JhZGxlTG9nO1xuICAgIHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZyA9IG9wdHMuZXNwcmVzc29CdWlsZENvbmZpZztcblxuICAgIHRoaXMuc2VydmVyTGF1bmNoVGltZW91dCA9IG9wdHMuc2VydmVyTGF1bmNoVGltZW91dCB8fCBFU1BSRVNTT19TRVJWRVJfTEFVTkNIX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5hbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBvcHRzLmFuZHJvaWRJbnN0YWxsVGltZW91dDtcblxuICAgIHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UgPSBvcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlO1xuXG4gICAgLy8gRXNwcmVzc28gU2VydmVyIGFwcCBuZWVkcyB0byBiZSBzaWduZWQgd2l0aCBzYW1lIGtleVN0b3JlIGFzIGFwcFBhY2thZ2VcbiAgICBpZiAob3B0cy51c2VLZXlzdG9yZSAmJiBvcHRzLmtleXN0b3JlUGF0aCAmJiBvcHRzLmtleXN0b3JlUGFzc3dvcmQgJiYgb3B0cy5rZXlBbGlhcyAmJiBvcHRzLmtleVBhc3N3b3JkKSB7XG4gICAgICB0aGlzLnNpZ25pbmdDb25maWcgPSBidWlsZFNlcnZlclNpZ25pbmdDb25maWcoe1xuICAgICAgICBrZXlzdG9yZUZpbGU6IG9wdHMua2V5c3RvcmVQYXRoLFxuICAgICAgICBrZXlzdG9yZVBhc3N3b3JkOiBvcHRzLmtleXN0b3JlUGFzc3dvcmQsXG4gICAgICAgIGtleUFsaWFzOiBvcHRzLmtleUFsaWFzLFxuICAgICAgICBrZXlQYXNzd29yZDogb3B0cy5rZXlQYXNzd29yZFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2lnbmluZ0NvbmZpZyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNBcHBQYWNrYWdlQ2hhbmdlZCAoKSB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmFkYi5maWxlRXhpc3RzKFRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUikpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdUaGUgcHJldmlvdXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHBhY2thZ2UgaXMgdW5rbm93bicpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzQXBwUGFja2FnZSA9IChhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2NhdCcsIFRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUl0pKS50cmltKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFRoZSBwcmV2aW91cyB0YXJnZXQgYXBwbGljYXRpb24gcGFja2FnZSB3YXMgJyR7cHJldmlvdXNBcHBQYWNrYWdlfScuIGAgK1xuICAgICAgYFRoZSBjdXJyZW50IHBhY2thZ2UgaXMgJyR7dGhpcy5hcHBQYWNrYWdlfSdgKTtcbiAgICByZXR1cm4gcHJldmlvdXNBcHBQYWNrYWdlICE9PSB0aGlzLmFwcFBhY2thZ2U7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbHMgRXNwcmVzc28gc2VydmVyIGFwayBvbiB0byB0aGUgZGV2aWNlIG9yIGVtdWxhdG9yLlxuICAgKiBFYWNoIGFkYiBjb21tYW5kIHVzZXMgZGVmYXVsdCB0aW1lb3V0IGJ5IHRoZW0uXG4gICAqL1xuICBhc3luYyBpbnN0YWxsU2VydmVyICgpIHtcbiAgICBjb25zdCBhcHBTdGF0ZSA9IGF3YWl0IHRoaXMuYWRiLmdldEFwcGxpY2F0aW9uSW5zdGFsbFN0YXRlKHRoaXMubW9kU2VydmVyUGF0aCwgVEVTVF9BUEtfUEtHKTtcblxuICAgIGNvbnN0IHNob3VsZFVuaW5zdGFsbEFwcCA9IFtcbiAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk9MREVSX1ZFUlNJT05fSU5TVEFMTEVELFxuICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuTkVXRVJfVkVSU0lPTl9JTlNUQUxMRURcbiAgICBdLmluY2x1ZGVzKGFwcFN0YXRlKTtcbiAgICBjb25zdCBzaG91bGRJbnN0YWxsQXBwID0gc2hvdWxkVW5pbnN0YWxsQXBwIHx8IFtcbiAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk5PVF9JTlNUQUxMRURcbiAgICBdLmluY2x1ZGVzKGFwcFN0YXRlKTtcblxuICAgIGlmIChzaG91bGRVbmluc3RhbGxBcHApIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFVuaW5zdGFsbGluZyBFc3ByZXNzbyBUZXN0IFNlcnZlciBhcGsgZnJvbSB0aGUgdGFyZ2V0IGRldmljZSAocGtnOiAnJHtURVNUX0FQS19QS0d9JylgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayhURVNUX0FQS19QS0cpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYEVycm9yIHVuaW5zdGFsbGluZyAnJHtURVNUX0FQS19QS0d9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkSW5zdGFsbEFwcCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgSW5zdGFsbGluZyBFc3ByZXNzbyBUZXN0IFNlcnZlciBhcGsgZnJvbSB0aGUgdGFyZ2V0IGRldmljZSAocGF0aDogJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofScpYCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsKHRoaXMubW9kU2VydmVyUGF0aCwgeyByZXBsYWNlOiBmYWxzZSwgdGltZW91dDogdGhpcy5hbmRyb2lkSW5zdGFsbFRpbWVvdXQgfSk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYEluc3RhbGxlZCBFc3ByZXNzbyBUZXN0IFNlcnZlciBhcGsgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofScgKHBrZzogJyR7VEVTVF9BUEtfUEtHfScpYCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGluc3RhbGwgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofScgYmVjYXVzZSBvZiAnJHtlcnIubWVzc2FnZX0nYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFRlc3RBcGsgKCkge1xuICAgIGxldCByZWJ1aWxkID0gdGhpcy5mb3JjZUVzcHJlc3NvUmVidWlsZDtcbiAgICBpZiAocmVidWlsZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYCdmb3JjZUVzcHJlc3NvUmVidWlsZCcgY2FwYWJpbGl0eSBpcyBlbmFibGVkYCk7XG4gICAgfSBlbHNlIGlmIChhd2FpdCB0aGlzLmlzQXBwUGFja2FnZUNoYW5nZWQoKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgRm9yY2luZyBFc3ByZXNzbyBzZXJ2ZXIgcmVidWlsZCBiZWNhdXNlIG9mIGNoYW5nZWQgYXBwbGljYXRpb24gcGFja2FnZWApO1xuICAgICAgcmVidWlsZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlYnVpbGQgJiYgYXdhaXQgZnMuZXhpc3RzKHRoaXMubW9kU2VydmVyUGF0aCkpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBEZWxldGluZyB0aGUgb2Jzb2xldGUgRXNwcmVzc28gc2VydmVyIHBhY2thZ2UgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofSdgKTtcbiAgICAgIGF3YWl0IGZzLnVubGluayh0aGlzLm1vZFNlcnZlclBhdGgpO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBmcy5leGlzdHModGhpcy5tb2RTZXJ2ZXJQYXRoKSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGROZXdNb2RTZXJ2ZXIoKTtcbiAgICB9XG4gICAgY29uc3QgaXNTaWduZWQgPSBhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5tb2RTZXJ2ZXJQYXRoLCBURVNUX0FQS19QS0cpO1xuICAgIGlmICghaXNTaWduZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNpZ24odGhpcy5tb2RTZXJ2ZXJQYXRoKTtcbiAgICB9XG4gICAgaWYgKChyZWJ1aWxkIHx8ICFpc1NpZ25lZCkgJiYgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKFRFU1RfQVBLX1BLRykpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1VuaW5zdGFsbGVkIHRoZSBvYnNvbGV0ZSBFc3ByZXNzbyBzZXJ2ZXIgcGFja2FnZSBmcm9tIHRoZSBkZXZpY2UgdW5kZXIgdGVzdCcpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5zdGFsbFNlcnZlcigpO1xuICB9XG5cbiAgYXN5bmMgYnVpbGROZXdNb2RTZXJ2ZXIgKCkge1xuICAgIGxldCBidWlsZENvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICBpZiAodGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnKSB7XG4gICAgICBsZXQgYnVpbGRDb25maWd1cmF0aW9uU3RyO1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLmVzcHJlc3NvQnVpbGRDb25maWcpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYExvYWRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZnJvbSAnJHt0aGlzLmVzcHJlc3NvQnVpbGRDb25maWd9J2ApO1xuICAgICAgICBidWlsZENvbmZpZ3VyYXRpb25TdHIgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLmVzcHJlc3NvQnVpbGRDb25maWcsICd1dGY4Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBMb2FkaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZyb20gJ2VzcHJlc3NvQnVpbGRDb25maWcnIGNhcGFiaWxpdHlgKTtcbiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uU3RyID0gdGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gSlNPTi5wYXJzZShidWlsZENvbmZpZ3VyYXRpb25TdHIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvcignQ2Fubm90IHBhcnNlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIEpTT04nLCBlKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGlyTmFtZSA9IGZzLnNhbml0aXplTmFtZShgZXNwcmVzc28tc2VydmVyLSR7dGhpcy5hZGIuY3VyRGV2aWNlSWR9YCwge1xuICAgICAgcmVwbGFjZW1lbnQ6ICctJyxcbiAgICB9KTtcbiAgICBjb25zdCBzZXJ2ZXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMudG1wRGlyLCBkaXJOYW1lKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBCdWlsZGluZyBlc3ByZXNzbyBzZXJ2ZXIgaW4gJyR7c2VydmVyUGF0aH0nYCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFRoZSBidWlsZCBmb2xkZXIgcm9vdCBjb3VsZCBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHRoZSAndG1wRGlyJyBjYXBhYmlsaXR5YCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHNlcnZlclBhdGgpO1xuICAgIGF3YWl0IG1rZGlycChzZXJ2ZXJQYXRoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29weWluZyBlc3ByZXNzbyBzZXJ2ZXIgdGVtcGxhdGUgZnJvbSAoJyR7VEVTVF9TRVJWRVJfUk9PVH0nIHRvICcke3NlcnZlclBhdGh9JylgKTtcbiAgICBhd2FpdCBjb3B5R3JhZGxlUHJvamVjdFJlY3Vyc2l2ZWx5KFRFU1RfU0VSVkVSX1JPT1QsIHNlcnZlclBhdGgpO1xuICAgIHRoaXMubG9nLmRlYnVnKCdCdWxkaW5nIGVzcHJlc3NvIHNlcnZlcicpO1xuICAgIGF3YWl0IG5ldyBTZXJ2ZXJCdWlsZGVyKHRoaXMubG9nLCB7XG4gICAgICBzZXJ2ZXJQYXRoLCBidWlsZENvbmZpZ3VyYXRpb24sXG4gICAgICBzaG93R3JhZGxlTG9nOiB0aGlzLnNob3dHcmFkbGVMb2csXG4gICAgICB0ZXN0QXBwUGFja2FnZTogdGhpcy5hcHBQYWNrYWdlLFxuICAgICAgc2lnbmluZ0NvbmZpZzogdGhpcy5zaWduaW5nQ29uZmlnXG4gICAgfSkuYnVpbGQoKTtcbiAgICBjb25zdCBhcGtQYXRoID0gcGF0aC5yZXNvbHZlKHNlcnZlclBhdGgsICdhcHAnLCAnYnVpbGQnLCAnb3V0cHV0cycsICdhcGsnLCAnYW5kcm9pZFRlc3QnLCAnZGVidWcnLCAnYXBwLWRlYnVnLWFuZHJvaWRUZXN0LmFwaycpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDb3B5aW5nIGJ1aWx0IGFwayBmcm9tICcke2Fwa1BhdGh9JyB0byAnJHt0aGlzLm1vZFNlcnZlclBhdGh9J2ApO1xuICAgIGF3YWl0IGZzLmNvcHlGaWxlKGFwa1BhdGgsIHRoaXMubW9kU2VydmVyUGF0aCk7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwU2Vzc2lvbkxlZnRvdmVycyAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1BlcmZvcm1pbmcgY2xlYW51cCBvZiBhdXRvbWF0aW9uIGxlZnRvdmVycycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICB1cmw6IGBodHRwOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5zeXN0ZW1Qb3J0fS9zZXNzaW9uc2AsXG4gICAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICAgIH0pKS5kYXRhO1xuICAgICAgY29uc3QgYWN0aXZlU2Vzc2lvbklkcyA9IHZhbHVlLm1hcCgoc2VzcykgPT4gc2Vzcy5pZCk7XG4gICAgICBpZiAoYWN0aXZlU2Vzc2lvbklkcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSBmb2xsb3dpbmcgb2Jzb2xldGUgc2Vzc2lvbnMgYXJlIHN0aWxsIHJ1bm5pbmc6ICR7SlNPTi5zdHJpbmdpZnkoYWN0aXZlU2Vzc2lvbklkcyl9YCk7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdDbGVhbmluZyB1cCB0aGUgb2Jzb2xldGUgc2Vzc2lvbnMnKTtcbiAgICAgICAgYXdhaXQgQi5hbGwoYWN0aXZlU2Vzc2lvbklkcy5tYXAoKGlkKSA9PlxuICAgICAgICAgIGF4aW9zKHtcbiAgICAgICAgICAgIHVybDogYGh0dHA6Ly8ke3RoaXMuaG9zdH06JHt0aGlzLnN5c3RlbVBvcnR9L3Nlc3Npb24vJHtpZH1gLFxuICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgICAgICB9KVxuICAgICAgICApKTtcbiAgICAgICAgLy8gTGV0IGFsbCBzZXNzaW9ucyB0byBiZSBwcm9wZXJseSB0ZXJtaW5hdGVkIGJlZm9yZSBjb250aW51aW5nXG4gICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gb2Jzb2xldGUgc2Vzc2lvbnMgaGF2ZSBiZWVuIGRldGVjdGVkJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYE5vIG9ic29sZXRlIHNlc3Npb25zIGhhdmUgYmVlbiBkZXRlY3RlZCAoJHtlLm1lc3NhZ2V9KWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoY2Fwcykge1xuICAgIGF3YWl0IHRoaXMuY2xlYW51cFNlc3Npb25MZWZ0b3ZlcnMoKTtcblxuICAgIGNvbnN0IGNtZCA9IFtcbiAgICAgICdzaGVsbCcsXG4gICAgICAnYW0nLCAnaW5zdHJ1bWVudCcsXG4gICAgICAnLXcnLFxuICAgICAgJy1lJywgJ2RlYnVnJywgcHJvY2Vzcy5lbnYuRVNQUkVTU09fSkFWQV9ERUJVRyA9PT0gJ3RydWUnLFxuICAgICAgJy1lJywgJ2Rpc2FibGVBbmFseXRpY3MnLCB0cnVlLCAvLyBUbyBhdm9pZCB1bmV4cGVjdGVkIGVycm9yIGJ5IGdvb2dsZSBhbmFseXRpY3NcbiAgICBdO1xuXG4gICAgaWYgKF8uaXNCb29sZWFuKHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UpKSB7XG4gICAgICBjbWQucHVzaCgnLWUnLCAnRElTQUJMRV9TVVBQUkVTU19BQ0NFU1NJQklMSVRZX1NFUlZJQ0VTJywgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSk7XG4gICAgfVxuXG4gICAgY21kLnB1c2goYCR7VEVTVF9BUEtfUEtHfS9hbmRyb2lkeC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXRSdW5uZXJgKTtcblxuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nIEVzcHJlc3NvIFNlcnZlciB2JHt2ZXJzaW9ufSB3aXRoIGNtZDogYWRiICR7Y21kLmpvaW4oJyAnKX1gKTtcblxuICAgIGxldCBoYXNTb2NrZXRFcnJvciA9IGZhbHNlO1xuICAgIC8vIHN0YXJ0IHRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2Vzc1xuICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZSA9IHtcbiAgICAgIGV4aXRlZDogZmFsc2UsXG4gICAgICBjcmFzaGVkOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMuaW5zdFByb2Nlc3MgPSB0aGlzLmFkYi5jcmVhdGVTdWJQcm9jZXNzKGNtZCk7XG4gICAgdGhpcy5pbnN0UHJvY2Vzcy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgIHRoaXMubG9nLmluZm8oYEluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSBmcm9tIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZS5leGl0ZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuaW5zdFByb2Nlc3Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgY29uc3QgbGluZSA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICBpZiAoXy5pc0VtcHR5KGxpbmUudHJpbSgpKSkge1xuICAgICAgICAvLyBEbyBub3QgcHJpbnQgZW1wdHkgbGluZXMgaW50byB0aGUgc3lzdGVtIGxvZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBbSW5zdHJ1bWVudGF0aW9uXSAke2xpbmUudHJpbSgpfWApO1xuICAgICAgLy8gQSAnU29ja2V0RXhjZXB0aW9uJyBpbmRpY2F0ZXMgdGhhdCB3ZSBjb3VsZG4ndCBjb25uZWN0IHRvIHRoZSBFc3ByZXNzbyBzZXJ2ZXIsXG4gICAgICAvLyBiZWNhdXNlIHRoZSBJTlRFUk5FVCBwZXJtaXNzaW9uIGlzIG5vdCBzZXRcbiAgICAgIGlmIChsaW5lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2phdmEubmV0LnNvY2tldGV4Y2VwdGlvbicpKSB7XG4gICAgICAgIGhhc1NvY2tldEVycm9yID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobGluZS5pbmNsdWRlcygnUHJvY2VzcyBjcmFzaGVkJykpIHtcbiAgICAgICAgdGhpcy5qd3Byb3h5Lmluc3RydW1lbnRhdGlvblN0YXRlLmNyYXNoZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLmluc3RQcm9jZXNzLnN0YXJ0KDApO1xuICAgIHRoaXMubG9nLmluZm8oYFdhaXRpbmcgdXAgdG8gJHt0aGlzLnNlcnZlckxhdW5jaFRpbWVvdXR9bXMgZm9yIEVzcHJlc3NvIHNlcnZlciB0byBiZSBvbmxpbmVgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChoYXNTb2NrZXRFcnJvcikge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYEVzcHJlc3NvIHNlcnZlciBoYXMgZmFpbGVkIHRvIHN0YXJ0IGR1ZSB0byBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gYCArXG4gICAgICAgICAgICBgTWFrZSBzdXJlIHRoZSAnSU5URVJORVQnIHBlcm1pc3Npb24gaXMgcmVxdWVzdGVkIGluIHRoZSBBbmRyb2lkIG1hbmlmZXN0IG9mIHlvdXIgYCArXG4gICAgICAgICAgICBgYXBwbGljYXRpb24gdW5kZXIgdGVzdCAoPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9XCJhbmRyb2lkLnBlcm1pc3Npb24uSU5URVJORVRcIiAvPilgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmp3cHJveHkuaW5zdHJ1bWVudGF0aW9uU3RhdGUuZXhpdGVkKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRXNwcmVzc28gc2VydmVyIHByb2Nlc3MgaGFzIGJlZW4gdW5leHBlY3RlZGx5IHRlcm1pbmF0ZWQuIGAgK1xuICAgICAgICAgICAgYENoZWNrIHRoZSBBcHBpdW0gc2VydmVyIGxvZyBhbmQgdGhlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiB0aGlzLnNlcnZlckxhdW5jaFRpbWVvdXQsXG4gICAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICgvQ29uZGl0aW9uIHVubWV0Ly50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGltZWQgb3V0IHdhaXRpbmcgZm9yIEVzcHJlc3NvIHNlcnZlciB0byBiZSBgICtcbiAgICAgICAgICBgb25saW5lIHdpdGhpbiAke3RoaXMuc2VydmVyTGF1bmNoVGltZW91dH1tcy4gVGhlIHRpbWVvdXQgdmFsdWUgY291bGQgYmUgYCArXG4gICAgICAgICAgYGN1c3RvbWl6ZWQgdXNpbmcgJ2VzcHJlc3NvU2VydmVyTGF1bmNoVGltZW91dCcgY2FwYWJpbGl0eWApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5sb2cuaW5mbyhgRXNwcmVzc28gc2VydmVyIGlzIG9ubGluZS4gYCArXG4gICAgICBgVGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIHRoaXMubG9nLmluZm8oJ1N0YXJ0aW5nIHRoZSBzZXNzaW9uJyk7XG5cbiAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbY2Fwc10sXG4gICAgICAgIGFsd2F5c01hdGNoOiB7fVxuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMucmVjb3JkVGFyZ2V0QXBwUGFja2FnZSgpO1xuICB9XG5cbiAgYXN5bmMgcmVjb3JkVGFyZ2V0QXBwUGFja2FnZSAoKSB7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoW2BlY2hvIFwiJHt0aGlzLmFwcFBhY2thZ2V9XCIgPiBcIiR7VEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSfVwiYF0pO1xuICAgIHRoaXMubG9nLmluZm8oYFJlY29yZGVkIHRoZSB0YXJnZXQgYXBwbGljYXRpb24gcGFja2FnZSAnJHt0aGlzLmFwcFBhY2thZ2V9JyB0byAke1RBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUn1gKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdEZWxldGluZyBFc3ByZXNzbyBzZXJ2ZXIgc2Vzc2lvbicpO1xuICAgIC8vIHJlbHkgb24gandwcm94eSdzIGludGVsbGlnZW5jZSB0byBrbm93IHdoYXQgd2UncmUgdGFsa2luZyBhYm91dCBhbmRcbiAgICAvLyBkZWxldGUgdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnLycsICdERUxFVEUnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYERpZCBub3QgZ2V0IGNvbmZpcm1hdGlvbiBFc3ByZXNzbyBkZWxldGVTZXNzaW9uIHdvcmtlZDsgYCArXG4gICAgICAgICAgYEVycm9yIHdhczogJHtlcnJ9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5zdFByb2Nlc3MgJiYgdGhpcy5pbnN0UHJvY2Vzcy5pc1J1bm5pbmcpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdFByb2Nlc3Muc3RvcCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBFc3ByZXNzb1J1bm5lciwgUkVRVUlSRURfUEFSQU1TLCBURVNUX0FQS19QS0cgfTtcbmV4cG9ydCBkZWZhdWx0IEVzcHJlc3NvUnVubmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLGdCQUFnQixHQUFHQyxhQUFBLENBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixFQUFvQyxpQkFBcEMsQ0FBekI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLCtCQUFyQjs7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FDdEIsS0FEc0IsRUFFdEIsUUFGc0IsRUFHdEIsTUFIc0IsRUFJdEIsWUFKc0IsRUFLdEIsWUFMc0IsRUFNdEIsWUFOc0IsRUFPdEIsc0JBUHNCLENBQXhCOztBQVNBLE1BQU1DLGlDQUFpQyxHQUFHLEtBQTFDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcscUNBQWpDOztBQUVBLE1BQU1DLGFBQU4sU0FBNEJDLG1CQUE1QixDQUFvQztFQUNoQixNQUFaQyxZQUFZLENBQUVDLEdBQUYsRUFB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
357
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2VzcHJlc3NvLXJ1bm5lci5qcyIsIm5hbWVzIjpbIlRFU1RfU0VSVkVSX1JPT1QiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsIlRFU1RfQVBLX1BLRyIsIlJFUVVJUkVEX1BBUkFNUyIsIkVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUyIsIlRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUiIsIkVzcHJlc3NvUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImNyYXNoZWQiLCJleGl0ZWQiLCJpbnN0cnVtZW50YXRpb25TdGF0ZSIsImVycm9ycyIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJFc3ByZXNzb1J1bm5lciIsImNvbnN0cnVjdG9yIiwibG9nIiwib3B0cyIsInJlcSIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiandwcm94eSIsInNlcnZlciIsImhvc3QiLCJwb3J0Iiwic3lzdGVtUG9ydCIsImJhc2UiLCJrZWVwQWxpdmUiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJjb21tYW5kIiwibW9kU2VydmVyTmFtZSIsImZzIiwic2FuaXRpemVOYW1lIiwidmVyc2lvbiIsImFwcFBhY2thZ2UiLCJhZGIiLCJjdXJEZXZpY2VJZCIsInJlcGxhY2VtZW50IiwibW9kU2VydmVyUGF0aCIsInRtcERpciIsInNob3dHcmFkbGVMb2ciLCJlc3ByZXNzb0J1aWxkQ29uZmlnIiwic2VydmVyTGF1bmNoVGltZW91dCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInNpZ25pbmdDb25maWciLCJidWlsZFNlcnZlclNpZ25pbmdDb25maWciLCJrZXlzdG9yZUZpbGUiLCJpc0FwcFBhY2thZ2VDaGFuZ2VkIiwiZmlsZUV4aXN0cyIsImRlYnVnIiwicHJldmlvdXNBcHBQYWNrYWdlIiwic2hlbGwiLCJ0cmltIiwiaW5zdGFsbFNlcnZlciIsImFwcFN0YXRlIiwiZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUiLCJzaG91bGRVbmluc3RhbGxBcHAiLCJBUFBfSU5TVEFMTF9TVEFURSIsIk9MREVSX1ZFUlNJT05fSU5TVEFMTEVEIiwiTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJpbmNsdWRlcyIsInNob3VsZEluc3RhbGxBcHAiLCJOT1RfSU5TVEFMTEVEIiwiaW5mbyIsInVuaW5zdGFsbEFwayIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwiaW5zdGFsbCIsInJlcGxhY2UiLCJ0aW1lb3V0IiwiZXJyb3JBbmRUaHJvdyIsImluc3RhbGxUZXN0QXBrIiwicmVidWlsZCIsImZvcmNlRXNwcmVzc29SZWJ1aWxkIiwiZXhpc3RzIiwidW5saW5rIiwiYnVpbGROZXdNb2RTZXJ2ZXIiLCJpc1NpZ25lZCIsImNoZWNrQXBrQ2VydCIsInNpZ24iLCJidWlsZENvbmZpZ3VyYXRpb24iLCJidWlsZENvbmZpZ3VyYXRpb25TdHIiLCJyZWFkRmlsZSIsIkpTT04iLCJwYXJzZSIsImUiLCJlcnJvciIsImRpck5hbWUiLCJzZXJ2ZXJQYXRoIiwicmltcmFmIiwibWtkaXJwIiwiY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseSIsIlNlcnZlckJ1aWxkZXIiLCJ0ZXN0QXBwUGFja2FnZSIsImJ1aWxkIiwiYXBrUGF0aCIsImNvcHlGaWxlIiwiY2xlYW51cFNlc3Npb25MZWZ0b3ZlcnMiLCJ2YWx1ZSIsImF4aW9zIiwiZGF0YSIsImFjdGl2ZVNlc3Npb25JZHMiLCJtYXAiLCJzZXNzIiwiaWQiLCJsZW5ndGgiLCJzdHJpbmdpZnkiLCJCIiwiYWxsIiwiZGVsYXkiLCJzdGFydFNlc3Npb24iLCJjYXBzIiwiY21kIiwicHJvY2VzcyIsImVudiIsIkVTUFJFU1NPX0pBVkFfREVCVUciLCJfIiwiaXNCb29sZWFuIiwicHVzaCIsImpvaW4iLCJoYXNTb2NrZXRFcnJvciIsImluc3RQcm9jZXNzIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0ZG91dCIsInN0ZGVyciIsImxpbmUiLCJpc0VtcHR5IiwidG9Mb3dlckNhc2UiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsInRlc3QiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInJlY29yZFRhcmdldEFwcFBhY2thZ2UiLCJkZWxldGVTZXNzaW9uIiwiaXNSdW5uaW5nIiwic3RvcCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9lc3ByZXNzby1ydW5uZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgU2VydmVyQnVpbGRlciwgYnVpbGRTZXJ2ZXJTaWduaW5nQ29uZmlnIH0gZnJvbSAnLi9zZXJ2ZXItYnVpbGRlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZzLCB1dGlsLCBta2RpcnAsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuXG5jb25zdCBURVNUX1NFUlZFUl9ST09UID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2VzcHJlc3NvLXNlcnZlcicpO1xuY29uc3QgVEVTVF9BUEtfUEtHID0gJ2lvLmFwcGl1bS5lc3ByZXNzb3NlcnZlci50ZXN0JztcbmNvbnN0IFJFUVVJUkVEX1BBUkFNUyA9IFtcbiAgJ2FkYicsXG4gICd0bXBEaXInLFxuICAnaG9zdCcsXG4gICdzeXN0ZW1Qb3J0JyxcbiAgJ2RldmljZVBvcnQnLFxuICAnYXBwUGFja2FnZScsXG4gICdmb3JjZUVzcHJlc3NvUmVidWlsZCcsXG5dO1xuY29uc3QgRVNQUkVTU09fU0VSVkVSX0xBVU5DSF9USU1FT1VUX01TID0gNDUwMDA7XG5jb25zdCBUQVJHRVRfUEFDS0FHRV9DT05UQUlORVIgPSAnL2RhdGEvbG9jYWwvdG1wL2VzcHJlc3NvLmFwcHBhY2thZ2UnO1xuXG5jbGFzcyBFc3ByZXNzb1Byb3h5IGV4dGVuZHMgSldQcm94eSB7XG4gIGFzeW5jIHByb3h5Q29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkgPSBudWxsKSB7XG4gICAgY29uc3Qge2NyYXNoZWQsIGV4aXRlZH0gPSB0aGlzLmluc3RydW1lbnRhdGlvblN0YXRlO1xuICAgIGlmIChleGl0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZENvbnRleHRFcnJvcihgJyR7bWV0aG9kfSAke3VybH0nIGNhbm5vdCBiZSBwcm94aWVkIHRvIEVzcHJlc3NvIHNlcnZlciBiZWNhdXNlIGAgK1xuICAgICAgICBgdGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGhhcyAke2NyYXNoZWQgPyAnY3Jhc2hlZCcgOiAnYmVlbiB1bmV4cGVjdGVkbHkgdGVybWluYXRlZCd9LiBgICtcbiAgICAgICAgYENoZWNrIHRoZSBBcHBpdW0gc2VydmVyIGxvZyBhbmQgdGhlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIucHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxufVxuXG5jbGFzcyBFc3ByZXNzb1J1bm5lciB7XG4gIGNvbnN0cnVjdG9yIChsb2csIG9wdHMgPSB7fSkge1xuICAgIGZvciAobGV0IHJlcSBvZiBSRVFVSVJFRF9QQVJBTVMpIHtcbiAgICAgIGlmICghb3B0cyB8fCAhdXRpbC5oYXNWYWx1ZShvcHRzW3JlcV0pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT3B0aW9uICcke3JlcX0nIGlzIHJlcXVpcmVkIWApO1xuICAgICAgfVxuICAgICAgdGhpc1tyZXFdID0gb3B0c1tyZXFdO1xuICAgIH1cbiAgICB0aGlzLmxvZyA9IGxvZztcbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgRXNwcmVzc29Qcm94eSh7XG4gICAgICBsb2csXG4gICAgICBzZXJ2ZXI6IHRoaXMuaG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMuc3lzdGVtUG9ydCxcbiAgICAgIGJhc2U6ICcnLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5qd3Byb3h5LmNvbW1hbmQuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZSA9IHtcbiAgICAgIGV4aXRlZDogZmFsc2UsXG4gICAgICBjcmFzaGVkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9kU2VydmVyTmFtZSA9IGZzLnNhbml0aXplTmFtZShgJHtURVNUX0FQS19QS0d9XyR7dmVyc2lvbn1fJHt0aGlzLmFwcFBhY2thZ2V9XyR7dGhpcy5hZGIuY3VyRGV2aWNlSWR9LmFwa2AsIHtcbiAgICAgIHJlcGxhY2VtZW50OiAnLScsXG4gICAgfSk7XG4gICAgdGhpcy5tb2RTZXJ2ZXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMudG1wRGlyLCBtb2RTZXJ2ZXJOYW1lKTtcbiAgICB0aGlzLnNob3dHcmFkbGVMb2cgPSBvcHRzLnNob3dHcmFkbGVMb2c7XG4gICAgdGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnID0gb3B0cy5lc3ByZXNzb0J1aWxkQ29uZmlnO1xuXG4gICAgdGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0ID0gb3B0cy5zZXJ2ZXJMYXVuY2hUaW1lb3V0IHx8IEVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUztcbiAgICB0aGlzLmFuZHJvaWRJbnN0YWxsVGltZW91dCA9IG9wdHMuYW5kcm9pZEluc3RhbGxUaW1lb3V0O1xuXG4gICAgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSA9IG9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U7XG5cbiAgICAvLyBFc3ByZXNzbyBTZXJ2ZXIgYXBwIG5lZWRzIHRvIGJlIHNpZ25lZCB3aXRoIHNhbWUga2V5U3RvcmUgYXMgYXBwUGFja2FnZVxuICAgIGlmIChvcHRzLnVzZUtleXN0b3JlICYmIG9wdHMua2V5c3RvcmVQYXRoICYmIG9wdHMua2V5c3RvcmVQYXNzd29yZCAmJiBvcHRzLmtleUFsaWFzICYmIG9wdHMua2V5UGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2lnbmluZ0NvbmZpZyA9IGJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyh7XG4gICAgICAgIGtleXN0b3JlRmlsZTogb3B0cy5rZXlzdG9yZVBhdGgsXG4gICAgICAgIGtleXN0b3JlUGFzc3dvcmQ6IG9wdHMua2V5c3RvcmVQYXNzd29yZCxcbiAgICAgICAga2V5QWxpYXM6IG9wdHMua2V5QWxpYXMsXG4gICAgICAgIGtleVBhc3N3b3JkOiBvcHRzLmtleVBhc3N3b3JkXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaWduaW5nQ29uZmlnID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc0FwcFBhY2thZ2VDaGFuZ2VkICgpIHtcbiAgICBpZiAoIWF3YWl0IHRoaXMuYWRiLmZpbGVFeGlzdHMoVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1RoZSBwcmV2aW91cyB0YXJnZXQgYXBwbGljYXRpb24gcGFja2FnZSBpcyB1bmtub3duJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNBcHBQYWNrYWdlID0gKGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnY2F0JywgVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSXSkpLnRyaW0oKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIHByZXZpb3VzIHRhcmdldCBhcHBsaWNhdGlvbiBwYWNrYWdlIHdhcyAnJHtwcmV2aW91c0FwcFBhY2thZ2V9Jy4gYCArXG4gICAgICBgVGhlIGN1cnJlbnQgcGFja2FnZSBpcyAnJHt0aGlzLmFwcFBhY2thZ2V9J2ApO1xuICAgIHJldHVybiBwcmV2aW91c0FwcFBhY2thZ2UgIT09IHRoaXMuYXBwUGFja2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YWxscyBFc3ByZXNzbyBzZXJ2ZXIgYXBrIG9uIHRvIHRoZSBkZXZpY2Ugb3IgZW11bGF0b3IuXG4gICAqIEVhY2ggYWRiIGNvbW1hbmQgdXNlcyBkZWZhdWx0IHRpbWVvdXQgYnkgdGhlbS5cbiAgICovXG4gIGFzeW5jIGluc3RhbGxTZXJ2ZXIgKCkge1xuICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUodGhpcy5tb2RTZXJ2ZXJQYXRoLCBURVNUX0FQS19QS0cpO1xuXG4gICAgY29uc3Qgc2hvdWxkVW5pbnN0YWxsQXBwID0gW1xuICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQsXG4gICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5ORVdFUl9WRVJTSU9OX0lOU1RBTExFRFxuICAgIF0uaW5jbHVkZXMoYXBwU3RhdGUpO1xuICAgIGNvbnN0IHNob3VsZEluc3RhbGxBcHAgPSBzaG91bGRVbmluc3RhbGxBcHAgfHwgW1xuICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuTk9UX0lOU1RBTExFRFxuICAgIF0uaW5jbHVkZXMoYXBwU3RhdGUpO1xuXG4gICAgaWYgKHNob3VsZFVuaW5zdGFsbEFwcCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVW5pbnN0YWxsaW5nIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayBmcm9tIHRoZSB0YXJnZXQgZGV2aWNlIChwa2c6ICcke1RFU1RfQVBLX1BLR30nKWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKFRFU1RfQVBLX1BLRyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgRXJyb3IgdW5pbnN0YWxsaW5nICcke1RFU1RfQVBLX1BLR30nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRJbnN0YWxsQXBwKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBJbnN0YWxsaW5nIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayBmcm9tIHRoZSB0YXJnZXQgZGV2aWNlIChwYXRoOiAnJHt0aGlzLm1vZFNlcnZlclBhdGh9JylgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmluc3RhbGwodGhpcy5tb2RTZXJ2ZXJQYXRoLCB7IHJlcGxhY2U6IGZhbHNlLCB0aW1lb3V0OiB0aGlzLmFuZHJvaWRJbnN0YWxsVGltZW91dCB9KTtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgSW5zdGFsbGVkIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayAnJHt0aGlzLm1vZFNlcnZlclBhdGh9JyAocGtnOiAnJHtURVNUX0FQS19QS0d9JylgKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgaW5zdGFsbCAnJHt0aGlzLm1vZFNlcnZlclBhdGh9JyBiZWNhdXNlIG9mICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnN0YWxsVGVzdEFwayAoKSB7XG4gICAgbGV0IHJlYnVpbGQgPSB0aGlzLmZvcmNlRXNwcmVzc29SZWJ1aWxkO1xuICAgIGlmIChyZWJ1aWxkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgJ2ZvcmNlRXNwcmVzc29SZWJ1aWxkJyBjYXBhYmlsaXR5IGlzIGVuYWJsZWRgKTtcbiAgICB9IGVsc2UgaWYgKGF3YWl0IHRoaXMuaXNBcHBQYWNrYWdlQ2hhbmdlZCgpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBGb3JjaW5nIEVzcHJlc3NvIHNlcnZlciByZWJ1aWxkIGJlY2F1c2Ugb2YgY2hhbmdlZCBhcHBsaWNhdGlvbiBwYWNrYWdlYCk7XG4gICAgICByZWJ1aWxkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVidWlsZCAmJiBhd2FpdCBmcy5leGlzdHModGhpcy5tb2RTZXJ2ZXJQYXRoKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYERlbGV0aW5nIHRoZSBvYnNvbGV0ZSBFc3ByZXNzbyBzZXJ2ZXIgcGFja2FnZSAnJHt0aGlzLm1vZFNlcnZlclBhdGh9J2ApO1xuICAgICAgYXdhaXQgZnMudW5saW5rKHRoaXMubW9kU2VydmVyUGF0aCk7XG4gICAgfVxuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm1vZFNlcnZlclBhdGgpKSkge1xuICAgICAgYXdhaXQgdGhpcy5idWlsZE5ld01vZFNlcnZlcigpO1xuICAgIH1cbiAgICBjb25zdCBpc1NpZ25lZCA9IGF3YWl0IHRoaXMuYWRiLmNoZWNrQXBrQ2VydCh0aGlzLm1vZFNlcnZlclBhdGgsIFRFU1RfQVBLX1BLRyk7XG4gICAgaWYgKCFpc1NpZ25lZCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc2lnbih0aGlzLm1vZFNlcnZlclBhdGgpO1xuICAgIH1cbiAgICBpZiAoKHJlYnVpbGQgfHwgIWlzU2lnbmVkKSAmJiBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsoVEVTVF9BUEtfUEtHKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVW5pbnN0YWxsZWQgdGhlIG9ic29sZXRlIEVzcHJlc3NvIHNlcnZlciBwYWNrYWdlIGZyb20gdGhlIGRldmljZSB1bmRlciB0ZXN0Jyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbnN0YWxsU2VydmVyKCk7XG4gIH1cblxuICBhc3luYyBidWlsZE5ld01vZFNlcnZlciAoKSB7XG4gICAgbGV0IGJ1aWxkQ29uZmlndXJhdGlvbiA9IHt9O1xuICAgIGlmICh0aGlzLmVzcHJlc3NvQnVpbGRDb25maWcpIHtcbiAgICAgIGxldCBidWlsZENvbmZpZ3VyYXRpb25TdHI7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgTG9hZGluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmcm9tICcke3RoaXMuZXNwcmVzc29CdWlsZENvbmZpZ30nYCk7XG4gICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvblN0ciA9IGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZywgJ3V0ZjgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYExvYWRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZnJvbSAnZXNwcmVzc29CdWlsZENvbmZpZycgY2FwYWJpbGl0eWApO1xuICAgICAgICBidWlsZENvbmZpZ3VyYXRpb25TdHIgPSB0aGlzLmVzcHJlc3NvQnVpbGRDb25maWc7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBidWlsZENvbmZpZ3VyYXRpb24gPSBKU09OLnBhcnNlKGJ1aWxkQ29uZmlndXJhdGlvblN0cik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yKCdDYW5ub3QgcGFyc2UgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gSlNPTicsIGUpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkaXJOYW1lID0gZnMuc2FuaXRpemVOYW1lKGBlc3ByZXNzby1zZXJ2ZXItJHt0aGlzLmFkYi5jdXJEZXZpY2VJZH1gLCB7XG4gICAgICByZXBsYWNlbWVudDogJy0nLFxuICAgIH0pO1xuICAgIGNvbnN0IHNlcnZlclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy50bXBEaXIsIGRpck5hbWUpO1xuICAgIHRoaXMubG9nLmluZm8oYEJ1aWxkaW5nIGVzcHJlc3NvIHNlcnZlciBpbiAnJHtzZXJ2ZXJQYXRofSdgKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIGJ1aWxkIGZvbGRlciByb290IGNvdWxkIGJlIGN1c3RvbWl6ZWQgYnkgY2hhbmdpbmcgdGhlICd0bXBEaXInIGNhcGFiaWxpdHlgKTtcbiAgICBhd2FpdCBmcy5yaW1yYWYoc2VydmVyUGF0aCk7XG4gICAgYXdhaXQgbWtkaXJwKHNlcnZlclBhdGgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDb3B5aW5nIGVzcHJlc3NvIHNlcnZlciB0ZW1wbGF0ZSBmcm9tICgnJHtURVNUX1NFUlZFUl9ST09UfScgdG8gJyR7c2VydmVyUGF0aH0nKWApO1xuICAgIGF3YWl0IGNvcHlHcmFkbGVQcm9qZWN0UmVjdXJzaXZlbHkoVEVTVF9TRVJWRVJfUk9PVCwgc2VydmVyUGF0aCk7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0J1bGRpbmcgZXNwcmVzc28gc2VydmVyJyk7XG4gICAgYXdhaXQgbmV3IFNlcnZlckJ1aWxkZXIodGhpcy5sb2csIHtcbiAgICAgIHNlcnZlclBhdGgsIGJ1aWxkQ29uZmlndXJhdGlvbixcbiAgICAgIHNob3dHcmFkbGVMb2c6IHRoaXMuc2hvd0dyYWRsZUxvZyxcbiAgICAgIHRlc3RBcHBQYWNrYWdlOiB0aGlzLmFwcFBhY2thZ2UsXG4gICAgICBzaWduaW5nQ29uZmlnOiB0aGlzLnNpZ25pbmdDb25maWdcbiAgICB9KS5idWlsZCgpO1xuICAgIGNvbnN0IGFwa1BhdGggPSBwYXRoLnJlc29sdmUoc2VydmVyUGF0aCwgJ2FwcCcsICdidWlsZCcsICdvdXRwdXRzJywgJ2FwaycsICdhbmRyb2lkVGVzdCcsICdkZWJ1ZycsICdhcHAtZGVidWctYW5kcm9pZFRlc3QuYXBrJyk7XG4gICAgdGhpcy5sb2cuZGVidWcoYENvcHlpbmcgYnVpbHQgYXBrIGZyb20gJyR7YXBrUGF0aH0nIHRvICcke3RoaXMubW9kU2VydmVyUGF0aH0nYCk7XG4gICAgYXdhaXQgZnMuY29weUZpbGUoYXBrUGF0aCwgdGhpcy5tb2RTZXJ2ZXJQYXRoKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBTZXNzaW9uTGVmdG92ZXJzICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnUGVyZm9ybWluZyBjbGVhbnVwIG9mIGF1dG9tYXRpb24gbGVmdG92ZXJzJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge3ZhbHVlfSA9IChhd2FpdCBheGlvcyh7XG4gICAgICAgIHVybDogYGh0dHA6Ly8ke3RoaXMuaG9zdH06JHt0aGlzLnN5c3RlbVBvcnR9L3Nlc3Npb25zYCxcbiAgICAgICAgdGltZW91dDogNTAwLFxuICAgICAgfSkpLmRhdGE7XG4gICAgICBjb25zdCBhY3RpdmVTZXNzaW9uSWRzID0gdmFsdWUubWFwKChzZXNzKSA9PiBzZXNzLmlkKTtcbiAgICAgIGlmIChhY3RpdmVTZXNzaW9uSWRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIGZvbGxvd2luZyBvYnNvbGV0ZSBzZXNzaW9ucyBhcmUgc3RpbGwgcnVubmluZzogJHtKU09OLnN0cmluZ2lmeShhY3RpdmVTZXNzaW9uSWRzKX1gKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ0NsZWFuaW5nIHVwIHRoZSBvYnNvbGV0ZSBzZXNzaW9ucycpO1xuICAgICAgICBhd2FpdCBCLmFsbChhY3RpdmVTZXNzaW9uSWRzLm1hcCgoaWQpID0+XG4gICAgICAgICAgYXhpb3Moe1xuICAgICAgICAgICAgdXJsOiBgaHR0cDovLyR7dGhpcy5ob3N0fToke3RoaXMuc3lzdGVtUG9ydH0vc2Vzc2lvbi8ke2lkfWAsXG4gICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgICAgIH0pXG4gICAgICAgICkpO1xuICAgICAgICAvLyBMZXQgYWxsIHNlc3Npb25zIHRvIGJlIHByb3Blcmx5IHRlcm1pbmF0ZWQgYmVmb3JlIGNvbnRpbnVpbmdcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBvYnNvbGV0ZSBzZXNzaW9ucyBoYXZlIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gb2Jzb2xldGUgc2Vzc2lvbnMgaGF2ZSBiZWVuIGRldGVjdGVkICgke2UubWVzc2FnZX0pYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXNzaW9uIChjYXBzKSB7XG4gICAgYXdhaXQgdGhpcy5jbGVhbnVwU2Vzc2lvbkxlZnRvdmVycygpO1xuXG4gICAgY29uc3QgY21kID0gW1xuICAgICAgJ3NoZWxsJyxcbiAgICAgICdhbScsICdpbnN0cnVtZW50JyxcbiAgICAgICctdycsXG4gICAgICAnLWUnLCAnZGVidWcnLCBwcm9jZXNzLmVudi5FU1BSRVNTT19KQVZBX0RFQlVHID09PSAndHJ1ZScsXG4gICAgICAnLWUnLCAnZGlzYWJsZUFuYWx5dGljcycsIHRydWUsIC8vIFRvIGF2b2lkIHVuZXhwZWN0ZWQgZXJyb3IgYnkgZ29vZ2xlIGFuYWx5dGljc1xuICAgIF07XG5cbiAgICBpZiAoXy5pc0Jvb2xlYW4odGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSkpIHtcbiAgICAgIGNtZC5wdXNoKCctZScsICdESVNBQkxFX1NVUFBSRVNTX0FDQ0VTU0lCSUxJVFlfU0VSVklDRVMnLCB0aGlzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBjbWQucHVzaChgJHtURVNUX0FQS19QS0d9L2FuZHJvaWR4LnRlc3QucnVubmVyLkFuZHJvaWRKVW5pdFJ1bm5lcmApO1xuXG4gICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgRXNwcmVzc28gU2VydmVyIHYke3ZlcnNpb259IHdpdGggY21kOiBhZGIgJHtjbWQuam9pbignICcpfWApO1xuXG4gICAgbGV0IGhhc1NvY2tldEVycm9yID0gZmFsc2U7XG4gICAgLy8gc3RhcnQgdGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzXG4gICAgdGhpcy5qd3Byb3h5Lmluc3RydW1lbnRhdGlvblN0YXRlID0ge1xuICAgICAgZXhpdGVkOiBmYWxzZSxcbiAgICAgIGNyYXNoZWQ6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5pbnN0UHJvY2VzcyA9IHRoaXMuYWRiLmNyZWF0ZVN1YlByb2Nlc3MoY21kKTtcbiAgICB0aGlzLmluc3RQcm9jZXNzLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgSW5zdHJ1bWVudGF0aW9uIHByb2Nlc3MgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9IGZyb20gc2lnbmFsICR7c2lnbmFsfWApO1xuICAgICAgdGhpcy5qd3Byb3h5Lmluc3RydW1lbnRhdGlvblN0YXRlLmV4aXRlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgdGhpcy5pbnN0UHJvY2Vzcy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICBjb25zdCBsaW5lID0gc3Rkb3V0IHx8IHN0ZGVycjtcbiAgICAgIGlmIChfLmlzRW1wdHkobGluZS50cmltKCkpKSB7XG4gICAgICAgIC8vIERvIG5vdCBwcmludCBlbXB0eSBsaW5lcyBpbnRvIHRoZSBzeXN0ZW0gbG9nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFtJbnN0cnVtZW50YXRpb25dICR7bGluZS50cmltKCl9YCk7XG4gICAgICAvLyBBICdTb2NrZXRFeGNlcHRpb24nIGluZGljYXRlcyB0aGF0IHdlIGNvdWxkbid0IGNvbm5lY3QgdG8gdGhlIEVzcHJlc3NvIHNlcnZlcixcbiAgICAgIC8vIGJlY2F1c2UgdGhlIElOVEVSTkVUIHBlcm1pc3Npb24gaXMgbm90IHNldFxuICAgICAgaWYgKGxpbmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnamF2YS5uZXQuc29ja2V0ZXhjZXB0aW9uJykpIHtcbiAgICAgICAgaGFzU29ja2V0RXJyb3IgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChsaW5lLmluY2x1ZGVzKCdQcm9jZXNzIGNyYXNoZWQnKSkge1xuICAgICAgICB0aGlzLmp3cHJveHkuaW5zdHJ1bWVudGF0aW9uU3RhdGUuY3Jhc2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGF3YWl0IHRoaXMuaW5zdFByb2Nlc3Muc3RhcnQoMCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgV2FpdGluZyB1cCB0byAke3RoaXMuc2VydmVyTGF1bmNoVGltZW91dH1tcyBmb3IgRXNwcmVzc28gc2VydmVyIHRvIGJlIG9ubGluZWApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKGhhc1NvY2tldEVycm9yKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRXNwcmVzc28gc2VydmVyIGhhcyBmYWlsZWQgdG8gc3RhcnQgZHVlIHRvIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLiBgICtcbiAgICAgICAgICAgIGBNYWtlIHN1cmUgdGhlICdJTlRFUk5FVCcgcGVybWlzc2lvbiBpcyByZXF1ZXN0ZWQgaW4gdGhlIEFuZHJvaWQgbWFuaWZlc3Qgb2YgeW91ciBgICtcbiAgICAgICAgICAgIGBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0ICg8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT1cImFuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVFwiIC8+KWApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZS5leGl0ZWQpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBFc3ByZXNzbyBzZXJ2ZXIgcHJvY2VzcyBoYXMgYmVlbiB1bmV4cGVjdGVkbHkgdGVybWluYXRlZC4gYCArXG4gICAgICAgICAgICBgQ2hlY2sgdGhlIEFwcGl1bSBzZXJ2ZXIgbG9nIGFuZCB0aGUgbG9nY2F0IG91dHB1dCBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IHRoaXMuc2VydmVyTGF1bmNoVGltZW91dCxcbiAgICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKC9Db25kaXRpb24gdW5tZXQvLnRlc3QoZS5tZXNzYWdlKSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgRXNwcmVzc28gc2VydmVyIHRvIGJlIGAgK1xuICAgICAgICAgIGBvbmxpbmUgd2l0aGluICR7dGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0fW1zLiBUaGUgdGltZW91dCB2YWx1ZSBjb3VsZCBiZSBgICtcbiAgICAgICAgICBgY3VzdG9taXplZCB1c2luZyAnZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0JyBjYXBhYmlsaXR5YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLmxvZy5pbmZvKGBFc3ByZXNzbyBzZXJ2ZXIgaXMgb25saW5lLiBgICtcbiAgICAgIGBUaGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB0b29rICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgdGhpcy5sb2cuaW5mbygnU3RhcnRpbmcgdGhlIHNlc3Npb24nKTtcblxuICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFtjYXBzXSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHt9XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5yZWNvcmRUYXJnZXRBcHBQYWNrYWdlKCk7XG4gIH1cblxuICBhc3luYyByZWNvcmRUYXJnZXRBcHBQYWNrYWdlICgpIHtcbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbYGVjaG8gXCIke3RoaXMuYXBwUGFja2FnZX1cIiA+IFwiJHtUQVJHRVRfUEFDS0FHRV9DT05UQUlORVJ9XCJgXSk7XG4gICAgdGhpcy5sb2cuaW5mbyhgUmVjb3JkZWQgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBwYWNrYWdlICcke3RoaXMuYXBwUGFja2FnZX0nIHRvICR7VEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSfWApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0RlbGV0aW5nIEVzcHJlc3NvIHNlcnZlciBzZXNzaW9uJyk7XG4gICAgLy8gcmVseSBvbiBqd3Byb3h5J3MgaW50ZWxsaWdlbmNlIHRvIGtub3cgd2hhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGFuZFxuICAgIC8vIGRlbGV0ZSB0aGUgY3VycmVudCBzZXNzaW9uXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvJywgJ0RFTEVURScpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cud2FybihgRGlkIG5vdCBnZXQgY29uZmlybWF0aW9uIEVzcHJlc3NvIGRlbGV0ZVNlc3Npb24gd29ya2VkOyBgICtcbiAgICAgICAgICBgRXJyb3Igd2FzOiAke2Vycn1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbnN0UHJvY2VzcyAmJiB0aGlzLmluc3RQcm9jZXNzLmlzUnVubmluZykge1xuICAgICAgYXdhaXQgdGhpcy5pbnN0UHJvY2Vzcy5zdG9wKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IEVzcHJlc3NvUnVubmVyLCBSRVFVSVJFRF9QQVJBTVMsIFRFU1RfQVBLX1BLRyB9O1xuZXhwb3J0IGRlZmF1bHQgRXNwcmVzc29SdW5uZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsZ0JBQWdCLEdBQUdDLGFBQUEsQ0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCLElBQXhCLEVBQThCLElBQTlCLEVBQW9DLGlCQUFwQyxDQUF6Qjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsK0JBQXJCOztBQUNBLE1BQU1DLGVBQWUsR0FBRyxDQUN0QixLQURzQixFQUV0QixRQUZzQixFQUd0QixNQUhzQixFQUl0QixZQUpzQixFQUt0QixZQUxzQixFQU10QixZQU5zQixFQU90QixzQkFQc0IsQ0FBeEI7O0FBU0EsTUFBTUMsaUNBQWlDLEdBQUcsS0FBMUM7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxxQ0FBakM7O0FBRUEsTUFBTUMsYUFBTixTQUE0QkMsZUFBNUIsQ0FBb0M7RUFDaEIsTUFBWkMsWUFBWSxDQUFFQyxHQUFGLEVBQU9DLE1BQVAs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
@@ -7,7 +7,7 @@ exports.default = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
10
- var _support = require("@appium/support");
10
+ var _support = require("appium/support");
11
11
 
12
12
  const log = _support.logger.getLogger('Espresso');
13
13
 
@@ -15,4 +15,4 @@ var _default = log;
15
15
  exports.default = _default;require('source-map-support').install();
16
16
 
17
17
 
18
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdFc3ByZXNzbycpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLFVBQWpCLENBQVo7O2VBRWVGLEcifQ==
18
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0VzcHJlc3NvJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBR0EsTUFBTUEsR0FBRyxHQUFHQyxlQUFBLENBQU9DLFNBQVAsQ0FBaUIsVUFBakIsQ0FBWjs7ZUFFZUYsRyJ9
@@ -13,7 +13,7 @@ require("source-map-support/register");
13
13
 
14
14
  var _teen_process = require("teen_process");
15
15
 
16
- var _support = require("@appium/support");
16
+ var _support = require("appium/support");
17
17
 
18
18
  var _lodash = _interopRequireDefault(require("lodash"));
19
19
 
@@ -203,4 +203,4 @@ var _default = ServerBuilder;
203
203
  exports.default = _default;require('source-map-support').install();
204
204
 
205
205
 
206
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3NlcnZlci1idWlsZGVyLmpzIiwibmFtZXMiOlsiR1JBRExFX1ZFUlNJT05fS0VZIiwiR1JBRExFX1VSTF9QUkVGSVgiLCJHUkFETEVfVVJMX1RFTVBMQVRFIiwiR1JBRExFX01BWF9FUlJPUl9MT0dfTElORVMiLCJERVBFTkRFTkNZX1BST1BfTkFNRVMiLCJWRVJTSU9OX0tFWVMiLCJidWlsZFNlcnZlclNpZ25pbmdDb25maWciLCJhcmdzIiwiemlwQWxpZ24iLCJrZXlzdG9yZUZpbGUiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsIlNlcnZlckJ1aWxkZXIiLCJjb25zdHJ1Y3RvciIsImxvZyIsInNlcnZlclBhdGgiLCJzaG93R3JhZGxlTG9nIiwiYnVpbGRDb25maWd1cmF0aW9uIiwidmVyc2lvbkNvbmZpZ3VyYXRpb24iLCJ0b29sc1ZlcnNpb25zIiwic2VydmVyVmVyc2lvbnMiLCJfIiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJrZXkiLCJpbmNsdWRlcyIsIndhcm4iLCJ0ZXN0QXBwUGFja2FnZSIsInNpZ25pbmdDb25maWciLCJwcm9wTmFtZSIsImJ1aWxkIiwic2V0R3JhZGxlV3JhcHBlclZlcnNpb24iLCJpbnNlcnRBZGRpdGlvbmFsRGVwZW5kZW5jaWVzIiwicnVuQnVpbGRQcm9jZXNzIiwiZ2V0Q29tbWFuZCIsImNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsInBhdGgiLCJyZXNvbHZlIiwiYnVpbGRQcm9wZXJ0eSIsImZpbHRlciIsIm1hcCIsInNlcnZlclZlcnNpb24iLCJncmFkbGVQcm9wZXJ0eSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJCb29sZWFuIiwicHVzaCIsImtleXMiLCJ1cHBlckZpcnN0IiwiayIsInYiLCJ2ZXJzaW9uIiwicHJvcGVydGllc1BhdGgiLCJvcmlnaW5hbFByb3BlcnRpZXMiLCJmcyIsInJlYWRGaWxlIiwibmV3UHJvcGVydGllcyIsInVwZGF0ZUdyYWRsZURpc3RVcmwiLCJ3cml0ZUZpbGUiLCJwcm9wZXJ0aWVzQ29udGVudCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJoYXNBZGRpdGlvbmFsRGVwcyIsImlzQXJyYXkiLCJFcnJvciIsImlzRW1wdHkiLCJsaW5lIiwidHJpbSIsImRlcCIsInRlc3QiLCJidWlsZFBhdGgiLCJjb25maWd1cmF0aW9uIiwicHJlZml4IiwiZGVwcyIsImluZm8iLCJ1cGRhdGVEZXBlbmRlbmN5TGluZXMiLCJkZWJ1ZyIsImpvaW4iLCJncmFkbGVidWlsZCIsIlN1YlByb2Nlc3MiLCJjd2QiLCJzdGRpbyIsIndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyIsImJ1aWxkTGFzdExpbmVzIiwibG9nTXNnIiwib24iLCJzdGFydHNXaXRoIiwiRU9MIiwibGVuZ3RoIiwic3RhcnQiLCJlcnIiLCJtc2ciLCJtZXNzYWdlIiwiZXJyb3JBbmRUaHJvdyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXItYnVpbGRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCBzeXN0ZW0gfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgdXBkYXRlRGVwZW5kZW5jeUxpbmVzIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IEdSQURMRV9WRVJTSU9OX0tFWSA9ICdncmFkbGUnO1xuY29uc3QgR1JBRExFX1VSTF9QUkVGSVggPSAnZGlzdHJpYnV0aW9uVXJsPSc7XG5jb25zdCBHUkFETEVfVVJMX1RFTVBMQVRFID0gJ2h0dHBzXFxcXDovL3NlcnZpY2VzLmdyYWRsZS5vcmcvZGlzdHJpYnV0aW9ucy9ncmFkbGUtVkVSU0lPTi1hbGwuemlwJztcbmNvbnN0IEdSQURMRV9NQVhfRVJST1JfTE9HX0xJTkVTID0gMTU7XG5jb25zdCBERVBFTkRFTkNZX1BST1BfTkFNRVMgPSBbJ2FkZGl0aW9uYWxBcHBEZXBlbmRlbmNpZXMnLCAnYWRkaXRpb25hbEFuZHJvaWRUZXN0RGVwZW5kZW5jaWVzJ107XG5cbmNvbnN0IFZFUlNJT05fS0VZUyA9IFtcbiAgR1JBRExFX1ZFUlNJT05fS0VZLFxuICAnYW5kcm9pZEdyYWRsZVBsdWdpbicsXG4gICdjb21waWxlU2RrJyxcbiAgJ2J1aWxkVG9vbHMnLFxuICAnbWluU2RrJyxcbiAgJ3RhcmdldFNkaycsXG4gICdrb3RsaW4nLFxuICAnc291cmNlQ29tcGF0aWJpbGl0eScsXG4gICd0YXJnZXRDb21wYXRpYmlsaXR5JyxcbiAgJ2p2bVRhcmdldCcsXG4gICdjb21wb3NlVmVyc2lvbicsXG4gICdhbm5vdGF0aW9uVmVyc2lvbidcbl07XG5cbmZ1bmN0aW9uIGJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyAoYXJncykge1xuICByZXR1cm4ge1xuICAgIHppcEFsaWduOiB0cnVlLFxuICAgIGtleXN0b3JlRmlsZTogYXJncy5rZXlzdG9yZUZpbGUsXG4gICAga2V5c3RvcmVQYXNzd29yZDogYXJncy5rZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzOiBhcmdzLmtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkOiBhcmdzLmtleVBhc3N3b3JkXG4gIH07XG59XG5cbmNsYXNzIFNlcnZlckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvciAobG9nLCBhcmdzID0ge30pIHtcbiAgICB0aGlzLmxvZyA9IGxvZztcbiAgICB0aGlzLnNlcnZlclBhdGggPSBhcmdzLnNlcnZlclBhdGg7XG4gICAgdGhpcy5zaG93R3JhZGxlTG9nID0gYXJncy5zaG93R3JhZGxlTG9nO1xuXG4gICAgY29uc3QgYnVpbGRDb25maWd1cmF0aW9uID0gYXJncy5idWlsZENvbmZpZ3VyYXRpb24gfHwge307XG5cbiAgICBjb25zdCB2ZXJzaW9uQ29uZmlndXJhdGlvbiA9IGJ1aWxkQ29uZmlndXJhdGlvbi50b29sc1ZlcnNpb25zIHx8IHt9O1xuICAgIHRoaXMuc2VydmVyVmVyc2lvbnMgPSBfLnJlZHVjZSh2ZXJzaW9uQ29uZmlndXJhdGlvbiwgKGFjYywgdmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKFZFUlNJT05fS0VZUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybihgR290IHVuZXhwZWN0ZWQgJyR7a2V5fScgaW4gdG9vbHNWZXJzaW9uIGJsb2NrIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIHRoaXMudGVzdEFwcFBhY2thZ2UgPSBhcmdzLnRlc3RBcHBQYWNrYWdlO1xuICAgIHRoaXMuc2lnbmluZ0NvbmZpZyA9IGFyZ3Muc2lnbmluZ0NvbmZpZztcblxuICAgIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgREVQRU5ERU5DWV9QUk9QX05BTUVTKSB7XG4gICAgICB0aGlzW3Byb3BOYW1lXSA9IGJ1aWxkQ29uZmlndXJhdGlvbltwcm9wTmFtZV0gfHwgW107XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYnVpbGQgKCkge1xuICAgIGlmICh0aGlzLnNlcnZlclZlcnNpb25zW0dSQURMRV9WRVJTSU9OX0tFWV0pIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0R3JhZGxlV3JhcHBlclZlcnNpb24odGhpcy5zZXJ2ZXJWZXJzaW9uc1tHUkFETEVfVkVSU0lPTl9LRVldKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmluc2VydEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMoKTtcblxuICAgIGF3YWl0IHRoaXMucnVuQnVpbGRQcm9jZXNzKCk7XG4gIH1cblxuICBnZXRDb21tYW5kICgpIHtcbiAgICBjb25zdCBjbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnZ3JhZGxldy5iYXQnIDogcGF0aC5yZXNvbHZlKHRoaXMuc2VydmVyUGF0aCwgJ2dyYWRsZXcnKTtcbiAgICBjb25zdCBidWlsZFByb3BlcnR5ID0gKGtleSwgdmFsdWUpID0+IHZhbHVlID8gYC1QJHtrZXl9PSR7dmFsdWV9YCA6IG51bGw7XG4gICAgbGV0IGFyZ3MgPSBWRVJTSU9OX0tFWVNcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSBHUkFETEVfVkVSU0lPTl9LRVkpXG4gICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgY29uc3Qgc2VydmVyVmVyc2lvbiA9IHRoaXMuc2VydmVyVmVyc2lvbnNba2V5XTtcbiAgICAgICAgY29uc3QgZ3JhZGxlUHJvcGVydHkgPSBgYXBwaXVtJHtrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtrZXkuc2xpY2UoMSl9YDtcbiAgICAgICAgcmV0dXJuIGJ1aWxkUHJvcGVydHkoZ3JhZGxlUHJvcGVydHksIHNlcnZlclZlcnNpb24pO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBpZiAodGhpcy5zaWduaW5nQ29uZmlnKSB7XG4gICAgICBhcmdzLnB1c2goLi4uKFxuICAgICAgICBfLmtleXModGhpcy5zaWduaW5nQ29uZmlnKVxuICAgICAgICAubWFwKChrZXkpID0+IFtgYXBwaXVtJHtfLnVwcGVyRmlyc3Qoa2V5KX1gLCB0aGlzLnNpZ25pbmdDb25maWdba2V5XV0pXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYnVpbGRQcm9wZXJ0eShrLCB2KSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGVzdEFwcFBhY2thZ2UpIHtcbiAgICAgIGFyZ3MucHVzaChidWlsZFByb3BlcnR5KCdhcHBpdW1UYXJnZXRQYWNrYWdlJywgdGhpcy50ZXN0QXBwUGFja2FnZSkpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJ2FwcDphc3NlbWJsZUFuZHJvaWRUZXN0Jyk7XG5cbiAgICByZXR1cm4ge2NtZCwgYXJnc307XG4gIH1cblxuICBhc3luYyBzZXRHcmFkbGVXcmFwcGVyVmVyc2lvbiAodmVyc2lvbikge1xuICAgIGNvbnN0IHByb3BlcnRpZXNQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuc2VydmVyUGF0aCwgJ2dyYWRsZScsICd3cmFwcGVyJywgJ2dyYWRsZS13cmFwcGVyLnByb3BlcnRpZXMnKTtcbiAgICBjb25zdCBvcmlnaW5hbFByb3BlcnRpZXMgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9wZXJ0aWVzUGF0aCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gdGhpcy51cGRhdGVHcmFkbGVEaXN0VXJsKG9yaWdpbmFsUHJvcGVydGllcywgdmVyc2lvbik7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHByb3BlcnRpZXNQYXRoLCBuZXdQcm9wZXJ0aWVzLCAndXRmOCcpO1xuICB9XG5cbiAgdXBkYXRlR3JhZGxlRGlzdFVybCAocHJvcGVydGllc0NvbnRlbnQsIHZlcnNpb24pIHtcbiAgICByZXR1cm4gcHJvcGVydGllc0NvbnRlbnQucmVwbGFjZShcbiAgICAgIG5ldyBSZWdFeHAoYF4oJHtfLmVzY2FwZVJlZ0V4cChHUkFETEVfVVJMX1BSRUZJWCl9KS4rJGAsICdnbScpLFxuICAgICAgYCQxJHtHUkFETEVfVVJMX1RFTVBMQVRFLnJlcGxhY2UoJ1ZFUlNJT04nLCB2ZXJzaW9uKX1gXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGluc2VydEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMgKCkge1xuICAgIGxldCBoYXNBZGRpdGlvbmFsRGVwcyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgREVQRU5ERU5DWV9QUk9QX05BTUVTKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheSh0aGlzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtwcm9wTmFtZX0nIG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzRW1wdHkodGhpc1twcm9wTmFtZV0uZmlsdGVyKChsaW5lKSA9PiBfLnRyaW0obGluZSkpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkZXAgb2YgdGhpc1twcm9wTmFtZV0pIHtcbiAgICAgICAgaWYgKC9bXFxzJ1xcXFwkXS8udGVzdChkZXApKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaW5nbGUgcXVvdGVzLCBkb2xsYXIgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzJyArXG4gICAgICAgICAgICBgIGFyZSBkaXNhbGxvd2VkIGluIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzOiAke2RlcH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGFzQWRkaXRpb25hbERlcHMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWhhc0FkZGl0aW9uYWxEZXBzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuc2VydmVyUGF0aCwgJ2FwcCcsICdidWlsZC5ncmFkbGUua3RzJyk7XG4gICAgbGV0IGNvbmZpZ3VyYXRpb24gPSBhd2FpdCBmcy5yZWFkRmlsZShidWlsZFBhdGgsICd1dGY4Jyk7XG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBERVBFTkRFTkNZX1BST1BfTkFNRVMpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IHByb3BOYW1lID09PSBERVBFTkRFTkNZX1BST1BfTkFNRVNbMF1cbiAgICAgICAgPyAnaW1wbGVtZW50YXRpb24nXG4gICAgICAgIDogJ2FuZHJvaWRUZXN0SW1wbGVtZW50YXRpb24nO1xuICAgICAgY29uc3QgZGVwcyA9IHRoaXNbcHJvcE5hbWVdXG4gICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IF8udHJpbShsaW5lKSlcbiAgICAgICAgLm1hcCgobGluZSkgPT4gYCR7cHJlZml4fShcIiR7bGluZX1cIilgKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoZGVwcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmluZm8oYEFkZGluZyB0aGUgZm9sbG93aW5nICR7cHJvcE5hbWV9IHRvIGJ1aWxkLmdyYWRsZS5rdHM6ICR7ZGVwc31gKTtcbiAgICAgIGNvbmZpZ3VyYXRpb24gPSB1cGRhdGVEZXBlbmRlbmN5TGluZXMoY29uZmlndXJhdGlvbiwgcHJvcE5hbWUsIGRlcHMpO1xuICAgIH1cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoYnVpbGRQYXRoLCBjb25maWd1cmF0aW9uLCAndXRmOCcpO1xuICB9XG5cbiAgYXN5bmMgcnVuQnVpbGRQcm9jZXNzICgpIHtcbiAgICBjb25zdCB7Y21kLCBhcmdzfSA9IHRoaXMuZ2V0Q29tbWFuZCgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBCZWdpbm5pbmcgYnVpbGQgd2l0aCBjb21tYW5kICcke2NtZH0gJHthcmdzLmpvaW4oJyAnKX0nIGAgK1xuICAgICAgYGluIGRpcmVjdG9yeSAnJHt0aGlzLnNlcnZlclBhdGh9J2ApO1xuICAgIGNvbnN0IGdyYWRsZWJ1aWxkID0gbmV3IFN1YlByb2Nlc3MoY21kLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuc2VydmVyUGF0aCxcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogdHJ1ZVxuICAgIH0pO1xuICAgIGxldCBidWlsZExhc3RMaW5lcyA9IFtdO1xuXG4gICAgY29uc3QgbG9nTXNnID0gYE91dHB1dCBmcm9tIEdyYWRsZSAke3RoaXMuc2hvd0dyYWRsZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGA7XG4gICAgdGhpcy5sb2cuZGVidWcoYCR7bG9nTXNnfS4gVG8gY2hhbmdlIHRoaXMsIHVzZSAnc2hvd0dyYWRsZUxvZycgZGVzaXJlZCBjYXBhYmlsaXR5YCk7XG4gICAgZ3JhZGxlYnVpbGQub24oJ3N0cmVhbS1saW5lJywgKGxpbmUpID0+IHtcbiAgICAgIGlmICh0aGlzLnNob3dHcmFkbGVMb2cpIHtcbiAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnW1NUREVSUl0nKSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFtHcmFkbGVdICR7bGluZX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBbR3JhZGxlXSAke2xpbmV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJ1aWxkTGFzdExpbmVzLnB1c2goYCR7RU9MfSR7bGluZX1gKTtcbiAgICAgIGlmIChidWlsZExhc3RMaW5lcy5sZW5ndGggPiBHUkFETEVfTUFYX0VSUk9SX0xPR19MSU5FUykge1xuICAgICAgICBidWlsZExhc3RMaW5lcyA9IGJ1aWxkTGFzdExpbmVzLnNsaWNlKC1HUkFETEVfTUFYX0VSUk9SX0xPR19MSU5FUyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZ3JhZGxlYnVpbGQuc3RhcnQoKTtcbiAgICAgIGF3YWl0IGdyYWRsZWJ1aWxkLmpvaW4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCBtc2cgPSBgVW5hYmxlIHRvIGJ1aWxkIEVzcHJlc3NvIHNlcnZlciAtICR7ZXJyLm1lc3NhZ2V9XFxuYCArXG4gICAgICAgIGBHcmFkbGUgZXJyb3IgbWVzc2FnZToke0VPTH0ke2J1aWxkTGFzdExpbmVzfWA7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KG1zZyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IFNlcnZlckJ1aWxkZXIsIFZFUlNJT05fS0VZUywgR1JBRExFX1VSTF9URU1QTEFURSwgYnVpbGRTZXJ2ZXJTaWduaW5nQ29uZmlnIH07XG5leHBvcnQgZGVmYXVsdCBTZXJ2ZXJCdWlsZGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsa0JBQWtCLEdBQUcsUUFBM0I7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxrQkFBMUI7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxvRUFBNUI7O0FBQ0EsTUFBTUMsMEJBQTBCLEdBQUcsRUFBbkM7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxDQUFDLDJCQUFELEVBQThCLG1DQUE5QixDQUE5QjtBQUVBLE1BQU1DLFlBQVksR0FBRyxDQUNuQkwsa0JBRG1CLEVBRW5CLHFCQUZtQixFQUduQixZQUhtQixFQUluQixZQUptQixFQUtuQixRQUxtQixFQU1uQixXQU5tQixFQU9uQixRQVBtQixFQVFuQixxQkFSbUIsRUFTbkIscUJBVG1CLEVBVW5CLFdBVm1CLEVBV25CLGdCQVhtQixFQVluQixtQkFabUIsQ0FBckI7OztBQWVBLFNBQVNNLHdCQUFULENBQW1DQyxJQUFuQyxFQUF5QztFQUN2QyxPQUFPO0lBQ0xDLFFBQVEsRUFBRSxJQURMO0lBRUxDLFlBQVksRUFBRUYsSUFBSSxDQUFDRSxZQUZkO0lBR0xDLGdCQUFnQixFQUFFSCxJQUFJLENBQUNHLGdCQUhsQjtJQUlMQyxRQUFRLEVBQUVKLElBQUksQ0FBQ0ksUUFKVjtJQUtMQyxXQUFXLEVBQUVMLElBQUksQ0FBQ0s7RUFMYixDQUFQO0FBT0Q7O0FBRUQsTUFBTUMsYUFBTixDQUFvQjtFQUNsQkMsV0FBVyxDQUFFQyxHQUFGLEVBQU9SLElBQUksR0FBRyxFQUFkLEVBQWtCO0lBQzNCLEtBQUtRLEdBQUwsR0FBV0EsR0FBWDtJQUNBLEtBQUtDLFVBQUwsR0FBa0JULElBQUksQ0FBQ1MsVUFBdkI7SUFDQSxLQUFLQyxhQUFMLEdBQXFCVixJQUFJLENBQUNVLGFBQTFCO0lBRUEsTUFBTUMsa0JBQWtCLEdBQUdYLElBQUksQ0FBQ1csa0JBQUwsSUFBMkIsRUFBdEQ7SUFFQSxNQUFNQyxvQkFBb0IsR0FBR0Qsa0JBQWtCLENBQUNFLGFBQW5CLElBQW9DLEVBQWpFO0lBQ0EsS0FBS0MsY0FBTCxHQUFzQkMsZUFBQSxDQUFFQyxNQUFGLENBQVNKLG9CQUFULEVBQStCLENBQUNLLEdBQUQsRUFBTUMsS0FBTixFQUFhQyxHQUFiLEtBQXFCO01BQ3hFLElBQUlyQixZQUFZLENBQUNzQixRQUFiLENBQXNCRCxHQUF0QixDQUFKLEVBQWdDO1FBQzlCRixHQUFHLENBQUNFLEdBQUQsQ0FBSCxHQUFXRCxLQUFYO01BQ0QsQ0FGRCxNQUVPO1FBQ0xWLEdBQUcsQ0FBQ2EsSUFBSixDQUFVLG1CQUFrQkYsR0FBSSxvREFBaEM7TUFDRDs7TUFDRCxPQUFPRixHQUFQO0lBQ0QsQ0FQcUIsRUFPbkIsRUFQbUIsQ0FBdEI7SUFTQSxLQUFLSyxjQUFMLEdBQXNCdEIsSUFBSSxDQUFDc0IsY0FBM0I7SUFDQSxLQUFLQyxhQUFMLEdBQXFCdkIsSUFBSSxDQUFDdUIsYUFBMUI7O0lBRUEsS0FBSyxNQUFNQyxRQUFYLElBQXVCM0IscUJBQXZCLEVBQThDO01BQzVDLEtBQUsyQixRQUFMLElBQWlCYixrQkFBa0IsQ0FBQ2EsUUFBRCxDQUFsQixJQUFnQyxFQUFqRDtJQUNEO0VBQ0Y7O0VBRVUsTUFBTEMsS0FBSyxHQUFJO0lBQ2IsSUFBSSxLQUFLWCxjQUFMLENBQW9CckIsa0JBQXBCLENBQUosRUFBNkM7TUFDM0MsTUFBTSxLQUFLaUMsdUJBQUwsQ0FBNkIsS0FBS1osY0FBTCxDQUFvQnJCLGtCQUFwQixDQUE3QixDQUFOO0lBQ0Q7O0lBRUQsTUFBTSxLQUFLa0MsNEJBQUwsRUFBTjtJQUVBLE1BQU0sS0FBS0MsZUFBTCxFQUFOO0VBQ0Q7O0VBRURDLFVBQVUsR0FBSTtJQUNaLE1BQU1DLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLEtBQXFCLGFBQXJCLEdBQXFDQyxhQUFBLENBQUtDLE9BQUwsQ0FBYSxLQUFLekIsVUFBbEIsRUFBOEIsU0FBOUIsQ0FBakQ7O0lBQ0EsTUFBTTBCLGFBQWEsR0FBRyxDQUFDaEIsR0FBRCxFQUFNRCxLQUFOLEtBQWdCQSxLQUFLLEdBQUksS0FBSUMsR0FBSSxJQUFHRCxLQUFNLEVBQXJCLEdBQXlCLElBQXBFOztJQUNBLElBQUlsQixJQUFJLEdBQUdGLFlBQVksQ0FDcEJzQyxNQURRLENBQ0FqQixHQUFELElBQVNBLEdBQUcsS0FBSzFCLGtCQURoQixFQUVSNEMsR0FGUSxDQUVIbEIsR0FBRCxJQUFTO01BQ1osTUFBTW1CLGFBQWEsR0FBRyxLQUFLeEIsY0FBTCxDQUFvQkssR0FBcEIsQ0FBdEI7TUFDQSxNQUFNb0IsY0FBYyxHQUFJLFNBQVFwQixHQUFHLENBQUNxQixNQUFKLENBQVcsQ0FBWCxFQUFjQyxXQUFkLEVBQTRCLEdBQUV0QixHQUFHLENBQUN1QixLQUFKLENBQVUsQ0FBVixDQUFhLEVBQTNFO01BQ0EsT0FBT1AsYUFBYSxDQUFDSSxjQUFELEVBQWlCRCxhQUFqQixDQUFwQjtJQUNELENBTlEsRUFPUkYsTUFQUSxDQU9ETyxPQVBDLENBQVg7O0lBU0EsSUFBSSxLQUFLcEIsYUFBVCxFQUF3QjtNQUN0QnZCLElBQUksQ0FBQzRDLElBQUwsQ0FBVSxHQUNSN0IsZUFBQSxDQUFFOEIsSUFBRixDQUFPLEtBQUt0QixhQUFaLEVBQ0NjLEdBREQsQ0FDTWxCLEdBQUQsSUFBUyxDQUFFLFNBQVFKLGVBQUEsQ0FBRStCLFVBQUYsQ0FBYTNCLEdBQWIsQ0FBa0IsRUFBNUIsRUFBK0IsS0FBS0ksYUFBTCxDQUFtQkosR0FBbkIsQ0FBL0IsQ0FEZCxFQUVDa0IsR0FGRCxDQUVLLENBQUMsQ0FBQ1UsQ0FBRCxFQUFJQyxDQUFKLENBQUQsS0FBWWIsYUFBYSxDQUFDWSxDQUFELEVBQUlDLENBQUosQ0FGOUIsRUFHQ1osTUFIRCxDQUdRTyxPQUhSLENBREY7SUFNRDs7SUFFRCxJQUFJLEtBQUtyQixjQUFULEVBQXlCO01BQ3ZCdEIsSUFBSSxDQUFDNEMsSUFBTCxDQUFVVCxhQUFhLENBQUMscUJBQUQsRUFBd0IsS0FBS2IsY0FBN0IsQ0FBdkI7SUFDRDs7SUFDRHRCLElBQUksQ0FBQzRDLElBQUwsQ0FBVSx5QkFBVjtJQUVBLE9BQU87TUFBQ2QsR0FBRDtNQUFNOUI7SUFBTixDQUFQO0VBQ0Q7O0VBRTRCLE1BQXZCMEIsdUJBQXVCLENBQUV1QixPQUFGLEVBQVc7SUFDdEMsTUFBTUMsY0FBYyxHQUFHakIsYUFBQSxDQUFLQyxPQUFMLENBQWEsS0FBS3pCLFVBQWxCLEVBQThCLFFBQTlCLEVBQXdDLFNBQXhDLEVBQW1ELDJCQUFuRCxDQUF2Qjs7SUFDQSxNQUFNMEMsa0JBQWtCLEdBQUcsTUFBTUMsV0FBQSxDQUFHQyxRQUFILENBQVlILGNBQVosRUFBNEIsTUFBNUIsQ0FBakM7SUFDQSxNQUFNSSxhQUFhLEdBQUcsS0FBS0MsbUJBQUwsQ0FBeUJKLGtCQUF6QixFQUE2Q0YsT0FBN0MsQ0FBdEI7SUFDQSxNQUFNRyxXQUFBLENBQUdJLFNBQUgsQ0FBYU4sY0FBYixFQUE2QkksYUFBN0IsRUFBNEMsTUFBNUMsQ0FBTjtFQUNEOztFQUVEQyxtQkFBbUIsQ0FBRUUsaUJBQUYsRUFBcUJSLE9BQXJCLEVBQThCO0lBQy9DLE9BQU9RLGlCQUFpQixDQUFDQyxPQUFsQixDQUNMLElBQUlDLE1BQUosQ0FBWSxLQUFJNUMsZUFBQSxDQUFFNkMsWUFBRixDQUFlbEUsaUJBQWYsQ0FBa0MsTUFBbEQsRUFBeUQsSUFBekQsQ0FESyxFQUVKLEtBQUlDLG1CQUFtQixDQUFDK0QsT0FBcEIsQ0FBNEIsU0FBNUIsRUFBdUNULE9BQXZDLENBQWdELEVBRmhELENBQVA7RUFJRDs7RUFFaUMsTUFBNUJ0Qiw0QkFBNEIsR0FBSTtJQUNwQyxJQUFJa0MsaUJBQWlCLEdBQUcsS0FBeEI7O0lBQ0EsS0FBSyxNQUFNckMsUUFBWCxJQUF1QjNCLHFCQUF2QixFQUE4QztNQUM1QyxJQUFJLENBQUNrQixlQUFBLENBQUUrQyxPQUFGLENBQVUsS0FBS3RDLFFBQUwsQ0FBVixDQUFMLEVBQWdDO1FBQzlCLE1BQU0sSUFBSXVDLEtBQUosQ0FBVyxJQUFHdkMsUUFBUyxvQkFBdkIsQ0FBTjtNQUNEOztNQUNELElBQUlULGVBQUEsQ0FBRWlELE9BQUYsQ0FBVSxLQUFLeEMsUUFBTCxFQUFlWSxNQUFmLENBQXVCNkIsSUFBRCxJQUFVbEQsZUFBQSxDQUFFbUQsSUFBRixDQUFPRCxJQUFQLENBQWhDLENBQVYsQ0FBSixFQUE4RDtRQUM1RDtNQUNEOztNQUVELEtBQUssTUFBTUUsR0FBWCxJQUFrQixLQUFLM0MsUUFBTCxDQUFsQixFQUFrQztRQUNoQyxJQUFJLFdBQVc0QyxJQUFYLENBQWdCRCxHQUFoQixDQUFKLEVBQTBCO1VBQ3hCLE1BQU0sSUFBSUosS0FBSixDQUFVLCtEQUNiLCtDQUE4Q0ksR0FBSSxFQUQvQyxDQUFOO1FBRUQ7TUFDRjs7TUFDRE4saUJBQWlCLEdBQUcsSUFBcEI7SUFDRDs7SUFDRCxJQUFJLENBQUNBLGlCQUFMLEVBQXdCO01BQ3RCO0lBQ0Q7O0lBRUQsTUFBTVEsU0FBUyxHQUFHcEMsYUFBQSxDQUFLQyxPQUFMLENBQWEsS0FBS3pCLFVBQWxCLEVBQThCLEtBQTlCLEVBQXFDLGtCQUFyQyxDQUFsQjs7SUFDQSxJQUFJNkQsYUFBYSxHQUFHLE1BQU1sQixXQUFBLENBQUdDLFFBQUgsQ0FBWWdCLFNBQVosRUFBdUIsTUFBdkIsQ0FBMUI7O0lBQ0EsS0FBSyxNQUFNN0MsUUFBWCxJQUF1QjNCLHFCQUF2QixFQUE4QztNQUM1QyxNQUFNMEUsTUFBTSxHQUFHL0MsUUFBUSxLQUFLM0IscUJBQXFCLENBQUMsQ0FBRCxDQUFsQyxHQUNYLGdCQURXLEdBRVgsMkJBRko7TUFHQSxNQUFNMkUsSUFBSSxHQUFHLEtBQUtoRCxRQUFMLEVBQ1ZZLE1BRFUsQ0FDRjZCLElBQUQsSUFBVWxELGVBQUEsQ0FBRW1ELElBQUYsQ0FBT0QsSUFBUCxDQURQLEVBRVY1QixHQUZVLENBRUw0QixJQUFELElBQVcsR0FBRU0sTUFBTyxLQUFJTixJQUFLLElBRnZCLENBQWI7O01BR0EsSUFBSWxELGVBQUEsQ0FBRWlELE9BQUYsQ0FBVVEsSUFBVixDQUFKLEVBQXFCO1FBQ25CO01BQ0Q7O01BRUQsS0FBS2hFLEdBQUwsQ0FBU2lFLElBQVQsQ0FBZSx3QkFBdUJqRCxRQUFTLHlCQUF3QmdELElBQUssRUFBNUU7TUFDQUYsYUFBYSxHQUFHLElBQUFJLDRCQUFBLEVBQXNCSixhQUF0QixFQUFxQzlDLFFBQXJDLEVBQStDZ0QsSUFBL0MsQ0FBaEI7SUFDRDs7SUFDRCxNQUFNcEIsV0FBQSxDQUFHSSxTQUFILENBQWFhLFNBQWIsRUFBd0JDLGFBQXhCLEVBQXVDLE1BQXZDLENBQU47RUFDRDs7RUFFb0IsTUFBZjFDLGVBQWUsR0FBSTtJQUN2QixNQUFNO01BQUNFLEdBQUQ7TUFBTTlCO0lBQU4sSUFBYyxLQUFLNkIsVUFBTCxFQUFwQjtJQUNBLEtBQUtyQixHQUFMLENBQVNtRSxLQUFULENBQWdCLGlDQUFnQzdDLEdBQUksSUFBRzlCLElBQUksQ0FBQzRFLElBQUwsQ0FBVSxHQUFWLENBQWUsSUFBdkQsR0FDWixpQkFBZ0IsS0FBS25FLFVBQVcsR0FEbkM7SUFFQSxNQUFNb0UsV0FBVyxHQUFHLElBQUlDLHdCQUFKLENBQWVoRCxHQUFmLEVBQW9COUIsSUFBcEIsRUFBMEI7TUFDNUMrRSxHQUFHLEVBQUUsS0FBS3RFLFVBRGtDO01BRTVDdUUsS0FBSyxFQUFFLENBQUMsUUFBRCxFQUFXLE1BQVgsRUFBbUIsTUFBbkIsQ0FGcUM7TUFHNUNDLHdCQUF3QixFQUFFO0lBSGtCLENBQTFCLENBQXBCO0lBS0EsSUFBSUMsY0FBYyxHQUFHLEVBQXJCO0lBRUEsTUFBTUMsTUFBTSxHQUFJLHNCQUFxQixLQUFLekUsYUFBTCxHQUFxQixNQUFyQixHQUE4QixVQUFXLFlBQTlFO0lBQ0EsS0FBS0YsR0FBTCxDQUFTbUUsS0FBVCxDQUFnQixHQUFFUSxNQUFPLDBEQUF6QjtJQUNBTixXQUFXLENBQUNPLEVBQVosQ0FBZSxhQUFmLEVBQStCbkIsSUFBRCxJQUFVO01BQ3RDLElBQUksS0FBS3ZELGFBQVQsRUFBd0I7UUFDdEIsSUFBSXVELElBQUksQ0FBQ29CLFVBQUwsQ0FBZ0IsVUFBaEIsQ0FBSixFQUFpQztVQUMvQixLQUFLN0UsR0FBTCxDQUFTYSxJQUFULENBQWUsWUFBVzRDLElBQUssRUFBL0I7UUFDRCxDQUZELE1BRU87VUFDTCxLQUFLekQsR0FBTCxDQUFTaUUsSUFBVCxDQUFlLFlBQVdSLElBQUssRUFBL0I7UUFDRDtNQUNGOztNQUNEaUIsY0FBYyxDQUFDdEMsSUFBZixDQUFxQixHQUFFMEMsT0FBSSxHQUFFckIsSUFBSyxFQUFsQzs7TUFDQSxJQUFJaUIsY0FBYyxDQUFDSyxNQUFmLEdBQXdCM0YsMEJBQTVCLEVBQXdEO1FBQ3REc0YsY0FBYyxHQUFHQSxjQUFjLENBQUN4QyxLQUFmLENBQXFCLENBQUM5QywwQkFBdEIsQ0FBakI7TUFDRDtJQUNGLENBWkQ7O0lBY0EsSUFBSTtNQUNGLE1BQU1pRixXQUFXLENBQUNXLEtBQVosRUFBTjtNQUNBLE1BQU1YLFdBQVcsQ0FBQ0QsSUFBWixFQUFOO0lBQ0QsQ0FIRCxDQUdFLE9BQU9hLEdBQVAsRUFBWTtNQUNaLElBQUlDLEdBQUcsR0FBSSxxQ0FBb0NELEdBQUcsQ0FBQ0UsT0FBUSxJQUFqRCxHQUNQLHdCQUF1QkwsT0FBSSxHQUFFSixjQUFlLEVBRC9DO01BRUEsS0FBSzFFLEdBQUwsQ0FBU29GLGFBQVQsQ0FBdUJGLEdBQXZCO0lBQ0Q7RUFDRjs7QUEzSmlCOzs7ZUErSkxwRixhIn0=
206
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3NlcnZlci1idWlsZGVyLmpzIiwibmFtZXMiOlsiR1JBRExFX1ZFUlNJT05fS0VZIiwiR1JBRExFX1VSTF9QUkVGSVgiLCJHUkFETEVfVVJMX1RFTVBMQVRFIiwiR1JBRExFX01BWF9FUlJPUl9MT0dfTElORVMiLCJERVBFTkRFTkNZX1BST1BfTkFNRVMiLCJWRVJTSU9OX0tFWVMiLCJidWlsZFNlcnZlclNpZ25pbmdDb25maWciLCJhcmdzIiwiemlwQWxpZ24iLCJrZXlzdG9yZUZpbGUiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsIlNlcnZlckJ1aWxkZXIiLCJjb25zdHJ1Y3RvciIsImxvZyIsInNlcnZlclBhdGgiLCJzaG93R3JhZGxlTG9nIiwiYnVpbGRDb25maWd1cmF0aW9uIiwidmVyc2lvbkNvbmZpZ3VyYXRpb24iLCJ0b29sc1ZlcnNpb25zIiwic2VydmVyVmVyc2lvbnMiLCJfIiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJrZXkiLCJpbmNsdWRlcyIsIndhcm4iLCJ0ZXN0QXBwUGFja2FnZSIsInNpZ25pbmdDb25maWciLCJwcm9wTmFtZSIsImJ1aWxkIiwic2V0R3JhZGxlV3JhcHBlclZlcnNpb24iLCJpbnNlcnRBZGRpdGlvbmFsRGVwZW5kZW5jaWVzIiwicnVuQnVpbGRQcm9jZXNzIiwiZ2V0Q29tbWFuZCIsImNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsInBhdGgiLCJyZXNvbHZlIiwiYnVpbGRQcm9wZXJ0eSIsImZpbHRlciIsIm1hcCIsInNlcnZlclZlcnNpb24iLCJncmFkbGVQcm9wZXJ0eSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJCb29sZWFuIiwicHVzaCIsImtleXMiLCJ1cHBlckZpcnN0IiwiayIsInYiLCJ2ZXJzaW9uIiwicHJvcGVydGllc1BhdGgiLCJvcmlnaW5hbFByb3BlcnRpZXMiLCJmcyIsInJlYWRGaWxlIiwibmV3UHJvcGVydGllcyIsInVwZGF0ZUdyYWRsZURpc3RVcmwiLCJ3cml0ZUZpbGUiLCJwcm9wZXJ0aWVzQ29udGVudCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJoYXNBZGRpdGlvbmFsRGVwcyIsImlzQXJyYXkiLCJFcnJvciIsImlzRW1wdHkiLCJsaW5lIiwidHJpbSIsImRlcCIsInRlc3QiLCJidWlsZFBhdGgiLCJjb25maWd1cmF0aW9uIiwicHJlZml4IiwiZGVwcyIsImluZm8iLCJ1cGRhdGVEZXBlbmRlbmN5TGluZXMiLCJkZWJ1ZyIsImpvaW4iLCJncmFkbGVidWlsZCIsIlN1YlByb2Nlc3MiLCJjd2QiLCJzdGRpbyIsIndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyIsImJ1aWxkTGFzdExpbmVzIiwibG9nTXNnIiwib24iLCJzdGFydHNXaXRoIiwiRU9MIiwibGVuZ3RoIiwic3RhcnQiLCJlcnIiLCJtc2ciLCJtZXNzYWdlIiwiZXJyb3JBbmRUaHJvdyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXItYnVpbGRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCBzeXN0ZW0gfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyB1cGRhdGVEZXBlbmRlbmN5TGluZXMgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgR1JBRExFX1ZFUlNJT05fS0VZID0gJ2dyYWRsZSc7XG5jb25zdCBHUkFETEVfVVJMX1BSRUZJWCA9ICdkaXN0cmlidXRpb25Vcmw9JztcbmNvbnN0IEdSQURMRV9VUkxfVEVNUExBVEUgPSAnaHR0cHNcXFxcOi8vc2VydmljZXMuZ3JhZGxlLm9yZy9kaXN0cmlidXRpb25zL2dyYWRsZS1WRVJTSU9OLWFsbC56aXAnO1xuY29uc3QgR1JBRExFX01BWF9FUlJPUl9MT0dfTElORVMgPSAxNTtcbmNvbnN0IERFUEVOREVOQ1lfUFJPUF9OQU1FUyA9IFsnYWRkaXRpb25hbEFwcERlcGVuZGVuY2llcycsICdhZGRpdGlvbmFsQW5kcm9pZFRlc3REZXBlbmRlbmNpZXMnXTtcblxuY29uc3QgVkVSU0lPTl9LRVlTID0gW1xuICBHUkFETEVfVkVSU0lPTl9LRVksXG4gICdhbmRyb2lkR3JhZGxlUGx1Z2luJyxcbiAgJ2NvbXBpbGVTZGsnLFxuICAnYnVpbGRUb29scycsXG4gICdtaW5TZGsnLFxuICAndGFyZ2V0U2RrJyxcbiAgJ2tvdGxpbicsXG4gICdzb3VyY2VDb21wYXRpYmlsaXR5JyxcbiAgJ3RhcmdldENvbXBhdGliaWxpdHknLFxuICAnanZtVGFyZ2V0JyxcbiAgJ2NvbXBvc2VWZXJzaW9uJyxcbiAgJ2Fubm90YXRpb25WZXJzaW9uJ1xuXTtcblxuZnVuY3Rpb24gYnVpbGRTZXJ2ZXJTaWduaW5nQ29uZmlnIChhcmdzKSB7XG4gIHJldHVybiB7XG4gICAgemlwQWxpZ246IHRydWUsXG4gICAga2V5c3RvcmVGaWxlOiBhcmdzLmtleXN0b3JlRmlsZSxcbiAgICBrZXlzdG9yZVBhc3N3b3JkOiBhcmdzLmtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXM6IGFyZ3Mua2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQ6IGFyZ3Mua2V5UGFzc3dvcmRcbiAgfTtcbn1cblxuY2xhc3MgU2VydmVyQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yIChsb2csIGFyZ3MgPSB7fSkge1xuICAgIHRoaXMubG9nID0gbG9nO1xuICAgIHRoaXMuc2VydmVyUGF0aCA9IGFyZ3Muc2VydmVyUGF0aDtcbiAgICB0aGlzLnNob3dHcmFkbGVMb2cgPSBhcmdzLnNob3dHcmFkbGVMb2c7XG5cbiAgICBjb25zdCBidWlsZENvbmZpZ3VyYXRpb24gPSBhcmdzLmJ1aWxkQ29uZmlndXJhdGlvbiB8fCB7fTtcblxuICAgIGNvbnN0IHZlcnNpb25Db25maWd1cmF0aW9uID0gYnVpbGRDb25maWd1cmF0aW9uLnRvb2xzVmVyc2lvbnMgfHwge307XG4gICAgdGhpcy5zZXJ2ZXJWZXJzaW9ucyA9IF8ucmVkdWNlKHZlcnNpb25Db25maWd1cmF0aW9uLCAoYWNjLCB2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAoVkVSU0lPTl9LRVlTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKGBHb3QgdW5leHBlY3RlZCAnJHtrZXl9JyBpbiB0b29sc1ZlcnNpb24gYmxvY2sgb2YgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgdGhpcy50ZXN0QXBwUGFja2FnZSA9IGFyZ3MudGVzdEFwcFBhY2thZ2U7XG4gICAgdGhpcy5zaWduaW5nQ29uZmlnID0gYXJncy5zaWduaW5nQ29uZmlnO1xuXG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBERVBFTkRFTkNZX1BST1BfTkFNRVMpIHtcbiAgICAgIHRoaXNbcHJvcE5hbWVdID0gYnVpbGRDb25maWd1cmF0aW9uW3Byb3BOYW1lXSB8fCBbXTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBidWlsZCAoKSB7XG4gICAgaWYgKHRoaXMuc2VydmVyVmVyc2lvbnNbR1JBRExFX1ZFUlNJT05fS0VZXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRHcmFkbGVXcmFwcGVyVmVyc2lvbih0aGlzLnNlcnZlclZlcnNpb25zW0dSQURMRV9WRVJTSU9OX0tFWV0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5zZXJ0QWRkaXRpb25hbERlcGVuZGVuY2llcygpO1xuXG4gICAgYXdhaXQgdGhpcy5ydW5CdWlsZFByb2Nlc3MoKTtcbiAgfVxuXG4gIGdldENvbW1hbmQgKCkge1xuICAgIGNvbnN0IGNtZCA9IHN5c3RlbS5pc1dpbmRvd3MoKSA/ICdncmFkbGV3LmJhdCcgOiBwYXRoLnJlc29sdmUodGhpcy5zZXJ2ZXJQYXRoLCAnZ3JhZGxldycpO1xuICAgIGNvbnN0IGJ1aWxkUHJvcGVydHkgPSAoa2V5LCB2YWx1ZSkgPT4gdmFsdWUgPyBgLVAke2tleX09JHt2YWx1ZX1gIDogbnVsbDtcbiAgICBsZXQgYXJncyA9IFZFUlNJT05fS0VZU1xuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IEdSQURMRV9WRVJTSU9OX0tFWSlcbiAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBzZXJ2ZXJWZXJzaW9uID0gdGhpcy5zZXJ2ZXJWZXJzaW9uc1trZXldO1xuICAgICAgICBjb25zdCBncmFkbGVQcm9wZXJ0eSA9IGBhcHBpdW0ke2tleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke2tleS5zbGljZSgxKX1gO1xuICAgICAgICByZXR1cm4gYnVpbGRQcm9wZXJ0eShncmFkbGVQcm9wZXJ0eSwgc2VydmVyVmVyc2lvbik7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGlmICh0aGlzLnNpZ25pbmdDb25maWcpIHtcbiAgICAgIGFyZ3MucHVzaCguLi4oXG4gICAgICAgIF8ua2V5cyh0aGlzLnNpZ25pbmdDb25maWcpXG4gICAgICAgIC5tYXAoKGtleSkgPT4gW2BhcHBpdW0ke18udXBwZXJGaXJzdChrZXkpfWAsIHRoaXMuc2lnbmluZ0NvbmZpZ1trZXldXSlcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBidWlsZFByb3BlcnR5KGssIHYpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXN0QXBwUGFja2FnZSkge1xuICAgICAgYXJncy5wdXNoKGJ1aWxkUHJvcGVydHkoJ2FwcGl1bVRhcmdldFBhY2thZ2UnLCB0aGlzLnRlc3RBcHBQYWNrYWdlKSk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnYXBwOmFzc2VtYmxlQW5kcm9pZFRlc3QnKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIHNldEdyYWRsZVdyYXBwZXJWZXJzaW9uICh2ZXJzaW9uKSB7XG4gICAgY29uc3QgcHJvcGVydGllc1BhdGggPSBwYXRoLnJlc29sdmUodGhpcy5zZXJ2ZXJQYXRoLCAnZ3JhZGxlJywgJ3dyYXBwZXInLCAnZ3JhZGxlLXdyYXBwZXIucHJvcGVydGllcycpO1xuICAgIGNvbnN0IG9yaWdpbmFsUHJvcGVydGllcyA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BlcnRpZXNQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSB0aGlzLnVwZGF0ZUdyYWRsZURpc3RVcmwob3JpZ2luYWxQcm9wZXJ0aWVzLCB2ZXJzaW9uKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocHJvcGVydGllc1BhdGgsIG5ld1Byb3BlcnRpZXMsICd1dGY4Jyk7XG4gIH1cblxuICB1cGRhdGVHcmFkbGVEaXN0VXJsIChwcm9wZXJ0aWVzQ29udGVudCwgdmVyc2lvbikge1xuICAgIHJldHVybiBwcm9wZXJ0aWVzQ29udGVudC5yZXBsYWNlKFxuICAgICAgbmV3IFJlZ0V4cChgXigke18uZXNjYXBlUmVnRXhwKEdSQURMRV9VUkxfUFJFRklYKX0pLiskYCwgJ2dtJyksXG4gICAgICBgJDEke0dSQURMRV9VUkxfVEVNUExBVEUucmVwbGFjZSgnVkVSU0lPTicsIHZlcnNpb24pfWBcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgaW5zZXJ0QWRkaXRpb25hbERlcGVuZGVuY2llcyAoKSB7XG4gICAgbGV0IGhhc0FkZGl0aW9uYWxEZXBzID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBERVBFTkRFTkNZX1BST1BfTkFNRVMpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KHRoaXNbcHJvcE5hbWVdKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3Byb3BOYW1lfScgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzW3Byb3BOYW1lXS5maWx0ZXIoKGxpbmUpID0+IF8udHJpbShsaW5lKSkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzW3Byb3BOYW1lXSkge1xuICAgICAgICBpZiAoL1tcXHMnXFxcXCRdLy50ZXN0KGRlcCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpbmdsZSBxdW90ZXMsIGRvbGxhciBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMnICtcbiAgICAgICAgICAgIGAgYXJlIGRpc2FsbG93ZWQgaW4gYWRkaXRpb25hbCBkZXBlbmRlbmNpZXM6ICR7ZGVwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoYXNBZGRpdGlvbmFsRGVwcyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghaGFzQWRkaXRpb25hbERlcHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5zZXJ2ZXJQYXRoLCAnYXBwJywgJ2J1aWxkLmdyYWRsZS5rdHMnKTtcbiAgICBsZXQgY29uZmlndXJhdGlvbiA9IGF3YWl0IGZzLnJlYWRGaWxlKGJ1aWxkUGF0aCwgJ3V0ZjgnKTtcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIERFUEVOREVOQ1lfUFJPUF9OQU1FUykge1xuICAgICAgY29uc3QgcHJlZml4ID0gcHJvcE5hbWUgPT09IERFUEVOREVOQ1lfUFJPUF9OQU1FU1swXVxuICAgICAgICA/ICdpbXBsZW1lbnRhdGlvbidcbiAgICAgICAgOiAnYW5kcm9pZFRlc3RJbXBsZW1lbnRhdGlvbic7XG4gICAgICBjb25zdCBkZXBzID0gdGhpc1twcm9wTmFtZV1cbiAgICAgICAgLmZpbHRlcigobGluZSkgPT4gXy50cmltKGxpbmUpKVxuICAgICAgICAubWFwKChsaW5lKSA9PiBgJHtwcmVmaXh9KFwiJHtsaW5lfVwiKWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkZXBzKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuaW5mbyhgQWRkaW5nIHRoZSBmb2xsb3dpbmcgJHtwcm9wTmFtZX0gdG8gYnVpbGQuZ3JhZGxlLmt0czogJHtkZXBzfWApO1xuICAgICAgY29uZmlndXJhdGlvbiA9IHVwZGF0ZURlcGVuZGVuY3lMaW5lcyhjb25maWd1cmF0aW9uLCBwcm9wTmFtZSwgZGVwcyk7XG4gICAgfVxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShidWlsZFBhdGgsIGNvbmZpZ3VyYXRpb24sICd1dGY4Jyk7XG4gIH1cblxuICBhc3luYyBydW5CdWlsZFByb2Nlc3MgKCkge1xuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyBidWlsZCB3aXRoIGNvbW1hbmQgJyR7Y21kfSAke2FyZ3Muam9pbignICcpfScgYCArXG4gICAgICBgaW4gZGlyZWN0b3J5ICcke3RoaXMuc2VydmVyUGF0aH0nYCk7XG4gICAgY29uc3QgZ3JhZGxlYnVpbGQgPSBuZXcgU3ViUHJvY2VzcyhjbWQsIGFyZ3MsIHtcbiAgICAgIGN3ZDogdGhpcy5zZXJ2ZXJQYXRoLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiB0cnVlXG4gICAgfSk7XG4gICAgbGV0IGJ1aWxkTGFzdExpbmVzID0gW107XG5cbiAgICBjb25zdCBsb2dNc2cgPSBgT3V0cHV0IGZyb20gR3JhZGxlICR7dGhpcy5zaG93R3JhZGxlTG9nID8gJ3dpbGwnIDogJ3dpbGwgbm90J30gYmUgbG9nZ2VkYDtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93R3JhZGxlTG9nJyBkZXNpcmVkIGNhcGFiaWxpdHlgKTtcbiAgICBncmFkbGVidWlsZC5vbignc3RyZWFtLWxpbmUnLCAobGluZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2hvd0dyYWRsZUxvZykge1xuICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCdbU1RERVJSXScpKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgW0dyYWRsZV0gJHtsaW5lfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFtHcmFkbGVdICR7bGluZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnVpbGRMYXN0TGluZXMucHVzaChgJHtFT0x9JHtsaW5lfWApO1xuICAgICAgaWYgKGJ1aWxkTGFzdExpbmVzLmxlbmd0aCA+IEdSQURMRV9NQVhfRVJST1JfTE9HX0xJTkVTKSB7XG4gICAgICAgIGJ1aWxkTGFzdExpbmVzID0gYnVpbGRMYXN0TGluZXMuc2xpY2UoLUdSQURMRV9NQVhfRVJST1JfTE9HX0xJTkVTKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBncmFkbGVidWlsZC5zdGFydCgpO1xuICAgICAgYXdhaXQgZ3JhZGxlYnVpbGQuam9pbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gYnVpbGQgRXNwcmVzc28gc2VydmVyIC0gJHtlcnIubWVzc2FnZX1cXG5gICtcbiAgICAgICAgYEdyYWRsZSBlcnJvciBtZXNzYWdlOiR7RU9MfSR7YnVpbGRMYXN0TGluZXN9YDtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3cobXNnKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgU2VydmVyQnVpbGRlciwgVkVSU0lPTl9LRVlTLCBHUkFETEVfVVJMX1RFTVBMQVRFLCBidWlsZFNlcnZlclNpZ25pbmdDb25maWcgfTtcbmV4cG9ydCBkZWZhdWx0IFNlcnZlckJ1aWxkZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFD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
@@ -12,7 +12,7 @@ exports.updateDependencyLines = updateDependencyLines;
12
12
 
13
13
  require("source-map-support/register");
14
14
 
15
- var _support = require("@appium/support");
15
+ var _support = require("appium/support");
16
16
 
17
17
  var _lodash = _interopRequireDefault(require("lodash"));
18
18
 
@@ -82,4 +82,4 @@ function updateDependencyLines(originalContent, dependencyPlaceholder, dependenc
82
82
  }require('source-map-support').install();
83
83
 
84
84
 
85
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsicXVhbGlmeUFjdGl2aXR5TmFtZSIsImFjdGl2aXR5TmFtZSIsInBhY2thZ2VOYW1lIiwic29tZSIsIm5hbWUiLCJfIiwiaW5jbHVkZXMiLCJkb3RQb3MiLCJpbmRleE9mIiwiY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseSIsInNvdXJjZUJhc2VEaXIiLCJ0YXJnZXRCYXNlRGlyIiwiZnMiLCJ3YWxrRGlyIiwiaXRlbVBhdGgiLCJpc0RpcmVjdG9yeSIsInJlbGF0aXZlUGF0aCIsInBhdGgiLCJyZWxhdGl2ZSIsInRhcmdldFBhdGgiLCJyZXNvbHZlIiwiaXNJbkdyYWRsZUJ1aWxkRGlyIiwic2VwIiwibWtkaXJwIiwiY29weUZpbGUiLCJyZXF1aXJlT3B0aW9ucyIsIm9wdHMiLCJyZXF1aXJlZEtleXMiLCJtaXNzaW5nS2V5cyIsImRpZmZlcmVuY2UiLCJrZXlzIiwiaXNFbXB0eSIsIkVycm9yIiwidXBkYXRlRGVwZW5kZW5jeUxpbmVzIiwib3JpZ2luYWxDb250ZW50IiwiZGVwZW5kZW5jeVBsYWNlaG9sZGVyIiwiZGVwZW5kZW5jeUxpbmVzIiwiY29uZmlndXJhdGlvbkxpbmVzIiwic3BsaXQiLCJzZWFyY2hSZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsInBsYWNlaG9sZGVySW5kZXgiLCJmaW5kSW5kZXgiLCJsaW5lIiwidGVzdCIsInBsYWNlaG9sZGVyTGluZSIsImluZGVudExlbiIsImxlbmd0aCIsInRyaW1TdGFydCIsInNwbGljZSIsIm1hcCIsInJlcGVhdCIsImpvaW4iXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMsIG1rZGlycCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbi8qKlxuICogaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vZnJhbWV3b3Jrcy9iYXNlLysvbWFzdGVyL3Rvb2xzL2FhcHQvUmVzb3VyY2UuY3BwIzc1NVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpdml0eU5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYWNrYWdlTmFtZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHF1YWxpZmllZCBhY3Rpdml0eSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHF1YWxpZnlBY3Rpdml0eU5hbWUgKGFjdGl2aXR5TmFtZSwgcGFja2FnZU5hbWUpIHtcbiAgLy8gaWYgZWl0aGVyIGFjdGl2aXR5IG9yIHBhY2thZ2UgbmFtZSBpcyBub3Qgc2V0XG4gIC8vIG9yIGFueSBvZiB0aGVzZSBjb250YWluIHdpbGRjYXJkcyB0aGVuIHRoZXJlIGlzXG4gIC8vIG5vIHBvaW50IGluIHF1YWxpZnlpbmcgdGhlIGFjdGl2aXR5IG5hbWVcbiAgaWYgKFthY3Rpdml0eU5hbWUsIHBhY2thZ2VOYW1lXS5zb21lKChuYW1lKSA9PiAhbmFtZSB8fCBfLmluY2x1ZGVzKG5hbWUsICcqJykpKSB7XG4gICAgcmV0dXJuIGFjdGl2aXR5TmFtZTtcbiAgfVxuXG4gIGNvbnN0IGRvdFBvcyA9IGFjdGl2aXR5TmFtZS5pbmRleE9mKCcuJyk7XG4gIGlmIChkb3RQb3MgPiAwKSB7XG4gICAgcmV0dXJuIGFjdGl2aXR5TmFtZTtcbiAgfVxuICByZXR1cm4gYCR7cGFja2FnZU5hbWV9JHtkb3RQb3MgPT09IDAgPyAnJyA6ICcuJ30ke2FjdGl2aXR5TmFtZX1gO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGNvcHkgYWxsIGZpbGVzIGV4Y2VwdCBidWlsZCBkaXJlY3RvcmllcyBjb250ZW50c1xuICogQHBhcmFtIHNvdXJjZUJhc2VEaXIge3N0cmluZ30gZGlyZWN0b3J5IHRvIGNvcHkgZmlsZXMgZnJvbVxuICogQHBhcmFtIHRhcmdldEJhc2VEaXIge3N0cmluZ30gZGlyZWN0b3J5IHRvIGNvcHkgZmlsZXMgdG9cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseSAoc291cmNlQmFzZURpciwgdGFyZ2V0QmFzZURpcikge1xuICBhd2FpdCBmcy53YWxrRGlyKHNvdXJjZUJhc2VEaXIsIHRydWUsIGFzeW5jIChpdGVtUGF0aCwgaXNEaXJlY3RvcnkpID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHNvdXJjZUJhc2VEaXIsIGl0ZW1QYXRoKTtcbiAgICBjb25zdCB0YXJnZXRQYXRoID0gcGF0aC5yZXNvbHZlKHRhcmdldEJhc2VEaXIsIHJlbGF0aXZlUGF0aCk7XG5cbiAgICBjb25zdCBpc0luR3JhZGxlQnVpbGREaXIgPSBgJHtwYXRoLnNlcH0ke2l0ZW1QYXRofWAuaW5jbHVkZXMoYCR7cGF0aC5zZXB9YnVpbGQke3BhdGguc2VwfWApO1xuICAgIGlmIChpc0luR3JhZGxlQnVpbGREaXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaXNEaXJlY3RvcnkpIHtcbiAgICAgIGF3YWl0IG1rZGlycCh0YXJnZXRQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgZnMuY29weUZpbGUoaXRlbVBhdGgsIHRhcmdldFBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlT3B0aW9ucyAob3B0cywgcmVxdWlyZWRLZXlzID0gW10pIHtcbiAgY29uc3QgbWlzc2luZ0tleXMgPSBfLmRpZmZlcmVuY2UocmVxdWlyZWRLZXlzLCBfLmtleXMob3B0cykpO1xuICBpZiAoIV8uaXNFbXB0eShtaXNzaW5nS2V5cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgcmVxdWlyZWQ6ICR7bWlzc2luZ0tleXN9YCk7XG4gIH1cbiAgcmV0dXJuIG9wdHM7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURlcGVuZGVuY3lMaW5lcyAob3JpZ2luYWxDb250ZW50LCBkZXBlbmRlbmN5UGxhY2Vob2xkZXIsIGRlcGVuZGVuY3lMaW5lcykge1xuICBjb25zdCBjb25maWd1cmF0aW9uTGluZXMgPSBvcmlnaW5hbENvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBzZWFyY2hSZSA9IG5ldyBSZWdFeHAoYF5cXFxccyovL1xcXFxzKlxcXFxiJHtfLmVzY2FwZVJlZ0V4cChkZXBlbmRlbmN5UGxhY2Vob2xkZXIpfVxcXFxiYCwgJ20nKTtcbiAgY29uc3QgcGxhY2Vob2xkZXJJbmRleCA9IGNvbmZpZ3VyYXRpb25MaW5lcy5maW5kSW5kZXgoKGxpbmUpID0+IHNlYXJjaFJlLnRlc3QobGluZSkpO1xuICBpZiAocGxhY2Vob2xkZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gb3JpZ2luYWxDb250ZW50O1xuICB9XG5cbiAgY29uc3QgcGxhY2Vob2xkZXJMaW5lID0gY29uZmlndXJhdGlvbkxpbmVzW3BsYWNlaG9sZGVySW5kZXhdO1xuICBjb25zdCBpbmRlbnRMZW4gPSBwbGFjZWhvbGRlckxpbmUubGVuZ3RoIC0gXy50cmltU3RhcnQocGxhY2Vob2xkZXJMaW5lKS5sZW5ndGg7XG4gIGNvbmZpZ3VyYXRpb25MaW5lcy5zcGxpY2UocGxhY2Vob2xkZXJJbmRleCArIDEsIDAsIC4uLihkZXBlbmRlbmN5TGluZXNcbiAgICAubWFwKChsaW5lKSA9PiBgJHsnICcucmVwZWF0KGluZGVudExlbil9JHtsaW5lfWApKSk7XG4gIHJldHVybiBjb25maWd1cmF0aW9uTGluZXMuam9pbignXFxuJyk7XG59XG5cbmV4cG9ydCB7IHF1YWxpZnlBY3Rpdml0eU5hbWUsIGNvcHlHcmFkbGVQcm9qZWN0UmVjdXJzaXZlbHksIHJlcXVpcmVPcHRpb25zLCB1cGRhdGVEZXBlbmRlbmN5TGluZXMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFTQSxTQUFTQSxtQkFBVCxDQUE4QkMsWUFBOUIsRUFBNENDLFdB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
85
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsicXVhbGlmeUFjdGl2aXR5TmFtZSIsImFjdGl2aXR5TmFtZSIsInBhY2thZ2VOYW1lIiwic29tZSIsIm5hbWUiLCJfIiwiaW5jbHVkZXMiLCJkb3RQb3MiLCJpbmRleE9mIiwiY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseSIsInNvdXJjZUJhc2VEaXIiLCJ0YXJnZXRCYXNlRGlyIiwiZnMiLCJ3YWxrRGlyIiwiaXRlbVBhdGgiLCJpc0RpcmVjdG9yeSIsInJlbGF0aXZlUGF0aCIsInBhdGgiLCJyZWxhdGl2ZSIsInRhcmdldFBhdGgiLCJyZXNvbHZlIiwiaXNJbkdyYWRsZUJ1aWxkRGlyIiwic2VwIiwibWtkaXJwIiwiY29weUZpbGUiLCJyZXF1aXJlT3B0aW9ucyIsIm9wdHMiLCJyZXF1aXJlZEtleXMiLCJtaXNzaW5nS2V5cyIsImRpZmZlcmVuY2UiLCJrZXlzIiwiaXNFbXB0eSIsIkVycm9yIiwidXBkYXRlRGVwZW5kZW5jeUxpbmVzIiwib3JpZ2luYWxDb250ZW50IiwiZGVwZW5kZW5jeVBsYWNlaG9sZGVyIiwiZGVwZW5kZW5jeUxpbmVzIiwiY29uZmlndXJhdGlvbkxpbmVzIiwic3BsaXQiLCJzZWFyY2hSZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsInBsYWNlaG9sZGVySW5kZXgiLCJmaW5kSW5kZXgiLCJsaW5lIiwidGVzdCIsInBsYWNlaG9sZGVyTGluZSIsImluZGVudExlbiIsImxlbmd0aCIsInRyaW1TdGFydCIsInNwbGljZSIsIm1hcCIsInJlcGVhdCIsImpvaW4iXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMsIG1rZGlycCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBodHRwczovL2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbS9wbGF0Zm9ybS9mcmFtZXdvcmtzL2Jhc2UvKy9tYXN0ZXIvdG9vbHMvYWFwdC9SZXNvdXJjZS5jcHAjNzU1XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGl2aXR5TmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhY2thZ2VOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcXVhbGlmaWVkIGFjdGl2aXR5IG5hbWVcbiAqL1xuZnVuY3Rpb24gcXVhbGlmeUFjdGl2aXR5TmFtZSAoYWN0aXZpdHlOYW1lLCBwYWNrYWdlTmFtZSkge1xuICAvLyBpZiBlaXRoZXIgYWN0aXZpdHkgb3IgcGFja2FnZSBuYW1lIGlzIG5vdCBzZXRcbiAgLy8gb3IgYW55IG9mIHRoZXNlIGNvbnRhaW4gd2lsZGNhcmRzIHRoZW4gdGhlcmUgaXNcbiAgLy8gbm8gcG9pbnQgaW4gcXVhbGlmeWluZyB0aGUgYWN0aXZpdHkgbmFtZVxuICBpZiAoW2FjdGl2aXR5TmFtZSwgcGFja2FnZU5hbWVdLnNvbWUoKG5hbWUpID0+ICFuYW1lIHx8IF8uaW5jbHVkZXMobmFtZSwgJyonKSkpIHtcbiAgICByZXR1cm4gYWN0aXZpdHlOYW1lO1xuICB9XG5cbiAgY29uc3QgZG90UG9zID0gYWN0aXZpdHlOYW1lLmluZGV4T2YoJy4nKTtcbiAgaWYgKGRvdFBvcyA+IDApIHtcbiAgICByZXR1cm4gYWN0aXZpdHlOYW1lO1xuICB9XG4gIHJldHVybiBgJHtwYWNrYWdlTmFtZX0ke2RvdFBvcyA9PT0gMCA/ICcnIDogJy4nfSR7YWN0aXZpdHlOYW1lfWA7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgY29weSBhbGwgZmlsZXMgZXhjZXB0IGJ1aWxkIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gKiBAcGFyYW0gc291cmNlQmFzZURpciB7c3RyaW5nfSBkaXJlY3RvcnkgdG8gY29weSBmaWxlcyBmcm9tXG4gKiBAcGFyYW0gdGFyZ2V0QmFzZURpciB7c3RyaW5nfSBkaXJlY3RvcnkgdG8gY29weSBmaWxlcyB0b1xuICovXG5hc3luYyBmdW5jdGlvbiBjb3B5R3JhZGxlUHJvamVjdFJlY3Vyc2l2ZWx5IChzb3VyY2VCYXNlRGlyLCB0YXJnZXRCYXNlRGlyKSB7XG4gIGF3YWl0IGZzLndhbGtEaXIoc291cmNlQmFzZURpciwgdHJ1ZSwgYXN5bmMgKGl0ZW1QYXRoLCBpc0RpcmVjdG9yeSkgPT4ge1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoc291cmNlQmFzZURpciwgaXRlbVBhdGgpO1xuICAgIGNvbnN0IHRhcmdldFBhdGggPSBwYXRoLnJlc29sdmUodGFyZ2V0QmFzZURpciwgcmVsYXRpdmVQYXRoKTtcblxuICAgIGNvbnN0IGlzSW5HcmFkbGVCdWlsZERpciA9IGAke3BhdGguc2VwfSR7aXRlbVBhdGh9YC5pbmNsdWRlcyhgJHtwYXRoLnNlcH1idWlsZCR7cGF0aC5zZXB9YCk7XG4gICAgaWYgKGlzSW5HcmFkbGVCdWlsZERpcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc0RpcmVjdG9yeSkge1xuICAgICAgYXdhaXQgbWtkaXJwKHRhcmdldFBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBmcy5jb3B5RmlsZShpdGVtUGF0aCwgdGFyZ2V0UGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzLCByZXF1aXJlZEtleXMgPSBbXSkge1xuICBjb25zdCBtaXNzaW5nS2V5cyA9IF8uZGlmZmVyZW5jZShyZXF1aXJlZEtleXMsIF8ua2V5cyhvcHRzKSk7XG4gIGlmICghXy5pc0VtcHR5KG1pc3NpbmdLZXlzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSByZXF1aXJlZDogJHttaXNzaW5nS2V5c31gKTtcbiAgfVxuICByZXR1cm4gb3B0cztcbn1cblxuZnVuY3Rpb24gdXBkYXRlRGVwZW5kZW5jeUxpbmVzIChvcmlnaW5hbENvbnRlbnQsIGRlcGVuZGVuY3lQbGFjZWhvbGRlciwgZGVwZW5kZW5jeUxpbmVzKSB7XG4gIGNvbnN0IGNvbmZpZ3VyYXRpb25MaW5lcyA9IG9yaWdpbmFsQ29udGVudC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHNlYXJjaFJlID0gbmV3IFJlZ0V4cChgXlxcXFxzKi8vXFxcXHMqXFxcXGIke18uZXNjYXBlUmVnRXhwKGRlcGVuZGVuY3lQbGFjZWhvbGRlcil9XFxcXGJgLCAnbScpO1xuICBjb25zdCBwbGFjZWhvbGRlckluZGV4ID0gY29uZmlndXJhdGlvbkxpbmVzLmZpbmRJbmRleCgobGluZSkgPT4gc2VhcmNoUmUudGVzdChsaW5lKSk7XG4gIGlmIChwbGFjZWhvbGRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBvcmlnaW5hbENvbnRlbnQ7XG4gIH1cblxuICBjb25zdCBwbGFjZWhvbGRlckxpbmUgPSBjb25maWd1cmF0aW9uTGluZXNbcGxhY2Vob2xkZXJJbmRleF07XG4gIGNvbnN0IGluZGVudExlbiA9IHBsYWNlaG9sZGVyTGluZS5sZW5ndGggLSBfLnRyaW1TdGFydChwbGFjZWhvbGRlckxpbmUpLmxlbmd0aDtcbiAgY29uZmlndXJhdGlvbkxpbmVzLnNwbGljZShwbGFjZWhvbGRlckluZGV4ICsgMSwgMCwgLi4uKGRlcGVuZGVuY3lMaW5lc1xuICAgIC5tYXAoKGxpbmUpID0+IGAkeycgJy5yZXBlYXQoaW5kZW50TGVuKX0ke2xpbmV9YCkpKTtcbiAgcmV0dXJuIGNvbmZpZ3VyYXRpb25MaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuZXhwb3J0IHsgcXVhbGlmeUFjdGl2aXR5TmFtZSwgY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseSwgcmVxdWlyZU9wdGlvbnMsIHVwZGF0ZURlcGVuZGVuY3lMaW5lcyB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQVNBLFNBQVNBLG1CQUFULENBQThCQyxZQUE5QixFQUE0Q0MsV0FB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
package/index.js CHANGED
@@ -1,29 +1,5 @@
1
1
  // transpile:main
2
+ import { EspressoDriver } from './lib/driver';
2
3
 
3
- import { asyncify } from 'asyncbox';
4
- import * as driver from './lib/driver';
5
- import * as server from './lib/server';
6
-
7
-
8
- const { EspressoDriver } = driver;
9
- const { startServer } = server;
10
-
11
- const DEFAULT_HOST = 'localhost';
12
- const DEFAULT_PORT = 4884;
13
-
14
- async function main () {
15
- const getArgValue = (argName) => {
16
- const argIndex = process.argv.indexOf(argName);
17
- return argIndex > 0 ? process.argv[argIndex + 1] : null;
18
- };
19
- const port = parseInt(getArgValue('--port'), 10) || DEFAULT_PORT;
20
- const host = getArgValue('--host') || DEFAULT_HOST;
21
- return await startServer(port, host);
22
- }
23
-
24
- if (require.main === module) {
25
- asyncify(main);
26
- }
27
-
28
- export { EspressoDriver, startServer };
4
+ export { EspressoDriver };
29
5
  export default EspressoDriver;
@@ -1,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { errors } from '@appium/base-driver';
2
+ import { errors } from 'appium/driver';
3
3
 
4
4
  const extensions = {};
5
5
 
@@ -64,6 +64,10 @@ extensions.executeMobile = async function executeMobile (mobileCommand, opts = {
64
64
  unlock: 'mobileUnlock',
65
65
 
66
66
  refreshGpsCache: 'mobileRefreshGpsCache',
67
+
68
+ startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',
69
+ isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',
70
+ stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',
67
71
  };
68
72
 
69
73
  if (!_.has(mobileCommandsMapping, mobileCommand)) {
@@ -1,7 +1,7 @@
1
1
  import _ from 'lodash';
2
- import { util } from '@appium/support';
2
+ import { util } from 'appium/support';
3
3
  import validate from 'validate.js';
4
- import { errors } from '@appium/base-driver';
4
+ import { errors } from 'appium/driver';
5
5
  import { qualifyActivityName } from '../utils';
6
6
 
7
7
  const commands = {}, helpers = {}, extensions = {};
package/lib/driver.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import _ from 'lodash';
2
2
  import path from 'path';
3
- import { BaseDriver, errors, isErrorType, DeviceSettings} from '@appium/base-driver';
3
+ import B from 'bluebird';
4
+ import { BaseDriver, errors, isErrorType, DeviceSettings} from 'appium/driver';
4
5
  import { EspressoRunner, TEST_APK_PKG } from './espresso-runner';
5
- import { fs, tempDir, zip } from '@appium/support';
6
+ import { fs, tempDir, zip } from 'appium/support';
6
7
  import commands from './commands';
7
8
  import { DEFAULT_ADB_PORT } from 'appium-adb';
8
9
  import { androidHelpers, androidCommands, SETTINGS_HELPER_PKG_ID } from 'appium-android-driver';
@@ -561,16 +562,22 @@ class EspressoDriver extends BaseDriver {
561
562
  async deleteSession () {
562
563
  this.log.debug('Deleting espresso session');
563
564
 
564
- try {
565
+ const screenRecordingStopTasks = [async () => {
565
566
  if (!_.isEmpty(this._screenRecordingProperties)) {
566
567
  await this.stopRecordingScreen();
567
568
  }
568
- } catch (ign) {}
569
+ }, async () => {
570
+ if (await this.mobileIsMediaProjectionRecordingRunning()) {
571
+ await this.mobileStopMediaProjectionRecording();
572
+ }
573
+ }, async () => {
574
+ if (!_.isEmpty(this._screenStreamingProps)) {
575
+ await this.mobileStopScreenStreaming();
576
+ }
577
+ }];
569
578
 
570
579
  await androidHelpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);
571
580
 
572
- await this.mobileStopScreenStreaming();
573
-
574
581
  if (this.espresso) {
575
582
  if (this.jwpProxyActive) {
576
583
  await this.espresso.deleteSession();
@@ -579,8 +586,14 @@ class EspressoDriver extends BaseDriver {
579
586
  }
580
587
  this.jwpProxyActive = false;
581
588
 
582
- // TODO below logic is duplicated from uiautomator2
583
589
  if (this.adb) {
590
+ await B.all(screenRecordingStopTasks.map((task) => {
591
+ (async () => {
592
+ try {
593
+ await task();
594
+ } catch (ign) {}
595
+ })();
596
+ }));
584
597
  if (this.wasAnimationEnabled) {
585
598
  try {
586
599
  await this.adb.setAnimationState(true);
@@ -1,8 +1,8 @@
1
- import { JWProxy, errors } from '@appium/base-driver';
1
+ import { JWProxy, errors } from 'appium/driver';
2
2
  import { waitForCondition } from 'asyncbox';
3
3
  import { ServerBuilder, buildServerSigningConfig } from './server-builder';
4
4
  import path from 'path';
5
- import { fs, util, mkdirp, timing } from '@appium/support';
5
+ import { fs, util, mkdirp, timing } from 'appium/support';
6
6
  import { version } from '../../package.json'; // eslint-disable-line import/no-unresolved
7
7
  import B from 'bluebird';
8
8
  import _ from 'lodash';
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('Espresso');
@@ -1,5 +1,5 @@
1
1
  import { SubProcess } from 'teen_process';
2
- import { fs, system } from '@appium/support';
2
+ import { fs, system } from 'appium/support';
3
3
  import _ from 'lodash';
4
4
  import path from 'path';
5
5
  import { EOL } from 'os';
package/lib/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- import { fs, mkdirp } from '@appium/support';
1
+ import { fs, mkdirp } from 'appium/support';
2
2
  import _ from 'lodash';
3
3
  import path from 'path';
4
4