appium-android-driver 5.0.15 → 5.1.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.
Files changed (55) hide show
  1. package/build/index.js +2 -28
  2. package/build/lib/android-helpers.js +2 -2
  3. package/build/lib/bootstrap.js +6 -6
  4. package/build/lib/commands/actions.js +2 -2
  5. package/build/lib/commands/alert.js +6 -6
  6. package/build/lib/commands/app-management.js +4 -4
  7. package/build/lib/commands/context.js +4 -4
  8. package/build/lib/commands/element.js +2 -2
  9. package/build/lib/commands/emu-console.js +3 -3
  10. package/build/lib/commands/execute.js +5 -5
  11. package/build/lib/commands/file-actions.js +7 -7
  12. package/build/lib/commands/find.js +5 -5
  13. package/build/lib/commands/general.js +7 -7
  14. package/build/lib/commands/ime.js +3 -3
  15. package/build/lib/commands/intent.js +7 -7
  16. package/build/lib/commands/log.js +5 -5
  17. package/build/lib/commands/network.js +3 -3
  18. package/build/lib/commands/recordscreen.js +2 -2
  19. package/build/lib/commands/shell.js +4 -4
  20. package/build/lib/commands/streamscreen.js +2 -2
  21. package/build/lib/commands/touch.js +4 -4
  22. package/build/lib/driver.js +5 -5
  23. package/build/lib/logger.js +2 -2
  24. package/build/lib/uiautomator.js +2 -2
  25. package/build/lib/unlock-helpers.js +2 -2
  26. package/build/lib/webview-helpers.js +2 -2
  27. package/index.js +1 -26
  28. package/lib/android-helpers.js +1 -1
  29. package/lib/bootstrap.js +2 -2
  30. package/lib/commands/actions.js +1 -1
  31. package/lib/commands/alert.js +1 -1
  32. package/lib/commands/app-management.js +2 -2
  33. package/lib/commands/context.js +2 -2
  34. package/lib/commands/element.js +1 -1
  35. package/lib/commands/emu-console.js +1 -1
  36. package/lib/commands/execute.js +1 -1
  37. package/lib/commands/file-actions.js +2 -2
  38. package/lib/commands/find.js +2 -2
  39. package/lib/commands/general.js +2 -2
  40. package/lib/commands/ime.js +1 -1
  41. package/lib/commands/intent.js +1 -1
  42. package/lib/commands/log.js +1 -1
  43. package/lib/commands/network.js +1 -1
  44. package/lib/commands/recordscreen.js +1 -1
  45. package/lib/commands/shell.js +2 -2
  46. package/lib/commands/streamscreen.js +1 -1
  47. package/lib/commands/touch.js +2 -2
  48. package/lib/driver.js +2 -2
  49. package/lib/logger.js +1 -1
  50. package/lib/uiautomator.js +1 -1
  51. package/lib/unlock-helpers.js +1 -1
  52. package/lib/webview-helpers.js +1 -1
  53. package/package.json +5 -3
  54. package/build/lib/server.js +0 -34
  55. package/lib/server.js +0 -14
@@ -15,11 +15,11 @@ var _androidHelpers = _interopRequireDefault(require("../android-helpers"));
15
15
 
16
16
  var _bluebird = _interopRequireDefault(require("bluebird"));
17
17
 
18
- var _baseDriver = require("@appium/base-driver");
18
+ var _driver = require("appium/driver");
19
19
 
20
20
  var _asyncbox = require("asyncbox");
21
21
 
22
- var _support = require("@appium/support");
22
+ var _support = require("appium/support");
23
23
 
24
24
  let commands = {},
25
25
  helpers = {},
