appium-xcuitest-driver 4.3.3 → 4.3.4

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.
Files changed (46) hide show
  1. package/build/lib/commands/app-management.js +10 -22
  2. package/build/lib/commands/certificate.js +7 -11
  3. package/build/lib/commands/context.js +43 -76
  4. package/build/lib/commands/cookies.js +4 -9
  5. package/build/lib/commands/element.js +2 -5
  6. package/build/lib/commands/execute.js +3 -6
  7. package/build/lib/commands/file-movement.js +9 -7
  8. package/build/lib/commands/find.js +7 -11
  9. package/build/lib/commands/general.js +14 -26
  10. package/build/lib/commands/gesture.js +10 -14
  11. package/build/lib/commands/location.js +6 -10
  12. package/build/lib/commands/navigation.js +5 -8
  13. package/build/lib/commands/pcap.js +16 -21
  14. package/build/lib/commands/performance.js +12 -16
  15. package/build/lib/commands/proxy-helper.js +6 -11
  16. package/build/lib/commands/record-audio.js +18 -26
  17. package/build/lib/commands/recordscreen.js +14 -19
  18. package/build/lib/commands/screenshots.js +7 -12
  19. package/build/lib/commands/timeouts.js +3 -8
  20. package/build/lib/commands/web.js +51 -64
  21. package/build/lib/commands/xctest.js +8 -9
  22. package/build/lib/driver.js +80 -126
  23. package/lib/commands/app-management.js +9 -10
  24. package/lib/commands/certificate.js +6 -7
  25. package/lib/commands/context.js +42 -43
  26. package/lib/commands/cookies.js +3 -4
  27. package/lib/commands/element.js +1 -2
  28. package/lib/commands/execute.js +2 -3
  29. package/lib/commands/file-movement.js +10 -9
  30. package/lib/commands/find.js +7 -8
  31. package/lib/commands/general.js +13 -14
  32. package/lib/commands/gesture.js +9 -9
  33. package/lib/commands/location.js +5 -6
  34. package/lib/commands/navigation.js +4 -5
  35. package/lib/commands/pcap.js +15 -13
  36. package/lib/commands/performance.js +11 -12
  37. package/lib/commands/proxy-helper.js +5 -6
  38. package/lib/commands/record-audio.js +17 -17
  39. package/lib/commands/recordscreen.js +13 -13
  40. package/lib/commands/screenshots.js +6 -7
  41. package/lib/commands/timeouts.js +2 -4
  42. package/lib/commands/web.js +45 -39
  43. package/lib/commands/xctest.js +8 -7
  44. package/lib/driver.js +79 -80
  45. package/npm-shrinkwrap.json +16 -11
  46. package/package.json +2 -2
@@ -13,8 +13,6 @@ var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
14
  var _support = require("@appium/support");
15
15
 
16
- var _logger = _interopRequireDefault(require("../logger"));
17
-
18
16
  var _baseDriver = require("@appium/base-driver");
19
17
 
20
18
  var _appiumIosDevice = require("appium-ios-device");
@@ -40,16 +38,14 @@ commands.mobileInstallApp = async function mobileInstallApp(opts = {}) {
40
38
  strategy
41
39
  } = requireOptions(opts, ['app']);
42
40
  const srcAppPath = await this.helpers.configureApp(app, '.app');
43
-
44
- _logger.default.info(`Installing '${srcAppPath}' to the ${this.isRealDevice() ? 'real device' : 'Simulator'} ` + `with UDID '${this.opts.device.udid}'`);
41
+ this.log.info(`Installing '${srcAppPath}' to the ${this.isRealDevice() ? 'real device' : 'Simulator'} ` + `with UDID '${this.opts.device.udid}'`);
45
42
 
46
43
  if (!(await _support.fs.exists(srcAppPath))) {
47
- _logger.default.errorAndThrow(`The application at '${srcAppPath}' does not exist or is not accessible`);
44
+ this.log.errorAndThrow(`The application at '${srcAppPath}' does not exist or is not accessible`);
48
45
  }
49
46
 
50
47
  await this.opts.device.installApp(srcAppPath, timeoutMs !== null && timeoutMs !== void 0 ? timeoutMs : this.opts.appPushTimeout, strategy !== null && strategy !== void 0 ? strategy : this.opts.appInstallStrategy);
51
-
52
- _logger.default.info(`Installation of '${srcAppPath}' succeeded`);
48
+ this.log.info(`Installation of '${srcAppPath}' succeeded`);
53
49
  };
54
50
 
55
51
  commands.mobileIsAppInstalled = async function mobileIsAppInstalled(opts = {}) {
@@ -57,9 +53,7 @@ commands.mobileIsAppInstalled = async function mobileIsAppInstalled(opts = {}) {
57
53
  bundleId
58
54
  } = requireOptions(opts, ['bundleId']);
59
55
  const installed = await this.opts.device.isAppInstalled(bundleId);
60
-
61
- _logger.default.info(`App '${bundleId}' is${installed ? '' : ' not'} installed`);
62
-
56
+ this.log.info(`App '${bundleId}' is${installed ? '' : ' not'} installed`);
63
57
  return installed;
64
58
  };
65
59
 
@@ -67,18 +61,14 @@ commands.mobileRemoveApp = async function mobileRemoveApp(opts = {}) {
67
61
  const {
68
62
  bundleId
69
63
  } = requireOptions(opts, ['bundleId']);
70
-
71
- _logger.default.info(`Uninstalling the application with bundle identifier '${bundleId}' ` + `from the ${this.isRealDevice() ? 'real device' : 'Simulator'} with UDID '${this.opts.device.udid}'`);
64
+ this.log.info(`Uninstalling the application with bundle identifier '${bundleId}' ` + `from the ${this.isRealDevice() ? 'real device' : 'Simulator'} with UDID '${this.opts.device.udid}'`);
72
65
 
73
66
  try {
74
67
  await this.opts.device.removeApp(bundleId);
75
-
76
- _logger.default.info(`Removal of '${bundleId}' succeeded`);
77
-
68
+ this.log.info(`Removal of '${bundleId}' succeeded`);
78
69
  return true;
79
70
  } catch (err) {
80
- _logger.default.warn(`Cannot remove '${bundleId}'. Original error: ${err.message}`);
81
-
71
+ this.log.warn(`Cannot remove '${bundleId}'. Original error: ${err.message}`);
82
72
  return false;
83
73
  }
84
74
  };
@@ -121,15 +111,13 @@ commands.mobileKillApp = async function mobileKillApp(opts = {}) {
121
111
  } = await new _pyIosDeviceClient.default(this.opts.device.udid).killApp(bundleId);
122
112
 
123
113
  if ((stdout + stderr).includes('did not start')) {
124
- _logger.default.info(`The bundle id '${bundleId}' did not start or it was already killed`);
125
-
114
+ this.log.info(`The bundle id '${bundleId}' did not start or it was already killed`);
126
115
  return false;
127
116
  }
128
117
 
129
118
  return true;
130
119
  } catch (err) {
131
- _logger.default.warn(`Failed to kill '${bundleId}'. Original error: ${err.stderr || err.message}`);
132
-
120
+ this.log.warn(`Failed to kill '${bundleId}'. Original error: ${err.stderr || err.message}`);
133
121
  return false;
134
122
  }
135
123
  };
@@ -191,4 +179,4 @@ var _default = commands;
191
179
  exports.default = _default;require('source-map-support').install();
192
180
 
193
181
 
