appium-adb 8.18.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,7 +17,7 @@ var _path = _interopRequireDefault(require("path"));
17
17
 
18
18
  var _lodash = _interopRequireDefault(require("lodash"));
19
19
 
20
- var _appiumSupport = require("appium-support");
20
+ var _support = require("@appium/support");
21
21
 
22
22
  var _lruCache = _interopRequireDefault(require("lru-cache"));
23
23
 
@@ -33,7 +33,7 @@ const LANGUAGE_APK = lang => `base-${lang}.apk`;
33
33
 
34
34
  const APKS_CACHE = new _lruCache.default({
35
35
  max: 10,
36
- dispose: (apksHash, extractedFilesRoot) => _appiumSupport.fs.rimraf(extractedFilesRoot)
36
+ dispose: (apksHash, extractedFilesRoot) => _support.fs.rimraf(extractedFilesRoot)
37
37
  });
38
38
  const APKS_CACHE_GUARD = new _asyncLock.default();
39
39
  const BUNDLETOOL_TIMEOUT_MS = 4 * 60 * 1000;
@@ -44,11 +44,11 @@ process.on('exit', () => {
44
44
 
45
45
  const paths = APKS_CACHE.values();
46
46
 
47
- _logger.default.debug(`Performing cleanup of ${paths.length} cached .apks ` + _appiumSupport.util.pluralize('package', paths.length));
47
+ _logger.default.debug(`Performing cleanup of ${paths.length} cached .apks ` + _support.util.pluralize('package', paths.length));
48
48
 
49
49
  for (const appPath of paths) {
50
50
  try {
51
- _appiumSupport.fs.rimrafSync(appPath);
51
+ _support.fs.rimrafSync(appPath);
52
52
  } catch (e) {
53
53
  _logger.default.warn(e.message);
54
54
  }
@@ -61,21 +61,21 @@ async function extractFromApks(apks, dstPath) {
61
61
  }
62
62
 
63
63
  return await APKS_CACHE_GUARD.acquire(apks, async () => {
64
- const apksHash = await _appiumSupport.fs.hash(apks);
64
+ const apksHash = await _support.fs.hash(apks);
65
65
 
66
66
  _logger.default.debug(`Calculated '${apks}' hash: ${apksHash}`);
67
67
 
68
68
  if (APKS_CACHE.has(apksHash)) {
69
69
  const resultPath = _path.default.resolve(APKS_CACHE.get(apksHash), ...dstPath);
70
70
 
71
- if (await _appiumSupport.fs.exists(resultPath)) {
71
+ if (await _support.fs.exists(resultPath)) {
72
72
  return resultPath;
73
73
  }
74
74
 
75
75
  APKS_CACHE.del(apksHash);
76
76
  }
77
77
 
78
- const tmpRoot = await _appiumSupport.tempDir.openDir();
78
+ const tmpRoot = await _support.tempDir.openDir();
79
79
 
80
80
  _logger.default.debug(`Unpacking application bundle at '${apks}' to '${tmpRoot}'`);
81
81
 
@@ -83,7 +83,7 @@ async function extractFromApks(apks, dstPath) {
83
83
 
84
84
  const resultPath = _path.default.resolve(tmpRoot, ...dstPath);
85
85
 
86
- if (!(await _appiumSupport.fs.exists(resultPath))) {
86
+ if (!(await _support.fs.exists(resultPath))) {
87
87
  throw new Error(`${dstPath.join(_path.default.sep)} cannot be found in '${apks}' bundle. ` + `Does the archive contain a valid application bundle?`);
88
88
  }
89
89
 
@@ -217,4 +217,4 @@ var _default = apksUtilsMethods;
217
217
  exports.default = _default;require('source-map-support').install();
218
218
 
219
219
 
220
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hcGtzLXV0aWxzLmpzIl0sIm5hbWVzIjpbIkJBU0VfQVBLIiwiTEFOR1VBR0VfQVBLIiwibGFuZyIsIkFQS1NfQ0FDSEUiLCJMUlUiLCJtYXgiLCJkaXNwb3NlIiwiYXBrc0hhc2giLCJleHRyYWN0ZWRGaWxlc1Jvb3QiLCJmcyIsInJpbXJhZiIsIkFQS1NfQ0FDSEVfR1VBUkQiLCJBc3luY0xvY2siLCJCVU5ETEVUT09MX1RJTUVPVVRfTVMiLCJwcm9jZXNzIiwib24iLCJpdGVtQ291bnQiLCJwYXRocyIsInZhbHVlcyIsImxvZyIsImRlYnVnIiwibGVuZ3RoIiwidXRpbCIsInBsdXJhbGl6ZSIsImFwcFBhdGgiLCJyaW1yYWZTeW5jIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiZXh0cmFjdEZyb21BcGtzIiwiYXBrcyIsImRzdFBhdGgiLCJfIiwiaXNBcnJheSIsImFjcXVpcmUiLCJoYXNoIiwiaGFzIiwicmVzdWx0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0IiwiZXhpc3RzIiwiZGVsIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiRXJyb3IiLCJqb2luIiwic2VwIiwic2V0IiwiYXBrc1V0aWxzTWV0aG9kcyIsImV4ZWNCdW5kbGV0b29sIiwiYXJncyIsImVycm9yTXNnIiwiaW5pdEJ1bmRsZXRvb2wiLCJiaW5hcmllcyIsImJ1bmRsZXRvb2wiLCJlbnYiLCJhZGJQb3J0IiwiQU5EUk9JRF9BREJfU0VSVkVSX1BPUlQiLCJhZGJIb3N0IiwiQU5EUk9JRF9BREJfU0VSVkVSX0hPU1QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3Rkb3V0IiwidGltZW91dCIsInRydW5jYXRlIiwic3RkZXJyIiwiZ2V0RGV2aWNlU3BlYyIsInNwZWNMb2NhdGlvbiIsImV4ZWN1dGFibGUiLCJjdXJEZXZpY2VJZCIsImluc3RhbGxNdWx0aXBsZUFwa3MiLCJhcGtQYXRoc1RvSW5zdGFsbCIsIm9wdGlvbnMiLCJpbnN0YWxsQXJncyIsImdldEFwaUxldmVsIiwiYWRiRXhlYyIsInRpbWVvdXRDYXBOYW1lIiwiaW5zdGFsbEFwa3MiLCJncmFudFBlcm1pc3Npb25zIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJBUEtTX0lOU1RBTExfVElNRU9VVCIsInB1c2giLCJ0YXNrcyIsImJhc2VuYW1lIiwiZ2V0QXBrSW5mbyIsImFwa0luZm8iLCJCIiwiYWxsIiwiZ3JhbnRBbGxQZXJtaXNzaW9ucyIsIm5hbWUiLCJleHRyYWN0QmFzZUFwayIsImV4dHJhY3RMYW5ndWFnZUFwayIsImxhbmd1YWdlIiwiaW5mbyIsImRlZmF1bHRMYW5ndWFnZXMiLCJpZ24iLCJpc1Rlc3RQYWNrYWdlT25seUVycm9yIiwib3V0cHV0IiwidGVzdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsaUJBQWpCOztBQUNBLE1BQU1DLFlBQVksR0FBSUMsSUFBRCxJQUFXLFFBQU9BLElBQUssTUFBNUM7O0FBQ0EsTUFBTUMsVUFBVSxHQUFHLElBQUlDLGlCQUFKLENBQVE7QUFDekJDLEVBQUFBLEdBQUcsRUFBRSxFQURvQjtBQUV6QkMsRUFBQUEsT0FBTyxFQUFFLENBQUNDLFFBQUQsRUFBV0Msa0JBQVgsS0FBa0NDLGtCQUFHQyxNQUFILENBQVVGLGtCQUFWO0FBRmxCLENBQVIsQ0FBbkI7QUFJQSxNQUFNRyxnQkFBZ0IsR0FBRyxJQUFJQyxrQkFBSixFQUF6QjtBQUNBLE1BQU1DLHFCQUFxQixHQUFHLElBQUksRUFBSixHQUFTLElBQXZDO0FBRUFDLE9BQU8sQ0FBQ0MsRUFBUixDQUFXLE1BQVgsRUFBbUIsTUFBTTtBQUN2QixNQUFJWixVQUFVLENBQUNhLFNBQVgsS0FBeUIsQ0FBN0IsRUFBZ0M7QUFDOUI7QUFDRDs7QUFFRCxRQUFNQyxLQUFLLEdBQUdkLFVBQVUsQ0FBQ2UsTUFBWCxFQUFkOztBQUNBQyxrQkFBSUMsS0FBSixDQUFXLHlCQUF3QkgsS0FBSyxDQUFDSSxNQUFPLGdCQUF0QyxHQUNSQyxvQkFBS0MsU0FBTCxDQUFlLFNBQWYsRUFBMEJOLEtBQUssQ0FBQ0ksTUFBaEMsQ0FERjs7QUFFQSxPQUFLLE1BQU1HLE9BQVgsSUFBc0JQLEtBQXRCLEVBQTZCO0FBQzNCLFFBQUk7QUFFRlIsd0JBQUdnQixVQUFILENBQWNELE9BQWQ7QUFDRCxLQUhELENBR0UsT0FBT0UsQ0FBUCxFQUFVO0FBQ1ZQLHNCQUFJUSxJQUFKLENBQVNELENBQUMsQ0FBQ0UsT0FBWDtBQUNEO0FBQ0Y7QUFDRixDQWhCRDs7QUErQkEsZUFBZUMsZUFBZixDQUFnQ0MsSUFBaEMsRUFBc0NDLE9BQXRDLEVBQStDO0FBQzdDLE1BQUksQ0FBQ0MsZ0JBQUVDLE9BQUYsQ0FBVUYsT0FBVixDQUFMLEVBQXlCO0FBQ3ZCQSxJQUFBQSxPQUFPLEdBQUcsQ0FBQ0EsT0FBRCxDQUFWO0FBQ0Q7O0FBRUQsU0FBTyxNQUFNcEIsZ0JBQWdCLENBQUN1QixPQUFqQixDQUF5QkosSUFBekIsRUFBK0IsWUFBWTtBQUl0RCxVQUFNdkIsUUFBUSxHQUFHLE1BQU1FLGtCQUFHMEIsSUFBSCxDQUFRTCxJQUFSLENBQXZCOztBQUNBWCxvQkFBSUMsS0FBSixDQUFXLGVBQWNVLElBQUssV0FBVXZCLFFBQVMsRUFBakQ7O0FBRUEsUUFBSUosVUFBVSxDQUFDaUMsR0FBWCxDQUFlN0IsUUFBZixDQUFKLEVBQThCO0FBQzVCLFlBQU04QixVQUFVLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYXBDLFVBQVUsQ0FBQ3FDLEdBQVgsQ0FBZWpDLFFBQWYsQ0FBYixFQUF1QyxHQUFHd0IsT0FBMUMsQ0FBbkI7O0FBQ0EsVUFBSSxNQUFNdEIsa0JBQUdnQyxNQUFILENBQVVKLFVBQVYsQ0FBVixFQUFpQztBQUMvQixlQUFPQSxVQUFQO0FBQ0Q7O0FBQ0RsQyxNQUFBQSxVQUFVLENBQUN1QyxHQUFYLENBQWVuQyxRQUFmO0FBQ0Q7O0FBRUQsVUFBTW9DLE9BQU8sR0FBRyxNQUFNQyx1QkFBUUMsT0FBUixFQUF0Qjs7QUFDQTFCLG9CQUFJQyxLQUFKLENBQVcsb0NBQW1DVSxJQUFLLFNBQVFhLE9BQVEsR0FBbkU7O0FBQ0EsVUFBTSx3QkFBVWIsSUFBVixFQUFnQmEsT0FBaEIsQ0FBTjs7QUFDQSxVQUFNTixVQUFVLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYUksT0FBYixFQUFzQixHQUFHWixPQUF6QixDQUFuQjs7QUFDQSxRQUFJLEVBQUMsTUFBTXRCLGtCQUFHZ0MsTUFBSCxDQUFVSixVQUFWLENBQVAsQ0FBSixFQUFrQztBQUNoQyxZQUFNLElBQUlTLEtBQUosQ0FBVyxHQUFFZixPQUFPLENBQUNnQixJQUFSLENBQWFULGNBQUtVLEdBQWxCLENBQXVCLHdCQUF1QmxCLElBQUssWUFBdEQsR0FDYixzREFERyxDQUFOO0FBRUQ7O0FBQ0QzQixJQUFBQSxVQUFVLENBQUM4QyxHQUFYLENBQWUxQyxRQUFmLEVBQXlCb0MsT0FBekI7QUFDQSxXQUFPTixVQUFQO0FBQ0QsR0F6QlksQ0FBYjtBQTBCRDs7QUFFRCxJQUFJYSxnQkFBZ0IsR0FBRyxFQUF2Qjs7QUFXQUEsZ0JBQWdCLENBQUNDLGNBQWpCLEdBQWtDLGVBQWVBLGNBQWYsQ0FBK0JDLElBQS9CLEVBQXFDQyxRQUFyQyxFQUErQztBQUMvRSxRQUFNLEtBQUtDLGNBQUwsRUFBTjtBQUNBRixFQUFBQSxJQUFJLEdBQUcsQ0FDTCxNQURLLEVBQ0csS0FBS0csUUFBTCxDQUFjQyxVQURqQixFQUVMLEdBQUdKLElBRkUsQ0FBUDtBQUlBLFFBQU1LLEdBQUcsR0FBRzNDLE9BQU8sQ0FBQzJDLEdBQXBCOztBQUNBLE1BQUksS0FBS0MsT0FBVCxFQUFrQjtBQUNoQkQsSUFBQUEsR0FBRyxDQUFDRSx1QkFBSixHQUErQixHQUFFLEtBQUtELE9BQVEsRUFBOUM7QUFDRDs7QUFDRCxNQUFJLEtBQUtFLE9BQVQsRUFBa0I7QUFDaEJILElBQUFBLEdBQUcsQ0FBQ0ksdUJBQUosR0FBOEIsS0FBS0QsT0FBbkM7QUFDRDs7QUFDRHpDLGtCQUFJQyxLQUFKLENBQVcsd0NBQXVDMEMsSUFBSSxDQUFDQyxTQUFMLENBQWVYLElBQWYsQ0FBcUIsRUFBdkU7O0FBQ0EsTUFBSVksTUFBSjs7QUFDQSxNQUFJO0FBQ0YsS0FBQztBQUFDQSxNQUFBQTtBQUFELFFBQVcsTUFBTSx3QkFBSyxNQUFNLDRCQUFYLEVBQTJCWixJQUEzQixFQUFpQztBQUNqREssTUFBQUEsR0FEaUQ7QUFFakRRLE1BQUFBLE9BQU8sRUFBRXBEO0FBRndDLEtBQWpDLENBQWxCOztBQUlBTSxvQkFBSUMsS0FBSixDQUFXLG1CQUFrQlksZ0JBQUVrQyxRQUFGLENBQVdGLE1BQVgsRUFBbUI7QUFBQzNDLE1BQUFBLE1BQU0sRUFBRTtBQUFULEtBQW5CLENBQWtDLEVBQS9EOztBQUNBLFdBQU8yQyxNQUFQO0FBQ0QsR0FQRCxDQU9FLE9BQU90QyxDQUFQLEVBQVU7QUFDVixRQUFJQSxDQUFDLENBQUNzQyxNQUFOLEVBQWM7QUFDWjdDLHNCQUFJQyxLQUFKLENBQVcsbUJBQWtCTSxDQUFDLENBQUNzQyxNQUFPLEVBQXRDO0FBQ0Q7O0FBQ0QsUUFBSXRDLENBQUMsQ0FBQ3lDLE1BQU4sRUFBYztBQUNaaEQsc0JBQUlDLEtBQUosQ0FBVyxtQkFBa0JNLENBQUMsQ0FBQ3lDLE1BQU8sRUFBdEM7QUFDRDs7QUFDRCxVQUFNLElBQUlyQixLQUFKLENBQVcsR0FBRU8sUUFBUyxxQkFBb0IzQixDQUFDLENBQUNFLE9BQVEsRUFBcEQsQ0FBTjtBQUNEO0FBQ0YsQ0EvQkQ7O0FBc0NBc0IsZ0JBQWdCLENBQUNrQixhQUFqQixHQUFpQyxlQUFlQSxhQUFmLENBQThCQyxZQUE5QixFQUE0QztBQUMzRSxRQUFNakIsSUFBSSxHQUFHLENBQ1gsaUJBRFcsRUFFWCxPQUZXLEVBRUYsS0FBS2tCLFVBQUwsQ0FBZ0JoQyxJQUZkLEVBR1gsYUFIVyxFQUdJLEtBQUtpQyxXQUhULEVBSVgsVUFKVyxFQUlDRixZQUpELENBQWI7O0FBTUFsRCxrQkFBSUMsS0FBSixDQUFXLG9DQUFtQyxLQUFLbUQsV0FBWSxHQUEvRDs7QUFDQSxRQUFNLEtBQUtwQixjQUFMLENBQW9CQyxJQUFwQixFQUEwQixpQ0FBMUIsQ0FBTjtBQUNBLFNBQU9pQixZQUFQO0FBQ0QsQ0FWRDs7QUFtQ0FuQixnQkFBZ0IsQ0FBQ3NCLG1CQUFqQixHQUF1QyxlQUFlQSxtQkFBZixDQUFvQ0MsaUJBQXBDLEVBQXVEQyxPQUFPLEdBQUcsRUFBakUsRUFBcUU7QUFDMUcsUUFBTUMsV0FBVyxHQUFHLCtCQUFpQixNQUFNLEtBQUtDLFdBQUwsRUFBdkIsRUFBMkNGLE9BQTNDLENBQXBCO0FBQ0EsU0FBTyxNQUFNLEtBQUtHLE9BQUwsQ0FBYSxDQUFDLGtCQUFELEVBQXFCLEdBQUdGLFdBQXhCLEVBQXFDLEdBQUdGLGlCQUF4QyxDQUFiLEVBQXlFO0FBQ3BGUixJQUFBQSxPQUFPLEVBQUVTLE9BQU8sQ0FBQ1QsT0FEbUU7QUFFcEZhLElBQUFBLGNBQWMsRUFBRUosT0FBTyxDQUFDSTtBQUY0RCxHQUF6RSxDQUFiO0FBSUQsQ0FORDs7QUE0QkE1QixnQkFBZ0IsQ0FBQzZCLFdBQWpCLEdBQStCLGVBQWVBLFdBQWYsQ0FBNEJqRCxJQUE1QixFQUFrQzRDLE9BQU8sR0FBRyxFQUE1QyxFQUFnRDtBQUM3RSxRQUFNO0FBQ0pNLElBQUFBLGdCQURJO0FBRUpDLElBQUFBLGlCQUZJO0FBR0poQixJQUFBQTtBQUhJLE1BSUZTLE9BSko7QUFNQSxRQUFNdEIsSUFBSSxHQUFHLENBQ1gsY0FEVyxFQUVYLE9BRlcsRUFFRixLQUFLa0IsVUFBTCxDQUFnQmhDLElBRmQsRUFHWCxRQUhXLEVBR0RSLElBSEMsRUFJWCxrQkFKVyxFQUlTbUMsT0FBTyxJQUFJaUIsNkJBSnBCLEVBS1gsYUFMVyxFQUtJLEtBQUtYLFdBTFQsQ0FBYjs7QUFPQSxNQUFJVSxpQkFBSixFQUF1QjtBQUNyQjdCLElBQUFBLElBQUksQ0FBQytCLElBQUwsQ0FBVSxtQkFBVjtBQUNEOztBQUNELFFBQU1DLEtBQUssR0FBRyxDQUNaLEtBQUtqQyxjQUFMLENBQW9CQyxJQUFwQixFQUEyQixtQkFBa0JkLGNBQUsrQyxRQUFMLENBQWN2RCxJQUFkLENBQW9CLG1CQUFrQixLQUFLeUMsV0FBWSxFQUFwRyxDQURZLENBQWQ7O0FBR0EsTUFBSVMsZ0JBQUosRUFBc0I7QUFDcEJJLElBQUFBLEtBQUssQ0FBQ0QsSUFBTixDQUFXLEtBQUtHLFVBQUwsQ0FBZ0J4RCxJQUFoQixDQUFYO0FBQ0Q7O0FBQ0QsUUFBTSxHQUFHeUQsT0FBSCxJQUFjLE1BQU1DLGtCQUFFQyxHQUFGLENBQU1MLEtBQU4sQ0FBMUI7O0FBQ0EsTUFBSUosZ0JBQWdCLElBQUlPLE9BQXhCLEVBQWlDO0FBRS9CLFVBQU0sS0FBS0csbUJBQUwsQ0FBeUJILE9BQU8sQ0FBQ0ksSUFBakMsQ0FBTjtBQUNEO0FBQ0YsQ0E1QkQ7O0FBcUNBekMsZ0JBQWdCLENBQUMwQyxjQUFqQixHQUFrQyxlQUFlQSxjQUFmLENBQStCOUQsSUFBL0IsRUFBcUM7QUFDckUsU0FBTyxNQUFNRCxlQUFlLENBQUNDLElBQUQsRUFBTyxDQUFDLFFBQUQsRUFBVzlCLFFBQVgsQ0FBUCxDQUE1QjtBQUNELENBRkQ7O0FBZUFrRCxnQkFBZ0IsQ0FBQzJDLGtCQUFqQixHQUFzQyxlQUFlQSxrQkFBZixDQUFtQy9ELElBQW5DLEVBQXlDZ0UsUUFBUSxHQUFHLElBQXBELEVBQTBEO0FBQzlGLE1BQUlBLFFBQUosRUFBYztBQUNaLFFBQUk7QUFDRixhQUFPLE1BQU1qRSxlQUFlLENBQUNDLElBQUQsRUFBTyxDQUFDLFFBQUQsRUFBVzdCLFlBQVksQ0FBQzZGLFFBQUQsQ0FBdkIsQ0FBUCxDQUE1QjtBQUNELEtBRkQsQ0FFRSxPQUFPcEUsQ0FBUCxFQUFVO0FBQ1ZQLHNCQUFJQyxLQUFKLENBQVVNLENBQUMsQ0FBQ0UsT0FBWjs7QUFDQVQsc0JBQUk0RSxJQUFKLENBQVUsK0RBQThEakUsSUFBSyxXQUFwRSxHQUNOLG9DQURIOztBQUVBLGFBQU8sTUFBTSxLQUFLOEQsY0FBTCxDQUFvQjlELElBQXBCLENBQWI7QUFDRDtBQUNGOztBQUVELFFBQU1rRSxnQkFBZ0IsR0FBRyxDQUFDLElBQUQsRUFBTyxPQUFQLENBQXpCOztBQUNBLE9BQUssTUFBTTlGLElBQVgsSUFBbUI4RixnQkFBbkIsRUFBcUM7QUFDbkMsUUFBSTtBQUNGLGFBQU8sTUFBTW5FLGVBQWUsQ0FBQ0MsSUFBRCxFQUFPLENBQUMsUUFBRCxFQUFXN0IsWUFBWSxDQUFDQyxJQUFELENBQXZCLENBQVAsQ0FBNUI7QUFDRCxLQUZELENBRUUsT0FBTytGLEdBQVAsRUFBWSxDQUFFO0FBQ2pCOztBQUVEOUUsa0JBQUk0RSxJQUFKLENBQVUsdURBQXNEakMsSUFBSSxDQUFDQyxTQUFMLENBQWVpQyxnQkFBZixDQUFpQyxJQUF4RixHQUNOLGlDQURIOztBQUVBLFNBQU8sTUFBTSxLQUFLSixjQUFMLENBQW9COUQsSUFBcEIsQ0FBYjtBQUNELENBdEJEOztBQXdCQW9CLGdCQUFnQixDQUFDZ0Qsc0JBQWpCLEdBQTBDLFVBQVVDLE1BQVYsRUFBa0I7QUFDMUQsU0FBTywrQkFBK0JDLElBQS9CLENBQW9DRCxNQUFwQyxDQUFQO0FBQ0QsQ0FGRDs7ZUFJZWpELGdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcywgdGVtcERpciwgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7XG4gIGdldEphdmFGb3JPcywgdW56aXBGaWxlLCBidWlsZEluc3RhbGxBcmdzLCBBUEtTX0lOU1RBTExfVElNRU9VVFxufSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IEJBU0VfQVBLID0gJ2Jhc2UtbWFzdGVyLmFwayc7XG5jb25zdCBMQU5HVUFHRV9BUEsgPSAobGFuZykgPT4gYGJhc2UtJHtsYW5nfS5hcGtgO1xuY29uc3QgQVBLU19DQUNIRSA9IG5ldyBMUlUoe1xuICBtYXg6IDEwLFxuICBkaXNwb3NlOiAoYXBrc0hhc2gsIGV4dHJhY3RlZEZpbGVzUm9vdCkgPT4gZnMucmltcmFmKGV4dHJhY3RlZEZpbGVzUm9vdCksXG59KTtcbmNvbnN0IEFQS1NfQ0FDSEVfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5jb25zdCBCVU5ETEVUT09MX1RJTUVPVVRfTVMgPSA0ICogNjAgKiAxMDAwO1xuXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBpZiAoQVBLU19DQUNIRS5pdGVtQ291bnQgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXRocyA9IEFQS1NfQ0FDSEUudmFsdWVzKCk7XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBjbGVhbnVwIG9mICR7cGF0aHMubGVuZ3RofSBjYWNoZWQgLmFwa3MgYCArXG4gICAgdXRpbC5wbHVyYWxpemUoJ3BhY2thZ2UnLCBwYXRocy5sZW5ndGgpKTtcbiAgZm9yIChjb25zdCBhcHBQYXRoIG9mIHBhdGhzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFzeW5jaHJvbm91cyBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBpbiBvbkV4aXQgaGFuZGxlclxuICAgICAgZnMucmltcmFmU3luYyhhcHBQYXRoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHBhcnRpY3VsYXIgYXBrcyBwYWNrYWdlIGludG8gYSB0ZW1wb3JhcnkgZm9sZGVyLFxuICogZmluZHMgYW5kIHJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSBjb250YWluZWQgaW4gdGhpcyBhcGsuXG4gKiBUaGUgcmVzdWx0aW5nIHRlbXBvcmFyeSBwYXRoLCB3aGVyZSB0aGUgLmFwa3MgZmlsZSBoYXMgYmVlbiBleHRyYWN0ZWQsXG4gKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBpbnRlcm5hbCBMUlUgY2FjaGUgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrcyAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGtzIGZpbGVcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PFN0cmluZz59IGRzdFBhdGggLSBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gZmlsZSxcbiAqIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGV4dHJhY3RlZCwgd2hlcmUgZWFjaCBwYXRoIGNvbXBvbmVudCBpcyBhbiBhcnJheSBpdGVtXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBGdWxsIHBhdGggdG8gdGhlIGV4dHJhY3RlZCBmaWxlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHJlcXVlc3RlZCBpdGVtIGRvZXMgbm90IGV4aXN0IGluIHRoZSBleHRyYWN0ZWQgYXJjaGl2ZSBvciB0aGUgcHJvdmlkZXNcbiAqIGFwa3MgZmlsZSBpcyBub3QgYSB2YWxpZCBidW5kbGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEZyb21BcGtzIChhcGtzLCBkc3RQYXRoKSB7XG4gIGlmICghXy5pc0FycmF5KGRzdFBhdGgpKSB7XG4gICAgZHN0UGF0aCA9IFtkc3RQYXRoXTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBBUEtTX0NBQ0hFX0dVQVJELmFjcXVpcmUoYXBrcywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEl0IG1pZ2h0IGJlIHRoYXQgdGhlIG9yaWdpbmFsIGZpbGUgaGFzIGJlZW4gcmVwbGFjZWQsXG4gICAgLy8gc28gd2UgbmVlZCB0byBrZWVwIHRoZSBoYXNoIHN1bXMgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGZpbGUgcGF0aHNcbiAgICAvLyBhcyBjYWNoaW5nIGtleXNcbiAgICBjb25zdCBhcGtzSGFzaCA9IGF3YWl0IGZzLmhhc2goYXBrcyk7XG4gICAgbG9nLmRlYnVnKGBDYWxjdWxhdGVkICcke2Fwa3N9JyBoYXNoOiAke2Fwa3NIYXNofWApO1xuXG4gICAgaWYgKEFQS1NfQ0FDSEUuaGFzKGFwa3NIYXNoKSkge1xuICAgICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShBUEtTX0NBQ0hFLmdldChhcGtzSGFzaCksIC4uLmRzdFBhdGgpO1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICAgIH1cbiAgICAgIEFQS1NfQ0FDSEUuZGVsKGFwa3NIYXNoKTtcbiAgICB9XG5cbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgbG9nLmRlYnVnKGBVbnBhY2tpbmcgYXBwbGljYXRpb24gYnVuZGxlIGF0ICcke2Fwa3N9JyB0byAnJHt0bXBSb290fSdgKTtcbiAgICBhd2FpdCB1bnppcEZpbGUoYXBrcywgdG1wUm9vdCk7XG4gICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAuLi5kc3RQYXRoKTtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2RzdFBhdGguam9pbihwYXRoLnNlcCl9IGNhbm5vdCBiZSBmb3VuZCBpbiAnJHthcGtzfScgYnVuZGxlLiBgICtcbiAgICAgICAgYERvZXMgdGhlIGFyY2hpdmUgY29udGFpbiBhIHZhbGlkIGFwcGxpY2F0aW9uIGJ1bmRsZT9gKTtcbiAgICB9XG4gICAgQVBLU19DQUNIRS5zZXQoYXBrc0hhc2gsIHRtcFJvb3QpO1xuICAgIHJldHVybiByZXN1bHRQYXRoO1xuICB9KTtcbn1cblxubGV0IGFwa3NVdGlsc01ldGhvZHMgPSB7fTtcblxuLyoqXG4gKiBFeGVjdXRlcyBidW5kbGV0b29sIHV0aWxpdHkgd2l0aCBnaXZlbiBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIGFjdHVhbCBzdGRvdXRcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFN0cmluZz59IGFyZ3MgLSB0aGUgbGlzdCBvZiBidW5kbGV0b29sIGFyZ3VtZW50c1xuICogQHBhcmFtIHtzdHJpbmd9IGVycm9yTXNnIC0gVGhlIGN1c3RvbWl6ZWQgZXJyb3IgbWVzc2FnZSBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBhY3R1YWwgY29tbWFuZCBzdGRvdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBidW5kbGV0b29sIGphciBkb2VzIG5vdCBleGlzdCBpbiBQQVRIIG9yIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZVxuICogZXhlY3V0aW5nIGl0XG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXhlY0J1bmRsZXRvb2wgPSBhc3luYyBmdW5jdGlvbiBleGVjQnVuZGxldG9vbCAoYXJncywgZXJyb3JNc2cpIHtcbiAgYXdhaXQgdGhpcy5pbml0QnVuZGxldG9vbCgpO1xuICBhcmdzID0gW1xuICAgICctamFyJywgdGhpcy5iaW5hcmllcy5idW5kbGV0b29sLFxuICAgIC4uLmFyZ3NcbiAgXTtcbiAgY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG4gIGlmICh0aGlzLmFkYlBvcnQpIHtcbiAgICBlbnYuQU5EUk9JRF9BREJfU0VSVkVSX1BPUlQgPSBgJHt0aGlzLmFkYlBvcnR9YDtcbiAgfVxuICBpZiAodGhpcy5hZGJIb3N0KSB7XG4gICAgZW52LkFORFJPSURfQURCX1NFUlZFUl9IT1NUID0gdGhpcy5hZGJIb3N0O1xuICB9XG4gIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIGJ1bmRsZXRvb2wgd2l0aCBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9YCk7XG4gIGxldCBzdGRvdXQ7XG4gIHRyeSB7XG4gICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhhd2FpdCBnZXRKYXZhRm9yT3MoKSwgYXJncywge1xuICAgICAgZW52LFxuICAgICAgdGltZW91dDogQlVORExFVE9PTF9USU1FT1VUX01TLFxuICAgIH0pKTtcbiAgICBsb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICByZXR1cm4gc3Rkb3V0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuc3Rkb3V0KSB7XG4gICAgICBsb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke2Uuc3Rkb3V0fWApO1xuICAgIH1cbiAgICBpZiAoZS5zdGRlcnIpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29tbWFuZCBzdGRlcnI6ICR7ZS5zdGRlcnJ9YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvck1zZ30uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3BlY0xvY2F0aW9uIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgZ2VuZXJhdGVkIGRldmljZSBzcGVjIGxvY2F0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc2FtZSBgc3BlY0xvY2F0aW9uYCB2YWx1ZVxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXRyaWV2ZSB0aGUgc3BlYyBmb3IgdGhlIGN1cnJlbnQgZGV2aWNlXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZ2V0RGV2aWNlU3BlYyA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZVNwZWMgKHNwZWNMb2NhdGlvbikge1xuICBjb25zdCBhcmdzID0gW1xuICAgICdnZXQtZGV2aWNlLXNwZWMnLFxuICAgICctLWFkYicsIHRoaXMuZXhlY3V0YWJsZS5wYXRoLFxuICAgICctLWRldmljZS1pZCcsIHRoaXMuY3VyRGV2aWNlSWQsXG4gICAgJy0tb3V0cHV0Jywgc3BlY0xvY2F0aW9uLFxuICBdO1xuICBsb2cuZGVidWcoYEdldHRpbmcgdGhlIHNwZWMgZm9yIHRoZSBkZXZpY2UgJyR7dGhpcy5jdXJEZXZpY2VJZH0nYCk7XG4gIGF3YWl0IHRoaXMuZXhlY0J1bmRsZXRvb2woYXJncywgJ0Nhbm5vdCByZXRyaWV2ZSB0aGUgZGV2aWNlIHNwZWMnKTtcbiAgcmV0dXJuIHNwZWNMb2NhdGlvbjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHRpbWVvdXQgWzIwMDAwXSAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWxcbiAqIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGltZW91dENhcE5hbWUgW2FuZHJvaWRJbnN0YWxsVGltZW91dF0gLSBUaGUgdGltZW91dCBvcHRpb24gbmFtZVxuICogdXNlcnMgY2FuIGluY3JlYXNlIHRoZSB0aW1lb3V0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb25cbiAqIGlzIGNvbXBsZXRlZCB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXJ0aWFsSW5zdGFsbCBbZmFsc2VdIC0gSW5zdGFsbCBhcGtzIHBhcnRpYWxseS4gSXQgaXMgdXNlZCBmb3IgJ2luc3RhbGwtbXVsdGlwbGUnLlxuICogaHR0cHM6Ly9hbmRyb2lkLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMTEwNjQvd2hhdC1pcy1hLXBhcnRpYWwtYXBwbGljYXRpb24taW5zdGFsbC12aWEtYWRiXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgZ2l2ZW4gYXBrcyBpbnRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBrUGF0aHNUb0luc3RhbGwgLSBUaGUgZnVsbCBwYXRocyB0byBpbnN0YWxsIGFwa3NcbiAqIEBwYXJhbSB7P2luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRpb25zIC0gSW5zdGFsbGF0aW9uIG9wdGlvbnNcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5pbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbE11bHRpcGxlQXBrcyAoYXBrUGF0aHNUb0luc3RhbGwsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBpbnN0YWxsQXJncyA9IGJ1aWxkSW5zdGFsbEFyZ3MoYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpLCBvcHRpb25zKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2luc3RhbGwtbXVsdGlwbGUnLCAuLi5pbnN0YWxsQXJncywgLi4uYXBrUGF0aHNUb0luc3RhbGxdLCB7XG4gICAgdGltZW91dDogb3B0aW9ucy50aW1lb3V0LFxuICAgIHRpbWVvdXRDYXBOYW1lOiBvcHRpb25zLnRpbWVvdXRDYXBOYW1lLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbEFwa3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFsxMjAwMDBdIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbFxuICogdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aW1lb3V0Q2FwTmFtZSBbYW5kcm9pZEluc3RhbGxUaW1lb3V0XSAtIFRoZSB0aW1lb3V0IG9wdGlvbiBuYW1lXG4gKiB1c2VycyBjYW4gaW5jcmVhc2UgdGhlIHRpbWVvdXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb25cbiAqIGlzIGNvbXBsZXRlZCB1bmRlciBBbmRyb2lkIDYrLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIC5hcGtzIHBhY2thZ2UgaW50byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrcyAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGtzIGZpbGVcbiAqIEBwYXJhbSB7P0luc3RhbGxBcGtzT3B0aW9uc30gb3B0aW9ucyAtIEluc3RhbGxhdGlvbiBvcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIC5hcGtzIGJ1bmRsZSBjYW5ub3QgYmUgaW5zdGFsbGVkXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuaW5zdGFsbEFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBrcyAoYXBrcywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBncmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIHRpbWVvdXQsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJ2luc3RhbGwtYXBrcycsXG4gICAgJy0tYWRiJywgdGhpcy5leGVjdXRhYmxlLnBhdGgsXG4gICAgJy0tYXBrcycsIGFwa3MsXG4gICAgJy0tdGltZW91dC1taWxsaXMnLCB0aW1lb3V0IHx8IEFQS1NfSU5TVEFMTF9USU1FT1VULFxuICAgICctLWRldmljZS1pZCcsIHRoaXMuY3VyRGV2aWNlSWQsXG4gIF07XG4gIGlmIChhbGxvd1Rlc3RQYWNrYWdlcykge1xuICAgIGFyZ3MucHVzaCgnLS1hbGxvdy10ZXN0LW9ubHknKTtcbiAgfVxuICBjb25zdCB0YXNrcyA9IFtcbiAgICB0aGlzLmV4ZWNCdW5kbGV0b29sKGFyZ3MsIGBDYW5ub3QgaW5zdGFsbCAnJHtwYXRoLmJhc2VuYW1lKGFwa3MpfScgdG8gdGhlIGRldmljZSAke3RoaXMuY3VyRGV2aWNlSWR9YClcbiAgXTtcbiAgaWYgKGdyYW50UGVybWlzc2lvbnMpIHtcbiAgICB0YXNrcy5wdXNoKHRoaXMuZ2V0QXBrSW5mbyhhcGtzKSk7XG4gIH1cbiAgY29uc3QgWywgYXBrSW5mb10gPSBhd2FpdCBCLmFsbCh0YXNrcyk7XG4gIGlmIChncmFudFBlcm1pc3Npb25zICYmIGFwa0luZm8pIHtcbiAgICAvLyBUT0RPOiBTaW1wbGlmeSBpdCBhZnRlciBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2J1bmRsZXRvb2wvaXNzdWVzLzI0NiBpcyBpbXBsZW1lbnRlZFxuICAgIGF3YWl0IHRoaXMuZ3JhbnRBbGxQZXJtaXNzaW9ucyhhcGtJbmZvLm5hbWUpO1xuICB9XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIG1hc3RlciAuYXBrIGZpbGUgaW5zaWRlIHRoZSBidW5kbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBtYXN0ZXIgYnVuZGxlIC5hcGtcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZXh0cmFjdGluZy9maW5kaW5nIHRoZSBmaWxlXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXh0cmFjdEJhc2VBcGsgPSBhc3luYyBmdW5jdGlvbiBleHRyYWN0QmFzZUFwayAoYXBrcykge1xuICByZXR1cm4gYXdhaXQgZXh0cmFjdEZyb21BcGtzKGFwa3MsIFsnc3BsaXRzJywgQkFTRV9BUEtdKTtcbn07XG5cbi8qKlxuICogRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwaywgd2hpY2ggY29udGFpbnMgdGhlIGNvcnJlc3BvbmRpbmdcbiAqIHJlc291cmNlcyBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGluIHRoZSAuYXBrcyBidW5kbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxhbmd1YWdlIC0gVGhlIGxhbmd1YWdlIGFiYnJldmlhdGlvbi4gVGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXNcbiAqIGdvaW5nIHRvIGJlIHNlbGVjdGVkIGlmIGl0IGlzIG5vdCBzZXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxhbmd1YWdlIC5hcGsgb3IgdGhlIG1hc3RlciAuYXBrXG4gKiBpZiBsYW5ndWFnZSBzcGxpdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhlIGJ1bmRsZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZXh0cmFjdGluZy9maW5kaW5nIHRoZSBmaWxlXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXh0cmFjdExhbmd1YWdlQXBrID0gYXN5bmMgZnVuY3Rpb24gZXh0cmFjdExhbmd1YWdlQXBrIChhcGtzLCBsYW5ndWFnZSA9IG51bGwpIHtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBleHRyYWN0RnJvbUFwa3MoYXBrcywgWydzcGxpdHMnLCBMQU5HVUFHRV9BUEsobGFuZ3VhZ2UpXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGUubWVzc2FnZSk7XG4gICAgICBsb2cuaW5mbyhgQXNzdW1pbmcgdGhhdCBzcGxpdHRpbmcgYnkgbGFuZ3VhZ2UgaXMgbm90IGVuYWJsZWQgZm9yIHRoZSAnJHthcGtzfScgYnVuZGxlIGAgK1xuICAgICAgICBgYW5kIHJldHVybmluZyB0aGUgbWFpbiBhcGsgaW5zdGVhZGApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0cmFjdEJhc2VBcGsoYXBrcyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGVmYXVsdExhbmd1YWdlcyA9IFsnZW4nLCAnZW5fdXMnXTtcbiAgZm9yIChjb25zdCBsYW5nIG9mIGRlZmF1bHRMYW5ndWFnZXMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4dHJhY3RGcm9tQXBrcyhhcGtzLCBbJ3NwbGl0cycsIExBTkdVQUdFX0FQSyhsYW5nKV0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuXG4gIGxvZy5pbmZvKGBDYW5ub3QgZmluZCBhbnkgc3BsaXQgYXBrIGZvciB0aGUgZGVmYXVsdCBsYW5ndWFnZXMgJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0TGFuZ3VhZ2VzKX0uIGAgK1xuICAgIGBSZXR1cm5pbmcgdGhlIG1haW4gYXBrIGluc3RlYWQuYCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwa3MpO1xufTtcblxuYXBrc1V0aWxzTWV0aG9kcy5pc1Rlc3RQYWNrYWdlT25seUVycm9yID0gZnVuY3Rpb24gKG91dHB1dCkge1xuICByZXR1cm4gL1xcW0lOU1RBTExfRkFJTEVEX1RFU1RfT05MWVxcXS8udGVzdChvdXRwdXQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYXBrc1V0aWxzTWV0aG9kcztcbiJdLCJmaWxlIjoibGliL3Rvb2xzL2Fwa3MtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
220
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hcGtzLXV0aWxzLmpzIl0sIm5hbWVzIjpbIkJBU0VfQVBLIiwiTEFOR1VBR0VfQVBLIiwibGFuZyIsIkFQS1NfQ0FDSEUiLCJMUlUiLCJtYXgiLCJkaXNwb3NlIiwiYXBrc0hhc2giLCJleHRyYWN0ZWRGaWxlc1Jvb3QiLCJmcyIsInJpbXJhZiIsIkFQS1NfQ0FDSEVfR1VBUkQiLCJBc3luY0xvY2siLCJCVU5ETEVUT09MX1RJTUVPVVRfTVMiLCJwcm9jZXNzIiwib24iLCJpdGVtQ291bnQiLCJwYXRocyIsInZhbHVlcyIsImxvZyIsImRlYnVnIiwibGVuZ3RoIiwidXRpbCIsInBsdXJhbGl6ZSIsImFwcFBhdGgiLCJyaW1yYWZTeW5jIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiZXh0cmFjdEZyb21BcGtzIiwiYXBrcyIsImRzdFBhdGgiLCJfIiwiaXNBcnJheSIsImFjcXVpcmUiLCJoYXNoIiwiaGFzIiwicmVzdWx0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0IiwiZXhpc3RzIiwiZGVsIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiRXJyb3IiLCJqb2luIiwic2VwIiwic2V0IiwiYXBrc1V0aWxzTWV0aG9kcyIsImV4ZWNCdW5kbGV0b29sIiwiYXJncyIsImVycm9yTXNnIiwiaW5pdEJ1bmRsZXRvb2wiLCJiaW5hcmllcyIsImJ1bmRsZXRvb2wiLCJlbnYiLCJhZGJQb3J0IiwiQU5EUk9JRF9BREJfU0VSVkVSX1BPUlQiLCJhZGJIb3N0IiwiQU5EUk9JRF9BREJfU0VSVkVSX0hPU1QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3Rkb3V0IiwidGltZW91dCIsInRydW5jYXRlIiwic3RkZXJyIiwiZ2V0RGV2aWNlU3BlYyIsInNwZWNMb2NhdGlvbiIsImV4ZWN1dGFibGUiLCJjdXJEZXZpY2VJZCIsImluc3RhbGxNdWx0aXBsZUFwa3MiLCJhcGtQYXRoc1RvSW5zdGFsbCIsIm9wdGlvbnMiLCJpbnN0YWxsQXJncyIsImdldEFwaUxldmVsIiwiYWRiRXhlYyIsInRpbWVvdXRDYXBOYW1lIiwiaW5zdGFsbEFwa3MiLCJncmFudFBlcm1pc3Npb25zIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJBUEtTX0lOU1RBTExfVElNRU9VVCIsInB1c2giLCJ0YXNrcyIsImJhc2VuYW1lIiwiZ2V0QXBrSW5mbyIsImFwa0luZm8iLCJCIiwiYWxsIiwiZ3JhbnRBbGxQZXJtaXNzaW9ucyIsIm5hbWUiLCJleHRyYWN0QmFzZUFwayIsImV4dHJhY3RMYW5ndWFnZUFwayIsImxhbmd1YWdlIiwiaW5mbyIsImRlZmF1bHRMYW5ndWFnZXMiLCJpZ24iLCJpc1Rlc3RQYWNrYWdlT25seUVycm9yIiwib3V0cHV0IiwidGVzdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsaUJBQWpCOztBQUNBLE1BQU1DLFlBQVksR0FBSUMsSUFBRCxJQUFXLFFBQU9BLElBQUssTUFBNUM7O0FBQ0EsTUFBTUMsVUFBVSxHQUFHLElBQUlDLGlCQUFKLENBQVE7QUFDekJDLEVBQUFBLEdBQUcsRUFBRSxFQURvQjtBQUV6QkMsRUFBQUEsT0FBTyxFQUFFLENBQUNDLFFBQUQsRUFBV0Msa0JBQVgsS0FBa0NDLFlBQUdDLE1BQUgsQ0FBVUYsa0JBQVY7QUFGbEIsQ0FBUixDQUFuQjtBQUlBLE1BQU1HLGdCQUFnQixHQUFHLElBQUlDLGtCQUFKLEVBQXpCO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsSUFBSSxFQUFKLEdBQVMsSUFBdkM7QUFFQUMsT0FBTyxDQUFDQyxFQUFSLENBQVcsTUFBWCxFQUFtQixNQUFNO0FBQ3ZCLE1BQUlaLFVBQVUsQ0FBQ2EsU0FBWCxLQUF5QixDQUE3QixFQUFnQztBQUM5QjtBQUNEOztBQUVELFFBQU1DLEtBQUssR0FBR2QsVUFBVSxDQUFDZSxNQUFYLEVBQWQ7O0FBQ0FDLGtCQUFJQyxLQUFKLENBQVcseUJBQXdCSCxL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LE1BQU05RixJQUFYLElBQW1COEYsZ0JBQW5CLEVBQXFDO0FBQ25DLFFBQUk7QUFDRixhQUFPLE1BQU1uRSxlQUFlLENBQUNDLElBQUQsRUFBTyxDQUFDLFFBQUQsRUFBVzdCLFlBQVksQ0FBQ0MsSUFBRCxDQUF2QixDQUFQLENBQTVCO0FBQ0QsS0FGRCxDQUVFLE9BQU8rRixHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFFRDlFLGtCQUFJNEUsSUFBSixDQUFVLHVEQUFzRGpDLElBQUksQ0FBQ0MsU0FBTCxDQUFlaUMsZ0JBQWYsQ0FBaUMsSUFBeEYsR0FDTixpQ0FESDs7QUFFQSxTQUFPLE1BQU0sS0FBS0osY0FBTCxDQUFvQjlELElBQXBCLENBQWI7QUFDRCxDQXRCRDs7QUF3QkFvQixnQkFBZ0IsQ0FBQ2dELHNCQUFqQixHQUEwQyxVQUFVQyxNQUFWLEVBQWtCO0FBQzFELFNBQU8sK0JBQStCQyxJQUEvQixDQUFvQ0QsTUFBcEMsQ0FBUDtBQUNELENBRkQ7O2VBSWVqRCxnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IExSVSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHtcbiAgZ2V0SmF2YUZvck9zLCB1bnppcEZpbGUsIGJ1aWxkSW5zdGFsbEFyZ3MsIEFQS1NfSU5TVEFMTF9USU1FT1VUXG59IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgQkFTRV9BUEsgPSAnYmFzZS1tYXN0ZXIuYXBrJztcbmNvbnN0IExBTkdVQUdFX0FQSyA9IChsYW5nKSA9PiBgYmFzZS0ke2xhbmd9LmFwa2A7XG5jb25zdCBBUEtTX0NBQ0hFID0gbmV3IExSVSh7XG4gIG1heDogMTAsXG4gIGRpc3Bvc2U6IChhcGtzSGFzaCwgZXh0cmFjdGVkRmlsZXNSb290KSA9PiBmcy5yaW1yYWYoZXh0cmFjdGVkRmlsZXNSb290KSxcbn0pO1xuY29uc3QgQVBLU19DQUNIRV9HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IEJVTkRMRVRPT0xfVElNRU9VVF9NUyA9IDQgKiA2MCAqIDEwMDA7XG5cbnByb2Nlc3Mub24oJ2V4aXQnLCAoKSA9PiB7XG4gIGlmIChBUEtTX0NBQ0hFLml0ZW1Db3VudCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhdGhzID0gQVBLU19DQUNIRS52YWx1ZXMoKTtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGNsZWFudXAgb2YgJHtwYXRocy5sZW5ndGh9IGNhY2hlZCAuYXBrcyBgICtcbiAgICB1dGlsLnBsdXJhbGl6ZSgncGFja2FnZScsIHBhdGhzLmxlbmd0aCkpO1xuICBmb3IgKGNvbnN0IGFwcFBhdGggb2YgcGF0aHMpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQXN5bmNocm9ub3VzIGNhbGxzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG9uRXhpdCBoYW5kbGVyXG4gICAgICBmcy5yaW1yYWZTeW5jKGFwcFBhdGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgcGFydGljdWxhciBhcGtzIHBhY2thZ2UgaW50byBhIHRlbXBvcmFyeSBmb2xkZXIsXG4gKiBmaW5kcyBhbmQgcmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5lZCBpbiB0aGlzIGFway5cbiAqIFRoZSByZXN1bHRpbmcgdGVtcG9yYXJ5IHBhdGgsIHdoZXJlIHRoZSAuYXBrcyBmaWxlIGhhcyBiZWVuIGV4dHJhY3RlZCxcbiAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGludGVybmFsIExSVSBjYWNoZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtzIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwa3MgZmlsZVxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXk8U3RyaW5nPn0gZHN0UGF0aCAtIFRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWxlLFxuICogd2hpY2ggaXMgZ29pbmcgdG8gYmUgZXh0cmFjdGVkLCB3aGVyZSBlYWNoIHBhdGggY29tcG9uZW50IGlzIGFuIGFycmF5IGl0ZW1cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEZ1bGwgcGF0aCB0byB0aGUgZXh0cmFjdGVkIGZpbGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcmVxdWVzdGVkIGl0ZW0gZG9lcyBub3QgZXhpc3QgaW4gdGhlIGV4dHJhY3RlZCBhcmNoaXZlIG9yIHRoZSBwcm92aWRlc1xuICogYXBrcyBmaWxlIGlzIG5vdCBhIHZhbGlkIGJ1bmRsZVxuICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0RnJvbUFwa3MgKGFwa3MsIGRzdFBhdGgpIHtcbiAgaWYgKCFfLmlzQXJyYXkoZHN0UGF0aCkpIHtcbiAgICBkc3RQYXRoID0gW2RzdFBhdGhdO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IEFQS1NfQ0FDSEVfR1VBUkQuYWNxdWlyZShhcGtzLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gSXQgbWlnaHQgYmUgdGhhdCB0aGUgb3JpZ2luYWwgZmlsZSBoYXMgYmVlbiByZXBsYWNlZCxcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGtlZXAgdGhlIGhhc2ggc3VtcyBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgZmlsZSBwYXRoc1xuICAgIC8vIGFzIGNhY2hpbmcga2V5c1xuICAgIGNvbnN0IGFwa3NIYXNoID0gYXdhaXQgZnMuaGFzaChhcGtzKTtcbiAgICBsb2cuZGVidWcoYENhbGN1bGF0ZWQgJyR7YXBrc30nIGhhc2g6ICR7YXBrc0hhc2h9YCk7XG5cbiAgICBpZiAoQVBLU19DQUNIRS5oYXMoYXBrc0hhc2gpKSB7XG4gICAgICBjb25zdCByZXN1bHRQYXRoID0gcGF0aC5yZXNvbHZlKEFQS1NfQ0FDSEUuZ2V0KGFwa3NIYXNoKSwgLi4uZHN0UGF0aCk7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHJlc3VsdFBhdGgpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRQYXRoO1xuICAgICAgfVxuICAgICAgQVBLU19DQUNIRS5kZWwoYXBrc0hhc2gpO1xuICAgIH1cblxuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBsb2cuZGVidWcoYFVucGFja2luZyBhcHBsaWNhdGlvbiBidW5kbGUgYXQgJyR7YXBrc30nIHRvICcke3RtcFJvb3R9J2ApO1xuICAgIGF3YWl0IHVuemlwRmlsZShhcGtzLCB0bXBSb290KTtcbiAgICBjb25zdCByZXN1bHRQYXRoID0gcGF0aC5yZXNvbHZlKHRtcFJvb3QsIC4uLmRzdFBhdGgpO1xuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHJlc3VsdFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZHN0UGF0aC5qb2luKHBhdGguc2VwKX0gY2Fubm90IGJlIGZvdW5kIGluICcke2Fwa3N9JyBidW5kbGUuIGAgK1xuICAgICAgICBgRG9lcyB0aGUgYXJjaGl2ZSBjb250YWluIGEgdmFsaWQgYXBwbGljYXRpb24gYnVuZGxlP2ApO1xuICAgIH1cbiAgICBBUEtTX0NBQ0hFLnNldChhcGtzSGFzaCwgdG1wUm9vdCk7XG4gICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gIH0pO1xufVxuXG5sZXQgYXBrc1V0aWxzTWV0aG9kcyA9IHt9O1xuXG4vKipcbiAqIEV4ZWN1dGVzIGJ1bmRsZXRvb2wgdXRpbGl0eSB3aXRoIGdpdmVuIGFyZ3VtZW50cyBhbmQgcmV0dXJucyB0aGUgYWN0dWFsIHN0ZG91dFxuICpcbiAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nPn0gYXJncyAtIHRoZSBsaXN0IG9mIGJ1bmRsZXRvb2wgYXJndW1lbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gZXJyb3JNc2cgLSBUaGUgY3VzdG9taXplZCBlcnJvciBtZXNzYWdlIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gdGhlIGFjdHVhbCBjb21tYW5kIHN0ZG91dFxuICogQHRocm93cyB7RXJyb3J9IElmIGJ1bmRsZXRvb2wgamFyIGRvZXMgbm90IGV4aXN0IGluIFBBVEggb3IgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlXG4gKiBleGVjdXRpbmcgaXRcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5leGVjQnVuZGxldG9vbCA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWNCdW5kbGV0b29sIChhcmdzLCBlcnJvck1zZykge1xuICBhd2FpdCB0aGlzLmluaXRCdW5kbGV0b29sKCk7XG4gIGFyZ3MgPSBbXG4gICAgJy1qYXInLCB0aGlzLmJpbmFyaWVzLmJ1bmRsZXRvb2wsXG4gICAgLi4uYXJnc1xuICBdO1xuICBjb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcbiAgaWYgKHRoaXMuYWRiUG9ydCkge1xuICAgIGVudi5BTkRST0lEX0FEQl9TRVJWRVJfUE9SVCA9IGAke3RoaXMuYWRiUG9ydH1gO1xuICB9XG4gIGlmICh0aGlzLmFkYkhvc3QpIHtcbiAgICBlbnYuQU5EUk9JRF9BREJfU0VSVkVSX0hPU1QgPSB0aGlzLmFkYkhvc3Q7XG4gIH1cbiAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgYnVuZGxldG9vbCB3aXRoIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKGF3YWl0IGdldEphdmFGb3JPcygpLCBhcmdzLCB7XG4gICAgICBlbnYsXG4gICAgICB0aW1lb3V0OiBCVU5ETEVUT09MX1RJTUVPVVRfTVMsXG4gICAgfSkpO1xuICAgIGxvZy5kZWJ1ZyhgQ29tbWFuZCBzdGRvdXQ6ICR7Xy50cnVuY2F0ZShzdGRvdXQsIHtsZW5ndGg6IDMwMH0pfWApO1xuICAgIHJldHVybiBzdGRvdXQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZS5zdGRvdXQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29tbWFuZCBzdGRvdXQ6ICR7ZS5zdGRvdXR9YCk7XG4gICAgfVxuICAgIGlmIChlLnN0ZGVycikge1xuICAgICAgbG9nLmRlYnVnKGBDb21tYW5kIHN0ZGVycjogJHtlLnN0ZGVycn1gKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTXNnfS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzcGVjTG9jYXRpb24gLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBnZW5lcmF0ZWQgZGV2aWNlIHNwZWMgbG9jYXRpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzYW1lIGBzcGVjTG9jYXRpb25gIHZhbHVlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSBzcGVjIGZvciB0aGUgY3VycmVudCBkZXZpY2VcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5nZXREZXZpY2VTcGVjID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlU3BlYyAoc3BlY0xvY2F0aW9uKSB7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJ2dldC1kZXZpY2Utc3BlYycsXG4gICAgJy0tYWRiJywgdGhpcy5leGVjdXRhYmxlLnBhdGgsXG4gICAgJy0tZGV2aWNlLWlkJywgdGhpcy5jdXJEZXZpY2VJZCxcbiAgICAnLS1vdXRwdXQnLCBzcGVjTG9jYXRpb24sXG4gIF07XG4gIGxvZy5kZWJ1ZyhgR2V0dGluZyB0aGUgc3BlYyBmb3IgdGhlIGRldmljZSAnJHt0aGlzLmN1ckRldmljZUlkfSdgKTtcbiAgYXdhaXQgdGhpcy5leGVjQnVuZGxldG9vbChhcmdzLCAnQ2Fubm90IHJldHJpZXZlIHRoZSBkZXZpY2Ugc3BlYycpO1xuICByZXR1cm4gc3BlY0xvY2F0aW9uO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsTXVsdGlwbGVBcGtzT3B0aW9uc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gdGltZW91dCBbMjAwMDBdIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbFxuICogdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aW1lb3V0Q2FwTmFtZSBbYW5kcm9pZEluc3RhbGxUaW1lb3V0XSAtIFRoZSB0aW1lb3V0IG9wdGlvbiBuYW1lXG4gKiB1c2VycyBjYW4gaW5jcmVhc2UgdGhlIHRpbWVvdXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0IGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvblxuICogaXMgY29tcGxldGVkIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiBodHRwczovL2FuZHJvaWQuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzExMTA2NC93aGF0LWlzLWEtcGFydGlhbC1hcHBsaWNhdGlvbi1pbnN0YWxsLXZpYS1hZGJcbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBhcGtzIGludG8gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcGtQYXRoc1RvSW5zdGFsbCAtIFRoZSBmdWxsIHBhdGhzIHRvIGluc3RhbGwgYXBrc1xuICogQHBhcmFtIHs/aW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnN9IG9wdGlvbnMgLSBJbnN0YWxsYXRpb24gb3B0aW9uc1xuICovXG5hcGtzVXRpbHNNZXRob2RzLmluc3RhbGxNdWx0aXBsZUFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsTXVsdGlwbGVBcGtzIChhcGtQYXRoc1RvSW5zdGFsbCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGluc3RhbGxBcmdzID0gYnVpbGRJbnN0YWxsQXJncyhhd2FpdCB0aGlzLmdldEFwaUxldmVsKCksIG9wdGlvbnMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGJFeGVjKFsnaW5zdGFsbC1tdWx0aXBsZScsIC4uLmluc3RhbGxBcmdzLCAuLi5hcGtQYXRoc1RvSW5zdGFsbF0sIHtcbiAgICB0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXQsXG4gICAgdGltZW91dENhcE5hbWU6IG9wdGlvbnMudGltZW91dENhcE5hbWUsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHRpbWVvdXQgWzEyMDAwMF0gLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsXG4gKiB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVvdXRDYXBOYW1lIFthbmRyb2lkSW5zdGFsbFRpbWVvdXRdIC0gVGhlIHRpbWVvdXQgb3B0aW9uIG5hbWVcbiAqIHVzZXJzIGNhbiBpbmNyZWFzZSB0aGUgdGltZW91dC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0IGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvblxuICogaXMgY29tcGxldGVkIHVuZGVyIEFuZHJvaWQgNisuXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgZ2l2ZW4gLmFwa3MgcGFja2FnZSBpbnRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtzIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwa3MgZmlsZVxuICogQHBhcmFtIHs/SW5zdGFsbEFwa3NPcHRpb25zfSBvcHRpb25zIC0gSW5zdGFsbGF0aW9uIG9wdGlvbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgLmFwa3MgYnVuZGxlIGNhbm5vdCBiZSBpbnN0YWxsZWRcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5pbnN0YWxsQXBrcyA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcGtzIChhcGtzLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGdyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gICAgdGltZW91dCxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgYXJncyA9IFtcbiAgICAnaW5zdGFsbC1hcGtzJyxcbiAgICAnLS1hZGInLCB0aGlzLmV4ZWN1dGFibGUucGF0aCxcbiAgICAnLS1hcGtzJywgYXBrcyxcbiAgICAnLS10aW1lb3V0LW1pbGxpcycsIHRpbWVvdXQgfHwgQVBLU19JTlNUQUxMX1RJTUVPVVQsXG4gICAgJy0tZGV2aWNlLWlkJywgdGhpcy5jdXJEZXZpY2VJZCxcbiAgXTtcbiAgaWYgKGFsbG93VGVzdFBhY2thZ2VzKSB7XG4gICAgYXJncy5wdXNoKCctLWFsbG93LXRlc3Qtb25seScpO1xuICB9XG4gIGNvbnN0IHRhc2tzID0gW1xuICAgIHRoaXMuZXhlY0J1bmRsZXRvb2woYXJncywgYENhbm5vdCBpbnN0YWxsICcke3BhdGguYmFzZW5hbWUoYXBrcyl9JyB0byB0aGUgZGV2aWNlICR7dGhpcy5jdXJEZXZpY2VJZH1gKVxuICBdO1xuICBpZiAoZ3JhbnRQZXJtaXNzaW9ucykge1xuICAgIHRhc2tzLnB1c2godGhpcy5nZXRBcGtJbmZvKGFwa3MpKTtcbiAgfVxuICBjb25zdCBbLCBhcGtJbmZvXSA9IGF3YWl0IEIuYWxsKHRhc2tzKTtcbiAgaWYgKGdyYW50UGVybWlzc2lvbnMgJiYgYXBrSW5mbykge1xuICAgIC8vIFRPRE86IFNpbXBsaWZ5IGl0IGFmdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvYnVuZGxldG9vbC9pc3N1ZXMvMjQ2IGlzIGltcGxlbWVudGVkXG4gICAgYXdhaXQgdGhpcy5ncmFudEFsbFBlcm1pc3Npb25zKGFwa0luZm8ubmFtZSk7XG4gIH1cbn07XG5cbi8qKlxuICogRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgbWFzdGVyIC5hcGsgZmlsZSBpbnNpZGUgdGhlIGJ1bmRsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrcyAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGtzIGZpbGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIG1hc3RlciBidW5kbGUgLmFwa1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBleHRyYWN0aW5nL2ZpbmRpbmcgdGhlIGZpbGVcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5leHRyYWN0QmFzZUFwayA9IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RCYXNlQXBrIChhcGtzKSB7XG4gIHJldHVybiBhd2FpdCBleHRyYWN0RnJvbUFwa3MoYXBrcywgWydzcGxpdHMnLCBCQVNFX0FQS10pO1xufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrLCB3aGljaCBjb250YWlucyB0aGUgY29ycmVzcG9uZGluZ1xuICogcmVzb3VyY2VzIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaW4gdGhlIC5hcGtzIGJ1bmRsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrcyAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGtzIGZpbGVcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgLSBUaGUgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uLiBUaGUgZGVmYXVsdCBsYW5ndWFnZSBpc1xuICogZ29pbmcgdG8gYmUgc2VsZWN0ZWQgaWYgaXQgaXMgbm90IHNldC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGFuZ3VhZ2UgLmFwayBvciB0aGUgbWFzdGVyIC5hcGtcbiAqIGlmIGxhbmd1YWdlIHNwbGl0IGlzIG5vdCBlbmFibGVkIGZvciB0aGUgYnVuZGxlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBleHRyYWN0aW5nL2ZpbmRpbmcgdGhlIGZpbGVcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5leHRyYWN0TGFuZ3VhZ2VBcGsgPSBhc3luYyBmdW5jdGlvbiBleHRyYWN0TGFuZ3VhZ2VBcGsgKGFwa3MsIGxhbmd1YWdlID0gbnVsbCkge1xuICBpZiAobGFuZ3VhZ2UpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4dHJhY3RGcm9tQXBrcyhhcGtzLCBbJ3NwbGl0cycsIExBTkdVQUdFX0FQSyhsYW5ndWFnZSldKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZGVidWcoZS5tZXNzYWdlKTtcbiAgICAgIGxvZy5pbmZvKGBBc3N1bWluZyB0aGF0IHNwbGl0dGluZyBieSBsYW5ndWFnZSBpcyBub3QgZW5hYmxlZCBmb3IgdGhlICcke2Fwa3N9JyBidW5kbGUgYCArXG4gICAgICAgIGBhbmQgcmV0dXJuaW5nIHRoZSBtYWluIGFwayBpbnN0ZWFkYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcGtzKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkZWZhdWx0TGFuZ3VhZ2VzID0gWydlbicsICdlbl91cyddO1xuICBmb3IgKGNvbnN0IGxhbmcgb2YgZGVmYXVsdExhbmd1YWdlcykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZXh0cmFjdEZyb21BcGtzKGFwa3MsIFsnc3BsaXRzJywgTEFOR1VBR0VfQVBLKGxhbmcpXSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG5cbiAgbG9nLmluZm8oYENhbm5vdCBmaW5kIGFueSBzcGxpdCBhcGsgZm9yIHRoZSBkZWZhdWx0IGxhbmd1YWdlcyAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRMYW5ndWFnZXMpfS4gYCArXG4gICAgYFJldHVybmluZyB0aGUgbWFpbiBhcGsgaW5zdGVhZC5gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0cmFjdEJhc2VBcGsoYXBrcyk7XG59O1xuXG5hcGtzVXRpbHNNZXRob2RzLmlzVGVzdFBhY2thZ2VPbmx5RXJyb3IgPSBmdW5jdGlvbiAob3V0cHV0KSB7XG4gIHJldHVybiAvXFxbSU5TVEFMTF9GQUlMRURfVEVTVF9PTkxZXFxdLy50ZXN0KG91dHB1dCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBhcGtzVXRpbHNNZXRob2RzO1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvYXBrcy11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -5,13 +5,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.default = void 0;
8
9
  Object.defineProperty(exports, "getAndroidBinaryPath", {
9
10
  enumerable: true,
10
11
  get: function () {
11
12
  return _systemCalls.getAndroidBinaryPath;
12
13
  }
13
14
  });
14
- exports.default = void 0;
15
15
 
16
16
  require("source-map-support/register");
17
17
 
@@ -15,7 +15,7 @@ var _path = _interopRequireDefault(require("path"));
15
15
 
16
16
  var _lodash = _interopRequireDefault(require("lodash"));
17
17
 
18
- var _appiumSupport = require("appium-support");
18
+ var _support = require("@appium/support");
19
19
 
20
20
  var _helpers = require("../helpers.js");
21
21
 
@@ -175,7 +175,7 @@ lockManagementMethods.isScreenLocked = async function isScreenLocked() {
175
175
 
176
176
  _logger.default.debug(`Writing dumpsys output to ${dumpsysFile}`);
177
177
 
178
- await _appiumSupport.fs.writeFile(dumpsysFile, stdout);
178
+ await _support.fs.writeFile(dumpsysFile, stdout);
179
179
  }
180
180
 
181
181
  return (0, _helpers.isShowingLockscreen)(stdout) || (0, _helpers.isCurrentFocusOnKeyguard)(stdout) || !(0, _helpers.isScreenOnFully)(stdout);
@@ -221,4 +221,4 @@ var _default = lockManagementMethods;
221
221
  exports.default = _default;require('source-map-support').install();
222
222
 
223
223
 
224
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9sb2NrbWdtdC5qcyJdLCJuYW1lcyI6WyJsb2NrTWFuYWdlbWVudE1ldGhvZHMiLCJDUkVERU5USUFMX0NBTk5PVF9CRV9OVUxMX09SX0VNUFRZX0VSUk9SIiwiQ1JFREVOVElBTF9ESURfTk9UX01BVENIX0VSUk9SIiwiU1VQUE9SVEVEX0xPQ0tfQ1JFREVOVElBTF9UWVBFUyIsIktFWUNPREVfUE9XRVIiLCJLRVlDT0RFX1dBS0VVUCIsIkhJREVfS0VZQk9BUkRfV0FJVF9USU1FIiwiYnVpbGRDb21tYW5kIiwidmVyYiIsIm9sZENyZWRlbnRpYWwiLCJhcmdzIiwiY21kIiwiXyIsImlzRW1wdHkiLCJwdXNoIiwic3dpcGVVcCIsImFkYiIsIm91dHB1dCIsInNoZWxsIiwiZGltZW5zaW9uc01hdGNoIiwiZXhlYyIsIkVycm9yIiwiZGlzcGxheVdpZHRoIiwicGFyc2VJbnQiLCJkaXNwbGF5SGVpZ2h0IiwieDAiLCJ5MCIsIngxIiwieTEiLCJtYXAiLCJjIiwiTWF0aCIsInRydW5jIiwiaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCIsImlzQm9vbGVhbiIsIl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkIiwicGFzc0ZsYWciLCJpZ24iLCJpbmNsdWRlcyIsImxvZyIsImRlYnVnIiwidmVyaWZ5TG9ja0NyZWRlbnRpYWwiLCJjcmVkZW50aWFsIiwic3Rkb3V0Iiwic3RkZXJyIiwib3V0cHV0Rm9ybWF0IiwiRVhFQ19PVVRQVVRfRk9STUFUIiwiRlVMTCIsInNvbWUiLCJ4IiwiZSIsIm1lc3NhZ2UiLCJjbGVhckxvY2tDcmVkZW50aWFsIiwiaXNMb2NrRW5hYmxlZCIsInRlc3QiLCJzZXRMb2NrQ3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwiaXNJbnRlZ2VyIiwiaXNTY3JlZW5Mb2NrZWQiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX0xPR19EVU1QU1lTIiwiZHVtcHN5c0ZpbGUiLCJwYXRoIiwicmVzb2x2ZSIsImN3ZCIsImZzIiwid3JpdGVGaWxlIiwiZGlzbWlzc0tleWd1YXJkIiwiaW5mbyIsImN5Y2xlV2FrZVVwIiwiZ2V0QXBpTGV2ZWwiLCJoaWRlS2V5Ym9hcmQiLCJCIiwiZGVsYXkiLCJiYWNrIiwia2V5ZXZlbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsRUFBOUI7QUFFQSxNQUFNQyx3Q0FBd0MsR0FBSSxtQ0FBbEQ7QUFDQSxNQUFNQyw4QkFBOEIsR0FBSSxjQUF4QztBQUNBLE1BQU1DLCtCQUErQixHQUFHLENBQUMsVUFBRCxFQUFhLEtBQWIsRUFBb0IsU0FBcEIsQ0FBeEM7QUFDQSxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7QUFDQSxNQUFNQyxjQUFjLEdBQUcsR0FBdkI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyxHQUFoQzs7QUFFQSxTQUFTQyxZQUFULENBQXVCQyxJQUF2QixFQUE2QkMsYUFBYSxHQUFHLElBQTdDLEVBQW1ELEdBQUdDLElBQXRELEVBQTREO0FBQzFELFFBQU1DLEdBQUcsR0FBRyxDQUFDLGNBQUQsRUFBaUJILElBQWpCLENBQVo7O0FBQ0EsTUFBSSxDQUFDSSxnQkFBRUMsT0FBRixDQUFVSixhQUFWLENBQUwsRUFBK0I7QUFDN0JFLElBQUFBLEdBQUcsQ0FBQ0csSUFBSixDQUFTLE9BQVQsRUFBa0JMLGFBQWxCO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDRyxnQkFBRUMsT0FBRixDQUFVSCxJQUFWLENBQUwsRUFBc0I7QUFDcEJDLElBQUFBLEdBQUcsQ0FBQ0csSUFBSixDQUFTLEdBQUdKLElBQVo7QUFDRDs7QUFDRCxTQUFPQyxHQUFQO0FBQ0Q7O0FBRUQsZUFBZUksT0FBZixDQUF3QkMsR0FBeEIsRUFBNkI7QUFDM0IsUUFBTUMsTUFBTSxHQUFHLE1BQU1ELEdBQUcsQ0FBQ0UsS0FBSixDQUFVLENBQUMsU0FBRCxFQUFZLFFBQVosQ0FBVixDQUFyQjtBQUNBLFFBQU1DLGVBQWUsR0FBRyxtQkFBbUJDLElBQW5CLENBQXdCSCxNQUF4QixDQUF4Qjs7QUFDQSxNQUFJLENBQUNFLGVBQUwsRUFBc0I7QUFDcEIsVUFBTSxJQUFJRSxLQUFKLENBQVUsa0NBQVYsQ0FBTjtBQUNEOztBQUNELFFBQU1DLFlBQVksR0FBR0MsUUFBUSxDQUFDSixlQUFlLENBQUMsQ0FBRCxDQUFoQixFQUFxQixFQUFyQixDQUE3QjtBQUNBLFFBQU1LLGFBQWEsR0FBR0QsUUFBUSxDQUFDSixlQUFlLENBQUMsQ0FBRCxDQUFoQixFQUFxQixFQUFyQixDQUE5QjtBQUNBLFFBQU1NLEVBQUUsR0FBR0gsWUFBWSxHQUFHLENBQTFCO0FBQ0EsUUFBTUksRUFBRSxHQUFHRixhQUFhLEdBQUcsQ0FBaEIsR0FBb0IsQ0FBL0I7QUFDQSxRQUFNRyxFQUFFLEdBQUdGLEVBQVg7QUFDQSxRQUFNRyxFQUFFLEdBQUdKLGFBQWEsR0FBRyxDQUEzQjtBQUNBLFFBQU1SLEdBQUcsQ0FBQ0UsS0FBSixDQUFVLENBQ2QsT0FEYyxFQUNMLGFBREssRUFDVSxPQURWLEVBRWQsR0FBSSxDQUFDTyxFQUFELEVBQUtDLEVBQUwsRUFBU0MsRUFBVCxFQUFhQyxFQUFiLEVBQWlCQyxHQUFqQixDQUFzQkMsQ0FBRCxJQUFPQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0YsQ0FBWCxDQUE1QixDQUZVLENBQVYsQ0FBTjtBQUlEOztBQVFEOUIscUJBQXFCLENBQUNpQyx5QkFBdEIsR0FBa0QsZUFBZUEseUJBQWYsR0FBNEM7QUFDNUYsTUFBSSxDQUFDckIsZ0JBQUVzQixTQUFGLENBQVksS0FBS0MsMEJBQWpCLENBQUwsRUFBbUQ7QUFDakQsVUFBTUMsUUFBUSxHQUFHLFVBQWpCO0FBQ0EsUUFBSW5CLE1BQU0sR0FBRyxFQUFiOztBQUNBLFFBQUk7QUFDRkEsTUFBQUEsTUFBTSxHQUFHLE1BQU0sS0FBS0MsS0FBTCxDQUFXLENBQUUsNkJBQTRCa0IsUUFBUyxFQUF2QyxDQUFYLENBQWY7QUFDRCxLQUZELENBRUUsT0FBT0MsR0FBUCxFQUFZLENBQUU7O0FBQ2hCLFNBQUtGLDBCQUFMLEdBQWtDdkIsZ0JBQUUwQixRQUFGLENBQVdyQixNQUFYLEVBQW1CbUIsUUFBbkIsQ0FBbEM7O0FBQ0FHLG9CQUFJQyxLQUFKLENBQVcsdUNBQUQsR0FDUCxHQUFFLEtBQUtMLDBCQUFMLEdBQWtDLEVBQWxDLEdBQXVDLE1BQU8sV0FEbkQ7QUFFRDs7QUFDRCxTQUFPLEtBQUtBLDBCQUFaO0FBQ0QsQ0FaRDs7QUEwQkFuQyxxQkFBcUIsQ0FBQ3lDLG9CQUF0QixHQUE2QyxlQUFlQSxvQkFBZixDQUFxQ0MsVUFBVSxHQUFHLElBQWxELEVBQXdEO0FBQ25HLE1BQUk7QUFDRixVQUFNO0FBQUNDLE1BQUFBLE1BQUQ7QUFBU0MsTUFBQUE7QUFBVCxRQUFtQixNQUFNLEtBQUsxQixLQUFMLENBQVdYLFlBQVksQ0FBQyxRQUFELEVBQVdtQyxVQUFYLENBQXZCLEVBQStDO0FBQzVFRyxNQUFBQSxZQUFZLEVBQUUsS0FBS0Msa0JBQUwsQ0FBd0JDO0FBRHNDLEtBQS9DLENBQS9COztBQUdBLFFBQUluQyxnQkFBRTBCLFFBQUYsQ0FBV0ssTUFBWCxFQUFtQix1QkFBbkIsQ0FBSixFQUFpRDtBQUMvQyxhQUFPLElBQVA7QUFDRDs7QUFDRCxRQUFJLENBQUUsY0FBRixFQUFpQjFDLHdDQUFqQixFQUNDK0MsSUFERCxDQUNPQyxDQUFELElBQU9yQyxnQkFBRTBCLFFBQUYsQ0FBV00sTUFBTSxJQUFJRCxNQUFyQixFQUE2Qk0sQ0FBN0IsQ0FEYixDQUFKLEVBQ21EO0FBQ2pELGFBQU8sS0FBUDtBQUNEOztBQUNELFVBQU0sSUFBSTVCLEtBQUosQ0FBVXVCLE1BQU0sSUFBSUQsTUFBcEIsQ0FBTjtBQUNELEdBWkQsQ0FZRSxPQUFPTyxDQUFQLEVBQVU7QUFDVixVQUFNLElBQUk3QixLQUFKLENBQVcsOENBQUQsR0FDYixtQkFBa0I2QixDQUFDLENBQUNOLE1BQUYsSUFBWU0sQ0FBQyxDQUFDUCxNQUFkLElBQXdCTyxDQUFDLENBQUNDLE9BQVEsRUFEakQsQ0FBTjtBQUVEO0FBQ0YsQ0FqQkQ7O0FBK0JBbkQscUJBQXFCLENBQUNvRCxtQkFBdEIsR0FBNEMsZUFBZUEsbUJBQWYsQ0FBb0NWLFVBQVUsR0FBRyxJQUFqRCxFQUF1RDtBQUNqRyxNQUFJO0FBQ0YsVUFBTTtBQUFDQyxNQUFBQSxNQUFEO0FBQVNDLE1BQUFBO0FBQVQsUUFBbUIsTUFBTSxLQUFLMUIsS0FBTCxDQUFXWCxZQUFZLENBQUMsT0FBRCxFQUFVbUMsVUFBVixDQUF2QixFQUE4QztBQUMzRUcsTUFBQUEsWUFBWSxFQUFFLEtBQUtDLGtCQUFMLENBQXdCQztBQURxQyxLQUE5QyxDQUEvQjs7QUFHQSxRQUFJLENBQUMsQ0FBQyxzQkFBRCxFQUF5Qix5QkFBekIsRUFDQUMsSUFEQSxDQUNNQyxDQUFELElBQU9yQyxnQkFBRTBCLFFBQUYsQ0FBV00sTUFBTSxJQUFJRCxNQUFyQixFQUE2Qk0sQ0FBN0IsQ0FEWixDQUFMLEVBQ21EO0FBQ2pELFlBQU0sSUFBSTVCLEtBQUosQ0FBVXVCLE1BQU0sSUFBSUQsTUFBcEIsQ0FBTjtBQUNEO0FBQ0YsR0FSRCxDQVFFLE9BQU9PLENBQVAsRUFBVTtBQUNWLFVBQU0sSUFBSTdCLEtBQUosQ0FBVyx1Q0FBRCxHQUNiLG1CQUFrQjZCLENBQUMsQ0FBQ04sTUFBRixJQUFZTSxDQUFDLENBQUNQLE1BQWQsSUFBd0JPLENBQUMsQ0FBQ0MsT0FBUSxFQURqRCxDQUFOO0FBRUQ7QUFDRixDQWJEOztBQXNCQW5ELHFCQUFxQixDQUFDcUQsYUFBdEIsR0FBc0MsZUFBZUEsYUFBZixHQUFnQztBQUNwRSxNQUFJO0FBQ0YsVUFBTTtBQUFDVixNQUFBQSxNQUFEO0FBQVNDLE1BQUFBO0FBQVQsUUFBbUIsTUFBTSxLQUFLMUIsS0FBTCxDQUFXWCxZQUFZLENBQUMsY0FBRCxDQUF2QixFQUF5QztBQUN0RXNDLE1BQUFBLFlBQVksRUFBRSxLQUFLQyxrQkFBTCxDQUF3QkM7QUFEZ0MsS0FBekMsQ0FBL0I7O0FBR0EsUUFBSSxZQUFZTyxJQUFaLENBQWlCWCxNQUFqQixLQUNHLENBQUN6Qyw4QkFBRCxFQUFpQ0Qsd0NBQWpDLEVBQTJFK0MsSUFBM0UsQ0FDQUMsQ0FBRCxJQUFPckMsZ0JBQUUwQixRQUFGLENBQVdNLE1BQU0sSUFBSUQsTUFBckIsRUFBNkJNLENBQTdCLENBRE4sQ0FEUCxFQUUrQztBQUM3QyxhQUFPLElBQVA7QUFDRDs7QUFDRCxRQUFJLFdBQVdLLElBQVgsQ0FBZ0JYLE1BQWhCLENBQUosRUFBNkI7QUFDM0IsYUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsVUFBTSxJQUFJdEIsS0FBSixDQUFVdUIsTUFBTSxJQUFJRCxNQUFwQixDQUFOO0FBQ0QsR0FiRCxDQWFFLE9BQU9PLENBQVAsRUFBVTtBQUNWLFVBQU0sSUFBSTdCLEtBQUosQ0FBVywyREFBMEQ2QixDQUFDLENBQUNDLE9BQVEsRUFBL0UsQ0FBTjtBQUNEO0FBQ0YsQ0FqQkQ7O0FBb0NBbkQscUJBQXFCLENBQUN1RCxpQkFBdEIsR0FBMEMsZUFBZUEsaUJBQWYsQ0FDeENDLGNBRHdDLEVBQ3hCZCxVQUR3QixFQUNaakMsYUFBYSxHQUFHLElBREosRUFDVTtBQUNsRCxNQUFJLENBQUNOLCtCQUErQixDQUFDbUMsUUFBaEMsQ0FBeUNrQixjQUF6QyxDQUFMLEVBQStEO0FBQzdELFVBQU0sSUFBSW5DLEtBQUosQ0FBVyxnQ0FBK0JtQyxjQUFlLGdCQUEvQyxHQUNiLHNEQUFxRHJELCtCQUFnQyxFQURsRixDQUFOO0FBRUQ7O0FBQ0QsTUFBSVMsZ0JBQUVDLE9BQUYsQ0FBVTZCLFVBQVYsS0FBeUIsQ0FBQzlCLGdCQUFFNkMsU0FBRixDQUFZZixVQUFaLENBQTlCLEVBQXVEO0FBQ3JELFVBQU0sSUFBSXJCLEtBQUosQ0FBVSx3Q0FBVixDQUFOO0FBQ0Q7O0FBQ0QsUUFBTVYsR0FBRyxHQUFHSixZQUFZLENBQUUsT0FBTWlELGNBQWUsRUFBdkIsRUFBMEIvQyxhQUExQixFQUF5Q2lDLFVBQXpDLENBQXhCOztBQUNBLE1BQUk7QUFDRixVQUFNO0FBQUNDLE1BQUFBLE1BQUQ7QUFBU0MsTUFBQUE7QUFBVCxRQUFtQixNQUFNLEtBQUsxQixLQUFMLENBQVdQLEdBQVgsRUFBZ0I7QUFDN0NrQyxNQUFBQSxZQUFZLEVBQUUsS0FBS0Msa0JBQUwsQ0FBd0JDO0FBRE8sS0FBaEIsQ0FBL0I7O0FBR0EsUUFBSSxDQUFDbkMsZ0JBQUUwQixRQUFGLENBQVdLLE1BQVgsRUFBbUIsUUFBbkIsQ0FBTCxFQUFtQztBQUNqQyxZQUFNLElBQUl0QixLQUFKLENBQVV1QixNQUFNLElBQUlELE1BQXBCLENBQU47QUFDRDtBQUNGLEdBUEQsQ0FPRSxPQUFPTyxDQUFQLEVBQVU7QUFDVixVQUFNLElBQUk3QixLQUFKLENBQVcsMEJBQXlCbUMsY0FBZSxzQkFBekMsR0FDYixtQkFBa0JOLENBQUMsQ0FBQ04sTUFBRixJQUFZTSxDQUFDLENBQUNQLE1BQWQsSUFBd0JPLENBQUMsQ0FBQ0MsT0FBUSxFQURqRCxDQUFOO0FBRUQ7QUFDRixDQXJCRDs7QUE0QkFuRCxxQkFBcUIsQ0FBQzBELGNBQXRCLEdBQXVDLGVBQWVBLGNBQWYsR0FBaUM7QUFDdEUsUUFBTWYsTUFBTSxHQUFHLE1BQU0sS0FBS3pCLEtBQUwsQ0FBVyxDQUFDLFNBQUQsRUFBWSxRQUFaLENBQVgsQ0FBckI7O0FBQ0EsTUFBSXlDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxrQkFBaEIsRUFBb0M7QUFHbEMsVUFBTUMsV0FBVyxHQUFHQyxjQUFLQyxPQUFMLENBQWFMLE9BQU8sQ0FBQ00sR0FBUixFQUFiLEVBQTRCLGFBQTVCLENBQXBCOztBQUNBMUIsb0JBQUlDLEtBQUosQ0FBVyw2QkFBNEJzQixXQUFZLEVBQW5EOztBQUNBLFVBQU1JLGtCQUFHQyxTQUFILENBQWFMLFdBQWIsRUFBMEJuQixNQUExQixDQUFOO0FBQ0Q7O0FBQ0QsU0FBTyxrQ0FBb0JBLE1BQXBCLEtBQStCLHVDQUF5QkEsTUFBekIsQ0FBL0IsSUFBbUUsQ0FBQyw4QkFBZ0JBLE1BQWhCLENBQTNFO0FBQ0QsQ0FWRDs7QUFlQTNDLHFCQUFxQixDQUFDb0UsZUFBdEIsR0FBd0MsZUFBZUEsZUFBZixHQUFrQztBQUN4RTdCLGtCQUFJOEIsSUFBSixDQUFTLDhDQUFUOztBQUdBLFFBQU0sS0FBS0MsV0FBTCxFQUFOOztBQUVBLE1BQUksT0FBTSxLQUFLQyxXQUFMLEVBQU4sSUFBMkIsRUFBL0IsRUFBbUM7QUFDakMsVUFBTSxLQUFLckQsS0FBTCxDQUFXLENBQUMsSUFBRCxFQUFPLGtCQUFQLENBQVgsQ0FBTjtBQUNBO0FBQ0Q7O0FBRUQsUUFBTXlCLE1BQU0sR0FBRyxNQUFNLEtBQUt6QixLQUFMLENBQVcsQ0FBQyxTQUFELEVBQVksUUFBWixFQUFzQixTQUF0QixDQUFYLENBQXJCOztBQUNBLE1BQUksQ0FBQyx1Q0FBeUJ5QixNQUF6QixDQUFMLEVBQXVDO0FBQ3JDSixvQkFBSUMsS0FBSixDQUFVLG1DQUFWOztBQUNBO0FBQ0Q7O0FBRURELGtCQUFJQyxLQUFKLENBQVUsb0NBQVY7O0FBQ0EsTUFBSSxNQUFNLEtBQUtnQyxZQUFMLEVBQVYsRUFBK0I7QUFDN0IsVUFBTUMsa0JBQUVDLEtBQUYsQ0FBUXBFLHVCQUFSLENBQU47QUFDRDs7QUFDRGlDLGtCQUFJQyxLQUFKLENBQVUsK0NBQVY7O0FBQ0EsUUFBTSxLQUFLdEIsS0FBTCxDQUFXLENBQUMsU0FBRCxFQUFZLE1BQVosRUFBb0IsY0FBcEIsRUFBb0MsR0FBcEMsQ0FBWCxDQUFOO0FBQ0EsUUFBTSxLQUFLeUQsSUFBTCxFQUFOO0FBQ0EsUUFBTTVELE9BQU8sQ0FBQyxJQUFELENBQWI7QUFDRCxDQXpCRDs7QUErQkFmLHFCQUFxQixDQUFDc0UsV0FBdEIsR0FBb0MsZUFBZUEsV0FBZixHQUE4QjtBQUNoRSxRQUFNLEtBQUtNLFFBQUwsQ0FBY3hFLGFBQWQsQ0FBTjtBQUNBLFFBQU0sS0FBS3dFLFFBQUwsQ0FBY3ZFLGNBQWQsQ0FBTjtBQUNELENBSEQ7O2VBS2VMLHFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQge1xuICBpc1Nob3dpbmdMb2Nrc2NyZWVuLCBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQsIGlzU2NyZWVuT25GdWxseSxcbn0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IGxvY2tNYW5hZ2VtZW50TWV0aG9kcyA9IHt9O1xuXG5jb25zdCBDUkVERU5USUFMX0NBTk5PVF9CRV9OVUxMX09SX0VNUFRZX0VSUk9SID0gYENyZWRlbnRpYWwgY2FuJ3QgYmUgbnVsbCBvciBlbXB0eWA7XG5jb25zdCBDUkVERU5USUFMX0RJRF9OT1RfTUFUQ0hfRVJST1IgPSBgZGlkbid0IG1hdGNoYDtcbmNvbnN0IFNVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVMgPSBbJ3Bhc3N3b3JkJywgJ3BpbicsICdwYXR0ZXJuJ107XG5jb25zdCBLRVlDT0RFX1BPV0VSID0gMjY7XG5jb25zdCBLRVlDT0RFX1dBS0VVUCA9IDIyNDsgLy8gd29ya3Mgb3ZlciBBUEkgTGV2ZWwgMjBcbmNvbnN0IEhJREVfS0VZQk9BUkRfV0FJVF9USU1FID0gMTAwO1xuXG5mdW5jdGlvbiBidWlsZENvbW1hbmQgKHZlcmIsIG9sZENyZWRlbnRpYWwgPSBudWxsLCAuLi5hcmdzKSB7XG4gIGNvbnN0IGNtZCA9IFsnbG9ja3NldHRpbmdzJywgdmVyYl07XG4gIGlmICghXy5pc0VtcHR5KG9sZENyZWRlbnRpYWwpKSB7XG4gICAgY21kLnB1c2goJy0tb2xkJywgb2xkQ3JlZGVudGlhbCk7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkoYXJncykpIHtcbiAgICBjbWQucHVzaCguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gY21kO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzd2lwZVVwIChhZGIpIHtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYWRiLnNoZWxsKFsnZHVtcHN5cycsICd3aW5kb3cnXSk7XG4gIGNvbnN0IGRpbWVuc2lvbnNNYXRjaCA9IC9pbml0PShcXGQrKXgoXFxkKykvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFkaW1lbnNpb25zTWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSB0aGUgZGlzcGxheSBzaXplJyk7XG4gIH1cbiAgY29uc3QgZGlzcGxheVdpZHRoID0gcGFyc2VJbnQoZGltZW5zaW9uc01hdGNoWzFdLCAxMCk7XG4gIGNvbnN0IGRpc3BsYXlIZWlnaHQgPSBwYXJzZUludChkaW1lbnNpb25zTWF0Y2hbMl0sIDEwKTtcbiAgY29uc3QgeDAgPSBkaXNwbGF5V2lkdGggLyAyO1xuICBjb25zdCB5MCA9IGRpc3BsYXlIZWlnaHQgLyA1ICogNDtcbiAgY29uc3QgeDEgPSB4MDtcbiAgY29uc3QgeTEgPSBkaXNwbGF5SGVpZ2h0IC8gNTtcbiAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAnaW5wdXQnLCAndG91Y2hzY3JlZW4nLCAnc3dpcGUnLFxuICAgIC4uLihbeDAsIHkwLCB4MSwgeTFdLm1hcCgoYykgPT4gTWF0aC50cnVuYyhjKSkpXG4gIF0pO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBsb2NrIHNldHRpbmdzIG1hbmFnZW1lbnQgd2l0aCBgbG9ja3NldHRpbmdzYFxuICogY29tbWFuZCBsaW5lIHRvb2wuIFRoaXMgdG9vbCBoYXMgYmVlbiBhZGRlZCB0byBBbmRyb2lkIHRvb2xzZXQgc2luY2UgIEFQSSAyNyBPcmVvXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuIFRoZSByZXN1bHQgaXMgY2FjaGVkIHBlciBBREIgaW5zdGFuY2VcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPSBhc3luYyBmdW5jdGlvbiBpc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkICgpIHtcbiAgaWYgKCFfLmlzQm9vbGVhbih0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkKSkge1xuICAgIGNvbnN0IHBhc3NGbGFnID0gJ19fUEFTU19fJztcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW2Bsb2Nrc2V0dGluZ3MgaGVscCAmJiBlY2hvICR7cGFzc0ZsYWd9YF0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkID0gXy5pbmNsdWRlcyhvdXRwdXQsIHBhc3NGbGFnKTtcbiAgICBsb2cuZGVidWcoYEV4dGVuZGVkIGxvY2sgc2V0dGluZ3MgbWFuYWdlbWVudCBpcyBgICtcbiAgICAgIGAke3RoaXMuX2lzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPyAnJyA6ICdub3QgJ31zdXBwb3J0ZWRgKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZDtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY3JlZGVudGlhbCBpcyBtYXRjaGVzIHRvIHRoZSBjdXJyZW50bHkgc2V0IG9uZS5cbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGNyZWRlbnRpYWwgW251bGxdIFRoZSBjcmVkZW50aWFsIHZhbHVlLiBJdCBjb3VsZCBiZSBlaXRoZXJcbiAqIHBpbiwgcGFzc3dvcmQgb3IgYSBwYXR0ZXJuLiBBIHBhdHRlcm4gaXMgc3BlY2lmaWVkIGJ5IGEgbm9uLXNlcGFyYXRlZCBsaXN0XG4gKiBvZiBudW1iZXJzIHRoYXQgaW5kZXggdGhlIGNlbGwgb24gdGhlIHBhdHRlcm4gaW4gYSAxLWJhc2VkIG1hbm5lciBpbiBsZWZ0XG4gKiB0byByaWdodCBhbmQgdG9wIHRvIGJvdHRvbSBvcmRlciwgaS5lLiB0aGUgdG9wLWxlZnQgY2VsbCBpcyBpbmRleGVkIHdpdGggMSxcbiAqIHdoZXJlYXMgdGhlIGJvdHRvbS1yaWdodCBjZWxsIGlzIGluZGV4ZWQgd2l0aCA5LiBFeGFtcGxlOiAxMjM0LlxuICogbnVsbC9lbXB0eSB2YWx1ZSBhc3N1bWVzIHRoZSBkZXZpY2UgaGFzIG5vIGxvY2sgY3VycmVudGx5IHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGdpdmVuIGNyZWRlbnRpYWwgbWF0Y2hlcyB0byB0aGUgZGV2aWNlJ3Mgb25lXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHZlcmlmaWNhdGlvbiBmYWNlcyBhbiB1bmV4cGVjdGVkIGVycm9yXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy52ZXJpZnlMb2NrQ3JlZGVudGlhbCA9IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUxvY2tDcmVkZW50aWFsIChjcmVkZW50aWFsID0gbnVsbCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCB0aGlzLnNoZWxsKGJ1aWxkQ29tbWFuZCgndmVyaWZ5JywgY3JlZGVudGlhbCksIHtcbiAgICAgIG91dHB1dEZvcm1hdDogdGhpcy5FWEVDX09VVFBVVF9GT1JNQVQuRlVMTFxuICAgIH0pO1xuICAgIGlmIChfLmluY2x1ZGVzKHN0ZG91dCwgJ3ZlcmlmaWVkIHN1Y2Nlc3NmdWxseScpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFtgZGlkbid0IG1hdGNoYCwgQ1JFREVOVElBTF9DQU5OT1RfQkVfTlVMTF9PUl9FTVBUWV9FUlJPUl1cbiAgICAgICAgLnNvbWUoKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIGxvY2sgY3JlZGVudGlhbCB2ZXJpZmljYXRpb24gZmFpbGVkLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLnN0ZG91dCB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIGN1cnJlbnQgbG9jayBjcmVkZW50aWFscy4gVXN1YWxseSBpdCB0YWtlcyBzZXZlcmFsIHNlY29uZHMgZm9yIGEgZGV2aWNlIHRvXG4gKiBzeW5jIHRoZSBjcmVkZW50aWFsIHN0YXRlIGFmdGVyIHRoaXMgbWV0aG9kIHJldHVybnMuXG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBjcmVkZW50aWFsIFtudWxsXSBUaGUgY3JlZGVudGlhbCB2YWx1ZS4gSXQgY291bGQgYmUgZWl0aGVyXG4gKiBwaW4sIHBhc3N3b3JkIG9yIGEgcGF0dGVybi4gQSBwYXR0ZXJuIGlzIHNwZWNpZmllZCBieSBhIG5vbi1zZXBhcmF0ZWQgbGlzdFxuICogb2YgbnVtYmVycyB0aGF0IGluZGV4IHRoZSBjZWxsIG9uIHRoZSBwYXR0ZXJuIGluIGEgMS1iYXNlZCBtYW5uZXIgaW4gbGVmdFxuICogdG8gcmlnaHQgYW5kIHRvcCB0byBib3R0b20gb3JkZXIsIGkuZS4gdGhlIHRvcC1sZWZ0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDEsXG4gKiB3aGVyZWFzIHRoZSBib3R0b20tcmlnaHQgY2VsbCBpcyBpbmRleGVkIHdpdGggOS4gRXhhbXBsZTogMTIzNC5cbiAqIG51bGwvZW1wdHkgdmFsdWUgYXNzdW1lcyB0aGUgZGV2aWNlIGhhcyBubyBsb2NrIGN1cnJlbnRseSBzZXQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlcmF0aW9uIGZhY2VzIGFuIHVuZXhwZWN0ZWQgZXJyb3JcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmNsZWFyTG9ja0NyZWRlbnRpYWwgPSBhc3luYyBmdW5jdGlvbiBjbGVhckxvY2tDcmVkZW50aWFsIChjcmVkZW50aWFsID0gbnVsbCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCB0aGlzLnNoZWxsKGJ1aWxkQ29tbWFuZCgnY2xlYXInLCBjcmVkZW50aWFsKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKCFbJ3VzZXIgaGFzIG5vIHBhc3N3b3JkJywgJ0xvY2sgY3JlZGVudGlhbCBjbGVhcmVkJ11cbiAgICAgICAgLnNvbWUoKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RkZXJyIHx8IHN0ZG91dCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgZGV2aWNlIGxvY2sgY3JlZGVudGlhbC4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5zdGRvdXQgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgbG9ja2VkIHdpdGggYSBjcmVkZW50aWFsIChlaXRoZXIgcGluIG9yIGEgcGFzc3dvcmRcbiAqIG9yIGEgcGF0dGVybikuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGxvY2tlZFxuICogQHRocm93cyB7RXJyb3J9IElmIG9wZXJhdGlvbiBmYWNlcyBhbiB1bmV4cGVjdGVkIGVycm9yXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5pc0xvY2tFbmFibGVkID0gYXN5bmMgZnVuY3Rpb24gaXNMb2NrRW5hYmxlZCAoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoYnVpbGRDb21tYW5kKCdnZXQtZGlzYWJsZWQnKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKC9cXGJmYWxzZVxcYi8udGVzdChzdGRvdXQpXG4gICAgICAgIHx8IFtDUkVERU5USUFMX0RJRF9OT1RfTUFUQ0hfRVJST1IsIENSRURFTlRJQUxfQ0FOTk9UX0JFX05VTExfT1JfRU1QVFlfRVJST1JdLnNvbWUoXG4gICAgICAgICAgKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKC9cXGJ0cnVlXFxiLy50ZXN0KHN0ZG91dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKHN0ZGVyciB8fCBzdGRvdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2hlY2sgaWYgZGV2aWNlIGxvY2sgaXMgZW5hYmxlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGRldmljZSBsb2NrLlxuICpcbiAqIEBwYXJhbSB7IXN0cmluZ30gY3JlZGVudGlhbFR5cGUgT25lIG9mOiBwYXNzd29yZCwgcGluLCBwYXR0ZXJuLlxuICogQHBhcmFtIHshc3RyaW5nfSBjcmVkZW50aWFsIEEgbm9uLWVtcHR5IGNyZWRlbnRpYWwgdmFsdWUgdG8gYmUgc2V0LlxuICogTWFrZSBzdXJlIHlvdXIgbmV3IGNyZWRlbnRpYWwgbWF0Y2hlcyB0byB0aGUgYWN0dWFsIHN5c3RlbSBzZWN1cml0eSByZXF1aXJlbWVudHMsXG4gKiBlLmcuIGEgbWluaW11bSBwYXNzd29yZCBsZW5ndGguIEEgcGF0dGVybiBpcyBzcGVjaWZpZWQgYnkgYSBub24tc2VwYXJhdGVkIGxpc3RcbiAqIG9mIG51bWJlcnMgdGhhdCBpbmRleCB0aGUgY2VsbCBvbiB0aGUgcGF0dGVybiBpbiBhIDEtYmFzZWQgbWFubmVyIGluIGxlZnRcbiAqIHRvIHJpZ2h0IGFuZCB0b3AgdG8gYm90dG9tIG9yZGVyLCBpLmUuIHRoZSB0b3AtbGVmdCBjZWxsIGlzIGluZGV4ZWQgd2l0aCAxLFxuICogd2hlcmVhcyB0aGUgYm90dG9tLXJpZ2h0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDkuIEV4YW1wbGU6IDEyMzQuXG4gKiBAcGFyYW0gez9zdHJpbmd9IG9sZENyZWRlbnRpYWwgW251bGxdIEFuIG9sZCBjcmVkZW50aWFsIHN0cmluZy5cbiAqIEl0IGlzIG9ubHkgcmVxdWlyZWQgdG8gYmUgc2V0IGluIGNhc2UgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBjdXJyZW50XG4gKiBjcmVkZW50aWFsIHJhdGhlciB0aGFuIHRvIHNldCBhIG5ldyBvbmUuIFNldHRpbmcgaXQgdG8gYSB3cm9uZyB2YWx1ZSB3aWxsXG4gKiBtYWtlIHRoaXMgbWV0aG9kIHRvIGZhaWwgYW5kIHRocm93IGFuIGV4Y2VwdGlvbi5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHZlcmlmeWluZyBpbnB1dCBhcmd1bWVudHMgb3Igc2V0dGluZ1xuICogdGhlIGNyZWRlbnRpYWxcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLnNldExvY2tDcmVkZW50aWFsID0gYXN5bmMgZnVuY3Rpb24gc2V0TG9ja0NyZWRlbnRpYWwgKFxuICBjcmVkZW50aWFsVHlwZSwgY3JlZGVudGlhbCwgb2xkQ3JlZGVudGlhbCA9IG51bGwpIHtcbiAgaWYgKCFTVVBQT1JURURfTE9DS19DUkVERU5USUFMX1RZUEVTLmluY2x1ZGVzKGNyZWRlbnRpYWxUeXBlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIGxvY2sgY3JlZGVudGlhbCB0eXBlICcke2NyZWRlbnRpYWxUeXBlfScgaXMgdW5rbm93bi4gYCArXG4gICAgICBgT25seSB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWwgdHlwZXMgYXJlIHN1cHBvcnRlZDogJHtTVVBQT1JURURfTE9DS19DUkVERU5USUFMX1RZUEVTfWApO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoY3JlZGVudGlhbCkgJiYgIV8uaXNJbnRlZ2VyKGNyZWRlbnRpYWwpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEZXZpY2UgbG9jayBjcmVkZW50aWFsIGNhbm5vdCBiZSBlbXB0eScpO1xuICB9XG4gIGNvbnN0IGNtZCA9IGJ1aWxkQ29tbWFuZChgc2V0LSR7Y3JlZGVudGlhbFR5cGV9YCwgb2xkQ3JlZGVudGlhbCwgY3JlZGVudGlhbCk7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoY21kLCB7XG4gICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMuRVhFQ19PVVRQVVRfRk9STUFULkZVTExcbiAgICB9KTtcbiAgICBpZiAoIV8uaW5jbHVkZXMoc3Rkb3V0LCAnc2V0IHRvJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNldHRpbmcgb2YgZGV2aWNlIGxvY2sgJHtjcmVkZW50aWFsVHlwZX0gY3JlZGVudGlhbCBmYWlsZWQuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgc2NyZWVuIGxvY2sgc3RhdGUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGRldmljZSBpcyBsb2NrZWQuXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5pc1NjcmVlbkxvY2tlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzU2NyZWVuTG9ja2VkICgpIHtcbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAnd2luZG93J10pO1xuICBpZiAocHJvY2Vzcy5lbnYuQVBQSVVNX0xPR19EVU1QU1lTKSB7XG4gICAgLy8gb3B0aW9uYWwgZGVidWdnaW5nXG4gICAgLy8gaWYgdGhlIG1ldGhvZCBpcyBub3Qgd29ya2luZywgdHVybiBpdCBvbiBhbmQgc2VuZCB1cyB0aGUgb3V0cHV0XG4gICAgY29uc3QgZHVtcHN5c0ZpbGUgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2R1bXBzeXMubG9nJyk7XG4gICAgbG9nLmRlYnVnKGBXcml0aW5nIGR1bXBzeXMgb3V0cHV0IHRvICR7ZHVtcHN5c0ZpbGV9YCk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGR1bXBzeXNGaWxlLCBzdGRvdXQpO1xuICB9XG4gIHJldHVybiBpc1Nob3dpbmdMb2Nrc2NyZWVuKHN0ZG91dCkgfHwgaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkKHN0ZG91dCkgfHwgIWlzU2NyZWVuT25GdWxseShzdGRvdXQpO1xufTtcblxuLyoqXG4gKiBEaXNtaXNzZXMga2V5Z3VhcmQgb3ZlcmxheS5cbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmRpc21pc3NLZXlndWFyZCA9IGFzeW5jIGZ1bmN0aW9uIGRpc21pc3NLZXlndWFyZCAoKSB7XG4gIGxvZy5pbmZvKCdXYWtpbmcgdXAgdGhlIGRldmljZSB0byBkaXNtaXNzIHRoZSBrZXlndWFyZCcpO1xuICAvLyBTY3JlZW4gb2ZmIG9uY2UgdG8gZm9yY2UgcHJlLWlucHV0dGVkIHRleHQgZmllbGQgY2xlYW4gYWZ0ZXIgd2FrZS11cFxuICAvLyBKdXN0IHNjcmVlbiBvbiBpZiB0aGUgc2NyZWVuIGRlZmF1bHRzIG9mZlxuICBhd2FpdCB0aGlzLmN5Y2xlV2FrZVVwKCk7XG5cbiAgaWYgKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA+IDIxKSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3dtJywgJ2Rpc21pc3Mta2V5Z3VhcmQnXSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAnd2luZG93JywgJ3dpbmRvd3MnXSk7XG4gIGlmICghaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkKHN0ZG91dCkpIHtcbiAgICBsb2cuZGVidWcoJ1RoZSBrZXlndWFyZCBzZWVtcyB0byBiZSBpbmFjdGl2ZScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnU3dpcGluZyB1cCB0byBkaXNtaXNzIHRoZSBrZXlndWFyZCcpO1xuICBpZiAoYXdhaXQgdGhpcy5oaWRlS2V5Ym9hcmQoKSkge1xuICAgIGF3YWl0IEIuZGVsYXkoSElERV9LRVlCT0FSRF9XQUlUX1RJTUUpO1xuICB9XG4gIGxvZy5kZWJ1ZygnRGlzbWlzc2luZyBub3RpZmljYXRpb25zIGZyb20gdGhlIHVubG9jayB2aWV3Jyk7XG4gIGF3YWl0IHRoaXMuc2hlbGwoWydzZXJ2aWNlJywgJ2NhbGwnLCAnbm90aWZpY2F0aW9uJywgJzEnXSk7XG4gIGF3YWl0IHRoaXMuYmFjaygpO1xuICBhd2FpdCBzd2lwZVVwKHRoaXMpO1xufTtcblxuLyoqXG4gKiBQcmVzc2VzIHRoZSBjb3JyZXNwb25kaW5nIGtleSBjb21iaW5hdGlvbiB0byBtYWtlIHN1cmUgdGhlIGRldmljZSdzIHNjcmVlblxuICogaXMgbm90IHR1cm5lZCBvZmYgYW5kIGlzIGxvY2tlZCBpZiB0aGUgbGF0dGVyIGlzIGVuYWJsZWQuXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5jeWNsZVdha2VVcCA9IGFzeW5jIGZ1bmN0aW9uIGN5Y2xlV2FrZVVwICgpIHtcbiAgYXdhaXQgdGhpcy5rZXlldmVudChLRVlDT0RFX1BPV0VSKTtcbiAgYXdhaXQgdGhpcy5rZXlldmVudChLRVlDT0RFX1dBS0VVUCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2NrTWFuYWdlbWVudE1ldGhvZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9sb2NrbWdtdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
224
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9sb2NrbWdtdC5qcyJdLCJuYW1lcyI6WyJsb2NrTWFuYWdlbWVudE1ldGhvZHMiLCJDUkVERU5USUFMX0NBTk5PVF9CRV9OVUxMX09SX0VNUFRZX0VSUk9SIiwiQ1JFREVOVElBTF9ESURfTk9UX01BVENIX0VSUk9SIiwiU1VQUE9SVEVEX0xPQ0tfQ1JFREVOVElBTF9UWVBFUyIsIktFWUNPREVfUE9XRVIiLCJLRVlDT0RFX1dBS0VVUCIsIkhJREVfS0VZQk9BUkRfV0FJVF9USU1FIiwiYnVpbGRDb21tYW5kIiwidmVyYiIsIm9sZENyZWRlbnRpYWwiLCJhcmdzIiwiY21kIiwiXyIsImlzRW1wdHkiLCJwdXNoIiwic3dpcGVVcCIsImFkYiIsIm91dHB1dCIsInNoZWxsIiwiZGltZW5zaW9uc01hdGNoIiwiZXhlYyIsIkVycm9yIiwiZGlzcGxheVdpZHRoIiwicGFyc2VJbnQiLCJkaXNwbGF5SGVpZ2h0IiwieDAiLCJ5MCIsIngxIiwieTEiLCJtYXAiLCJjIiwiTWF0aCIsInRydW5jIiwiaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCIsImlzQm9vbGVhbiIsIl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkIiwicGFzc0ZsYWciLCJpZ24iLCJpbmNsdWRlcyIsImxvZyIsImRlYnVnIiwidmVyaWZ5TG9ja0NyZWRlbnRpYWwiLCJjcmVkZW50aWFsIiwic3Rkb3V0Iiwic3RkZXJyIiwib3V0cHV0Rm9ybWF0IiwiRVhFQ19PVVRQVVRfRk9STUFUIiwiRlVMTCIsInNvbWUiLCJ4IiwiZSIsIm1lc3NhZ2UiLCJjbGVhckxvY2tDcmVkZW50aWFsIiwiaXNMb2NrRW5hYmxlZCIsInRlc3QiLCJzZXRMb2NrQ3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwiaXNJbnRlZ2VyIiwiaXNTY3JlZW5Mb2NrZWQiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX0xPR19EVU1QU1lTIiwiZHVtcHN5c0ZpbGUiLCJwYXRoIiwicmVzb2x2ZSIsImN3ZCIsImZzIiwid3JpdGVGaWxlIiwiZGlzbWlzc0tleWd1YXJkIiwiaW5mbyIsImN5Y2xlV2FrZVVwIiwiZ2V0QXBpTGV2ZWwiLCJoaWRlS2V5Ym9hcmQiLCJCIiwiZGVsYXkiLCJiYWNrIiwia2V5ZXZlbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsRUFBOUI7QUFFQSxNQUFNQyx3Q0FBd0MsR0FBSSxtQ0FBbEQ7QUFDQSxNQUFNQyw4QkFBOEIsR0FBSSxjQUF4QztBQUNBLE1BQU1DLCtCQUErQixHQUFHLENBQUMsVUFBRCxFQUFhLEtBQWIsRUFBb0IsU0FBcEIsQ0FBeEM7QUFDQSxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7QUFDQSxNQUFNQyxjQUFjLEdBQUcsR0FBdkI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyxHQUFoQzs7QUFFQSxTQUFTQyxZQUFULENBQXVCQyxJQUF2QixFQUE2QkMsYUFBYSxHQUFHLElBQTdDLEVBQW1ELEdBQUdDLElBQXRELEVBQTREO0FBQzFELFFBQU1DLEdBQUcsR0FBRyxDQUFDLGNBQUQsRUFBaUJILElBQWpCLENBQVo7O0FBQ0EsTUFBSSxDQUFDSSxnQkFBRUMsT0FBRixDQUFVSixhQUFWLENBQUwsRUFBK0I7QUFDN0JFLElBQUFBLEdBQUcsQ0FBQ0csSUFBSixDQUFTLE9BQVQsRUFBa0JMLGFBQWxCO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDRyxnQkFBRUMsT0FBRixDQUFVSCxJQUFWLENBQUwsRUFBc0I7QUFDcEJDLElBQUFBLEdBQUcsQ0FBQ0csSUFBSixDQUFTLEdBQUdKLElBQVo7QUFDRDs7QUFDRCxTQUFPQyxHQUFQO0FBQ0Q7O0FBRUQsZUFBZUksT0FBZixDQUF3QkMsR0FBeEIsRUFBNkI7QUFDM0IsUUFBTUMsTUFBTSxHQUFHLE1BQU1ELEdBQUcsQ0FBQ0UsS0FBSixDQUFVLENBQUMsU0FBRCxFQUFZLFFBQVosQ0FBVixDQUFyQjtBQUNBLFFBQU1DLGVBQWUsR0FBRyxtQkFB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O0FBR0EsUUFBTSxLQUFLQyxXQUFMLEVBQU47O0FBRUEsTUFBSSxPQUFNLEtBQUtDLFdBQUwsRUFBTixJQUEyQixFQUEvQixFQUFtQztBQUNqQyxVQUFNLEtBQUtyRCxLQUFMLENBQVcsQ0FBQyxJQUFELEVBQU8sa0JBQVAsQ0FBWCxDQUFOO0FBQ0E7QUFDRDs7QUFFRCxRQUFNeUIsTUFBTSxHQUFHLE1BQU0sS0FBS3pCLEtBQUwsQ0FBVyxDQUFDLFNBQUQsRUFBWSxRQUFaLEVBQXNCLFNBQXRCLENBQVgsQ0FBckI7O0FBQ0EsTUFBSSxDQUFDLHVDQUF5QnlCLE1BQXpCLENBQUwsRUFBdUM7QUFDckNKLG9CQUFJQyxLQUFKLENBQVUsbUNBQVY7O0FBQ0E7QUFDRDs7QUFFREQsa0JBQUlDLEtBQUosQ0FBVSxvQ0FBVjs7QUFDQSxNQUFJLE1BQU0sS0FBS2dDLFlBQUwsRUFBVixFQUErQjtBQUM3QixVQUFNQyxrQkFBRUMsS0FBRixDQUFRcEUsdUJBQVIsQ0FBTjtBQUNEOztBQUNEaUMsa0JBQUlDLEtBQUosQ0FBVSwrQ0FBVjs7QUFDQSxRQUFNLEtBQUt0QixLQUFMLENBQVcsQ0FBQyxTQUFELEVBQVksTUFBWixFQUFvQixjQUFwQixFQUFvQyxHQUFwQyxDQUFYLENBQU47QUFDQSxRQUFNLEtBQUt5RCxJQUFMLEVBQU47QUFDQSxRQUFNNUQsT0FBTyxDQUFDLElBQUQsQ0FBYjtBQUNELENBekJEOztBQStCQWYscUJBQXFCLENBQUNzRSxXQUF0QixHQUFvQyxlQUFlQSxXQUFmLEdBQThCO0FBQ2hFLFFBQU0sS0FBS00sUUFBTCxDQUFjeEUsYUFBZCxDQUFOO0FBQ0EsUUFBTSxLQUFLd0UsUUFBTCxDQUFjdkUsY0FBZCxDQUFOO0FBQ0QsQ0FIRDs7ZUFLZUwscUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge1xuICBpc1Nob3dpbmdMb2Nrc2NyZWVuLCBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQsIGlzU2NyZWVuT25GdWxseSxcbn0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IGxvY2tNYW5hZ2VtZW50TWV0aG9kcyA9IHt9O1xuXG5jb25zdCBDUkVERU5USUFMX0NBTk5PVF9CRV9OVUxMX09SX0VNUFRZX0VSUk9SID0gYENyZWRlbnRpYWwgY2FuJ3QgYmUgbnVsbCBvciBlbXB0eWA7XG5jb25zdCBDUkVERU5USUFMX0RJRF9OT1RfTUFUQ0hfRVJST1IgPSBgZGlkbid0IG1hdGNoYDtcbmNvbnN0IFNVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVMgPSBbJ3Bhc3N3b3JkJywgJ3BpbicsICdwYXR0ZXJuJ107XG5jb25zdCBLRVlDT0RFX1BPV0VSID0gMjY7XG5jb25zdCBLRVlDT0RFX1dBS0VVUCA9IDIyNDsgLy8gd29ya3Mgb3ZlciBBUEkgTGV2ZWwgMjBcbmNvbnN0IEhJREVfS0VZQk9BUkRfV0FJVF9USU1FID0gMTAwO1xuXG5mdW5jdGlvbiBidWlsZENvbW1hbmQgKHZlcmIsIG9sZENyZWRlbnRpYWwgPSBudWxsLCAuLi5hcmdzKSB7XG4gIGNvbnN0IGNtZCA9IFsnbG9ja3NldHRpbmdzJywgdmVyYl07XG4gIGlmICghXy5pc0VtcHR5KG9sZENyZWRlbnRpYWwpKSB7XG4gICAgY21kLnB1c2goJy0tb2xkJywgb2xkQ3JlZGVudGlhbCk7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkoYXJncykpIHtcbiAgICBjbWQucHVzaCguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gY21kO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzd2lwZVVwIChhZGIpIHtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYWRiLnNoZWxsKFsnZHVtcHN5cycsICd3aW5kb3cnXSk7XG4gIGNvbnN0IGRpbWVuc2lvbnNNYXRjaCA9IC9pbml0PShcXGQrKXgoXFxkKykvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFkaW1lbnNpb25zTWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSB0aGUgZGlzcGxheSBzaXplJyk7XG4gIH1cbiAgY29uc3QgZGlzcGxheVdpZHRoID0gcGFyc2VJbnQoZGltZW5zaW9uc01hdGNoWzFdLCAxMCk7XG4gIGNvbnN0IGRpc3BsYXlIZWlnaHQgPSBwYXJzZUludChkaW1lbnNpb25zTWF0Y2hbMl0sIDEwKTtcbiAgY29uc3QgeDAgPSBkaXNwbGF5V2lkdGggLyAyO1xuICBjb25zdCB5MCA9IGRpc3BsYXlIZWlnaHQgLyA1ICogNDtcbiAgY29uc3QgeDEgPSB4MDtcbiAgY29uc3QgeTEgPSBkaXNwbGF5SGVpZ2h0IC8gNTtcbiAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAnaW5wdXQnLCAndG91Y2hzY3JlZW4nLCAnc3dpcGUnLFxuICAgIC4uLihbeDAsIHkwLCB4MSwgeTFdLm1hcCgoYykgPT4gTWF0aC50cnVuYyhjKSkpXG4gIF0pO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBsb2NrIHNldHRpbmdzIG1hbmFnZW1lbnQgd2l0aCBgbG9ja3NldHRpbmdzYFxuICogY29tbWFuZCBsaW5lIHRvb2wuIFRoaXMgdG9vbCBoYXMgYmVlbiBhZGRlZCB0byBBbmRyb2lkIHRvb2xzZXQgc2luY2UgIEFQSSAyNyBPcmVvXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuIFRoZSByZXN1bHQgaXMgY2FjaGVkIHBlciBBREIgaW5zdGFuY2VcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPSBhc3luYyBmdW5jdGlvbiBpc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkICgpIHtcbiAgaWYgKCFfLmlzQm9vbGVhbih0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkKSkge1xuICAgIGNvbnN0IHBhc3NGbGFnID0gJ19fUEFTU19fJztcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW2Bsb2Nrc2V0dGluZ3MgaGVscCAmJiBlY2hvICR7cGFzc0ZsYWd9YF0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkID0gXy5pbmNsdWRlcyhvdXRwdXQsIHBhc3NGbGFnKTtcbiAgICBsb2cuZGVidWcoYEV4dGVuZGVkIGxvY2sgc2V0dGluZ3MgbWFuYWdlbWVudCBpcyBgICtcbiAgICAgIGAke3RoaXMuX2lzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPyAnJyA6ICdub3QgJ31zdXBwb3J0ZWRgKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZDtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY3JlZGVudGlhbCBpcyBtYXRjaGVzIHRvIHRoZSBjdXJyZW50bHkgc2V0IG9uZS5cbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGNyZWRlbnRpYWwgW251bGxdIFRoZSBjcmVkZW50aWFsIHZhbHVlLiBJdCBjb3VsZCBiZSBlaXRoZXJcbiAqIHBpbiwgcGFzc3dvcmQgb3IgYSBwYXR0ZXJuLiBBIHBhdHRlcm4gaXMgc3BlY2lmaWVkIGJ5IGEgbm9uLXNlcGFyYXRlZCBsaXN0XG4gKiBvZiBudW1iZXJzIHRoYXQgaW5kZXggdGhlIGNlbGwgb24gdGhlIHBhdHRlcm4gaW4gYSAxLWJhc2VkIG1hbm5lciBpbiBsZWZ0XG4gKiB0byByaWdodCBhbmQgdG9wIHRvIGJvdHRvbSBvcmRlciwgaS5lLiB0aGUgdG9wLWxlZnQgY2VsbCBpcyBpbmRleGVkIHdpdGggMSxcbiAqIHdoZXJlYXMgdGhlIGJvdHRvbS1yaWdodCBjZWxsIGlzIGluZGV4ZWQgd2l0aCA5LiBFeGFtcGxlOiAxMjM0LlxuICogbnVsbC9lbXB0eSB2YWx1ZSBhc3N1bWVzIHRoZSBkZXZpY2UgaGFzIG5vIGxvY2sgY3VycmVudGx5IHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGdpdmVuIGNyZWRlbnRpYWwgbWF0Y2hlcyB0byB0aGUgZGV2aWNlJ3Mgb25lXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHZlcmlmaWNhdGlvbiBmYWNlcyBhbiB1bmV4cGVjdGVkIGVycm9yXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy52ZXJpZnlMb2NrQ3JlZGVudGlhbCA9IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUxvY2tDcmVkZW50aWFsIChjcmVkZW50aWFsID0gbnVsbCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCB0aGlzLnNoZWxsKGJ1aWxkQ29tbWFuZCgndmVyaWZ5JywgY3JlZGVudGlhbCksIHtcbiAgICAgIG91dHB1dEZvcm1hdDogdGhpcy5FWEVDX09VVFBVVF9GT1JNQVQuRlVMTFxuICAgIH0pO1xuICAgIGlmIChfLmluY2x1ZGVzKHN0ZG91dCwgJ3ZlcmlmaWVkIHN1Y2Nlc3NmdWxseScpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFtgZGlkbid0IG1hdGNoYCwgQ1JFREVOVElBTF9DQU5OT1RfQkVfTlVMTF9PUl9FTVBUWV9FUlJPUl1cbiAgICAgICAgLnNvbWUoKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIGxvY2sgY3JlZGVudGlhbCB2ZXJpZmljYXRpb24gZmFpbGVkLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLnN0ZG91dCB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIGN1cnJlbnQgbG9jayBjcmVkZW50aWFscy4gVXN1YWxseSBpdCB0YWtlcyBzZXZlcmFsIHNlY29uZHMgZm9yIGEgZGV2aWNlIHRvXG4gKiBzeW5jIHRoZSBjcmVkZW50aWFsIHN0YXRlIGFmdGVyIHRoaXMgbWV0aG9kIHJldHVybnMuXG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBjcmVkZW50aWFsIFtudWxsXSBUaGUgY3JlZGVudGlhbCB2YWx1ZS4gSXQgY291bGQgYmUgZWl0aGVyXG4gKiBwaW4sIHBhc3N3b3JkIG9yIGEgcGF0dGVybi4gQSBwYXR0ZXJuIGlzIHNwZWNpZmllZCBieSBhIG5vbi1zZXBhcmF0ZWQgbGlzdFxuICogb2YgbnVtYmVycyB0aGF0IGluZGV4IHRoZSBjZWxsIG9uIHRoZSBwYXR0ZXJuIGluIGEgMS1iYXNlZCBtYW5uZXIgaW4gbGVmdFxuICogdG8gcmlnaHQgYW5kIHRvcCB0byBib3R0b20gb3JkZXIsIGkuZS4gdGhlIHRvcC1sZWZ0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDEsXG4gKiB3aGVyZWFzIHRoZSBib3R0b20tcmlnaHQgY2VsbCBpcyBpbmRleGVkIHdpdGggOS4gRXhhbXBsZTogMTIzNC5cbiAqIG51bGwvZW1wdHkgdmFsdWUgYXNzdW1lcyB0aGUgZGV2aWNlIGhhcyBubyBsb2NrIGN1cnJlbnRseSBzZXQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlcmF0aW9uIGZhY2VzIGFuIHVuZXhwZWN0ZWQgZXJyb3JcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmNsZWFyTG9ja0NyZWRlbnRpYWwgPSBhc3luYyBmdW5jdGlvbiBjbGVhckxvY2tDcmVkZW50aWFsIChjcmVkZW50aWFsID0gbnVsbCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCB0aGlzLnNoZWxsKGJ1aWxkQ29tbWFuZCgnY2xlYXInLCBjcmVkZW50aWFsKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKCFbJ3VzZXIgaGFzIG5vIHBhc3N3b3JkJywgJ0xvY2sgY3JlZGVudGlhbCBjbGVhcmVkJ11cbiAgICAgICAgLnNvbWUoKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RkZXJyIHx8IHN0ZG91dCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgZGV2aWNlIGxvY2sgY3JlZGVudGlhbC4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5zdGRvdXQgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgbG9ja2VkIHdpdGggYSBjcmVkZW50aWFsIChlaXRoZXIgcGluIG9yIGEgcGFzc3dvcmRcbiAqIG9yIGEgcGF0dGVybikuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGxvY2tlZFxuICogQHRocm93cyB7RXJyb3J9IElmIG9wZXJhdGlvbiBmYWNlcyBhbiB1bmV4cGVjdGVkIGVycm9yXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5pc0xvY2tFbmFibGVkID0gYXN5bmMgZnVuY3Rpb24gaXNMb2NrRW5hYmxlZCAoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoYnVpbGRDb21tYW5kKCdnZXQtZGlzYWJsZWQnKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKC9cXGJmYWxzZVxcYi8udGVzdChzdGRvdXQpXG4gICAgICAgIHx8IFtDUkVERU5USUFMX0RJRF9OT1RfTUFUQ0hfRVJST1IsIENSRURFTlRJQUxfQ0FOTk9UX0JFX05VTExfT1JfRU1QVFlfRVJST1JdLnNvbWUoXG4gICAgICAgICAgKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKC9cXGJ0cnVlXFxiLy50ZXN0KHN0ZG91dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKHN0ZGVyciB8fCBzdGRvdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2hlY2sgaWYgZGV2aWNlIGxvY2sgaXMgZW5hYmxlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGRldmljZSBsb2NrLlxuICpcbiAqIEBwYXJhbSB7IXN0cmluZ30gY3JlZGVudGlhbFR5cGUgT25lIG9mOiBwYXNzd29yZCwgcGluLCBwYXR0ZXJuLlxuICogQHBhcmFtIHshc3RyaW5nfSBjcmVkZW50aWFsIEEgbm9uLWVtcHR5IGNyZWRlbnRpYWwgdmFsdWUgdG8gYmUgc2V0LlxuICogTWFrZSBzdXJlIHlvdXIgbmV3IGNyZWRlbnRpYWwgbWF0Y2hlcyB0byB0aGUgYWN0dWFsIHN5c3RlbSBzZWN1cml0eSByZXF1aXJlbWVudHMsXG4gKiBlLmcuIGEgbWluaW11bSBwYXNzd29yZCBsZW5ndGguIEEgcGF0dGVybiBpcyBzcGVjaWZpZWQgYnkgYSBub24tc2VwYXJhdGVkIGxpc3RcbiAqIG9mIG51bWJlcnMgdGhhdCBpbmRleCB0aGUgY2VsbCBvbiB0aGUgcGF0dGVybiBpbiBhIDEtYmFzZWQgbWFubmVyIGluIGxlZnRcbiAqIHRvIHJpZ2h0IGFuZCB0b3AgdG8gYm90dG9tIG9yZGVyLCBpLmUuIHRoZSB0b3AtbGVmdCBjZWxsIGlzIGluZGV4ZWQgd2l0aCAxLFxuICogd2hlcmVhcyB0aGUgYm90dG9tLXJpZ2h0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDkuIEV4YW1wbGU6IDEyMzQuXG4gKiBAcGFyYW0gez9zdHJpbmd9IG9sZENyZWRlbnRpYWwgW251bGxdIEFuIG9sZCBjcmVkZW50aWFsIHN0cmluZy5cbiAqIEl0IGlzIG9ubHkgcmVxdWlyZWQgdG8gYmUgc2V0IGluIGNhc2UgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBjdXJyZW50XG4gKiBjcmVkZW50aWFsIHJhdGhlciB0aGFuIHRvIHNldCBhIG5ldyBvbmUuIFNldHRpbmcgaXQgdG8gYSB3cm9uZyB2YWx1ZSB3aWxsXG4gKiBtYWtlIHRoaXMgbWV0aG9kIHRvIGZhaWwgYW5kIHRocm93IGFuIGV4Y2VwdGlvbi5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHZlcmlmeWluZyBpbnB1dCBhcmd1bWVudHMgb3Igc2V0dGluZ1xuICogdGhlIGNyZWRlbnRpYWxcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLnNldExvY2tDcmVkZW50aWFsID0gYXN5bmMgZnVuY3Rpb24gc2V0TG9ja0NyZWRlbnRpYWwgKFxuICBjcmVkZW50aWFsVHlwZSwgY3JlZGVudGlhbCwgb2xkQ3JlZGVudGlhbCA9IG51bGwpIHtcbiAgaWYgKCFTVVBQT1JURURfTE9DS19DUkVERU5USUFMX1RZUEVTLmluY2x1ZGVzKGNyZWRlbnRpYWxUeXBlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIGxvY2sgY3JlZGVudGlhbCB0eXBlICcke2NyZWRlbnRpYWxUeXBlfScgaXMgdW5rbm93bi4gYCArXG4gICAgICBgT25seSB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWwgdHlwZXMgYXJlIHN1cHBvcnRlZDogJHtTVVBQT1JURURfTE9DS19DUkVERU5USUFMX1RZUEVTfWApO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoY3JlZGVudGlhbCkgJiYgIV8uaXNJbnRlZ2VyKGNyZWRlbnRpYWwpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEZXZpY2UgbG9jayBjcmVkZW50aWFsIGNhbm5vdCBiZSBlbXB0eScpO1xuICB9XG4gIGNvbnN0IGNtZCA9IGJ1aWxkQ29tbWFuZChgc2V0LSR7Y3JlZGVudGlhbFR5cGV9YCwgb2xkQ3JlZGVudGlhbCwgY3JlZGVudGlhbCk7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoY21kLCB7XG4gICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMuRVhFQ19PVVRQVVRfRk9STUFULkZVTExcbiAgICB9KTtcbiAgICBpZiAoIV8uaW5jbHVkZXMoc3Rkb3V0LCAnc2V0IHRvJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNldHRpbmcgb2YgZGV2aWNlIGxvY2sgJHtjcmVkZW50aWFsVHlwZX0gY3JlZGVudGlhbCBmYWlsZWQuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgc2NyZWVuIGxvY2sgc3RhdGUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGRldmljZSBpcyBsb2NrZWQuXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5pc1NjcmVlbkxvY2tlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzU2NyZWVuTG9ja2VkICgpIHtcbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAnd2luZG93J10pO1xuICBpZiAocHJvY2Vzcy5lbnYuQVBQSVVNX0xPR19EVU1QU1lTKSB7XG4gICAgLy8gb3B0aW9uYWwgZGVidWdnaW5nXG4gICAgLy8gaWYgdGhlIG1ldGhvZCBpcyBub3Qgd29ya2luZywgdHVybiBpdCBvbiBhbmQgc2VuZCB1cyB0aGUgb3V0cHV0XG4gICAgY29uc3QgZHVtcHN5c0ZpbGUgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2R1bXBzeXMubG9nJyk7XG4gICAgbG9nLmRlYnVnKGBXcml0aW5nIGR1bXBzeXMgb3V0cHV0IHRvICR7ZHVtcHN5c0ZpbGV9YCk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGR1bXBzeXNGaWxlLCBzdGRvdXQpO1xuICB9XG4gIHJldHVybiBpc1Nob3dpbmdMb2Nrc2NyZWVuKHN0ZG91dCkgfHwgaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkKHN0ZG91dCkgfHwgIWlzU2NyZWVuT25GdWxseShzdGRvdXQpO1xufTtcblxuLyoqXG4gKiBEaXNtaXNzZXMga2V5Z3VhcmQgb3ZlcmxheS5cbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmRpc21pc3NLZXlndWFyZCA9IGFzeW5jIGZ1bmN0aW9uIGRpc21pc3NLZXlndWFyZCAoKSB7XG4gIGxvZy5pbmZvKCdXYWtpbmcgdXAgdGhlIGRldmljZSB0byBkaXNtaXNzIHRoZSBrZXlndWFyZCcpO1xuICAvLyBTY3JlZW4gb2ZmIG9uY2UgdG8gZm9yY2UgcHJlLWlucHV0dGVkIHRleHQgZmllbGQgY2xlYW4gYWZ0ZXIgd2FrZS11cFxuICAvLyBKdXN0IHNjcmVlbiBvbiBpZiB0aGUgc2NyZWVuIGRlZmF1bHRzIG9mZlxuICBhd2FpdCB0aGlzLmN5Y2xlV2FrZVVwKCk7XG5cbiAgaWYgKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA+IDIxKSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3dtJywgJ2Rpc21pc3Mta2V5Z3VhcmQnXSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAnd2luZG93JywgJ3dpbmRvd3MnXSk7XG4gIGlmICghaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkKHN0ZG91dCkpIHtcbiAgICBsb2cuZGVidWcoJ1RoZSBrZXlndWFyZCBzZWVtcyB0byBiZSBpbmFjdGl2ZScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnU3dpcGluZyB1cCB0byBkaXNtaXNzIHRoZSBrZXlndWFyZCcpO1xuICBpZiAoYXdhaXQgdGhpcy5oaWRlS2V5Ym9hcmQoKSkge1xuICAgIGF3YWl0IEIuZGVsYXkoSElERV9LRVlCT0FSRF9XQUlUX1RJTUUpO1xuICB9XG4gIGxvZy5kZWJ1ZygnRGlzbWlzc2luZyBub3RpZmljYXRpb25zIGZyb20gdGhlIHVubG9jayB2aWV3Jyk7XG4gIGF3YWl0IHRoaXMuc2hlbGwoWydzZXJ2aWNlJywgJ2NhbGwnLCAnbm90aWZpY2F0aW9uJywgJzEnXSk7XG4gIGF3YWl0IHRoaXMuYmFjaygpO1xuICBhd2FpdCBzd2lwZVVwKHRoaXMpO1xufTtcblxuLyoqXG4gKiBQcmVzc2VzIHRoZSBjb3JyZXNwb25kaW5nIGtleSBjb21iaW5hdGlvbiB0byBtYWtlIHN1cmUgdGhlIGRldmljZSdzIHNjcmVlblxuICogaXMgbm90IHR1cm5lZCBvZmYgYW5kIGlzIGxvY2tlZCBpZiB0aGUgbGF0dGVyIGlzIGVuYWJsZWQuXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5jeWNsZVdha2VVcCA9IGFzeW5jIGZ1bmN0aW9uIGN5Y2xlV2FrZVVwICgpIHtcbiAgYXdhaXQgdGhpcy5rZXlldmVudChLRVlDT0RFX1BPV0VSKTtcbiAgYXdhaXQgdGhpcy5rZXlldmVudChLRVlDT0RFX1dBS0VVUCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2NrTWFuYWdlbWVudE1ldGhvZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9sb2NrbWdtdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -15,7 +15,7 @@ var _helpers = require("../helpers.js");
15
15
 
16
16
  var _lodash = _interopRequireDefault(require("lodash"));
17
17
 
18
- var _appiumSupport = require("appium-support");
18
+ var _support = require("@appium/support");
19
19
 
20
20
  var _asyncbox = require("asyncbox");
21
21
 
@@ -120,7 +120,7 @@ commands.setDeviceSysLocaleViaSettingApp = async function setDeviceSysLocaleViaS
120
120
 
121
121
  commands.setGeoLocation = async function setGeoLocation(location, isEmulator = false) {
122
122
  const formatLocationValue = (valueName, isRequired = true) => {
123
- if (!_appiumSupport.util.hasValue(location[valueName])) {
123
+ if (!_support.util.hasValue(location[valueName])) {
124
124
  if (isRequired) {
125
125
  throw new Error(`${valueName} must be provided`);
126
126
  }
@@ -181,11 +181,11 @@ commands.setGeoLocation = async function setGeoLocation(location, isEmulator = f
181
181
  } else {
182
182
  const args = ['am', 'startservice', '-e', 'longitude', longitude, '-e', 'latitude', latitude];
183
183
 
184
- if (_appiumSupport.util.hasValue(altitude)) {
184
+ if (_support.util.hasValue(altitude)) {
185
185
  args.push('-e', 'altitude', altitude);
186
186
  }
187
187
 
188
- if (_appiumSupport.util.hasValue(speed)) {
188
+ if (_support.util.hasValue(speed)) {
189
189
  args.push('-e', 'speed', speed);
190
190
  }
191
191
 
@@ -247,7 +247,7 @@ commands.refreshGeoLocationCache = async function refreshGeoLocationCache(timeou
247
247
  }
248
248
 
249
249
  if (logcatMonitor && monitoringPromise) {
250
- const timer = new _appiumSupport.timing.Timer().start();
250
+ const timer = new _support.timing.Timer().start();
251
251
 
252
252
  _logger.default.debug(`Waiting up to ${timeoutMs}ms for the GPS cache to be refreshed`);
253
253
 
@@ -335,7 +335,7 @@ commands.typeUnicode = async function typeUnicode(text) {
335
335
 
336
336
  text = `${text}`;
337
337
 
338
- _logger.default.debug(`Typing ${_appiumSupport.util.pluralize('character', text.length, true)}`);
338
+ _logger.default.debug(`Typing ${_support.util.pluralize('character', text.length, true)}`);
339
339
 
340
340
  if (!text) {
341
341
  return false;
@@ -359,4 +359,4 @@ var _default = commands;
359
359
  exports.default = _default;require('source-map-support').install();
360
360
 
361
361
 
362
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiXSwibmFtZXMiOlsiU0VUVElOR1NfSEVMUEVSX0lEIiwiU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIldJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiREFUQV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OIiwiQU5JTUFUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJBTklNQVRJT05fU0VUVElOR19BQ1RJT04iLCJMT0NBTEVfU0VUVElOR19SRUNFSVZFUiIsIkxPQ0FMRV9TRVRUSU5HX0FDVElPTiIsIkxPQ0FUSU9OX1NFUlZJQ0UiLCJMT0NBVElPTl9SRUNFSVZFUiIsIkxPQ0FUSU9OX1JFVFJJRVZBTF9BQ1RJT04iLCJDTElQQk9BUkRfUkVDRUlWRVIiLCJDTElQQk9BUkRfUkVUUklFVkFMX0FDVElPTiIsIk5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiIsIlNNU19MSVNUX1JFQ0VJVkVSIiwiU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiIsIk1FRElBX1NDQU5fUkVDRUlWRVIiLCJNRURJQV9TQ0FOX0FDVElPTiIsIkFQUElVTV9JTUUiLCJVTklDT0RFX0lNRSIsIkRFRkFVTFRfU0FURUxMSVRFU19DT1VOVCIsIkRFRkFVTFRfQUxUSVRVREUiLCJMT0NBVElPTl9UUkFDS0VSX1RBRyIsIkdQU19DQUNIRV9SRUZSRVNIRURfTE9HUyIsIkdQU19DT09SRElOQVRFU19QQVRURVJOIiwiY29tbWFuZHMiLCJyZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwIiwib3B0cyIsInByb2Nlc3NFeGlzdHMiLCJsb2ciLCJkZWJ1ZyIsInRpbWVvdXQiLCJzdGFydEFwcCIsInBrZyIsImFjdGl2aXR5IiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJzdG9wQXBwIiwid2FpdEZvckxhdW5jaCIsIndhaXRNcyIsImludGVydmFsTXMiLCJlcnIiLCJFcnJvciIsInNldFdpZmlTdGF0ZSIsIm9uIiwiaXNFbXVsYXRvciIsInNoZWxsIiwicHJpdmlsZWdlZCIsImdldEFwaUxldmVsIiwic2V0RGF0YVN0YXRlIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJzZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwIiwibGFuZ3VhZ2UiLCJjb3VudHJ5Iiwic2NyaXB0IiwicGFyYW1zIiwidG9Mb3dlckNhc2UiLCJ0b1VwcGVyQ2FzZSIsInB1c2giLCJzZXRHZW9Mb2NhdGlvbiIsImxvY2F0aW9uIiwiZm9ybWF0TG9jYXRpb25WYWx1ZSIsInZhbHVlTmFtZSIsImlzUmVxdWlyZWQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJmbG9hdFZhbHVlIiwicGFyc2VGbG9hdCIsImlzTmFOIiwiXyIsImNlaWwiLCJsb25naXR1ZGUiLCJsYXRpdHVkZSIsImFsdGl0dWRlIiwic3BlZWQiLCJhcmdzIiwiaXNOaWwiLCJzYXRlbGxpdGVzIiwicGFyc2VJbnQiLCJOdW1iZXIiLCJsZW5ndGgiLCJyZXNldFRlbG5ldEF1dGhUb2tlbiIsImFkYkV4ZWMiLCJtYXAiLCJhcmciLCJyZXBsYWNlIiwiZ2V0R2VvTG9jYXRpb24iLCJvdXRwdXQiLCJzdGRlcnIiLCJzdGRvdXQiLCJtZXNzYWdlIiwibWF0Y2giLCJleGVjIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlIiwidGltZW91dE1zIiwibG9nY2F0TW9uaXRvciIsIm1vbml0b3JpbmdQcm9taXNlIiwiY21kIiwiYWRiIiwiZGVmYXVsdEFyZ3MiLCJTdWJQcm9jZXNzIiwicGF0aCIsInRpbWVvdXRFcnJvck1zZyIsIkIiLCJyZXNvbHZlIiwicmVqZWN0Iiwic2V0VGltZW91dCIsImV2dCIsImxpbmVzIiwic29tZSIsImxpbmUiLCJ4IiwiaW5jbHVkZXMiLCJzdGFydCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJpbmZvIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJpc1J1bm5pbmciLCJzdG9wIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInJ1bkluSW1lQ29udGV4dCIsImdldENsaXBib2FyZCIsInJldHJpZXZlQ2xpcGJvYXJkIiwidHJpbSIsImdldE5vdGlmaWNhdGlvbnMiLCJnZXRTbXNMaXN0IiwibWF4IiwidHlwZVVuaWNvZGUiLCJ0ZXh0IiwicGx1cmFsaXplIiwiaW5wdXRUZXh0IiwiaW1hcCIsImVuY29kZSIsInNjYW5NZWRpYSIsImRlc3RpbmF0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGtCQUFrQixHQUFHLG9CQUEzQjtBQUNBLE1BQU1DLDZCQUE2QixHQUFHLFdBQXRDO0FBQ0EsTUFBTUMsZ0NBQWdDLEdBQUksR0FBRUYsa0JBQW1CLDJDQUEvRDtBQUNBLE1BQU1HLDhCQUE4QixHQUFJLEdBQUVILGtCQUFtQixPQUE3RDtBQUNBLE1BQU1JLGdDQUFnQyxHQUFJLEdBQUVKLGtCQUFtQiwyQ0FBL0Q7QUFDQSxNQUFNSyw4QkFBOEIsR0FBSSxHQUFFTCxrQkFBbUIsa0JBQTdEO0FBQ0EsTUFBTU0sMEJBQTBCLEdBQUksR0FBRU4sa0JBQW1CLHNDQUF6RDtBQUNBLE1BQU1PLHdCQUF3QixHQUFJLEdBQUVQLGtCQUFtQixZQUF2RDtBQUNBLE1BQU1RLHVCQUF1QixHQUFJLEdBQUVSLGtCQUFtQixtQ0FBdEQ7QUFDQSxNQUFNUyxxQkFBcUIsR0FBSSxHQUFFVCxrQkFBbUIsU0FBcEQ7QUFDQSxNQUFNVSxnQkFBZ0IsR0FBSSxHQUFFVixrQkFBbUIsbUJBQS9DO0FBQ0EsTUFBTVcsaUJBQWlCLEdBQUksR0FBRVgsa0JBQW1CLGtDQUFoRDtBQUNBLE1BQU1ZLHlCQUF5QixHQUFJLEdBQUVaLGtCQUFtQixXQUF4RDtBQUNBLE1BQU1hLGtCQUFrQixHQUFJLEdBQUViLGtC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LEVBQTRCRCxJQUFJLENBQUN0RCxNQUFqQyxFQUF5QyxJQUF6QyxDQUErQyxFQUFuRTs7QUFDQSxNQUFJLENBQUNzRCxJQUFMLEVBQVc7QUFDVCxXQUFPLEtBQVA7QUFDRDs7QUFDRCxRQUFNLEtBQUtSLGVBQUwsQ0FDSjNHLFdBREksRUFDUyxZQUFZLE1BQU0sS0FBS3FILFNBQUwsQ0FBZUMsVUFBS0MsTUFBTCxDQUFZSixJQUFaLENBQWYsQ0FEM0IsQ0FBTjtBQUdBLFNBQU8sSUFBUDtBQUNELENBZEQ7O0FBd0JBN0csUUFBUSxDQUFDa0gsU0FBVCxHQUFxQixlQUFlQSxTQUFmLENBQTBCQyxXQUExQixFQUF1QztBQUMxRC9HLGtCQUFJQyxLQUFKLENBQVcsYUFBWThHLFdBQVksbUJBQW5DOztBQUNBLFFBQU1yRCxNQUFNLEdBQUcsTUFBTSxLQUFLekMsS0FBTCxDQUFXLENBQzlCLElBRDhCLEVBQ3hCLFdBRHdCLEVBRTlCLElBRjhCLEVBRXhCOUIsbUJBRndCLEVBRzlCLElBSDhCLEVBR3hCQyxpQkFId0IsRUFJOUIsTUFKOEIsRUFJdEIsTUFKc0IsRUFJZDJILFdBSmMsQ0FBWCxDQUFyQjs7QUFNQSxNQUFJLENBQUN2RSxnQkFBRTZDLFFBQUYsQ0FBVzNCLE1BQVgsRUFBbUIsV0FBbkIsQ0FBTCxFQUFzQztBQUNwQyxVQUFNLElBQUk3QyxLQUFKLENBQVcsaUNBQWdDa0csV0FBWSxLQUE3QyxHQUNiLGtEQURHLENBQU47QUFFRDtBQUNGLENBWkQ7O2VBY2VuSCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VKc29uRGF0YSB9IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBpbWFwIH0gZnJvbSAndXRmNyc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgU0VUVElOR1NfSEVMUEVSX0lEID0gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5jb25zdCBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSA9ICcuU2V0dGluZ3MnO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuV2lGaUNvbm5lY3Rpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS53aWZpYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkRhdGFDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uZGF0YV9jb25uZWN0aW9uYDtcbmNvbnN0IEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkFuaW1hdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmFuaW1hdGlvbmA7XG5jb25zdCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhbGVTZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhbGVgO1xuY29uc3QgTE9DQVRJT05fU0VSVklDRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLkxvY2F0aW9uU2VydmljZWA7XG5jb25zdCBMT0NBVElPTl9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhdGlvbkluZm9SZWNlaXZlcmA7XG5jb25zdCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhdGlvbmA7XG5jb25zdCBDTElQQk9BUkRfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuQ2xpcGJvYXJkUmVjZWl2ZXJgO1xuY29uc3QgQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmNsaXBib2FyZC5nZXRgO1xuY29uc3QgTk9USUZJQ0FUSU9OU19SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5ub3RpZmljYXRpb25zYDtcbmNvbnN0IFNNU19MSVNUX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLlNtc1JlYWRlcmA7XG5jb25zdCBTTVNfTElTVF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zbXMucmVhZGA7XG5jb25zdCBNRURJQV9TQ0FOX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLk1lZGlhU2Nhbm5lclJlY2VpdmVyYDtcbmNvbnN0IE1FRElBX1NDQU5fQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zY2FuX21lZGlhYDtcbmNvbnN0IEFQUElVTV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5BcHBpdW1JTUVgO1xuY29uc3QgVU5JQ09ERV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Vbmljb2RlSU1FYDtcbmNvbnN0IERFRkFVTFRfU0FURUxMSVRFU19DT1VOVCA9IDEyO1xuY29uc3QgREVGQVVMVF9BTFRJVFVERSA9IDAuMDtcbmNvbnN0IExPQ0FUSU9OX1RSQUNLRVJfVEFHID0gJ0xvY2F0aW9uVHJhY2tlcic7XG5jb25zdCBHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1MgPSBbXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gUGxheSBTZXJ2aWNlcycsXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gTG9jYXRpb24gTWFuYWdlcidcbl07XG5cbmNvbnN0IEdQU19DT09SRElOQVRFU19QQVRURVJOID0gL2RhdGE9XCIoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVwiLztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXR0aW5nc0FwcFN0YXJ0dXBPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNTAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gd2FpdCB1bnRpbCB0aGUgYXBwIGhhcyBzdGFydGVkXG4gKi9cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgQXBwaXVtIFNldHRpbmdzIGhlbHBlciBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG4gKiBhbmQgc3RhcnRzIGl0IGlmIG5lY2Vzc2FyeVxuICpcbiAqIEBwYXJhbSB7U2V0dGluZ3NBcHBTdGFydHVwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIEFwcGl1bSBTZXR0aW5ncyBoYXMgZmFpbGVkIHRvIHN0YXJ0XG4gKiBAcmV0dXJucyB7QURCfSBzZWxmIGluc3RhbmNlIGZvciBjaGFpbmluZ1xuICovXG5jb21tYW5kcy5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwID0gYXN5bmMgZnVuY3Rpb24gcmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCAob3B0cyA9IHt9KSB7XG4gIGlmIChhd2FpdCB0aGlzLnByb2Nlc3NFeGlzdHMoU0VUVElOR1NfSEVMUEVSX0lEKSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdTdGFydGluZyBBcHBpdW0gU2V0dGluZ3MgYXBwJyk7XG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0ID0gNTAwMCxcbiAgfSA9IG9wdHM7XG4gIGF3YWl0IHRoaXMuc3RhcnRBcHAoe1xuICAgIHBrZzogU0VUVElOR1NfSEVMUEVSX0lELFxuICAgIGFjdGl2aXR5OiBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSxcbiAgICBhY3Rpb246ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgY2F0ZWdvcnk6ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgc3RvcEFwcDogZmFsc2UsXG4gICAgd2FpdEZvckxhdW5jaDogZmFsc2UsXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9JRCksIHtcbiAgICAgIHdhaXRNczogdGltZW91dCxcbiAgICAgIGludGVydmFsTXM6IDMwMCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcHBpdW0gU2V0dGluZ3MgYXBwIGlzIG5vdCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tc2ApO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgV2lGaSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0V2lmaVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0V2lmaVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ3dpZmknLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgRGF0YSB0cmFuc2ZlciBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0RGF0YVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0RGF0YVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ2RhdGEnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgYW5pbWF0aW9uIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqIEFuaW1hdGlvbiBvbiB0aGUgZGV2aWNlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2luZyBnbG9iYWwgcHJvcGVydGllczpcbiAqIFtBTklNQVRPUl9EVVJBVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjQU5JTUFUT1JfRFVSQVRJT05fU0NBTEV9LFxuICogW1RSQU5TSVRJT05fQU5JTUFUSU9OX1NDQUxFXXtAbGluayBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5HbG9iYWwuaHRtbCNUUkFOU0lUSU9OX0FOSU1BVElPTl9TQ0FMRX0sXG4gKiBbV0lORE9XX0FOSU1BVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjV0lORE9XX0FOSU1BVElPTl9TQ0FMRX0uXG4gKiBUaGlzIG1ldGhvZCBzZXRzIGFsbCB0aGlzIHByb3BlcnRpZXMgdG8gMC4wIHRvIGRpc2FibGUgKDEuMCB0byBlbmFibGUpIGFuaW1hdGlvbi5cbiAqXG4gKiBUdXJuaW5nIG9mZiBhbmltYXRpb24gbWlnaHQgYmUgdXNlZnVsIHRvIGltcHJvdmUgc3RhYmlsaXR5XG4gKiBhbmQgcmVkdWNlIHRlc3RzIGV4ZWN1dGlvbiB0aW1lLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqL1xuY29tbWFuZHMuc2V0QW5pbWF0aW9uU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBzZXRBbmltYXRpb25TdGF0ZSAob24pIHtcbiAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1hJywgQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OLFxuICAgICctbicsIEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgXSk7XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgbG9jYWxlIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC4gRG9uJ3QgbmVlZCB0byByZWJvb3QgdGhlIGRldmljZSBhZnRlciBjaGFuZ2luZyB0aGUgbG9jYWxlLlxuICogVGhpcyBtZXRob2Qgc2V0cyBhbiBhcmJpdHJhcnkgbG9jYWxlIGZvbGxvd2luZzpcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogICBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sI0xvY2FsZShqYXZhLmxhbmcuU3RyaW5nLCUyMGphdmEubGFuZy5TdHJpbmcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UuIGUuZy4gZW4sIGphXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIGUuZy4gVVMsIEpQXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gZS5nLiBIYW5zIGluIGB6aC1IYW5zLUNOYFxuICovXG5jb21tYW5kcy5zZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwID0gYXN5bmMgZnVuY3Rpb24gc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCAobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCA9IG51bGwpIHtcbiAgY29uc3QgcGFyYW1zID0gW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctYScsIExPQ0FMRV9TRVRUSU5HX0FDVElPTixcbiAgICAnLW4nLCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUixcbiAgICAnLS1lcycsICdsYW5nJywgbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSxcbiAgICAnLS1lcycsICdjb3VudHJ5JywgY291bnRyeS50b1VwcGVyQ2FzZSgpXG4gIF07XG5cbiAgaWYgKHNjcmlwdCkge1xuICAgIHBhcmFtcy5wdXNoKCctLWVzJywgJ3NjcmlwdCcsIHNjcmlwdCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnNoZWxsKHBhcmFtcyk7XG59O1xuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9jYXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gbG9uZ2l0dWRlIC0gVmFsaWQgbG9uZ2l0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSBsYXRpdHVkZSAtIFZhbGlkIGxhdGl0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gYWx0aXR1ZGUgLSBWYWxpZCBhbHRpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNhdGVsbGl0ZXMgWzEyXSAtIE51bWJlciBvZiBzYXRlbGxpdGVzIGJlaW5nIHRyYWNrZWQgKDEtMTIpLlxuICogVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIG9uIHJlYWwgZGV2aWNlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNwZWVkIC0gVmFsaWQgc3BlZWQgdmFsdWUuXG4gKiBTaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuMCBtZXRlcnMvc2Vjb25kIGZvciByZWFsIGRldmljZXMgb3IgMC4wIGtub3RzXG4gKiBmb3IgZW11bGF0b3JzLlxuICovXG5cbi8qKlxuICogRW11bGF0ZSBnZW9sb2NhdGlvbiBjb29yZGluYXRlcyBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtMb2NhdGlvbn0gbG9jYXRpb24gLSBMb2NhdGlvbiBvYmplY3QuIFRoZSBgYWx0aXR1ZGVgIHZhbHVlIGlzIGlnbm9yZWRcbiAqIHdoaWxlIG1vY2tpbmcgdGhlIHBvc2l0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBzZXRHZW9Mb2NhdGlvbiAobG9jYXRpb24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBjb25zdCBmb3JtYXRMb2NhdGlvblZhbHVlID0gKHZhbHVlTmFtZSwgaXNSZXF1aXJlZCA9IHRydWUpID0+IHtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUobG9jYXRpb25bdmFsdWVOYW1lXSkpIHtcbiAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZU5hbWV9IG11c3QgYmUgcHJvdmlkZWRgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmbG9hdFZhbHVlID0gcGFyc2VGbG9hdChsb2NhdGlvblt2YWx1ZU5hbWVdKTtcbiAgICBpZiAoIWlzTmFOKGZsb2F0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gYCR7Xy5jZWlsKGZsb2F0VmFsdWUsIDUpfWA7XG4gICAgfVxuICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWVOYW1lfSBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIGZsb2F0IG51bWJlci4gYCArXG4gICAgICAgIGAnJHtsb2NhdGlvblt2YWx1ZU5hbWVdfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgY29uc3QgbG9uZ2l0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbG9uZ2l0dWRlJyk7XG4gIGNvbnN0IGxhdGl0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbGF0aXR1ZGUnKTtcbiAgY29uc3QgYWx0aXR1ZGUgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdhbHRpdHVkZScsIGZhbHNlKTtcbiAgY29uc3Qgc3BlZWQgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdzcGVlZCcsIGZhbHNlKTtcbiAgaWYgKGlzRW11bGF0b3IpIHtcbiAgICBjb25zdCBhcmdzID0gW2xvbmdpdHVkZSwgbGF0aXR1ZGVdO1xuICAgIGlmICghXy5pc05pbChhbHRpdHVkZSkpIHtcbiAgICAgIGFyZ3MucHVzaChhbHRpdHVkZSk7XG4gICAgfVxuICAgIGNvbnN0IHNhdGVsbGl0ZXMgPSBwYXJzZUludChsb2NhdGlvbi5zYXRlbGxpdGVzLCAxMCk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4oc2F0ZWxsaXRlcykgJiYgc2F0ZWxsaXRlcyA+IDAgJiYgc2F0ZWxsaXRlcyA8PSAxMikge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9BTFRJVFVERX1gKTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChgJHtzYXRlbGxpdGVzfWApO1xuICAgIH1cbiAgICBpZiAoIV8uaXNOaWwoc3BlZWQpKSB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgIGFyZ3MucHVzaChgJHtERUZBVUxUX0FMVElUVURFfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNCkge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9TQVRFTExJVEVTX0NPVU5UfWApO1xuICAgICAgfVxuICAgICAgYXJncy5wdXNoKHNwZWVkKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZXNldFRlbG5ldEF1dGhUb2tlbigpO1xuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdnZW8nLCAnZml4JywgLi4uYXJnc10pO1xuICAgIC8vIEEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA2MTgwXG4gICAgYXdhaXQgdGhpcy5hZGJFeGVjKFsnZW11JywgJ2dlbycsICdmaXgnLCAuLi4oYXJncy5tYXAoKGFyZykgPT4gYXJnLnJlcGxhY2UoJy4nLCAnLCcpKSldKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2FtJywgJ3N0YXJ0c2VydmljZScsXG4gICAgICAnLWUnLCAnbG9uZ2l0dWRlJywgbG9uZ2l0dWRlLFxuICAgICAgJy1lJywgJ2xhdGl0dWRlJywgbGF0aXR1ZGUsXG4gICAgXTtcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShhbHRpdHVkZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCAnYWx0aXR1ZGUnLCBhbHRpdHVkZSk7XG4gICAgfVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHNwZWVkKSkge1xuICAgICAgYXJncy5wdXNoKCctZScsICdzcGVlZCcsIHNwZWVkKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKExPQ0FUSU9OX1NFUlZJQ0UpO1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoYXJncyk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IGNhY2hlZCBHUFMgbG9jYXRpb24gZnJvbSB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybnMge0xvY2F0aW9ufSBUaGUgY3VycmVudCBsb2NhdGlvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IGxvY2F0aW9uIGNhbm5vdCBiZSByZXRyaWV2ZWRcbiAqL1xuY29tbWFuZHMuZ2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRHZW9Mb2NhdGlvbiAoKSB7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctbicsIExPQ0FUSU9OX1JFQ0VJVkVSLFxuICAgICAgJy1hJywgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTixcbiAgICBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIGN1cnJlbnQgZ2VvIGNvb3JkaW5hdGVzIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZSBhbmQgaGFzIGxvY2F0aW9uIHBlcm1pc3Npb25zLiBBbHNvIHRoZSBsb2NhdGlvbiBgICtcbiAgICAgIGBzZXJ2aWNlcyBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGRldmljZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVyciB8fCBlcnIuc3Rkb3V0IHx8IGVyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBHUFNfQ09PUkRJTkFURVNfUEFUVEVSTi5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgYWN0dWFsIGxvY2F0aW9uIHZhbHVlcyBmcm9tIHRoZSBjb21tYW5kIG91dHB1dDogJHtvdXRwdXR9YCk7XG4gIH1cbiAgY29uc3QgbG9jYXRpb24gPSB7XG4gICAgbGF0aXR1ZGU6IG1hdGNoWzFdLFxuICAgIGxvbmdpdHVkZTogbWF0Y2hbMl0sXG4gICAgYWx0aXR1ZGU6IG1hdGNoWzNdLFxuICB9O1xuICBsb2cuZGVidWcoYEdvdCBnZW8gY29vcmRpbmF0ZXM6ICR7SlNPTi5zdHJpbmdpZnkobG9jYXRpb24pfWApO1xuICByZXR1cm4gbG9jYXRpb247XG59O1xuXG4vKipcbiAqIFNlbmRzIGFuIGFzeW5jIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgR1BTIGNhY2hlLlxuICogVGhpcyBmZWF0dXJlIG9ubHkgd29ya3MgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0IGhhc1xuICogR29vZ2xlIFBsYXkgU2VydmljZXMgaW5zdGFsbGVkLiBJbiBjYXNlIHRoZSB2YW5pbGxhXG4gKiBMb2NhdGlvbk1hbmFnZXIgaXMgdXNlZCB0aGUgZGV2aWNlIEFQSSBsZXZlbCBtdXN0IGJlIGF0XG4gKiB2ZXJzaW9uIDMwIChBbmRyb2lkIFIpIG9yIGhpZ2hlci5cbiAqXG4gKiBAcGFyYW0gdGltZW91dE1zIFsyMDAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gYmxvY2sgdW50aWwgR1BTIGNhY2hlIGlzIHJlZnJlc2hlZC4gUHJvdmlkaW5nIHplcm8gb3IgYSBuZWdhdGl2ZVxuICogdmFsdWUgdG8gaXQgc2tpcHMgd2FpdGluZyBjb21wbGV0ZWx5LlxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgR1BTIGNhY2hlIGNhbm5vdCBiZSByZWZyZXNoZWQuXG4gKi9cbmNvbW1hbmRzLnJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlID0gYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUgKHRpbWVvdXRNcyA9IDIwMDAwKSB7XG4gIGxldCBsb2djYXRNb25pdG9yO1xuICBsZXQgbW9uaXRvcmluZ1Byb21pc2U7XG5cbiAgaWYgKHRpbWVvdXRNcyA+IDApIHtcbiAgICBjb25zdCBjbWQgPSBbXG4gICAgICAuLi50aGlzLmFkYi5kZWZhdWx0QXJncyxcbiAgICAgICdsb2djYXQnLCAnLXMnLCBMT0NBVElPTl9UUkFDS0VSX1RBRyxcbiAgICBdO1xuICAgIGxvZ2NhdE1vbml0b3IgPSBuZXcgU3ViUHJvY2Vzcyh0aGlzLmFkYi5wYXRoLCBjbWQpO1xuICAgIGNvbnN0IHRpbWVvdXRFcnJvck1zZyA9IGBUaGUgR1BTIGNhY2hlIGhhcyBub3QgYmVlbiByZWZyZXNoZWQgd2l0aGluICR7dGltZW91dE1zfW1zIHRpbWVvdXQuIGAgK1xuICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgdGhlIGRldmljZSB1bmRlciB0ZXN0IGhhcyBBcHBpdW0gU2V0dGluZ3MgYXBwIGluc3RhbGxlZCBhbmQgcnVubmluZy4gYCArXG4gICAgICBgQWxzbywgaXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgZGV2aWNlIGhhcyBHb29nbGUgUGxheSBTZXJ2aWNlcyBpbnN0YWxsZWQgb3IgaXMgcnVubmluZyBgICtcbiAgICAgIGBBbmRyb2lkIDEwKyBvdGhlcndpc2UuYDtcbiAgICBtb25pdG9yaW5nUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcih0aW1lb3V0RXJyb3JNc2cpKSwgdGltZW91dE1zKTtcblxuICAgICAgbG9nY2F0TW9uaXRvci5vbignZXhpdCcsICgpID0+IHJlamVjdChuZXcgRXJyb3IodGltZW91dEVycm9yTXNnKSkpO1xuICAgICAgWydsaW5lcy1zdGRlcnInLCAnbGluZXMtc3Rkb3V0J10ubWFwKChldnQpID0+IGxvZ2NhdE1vbml0b3Iub24oZXZ0LCAobGluZXMpID0+IHtcbiAgICAgICAgaWYgKGxpbmVzLnNvbWUoKGxpbmUpID0+IEdQU19DQUNIRV9SRUZSRVNIRURfTE9HUy5zb21lKCh4KSA9PiBsaW5lLmluY2x1ZGVzKHgpKSkpIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgICBhd2FpdCBsb2djYXRNb25pdG9yLnN0YXJ0KDApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICAgJy1uJywgTE9DQVRJT05fUkVDRUlWRVIsXG4gICAgICAnLWEnLCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OLFxuICAgICAgJy0tZXonLCAnZm9yY2VVcGRhdGUnLCAndHJ1ZScsXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlZnJlc2ggdGhlIEdQUyBjYWNoZSBvbiB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyB1cCB0byBkYXRlIGFuZCBoYXMgbG9jYXRpb24gcGVybWlzc2lvbnMuIEFsc28gdGhlIGxvY2F0aW9uIGAgK1xuICAgICAgYHNlcnZpY2VzIG11c3QgYmUgZW5hYmxlZCBvbiB0aGUgZGV2aWNlLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyIHx8IGVyci5zdGRvdXQgfHwgZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAobG9nY2F0TW9uaXRvciAmJiBtb25pdG9yaW5nUHJvbWlzZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgbG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGltZW91dE1zfW1zIGZvciB0aGUgR1BTIGNhY2hlIHRvIGJlIHJlZnJlc2hlZGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBtb25pdG9yaW5nUHJvbWlzZTtcbiAgICAgIGxvZy5pbmZvKGBUaGUgR1BTIGNhY2hlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWZyZXNoZWQgYWZ0ZXIgYCArXG4gICAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAobG9nY2F0TW9uaXRvci5pc1J1bm5pbmcpIHtcbiAgICAgICAgYXdhaXQgbG9nY2F0TW9uaXRvci5zdG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKCdUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBHUFMgY2FjaGUgaGFzIGJlZW4gc2VudC4gU2tpcHBpbmcgd2FpdGluZyBmb3IgaXRzIHJlc3VsdC4nKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgZ2l2ZW4gZWRpdG9yIGFjdGlvbiBvbiB0aGUgZm9jdXNlZCBpbnB1dCBmaWVsZC5cbiAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UuXG4gKiBObyBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcGVyZm9ybWluZyB0aGUgYWN0aW9uLlxuICogWW91IG11c3QgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQgaWYgc29tZXRoaW5nIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGFjdGlvbiAtIEVpdGhlciBhY3Rpb24gY29kZSBvciBuYW1lLiBUaGUgZm9sbG93aW5nIGFjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyBhcmUgc3VwcG9ydGVkOiBgbm9ybWFsLCB1bnNwZWNpZmllZCwgbm9uZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28sIHNlYXJjaCwgc2VuZCwgbmV4dCwgZG9uZSwgcHJldmlvdXNgXG4gKi9cbmNvbW1hbmRzLnBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtRWRpdG9yQWN0aW9uIChhY3Rpb24pIHtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGVkaXRvciBhY3Rpb246ICR7YWN0aW9ufWApO1xuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChBUFBJVU1fSU1FLFxuICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoWydpbnB1dCcsICd0ZXh0JywgYC8ke2FjdGlvbn0vYF0pKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGRldmljZSdzIGNsaXBib2FyZC5cbiAqIFRoZSBtZXRob2Qgd29ya3MgZm9yIEFuZHJvaWQgYmVsb3cgYW5kIGFib3ZlIDI5LlxuICogSXQgdGVtb3JhcmlseSBlbmZvcmNlcyB0aGUgSU1FIHNldHRpbmcgaW4gb3JkZXIgdG8gd29ya2Fyb3VuZFxuICogc2VjdXJpdHkgbGltaXRhdGlvbnMgaWYgbmVlZGVkLlxuICogVGhpcyBtZXRob2Qgb25seSB3b3JrcyBpZiBBcHBpdW0gU2V0dGluZ3Mgdi4gMi4xNSsgaXMgaW5zdGFsbGVkXG4gKiBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYWN0dWFsIGNvbnRlbnQgb2YgdGhlIG1haW4gY2xpcGJvYXJkIGFzXG4gKiBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBjbGlwYm9hcmQgaXMgZW1wdHlcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIGdldHRpbmcgdGhlXG4gKiBjbGlwYm9hcmQgY29udGFudFxuICovXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiBnZXRDbGlwYm9hcmQgKCkge1xuICBsb2cuZGVidWcoJ0dldHRpbmcgdGhlIGNsaXBib2FyZCBjb250ZW50Jyk7XG4gIGNvbnN0IHJldHJpZXZlQ2xpcGJvYXJkID0gYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgQ0xJUEJPQVJEX1JFQ0VJVkVSLFxuICAgICctYScsIENMSVBCT0FSRF9SRVRSSUVWQUxfQUNUSU9OLFxuICBdKTtcbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSAoYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpID49IDI5KVxuICAgICAgPyAoYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoQVBQSVVNX0lNRSwgcmV0cmlldmVDbGlwYm9hcmQpKVxuICAgICAgOiAoYXdhaXQgcmV0cmlldmVDbGlwYm9hcmQoKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIHRoZSBjdXJyZW50IGNsaXBib2FyZCBjb250ZW50IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IC9kYXRhPVwiKFteXCJdKilcIi8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGFjdHVhbCBjbGlib2FyZCBjb250ZW50IGZyb20gdGhlIGNvbW1hbmQgb3V0cHV0OiAke291dHB1dH1gKTtcbiAgfVxuICByZXR1cm4gXy50cmltKG1hdGNoWzFdKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIEFuZHJvaWQgbm90aWZpY2F0aW9ucyB2aWEgQXBwaXVtIFNldHRpbmdzIGhlbHBlci5cbiAqIEFwcGl1bSBTZXR0aW5ncyBhcHAgaXRzZWxmIG11c3QgYmUgKm1hbnVhbGx5KiBncmFudGVkIHRvIGFjY2VzcyBub3RpZmljYXRpb25zXG4gKiB1bmRlciBkZXZpY2UgU2V0dGluZ3MgaW4gb3JkZXIgdG8gbWFrZSB0aGlzIGZlYXR1cmUgd29ya2luZy5cbiAqIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIga2VlcHMgYWxsIHRoZSBhY3RpdmUgbm90aWZpY2F0aW9ucyBwbHVzXG4gKiBub3RpZmljYXRpb25zIHRoYXQgYXBwZWFyZWQgd2hpbGUgaXQgd2FzIHJ1bm5pbmcgaW4gdGhlIGludGVybmFsIGJ1ZmZlcixcbiAqIGJ1dCBubyBtb3JlIHRoYW4gMTAwIGl0ZW1zIGFsdG9nZXRoZXIuIE5ld2x5IGFwcGVhcmVkIG5vdGlmaWNhdGlvbnNcbiAqIGFyZSBhbHdheXMgYWRkZWQgdG8gdGhlIGhlYWQgb2YgdGhlIG5vdGlmaWNhdGlvbnMgYXJyYXkuXG4gKiBUaGUgYGlzUmVtb3ZlZGAgZmxhZyBpcyBzZXQgdG8gYHRydWVgIGZvciBub3RpZmljYXRpb25zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvblxuICogYW5kIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24uaHRtbFxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYXZhaWxhYmxlIG5vdGlmaWNhdGlvbiBwcm9wZXJ0aWVzIGFuZCB0aGVpciB2YWx1ZXMuXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGV4YW1wbGUgb3V0cHV0IGlzOlxuICogYGBganNvblxuICoge1xuICogICBcInN0YXR1c0Jhck5vdGlmaWNhdGlvbnNcIjpbXG4gKiAgICAge1xuICogICAgICAgXCJpc0dyb3VwXCI6ZmFsc2UsXG4gKiAgICAgICBcInBhY2thZ2VOYW1lXCI6XCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICAgIFwiaXNDbGVhcmFibGVcIjpmYWxzZSxcbiAqICAgICAgIFwiaXNPbmdvaW5nXCI6dHJ1ZSxcbiAqICAgICAgIFwiaWRcIjoxLFxuICogICAgICAgXCJ0YWdcIjpudWxsLFxuICogICAgICAgXCJub3RpZmljYXRpb25cIjp7XG4gKiAgICAgICAgIFwidGl0bGVcIjpudWxsLFxuICogICAgICAgICBcImJpZ1RpdGxlXCI6XCJBcHBpdW0gU2V0dGluZ3NcIixcbiAqICAgICAgICAgXCJ0ZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJiaWdUZXh0XCI6XCJLZWVwIHRoaXMgc2VydmljZSBydW5uaW5nLCBzbyBBcHBpdW0gZm9yIEFuZHJvaWQgY2FuIHByb3Blcmx5IGludGVyYWN0IHdpdGggc2V2ZXJhbCBzeXN0ZW0gQVBJc1wiLFxuICogICAgICAgICBcInRpY2tlclRleHRcIjpudWxsLFxuICogICAgICAgICBcInN1YlRleHRcIjpudWxsLFxuICogICAgICAgICBcImluZm9UZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJ0ZW1wbGF0ZVwiOlwiYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uJEJpZ1RleHRTdHlsZVwiXG4gKiAgICAgICB9LFxuICogICAgICAgXCJ1c2VySGFuZGxlXCI6MCxcbiAqICAgICAgIFwiZ3JvdXBLZXlcIjpcIjB8aW8uYXBwaXVtLnNldHRpbmdzfDF8bnVsbHwxMDEzM1wiLFxuICogICAgICAgXCJvdmVycmlkZUdyb3VwS2V5XCI6bnVsbCxcbiAqICAgICAgIFwicG9zdFRpbWVcIjoxNTc2ODUzNTE4ODUwLFxuICogICAgICAgXCJrZXlcIjpcIjB8aW8uYXBwaXVtLnNldHRpbmdzfDF8bnVsbHwxMDEzM1wiLFxuICogICAgICAgXCJpc1JlbW92ZWRcIjpmYWxzZVxuICogICAgIH1cbiAqICAgXVxuICogfVxuICogYGBgXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdFxuICovXG5jb21tYW5kcy5nZXROb3RpZmljYXRpb25zID0gYXN5bmMgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9ucyAoKSB7XG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyBub3RpZmljYXRpb25zJyk7XG4gIC8vIFNvbWVob3cgcHJvdmlkaW5nIHRoZSBgLW5gIGFyZyB0byB0aGUgYGFtYCB1bmRlcm5lYXRoXG4gIC8vIHJlbmRlcnMgdGhlIGJyb2FkY2FzdCB0byBmYWlsIGluc3RlYWQgb2Ygc3RhcnRpbmcgdGhlXG4gIC8vIEFwcGl1bSBTZXR0aW5ncyBhcHAuIFRoaXMgb25seSBoYXBwZW5zIHRvIHRoZSBub3RpZmljYXRpb25zXG4gIC8vIHJlY2VpdmVyXG4gIGF3YWl0IHRoaXMucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCgpO1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBOT1RJRklDQVRJT05TX1JFVFJJRVZBTF9BQ1RJT04sXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgYW5kIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBwYXJzZUpzb25EYXRhKG91dHB1dCwgJ25vdGlmaWNhdGlvbnMnKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU21zTGlzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXggWzEwMF0gLSBUaGUgbWF4aW11bSBjb3VudCBvZiByZWNlbnQgbWVzc2FnZXNcbiAqIHRvIHJldHJpZXZlXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgdGhlIG1vc3QgcmVjZW50IFNNU1xuICogcHJvcGVydGllcyBsaXN0IHZpYSBBcHBpdW0gU2V0dGluZ3MgaGVscGVyLlxuICogTWVzc2FnZXMgYXJlIHNvcnRlZCBieSBkYXRlIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gKlxuICogQHBhcmFtIHtTbXNMaXN0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGV4YW1wbGUgb3V0cHV0IGlzOlxuICogYGBganNvblxuICoge1xuICogICBcIml0ZW1zXCI6W1xuICogICAgIHtcbiAqICAgICAgIFwiaWRcIjpcIjJcIixcbiAqICAgICAgIFwiYWRkcmVzc1wiOlwiKzEyMzQ1Njc4OVwiLFxuICogICAgICAgXCJwZXJzb25cIjpudWxsLFxuICogICAgICAgXCJkYXRlXCI6XCIxNTgxOTM2NDIyMjAzXCIsXG4gKiAgICAgICBcInJlYWRcIjpcIjBcIixcbiAqICAgICAgIFwic3RhdHVzXCI6XCItMVwiLFxuICogICAgICAgXCJ0eXBlXCI6XCIxXCIsXG4gKiAgICAgICBcInN1YmplY3RcIjpudWxsLFxuICogICAgICAgXCJib2R5XCI6XCJcXFwidGV4dCBtZXNzYWdlMlxcXCJcIixcbiAqICAgICAgIFwic2VydmljZUNlbnRlclwiOm51bGxcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIFwiaWRcIjpcIjFcIixcbiAqICAgICAgIFwiYWRkcmVzc1wiOlwiKzEyMzQ1Njc4OVwiLFxuICogICAgICAgXCJwZXJzb25cIjpudWxsLFxuICogICAgICAgXCJkYXRlXCI6XCIxNTgxOTM2MzgyNzQwXCIsXG4gKiAgICAgICBcInJlYWRcIjpcIjBcIixcbiAqICAgICAgIFwic3RhdHVzXCI6XCItMVwiLFxuICogICAgICAgXCJ0eXBlXCI6XCIxXCIsXG4gKiAgICAgICBcInN1YmplY3RcIjpudWxsLFxuICogICAgICAgXCJib2R5XCI6XCJcXFwidGV4dCBtZXNzYWdlXFxcIlwiLFxuICogICAgICAgXCJzZXJ2aWNlQ2VudGVyXCI6bnVsbFxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ0b3RhbFwiOjJcbiAqIH1cbiAqIGBgYFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBTTVMgbGlzdFxuICovXG5jb21tYW5kcy5nZXRTbXNMaXN0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0U21zTGlzdCAob3B0cyA9IHt9KSB7XG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyB0aGUgcmVjZW50IFNNUyBtZXNzYWdlcycpO1xuICBjb25zdCBhcmdzID0gW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIFNNU19MSVNUX1JFQ0VJVkVSLFxuICAgICctYScsIFNNU19MSVNUX1JFVFJJRVZBTF9BQ1RJT04sXG4gIF07XG4gIGlmIChvcHRzLm1heCkge1xuICAgIGFyZ3MucHVzaCgnLS1lcycsICdtYXgnLCBvcHRzLm1heCk7XG4gIH1cbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSBTTVMgbGlzdCBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBhbmQgaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSnNvbkRhdGEob3V0cHV0LCAnU01TIGxpc3QnKTtcbn07XG5cbi8qKlxuICogVHlwZXMgdGhlIGdpdmVuIFVuaWNvZGUgc3RyaW5nLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZm9jdXMgaXMgYWxyZWFkeSBwdXRcbiAqIHRvIHRoZSBkZXN0aW5hdGlvbiBpbnB1dCBmaWVsZCBiZWZvcmUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSBzdHJpbmcgdG8gdHlwZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW5wdXQgdGV4dCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2VudCB0byBhZGJcbiAqL1xuY29tbWFuZHMudHlwZVVuaWNvZGUgPSBhc3luYyBmdW5jdGlvbiB0eXBlVW5pY29kZSAodGV4dCkge1xuICBpZiAoXy5pc05pbCh0ZXh0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRleHQgPSBgJHt0ZXh0fWA7XG4gIGxvZy5kZWJ1ZyhgVHlwaW5nICR7dXRpbC5wbHVyYWxpemUoJ2NoYXJhY3RlcicsIHRleHQubGVuZ3RoLCB0cnVlKX1gKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IHRoaXMucnVuSW5JbWVDb250ZXh0KFxuICAgIFVOSUNPREVfSU1FLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmlucHV0VGV4dChpbWFwLmVuY29kZSh0ZXh0KSlcbiAgKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFBlcmZvcm1zIHJlY3Vyc2l2ZSBtZWRpYSBzY2FuIGF0IHRoZSBnaXZlbiBkZXN0aW5hdGlvbi5cbiAqIEFsbCBzdWNjZXNzZnVsbHkgc2Nhbm5lZCBpdGVtcyBhcmUgYmVpbmcgYWRkZWQgdG8gdGhlIGRldmljZSdzXG4gKiBtZWRpYSBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbiBGaWxlL2ZvbGRlciBwYXRoIG9uIHRoZSByZW1vdGUgZGV2aWNlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiB1bmV4cGVjdGVkIGVycm9yIGJ5IHNjYW5uaW5nLlxuICovXG5jb21tYW5kcy5zY2FuTWVkaWEgPSBhc3luYyBmdW5jdGlvbiBzY2FuTWVkaWEgKGRlc3RpbmF0aW9uKSB7XG4gIGxvZy5kZWJ1ZyhgU2Nhbm5pbmcgJyR7ZGVzdGluYXRpb259JyBmb3IgbWVkaWEgZmlsZXNgKTtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgTUVESUFfU0NBTl9SRUNFSVZFUixcbiAgICAnLWEnLCBNRURJQV9TQ0FOX0FDVElPTixcbiAgICAnLS1lcycsICdwYXRoJywgZGVzdGluYXRpb25cbiAgXSk7XG4gIGlmICghXy5pbmNsdWRlcyhvdXRwdXQsICdyZXN1bHQ9LTEnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gbWVkaWEgY291bGQgYmUgc2Nhbm5lZCBhdCAnJHtkZXN0aW5hdGlvbn0nLiBgICtcbiAgICAgIGBDaGVjayB0aGUgZGV2aWNlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlscy5gKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
362
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiXSwibmFtZXMiOlsiU0VUVElOR1NfSEVMUEVSX0lEIiwiU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIldJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiREFUQV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OIiwiQU5JTUFUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJBTklNQVRJT05fU0VUVElOR19BQ1RJT04iLCJMT0NBTEVfU0VUVElOR19SRUNFSVZFUiIsIkxPQ0FMRV9TRVRUSU5HX0FDVElPTiIsIkxPQ0FUSU9OX1NFUlZJQ0UiLCJMT0NBVElPTl9SRUNFSVZFUiIsIkxPQ0FUSU9OX1JFVFJJRVZBTF9BQ1RJT04iLCJDTElQQk9BUkRfUkVDRUlWRVIiLCJDTElQQk9BUkRfUkVUUklFVkFMX0FDVElPTiIsIk5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiIsIlNNU19MSVNUX1JFQ0VJVkVSIiwiU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiIsIk1FRElBX1NDQU5fUkVDRUlWRVIiLCJNRURJQV9TQ0FOX0FDVElPTiIsIkFQUElVTV9JTUUiLCJVTklDT0RFX0lNRSIsIkRFRkFVTFRfU0FURUxMSVRFU19DT1VOVCIsIkRFRkFVTFRfQUxUSVRVREUiLCJMT0NBVElPTl9UUkFDS0VSX1RBRyIsIkdQU19DQUNIRV9SRUZSRVNIRURfTE9HUyIsIkdQU19DT09SRElOQVRFU19QQVRURVJOIiwiY29tbWFuZHMiLCJyZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwIiwib3B0cyIsInByb2Nlc3NFeGlzdHMiLCJsb2ciLCJkZWJ1ZyIsInRpbWVvdXQiLCJzdGFydEFwcCIsInBrZyIsImFjdGl2aXR5IiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJzdG9wQXBwIiwid2FpdEZvckxhdW5jaCIsIndhaXRNcyIsImludGVydmFsTXMiLCJlcnIiLCJFcnJvciIsInNldFdpZmlTdGF0ZSIsIm9uIiwiaXNFbXVsYXRvciIsInNoZWxsIiwicHJpdmlsZWdlZCIsImdldEFwaUxldmVsIiwic2V0RGF0YVN0YXRlIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJzZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwIiwibGFuZ3VhZ2UiLCJjb3VudHJ5Iiwic2NyaXB0IiwicGFyYW1zIiwidG9Mb3dlckNhc2UiLCJ0b1VwcGVyQ2FzZSIsInB1c2giLCJzZXRHZW9Mb2NhdGlvbiIsImxvY2F0aW9uIiwiZm9ybWF0TG9jYXRpb25WYWx1ZSIsInZhbHVlTmFtZSIsImlzUmVxdWlyZWQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJmbG9hdFZhbHVlIiwicGFyc2VGbG9hdCIsImlzTmFOIiwiXyIsImNlaWwiLCJsb25naXR1ZGUiLCJsYXRpdHVkZSIsImFsdGl0dWRlIiwic3BlZWQiLCJhcmdzIiwiaXNOaWwiLCJzYXRlbGxpdGVzIiwicGFyc2VJbnQiLCJOdW1iZXIiLCJsZW5ndGgiLCJyZXNldFRlbG5ldEF1dGhUb2tlbiIsImFkYkV4ZWMiLCJtYXAiLCJhcmciLCJyZXBsYWNlIiwiZ2V0R2VvTG9jYXRpb24iLCJvdXRwdXQiLCJzdGRlcnIiLCJzdGRvdXQiLCJtZXNzYWdlIiwibWF0Y2giLCJleGVjIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlIiwidGltZW91dE1zIiwibG9nY2F0TW9uaXRvciIsIm1vbml0b3JpbmdQcm9taXNlIiwiY21kIiwiYWRiIiwiZGVmYXVsdEFyZ3MiLCJTdWJQcm9jZXNzIiwicGF0aCIsInRpbWVvdXRFcnJvck1zZyIsIkIiLCJyZXNvbHZlIiwicmVqZWN0Iiwic2V0VGltZW91dCIsImV2dCIsImxpbmVzIiwic29tZSIsImxpbmUiLCJ4IiwiaW5jbHVkZXMiLCJzdGFydCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJpbmZvIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJpc1J1bm5pbmciLCJzdG9wIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInJ1bkluSW1lQ29udGV4dCIsImdldENsaXBib2FyZCIsInJldHJpZXZlQ2xpcGJvYXJkIiwidHJpbSIsImdldE5vdGlmaWNhdGlvbnMiLCJnZXRTbXNMaXN0IiwibWF4IiwidHlwZVVuaWNvZGUiLCJ0ZXh0IiwicGx1cmFsaXplIiwiaW5wdXRUZXh0IiwiaW1hcCIsImVuY29kZSIsInNjYW5NZWRpYSIsImRlc3RpbmF0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGtCQUFrQixHQUFHLG9CQUEzQjtBQUNBLE1BQU1DLDZCQUE2QixHQUFHLFdBQXRDO0FBQ0EsTUFBTUMsZ0NBQWdDLEdBQUksR0FBRUYsa0JBQW1CLDJDQUEvRDtBQUNBLE1BQU1HLDhCQUE4QixHQUFJLEdBQUVILGtCQUFtQixPQUE3RDtBQUNBLE1BQU1JLGdDQUFnQyxHQUFJLEdBQUVKLGtCQUFtQiwyQ0FBL0Q7QUFDQSxNQUFNSyw4QkFBOEIsR0FBSSxHQUFFTCxrQkFBbUIsa0JBQTdEO0FBQ0EsTUFBTU0sMEJBQTBCLEdBQUksR0FBRU4sa0JBQW1CLHNDQUF6RDtBQUNBLE1BQU1PLHdCQUF3QixHQUFJLEdBQUVQLGtCQUFtQixZQUF2RDtBQUNBLE1BQU1RLHVCQUF1QixHQUFJLEdBQUVSLGtCQUFtQixtQ0FBdEQ7QUFDQSxNQUFNUyxxQkFBcUIsR0FBSSxHQUFFVCxrQkFBbUIsU0FBcEQ7QUFDQSxNQUFNVSxnQkFBZ0IsR0FBSSxHQUFFVixrQkFBbUIsbUJBQS9DO0FBQ0EsTUFBTVcsaUJBQWlCLEdBQUksR0FBRVgsa0JBQW1CLGtDQUFoRDtBQUNBLE1BQU1ZLHlCQUF5QixHQUFJLEdBQUVaLGtCQUFtQixXQUF4RDtBQUNBLE1BQU1hLGtCQUFrQixHQUFJLEdBQUViLGtC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NEJELElBQUksQ0FBQ3RELE1BQWpDLEVBQXlDLElBQXpDLENBQStDLEVBQW5FOztBQUNBLE1BQUksQ0FBQ3NELElBQUwsRUFBVztBQUNULFdBQU8sS0FBUDtBQUNEOztBQUNELFFBQU0sS0FBS1IsZUFBTCxDQUNKM0csV0FESSxFQUNTLFlBQVksTUFBTSxLQUFLcUgsU0FBTCxDQUFlQyxVQUFLQyxNQUFMLENBQVlKLElBQVosQ0FBZixDQUQzQixDQUFOO0FBR0EsU0FBTyxJQUFQO0FBQ0QsQ0FkRDs7QUF3QkE3RyxRQUFRLENBQUNrSCxTQUFULEdBQXFCLGVBQWVBLFNBQWYsQ0FBMEJDLFdBQTFCLEVBQXVDO0FBQzFEL0csa0JBQUlDLEtBQUosQ0FBVyxhQUFZOEcsV0FBWSxtQkFBbkM7O0FBQ0EsUUFBTXJELE1BQU0sR0FBRyxNQUFNLEtBQUt6QyxLQUFMLENBQVcsQ0FDOUIsSUFEOEIsRUFDeEIsV0FEd0IsRUFFOUIsSUFGOEIsRUFFeEI5QixtQkFGd0IsRUFHOUIsSUFIOEIsRUFHeEJDLGlCQUh3QixFQUk5QixNQUo4QixFQUl0QixNQUpzQixFQUlkMkgsV0FKYyxDQUFYLENBQXJCOztBQU1BLE1BQUksQ0FBQ3ZFLGdCQUFFNkMsUUFBRixDQUFXM0IsTUFBWCxFQUFtQixXQUFuQixDQUFMLEVBQXNDO0FBQ3BDLFVBQU0sSUFBSTdDLEtBQUosQ0FBVyxpQ0FBZ0NrRyxXQUFZLEtBQTdDLEdBQ2Isa0RBREcsQ0FBTjtBQUVEO0FBQ0YsQ0FaRDs7ZUFjZW5ILFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUpzb25EYXRhIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBpbWFwIH0gZnJvbSAndXRmNyc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgU0VUVElOR1NfSEVMUEVSX0lEID0gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5jb25zdCBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSA9ICcuU2V0dGluZ3MnO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuV2lGaUNvbm5lY3Rpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS53aWZpYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkRhdGFDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uZGF0YV9jb25uZWN0aW9uYDtcbmNvbnN0IEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkFuaW1hdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmFuaW1hdGlvbmA7XG5jb25zdCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhbGVTZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhbGVgO1xuY29uc3QgTE9DQVRJT05fU0VSVklDRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLkxvY2F0aW9uU2VydmljZWA7XG5jb25zdCBMT0NBVElPTl9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhdGlvbkluZm9SZWNlaXZlcmA7XG5jb25zdCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhdGlvbmA7XG5jb25zdCBDTElQQk9BUkRfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuQ2xpcGJvYXJkUmVjZWl2ZXJgO1xuY29uc3QgQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmNsaXBib2FyZC5nZXRgO1xuY29uc3QgTk9USUZJQ0FUSU9OU19SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5ub3RpZmljYXRpb25zYDtcbmNvbnN0IFNNU19MSVNUX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLlNtc1JlYWRlcmA7XG5jb25zdCBTTVNfTElTVF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zbXMucmVhZGA7XG5jb25zdCBNRURJQV9TQ0FOX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLk1lZGlhU2Nhbm5lclJlY2VpdmVyYDtcbmNvbnN0IE1FRElBX1NDQU5fQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zY2FuX21lZGlhYDtcbmNvbnN0IEFQUElVTV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5BcHBpdW1JTUVgO1xuY29uc3QgVU5JQ09ERV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Vbmljb2RlSU1FYDtcbmNvbnN0IERFRkFVTFRfU0FURUxMSVRFU19DT1VOVCA9IDEyO1xuY29uc3QgREVGQVVMVF9BTFRJVFVERSA9IDAuMDtcbmNvbnN0IExPQ0FUSU9OX1RSQUNLRVJfVEFHID0gJ0xvY2F0aW9uVHJhY2tlcic7XG5jb25zdCBHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1MgPSBbXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gUGxheSBTZXJ2aWNlcycsXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gTG9jYXRpb24gTWFuYWdlcidcbl07XG5cbmNvbnN0IEdQU19DT09SRElOQVRFU19QQVRURVJOID0gL2RhdGE9XCIoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVwiLztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXR0aW5nc0FwcFN0YXJ0dXBPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNTAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gd2FpdCB1bnRpbCB0aGUgYXBwIGhhcyBzdGFydGVkXG4gKi9cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgQXBwaXVtIFNldHRpbmdzIGhlbHBlciBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG4gKiBhbmQgc3RhcnRzIGl0IGlmIG5lY2Vzc2FyeVxuICpcbiAqIEBwYXJhbSB7U2V0dGluZ3NBcHBTdGFydHVwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIEFwcGl1bSBTZXR0aW5ncyBoYXMgZmFpbGVkIHRvIHN0YXJ0XG4gKiBAcmV0dXJucyB7QURCfSBzZWxmIGluc3RhbmNlIGZvciBjaGFpbmluZ1xuICovXG5jb21tYW5kcy5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwID0gYXN5bmMgZnVuY3Rpb24gcmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCAob3B0cyA9IHt9KSB7XG4gIGlmIChhd2FpdCB0aGlzLnByb2Nlc3NFeGlzdHMoU0VUVElOR1NfSEVMUEVSX0lEKSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdTdGFydGluZyBBcHBpdW0gU2V0dGluZ3MgYXBwJyk7XG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0ID0gNTAwMCxcbiAgfSA9IG9wdHM7XG4gIGF3YWl0IHRoaXMuc3RhcnRBcHAoe1xuICAgIHBrZzogU0VUVElOR1NfSEVMUEVSX0lELFxuICAgIGFjdGl2aXR5OiBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSxcbiAgICBhY3Rpb246ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgY2F0ZWdvcnk6ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgc3RvcEFwcDogZmFsc2UsXG4gICAgd2FpdEZvckxhdW5jaDogZmFsc2UsXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9JRCksIHtcbiAgICAgIHdhaXRNczogdGltZW91dCxcbiAgICAgIGludGVydmFsTXM6IDMwMCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcHBpdW0gU2V0dGluZ3MgYXBwIGlzIG5vdCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tc2ApO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgV2lGaSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0V2lmaVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0V2lmaVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ3dpZmknLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgRGF0YSB0cmFuc2ZlciBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0RGF0YVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0RGF0YVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ2RhdGEnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgYW5pbWF0aW9uIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqIEFuaW1hdGlvbiBvbiB0aGUgZGV2aWNlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2luZyBnbG9iYWwgcHJvcGVydGllczpcbiAqIFtBTklNQVRPUl9EVVJBVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjQU5JTUFUT1JfRFVSQVRJT05fU0NBTEV9LFxuICogW1RSQU5TSVRJT05fQU5JTUFUSU9OX1NDQUxFXXtAbGluayBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5HbG9iYWwuaHRtbCNUUkFOU0lUSU9OX0FOSU1BVElPTl9TQ0FMRX0sXG4gKiBbV0lORE9XX0FOSU1BVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjV0lORE9XX0FOSU1BVElPTl9TQ0FMRX0uXG4gKiBUaGlzIG1ldGhvZCBzZXRzIGFsbCB0aGlzIHByb3BlcnRpZXMgdG8gMC4wIHRvIGRpc2FibGUgKDEuMCB0byBlbmFibGUpIGFuaW1hdGlvbi5cbiAqXG4gKiBUdXJuaW5nIG9mZiBhbmltYXRpb24gbWlnaHQgYmUgdXNlZnVsIHRvIGltcHJvdmUgc3RhYmlsaXR5XG4gKiBhbmQgcmVkdWNlIHRlc3RzIGV4ZWN1dGlvbiB0aW1lLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqL1xuY29tbWFuZHMuc2V0QW5pbWF0aW9uU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBzZXRBbmltYXRpb25TdGF0ZSAob24pIHtcbiAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1hJywgQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OLFxuICAgICctbicsIEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgXSk7XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgbG9jYWxlIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC4gRG9uJ3QgbmVlZCB0byByZWJvb3QgdGhlIGRldmljZSBhZnRlciBjaGFuZ2luZyB0aGUgbG9jYWxlLlxuICogVGhpcyBtZXRob2Qgc2V0cyBhbiBhcmJpdHJhcnkgbG9jYWxlIGZvbGxvd2luZzpcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogICBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sI0xvY2FsZShqYXZhLmxhbmcuU3RyaW5nLCUyMGphdmEubGFuZy5TdHJpbmcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UuIGUuZy4gZW4sIGphXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIGUuZy4gVVMsIEpQXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gZS5nLiBIYW5zIGluIGB6aC1IYW5zLUNOYFxuICovXG5jb21tYW5kcy5zZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwID0gYXN5bmMgZnVuY3Rpb24gc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCAobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCA9IG51bGwpIHtcbiAgY29uc3QgcGFyYW1zID0gW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctYScsIExPQ0FMRV9TRVRUSU5HX0FDVElPTixcbiAgICAnLW4nLCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUixcbiAgICAnLS1lcycsICdsYW5nJywgbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSxcbiAgICAnLS1lcycsICdjb3VudHJ5JywgY291bnRyeS50b1VwcGVyQ2FzZSgpXG4gIF07XG5cbiAgaWYgKHNjcmlwdCkge1xuICAgIHBhcmFtcy5wdXNoKCctLWVzJywgJ3NjcmlwdCcsIHNjcmlwdCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnNoZWxsKHBhcmFtcyk7XG59O1xuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9jYXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gbG9uZ2l0dWRlIC0gVmFsaWQgbG9uZ2l0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSBsYXRpdHVkZSAtIFZhbGlkIGxhdGl0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gYWx0aXR1ZGUgLSBWYWxpZCBhbHRpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNhdGVsbGl0ZXMgWzEyXSAtIE51bWJlciBvZiBzYXRlbGxpdGVzIGJlaW5nIHRyYWNrZWQgKDEtMTIpLlxuICogVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIG9uIHJlYWwgZGV2aWNlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNwZWVkIC0gVmFsaWQgc3BlZWQgdmFsdWUuXG4gKiBTaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuMCBtZXRlcnMvc2Vjb25kIGZvciByZWFsIGRldmljZXMgb3IgMC4wIGtub3RzXG4gKiBmb3IgZW11bGF0b3JzLlxuICovXG5cbi8qKlxuICogRW11bGF0ZSBnZW9sb2NhdGlvbiBjb29yZGluYXRlcyBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtMb2NhdGlvbn0gbG9jYXRpb24gLSBMb2NhdGlvbiBvYmplY3QuIFRoZSBgYWx0aXR1ZGVgIHZhbHVlIGlzIGlnbm9yZWRcbiAqIHdoaWxlIG1vY2tpbmcgdGhlIHBvc2l0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBzZXRHZW9Mb2NhdGlvbiAobG9jYXRpb24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBjb25zdCBmb3JtYXRMb2NhdGlvblZhbHVlID0gKHZhbHVlTmFtZSwgaXNSZXF1aXJlZCA9IHRydWUpID0+IHtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUobG9jYXRpb25bdmFsdWVOYW1lXSkpIHtcbiAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZU5hbWV9IG11c3QgYmUgcHJvdmlkZWRgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmbG9hdFZhbHVlID0gcGFyc2VGbG9hdChsb2NhdGlvblt2YWx1ZU5hbWVdKTtcbiAgICBpZiAoIWlzTmFOKGZsb2F0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gYCR7Xy5jZWlsKGZsb2F0VmFsdWUsIDUpfWA7XG4gICAgfVxuICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWVOYW1lfSBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIGZsb2F0IG51bWJlci4gYCArXG4gICAgICAgIGAnJHtsb2NhdGlvblt2YWx1ZU5hbWVdfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgY29uc3QgbG9uZ2l0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbG9uZ2l0dWRlJyk7XG4gIGNvbnN0IGxhdGl0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbGF0aXR1ZGUnKTtcbiAgY29uc3QgYWx0aXR1ZGUgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdhbHRpdHVkZScsIGZhbHNlKTtcbiAgY29uc3Qgc3BlZWQgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdzcGVlZCcsIGZhbHNlKTtcbiAgaWYgKGlzRW11bGF0b3IpIHtcbiAgICBjb25zdCBhcmdzID0gW2xvbmdpdHVkZSwgbGF0aXR1ZGVdO1xuICAgIGlmICghXy5pc05pbChhbHRpdHVkZSkpIHtcbiAgICAgIGFyZ3MucHVzaChhbHRpdHVkZSk7XG4gICAgfVxuICAgIGNvbnN0IHNhdGVsbGl0ZXMgPSBwYXJzZUludChsb2NhdGlvbi5zYXRlbGxpdGVzLCAxMCk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4oc2F0ZWxsaXRlcykgJiYgc2F0ZWxsaXRlcyA+IDAgJiYgc2F0ZWxsaXRlcyA8PSAxMikge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9BTFRJVFVERX1gKTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChgJHtzYXRlbGxpdGVzfWApO1xuICAgIH1cbiAgICBpZiAoIV8uaXNOaWwoc3BlZWQpKSB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgIGFyZ3MucHVzaChgJHtERUZBVUxUX0FMVElUVURFfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNCkge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9TQVRFTExJVEVTX0NPVU5UfWApO1xuICAgICAgfVxuICAgICAgYXJncy5wdXNoKHNwZWVkKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZXNldFRlbG5ldEF1dGhUb2tlbigpO1xuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdnZW8nLCAnZml4JywgLi4uYXJnc10pO1xuICAgIC8vIEEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA2MTgwXG4gICAgYXdhaXQgdGhpcy5hZGJFeGVjKFsnZW11JywgJ2dlbycsICdmaXgnLCAuLi4oYXJncy5tYXAoKGFyZykgPT4gYXJnLnJlcGxhY2UoJy4nLCAnLCcpKSldKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2FtJywgJ3N0YXJ0c2VydmljZScsXG4gICAgICAnLWUnLCAnbG9uZ2l0dWRlJywgbG9uZ2l0dWRlLFxuICAgICAgJy1lJywgJ2xhdGl0dWRlJywgbGF0aXR1ZGUsXG4gICAgXTtcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShhbHRpdHVkZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCAnYWx0aXR1ZGUnLCBhbHRpdHVkZSk7XG4gICAgfVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHNwZWVkKSkge1xuICAgICAgYXJncy5wdXNoKCctZScsICdzcGVlZCcsIHNwZWVkKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKExPQ0FUSU9OX1NFUlZJQ0UpO1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoYXJncyk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IGNhY2hlZCBHUFMgbG9jYXRpb24gZnJvbSB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybnMge0xvY2F0aW9ufSBUaGUgY3VycmVudCBsb2NhdGlvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IGxvY2F0aW9uIGNhbm5vdCBiZSByZXRyaWV2ZWRcbiAqL1xuY29tbWFuZHMuZ2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRHZW9Mb2NhdGlvbiAoKSB7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctbicsIExPQ0FUSU9OX1JFQ0VJVkVSLFxuICAgICAgJy1hJywgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTixcbiAgICBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIGN1cnJlbnQgZ2VvIGNvb3JkaW5hdGVzIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZSBhbmQgaGFzIGxvY2F0aW9uIHBlcm1pc3Npb25zLiBBbHNvIHRoZSBsb2NhdGlvbiBgICtcbiAgICAgIGBzZXJ2aWNlcyBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGRldmljZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVyciB8fCBlcnIuc3Rkb3V0IHx8IGVyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBHUFNfQ09PUkRJTkFURVNfUEFUVEVSTi5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgYWN0dWFsIGxvY2F0aW9uIHZhbHVlcyBmcm9tIHRoZSBjb21tYW5kIG91dHB1dDogJHtvdXRwdXR9YCk7XG4gIH1cbiAgY29uc3QgbG9jYXRpb24gPSB7XG4gICAgbGF0aXR1ZGU6IG1hdGNoWzFdLFxuICAgIGxvbmdpdHVkZTogbWF0Y2hbMl0sXG4gICAgYWx0aXR1ZGU6IG1hdGNoWzNdLFxuICB9O1xuICBsb2cuZGVidWcoYEdvdCBnZW8gY29vcmRpbmF0ZXM6ICR7SlNPTi5zdHJpbmdpZnkobG9jYXRpb24pfWApO1xuICByZXR1cm4gbG9jYXRpb247XG59O1xuXG4vKipcbiAqIFNlbmRzIGFuIGFzeW5jIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgR1BTIGNhY2hlLlxuICogVGhpcyBmZWF0dXJlIG9ubHkgd29ya3MgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0IGhhc1xuICogR29vZ2xlIFBsYXkgU2VydmljZXMgaW5zdGFsbGVkLiBJbiBjYXNlIHRoZSB2YW5pbGxhXG4gKiBMb2NhdGlvbk1hbmFnZXIgaXMgdXNlZCB0aGUgZGV2aWNlIEFQSSBsZXZlbCBtdXN0IGJlIGF0XG4gKiB2ZXJzaW9uIDMwIChBbmRyb2lkIFIpIG9yIGhpZ2hlci5cbiAqXG4gKiBAcGFyYW0gdGltZW91dE1zIFsyMDAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gYmxvY2sgdW50aWwgR1BTIGNhY2hlIGlzIHJlZnJlc2hlZC4gUHJvdmlkaW5nIHplcm8gb3IgYSBuZWdhdGl2ZVxuICogdmFsdWUgdG8gaXQgc2tpcHMgd2FpdGluZyBjb21wbGV0ZWx5LlxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgR1BTIGNhY2hlIGNhbm5vdCBiZSByZWZyZXNoZWQuXG4gKi9cbmNvbW1hbmRzLnJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlID0gYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUgKHRpbWVvdXRNcyA9IDIwMDAwKSB7XG4gIGxldCBsb2djYXRNb25pdG9yO1xuICBsZXQgbW9uaXRvcmluZ1Byb21pc2U7XG5cbiAgaWYgKHRpbWVvdXRNcyA+IDApIHtcbiAgICBjb25zdCBjbWQgPSBbXG4gICAgICAuLi50aGlzLmFkYi5kZWZhdWx0QXJncyxcbiAgICAgICdsb2djYXQnLCAnLXMnLCBMT0NBVElPTl9UUkFDS0VSX1RBRyxcbiAgICBdO1xuICAgIGxvZ2NhdE1vbml0b3IgPSBuZXcgU3ViUHJvY2Vzcyh0aGlzLmFkYi5wYXRoLCBjbWQpO1xuICAgIGNvbnN0IHRpbWVvdXRFcnJvck1zZyA9IGBUaGUgR1BTIGNhY2hlIGhhcyBub3QgYmVlbiByZWZyZXNoZWQgd2l0aGluICR7dGltZW91dE1zfW1zIHRpbWVvdXQuIGAgK1xuICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgdGhlIGRldmljZSB1bmRlciB0ZXN0IGhhcyBBcHBpdW0gU2V0dGluZ3MgYXBwIGluc3RhbGxlZCBhbmQgcnVubmluZy4gYCArXG4gICAgICBgQWxzbywgaXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgZGV2aWNlIGhhcyBHb29nbGUgUGxheSBTZXJ2aWNlcyBpbnN0YWxsZWQgb3IgaXMgcnVubmluZyBgICtcbiAgICAgIGBBbmRyb2lkIDEwKyBvdGhlcndpc2UuYDtcbiAgICBtb25pdG9yaW5nUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcih0aW1lb3V0RXJyb3JNc2cpKSwgdGltZW91dE1zKTtcblxuICAgICAgbG9nY2F0TW9uaXRvci5vbignZXhpdCcsICgpID0+IHJlamVjdChuZXcgRXJyb3IodGltZW91dEVycm9yTXNnKSkpO1xuICAgICAgWydsaW5lcy1zdGRlcnInLCAnbGluZXMtc3Rkb3V0J10ubWFwKChldnQpID0+IGxvZ2NhdE1vbml0b3Iub24oZXZ0LCAobGluZXMpID0+IHtcbiAgICAgICAgaWYgKGxpbmVzLnNvbWUoKGxpbmUpID0+IEdQU19DQUNIRV9SRUZSRVNIRURfTE9HUy5zb21lKCh4KSA9PiBsaW5lLmluY2x1ZGVzKHgpKSkpIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgICBhd2FpdCBsb2djYXRNb25pdG9yLnN0YXJ0KDApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICAgJy1uJywgTE9DQVRJT05fUkVDRUlWRVIsXG4gICAgICAnLWEnLCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OLFxuICAgICAgJy0tZXonLCAnZm9yY2VVcGRhdGUnLCAndHJ1ZScsXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlZnJlc2ggdGhlIEdQUyBjYWNoZSBvbiB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyB1cCB0byBkYXRlIGFuZCBoYXMgbG9jYXRpb24gcGVybWlzc2lvbnMuIEFsc28gdGhlIGxvY2F0aW9uIGAgK1xuICAgICAgYHNlcnZpY2VzIG11c3QgYmUgZW5hYmxlZCBvbiB0aGUgZGV2aWNlLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyIHx8IGVyci5zdGRvdXQgfHwgZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAobG9nY2F0TW9uaXRvciAmJiBtb25pdG9yaW5nUHJvbWlzZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgbG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGltZW91dE1zfW1zIGZvciB0aGUgR1BTIGNhY2hlIHRvIGJlIHJlZnJlc2hlZGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBtb25pdG9yaW5nUHJvbWlzZTtcbiAgICAgIGxvZy5pbmZvKGBUaGUgR1BTIGNhY2hlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWZyZXNoZWQgYWZ0ZXIgYCArXG4gICAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAobG9nY2F0TW9uaXRvci5pc1J1bm5pbmcpIHtcbiAgICAgICAgYXdhaXQgbG9nY2F0TW9uaXRvci5zdG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKCdUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBHUFMgY2FjaGUgaGFzIGJlZW4gc2VudC4gU2tpcHBpbmcgd2FpdGluZyBmb3IgaXRzIHJlc3VsdC4nKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgZ2l2ZW4gZWRpdG9yIGFjdGlvbiBvbiB0aGUgZm9jdXNlZCBpbnB1dCBmaWVsZC5cbiAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UuXG4gKiBObyBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcGVyZm9ybWluZyB0aGUgYWN0aW9uLlxuICogWW91IG11c3QgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQgaWYgc29tZXRoaW5nIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGFjdGlvbiAtIEVpdGhlciBhY3Rpb24gY29kZSBvciBuYW1lLiBUaGUgZm9sbG93aW5nIGFjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyBhcmUgc3VwcG9ydGVkOiBgbm9ybWFsLCB1bnNwZWNpZmllZCwgbm9uZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28sIHNlYXJjaCwgc2VuZCwgbmV4dCwgZG9uZSwgcHJldmlvdXNgXG4gKi9cbmNvbW1hbmRzLnBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtRWRpdG9yQWN0aW9uIChhY3Rpb24pIHtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGVkaXRvciBhY3Rpb246ICR7YWN0aW9ufWApO1xuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChBUFBJVU1fSU1FLFxuICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoWydpbnB1dCcsICd0ZXh0JywgYC8ke2FjdGlvbn0vYF0pKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGRldmljZSdzIGNsaXBib2FyZC5cbiAqIFRoZSBtZXRob2Qgd29ya3MgZm9yIEFuZHJvaWQgYmVsb3cgYW5kIGFib3ZlIDI5LlxuICogSXQgdGVtb3JhcmlseSBlbmZvcmNlcyB0aGUgSU1FIHNldHRpbmcgaW4gb3JkZXIgdG8gd29ya2Fyb3VuZFxuICogc2VjdXJpdHkgbGltaXRhdGlvbnMgaWYgbmVlZGVkLlxuICogVGhpcyBtZXRob2Qgb25seSB3b3JrcyBpZiBBcHBpdW0gU2V0dGluZ3Mgdi4gMi4xNSsgaXMgaW5zdGFsbGVkXG4gKiBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYWN0dWFsIGNvbnRlbnQgb2YgdGhlIG1haW4gY2xpcGJvYXJkIGFzXG4gKiBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBjbGlwYm9hcmQgaXMgZW1wdHlcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIGdldHRpbmcgdGhlXG4gKiBjbGlwYm9hcmQgY29udGFudFxuICovXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiBnZXRDbGlwYm9hcmQgKCkge1xuICBsb2cuZGVidWcoJ0dldHRpbmcgdGhlIGNsaXBib2FyZCBjb250ZW50Jyk7XG4gIGNvbnN0IHJldHJpZXZlQ2xpcGJvYXJkID0gYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgQ0xJUEJPQVJEX1JFQ0VJVkVSLFxuICAgICctYScsIENMSVBCT0FSRF9SRVRSSUVWQUxfQUNUSU9OLFxuICBdKTtcbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSAoYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpID49IDI5KVxuICAgICAgPyAoYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoQVBQSVVNX0lNRSwgcmV0cmlldmVDbGlwYm9hcmQpKVxuICAgICAgOiAoYXdhaXQgcmV0cmlldmVDbGlwYm9hcmQoKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIHRoZSBjdXJyZW50IGNsaXBib2FyZCBjb250ZW50IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IC9kYXRhPVwiKFteXCJdKilcIi8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGFjdHVhbCBjbGlib2FyZCBjb250ZW50IGZyb20gdGhlIGNvbW1hbmQgb3V0cHV0OiAke291dHB1dH1gKTtcbiAgfVxuICByZXR1cm4gXy50cmltKG1hdGNoWzFdKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIEFuZHJvaWQgbm90aWZpY2F0aW9ucyB2aWEgQXBwaXVtIFNldHRpbmdzIGhlbHBlci5cbiAqIEFwcGl1bSBTZXR0aW5ncyBhcHAgaXRzZWxmIG11c3QgYmUgKm1hbnVhbGx5KiBncmFudGVkIHRvIGFjY2VzcyBub3RpZmljYXRpb25zXG4gKiB1bmRlciBkZXZpY2UgU2V0dGluZ3MgaW4gb3JkZXIgdG8gbWFrZSB0aGlzIGZlYXR1cmUgd29ya2luZy5cbiAqIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIga2VlcHMgYWxsIHRoZSBhY3RpdmUgbm90aWZpY2F0aW9ucyBwbHVzXG4gKiBub3RpZmljYXRpb25zIHRoYXQgYXBwZWFyZWQgd2hpbGUgaXQgd2FzIHJ1bm5pbmcgaW4gdGhlIGludGVybmFsIGJ1ZmZlcixcbiAqIGJ1dCBubyBtb3JlIHRoYW4gMTAwIGl0ZW1zIGFsdG9nZXRoZXIuIE5ld2x5IGFwcGVhcmVkIG5vdGlmaWNhdGlvbnNcbiAqIGFyZSBhbHdheXMgYWRkZWQgdG8gdGhlIGhlYWQgb2YgdGhlIG5vdGlmaWNhdGlvbnMgYXJyYXkuXG4gKiBUaGUgYGlzUmVtb3ZlZGAgZmxhZyBpcyBzZXQgdG8gYHRydWVgIGZvciBub3RpZmljYXRpb25zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvblxuICogYW5kIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24uaHRtbFxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYXZhaWxhYmxlIG5vdGlmaWNhdGlvbiBwcm9wZXJ0aWVzIGFuZCB0aGVpciB2YWx1ZXMuXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGV4YW1wbGUgb3V0cHV0IGlzOlxuICogYGBganNvblxuICoge1xuICogICBcInN0YXR1c0Jhck5vdGlmaWNhdGlvbnNcIjpbXG4gKiAgICAge1xuICogICAgICAgXCJpc0dyb3VwXCI6ZmFsc2UsXG4gKiAgICAgICBcInBhY2thZ2VOYW1lXCI6XCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICAgIFwiaXNDbGVhcmFibGVcIjpmYWxzZSxcbiAqICAgICAgIFwiaXNPbmdvaW5nXCI6dHJ1ZSxcbiAqICAgICAgIFwiaWRcIjoxLFxuICogICAgICAgXCJ0YWdcIjpudWxsLFxuICogICAgICAgXCJub3RpZmljYXRpb25cIjp7XG4gKiAgICAgICAgIFwidGl0bGVcIjpudWxsLFxuICogICAgICAgICBcImJpZ1RpdGxlXCI6XCJBcHBpdW0gU2V0dGluZ3NcIixcbiAqICAgICAgICAgXCJ0ZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJiaWdUZXh0XCI6XCJLZWVwIHRoaXMgc2VydmljZSBydW5uaW5nLCBzbyBBcHBpdW0gZm9yIEFuZHJvaWQgY2FuIHByb3Blcmx5IGludGVyYWN0IHdpdGggc2V2ZXJhbCBzeXN0ZW0gQVBJc1wiLFxuICogICAgICAgICBcInRpY2tlclRleHRcIjpudWxsLFxuICogICAgICAgICBcInN1YlRleHRcIjpudWxsLFxuICogICAgICAgICBcImluZm9UZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJ0ZW1wbGF0ZVwiOlwiYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uJEJpZ1RleHRTdHlsZVwiXG4gKiAgICAgICB9LFxuICogICAgICAgXCJ1c2VySGFuZGxlXCI6MCxcbiAqICAgICAgIFwiZ3JvdXBLZXlcIjpcIjB8aW8uYXBwaXVtLnNldHRpbmdzfDF8bnVsbHwxMDEzM1wiLFxuICogICAgICAgXCJvdmVycmlkZUdyb3VwS2V5XCI6bnVsbCxcbiAqICAgICAgIFwicG9zdFRpbWVcIjoxNTc2ODUzNTE4ODUwLFxuICogICAgICAgXCJrZXlcIjpcIjB8aW8uYXBwaXVtLnNldHRpbmdzfDF8bnVsbHwxMDEzM1wiLFxuICogICAgICAgXCJpc1JlbW92ZWRcIjpmYWxzZVxuICogICAgIH1cbiAqICAgXVxuICogfVxuICogYGBgXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdFxuICovXG5jb21tYW5kcy5nZXROb3RpZmljYXRpb25zID0gYXN5bmMgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9ucyAoKSB7XG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyBub3RpZmljYXRpb25zJyk7XG4gIC8vIFNvbWVob3cgcHJvdmlkaW5nIHRoZSBgLW5gIGFyZyB0byB0aGUgYGFtYCB1bmRlcm5lYXRoXG4gIC8vIHJlbmRlcnMgdGhlIGJyb2FkY2FzdCB0byBmYWlsIGluc3RlYWQgb2Ygc3RhcnRpbmcgdGhlXG4gIC8vIEFwcGl1bSBTZXR0aW5ncyBhcHAuIFRoaXMgb25seSBoYXBwZW5zIHRvIHRoZSBub3RpZmljYXRpb25zXG4gIC8vIHJlY2VpdmVyXG4gIGF3YWl0IHRoaXMucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCgpO1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBOT1RJRklDQVRJT05TX1JFVFJJRVZBTF9BQ1RJT04sXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgYW5kIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBwYXJzZUpzb25EYXRhKG91dHB1dCwgJ25vdGlmaWNhdGlvbnMnKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU21zTGlzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXggWzEwMF0gLSBUaGUgbWF4aW11bSBjb3VudCBvZiByZWNlbnQgbWVzc2FnZXNcbiAqIHRvIHJldHJpZXZlXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgdGhlIG1vc3QgcmVjZW50IFNNU1xuICogcHJvcGVydGllcyBsaXN0IHZpYSBBcHBpdW0gU2V0dGluZ3MgaGVscGVyLlxuICogTWVzc2FnZXMgYXJlIHNvcnRlZCBieSBkYXRlIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gKlxuICogQHBhcmFtIHtTbXNMaXN0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGV4YW1wbGUgb3V0cHV0IGlzOlxuICogYGBganNvblxuICoge1xuICogICBcIml0ZW1zXCI6W1xuICogICAgIHtcbiAqICAgICAgIFwiaWRcIjpcIjJcIixcbiAqICAgICAgIFwiYWRkcmVzc1wiOlwiKzEyMzQ1Njc4OVwiLFxuICogICAgICAgXCJwZXJzb25cIjpudWxsLFxuICogICAgICAgXCJkYXRlXCI6XCIxNTgxOTM2NDIyMjAzXCIsXG4gKiAgICAgICBcInJlYWRcIjpcIjBcIixcbiAqICAgICAgIFwic3RhdHVzXCI6XCItMVwiLFxuICogICAgICAgXCJ0eXBlXCI6XCIxXCIsXG4gKiAgICAgICBcInN1YmplY3RcIjpudWxsLFxuICogICAgICAgXCJib2R5XCI6XCJcXFwidGV4dCBtZXNzYWdlMlxcXCJcIixcbiAqICAgICAgIFwic2VydmljZUNlbnRlclwiOm51bGxcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIFwiaWRcIjpcIjFcIixcbiAqICAgICAgIFwiYWRkcmVzc1wiOlwiKzEyMzQ1Njc4OVwiLFxuICogICAgICAgXCJwZXJzb25cIjpudWxsLFxuICogICAgICAgXCJkYXRlXCI6XCIxNTgxOTM2MzgyNzQwXCIsXG4gKiAgICAgICBcInJlYWRcIjpcIjBcIixcbiAqICAgICAgIFwic3RhdHVzXCI6XCItMVwiLFxuICogICAgICAgXCJ0eXBlXCI6XCIxXCIsXG4gKiAgICAgICBcInN1YmplY3RcIjpudWxsLFxuICogICAgICAgXCJib2R5XCI6XCJcXFwidGV4dCBtZXNzYWdlXFxcIlwiLFxuICogICAgICAgXCJzZXJ2aWNlQ2VudGVyXCI6bnVsbFxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ0b3RhbFwiOjJcbiAqIH1cbiAqIGBgYFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBTTVMgbGlzdFxuICovXG5jb21tYW5kcy5nZXRTbXNMaXN0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0U21zTGlzdCAob3B0cyA9IHt9KSB7XG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyB0aGUgcmVjZW50IFNNUyBtZXNzYWdlcycpO1xuICBjb25zdCBhcmdzID0gW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIFNNU19MSVNUX1JFQ0VJVkVSLFxuICAgICctYScsIFNNU19MSVNUX1JFVFJJRVZBTF9BQ1RJT04sXG4gIF07XG4gIGlmIChvcHRzLm1heCkge1xuICAgIGFyZ3MucHVzaCgnLS1lcycsICdtYXgnLCBvcHRzLm1heCk7XG4gIH1cbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSBTTVMgbGlzdCBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBhbmQgaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSnNvbkRhdGEob3V0cHV0LCAnU01TIGxpc3QnKTtcbn07XG5cbi8qKlxuICogVHlwZXMgdGhlIGdpdmVuIFVuaWNvZGUgc3RyaW5nLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZm9jdXMgaXMgYWxyZWFkeSBwdXRcbiAqIHRvIHRoZSBkZXN0aW5hdGlvbiBpbnB1dCBmaWVsZCBiZWZvcmUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSBzdHJpbmcgdG8gdHlwZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW5wdXQgdGV4dCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2VudCB0byBhZGJcbiAqL1xuY29tbWFuZHMudHlwZVVuaWNvZGUgPSBhc3luYyBmdW5jdGlvbiB0eXBlVW5pY29kZSAodGV4dCkge1xuICBpZiAoXy5pc05pbCh0ZXh0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRleHQgPSBgJHt0ZXh0fWA7XG4gIGxvZy5kZWJ1ZyhgVHlwaW5nICR7dXRpbC5wbHVyYWxpemUoJ2NoYXJhY3RlcicsIHRleHQubGVuZ3RoLCB0cnVlKX1gKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IHRoaXMucnVuSW5JbWVDb250ZXh0KFxuICAgIFVOSUNPREVfSU1FLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmlucHV0VGV4dChpbWFwLmVuY29kZSh0ZXh0KSlcbiAgKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFBlcmZvcm1zIHJlY3Vyc2l2ZSBtZWRpYSBzY2FuIGF0IHRoZSBnaXZlbiBkZXN0aW5hdGlvbi5cbiAqIEFsbCBzdWNjZXNzZnVsbHkgc2Nhbm5lZCBpdGVtcyBhcmUgYmVpbmcgYWRkZWQgdG8gdGhlIGRldmljZSdzXG4gKiBtZWRpYSBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbiBGaWxlL2ZvbGRlciBwYXRoIG9uIHRoZSByZW1vdGUgZGV2aWNlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiB1bmV4cGVjdGVkIGVycm9yIGJ5IHNjYW5uaW5nLlxuICovXG5jb21tYW5kcy5zY2FuTWVkaWEgPSBhc3luYyBmdW5jdGlvbiBzY2FuTWVkaWEgKGRlc3RpbmF0aW9uKSB7XG4gIGxvZy5kZWJ1ZyhgU2Nhbm5pbmcgJyR7ZGVzdGluYXRpb259JyBmb3IgbWVkaWEgZmlsZXNgKTtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgTUVESUFfU0NBTl9SRUNFSVZFUixcbiAgICAnLWEnLCBNRURJQV9TQ0FOX0FDVElPTixcbiAgICAnLS1lcycsICdwYXRoJywgZGVzdGluYXRpb25cbiAgXSk7XG4gIGlmICghXy5pbmNsdWRlcyhvdXRwdXQsICdyZXN1bHQ9LTEnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gbWVkaWEgY291bGQgYmUgc2Nhbm5lZCBhdCAnJHtkZXN0aW5hdGlvbn0nLiBgICtcbiAgICAgIGBDaGVjayB0aGUgZGV2aWNlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlscy5gKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==