@@ -170,7 +170,7 @@ helpers.performGesture = async function performGesture(gesture) {
170
170
  try {
171
171
  return await this.doTouchAction(gesture.action, gesture.options || {});
172
172
  } catch (e) {
173
- if ((0, _baseDriver.isErrorType)(e, _baseDriver.errors.NoSuchElementError) && gesture.action === 'release' && gesture.options.element) {
173
+ if ((0, _driver.isErrorType)(e, _driver.errors.NoSuchElementError) && gesture.action === 'release' && gesture.options.element) {
174
174
  delete gesture.options.element;
175
175
  this.log.debug(`retrying release without element opts: ${gesture.options}.`);
176
176
  return await this.doTouchAction(gesture.action, gesture.options || {});
@@ -395,4 +395,4 @@ var _default = extensions;
395
395
  exports.default = _default;require('source-map-support').install();
396
396
 
397
397
 
398
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL3RvdWNoLmpzIiwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImdldENvb3JkRGVmYXVsdCIsInZhbCIsInV0aWwiLCJoYXNWYWx1ZSIsImdldFN3aXBlVG91Y2hEdXJhdGlvbiIsIndhaXRHZXN0dXJlIiwiZHVyYXRpb24iLCJvcHRpb25zIiwibXMiLCJkb1RvdWNoQWN0aW9uIiwiYWN0aW9uIiwib3B0cyIsImVsZW1lbnQiLCJ4IiwieSIsImNvdW50IiwidGFwIiwidG91Y2hEb3duIiwidG91Y2hVcCIsInRvdWNoTW92ZSIsIkIiLCJkZWxheSIsInRvdWNoTG9uZ0NsaWNrIiwibG9nIiwid2FybiIsImVycm9yQW5kVGhyb3ciLCJkb1RvdWNoRHJhZyIsImdlc3R1cmVzIiwibG9uZ1ByZXNzIiwibW92ZVRvIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJnZXRMb2NhdGlvbkluVmlldyIsImFwaUxldmVsIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJNYXRoIiwibWF4IiwiZHJhZyIsImZpeFJlbGVhc2UiLCJyZWxlYXNlIiwiXyIsImxhc3QiLCJjbG9uZSIsInJlZiIsImdlc3R1cmUiLCJyZXZlcnNlIiwibG9jIiwic2l6ZSIsImdldFNpemUiLCJ3aWR0aCIsImhlaWdodCIsInBpY2siLCJwZXJmb3JtR2VzdHVyZSIsImUiLCJpc0Vycm9yVHlwZSIsImVycm9ycyIsIk5vU3VjaEVsZW1lbnRFcnJvciIsImRlYnVnIiwiZ2V0U3dpcGVPcHRpb25zIiwidG91Y2hDb3VudCIsImRlc3RFbGVtZW50IiwibG9jUmVzdWx0Iiwic2l6ZVJlc3VsdCIsIm9mZnNldFgiLCJhYnMiLCJvZmZzZXRZIiwiZmlyc3RFbExvY2F0aW9uIiwicGVyZm9ybVRvdWNoIiwibGVuZ3RoIiwic3dpcGVPcHRzIiwic3dpcGUiLCJhY3Rpb25zIiwibWFwIiwiaGVhZCIsInBvcCIsInNsaWNlIiwicHJlc3MiLCJzaGlmdCIsIndhaXQiLCJmaXhlZEdlc3R1cmVzIiwicGFyc2VUb3VjaCIsImciLCJtdWx0aSIsInRvdWNoU3RhdGVPYmplY3RzIiwiYXN5bmNtYXAiLCJpbmNsdWRlcyIsIm9mZnNldCIsImVsZW1lbnRJZCIsInBvcyIsInRvdWNoU3RhdGVPYmplY3QiLCJ0aW1lT2Zmc2V0IiwicGFyc2VJbnQiLCJwcmV2UG9zIiwidGltZSIsInN0YXRlIiwiaXNVbmRlZmluZWQiLCJhbmRyb2lkSGVscGVycyIsInRydW5jYXRlRGVjaW1hbHMiLCJ0b3VjaCIsInBlcmZvcm1NdWx0aUFjdGlvbiIsIkVycm9yIiwic3RhdGVzIiwiZG9QZXJmb3JtTXVsdGlBY3Rpb24iLCJib290c3RyYXAiLCJzZW5kQWN0aW9uIiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL2NvbW1hbmRzL3RvdWNoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgYW5kcm9pZEhlbHBlcnMgZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9ycywgaXNFcnJvclR5cGUgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7IGFzeW5jbWFwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q29vcmREZWZhdWx0ICh2YWwpIHtcbiAgLy8gZ29pbmcgdGhlIGxvbmcgd2F5IGFuZCBjaGVja2luZyBmb3IgdW5kZWZpbmVkIGFuZCBudWxsIHNpbmNlXG4gIC8vIHdlIGNhbid0IGJlIGFzc3VyZWQgYGVsSWRgIGlzIGEgc3RyaW5nIGFuZCBub3QgYW4gaW50LiBTYW1lXG4gIC8vIHRoaW5nIHdpdGggZGVzdEVsZW1lbnQgYmVsb3cuXG4gIHJldHVybiB1dGlsLmhhc1ZhbHVlKHZhbCkgPyB2YWwgOiAwLjU7XG59XG5cbmZ1bmN0aW9uIGdldFN3aXBlVG91Y2hEdXJhdGlvbiAod2FpdEdlc3R1cmUpIHtcbiAgLy8gdGhlIHRvdWNoIGFjdGlvbiBhcGkgdXNlcyBtcywgd2Ugd2FudCBzZWNvbmRzXG4gIC8vIDAuOCBpcyB0aGUgZGVmYXVsdCB0aW1lIGZvciB0aGUgb3BlcmF0aW9uXG4gIGxldCBkdXJhdGlvbiA9IDAuODtcbiAgaWYgKHR5cGVvZiB3YWl0R2VzdHVyZS5vcHRpb25zLm1zICE9PSAndW5kZWZpbmVkJyAmJiB3YWl0R2VzdHVyZS5vcHRpb25zLm1zKSB7XG4gICAgZHVyYXRpb24gPSB3YWl0R2VzdHVyZS5vcHRpb25zLm1zIC8gMTAwMDtcbiAgICBpZiAoZHVyYXRpb24gPT09IDApIHtcbiAgICAgIC8vIHNldCB0byBhIHZlcnkgbG93IG51bWJlciwgc2luY2UgdGhleSB3YW50ZWQgaXQgZmFzdFxuICAgICAgLy8gYnV0IGJlbG93IDAuMSBiZWNvbWVzIDAgc3RlcHMsIHdoaWNoIGNhdXNlcyBlcnJvcnNcbiAgICAgIGR1cmF0aW9uID0gMC4xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZHVyYXRpb247XG59XG5cbmNvbW1hbmRzLmRvVG91Y2hBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBkb1RvdWNoQWN0aW9uIChhY3Rpb24sIG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGVsZW1lbnQsIHgsIHksIGNvdW50LCBtcywgZHVyYXRpb24gfSA9IG9wdHM7XG4gIC8vIHBhcnNlVG91Y2ggcHJlY2FsY3VsYXRlcyBhYnNvbHV0ZSBlbGVtZW50IHBvc2l0aW9uc1xuICAvLyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHBhc3MgYGVsZW1lbnRgIHRvIHRoZSBhZmZlY3RlZCBnZXN0dXJlc1xuICBzd2l0Y2ggKGFjdGlvbikge1xuICAgIGNhc2UgJ3RhcCc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50YXAobnVsbCwgeCwgeSwgY291bnQpO1xuICAgIGNhc2UgJ3ByZXNzJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRvdWNoRG93bihudWxsLCB4LCB5KTtcbiAgICBjYXNlICdyZWxlYXNlJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRvdWNoVXAoZWxlbWVudCwgeCwgeSk7XG4gICAgY2FzZSAnbW92ZVRvJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRvdWNoTW92ZShudWxsLCB4LCB5KTtcbiAgICBjYXNlICd3YWl0JzpcbiAgICAgIHJldHVybiBhd2FpdCBCLmRlbGF5KG1zKTtcbiAgICBjYXNlICdsb25nUHJlc3MnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hMb25nQ2xpY2sobnVsbCwgeCwgeSwgZHVyYXRpb24gfHwgMTAwMCk7XG4gICAgY2FzZSAnY2FuY2VsJzpcbiAgICAgIC8vIFRPRE86IGNsYXJpZnkgYmVoYXZpb3Igb2YgJ2NhbmNlbCcgYWN0aW9uIGFuZCBmaXggdGhpc1xuICAgICAgdGhpcy5sb2cud2FybignQ2FuY2VsIGFjdGlvbiBjdXJyZW50bHkgaGFzIG5vIGVmZmVjdCcpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYHVua25vd24gYWN0aW9uICR7YWN0aW9ufWApO1xuICB9XG59O1xuXG4vLyBkcmFnIGlzICpub3QqIHByZXNzLW1vdmUtcmVsZWFzZSwgc28gd2UgbmVlZCB0byB0cmFuc2xhdGVcbi8vIGRyYWcgd29ya3MgZmluZSBmb3Igc2Nyb2xsLCBhcyB3ZWxsXG5oZWxwZXJzLmRvVG91Y2hEcmFnID0gYXN5bmMgZnVuY3Rpb24gZG9Ub3VjaERyYWcgKGdlc3R1cmVzKSB7XG4gIGxldCBsb25nUHJlc3MgPSBnZXN0dXJlc1swXTtcbiAgbGV0IG1vdmVUbyA9IGdlc3R1cmVzWzFdO1xuICBsZXQgc3RhcnRYID0gbG9uZ1ByZXNzLm9wdGlvbnMueCB8fCAwLFxuICAgICAgc3RhcnRZID0gbG9uZ1ByZXNzLm9wdGlvbnMueSB8fCAwLFxuICAgICAgZW5kWCA9IG1vdmVUby5vcHRpb25zLnggfHwgMCxcbiAgICAgIGVuZFkgPSBtb3ZlVG8ub3B0aW9ucy55IHx8IDA7XG4gIGlmIChsb25nUHJlc3Mub3B0aW9ucy5lbGVtZW50KSB7XG4gICAgbGV0IHt4LCB5fSA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcobG9uZ1ByZXNzLm9wdGlvbnMuZWxlbWVudCk7XG4gICAgc3RhcnRYICs9IHggfHwgMDtcbiAgICBzdGFydFkgKz0geSB8fCAwO1xuICB9XG4gIGlmIChtb3ZlVG8ub3B0aW9ucy5lbGVtZW50KSB7XG4gICAgbGV0IHt4LCB5fSA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcobW92ZVRvLm9wdGlvbnMuZWxlbWVudCk7XG4gICAgZW5kWCArPSB4IHx8IDA7XG4gICAgZW5kWSArPSB5IHx8IDA7XG4gIH1cblxuICBsZXQgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAvLyBsb2xsaXBvcCB0YWtlcyBhIGxpdHRsZSBsb25nZXIgdG8gZ2V0IHRoaW5ncyByb2xsaW5nXG4gIGxldCBkdXJhdGlvbiA9IGFwaUxldmVsID49IDUgPyAyIDogMTtcbiAgLy8gbWFrZSBzdXJlIHRoYXQgaWYgdGhlIGxvbmcgcHJlc3MgaGFzIGEgZHVyYXRpb24sIHdlIHVzZSBpdC5cbiAgaWYgKGxvbmdQcmVzcy5vcHRpb25zICYmIGxvbmdQcmVzcy5vcHRpb25zLmR1cmF0aW9uKSB7XG4gICAgZHVyYXRpb24gPSBNYXRoLm1heChsb25nUHJlc3Mub3B0aW9ucy5kdXJhdGlvbiAvIDEwMDAsIGR1cmF0aW9uKTtcbiAgfVxuXG4gIC8vIGBkcmFnYCB3aWxsIHRha2UgY2FyZSBvZiB3aGV0aGVyIHRoZXJlIGlzIGFuIGVsZW1lbnQgb3Igbm90IGF0IHRoYXQgbGV2ZWxcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZHJhZyhzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIDEsIGxvbmdQcmVzcy5vcHRpb25zLmVsZW1lbnQsIG1vdmVUby5vcHRpb25zLmVsZW1lbnQpO1xufTtcblxuLy8gUmVsZWFzZSBnZXN0dXJlIG5lZWRzIGVsZW1lbnQgb3IgY28tb3JkaW5hdGVzIHRvIHJlbGVhc2UgaXQgZnJvbSB0aGF0IHBvc2l0aW9uXG4vLyBvciBlbHNlIHJlbGVhc2UgZ2VzdHVyZSBpcyBwZXJmb3JtZWQgZnJvbSBjZW50ZXIgb2YgdGhlIHNjcmVlbiwgc28gdG8gZml4IGl0XG4vLyBUaGlzIG1ldGhvZCBzZXRzIGNvLW9yZGluYXRlcy9lbGVtZW50IHRvIHJlbGVhc2UgZ2VzdHVyZSBpZiBpdCBoYXMgbm8gb3B0aW9ucyBzZXQgYWxyZWFkeS5cbmhlbHBlcnMuZml4UmVsZWFzZSA9IGFzeW5jIGZ1bmN0aW9uIGZpeFJlbGVhc2UgKGdlc3R1cmVzKSB7XG4gIGxldCByZWxlYXNlID0gXy5sYXN0KGdlc3R1cmVzKTtcbiAgLy8gc29tZXRpbWVzIHRoZXJlIGFyZSBubyBvcHRpb25zXG4gIHJlbGVhc2Uub3B0aW9ucyA9IHJlbGVhc2Uub3B0aW9ucyB8fCB7fTtcbiAgLy8gbm90aGluZyB0byBkbyBpZiByZWxlYXNlIG9wdGlvbnMgYXJlIGFscmVhZHkgc2V0XG4gIGlmIChyZWxlYXNlLm9wdGlvbnMuZWxlbWVudCB8fCAocmVsZWFzZS5vcHRpb25zLnggJiYgcmVsZWFzZS5vcHRpb25zLnkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIHdpdGhvdXQgY29vcmRpbmF0ZXMsIGByZWxlYXNlYCB1c2VzIHRoZSBjZW50ZXIgb2YgdGhlIHNjcmVlbiwgd2hpY2gsXG4gIC8vIGdlbmVyYWxseSBzcGVha2luZywgaXMgbm90IHdoYXQgd2Ugd2FudFxuICAvLyB0aGVyZWZvcmU6IGxvb3AgYmFja3dhcmRzIGFuZCB1c2UgdGhlIGxhc3QgY29tbWFuZCB3aXRoIGFuIGVsZW1lbnQgYW5kL29yXG4gIC8vIG9mZnNldCBjb29yZGluYXRlc1xuICBnZXN0dXJlcyA9IF8uY2xvbmUoZ2VzdHVyZXMpO1xuICBsZXQgcmVmID0gbnVsbDtcbiAgZm9yIChsZXQgZ2VzdHVyZSBvZiBnZXN0dXJlcy5yZXZlcnNlKCkpIHtcbiAgICBsZXQgb3B0cyA9IGdlc3R1cmUub3B0aW9ucztcbiAgICBpZiAob3B0cy5lbGVtZW50IHx8IChvcHRzLnggJiYgb3B0cy55KSkge1xuICAgICAgcmVmID0gZ2VzdHVyZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAocmVmKSB7XG4gICAgbGV0IG9wdHMgPSByZWYub3B0aW9ucztcbiAgICBpZiAob3B0cy5lbGVtZW50KSB7XG4gICAgICBsZXQgbG9jID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhvcHRzLmVsZW1lbnQpO1xuICAgICAgaWYgKG9wdHMueCAmJiBvcHRzLnkpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhbiBvZmZzZXQgZnJvbSB0aGUgZWxlbWVudFxuICAgICAgICByZWxlYXNlLm9wdGlvbnMgPSB7XG4gICAgICAgICAgeDogbG9jLnggKyBvcHRzLngsXG4gICAgICAgICAgeTogbG9jLnkgKyBvcHRzLnlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIGNlbnRlciBvZiB0aGUgZWxlbWVudFxuICAgICAgICBsZXQgc2l6ZSA9IGF3YWl0IHRoaXMuZ2V0U2l6ZShvcHRzLmVsZW1lbnQpO1xuICAgICAgICByZWxlYXNlLm9wdGlvbnMgPSB7XG4gICAgICAgICAgeDogbG9jLnggKyBzaXplLndpZHRoIC8gMixcbiAgICAgICAgICB5OiBsb2MueSArIHNpemUuaGVpZ2h0IC8gMlxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWxlYXNlLm9wdGlvbnMgPSBfLnBpY2sob3B0cywgJ3gnLCAneScpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVsZWFzZTtcbn07XG5cbi8vIFBlcmZvcm0gb25lIGdlc3R1cmVcbmhlbHBlcnMucGVyZm9ybUdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtR2VzdHVyZSAoZ2VzdHVyZSkge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmRvVG91Y2hBY3Rpb24oZ2VzdHVyZS5hY3Rpb24sIGdlc3R1cmUub3B0aW9ucyB8fCB7fSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBzb21ldGltZSB0aGUgZWxlbWVudCBpcyBub3QgYXZhaWxhYmxlIHdoZW4gcmVsZWFzaW5nLCByZXRyeSB3aXRob3V0IGl0XG4gICAgaWYgKGlzRXJyb3JUeXBlKGUsIGVycm9ycy5Ob1N1Y2hFbGVtZW50RXJyb3IpICYmIGdlc3R1cmUuYWN0aW9uID09PSAncmVsZWFzZScgJiZcbiAgICAgICAgZ2VzdHVyZS5vcHRpb25zLmVsZW1lbnQpIHtcbiAgICAgIGRlbGV0ZSBnZXN0dXJlLm9wdGlvbnMuZWxlbWVudDtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGByZXRyeWluZyByZWxlYXNlIHdpdGhvdXQgZWxlbWVudCBvcHRzOiAke2dlc3R1cmUub3B0aW9uc30uYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb1RvdWNoQWN0aW9uKGdlc3R1cmUuYWN0aW9uLCBnZXN0dXJlLm9wdGlvbnMgfHwge30pO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG5jb21tYW5kcy5nZXRTd2lwZU9wdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBnZXRTd2lwZU9wdGlvbnMgKGdlc3R1cmVzLCB0b3VjaENvdW50ID0gMSkge1xuICBsZXQgc3RhcnRYID0gZ2V0Q29vcmREZWZhdWx0KGdlc3R1cmVzWzBdLm9wdGlvbnMueCksXG4gICAgICBzdGFydFkgPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMF0ub3B0aW9ucy55KSxcbiAgICAgIGVuZFggPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMl0ub3B0aW9ucy54KSxcbiAgICAgIGVuZFkgPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMl0ub3B0aW9ucy55KSxcbiAgICAgIGR1cmF0aW9uID0gZ2V0U3dpcGVUb3VjaER1cmF0aW9uKGdlc3R1cmVzWzFdKSxcbiAgICAgIGVsZW1lbnQgPSBnZXN0dXJlc1swXS5vcHRpb25zLmVsZW1lbnQsXG4gICAgICBkZXN0RWxlbWVudCA9IGdlc3R1cmVzWzJdLm9wdGlvbnMuZWxlbWVudCB8fCBnZXN0dXJlc1swXS5vcHRpb25zLmVsZW1lbnQ7XG5cbiAgLy8gdGhlcmUncyBubyBkZXN0aW5hdGlvbiBlbGVtZW50IGhhbmRsaW5nIGluIGJvb3RzdHJhcCBhbmQgc2luY2UgaXQgYXBwbGllcyB0byBhbGwgcGxhdGZvcm1zLCB3ZSBoYW5kbGUgaXQgaGVyZVxuICBpZiAodXRpbC5oYXNWYWx1ZShkZXN0RWxlbWVudCkpIHtcbiAgICBsZXQgbG9jUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhkZXN0RWxlbWVudCk7XG4gICAgbGV0IHNpemVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNpemUoZGVzdEVsZW1lbnQpO1xuICAgIGxldCBvZmZzZXRYID0gKE1hdGguYWJzKGVuZFgpIDwgMSAmJiBNYXRoLmFicyhlbmRYKSA+IDApID8gc2l6ZVJlc3VsdC53aWR0aCAqIGVuZFggOiBlbmRYO1xuICAgIGxldCBvZmZzZXRZID0gKE1hdGguYWJzKGVuZFkpIDwgMSAmJiBNYXRoLmFicyhlbmRZKSA+IDApID8gc2l6ZVJlc3VsdC5oZWlnaHQgKiBlbmRZIDogZW5kWTtcbiAgICBlbmRYID0gbG9jUmVzdWx0LnggKyBvZmZzZXRYO1xuICAgIGVuZFkgPSBsb2NSZXN1bHQueSArIG9mZnNldFk7XG4gICAgLy8gaWYgdGhlIHRhcmdldCBlbGVtZW50IHdhcyBwcm92aWRlZCwgdGhlIGNvb3JkaW5hdGVzIGZvciB0aGUgZGVzdGluYXRpb24gbmVlZCB0byBiZSByZWxhdGl2ZSB0byBpdC5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZShlbGVtZW50KSkge1xuICAgICAgbGV0IGZpcnN0RWxMb2NhdGlvbiA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcoZWxlbWVudCk7XG4gICAgICBlbmRYIC09IGZpcnN0RWxMb2NhdGlvbi54O1xuICAgICAgZW5kWSAtPSBmaXJzdEVsTG9jYXRpb24ueTtcbiAgICB9XG4gIH1cbiAgLy8gY2xpZW50cyBhcmUgcmVzcG9uc2libGUgdG8gdXNlIHRoZXNlIG9wdGlvbnMgY29ycmVjdGx5XG4gIHJldHVybiB7c3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCB0b3VjaENvdW50LCBlbGVtZW50fTtcbn07XG5cbmNvbW1hbmRzLnBlcmZvcm1Ub3VjaCA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1Ub3VjaCAoZ2VzdHVyZXMpIHtcbiAgLy8gcHJlc3Mtd2FpdC1tb3ZlVG8tcmVsZWFzZSBpcyBgc3dpcGVgLCBzbyB1c2UgbmF0aXZlIG1ldGhvZFxuICBpZiAoZ2VzdHVyZXMubGVuZ3RoID09PSA0ICYmXG4gICAgICBnZXN0dXJlc1swXS5hY3Rpb24gPT09ICdwcmVzcycgJiZcbiAgICAgIGdlc3R1cmVzWzFdLmFjdGlvbiA9PT0gJ3dhaXQnICYmXG4gICAgICBnZXN0dXJlc1syXS5hY3Rpb24gPT09ICdtb3ZlVG8nICYmXG4gICAgICBnZXN0dXJlc1szXS5hY3Rpb24gPT09ICdyZWxlYXNlJykge1xuXG4gICAgbGV0IHN3aXBlT3B0cyA9IGF3YWl0IHRoaXMuZ2V0U3dpcGVPcHRpb25zKGdlc3R1cmVzKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zd2lwZShzd2lwZU9wdHMuc3RhcnRYLCBzd2lwZU9wdHMuc3RhcnRZLCBzd2lwZU9wdHMuZW5kWCxcbiAgICAgICAgc3dpcGVPcHRzLmVuZFksIHN3aXBlT3B0cy5kdXJhdGlvbiwgc3dpcGVPcHRzLnRvdWNoQ291bnQsXG4gICAgICAgIHN3aXBlT3B0cy5lbGVtZW50KTtcbiAgfVxuICBsZXQgYWN0aW9ucyA9IF8ubWFwKGdlc3R1cmVzLCAnYWN0aW9uJyk7XG5cbiAgaWYgKGFjdGlvbnNbMF0gPT09ICdsb25nUHJlc3MnICYmIGFjdGlvbnNbMV0gPT09ICdtb3ZlVG8nICYmIGFjdGlvbnNbMl0gPT09ICdyZWxlYXNlJykge1xuICAgIC8vIHNvbWUgdGhpbmdzIGFyZSBzcGVjaWFsXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZG9Ub3VjaERyYWcoZ2VzdHVyZXMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChhY3Rpb25zLmxlbmd0aCA9PT0gMikge1xuICAgICAgLy8gYHByZXNzYCB3aXRob3V0IGEgd2FpdCBpcyB0b28gc2xvdyBhbmQgZ2V0cyBpbnRlcnByZXR0ZWQgYXMgYSBgbG9uZ1ByZXNzYFxuICAgICAgaWYgKF8uaGVhZChhY3Rpb25zKSA9PT0gJ3ByZXNzJyAmJiBfLmxhc3QoYWN0aW9ucykgPT09ICdyZWxlYXNlJykge1xuICAgICAgICBhY3Rpb25zWzBdID0gJ3RhcCc7XG4gICAgICAgIGdlc3R1cmVzWzBdLmFjdGlvbiA9ICd0YXAnO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGUgYGxvbmdQcmVzc2AgYW5kIGB0YXBgIG1ldGhvZHMgcmVsZWFzZSBvbiB0aGVpciBvd25cbiAgICAgIGlmICgoXy5oZWFkKGFjdGlvbnMpID09PSAndGFwJyB8fCBfLmhlYWQoYWN0aW9ucykgPT09ICdsb25nUHJlc3MnKSAmJiBfLmxhc3QoYWN0aW9ucykgPT09ICdyZWxlYXNlJykge1xuICAgICAgICBnZXN0dXJlcy5wb3AoKTtcbiAgICAgICAgYWN0aW9ucy5wb3AoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbG9uZ3ByZXNzIGZvbGxvd2VkIGJ5IGFueXRoaW5nIG90aGVyIHRoYW4gcmVsZWFzZSBzaG91bGQgYmVjb21lIGEgcHJlc3MgYW5kIHdhaXRcbiAgICAgIGlmIChhY3Rpb25zWzBdID09PSAnbG9uZ1ByZXNzJykge1xuICAgICAgICBhY3Rpb25zID0gWydwcmVzcycsICd3YWl0JywgLi4uYWN0aW9ucy5zbGljZSgxKV07XG5cbiAgICAgICAgbGV0IHByZXNzID0gZ2VzdHVyZXMuc2hpZnQoKTtcbiAgICAgICAgcHJlc3MuYWN0aW9uID0gJ3ByZXNzJztcbiAgICAgICAgbGV0IHdhaXQgPSB7XG4gICAgICAgICAgYWN0aW9uOiAnd2FpdCcsXG4gICAgICAgICAgb3B0aW9uczoge21zOiBwcmVzcy5vcHRpb25zLmR1cmF0aW9uIHx8IDEwMDB9XG4gICAgICAgIH07XG4gICAgICAgIGRlbGV0ZSBwcmVzcy5vcHRpb25zLmR1cmF0aW9uO1xuICAgICAgICBnZXN0dXJlcyA9IFtwcmVzcywgd2FpdCwgLi4uZ2VzdHVyZXNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmaXhlZEdlc3R1cmVzID0gYXdhaXQgdGhpcy5wYXJzZVRvdWNoKGdlc3R1cmVzLCBmYWxzZSk7XG4gICAgLy8gZml4IHJlbGVhc2UgYWN0aW9uIHRoZW4gcGVyZm9ybSBhbGwgYWN0aW9uc1xuICAgIGlmIChhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0gPT09ICdyZWxlYXNlJykge1xuICAgICAgYWN0aW9uc1thY3Rpb25zLmxlbmd0aCAtIDFdID0gYXdhaXQgdGhpcy5maXhSZWxlYXNlKGdlc3R1cmVzKTtcbiAgICB9XG4gICAgZm9yIChsZXQgZyBvZiBmaXhlZEdlc3R1cmVzKSB7XG4gICAgICBhd2FpdCB0aGlzLnBlcmZvcm1HZXN0dXJlKGcpO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy5wYXJzZVRvdWNoID0gYXN5bmMgZnVuY3Rpb24gcGFyc2VUb3VjaCAoZ2VzdHVyZXMsIG11bHRpKSB7XG4gIC8vIGJlY2F1c2UgbXVsdGktdG91Y2ggcmVsZWFzZXMgYXQgdGhlIGVuZCBieSBkZWZhdWx0XG4gIGlmIChtdWx0aSAmJiBfLmxhc3QoZ2VzdHVyZXMpLmFjdGlvbiA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgZ2VzdHVyZXMucG9wKCk7XG4gIH1cblxuICBsZXQgdG91Y2hTdGF0ZU9iamVjdHMgPSBhd2FpdCBhc3luY21hcChnZXN0dXJlcywgYXN5bmMgKGdlc3R1cmUpID0+IHtcbiAgICBsZXQgb3B0aW9ucyA9IGdlc3R1cmUub3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoXy5pbmNsdWRlcyhbJ3ByZXNzJywgJ21vdmVUbycsICd0YXAnLCAnbG9uZ1ByZXNzJ10sIGdlc3R1cmUuYWN0aW9uKSkge1xuICAgICAgb3B0aW9ucy5vZmZzZXQgPSBmYWxzZTtcbiAgICAgIGxldCBlbGVtZW50SWQgPSBnZXN0dXJlLm9wdGlvbnMuZWxlbWVudDtcbiAgICAgIGlmIChlbGVtZW50SWQpIHtcbiAgICAgICAgbGV0IHBvcyA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcoZWxlbWVudElkKTtcbiAgICAgICAgaWYgKGdlc3R1cmUub3B0aW9ucy54IHx8IGdlc3R1cmUub3B0aW9ucy55KSB7XG4gICAgICAgICAgb3B0aW9ucy54ID0gcG9zLnggKyAoZ2VzdHVyZS5vcHRpb25zLnggfHwgMCk7XG4gICAgICAgICAgb3B0aW9ucy55ID0gcG9zLnkgKyAoZ2VzdHVyZS5vcHRpb25zLnkgfHwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRTaXplKGVsZW1lbnRJZCk7XG4gICAgICAgICAgb3B0aW9ucy54ID0gcG9zLnggKyAod2lkdGggLyAyKTtcbiAgICAgICAgICBvcHRpb25zLnkgPSBwb3MueSArIChoZWlnaHQgLyAyKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG91Y2hTdGF0ZU9iamVjdCA9IHtcbiAgICAgICAgICBhY3Rpb246IGdlc3R1cmUuYWN0aW9uLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgdGltZU9mZnNldDogMC4wMDUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy54ID0gKGdlc3R1cmUub3B0aW9ucy54IHx8IDApO1xuICAgICAgICBvcHRpb25zLnkgPSAoZ2VzdHVyZS5vcHRpb25zLnkgfHwgMCk7XG5cbiAgICAgICAgbGV0IHRvdWNoU3RhdGVPYmplY3QgPSB7XG4gICAgICAgICAgYWN0aW9uOiBnZXN0dXJlLmFjdGlvbixcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHRpbWVPZmZzZXQ6IDAuMDA1LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdG91Y2hTdGF0ZU9iamVjdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG9mZnNldCA9IDAuMDA1O1xuICAgICAgaWYgKGdlc3R1cmUuYWN0aW9uID09PSAnd2FpdCcpIHtcbiAgICAgICAgb3B0aW9ucyA9IGdlc3R1cmUub3B0aW9ucztcbiAgICAgICAgb2Zmc2V0ID0gKHBhcnNlSW50KGdlc3R1cmUub3B0aW9ucy5tcywgMTApIC8gMTAwMCk7XG4gICAgICB9XG4gICAgICBsZXQgdG91Y2hTdGF0ZU9iamVjdCA9IHtcbiAgICAgICAgYWN0aW9uOiBnZXN0dXJlLmFjdGlvbixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgdGltZU9mZnNldDogb2Zmc2V0LFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0O1xuICAgIH1cbiAgfSwgZmFsc2UpO1xuICAvLyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgdGltZSAod2hpY2ggaXMgbm93IGFuIG9mZnNldClcbiAgLy8gYW5kIHRoZSBwb3NpdGlvbiAod2hpY2ggbWF5IGJlIGFuIG9mZnNldClcbiAgbGV0IHByZXZQb3MgPSBudWxsLFxuICAgICAgdGltZSA9IDA7XG4gIGZvciAobGV0IHN0YXRlIG9mIHRvdWNoU3RhdGVPYmplY3RzKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy54KSAmJiBfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueSkgJiYgcHJldlBvcyAhPT0gbnVsbCkge1xuICAgICAgLy8gdGhpcyBoYXBwZW5zIHdpdGggd2FpdFxuICAgICAgc3RhdGUub3B0aW9ucy54ID0gcHJldlBvcy54O1xuICAgICAgc3RhdGUub3B0aW9ucy55ID0gcHJldlBvcy55O1xuICAgIH1cbiAgICBpZiAoc3RhdGUub3B0aW9ucy5vZmZzZXQgJiYgcHJldlBvcykge1xuICAgICAgLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYW4gb2Zmc2V0XG4gICAgICBzdGF0ZS5vcHRpb25zLnggKz0gcHJldlBvcy54O1xuICAgICAgc3RhdGUub3B0aW9ucy55ICs9IHByZXZQb3MueTtcbiAgICB9XG4gICAgZGVsZXRlIHN0YXRlLm9wdGlvbnMub2Zmc2V0O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLngpICYmICFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueSkpIHtcbiAgICAgIHByZXZQb3MgPSBzdGF0ZS5vcHRpb25zO1xuICAgIH1cblxuICAgIGlmIChtdWx0aSkge1xuICAgICAgbGV0IHRpbWVPZmZzZXQgPSBzdGF0ZS50aW1lT2Zmc2V0O1xuICAgICAgdGltZSArPSB0aW1lT2Zmc2V0O1xuICAgICAgc3RhdGUudGltZSA9IGFuZHJvaWRIZWxwZXJzLnRydW5jYXRlRGVjaW1hbHModGltZSwgMyk7XG5cbiAgICAgIC8vIG11bHRpIGdlc3R1cmVzIHJlcXVpcmUgJ3RvdWNoJyByYXRoZXIgdGhhbiAnb3B0aW9ucydcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLngpICYmICFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueSkpIHtcbiAgICAgICAgc3RhdGUudG91Y2ggPSB7XG4gICAgICAgICAgeDogc3RhdGUub3B0aW9ucy54LFxuICAgICAgICAgIHk6IHN0YXRlLm9wdGlvbnMueVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZGVsZXRlIHN0YXRlLm9wdGlvbnM7XG4gICAgfVxuICAgIGRlbGV0ZSBzdGF0ZS50aW1lT2Zmc2V0O1xuICB9XG4gIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0cztcbn07XG5cblxuY29tbWFuZHMucGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybU11bHRpQWN0aW9uIChhY3Rpb25zLCBlbGVtZW50SWQpIHtcbiAgLy8gQW5kcm9pZCBuZWVkcyBhdCBsZWFzdCB0d28gYWN0aW9ucyB0byBiZSBhYmxlIHRvIHBlcmZvcm0gYSBtdWx0aSBwb2ludGVyIGdlc3R1cmVcbiAgaWYgKGFjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdWx0aSBQb2ludGVyIEdlc3R1cmVzIG5lZWQgYXQgbGVhc3QgdHdvIGFjdGlvbnMuICcgK1xuICAgICAgICAnVXNlIFRvdWNoIEFjdGlvbnMgZm9yIGEgc2luZ2xlIGFjdGlvbi4nKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlcyA9IGF3YWl0IGFzeW5jbWFwKGFjdGlvbnMsIGFzeW5jIChhY3Rpb24pID0+IGF3YWl0IHRoaXMucGFyc2VUb3VjaChhY3Rpb24sIHRydWUpLCBmYWxzZSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZG9QZXJmb3JtTXVsdGlBY3Rpb24oZWxlbWVudElkLCBzdGF0ZXMpO1xufTtcblxuLyoqXG4gKiBSZWFzb24gZm9yIGlzb2xhdGluZyBkb1BlcmZvcm1NdWx0aUFjdGlvbiBmcm9tIHBlcmZvcm1NdWx0aUFjdGlvbiBpcyBmb3IgcmV1c2luZyBwZXJmb3JtTXVsdGlBY3Rpb25cbiAqIGFjcm9zcyBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIGFuZCB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLlxuICogT3RoZXIgYW5kcm9pZC1kcml2ZXJzIChsaWtlIGFwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyKSBuZWVkIHRvIG92ZXJyaWRlIGRvUGVyZm9ybU11bHRpQWN0aW9uXG4gKiB0byBmYWNpbGl0YXRlIHBlcmZvcm1NdWx0aUFjdGlvbi5cbiAqL1xuY29tbWFuZHMuZG9QZXJmb3JtTXVsdGlBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBkb1BlcmZvcm1NdWx0aUFjdGlvbiAoZWxlbWVudElkLCBzdGF0ZXMpIHtcbiAgbGV0IG9wdHM7XG4gIGlmIChlbGVtZW50SWQpIHtcbiAgICBvcHRzID0ge1xuICAgICAgZWxlbWVudElkLFxuICAgICAgYWN0aW9uczogc3RhdGVzXG4gICAgfTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpwZXJmb3JtTXVsdGlQb2ludGVyR2VzdHVyZScsIG9wdHMpO1xuICB9IGVsc2Uge1xuICAgIG9wdHMgPSB7XG4gICAgICBhY3Rpb25zOiBzdGF0ZXNcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdwZXJmb3JtTXVsdGlQb2ludGVyR2VzdHVyZScsIG9wdHMpO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFBOUM7Ozs7QUFFQSxTQUFTQyxlQUFULENBQTBCQyxHQUExQixFQUErQjtFQUk3QixPQUFPQyxhQUFBLENBQUtDLFFBQUwsQ0FBY0YsR0FBZCxJQUFxQkEsR0FBckIsR0FBMkIsR0FBbEM7QUFDRDs7QUFFRCxTQUFTRyxxQkFBVCxDQUFnQ0MsV0FBaEMsRUFBNkM7RUFHM0MsSUFBSUMsUUFBUSxHQUFHLEdBQWY7O0VBQ0EsSUFBSSxPQUFPRCxXQUFXLENBQUNFLE9BQVosQ0FBb0JDLEVBQTNCLEtBQWtDLFdBQWxDLElBQWlESCxXQUFXLENBQUNFLE9BQVosQ0FBb0JDLEVBQXpFLEVBQTZFO0lBQzNFRixRQUFRLEdBQUdELFdBQVcsQ0FBQ0UsT0FBWixDQUFv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
398
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL3RvdWNoLmpzIiwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImdldENvb3JkRGVmYXVsdCIsInZhbCIsInV0aWwiLCJoYXNWYWx1ZSIsImdldFN3aXBlVG91Y2hEdXJhdGlvbiIsIndhaXRHZXN0dXJlIiwiZHVyYXRpb24iLCJvcHRpb25zIiwibXMiLCJkb1RvdWNoQWN0aW9uIiwiYWN0aW9uIiwib3B0cyIsImVsZW1lbnQiLCJ4IiwieSIsImNvdW50IiwidGFwIiwidG91Y2hEb3duIiwidG91Y2hVcCIsInRvdWNoTW92ZSIsIkIiLCJkZWxheSIsInRvdWNoTG9uZ0NsaWNrIiwibG9nIiwid2FybiIsImVycm9yQW5kVGhyb3ciLCJkb1RvdWNoRHJhZyIsImdlc3R1cmVzIiwibG9uZ1ByZXNzIiwibW92ZVRvIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJnZXRMb2NhdGlvbkluVmlldyIsImFwaUxldmVsIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJNYXRoIiwibWF4IiwiZHJhZyIsImZpeFJlbGVhc2UiLCJyZWxlYXNlIiwiXyIsImxhc3QiLCJjbG9uZSIsInJlZiIsImdlc3R1cmUiLCJyZXZlcnNlIiwibG9jIiwic2l6ZSIsImdldFNpemUiLCJ3aWR0aCIsImhlaWdodCIsInBpY2siLCJwZXJmb3JtR2VzdHVyZSIsImUiLCJpc0Vycm9yVHlwZSIsImVycm9ycyIsIk5vU3VjaEVsZW1lbnRFcnJvciIsImRlYnVnIiwiZ2V0U3dpcGVPcHRpb25zIiwidG91Y2hDb3VudCIsImRlc3RFbGVtZW50IiwibG9jUmVzdWx0Iiwic2l6ZVJlc3VsdCIsIm9mZnNldFgiLCJhYnMiLCJvZmZzZXRZIiwiZmlyc3RFbExvY2F0aW9uIiwicGVyZm9ybVRvdWNoIiwibGVuZ3RoIiwic3dpcGVPcHRzIiwic3dpcGUiLCJhY3Rpb25zIiwibWFwIiwiaGVhZCIsInBvcCIsInNsaWNlIiwicHJlc3MiLCJzaGlmdCIsIndhaXQiLCJmaXhlZEdlc3R1cmVzIiwicGFyc2VUb3VjaCIsImciLCJtdWx0aSIsInRvdWNoU3RhdGVPYmplY3RzIiwiYXN5bmNtYXAiLCJpbmNsdWRlcyIsIm9mZnNldCIsImVsZW1lbnRJZCIsInBvcyIsInRvdWNoU3RhdGVPYmplY3QiLCJ0aW1lT2Zmc2V0IiwicGFyc2VJbnQiLCJwcmV2UG9zIiwidGltZSIsInN0YXRlIiwiaXNVbmRlZmluZWQiLCJhbmRyb2lkSGVscGVycyIsInRydW5jYXRlRGVjaW1hbHMiLCJ0b3VjaCIsInBlcmZvcm1NdWx0aUFjdGlvbiIsIkVycm9yIiwic3RhdGVzIiwiZG9QZXJmb3JtTXVsdGlBY3Rpb24iLCJib290c3RyYXAiLCJzZW5kQWN0aW9uIiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL2NvbW1hbmRzL3RvdWNoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgYW5kcm9pZEhlbHBlcnMgZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9ycywgaXNFcnJvclR5cGUgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IGFzeW5jbWFwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDb29yZERlZmF1bHQgKHZhbCkge1xuICAvLyBnb2luZyB0aGUgbG9uZyB3YXkgYW5kIGNoZWNraW5nIGZvciB1bmRlZmluZWQgYW5kIG51bGwgc2luY2VcbiAgLy8gd2UgY2FuJ3QgYmUgYXNzdXJlZCBgZWxJZGAgaXMgYSBzdHJpbmcgYW5kIG5vdCBhbiBpbnQuIFNhbWVcbiAgLy8gdGhpbmcgd2l0aCBkZXN0RWxlbWVudCBiZWxvdy5cbiAgcmV0dXJuIHV0aWwuaGFzVmFsdWUodmFsKSA/IHZhbCA6IDAuNTtcbn1cblxuZnVuY3Rpb24gZ2V0U3dpcGVUb3VjaER1cmF0aW9uICh3YWl0R2VzdHVyZSkge1xuICAvLyB0aGUgdG91Y2ggYWN0aW9uIGFwaSB1c2VzIG1zLCB3ZSB3YW50IHNlY29uZHNcbiAgLy8gMC44IGlzIHRoZSBkZWZhdWx0IHRpbWUgZm9yIHRoZSBvcGVyYXRpb25cbiAgbGV0IGR1cmF0aW9uID0gMC44O1xuICBpZiAodHlwZW9mIHdhaXRHZXN0dXJlLm9wdGlvbnMubXMgIT09ICd1bmRlZmluZWQnICYmIHdhaXRHZXN0dXJlLm9wdGlvbnMubXMpIHtcbiAgICBkdXJhdGlvbiA9IHdhaXRHZXN0dXJlLm9wdGlvbnMubXMgLyAxMDAwO1xuICAgIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgLy8gc2V0IHRvIGEgdmVyeSBsb3cgbnVtYmVyLCBzaW5jZSB0aGV5IHdhbnRlZCBpdCBmYXN0XG4gICAgICAvLyBidXQgYmVsb3cgMC4xIGJlY29tZXMgMCBzdGVwcywgd2hpY2ggY2F1c2VzIGVycm9yc1xuICAgICAgZHVyYXRpb24gPSAwLjE7XG4gICAgfVxuICB9XG4gIHJldHVybiBkdXJhdGlvbjtcbn1cblxuY29tbWFuZHMuZG9Ub3VjaEFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGRvVG91Y2hBY3Rpb24gKGFjdGlvbiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgZWxlbWVudCwgeCwgeSwgY291bnQsIG1zLCBkdXJhdGlvbiB9ID0gb3B0cztcbiAgLy8gcGFyc2VUb3VjaCBwcmVjYWxjdWxhdGVzIGFic29sdXRlIGVsZW1lbnQgcG9zaXRpb25zXG4gIC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcGFzcyBgZWxlbWVudGAgdG8gdGhlIGFmZmVjdGVkIGdlc3R1cmVzXG4gIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgY2FzZSAndGFwJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRhcChudWxsLCB4LCB5LCBjb3VudCk7XG4gICAgY2FzZSAncHJlc3MnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hEb3duKG51bGwsIHgsIHkpO1xuICAgIGNhc2UgJ3JlbGVhc2UnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hVcChlbGVtZW50LCB4LCB5KTtcbiAgICBjYXNlICdtb3ZlVG8nOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hNb3ZlKG51bGwsIHgsIHkpO1xuICAgIGNhc2UgJ3dhaXQnOlxuICAgICAgcmV0dXJuIGF3YWl0IEIuZGVsYXkobXMpO1xuICAgIGNhc2UgJ2xvbmdQcmVzcyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50b3VjaExvbmdDbGljayhudWxsLCB4LCB5LCBkdXJhdGlvbiB8fCAxMDAwKTtcbiAgICBjYXNlICdjYW5jZWwnOlxuICAgICAgLy8gVE9ETzogY2xhcmlmeSBiZWhhdmlvciBvZiAnY2FuY2VsJyBhY3Rpb24gYW5kIGZpeCB0aGlzXG4gICAgICB0aGlzLmxvZy53YXJuKCdDYW5jZWwgYWN0aW9uIGN1cnJlbnRseSBoYXMgbm8gZWZmZWN0Jyk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgdW5rbm93biBhY3Rpb24gJHthY3Rpb259YCk7XG4gIH1cbn07XG5cbi8vIGRyYWcgaXMgKm5vdCogcHJlc3MtbW92ZS1yZWxlYXNlLCBzbyB3ZSBuZWVkIHRvIHRyYW5zbGF0ZVxuLy8gZHJhZyB3b3JrcyBmaW5lIGZvciBzY3JvbGwsIGFzIHdlbGxcbmhlbHBlcnMuZG9Ub3VjaERyYWcgPSBhc3luYyBmdW5jdGlvbiBkb1RvdWNoRHJhZyAoZ2VzdHVyZXMpIHtcbiAgbGV0IGxvbmdQcmVzcyA9IGdlc3R1cmVzWzBdO1xuICBsZXQgbW92ZVRvID0gZ2VzdHVyZXNbMV07XG4gIGxldCBzdGFydFggPSBsb25nUHJlc3Mub3B0aW9ucy54IHx8IDAsXG4gICAgICBzdGFydFkgPSBsb25nUHJlc3Mub3B0aW9ucy55IHx8IDAsXG4gICAgICBlbmRYID0gbW92ZVRvLm9wdGlvbnMueCB8fCAwLFxuICAgICAgZW5kWSA9IG1vdmVUby5vcHRpb25zLnkgfHwgMDtcbiAgaWYgKGxvbmdQcmVzcy5vcHRpb25zLmVsZW1lbnQpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhsb25nUHJlc3Mub3B0aW9ucy5lbGVtZW50KTtcbiAgICBzdGFydFggKz0geCB8fCAwO1xuICAgIHN0YXJ0WSArPSB5IHx8IDA7XG4gIH1cbiAgaWYgKG1vdmVUby5vcHRpb25zLmVsZW1lbnQpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhtb3ZlVG8ub3B0aW9ucy5lbGVtZW50KTtcbiAgICBlbmRYICs9IHggfHwgMDtcbiAgICBlbmRZICs9IHkgfHwgMDtcbiAgfVxuXG4gIGxldCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gIC8vIGxvbGxpcG9wIHRha2VzIGEgbGl0dGxlIGxvbmdlciB0byBnZXQgdGhpbmdzIHJvbGxpbmdcbiAgbGV0IGR1cmF0aW9uID0gYXBpTGV2ZWwgPj0gNSA/IDIgOiAxO1xuICAvLyBtYWtlIHN1cmUgdGhhdCBpZiB0aGUgbG9uZyBwcmVzcyBoYXMgYSBkdXJhdGlvbiwgd2UgdXNlIGl0LlxuICBpZiAobG9uZ1ByZXNzLm9wdGlvbnMgJiYgbG9uZ1ByZXNzLm9wdGlvbnMuZHVyYXRpb24pIHtcbiAgICBkdXJhdGlvbiA9IE1hdGgubWF4KGxvbmdQcmVzcy5vcHRpb25zLmR1cmF0aW9uIC8gMTAwMCwgZHVyYXRpb24pO1xuICB9XG5cbiAgLy8gYGRyYWdgIHdpbGwgdGFrZSBjYXJlIG9mIHdoZXRoZXIgdGhlcmUgaXMgYW4gZWxlbWVudCBvciBub3QgYXQgdGhhdCBsZXZlbFxuICByZXR1cm4gYXdhaXQgdGhpcy5kcmFnKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgMSwgbG9uZ1ByZXNzLm9wdGlvbnMuZWxlbWVudCwgbW92ZVRvLm9wdGlvbnMuZWxlbWVudCk7XG59O1xuXG4vLyBSZWxlYXNlIGdlc3R1cmUgbmVlZHMgZWxlbWVudCBvciBjby1vcmRpbmF0ZXMgdG8gcmVsZWFzZSBpdCBmcm9tIHRoYXQgcG9zaXRpb25cbi8vIG9yIGVsc2UgcmVsZWFzZSBnZXN0dXJlIGlzIHBlcmZvcm1lZCBmcm9tIGNlbnRlciBvZiB0aGUgc2NyZWVuLCBzbyB0byBmaXggaXRcbi8vIFRoaXMgbWV0aG9kIHNldHMgY28tb3JkaW5hdGVzL2VsZW1lbnQgdG8gcmVsZWFzZSBnZXN0dXJlIGlmIGl0IGhhcyBubyBvcHRpb25zIHNldCBhbHJlYWR5LlxuaGVscGVycy5maXhSZWxlYXNlID0gYXN5bmMgZnVuY3Rpb24gZml4UmVsZWFzZSAoZ2VzdHVyZXMpIHtcbiAgbGV0IHJlbGVhc2UgPSBfLmxhc3QoZ2VzdHVyZXMpO1xuICAvLyBzb21ldGltZXMgdGhlcmUgYXJlIG5vIG9wdGlvbnNcbiAgcmVsZWFzZS5vcHRpb25zID0gcmVsZWFzZS5vcHRpb25zIHx8IHt9O1xuICAvLyBub3RoaW5nIHRvIGRvIGlmIHJlbGVhc2Ugb3B0aW9ucyBhcmUgYWxyZWFkeSBzZXRcbiAgaWYgKHJlbGVhc2Uub3B0aW9ucy5lbGVtZW50IHx8IChyZWxlYXNlLm9wdGlvbnMueCAmJiByZWxlYXNlLm9wdGlvbnMueSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gd2l0aG91dCBjb29yZGluYXRlcywgYHJlbGVhc2VgIHVzZXMgdGhlIGNlbnRlciBvZiB0aGUgc2NyZWVuLCB3aGljaCxcbiAgLy8gZ2VuZXJhbGx5IHNwZWFraW5nLCBpcyBub3Qgd2hhdCB3ZSB3YW50XG4gIC8vIHRoZXJlZm9yZTogbG9vcCBiYWNrd2FyZHMgYW5kIHVzZSB0aGUgbGFzdCBjb21tYW5kIHdpdGggYW4gZWxlbWVudCBhbmQvb3JcbiAgLy8gb2Zmc2V0IGNvb3JkaW5hdGVzXG4gIGdlc3R1cmVzID0gXy5jbG9uZShnZXN0dXJlcyk7XG4gIGxldCByZWYgPSBudWxsO1xuICBmb3IgKGxldCBnZXN0dXJlIG9mIGdlc3R1cmVzLnJldmVyc2UoKSkge1xuICAgIGxldCBvcHRzID0gZ2VzdHVyZS5vcHRpb25zO1xuICAgIGlmIChvcHRzLmVsZW1lbnQgfHwgKG9wdHMueCAmJiBvcHRzLnkpKSB7XG4gICAgICByZWYgPSBnZXN0dXJlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChyZWYpIHtcbiAgICBsZXQgb3B0cyA9IHJlZi5vcHRpb25zO1xuICAgIGlmIChvcHRzLmVsZW1lbnQpIHtcbiAgICAgIGxldCBsb2MgPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KG9wdHMuZWxlbWVudCk7XG4gICAgICBpZiAob3B0cy54ICYmIG9wdHMueSkge1xuICAgICAgICAvLyB0aGlzIGlzIGFuIG9mZnNldCBmcm9tIHRoZSBlbGVtZW50XG4gICAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IHtcbiAgICAgICAgICB4OiBsb2MueCArIG9wdHMueCxcbiAgICAgICAgICB5OiBsb2MueSArIG9wdHMueVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgY2VudGVyIG9mIHRoZSBlbGVtZW50XG4gICAgICAgIGxldCBzaXplID0gYXdhaXQgdGhpcy5nZXRTaXplKG9wdHMuZWxlbWVudCk7XG4gICAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IHtcbiAgICAgICAgICB4OiBsb2MueCArIHNpemUud2lkdGggLyAyLFxuICAgICAgICAgIHk6IGxvYy55ICsgc2l6ZS5oZWlnaHQgLyAyXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IF8ucGljayhvcHRzLCAneCcsICd5Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWxlYXNlO1xufTtcblxuLy8gUGVyZm9ybSBvbmUgZ2VzdHVyZVxuaGVscGVycy5wZXJmb3JtR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1HZXN0dXJlIChnZXN0dXJlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZG9Ub3VjaEFjdGlvbihnZXN0dXJlLmFjdGlvbiwgZ2VzdHVyZS5vcHRpb25zIHx8IHt9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIHNvbWV0aW1lIHRoZSBlbGVtZW50IGlzIG5vdCBhdmFpbGFibGUgd2hlbiByZWxlYXNpbmcsIHJldHJ5IHdpdGhvdXQgaXRcbiAgICBpZiAoaXNFcnJvclR5cGUoZSwgZXJyb3JzLk5vU3VjaEVsZW1lbnRFcnJvcikgJiYgZ2VzdHVyZS5hY3Rpb24gPT09ICdyZWxlYXNlJyAmJlxuICAgICAgICBnZXN0dXJlLm9wdGlvbnMuZWxlbWVudCkge1xuICAgICAgZGVsZXRlIGdlc3R1cmUub3B0aW9ucy5lbGVtZW50O1xuICAgICAgdGhpcy5sb2cuZGVidWcoYHJldHJ5aW5nIHJlbGVhc2Ugd2l0aG91dCBlbGVtZW50IG9wdHM6ICR7Z2VzdHVyZS5vcHRpb25zfS5gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvVG91Y2hBY3Rpb24oZ2VzdHVyZS5hY3Rpb24sIGdlc3R1cmUub3B0aW9ucyB8fCB7fSk7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFN3aXBlT3B0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIGdldFN3aXBlT3B0aW9ucyAoZ2VzdHVyZXMsIHRvdWNoQ291bnQgPSAxKSB7XG4gIGxldCBzdGFydFggPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMF0ub3B0aW9ucy54KSxcbiAgICAgIHN0YXJ0WSA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1swXS5vcHRpb25zLnkpLFxuICAgICAgZW5kWCA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1syXS5vcHRpb25zLngpLFxuICAgICAgZW5kWSA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1syXS5vcHRpb25zLnkpLFxuICAgICAgZHVyYXRpb24gPSBnZXRTd2lwZVRvdWNoRHVyYXRpb24oZ2VzdHVyZXNbMV0pLFxuICAgICAgZWxlbWVudCA9IGdlc3R1cmVzWzBdLm9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGRlc3RFbGVtZW50ID0gZ2VzdHVyZXNbMl0ub3B0aW9ucy5lbGVtZW50IHx8IGdlc3R1cmVzWzBdLm9wdGlvbnMuZWxlbWVudDtcblxuICAvLyB0aGVyZSdzIG5vIGRlc3RpbmF0aW9uIGVsZW1lbnQgaGFuZGxpbmcgaW4gYm9vdHN0cmFwIGFuZCBzaW5jZSBpdCBhcHBsaWVzIHRvIGFsbCBwbGF0Zm9ybXMsIHdlIGhhbmRsZSBpdCBoZXJlXG4gIGlmICh1dGlsLmhhc1ZhbHVlKGRlc3RFbGVtZW50KSkge1xuICAgIGxldCBsb2NSZXN1bHQgPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KGRlc3RFbGVtZW50KTtcbiAgICBsZXQgc2l6ZVJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0U2l6ZShkZXN0RWxlbWVudCk7XG4gICAgbGV0IG9mZnNldFggPSAoTWF0aC5hYnMoZW5kWCkgPCAxICYmIE1hdGguYWJzKGVuZFgpID4gMCkgPyBzaXplUmVzdWx0LndpZHRoICogZW5kWCA6IGVuZFg7XG4gICAgbGV0IG9mZnNldFkgPSAoTWF0aC5hYnMoZW5kWSkgPCAxICYmIE1hdGguYWJzKGVuZFkpID4gMCkgPyBzaXplUmVzdWx0LmhlaWdodCAqIGVuZFkgOiBlbmRZO1xuICAgIGVuZFggPSBsb2NSZXN1bHQueCArIG9mZnNldFg7XG4gICAgZW5kWSA9IGxvY1Jlc3VsdC55ICsgb2Zmc2V0WTtcbiAgICAvLyBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgd2FzIHByb3ZpZGVkLCB0aGUgY29vcmRpbmF0ZXMgZm9yIHRoZSBkZXN0aW5hdGlvbiBuZWVkIHRvIGJlIHJlbGF0aXZlIHRvIGl0LlxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKGVsZW1lbnQpKSB7XG4gICAgICBsZXQgZmlyc3RFbExvY2F0aW9uID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhlbGVtZW50KTtcbiAgICAgIGVuZFggLT0gZmlyc3RFbExvY2F0aW9uLng7XG4gICAgICBlbmRZIC09IGZpcnN0RWxMb2NhdGlvbi55O1xuICAgIH1cbiAgfVxuICAvLyBjbGllbnRzIGFyZSByZXNwb25zaWJsZSB0byB1c2UgdGhlc2Ugb3B0aW9ucyBjb3JyZWN0bHlcbiAgcmV0dXJuIHtzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHRvdWNoQ291bnQsIGVsZW1lbnR9O1xufTtcblxuY29tbWFuZHMucGVyZm9ybVRvdWNoID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVRvdWNoIChnZXN0dXJlcykge1xuICAvLyBwcmVzcy13YWl0LW1vdmVUby1yZWxlYXNlIGlzIGBzd2lwZWAsIHNvIHVzZSBuYXRpdmUgbWV0aG9kXG4gIGlmIChnZXN0dXJlcy5sZW5ndGggPT09IDQgJiZcbiAgICAgIGdlc3R1cmVzWzBdLmFjdGlvbiA9PT0gJ3ByZXNzJyAmJlxuICAgICAgZ2VzdHVyZXNbMV0uYWN0aW9uID09PSAnd2FpdCcgJiZcbiAgICAgIGdlc3R1cmVzWzJdLmFjdGlvbiA9PT0gJ21vdmVUbycgJiZcbiAgICAgIGdlc3R1cmVzWzNdLmFjdGlvbiA9PT0gJ3JlbGVhc2UnKSB7XG5cbiAgICBsZXQgc3dpcGVPcHRzID0gYXdhaXQgdGhpcy5nZXRTd2lwZU9wdGlvbnMoZ2VzdHVyZXMpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnN3aXBlKHN3aXBlT3B0cy5zdGFydFgsIHN3aXBlT3B0cy5zdGFydFksIHN3aXBlT3B0cy5lbmRYLFxuICAgICAgICBzd2lwZU9wdHMuZW5kWSwgc3dpcGVPcHRzLmR1cmF0aW9uLCBzd2lwZU9wdHMudG91Y2hDb3VudCxcbiAgICAgICAgc3dpcGVPcHRzLmVsZW1lbnQpO1xuICB9XG4gIGxldCBhY3Rpb25zID0gXy5tYXAoZ2VzdHVyZXMsICdhY3Rpb24nKTtcblxuICBpZiAoYWN0aW9uc1swXSA9PT0gJ2xvbmdQcmVzcycgJiYgYWN0aW9uc1sxXSA9PT0gJ21vdmVUbycgJiYgYWN0aW9uc1syXSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgLy8gc29tZSB0aGluZ3MgYXJlIHNwZWNpYWxcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5kb1RvdWNoRHJhZyhnZXN0dXJlcyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFjdGlvbnMubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBgcHJlc3NgIHdpdGhvdXQgYSB3YWl0IGlzIHRvbyBzbG93IGFuZCBnZXRzIGludGVycHJldHRlZCBhcyBhIGBsb25nUHJlc3NgXG4gICAgICBpZiAoXy5oZWFkKGFjdGlvbnMpID09PSAncHJlc3MnICYmIF8ubGFzdChhY3Rpb25zKSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICAgIGFjdGlvbnNbMF0gPSAndGFwJztcbiAgICAgICAgZ2VzdHVyZXNbMF0uYWN0aW9uID0gJ3RhcCc7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoZSBgbG9uZ1ByZXNzYCBhbmQgYHRhcGAgbWV0aG9kcyByZWxlYXNlIG9uIHRoZWlyIG93blxuICAgICAgaWYgKChfLmhlYWQoYWN0aW9ucykgPT09ICd0YXAnIHx8IF8uaGVhZChhY3Rpb25zKSA9PT0gJ2xvbmdQcmVzcycpICYmIF8ubGFzdChhY3Rpb25zKSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICAgIGdlc3R1cmVzLnBvcCgpO1xuICAgICAgICBhY3Rpb25zLnBvcCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBsb25ncHJlc3MgZm9sbG93ZWQgYnkgYW55dGhpbmcgb3RoZXIgdGhhbiByZWxlYXNlIHNob3VsZCBiZWNvbWUgYSBwcmVzcyBhbmQgd2FpdFxuICAgICAgaWYgKGFjdGlvbnNbMF0gPT09ICdsb25nUHJlc3MnKSB7XG4gICAgICAgIGFjdGlvbnMgPSBbJ3ByZXNzJywgJ3dhaXQnLCAuLi5hY3Rpb25zLnNsaWNlKDEpXTtcblxuICAgICAgICBsZXQgcHJlc3MgPSBnZXN0dXJlcy5zaGlmdCgpO1xuICAgICAgICBwcmVzcy5hY3Rpb24gPSAncHJlc3MnO1xuICAgICAgICBsZXQgd2FpdCA9IHtcbiAgICAgICAgICBhY3Rpb246ICd3YWl0JyxcbiAgICAgICAgICBvcHRpb25zOiB7bXM6IHByZXNzLm9wdGlvbnMuZHVyYXRpb24gfHwgMTAwMH1cbiAgICAgICAgfTtcbiAgICAgICAgZGVsZXRlIHByZXNzLm9wdGlvbnMuZHVyYXRpb247XG4gICAgICAgIGdlc3R1cmVzID0gW3ByZXNzLCB3YWl0LCAuLi5nZXN0dXJlc107XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZpeGVkR2VzdHVyZXMgPSBhd2FpdCB0aGlzLnBhcnNlVG91Y2goZ2VzdHVyZXMsIGZhbHNlKTtcbiAgICAvLyBmaXggcmVsZWFzZSBhY3Rpb24gdGhlbiBwZXJmb3JtIGFsbCBhY3Rpb25zXG4gICAgaWYgKGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0gPSBhd2FpdCB0aGlzLmZpeFJlbGVhc2UoZ2VzdHVyZXMpO1xuICAgIH1cbiAgICBmb3IgKGxldCBnIG9mIGZpeGVkR2VzdHVyZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMucGVyZm9ybUdlc3R1cmUoZyk7XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLnBhcnNlVG91Y2ggPSBhc3luYyBmdW5jdGlvbiBwYXJzZVRvdWNoIChnZXN0dXJlcywgbXVsdGkpIHtcbiAgLy8gYmVjYXVzZSBtdWx0aS10b3VjaCByZWxlYXNlcyBhdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgaWYgKG11bHRpICYmIF8ubGFzdChnZXN0dXJlcykuYWN0aW9uID09PSAncmVsZWFzZScpIHtcbiAgICBnZXN0dXJlcy5wb3AoKTtcbiAgfVxuXG4gIGxldCB0b3VjaFN0YXRlT2JqZWN0cyA9IGF3YWl0IGFzeW5jbWFwKGdlc3R1cmVzLCBhc3luYyAoZ2VzdHVyZSkgPT4ge1xuICAgIGxldCBvcHRpb25zID0gZ2VzdHVyZS5vcHRpb25zIHx8IHt9O1xuICAgIGlmIChfLmluY2x1ZGVzKFsncHJlc3MnLCAnbW92ZVRvJywgJ3RhcCcsICdsb25nUHJlc3MnXSwgZ2VzdHVyZS5hY3Rpb24pKSB7XG4gICAgICBvcHRpb25zLm9mZnNldCA9IGZhbHNlO1xuICAgICAgbGV0IGVsZW1lbnRJZCA9IGdlc3R1cmUub3B0aW9ucy5lbGVtZW50O1xuICAgICAgaWYgKGVsZW1lbnRJZCkge1xuICAgICAgICBsZXQgcG9zID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhlbGVtZW50SWQpO1xuICAgICAgICBpZiAoZ2VzdHVyZS5vcHRpb25zLnggfHwgZ2VzdHVyZS5vcHRpb25zLnkpIHtcbiAgICAgICAgICBvcHRpb25zLnggPSBwb3MueCArIChnZXN0dXJlLm9wdGlvbnMueCB8fCAwKTtcbiAgICAgICAgICBvcHRpb25zLnkgPSBwb3MueSArIChnZXN0dXJlLm9wdGlvbnMueSB8fCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmdldFNpemUoZWxlbWVudElkKTtcbiAgICAgICAgICBvcHRpb25zLnggPSBwb3MueCArICh3aWR0aCAvIDIpO1xuICAgICAgICAgIG9wdGlvbnMueSA9IHBvcy55ICsgKGhlaWdodCAvIDIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0b3VjaFN0YXRlT2JqZWN0ID0ge1xuICAgICAgICAgIGFjdGlvbjogZ2VzdHVyZS5hY3Rpb24sXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICB0aW1lT2Zmc2V0OiAwLjAwNSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnggPSAoZ2VzdHVyZS5vcHRpb25zLnggfHwgMCk7XG4gICAgICAgIG9wdGlvbnMueSA9IChnZXN0dXJlLm9wdGlvbnMueSB8fCAwKTtcblxuICAgICAgICBsZXQgdG91Y2hTdGF0ZU9iamVjdCA9IHtcbiAgICAgICAgICBhY3Rpb246IGdlc3R1cmUuYWN0aW9uLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgdGltZU9mZnNldDogMC4wMDUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgb2Zmc2V0ID0gMC4wMDU7XG4gICAgICBpZiAoZ2VzdHVyZS5hY3Rpb24gPT09ICd3YWl0Jykge1xuICAgICAgICBvcHRpb25zID0gZ2VzdHVyZS5vcHRpb25zO1xuICAgICAgICBvZmZzZXQgPSAocGFyc2VJbnQoZ2VzdHVyZS5vcHRpb25zLm1zLCAxMCkgLyAxMDAwKTtcbiAgICAgIH1cbiAgICAgIGxldCB0b3VjaFN0YXRlT2JqZWN0ID0ge1xuICAgICAgICBhY3Rpb246IGdlc3R1cmUuYWN0aW9uLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB0aW1lT2Zmc2V0OiBvZmZzZXQsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3Q7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIC8vIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSB0aW1lICh3aGljaCBpcyBub3cgYW4gb2Zmc2V0KVxuICAvLyBhbmQgdGhlIHBvc2l0aW9uICh3aGljaCBtYXkgYmUgYW4gb2Zmc2V0KVxuICBsZXQgcHJldlBvcyA9IG51bGwsXG4gICAgICB0aW1lID0gMDtcbiAgZm9yIChsZXQgc3RhdGUgb2YgdG91Y2hTdGF0ZU9iamVjdHMpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLngpICYmIF8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSAmJiBwcmV2UG9zICE9PSBudWxsKSB7XG4gICAgICAvLyB0aGlzIGhhcHBlbnMgd2l0aCB3YWl0XG4gICAgICBzdGF0ZS5vcHRpb25zLnggPSBwcmV2UG9zLng7XG4gICAgICBzdGF0ZS5vcHRpb25zLnkgPSBwcmV2UG9zLnk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5vcHRpb25zLm9mZnNldCAmJiBwcmV2UG9zKSB7XG4gICAgICAvLyB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhbiBvZmZzZXRcbiAgICAgIHN0YXRlLm9wdGlvbnMueCArPSBwcmV2UG9zLng7XG4gICAgICBzdGF0ZS5vcHRpb25zLnkgKz0gcHJldlBvcy55O1xuICAgIH1cbiAgICBkZWxldGUgc3RhdGUub3B0aW9ucy5vZmZzZXQ7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueCkgJiYgIV8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSkge1xuICAgICAgcHJldlBvcyA9IHN0YXRlLm9wdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKG11bHRpKSB7XG4gICAgICBsZXQgdGltZU9mZnNldCA9IHN0YXRlLnRpbWVPZmZzZXQ7XG4gICAgICB0aW1lICs9IHRpbWVPZmZzZXQ7XG4gICAgICBzdGF0ZS50aW1lID0gYW5kcm9pZEhlbHBlcnMudHJ1bmNhdGVEZWNpbWFscyh0aW1lLCAzKTtcblxuICAgICAgLy8gbXVsdGkgZ2VzdHVyZXMgcmVxdWlyZSAndG91Y2gnIHJhdGhlciB0aGFuICdvcHRpb25zJ1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueCkgJiYgIV8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSkge1xuICAgICAgICBzdGF0ZS50b3VjaCA9IHtcbiAgICAgICAgICB4OiBzdGF0ZS5vcHRpb25zLngsXG4gICAgICAgICAgeTogc3RhdGUub3B0aW9ucy55XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBkZWxldGUgc3RhdGUub3B0aW9ucztcbiAgICB9XG4gICAgZGVsZXRlIHN0YXRlLnRpbWVPZmZzZXQ7XG4gIH1cbiAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3RzO1xufTtcblxuXG5jb21tYW5kcy5wZXJmb3JtTXVsdGlBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtTXVsdGlBY3Rpb24gKGFjdGlvbnMsIGVsZW1lbnRJZCkge1xuICAvLyBBbmRyb2lkIG5lZWRzIGF0IGxlYXN0IHR3byBhY3Rpb25zIHRvIGJlIGFibGUgdG8gcGVyZm9ybSBhIG11bHRpIHBvaW50ZXIgZ2VzdHVyZVxuICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ011bHRpIFBvaW50ZXIgR2VzdHVyZXMgbmVlZCBhdCBsZWFzdCB0d28gYWN0aW9ucy4gJyArXG4gICAgICAgICdVc2UgVG91Y2ggQWN0aW9ucyBmb3IgYSBzaW5nbGUgYWN0aW9uLicpO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVzID0gYXdhaXQgYXN5bmNtYXAoYWN0aW9ucywgYXN5bmMgKGFjdGlvbikgPT4gYXdhaXQgdGhpcy5wYXJzZVRvdWNoKGFjdGlvbiwgdHJ1ZSksIGZhbHNlKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5kb1BlcmZvcm1NdWx0aUFjdGlvbihlbGVtZW50SWQsIHN0YXRlcyk7XG59O1xuXG4vKipcbiAqIFJlYXNvbiBmb3IgaXNvbGF0aW5nIGRvUGVyZm9ybU11bHRpQWN0aW9uIGZyb20gcGVyZm9ybU11bHRpQWN0aW9uIGlzIGZvciByZXVzaW5nIHBlcmZvcm1NdWx0aUFjdGlvblxuICogYWNyb3NzIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgYW5kIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uXG4gKiBPdGhlciBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIG5lZWQgdG8gb3ZlcnJpZGUgZG9QZXJmb3JtTXVsdGlBY3Rpb25cbiAqIHRvIGZhY2lsaXRhdGUgcGVyZm9ybU11bHRpQWN0aW9uLlxuICovXG5jb21tYW5kcy5kb1BlcmZvcm1NdWx0aUFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGRvUGVyZm9ybU11bHRpQWN0aW9uIChlbGVtZW50SWQsIHN0YXRlcykge1xuICBsZXQgb3B0cztcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIG9wdHMgPSB7XG4gICAgICBlbGVtZW50SWQsXG4gICAgICBhY3Rpb25zOiBzdGF0ZXNcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnBlcmZvcm1NdWx0aVBvaW50ZXJHZXN0dXJlJywgb3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGFjdGlvbnM6IHN0YXRlc1xuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3BlcmZvcm1NdWx0aVBvaW50ZXJHZXN0dXJlJywgb3B0cyk7XG4gIH1cbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsUUFBUSxHQUFHLEVBQWY7QUFBQSxJQUFtQkMsT0FBTyxHQUFHLEVBQTdCO0FBQUEsSUFBaUNDLFVBQVUsR0FBRyxFQUE5Qzs7OztBQUVBLFNBQVNDLGVBQVQsQ0FBMEJDLEdBQTFCLEVBQStCO0VBSTdCLE9BQU9DLGFBQUEsQ0FBS0MsUUFBTCxDQUFjRixHQUFkLElBQXFCQSxHQUFyQixHQUEyQixHQUFsQztBQUNEOztBQUVELFNBQVNHLHFCQUFULENBQWdDQyxXQUFoQyxFQUE2QztFQUczQyxJQUFJQyxRQUFRLEdBQUcsR0FBZjs7RUFDQSxJQUFJLE9BQU9ELFdBQVcsQ0FBQ0UsT0FBWixDQUFvQkMsRUFBM0IsS0FBa0MsV0FBbEMsSUFBaURILFdBQVcsQ0FBQ0UsT0FBWixDQUFvQkMsRUFBekUsRUFBNkU7SUFDM0VGLFFBQVEsR0FBR0QsV0FBVyxDQUFDRSxPQUFaLENBQW9CQyxFQUFw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
@@ -9,7 +9,7 @@ exports.default = exports.AndroidDriver = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
- var _baseDriver = require("@appium/base-driver");
12
+ var _driver = require("appium/driver");
13
13
 
14
14
  var _desiredCaps = _interopRequireDefault(require("./desired-caps"));
15
15
 
@@ -21,7 +21,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
21
21
 
22
22
  var _appiumAdb = require("appium-adb");
23
23
 
24
- var _support = require("@appium/support");
24
+ var _support = require("appium/support");
25
25
 
26
26
  var _asyncbox = require("asyncbox");
27
27
 
@@ -33,7 +33,7 @@ const APP_EXTENSION = '.apk';
33
33
  const DEVICE_PORT = 4724;
34
34
  const NO_PROXY = [['POST', new RegExp('^/session/[^/]+/context')], ['GET', new RegExp('^/session/[^/]+/context')], ['POST', new RegExp('^/session/[^/]+/appium')], ['GET', new RegExp('^/session/[^/]+/appium')], ['POST', new RegExp('^/session/[^/]+/touch/perform')], ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')], ['POST', new RegExp('^/session/[^/]+/orientation')], ['GET', new RegExp('^/session/[^/]+/orientation')], ['POST', new RegExp('^/session/[^/]+/execute')], ['POST', new RegExp('^/session/[^/]+/execute/sync')], ['GET', new RegExp('^/session/[^/]+/network_connection')], ['POST', new RegExp('^/session/[^/]+/network_connection')]];
35
35
 
36
- class AndroidDriver extends _baseDriver.BaseDriver {
36
+ class AndroidDriver extends _driver.BaseDriver {
37
37
  constructor(opts = {}, shouldValidateCaps = true) {
38
38
  super(opts, shouldValidateCaps);
39
39
  this.locatorStrategies = ['xpath', 'id', 'class name', 'accessibility id', '-android uiautomator'];
@@ -41,7 +41,7 @@ class AndroidDriver extends _baseDriver.BaseDriver {
41
41
  this.sessionChromedrivers = {};
42
42
  this.jwpProxyActive = false;
43
43
  this.jwpProxyAvoid = _lodash.default.clone(NO_PROXY);
44
- this.settings = new _baseDriver.DeviceSettings({
44
+ this.settings = new _driver.DeviceSettings({
45
45
  ignoreUnimportantViews: false
46
46
  }, this.onSettingsUpdate.bind(this));
47
47
  this.chromedriver = null;
@@ -506,4 +506,4 @@ var _default = AndroidDriver;
506
506
  exports.default = _default;require('source-map-support').install();
507
507
 
508
508
 
509
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbIkFQUF9FWFRFTlNJT04iLCJERVZJQ0VfUE9SVCIsIk5PX1BST1hZIiwiUmVnRXhwIiwiQW5kcm9pZERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsImRlc2lyZWRDb25zdHJhaW50cyIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiandwUHJveHlBY3RpdmUiLCJqd3BQcm94eUF2b2lkIiwiXyIsImNsb25lIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsImFwa1N0cmluZ3MiLCJ1bmxvY2tlciIsImhlbHBlcnMiLCJjbWQiLCJmbiIsInRvUGFpcnMiLCJjb21tYW5kcyIsInByb3RvdHlwZSIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsImNhcHMiLCJzZXJ2ZXJEZXRhaWxzIiwicGxhdGZvcm0iLCJ3ZWJTdG9yYWdlRW5hYmxlZCIsInRha2VzU2NyZWVuc2hvdCIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwibG9jYXRpb25Db250ZXh0RW5hYmxlZCIsIndhcm5pbmdzIiwiZGVzaXJlZCIsIk9iamVjdCIsImFzc2lnbiIsImRlZmF1bHRPcHRzIiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJmbGFncyIsImRpc2FibGVBbmRyb2lkV2F0Y2hlcnMiLCJ0bXBEaXIiLCJ0ZW1wRGlyIiwic3RhdGljRGlyIiwiZnVsbFJlc2V0IiwiYXV0b0xhdW5jaCIsImFkYlBvcnQiLCJERUZBVUxUX0FEQl9QT1JUIiwiYm9vdHN0cmFwUG9ydCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRlZmF1bHRzIiwidXNlVW5sb2NrSGVscGVyQXBwIiwiaXNVbmRlZmluZWQiLCJ1bmxvY2tUeXBlIiwibm9SZXNldCIsImZhc3RSZXNldCIsInNraXBVbmluc3RhbGwiLCJpc0Nocm9tZVNlc3Npb24iLCJhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwicHVzaCIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJ1ZGlkIiwiZW1Qb3J0IiwiZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIiwiYWRiIiwiY3JlYXRlQURCIiwic3VwcHJlc3NLaWxsU2VydmVyIiwicmVtb3RlQWRiSG9zdCIsImNsZWFyRGV2aWNlTG9nc09uU3RhcnQiLCJhZGJFeGVjVGltZW91dCIsImFsbG93T2ZmbGluZURldmljZXMiLCJnZXRBcGlMZXZlbCIsImxvZyIsIndhcm4iLCJpc1BhY2thZ2VPckJ1bmRsZSIsImFwcCIsImFwcFBhY2thZ2UiLCJjb25maWd1cmVBcHAiLCJjaGVja0FwcFByZXNlbnQiLCJhcHBPbkRldmljZSIsImluZm8iLCJjaGVja1BhY2thZ2VQcmVzZW50IiwidXRpbCIsImhhc1ZhbHVlIiwibmV0d29ya1NwZWVkIiwiaXNFbXVsYXRvciIsImVuc3VyZU5ldHdvcmtTcGVlZCIsImdwc0VuYWJsZWQiLCJ0b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyIiwic3RhcnRBbmRyb2lkU2Vzc2lvbiIsImUiLCJkZWxldGVTZXNzaW9uIiwiaWduIiwiYXZkIiwiZGV2aWNlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJwbGF0Zm9ybVZlcnNpb24iLCJhdmREZXZpY2UiLCJyZXBsYWNlIiwiaXNDaHJvbWVCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJrZXkiLCJ2YWx1ZSIsInNldENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkiLCJkZWZhdWx0SU1FIiwiaW5pdERldmljZSIsImN1ckRldmljZUlkIiwiZGV2aWNlVURJRCIsImdldFBsYXRmb3JtVmVyc2lvbiIsImRldmljZVNjcmVlblNpemUiLCJnZXRTY3JlZW5TaXplIiwiZGV2aWNlTW9kZWwiLCJnZXRNb2RlbCIsImRldmljZU1hbnVmYWN0dXJlciIsImdldE1hbnVmYWN0dXJlciIsImRpc2FibGVXaW5kb3dBbmltYXRpb24iLCJpc0FuaW1hdGlvbk9uIiwic2V0SGlkZGVuQXBpUG9saWN5IiwiaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IiLCJzZXRBbmltYXRpb25TdGF0ZSIsIl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCIsImluaXRBVVQiLCJib290c3RyYXAiLCJ3ZWJzb2NrZXQiLCJzdGFydCIsImFjY2VwdFNzbENlcnRzIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJjYXRjaCIsImVyciIsImlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biIsInN0YXJ0VW5leHBlY3RlZFNodXRkb3duIiwic2tpcFVubG9jayIsInVubG9jayIsInVwZGF0ZSIsInN0YXJ0Q2hyb21lU2Vzc2lvbiIsInN0YXJ0QVVUIiwib3JpZW50YXRpb24iLCJkZWJ1ZyIsInNldE9yaWVudGF0aW9uIiwiaW5pdEF1dG9XZWJ2aWV3IiwiYXV0b1dlYnZpZXciLCJ2aWV3TmFtZSIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsInRpbWVvdXQiLCJhdXRvV2Vidmlld1RpbWVvdXQiLCJyZXRyeUludGVydmFsIiwic2V0Q29udGV4dCIsImxhdW5jaEluZm8iLCJnZXRMYXVuY2hJbmZvIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJwYXJzZUFycmF5IiwiU0VUVElOR1NfSEVMUEVSX1BLR19JRCIsIm90aGVyQXBwcyIsIm1lc3NhZ2UiLCJCIiwiYWxsIiwibWFwIiwiaW5zdGFsbE90aGVyQXBrcyIsInJlc2V0QXBwIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbEFwayIsImFwa1N0cmluZ3NGb3JMYW5ndWFnZSIsInB1c2hTdHJpbmdzIiwibGFuZ3VhZ2UiLCJzaGFyZWRQcmVmZXJlbmNlcyIsInNldFNoYXJlZFByZWZlcmVuY2VzIiwiZnMiLCJleGlzdHMiLCJzaGVsbCIsImNvbXByZXNzIiwic2VuZEFjdGlvbiIsImNvbXByZXNzTGF5b3V0IiwiaXNFbXB0eSIsIl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzIiwic3RvcFJlY29yZGluZ1NjcmVlbiIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJmb3JjZVN0b3AiLCJnb1RvSG9tZSIsInNodXRkb3duIiwic3RvcExvZ2NhdCIsInNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3kiLCJhdmROYW1lIiwia2lsbEVtdWxhdG9yIiwic2hhcmVkUHJlZnMiLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlbW90ZVBhdGgiLCJyZW1vdGVGaWxlIiwibG9jYWxQYXRoIiwiYnVpbGRlciIsImdldFByZWZzQnVpbGRlciIsImJ1aWxkIiwicHJlZnMiLCJ0b0ZpbGUiLCJ1bmxpbmsiLCJTaGFyZWRQcmVmc0J1aWxkZXIiLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiY2FuUHJveHkiLCJpc0Z1bmN0aW9uIiwicHJveHlSZXFSZXMiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvZHJpdmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VEcml2ZXIsIERldmljZVNldHRpbmdzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgZGVzaXJlZENvbnN0cmFpbnRzIGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7XG4gIGhlbHBlcnMsIGVuc3VyZU5ldHdvcmtTcGVlZCxcbiAgU0VUVElOR1NfSEVMUEVSX1BLR19JRCxcbn0gZnJvbSAnLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERFRkFVTFRfQURCX1BPUlQgfSBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTaGFyZWRQcmVmc0J1aWxkZXIgfSBmcm9tICdzaGFyZWQtcHJlZmVyZW5jZXMtYnVpbGRlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IEFQUF9FWFRFTlNJT04gPSAnLmFwayc7XG5jb25zdCBERVZJQ0VfUE9SVCA9IDQ3MjQ7XG5cbi8vIFRoaXMgaXMgYSBzZXQgb2YgbWV0aG9kcyBhbmQgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvXG4vLyBDaHJvbWVkcml2ZXJcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG5dO1xuXG5jbGFzcyBBbmRyb2lkRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJy1hbmRyb2lkIHVpYXV0b21hdG9yJ1xuICAgIF07XG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ29uc3RyYWludHM7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBfLmNsb25lKE5PX1BST1hZKTtcbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiBmYWxzZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICAgIHRoaXMuYXBrU3RyaW5ncyA9IHt9O1xuICAgIHRoaXMudW5sb2NrZXIgPSBoZWxwZXJzLnVubG9ja2VyO1xuXG4gICAgZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgICAgIEFuZHJvaWREcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbiAgICB9XG5cbiAgICAvLyBuZWVkcyB0byBiZSBhZnRlciB0aGUgbGluZSB3aGljaCBhc3NpZ25zIGNvbW1hbmRzIHRvIEFuZHJvaWREcml2ZXIucHJvdG90eXBlLCBzbyB0aGF0IGB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZWAgaXMgZGVmaW5lZC5cbiAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIC8vIHRoZSB3aG9sZSBjcmVhdGVTZXNzaW9uIGZsb3cgaXMgc3Vycm91bmRlZCBpbiBhIHRyeS1jYXRjaCBzdGF0ZW1lbnRcbiAgICAvLyBpZiBjcmVhdGluZyBhIHNlc3Npb24gZmFpbHMgYXQgYW55IHBvaW50LCB3ZSB0ZWFyZG93biBldmVyeXRoaW5nIHdlXG4gICAgLy8gc2V0IHVwIGJlZm9yZSB0aHJvd2luZyB0aGUgZXJyb3IuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IHRoaXMuY2Fwc1xuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICAvLyBhc3NpZ25pbmcgZGVmYXVsdHNcbiAgICAgIGxldCBkZWZhdWx0T3B0cyA9IHtcbiAgICAgICAgYWN0aW9uOiAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICAgICBjYXRlZ29yeTogJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAgICAgZmxhZ3M6ICcweDEwMjAwMDAwJyxcbiAgICAgICAgZGlzYWJsZUFuZHJvaWRXYXRjaGVyczogZmFsc2UsXG4gICAgICAgIHRtcERpcjogYXdhaXQgdGVtcERpci5zdGF0aWNEaXIoKSxcbiAgICAgICAgZnVsbFJlc2V0OiBmYWxzZSxcbiAgICAgICAgYXV0b0xhdW5jaDogdHJ1ZSxcbiAgICAgICAgYWRiUG9ydDogREVGQVVMVF9BREJfUE9SVCxcbiAgICAgICAgYm9vdHN0cmFwUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDAsXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcbiAgICAgIHRoaXMudXNlVW5sb2NrSGVscGVyQXBwID0gXy5pc1VuZGVmaW5lZCh0aGlzLmNhcHMudW5sb2NrVHlwZSk7XG5cbiAgICAgIC8vIG5vdCB1c2VyIHZpc2libGUgdmlhIGNhcHNcbiAgICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzLmZhc3RSZXNldCA9ICF0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMubm9SZXNldDtcbiAgICAgIHRoaXMub3B0cy5za2lwVW5pbnN0YWxsID0gdGhpcy5vcHRzLmZhc3RSZXNldCB8fCB0aGlzLm9wdHMubm9SZXNldDtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGhlbHBlcnMuYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzKHRoaXMub3B0cyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgICB0aGlzLmp3cFByb3h5QXZvaWQucHVzaChbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgdGhpcy5zZXRBdmRGcm9tQ2FwYWJpbGl0aWVzKGNhcHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgICAgbGV0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG5cbiAgICAgIC8vIHNldCB1cCBhbiBpbnN0YW5jZSBvZiBBREJcbiAgICAgIHRoaXMuYWRiID0gYXdhaXQgaGVscGVycy5jcmVhdGVBREIoe1xuICAgICAgICB1ZGlkOiB0aGlzLm9wdHMudWRpZCxcbiAgICAgICAgZW1Qb3J0OiB0aGlzLm9wdHMuZW1Qb3J0LFxuICAgICAgICBhZGJQb3J0OiB0aGlzLm9wdHMuYWRiUG9ydCxcbiAgICAgICAgc3VwcHJlc3NLaWxsU2VydmVyOiB0aGlzLm9wdHMuc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgICAgICByZW1vdGVBZGJIb3N0OiB0aGlzLm9wdHMucmVtb3RlQWRiSG9zdCxcbiAgICAgICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydDogdGhpcy5vcHRzLmNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgICAgIGFkYkV4ZWNUaW1lb3V0OiB0aGlzLm9wdHMuYWRiRXhlY1RpbWVvdXQsXG4gICAgICAgIGFsbG93T2ZmbGluZURldmljZXM6IHRoaXMub3B0cy5hbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDIzKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oXCJDb25zaWRlciBzZXR0aW5nICdhdXRvbWF0aW9uTmFtZScgY2FwYWJpbGl0eSB0byBcIiArXG4gICAgICAgICAgXCIndWlhdXRvbWF0b3IyJyBvbiBBbmRyb2lkID49IDYsIHNpbmNlIFVJQXV0b21hdG9yIGZyYW1ld29yayBcIiArXG4gICAgICAgICAgJ2lzIG5vdCBtYWludGFpbmVkIGFueW1vcmUgYnkgdGhlIE9TIHZlbmRvci4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgICAvLyB1c2VyIHByb3ZpZGVkIHBhY2thZ2UgaW5zdGVhZCBvZiBhcHAgZm9yICdhcHAnIGNhcGFiaWxpdHksIG1hc3NhZ2Ugb3B0aW9uc1xuICAgICAgICB0aGlzLm9wdHMuYXBwUGFja2FnZSA9IHRoaXMub3B0cy5hcHA7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIEFQUF9FWFRFTlNJT04pO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQXBwUHJlc2VudCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIC8vIHRoZSBhcHAgaXNuJ3QgYW4gYWN0dWFsIGFwcCBmaWxlIGJ1dCByYXRoZXIgc29tZXRoaW5nIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gYXNzdW1lIGlzIG9uIHRoZSBkZXZpY2UgYW5kIGp1c3QgbGF1bmNoIHZpYSB0aGUgYXBwUGFja2FnZVxuICAgICAgICB0aGlzLmxvZy5pbmZvKGBBcHAgZmlsZSB3YXMgbm90IGxpc3RlZCwgaW5zdGVhZCB3ZSdyZSBnb2luZyB0byBydW4gYCArXG4gICAgICAgICAgYCR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9IGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VQcmVzZW50KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWUgY2xvdWQgc2VydmljZXMgdXNpbmcgYXBwaXVtIGxhdW5jaCB0aGUgYXZkIHRoZW1zZWx2ZXMsIHNvIHdlIGVuc3VyZSBuZXRzcGVlZFxuICAgICAgLy8gaXMgc2V0IGZvciBlbXVsYXRvcnMgYnkgY2FsbGluZyBhZGIubmV0d29ya1NwZWVkIGJlZm9yZSBydW5uaW5nIHRoZSBhcHBcbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5uZXR3b3JrU3BlZWQpKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKCdTb3JyeSwgbmV0d29ya1NwZWVkIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5ldHdvcmtTcGVlZCA9IGVuc3VyZU5ldHdvcmtTcGVlZCh0aGlzLmFkYiwgdGhpcy5vcHRzLm5ldHdvcmtTcGVlZCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIubmV0d29ya1NwZWVkKG5ldHdvcmtTcGVlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgdG8gZW5hYmxlL2Rpc2FibGUgZ3BzIGJlZm9yZSBydW5uaW5nIHRoZSBhcHBsaWNhdGlvblxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmdwc0VuYWJsZWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFRyeWluZyB0byAke3RoaXMub3B0cy5ncHNFbmFibGVkID8gJ2VuYWJsZScgOiAnZGlzYWJsZSd9IGdwcyBsb2NhdGlvbiBwcm92aWRlcmApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIodGhpcy5vcHRzLmdwc0VuYWJsZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1NvcnJ5ISBncHNFbmFibGVkIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRBbmRyb2lkU2Vzc2lvbih0aGlzLm9wdHMpO1xuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIHRoaXMuY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JpbmcgZGVsZXRlIHNlc3Npb24gZXhjZXB0aW9uIGlmIGFueSBhbmQgdGhyb3cgdGhlIHJlYWwgZXJyb3JcbiAgICAgIC8vIHRoYXQgaGFwcGVuZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHNlc3Npb24uXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgaXNFbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNFbXVsYXRvcih0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuXG4gIHNldEF2ZEZyb21DYXBhYmlsaXRpZXMgKGNhcHMpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF2ZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgcGxhdGZvcm1WZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBhdmREZXZpY2UgPSBjYXBzLmRldmljZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfLl0vZywgJy0nKTtcbiAgICAgIHRoaXMub3B0cy5hdmQgPSBgJHthdmREZXZpY2V9X18ke2NhcHMucGxhdGZvcm1WZXJzaW9ufWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFwcE9uRGV2aWNlICgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApIHx8ICghdGhpcy5vcHRzLmFwcCAmJlxuICAgICAgICAgICB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcFBhY2thZ2UpKTtcbiAgfVxuXG4gIGdldCBpc0Nocm9tZVNlc3Npb24gKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzQ2hyb21lQnJvd3Nlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgPT09ICdpZ25vcmVVbmltcG9ydGFudFZpZXdzJykge1xuICAgICAgYXdhaXQgdGhpcy5zZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydEFuZHJvaWRTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyBBbmRyb2lkIHNlc3Npb25gKTtcbiAgICAvLyBzZXQgdXAgdGhlIGRldmljZSB0byBydW4gb24gKHJlYWwgb3IgZW11bGF0b3IsIGV0YylcbiAgICB0aGlzLmRlZmF1bHRJTUUgPSBhd2FpdCBoZWxwZXJzLmluaXREZXZpY2UodGhpcy5hZGIsIHRoaXMub3B0cyk7XG5cbiAgICAvLyBzZXQgYWN0dWFsIGRldmljZSBuYW1lLCB1ZGlkLCBwbGF0Zm9ybSB2ZXJzaW9uLCBzY3JlZW4gc2l6ZSwgbW9kZWwgYW5kIG1hbnVmYWN0dXJlciBkZXRhaWxzLlxuICAgIHRoaXMuY2Fwcy5kZXZpY2VOYW1lID0gdGhpcy5hZGIuY3VyRGV2aWNlSWQ7XG4gICAgdGhpcy5jYXBzLmRldmljZVVESUQgPSB0aGlzLm9wdHMudWRpZDtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gYXdhaXQgdGhpcy5hZGIuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlblNpemUgPSBhd2FpdCB0aGlzLmFkYi5nZXRTY3JlZW5TaXplKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0TW9kZWwoKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTWFudWZhY3R1cmVyID0gYXdhaXQgdGhpcy5hZGIuZ2V0TWFudWZhY3R1cmVyKCk7XG5cbiAgICBpZiAodGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24pIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FuaW1hdGlvbk9uKCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQVBJIGxldmVsIDI4IGlzIEFuZHJvaWQgUFxuICAgICAgICAgIC8vIERvbid0IGZvcmdldCB0byByZXNldCB0aGUgcmVsYXhpbmcgaW4gZGVsZXRlIHNlc3Npb25cbiAgICAgICAgICB0aGlzLmxvZy53YXJuKCdSZWxheGluZyBoaWRkZW4gYXBpIHBvbGljeSB0byBtYW5hZ2UgYW5pbWF0aW9uIHNjYWxlJyk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SGlkZGVuQXBpUG9saWN5KCcxJywgISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2cuaW5mbygnRGlzYWJsaW5nIHdpbmRvdyBhbmltYXRpb24gYXMgaXQgaXMgcmVxdWVzdGVkIGJ5IFwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvblwiIGNhcGFiaWxpdHknKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdXaW5kb3cgYW5pbWF0aW9uIGlzIGFscmVhZHkgZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcblxuICAgIC8vIHN0YXJ0IFVpQXV0b21hdG9yXG4gICAgdGhpcy5ib290c3RyYXAgPSBuZXcgaGVscGVycy5ib290c3RyYXAodGhpcy5hZGIsIHRoaXMub3B0cy5ib290c3RyYXBQb3J0LCB0aGlzLm9wdHMud2Vic29ja2V0KTtcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zdGFydCh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdGhpcy5vcHRzLmRpc2FibGVBbmRyb2lkV2F0Y2hlcnMsIHRoaXMub3B0cy5hY2NlcHRTc2xDZXJ0cyk7XG4gICAgLy8gaGFuZGxpbmcgdW5leHBlY3RlZCBzaHV0ZG93blxuICAgIHRoaXMuYm9vdHN0cmFwLm9uVW5leHBlY3RlZFNodXRkb3duLmNhdGNoKGFzeW5jIChlcnIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgIGlmICghdGhpcy5ib290c3RyYXAuaWdub3JlVW5leHBlY3RlZFNodXRkb3duKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24oZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIC8vIExldCdzIHRyeSB0byB1bmxvY2sgdGhlIGRldmljZVxuICAgICAgYXdhaXQgaGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG4gICAgfVxuXG4gICAgLy8gU2V0IENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgb24gdGhlIGRldmljZSBiYXNlZCBvbiBjdXJyZW50IHNldHRpbmdzIG9iamVjdFxuICAgIC8vIHRoaXMgaGFzIHRvIGhhcHBlbiBfYWZ0ZXJfIGJvb3RzdHJhcCBpcyBpbml0aWFsaXplZFxuICAgIGlmICh0aGlzLm9wdHMuaWdub3JlVW5pbXBvcnRhbnRWaWV3cykge1xuICAgICAgYXdhaXQgdGhpcy5zZXR0aW5ncy51cGRhdGUoe2lnbm9yZVVuaW1wb3J0YW50Vmlld3M6IHRoaXMub3B0cy5pZ25vcmVVbmltcG9ydGFudFZpZXdzfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAvLyBzdGFydCBhIGNocm9tZWRyaXZlciBzZXNzaW9uIGFuZCBwcm94eSB0byBpdFxuICAgICAgYXdhaXQgdGhpcy5zdGFydENocm9tZVNlc3Npb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0cy5hdXRvTGF1bmNoKSB7XG4gICAgICAgIC8vIHN0YXJ0IGFwcFxuICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0QVVUKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm9yaWVudGF0aW9uKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHt0aGlzLm9wdHMub3JpZW50YXRpb259J2ApO1xuICAgICAgYXdhaXQgdGhpcy5zZXRPcmllbnRhdGlvbih0aGlzLm9wdHMub3JpZW50YXRpb24pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5pdEF1dG9XZWJ2aWV3KCk7XG4gIH1cblxuICBhc3luYyBpbml0QXV0b1dlYnZpZXcgKCkge1xuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGxldCB2aWV3TmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gICAgICBsZXQgdGltZW91dCA9ICh0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0KSB8fCAyMDAwO1xuXG4gICAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIGF1dG8gd2VidmlldyB0byBjb250ZXh0ICcke3ZpZXdOYW1lfScgd2l0aCB0aW1lb3V0ICR7dGltZW91dH1tc2ApO1xuXG4gICAgICAvLyB0cnkgZXZlcnkgNTAwbXMgdW50aWwgdGltZW91dCBpcyBvdmVyXG4gICAgICBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgLyA1MDAsIDUwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnNldENvbnRleHQodmlld05hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdEFVVCAoKSB7XG4gICAgLy8gcG9wdWxhdGUgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHksXG4gICAgLy8gYW5kIHRoZSBkZXZpY2UgYmVpbmcgdXNlZFxuICAgIC8vIGluIHRoZSBvcHRzIGFuZCBjYXBzIChzbyBpdCBnZXRzIGJhY2sgdG8gdGhlIHVzZXIgb24gc2Vzc2lvbiBjcmVhdGlvbilcbiAgICBsZXQgbGF1bmNoSW5mbyA9IGF3YWl0IGhlbHBlcnMuZ2V0TGF1bmNoSW5mbyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgbGF1bmNoSW5mbyk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmNhcHMsIGxhdW5jaEluZm8pO1xuXG4gICAgLy8gVW5pbnN0YWxsIGFueSB1bmluc3RhbGxPdGhlclBhY2thZ2VzIHdoaWNoIHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICAgIGhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgLy8gT25seSBTRVRUSU5HU19IRUxQRVJfUEtHX0lEIHBhY2thZ2UgaXMgdXNlZCBieSBVSUExXG4gICAgICBhd2FpdCBoZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMoXG4gICAgICAgIHRoaXMuYWRiLFxuICAgICAgICBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpLFxuICAgICAgICBbU0VUVElOR1NfSEVMUEVSX1BLR19JRF1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5zdGFsbCBhbnkgXCJvdGhlckFwcHNcIiB0aGF0IHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLm90aGVyQXBwcykge1xuICAgICAgbGV0IG90aGVyQXBwcztcbiAgICAgIHRyeSB7XG4gICAgICAgIG90aGVyQXBwcyA9IGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwib3RoZXJBcHBzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBvdGhlckFwcHMgPSBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBBUFBfRVhURU5TSU9OKSkpO1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzKG90aGVyQXBwcywgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuXG4gICAgLy8gaW5zdGFsbCBhcHBcbiAgICBpZiAoIXRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ0Z1bGwgcmVzZXQgcmVxdWlyZXMgYW4gYXBwIGNhcGFiaWxpdHksIHVzZSBmYXN0UmVzZXQgaWYgYXBwIGlzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0KSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmluc3RhbGwpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgfVxuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEFwayh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBjb25zdCBhcGtTdHJpbmdzRm9yTGFuZ3VhZ2UgPSBhd2FpdCBoZWxwZXJzLnB1c2hTdHJpbmdzKHRoaXMub3B0cy5sYW5ndWFnZSwgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgaWYgKHRoaXMub3B0cy5sYW5ndWFnZSkge1xuICAgICAgdGhpcy5hcGtTdHJpbmdzW3RoaXMub3B0cy5sYW5ndWFnZV0gPSBhcGtTdHJpbmdzRm9yTGFuZ3VhZ2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtdXN0IHJ1biBhZnRlciBpbnN0YWxsaW5nIHRoZSBhcGssIG90aGVyd2lzZSBpdCB3b3VsZCBjYXVzZSB0aGVcbiAgICAvLyBpbnN0YWxsIHRvIGZhaWwuIEFuZCBiZWZvcmUgcnVubmluZyB0aGUgYXBwLlxuICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLm9wdHMuc2hhcmVkUHJlZmVyZW5jZXMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldFNoYXJlZFByZWZlcmVuY2VzKHRoaXMub3B0cyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tBcHBQcmVzZW50ICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnQ2hlY2tpbmcgd2hldGhlciBhcHAgaXMgYWN0dWFsbHkgcHJlc2VudCcpO1xuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm9wdHMuYXBwKSkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIGFwcCBhcGsgYXQgJHt0aGlzLm9wdHMuYXBwfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrUGFja2FnZVByZXNlbnQgKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIHBhY2thZ2UgaXMgcHJlc2VudCBvbiB0aGUgZGV2aWNlJyk7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydwbScsICdsaXN0JywgJ3BhY2thZ2VzJywgdGhpcy5vcHRzLmFwcFBhY2thZ2VdKSkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIHBhY2thZ2UgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gb24gdGhlIGRldmljZWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IG9uIHRoZSBkZXZpY2VcbiAgYXN5bmMgc2V0Q29tcHJlc3NlZExheW91dEhpZXJhcmNoeSAoY29tcHJlc3MpIHtcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdjb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5Jywge2NvbXByZXNzTGF5b3V0OiBjb21wcmVzc30pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1NodXR0aW5nIGRvd24gQW5kcm9pZCBkcml2ZXInKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBoZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nKCk7XG5cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG5cbiAgICBpZiAodGhpcy5ib290c3RyYXApIHtcbiAgICAgIC8vIGNlcnRhaW4gY2xlYW51cCB3ZSBvbmx5IGNhcmUgdG8gZG8gaWYgdGhlIGJvb3RzdHJhcCB3YXMgZXZlciBydW5cbiAgICAgIGF3YWl0IHRoaXMuc3RvcENocm9tZWRyaXZlclByb3hpZXMoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkICYmIHRoaXMub3B0cy5yZXNldEtleWJvYXJkICYmIHRoaXMuZGVmYXVsdElNRSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgUmVzZXR0aW5nIElNRSB0byAke3RoaXMuZGVmYXVsdElNRX1gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2hyb21lU2Vzc2lvbiAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8uZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5nb1RvSG9tZSgpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsICYmICF0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc2h1dGRvd24oKTtcbiAgICAgIHRoaXMuYm9vdHN0cmFwID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoXCJDYWxsZWQgZGVsZXRlU2Vzc2lvbiBidXQgYm9vdHN0cmFwIHdhc24ndCBhY3RpdmVcIik7XG4gICAgfVxuICAgIC8vIHNvbWUgY2xlYW51cCB3ZSB3YW50IHRvIGRvIHJlZ2FyZGxlc3MsIGluIGNhc2Ugd2UgYXJlIHNodXR0aW5nIGRvd25cbiAgICAvLyBtaWQtc3RhcnR1cFxuICAgIGF3YWl0IHRoaXMuYWRiPy5zdG9wTG9nY2F0KCk7XG4gICAgaWYgKHRoaXMudXNlVW5sb2NrSGVscGVyQXBwKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYj8uZm9yY2VTdG9wKCdpby5hcHBpdW0udW5sb2NrJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIHdpbmRvdyBhbmltYXRpb24gc3RhdGUnKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5zZXRBbmltYXRpb25TdGF0ZSh0cnVlKTtcblxuICAgICAgLy8gVGhpcyB3YXMgbmVjZXNzYXJ5IHRvIGNoYW5nZSBhbmltYXRpb24gc2NhbGUgb3ZlciBBbmRyb2lkIFAuIFdlIG11c3QgcmVzZXQgdGhlIHBvbGljeSBmb3IgdGhlIHNlY3VyaXR5LlxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiPy5nZXRBcGlMZXZlbCgpID49IDI4KSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8uc2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSghIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgIGxldCBhdmROYW1lID0gdGhpcy5vcHRzLmF2ZC5yZXBsYWNlKCdAJywgJycpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYGNsb3NpbmcgZW11bGF0b3IgJyR7YXZkTmFtZX0nYCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYj8ua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNldFNoYXJlZFByZWZlcmVuY2VzICgpIHtcbiAgICBsZXQgc2hhcmVkUHJlZnMgPSB0aGlzLm9wdHMuc2hhcmVkUHJlZmVyZW5jZXM7XG4gICAgdGhpcy5sb2cuaW5mbygnVHJ5aW5nIHRvIHNldCBzaGFyZWQgcHJlZmVyZW5jZXMnKTtcbiAgICBsZXQgbmFtZSA9IHNoYXJlZFByZWZzLm5hbWU7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYFNraXBwaW5nIHNldHRpbmcgU2hhcmVkIHByZWZlcmVuY2VzLCBuYW1lIGlzIHVuZGVmaW5lZDogJHtKU09OLnN0cmluZ2lmeShzaGFyZWRQcmVmcyl9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCByZW1vdGVQYXRoID0gYC9kYXRhL2RhdGEvJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0vc2hhcmVkX3ByZWZzYDtcbiAgICBsZXQgcmVtb3RlRmlsZSA9IGAke3JlbW90ZVBhdGh9LyR7bmFtZX0ueG1sYDtcbiAgICBsZXQgbG9jYWxQYXRoID0gYC90bXAvJHtuYW1lfS54bWxgO1xuICAgIGxldCBidWlsZGVyID0gdGhpcy5nZXRQcmVmc0J1aWxkZXIoKTtcbiAgICBidWlsZGVyLmJ1aWxkKHNoYXJlZFByZWZzLnByZWZzKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBDcmVhdGluZyB0ZW1wb3Jhcnkgc2hhcmVkIHByZWZlcmVuY2VzOiAke2xvY2FsUGF0aH1gKTtcbiAgICBidWlsZGVyLnRvRmlsZShsb2NhbFBhdGgpO1xuICAgIHRoaXMubG9nLmluZm8oYENyZWF0aW5nIHNoYXJlZF9wcmVmcyByZW1vdGUgZm9sZGVyOiAke3JlbW90ZVBhdGh9YCk7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydta2RpcicsICctcCcsIHJlbW90ZVBhdGhdKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBQdXNoaW5nIHNoYXJlZF9wcmVmcyB0byAke3JlbW90ZUZpbGV9YCk7XG4gICAgYXdhaXQgdGhpcy5hZGIucHVzaChsb2NhbFBhdGgsIHJlbW90ZUZpbGUpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBUcnlpbmcgdG8gcmVtb3ZlIHNoYXJlZCBwcmVmZXJlbmNlcyB0ZW1wb3JhcnkgZmlsZWApO1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbFBhdGgpKSB7XG4gICAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbFBhdGgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEVycm9yIHRyeWluZyB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGUgJHtsb2NhbFBhdGh9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0UHJlZnNCdWlsZGVyICgpIHtcbiAgICAvKiBBZGQgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFNoYXJlZFByZWZzQnVpbGRlciBpbnN0ZWFkIG9mXG4gICAgICogZGlyZWN0bHkgY3JlYXRpbmcgdGhlIG9iamVjdCBvbiBzZXRTaGFyZWRQcmVmZXJlbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlc1xuICAgICovXG4gICAgcmV0dXJuIG5ldyBTaGFyZWRQcmVmc0J1aWxkZXIoKTtcbiAgfVxuXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgICBpZiAoIXN1cGVyLnZhbGlkYXRlRGVzaXJlZENhcHMoY2FwcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCghY2Fwcy5icm93c2VyTmFtZSB8fCAhaGVscGVycy5pc0Nocm9tZUJyb3dzZXIoY2Fwcy5icm93c2VyTmFtZSkpICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdUaGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgbXVzdCBpbmNsdWRlIGVpdGhlciBhbiBhcHAsIGFwcFBhY2thZ2Ugb3IgYnJvd3Nlck5hbWUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBY3RpdmU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKTtcblxuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QXZvaWQ7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHRoaXMgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIENocm9tZURyaXZlciBzdGF0dXNcbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHRoaXMucHJveHlSZXFSZXMpO1xuICB9XG59XG5cbmV4cG9ydCB7IEFuZHJvaWREcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWREcml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsYUFBYSxHQUFHLE1BQXRCO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLElBQXBCO0FBSUEsTUFBTUMsUUFBUSxHQUFHLENBQ2YsQ0FBQyxNQUFELEVBQVMsSUFBSUMsTUFBSixDQUFXLHlCQUFYLENBQVQsQ0FEZSxFQUVmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVyx5QkFBWCxDQUFSLENBRmUsRUFHZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsd0JBQVgsQ0FBVCxDQUhlLEVBSWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLHdCQUFYLENBQVIsQ0FKZSxFQUtmLENBQUMsTUFBRCxFQUFTLElBQUlBLE1BQUosQ0FBVywrQkFBWCxDQUFULENBTGUsRUFNZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcscUNBQVgsQ0FBVCxDQU5lLEVBT2YsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLDZC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
509
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbIkFQUF9FWFRFTlNJT04iLCJERVZJQ0VfUE9SVCIsIk5PX1BST1hZIiwiUmVnRXhwIiwiQW5kcm9pZERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsImRlc2lyZWRDb25zdHJhaW50cyIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiandwUHJveHlBY3RpdmUiLCJqd3BQcm94eUF2b2lkIiwiXyIsImNsb25lIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsImFwa1N0cmluZ3MiLCJ1bmxvY2tlciIsImhlbHBlcnMiLCJjbWQiLCJmbiIsInRvUGFpcnMiLCJjb21tYW5kcyIsInByb3RvdHlwZSIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsImNhcHMiLCJzZXJ2ZXJEZXRhaWxzIiwicGxhdGZvcm0iLCJ3ZWJTdG9yYWdlRW5hYmxlZCIsInRha2VzU2NyZWVuc2hvdCIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwibG9jYXRpb25Db250ZXh0RW5hYmxlZCIsIndhcm5pbmdzIiwiZGVzaXJlZCIsIk9iamVjdCIsImFzc2lnbiIsImRlZmF1bHRPcHRzIiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJmbGFncyIsImRpc2FibGVBbmRyb2lkV2F0Y2hlcnMiLCJ0bXBEaXIiLCJ0ZW1wRGlyIiwic3RhdGljRGlyIiwiZnVsbFJlc2V0IiwiYXV0b0xhdW5jaCIsImFkYlBvcnQiLCJERUZBVUxUX0FEQl9QT1JUIiwiYm9vdHN0cmFwUG9ydCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRlZmF1bHRzIiwidXNlVW5sb2NrSGVscGVyQXBwIiwiaXNVbmRlZmluZWQiLCJ1bmxvY2tUeXBlIiwibm9SZXNldCIsImZhc3RSZXNldCIsInNraXBVbmluc3RhbGwiLCJpc0Nocm9tZVNlc3Npb24iLCJhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwicHVzaCIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJ1ZGlkIiwiZW1Qb3J0IiwiZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIiwiYWRiIiwiY3JlYXRlQURCIiwic3VwcHJlc3NLaWxsU2VydmVyIiwicmVtb3RlQWRiSG9zdCIsImNsZWFyRGV2aWNlTG9nc09uU3RhcnQiLCJhZGJFeGVjVGltZW91dCIsImFsbG93T2ZmbGluZURldmljZXMiLCJnZXRBcGlMZXZlbCIsImxvZyIsIndhcm4iLCJpc1BhY2thZ2VPckJ1bmRsZSIsImFwcCIsImFwcFBhY2thZ2UiLCJjb25maWd1cmVBcHAiLCJjaGVja0FwcFByZXNlbnQiLCJhcHBPbkRldmljZSIsImluZm8iLCJjaGVja1BhY2thZ2VQcmVzZW50IiwidXRpbCIsImhhc1ZhbHVlIiwibmV0d29ya1NwZWVkIiwiaXNFbXVsYXRvciIsImVuc3VyZU5ldHdvcmtTcGVlZCIsImdwc0VuYWJsZWQiLCJ0b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyIiwic3RhcnRBbmRyb2lkU2Vzc2lvbiIsImUiLCJkZWxldGVTZXNzaW9uIiwiaWduIiwiYXZkIiwiZGV2aWNlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJwbGF0Zm9ybVZlcnNpb24iLCJhdmREZXZpY2UiLCJyZXBsYWNlIiwiaXNDaHJvbWVCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJrZXkiLCJ2YWx1ZSIsInNldENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkiLCJkZWZhdWx0SU1FIiwiaW5pdERldmljZSIsImN1ckRldmljZUlkIiwiZGV2aWNlVURJRCIsImdldFBsYXRmb3JtVmVyc2lvbiIsImRldmljZVNjcmVlblNpemUiLCJnZXRTY3JlZW5TaXplIiwiZGV2aWNlTW9kZWwiLCJnZXRNb2RlbCIsImRldmljZU1hbnVmYWN0dXJlciIsImdldE1hbnVmYWN0dXJlciIsImRpc2FibGVXaW5kb3dBbmltYXRpb24iLCJpc0FuaW1hdGlvbk9uIiwic2V0SGlkZGVuQXBpUG9saWN5IiwiaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IiLCJzZXRBbmltYXRpb25TdGF0ZSIsIl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCIsImluaXRBVVQiLCJib290c3RyYXAiLCJ3ZWJzb2NrZXQiLCJzdGFydCIsImFjY2VwdFNzbENlcnRzIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJjYXRjaCIsImVyciIsImlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biIsInN0YXJ0VW5leHBlY3RlZFNodXRkb3duIiwic2tpcFVubG9jayIsInVubG9jayIsInVwZGF0ZSIsInN0YXJ0Q2hyb21lU2Vzc2lvbiIsInN0YXJ0QVVUIiwib3JpZW50YXRpb24iLCJkZWJ1ZyIsInNldE9yaWVudGF0aW9uIiwiaW5pdEF1dG9XZWJ2aWV3IiwiYXV0b1dlYnZpZXciLCJ2aWV3TmFtZSIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsInRpbWVvdXQiLCJhdXRvV2Vidmlld1RpbWVvdXQiLCJyZXRyeUludGVydmFsIiwic2V0Q29udGV4dCIsImxhdW5jaEluZm8iLCJnZXRMYXVuY2hJbmZvIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJwYXJzZUFycmF5IiwiU0VUVElOR1NfSEVMUEVSX1BLR19JRCIsIm90aGVyQXBwcyIsIm1lc3NhZ2UiLCJCIiwiYWxsIiwibWFwIiwiaW5zdGFsbE90aGVyQXBrcyIsInJlc2V0QXBwIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbEFwayIsImFwa1N0cmluZ3NGb3JMYW5ndWFnZSIsInB1c2hTdHJpbmdzIiwibGFuZ3VhZ2UiLCJzaGFyZWRQcmVmZXJlbmNlcyIsInNldFNoYXJlZFByZWZlcmVuY2VzIiwiZnMiLCJleGlzdHMiLCJzaGVsbCIsImNvbXByZXNzIiwic2VuZEFjdGlvbiIsImNvbXByZXNzTGF5b3V0IiwiaXNFbXB0eSIsIl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzIiwic3RvcFJlY29yZGluZ1NjcmVlbiIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJmb3JjZVN0b3AiLCJnb1RvSG9tZSIsInNodXRkb3duIiwic3RvcExvZ2NhdCIsInNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3kiLCJhdmROYW1lIiwia2lsbEVtdWxhdG9yIiwic2hhcmVkUHJlZnMiLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlbW90ZVBhdGgiLCJyZW1vdGVGaWxlIiwibG9jYWxQYXRoIiwiYnVpbGRlciIsImdldFByZWZzQnVpbGRlciIsImJ1aWxkIiwicHJlZnMiLCJ0b0ZpbGUiLCJ1bmxpbmsiLCJTaGFyZWRQcmVmc0J1aWxkZXIiLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiY2FuUHJveHkiLCJpc0Z1bmN0aW9uIiwicHJveHlSZXFSZXMiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvZHJpdmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VEcml2ZXIsIERldmljZVNldHRpbmdzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgZGVzaXJlZENvbnN0cmFpbnRzIGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7XG4gIGhlbHBlcnMsIGVuc3VyZU5ldHdvcmtTcGVlZCxcbiAgU0VUVElOR1NfSEVMUEVSX1BLR19JRCxcbn0gZnJvbSAnLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERFRkFVTFRfQURCX1BPUlQgfSBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFNoYXJlZFByZWZzQnVpbGRlciB9IGZyb20gJ3NoYXJlZC1wcmVmZXJlbmNlcy1idWlsZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgQVBQX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IERFVklDRV9QT1JUID0gNDcyNDtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG9cbi8vIENocm9tZWRyaXZlclxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbl07XG5cbmNsYXNzIEFuZHJvaWREcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnLWFuZHJvaWQgdWlhdXRvbWF0b3InXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDb25zdHJhaW50cztcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IF8uY2xvbmUoTk9fUFJPWFkpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moe2lnbm9yZVVuaW1wb3J0YW50Vmlld3M6IGZhbHNlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307XG4gICAgdGhpcy51bmxvY2tlciA9IGhlbHBlcnMudW5sb2NrZXI7XG5cbiAgICBmb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICAgICAgQW5kcm9pZERyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xuICAgIH1cblxuICAgIC8vIG5lZWRzIHRvIGJlIGFmdGVyIHRoZSBsaW5lIHdoaWNoIGFzc2lnbnMgY29tbWFuZHMgdG8gQW5kcm9pZERyaXZlci5wcm90b3R5cGUsIHNvIHRoYXQgYHRoaXMuZGVmYXVsdENvbnRleHROYW1lYCBpcyBkZWZpbmVkLlxuICAgIHRoaXMuY3VyQ29udGV4dCA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgLy8gdGhlIHdob2xlIGNyZWF0ZVNlc3Npb24gZmxvdyBpcyBzdXJyb3VuZGVkIGluIGEgdHJ5LWNhdGNoIHN0YXRlbWVudFxuICAgIC8vIGlmIGNyZWF0aW5nIGEgc2Vzc2lvbiBmYWlscyBhdCBhbnkgcG9pbnQsIHdlIHRlYXJkb3duIGV2ZXJ5dGhpbmcgd2VcbiAgICAvLyBzZXQgdXAgYmVmb3JlIHRocm93aW5nIHRoZSBlcnJvci5cbiAgICB0cnkge1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogdGhpcy5jYXBzXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhcHMgPSBPYmplY3QuYXNzaWduKHNlcnZlckRldGFpbHMsIHRoaXMuY2Fwcyk7XG5cbiAgICAgIC8vIGFzc2lnbmluZyBkZWZhdWx0c1xuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBhY3Rpb246ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgICAgIGNhdGVnb3J5OiAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgICBmbGFnczogJzB4MTAyMDAwMDAnLFxuICAgICAgICBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzOiBmYWxzZSxcbiAgICAgICAgdG1wRGlyOiBhd2FpdCB0ZW1wRGlyLnN0YXRpY0RpcigpLFxuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBib290c3RyYXBQb3J0OiBERVZJQ0VfUE9SVCxcbiAgICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiA5MDAwMCxcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuICAgICAgdGhpcy51c2VVbmxvY2tIZWxwZXJBcHAgPSBfLmlzVW5kZWZpbmVkKHRoaXMuY2Fwcy51bmxvY2tUeXBlKTtcblxuICAgICAgLy8gbm90IHVzZXIgdmlzaWJsZSB2aWEgY2Fwc1xuICAgICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdHMuZmFzdFJlc2V0ID0gIXRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5ub1Jlc2V0O1xuICAgICAgdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgPSB0aGlzLm9wdHMuZmFzdFJlc2V0IHx8IHRoaXMub3B0cy5ub1Jlc2V0O1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHModGhpcy5vcHRzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICAgIHRoaXMuandwUHJveHlBdm9pZC5wdXNoKFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NjcmVlbnNob3QnKV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICB0aGlzLnNldEF2ZEZyb21DYXBhYmlsaXRpZXMoY2Fwcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICBsZXQge3VkaWQsIGVtUG9ydH0gPSBhd2FpdCBoZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcblxuICAgICAgLy8gc2V0IHVwIGFuIGluc3RhbmNlIG9mIEFEQlxuICAgICAgdGhpcy5hZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUFEQih7XG4gICAgICAgIHVkaWQ6IHRoaXMub3B0cy51ZGlkLFxuICAgICAgICBlbVBvcnQ6IHRoaXMub3B0cy5lbVBvcnQsXG4gICAgICAgIGFkYlBvcnQ6IHRoaXMub3B0cy5hZGJQb3J0LFxuICAgICAgICBzdXBwcmVzc0tpbGxTZXJ2ZXI6IHRoaXMub3B0cy5zdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgICAgIHJlbW90ZUFkYkhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0LFxuICAgICAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0OiB0aGlzLm9wdHMuY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICAgICAgYWRiRXhlY1RpbWVvdXQ6IHRoaXMub3B0cy5hZGJFeGVjVGltZW91dCxcbiAgICAgICAgYWxsb3dPZmZsaW5lRGV2aWNlczogdGhpcy5vcHRzLmFsbG93T2ZmbGluZURldmljZXMsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjMpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihcIkNvbnNpZGVyIHNldHRpbmcgJ2F1dG9tYXRpb25OYW1lJyBjYXBhYmlsaXR5IHRvIFwiICtcbiAgICAgICAgICBcIid1aWF1dG9tYXRvcjInIG9uIEFuZHJvaWQgPj0gNiwgc2luY2UgVUlBdXRvbWF0b3IgZnJhbWV3b3JrIFwiICtcbiAgICAgICAgICAnaXMgbm90IG1haW50YWluZWQgYW55bW9yZSBieSB0aGUgT1MgdmVuZG9yLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICAgIC8vIHVzZXIgcHJvdmlkZWQgcGFja2FnZSBpbnN0ZWFkIG9mIGFwcCBmb3IgJ2FwcCcgY2FwYWJpbGl0eSwgbWFzc2FnZSBvcHRpb25zXG4gICAgICAgIHRoaXMub3B0cy5hcHBQYWNrYWdlID0gdGhpcy5vcHRzLmFwcDtcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgIC8vIGZpbmQgYW5kIGNvcHksIG9yIGRvd25sb2FkIGFuZCB1bnppcCBhbiBhcHAgdXJsIG9yIHBhdGhcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwgQVBQX0VYVEVOU0lPTik7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBQcmVzZW50KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIHRoaXMubG9nLmluZm8oYEFwcCBmaWxlIHdhcyBub3QgbGlzdGVkLCBpbnN0ZWFkIHdlJ3JlIGdvaW5nIHRvIHJ1biBgICtcbiAgICAgICAgICBgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGFja2FnZVByZXNlbnQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU29tZSBjbG91ZCBzZXJ2aWNlcyB1c2luZyBhcHBpdW0gbGF1bmNoIHRoZSBhdmQgdGhlbXNlbHZlcywgc28gd2UgZW5zdXJlIG5ldHNwZWVkXG4gICAgICAvLyBpcyBzZXQgZm9yIGVtdWxhdG9ycyBieSBjYWxsaW5nIGFkYi5uZXR3b3JrU3BlZWQgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcFxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm5ldHdvcmtTcGVlZCkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1NvcnJ5LCBuZXR3b3JrU3BlZWQgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbmV0d29ya1NwZWVkID0gZW5zdXJlTmV0d29ya1NwZWVkKHRoaXMuYWRiLCB0aGlzLm9wdHMubmV0d29ya1NwZWVkKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5uZXR3b3JrU3BlZWQobmV0d29ya1NwZWVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBlbmFibGUvZGlzYWJsZSBncHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuZ3BzRW5hYmxlZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgVHJ5aW5nIHRvICR7dGhpcy5vcHRzLmdwc0VuYWJsZWQgPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ30gZ3BzIGxvY2F0aW9uIHByb3ZpZGVyYCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIudG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlcih0aGlzLm9wdHMuZ3BzRW5hYmxlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybignU29ycnkhIGdwc0VuYWJsZWQgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydEFuZHJvaWRTZXNzaW9uKHRoaXMub3B0cyk7XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgdGhpcy5jYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmluZyBkZWxldGUgc2Vzc2lvbiBleGNlcHRpb24gaWYgYW55IGFuZCB0aHJvdyB0aGUgcmVhbCBlcnJvclxuICAgICAgLy8gdGhhdCBoYXBwZW5lZCB3aGlsZSBjcmVhdGluZyB0aGUgc2Vzc2lvbi5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBpc0VtdWxhdG9yICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0VtdWxhdG9yKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG5cbiAgc2V0QXZkRnJvbUNhcGFiaWxpdGllcyAoY2Fwcykge1xuICAgIGlmICh0aGlzLm9wdHMuYXZkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgZGV2aWNlTmFtZSBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWNhcHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBwbGF0Zm9ybVZlcnNpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGF2ZERldmljZSA9IGNhcHMuZGV2aWNlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV8uXS9nLCAnLScpO1xuICAgICAgdGhpcy5vcHRzLmF2ZCA9IGAke2F2ZERldmljZX1fXyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259YDtcbiAgICB9XG4gIH1cblxuICBnZXQgYXBwT25EZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkgfHwgKCF0aGlzLm9wdHMuYXBwICYmXG4gICAgICAgICAgIHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwUGFja2FnZSkpO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2lnbm9yZVVuaW1wb3J0YW50Vmlld3MnKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0QW5kcm9pZFNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nIEFuZHJvaWQgc2Vzc2lvbmApO1xuICAgIC8vIHNldCB1cCB0aGUgZGV2aWNlIHRvIHJ1biBvbiAocmVhbCBvciBlbXVsYXRvciwgZXRjKVxuICAgIHRoaXMuZGVmYXVsdElNRSA9IGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWQsIHBsYXRmb3JtIHZlcnNpb24sIHNjcmVlbiBzaXplLCBtb2RlbCBhbmQgbWFudWZhY3R1cmVyIGRldGFpbHMuXG4gICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSB0aGlzLmFkYi5jdXJEZXZpY2VJZDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlVURJRCA9IHRoaXMub3B0cy51ZGlkO1xuICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSBhd2FpdCB0aGlzLmFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuU2l6ZSA9IGF3YWl0IHRoaXMuYWRiLmdldFNjcmVlblNpemUoKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTW9kZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRNb2RlbCgpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNYW51ZmFjdHVyZXIgPSBhd2FpdCB0aGlzLmFkYi5nZXRNYW51ZmFjdHVyZXIoKTtcblxuICAgIGlmICh0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbikge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBUEkgbGV2ZWwgMjggaXMgQW5kcm9pZCBQXG4gICAgICAgICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIHJlc2V0IHRoZSByZWxheGluZyBpbiBkZWxldGUgc2Vzc2lvblxuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIG1hbmFnZSBhbmltYXRpb24gc2NhbGUnKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZy5pbmZvKCdEaXNhYmxpbmcgd2luZG93IGFuaW1hdGlvbiBhcyBpdCBpcyByZXF1ZXN0ZWQgYnkgXCJkaXNhYmxlV2luZG93QW5pbWF0aW9uXCIgY2FwYWJpbGl0eScpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1dpbmRvdyBhbmltYXRpb24gaXMgYWxyZWFkeSBkaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCB1cCBhcHAgdW5kZXIgdGVzdFxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy8gc3RhcnQgVWlBdXRvbWF0b3JcbiAgICB0aGlzLmJvb3RzdHJhcCA9IG5ldyBoZWxwZXJzLmJvb3RzdHJhcCh0aGlzLmFkYiwgdGhpcy5vcHRzLmJvb3RzdHJhcFBvcnQsIHRoaXMub3B0cy53ZWJzb2NrZXQpO1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnN0YXJ0KHRoaXMub3B0cy5hcHBQYWNrYWdlLCB0aGlzLm9wdHMuZGlzYWJsZUFuZHJvaWRXYXRjaGVycywgdGhpcy5vcHRzLmFjY2VwdFNzbENlcnRzKTtcbiAgICAvLyBoYW5kbGluZyB1bmV4cGVjdGVkIHNodXRkb3duXG4gICAgdGhpcy5ib290c3RyYXAub25VbmV4cGVjdGVkU2h1dGRvd24uY2F0Y2goYXN5bmMgKGVycikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgaWYgKCF0aGlzLmJvb3RzdHJhcC5pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgLy8gTGV0J3MgdHJ5IHRvIHVubG9jayB0aGUgZGV2aWNlXG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgQ29tcHJlc3NlZExheW91dEhpZXJhcmNoeSBvbiB0aGUgZGV2aWNlIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3Mgb2JqZWN0XG4gICAgLy8gdGhpcyBoYXMgdG8gaGFwcGVuIF9hZnRlcl8gYm9vdHN0cmFwIGlzIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMub3B0cy5pZ25vcmVVbmltcG9ydGFudFZpZXdzKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZSh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogdGhpcy5vcHRzLmlnbm9yZVVuaW1wb3J0YW50Vmlld3N9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgIC8vIHN0YXJ0IGEgY2hyb21lZHJpdmVyIHNlc3Npb24gYW5kIHByb3h5IHRvIGl0XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmF1dG9MYXVuY2gpIHtcbiAgICAgICAgLy8gc3RhcnQgYXBwXG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRBVVQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMub3JpZW50YXRpb24pKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke3RoaXMub3B0cy5vcmllbnRhdGlvbn0nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNldE9yaWVudGF0aW9uKHRoaXMub3B0cy5vcmllbnRhdGlvbik7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbml0QXV0b1dlYnZpZXcoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRBdXRvV2VidmlldyAoKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgbGV0IHZpZXdOYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgICAgIGxldCB0aW1lb3V0ID0gKHRoaXMub3B0cy5hdXRvV2Vidmlld1RpbWVvdXQpIHx8IDIwMDA7XG5cbiAgICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgYXV0byB3ZWJ2aWV3IHRvIGNvbnRleHQgJyR7dmlld05hbWV9JyB3aXRoIHRpbWVvdXQgJHt0aW1lb3V0fW1zYCk7XG5cbiAgICAgIC8vIHRyeSBldmVyeSA1MDBtcyB1bnRpbCB0aW1lb3V0IGlzIG92ZXJcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0Q29udGV4dCh2aWV3TmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBwb3B1bGF0ZSBhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSxcbiAgICAvLyBhbmQgdGhlIGRldmljZSBiZWluZyB1c2VkXG4gICAgLy8gaW4gdGhlIG9wdHMgYW5kIGNhcHMgKHNvIGl0IGdldHMgYmFjayB0byB0aGUgdXNlciBvbiBzZXNzaW9uIGNyZWF0aW9uKVxuICAgIGxldCBsYXVuY2hJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRzLCBsYXVuY2hJbmZvKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY2FwcywgbGF1bmNoSW5mbyk7XG5cbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKHRoaXMub3B0cyk7XG4gICAgICAvLyBPbmx5IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgcGFja2FnZSBpcyB1c2VkIGJ5IFVJQTFcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lEXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGFueSBcIm90aGVyQXBwc1wiIHRoYXQgd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBsZXQgb3RoZXJBcHBzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3RoZXJBcHBzID0gaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwcy5tYXAoKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsIEFQUF9FWFRFTlNJT04pKSk7XG4gICAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxPdGhlckFwa3Mob3RoZXJBcHBzLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG5cbiAgICAvLyBpbnN0YWxsIGFwcFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGNvbnN0IGFwa1N0cmluZ3NGb3JMYW5ndWFnZSA9IGF3YWl0IGhlbHBlcnMucHVzaFN0cmluZ3ModGhpcy5vcHRzLmxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBpZiAodGhpcy5vcHRzLmxhbmd1YWdlKSB7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbdGhpcy5vcHRzLmxhbmd1YWdlXSA9IGFwa1N0cmluZ3NGb3JMYW5ndWFnZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG11c3QgcnVuIGFmdGVyIGluc3RhbGxpbmcgdGhlIGFwaywgb3RoZXJ3aXNlIGl0IHdvdWxkIGNhdXNlIHRoZVxuICAgIC8vIGluc3RhbGwgdG8gZmFpbC4gQW5kIGJlZm9yZSBydW5uaW5nIHRoZSBhcHAuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcykpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0U2hhcmVkUHJlZmVyZW5jZXModGhpcy5vcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja0FwcFByZXNlbnQgKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIGFwcCBpcyBhY3R1YWxseSBwcmVzZW50Jyk7XG4gICAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgYXBwIGFwayBhdCAke3RoaXMub3B0cy5hcHB9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tQYWNrYWdlUHJlc2VudCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgcGFja2FnZSBpcyBwcmVzZW50IG9uIHRoZSBkZXZpY2UnKTtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnLCB0aGlzLm9wdHMuYXBwUGFja2FnZV0pKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgcGFja2FnZSAke3RoaXMub3B0cy5hcHBQYWNrYWdlfSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgb24gdGhlIGRldmljZVxuICBhc3luYyBzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IChjb21wcmVzcykge1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2NvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHknLCB7Y29tcHJlc3NMYXlvdXQ6IGNvbXByZXNzfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biBBbmRyb2lkIGRyaXZlcicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcFJlY29yZGluZ1NjcmVlbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cblxuICAgIGF3YWl0IGhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBhd2FpdCB0aGlzLm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcblxuICAgIGlmICh0aGlzLmJvb3RzdHJhcCkge1xuICAgICAgLy8gY2VydGFpbiBjbGVhbnVwIHdlIG9ubHkgY2FyZSB0byBkbyBpZiB0aGUgYm9vdHN0cmFwIHdhcyBldmVyIHJ1blxuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgICAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQgJiYgdGhpcy5vcHRzLnJlc2V0S2V5Ym9hcmQgJiYgdGhpcy5kZWZhdWx0SU1FKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICR7dGhpcy5kZWZhdWx0SU1FfWApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8uc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNDaHJvbWVTZXNzaW9uICYmICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGI/LmdvVG9Ib21lKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgJiYgIXRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zaHV0ZG93bigpO1xuICAgICAgdGhpcy5ib290c3RyYXAgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhcIkNhbGxlZCBkZWxldGVTZXNzaW9uIGJ1dCBib290c3RyYXAgd2Fzbid0IGFjdGl2ZVwiKTtcbiAgICB9XG4gICAgLy8gc29tZSBjbGVhbnVwIHdlIHdhbnQgdG8gZG8gcmVnYXJkbGVzcywgaW4gY2FzZSB3ZSBhcmUgc2h1dHRpbmcgZG93blxuICAgIC8vIG1pZC1zdGFydHVwXG4gICAgYXdhaXQgdGhpcy5hZGI/LnN0b3BMb2djYXQoKTtcbiAgICBpZiAodGhpcy51c2VVbmxvY2tIZWxwZXJBcHApIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5mb3JjZVN0b3AoJ2lvLmFwcGl1bS51bmxvY2snKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3Jpbmcgd2luZG93IGFuaW1hdGlvbiBzdGF0ZScpO1xuICAgICAgYXdhaXQgdGhpcy5hZGI/LnNldEFuaW1hdGlvblN0YXRlKHRydWUpO1xuXG4gICAgICAvLyBUaGlzIHdhcyBuZWNlc3NhcnkgdG8gY2hhbmdlIGFuaW1hdGlvbiBzY2FsZSBvdmVyIEFuZHJvaWQgUC4gV2UgbXVzdCByZXNldCB0aGUgcG9saWN5IGZvciB0aGUgc2VjdXJpdHkuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGI/LmdldEFwaUxldmVsKCkgPj0gMjgpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIHRoZSBkZXZpY2UgZGVmYXVsdCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgY2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2V0U2hhcmVkUHJlZmVyZW5jZXMgKCkge1xuICAgIGxldCBzaGFyZWRQcmVmcyA9IHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcztcbiAgICB0aGlzLmxvZy5pbmZvKCdUcnlpbmcgdG8gc2V0IHNoYXJlZCBwcmVmZXJlbmNlcycpO1xuICAgIGxldCBuYW1lID0gc2hhcmVkUHJlZnMubmFtZTtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgdGhpcy5sb2cud2FybihgU2tpcHBpbmcgc2V0dGluZyBTaGFyZWQgcHJlZmVyZW5jZXMsIG5hbWUgaXMgdW5kZWZpbmVkOiAke0pTT04uc3RyaW5naWZ5KHNoYXJlZFByZWZzKX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHJlbW90ZVBhdGggPSBgL2RhdGEvZGF0YS8ke3RoaXMub3B0cy5hcHBQYWNrYWdlfS9zaGFyZWRfcHJlZnNgO1xuICAgIGxldCByZW1vdGVGaWxlID0gYCR7cmVtb3RlUGF0aH0vJHtuYW1lfS54bWxgO1xuICAgIGxldCBsb2NhbFBhdGggPSBgL3RtcC8ke25hbWV9LnhtbGA7XG4gICAgbGV0IGJ1aWxkZXIgPSB0aGlzLmdldFByZWZzQnVpbGRlcigpO1xuICAgIGJ1aWxkZXIuYnVpbGQoc2hhcmVkUHJlZnMucHJlZnMpO1xuICAgIHRoaXMubG9nLmluZm8oYENyZWF0aW5nIHRlbXBvcmFyeSBzaGFyZWQgcHJlZmVyZW5jZXM6ICR7bG9jYWxQYXRofWApO1xuICAgIGJ1aWxkZXIudG9GaWxlKGxvY2FsUGF0aCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgQ3JlYXRpbmcgc2hhcmVkX3ByZWZzIHJlbW90ZSBmb2xkZXI6ICR7cmVtb3RlUGF0aH1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ21rZGlyJywgJy1wJywgcmVtb3RlUGF0aF0pO1xuICAgIHRoaXMubG9nLmluZm8oYFB1c2hpbmcgc2hhcmVkX3ByZWZzIHRvICR7cmVtb3RlRmlsZX1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsUGF0aCwgcmVtb3RlRmlsZSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFRyeWluZyB0byByZW1vdmUgc2hhcmVkIHByZWZlcmVuY2VzIHRlbXBvcmFyeSBmaWxlYCk7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsUGF0aCkpIHtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKGxvY2FsUGF0aCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgRXJyb3IgdHJ5aW5nIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZSAke2xvY2FsUGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcmVmc0J1aWxkZXIgKCkge1xuICAgIC8qIEFkZCB0aGlzIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgU2hhcmVkUHJlZnNCdWlsZGVyIGluc3RlYWQgb2ZcbiAgICAgKiBkaXJlY3RseSBjcmVhdGluZyB0aGUgb2JqZWN0IG9uIHNldFNoYXJlZFByZWZlcmVuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzXG4gICAgKi9cbiAgICByZXR1cm4gbmV3IFNoYXJlZFByZWZzQnVpbGRlcigpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoKCFjYXBzLmJyb3dzZXJOYW1lIHx8ICFoZWxwZXJzLmlzQ2hyb21lQnJvd3NlcihjYXBzLmJyb3dzZXJOYW1lKSkgJiYgIWNhcHMuYXBwICYmICFjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ1RoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBtdXN0IGluY2x1ZGUgZWl0aGVyIGFuIGFwcCwgYXBwUGFja2FnZSBvciBicm93c2VyTmFtZScpO1xuICAgIH1cbiAgICByZXR1cm4gaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpO1xuICB9XG5cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGNhblByb3h5IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5jYW5Qcm94eShzZXNzaW9uSWQpO1xuXG4gICAgLy8gdGhpcyB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgb24gQ2hyb21lRHJpdmVyIHN0YXR1c1xuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odGhpcy5wcm94eVJlcVJlcyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQW5kcm9pZERyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZERyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxhQUFhLEdBQUcsTUFBdEI7QUFDQSxNQUFNQyxXQUFXLEdBQUcsSUFBcEI7QUFJQSxNQUFNQyxRQUFRLEdBQUcsQ0FDZixDQUFDLE1BQUQsRUFBUyxJQUFJQyxNQUFKLENBQVcseUJBQVgsQ0FBVCxDQURlLEVBRWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLHlCQUFYLENBQVIsQ0FGZSxFQUdmLENBQUMsTUFBRCxFQUFTLElBQUlBLE1BQUosQ0FBVyx3QkFBWCxDQUFULENBSGUsRUFJZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsd0JBQVgsQ0FBUixDQUplLEVBS2YsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLCtCQUFYLENBQVQsQ0FMZSxFQU1mLENBQUMsTUFBRCxFQUFTLElBQUlBLE1BQUosQ0FBVyxxQ0FBWCxDQUFULENBTmUsRUFPZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkJBQVgsQ0FB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
@@ -7,7 +7,7 @@ exports.default = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
10
- var _support = require("@appium/support");
10
+ var _support = require("appium/support");
11
11
 
12
12
  const log = _support.logger.getLogger('AndroidDriver');
13
13
 
@@ -15,4 +15,4 @@ var _default = log;
15
15
  exports.default = _default;require('source-map-support').install();
16
16
 
17
17
 
18
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0FuZHJvaWREcml2ZXInKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQSxNQUFNQSxHQUFHLEdBQUdDLGVBQUEsQ0FBT0MsU0FBUCxDQUFpQixlQUFqQixDQUFaOztlQUVlRixHIn0=
18
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignQW5kcm9pZERyaXZlcicpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBLE1BQU1BLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLGVBQWpCLENBQVo7O2VBRWVGLEcifQ==
@@ -11,7 +11,7 @@ require("source-map-support/register");
11
11
 
12
12
  var _events = _interopRequireDefault(require("events"));
13
13
 
14
- var _support = require("@appium/support");
14
+ var _support = require("appium/support");
15
15
 
16
16
  const log = _support.logger.getLogger('UiAutomator');
17
17
 
@@ -120,4 +120,4 @@ var _default = UiAutomator;
120
120
  exports.default = _default;require('source-map-support').install();
121
121
 
122
122
 
123
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3VpYXV0b21hdG9yLmpzIiwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiVWlBdXRvbWF0b3IiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImFkYiIsImVycm9yQW5kVGhyb3ciLCJ0ZW1wUGF0aCIsInN0YXJ0IiwidWlBdXRvbWF0b3JCaW5hcnlQYXRoIiwiY2xhc3NOYW1lIiwic3RhcnREZXRlY3RvciIsImV4dHJhUGFyYW1zIiwicHJvY2Vzc0lzQWxpdmUiLCJkZWJ1ZyIsImNoYW5nZVN0YXRlIiwiU1RBVEVfU1RBUlRJTkciLCJqYXJOYW1lIiwicGFyc2VKYXJOYW1lRnJvbVBhdGgiLCJwdXNoIiwia2lsbFVpQXV0b21hdG9yT25EZXZpY2UiLCJhcmdzIiwicHJvYyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJTVEFURV9TVE9QUElORyIsIm1zZyIsImVycm9yIiwiU1RBVEVfT05MSU5FIiwiZSIsImVtaXQiLCJFVkVOVF9FUlJPUiIsInN0b3AiLCJzaHV0ZG93biIsImJpbmFyeVBhdGgiLCJyZVRlc3QiLCJleGVjIiwiRXJyb3IiLCJFVkVOVF9DSEFOR0VEIiwia2lsbFByb2Nlc3Nlc0J5TmFtZSIsIndhcm4iXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvdWlhdXRvbWF0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdVaUF1dG9tYXRvcicpO1xuXG5jbGFzcyBVaUF1dG9tYXRvciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoYWRiKSB7XG4gICAgaWYgKCFhZGIpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KCdhZGIgaXMgcmVxdWlyZWQgdG8gaW5zdGFudGlhdGUgVWlBdXRvbWF0b3InKTtcbiAgICB9XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkYiA9IGFkYjtcbiAgICB0aGlzLnRlbXBQYXRoID0gJy9kYXRhL2xvY2FsL3RtcC8nO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKHVpQXV0b21hdG9yQmluYXJ5UGF0aCwgY2xhc3NOYW1lLCBzdGFydERldGVjdG9yLCAuLi5leHRyYVBhcmFtcykge1xuICAgIGxldCBwcm9jZXNzSXNBbGl2ZTtcbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKCdTdGFydGluZyBVaUF1dG9tYXRvcicpO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVEFSVElORyk7XG5cbiAgICAgIGxvZy5kZWJ1ZygnUGFyc2luZyB1aWF1dG9tYXRvciBqYXInKTtcbiAgICAgIC8vIGV4cGVjdGluZyBhIHBhdGggbGlrZSAvYWRzL2Fkcy9mb28uamFyIG9yIFxcYXNkXFxhc2RcXGZvby5qYXJcbiAgICAgIGxldCBqYXJOYW1lID0gdGhpcy5wYXJzZUphck5hbWVGcm9tUGF0aCh1aUF1dG9tYXRvckJpbmFyeVBhdGgpO1xuICAgICAgYXdhaXQgdGhpcy5hZGIucHVzaCh1aUF1dG9tYXRvckJpbmFyeVBhdGgsIHRoaXMudGVtcFBhdGgpO1xuXG4gICAgICAvLyBraWxsaW5nIGFueSB1aWF1dG9tYXRvciBleGlzdGluZyBwcm9jZXNzZXNcbiAgICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcblxuICAgICAgbG9nLmRlYnVnKCdTdGFydGluZyBVSUF1dG9tYXRvcicpO1xuICAgICAgbGV0IGFyZ3MgPSBbJ3NoZWxsJywgJ3VpYXV0b21hdG9yJywgJ3J1bnRlc3QnLCBqYXJOYW1lLCAnLWMnLCBjbGFzc05hbWUsIC4uLmV4dHJhUGFyYW1zXTtcbiAgICAgIHRoaXMucHJvYyA9IHRoaXMuYWRiLmNyZWF0ZVN1YlByb2Nlc3MoYXJncyk7XG5cbiAgICAgIC8vIGhhbmRsZSBvdXQtb2YtYm91bmQgZXhpdCBieSBzaW1wbHkgZW1pdHRpbmcgYSBzdG9wcGVkIHN0YXRlXG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHByb2Nlc3NJc0FsaXZlID0gZmFsc2U7XG4gICAgICAgIC8vIGNsZWFudXBcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVaUF1dG9tYXRvciBleGl0ZWQgdW5leHBlY3RlZGx5IHdpdGggY29kZSAke2NvZGV9LCBgICtcbiAgICAgICAgICAgICAgICAgICAgYHNpZ25hbCAke3NpZ25hbH1gO1xuICAgICAgICAgIGxvZy5lcnJvcihtc2cpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKCdVaUF1dG9tYXRvciBzaHV0IGRvd24gbm9ybWFsbHknKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydChzdGFydERldGVjdG9yKTtcbiAgICAgIHByb2Nlc3NJc0FsaXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfT05MSU5FKTtcbiAgICAgIHJldHVybiB0aGlzLnByb2M7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5lbWl0KFVpQXV0b21hdG9yLkVWRU5UX0VSUk9SLCBlKTtcbiAgICAgIGlmIChwcm9jZXNzSXNBbGl2ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzaHV0ZG93biAoKSB7XG4gICAgbG9nLmRlYnVnKCdTaHV0dGluZyBkb3duIFVpQXV0b21hdG9yJyk7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpO1xuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCk7XG4gIH1cblxuICBwYXJzZUphck5hbWVGcm9tUGF0aCAoYmluYXJ5UGF0aCkge1xuICAgIGxldCByZVRlc3QgPSAvLiooXFwvfFxcXFwpKC4qXFwuamFyKS8uZXhlYyhiaW5hcnlQYXRoKTtcbiAgICBpZiAoIXJlVGVzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgamFyIG5hbWUgZnJvbSAke2JpbmFyeVBhdGh9YCk7XG4gICAgfVxuICAgIGxldCBqYXJOYW1lID0gcmVUZXN0WzJdO1xuICAgIGxvZy5kZWJ1ZyhgRm91bmQgamFyIG5hbWU6ICcke2phck5hbWV9J2ApO1xuICAgIHJldHVybiBqYXJOYW1lO1xuICB9XG5cbiAgY2hhbmdlU3RhdGUgKHN0YXRlKSB7XG4gICAgbG9nLmRlYnVnKGBNb3ZpbmcgdG8gc3RhdGUgJyR7c3RhdGV9J2ApO1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmVtaXQoVWlBdXRvbWF0b3IuRVZFTlRfQ0hBTkdFRCwge3N0YXRlfSk7XG4gIH1cblxuICBhc3luYyBraWxsVWlBdXRvbWF0b3JPbkRldmljZSAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxQcm9jZXNzZXNCeU5hbWUoJ3VpYXV0b21hdG9yJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oYEVycm9yIHdoaWxlIGtpbGxpbmcgdWlBdXRvbWF0b3I6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxufVxuXG5VaUF1dG9tYXRvci5FVkVOVF9FUlJPUiA9ICd1aWF1dG9tYXRvcl9lcnJvcic7XG5VaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VEID0gJ3N0YXRlQ2hhbmdlZCc7XG5VaUF1dG9tYXRvci5TVEFURV9TVE9QUElORyA9ICdzdG9wcGluZyc7XG5VaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEID0gJ3N0b3BwZWQnO1xuVWlBdXRvbWF0b3IuU1RBVEVfU1RBUlRJTkcgPSAnc3RhcnRpbmcnO1xuVWlBdXRvbWF0b3IuU1RBVEVfT05MSU5FID0gJ29ubGluZSc7XG5cblxuZXhwb3J0IHsgVWlBdXRvbWF0b3IgfTtcbmV4cG9ydCBkZWZhdWx0IFVpQXV0b21hdG9yO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUdBLE1BQU1BLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLGFBQWpCLENBQVo7O0FBRUEsTUFBTUMsV0FBTixTQUEwQkMsZUFBQSxDQUFPQyxZQUFqQyxDQUE4QztFQUM1Q0MsV0FBVyxDQUFFQyxHQUFGLEVBQU87SUFDaEIsSUFBSSxDQUFDQSxHQUFMLEVBQVU7TUFDUlAsR0FBRyxDQUFDUSxhQUFKLENBQWtCLDRDQUFsQjtJQUNEOztJQUNEO0lBQ0EsS0FBS0QsR0FBTCxHQUFXQSxHQUFYO0lBQ0EsS0FBS0UsUUFBTCxHQUFnQixrQkFBaEI7RUFDRDs7RUFFVSxNQUFMQyxLQUFLLENBQUVDLHFCQUFGLEVBQXlCQyxTQUF6QixFQUFvQ0MsYUFBcEMsRUFBbUQsR0FBR0MsV0FBdEQsRUFBbUU7SUFD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
123
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3VpYXV0b21hdG9yLmpzIiwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiVWlBdXRvbWF0b3IiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImFkYiIsImVycm9yQW5kVGhyb3ciLCJ0ZW1wUGF0aCIsInN0YXJ0IiwidWlBdXRvbWF0b3JCaW5hcnlQYXRoIiwiY2xhc3NOYW1lIiwic3RhcnREZXRlY3RvciIsImV4dHJhUGFyYW1zIiwicHJvY2Vzc0lzQWxpdmUiLCJkZWJ1ZyIsImNoYW5nZVN0YXRlIiwiU1RBVEVfU1RBUlRJTkciLCJqYXJOYW1lIiwicGFyc2VKYXJOYW1lRnJvbVBhdGgiLCJwdXNoIiwia2lsbFVpQXV0b21hdG9yT25EZXZpY2UiLCJhcmdzIiwicHJvYyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJTVEFURV9TVE9QUElORyIsIm1zZyIsImVycm9yIiwiU1RBVEVfT05MSU5FIiwiZSIsImVtaXQiLCJFVkVOVF9FUlJPUiIsInN0b3AiLCJzaHV0ZG93biIsImJpbmFyeVBhdGgiLCJyZVRlc3QiLCJleGVjIiwiRXJyb3IiLCJFVkVOVF9DSEFOR0VEIiwia2lsbFByb2Nlc3Nlc0J5TmFtZSIsIndhcm4iXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvdWlhdXRvbWF0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1VpQXV0b21hdG9yJyk7XG5cbmNsYXNzIFVpQXV0b21hdG9yIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChhZGIpIHtcbiAgICBpZiAoIWFkYikge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ2FkYiBpcyByZXF1aXJlZCB0byBpbnN0YW50aWF0ZSBVaUF1dG9tYXRvcicpO1xuICAgIH1cbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMudGVtcFBhdGggPSAnL2RhdGEvbG9jYWwvdG1wLyc7XG4gIH1cblxuICBhc3luYyBzdGFydCAodWlBdXRvbWF0b3JCaW5hcnlQYXRoLCBjbGFzc05hbWUsIHN0YXJ0RGV0ZWN0b3IsIC4uLmV4dHJhUGFyYW1zKSB7XG4gICAgbGV0IHByb2Nlc3NJc0FsaXZlO1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVpQXV0b21hdG9yJyk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUQVJUSU5HKTtcblxuICAgICAgbG9nLmRlYnVnKCdQYXJzaW5nIHVpYXV0b21hdG9yIGphcicpO1xuICAgICAgLy8gZXhwZWN0aW5nIGEgcGF0aCBsaWtlIC9hZHMvYWRzL2Zvby5qYXIgb3IgXFxhc2RcXGFzZFxcZm9vLmphclxuICAgICAgbGV0IGphck5hbWUgPSB0aGlzLnBhcnNlSmFyTmFtZUZyb21QYXRoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCwgdGhpcy50ZW1wUGF0aCk7XG5cbiAgICAgIC8vIGtpbGxpbmcgYW55IHVpYXV0b21hdG9yIGV4aXN0aW5nIHByb2Nlc3Nlc1xuICAgICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuXG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVJQXV0b21hdG9yJyk7XG4gICAgICBsZXQgYXJncyA9IFsnc2hlbGwnLCAndWlhdXRvbWF0b3InLCAncnVudGVzdCcsIGphck5hbWUsICctYycsIGNsYXNzTmFtZSwgLi4uZXh0cmFQYXJhbXNdO1xuICAgICAgdGhpcy5wcm9jID0gdGhpcy5hZGIuY3JlYXRlU3ViUHJvY2VzcyhhcmdzKTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgLy8gY2xlYW51cFxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsZXQgbXNnID0gYFVpQXV0b21hdG9yIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX0sIGAgK1xuICAgICAgICAgICAgICAgICAgICBgc2lnbmFsICR7c2lnbmFsfWA7XG4gICAgICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ1VpQXV0b21hdG9yIHNodXQgZG93biBub3JtYWxseScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgcHJvY2Vzc0lzQWxpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9PTkxJTkUpO1xuICAgICAgcmV0dXJuIHRoaXMucHJvYztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmVtaXQoVWlBdXRvbWF0b3IuRVZFTlRfRVJST1IsIGUpO1xuICAgICAgaWYgKHByb2Nlc3NJc0FsaXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duICgpIHtcbiAgICBsb2cuZGVidWcoJ1NodXR0aW5nIGRvd24gVWlBdXRvbWF0b3InKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORyk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKTtcbiAgfVxuXG4gIHBhcnNlSmFyTmFtZUZyb21QYXRoIChiaW5hcnlQYXRoKSB7XG4gICAgbGV0IHJlVGVzdCA9IC8uKihcXC98XFxcXCkoLipcXC5qYXIpLy5leGVjKGJpbmFyeVBhdGgpO1xuICAgIGlmICghcmVUZXN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBqYXIgbmFtZSBmcm9tICR7YmluYXJ5UGF0aH1gKTtcbiAgICB9XG4gICAgbGV0IGphck5hbWUgPSByZVRlc3RbMl07XG4gICAgbG9nLmRlYnVnKGBGb3VuZCBqYXIgbmFtZTogJyR7amFyTmFtZX0nYCk7XG4gICAgcmV0dXJuIGphck5hbWU7XG4gIH1cblxuICBjaGFuZ2VTdGF0ZSAoc3RhdGUpIHtcbiAgICBsb2cuZGVidWcoYE1vdmluZyB0byBzdGF0ZSAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuZW1pdChVaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxVaUF1dG9tYXRvck9uRGV2aWNlICgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbFByb2Nlc3Nlc0J5TmFtZSgndWlhdXRvbWF0b3InKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgRXJyb3Igd2hpbGUga2lsbGluZyB1aUF1dG9tYXRvcjogJHtlfWApO1xuICAgIH1cbiAgfVxuXG59XG5cblVpQXV0b21hdG9yLkVWRU5UX0VSUk9SID0gJ3VpYXV0b21hdG9yX2Vycm9yJztcblVpQXV0b21hdG9yLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HID0gJ3N0b3BwaW5nJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQgPSAnc3RvcHBlZCc7XG5VaUF1dG9tYXRvci5TVEFURV9TVEFSVElORyA9ICdzdGFydGluZyc7XG5VaUF1dG9tYXRvci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcblxuXG5leHBvcnQgeyBVaUF1dG9tYXRvciB9O1xuZXhwb3J0IGRlZmF1bHQgVWlBdXRvbWF0b3I7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0EsTUFBTUEsR0FBRyxHQUFHQyxlQUFBLENBQU9DLFNBQVAsQ0FBaUIsYUFBakIsQ0FBWjs7QUFFQSxNQUFNQyxXQUFOLFNBQTBCQyxlQUFBLENBQU9DLFlBQWpDLENBQThDO0VBQzVDQyxXQUFXLENBQUVDLEdBQUYsRUFBTztJQUNoQixJQUFJLENBQUNBLEdBQUwsRUFBVTtNQUNSUCxHQUFHLENBQUNRLGFBQUosQ0FBa0IsNENBQWxCO0lBQ0Q7O0lBQ0Q7SUFDQSxLQUFLRCxHQUFMLEdBQVdBLEdBQVg7SUFDQSxLQUFLRSxRQUFMLEdBQWdCLGtCQUFoQjtFQUNEOztFQUVVLE1BQUxDLEtBQUssQ0FBRUMscUJBQUYsRUFBeUJDLFNBQXpCLEVBQW9DQyxhQUFwQyxFQUFtRCxHQUFHQyxXQUF0RCxFQUFtRTtJQUM1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