194
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVLaWxsQXBwIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsInN0ZG91dCIsInN0ZGVyciIsIlB5aWRldmljZSIsImtpbGxBcHAiLCJpbmNsdWRlcyIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhcHBQYXRoIiwiaXNQbGFpbk9iamVjdCIsImFjdGl2YXRlQXBwIiwiT2JqZWN0IiwiYXNzaWduIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsIm1vYmlsZUxpc3RBcHBzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImFwcGxpY2F0aW9uVHlwZSIsInNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwibGlzdEFwcGxpY2F0aW9ucyIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjs7QUFFQSxTQUFTQyxjQUFULENBQXlCQyxJQUFJLEdBQUcsRUFBaEMsRUFBb0NDLE9BQU8sR0FBRyxFQUE5QyxFQUFrRDtBQUNoRCxPQUFLLE1BQU1DLEdBQVgsSUFBa0JELE9BQWxCLEVBQTJCO0FBQ3pCLFFBQUksQ0FBQ0UsZ0JBQUVDLFFBQUYsQ0FBV0osSUFBSSxDQUFDRSxHQUFELENBQWYsQ0FBRCxJQUEwQkMsZ0JBQUVFLE9BQUYsQ0FBVUwsSUFBSSxDQUFDRSxHQUFELENBQWQsQ0FBOUIsRUFBb0Q7QUFDbEQsWUFBTSxJQUFJSSxtQkFBT0Msb0JBQVgsQ0FDSCxJQUFHTCxHQUFJLHdDQUF1Q0YsSUFBSSxDQUFDRSxHQUFELENBQU0sb0JBRHJELENBQU47QUFHRDtBQUNGOztBQUNELFNBQU9GLElBQVA7QUFDRDs7QUFFREYsUUFBUSxDQUFDVSxnQkFBVCxHQUE0QixlQUFlQSxnQkFBZixDQUFpQ1IsSUFBSSxHQUFHLEVBQXhDLEVBQTRDO0FBQ3RFLFFBQU07QUFBRVMsSUFBQUEsR0FBRjtBQUFPQyxJQUFBQSxTQUFQO0FBQWtCQyxJQUFBQTtBQUFsQixNQUErQlosY0FBYyxDQUFDQyxJQUFELEVBQU8sQ0FBQyxLQUFELENBQVAsQ0FBbkQ7QUFDQSxRQUFNWSxVQUFVLEdBQUcsTUFBTSxLQUFLQyxPQUFMLENBQWFDLFlBQWIsQ0FBMEJMLEdBQTFCLEVBQStCLE1BQS9CLENBQXpCOztBQUNBTSxrQkFBSUMsSUFBSixDQUFVLGVBQWNKLFVBQVcsWUFBVyxLQUFLSyxZQUFMLEtBQXNCLGFBQXRCLEdBQXNDLFdBQVksR0FBdkYsR0FDTixjQUFhLEtBQUtqQixJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUFLLEdBRHRDOztBQUVBLE1BQUksRUFBQyxNQUFNQyxZQUFHQyxNQUFILENBQVVULFVBQVYsQ0FBUCxDQUFKLEVBQWtDO0FBQ2hDRyxvQkFBSU8sYUFBSixDQUFtQix1QkFBc0JWLFVBQVcsdUNBQXBEO0FBQ0Q7O0FBQ0QsUUFBTSxLQUFLWixJQUFMLENBQVVrQixNQUFWLENBQWlCSyxVQUFqQixDQUNKWCxVQURJLEVBQ1FGLFNBRFIsYUFDUUEsU0FEUixjQUNRQSxTQURSLEdBQ3FCLEtBQUtWLElBQUwsQ0FBVXdCLGNBRC9CLEVBQytDYixRQUQvQyxhQUMrQ0EsUUFEL0MsY0FDK0NBLFFBRC9DLEdBQzJELEtBQUtYLElBQUwsQ0FBVXlCLGtCQURyRSxDQUFOOztBQUdBVixrQkFBSUMsSUFBSixDQUFVLG9CQUFtQkosVUFBVyxhQUF4QztBQUNELENBWkQ7O0FBY0FkLFFBQVEsQ0FBQzRCLG9CQUFULEdBQWdDLGVBQWVBLG9CQUFmLENBQXFDMUIsSUFBSSxHQUFHLEVBQTVDLEVBQWdEO0FBQzlFLFFBQU07QUFBQzJCLElBQUFBO0FBQUQsTUFBYTVCLGNBQWMsQ0FBQ0MsSUFBRCxFQUFPLENBQUMsVUFBRCxDQUFQLENBQWpDO0FBQ0EsUUFBTTRCLFNBQVMsR0FBRyxNQUFNLEtBQUs1QixJQUFMLENBQVVrQixNQUFWLENBQWlCVyxjQUFqQixDQUFnQ0YsUUFBaEMsQ0FBeEI7O0FBQ0FaLGtCQUFJQyxJQUFKLENBQVUsUUFBT1csUUFBUyxPQUFNQyxTQUFTLEdBQUcsRUFBSCxHQUFRLE1BQU8sWUFBeEQ7O0FBQ0EsU0FBT0EsU0FBUDtBQUNELENBTEQ7O0FBT0E5QixRQUFRLENBQUNnQyxlQUFULEdBQTJCLGVBQWVBLGVBQWYsQ0FBZ0M5QixJQUFJLEdBQUcsRUFBdkMsRUFBMkM7QUFDcEUsUUFBTTtBQUFDMkIsSUFBQUE7QUFBRCxNQUFhNUIsY0FBYyxDQUFDQyxJQUFELEVBQU8sQ0FBQyxVQUFELENBQVAsQ0FBakM7O0FBQ0FlLGtCQUFJQyxJQUFKLENBQVUsd0RBQXVEVyxRQUFTLElBQWpFLEdBQ04sWUFBVyxLQUFLVixZQUFMLEtBQXNCLGFBQXRCLEdBQXNDLFdBQVksZUFBYyxLQUFLakIsSUFBTCxDQUFVa0IsTUFBVixDQUFpQkMsSUFBSyxHQURwRzs7QUFFQSxNQUFJO0FBQ0YsVUFBTSxLQUFLbkIsSUFBTCxDQUFVa0IsTUFBVixDQUFpQmEsU0FBakIsQ0FBMkJKLFFBQTNCLENBQU47O0FBQ0FaLG9CQUFJQyxJQUFKLENBQVUsZUFBY1csUUFBUyxhQUFqQzs7QUFDQSxXQUFPLElBQVA7QUFDRCxHQUpELENBSUUsT0FBT0ssR0FBUCxFQUFZO0FBQ1pqQixvQkFBSWtCLElBQUosQ0FBVSxrQkFBaUJOLFFBQVMsc0JBQXFCSyxHQUFHLENBQUNFLE9BQVEsRUFBckU7O0FBQ0EsV0FBTyxLQUFQO0FBQ0Q7QUFDRixDQVpEOztBQWNBcEMsUUFBUSxDQUFDcUMsZUFBVCxHQUEyQixlQUFlQSxlQUFmLENBQWdDbkMsSUFBSSxHQUFHLEVBQXZDLEVBQTJDO0FBQ3BFLFFBQU1vQyxhQUFhLEdBQUdyQyxjQUFjLENBQUNDLElBQUQsRUFBTyxDQUFDLFVBQUQsQ0FBUCxDQUFwQzs7QUFDQSxNQUFJQSxJQUFJLENBQUNxQyxTQUFULEVBQW9CO0FBQ2xCRCxJQUFBQSxhQUFhLENBQUNDLFNBQWQsR0FBMEJsQyxnQkFBRW1DLE9BQUYsQ0FBVXRDLElBQUksQ0FBQ3FDLFNBQWYsSUFBNEJyQyxJQUFJLENBQUNxQyxTQUFqQyxHQUE2QyxDQUFDckMsSUFBSSxDQUFDcUMsU0FBTixDQUF2RTtBQUNEOztBQUNELE1BQUlyQyxJQUFJLENBQUN1QyxXQUFULEVBQXNCO0FBQ3BCSCxJQUFBQSxhQUFhLENBQUNHLFdBQWQsR0FBNEJ2QyxJQUFJLENBQUN1QyxXQUFqQztBQUNEOztBQUNELFNBQU8sTUFBTSxLQUFLQyxZQUFMLENBQWtCLGtCQUFsQixFQUFzQyxNQUF0QyxFQUE4Q0osYUFBOUMsQ0FBYjtBQUNELENBVEQ7O0FBV0F0QyxRQUFRLENBQUMyQyxrQkFBVCxHQUE4QixlQUFlQSxrQkFBZixDQUFtQ3pDLElBQUksR0FBRyxFQUExQyxFQUE4QztBQUMxRSxTQUFPLE1BQU0sS0FBS3dDLFlBQUwsQ0FBa0IscUJBQWxCLEVBQXlDLE1BQXpDLEVBQWlEekMsY0FBYyxDQUFDQyxJQUFELEVBQU8sQ0FBQyxVQUFELENBQVAsQ0FBL0QsQ0FBYjtBQUNELENBRkQ7O0FBSUFGLFFBQVEsQ0FBQzRDLGlCQUFULEdBQTZCLGVBQWVBLGlCQUFmLENBQWtDMUMsSUFBSSxHQUFHLEVBQXpDLEVBQTZDO0FBQ3hFLFNBQU8sTUFBTSxLQUFLd0MsWUFBTCxDQUFrQixvQkFBbEIsRUFBd0MsTUFBeEMsRUFBZ0R6QyxjQUFjLENBQUNDLElBQUQsRUFBTyxDQUFDLFVBQUQsQ0FBUCxDQUE5RCxDQUFiO0FBQ0QsQ0FGRDs7QUFXQUYsUUFBUSxDQUFDNkMsYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCM0MsSUFBSSxHQUFHLEVBQXJDLEVBQXlDO0FBQ2hFLE1BQUksQ0FBQyxLQUFLaUIsWUFBTCxFQUFMLEVBQTBCO0FBQ3hCLFVBQU0sSUFBSVgsbUJBQU9zQyx5QkFBWCxDQUFxQywyQkFBckMsQ0FBTjtBQUNEOztBQUVELFFBQU07QUFBQ2pCLElBQUFBO0FBQUQsTUFBYTVCLGNBQWMsQ0FBQ0MsSUFBRCxFQUFPLENBQUMsVUFBRCxDQUFQLENBQWpDOztBQUNBLE1BQUk7QUFFRixVQUFNO0FBQUM2QyxNQUFBQSxNQUFEO0FBQVNDLE1BQUFBO0FBQVQsUUFBbUIsTUFBTSxJQUFJQywwQkFBSixDQUFjLEtBQUsvQyxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUEvQixFQUFxQzZCLE9BQXJDLENBQTZDckIsUUFBN0MsQ0FBL0I7O0FBQ0EsUUFBSSxDQUFDa0IsTUFBTSxHQUFHQyxNQUFWLEVBQWtCRyxRQUFsQixDQUEyQixlQUEzQixDQUFKLEVBQWlEO0FBQy9DbEMsc0JBQUlDLElBQUosQ0FBVSxrQkFBaUJXLFFBQVMsMENBQXBDOztBQUNBLGFBQU8sS0FBUDtBQUNEOztBQUNELFdBQU8sSUFBUDtBQUNELEdBUkQsQ0FRRSxPQUFPSyxHQUFQLEVBQVk7QUFDWmpCLG9CQUFJa0IsSUFBSixDQUFVLG1CQUFrQk4sUUFBUyxzQkFBcUJLLEdBQUcsQ0FBQ2MsTUFBSixJQUFjZCxHQUFHLENBQUNFLE9BQVEsRUFBcEY7O0FBQ0EsV0FBTyxLQUFQO0FBQ0Q7QUFDRixDQWxCRDs7QUE0QkFwQyxRQUFRLENBQUNvRCxtQkFBVCxHQUErQixlQUFlQSxtQkFBZixDQUFvQ2xELElBQUksR0FBRyxFQUEzQyxFQUErQztBQUM1RSxTQUFPLE1BQU0sS0FBS3dDLFlBQUwsQ0FBa0IsaUJBQWxCLEVBQXFDLE1BQXJDLEVBQTZDekMsY0FBYyxDQUFDQyxJQUFELEVBQU8sQ0FBQyxVQUFELENBQVAsQ0FBM0QsQ0FBYjtBQUNELENBRkQ7O0FBSUFGLFFBQVEsQ0FBQ3lCLFVBQVQsR0FBc0IsZUFBZUEsVUFBZixDQUEyQjRCLE9BQTNCLEVBQW9DbkQsSUFBSSxHQUFHLEVBQTNDLEVBQStDO0FBQ25FLFFBQU0sS0FBS1EsZ0JBQUwsQ0FBc0IsRUFDMUIsSUFBSUwsZ0JBQUVpRCxhQUFGLENBQWdCcEQsSUFBaEIsSUFBd0JBLElBQXhCLEdBQStCLEVBQW5DLENBRDBCO0FBRTFCUyxJQUFBQSxHQUFHLEVBQUUwQztBQUZxQixHQUF0QixDQUFOO0FBSUQsQ0FMRDs7QUFPQXJELFFBQVEsQ0FBQ3VELFdBQVQsR0FBdUIsZUFBZUEsV0FBZixDQUE0QjFCLFFBQTVCLEVBQXNDM0IsSUFBSSxHQUFHLEVBQTdDLEVBQWlEO0FBQ3RFLFNBQU8sTUFBTSxLQUFLbUMsZUFBTCxDQUFxQm1CLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0J2RCxJQUFsQixFQUF3QjtBQUFDMkIsSUFBQUE7QUFBRCxHQUF4QixDQUFyQixDQUFiO0FBQ0QsQ0FGRDs7QUFJQTdCLFFBQVEsQ0FBQytCLGNBQVQsR0FBMEIsZUFBZUEsY0FBZixDQUErQkYsUUFBL0IsRUFBeUM7QUFDakUsU0FBTyxNQUFNLEtBQUtELG9CQUFMLENBQTBCO0FBQUNDLElBQUFBO0FBQUQsR0FBMUIsQ0FBYjtBQUNELENBRkQ7O0FBSUE3QixRQUFRLENBQUMwRCxZQUFULEdBQXdCLGVBQWVBLFlBQWYsQ0FBNkI3QixRQUE3QixFQUF1QztBQUM3RCxTQUFPLE1BQU0sS0FBS2Msa0JBQUwsQ0FBd0I7QUFBQ2QsSUFBQUE7QUFBRCxHQUF4QixDQUFiO0FBQ0QsQ0FGRDs7QUFJQTdCLFFBQVEsQ0FBQzJELGFBQVQsR0FBeUIsZUFBZUEsYUFBZixDQUE4QjlCLFFBQTlCLEVBQXdDO0FBQy9ELFNBQU8sTUFBTSxLQUFLdUIsbUJBQUwsQ0FBeUI7QUFBQ3ZCLElBQUFBO0FBQUQsR0FBekIsQ0FBYjtBQUNELENBRkQ7O0FBZ0JBN0IsUUFBUSxDQUFDNEQsY0FBVCxHQUEwQixlQUFlQSxjQUFmLENBQStCMUQsSUFBSSxHQUFHLEVBQXRDLEVBQTBDO0FBQ2xFLE1BQUksQ0FBQyxLQUFLaUIsWUFBTCxFQUFMLEVBQTBCO0FBQ3hCLFVBQU0sSUFBSVgsbUJBQU9xRCxtQkFBWCxDQUFnQyxrREFBaEMsQ0FBTjtBQUNEOztBQUVELFFBQU07QUFDSkMsSUFBQUEsZUFBZSxHQUFHO0FBRGQsTUFFRjVELElBRko7QUFHQSxRQUFNNkQsT0FBTyxHQUFHLE1BQU1DLDBCQUFTQyw2QkFBVCxDQUF1QyxLQUFLL0QsSUFBTCxDQUFVa0IsTUFBVixDQUFpQkMsSUFBeEQsQ0FBdEI7O0FBQ0EsTUFBSTtBQUNGLFdBQU8sTUFBTTBDLE9BQU8sQ0FBQ0csZ0JBQVIsQ0FBeUI7QUFBQ0osTUFBQUE7QUFBRCxLQUF6QixDQUFiO0FBQ0QsR0FGRCxTQUVVO0FBQ1JDLElBQUFBLE9BQU8sQ0FBQ0ksS0FBUjtBQUNEO0FBQ0YsQ0FkRDs7ZUFnQmVuRSxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5pbXBvcnQgUHlpZGV2aWNlIGZyb20gJy4uL3B5LWlvcy1kZXZpY2UtY2xpZW50JztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuZnVuY3Rpb24gcmVxdWlyZU9wdGlvbnMgKG9wdHMgPSB7fSwgcmVxS2V5cyA9IFtdKSB7XG4gIGZvciAoY29uc3Qga2V5IG9mIHJlcUtleXMpIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcob3B0c1trZXldKSB8fCBfLmlzRW1wdHkob3B0c1trZXldKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgYCcke2tleX0nIGlzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgc3RyaW5nLiAnJHtvcHRzW2tleV19JyBpcyBnaXZlbiBpbnN0ZWFkYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9wdHM7XG59XG5cbmNvbW1hbmRzLm1vYmlsZUluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJbnN0YWxsQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHAsIHRpbWVvdXRNcywgc3RyYXRlZ3kgfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYXBwJ10pO1xuICBjb25zdCBzcmNBcHBQYXRoID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsICcuYXBwJyk7XG4gIGxvZy5pbmZvKGBJbnN0YWxsaW5nICcke3NyY0FwcFBhdGh9JyB0byB0aGUgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdTaW11bGF0b3InfSBgICtcbiAgICBgd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHNyY0FwcFBhdGgpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtzcmNBcHBQYXRofScgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmluc3RhbGxBcHAoXG4gICAgc3JjQXBwUGF0aCwgdGltZW91dE1zID8/IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCwgc3RyYXRlZ3kgPz8gdGhpcy5vcHRzLmFwcEluc3RhbGxTdHJhdGVneVxuICApO1xuICBsb2cuaW5mbyhgSW5zdGFsbGF0aW9uIG9mICcke3NyY0FwcFBhdGh9JyBzdWNjZWVkZWRgKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZUlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSXNBcHBJbnN0YWxsZWQgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YnVuZGxlSWR9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgY29uc3QgaW5zdGFsbGVkID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pc0FwcEluc3RhbGxlZChidW5kbGVJZCk7XG4gIGxvZy5pbmZvKGBBcHAgJyR7YnVuZGxlSWR9JyBpcyR7aW5zdGFsbGVkID8gJycgOiAnIG5vdCd9IGluc3RhbGxlZGApO1xuICByZXR1cm4gaW5zdGFsbGVkO1xufTtcblxuY29tbWFuZHMubW9iaWxlUmVtb3ZlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUmVtb3ZlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGxvZy5pbmZvKGBVbmluc3RhbGxpbmcgdGhlIGFwcGxpY2F0aW9uIHdpdGggYnVuZGxlIGlkZW50aWZpZXIgJyR7YnVuZGxlSWR9JyBgICtcbiAgICBgZnJvbSB0aGUgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdTaW11bGF0b3InfSB3aXRoIFVESUQgJyR7dGhpcy5vcHRzLmRldmljZS51ZGlkfSdgKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJlbW92ZUFwcChidW5kbGVJZCk7XG4gICAgbG9nLmluZm8oYFJlbW92YWwgb2YgJyR7YnVuZGxlSWR9JyBzdWNjZWVkZWRgKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCByZW1vdmUgJyR7YnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb21tYW5kcy5tb2JpbGVMYXVuY2hBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMYXVuY2hBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBsYXVuY2hPcHRpb25zID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgaWYgKG9wdHMuYXJndW1lbnRzKSB7XG4gICAgbGF1bmNoT3B0aW9ucy5hcmd1bWVudHMgPSBfLmlzQXJyYXkob3B0cy5hcmd1bWVudHMpID8gb3B0cy5hcmd1bWVudHMgOiBbb3B0cy5hcmd1bWVudHNdO1xuICB9XG4gIGlmIChvcHRzLmVudmlyb25tZW50KSB7XG4gICAgbGF1bmNoT3B0aW9ucy5lbnZpcm9ubWVudCA9IG9wdHMuZW52aXJvbm1lbnQ7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvbGF1bmNoJywgJ1BPU1QnLCBsYXVuY2hPcHRpb25zKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRlcm1pbmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL3Rlcm1pbmF0ZScsICdQT1NUJywgcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVBY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUFjdGl2YXRlQXBwIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvYWN0aXZhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuLyoqXG4gKiBLaWxsIHRoZSBnaXZlbiBidW5kbGUgaWQgcHJvY2VzcyB2aWEgaW5zdHJ1bWVudHMgc2VydmljZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWVDaGVuLUMvcHktaW9zLWRldmljZS9ibG9iLzUxZjQ2ODNjNWMzYzM4NWEwMTU4NThhZGEwN2E1ZjFjNjJkM2NmNTcvaW9zX2RldmljZS9jbGkvYmFzZS5weSNMMjIwXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggbXVzdCBjb250YWluIGBidW5kbGVJZGAgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGJ1bmRsZSBpZCBwcm9jZXNzIHdhcyBraWxsZWQuIE90aGVyd2lzZSBmYWxzZS5cbiAqL1xuY29tbWFuZHMubW9iaWxlS2lsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUtpbGxBcHAgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ0EgcmVhbCBkZXZpY2UgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICB0cnkge1xuICAgIC8vIFRPRE86IGV2ZW50dWFsbHkgd2UnZCBsaWtlIHRvIGNhbGwgdGhlIGluc3RydW1lbnRzIGtpbGwgbWV0aG9kIHZpYSBhcHBpdW0taW9zLWRldmljZS5cbiAgICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgbmV3IFB5aWRldmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpLmtpbGxBcHAoYnVuZGxlSWQpO1xuICAgIGlmICgoc3Rkb3V0ICsgc3RkZXJyKS5pbmNsdWRlcygnZGlkIG5vdCBzdGFydCcpKSB7XG4gICAgICBsb2cuaW5mbyhgVGhlIGJ1bmRsZSBpZCAnJHtidW5kbGVJZH0nIGRpZCBub3Qgc3RhcnQgb3IgaXQgd2FzIGFscmVhZHkga2lsbGVkYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgRmFpbGVkIHRvIGtpbGwgJyR7YnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVyciB8fCBlcnIubWVzc2FnZX1gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWN0dWFsIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIHRvIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgsIG9wdHMgPSB7fSkge1xuICBhd2FpdCB0aGlzLm1vYmlsZUluc3RhbGxBcHAoe1xuICAgIC4uLihfLmlzUGxhaW5PYmplY3Qob3B0cykgPyBvcHRzIDoge30pLFxuICAgIGFwcDogYXBwUGF0aCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChidW5kbGVJZCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUxhdW5jaEFwcChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7YnVuZGxlSWR9KSk7XG59O1xuXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVJc0FwcEluc3RhbGxlZCh7YnVuZGxlSWR9KTtcbn07XG5cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlVGVybWluYXRlQXBwKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUoe2J1bmRsZUlkfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExpc3RBcHBzT3B0aW9uc1xuICogQHByb3BlcnR5IHsnU3lzdGVtJ3wnVXNlcid9IGFwcGxpY2F0aW9uVHlwZSBbVXNlcl0gVGhlIHR5cGUgb2YgYXBwbGljYXRpb25zIHRvIGxpc3RcbiAqL1xuXG4vKipcbiAqIExpc3QgYXBwbGljYXRpb25zIGluc3RhbGxlZCBvbiB0aGUgcmVhbCBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7TGlzdEFwcHNPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gQSBsaXN0IG9mIGFwcHMsIHdoZXJlIGVhY2ggaXRlbSBpcyBhIG1hcCB3aGVyZSBrZXlzIGFyZVxuICogYnVuZGxlIGlkZW50aWZpZXJzIGFuZCB2YWx1ZXMgYXJlIG1hcHMgb2YgcGxhdGZvcm0tc3BlY2lmaWMgYXBwIHByb3BlcnRpZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RBcHBzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdEFwcHMgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoYFRoaXMgZXh0ZW5zaW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHJlYWwgZGV2aWNlc2ApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGFwcGxpY2F0aW9uVHlwZSA9ICdVc2VyJyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBzZXJ2aWNlLmxpc3RBcHBsaWNhdGlvbnMoe2FwcGxpY2F0aW9uVHlwZX0pO1xuICB9IGZpbmFsbHkge1xuICAgIHNlcnZpY2UuY2xvc2UoKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
182
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVLaWxsQXBwIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsInN0ZG91dCIsInN0ZGVyciIsIlB5aWRldmljZSIsImtpbGxBcHAiLCJpbmNsdWRlcyIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhcHBQYXRoIiwiaXNQbGFpbk9iamVjdCIsImFjdGl2YXRlQXBwIiwiT2JqZWN0IiwiYXNzaWduIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsIm1vYmlsZUxpc3RBcHBzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImFwcGxpY2F0aW9uVHlwZSIsInNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwibGlzdEFwcGxpY2F0aW9ucyIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjs7QUFFQSxTQUFTQyxjQUFULENBQXlCQyxJQUFJLEdBQUcsRUFBaEMsRUFBb0NDLE9BQU8sR0FBRyxFQUE5QyxFQUFrRDtBQUNoRCxPQUFLLE1BQU1DLEdBQVgsSUFBa0JELE9BQWxCLEVBQTJCO0FBQ3pCLFFBQUksQ0FBQ0UsZ0JBQUVDLFFBQUYsQ0FBV0osSUFBSSxDQUFDRSxHQUFELENBQWYsQ0FBRCxJQUEwQkMsZ0JBQUVFLE9BQUYsQ0FBVUwsSUFBSSxDQUFDRSxHQUFELENBQWQsQ0FBOUIsRUFBb0Q7QUFDbEQsWUFBTSxJQUFJSSxtQkFBT0Msb0JBQVgsQ0FDSCxJQUFHTCxHQUFJLHdDQUF1Q0YsSUFBSSxDQUFDRSxHQUFELENBQU0sb0JBRHJELENBQU47QUFHRDtBQUNGOztBQUNELFNBQU9GLElBQVA7QUFDRDs7QUFFREYsUUFBUSxDQUFDVSxnQkFBVCxHQUE0QixlQUFlQSxnQkFBZixDQUFpQ1IsSUFBSSxHQUFHLEVBQXhDLEVBQTRDO0FBQ3RFLFFBQU07QUFBRVMsSUFBQUEsR0FBRjtBQUFPQyxJQUFBQSxTQUFQO0FBQWtCQyxJQUFBQTtBQUFsQixNQUErQlosY0FBYyxDQUFDQyxJQUFELEVBQU8sQ0FBQyxLQUFELENBQVAsQ0FBbkQ7QUFDQSxRQUFNWSxVQUFVLEdBQUcsTUFBTSxLQUFLQyxPQUFMLENBQWFDLFlBQWIsQ0FBMEJMLEdBQTFCLEVBQStCLE1BQS9CLENBQXpCO0FBQ0EsT0FBS00sR0FBTCxDQUFTQyxJQUFULENBQWUsZUFBY0osVUFBVyxZQUFXLEtBQUtLLFlBQUwsS0FBc0IsYUFBdEIsR0FBc0MsV0FBWSxHQUF2RixHQUNYLGNBQWEsS0FBS2pCLElBQUwsQ0FBVWtCLE1BQVYsQ0FBaUJDLElBQUssR0FEdEM7O0FBRUEsTUFBSSxFQUFDLE1BQU1DLFlBQUdDLE1BQUgsQ0FBVVQsVUFBVixDQUFQLENBQUosRUFBa0M7QUFDaEMsU0FBS0csR0FBTCxDQUFTTyxhQUFULENBQXdCLHVCQUFzQlYsVUFBVyx1Q0FBekQ7QUFDRDs7QUFDRCxRQUFNLEtBQUtaLElBQUwsQ0FBVWtCLE1BQVYsQ0FBaUJLLFVBQWpCLENBQ0pYLFVBREksRUFDUUYsU0FEUixhQUNRQSxTQURSLGNBQ1FBLFNBRFIsR0FDcUIsS0FBS1YsSUFBTCxDQUFVd0IsY0FEL0IsRUFDK0NiLFFBRC9DLGFBQytDQSxRQUQvQyxjQUMrQ0EsUUFEL0MsR0FDMkQsS0FBS1gsSUFBTCxDQUFVeUIsa0JBRHJFLENBQU47QUFHQSxPQUFLVixHQUFMLENBQVNDLElBQVQsQ0FBZSxvQkFBbUJKLFVBQVcsYUFBN0M7QUFDRCxDQVpEOztBQWNBZCxRQUFRLENBQUM0QixvQkFBVCxHQUFnQyxlQUFlQSxvQkFBZixDQUFxQzFCLElBQUksR0FBRyxFQUE1QyxFQUFnRDtBQUM5RSxRQUFNO0FBQUMyQixJQUFBQTtBQUFELE1BQWE1QixjQUFjLENBQUNDLElBQUQsRUFBTyxDQUFDLFVBQUQsQ0FBUCxDQUFqQztBQUNBLFFBQU00QixTQUFTLEdBQUcsTUFBTSxLQUFLNUIsSUFBTCxDQUFVa0IsTUFBVixDQUFpQlcsY0FBakIsQ0FBZ0NGLFFBQWhDLENBQXhCO0FBQ0EsT0FBS1osR0FBTCxDQUFTQyxJQUFULENBQWUsUUFBT1csUUFBUyxPQUFNQyxTQUFTLEdBQUcsRUFBSCxHQUFRLE1BQU8sWUFBN0Q7QUFDQSxTQUFPQSxTQUFQO0FBQ0QsQ0FMRDs7QUFPQTlCLFFBQVEsQ0FBQ2dDLGVBQVQsR0FBMkIsZUFBZUEsZUFBZixDQUFnQzlCLElBQUksR0FBRyxFQUF2QyxFQUEyQztBQUNwRSxRQUFNO0FBQUMyQixJQUFBQTtBQUFELE1BQWE1QixjQUFjLENBQUNDLElBQUQsRUFBTyxDQUFDLFVBQUQsQ0FBUCxDQUFqQztBQUNBLE9BQUtlLEdBQUwsQ0FBU0MsSUFBVCxDQUFlLHdEQUF1RFcsUUFBUyxJQUFqRSxHQUNYLFlBQVcsS0FBS1YsWUFBTCxLQUFzQixhQUF0QixHQUFzQyxXQUFZLGVBQWMsS0FBS2pCLElBQUwsQ0FBVWtCLE1BQVYsQ0FBaUJDLElBQUssR0FEcEc7O0FBRUEsTUFBSTtBQUNGLFVBQU0sS0FBS25CLElBQUwsQ0FBVWtCLE1BQVYsQ0FBaUJhLFNBQWpCLENBQTJCSixRQUEzQixDQUFOO0FBQ0EsU0FBS1osR0FBTCxDQUFTQyxJQUFULENBQWUsZUFBY1csUUFBUyxhQUF0QztBQUNBLFdBQU8sSUFBUDtBQUNELEdBSkQsQ0FJRSxPQUFPSyxHQUFQLEVBQVk7QUFDWixTQUFLakIsR0FBTCxDQUFTa0IsSUFBVCxDQUFlLGtCQUFpQk4sUUFBUyxzQkFBcUJLLEdBQUcsQ0FBQ0UsT0FBUSxFQUExRTtBQUNBLFdBQU8sS0FBUDtBQUNEO0FBQ0YsQ0FaRDs7QUFjQXBDLFFBQVEsQ0FBQ3FDLGVBQVQsR0FBMkIsZUFBZUEsZUFBZixDQUFnQ25DLElBQUksR0FBRyxFQUF2QyxFQUEyQztBQUNwRSxRQUFNb0MsYUFBYSxHQUFHckMsY0FBYyxDQUFDQyxJQUFELEVBQU8sQ0FBQyxVQUFELENBQVAsQ0FBcEM7O0FBQ0EsTUFBSUEsSUFBSSxDQUFDcUMsU0FBVCxFQUFvQjtBQUNsQkQsSUFBQUEsYUFBYSxDQUFDQyxTQUFkLEdBQTBCbEMsZ0JBQUVtQyxPQUFGLENBQVV0QyxJQUFJLENBQUNxQyxTQUFmLElBQTRCckMsSUFBSSxDQUFDcUMsU0FBakMsR0FBNkMsQ0FBQ3JDLElBQUksQ0FBQ3FDLFNBQU4sQ0FBdkU7QUFDRDs7QUFDRCxNQUFJckMsSUFBSSxDQUFDdUMsV0FBVCxFQUFzQjtBQUNwQkgsSUFBQUEsYUFBYSxDQUFDRyxXQUFkLEdBQTRCdkMsSUFBSSxDQUFDdUMsV0FBakM7QUFDRDs7QUFDRCxTQUFPLE1BQU0sS0FBS0MsWUFBTCxDQUFrQixrQkFBbEIsRUFBc0MsTUFBdEMsRUFBOENKLGFBQTlDLENBQWI7QUFDRCxDQVREOztBQVdBdEMsUUFBUSxDQUFDMkMsa0JBQVQsR0FBOEIsZUFBZUEsa0JBQWYsQ0FBbUN6QyxJQUFJLEdBQUcsRUFBMUMsRUFBOEM7QUFDMUUsU0FBTyxNQUFNLEtBQUt3QyxZQUFMLENBQWtCLHFCQUFsQixFQUF5QyxNQUF6QyxFQUFpRHpDLGNBQWMsQ0FBQ0MsSUFBRCxFQUFPLENBQUMsVUFBRCxDQUFQLENBQS9ELENBQWI7QUFDRCxDQUZEOztBQUlBRixRQUFRLENBQUM0QyxpQkFBVCxHQUE2QixlQUFlQSxpQkFBZixDQUFrQzFDLElBQUksR0FBRyxFQUF6QyxFQUE2QztBQUN4RSxTQUFPLE1BQU0sS0FBS3dDLFlBQUwsQ0FBa0Isb0JBQWxCLEVBQXdDLE1BQXhDLEVBQWdEekMsY0FBYyxDQUFDQyxJQUFELEVBQU8sQ0FBQyxVQUFELENBQVAsQ0FBOUQsQ0FBYjtBQUNELENBRkQ7O0FBV0FGLFFBQVEsQ0FBQzZDLGFBQVQsR0FBeUIsZUFBZUEsYUFBZixDQUE4QjNDLElBQUksR0FBRyxFQUFyQyxFQUF5QztBQUNoRSxNQUFJLENBQUMsS0FBS2lCLFlBQUwsRUFBTCxFQUEwQjtBQUN4QixVQUFNLElBQUlYLG1CQUFPc0MseUJBQVgsQ0FBcUMsMkJBQXJDLENBQU47QUFDRDs7QUFFRCxRQUFNO0FBQUNqQixJQUFBQTtBQUFELE1BQWE1QixjQUFjLENBQUNDLElBQUQsRUFBTyxDQUFDLFVBQUQsQ0FBUCxDQUFqQzs7QUFDQSxNQUFJO0FBRUYsVUFBTTtBQUFDNkMsTUFBQUEsTUFBRDtBQUFTQyxNQUFBQTtBQUFULFFBQW1CLE1BQU0sSUFBSUMsMEJBQUosQ0FBYyxLQUFLL0MsSUFBTCxDQUFVa0IsTUFBVixDQUFpQkMsSUFBL0IsRUFBcUM2QixPQUFyQyxDQUE2Q3JCLFFBQTdDLENBQS9COztBQUNBLFFBQUksQ0FBQ2tCLE1BQU0sR0FBR0MsTUFBVixFQUFrQkcsUUFBbEIsQ0FBMkIsZUFBM0IsQ0FBSixFQUFpRDtBQUMvQyxXQUFLbEMsR0FBTCxDQUFTQyxJQUFULENBQWUsa0JBQWlCVyxRQUFTLDBDQUF6QztBQUNBLGFBQU8sS0FBUDtBQUNEOztBQUNELFdBQU8sSUFBUDtBQUNELEdBUkQsQ0FRRSxPQUFPSyxHQUFQLEVBQVk7QUFDWixTQUFLakIsR0FBTCxDQUFTa0IsSUFBVCxDQUFlLG1CQUFrQk4sUUFBUyxzQkFBcUJLLEdBQUcsQ0FBQ2MsTUFBSixJQUFjZCxHQUFHLENBQUNFLE9BQVEsRUFBekY7QUFDQSxXQUFPLEtBQVA7QUFDRDtBQUNGLENBbEJEOztBQTRCQXBDLFFBQVEsQ0FBQ29ELG1CQUFULEdBQStCLGVBQWVBLG1CQUFmLENBQW9DbEQsSUFBSSxHQUFHLEVBQTNDLEVBQStDO0FBQzVFLFNBQU8sTUFBTSxLQUFLd0MsWUFBTCxDQUFrQixpQkFBbEIsRUFBcUMsTUFBckMsRUFBNkN6QyxjQUFjLENBQUNDLElBQUQsRUFBTyxDQUFDLFVBQUQsQ0FBUCxDQUEzRCxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUYsUUFBUSxDQUFDeUIsVUFBVCxHQUFzQixlQUFlQSxVQUFmLENBQTJCNEIsT0FBM0IsRUFBb0NuRCxJQUFJLEdBQUcsRUFBM0MsRUFBK0M7QUFDbkUsUUFBTSxLQUFLUSxnQkFBTCxDQUFzQixFQUMxQixJQUFJTCxnQkFBRWlELGFBQUYsQ0FBZ0JwRCxJQUFoQixJQUF3QkEsSUFBeEIsR0FBK0IsRUFBbkMsQ0FEMEI7QUFFMUJTLElBQUFBLEdBQUcsRUFBRTBDO0FBRnFCLEdBQXRCLENBQU47QUFJRCxDQUxEOztBQU9BckQsUUFBUSxDQUFDdUQsV0FBVCxHQUF1QixlQUFlQSxXQUFmLENBQTRCMUIsUUFBNUIsRUFBc0MzQixJQUFJLEdBQUcsRUFBN0MsRUFBaUQ7QUFDdEUsU0FBTyxNQUFNLEtBQUttQyxlQUFMLENBQXFCbUIsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQnZELElBQWxCLEVBQXdCO0FBQUMyQixJQUFBQTtBQUFELEdBQXhCLENBQXJCLENBQWI7QUFDRCxDQUZEOztBQUlBN0IsUUFBUSxDQUFDK0IsY0FBVCxHQUEwQixlQUFlQSxjQUFmLENBQStCRixRQUEvQixFQUF5QztBQUNqRSxTQUFPLE1BQU0sS0FBS0Qsb0JBQUwsQ0FBMEI7QUFBQ0MsSUFBQUE7QUFBRCxHQUExQixDQUFiO0FBQ0QsQ0FGRDs7QUFJQTdCLFFBQVEsQ0FBQzBELFlBQVQsR0FBd0IsZUFBZUEsWUFBZixDQUE2QjdCLFFBQTdCLEVBQXVDO0FBQzdELFNBQU8sTUFBTSxLQUFLYyxrQkFBTCxDQUF3QjtBQUFDZCxJQUFBQTtBQUFELEdBQXhCLENBQWI7QUFDRCxDQUZEOztBQUlBN0IsUUFBUSxDQUFDMkQsYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCOUIsUUFBOUIsRUFBd0M7QUFDL0QsU0FBTyxNQUFNLEtBQUt1QixtQkFBTCxDQUF5QjtBQUFDdkIsSUFBQUE7QUFBRCxHQUF6QixDQUFiO0FBQ0QsQ0FGRDs7QUFnQkE3QixRQUFRLENBQUM0RCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0IxRCxJQUFJLEdBQUcsRUFBdEMsRUFBMEM7QUFDbEUsTUFBSSxDQUFDLEtBQUtpQixZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJWCxtQkFBT3FELG1CQUFYLENBQWdDLGtEQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKQyxJQUFBQSxlQUFlLEdBQUc7QUFEZCxNQUVGNUQsSUFGSjtBQUdBLFFBQU02RCxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUsvRCxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUF4RCxDQUF0Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxNQUFNMEMsT0FBTyxDQUFDRyxnQkFBUixDQUF5QjtBQUFDSixNQUFBQTtBQUFELEtBQXpCLENBQWI7QUFDRCxHQUZELFNBRVU7QUFDUkMsSUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRixDQWREOztlQWdCZW5FLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBzZXJ2aWNlcyB9IGZyb20gJ2FwcGl1bS1pb3MtZGV2aWNlJztcbmltcG9ydCBQeWlkZXZpY2UgZnJvbSAnLi4vcHktaW9zLWRldmljZS1jbGllbnQnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5mdW5jdGlvbiByZXF1aXJlT3B0aW9ucyAob3B0cyA9IHt9LCByZXFLZXlzID0gW10pIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgcmVxS2V5cykge1xuICAgIGlmICghXy5pc1N0cmluZyhvcHRzW2tleV0pIHx8IF8uaXNFbXB0eShvcHRzW2tleV0pKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgJyR7a2V5fScgaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBzdHJpbmcuICcke29wdHNba2V5XX0nIGlzIGdpdmVuIGluc3RlYWRgXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0cztcbn1cblxuY29tbWFuZHMubW9iaWxlSW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUluc3RhbGxBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcCwgdGltZW91dE1zLCBzdHJhdGVneSB9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydhcHAnXSk7XG4gIGNvbnN0IHNyY0FwcFBhdGggPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKTtcbiAgdGhpcy5sb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtzcmNBcHBQYXRofScgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmluc3RhbGxBcHAoXG4gICAgc3JjQXBwUGF0aCwgdGltZW91dE1zID8/IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCwgc3RyYXRlZ3kgPz8gdGhpcy5vcHRzLmFwcEluc3RhbGxTdHJhdGVneVxuICApO1xuICB0aGlzLmxvZy5pbmZvKGBJbnN0YWxsYXRpb24gb2YgJyR7c3JjQXBwUGF0aH0nIHN1Y2NlZWRlZGApO1xufTtcblxuY29tbWFuZHMubW9iaWxlSXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc0FwcEluc3RhbGxlZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBjb25zdCBpbnN0YWxsZWQgPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKGJ1bmRsZUlkKTtcbiAgdGhpcy5sb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICB0aGlzLmxvZy5pbmZvKGBVbmluc3RhbGxpbmcgdGhlIGFwcGxpY2F0aW9uIHdpdGggYnVuZGxlIGlkZW50aWZpZXIgJyR7YnVuZGxlSWR9JyBgICtcbiAgICBgZnJvbSB0aGUgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdTaW11bGF0b3InfSB3aXRoIFVESUQgJyR7dGhpcy5vcHRzLmRldmljZS51ZGlkfSdgKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJlbW92ZUFwcChidW5kbGVJZCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgUmVtb3ZhbCBvZiAnJHtidW5kbGVJZH0nIHN1Y2NlZWRlZGApO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogS2lsbCB0aGUgZ2l2ZW4gYnVuZGxlIGlkIHByb2Nlc3MgdmlhIGluc3RydW1lbnRzIHNlcnZpY2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vWXVlQ2hlbi1DL3B5LWlvcy1kZXZpY2UvYmxvYi81MWY0NjgzYzVjM2MzODVhMDE1ODU4YWRhMDdhNWYxYzYyZDNjZjU3L2lvc19kZXZpY2UvY2xpL2Jhc2UucHkjTDIyMFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBidW5kbGUgaWQgcHJvY2VzcyB3YXMga2lsbGVkLiBPdGhlcndpc2UgZmFsc2UuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUtpbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVLaWxsQXBwIChvcHRzID0ge30pIHtcbiAgaWYgKCF0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5VbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKCdBIHJlYWwgZGV2aWNlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBjb25zdCB7YnVuZGxlSWR9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgdHJ5IHtcbiAgICAvLyBUT0RPOiBldmVudHVhbGx5IHdlJ2QgbGlrZSB0byBjYWxsIHRoZSBpbnN0cnVtZW50cyBraWxsIG1ldGhvZCB2aWEgYXBwaXVtLWlvcy1kZXZpY2UuXG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IG5ldyBQeWlkZXZpY2UodGhpcy5vcHRzLmRldmljZS51ZGlkKS5raWxsQXBwKGJ1bmRsZUlkKTtcbiAgICBpZiAoKHN0ZG91dCArIHN0ZGVycikuaW5jbHVkZXMoJ2RpZCBub3Qgc3RhcnQnKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVGhlIGJ1bmRsZSBpZCAnJHtidW5kbGVJZH0nIGRpZCBub3Qgc3RhcnQgb3IgaXQgd2FzIGFscmVhZHkga2lsbGVkYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBGYWlsZWQgdG8ga2lsbCAnJHtidW5kbGVJZH0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyIHx8IGVyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHN0YXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggbXVzdCBjb250YWluIGBidW5kbGVJZGAgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBhY3R1YWwgYXBwbGljYXRpb24gc3RhdGUgY29kZS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGU/bGFuZ3VhZ2U9b2JqY1xuICogdG8gZ2V0IHRoZSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlUXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVF1ZXJ5QXBwU3RhdGUgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy9zdGF0ZScsICdQT1NUJywgcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG5jb21tYW5kcy5pbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwcCAoYXBwUGF0aCwgb3B0cyA9IHt9KSB7XG4gIGF3YWl0IHRoaXMubW9iaWxlSW5zdGFsbEFwcCh7XG4gICAgLi4uKF8uaXNQbGFpbk9iamVjdChvcHRzKSA/IG9wdHMgOiB7fSksXG4gICAgYXBwOiBhcHBQYXRoLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGJ1bmRsZUlkLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlTGF1bmNoQXBwKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtidW5kbGVJZH0pKTtcbn07XG5cbmNvbW1hbmRzLmlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUlzQXBwSW5zdGFsbGVkKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMudGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gdGVybWluYXRlQXBwIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVUZXJtaW5hdGVBcHAoe2J1bmRsZUlkfSk7XG59O1xuXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlUXVlcnlBcHBTdGF0ZSh7YnVuZGxlSWR9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTGlzdEFwcHNPcHRpb25zXG4gKiBAcHJvcGVydHkgeydTeXN0ZW0nfCdVc2VyJ30gYXBwbGljYXRpb25UeXBlIFtVc2VyXSBUaGUgdHlwZSBvZiBhcHBsaWNhdGlvbnMgdG8gbGlzdFxuICovXG5cbi8qKlxuICogTGlzdCBhcHBsaWNhdGlvbnMgaW5zdGFsbGVkIG9uIHRoZSByZWFsIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtMaXN0QXBwc09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBIGxpc3Qgb2YgYXBwcywgd2hlcmUgZWFjaCBpdGVtIGlzIGEgbWFwIHdoZXJlIGtleXMgYXJlXG4gKiBidW5kbGUgaWRlbnRpZmllcnMgYW5kIHZhbHVlcyBhcmUgbWFwcyBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBhcHAgcHJvcGVydGllcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdEFwcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0QXBwcyAob3B0cyA9IHt9KSB7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcihgVGhpcyBleHRlbnNpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzYCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwbGljYXRpb25UeXBlID0gJ1VzZXInLFxuICB9ID0gb3B0cztcbiAgY29uc3Qgc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKHRoaXMub3B0cy5kZXZpY2UudWRpZCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHNlcnZpY2UubGlzdEFwcGxpY2F0aW9ucyh7YXBwbGljYXRpb25UeXBlfSk7XG4gIH0gZmluYWxseSB7XG4gICAgc2VydmljZS5jbG9zZSgpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -18,8 +18,6 @@ var _asyncbox = require("asyncbox");
18
18
 
19
19
  var _bluebird = _interopRequireDefault(require("bluebird"));
20
20
 
21
- var _logger = _interopRequireDefault(require("../logger"));
22
-
23
21
  var _os = _interopRequireDefault(require("os"));
24
22
 
25
23
  var _path = _interopRequireDefault(require("path"));
@@ -279,9 +277,8 @@ commands.mobileInstallCertificate = async function mobileInstallCertificate(opts
279
277
  });
280
278
  return;
281
279
  } catch (e) {
282
- _logger.default.debug(e);
283
-
284
- _logger.default.info(`The certificate cannot be installed via CLI. ` + `Falling back to UI-based deployment`);
280
+ this.log.debug(e);
281
+ this.log.info(`The certificate cannot be installed via CLI. ` + `Falling back to UI-based deployment`);
285
282
  }
286
283
  } else {
287
284
  const client = new _pyIosDeviceClient.default(this.opts.udid);
@@ -292,7 +289,7 @@ commands.mobileInstallCertificate = async function mobileInstallCertificate(opts
292
289
  });
293
290
  return;
294
291
  } else {
295
- _logger.default.info('pyidevice is not installed on your system. ' + 'Falling back to the (slow) UI-based installation');
292
+ this.log.info('pyidevice is not installed on your system. ' + 'Falling back to the (slow) UI-based installation');
296
293
  }
297
294
  }
298
295
 
@@ -335,8 +332,7 @@ commands.mobileInstallCertificate = async function mobileInstallCertificate(opts
335
332
  waitMs: TMPSERVER_STARTUP_TIMEOUT,
336
333
  intervalMs: 300
337
334
  });
338
-
339
- _logger.default.debug(`The temporary web server is running at http://${host}:${tmpPort}`);
335
+ this.log.debug(`The temporary web server is running at http://${host}:${tmpPort}`);
340
336
  } catch (e) {
341
337
  throw new Error(`The temporary web server cannot be started at http://${host}:${tmpPort}.`);
342
338
  }
@@ -376,14 +372,14 @@ commands.mobileInstallCertificate = async function mobileInstallCertificate(opts
376
372
  }
377
373
 
378
374
  if (isCertAlreadyInstalled) {
379
- _logger.default.info(`It looks like the '${cn}' certificate has been already added to the CA root`);
375
+ this.log.info(`It looks like the '${cn}' certificate has been already added to the CA root`);
380
376
  }
381
377
  } finally {
382
378
  if (this.opts.bundleId) {
383
379
  try {
384
380
  await this.activateApp(this.opts.bundleId);
385
381
  } catch (e) {
386
- _logger.default.warn(`Cannot restore the application '${this.opts.bundleId}'. Original error: ${e.message}`);
382
+ this.log.warn(`Cannot restore the application '${this.opts.bundleId}'. Original error: ${e.message}`);
387
383
  }
388
384
  }
389
385
  }
@@ -400,4 +396,4 @@ var _default = extensions;
400
396
  exports.default = _default;require('source-map-support').install();
401
397
 
402
398
 
403
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jZXJ0aWZpY2F0ZS5qcyJdLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJDT05GSUdfRVhURU5TSU9OIiwiSE9TVF9QT1JUX1JBTkdFIiwiVE1QU0VSVkVSX1NUQVJUVVBfVElNRU9VVCIsIlNldHRpbmdzIiwiR2VuZXJhbCIsInR5cGUiLCJ2YWx1ZSIsIlByb2ZpbGUiLCJBYm91dCIsIkNlcnRpZmljYXRlX1RydXN0X1NldHRpbmdzIiwiQnV0dG9uIiwiSW5zdGFsbCIsIkFsbG93IiwiRG9uZSIsIlJldHVybl90b19TZXR0aW5ncyIsIkFsZXJ0IiwiZXh0cmFjdENvbW1vbk5hbWUiLCJjZXJ0QnVmZmVyIiwidGVtcENlcnQiLCJ0ZW1wRGlyIiwib3BlbiIsInByZWZpeCIsInN1ZmZpeCIsImZzIiwid3JpdGVGaWxlIiwicGF0aCIsInN0ZG91dCIsInBhcnNlQ29tbW9uTmFtZSIsImVyciIsIkVycm9yIiwibWVzc2FnZSIsInJpbXJhZiIsIkxJQlJFX1NTTF9QQVRURVJOIiwiT1BFTl9TU0xfUEFUVEVSTiIsInN0cmluZ0NlcnRpZmljYXRlIiwicmVzdWx0IiwicmVkdWNlIiwiYWNjIiwiciIsIm1hdGNoIiwiZXhlYyIsInRvTW9iaWxlQ29uZmlnIiwiY29tbW9uTmFtZSIsImdldFVVSUQiLCJ1dGlsIiwidXVpZFY0IiwidG9VcHBlckNhc2UiLCJjb250ZW50VXVpZCIsIlBheWxvYWRDb250ZW50IiwiUGF5bG9hZENlcnRpZmljYXRlRmlsZU5hbWUiLCJQYXlsb2FkRGVzY3JpcHRpb24iLCJQYXlsb2FkRGlzcGxheU5hbWUiLCJQYXlsb2FkSWRlbnRpZmllciIsIlBheWxvYWRUeXBlIiwiUGF5bG9hZFVVSUQiLCJQYXlsb2FkVmVyc2lvbiIsIm9zIiwiaG9zdG5hbWUiLCJzcGxpdCIsIlBheWxvYWRSZW1vdmFsRGlzYWxsb3dlZCIsImNsaWNrRWxlbWVudCIsImRyaXZlciIsImxvY2F0b3IiLCJvcHRpb25zIiwiZWxlbWVudCIsInRpbWVvdXQiLCJza2lwSWZJbnZpc2libGUiLCJsb29rdXBEZWxheSIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJuYXRpdmVDbGljayIsImluc3RhbGxQcmUxMjJDZXJ0aWZpY2F0ZSIsIkIiLCJkZWxheSIsInRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzIiwibmFtZSIsInN3aXRjaExvY2F0b3IiLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsInBvc3RBY2NlcHRBbGVydCIsImluc3RhbGxQb3N0MTIyQ2VydGlmaWNhdGUiLCJhY3RpdmF0ZUFwcCIsImlzQ2VydEZvdW5kIiwic3dpcGVOdW0iLCJtb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUiLCJvcHRzIiwiY29udGVudCIsImlzUm9vdCIsIl8iLCJpc0VtcHR5IiwiaXNTaW11bGF0b3IiLCJtZXRob2ROYW1lIiwiZGV2aWNlIiwic2ltY3RsIiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwicmF3IiwiZSIsImxvZyIsImRlYnVnIiwiaW5mbyIsImNsaWVudCIsIlB5aWRldmljZSIsInVkaWQiLCJhc3NlcnRFeGlzdHMiLCJpbnN0YWxsUHJvZmlsZSIsInBheWxvYWQiLCJ0bXBSb290Iiwib3BlbkRpciIsInRtcFBvcnQiLCJjb25maWdOYW1lIiwiY29uZmlnUGF0aCIsInJlc29sdmUiLCJ0bXBTZXJ2ZXIiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwicmVzIiwiY29uZmlnRmlsZSIsInJlYWRGaWxlIiwiZW5kIiwiY24iLCJtb2JpbGVDb25maWciLCJwbGlzdCIsInVwZGF0ZVBsaXN0RmlsZSIsImhvc3QiLCJjZXJ0VXJsIiwibGlzdGVuIiwiaWduIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImlzUmVhbERldmljZSIsInByb3h5Q29tbWFuZCIsInVybCIsImlzV2ViQ29udGV4dCIsInNldFVybCIsIm9wZW5VcmwiLCJpc0NlcnRBbHJlYWR5SW5zdGFsbGVkIiwiY29tcGFyZVZlcnNpb25zIiwicGxhdGZvcm1WZXJzaW9uIiwiYnVuZGxlSWQiLCJ3YXJuIiwidG9Jbk1lbW9yeUJhc2U2NCIsImNsb3NlIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxVQUFVLEdBQUcsRUFBakI7QUFBQSxJQUFxQkMsUUFBUSxHQUFHLEVBQWhDOztBQUVBLE1BQU1DLGdCQUFnQixHQUFHLGNBQXpCO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLENBQUMsS0FBRCxFQUFRLEtBQVIsQ0FBeEI7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRyxJQUFsQztBQUNBLE1BQU1DLFFBQVEsR0FBRztBQUNmQyxFQUFBQSxPQUFPLEVBQUU7QUFDUEMsSUFBQUEsSUFBSSxFQUFFLGtCQURDO0FBRVBDLElBQUFBLEtBQUssRUFBRTtBQUZBLEdBRE07QUFLZkMsRUFBQUEsT0FBTyxFQUFFO0FBQ1BGLElBQUFBLElBQUksRUFBRSx1QkFEQztBQUVQQyxJQUFBQSxLQUFLLEVBQUc7QUFGRCxHQUxNO0FBU2ZFLEVBQUFBLEtBQUssRUFBRTtBQUNMSCxJQUFBQSxJQUFJLEVBQUUsa0JBREQ7QUFFTEMsSUFBQUEsS0FBSyxFQUFFO0FBRkYsR0FUUTtBQWFmRyxFQUFBQSwwQkFBMEIsRUFBRTtBQUMxQkosSUFBQUEsSUFBSSxFQUFFLGtCQURvQjtBQUUxQkMsSUFBQUEsS0FBSyxFQUFFO0FBRm1CO0FBYmIsQ0FBakI7QUFrQkEsTUFBTUksTUFBTSxHQUFHO0FBQ2JDLEVBQUFBLE9BQU8sRUFBRTtBQUNQTixJQUFBQSxJQUFJLEVBQUUsa0JBREM7QUFFUEMsSUFBQUEsS0FBSyxFQUFFO0FBRkEsR0FESTtBQUtiTSxFQUFBQSxLQUFLLEVBQUU7QUFDTFAsSUFBQUEsSUFBSSxFQUFFLGtCQUREO0FBRUxDLElBQUFBLEtBQUssRUFBRTtBQUZGLEdBTE07QUFTYk8sRUFBQUEsSUFB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QUFQLEVBQVU7QUFDVkMsMEJBQUkwQyxJQUFKLENBQVUsbUNBQWtDLEtBQUt4RCxJQUFMLENBQVV1RCxRQUFTLHNCQUFxQjFDLENBQUMsQ0FBQ3JFLE9BQVEsRUFBOUY7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsV0FBTyxDQUFDLE1BQU1jLGNBQUttRyxnQkFBTCxDQUFzQjlCLFVBQXRCLENBQVAsRUFBMENoQixRQUExQyxFQUFQO0FBQ0QsR0EzRUQsU0EyRVU7QUFDUixVQUFNa0IsU0FBUyxDQUFDNkIsS0FBVixFQUFOO0FBQ0EsVUFBTXpILFlBQUdRLE1BQUgsQ0FBVThFLE9BQVYsQ0FBTjtBQUNEO0FBQ0YsQ0F4SEQ7O0FBMEhBb0MsTUFBTSxDQUFDQyxNQUFQLENBQWNwSixVQUFkLEVBQTBCQyxRQUExQjtlQUVlRCxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzLCBwbGlzdCwgdGVtcERpciwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCByZXRyeSwgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBmaW5kQVBvcnROb3RJblVzZSwgY2hlY2tQb3J0U3RhdHVzIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IFB5aWRldmljZSBmcm9tICcuLi9weS1pb3MtZGV2aWNlLWNsaWVudCc7XG5cbmxldCBleHRlbnNpb25zID0ge30sIGNvbW1hbmRzID0ge307XG5cbmNvbnN0IENPTkZJR19FWFRFTlNJT04gPSAnbW9iaWxlY29uZmlnJztcbmNvbnN0IEhPU1RfUE9SVF9SQU5HRSA9IFszODIwMCwgMzgyOTldO1xuY29uc3QgVE1QU0VSVkVSX1NUQVJUVVBfVElNRU9VVCA9IDUwMDA7XG5jb25zdCBTZXR0aW5ncyA9IHtcbiAgR2VuZXJhbDoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ0dlbmVyYWwnLFxuICB9LFxuICBQcm9maWxlOiB7XG4gICAgdHlwZTogJy1pb3MgcHJlZGljYXRlIHN0cmluZycsXG4gICAgdmFsdWU6IGBuYW1lIEJFR0lOU1dJVEggJ1Byb2ZpbGUnYCxcbiAgfSxcbiAgQWJvdXQ6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdBYm91dCcsXG4gIH0sXG4gIENlcnRpZmljYXRlX1RydXN0X1NldHRpbmdzOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnQ2VydGlmaWNhdGUgVHJ1c3QgU2V0dGluZ3MnLFxuICB9LFxufTtcbmNvbnN0IEJ1dHRvbiA9IHtcbiAgSW5zdGFsbDoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ0luc3RhbGwnLFxuICB9LFxuICBBbGxvdzoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ0FsbG93JyxcbiAgfSxcbiAgRG9uZToge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ0RvbmUnLFxuICB9LFxuICBSZXR1cm5fdG9fU2V0dGluZ3M6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdSZXR1cm4gdG8gU2V0dGluZ3MnLFxuICB9LFxufTtcbmNvbnN0IEFsZXJ0ID0ge1xuICBJbnN0YWxsOiB7XG4gICAgdHlwZTogJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgIHZhbHVlOiAnKiovWENVSUVsZW1lbnRUeXBlQW55W2B0eXBlID09IFxcJ1hDVUlFbGVtZW50VHlwZUFsZXJ0XFwnIE9SIHR5cGUgPT0gXFwnWENVSUVsZW1lbnRUeXBlU2hlZXRcXCdgXS8qKi9YQ1VJRWxlbWVudFR5cGVCdXR0b25bYGxhYmVsID09IFxcJ0luc3RhbGxcXCdgXScsXG4gIH0sXG59O1xuXG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RDb21tb25OYW1lIChjZXJ0QnVmZmVyKSB7XG4gIGNvbnN0IHRlbXBDZXJ0ID0gYXdhaXQgdGVtcERpci5vcGVuKHtcbiAgICBwcmVmaXg6ICdjZXJ0JyxcbiAgICBzdWZmaXg6ICcuY2VyJ1xuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUodGVtcENlcnQucGF0aCwgY2VydEJ1ZmZlcik7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdvcGVuc3NsJywgWyd4NTA5JywgJy1ub291dCcsICctc3ViamVjdCcsICctaW4nLCB0ZW1wQ2VydC5wYXRoXSk7XG4gICAgcmV0dXJuIHBhcnNlQ29tbW9uTmFtZShzdGRvdXQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSBjb21tb24gbmFtZSB2YWx1ZSBmcm9tIHRoZSBjZXJ0aWZpY2F0ZS4gSXMgaXQgdmFsaWQgYW5kIGJhc2U2NC1lbmNvZGVkPyBgICtcbiAgICAgICAgICAgICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0ZW1wQ2VydC5wYXRoKTtcbiAgfVxufVxuXG5jb25zdCBMSUJSRV9TU0xfUEFUVEVSTiA9IC9cXC9DTj0oW15cXC9dKykvOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG5jb25zdCBPUEVOX1NTTF9QQVRURVJOID0gLyxcXHNDTlxccz1cXHMoW14sXSspLztcblxuZnVuY3Rpb24gcGFyc2VDb21tb25OYW1lIChzdHJpbmdDZXJ0aWZpY2F0ZSkge1xuICBjb25zdCByZXN1bHQgPSBbTElCUkVfU1NMX1BBVFRFUk4sIE9QRU5fU1NMX1BBVFRFUk5dLnJlZHVjZSgoYWNjLCByKSA9PiB7XG4gICAgaWYgKGFjYykge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSByLmV4ZWMoc3RyaW5nQ2VydGlmaWNhdGUpO1xuICAgIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgfSwgbnVsbCk7XG4gIGlmICghcmVzdWx0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBjb21tb24gbmFtZSB2YWx1ZSBpbiAnJHtzdHJpbmdDZXJ0aWZpY2F0ZX0nIG91dHB1dGApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIEFwcGxlJ3Mgb3Zlci10aGUtYWlyIGNvbmZpZ3VyYXRpb24gcHJvZmlsZVxuICogZm9yIGNlcnRpZmljYXRlIGRlcGxveW1lbnQgYmFzZWQgb24gdGhlIGdpdmVuIFBFTSBjZXJ0aWZpY2F0ZSBjb250ZW50LlxuICogUmVhZCBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9jb250ZW50L2RvY3VtZW50YXRpb24vTmV0d29ya2luZ0ludGVybmV0L0NvbmNlcHR1YWwvaVBob25lT1RBQ29uZmlndXJhdGlvbi9JbnRyb2R1Y3Rpb24vSW50cm9kdWN0aW9uLmh0bWxcbiAqIGZvciBtb3JlIGRldGFpbHMgb24gc3VjaCBwcm9maWxlcy5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2VydEJ1ZmZlciAtIFRoZSBhY3R1YWwgY29udGVudCBvZiBQRU0gY2VydGlmaWNhdGUgZW5jb2RlZCBpbnRvIE5vZGVKUyBidWZmZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tb25OYW1lIC0gQ2VydGlmaWNhdGUncyBjb21tb24gbmFtZVxuICogQHJldHVybnMge09iamVjdH0gVGhlIGVuY29kZWQgc3RydWN0dXJlIG9mIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSwgd2hpY2ggaXMgcmVhZHkgdG8gYmUgcGFzc2VkXG4gKiBhcyBhbiBhcmd1bWVudCB0byBwbGlzdCBidWlsZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGdpdmVuIGNlcnRpZmljYXRlIGNhbm5vdCBiZSBwYXJzZWRcbiAqL1xuZnVuY3Rpb24gdG9Nb2JpbGVDb25maWcgKGNlcnRCdWZmZXIsIGNvbW1vbk5hbWUpIHtcbiAgY29uc3QgZ2V0VVVJRCA9ICgpID0+IHV0aWwudXVpZFY0KCkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgY29udGVudFV1aWQgPSBnZXRVVUlEKCk7XG4gIHJldHVybiB7XG4gICAgUGF5bG9hZENvbnRlbnQ6IFt7XG4gICAgICBQYXlsb2FkQ2VydGlmaWNhdGVGaWxlTmFtZTogYCR7Y29tbW9uTmFtZX0uY2VyYCxcbiAgICAgIFBheWxvYWRDb250ZW50OiBjZXJ0QnVmZmVyLFxuICAgICAgUGF5bG9hZERlc2NyaXB0aW9uOiAnQWRkcyBhIENBIHJvb3QgY2VydGlmaWNhdGUnLFxuICAgICAgUGF5bG9hZERpc3BsYXlOYW1lOiBjb21tb25OYW1lLFxuICAgICAgUGF5bG9hZElkZW50aWZpZXI6IGBjb20uYXBwbGUuc2VjdXJpdHkucm9vdC4ke2NvbnRlbnRVdWlkfWAsXG4gICAgICBQYXlsb2FkVHlwZTogJ2NvbS5hcHBsZS5zZWN1cml0eS5yb290JyxcbiAgICAgIFBheWxvYWRVVUlEOiBjb250ZW50VXVpZCxcbiAgICAgIFBheWxvYWRWZXJzaW9uOiAxXG4gICAgfV0sXG4gICAgUGF5bG9hZERpc3BsYXlOYW1lOiBjb21tb25OYW1lLFxuICAgIFBheWxvYWRJZGVudGlmaWVyOiBgJHtvcy5ob3N0bmFtZSgpLnNwbGl0KCcuJylbMF19LiR7Z2V0VVVJRCgpfWAsXG4gICAgUGF5bG9hZFJlbW92YWxEaXNhbGxvd2VkOiBmYWxzZSxcbiAgICBQYXlsb2FkVHlwZTogJ0NvbmZpZ3VyYXRpb24nLFxuICAgIFBheWxvYWRVVUlEOiBnZXRVVUlEKCksXG4gICAgUGF5bG9hZFZlcnNpb246IDFcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xpY2tFbGVtZW50IChkcml2ZXIsIGxvY2F0b3IsIG9wdGlvbnMgPSB7fSkge1xuICBsZXQgZWxlbWVudCA9IG51bGw7XG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0ID0gNTAwMCxcbiAgICBza2lwSWZJbnZpc2libGUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgbG9va3VwRGVsYXkgPSA1MDA7XG4gIHRyeSB7XG4gICAgZWxlbWVudCA9IGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCA8IGxvb2t1cERlbGF5ID8gMSA6IHRpbWVvdXQgLyBsb29rdXBEZWxheSwgbG9va3VwRGVsYXksXG4gICAgICAoKSA9PiBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKGxvY2F0b3IudHlwZSwgbG9jYXRvci52YWx1ZSwgZmFsc2UpXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNraXBJZkludmlzaWJsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kICR7SlNPTi5zdHJpbmdpZnkobG9jYXRvcil9IHdpdGhpbiAke3RpbWVvdXR9bXMgdGltZW91dGApO1xuICB9XG4gIGF3YWl0IGRyaXZlci5uYXRpdmVDbGljayhlbGVtZW50KTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxQcmUxMjJDZXJ0aWZpY2F0ZSAoZHJpdmVyKSB7XG4gIC8vIEFjY2VwdCBTYWZhcmkgYWxlcnRcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkFsbG93LCB7XG4gICAgLy8gY2VydGlmaWNhdGUgbG9hZCBtaWdodCB0YWtlIHNvbWUgdGltZSBvbiBzbG93IG1hY2hpbmVzXG4gICAgdGltZW91dDogMTUwMDAsXG4gIH0pO1xuICAvLyBXYWl0IHVudGlsIFByZWZlcmVuY2VzIGFyZSBvcGVuZWRcbiAgYXdhaXQgQi5kZWxheSgyMDAwKTtcblxuICAvLyBHbyB0aHJvdWdoIFByZWZlcmVuY2VzIHdpemFyZFxuICBpZiAoIWF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5JbnN0YWxsLCB7XG4gICAgc2tpcElmSW52aXNpYmxlOiB0cnVlLFxuICB9KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBXZSBuZWVkIHRvIGNsaWNrIEluc3RhbGwgYnV0dG9uIG9uIHR3byBkaWZmZXJlbnQgdGFic1xuICAvLyBUaGUgc2Vjb25kIG9uZSBjb25maXJtcyB0aGUgcHJldmlvdXNcbiAgYXdhaXQgQi5kZWxheSgxNTAwKTtcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkluc3RhbGwpO1xuICAvLyBBY2NlcHQgYWxlcnRcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQWxlcnQuSW5zdGFsbCk7XG4gIC8vIEZpbmlzaCBhZGRpbmcgY2VydGlmaWNhdGVcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkRvbmUpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdHJ1c3RDZXJ0aWZpY2F0ZUluUHJlZmVyZW5jZXMgKGRyaXZlciwgbmFtZSkge1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5HZW5lcmFsKTtcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuQWJvdXQpO1xuICBjb25zdCBzd2l0Y2hMb2NhdG9yID0ge1xuICAgIHR5cGU6ICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICB2YWx1ZTogYCoqL1hDVUlFbGVtZW50VHlwZUNlbGxbXFxgbGFiZWwgPT0gJyR7bmFtZX0nXFxgXS8qKi9YQ1VJRWxlbWVudFR5cGVTd2l0Y2hgLFxuICB9O1xuICBhd2FpdCByZXRyeSg1LCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZHJpdmVyLm1vYmlsZVN3aXBlKHtcbiAgICAgIGVsZW1lbnQ6IGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2NsYXNzIG5hbWUnLCAnWENVSUVsZW1lbnRUeXBlVGFibGUnLCBmYWxzZSksXG4gICAgICBkaXJlY3Rpb246ICd1cCdcbiAgICB9KTtcbiAgICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5DZXJ0aWZpY2F0ZV9UcnVzdF9TZXR0aW5ncywge1xuICAgICAgdGltZW91dDogNTAwLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyhzd2l0Y2hMb2NhdG9yLnR5cGUsIHN3aXRjaExvY2F0b3IudmFsdWUsIGZhbHNlKTtcbiAgfSk7XG4gIC8vIE9ubHkgY2xpY2sgdGhlIHN3aXRjaCBpZiBpdCBpcyBzZXQgdG8gT2ZmXG4gIGlmIChhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCB7XG4gICAgdHlwZTogc3dpdGNoTG9jYXRvci50eXBlLFxuICAgIHZhbHVlOiBgJHtzd2l0Y2hMb2NhdG9yLnZhbHVlfVtcXGB2YWx1ZSA9PSAnMCdcXGBdYFxuICB9LCB7XG4gICAgdGltZW91dDogMTAwMCxcbiAgICBza2lwSWZJbnZpc2libGU6IHRydWUsXG4gIH0pKSB7XG4gICAgYXdhaXQgZHJpdmVyLnBvc3RBY2NlcHRBbGVydCgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxQb3N0MTIyQ2VydGlmaWNhdGUgKGRyaXZlciwgbmFtZSkge1xuICAvLyBBY2NlcHQgU2FmYXJpIGFsZXJ0XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5BbGxvdywge1xuICAgIC8vIGNlcnRpZmljYXRlIGxvYWQgbWlnaHQgdGFrZSBzb21lIHRpbWUgb24gc2xvdyBtYWNoaW5lc1xuICAgIHRpbWVvdXQ6IDE1MDAwLFxuICB9KTtcbiAgLy8gV2FpdCBmb3IgdGhlIHNlY29uZCBhbGVydFxuICBhd2FpdCBCLmRlbGF5KDIwMDApO1xuXG4gIGF3YWl0IGRyaXZlci5wb3N0QWNjZXB0QWxlcnQoKTtcbiAgYXdhaXQgZHJpdmVyLmFjdGl2YXRlQXBwKCdjb20uYXBwbGUuUHJlZmVyZW5jZXMnKTtcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuR2VuZXJhbCk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLlByb2ZpbGUpO1xuICAvLyBTZWxlY3QgdGhlIHRhcmdldCBjZXJ0XG4gIGxldCBpc0NlcnRGb3VuZCA9IGZhbHNlO1xuICBmb3IgKGxldCBzd2lwZU51bSA9IDA7IHN3aXBlTnVtIDwgNTsgKytzd2lwZU51bSkge1xuICAgIGlmIChhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCB7XG4gICAgICB0eXBlOiAnLWlvcyBjbGFzcyBjaGFpbicsXG4gICAgICB2YWx1ZTogYCoqL1hDVUlFbGVtZW50VHlwZUNlbGxbXFxgbGFiZWwgPT0gJyR7bmFtZX0nXFxgXWAsXG4gICAgfSwge1xuICAgICAgdGltZW91dDogNTAwLFxuICAgICAgc2tpcElmSW52aXNpYmxlOiB0cnVlLFxuICAgIH0pKSB7XG4gICAgICBpc0NlcnRGb3VuZCA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhd2FpdCBkcml2ZXIubW9iaWxlU3dpcGUoe1xuICAgICAgZWxlbWVudDogYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVUYWJsZScsIGZhbHNlKSxcbiAgICAgIGRpcmVjdGlvbjogJ3VwJ1xuICAgIH0pO1xuICB9XG4gIGlmICghaXNDZXJ0Rm91bmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke25hbWV9JyBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIGNlcnRpZmljYXRlcyBsaXN0YCk7XG4gIH1cblxuICAvLyBJbnN0YWxsIG9wdGlvbiBpcyBvbmx5IHZpc2libGUgaWYgdGhlIGNlcnQgaXMgbm90IGluc3RhbGxlZCB5ZXRcbiAgaWYgKCFhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCwge1xuICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgfSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYXdhaXQgQi5kZWxheSgxNTAwKTtcbiAgLy8gQ29uZmlybSB1bnRydXN0ZWQgY2VydCBpbnN0YWxsXG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5JbnN0YWxsKTtcbiAgLy8gQWNjZXB0IGFsZXJ0XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEFsZXJ0Lkluc3RhbGwpO1xuICAvLyBGaW5pc2ggYWRkaW5nIGNlcnRpZmljYXRlXG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5Eb25lKTtcblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDZXJ0aWZpY2F0ZUluc3RhbGxhdGlvbk9wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGNvbnRlbnQgLSBCYXNlNjQtZW5jb2RlZCBjb250ZW50IG9mIHRoZSBwdWJsaWMgY2VydGlmaWNhdGVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gY29tbW9uTmFtZSAtIENvbW1vbiBuYW1lIG9mIHRoZSBjZXJ0aWZpY2F0ZS4gSWYgdGhpcyBpcyBub3Qgc2V0XG4gKiB0aGVuIHRoZSBzY3JpcHQgd2lsbCB0cnkgdG8gcGFyc2UgaXQgZnJvbSB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUgY29udGVudC5cbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IGlzUm9vdCBbdHJ1ZV0gLSBUaGlzIG9wdGlvbiBkZWZpbmVzIHdoZXJlIHRoZSBjZXJ0aWZpY2F0ZSBzaG91bGQgYmVcbiAqIGluc3RhbGxlZCB0bzogZWl0aGVyIFRydXN0ZWQgUm9vdCBTdG9yZSAoYHRydWVgLCB0aGUgZGVmYXVsdCBvcHRpb24pIG9yXG4gKiB0aGUgS2V5Y2hhaW4gKGBmYWxzZWApLiBPbiBlbnZpcm9ubWVudHMgb3RoZXIgdGhhbiBYY29kZSAxMS40KyBTaW11bGF0b3IgdGhpc1xuICogb3B0aW9uIGlzIGlnbm9yZWQuXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxscyBhIGN1c3RvbSBjZXJ0aWZpY2F0ZSBvbnRvIHRoZSBkZXZpY2UuXG4gKiBTaW5jZSBYY29kZSBTREsgMTEuNCBBcHBsZSBoYXMgYWRkZWQgYSBkZWRpY2F0ZWQgc2ltY3RsIHN1YmNvbW1hbmQgdG8gcXVpY2tseSBoYW5kbGVcbiAqIGNlcnRpZmljYXRlcyBvbiBTaW11bGF0b3Igb3ZlciBDTEkuXG4gKiBPbiByZWFsIGRldmljZXMgb3Igc2ltdWxhdG9ycyBiZWZvcmUgWGNvZGUgMTEuNCBTREtcbiAqIEFwcGxlIHByb3ZpZGVzIG5vIG9mZmljaWFsIHdheSB0byBkbyBpdCB2aWEgdGhlIGNvbW1hbmQgbGluZS5cbiAqIEluIHN1Y2ggY2FzZSAoYW5kIGFsc28gYXMgYSBmYWxsYmFjayBpZiBDTEkgc2V0dXAgZmFpbHMpXG4gKiB0aGlzIG1ldGhvZCB0cmllcyB0byB3cmFwIHRoZSBjZXJ0aWZpY2F0ZSBpbnRvIC5tb2JpbGVjb25maWcgZm9ybWF0XG4gKiBhbmQgdGhlbiBkZXBsb3lzIHRoZSB3cmFwcGVkIGZpbGUgdG8gdGhlIGludGVybmFsIEhUVFAgc2VydmVyLFxuICogc28gb25lIGNhbiBvcGVuIGl0IHZpYSBtb2JpbGUgU2FmYXJpLlxuICogVGhlbiB0aGUgYWxnb3JpdGhtIGdvZXMgdGhyb3VnaCB0aGUgcHJvZmlsZSBpbnN0YWxsYXRpb24gcHJvY2VkdXJlIGJ5XG4gKiBjbGlja2luZyB0aGUgbmVjZXNzYXJ5IGJ1dHRvbnMgdXNpbmcgV2ViRHJpdmVyQWdlbnQuXG4gKlxuICogQHBhcmFtIHtDZXJ0aWZpY2F0ZUluc3RhbGxhdGlvbk9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHs/c3RyaW5nfSBUaGUgY29udGVudCBvZiB0aGUgZ2VuZXJhdGVkIC5tb2JpbGVjb25maWcgZmlsZSBhc1xuICogYmFzZTY0LWVuY29kZWQgc3RyaW5nLiBUaGlzIGNvbmZpZyBtaWdodCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiAqIElmIHRoZSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0IHZpYSBDTEkgdGhlbiBub3RoaW5nIGlzIHJldHVybmVkLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgY29udGVudCxcbiAgICBjb21tb25OYW1lLFxuICAgIGlzUm9vdCA9IHRydWUsXG4gIH0gPSBvcHRzO1xuICBpZiAoXy5pc0VtcHR5KGNvbnRlbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDZXJ0aWZpY2F0ZSBjb250ZW50IHNob3VsZCBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGlzUm9vdCA/ICdhZGRSb290Q2VydGlmaWNhdGUnIDogJ2FkZENlcnRpZmljYXRlJztcbiAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2ltY3RsW21ldGhvZE5hbWVdKFxuICAgICAgICBCdWZmZXIuZnJvbShjb250ZW50LCAnYmFzZTY0JykudG9TdHJpbmcoKSwge3JhdzogdHJ1ZX1cbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGUpO1xuICAgICAgbG9nLmluZm8oYFRoZSBjZXJ0aWZpY2F0ZSBjYW5ub3QgYmUgaW5zdGFsbGVkIHZpYSBDTEkuIGAgK1xuICAgICAgICBgRmFsbGluZyBiYWNrIHRvIFVJLWJhc2VkIGRlcGxveW1lbnRgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFB5aWRldmljZSh0aGlzLm9wdHMudWRpZCk7XG4gICAgaWYgKGF3YWl0IGNsaWVudC5hc3NlcnRFeGlzdHMoZmFsc2UpKSB7XG4gICAgICBhd2FpdCBjbGllbnQuaW5zdGFsbFByb2ZpbGUoe3BheWxvYWQ6IEJ1ZmZlci5mcm9tKGNvbnRlbnQsICdiYXNlNjQnKX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbygncHlpZGV2aWNlIGlzIG5vdCBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0uICcgK1xuICAgICAgICAnRmFsbGluZyBiYWNrIHRvIHRoZSAoc2xvdykgVUktYmFzZWQgaW5zdGFsbGF0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCB0bXBQb3J0ID0gYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2UoSE9TVF9QT1JUX1JBTkdFWzBdLCBIT1NUX1BPUlRfUkFOR0VbMV0pO1xuICBjb25zdCBjb25maWdOYW1lID0gYGFwcGl1bS4ke0NPTkZJR19FWFRFTlNJT059YDtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCBjb25maWdOYW1lKTtcbiAgY29uc3QgdG1wU2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXN5bmMgZnVuY3Rpb24gKF8sIHJlcykge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShjb25maWdQYXRoKTtcbiAgICByZXMuZW5kKGNvbmZpZ0ZpbGUpO1xuICB9KTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjZXJ0QnVmZmVyID0gQnVmZmVyLmZyb20oY29udGVudCwgJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGNuID0gY29tbW9uTmFtZSB8fCBhd2FpdCBleHRyYWN0Q29tbW9uTmFtZShjZXJ0QnVmZmVyKTtcbiAgICBjb25zdCBtb2JpbGVDb25maWcgPSB0b01vYmlsZUNvbmZpZyhjZXJ0QnVmZmVyLCBjbik7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBsaXN0LnVwZGF0ZVBsaXN0RmlsZShjb25maWdQYXRoLCBtb2JpbGVDb25maWcsIGZhbHNlLCBmYWxzZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzdG9yZSB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBhcyAnJHtjb25maWdQYXRofScuIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgaG9zdCA9IG9zLmhvc3RuYW1lKCk7XG4gICAgICBjb25zdCBjZXJ0VXJsID0gYGh0dHA6Ly8ke2hvc3R9OiR7dG1wUG9ydH0vJHtjb25maWdOYW1lfWA7XG4gICAgICBhd2FpdCB0bXBTZXJ2ZXIubGlzdGVuKHRtcFBvcnQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiAoYXdhaXQgY2hlY2tQb3J0U3RhdHVzKHRtcFBvcnQsIGhvc3QpKSA9PT0gJ29wZW4nO1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgIHdhaXRNczogVE1QU0VSVkVSX1NUQVJUVVBfVElNRU9VVCxcbiAgICAgICAgICBpbnRlcnZhbE1zOiAzMDAsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2cuZGVidWcoYFRoZSB0ZW1wb3Jhcnkgd2ViIHNlcnZlciBpcyBydW5uaW5nIGF0IGh0dHA6Ly8ke2hvc3R9OiR7dG1wUG9ydH1gKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdGVtcG9yYXJ5IHdlYiBzZXJ2ZXIgY2Fubm90IGJlIHN0YXJ0ZWQgYXQgaHR0cDovLyR7aG9zdH06JHt0bXBQb3J0fS5gKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy91cmwnLCAnUE9TVCcsIHt1cmw6IGNlcnRVcmx9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb21tYW5kIGFib3ZlIGRvZXMgbm90IGFsd2F5cyB3b3JrIG9uIHJlYWwgZGV2aWNlc1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRVcmwoY2VydFVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uub3BlblVybChjZXJ0VXJsKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSBmYWxzZTtcbiAgICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAgIGlmIChhd2FpdCBpbnN0YWxsUG9zdDEyMkNlcnRpZmljYXRlKHRoaXMsIGNuKSkge1xuICAgICAgICAgIGF3YWl0IGNsaWNrRWxlbWVudCh0aGlzLCBTZXR0aW5ncy5Qcm9maWxlKTtcbiAgICAgICAgICBhd2FpdCB0cnVzdENlcnRpZmljYXRlSW5QcmVmZXJlbmNlcyh0aGlzLCBjbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNDZXJ0QWxyZWFkeUluc3RhbGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhd2FpdCBpbnN0YWxsUHJlMTIyQ2VydGlmaWNhdGUodGhpcykpIHtcbiAgICAgICAgICBhd2FpdCBjbGlja0VsZW1lbnQodGhpcywgQnV0dG9uLlJldHVybl90b19TZXR0aW5ncyk7XG4gICAgICAgICAgYXdhaXQgdHJ1c3RDZXJ0aWZpY2F0ZUluUHJlZmVyZW5jZXModGhpcywgY24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNDZXJ0QWxyZWFkeUluc3RhbGxlZCkge1xuICAgICAgICBsb2cuaW5mbyhgSXQgbG9va3MgbGlrZSB0aGUgJyR7Y259JyBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiBhbHJlYWR5IGFkZGVkIHRvIHRoZSBDQSByb290YCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFjdGl2YXRlQXBwKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cud2FybihgQ2Fubm90IHJlc3RvcmUgdGhlIGFwcGxpY2F0aW9uICcke3RoaXMub3B0cy5idW5kbGVJZH0nLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKGF3YWl0IHV0aWwudG9Jbk1lbW9yeUJhc2U2NChjb25maWdQYXRoKSkudG9TdHJpbmcoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCB0bXBTZXJ2ZXIuY2xvc2UoKTtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIHBhcnNlQ29tbW9uTmFtZSB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2NlcnRpZmljYXRlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
399
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jZXJ0aWZpY2F0ZS5qcyJdLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJDT05GSUdfRVhURU5TSU9OIiwiSE9TVF9QT1JUX1JBTkdFIiwiVE1QU0VSVkVSX1NUQVJUVVBfVElNRU9VVCIsIlNldHRpbmdzIiwiR2VuZXJhbCIsInR5cGUiLCJ2YWx1ZSIsIlByb2ZpbGUiLCJBYm91dCIsIkNlcnRpZmljYXRlX1RydXN0X1NldHRpbmdzIiwiQnV0dG9uIiwiSW5zdGFsbCIsIkFsbG93IiwiRG9uZSIsIlJldHVybl90b19TZXR0aW5ncyIsIkFsZXJ0IiwiZXh0cmFjdENvbW1vbk5hbWUiLCJjZXJ0QnVmZmVyIiwidGVtcENlcnQiLCJ0ZW1wRGlyIiwib3BlbiIsInByZWZpeCIsInN1ZmZpeCIsImZzIiwid3JpdGVGaWxlIiwicGF0aCIsInN0ZG91dCIsInBhcnNlQ29tbW9uTmFtZSIsImVyciIsIkVycm9yIiwibWVzc2FnZSIsInJpbXJhZiIsIkxJQlJFX1NTTF9QQVRURVJOIiwiT1BFTl9TU0xfUEFUVEVSTiIsInN0cmluZ0NlcnRpZmljYXRlIiwicmVzdWx0IiwicmVkdWNlIiwiYWNjIiwiciIsIm1hdGNoIiwiZXhlYyIsInRvTW9iaWxlQ29uZmlnIiwiY29tbW9uTmFtZSIsImdldFVVSUQiLCJ1dGlsIiwidXVpZFY0IiwidG9VcHBlckNhc2UiLCJjb250ZW50VXVpZCIsIlBheWxvYWRDb250ZW50IiwiUGF5bG9hZENlcnRpZmljYXRlRmlsZU5hbWUiLCJQYXlsb2FkRGVzY3JpcHRpb24iLCJQYXlsb2FkRGlzcGxheU5hbWUiLCJQYXlsb2FkSWRlbnRpZmllciIsIlBheWxvYWRUeXBlIiwiUGF5bG9hZFVVSUQiLCJQYXlsb2FkVmVyc2lvbiIsIm9zIiwiaG9zdG5hbWUiLCJzcGxpdCIsIlBheWxvYWRSZW1vdmFsRGlzYWxsb3dlZCIsImNsaWNrRWxlbWVudCIsImRyaXZlciIsImxvY2F0b3IiLCJvcHRpb25zIiwiZWxlbWVudCIsInRpbWVvdXQiLCJza2lwSWZJbnZpc2libGUiLCJsb29rdXBEZWxheSIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJuYXRpdmVDbGljayIsImluc3RhbGxQcmUxMjJDZXJ0aWZpY2F0ZSIsIkIiLCJkZWxheSIsInRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzIiwibmFtZSIsInN3aXRjaExvY2F0b3IiLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsInBvc3RBY2NlcHRBbGVydCIsImluc3RhbGxQb3N0MTIyQ2VydGlmaWNhdGUiLCJhY3RpdmF0ZUFwcCIsImlzQ2VydEZvdW5kIiwic3dpcGVOdW0iLCJtb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUiLCJvcHRzIiwiY29udGVudCIsImlzUm9vdCIsIl8iLCJpc0VtcHR5IiwiaXNTaW11bGF0b3IiLCJtZXRob2ROYW1lIiwiZGV2aWNlIiwic2ltY3RsIiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwicmF3IiwiZSIsImxvZyIsImRlYnVnIiwiaW5mbyIsImNsaWVudCIsIlB5aWRldmljZSIsInVkaWQiLCJhc3NlcnRFeGlzdHMiLCJpbnN0YWxsUHJvZmlsZSIsInBheWxvYWQiLCJ0bXBSb290Iiwib3BlbkRpciIsInRtcFBvcnQiLCJjb25maWdOYW1lIiwiY29uZmlnUGF0aCIsInJlc29sdmUiLCJ0bXBTZXJ2ZXIiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwicmVzIiwiY29uZmlnRmlsZSIsInJlYWRGaWxlIiwiZW5kIiwiY24iLCJtb2JpbGVDb25maWciLCJwbGlzdCIsInVwZGF0ZVBsaXN0RmlsZSIsImhvc3QiLCJjZXJ0VXJsIiwibGlzdGVuIiwiaWduIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImlzUmVhbERldmljZSIsInByb3h5Q29tbWFuZCIsInVybCIsImlzV2ViQ29udGV4dCIsInNldFVybCIsIm9wZW5VcmwiLCJpc0NlcnRBbHJlYWR5SW5zdGFsbGVkIiwiY29tcGFyZVZlcnNpb25zIiwicGxhdGZvcm1WZXJzaW9uIiwiYnVuZGxlSWQiLCJ3YXJuIiwidG9Jbk1lbW9yeUJhc2U2NCIsImNsb3NlIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxVQUFVLEdBQUcsRUFBakI7QUFBQSxJQUFxQkMsUUFBUSxHQUFHLEVBQWhDOztBQUVBLE1BQU1DLGdCQUFnQixHQUFHLGNBQXpCO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLENBQUMsS0FBRCxFQUFRLEtBQVIsQ0FBeEI7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRyxJQUFsQztBQUNBLE1BQU1DLFFBQVEsR0FBRztBQUNmQyxFQUFBQSxPQUFPLEVBQUU7QUFDUEMsSUFBQUEsSUFBSSxFQUFFLGtCQURDO0FBRVBDLElBQUFBLEtBQUssRUFBRTtBQUZBLEdBRE07QUFLZkMsRUFBQUEsT0FBTyxFQUFFO0FBQ1BGLElBQUFBLElBQUksRUFBRSx1QkFEQztBQUVQQyxJQUFBQSxLQUFLLEVBQUc7QUFGRCxHQUxNO0FBU2ZFLEVBQUFBLEtBQUssRUFBRTtBQUNMSCxJQUFBQSxJQUFJLEVBQUUsa0JBREQ7QUFFTEMsSUFBQUEsS0FBSyxFQUFFO0FBRkYsR0FUUTtBQWFmRyxFQUFBQSwwQkFBMEIsRUFBRTtBQUMxQkosSUFBQUEsSUFBSSxFQUFFLGtCQURvQjtBQUUxQkMsSUFBQUEsS0FBSyxFQUFFO0FBRm1CO0FBYmIsQ0FBakI7QUFrQkEsTUFBTUksTUFBTSxHQUFHO0FBQ2JDLEVBQUFBLE9BQU8sRUFBRTtBQUNQTixJQUFBQSxJQUFJLEVBQUUsa0JBREM7QUFFUEMsSUFBQUEsS0FBSyxFQUFFO0FBRkEsR0FESTtBQUtiTSxFQUFBQSxLQUFLLEVBQUU7QUFDTFAsSUFBQUEsSUFBSSxFQUFFLGtCQUREO0FBRUxDLElBQUFBLEtBQUssRUFBRTtBQUZGLEdBTE07QUFTYk8sRUFBQUEsSUFBSSxFQUFF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VXVELFFBQTNCLENBQU47QUFDRCxTQUZELENBRUUsT0FBTzFDLENBQVAsRUFBVTtBQUNWLGVBQUtDLEdBQUwsQ0FBUzBDLElBQVQsQ0FBZSxtQ0FBa0MsS0FBS3hELElBQUwsQ0FBVXVELFFBQVMsc0JBQXFCMUMsQ0FBQyxDQUFDckUsT0FBUSxFQUFuRztBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxXQUFPLENBQUMsTUFBTWMsY0FBS21HLGdCQUFMLENBQXNCOUIsVUFBdEIsQ0FBUCxFQUEwQ2hCLFFBQTFDLEVBQVA7QUFDRCxHQTNFRCxTQTJFVTtBQUNSLFVBQU1rQixTQUFTLENBQUM2QixLQUFWLEVBQU47QUFDQSxVQUFNekgsWUFBR1EsTUFBSCxDQUFVOEUsT0FBVixDQUFOO0FBQ0Q7QUFDRixDQXhIRDs7QUEwSEFvQyxNQUFNLENBQUNDLE1BQVAsQ0FBY3BKLFVBQWQsRUFBMEJDLFFBQTFCO2VBRWVELFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMsIHBsaXN0LCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIHJldHJ5LCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlLCBjaGVja1BvcnRTdGF0dXMgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgUHlpZGV2aWNlIGZyb20gJy4uL3B5LWlvcy1kZXZpY2UtY2xpZW50JztcblxubGV0IGV4dGVuc2lvbnMgPSB7fSwgY29tbWFuZHMgPSB7fTtcblxuY29uc3QgQ09ORklHX0VYVEVOU0lPTiA9ICdtb2JpbGVjb25maWcnO1xuY29uc3QgSE9TVF9QT1JUX1JBTkdFID0gWzM4MjAwLCAzODI5OV07XG5jb25zdCBUTVBTRVJWRVJfU1RBUlRVUF9USU1FT1VUID0gNTAwMDtcbmNvbnN0IFNldHRpbmdzID0ge1xuICBHZW5lcmFsOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnR2VuZXJhbCcsXG4gIH0sXG4gIFByb2ZpbGU6IHtcbiAgICB0eXBlOiAnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJyxcbiAgICB2YWx1ZTogYG5hbWUgQkVHSU5TV0lUSCAnUHJvZmlsZSdgLFxuICB9LFxuICBBYm91dDoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ0Fib3V0JyxcbiAgfSxcbiAgQ2VydGlmaWNhdGVfVHJ1c3RfU2V0dGluZ3M6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdDZXJ0aWZpY2F0ZSBUcnVzdCBTZXR0aW5ncycsXG4gIH0sXG59O1xuY29uc3QgQnV0dG9uID0ge1xuICBJbnN0YWxsOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnSW5zdGFsbCcsXG4gIH0sXG4gIEFsbG93OiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnQWxsb3cnLFxuICB9LFxuICBEb25lOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnRG9uZScsXG4gIH0sXG4gIFJldHVybl90b19TZXR0aW5nczoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ1JldHVybiB0byBTZXR0aW5ncycsXG4gIH0sXG59O1xuY29uc3QgQWxlcnQgPSB7XG4gIEluc3RhbGw6IHtcbiAgICB0eXBlOiAnLWlvcyBjbGFzcyBjaGFpbicsXG4gICAgdmFsdWU6ICcqKi9YQ1VJRWxlbWVudFR5cGVBbnlbYHR5cGUgPT0gXFwnWENVSUVsZW1lbnRUeXBlQWxlcnRcXCcgT1IgdHlwZSA9PSBcXCdYQ1VJRWxlbWVudFR5cGVTaGVldFxcJ2BdLyoqL1hDVUlFbGVtZW50VHlwZUJ1dHRvbltgbGFiZWwgPT0gXFwnSW5zdGFsbFxcJ2BdJyxcbiAgfSxcbn07XG5cblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdENvbW1vbk5hbWUgKGNlcnRCdWZmZXIpIHtcbiAgY29uc3QgdGVtcENlcnQgPSBhd2FpdCB0ZW1wRGlyLm9wZW4oe1xuICAgIHByZWZpeDogJ2NlcnQnLFxuICAgIHN1ZmZpeDogJy5jZXInXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0ZW1wQ2VydC5wYXRoLCBjZXJ0QnVmZmVyKTtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ29wZW5zc2wnLCBbJ3g1MDknLCAnLW5vb3V0JywgJy1zdWJqZWN0JywgJy1pbicsIHRlbXBDZXJ0LnBhdGhdKTtcbiAgICByZXR1cm4gcGFyc2VDb21tb25OYW1lKHN0ZG91dCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIGNvbW1vbiBuYW1lIHZhbHVlIGZyb20gdGhlIGNlcnRpZmljYXRlLiBJcyBpdCB2YWxpZCBhbmQgYmFzZTY0LWVuY29kZWQ/IGAgK1xuICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRlbXBDZXJ0LnBhdGgpO1xuICB9XG59XG5cbmNvbnN0IExJQlJFX1NTTF9QQVRURVJOID0gL1xcL0NOPShbXlxcL10rKS87IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbmNvbnN0IE9QRU5fU1NMX1BBVFRFUk4gPSAvLFxcc0NOXFxzPVxccyhbXixdKykvO1xuXG5mdW5jdGlvbiBwYXJzZUNvbW1vbk5hbWUgKHN0cmluZ0NlcnRpZmljYXRlKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtMSUJSRV9TU0xfUEFUVEVSTiwgT1BFTl9TU0xfUEFUVEVSTl0ucmVkdWNlKChhY2MsIHIpID0+IHtcbiAgICBpZiAoYWNjKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaCA9IHIuZXhlYyhzdHJpbmdDZXJ0aWZpY2F0ZSk7XG4gICAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdO1xuICB9LCBudWxsKTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIGNvbW1vbiBuYW1lIHZhbHVlIGluICcke3N0cmluZ0NlcnRpZmljYXRlfScgb3V0cHV0YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgQXBwbGUncyBvdmVyLXRoZS1haXIgY29uZmlndXJhdGlvbiBwcm9maWxlXG4gKiBmb3IgY2VydGlmaWNhdGUgZGVwbG95bWVudCBiYXNlZCBvbiB0aGUgZ2l2ZW4gUEVNIGNlcnRpZmljYXRlIGNvbnRlbnQuXG4gKiBSZWFkIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L2NvbnRlbnQvZG9jdW1lbnRhdGlvbi9OZXR3b3JraW5nSW50ZXJuZXQvQ29uY2VwdHVhbC9pUGhvbmVPVEFDb25maWd1cmF0aW9uL0ludHJvZHVjdGlvbi9JbnRyb2R1Y3Rpb24uaHRtbFxuICogZm9yIG1vcmUgZGV0YWlscyBvbiBzdWNoIHByb2ZpbGVzLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBjZXJ0QnVmZmVyIC0gVGhlIGFjdHVhbCBjb250ZW50IG9mIFBFTSBjZXJ0aWZpY2F0ZSBlbmNvZGVkIGludG8gTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbW1vbk5hbWUgLSBDZXJ0aWZpY2F0ZSdzIGNvbW1vbiBuYW1lXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZW5jb2RlZCBzdHJ1Y3R1cmUgb2YgdGhlIGdpdmVuIGNlcnRpZmljYXRlLCB3aGljaCBpcyByZWFkeSB0byBiZSBwYXNzZWRcbiAqIGFzIGFuIGFyZ3VtZW50IHRvIHBsaXN0IGJ1aWxkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUgY2Fubm90IGJlIHBhcnNlZFxuICovXG5mdW5jdGlvbiB0b01vYmlsZUNvbmZpZyAoY2VydEJ1ZmZlciwgY29tbW9uTmFtZSkge1xuICBjb25zdCBnZXRVVUlEID0gKCkgPT4gdXRpbC51dWlkVjQoKS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBjb250ZW50VXVpZCA9IGdldFVVSUQoKTtcbiAgcmV0dXJuIHtcbiAgICBQYXlsb2FkQ29udGVudDogW3tcbiAgICAgIFBheWxvYWRDZXJ0aWZpY2F0ZUZpbGVOYW1lOiBgJHtjb21tb25OYW1lfS5jZXJgLFxuICAgICAgUGF5bG9hZENvbnRlbnQ6IGNlcnRCdWZmZXIsXG4gICAgICBQYXlsb2FkRGVzY3JpcHRpb246ICdBZGRzIGEgQ0Egcm9vdCBjZXJ0aWZpY2F0ZScsXG4gICAgICBQYXlsb2FkRGlzcGxheU5hbWU6IGNvbW1vbk5hbWUsXG4gICAgICBQYXlsb2FkSWRlbnRpZmllcjogYGNvbS5hcHBsZS5zZWN1cml0eS5yb290LiR7Y29udGVudFV1aWR9YCxcbiAgICAgIFBheWxvYWRUeXBlOiAnY29tLmFwcGxlLnNlY3VyaXR5LnJvb3QnLFxuICAgICAgUGF5bG9hZFVVSUQ6IGNvbnRlbnRVdWlkLFxuICAgICAgUGF5bG9hZFZlcnNpb246IDFcbiAgICB9XSxcbiAgICBQYXlsb2FkRGlzcGxheU5hbWU6IGNvbW1vbk5hbWUsXG4gICAgUGF5bG9hZElkZW50aWZpZXI6IGAke29zLmhvc3RuYW1lKCkuc3BsaXQoJy4nKVswXX0uJHtnZXRVVUlEKCl9YCxcbiAgICBQYXlsb2FkUmVtb3ZhbERpc2FsbG93ZWQ6IGZhbHNlLFxuICAgIFBheWxvYWRUeXBlOiAnQ29uZmlndXJhdGlvbicsXG4gICAgUGF5bG9hZFVVSUQ6IGdldFVVSUQoKSxcbiAgICBQYXlsb2FkVmVyc2lvbjogMVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGlja0VsZW1lbnQgKGRyaXZlciwgbG9jYXRvciwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQgPSA1MDAwLFxuICAgIHNraXBJZkludmlzaWJsZSA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBsb29rdXBEZWxheSA9IDUwMDtcbiAgdHJ5IHtcbiAgICBlbGVtZW50ID0gYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IDwgbG9va3VwRGVsYXkgPyAxIDogdGltZW91dCAvIGxvb2t1cERlbGF5LCBsb29rdXBEZWxheSxcbiAgICAgICgpID0+IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMobG9jYXRvci50eXBlLCBsb2NhdG9yLnZhbHVlLCBmYWxzZSlcbiAgICApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoc2tpcElmSW52aXNpYmxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgJHtKU09OLnN0cmluZ2lmeShsb2NhdG9yKX0gd2l0aGluICR7dGltZW91dH1tcyB0aW1lb3V0YCk7XG4gIH1cbiAgYXdhaXQgZHJpdmVyLm5hdGl2ZUNsaWNrKGVsZW1lbnQpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFByZTEyMkNlcnRpZmljYXRlIChkcml2ZXIpIHtcbiAgLy8gQWNjZXB0IFNhZmFyaSBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uQWxsb3csIHtcbiAgICAvLyBjZXJ0aWZpY2F0ZSBsb2FkIG1pZ2h0IHRha2Ugc29tZSB0aW1lIG9uIHNsb3cgbWFjaGluZXNcbiAgICB0aW1lb3V0OiAxNTAwMCxcbiAgfSk7XG4gIC8vIFdhaXQgdW50aWwgUHJlZmVyZW5jZXMgYXJlIG9wZW5lZFxuICBhd2FpdCBCLmRlbGF5KDIwMDApO1xuXG4gIC8vIEdvIHRocm91Z2ggUHJlZmVyZW5jZXMgd2l6YXJkXG4gIGlmICghYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkluc3RhbGwsIHtcbiAgICBza2lwSWZJbnZpc2libGU6IHRydWUsXG4gIH0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFdlIG5lZWQgdG8gY2xpY2sgSW5zdGFsbCBidXR0b24gb24gdHdvIGRpZmZlcmVudCB0YWJzXG4gIC8vIFRoZSBzZWNvbmQgb25lIGNvbmZpcm1zIHRoZSBwcmV2aW91c1xuICBhd2FpdCBCLmRlbGF5KDE1MDApO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCk7XG4gIC8vIEFjY2VwdCBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBBbGVydC5JbnN0YWxsKTtcbiAgLy8gRmluaXNoIGFkZGluZyBjZXJ0aWZpY2F0ZVxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uRG9uZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB0cnVzdENlcnRpZmljYXRlSW5QcmVmZXJlbmNlcyAoZHJpdmVyLCBuYW1lKSB7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkdlbmVyYWwpO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5BYm91dCk7XG4gIGNvbnN0IHN3aXRjaExvY2F0b3IgPSB7XG4gICAgdHlwZTogJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgIHZhbHVlOiBgKiovWENVSUVsZW1lbnRUeXBlQ2VsbFtcXGBsYWJlbCA9PSAnJHtuYW1lfSdcXGBdLyoqL1hDVUlFbGVtZW50VHlwZVN3aXRjaGAsXG4gIH07XG4gIGF3YWl0IHJldHJ5KDUsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBkcml2ZXIubW9iaWxlU3dpcGUoe1xuICAgICAgZWxlbWVudDogYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVUYWJsZScsIGZhbHNlKSxcbiAgICAgIGRpcmVjdGlvbjogJ3VwJ1xuICAgIH0pO1xuICAgIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkNlcnRpZmljYXRlX1RydXN0X1NldHRpbmdzLCB7XG4gICAgICB0aW1lb3V0OiA1MDAsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKHN3aXRjaExvY2F0b3IudHlwZSwgc3dpdGNoTG9jYXRvci52YWx1ZSwgZmFsc2UpO1xuICB9KTtcbiAgLy8gT25seSBjbGljayB0aGUgc3dpdGNoIGlmIGl0IGlzIHNldCB0byBPZmZcbiAgaWYgKGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIHtcbiAgICB0eXBlOiBzd2l0Y2hMb2NhdG9yLnR5cGUsXG4gICAgdmFsdWU6IGAke3N3aXRjaExvY2F0b3IudmFsdWV9W1xcYHZhbHVlID09ICcwJ1xcYF1gXG4gIH0sIHtcbiAgICB0aW1lb3V0OiAxMDAwLFxuICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgfSkpIHtcbiAgICBhd2FpdCBkcml2ZXIucG9zdEFjY2VwdEFsZXJ0KCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFBvc3QxMjJDZXJ0aWZpY2F0ZSAoZHJpdmVyLCBuYW1lKSB7XG4gIC8vIEFjY2VwdCBTYWZhcmkgYWxlcnRcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkFsbG93LCB7XG4gICAgLy8gY2VydGlmaWNhdGUgbG9hZCBtaWdodCB0YWtlIHNvbWUgdGltZSBvbiBzbG93IG1hY2hpbmVzXG4gICAgdGltZW91dDogMTUwMDAsXG4gIH0pO1xuICAvLyBXYWl0IGZvciB0aGUgc2Vjb25kIGFsZXJ0XG4gIGF3YWl0IEIuZGVsYXkoMjAwMCk7XG5cbiAgYXdhaXQgZHJpdmVyLnBvc3RBY2NlcHRBbGVydCgpO1xuICBhd2FpdCBkcml2ZXIuYWN0aXZhdGVBcHAoJ2NvbS5hcHBsZS5QcmVmZXJlbmNlcycpO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5HZW5lcmFsKTtcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuUHJvZmlsZSk7XG4gIC8vIFNlbGVjdCB0aGUgdGFyZ2V0IGNlcnRcbiAgbGV0IGlzQ2VydEZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IHN3aXBlTnVtID0gMDsgc3dpcGVOdW0gPCA1OyArK3N3aXBlTnVtKSB7XG4gICAgaWYgKGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIHtcbiAgICAgIHR5cGU6ICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICAgIHZhbHVlOiBgKiovWENVSUVsZW1lbnRUeXBlQ2VsbFtcXGBsYWJlbCA9PSAnJHtuYW1lfSdcXGBdYCxcbiAgICB9LCB7XG4gICAgICB0aW1lb3V0OiA1MDAsXG4gICAgICBza2lwSWZJbnZpc2libGU6IHRydWUsXG4gICAgfSkpIHtcbiAgICAgIGlzQ2VydEZvdW5kID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGF3YWl0IGRyaXZlci5tb2JpbGVTd2lwZSh7XG4gICAgICBlbGVtZW50OiBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVRhYmxlJywgZmFsc2UpLFxuICAgICAgZGlyZWN0aW9uOiAndXAnXG4gICAgfSk7XG4gIH1cbiAgaWYgKCFpc0NlcnRGb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7bmFtZX0nIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgY2VydGlmaWNhdGVzIGxpc3RgKTtcbiAgfVxuXG4gIC8vIEluc3RhbGwgb3B0aW9uIGlzIG9ubHkgdmlzaWJsZSBpZiB0aGUgY2VydCBpcyBub3QgaW5zdGFsbGVkIHlldFxuICBpZiAoIWF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5JbnN0YWxsLCB7XG4gICAgc2tpcElmSW52aXNpYmxlOiB0cnVlLFxuICB9KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCBCLmRlbGF5KDE1MDApO1xuICAvLyBDb25maXJtIHVudHJ1c3RlZCBjZXJ0IGluc3RhbGxcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkluc3RhbGwpO1xuICAvLyBBY2NlcHQgYWxlcnRcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQWxlcnQuSW5zdGFsbCk7XG4gIC8vIEZpbmlzaCBhZGRpbmcgY2VydGlmaWNhdGVcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkRvbmUpO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENlcnRpZmljYXRlSW5zdGFsbGF0aW9uT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gY29udGVudCAtIEJhc2U2NC1lbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHB1YmxpYyBjZXJ0aWZpY2F0ZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBjb21tb25OYW1lIC0gQ29tbW9uIG5hbWUgb2YgdGhlIGNlcnRpZmljYXRlLiBJZiB0aGlzIGlzIG5vdCBzZXRcbiAqIHRoZW4gdGhlIHNjcmlwdCB3aWxsIHRyeSB0byBwYXJzZSBpdCBmcm9tIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSBjb250ZW50LlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gaXNSb290IFt0cnVlXSAtIFRoaXMgb3B0aW9uIGRlZmluZXMgd2hlcmUgdGhlIGNlcnRpZmljYXRlIHNob3VsZCBiZVxuICogaW5zdGFsbGVkIHRvOiBlaXRoZXIgVHJ1c3RlZCBSb290IFN0b3JlIChgdHJ1ZWAsIHRoZSBkZWZhdWx0IG9wdGlvbikgb3JcbiAqIHRoZSBLZXljaGFpbiAoYGZhbHNlYCkuIE9uIGVudmlyb25tZW50cyBvdGhlciB0aGFuIFhjb2RlIDExLjQrIFNpbXVsYXRvciB0aGlzXG4gKiBvcHRpb24gaXMgaWdub3JlZC5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIGEgY3VzdG9tIGNlcnRpZmljYXRlIG9udG8gdGhlIGRldmljZS5cbiAqIFNpbmNlIFhjb2RlIFNESyAxMS40IEFwcGxlIGhhcyBhZGRlZCBhIGRlZGljYXRlZCBzaW1jdGwgc3ViY29tbWFuZCB0byBxdWlja2x5IGhhbmRsZVxuICogY2VydGlmaWNhdGVzIG9uIFNpbXVsYXRvciBvdmVyIENMSS5cbiAqIE9uIHJlYWwgZGV2aWNlcyBvciBzaW11bGF0b3JzIGJlZm9yZSBYY29kZSAxMS40IFNES1xuICogQXBwbGUgcHJvdmlkZXMgbm8gb2ZmaWNpYWwgd2F5IHRvIGRvIGl0IHZpYSB0aGUgY29tbWFuZCBsaW5lLlxuICogSW4gc3VjaCBjYXNlIChhbmQgYWxzbyBhcyBhIGZhbGxiYWNrIGlmIENMSSBzZXR1cCBmYWlscylcbiAqIHRoaXMgbWV0aG9kIHRyaWVzIHRvIHdyYXAgdGhlIGNlcnRpZmljYXRlIGludG8gLm1vYmlsZWNvbmZpZyBmb3JtYXRcbiAqIGFuZCB0aGVuIGRlcGxveXMgdGhlIHdyYXBwZWQgZmlsZSB0byB0aGUgaW50ZXJuYWwgSFRUUCBzZXJ2ZXIsXG4gKiBzbyBvbmUgY2FuIG9wZW4gaXQgdmlhIG1vYmlsZSBTYWZhcmkuXG4gKiBUaGVuIHRoZSBhbGdvcml0aG0gZ29lcyB0aHJvdWdoIHRoZSBwcm9maWxlIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUgYnlcbiAqIGNsaWNraW5nIHRoZSBuZWNlc3NhcnkgYnV0dG9ucyB1c2luZyBXZWJEcml2ZXJBZ2VudC5cbiAqXG4gKiBAcGFyYW0ge0NlcnRpZmljYXRlSW5zdGFsbGF0aW9uT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMgez9zdHJpbmd9IFRoZSBjb250ZW50IG9mIHRoZSBnZW5lcmF0ZWQgLm1vYmlsZWNvbmZpZyBmaWxlIGFzXG4gKiBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuIFRoaXMgY29uZmlnIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuICogSWYgdGhlIGNlcnRpZmljYXRlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZXQgdmlhIENMSSB0aGVuIG5vdGhpbmcgaXMgcmV0dXJuZWQuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjb250ZW50LFxuICAgIGNvbW1vbk5hbWUsXG4gICAgaXNSb290ID0gdHJ1ZSxcbiAgfSA9IG9wdHM7XG4gIGlmIChfLmlzRW1wdHkoY29udGVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NlcnRpZmljYXRlIGNvbnRlbnQgc2hvdWxkIG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gaXNSb290ID8gJ2FkZFJvb3RDZXJ0aWZpY2F0ZScgOiAnYWRkQ2VydGlmaWNhdGUnO1xuICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGxbbWV0aG9kTmFtZV0oXG4gICAgICAgIEJ1ZmZlci5mcm9tKGNvbnRlbnQsICdiYXNlNjQnKS50b1N0cmluZygpLCB7cmF3OiB0cnVlfVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlKTtcbiAgICAgIHRoaXMubG9nLmluZm8oYFRoZSBjZXJ0aWZpY2F0ZSBjYW5ub3QgYmUgaW5zdGFsbGVkIHZpYSBDTEkuIGAgK1xuICAgICAgICBgRmFsbGluZyBiYWNrIHRvIFVJLWJhc2VkIGRlcGxveW1lbnRgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFB5aWRldmljZSh0aGlzLm9wdHMudWRpZCk7XG4gICAgaWYgKGF3YWl0IGNsaWVudC5hc3NlcnRFeGlzdHMoZmFsc2UpKSB7XG4gICAgICBhd2FpdCBjbGllbnQuaW5zdGFsbFByb2ZpbGUoe3BheWxvYWQ6IEJ1ZmZlci5mcm9tKGNvbnRlbnQsICdiYXNlNjQnKX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdweWlkZXZpY2UgaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbS4gJyArXG4gICAgICAgICdGYWxsaW5nIGJhY2sgdG8gdGhlIChzbG93KSBVSS1iYXNlZCBpbnN0YWxsYXRpb24nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIGNvbnN0IHRtcFBvcnQgPSBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShIT1NUX1BPUlRfUkFOR0VbMF0sIEhPU1RfUE9SVF9SQU5HRVsxXSk7XG4gIGNvbnN0IGNvbmZpZ05hbWUgPSBgYXBwaXVtLiR7Q09ORklHX0VYVEVOU0lPTn1gO1xuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5yZXNvbHZlKHRtcFJvb3QsIGNvbmZpZ05hbWUpO1xuICBjb25zdCB0bXBTZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihhc3luYyBmdW5jdGlvbiAoXywgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnRmlsZSA9IGF3YWl0IGZzLnJlYWRGaWxlKGNvbmZpZ1BhdGgpO1xuICAgIHJlcy5lbmQoY29uZmlnRmlsZSk7XG4gIH0pO1xuICB0cnkge1xuICAgIGNvbnN0IGNlcnRCdWZmZXIgPSBCdWZmZXIuZnJvbShjb250ZW50LCAnYmFzZTY0Jyk7XG4gICAgY29uc3QgY24gPSBjb21tb25OYW1lIHx8IGF3YWl0IGV4dHJhY3RDb21tb25OYW1lKGNlcnRCdWZmZXIpO1xuICAgIGNvbnN0IG1vYmlsZUNvbmZpZyA9IHRvTW9iaWxlQ29uZmlnKGNlcnRCdWZmZXIsIGNuKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcGxpc3QudXBkYXRlUGxpc3RGaWxlKGNvbmZpZ1BhdGgsIG1vYmlsZUNvbmZpZywgZmFsc2UsIGZhbHNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHN0b3JlIHRoZSBnZW5lcmF0ZWQgY29uZmlnIGFzICcke2NvbmZpZ1BhdGh9Jy4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBob3N0ID0gb3MuaG9zdG5hbWUoKTtcbiAgICAgIGNvbnN0IGNlcnRVcmwgPSBgaHR0cDovLyR7aG9zdH06JHt0bXBQb3J0fS8ke2NvbmZpZ05hbWV9YDtcbiAgICAgIGF3YWl0IHRtcFNlcnZlci5saXN0ZW4odG1wUG9ydCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIChhd2FpdCBjaGVja1BvcnRTdGF0dXModG1wUG9ydCwgaG9zdCkpID09PSAnb3Blbic7XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgd2FpdE1zOiBUTVBTRVJWRVJfU1RBUlRVUF9USU1FT1VULFxuICAgICAgICAgIGludGVydmFsTXM6IDMwMCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgdGVtcG9yYXJ5IHdlYiBzZXJ2ZXIgaXMgcnVubmluZyBhdCBodHRwOi8vJHtob3N0fToke3RtcFBvcnR9YCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHRlbXBvcmFyeSB3ZWIgc2VydmVyIGNhbm5vdCBiZSBzdGFydGVkIGF0IGh0dHA6Ly8ke2hvc3R9OiR7dG1wUG9ydH0uYCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvdXJsJywgJ1BPU1QnLCB7dXJsOiBjZXJ0VXJsfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgICAgICAgICAvLyBUaGUgY29tbWFuZCBhYm92ZSBkb2VzIG5vdCBhbHdheXMgd29yayBvbiByZWFsIGRldmljZXNcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0VXJsKGNlcnRVcmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLm9wZW5VcmwoY2VydFVybCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBpc0NlcnRBbHJlYWR5SW5zdGFsbGVkID0gZmFsc2U7XG4gICAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgICBpZiAoYXdhaXQgaW5zdGFsbFBvc3QxMjJDZXJ0aWZpY2F0ZSh0aGlzLCBjbikpIHtcbiAgICAgICAgICBhd2FpdCBjbGlja0VsZW1lbnQodGhpcywgU2V0dGluZ3MuUHJvZmlsZSk7XG4gICAgICAgICAgYXdhaXQgdHJ1c3RDZXJ0aWZpY2F0ZUluUHJlZmVyZW5jZXModGhpcywgY24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYXdhaXQgaW5zdGFsbFByZTEyMkNlcnRpZmljYXRlKHRoaXMpKSB7XG4gICAgICAgICAgYXdhaXQgY2xpY2tFbGVtZW50KHRoaXMsIEJ1dHRvbi5SZXR1cm5fdG9fU2V0dGluZ3MpO1xuICAgICAgICAgIGF3YWl0IHRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzKHRoaXMsIGNuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0NlcnRBbHJlYWR5SW5zdGFsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ2VydEFscmVhZHlJbnN0YWxsZWQpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgSXQgbG9va3MgbGlrZSB0aGUgJyR7Y259JyBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiBhbHJlYWR5IGFkZGVkIHRvIHRoZSBDQSByb290YCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFjdGl2YXRlQXBwKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmVzdG9yZSB0aGUgYXBwbGljYXRpb24gJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoYXdhaXQgdXRpbC50b0luTWVtb3J5QmFzZTY0KGNvbmZpZ1BhdGgpKS50b1N0cmluZygpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHRtcFNlcnZlci5jbG9zZSgpO1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcyk7XG5leHBvcnQgeyBjb21tYW5kcywgcGFyc2VDb21tb25OYW1lIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvY2VydGlmaWNhdGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==