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
@@ -11,7 +11,7 @@ require("source-map-support/register");
11
11
 
12
12
  var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
- var _baseDriver = require("@appium/base-driver");
14
+ var _driver = require("appium/driver");
15
15
 
16
16
  var _bluebird = _interopRequireDefault(require("bluebird"));
17
17
 
@@ -197,7 +197,7 @@ commands.toggleLocationServices = async function toggleLocationServices() {
197
197
 
198
198
  await this.toggleSetting('LOCATION_SOURCE_SETTINGS', seq);
199
199
  } else {
200
- throw new _baseDriver.errors.NotYetImplementedError();
200
+ throw new _driver.errors.NotYetImplementedError();
201
201
  }
202
202
  };
203
203
 
@@ -256,4 +256,4 @@ var _default = extensions;
256
256
  exports.default = _default;require('source-map-support').install();
257
257
 
258
258
 
259
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL25ldHdvcmsuanMiLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiQUlSUExBTkVfTU9ERV9NQVNLIiwiV0lGSV9NQVNLIiwiREFUQV9NQVNLIiwiR0VPX0VQU0lMT04iLCJOdW1iZXIiLCJNSU5fVkFMVUUiLCJnZXROZXR3b3JrQ29ubmVjdGlvbiIsImxvZyIsImluZm8iLCJhaXJwbGFuZU1vZGVPbiIsImFkYiIsImlzQWlycGxhbmVNb2RlT24iLCJjb25uZWN0aW9uIiwid2lmaU9uIiwiaXNXaWZpT24iLCJkYXRhT24iLCJpc0RhdGFPbiIsInNldE5ldHdvcmtDb25uZWN0aW9uIiwidHlwZSIsInNob3VsZEVuYWJsZUFpcnBsYW5lTW9kZSIsInNob3VsZEVuYWJsZVdpZmkiLCJzaG91bGRFbmFibGVEYXRhQ29ubmVjdGlvbiIsImN1cnJlbnRTdGF0ZSIsImlzQWlycGxhbmVNb2RlRW5hYmxlZCIsImlzV2lGaUVuYWJsZWQiLCJpc0RhdGFFbmFibGVkIiwid3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QiLCJzZXRBaXJwbGFuZU1vZGUiLCJicm9hZGNhc3RBaXJwbGFuZU1vZGUiLCJzZXRXaWZpU3RhdGUiLCJzZXREYXRhU3RhdGUiLCJpc0VtdWxhdG9yIiwid2lmaSIsInRvZ2dsZURhdGEiLCJkYXRhIiwic2V0V2lmaUFuZERhdGEiLCJ0b2dnbGVXaUZpIiwidG9nZ2xlRmxpZ2h0TW9kZSIsImZsaWdodE1vZGUiLCJzZXRHZW9Mb2NhdGlvbiIsImxvY2F0aW9uIiwiZ2V0R2VvTG9jYXRpb24iLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImFsdGl0dWRlIiwibW9iaWxlUmVmcmVzaEdwc0NhY2hlIiwib3B0cyIsInRpbWVvdXRNcyIsInJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlIiwicGFyc2VGbG9hdCIsIktleUNvZGUiLCJVUCIsIkRPV04iLCJSSUdIVCIsIkNFTlRFUiIsInRvZ2dsZUxvY2F0aW9uU2VydmljZXMiLCJhcGkiLCJnZXRBcGlMZXZlbCIsInByb3ZpZGVycyIsImdldExvY2F0aW9uUHJvdmlkZXJzIiwiaXNHcHNFbmFibGVkIiwiaW5kZXhPZiIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJzZXEiLCJwdXNoIiwia2V5ZXZlbnQiLCJ0b2dnbGVTZXR0aW5nIiwiZXJyb3JzIiwiTm90WWV0SW1wbGVtZW50ZWRFcnJvciIsInNldHRpbmciLCJwcmVLZXlTZXEiLCJfIiwiaXNOdWxsIiwib3BlblNldHRpbmdzQWN0aXZpdHkiLCJrZXkiLCJkb0tleSIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkiLCJ3YWl0Rm9yTm90QWN0aXZpdHkiLCJpZ24iLCJiYWNrIiwiQiIsImRlbGF5Iiwid3JhcHBlZCIsImJvb3RzdHJhcCIsImlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biIsInJlc3RhcnQiLCJzdGFydCIsImRpc2FibGVBbmRyb2lkV2F0Y2hlcnMiLCJhY2NlcHRTc2xDZXJ0cyIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9uZXR3b3JrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb25zdCBBSVJQTEFORV9NT0RFX01BU0sgPSAwYjAwMTtcbmNvbnN0IFdJRklfTUFTSyA9IDBiMDEwO1xuY29uc3QgREFUQV9NQVNLID0gMGIxMDA7XG4vLyBUaGUgdmFsdWUgY2xvc2UgdG8gemVybywgYnV0IG5vdCB6ZXJvLCBpcyBuZWVkZWRcbi8vIHRvIHRyaWNrIEpTT04gZ2VuZXJhdGlvbiBhbmQgc2VuZCBhIGZsb2F0IHZhbHVlIGluc3RlYWQgb2YgYW4gaW50ZWdlcixcbi8vIFRoaXMgYWxsb3dzIHN0cmljdGx5LXR5cGVkIGNsaWVudHMsIGxpa2UgSmF2YSwgdG8gcHJvcGVybHlcbi8vIHBhcnNlIGl0LiBPdGhlcndpc2UgZmxvYXQgMC4wIGlzIGFsd2F5cyByZXByZXNlbnRlZCBhcyBpbnRlZ2VyIDAgaW4gSlMuXG4vLyBUaGUgdmFsdWUgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIERCTF9FUFNJTE9OIChodHRwczovL29wZW5zb3VyY2UuYXBwbGUuY29tL3NvdXJjZS9MaWJjL0xpYmMtNDk4L2luY2x1ZGUvZmxvYXQuaClcbmNvbnN0IEdFT19FUFNJTE9OID0gTnVtYmVyLk1JTl9WQUxVRTtcblxuY29tbWFuZHMuZ2V0TmV0d29ya0Nvbm5lY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBnZXROZXR3b3JrQ29ubmVjdGlvbiAoKSB7XG4gIHRoaXMubG9nLmluZm8oJ0dldHRpbmcgbmV0d29yayBjb25uZWN0aW9uJyk7XG4gIGxldCBhaXJwbGFuZU1vZGVPbiA9IGF3YWl0IHRoaXMuYWRiLmlzQWlycGxhbmVNb2RlT24oKTtcbiAgbGV0IGNvbm5lY3Rpb24gPSBhaXJwbGFuZU1vZGVPbiA/IEFJUlBMQU5FX01PREVfTUFTSyA6IDA7XG5cbiAgLy8gbm8gbmVlZCB0byBjaGVjayBhbnl0aGluZyBlbHNlIGlmIHdlIGFyZSBpbiBhaXJwbGFuZSBtb2RlXG4gIGlmICghYWlycGxhbmVNb2RlT24pIHtcbiAgICBsZXQgd2lmaU9uID0gYXdhaXQgdGhpcy5pc1dpZmlPbigpO1xuICAgIGNvbm5lY3Rpb24gfD0gKHdpZmlPbiA/IFdJRklfTUFTSyA6IDApO1xuICAgIGxldCBkYXRhT24gPSBhd2FpdCB0aGlzLmFkYi5pc0RhdGFPbigpO1xuICAgIGNvbm5lY3Rpb24gfD0gKGRhdGFPbiA/IERBVEFfTUFTSyA6IDApO1xuICB9XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG4vKipcbiAqIGRlY291cGxpbmcgdG8gb3ZlcnJpZGUgdGhlIGJlaGF2aW91ciBpbiBvdGhlciBkcml2ZXJzIGxpa2UgVWlBdXRvbWF0b3IyLlxuICovXG5jb21tYW5kcy5pc1dpZmlPbiA9IGFzeW5jIGZ1bmN0aW9uIGlzV2lmaU9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmlzV2lmaU9uKCk7XG59O1xuXG5jb21tYW5kcy5zZXROZXR3b3JrQ29ubmVjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHNldE5ldHdvcmtDb25uZWN0aW9uICh0eXBlKSB7XG4gIHRoaXMubG9nLmluZm8oJ1NldHRpbmcgbmV0d29yayBjb25uZWN0aW9uJyk7XG4gIC8vIGRlY29kZSB0aGUgaW5wdXRcbiAgY29uc3Qgc2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlID0gKHR5cGUgJiBBSVJQTEFORV9NT0RFX01BU0spICE9PSAwO1xuICBjb25zdCBzaG91bGRFbmFibGVXaWZpID0gKHR5cGUgJiBXSUZJX01BU0spICE9PSAwO1xuICBjb25zdCBzaG91bGRFbmFibGVEYXRhQ29ubmVjdGlvbiA9ICh0eXBlICYgREFUQV9NQVNLKSAhPT0gMDtcblxuICBjb25zdCBjdXJyZW50U3RhdGUgPSBhd2FpdCB0aGlzLmdldE5ldHdvcmtDb25uZWN0aW9uKCk7XG4gIGNvbnN0IGlzQWlycGxhbmVNb2RlRW5hYmxlZCA9IChjdXJyZW50U3RhdGUgJiBBSVJQTEFORV9NT0RFX01BU0spICE9PSAwO1xuICBjb25zdCBpc1dpRmlFbmFibGVkID0gKGN1cnJlbnRTdGF0ZSAmIFdJRklfTUFTSykgIT09IDA7XG4gIGNvbnN0IGlzRGF0YUVuYWJsZWQgPSAoY3VycmVudFN0YXRlICYgREFUQV9NQVNLKSAhPT0gMDtcblxuICBpZiAoc2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlICE9PSBpc0FpcnBsYW5lTW9kZUVuYWJsZWQpIHtcbiAgICBhd2FpdCB0aGlzLndyYXBCb290c3RyYXBEaXNjb25uZWN0KGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFpcnBsYW5lTW9kZShzaG91bGRFbmFibGVBaXJwbGFuZU1vZGUpO1xuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuYnJvYWRjYXN0QWlycGxhbmVNb2RlKHNob3VsZEVuYWJsZUFpcnBsYW5lTW9kZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgTm90IGNoYW5naW5nIGFpcnBsYW5lIG1vZGUsIHNpbmNlIGl0IGlzIGFscmVhZHkgYCArXG4gICAgICAgICAgICAgYCR7c2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ31gKTtcbiAgfVxuXG4gIGlmIChzaG91bGRFbmFibGVXaWZpID09PSBpc1dpRmlFbmFibGVkICYmIHNob3VsZEVuYWJsZURhdGFDb25uZWN0aW9uID09PSBpc0RhdGFFbmFibGVkKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnTm90IGNoYW5naW5nIGRhdGEgY29ubmVjdGlvbi9XaS1GaSBzdGF0ZXMsIHNpbmNlIHRoZXkgYXJlIGFscmVhZHkgc2V0IHRvIGV4cGVjdGVkIHZhbHVlcycpO1xuICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FpcnBsYW5lTW9kZU9uKCkpIHtcbiAgICAgIHJldHVybiBBSVJQTEFORV9NT0RFX01BU0sgfCBjdXJyZW50U3RhdGU7XG4gICAgfVxuICAgIHJldHVybiB+QUlSUExBTkVfTU9ERV9NQVNLICYgY3VycmVudFN0YXRlO1xuICB9XG5cbiAgYXdhaXQgdGhpcy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdChhc3luYyAoKSA9PiB7XG4gICAgaWYgKHNob3VsZEVuYWJsZVdpZmkgIT09IGlzV2lGaUVuYWJsZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0V2lmaVN0YXRlKHNob3VsZEVuYWJsZVdpZmkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBOb3QgY2hhbmdpbmcgV2ktRmkgc3RhdGUsIHNpbmNlIGl0IGlzIGFscmVhZHkgYCArXG4gICAgICAgIGAke3Nob3VsZEVuYWJsZVdpZmkgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnfWApO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRFbmFibGVBaXJwbGFuZU1vZGUpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ05vdCBjaGFuZ2luZyBkYXRhIGNvbm5lY3Rpb24gc3RhdGUsIGJlY2F1c2UgYWlycGxhbmUgbW9kZSBpcyBlbmFibGVkJyk7XG4gICAgfSBlbHNlIGlmIChzaG91bGRFbmFibGVEYXRhQ29ubmVjdGlvbiA9PT0gaXNEYXRhRW5hYmxlZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgTm90IGNoYW5naW5nIGRhdGEgY29ubmVjdGlvbiBzdGF0ZSwgc2luY2UgaXQgaXMgYWxyZWFkeSBgICtcbiAgICAgICAgYCR7c2hvdWxkRW5hYmxlRGF0YUNvbm5lY3Rpb24gPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXREYXRhU3RhdGUoc2hvdWxkRW5hYmxlRGF0YUNvbm5lY3Rpb24sIHRoaXMuaXNFbXVsYXRvcigpKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLmdldE5ldHdvcmtDb25uZWN0aW9uKCk7XG59O1xuXG4vKipcbiAqIGRlY291cGxpbmcgdG8gb3ZlcnJpZGUgYmVoYXZpb3VyIGluIG90aGVyIGRyaXZlcnMgbGlrZSBVaUF1dG9tYXRvcjIuXG4gKi9cbmNvbW1hbmRzLnNldFdpZmlTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFdpZmlTdGF0ZSAod2lmaSkge1xuICBhd2FpdCB0aGlzLmFkYi5zZXRXaWZpU3RhdGUod2lmaSwgdGhpcy5pc0VtdWxhdG9yKCkpO1xufTtcblxuY29tbWFuZHMudG9nZ2xlRGF0YSA9IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZURhdGEgKCkge1xuICBsZXQgZGF0YSA9ICEoYXdhaXQgdGhpcy5hZGIuaXNEYXRhT24oKSk7XG4gIHRoaXMubG9nLmluZm8oYFR1cm5pbmcgbmV0d29yayBkYXRhICR7ZGF0YSA/ICdvbicgOiAnb2ZmJ31gKTtcbiAgYXdhaXQgdGhpcy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2V0V2lmaUFuZERhdGEoe2RhdGF9LCB0aGlzLmlzRW11bGF0b3IoKSk7XG4gIH0pO1xufTtcblxuY29tbWFuZHMudG9nZ2xlV2lGaSA9IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZVdpRmkgKCkge1xuICBsZXQgd2lmaSA9ICEoYXdhaXQgdGhpcy5hZGIuaXNXaWZpT24oKSk7XG4gIHRoaXMubG9nLmluZm8oYFR1cm5pbmcgV2lGaSAke3dpZmkgPyAnb24nIDogJ29mZid9YCk7XG4gIGF3YWl0IHRoaXMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QoYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHRoaXMuYWRiLnNldFdpZmlBbmREYXRhKHt3aWZpfSwgdGhpcy5pc0VtdWxhdG9yKCkpO1xuICB9KTtcbn07XG5cbmNvbW1hbmRzLnRvZ2dsZUZsaWdodE1vZGUgPSBhc3luYyBmdW5jdGlvbiB0b2dnbGVGbGlnaHRNb2RlICgpIHtcbiAgLypcbiAgICogVE9ETzogSW1wbGVtZW50IGlzUmVhbERldmljZSgpLiBUaGlzIG1ldGhvZCBmYWlscyBvblxuICAgKiByZWFsIGRldmljZXMsIGl0IHNob3VsZCB0aHJvdyBhIE5vdFlldEltcGxlbWVudGVkRXJyb3JcbiAgICovXG4gIGxldCBmbGlnaHRNb2RlID0gIShhd2FpdCB0aGlzLmFkYi5pc0FpcnBsYW5lTW9kZU9uKCkpO1xuICB0aGlzLmxvZy5pbmZvKGBUdXJuaW5nIGZsaWdodCBtb2RlICR7ZmxpZ2h0TW9kZSA/ICdvbicgOiAnb2ZmJ31gKTtcbiAgYXdhaXQgdGhpcy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2V0QWlycGxhbmVNb2RlKGZsaWdodE1vZGUpO1xuICB9KTtcbiAgYXdhaXQgdGhpcy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5hZGIuYnJvYWRjYXN0QWlycGxhbmVNb2RlKGZsaWdodE1vZGUpO1xuICB9KTtcbn07XG5cbmNvbW1hbmRzLnNldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0R2VvTG9jYXRpb24gKGxvY2F0aW9uKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnNldEdlb0xvY2F0aW9uKGxvY2F0aW9uLCB0aGlzLmlzRW11bGF0b3IoKSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0R2VvTG9jYXRpb24oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMubG9nLndhcm4oYENvdWxkIG5vdCBnZXQgdGhlIGN1cnJlbnQgZ2VvbG9jYXRpb24gaW5mbzogJHtlLm1lc3NhZ2V9YCk7XG4gICAgdGhpcy5sb2cud2FybihgUmV0dXJuaW5nIHRoZSBkZWZhdWx0IHplcm8nZWQgdmFsdWVzYCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdGl0dWRlOiBHRU9fRVBTSUxPTixcbiAgICAgIGxvbmdpdHVkZTogR0VPX0VQU0lMT04sXG4gICAgICBhbHRpdHVkZTogR0VPX0VQU0lMT04sXG4gICAgfTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBHcHNDYWNoZVJlZnJlc2hPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dE1zIFsyMDAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gYmxvY2sgdW50aWwgR1BTIGNhY2hlIGlzIHJlZnJlc2hlZC4gUHJvdmlkaW5nIHplcm8gb3IgYSBuZWdhdGl2ZVxuICogdmFsdWUgdG8gaXQgc2tpcHMgd2FpdGluZyBjb21wbGV0ZWx5LlxuICovXG5cbi8qKlxuICogU2VuZHMgYW4gYXN5bmMgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBHUFMgY2FjaGUuXG4gKiBUaGlzIGZlYXR1cmUgb25seSB3b3JrcyBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QgaGFzXG4gKiBHb29nbGUgUGxheSBTZXJ2aWNlcyBpbnN0YWxsZWQuIEluIGNhc2UgdGhlIHZhbmlsbGFcbiAqIExvY2F0aW9uTWFuYWdlciBpcyB1c2VkIHRoZSBkZXZpY2UgQVBJIGxldmVsIG11c3QgYmUgYXRcbiAqIHZlcnNpb24gMzAgKEFuZHJvaWQgUikgb3IgaGlnaGVyLlxuICpcbiAqIEBwYXJhbSB7R3BzQ2FjaGVSZWZyZXNoT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tb2JpbGVSZWZyZXNoR3BzQ2FjaGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSZWZyZXNoR3BzQ2FjaGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IHRpbWVvdXRNcyB9ID0gb3B0cztcbiAgYXdhaXQgdGhpcy5hZGIucmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUodGltZW91dE1zKTtcbn07XG5cbmNvbW1hbmRzLmdldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gZ2V0R2VvTG9jYXRpb24gKCkge1xuICBjb25zdCB7bGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGV9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0R2VvTG9jYXRpb24oKTtcbiAgcmV0dXJuIHtcbiAgICBsYXRpdHVkZTogcGFyc2VGbG9hdChsYXRpdHVkZSkgfHwgR0VPX0VQU0lMT04sXG4gICAgbG9uZ2l0dWRlOiBwYXJzZUZsb2F0KGxvbmdpdHVkZSkgfHwgR0VPX0VQU0lMT04sXG4gICAgYWx0aXR1ZGU6IHBhcnNlRmxvYXQoYWx0aXR1ZGUpIHx8IEdFT19FUFNJTE9OLFxuICB9O1xufTtcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3ZpZXcvS2V5RXZlbnQuaHRtbCNLRVlDT0RFX0RQQURfQ0VOVEVSXG4vLyBpbiB0aGUgYW5kcm9pZCBkb2NzLCB0aGlzIGlzIGhvdyB0aGUga2V5Y29kZXMgYXJlIGRlZmluZWRcbmNvbnN0IEtleUNvZGUgPSB7XG4gIFVQOiAxOSxcbiAgRE9XTjogMjAsXG4gIFJJR0hUOiAyMixcbiAgQ0VOVEVSOiAyM1xufTtcbmNvbW1hbmRzLnRvZ2dsZUxvY2F0aW9uU2VydmljZXMgPSBhc3luYyBmdW5jdGlvbiB0b2dnbGVMb2NhdGlvblNlcnZpY2VzICgpIHtcbiAgdGhpcy5sb2cuaW5mbygnVG9nZ2xpbmcgbG9jYXRpb24gc2VydmljZXMnKTtcbiAgbGV0IGFwaSA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gIGlmICh0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIGxldCBwcm92aWRlcnMgPSBhd2FpdCB0aGlzLmFkYi5nZXRMb2NhdGlvblByb3ZpZGVycygpO1xuICAgIGxldCBpc0dwc0VuYWJsZWQgPSBwcm92aWRlcnMuaW5kZXhPZignZ3BzJykgIT09IC0xO1xuICAgIGF3YWl0IHRoaXMuYWRiLnRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIoIWlzR3BzRW5hYmxlZCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFwaSA+IDE1KSB7XG4gICAgbGV0IHNlcSA9IFtLZXlDb2RlLlVQLCBLZXlDb2RlLlVQXTtcbiAgICBpZiAoYXBpID09PSAxNikge1xuICAgICAgLy8gVGhpcyB2ZXJzaW9uIG9mIEFuZHJvaWQgaGFzIGEgXCJwYXJlbnRcIiBidXR0b24gaW4gaXRzIGFjdGlvbiBiYXJcbiAgICAgIHNlcS5wdXNoKEtleUNvZGUuRE9XTik7XG4gICAgfSBlbHNlIGlmIChhcGkgPCAyOCkge1xuICAgICAgLy8gTmV3ZXIgdmVyc2lvbnMgb2YgQW5kcm9pZCBoYXZlIHRoZSB0b2dnbGUgaW4gdGhlIEFjdGlvbiBiYXJcbiAgICAgIHNlcSA9IFtLZXlDb2RlLlJJR0hULCBLZXlDb2RlLlJJR0hULCBLZXlDb2RlLlVQXTtcbiAgICAgIC8qXG4gICAgICAgKiBPbmNlIHRoZSBMb2NhdGlvbiBzZXJ2aWNlcyBzd2l0Y2ggaXMgT0ZGLCBpdCB3b24ndCByZWNlaXZlIGZvY3VzXG4gICAgICAgKiB3aGVuIGdvaW5nIGJhY2sgdG8gdGhlIExvY2F0aW9uIFNlcnZpY2VzIHNldHRpbmdzIHNjcmVlbiB1bmxlc3Mgd2VcbiAgICAgICAqIHNlbmQgYSBkdW1teSBrZXlldmVudCAoVVApICpiZWZvcmUqIG9wZW5pbmcgdGhlIHNldHRpbmdzIHNjcmVlblxuICAgICAgICovXG4gICAgICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudChLZXlDb2RlLlVQKTtcbiAgICB9IGVsc2UgaWYgKGFwaSA+PSAyOCkge1xuICAgICAgLy8gRXZlbiBuZXdlciB2ZXJzaW9ucyBvZiBhbmRyb2lkIGhhdmUgdGhlIHRvZ2dsZSBpbiBhIGJhciBiZWxvdyB0aGUgYWN0aW9uIGJhclxuICAgICAgLy8gdGhpcyBtZWFucyBhIHNpbmdsZSByaWdodCBjbGljayB3aWxsIGNhdXNlIGl0IHRvIGJlIHNlbGVjdGVkLlxuICAgICAgc2VxID0gW0tleUNvZGUuUklHSFRdO1xuICAgICAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoS2V5Q29kZS5VUCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudG9nZ2xlU2V0dGluZygnTE9DQVRJT05fU09VUkNFX1NFVFRJTkdTJywgc2VxKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSdzIG5vIGdsb2JhbCBsb2NhdGlvbiBzZXJ2aWNlcyB0b2dnbGUgb24gb2xkZXIgQW5kcm9pZCB2ZXJzaW9uc1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90WWV0SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG59O1xuXG5oZWxwZXJzLnRvZ2dsZVNldHRpbmcgPSBhc3luYyBmdW5jdGlvbiB0b2dnbGVTZXR0aW5nIChzZXR0aW5nLCBwcmVLZXlTZXEpIHtcbiAgLypcbiAgICogcHJlS2V5U2VxIGlzIHRoZSBrZXlldmVudCBzZXF1ZW5jZSB0byBzZW5kIG92ZXIgQURCIGluIG9yZGVyXG4gICAqIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3Igb24gdGhlIHJpZ2h0IG9wdGlvbi5cbiAgICogQnkgZGVmYXVsdCBpdCdzIFt1cCwgdXAsIGRvd25dIGJlY2F1c2Ugd2UgdXN1YWxseSB0YXJnZXQgdGhlIDFzdCBpdGVtIGluXG4gICAqIHRoZSBzY3JlZW4sIGFuZCBzb21ldGltZXMgd2hlbiBvcGVuaW5nIHNldHRpbmdzIGFjdGl2aXRpZXMgdGhlIGN1cnNvciBpc1xuICAgKiBhbHJlYWR5IHBvc2l0aW9ubmVkIG9uIHRoZSAxc3QgaXRlbSwgYnV0IHdlIGNhbid0IGtub3cgZm9yIHN1cmVcbiAgICovXG4gIGlmIChfLmlzTnVsbChwcmVLZXlTZXEpKSB7XG4gICAgcHJlS2V5U2VxID0gW0tleUNvZGUuVVAsIEtleUNvZGUuVVAsIEtleUNvZGUuRE9XTl07XG4gIH1cblxuICBhd2FpdCB0aGlzLm9wZW5TZXR0aW5nc0FjdGl2aXR5KHNldHRpbmcpO1xuXG4gIGZvciAobGV0IGtleSBvZiBwcmVLZXlTZXEpIHtcbiAgICBhd2FpdCB0aGlzLmRvS2V5KGtleSk7XG4gIH1cblxuICBsZXQge2FwcFBhY2thZ2UsIGFwcEFjdGl2aXR5fSA9IGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKTtcblxuICAvKlxuICAgKiBDbGljayBhbmQgaGFuZGxlIHBvdGVudGlhbCBBREIgZGlzY29ubmVjdCB0aGF0IG9jY3VycyBvbiBvZmZpY2lhbFxuICAgKiBlbXVsYXRvciB3aGVuIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gaXMgZGlzYWJsZWRcbiAgICovXG4gIGF3YWl0IHRoaXMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QoYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHRoaXMuZG9LZXkoS2V5Q29kZS5DRU5URVIpO1xuICB9KTtcblxuICAvKlxuICAgKiBJbiBvbmUgcGFydGljdWxhciBjYXNlIChlbmFibGUgTG9jYXRpb24gU2VydmljZXMpLCBhIHBvcC11cCBpc1xuICAgKiBkaXNwbGF5ZWQgb24gc29tZSBwbGF0Zm9ybXMgc28gdGhlIHVzZXIgYWNjZXB0cyBvciByZWZ1c2VzIHRoYXQgR29vZ2xlXG4gICAqIGNvbGxlY3RzIGxvY2F0aW9uIGRhdGEuIFNvIHdlIHdhaXQgZm9yIHRoYXQgcG9wLXVwIHRvIG9wZW4sIGlmIGl0XG4gICAqIGRvZXNuJ3QgdGhlbiBwcm9jZWVkXG4gICAqL1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JOb3RBY3Rpdml0eShhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgNTAwMCk7XG4gICAgYXdhaXQgdGhpcy5kb0tleShLZXlDb2RlLlJJR0hUKTtcbiAgICBhd2FpdCB0aGlzLmRvS2V5KEtleUNvZGUuQ0VOVEVSKTtcbiAgICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yTm90QWN0aXZpdHkoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIDUwMDApO1xuICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgYXdhaXQgdGhpcy5hZGIuYmFjaygpO1xufTtcblxuaGVscGVycy5kb0tleSA9IGFzeW5jIGZ1bmN0aW9uIGRvS2V5IChrZXkpIHtcbiAgLy8gVE9ETzogQ29uZmlybSB3ZSBuZWVkIHRoaXMgZGVsYXkuIFNlZW1zIHRvIHdvcmsgd2l0aG91dCBpdC5cbiAgYXdhaXQgQi5kZWxheSgyMDAwKTtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoa2V5KTtcbn07XG5cbmhlbHBlcnMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QgPSBhc3luYyBmdW5jdGlvbiB3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCAod3JhcHBlZCkge1xuICBpZiAoIXRoaXMuYm9vdHN0cmFwKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdyYXBwZWQoKTtcbiAgfVxuXG4gIHRoaXMuYm9vdHN0cmFwLmlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biA9IHRydWU7XG4gIHRyeSB7XG4gICAgYXdhaXQgd3JhcHBlZCgpO1xuICAgIGF3YWl0IHRoaXMuYWRiLnJlc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zdGFydCh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdGhpcy5vcHRzLmRpc2FibGVBbmRyb2lkV2F0Y2hlcnMsIHRoaXMub3B0cy5hY2NlcHRTc2xDZXJ0cyk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5ib290c3RyYXAuaWdub3JlVW5leHBlY3RlZFNodXRkb3duID0gZmFsc2U7XG4gIH1cbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsUUFBUSxHQUFHLEVBQWY7QUFBQSxJQUFtQkMsT0FBTyxHQUFHLEVBQTdCO0FBQUEsSUFBaUNDLFVBQVUsR0FBRyxFQUE5Qzs7O0FBRUEsTUFBTUMsa0JBQWtCLEdBQUcsS0FBM0I7QUFDQSxNQUFNQyxTQUFTLEdBQUcsS0FBbEI7QUFDQSxNQUFNQyxTQUFTLEdBQUcsS0FBbEI7QUFNQSxNQUFNQyxXQUFXLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBM0I7O0FBRUFSLFFBQVEsQ0FBQ1Msb0JBQVQsR0FBZ0MsZUFBZUEsb0JBQWYsR0FBdUM7RUFDckUsS0FBS0MsR0FBTCxDQUFTQyxJQUFULENBQWMsNEJBQWQ7RUFDQSxJQUFJQyxjQUFjLEdBQUcsTUFBTSxLQUFLQyxHQUFMLENBQVNDLGdCQUFULEVBQTNCO0VBQ0EsSUFBSUMsVUFBVSxHQUFHSCxjQUFjLEdBQUdULGtCQUFILEdBQXdCLENBQXZEOztFQUdBLElBQUksQ0FBQ1MsY0FBTCxFQUFxQjtJQUNuQixJQUFJSSxNQUFNLEdBQUcsTUFBTSxLQUFLQyxRQUFMLEVBQW5CO0lBQ0FGLFVBQVUsSUFBS0MsTUFBTSxHQUFHWixTQUFILEdBQWUsQ0FBcEM7SUFDQSxJQUFJYyxNQUFNLEdBQUcsTUFBTSxLQUFLTCxHQUFMLENBQVNNLFFBQVQsRUFBbkI7SUFDQUos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
259
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL25ldHdvcmsuanMiLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiQUlSUExBTkVfTU9ERV9NQVNLIiwiV0lGSV9NQVNLIiwiREFUQV9NQVNLIiwiR0VPX0VQU0lMT04iLCJOdW1iZXIiLCJNSU5fVkFMVUUiLCJnZXROZXR3b3JrQ29ubmVjdGlvbiIsImxvZyIsImluZm8iLCJhaXJwbGFuZU1vZGVPbiIsImFkYiIsImlzQWlycGxhbmVNb2RlT24iLCJjb25uZWN0aW9uIiwid2lmaU9uIiwiaXNXaWZpT24iLCJkYXRhT24iLCJpc0RhdGFPbiIsInNldE5ldHdvcmtDb25uZWN0aW9uIiwidHlwZSIsInNob3VsZEVuYWJsZUFpcnBsYW5lTW9kZSIsInNob3VsZEVuYWJsZVdpZmkiLCJzaG91bGRFbmFibGVEYXRhQ29ubmVjdGlvbiIsImN1cnJlbnRTdGF0ZSIsImlzQWlycGxhbmVNb2RlRW5hYmxlZCIsImlzV2lGaUVuYWJsZWQiLCJpc0RhdGFFbmFibGVkIiwid3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QiLCJzZXRBaXJwbGFuZU1vZGUiLCJicm9hZGNhc3RBaXJwbGFuZU1vZGUiLCJzZXRXaWZpU3RhdGUiLCJzZXREYXRhU3RhdGUiLCJpc0VtdWxhdG9yIiwid2lmaSIsInRvZ2dsZURhdGEiLCJkYXRhIiwic2V0V2lmaUFuZERhdGEiLCJ0b2dnbGVXaUZpIiwidG9nZ2xlRmxpZ2h0TW9kZSIsImZsaWdodE1vZGUiLCJzZXRHZW9Mb2NhdGlvbiIsImxvY2F0aW9uIiwiZ2V0R2VvTG9jYXRpb24iLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImFsdGl0dWRlIiwibW9iaWxlUmVmcmVzaEdwc0NhY2hlIiwib3B0cyIsInRpbWVvdXRNcyIsInJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlIiwicGFyc2VGbG9hdCIsIktleUNvZGUiLCJVUCIsIkRPV04iLCJSSUdIVCIsIkNFTlRFUiIsInRvZ2dsZUxvY2F0aW9uU2VydmljZXMiLCJhcGkiLCJnZXRBcGlMZXZlbCIsInByb3ZpZGVycyIsImdldExvY2F0aW9uUHJvdmlkZXJzIiwiaXNHcHNFbmFibGVkIiwiaW5kZXhPZiIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJzZXEiLCJwdXNoIiwia2V5ZXZlbnQiLCJ0b2dnbGVTZXR0aW5nIiwiZXJyb3JzIiwiTm90WWV0SW1wbGVtZW50ZWRFcnJvciIsInNldHRpbmciLCJwcmVLZXlTZXEiLCJfIiwiaXNOdWxsIiwib3BlblNldHRpbmdzQWN0aXZpdHkiLCJrZXkiLCJkb0tleSIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkiLCJ3YWl0Rm9yTm90QWN0aXZpdHkiLCJpZ24iLCJiYWNrIiwiQiIsImRlbGF5Iiwid3JhcHBlZCIsImJvb3RzdHJhcCIsImlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biIsInJlc3RhcnQiLCJzdGFydCIsImRpc2FibGVBbmRyb2lkV2F0Y2hlcnMiLCJhY2NlcHRTc2xDZXJ0cyIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9uZXR3b3JrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb25zdCBBSVJQTEFORV9NT0RFX01BU0sgPSAwYjAwMTtcbmNvbnN0IFdJRklfTUFTSyA9IDBiMDEwO1xuY29uc3QgREFUQV9NQVNLID0gMGIxMDA7XG4vLyBUaGUgdmFsdWUgY2xvc2UgdG8gemVybywgYnV0IG5vdCB6ZXJvLCBpcyBuZWVkZWRcbi8vIHRvIHRyaWNrIEpTT04gZ2VuZXJhdGlvbiBhbmQgc2VuZCBhIGZsb2F0IHZhbHVlIGluc3RlYWQgb2YgYW4gaW50ZWdlcixcbi8vIFRoaXMgYWxsb3dzIHN0cmljdGx5LXR5cGVkIGNsaWVudHMsIGxpa2UgSmF2YSwgdG8gcHJvcGVybHlcbi8vIHBhcnNlIGl0LiBPdGhlcndpc2UgZmxvYXQgMC4wIGlzIGFsd2F5cyByZXByZXNlbnRlZCBhcyBpbnRlZ2VyIDAgaW4gSlMuXG4vLyBUaGUgdmFsdWUgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIERCTF9FUFNJTE9OIChodHRwczovL29wZW5zb3VyY2UuYXBwbGUuY29tL3NvdXJjZS9MaWJjL0xpYmMtNDk4L2luY2x1ZGUvZmxvYXQuaClcbmNvbnN0IEdFT19FUFNJTE9OID0gTnVtYmVyLk1JTl9WQUxVRTtcblxuY29tbWFuZHMuZ2V0TmV0d29ya0Nvbm5lY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBnZXROZXR3b3JrQ29ubmVjdGlvbiAoKSB7XG4gIHRoaXMubG9nLmluZm8oJ0dldHRpbmcgbmV0d29yayBjb25uZWN0aW9uJyk7XG4gIGxldCBhaXJwbGFuZU1vZGVPbiA9IGF3YWl0IHRoaXMuYWRiLmlzQWlycGxhbmVNb2RlT24oKTtcbiAgbGV0IGNvbm5lY3Rpb24gPSBhaXJwbGFuZU1vZGVPbiA/IEFJUlBMQU5FX01PREVfTUFTSyA6IDA7XG5cbiAgLy8gbm8gbmVlZCB0byBjaGVjayBhbnl0aGluZyBlbHNlIGlmIHdlIGFyZSBpbiBhaXJwbGFuZSBtb2RlXG4gIGlmICghYWlycGxhbmVNb2RlT24pIHtcbiAgICBsZXQgd2lmaU9uID0gYXdhaXQgdGhpcy5pc1dpZmlPbigpO1xuICAgIGNvbm5lY3Rpb24gfD0gKHdpZmlPbiA/IFdJRklfTUFTSyA6IDApO1xuICAgIGxldCBkYXRhT24gPSBhd2FpdCB0aGlzLmFkYi5pc0RhdGFPbigpO1xuICAgIGNvbm5lY3Rpb24gfD0gKGRhdGFPbiA/IERBVEFfTUFTSyA6IDApO1xuICB9XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG4vKipcbiAqIGRlY291cGxpbmcgdG8gb3ZlcnJpZGUgdGhlIGJlaGF2aW91ciBpbiBvdGhlciBkcml2ZXJzIGxpa2UgVWlBdXRvbWF0b3IyLlxuICovXG5jb21tYW5kcy5pc1dpZmlPbiA9IGFzeW5jIGZ1bmN0aW9uIGlzV2lmaU9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmlzV2lmaU9uKCk7XG59O1xuXG5jb21tYW5kcy5zZXROZXR3b3JrQ29ubmVjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHNldE5ldHdvcmtDb25uZWN0aW9uICh0eXBlKSB7XG4gIHRoaXMubG9nLmluZm8oJ1NldHRpbmcgbmV0d29yayBjb25uZWN0aW9uJyk7XG4gIC8vIGRlY29kZSB0aGUgaW5wdXRcbiAgY29uc3Qgc2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlID0gKHR5cGUgJiBBSVJQTEFORV9NT0RFX01BU0spICE9PSAwO1xuICBjb25zdCBzaG91bGRFbmFibGVXaWZpID0gKHR5cGUgJiBXSUZJX01BU0spICE9PSAwO1xuICBjb25zdCBzaG91bGRFbmFibGVEYXRhQ29ubmVjdGlvbiA9ICh0eXBlICYgREFUQV9NQVNLKSAhPT0gMDtcblxuICBjb25zdCBjdXJyZW50U3RhdGUgPSBhd2FpdCB0aGlzLmdldE5ldHdvcmtDb25uZWN0aW9uKCk7XG4gIGNvbnN0IGlzQWlycGxhbmVNb2RlRW5hYmxlZCA9IChjdXJyZW50U3RhdGUgJiBBSVJQTEFORV9NT0RFX01BU0spICE9PSAwO1xuICBjb25zdCBpc1dpRmlFbmFibGVkID0gKGN1cnJlbnRTdGF0ZSAmIFdJRklfTUFTSykgIT09IDA7XG4gIGNvbnN0IGlzRGF0YUVuYWJsZWQgPSAoY3VycmVudFN0YXRlICYgREFUQV9NQVNLKSAhPT0gMDtcblxuICBpZiAoc2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlICE9PSBpc0FpcnBsYW5lTW9kZUVuYWJsZWQpIHtcbiAgICBhd2FpdCB0aGlzLndyYXBCb290c3RyYXBEaXNjb25uZWN0KGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFpcnBsYW5lTW9kZShzaG91bGRFbmFibGVBaXJwbGFuZU1vZGUpO1xuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuYnJvYWRjYXN0QWlycGxhbmVNb2RlKHNob3VsZEVuYWJsZUFpcnBsYW5lTW9kZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgTm90IGNoYW5naW5nIGFpcnBsYW5lIG1vZGUsIHNpbmNlIGl0IGlzIGFscmVhZHkgYCArXG4gICAgICAgICAgICAgYCR7c2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ31gKTtcbiAgfVxuXG4gIGlmIChzaG91bGRFbmFibGVXaWZpID09PSBpc1dpRmlFbmFibGVkICYmIHNob3VsZEVuYWJsZURhdGFDb25uZWN0aW9uID09PSBpc0RhdGFFbmFibGVkKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnTm90IGNoYW5naW5nIGRhdGEgY29ubmVjdGlvbi9XaS1GaSBzdGF0ZXMsIHNpbmNlIHRoZXkgYXJlIGFscmVhZHkgc2V0IHRvIGV4cGVjdGVkIHZhbHVlcycpO1xuICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FpcnBsYW5lTW9kZU9uKCkpIHtcbiAgICAgIHJldHVybiBBSVJQTEFORV9NT0RFX01BU0sgfCBjdXJyZW50U3RhdGU7XG4gICAgfVxuICAgIHJldHVybiB+QUlSUExBTkVfTU9ERV9NQVNLICYgY3VycmVudFN0YXRlO1xuICB9XG5cbiAgYXdhaXQgdGhpcy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdChhc3luYyAoKSA9PiB7XG4gICAgaWYgKHNob3VsZEVuYWJsZVdpZmkgIT09IGlzV2lGaUVuYWJsZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0V2lmaVN0YXRlKHNob3VsZEVuYWJsZVdpZmkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBOb3QgY2hhbmdpbmcgV2ktRmkgc3RhdGUsIHNpbmNlIGl0IGlzIGFscmVhZHkgYCArXG4gICAgICAgIGAke3Nob3VsZEVuYWJsZVdpZmkgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnfWApO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRFbmFibGVBaXJwbGFuZU1vZGUpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ05vdCBjaGFuZ2luZyBkYXRhIGNvbm5lY3Rpb24gc3RhdGUsIGJlY2F1c2UgYWlycGxhbmUgbW9kZSBpcyBlbmFibGVkJyk7XG4gICAgfSBlbHNlIGlmIChzaG91bGRFbmFibGVEYXRhQ29ubmVjdGlvbiA9PT0gaXNEYXRhRW5hYmxlZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgTm90IGNoYW5naW5nIGRhdGEgY29ubmVjdGlvbiBzdGF0ZSwgc2luY2UgaXQgaXMgYWxyZWFkeSBgICtcbiAgICAgICAgYCR7c2hvdWxkRW5hYmxlRGF0YUNvbm5lY3Rpb24gPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXREYXRhU3RhdGUoc2hvdWxkRW5hYmxlRGF0YUNvbm5lY3Rpb24sIHRoaXMuaXNFbXVsYXRvcigpKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLmdldE5ldHdvcmtDb25uZWN0aW9uKCk7XG59O1xuXG4vKipcbiAqIGRlY291cGxpbmcgdG8gb3ZlcnJpZGUgYmVoYXZpb3VyIGluIG90aGVyIGRyaXZlcnMgbGlrZSBVaUF1dG9tYXRvcjIuXG4gKi9cbmNvbW1hbmRzLnNldFdpZmlTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFdpZmlTdGF0ZSAod2lmaSkge1xuICBhd2FpdCB0aGlzLmFkYi5zZXRXaWZpU3RhdGUod2lmaSwgdGhpcy5pc0VtdWxhdG9yKCkpO1xufTtcblxuY29tbWFuZHMudG9nZ2xlRGF0YSA9IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZURhdGEgKCkge1xuICBsZXQgZGF0YSA9ICEoYXdhaXQgdGhpcy5hZGIuaXNEYXRhT24oKSk7XG4gIHRoaXMubG9nLmluZm8oYFR1cm5pbmcgbmV0d29yayBkYXRhICR7ZGF0YSA/ICdvbicgOiAnb2ZmJ31gKTtcbiAgYXdhaXQgdGhpcy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2V0V2lmaUFuZERhdGEoe2RhdGF9LCB0aGlzLmlzRW11bGF0b3IoKSk7XG4gIH0pO1xufTtcblxuY29tbWFuZHMudG9nZ2xlV2lGaSA9IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZVdpRmkgKCkge1xuICBsZXQgd2lmaSA9ICEoYXdhaXQgdGhpcy5hZGIuaXNXaWZpT24oKSk7XG4gIHRoaXMubG9nLmluZm8oYFR1cm5pbmcgV2lGaSAke3dpZmkgPyAnb24nIDogJ29mZid9YCk7XG4gIGF3YWl0IHRoaXMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QoYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHRoaXMuYWRiLnNldFdpZmlBbmREYXRhKHt3aWZpfSwgdGhpcy5pc0VtdWxhdG9yKCkpO1xuICB9KTtcbn07XG5cbmNvbW1hbmRzLnRvZ2dsZUZsaWdodE1vZGUgPSBhc3luYyBmdW5jdGlvbiB0b2dnbGVGbGlnaHRNb2RlICgpIHtcbiAgLypcbiAgICogVE9ETzogSW1wbGVtZW50IGlzUmVhbERldmljZSgpLiBUaGlzIG1ldGhvZCBmYWlscyBvblxuICAgKiByZWFsIGRldmljZXMsIGl0IHNob3VsZCB0aHJvdyBhIE5vdFlldEltcGxlbWVudGVkRXJyb3JcbiAgICovXG4gIGxldCBmbGlnaHRNb2RlID0gIShhd2FpdCB0aGlzLmFkYi5pc0FpcnBsYW5lTW9kZU9uKCkpO1xuICB0aGlzLmxvZy5pbmZvKGBUdXJuaW5nIGZsaWdodCBtb2RlICR7ZmxpZ2h0TW9kZSA/ICdvbicgOiAnb2ZmJ31gKTtcbiAgYXdhaXQgdGhpcy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2V0QWlycGxhbmVNb2RlKGZsaWdodE1vZGUpO1xuICB9KTtcbiAgYXdhaXQgdGhpcy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5hZGIuYnJvYWRjYXN0QWlycGxhbmVNb2RlKGZsaWdodE1vZGUpO1xuICB9KTtcbn07XG5cbmNvbW1hbmRzLnNldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0R2VvTG9jYXRpb24gKGxvY2F0aW9uKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnNldEdlb0xvY2F0aW9uKGxvY2F0aW9uLCB0aGlzLmlzRW11bGF0b3IoKSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0R2VvTG9jYXRpb24oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMubG9nLndhcm4oYENvdWxkIG5vdCBnZXQgdGhlIGN1cnJlbnQgZ2VvbG9jYXRpb24gaW5mbzogJHtlLm1lc3NhZ2V9YCk7XG4gICAgdGhpcy5sb2cud2FybihgUmV0dXJuaW5nIHRoZSBkZWZhdWx0IHplcm8nZWQgdmFsdWVzYCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdGl0dWRlOiBHRU9fRVBTSUxPTixcbiAgICAgIGxvbmdpdHVkZTogR0VPX0VQU0lMT04sXG4gICAgICBhbHRpdHVkZTogR0VPX0VQU0lMT04sXG4gICAgfTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBHcHNDYWNoZVJlZnJlc2hPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dE1zIFsyMDAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gYmxvY2sgdW50aWwgR1BTIGNhY2hlIGlzIHJlZnJlc2hlZC4gUHJvdmlkaW5nIHplcm8gb3IgYSBuZWdhdGl2ZVxuICogdmFsdWUgdG8gaXQgc2tpcHMgd2FpdGluZyBjb21wbGV0ZWx5LlxuICovXG5cbi8qKlxuICogU2VuZHMgYW4gYXN5bmMgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBHUFMgY2FjaGUuXG4gKiBUaGlzIGZlYXR1cmUgb25seSB3b3JrcyBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QgaGFzXG4gKiBHb29nbGUgUGxheSBTZXJ2aWNlcyBpbnN0YWxsZWQuIEluIGNhc2UgdGhlIHZhbmlsbGFcbiAqIExvY2F0aW9uTWFuYWdlciBpcyB1c2VkIHRoZSBkZXZpY2UgQVBJIGxldmVsIG11c3QgYmUgYXRcbiAqIHZlcnNpb24gMzAgKEFuZHJvaWQgUikgb3IgaGlnaGVyLlxuICpcbiAqIEBwYXJhbSB7R3BzQ2FjaGVSZWZyZXNoT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tb2JpbGVSZWZyZXNoR3BzQ2FjaGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSZWZyZXNoR3BzQ2FjaGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IHRpbWVvdXRNcyB9ID0gb3B0cztcbiAgYXdhaXQgdGhpcy5hZGIucmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUodGltZW91dE1zKTtcbn07XG5cbmNvbW1hbmRzLmdldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gZ2V0R2VvTG9jYXRpb24gKCkge1xuICBjb25zdCB7bGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGV9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0R2VvTG9jYXRpb24oKTtcbiAgcmV0dXJuIHtcbiAgICBsYXRpdHVkZTogcGFyc2VGbG9hdChsYXRpdHVkZSkgfHwgR0VPX0VQU0lMT04sXG4gICAgbG9uZ2l0dWRlOiBwYXJzZUZsb2F0KGxvbmdpdHVkZSkgfHwgR0VPX0VQU0lMT04sXG4gICAgYWx0aXR1ZGU6IHBhcnNlRmxvYXQoYWx0aXR1ZGUpIHx8IEdFT19FUFNJTE9OLFxuICB9O1xufTtcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3ZpZXcvS2V5RXZlbnQuaHRtbCNLRVlDT0RFX0RQQURfQ0VOVEVSXG4vLyBpbiB0aGUgYW5kcm9pZCBkb2NzLCB0aGlzIGlzIGhvdyB0aGUga2V5Y29kZXMgYXJlIGRlZmluZWRcbmNvbnN0IEtleUNvZGUgPSB7XG4gIFVQOiAxOSxcbiAgRE9XTjogMjAsXG4gIFJJR0hUOiAyMixcbiAgQ0VOVEVSOiAyM1xufTtcbmNvbW1hbmRzLnRvZ2dsZUxvY2F0aW9uU2VydmljZXMgPSBhc3luYyBmdW5jdGlvbiB0b2dnbGVMb2NhdGlvblNlcnZpY2VzICgpIHtcbiAgdGhpcy5sb2cuaW5mbygnVG9nZ2xpbmcgbG9jYXRpb24gc2VydmljZXMnKTtcbiAgbGV0IGFwaSA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gIGlmICh0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIGxldCBwcm92aWRlcnMgPSBhd2FpdCB0aGlzLmFkYi5nZXRMb2NhdGlvblByb3ZpZGVycygpO1xuICAgIGxldCBpc0dwc0VuYWJsZWQgPSBwcm92aWRlcnMuaW5kZXhPZignZ3BzJykgIT09IC0xO1xuICAgIGF3YWl0IHRoaXMuYWRiLnRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIoIWlzR3BzRW5hYmxlZCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFwaSA+IDE1KSB7XG4gICAgbGV0IHNlcSA9IFtLZXlDb2RlLlVQLCBLZXlDb2RlLlVQXTtcbiAgICBpZiAoYXBpID09PSAxNikge1xuICAgICAgLy8gVGhpcyB2ZXJzaW9uIG9mIEFuZHJvaWQgaGFzIGEgXCJwYXJlbnRcIiBidXR0b24gaW4gaXRzIGFjdGlvbiBiYXJcbiAgICAgIHNlcS5wdXNoKEtleUNvZGUuRE9XTik7XG4gICAgfSBlbHNlIGlmIChhcGkgPCAyOCkge1xuICAgICAgLy8gTmV3ZXIgdmVyc2lvbnMgb2YgQW5kcm9pZCBoYXZlIHRoZSB0b2dnbGUgaW4gdGhlIEFjdGlvbiBiYXJcbiAgICAgIHNlcSA9IFtLZXlDb2RlLlJJR0hULCBLZXlDb2RlLlJJR0hULCBLZXlDb2RlLlVQXTtcbiAgICAgIC8qXG4gICAgICAgKiBPbmNlIHRoZSBMb2NhdGlvbiBzZXJ2aWNlcyBzd2l0Y2ggaXMgT0ZGLCBpdCB3b24ndCByZWNlaXZlIGZvY3VzXG4gICAgICAgKiB3aGVuIGdvaW5nIGJhY2sgdG8gdGhlIExvY2F0aW9uIFNlcnZpY2VzIHNldHRpbmdzIHNjcmVlbiB1bmxlc3Mgd2VcbiAgICAgICAqIHNlbmQgYSBkdW1teSBrZXlldmVudCAoVVApICpiZWZvcmUqIG9wZW5pbmcgdGhlIHNldHRpbmdzIHNjcmVlblxuICAgICAgICovXG4gICAgICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudChLZXlDb2RlLlVQKTtcbiAgICB9IGVsc2UgaWYgKGFwaSA+PSAyOCkge1xuICAgICAgLy8gRXZlbiBuZXdlciB2ZXJzaW9ucyBvZiBhbmRyb2lkIGhhdmUgdGhlIHRvZ2dsZSBpbiBhIGJhciBiZWxvdyB0aGUgYWN0aW9uIGJhclxuICAgICAgLy8gdGhpcyBtZWFucyBhIHNpbmdsZSByaWdodCBjbGljayB3aWxsIGNhdXNlIGl0IHRvIGJlIHNlbGVjdGVkLlxuICAgICAgc2VxID0gW0tleUNvZGUuUklHSFRdO1xuICAgICAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoS2V5Q29kZS5VUCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudG9nZ2xlU2V0dGluZygnTE9DQVRJT05fU09VUkNFX1NFVFRJTkdTJywgc2VxKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSdzIG5vIGdsb2JhbCBsb2NhdGlvbiBzZXJ2aWNlcyB0b2dnbGUgb24gb2xkZXIgQW5kcm9pZCB2ZXJzaW9uc1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90WWV0SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG59O1xuXG5oZWxwZXJzLnRvZ2dsZVNldHRpbmcgPSBhc3luYyBmdW5jdGlvbiB0b2dnbGVTZXR0aW5nIChzZXR0aW5nLCBwcmVLZXlTZXEpIHtcbiAgLypcbiAgICogcHJlS2V5U2VxIGlzIHRoZSBrZXlldmVudCBzZXF1ZW5jZSB0byBzZW5kIG92ZXIgQURCIGluIG9yZGVyXG4gICAqIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3Igb24gdGhlIHJpZ2h0IG9wdGlvbi5cbiAgICogQnkgZGVmYXVsdCBpdCdzIFt1cCwgdXAsIGRvd25dIGJlY2F1c2Ugd2UgdXN1YWxseSB0YXJnZXQgdGhlIDFzdCBpdGVtIGluXG4gICAqIHRoZSBzY3JlZW4sIGFuZCBzb21ldGltZXMgd2hlbiBvcGVuaW5nIHNldHRpbmdzIGFjdGl2aXRpZXMgdGhlIGN1cnNvciBpc1xuICAgKiBhbHJlYWR5IHBvc2l0aW9ubmVkIG9uIHRoZSAxc3QgaXRlbSwgYnV0IHdlIGNhbid0IGtub3cgZm9yIHN1cmVcbiAgICovXG4gIGlmIChfLmlzTnVsbChwcmVLZXlTZXEpKSB7XG4gICAgcHJlS2V5U2VxID0gW0tleUNvZGUuVVAsIEtleUNvZGUuVVAsIEtleUNvZGUuRE9XTl07XG4gIH1cblxuICBhd2FpdCB0aGlzLm9wZW5TZXR0aW5nc0FjdGl2aXR5KHNldHRpbmcpO1xuXG4gIGZvciAobGV0IGtleSBvZiBwcmVLZXlTZXEpIHtcbiAgICBhd2FpdCB0aGlzLmRvS2V5KGtleSk7XG4gIH1cblxuICBsZXQge2FwcFBhY2thZ2UsIGFwcEFjdGl2aXR5fSA9IGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKTtcblxuICAvKlxuICAgKiBDbGljayBhbmQgaGFuZGxlIHBvdGVudGlhbCBBREIgZGlzY29ubmVjdCB0aGF0IG9jY3VycyBvbiBvZmZpY2lhbFxuICAgKiBlbXVsYXRvciB3aGVuIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gaXMgZGlzYWJsZWRcbiAgICovXG4gIGF3YWl0IHRoaXMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QoYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHRoaXMuZG9LZXkoS2V5Q29kZS5DRU5URVIpO1xuICB9KTtcblxuICAvKlxuICAgKiBJbiBvbmUgcGFydGljdWxhciBjYXNlIChlbmFibGUgTG9jYXRpb24gU2VydmljZXMpLCBhIHBvcC11cCBpc1xuICAgKiBkaXNwbGF5ZWQgb24gc29tZSBwbGF0Zm9ybXMgc28gdGhlIHVzZXIgYWNjZXB0cyBvciByZWZ1c2VzIHRoYXQgR29vZ2xlXG4gICAqIGNvbGxlY3RzIGxvY2F0aW9uIGRhdGEuIFNvIHdlIHdhaXQgZm9yIHRoYXQgcG9wLXVwIHRvIG9wZW4sIGlmIGl0XG4gICAqIGRvZXNuJ3QgdGhlbiBwcm9jZWVkXG4gICAqL1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JOb3RBY3Rpdml0eShhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgNTAwMCk7XG4gICAgYXdhaXQgdGhpcy5kb0tleShLZXlDb2RlLlJJR0hUKTtcbiAgICBhd2FpdCB0aGlzLmRvS2V5KEtleUNvZGUuQ0VOVEVSKTtcbiAgICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yTm90QWN0aXZpdHkoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIDUwMDApO1xuICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgYXdhaXQgdGhpcy5hZGIuYmFjaygpO1xufTtcblxuaGVscGVycy5kb0tleSA9IGFzeW5jIGZ1bmN0aW9uIGRvS2V5IChrZXkpIHtcbiAgLy8gVE9ETzogQ29uZmlybSB3ZSBuZWVkIHRoaXMgZGVsYXkuIFNlZW1zIHRvIHdvcmsgd2l0aG91dCBpdC5cbiAgYXdhaXQgQi5kZWxheSgyMDAwKTtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoa2V5KTtcbn07XG5cbmhlbHBlcnMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QgPSBhc3luYyBmdW5jdGlvbiB3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCAod3JhcHBlZCkge1xuICBpZiAoIXRoaXMuYm9vdHN0cmFwKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdyYXBwZWQoKTtcbiAgfVxuXG4gIHRoaXMuYm9vdHN0cmFwLmlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biA9IHRydWU7XG4gIHRyeSB7XG4gICAgYXdhaXQgd3JhcHBlZCgpO1xuICAgIGF3YWl0IHRoaXMuYWRiLnJlc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zdGFydCh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdGhpcy5vcHRzLmRpc2FibGVBbmRyb2lkV2F0Y2hlcnMsIHRoaXMub3B0cy5hY2NlcHRTc2xDZXJ0cyk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5ib290c3RyYXAuaWdub3JlVW5leHBlY3RlZFNodXRkb3duID0gZmFsc2U7XG4gIH1cbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsUUFBUSxHQUFHLEVBQWY7QUFBQSxJQUFtQkMsT0FBTyxHQUFHLEVBQTdCO0FBQUEsSUFBaUNDLFVBQVUsR0FBRyxFQUE5Qzs7O0FBRUEsTUFBTUMsa0JBQWtCLEdBQUcsS0FBM0I7QUFDQSxNQUFNQyxTQUFTLEdBQUcsS0FBbEI7QUFDQSxNQUFNQyxTQUFTLEdBQUcsS0FBbEI7QUFNQSxNQUFNQyxXQUFXLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBM0I7O0FBRUFSLFFBQVEsQ0FBQ1Msb0JBQVQsR0FBZ0MsZUFBZUEsb0JBQWYsR0FBdUM7RUFDckUsS0FBS0MsR0FBTCxDQUFTQyxJQUFULENBQWMsNEJBQWQ7RUFDQSxJQUFJQyxjQUFjLEdBQUcsTUFBTSxLQUFLQyxHQUFMLENBQVNDLGdCQUFULEVBQTNCO0VBQ0EsSUFBSUMsVUFBVSxHQUFHSCxjQUFjLEdBQUdULGtCQUFILEdBQXdCLENBQXZEOztFQUdBLElBQUksQ0FBQ1MsY0FBTCxFQUFxQjtJQUNuQixJQUFJSSxNQUFNLEdBQUcsTUFBTSxLQUFLQyxRQUFMLEVBQW5CO0lBQ0FGLFVBQVUsSUFBS0MsTUFBTSxHQUFHWixTQUFILEdBQWUsQ0FBcEM7SUFDQSxJQUFJYyxNQUFNLEdBQUcsTUFBTSxLQUFLTCxHQUFMLENBQVNNLFFBQVQsRUFBbkI7SUFDQUosVUFBVSxJ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
@@ -13,7 +13,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
14
  var _asyncbox = require("asyncbox");
15
15
 
16
- var _support = require("@appium/support");
16
+ var _support = require("appium/support");
17
17
 
18
18
  var _teen_process = require("teen_process");
19
19
 
@@ -307,4 +307,4 @@ var _default = commands;
307
307
  exports.default = _default;require('source-map-support').install();
308
308
 
309
309
 
310
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL3JlY29yZHNjcmVlbi5qcyIsIm5hbWVzIjpbImNvbW1hbmRzIiwiUkVUUllfUEFVU0UiLCJSRVRSWV9USU1FT1VUIiwiTUFYX1JFQ09SRElOR19USU1FX1NFQyIsIk1BWF9USU1FX1NFQyIsIkRFRkFVTFRfUkVDT1JESU5HX1RJTUVfU0VDIiwiUFJPQ0VTU19TSFVURE9XTl9USU1FT1VUIiwiU0NSRUVOUkVDT1JEX0JJTkFSWSIsIkRFRkFVTFRfRVhUIiwiTUlOX0VNVUxBVE9SX0FQSV9MRVZFTCIsIkZGTVBFR19CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJ1cGxvYWRSZWNvcmRlZE1lZGlhIiwibG9jYWxGaWxlIiwicmVtb3RlUGF0aCIsInVwbG9hZE9wdGlvbnMiLCJfIiwiaXNFbXB0eSIsInV0aWwiLCJ0b0luTWVtb3J5QmFzZTY0IiwidG9TdHJpbmciLCJ1c2VyIiwicGFzcyIsIm1ldGhvZCIsImhlYWRlcnMiLCJmaWxlRmllbGROYW1lIiwiZm9ybUZpZWxkcyIsIm9wdGlvbnMiLCJhdXRoIiwibmV0IiwidXBsb2FkRmlsZSIsInZlcmlmeVNjcmVlblJlY29yZElzU3VwcG9ydGVkIiwiYWRiIiwiaXNFbXVsYXRvciIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJFcnJvciIsInNjaGVkdWxlU2NyZWVuUmVjb3JkIiwicmVjb3JkaW5nUHJvcGVydGllcyIsImxvZyIsInN0b3BwZWQiLCJ0aW1lciIsInZpZGVvU2l6ZSIsImJpdFJhdGUiLCJ0aW1lTGltaXQiLCJidWdSZXBvcnQiLCJjdXJyZW50VGltZUxpbWl0IiwiaGFzVmFsdWUiLCJjdXJyZW50VGltZUxpbWl0SW50IiwicGFyc2VJbnQiLCJpc05hTiIsInBhdGhPbkRldmljZSIsInV1aWRWNCIsInN1YnN0cmluZyIsInJlY29yZGluZ1Byb2MiLCJzY3JlZW5yZWNvcmQiLCJvbiIsImN1cnJlbnREdXJhdGlvbiIsImdldER1cmF0aW9uIiwiYXNTZWNvbmRzIiwidG9GaXhlZCIsImRlYnVnIiwidGltZUxpbWl0SW50IiwiY2h1bmtEdXJhdGlvbiIsImNhdGNoIiwiZSIsImVycm9yIiwic3RhY2siLCJzdGFydCIsIndhaXRGb3JDb25kaXRpb24iLCJmaWxlRXhpc3RzIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsInJlY29yZHMiLCJwdXNoIiwicmVjb3JkaW5nUHJvY2VzcyIsIm1lcmdlU2NyZWVuUmVjb3JkcyIsIm1lZGlhRmlsZXMiLCJmcyIsIndoaWNoIiwiY29uZmlnQ29udGVudCIsIm1hcCIsIngiLCJqb2luIiwiY29uZmlnRmlsZSIsInBhdGgiLCJyZXNvbHZlIiwiZGlybmFtZSIsIndyaXRlRmlsZSIsInJlc3VsdCIsIk1hdGgiLCJmbG9vciIsIkRhdGUiLCJhcmdzIiwiaW5mbyIsImV4ZWMiLCJ0ZXJtaW5hdGVCYWNrZ3JvdW5kU2NyZWVuUmVjb3JkaW5nIiwiZm9yY2UiLCJwaWRzIiwiZ2V0UElEc0J5TmFtZSIsInAiLCJzaGVsbCIsImVyciIsIm1lc3NhZ2UiLCJzdGFydFJlY29yZGluZ1NjcmVlbiIsImZvcmNlUmVzdGFydCIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJ3YXJuIiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJyZWNvcmQiLCJyaW1yYWYiLCJ0aW1lb3V0IiwicGFyc2VGbG9hdCIsInRpbWluZyIsIlRpbWVyIiwiaXNSdW5uaW5nIiwic3RvcCIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJsb2NhbFJlY29yZHMiLCJwb3NpeCIsImJhc2VuYW1lIiwicHVsbCIsImxhc3QiLCJyZXN1bHRGaWxlUGF0aCIsImxlbmd0aCIsInNpemUiLCJzdGF0IiwidG9SZWFkYWJsZVNpemVTdHJpbmciXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvcmVjb3Jkc2NyZWVuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCwgZnMsIG5ldCwgdGVtcERpciwgc3lzdGVtLCB0aW1pbmcgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5jb25zdCBSRVRSWV9QQVVTRSA9IDMwMDtcbmNvbnN0IFJFVFJZX1RJTUVPVVQgPSA1MDAwO1xuY29uc3QgTUFYX1JFQ09SRElOR19USU1FX1NFQyA9IDYwICogMztcbmNvbnN0IE1BWF9USU1FX1NFQyA9IDYwICogMzA7XG5jb25zdCBERUZBVUxUX1JFQ09SRElOR19USU1FX1NFQyA9IE1BWF9SRUNPUkRJTkdfVElNRV9TRUM7XG5jb25zdCBQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVQgPSAxMCAqIDEwMDA7XG5jb25zdCBTQ1JFRU5SRUNPUkRfQklOQVJZID0gJ3NjcmVlbnJlY29yZCc7XG5jb25zdCBERUZBVUxUX0VYVCA9ICcubXA0JztcbmNvbnN0IE1JTl9FTVVMQVRPUl9BUElfTEVWRUwgPSAyNztcbmNvbnN0IEZGTVBFR19CSU5BUlkgPSBgZmZtcGVnJHtzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJ31gO1xuXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRSZWNvcmRlZE1lZGlhIChsb2NhbEZpbGUsIHJlbW90ZVBhdGggPSBudWxsLCB1cGxvYWRPcHRpb25zID0ge30pIHtcbiAgaWYgKF8uaXNFbXB0eShyZW1vdGVQYXRoKSkge1xuICAgIHJldHVybiAoYXdhaXQgdXRpbC50b0luTWVtb3J5QmFzZTY0KGxvY2FsRmlsZSkpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBjb25zdCB7dXNlciwgcGFzcywgbWV0aG9kLCBoZWFkZXJzLCBmaWxlRmllbGROYW1lLCBmb3JtRmllbGRzfSA9IHVwbG9hZE9wdGlvbnM7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgbWV0aG9kOiBtZXRob2QgfHwgJ1BVVCcsXG4gICAgaGVhZGVycyxcbiAgICBmaWxlRmllbGROYW1lLFxuICAgIGZvcm1GaWVsZHMsXG4gIH07XG4gIGlmICh1c2VyICYmIHBhc3MpIHtcbiAgICBvcHRpb25zLmF1dGggPSB7dXNlciwgcGFzc307XG4gIH1cbiAgYXdhaXQgbmV0LnVwbG9hZEZpbGUobG9jYWxGaWxlLCByZW1vdGVQYXRoLCBvcHRpb25zKTtcbiAgcmV0dXJuICcnO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlTY3JlZW5SZWNvcmRJc1N1cHBvcnRlZCAoYWRiLCBpc0VtdWxhdG9yKSB7XG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgYWRiLmdldEFwaUxldmVsKCk7XG4gIGlmIChpc0VtdWxhdG9yICYmIGFwaUxldmVsIDwgTUlOX0VNVUxBVE9SX0FQSV9MRVZFTCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2NyZWVuIHJlY29yZGluZyBkb2VzIG5vdCB3b3JrIG9uIGVtdWxhdG9ycyBydW5uaW5nIEFuZHJvaWQgQVBJIGxldmVsIGxlc3MgdGhhbiAke01JTl9FTVVMQVRPUl9BUElfTEVWRUx9YCk7XG4gIH1cbiAgaWYgKGFwaUxldmVsIDwgMTkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNjcmVlbiByZWNvcmRpbmcgbm90IGF2YWlsYWJsZSBvbiBBUEkgTGV2ZWwgJHthcGlMZXZlbH0uIE1pbmltdW0gQVBJIExldmVsIGlzIDE5LmApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlU2NyZWVuUmVjb3JkIChhZGIsIHJlY29yZGluZ1Byb3BlcnRpZXMsIGxvZyA9IG51bGwpIHtcbiAgaWYgKHJlY29yZGluZ1Byb3BlcnRpZXMuc3RvcHBlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB0aW1lcixcbiAgICB2aWRlb1NpemUsXG4gICAgYml0UmF0ZSxcbiAgICB0aW1lTGltaXQsXG4gICAgYnVnUmVwb3J0LFxuICB9ID0gcmVjb3JkaW5nUHJvcGVydGllcztcblxuICBsZXQgY3VycmVudFRpbWVMaW1pdCA9IE1BWF9SRUNPUkRJTkdfVElNRV9TRUM7XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHJlY29yZGluZ1Byb3BlcnRpZXMuY3VycmVudFRpbWVMaW1pdCkpIHtcbiAgICBjb25zdCBjdXJyZW50VGltZUxpbWl0SW50ID0gcGFyc2VJbnQocmVjb3JkaW5nUHJvcGVydGllcy5jdXJyZW50VGltZUxpbWl0LCAxMCk7XG4gICAgaWYgKCFpc05hTihjdXJyZW50VGltZUxpbWl0SW50KSAmJiBjdXJyZW50VGltZUxpbWl0SW50IDwgTUFYX1JFQ09SRElOR19USU1FX1NFQykge1xuICAgICAgY3VycmVudFRpbWVMaW1pdCA9IGN1cnJlbnRUaW1lTGltaXRJbnQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhdGhPbkRldmljZSA9IGAvc2RjYXJkLyR7dXRpbC51dWlkVjQoKS5zdWJzdHJpbmcoMCwgOCl9JHtERUZBVUxUX0VYVH1gO1xuICBjb25zdCByZWNvcmRpbmdQcm9jID0gYWRiLnNjcmVlbnJlY29yZChwYXRoT25EZXZpY2UsIHtcbiAgICB2aWRlb1NpemUsXG4gICAgYml0UmF0ZSxcbiAgICB0aW1lTGltaXQ6IGN1cnJlbnRUaW1lTGltaXQsXG4gICAgYnVnUmVwb3J0LFxuICB9KTtcblxuICByZWNvcmRpbmdQcm9jLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgaWYgKHJlY29yZGluZ1Byb3BlcnRpZXMuc3RvcHBlZCB8fCAhdXRpbC5oYXNWYWx1ZSh0aW1lTGltaXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnREdXJhdGlvbiA9IHRpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzLnRvRml4ZWQoMCk7XG4gICAgbG9nPy5kZWJ1ZyhgVGhlIG92ZXJhbGwgc2NyZWVuIHJlY29yZGluZyBkdXJhdGlvbiBpcyAke2N1cnJlbnREdXJhdGlvbn1zIHNvIGZhcmApO1xuICAgIGNvbnN0IHRpbWVMaW1pdEludCA9IHBhcnNlSW50KHRpbWVMaW1pdCwgMTApO1xuICAgIGlmIChpc05hTih0aW1lTGltaXRJbnQpIHx8IGN1cnJlbnREdXJhdGlvbiA+PSB0aW1lTGltaXRJbnQpIHtcbiAgICAgIGxvZz8uZGVidWcoJ1RoZXJlIGlzIG5vIG5lZWQgdG8gc3RhcnQgdGhlIG5leHQgcmVjb3JkaW5nIGNodW5rJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVjb3JkaW5nUHJvcGVydGllcy5jdXJyZW50VGltZUxpbWl0ID0gdGltZUxpbWl0SW50IC0gY3VycmVudER1cmF0aW9uO1xuICAgIGNvbnN0IGNodW5rRHVyYXRpb24gPSByZWNvcmRpbmdQcm9wZXJ0aWVzLmN1cnJlbnRUaW1lTGltaXQgPCBNQVhfUkVDT1JESU5HX1RJTUVfU0VDXG4gICAgICA/IHJlY29yZGluZ1Byb3BlcnRpZXMuY3VycmVudFRpbWVMaW1pdFxuICAgICAgOiBNQVhfUkVDT1JESU5HX1RJTUVfU0VDO1xuICAgIGxvZz8uZGVidWcoYFN0YXJ0aW5nIHRoZSBuZXh0ICR7Y2h1bmtEdXJhdGlvbn1zLWNodW5rIGAgK1xuICAgICAgYG9mIHNjcmVlbiByZWNvcmRpbmcgaW4gb3JkZXIgdG8gYWNoaWV2ZSAke3RpbWVMaW1pdEludH1zIHRvdGFsIGR1cmF0aW9uYCk7XG4gICAgc2NoZWR1bGVTY3JlZW5SZWNvcmQoYWRiLCByZWNvcmRpbmdQcm9wZXJ0aWVzLCBsb2cpXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgbG9nPy5lcnJvcihlLnN0YWNrKTtcbiAgICAgICAgcmVjb3JkaW5nUHJvcGVydGllcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuICB9KTtcblxuICBhd2FpdCByZWNvcmRpbmdQcm9jLnN0YXJ0KDApO1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gYXdhaXQgYWRiLmZpbGVFeGlzdHMocGF0aE9uRGV2aWNlKSxcbiAgICAgIHt3YWl0TXM6IFJFVFJZX1RJTUVPVVQsIGludGVydmFsTXM6IFJFVFJZX1BBVVNFfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBleHBlY3RlZCBzY3JlZW4gcmVjb3JkIGZpbGUgJyR7cGF0aE9uRGV2aWNlfScgZG9lcyBub3QgZXhpc3QgYWZ0ZXIgJHtSRVRSWV9USU1FT1VUfW1zLiBgICtcbiAgICAgIGBJcyAke1NDUkVFTlJFQ09SRF9CSU5BUll9IHV0aWxpdHkgYXZhaWxhYmxlIGFuZCBvcGVyYXRpb25hbCBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3Q/YCk7XG4gIH1cblxuICByZWNvcmRpbmdQcm9wZXJ0aWVzLnJlY29yZHMucHVzaChwYXRoT25EZXZpY2UpO1xuICByZWNvcmRpbmdQcm9wZXJ0aWVzLnJlY29yZGluZ1Byb2Nlc3MgPSByZWNvcmRpbmdQcm9jO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtZXJnZVNjcmVlblJlY29yZHMgKG1lZGlhRmlsZXMsIGxvZyA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53aGljaChGRk1QRUdfQklOQVJZKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtGRk1QRUdfQklOQVJZfSB1dGlsaXR5IGlzIG5vdCBhdmFpbGFibGUgaW4gUEFUSC4gUGxlYXNlIGluc3RhbGwgaXQgZnJvbSBodHRwczovL3d3dy5mZm1wZWcub3JnL2ApO1xuICB9XG4gIGNvbnN0IGNvbmZpZ0NvbnRlbnQgPSBtZWRpYUZpbGVzXG4gICAgLm1hcCgoeCkgPT4gYGZpbGUgJyR7eH0nYClcbiAgICAuam9pbignXFxuJyk7XG4gIGNvbnN0IGNvbmZpZ0ZpbGUgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKG1lZGlhRmlsZXNbMF0pLCAnY29uZmlnLnR4dCcpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUoY29uZmlnRmlsZSwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcbiAgbG9nPy5kZWJ1ZyhgR2VuZXJhdGVkIGZmbXBlZyBtZXJnaW5nIGNvbmZpZyAnJHtjb25maWdGaWxlfScgd2l0aCBpdGVtczpcXG4ke2NvbmZpZ0NvbnRlbnR9YCk7XG4gIGNvbnN0IHJlc3VsdCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUobWVkaWFGaWxlc1swXSksIGBtZXJnZV8ke01hdGguZmxvb3IobmV3IERhdGUoKSl9JHtERUZBVUxUX0VYVH1gKTtcbiAgY29uc3QgYXJncyA9IFsnLXNhZmUnLCAnMCcsICctZicsICdjb25jYXQnLCAnLWknLCBjb25maWdGaWxlLCAnLWMnLCAnY29weScsIHJlc3VsdF07XG4gIGxvZz8uaW5mbyhgSW5pdGlhdGluZyBzY3JlZW4gcmVjb3JkcyBtZXJnaW5nIHVzaW5nIHRoZSBjb21tYW5kICcke0ZGTVBFR19CSU5BUll9ICR7YXJncy5qb2luKCcgJyl9J2ApO1xuICBhd2FpdCBleGVjKEZGTVBFR19CSU5BUlksIGFyZ3MpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiB0ZXJtaW5hdGVCYWNrZ3JvdW5kU2NyZWVuUmVjb3JkaW5nIChhZGIsIGZvcmNlID0gdHJ1ZSkge1xuICBjb25zdCBwaWRzID0gKGF3YWl0IGFkYi5nZXRQSURzQnlOYW1lKFNDUkVFTlJFQ09SRF9CSU5BUlkpKVxuICAgIC5tYXAoKHApID0+IGAke3B9YCk7XG4gIGlmIChfLmlzRW1wdHkocGlkcykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGFkYi5zaGVsbChbJ2tpbGwnLCBmb3JjZSA/ICctMTUnIDogJy0yJywgLi4ucGlkc10pO1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gXy5pc0VtcHR5KGF3YWl0IGFkYi5nZXRQSURzQnlOYW1lKFNDUkVFTlJFQ09SRF9CSU5BUlkpKSwge1xuICAgICAgd2FpdE1zOiBQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVQsXG4gICAgICBpbnRlcnZhbE1zOiA1MDAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHN0b3AgdGhlIGJhY2tncm91bmQgc2NyZWVuIHJlY29yZGluZzogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufVxuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RhcnRSZWNvcmRpbmdPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSByZW1vdGVQYXRoIC0gVGhlIHBhdGggdG8gdGhlIHJlbW90ZSBsb2NhdGlvbiwgd2hlcmUgdGhlIGNhcHR1cmVkIHZpZGVvIHNob3VsZCBiZSB1cGxvYWRlZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQ6IGh0dHAvaHR0cHMsIGZ0cC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGwgb3IgZW1wdHkgc3RyaW5nIHZhbHVlICh0aGUgZGVmYXVsdCBzZXR0aW5nKSBtZWFucyB0aGUgY29udGVudCBvZiByZXN1bHRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc2hvdWxkIGJlIGVuY29kZWQgYXMgQmFzZTY0IGFuZCBwYXNzZWQgYXMgdGhlIGVuZHBvdW50IHJlc3BvbnNlIHZhbHVlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGlmIHRoZSBnZW5lcmF0ZWQgbWVkaWEgZmlsZSBpcyB0b28gYmlnIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXQgaW50byB0aGUgYXZhaWxhYmxlIHByb2Nlc3MgbWVtb3J5LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gb25seSBoYXMgYW4gZWZmZWN0IGlmIHRoZXJlIGlzIHNjcmVlbiByZWNvcmRpbmcgcHJvY2VzcyBpbiBwcm9ncmVlc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgZm9yY2VSZXN0YXJ0YCBwYXJhbWV0ZXIgaXMgbm90IHNldCB0byBgdHJ1ZWAuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVzZXIgLSBUaGUgbmFtZSBvZiB0aGUgdXNlciBmb3IgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbi4gT25seSB3b3JrcyBpZiBgcmVtb3RlUGF0aGAgaXMgcHJvdmlkZWQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBhc3MgLSBUaGUgcGFzc3dvcmQgZm9yIHRoZSByZW1vdGUgYXV0aGVudGljYXRpb24uIE9ubHkgd29ya3MgaWYgYHJlbW90ZVBhdGhgIGlzIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtZXRob2QgW1BVVF0gLSBUaGUgaHR0cCBtdWx0aXBhcnQgdXBsb2FkIG1ldGhvZCBuYW1lLiBPbmx5IHdvcmtzIGlmIGByZW1vdGVQYXRoYCBpcyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaGVhZGVycyAtIEFkZGl0aW9uYWwgaGVhZGVycyBtYXBwaW5nIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZpbGVGaWVsZE5hbWUgW2ZpbGVdIC0gVGhlIG5hbWUgb2YgdGhlIGZvcm0gZmllbGQsIHdoZXJlIHRoZSBmaWxlIGNvbnRlbnQgQkxPQiBzaG91bGQgYmUgc3RvcmVkIGZvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fEFycmF5PFBhaXI+fSBmb3JtRmllbGRzIC0gQWRkaXRpb25hbCBmb3JtIGZpZWxkcyBmb3IgbXVsdGlwYXJ0IGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2aWRlb1NpemUgLSBUaGUgZm9ybWF0IGlzIHdpZHRoeGhlaWdodC5cbiAqICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGRldmljZSdzIG5hdGl2ZSBkaXNwbGF5IHJlc29sdXRpb24gKGlmIHN1cHBvcnRlZCksXG4gKiAgICAgICAgICAgICAgICAgIDEyODB4NzIwIGlmIG5vdC4gRm9yIGJlc3QgcmVzdWx0cyxcbiAqICAgICAgICAgICAgICAgICAgdXNlIGEgc2l6ZSBzdXBwb3J0ZWQgYnkgeW91ciBkZXZpY2UncyBBZHZhbmNlZCBWaWRlbyBDb2RpbmcgKEFWQykgZW5jb2Rlci5cbiAqICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIFwiMTI4MHg3MjBcIlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gYnVnUmVwb3J0IC0gU2V0IGl0IHRvIGB0cnVlYCBpbiBvcmRlciB0byBkaXNwbGF5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlIHZpZGVvIG92ZXJsYXksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIGEgdGltZXN0YW1wLCB0aGF0IGlzIGhlbHBmdWwgaW4gdmlkZW9zIGNhcHR1cmVkIHRvIGlsbHVzdHJhdGUgYnVncy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIHNpbmNlIEFQSSBsZXZlbCAyNyAoQW5kcm9pZCBQKS5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHRpbWVMaW1pdCAtIFRoZSBtYXhpbXVtIHJlY29yZGluZyB0aW1lLCBpbiBzZWNvbmRzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxODAgKDMgbWludXRlcykuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWF4aW11bSB2YWx1ZSBpcyAxODAwICgzMCBtaW51dGVzKS4gSWYgdGhlIHBhc3NlZCB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gMTgwIHRoZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhbGdvcml0aG0gd2lsbCB0cnkgdG8gc2NoZWR1bGUgbXVsdGlwbGUgc2NyZWVuIHJlY29yZGluZyBjaHVua3MgYW5kIG1lcmdlIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0aW5nIHZpZGVvcyBpbnRvIGEgc2luZ2xlIG1lZGlhIGZpbGUgdXNpbmcgYGZmbXBlZ2AgdXRpbGl0eS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSB1dGlsaXR5IGlzIG5vdCBhdmFpbGFibGUgaW4gUEFUSCB0aGVuIHRoZSBtb3N0IHJlY2VudCBzY3JlZW4gcmVjb3JkaW5nIGNodW5rIGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2luZyB0byBiZSByZXR1cm5lZC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IGJpdFJhdGUgLSBUaGUgdmlkZW8gYml0IHJhdGUgZm9yIHRoZSB2aWRlbywgaW4gYml0cyBwZXIgc2Vjb25kLlxuICogICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgNDAwMDAwMCAoNCBNYml0L3MpLiBZb3UgY2FuIGluY3JlYXNlIHRoZSBiaXQgcmF0ZSB0byBpbXByb3ZlIHZpZGVvIHF1YWxpdHksXG4gKiAgICAgICAgICAgICAgICBidXQgZG9pbmcgc28gcmVzdWx0cyBpbiBsYXJnZXIgbW92aWUgZmlsZXMuXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBmb3JjZVJlc3RhcnQgLSBXaGV0aGVyIHRvIHRyeSB0byBjYXRjaCBhbmQgdXBsb2FkL3JldHVybiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgc2NyZWVuIHJlY29yZGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGBmYWxzZWAsIHRoZSBkZWZhdWx0IHNldHRpbmcpIG9yIGlnbm9yZSB0aGUgcmVzdWx0IG9mIGl0IGFuZCBzdGFydCBhIG5ldyByZWNvcmRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZWx5IChgdHJ1ZWApLlxuICovXG5cbi8qKlxuICogUmVjb3JkIHRoZSBkaXNwbGF5IG9mIGEgcmVhbCBkZXZpY2VzIHJ1bm5pbmcgQW5kcm9pZCA0LjQgKEFQSSBsZXZlbCAxOSkgYW5kIGhpZ2hlci5cbiAqIEVtdWxhdG9ycyBhcmUgc3VwcG9ydGVkIHNpbmNlIEFQSSBsZXZlbCAyNyAoQW5kcm9pZCBQKS5cbiAqIEl0IHJlY29yZHMgc2NyZWVuIGFjdGl2aXR5IHRvIGFuIE1QRUctNCBmaWxlLiBBdWRpbyBpcyBub3QgcmVjb3JkZWQgd2l0aCB0aGUgdmlkZW8gZmlsZS5cbiAqIElmIHNjcmVlbiByZWNvcmRpbmcgaGFzIGJlZW4gYWxyZWFkeSBzdGFydGVkIHRoZW4gdGhlIGNvbW1hbmQgd2lsbCBzdG9wIGl0IGZvcmNlZnVsbHkgYW5kIHN0YXJ0IGEgbmV3IG9uZS5cbiAqIFRoZSBwcmV2aW91c2x5IHJlY29yZGVkIHZpZGVvIGZpbGUgd2lsbCBiZSBkZWxldGVkLlxuICpcbiAqIEBwYXJhbSB7P1N0YXJ0UmVjb3JkaW5nT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NC1lbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHJlY29yZGVkIG1lZGlhIGZpbGUgaWZcbiAqICAgICAgICAgICAgICAgICAgIGFueSBzY3JlZW4gcmVjb3JkaW5nIGlzIGN1cnJlbnRseSBydW5uaW5nIG9yIGFuIGVtcHR5IHN0cmluZy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBzY3JlZW4gcmVjb3JkaW5nIGhhcyBmYWlsZWQgdG8gc3RhcnQgb3IgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKi9cbmNvbW1hbmRzLnN0YXJ0UmVjb3JkaW5nU2NyZWVuID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRSZWNvcmRpbmdTY3JlZW4gKG9wdGlvbnMgPSB7fSkge1xuICBhd2FpdCB2ZXJpZnlTY3JlZW5SZWNvcmRJc1N1cHBvcnRlZCh0aGlzLmFkYiwgdGhpcy5pc0VtdWxhdG9yKCkpO1xuXG4gIGxldCByZXN1bHQgPSAnJztcbiAgY29uc3Qge3ZpZGVvU2l6ZSwgdGltZUxpbWl0ID0gREVGQVVMVF9SRUNPUkRJTkdfVElNRV9TRUMsIGJ1Z1JlcG9ydCwgYml0UmF0ZSwgZm9yY2VSZXN0YXJ0fSA9IG9wdGlvbnM7XG4gIGlmICghZm9yY2VSZXN0YXJ0KSB7XG4gICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdG9wUmVjb3JkaW5nU2NyZWVuKG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKGF3YWl0IHRlcm1pbmF0ZUJhY2tncm91bmRTY3JlZW5SZWNvcmRpbmcodGhpcy5hZGIsIHRydWUpKSB7XG4gICAgdGhpcy5sb2cud2FybihgVGhlcmUgd2VyZSBzb21lICR7U0NSRUVOUkVDT1JEX0JJTkFSWX0gcHJvY2VzcyBsZWZ0b3ZlcnMgcnVubmluZyBgICtcbiAgICAgIGBpbiB0aGUgYmFja2dyb3VuZC4gTWFrZSBzdXJlIHlvdSBzdG9wIHNjcmVlbiByZWNvcmRpbmcgZWFjaCB0aW1lIGFmdGVyIGl0IGlzIHN0YXJ0ZWQsIGAgK1xuICAgICAgYG90aGVyd2lzZSB0aGUgcmVjb3JkZWQgbWVkaWEgbWlnaHQgcXVpY2tseSBleGNlZWQgYWxsIHRoZSBmcmVlIHNwYWNlIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5gKTtcbiAgfVxuXG4gIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2YgKHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMucmVjb3JkcyB8fCBbXSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnJpbXJhZihyZWNvcmQpO1xuICAgIH1cbiAgICB0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzID0gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHRpbWVvdXQgPSBwYXJzZUZsb2F0KHRpbWVMaW1pdCk7XG4gIGlmIChpc05hTih0aW1lb3V0KSB8fCB0aW1lb3V0ID4gTUFYX1RJTUVfU0VDIHx8IHRpbWVvdXQgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHRpbWVMaW1pdCB2YWx1ZSBtdXN0IGJlIGluIHJhbmdlIFsxLCAke01BWF9USU1FX1NFQ31dIHNlY29uZHMuIGAgK1xuICAgICAgYFRoZSB2YWx1ZSBvZiAnJHt0aW1lTGltaXR9JyBoYXMgYmVlbiBwYXNzZWQgaW5zdGVhZC5gKTtcbiAgfVxuXG4gIHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMgPSB7XG4gICAgdGltZXI6IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpLFxuICAgIHZpZGVvU2l6ZSxcbiAgICB0aW1lTGltaXQsXG4gICAgY3VycmVudFRpbWVMaW1pdDogdGltZUxpbWl0LFxuICAgIGJpdFJhdGUsXG4gICAgYnVnUmVwb3J0LFxuICAgIHJlY29yZHM6IFtdLFxuICAgIHJlY29yZGluZ1Byb2Nlc3M6IG51bGwsXG4gICAgc3RvcHBlZDogZmFsc2UsXG4gIH07XG4gIGF3YWl0IHNjaGVkdWxlU2NyZWVuUmVjb3JkKHRoaXMuYWRiLCB0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzLCB0aGlzLmxvZyk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0b3BSZWNvcmRpbmdPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSByZW1vdGVQYXRoIC0gVGhlIHBhdGggdG8gdGhlIHJlbW90ZSBsb2NhdGlvbiwgd2hlcmUgdGhlIHJlc3VsdGluZyB2aWRlbyBzaG91bGQgYmUgdXBsb2FkZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgc3VwcG9ydGVkOiBodHRwL2h0dHBzLCBmdHAuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsIG9yIGVtcHR5IHN0cmluZyB2YWx1ZSAodGhlIGRlZmF1bHQgc2V0dGluZykgbWVhbnMgdGhlIGNvbnRlbnQgb2YgcmVzdWx0aW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHNob3VsZCBiZSBlbmNvZGVkIGFzIEJhc2U2NCBhbmQgcGFzc2VkIGFzIHRoZSBlbmRwb3VudCByZXNwb25zZSB2YWx1ZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiB0aGUgZ2VuZXJhdGVkIG1lZGlhIGZpbGUgaXMgdG9vIGJpZyB0b1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml0IGludG8gdGhlIGF2YWlsYWJsZSBwcm9jZXNzIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXNlciAtIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYXNzIC0gVGhlIHBhc3N3b3JkIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtZXRob2QgLSBUaGUgaHR0cCBtdWx0aXBhcnQgdXBsb2FkIG1ldGhvZCBuYW1lLiBUaGUgJ1BVVCcgb25lIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaGVhZGVycyAtIEFkZGl0aW9uYWwgaGVhZGVycyBtYXBwaW5nIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZpbGVGaWVsZE5hbWUgW2ZpbGVdIC0gVGhlIG5hbWUgb2YgdGhlIGZvcm0gZmllbGQsIHdoZXJlIHRoZSBmaWxlIGNvbnRlbnQgQkxPQiBzaG91bGQgYmUgc3RvcmVkIGZvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fEFycmF5PFBhaXI+fSBmb3JtRmllbGRzIC0gQWRkaXRpb25hbCBmb3JtIGZpZWxkcyBmb3IgbXVsdGlwYXJ0IGh0dHAocykgdXBsb2Fkc1xuICovXG5cbi8qKlxuICogU3RvcCByZWNvcmRpbmcgdGhlIHNjcmVlbi5cbiAqIElmIG5vIHNjcmVlbiByZWNvcmRpbmcgaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUgdGhlbiB0aGUgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7P1N0b3BSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIC0gVGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcmVjb3JkZWQgbWVkaWEgZmlsZSBpZiAncmVtb3RlUGF0aCdcbiAqICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBpcyBmYWxzeSBvciBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5hbWUgb2YgYSBtZWRpYSBmaWxlXG4gKiAgICAgICAgICAgICAgICAgb3IgdGhlIGZpbGUgY29udGVudCBjYW5ub3QgYmUgdXBsb2FkZWQgdG8gdGhlIHJlbW90ZSBsb2NhdGlvblxuICogICAgICAgICAgICAgICAgIG9yIHNjcmVlbiByZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKi9cbmNvbW1hbmRzLnN0b3BSZWNvcmRpbmdTY3JlZW4gPSBhc3luYyBmdW5jdGlvbiBzdG9wUmVjb3JkaW5nU2NyZWVuIChvcHRpb25zID0ge30pIHtcbiAgYXdhaXQgdmVyaWZ5U2NyZWVuUmVjb3JkSXNTdXBwb3J0ZWQodGhpcy5hZGIsIHRoaXMuaXNFbXVsYXRvcigpKTtcblxuICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgIHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMuc3RvcHBlZCA9IHRydWU7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHRlcm1pbmF0ZUJhY2tncm91bmRTY3JlZW5SZWNvcmRpbmcodGhpcy5hZGIsIGZhbHNlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5sb2cud2FybihlcnIubWVzc2FnZSk7XG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcykpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ1RoZSByZXN1bHRpbmcgdmlkZW8gbWlnaHQgYmUgY29ycnVwdGVkJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgIHRoaXMubG9nLmluZm8oYFNjcmVlbiByZWNvcmRpbmcgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgc3RhcnRlZCBieSBBcHBpdW0uIFRoZXJlIGlzIG5vdGhpbmcgdG8gc3RvcGApO1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzLnJlY29yZGluZ1Byb2Nlc3MgJiYgdGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcy5yZWNvcmRpbmdQcm9jZXNzLmlzUnVubmluZykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzLnJlY29yZGluZ1Byb2Nlc3Muc3RvcCgnU0lHSU5UJywgUFJPQ0VTU19TSFVURE9XTl9USU1FT1VUKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gc3RvcCBzY3JlZW4gcmVjb3JkaW5nIHdpdGhpbiAke1BST0NFU1NfU0hVVERPV05fVElNRU9VVH1tc2ApO1xuICAgIH1cbiAgICB0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzLnJlY29yZGluZ1Byb2Nlc3MgPSBudWxsO1xuICB9XG5cbiAgaWYgKF8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzLnJlY29yZHMpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgTm8gc2NyZWVuIHJlY29yZGluZ3MgaGF2ZSBiZWVuIHN0b3JlZCBvbiB0aGUgZGV2aWNlIHNvIGZhci4gYCArXG4gICAgICBgQXJlIHlvdSBzdXJlIHRoZSAke1NDUkVFTlJFQ09SRF9CSU5BUll9IHV0aWxpdHkgd29ya3MgYXMgZXhwZWN0ZWQ/YCk7XG4gIH1cblxuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgY29uc3QgbG9jYWxSZWNvcmRzID0gW107XG4gICAgZm9yIChjb25zdCBwYXRoT25EZXZpY2Ugb2YgdGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcy5yZWNvcmRzKSB7XG4gICAgICBsb2NhbFJlY29yZHMucHVzaChwYXRoLnJlc29sdmUodG1wUm9vdCwgcGF0aC5wb3NpeC5iYXNlbmFtZShwYXRoT25EZXZpY2UpKSk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5wdWxsKHBhdGhPbkRldmljZSwgXy5sYXN0KGxvY2FsUmVjb3JkcykpO1xuICAgICAgYXdhaXQgdGhpcy5hZGIucmltcmFmKHBhdGhPbkRldmljZSk7XG4gICAgfVxuICAgIGxldCByZXN1bHRGaWxlUGF0aCA9IF8ubGFzdChsb2NhbFJlY29yZHMpO1xuICAgIGlmIChsb2NhbFJlY29yZHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgR290ICR7bG9jYWxSZWNvcmRzLmxlbmd0aH0gc2NyZWVuIHJlY29yZGluZ3MuIFRyeWluZyB0byBtZXJnZSB0aGVtYCk7XG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHRGaWxlUGF0aCA9IGF3YWl0IG1lcmdlU2NyZWVuUmVjb3Jkcyhsb2NhbFJlY29yZHMsIHRoaXMubG9nKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IG1lcmdlIHRoZSByZWNvcmRlZCBmaWxlcy4gVGhlIG1vc3QgcmVjZW50IHNjcmVlbiByZWNvcmRpbmcgaXMgZ29pbmcgdG8gYmUgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdC4gYCArXG4gICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShvcHRpb25zLnJlbW90ZVBhdGgpKSB7XG4gICAgICBjb25zdCB7c2l6ZX0gPSBhd2FpdCBmcy5zdGF0KHJlc3VsdEZpbGVQYXRoKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIHNjcmVlbiByZWNvcmRpbmcgaXMgJHt1dGlsLnRvUmVhZGFibGVTaXplU3RyaW5nKHNpemUpfWApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdXBsb2FkUmVjb3JkZWRNZWRpYShyZXN1bHRGaWxlUGF0aCwgb3B0aW9ucy5yZW1vdGVQYXRoLCBvcHRpb25zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgdGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcyA9IG51bGw7XG4gIH1cbn07XG5cblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjs7QUFFQSxNQUFNQyxXQUFXLEdBQUcsR0FBcEI7QUFDQSxNQUFNQyxhQUFhLEdBQUcsSUFBdEI7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxLQUFLLENBQXBDO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLEtBQUssRUFBMUI7QUFDQSxNQUFNQywwQkFBMEIsR0FBR0Ysc0JBQW5DO0FBQ0EsTUFBTUcsd0JBQXdCLEdBQUcsS0FBSyxJQUF0QztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLGNBQTVCO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLE1BQXBCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsRUFBL0I7QUFDQSxNQUFNQyxhQUFhLEdBQUksU0FBUUMsZUFBQSxDQUFPQyxTQUFQLEtBQXFCLE1BQXJCLEdBQThCLEVBQUcsRUFBaEU7O0FBRUEsZUFBZUMsbUJBQWYsQ0FBb0NDLFNBQXBDLEVBQStDQyxVQUFVLEdBQUcsSUFBNUQsRUFBa0VDLGFBQWEsR0FBRyxFQUFsRixFQUFzRjtFQUNwRixJQUFJQyxlQUFBLENBQUVDLE9BQUYsQ0FBVUgsVUFBVixDQUFKLEVBQTJCO0lBQ3pCLE9BQU8sQ0FBQyxNQUFNSSxhQUFBLENBQUtDLGdCQUFMLENBQXNCTixTQUF0QixDQUFQLEVBQXlDTyxRQUF6QyxFQUFQO0VBQ0Q7O0VBRUQsTUFBTTtJQUFDQyxJQUFEO0lBQU9DLElBQVA7SUFBYUMsTUFBYjtJQUFxQkMsT0FBckI7SUFBOEJDLGFBQTlCO0lBQTZDQztFQUE3QyxJQUEyRFgsYUFBakU7RUFDQSxNQUFNWSxPQUFPLEdBQUc7SUFDZEosTUFBTSxFQUFFQSxNQUFNLElBQUksS0FESjtJQUVkQyxPQUZjO0lBR2RDLGFBSGM7SUFJZEM7RUFKYyxDQUFoQjs7RUFNQSxJQUFJTCxJQUFJLElBQUlDLElBQVosRUFBa0I7SUFDaEJLLE9BQU8sQ0FBQ0MsSUFBUixHQUFlO01BQUNQLElBQUQ7TUFBT0M7SUFBUCxDQUFmO0VBQ0Q7O0VBQ0QsTUFBTU8sWUFBQSxDQUFJQyxVQUFKLENBQWVqQixTQUFmLEVBQTBCQyxVQUExQixFQUFzQ2EsT0FBdEMsQ0FBTjtFQUNBLE9BQU8sRUFBUDtBQUNEOztBQUVELGVBQWVJLDZCQUFmLENBQThDQyxHQUE5QyxFQUFtREMsVUFBbkQsRUFBK0Q7RUFDN0QsTUFBTUMsUUFBUSxHQUFHLE1BQU1GLEdBQUcsQ0FBQ0csV0FBSixFQUF2Qjs7RUFDQSxJQUFJRixVQUFVLElBQUlDLFFBQVEsR0FBRzFCLHNCQUE3QixFQUFxRDtJQUNuRCxNQUFNLElBQUk0QixLQUFKLENBQVcsbUZBQWtGNUIsc0JBQXVCLEVBQXBILENBQU47RUFDRDs7RUFDRCxJQUFJMEIsUUFBUSxHQUFHLEVBQWYsRUFBbUI7SUFDakIsTUFBTSxJQUFJRSxLQUFKLENBQVcsK0NBQThDRixRQUFTLDRCQUFsRSxDQUFOO0VBQ0Q7QUFDRjs7QUFFRCxlQUFlRyxvQkFBZixDQUFxQ0wsR0FBckMsRUFBMENNLG1CQUExQyxFQUErREMsR0FBRyxHQUFHLElBQXJFLEVBQTJFO0VBQ3pFLElBQUlELG1CQUFtQixDQUFDRSxPQUF4QixFQUFpQztJQUMvQjtFQUNEOztFQUVELE1BQU07SUFDSkMsS0FESTtJQUVKQyxTQUZJO0lBR0pDLE9BSEk7SUFJSkMsU0FKSTtJQUtKQztFQUxJLElBTUZQLG1CQU5KO0VBUUEsSUFBSVEsZ0JBQWdCLEdBQUc1QyxzQkFBdkI7O0VBQ0EsSUFBSWdCLGFBQUEsQ0FBSzZCLFFBQUwsQ0FBY1QsbUJBQW1CLENBQUNRLGdCQUFsQyxDQUFKLEVBQXlEO0lBQ3ZELE1BQU1FLG1CQUFtQixHQUFHQyxRQUFRLENBQUNYLG1CQUFtQixDQUFDUSxnQkFBckIsRUFBdUMsRUFBdkMsQ0FBcEM7O0lBQ0EsSUFBSSxDQUFDSSxLQUFLLENBQUNGLG1CQUFELENBQU4sSUFBK0JBLG1CQUFtQixHQUFHOUMsc0JBQXpELEVBQWlGO01BQy9FNEMsZ0JBQWdCLEdBQUdFLG1CQUFuQjtJQUNEO0VBQ0Y7O0VBQ0QsTUFBTUcsWUFBWSxHQUFJLFdBQVVqQyxhQUFBLENBQUtrQyxNQUFMLEdBQWNDLFNBQWQsQ0FBd0IsQ0FBeEIsRUFBMkIsQ0FBM0IsQ0FBOEIsR0FBRTlDLFdBQVksRUFBNUU7RUFDQSxNQUFNK0MsYUFBYSxHQUFHdEIsR0FBRyxDQUFDdUIsWUFBSixDQUFpQkosWUFBakIsRUFBK0I7SUFDbkRULFNBRG1EO0lBRW5EQyxPQUZtRDtJQUduREMsU0FBUyxFQUFFRSxnQkFId0M7SUFJbkREO0VBSm1ELENBQS9CLENBQXRCO0VBT0FTLGFBQWEsQ0FBQ0UsRUFBZCxDQUFpQixLQUFqQixFQUF3QixNQUFNO0lBQzVCLElBQUlsQixtQkFBbUIsQ0FBQ0UsT0FBcEIsSUFBK0IsQ0FBQ3RCLGFBQUEsQ0FBSzZCLFFBQUwsQ0FBY0gsU0FBZCxDQUFwQyxFQUE4RDtNQUM1RDtJQUNEOztJQUNELE1BQU1hLGVBQWUsR0FBR2hCLEtBQUssQ0FBQ2lCLFdBQU4sR0FBb0JDLFNBQXBCLENBQThCQyxPQUE5QixDQUFzQyxDQUF0QyxDQUF4QjtJQUNBckIsR0FBRyxTQUFILElBQUFBLEdBQUcsV0FBSCxZQUFBQSxHQUFHLENBQUVzQixLQUFMLENBQVksNENBQTJDSixlQUFnQixVQUF2RTtJQUNBLE1BQU1LLFlBQVksR0FBR2IsUUFBUSxDQUFDTCxTQUFELEVBQVksRUFBWixDQUE3Qjs7SUFDQSxJQUFJTSxLQUFLLENBQUNZLFlBQUQsQ0FBTCxJQUF1QkwsZUFBZSxJQUFJSyxZQUE5QyxFQUE0RDtNQUMxRHZCLEdBQUcsU0FBSCxJQUFBQSxHQUFHLFdBQUgsWUFBQUEsR0FBRyxDQUFFc0IsS0FBTCxDQUFXLG9EQUFYO01BQ0E7SUFDRDs7SUFFRHZCLG1CQUFtQixDQUFDUSxnQkFBcEIsR0FBdUNnQixZQUFZLEdBQUdMLGVBQXREO0lBQ0EsTUFBTU0sYUFBYSxHQUFHekIsbUJBQW1CLENBQUNRLGdCQUFwQixHQUF1QzVDLHNCQUF2QyxHQUNsQm9DLG1CQUFtQixDQUFDUSxnQkFERixHQUVsQjVDLHNCQUZKO0lBR0FxQyxHQUFHLFNBQUgsSUFBQUEsR0FBRyxXQUFILFlBQUFBLEdBQUcsQ0FBRXNCLEtBQUwsQ0FBWSxxQkFBb0JFLGFBQWMsVUFBbkMsR0FDUiwyQ0FBMENELFlBQWEsa0JBRDFEO0lBRUF6QixvQkFBb0IsQ0FBQ0wsR0FBRCxFQUFNTSxtQkFBTixFQUEyQkMsR0FBM0IsQ0FBcEIsQ0FDR3lCLEtBREgsQ0FDVUMsQ0FBRCxJQUFPO01BQ1oxQixHQUFHLFNBQUgsSUFBQUEsR0FBRyxXQUFILFlBQUFBLEdBQUcsQ0FBRTJCLEtBQUwsQ0FBV0QsQ0FBQyxDQUFDRSxLQUFiO01BQ0E3QixtQkFBbUIsQ0FBQ0UsT0FBcEIsR0FBOEIsSUFBOUI7SUFDRCxDQUpIO0VBS0QsQ0F2QkQ7RUF5QkEsTUFBTWMsYUFBYSxDQUFDYyxLQUFkLENBQW9CLENBQXBCLENBQU47O0VBQ0EsSUFBSTtJQUNGLE1BQU0sSUFBQUMsMEJBQUEsRUFBaUIsWUFBWSxNQUFNckMsR0FBRyxDQUFDc0MsVUFBSixDQUFlbkIsWUFBZixDQUFuQyxFQUNKO01BQUNvQixNQUFNLEVBQUV0RSxhQUFUO01BQXdCdUUsVUFBVSxFQUFFeEU7SUFBcEMsQ0FESSxDQUFOO0VBRUQsQ0FIRCxDQUdFLE9BQU9pRSxDQUFQLEVBQVU7SUFDVixNQUFNLElBQUk3QixLQUFKLENBQVcsb0NBQW1DZSxZQUFhLDBCQUF5QmxELGFBQWMsTUFBeEYsR0FDYixNQUFLSyxtQkFBb0IsOERBRHRCLENBQU47RUFFRDs7RUFFRGdDLG1CQUFtQixDQUFDbUMsT0FBcEIsQ0FBNEJDLElBQTVCLENBQWlDdkIsWUFBakM7RUFDQWIsbUJBQW1CLENBQUNxQyxnQkFBcEIsR0FBdUNyQixhQUF2QztBQUNEOztBQUVELGVBQWVzQixrQkFBZixDQUFtQ0MsVUFBbkMsRUFBK0N0QyxHQUFHLEdBQUcsSUFBckQsRUFBMkQ7RUFDekQsSUFBSTtJQUNGLE1BQU11QyxXQUFBLENBQUdDLEtBQUgsQ0FBU3RFLGFBQVQsQ0FBTjtFQUNELENBRkQsQ0FFRSxPQUFPd0QsQ0FBUCxFQUFVO0lBQ1YsTUFBTSxJQUFJN0IsS0FBSixDQUFXLEdBQUUzQixhQUFjLG1GQUEzQixDQUFOO0VBQ0Q7O0VBQ0QsTUFBTXVFLGFBQWEsR0FBR0gsVUFBVSxDQUM3QkksR0FEbUIsQ0FDZEMsQ0FBRCxJQUFRLFNBQVFBLENBQUUsR0FESCxFQUVuQkMsSUFGbUIsQ0FFZCxJQUZjLENBQXRCOztFQUdBLE1BQU1DLFVBQVUsR0FBR0MsYUFBQSxDQUFLQyxPQUFMLENBQWFELGFBQUEsQ0FBS0UsT0FBTCxDQUFhVixVQUFVLENBQUMsQ0FBRCxDQUF2QixDQUFiLEVBQTBDLFlBQTFDLENBQW5COztFQUNBLE1BQU1DLFdBQUEsQ0FBR1UsU0FBSCxDQUFhSixVQUFiLEVBQXlCSixhQUF6QixFQUF3QyxNQUF4QyxDQUFOO0VBQ0F6QyxHQUFHLFNBQUgsSUFBQUEsR0FBRyxXQUFILFlBQUFBLEdBQUcsQ0FBRXNCLEtBQUwsQ0FBWSxvQ0FBbUN1QixVQUFXLGtCQUFpQkosYUFBYyxFQUF6Rjs7RUFDQSxNQUFNUyxNQUFNLEdBQUdKLGFBQUEsQ0FBS0MsT0FBTCxDQUFhRCxhQUFBLENBQUtFLE9BQUwsQ0FBYVYsVUFBVSxDQUFDLENBQUQsQ0FBdkIsQ0FBYixFQUEyQyxTQUFRYSxJQUFJLENBQUNDLEtBQUwsQ0FBVyxJQUFJQyxJQUFKLEVBQVgsQ0FBdUIsR0FBRXJGLFdBQVksRUFBeEYsQ0FBZjs7RUFDQSxNQUFNc0YsSUFBSSxHQUFHLENBQUMsT0FBRCxFQUFVLEdBQVYsRUFBZSxJQUFmLEVBQXFCLFFBQXJCLEVBQStCLElBQS9CLEVBQXFDVCxVQUFyQyxFQUFpRCxJQUFqRCxFQUF1RCxNQUF2RCxFQUErREssTUFBL0QsQ0FBYjtFQUNBbEQsR0FBRyxTQUFILElBQUFBLEdBQUcsV0FBSCxZQUFBQSxHQUFHLENBQUV1RCxJQUFMLENBQVcsd0RBQXVEckYsYUFBYyxJQUFHb0YsSUFBSSxDQUFDVixJQUFMLENBQVUsR0FBVixDQUFlLEdBQWxHO0VBQ0EsTUFBTSxJQUFBWSxrQkFBQSxFQUFLdEYsYUFBTCxFQUFvQm9GLElBQXBCLENBQU47RUFDQSxPQUFPSixNQUFQO0FBQ0Q7O0FBRUQsZUFBZU8sa0NBQWYsQ0FBbURoRSxHQUFuRCxFQUF3RGlFLEtBQUssR0FBRyxJQUFoRSxFQUFzRTtFQUNwRSxNQUFNQyxJQUFJLEdBQUcsQ0FBQyxNQUFNbEUsR0FBRyxDQUFDbUUsYUFBSixDQUFrQjdGLG1CQUFsQixDQUFQLEVBQ1YyRSxHQURVLENBQ0xtQixDQUFELElBQVEsR0FBRUEsQ0FBRSxFQUROLENBQWI7O0VBRUEsSUFBSXBGLGVBQUEsQ0FBRUMsT0FBRixDQUFVaUYsSUFBVixDQUFKLEVBQXFCO0lBQ25CLE9BQU8sS0FBUDtFQUNEOztFQUVELElBQUk7SUFDRixNQUFNbEUsR0FBRyxDQUFDcUUsS0FBSixDQUFVLENBQUMsTUFBRCxFQUFTSixLQUFLLEdBQUcsS0FBSCxHQUFXLElBQXpCLEVBQStCLEdBQUdDLElBQWxDLENBQVYsQ0FBTjtJQUNBLE1BQU0sSUFBQTdCLDBCQUFBLEVBQWlCLFlBQVlyRCxlQUFBLENBQUVDLE9BQUYsQ0FBVSxNQUFNZSxHQUFHLENBQUNtRSxhQUFKLENBQWtCN0YsbUJBQWxCLENBQWhCLENBQTdCLEVBQXNGO01BQzFGaUUsTUFBTSxFQUFFbEUsd0JBRGtGO01BRTFGbUUsVUFBVSxFQUFFO0lBRjhFLENBQXRGLENBQU47SUFJQSxPQUFPLElBQVA7RUFDRCxDQVBELENBT0UsT0FBTzhCLEdBQVAsRUFBWTtJQUNaLE1BQU0sSUFBSWxFLEtBQUosQ0FBVyxtREFBa0RrRSxHQUFHLENBQUNDLE9BQVEsRUFBekUsQ0FBTjtFQUNEO0FBQ0Y7O0FBdUREeEcsUUFBUSxDQUFDeUcsb0JBQVQsR0FBZ0MsZUFBZUEsb0JBQWYsQ0FBcUM3RSxPQUFPLEdBQUcsRUFBL0MsRUFBbUQ7RUFDakYsTUFBTUksNkJBQTZCLENBQUMsS0FBS0MsR0FBTixFQUFXLEtBQUtDLFVBQUwsRUFBWCxDQUFuQztFQUVBLElBQUl3RCxNQUFNLEdBQUcsRUFBYjtFQUNBLE1BQU07SUFBQy9DLFNBQUQ7SUFBWUUsU0FBUyxHQUFHeEMsMEJBQXhCO0lBQW9EeUMsU0FBcEQ7SUFBK0RGLE9BQS9EO0lBQXdFOEQ7RUFBeEUsSUFBd0Y5RSxPQUE5Rjs7RUFDQSxJQUFJLENBQUM4RSxZQUFMLEVBQW1CO0lBQ2pCaEIsTUFBTSxHQUFHLE1BQU0sS0FBS2lCLG1CQUFMLENBQXlCL0UsT0FBekIsQ0FBZjtFQUNEOztFQUVELElBQUksTUFBTXFFLGtDQUFrQyxDQUFDLEtBQUtoRSxHQUFOLEVBQVcsSUFBWCxDQUE1QyxFQUE4RDtJQUM1RCxLQUFLTyxHQUFMLENBQVNvRSxJQUFULENBQWUsbUJBQWtCckcsbUJBQW9CLDZCQUF2QyxHQUNYLHdGQURXLEdBRVgsZ0dBRkg7RUFHRDs7RUFFRCxJQUFJLENBQUNVLGVBQUEsQ0FBRUMsT0FBRixDQUFVLEtBQUsyRiwwQkFBZixDQUFMLEVBQWlEO0lBQy9DLEtBQUssTUFBTUMsTUFBWCxJQUFzQixLQUFLRCwwQkFBTCxDQUFnQ25DLE9BQWhDLElBQTJDLEVBQWpFLEVBQXNFO01BQ3BFLE1BQU0sS0FBS3pDLEdBQUwsQ0FBUzhFLE1BQVQsQ0FBZ0JELE1BQWhCLENBQU47SUFDRDs7SUFDRCxLQUFLRCwwQkFBTCxHQUFrQyxJQUFsQztFQUNEOztFQUVELE1BQU1HLE9BQU8sR0FBR0MsVUFBVSxDQUFDcEUsU0FBRCxDQUExQjs7RUFDQSxJQUFJTSxLQUFLLENBQUM2RCxPQUFELENBQUwsSUFBa0JBLE9BQU8sR0FBRzVHLFlBQTVCLElBQTRDNEcsT0FBTyxJQUFJLENBQTNELEVBQThEO0lBQzVELE1BQU0sSUFBSTNFLEtBQUosQ0FBVyw0Q0FBMkNqQyxZQUFhLGFBQXpELEdBQ2IsaUJBQWdCeUMsU0FBVSw0QkFEdkIsQ0FBTjtFQUVEOztFQUVELEtBQUtnRSwwQkFBTCxHQUFrQztJQUNoQ25FLEtBQUssRUFBRSxJQUFJd0UsZUFBQSxDQUFPQyxLQUFYLEdBQW1COUMsS0FBbkIsRUFEeUI7SUFFaEMxQixTQUZnQztJQUdoQ0UsU0FIZ0M7SUFJaENFLGdCQUFnQixFQUFFRixTQUpjO0lBS2hDRCxPQUxnQztJQU1oQ0UsU0FOZ0M7SUFPaEM0QixPQUFPLEVBQUUsRUFQdUI7SUFRaENFLGdCQUFnQixFQUFFLElBUmM7SUFTaENuQyxPQUFPLEVBQUU7RUFUdUIsQ0FBbEM7RUFXQSxNQUFNSCxvQkFBb0IsQ0FBQyxLQUFLTCxHQUFOLEVBQVcsS0FBSzRFLDBCQUFoQixFQUE0QyxLQUFLckUsR0FBakQsQ0FBMUI7RUFDQSxPQUFPa0QsTUFBUDtBQUNELENBekNEOztBQXdFQTFGLFFBQVEsQ0FBQzJHLG1CQUFULEdBQStCLGVBQWVBLG1CQUFmLENBQW9DL0UsT0FBTyxHQUFHLEVBQTlDLEVBQWtEO0VBQy9FLE1BQU1JLDZCQUE2QixDQUFDLEtBQUtDLEdBQU4sRUFBVyxLQUFLQyxVQUFMLEVBQVgsQ0FBbkM7O0VBRUEsSUFBSSxDQUFDakIsZUFBQSxDQUFFQyxPQUFGLENBQVUsS0FBSzJGLDBCQUFmLENBQUwsRUFBaUQ7SUFDL0MsS0FBS0EsMEJBQUwsQ0FBZ0NwRSxPQUFoQyxHQUEwQyxJQUExQztFQUNEOztFQUVELElBQUk7SUFDRixNQUFNd0Qsa0NBQWtDLENBQUMsS0FBS2hFLEdBQU4sRUFBVyxLQUFYLENBQXhDO0VBQ0QsQ0FGRCxDQUVFLE9BQU9zRSxHQUFQLEVBQVk7SUFDWixLQUFLL0QsR0FBTCxDQUFTb0UsSUFBVCxDQUFjTCxHQUFHLENBQUNDLE9BQWxCOztJQUNBLElBQUksQ0FBQ3ZGLGVBQUEsQ0FBRUMsT0FBRixDQUFVLEtBQUsyRiwwQkFBZixDQUFMLEVBQWlEO01BQy9DLEtBQUtyRSxHQUFMLENBQVNvRSxJQUFULENBQWMsd0NBQWQ7SUFDRDtFQUNGOztFQUVELElBQUkzRixlQUFBLENBQUVDLE9BQUYsQ0FBVSxLQUFLMkYsMEJBQWYsQ0FBSixFQUFnRDtJQUM5QyxLQUFLckUsR0FBTCxDQUFTdUQsSUFBVCxDQUFlLHNGQUFmO0lBQ0EsT0FBTyxFQUFQO0VBQ0Q7O0VBRUQsSUFBSSxLQUFLYywwQkFBTCxDQUFnQ2pDLGdCQUFoQyxJQUFvRCxLQUFLaUMsMEJBQUwsQ0FBZ0NqQyxnQkFBaEMsQ0FBaUR3QyxTQUF6RyxFQUFvSDtJQUNsSCxJQUFJO01BQ0YsTUFBTSxLQUFLUCwwQkFBTCxDQUFnQ2pDLGdCQUFoQyxDQUFpRHlDLElBQWpELENBQXNELFFBQXRELEVBQWdFL0csd0JBQWhFLENBQU47SUFDRCxDQUZELENBRUUsT0FBTzRELENBQVAsRUFBVTtNQUNWLEtBQUsxQixHQUFMLENBQVM4RSxhQUFULENBQXdCLDBDQUF5Q2hILHdCQUF5QixJQUExRjtJQUNEOztJQUNELEtBQUt1RywwQkFBTCxDQUFnQ2pDLGdCQUFoQyxHQUFtRCxJQUFuRDtFQUNEOztFQUVELElBQUkzRCxlQUFBLENBQUVDLE9BQUYsQ0FBVSxLQUFLMkYsMEJBQUwsQ0FBZ0NuQyxPQUExQyxDQUFKLEVBQXdEO0lBQ3RELEtBQUtsQyxHQUFMLENBQVM4RSxhQUFULENBQXdCLDhEQUFELEdBQ3BCLG9CQUFtQi9HLG1CQUFvQiw2QkFEMUM7RUFFRDs7RUFFRCxNQUFNZ0gsT0FBTyxHQUFHLE1BQU1DLGdCQUFBLENBQVFDLE9BQVIsRUFBdEI7O0VBQ0EsSUFBSTtJQUNGLE1BQU1DLFlBQVksR0FBRyxFQUFyQjs7SUFDQSxLQUFLLE1BQU10RSxZQUFYLElBQTJCLEtBQUt5RCwwQkFBTCxDQUFnQ25DLE9BQTNELEVBQW9FO01BQ2xFZ0QsWUFBWSxDQUFDL0MsSUFBYixDQUFrQlcsYUFBQSxDQUFLQyxPQUFMLENBQWFnQyxPQUFiLEVBQXNCakMsYUFBQSxDQUFLcUMsS0FBTCxDQUFXQyxRQUFYLENBQW9CeEUsWUFBcEIsQ0FBdEIsQ0FBbEI7TUFDQSxNQUFNLEtBQUtuQixHQUFMLENBQVM0RixJQUFULENBQWN6RSxZQUFkLEVBQTRCbkMsZUFBQSxDQUFFNkcsSUFBRixDQUFPSixZQUFQLENBQTVCLENBQU47TUFDQSxNQUFNLEtBQUt6RixHQUFMLENBQVM4RSxNQUFULENBQWdCM0QsWUFBaEIsQ0FBTjtJQUNEOztJQUNELElBQUkyRSxjQUFjLEdBQUc5RyxlQUFBLENBQUU2RyxJQUFGLENBQU9KLFlBQVAsQ0FBckI7O0lBQ0EsSUFBSUEsWUFBWSxDQUFDTSxNQUFiLEdBQXNCLENBQTFCLEVBQTZCO01BQzNCLEtBQUt4RixHQUFMLENBQVN1RCxJQUFULENBQWUsT0FBTTJCLFlBQVksQ0FBQ00sTUFBTywwQ0FBekM7O01BQ0EsSUFBSTtRQUNGRCxjQUFjLEdBQUcsTUFBTWxELGtCQUFrQixDQUFDNkMsWUFBRCxFQUFlLEtBQUtsRixHQUFwQixDQUF6QztNQUNELENBRkQsQ0FFRSxPQUFPMEIsQ0FBUCxFQUFVO1FBQ1YsS0FBSzFCLEdBQUwsQ0FBU29FLElBQVQsQ0FBZSwyR0FBRCxHQUNYLG1CQUFrQjFDLENBQUMsQ0FBQ3NDLE9BQVEsRUFEL0I7TUFFRDtJQUNGOztJQUNELElBQUl2RixlQUFBLENBQUVDLE9BQUYsQ0FBVVUsT0FBTyxDQUFDYixVQUFsQixDQUFKLEVBQW1DO01BQ2pDLE1BQU07UUFBQ2tIO01BQUQsSUFBUyxNQUFNbEQsV0FBQSxDQUFHbUQsSUFBSCxDQUFRSCxjQUFSLENBQXJCO01BQ0EsS0FBS3ZGLEdBQUwsQ0FBU3NCLEtBQVQsQ0FBZ0IsaURBQWdEM0MsYUFBQSxDQUFLZ0gsb0JBQUwsQ0FBMEJGLElBQTFCLENBQWdDLEVBQWhHO0lBQ0Q7O0lBQ0QsT0FBTyxNQUFNcEgsbUJBQW1CLENBQUNrSCxjQUFELEVBQWlCbkcsT0FBTyxDQUFDYixVQUF6QixFQUFxQ2EsT0FBckMsQ0FBaEM7RUFDRCxDQXRCRCxTQXNCVTtJQUNSLE1BQU1tRCxXQUFBLENBQUdnQyxNQUFILENBQVVRLE9BQVYsQ0FBTjtJQUNBLEtBQUtWLDBCQUFMLEdBQWtDLElBQWxDO0VBQ0Q7QUFDRixDQTlERDs7ZUFrRWU3RyxRIn0=
310
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL3JlY29yZHNjcmVlbi5qcyIsIm5hbWVzIjpbImNvbW1hbmRzIiwiUkVUUllfUEFVU0UiLCJSRVRSWV9USU1FT1VUIiwiTUFYX1JFQ09SRElOR19USU1FX1NFQyIsIk1BWF9USU1FX1NFQyIsIkRFRkFVTFRfUkVDT1JESU5HX1RJTUVfU0VDIiwiUFJPQ0VTU19TSFVURE9XTl9USU1FT1VUIiwiU0NSRUVOUkVDT1JEX0JJTkFSWSIsIkRFRkFVTFRfRVhUIiwiTUlOX0VNVUxBVE9SX0FQSV9MRVZFTCIsIkZGTVBFR19CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJ1cGxvYWRSZWNvcmRlZE1lZGlhIiwibG9jYWxGaWxlIiwicmVtb3RlUGF0aCIsInVwbG9hZE9wdGlvbnMiLCJfIiwiaXNFbXB0eSIsInV0aWwiLCJ0b0luTWVtb3J5QmFzZTY0IiwidG9TdHJpbmciLCJ1c2VyIiwicGFzcyIsIm1ldGhvZCIsImhlYWRlcnMiLCJmaWxlRmllbGROYW1lIiwiZm9ybUZpZWxkcyIsIm9wdGlvbnMiLCJhdXRoIiwibmV0IiwidXBsb2FkRmlsZSIsInZlcmlmeVNjcmVlblJlY29yZElzU3VwcG9ydGVkIiwiYWRiIiwiaXNFbXVsYXRvciIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJFcnJvciIsInNjaGVkdWxlU2NyZWVuUmVjb3JkIiwicmVjb3JkaW5nUHJvcGVydGllcyIsImxvZyIsInN0b3BwZWQiLCJ0aW1lciIsInZpZGVvU2l6ZSIsImJpdFJhdGUiLCJ0aW1lTGltaXQiLCJidWdSZXBvcnQiLCJjdXJyZW50VGltZUxpbWl0IiwiaGFzVmFsdWUiLCJjdXJyZW50VGltZUxpbWl0SW50IiwicGFyc2VJbnQiLCJpc05hTiIsInBhdGhPbkRldmljZSIsInV1aWRWNCIsInN1YnN0cmluZyIsInJlY29yZGluZ1Byb2MiLCJzY3JlZW5yZWNvcmQiLCJvbiIsImN1cnJlbnREdXJhdGlvbiIsImdldER1cmF0aW9uIiwiYXNTZWNvbmRzIiwidG9GaXhlZCIsImRlYnVnIiwidGltZUxpbWl0SW50IiwiY2h1bmtEdXJhdGlvbiIsImNhdGNoIiwiZSIsImVycm9yIiwic3RhY2siLCJzdGFydCIsIndhaXRGb3JDb25kaXRpb24iLCJmaWxlRXhpc3RzIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsInJlY29yZHMiLCJwdXNoIiwicmVjb3JkaW5nUHJvY2VzcyIsIm1lcmdlU2NyZWVuUmVjb3JkcyIsIm1lZGlhRmlsZXMiLCJmcyIsIndoaWNoIiwiY29uZmlnQ29udGVudCIsIm1hcCIsIngiLCJqb2luIiwiY29uZmlnRmlsZSIsInBhdGgiLCJyZXNvbHZlIiwiZGlybmFtZSIsIndyaXRlRmlsZSIsInJlc3VsdCIsIk1hdGgiLCJmbG9vciIsIkRhdGUiLCJhcmdzIiwiaW5mbyIsImV4ZWMiLCJ0ZXJtaW5hdGVCYWNrZ3JvdW5kU2NyZWVuUmVjb3JkaW5nIiwiZm9yY2UiLCJwaWRzIiwiZ2V0UElEc0J5TmFtZSIsInAiLCJzaGVsbCIsImVyciIsIm1lc3NhZ2UiLCJzdGFydFJlY29yZGluZ1NjcmVlbiIsImZvcmNlUmVzdGFydCIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJ3YXJuIiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJyZWNvcmQiLCJyaW1yYWYiLCJ0aW1lb3V0IiwicGFyc2VGbG9hdCIsInRpbWluZyIsIlRpbWVyIiwiaXNSdW5uaW5nIiwic3RvcCIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJsb2NhbFJlY29yZHMiLCJwb3NpeCIsImJhc2VuYW1lIiwicHVsbCIsImxhc3QiLCJyZXN1bHRGaWxlUGF0aCIsImxlbmd0aCIsInNpemUiLCJzdGF0IiwidG9SZWFkYWJsZVNpemVTdHJpbmciXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvcmVjb3Jkc2NyZWVuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCwgZnMsIG5ldCwgdGVtcERpciwgc3lzdGVtLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmNvbnN0IFJFVFJZX1BBVVNFID0gMzAwO1xuY29uc3QgUkVUUllfVElNRU9VVCA9IDUwMDA7XG5jb25zdCBNQVhfUkVDT1JESU5HX1RJTUVfU0VDID0gNjAgKiAzO1xuY29uc3QgTUFYX1RJTUVfU0VDID0gNjAgKiAzMDtcbmNvbnN0IERFRkFVTFRfUkVDT1JESU5HX1RJTUVfU0VDID0gTUFYX1JFQ09SRElOR19USU1FX1NFQztcbmNvbnN0IFBST0NFU1NfU0hVVERPV05fVElNRU9VVCA9IDEwICogMTAwMDtcbmNvbnN0IFNDUkVFTlJFQ09SRF9CSU5BUlkgPSAnc2NyZWVucmVjb3JkJztcbmNvbnN0IERFRkFVTFRfRVhUID0gJy5tcDQnO1xuY29uc3QgTUlOX0VNVUxBVE9SX0FQSV9MRVZFTCA9IDI3O1xuY29uc3QgRkZNUEVHX0JJTkFSWSA9IGBmZm1wZWcke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG5cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZFJlY29yZGVkTWVkaWEgKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCA9IG51bGwsIHVwbG9hZE9wdGlvbnMgPSB7fSkge1xuICBpZiAoXy5pc0VtcHR5KHJlbW90ZVBhdGgpKSB7XG4gICAgcmV0dXJuIChhd2FpdCB1dGlsLnRvSW5NZW1vcnlCYXNlNjQobG9jYWxGaWxlKSkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNvbnN0IHt1c2VyLCBwYXNzLCBtZXRob2QsIGhlYWRlcnMsIGZpbGVGaWVsZE5hbWUsIGZvcm1GaWVsZHN9ID0gdXBsb2FkT3B0aW9ucztcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6IG1ldGhvZCB8fCAnUFVUJyxcbiAgICBoZWFkZXJzLFxuICAgIGZpbGVGaWVsZE5hbWUsXG4gICAgZm9ybUZpZWxkcyxcbiAgfTtcbiAgaWYgKHVzZXIgJiYgcGFzcykge1xuICAgIG9wdGlvbnMuYXV0aCA9IHt1c2VyLCBwYXNzfTtcbiAgfVxuICBhd2FpdCBuZXQudXBsb2FkRmlsZShsb2NhbEZpbGUsIHJlbW90ZVBhdGgsIG9wdGlvbnMpO1xuICByZXR1cm4gJyc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeVNjcmVlblJlY29yZElzU3VwcG9ydGVkIChhZGIsIGlzRW11bGF0b3IpIHtcbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgaWYgKGlzRW11bGF0b3IgJiYgYXBpTGV2ZWwgPCBNSU5fRU1VTEFUT1JfQVBJX0xFVkVMKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTY3JlZW4gcmVjb3JkaW5nIGRvZXMgbm90IHdvcmsgb24gZW11bGF0b3JzIHJ1bm5pbmcgQW5kcm9pZCBBUEkgbGV2ZWwgbGVzcyB0aGFuICR7TUlOX0VNVUxBVE9SX0FQSV9MRVZFTH1gKTtcbiAgfVxuICBpZiAoYXBpTGV2ZWwgPCAxOSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2NyZWVuIHJlY29yZGluZyBub3QgYXZhaWxhYmxlIG9uIEFQSSBMZXZlbCAke2FwaUxldmVsfS4gTWluaW11bSBBUEkgTGV2ZWwgaXMgMTkuYCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NoZWR1bGVTY3JlZW5SZWNvcmQgKGFkYiwgcmVjb3JkaW5nUHJvcGVydGllcywgbG9nID0gbnVsbCkge1xuICBpZiAocmVjb3JkaW5nUHJvcGVydGllcy5zdG9wcGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIHRpbWVyLFxuICAgIHZpZGVvU2l6ZSxcbiAgICBiaXRSYXRlLFxuICAgIHRpbWVMaW1pdCxcbiAgICBidWdSZXBvcnQsXG4gIH0gPSByZWNvcmRpbmdQcm9wZXJ0aWVzO1xuXG4gIGxldCBjdXJyZW50VGltZUxpbWl0ID0gTUFYX1JFQ09SRElOR19USU1FX1NFQztcbiAgaWYgKHV0aWwuaGFzVmFsdWUocmVjb3JkaW5nUHJvcGVydGllcy5jdXJyZW50VGltZUxpbWl0KSkge1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lTGltaXRJbnQgPSBwYXJzZUludChyZWNvcmRpbmdQcm9wZXJ0aWVzLmN1cnJlbnRUaW1lTGltaXQsIDEwKTtcbiAgICBpZiAoIWlzTmFOKGN1cnJlbnRUaW1lTGltaXRJbnQpICYmIGN1cnJlbnRUaW1lTGltaXRJbnQgPCBNQVhfUkVDT1JESU5HX1RJTUVfU0VDKSB7XG4gICAgICBjdXJyZW50VGltZUxpbWl0ID0gY3VycmVudFRpbWVMaW1pdEludDtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGF0aE9uRGV2aWNlID0gYC9zZGNhcmQvJHt1dGlsLnV1aWRWNCgpLnN1YnN0cmluZygwLCA4KX0ke0RFRkFVTFRfRVhUfWA7XG4gIGNvbnN0IHJlY29yZGluZ1Byb2MgPSBhZGIuc2NyZWVucmVjb3JkKHBhdGhPbkRldmljZSwge1xuICAgIHZpZGVvU2l6ZSxcbiAgICBiaXRSYXRlLFxuICAgIHRpbWVMaW1pdDogY3VycmVudFRpbWVMaW1pdCxcbiAgICBidWdSZXBvcnQsXG4gIH0pO1xuXG4gIHJlY29yZGluZ1Byb2Mub24oJ2VuZCcsICgpID0+IHtcbiAgICBpZiAocmVjb3JkaW5nUHJvcGVydGllcy5zdG9wcGVkIHx8ICF1dGlsLmhhc1ZhbHVlKHRpbWVMaW1pdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudER1cmF0aW9uID0gdGltZXIuZ2V0RHVyYXRpb24oKS5hc1NlY29uZHMudG9GaXhlZCgwKTtcbiAgICBsb2c/LmRlYnVnKGBUaGUgb3ZlcmFsbCBzY3JlZW4gcmVjb3JkaW5nIGR1cmF0aW9uIGlzICR7Y3VycmVudER1cmF0aW9ufXMgc28gZmFyYCk7XG4gICAgY29uc3QgdGltZUxpbWl0SW50ID0gcGFyc2VJbnQodGltZUxpbWl0LCAxMCk7XG4gICAgaWYgKGlzTmFOKHRpbWVMaW1pdEludCkgfHwgY3VycmVudER1cmF0aW9uID49IHRpbWVMaW1pdEludCkge1xuICAgICAgbG9nPy5kZWJ1ZygnVGhlcmUgaXMgbm8gbmVlZCB0byBzdGFydCB0aGUgbmV4dCByZWNvcmRpbmcgY2h1bmsnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZWNvcmRpbmdQcm9wZXJ0aWVzLmN1cnJlbnRUaW1lTGltaXQgPSB0aW1lTGltaXRJbnQgLSBjdXJyZW50RHVyYXRpb247XG4gICAgY29uc3QgY2h1bmtEdXJhdGlvbiA9IHJlY29yZGluZ1Byb3BlcnRpZXMuY3VycmVudFRpbWVMaW1pdCA8IE1BWF9SRUNPUkRJTkdfVElNRV9TRUNcbiAgICAgID8gcmVjb3JkaW5nUHJvcGVydGllcy5jdXJyZW50VGltZUxpbWl0XG4gICAgICA6IE1BWF9SRUNPUkRJTkdfVElNRV9TRUM7XG4gICAgbG9nPy5kZWJ1ZyhgU3RhcnRpbmcgdGhlIG5leHQgJHtjaHVua0R1cmF0aW9ufXMtY2h1bmsgYCArXG4gICAgICBgb2Ygc2NyZWVuIHJlY29yZGluZyBpbiBvcmRlciB0byBhY2hpZXZlICR7dGltZUxpbWl0SW50fXMgdG90YWwgZHVyYXRpb25gKTtcbiAgICBzY2hlZHVsZVNjcmVlblJlY29yZChhZGIsIHJlY29yZGluZ1Byb3BlcnRpZXMsIGxvZylcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBsb2c/LmVycm9yKGUuc3RhY2spO1xuICAgICAgICByZWNvcmRpbmdQcm9wZXJ0aWVzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIGF3YWl0IHJlY29yZGluZ1Byb2Muc3RhcnQoMCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiBhd2FpdCBhZGIuZmlsZUV4aXN0cyhwYXRoT25EZXZpY2UpLFxuICAgICAge3dhaXRNczogUkVUUllfVElNRU9VVCwgaW50ZXJ2YWxNczogUkVUUllfUEFVU0V9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGV4cGVjdGVkIHNjcmVlbiByZWNvcmQgZmlsZSAnJHtwYXRoT25EZXZpY2V9JyBkb2VzIG5vdCBleGlzdCBhZnRlciAke1JFVFJZX1RJTUVPVVR9bXMuIGAgK1xuICAgICAgYElzICR7U0NSRUVOUkVDT1JEX0JJTkFSWX0gdXRpbGl0eSBhdmFpbGFibGUgYW5kIG9wZXJhdGlvbmFsIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdD9gKTtcbiAgfVxuXG4gIHJlY29yZGluZ1Byb3BlcnRpZXMucmVjb3Jkcy5wdXNoKHBhdGhPbkRldmljZSk7XG4gIHJlY29yZGluZ1Byb3BlcnRpZXMucmVjb3JkaW5nUHJvY2VzcyA9IHJlY29yZGluZ1Byb2M7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1lcmdlU2NyZWVuUmVjb3JkcyAobWVkaWFGaWxlcywgbG9nID0gbnVsbCkge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndoaWNoKEZGTVBFR19CSU5BUlkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke0ZGTVBFR19CSU5BUll9IHV0aWxpdHkgaXMgbm90IGF2YWlsYWJsZSBpbiBQQVRILiBQbGVhc2UgaW5zdGFsbCBpdCBmcm9tIGh0dHBzOi8vd3d3LmZmbXBlZy5vcmcvYCk7XG4gIH1cbiAgY29uc3QgY29uZmlnQ29udGVudCA9IG1lZGlhRmlsZXNcbiAgICAubWFwKCh4KSA9PiBgZmlsZSAnJHt4fSdgKVxuICAgIC5qb2luKCdcXG4nKTtcbiAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUobWVkaWFGaWxlc1swXSksICdjb25maWcudHh0Jyk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShjb25maWdGaWxlLCBjb25maWdDb250ZW50LCAndXRmOCcpO1xuICBsb2c/LmRlYnVnKGBHZW5lcmF0ZWQgZmZtcGVnIG1lcmdpbmcgY29uZmlnICcke2NvbmZpZ0ZpbGV9JyB3aXRoIGl0ZW1zOlxcbiR7Y29uZmlnQ29udGVudH1gKTtcbiAgY29uc3QgcmVzdWx0ID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShtZWRpYUZpbGVzWzBdKSwgYG1lcmdlXyR7TWF0aC5mbG9vcihuZXcgRGF0ZSgpKX0ke0RFRkFVTFRfRVhUfWApO1xuICBjb25zdCBhcmdzID0gWyctc2FmZScsICcwJywgJy1mJywgJ2NvbmNhdCcsICctaScsIGNvbmZpZ0ZpbGUsICctYycsICdjb3B5JywgcmVzdWx0XTtcbiAgbG9nPy5pbmZvKGBJbml0aWF0aW5nIHNjcmVlbiByZWNvcmRzIG1lcmdpbmcgdXNpbmcgdGhlIGNvbW1hbmQgJyR7RkZNUEVHX0JJTkFSWX0gJHthcmdzLmpvaW4oJyAnKX0nYCk7XG4gIGF3YWl0IGV4ZWMoRkZNUEVHX0JJTkFSWSwgYXJncyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUJhY2tncm91bmRTY3JlZW5SZWNvcmRpbmcgKGFkYiwgZm9yY2UgPSB0cnVlKSB7XG4gIGNvbnN0IHBpZHMgPSAoYXdhaXQgYWRiLmdldFBJRHNCeU5hbWUoU0NSRUVOUkVDT1JEX0JJTkFSWSkpXG4gICAgLm1hcCgocCkgPT4gYCR7cH1gKTtcbiAgaWYgKF8uaXNFbXB0eShwaWRzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLnNoZWxsKFsna2lsbCcsIGZvcmNlID8gJy0xNScgOiAnLTInLCAuLi5waWRzXSk7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiBfLmlzRW1wdHkoYXdhaXQgYWRiLmdldFBJRHNCeU5hbWUoU0NSRUVOUkVDT1JEX0JJTkFSWSkpLCB7XG4gICAgICB3YWl0TXM6IFBST0NFU1NfU0hVVERPV05fVElNRU9VVCxcbiAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gc3RvcCB0aGUgYmFja2dyb3VuZCBzY3JlZW4gcmVjb3JkaW5nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydFJlY29yZGluZ09wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHJlbW90ZVBhdGggLSBUaGUgcGF0aCB0byB0aGUgcmVtb3RlIGxvY2F0aW9uLCB3aGVyZSB0aGUgY2FwdHVyZWQgdmlkZW8gc2hvdWxkIGJlIHVwbG9hZGVkLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZDogaHR0cC9odHRwcywgZnRwLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVsbCBvciBlbXB0eSBzdHJpbmcgdmFsdWUgKHRoZSBkZWZhdWx0IHNldHRpbmcpIG1lYW5zIHRoZSBjb250ZW50IG9mIHJlc3VsdGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBzaG91bGQgYmUgZW5jb2RlZCBhcyBCYXNlNjQgYW5kIHBhc3NlZCBhcyB0aGUgZW5kcG91bnQgcmVzcG9uc2UgdmFsdWUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gaWYgdGhlIGdlbmVyYXRlZCBtZWRpYSBmaWxlIGlzIHRvbyBiaWcgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpdCBpbnRvIHRoZSBhdmFpbGFibGUgcHJvY2VzcyBtZW1vcnkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBvbmx5IGhhcyBhbiBlZmZlY3QgaWYgdGhlcmUgaXMgc2NyZWVuIHJlY29yZGluZyBwcm9jZXNzIGluIHByb2dyZWVzc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGBmb3JjZVJlc3RhcnRgIHBhcmFtZXRlciBpcyBub3Qgc2V0IHRvIGB0cnVlYC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXNlciAtIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLiBPbmx5IHdvcmtzIGlmIGByZW1vdGVQYXRoYCBpcyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGFzcyAtIFRoZSBwYXNzd29yZCBmb3IgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbi4gT25seSB3b3JrcyBpZiBgcmVtb3RlUGF0aGAgaXMgcHJvdmlkZWQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1ldGhvZCBbUFVUXSAtIFRoZSBodHRwIG11bHRpcGFydCB1cGxvYWQgbWV0aG9kIG5hbWUuIE9ubHkgd29ya3MgaWYgYHJlbW90ZVBhdGhgIGlzIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBoZWFkZXJzIC0gQWRkaXRpb25hbCBoZWFkZXJzIG1hcHBpbmcgZm9yIG11bHRpcGFydCBodHRwKHMpIHVwbG9hZHNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZmlsZUZpZWxkTmFtZSBbZmlsZV0gLSBUaGUgbmFtZSBvZiB0aGUgZm9ybSBmaWVsZCwgd2hlcmUgdGhlIGZpbGUgY29udGVudCBCTE9CIHNob3VsZCBiZSBzdG9yZWQgZm9yXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkgez9PYmplY3R8QXJyYXk8UGFpcj59IGZvcm1GaWVsZHMgLSBBZGRpdGlvbmFsIGZvcm0gZmllbGRzIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZpZGVvU2l6ZSAtIFRoZSBmb3JtYXQgaXMgd2lkdGh4aGVpZ2h0LlxuICogICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZGV2aWNlJ3MgbmF0aXZlIGRpc3BsYXkgcmVzb2x1dGlvbiAoaWYgc3VwcG9ydGVkKSxcbiAqICAgICAgICAgICAgICAgICAgMTI4MHg3MjAgaWYgbm90LiBGb3IgYmVzdCByZXN1bHRzLFxuICogICAgICAgICAgICAgICAgICB1c2UgYSBzaXplIHN1cHBvcnRlZCBieSB5b3VyIGRldmljZSdzIEFkdmFuY2VkIFZpZGVvIENvZGluZyAoQVZDKSBlbmNvZGVyLlxuICogICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgXCIxMjgweDcyMFwiXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBidWdSZXBvcnQgLSBTZXQgaXQgdG8gYHRydWVgIGluIG9yZGVyIHRvIGRpc3BsYXkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgdmlkZW8gb3ZlcmxheSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgYSB0aW1lc3RhbXAsIHRoYXQgaXMgaGVscGZ1bCBpbiB2aWRlb3MgY2FwdHVyZWQgdG8gaWxsdXN0cmF0ZSBidWdzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgc2luY2UgQVBJIGxldmVsIDI3IChBbmRyb2lkIFApLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfG51bWJlcn0gdGltZUxpbWl0IC0gVGhlIG1heGltdW0gcmVjb3JkaW5nIHRpbWUsIGluIHNlY29uZHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE4MCAoMyBtaW51dGVzKS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIHZhbHVlIGlzIDE4MDAgKDMwIG1pbnV0ZXMpLiBJZiB0aGUgcGFzc2VkIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAxODAgdGhlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFsZ29yaXRobSB3aWxsIHRyeSB0byBzY2hlZHVsZSBtdWx0aXBsZSBzY3JlZW4gcmVjb3JkaW5nIGNodW5rcyBhbmQgbWVyZ2UgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgdmlkZW9zIGludG8gYSBzaW5nbGUgbWVkaWEgZmlsZSB1c2luZyBgZmZtcGVnYCB1dGlsaXR5LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHV0aWxpdHkgaXMgbm90IGF2YWlsYWJsZSBpbiBQQVRIIHRoZW4gdGhlIG1vc3QgcmVjZW50IHNjcmVlbiByZWNvcmRpbmcgY2h1bmsgaXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvaW5nIHRvIGJlIHJldHVybmVkLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfG51bWJlcn0gYml0UmF0ZSAtIFRoZSB2aWRlbyBiaXQgcmF0ZSBmb3IgdGhlIHZpZGVvLCBpbiBiaXRzIHBlciBzZWNvbmQuXG4gKiAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA0MDAwMDAwICg0IE1iaXQvcykuIFlvdSBjYW4gaW5jcmVhc2UgdGhlIGJpdCByYXRlIHRvIGltcHJvdmUgdmlkZW8gcXVhbGl0eSxcbiAqICAgICAgICAgICAgICAgIGJ1dCBkb2luZyBzbyByZXN1bHRzIGluIGxhcmdlciBtb3ZpZSBmaWxlcy5cbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IGZvcmNlUmVzdGFydCAtIFdoZXRoZXIgdG8gdHJ5IHRvIGNhdGNoIGFuZCB1cGxvYWQvcmV0dXJuIHRoZSBjdXJyZW50bHkgcnVubmluZyBzY3JlZW4gcmVjb3JkaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYGZhbHNlYCwgdGhlIGRlZmF1bHQgc2V0dGluZykgb3IgaWdub3JlIHRoZSByZXN1bHQgb2YgaXQgYW5kIHN0YXJ0IGEgbmV3IHJlY29yZGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlbHkgKGB0cnVlYCkuXG4gKi9cblxuLyoqXG4gKiBSZWNvcmQgdGhlIGRpc3BsYXkgb2YgYSByZWFsIGRldmljZXMgcnVubmluZyBBbmRyb2lkIDQuNCAoQVBJIGxldmVsIDE5KSBhbmQgaGlnaGVyLlxuICogRW11bGF0b3JzIGFyZSBzdXBwb3J0ZWQgc2luY2UgQVBJIGxldmVsIDI3IChBbmRyb2lkIFApLlxuICogSXQgcmVjb3JkcyBzY3JlZW4gYWN0aXZpdHkgdG8gYW4gTVBFRy00IGZpbGUuIEF1ZGlvIGlzIG5vdCByZWNvcmRlZCB3aXRoIHRoZSB2aWRlbyBmaWxlLlxuICogSWYgc2NyZWVuIHJlY29yZGluZyBoYXMgYmVlbiBhbHJlYWR5IHN0YXJ0ZWQgdGhlbiB0aGUgY29tbWFuZCB3aWxsIHN0b3AgaXQgZm9yY2VmdWxseSBhbmQgc3RhcnQgYSBuZXcgb25lLlxuICogVGhlIHByZXZpb3VzbHkgcmVjb3JkZWQgdmlkZW8gZmlsZSB3aWxsIGJlIGRlbGV0ZWQuXG4gKlxuICogQHBhcmFtIHs/U3RhcnRSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIC0gVGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcmVjb3JkZWQgbWVkaWEgZmlsZSBpZlxuICogICAgICAgICAgICAgICAgICAgYW55IHNjcmVlbiByZWNvcmRpbmcgaXMgY3VycmVudGx5IHJ1bm5pbmcgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICogQHRocm93cyB7RXJyb3J9IElmIHNjcmVlbiByZWNvcmRpbmcgaGFzIGZhaWxlZCB0byBzdGFydCBvciBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqL1xuY29tbWFuZHMuc3RhcnRSZWNvcmRpbmdTY3JlZW4gPSBhc3luYyBmdW5jdGlvbiBzdGFydFJlY29yZGluZ1NjcmVlbiAob3B0aW9ucyA9IHt9KSB7XG4gIGF3YWl0IHZlcmlmeVNjcmVlblJlY29yZElzU3VwcG9ydGVkKHRoaXMuYWRiLCB0aGlzLmlzRW11bGF0b3IoKSk7XG5cbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBjb25zdCB7dmlkZW9TaXplLCB0aW1lTGltaXQgPSBERUZBVUxUX1JFQ09SRElOR19USU1FX1NFQywgYnVnUmVwb3J0LCBiaXRSYXRlLCBmb3JjZVJlc3RhcnR9ID0gb3B0aW9ucztcbiAgaWYgKCFmb3JjZVJlc3RhcnQpIHtcbiAgICByZXN1bHQgPSBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4ob3B0aW9ucyk7XG4gIH1cblxuICBpZiAoYXdhaXQgdGVybWluYXRlQmFja2dyb3VuZFNjcmVlblJlY29yZGluZyh0aGlzLmFkYiwgdHJ1ZSkpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBUaGVyZSB3ZXJlIHNvbWUgJHtTQ1JFRU5SRUNPUkRfQklOQVJZfSBwcm9jZXNzIGxlZnRvdmVycyBydW5uaW5nIGAgK1xuICAgICAgYGluIHRoZSBiYWNrZ3JvdW5kLiBNYWtlIHN1cmUgeW91IHN0b3Agc2NyZWVuIHJlY29yZGluZyBlYWNoIHRpbWUgYWZ0ZXIgaXQgaXMgc3RhcnRlZCwgYCArXG4gICAgICBgb3RoZXJ3aXNlIHRoZSByZWNvcmRlZCBtZWRpYSBtaWdodCBxdWlja2x5IGV4Y2VlZCBhbGwgdGhlIGZyZWUgc3BhY2Ugb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LmApO1xuICB9XG5cbiAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcykpIHtcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiAodGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcy5yZWNvcmRzIHx8IFtdKSkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIucmltcmFmKHJlY29yZCk7XG4gICAgfVxuICAgIHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMgPSBudWxsO1xuICB9XG5cbiAgY29uc3QgdGltZW91dCA9IHBhcnNlRmxvYXQodGltZUxpbWl0KTtcbiAgaWYgKGlzTmFOKHRpbWVvdXQpIHx8IHRpbWVvdXQgPiBNQVhfVElNRV9TRUMgfHwgdGltZW91dCA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdGltZUxpbWl0IHZhbHVlIG11c3QgYmUgaW4gcmFuZ2UgWzEsICR7TUFYX1RJTUVfU0VDfV0gc2Vjb25kcy4gYCArXG4gICAgICBgVGhlIHZhbHVlIG9mICcke3RpbWVMaW1pdH0nIGhhcyBiZWVuIHBhc3NlZCBpbnN0ZWFkLmApO1xuICB9XG5cbiAgdGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcyA9IHtcbiAgICB0aW1lcjogbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCksXG4gICAgdmlkZW9TaXplLFxuICAgIHRpbWVMaW1pdCxcbiAgICBjdXJyZW50VGltZUxpbWl0OiB0aW1lTGltaXQsXG4gICAgYml0UmF0ZSxcbiAgICBidWdSZXBvcnQsXG4gICAgcmVjb3JkczogW10sXG4gICAgcmVjb3JkaW5nUHJvY2VzczogbnVsbCxcbiAgICBzdG9wcGVkOiBmYWxzZSxcbiAgfTtcbiAgYXdhaXQgc2NoZWR1bGVTY3JlZW5SZWNvcmQodGhpcy5hZGIsIHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMsIHRoaXMubG9nKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RvcFJlY29yZGluZ09wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHJlbW90ZVBhdGggLSBUaGUgcGF0aCB0byB0aGUgcmVtb3RlIGxvY2F0aW9uLCB3aGVyZSB0aGUgcmVzdWx0aW5nIHZpZGVvIHNob3VsZCBiZSB1cGxvYWRlZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQ6IGh0dHAvaHR0cHMsIGZ0cC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGwgb3IgZW1wdHkgc3RyaW5nIHZhbHVlICh0aGUgZGVmYXVsdCBzZXR0aW5nKSBtZWFucyB0aGUgY29udGVudCBvZiByZXN1bHRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc2hvdWxkIGJlIGVuY29kZWQgYXMgQmFzZTY0IGFuZCBwYXNzZWQgYXMgdGhlIGVuZHBvdW50IHJlc3BvbnNlIHZhbHVlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGlmIHRoZSBnZW5lcmF0ZWQgbWVkaWEgZmlsZSBpcyB0b28gYmlnIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXQgaW50byB0aGUgYXZhaWxhYmxlIHByb2Nlc3MgbWVtb3J5LlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB1c2VyIC0gVGhlIG5hbWUgb2YgdGhlIHVzZXIgZm9yIHRoZSByZW1vdGUgYXV0aGVudGljYXRpb24uXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBhc3MgLSBUaGUgcGFzc3dvcmQgZm9yIHRoZSByZW1vdGUgYXV0aGVudGljYXRpb24uXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1ldGhvZCAtIFRoZSBodHRwIG11bHRpcGFydCB1cGxvYWQgbWV0aG9kIG5hbWUuIFRoZSAnUFVUJyBvbmUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBoZWFkZXJzIC0gQWRkaXRpb25hbCBoZWFkZXJzIG1hcHBpbmcgZm9yIG11bHRpcGFydCBodHRwKHMpIHVwbG9hZHNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZmlsZUZpZWxkTmFtZSBbZmlsZV0gLSBUaGUgbmFtZSBvZiB0aGUgZm9ybSBmaWVsZCwgd2hlcmUgdGhlIGZpbGUgY29udGVudCBCTE9CIHNob3VsZCBiZSBzdG9yZWQgZm9yXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkgez9PYmplY3R8QXJyYXk8UGFpcj59IGZvcm1GaWVsZHMgLSBBZGRpdGlvbmFsIGZvcm0gZmllbGRzIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKi9cblxuLyoqXG4gKiBTdG9wIHJlY29yZGluZyB0aGUgc2NyZWVuLlxuICogSWYgbm8gc2NyZWVuIHJlY29yZGluZyBoYXMgYmVlbiBzdGFydGVkIGJlZm9yZSB0aGVuIHRoZSBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHs/U3RvcFJlY29yZGluZ09wdGlvbnN9IG9wdGlvbnMgLSBUaGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQtZW5jb2RlZCBjb250ZW50IG9mIHRoZSByZWNvcmRlZCBtZWRpYSBmaWxlIGlmICdyZW1vdGVQYXRoJ1xuICogICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGlzIGZhbHN5IG9yIGFuIGVtcHR5IHN0cmluZy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgbmFtZSBvZiBhIG1lZGlhIGZpbGVcbiAqICAgICAgICAgICAgICAgICBvciB0aGUgZmlsZSBjb250ZW50IGNhbm5vdCBiZSB1cGxvYWRlZCB0byB0aGUgcmVtb3RlIGxvY2F0aW9uXG4gKiAgICAgICAgICAgICAgICAgb3Igc2NyZWVuIHJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqL1xuY29tbWFuZHMuc3RvcFJlY29yZGluZ1NjcmVlbiA9IGFzeW5jIGZ1bmN0aW9uIHN0b3BSZWNvcmRpbmdTY3JlZW4gKG9wdGlvbnMgPSB7fSkge1xuICBhd2FpdCB2ZXJpZnlTY3JlZW5SZWNvcmRJc1N1cHBvcnRlZCh0aGlzLmFkYiwgdGhpcy5pc0VtdWxhdG9yKCkpO1xuXG4gIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgdGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcy5zdG9wcGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgdGVybWluYXRlQmFja2dyb3VuZFNjcmVlblJlY29yZGluZyh0aGlzLmFkYiwgZmFsc2UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGVyci5tZXNzYWdlKTtcbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgdGhpcy5sb2cud2FybignVGhlIHJlc3VsdGluZyB2aWRlbyBtaWdodCBiZSBjb3JydXB0ZWQnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgU2NyZWVuIHJlY29yZGluZyBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBzdGFydGVkIGJ5IEFwcGl1bS4gVGhlcmUgaXMgbm90aGluZyB0byBzdG9wYCk7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMucmVjb3JkaW5nUHJvY2VzcyAmJiB0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzLnJlY29yZGluZ1Byb2Nlc3MuaXNSdW5uaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMucmVjb3JkaW5nUHJvY2Vzcy5zdG9wKCdTSUdJTlQnLCBQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFVuYWJsZSB0byBzdG9wIHNjcmVlbiByZWNvcmRpbmcgd2l0aGluICR7UFJPQ0VTU19TSFVURE9XTl9USU1FT1VUfW1zYCk7XG4gICAgfVxuICAgIHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMucmVjb3JkaW5nUHJvY2VzcyA9IG51bGw7XG4gIH1cblxuICBpZiAoXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMucmVjb3JkcykpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBObyBzY3JlZW4gcmVjb3JkaW5ncyBoYXZlIGJlZW4gc3RvcmVkIG9uIHRoZSBkZXZpY2Ugc28gZmFyLiBgICtcbiAgICAgIGBBcmUgeW91IHN1cmUgdGhlICR7U0NSRUVOUkVDT1JEX0JJTkFSWX0gdXRpbGl0eSB3b3JrcyBhcyBleHBlY3RlZD9gKTtcbiAgfVxuXG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBsb2NhbFJlY29yZHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhdGhPbkRldmljZSBvZiB0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzLnJlY29yZHMpIHtcbiAgICAgIGxvY2FsUmVjb3Jkcy5wdXNoKHBhdGgucmVzb2x2ZSh0bXBSb290LCBwYXRoLnBvc2l4LmJhc2VuYW1lKHBhdGhPbkRldmljZSkpKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnB1bGwocGF0aE9uRGV2aWNlLCBfLmxhc3QobG9jYWxSZWNvcmRzKSk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5yaW1yYWYocGF0aE9uRGV2aWNlKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdEZpbGVQYXRoID0gXy5sYXN0KGxvY2FsUmVjb3Jkcyk7XG4gICAgaWYgKGxvY2FsUmVjb3Jkcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBHb3QgJHtsb2NhbFJlY29yZHMubGVuZ3RofSBzY3JlZW4gcmVjb3JkaW5ncy4gVHJ5aW5nIHRvIG1lcmdlIHRoZW1gKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdEZpbGVQYXRoID0gYXdhaXQgbWVyZ2VTY3JlZW5SZWNvcmRzKGxvY2FsUmVjb3JkcywgdGhpcy5sb2cpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgbWVyZ2UgdGhlIHJlY29yZGVkIGZpbGVzLiBUaGUgbW9zdCByZWNlbnQgc2NyZWVuIHJlY29yZGluZyBpcyBnb2luZyB0byBiZSByZXR1cm5lZCBhcyB0aGUgcmVzdWx0LiBgICtcbiAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KG9wdGlvbnMucmVtb3RlUGF0aCkpIHtcbiAgICAgIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQocmVzdWx0RmlsZVBhdGgpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgc2NyZWVuIHJlY29yZGluZyBpcyAke3V0aWwudG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9YCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB1cGxvYWRSZWNvcmRlZE1lZGlhKHJlc3VsdEZpbGVQYXRoLCBvcHRpb25zLnJlbW90ZVBhdGgsIG9wdGlvbnMpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgICB0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzID0gbnVsbDtcbiAgfVxufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOztBQUVBLE1BQU1DLFdBQVcsR0FBRyxHQUFwQjtBQUNBLE1BQU1DLGFBQWEsR0FBRyxJQUF0QjtBQUNBLE1BQU1DLHNCQUFzQixH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
@@ -13,9 +13,9 @@ var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
14
  var _teen_process = require("teen_process");
15
15
 
16
- var _support = require("@appium/support");
16
+ var _support = require("appium/support");
17
17
 
18
- var _baseDriver = require("@appium/base-driver");
18
+ var _driver = require("appium/driver");
19
19
 
20
20
  const ADB_SHELL_FEATURE = 'adb_shell';
21
21
  let commands = {};
@@ -31,7 +31,7 @@ commands.mobileShell = async function mobileShell(opts = {}) {
31
31
  } = opts;
32
32
 
33
33
  if (!_lodash.default.isString(command)) {
34
- throw new _baseDriver.errors.InvalidArgumentError(`The 'command' argument is mandatory`);
34
+ throw new _driver.errors.InvalidArgumentError(`The 'command' argument is mandatory`);
35
35
  }
36
36
 
37
37
  const adbArgs = [...this.adb.executable.defaultArgs, 'shell', command, ...(_lodash.default.isArray(args) ? args : [args])];
@@ -62,4 +62,4 @@ var _default = commands;
62
62
  exports.default = _default;require('source-map-support').install();
63
63
 
64
64
 
65
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL3NoZWxsLmpzIiwibmFtZXMiOlsiQURCX1NIRUxMX0ZFQVRVUkUiLCJjb21tYW5kcyIsIm1vYmlsZVNoZWxsIiwib3B0cyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiY29tbWFuZCIsImFyZ3MiLCJ0aW1lb3V0IiwiaW5jbHVkZVN0ZGVyciIsIl8iLCJpc1N0cmluZyIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiYWRiQXJncyIsImFkYiIsImV4ZWN1dGFibGUiLCJkZWZhdWx0QXJncyIsImlzQXJyYXkiLCJsb2ciLCJkZWJ1ZyIsInBhdGgiLCJ1dGlsIiwicXVvdGUiLCJzdGRvdXQiLCJzdGRlcnIiLCJleGVjIiwiZXJyIiwiZXJyb3JBbmRUaHJvdyIsIm1lc3NhZ2UiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvc2hlbGwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcblxuY29uc3QgQURCX1NIRUxMX0ZFQVRVUkUgPSAnYWRiX3NoZWxsJztcblxubGV0IGNvbW1hbmRzID0ge307XG5cbmNvbW1hbmRzLm1vYmlsZVNoZWxsID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2hlbGwgKG9wdHMgPSB7fSkge1xuICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKEFEQl9TSEVMTF9GRUFUVVJFKTtcblxuICBjb25zdCB7XG4gICAgY29tbWFuZCxcbiAgICBhcmdzID0gW10sXG4gICAgdGltZW91dCA9IDIwMDAwLFxuICAgIGluY2x1ZGVTdGRlcnIsXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghXy5pc1N0cmluZyhjb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFRoZSAnY29tbWFuZCcgYXJndW1lbnQgaXMgbWFuZGF0b3J5YCk7XG4gIH1cblxuICBjb25zdCBhZGJBcmdzID0gW1xuICAgIC4uLnRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MsXG4gICAgJ3NoZWxsJyxcbiAgICBjb21tYW5kLFxuICAgIC4uLihfLmlzQXJyYXkoYXJncykgPyBhcmdzIDogW2FyZ3NdKVxuICBdO1xuICB0aGlzLmxvZy5kZWJ1ZyhgUnVubmluZyAnJHt0aGlzLmFkYi5leGVjdXRhYmxlLnBhdGh9ICR7dXRpbC5xdW90ZShhZGJBcmdzKX0nYCk7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IGV4ZWModGhpcy5hZGIuZXhlY3V0YWJsZS5wYXRoLCBhZGJBcmdzLCB7dGltZW91dH0pO1xuICAgIGlmIChpbmNsdWRlU3RkZXJyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGRvdXQsXG4gICAgICAgIHN0ZGVyclxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZG91dDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGV4ZWN1dGUgdGhlICcke2NvbW1hbmR9JyBzaGVsbCBjb21tYW5kLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX0uIGAgK1xuICAgICAgYFN0ZE91dDogJHtlcnIuc3Rkb3V0fS4gU3RkRXJyOiAke2Vyci5zdGRlcnJ9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxpQkFBaUIsR0FBRyxXQUExQjtBQUVBLElBQUlDLFFBQVEsR0FBRyxFQUFmOzs7QUFFQUEsUUFBUSxDQUFDQyxXQUFULEdBQXVCLGVBQWVBLFdBQWYsQ0FBNEJDLElBQUksR0FBRyxFQUFuQyxFQUF1QztFQUM1RCxLQUFLQyxvQkFBTCxDQUEwQkosaUJBQTFCO0VBRUEsTUFBTTtJQUNKSyxPQURJO0lBRUpDLElBQUksR0FBRyxFQUZIO0lBR0pDLE9BQU8sR0FBRyxLQUhOO0lBSUpDO0VBSkksSUFLRkwsSUFMSjs7RUFPQSxJQUFJLENBQUNNLGVBQUEsQ0FBRUMsUUFBRixDQUFXTCxPQUFYLENBQUwsRUFBMEI7SUFDeEIsTUFBTSxJQUFJTSxrQkFBQSxDQUFPQyxvQkFBWCxDQUFpQyxxQ0FBakMsQ0FBTjtFQUNEOztFQUVELE1BQU1DLE9BQU8sR0FBRyxDQUNkLEdBQUcsS0FBS0MsR0FBTCxDQUFTQyxVQUFULENBQW9CQyxXQURULEVBRWQsT0FGYyxFQUdkWCxPQUhjLEVBSWQsSUFBSUksZUFBQSxDQUFFUSxPQUFGLENBQVVYLElBQVYsSUFBa0JBLElBQWxCLEdBQXlCLENBQUNBLElBQUQsQ0FBN0IsQ0FKYyxDQUFoQjtFQU1BLEtBQUtZLEdBQUwsQ0FBU0MsS0FBVCxDQUFnQixZQUFXLEtBQUtMLEdBQUwsQ0FBU0MsVUFBVCxDQUFvQkssSUFBSyxJQUFHQyxhQUFBLENBQUtDLEtBQUwsQ0FBV1QsT0FBWCxDQUFvQixHQUEzRTs7RUFDQSxJQUFJO0lBQ0YsTUFBTTtNQUFDVSxNQUFEO01BQVNDO0lBQVQsSUFBbUIsTUFBTSxJQUFBQyxrQkFBQSxFQUFLLEtBQUtYLEdBQUwsQ0FBU0MsVUFBVCxDQUFvQkssSUFBekIsRUFBK0JQLE9BQS9CLEVBQXdDO01BQUNOO0lBQUQsQ0FBeEMsQ0FBL0I7O0lBQ0EsSUFBSUMsYUFBSixFQUFtQjtNQUNqQixPQUFPO1FBQ0xlLE1BREs7UUFFTEM7TUFGSyxDQUFQO0lBSUQ7O0lBQ0QsT0FBT0QsTUFBUDtFQUNELENBVEQsQ0FTRSxPQUFPRyxHQUFQLEVBQVk7SUFDWixLQUFLUixHQUFMLENBQVNTLGFBQVQsQ0FBd0IsdUJBQXNCdEIsT0FBUSxtQkFBL0IsR0FDcEIsbUJBQWtCcUIsR0FBRyxDQUFDRSxPQUFRLElBRFYsR0FFcEIsV0FBVUYsR0FBRyxDQUFDSCxNQUFPLGFBQVlHLEdBQUcsQ0FBQ0YsTUFBTyxFQUYvQztFQUdEO0FBQ0YsQ0FuQ0Q7O2VBc0NldkIsUSJ9
65
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL3NoZWxsLmpzIiwibmFtZXMiOlsiQURCX1NIRUxMX0ZFQVRVUkUiLCJjb21tYW5kcyIsIm1vYmlsZVNoZWxsIiwib3B0cyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiY29tbWFuZCIsImFyZ3MiLCJ0aW1lb3V0IiwiaW5jbHVkZVN0ZGVyciIsIl8iLCJpc1N0cmluZyIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiYWRiQXJncyIsImFkYiIsImV4ZWN1dGFibGUiLCJkZWZhdWx0QXJncyIsImlzQXJyYXkiLCJsb2ciLCJkZWJ1ZyIsInBhdGgiLCJ1dGlsIiwicXVvdGUiLCJzdGRvdXQiLCJzdGRlcnIiLCJleGVjIiwiZXJyIiwiZXJyb3JBbmRUaHJvdyIsIm1lc3NhZ2UiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvc2hlbGwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBBREJfU0hFTExfRkVBVFVSRSA9ICdhZGJfc2hlbGwnO1xuXG5sZXQgY29tbWFuZHMgPSB7fTtcblxuY29tbWFuZHMubW9iaWxlU2hlbGwgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTaGVsbCAob3B0cyA9IHt9KSB7XG4gIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoQURCX1NIRUxMX0ZFQVRVUkUpO1xuXG4gIGNvbnN0IHtcbiAgICBjb21tYW5kLFxuICAgIGFyZ3MgPSBbXSxcbiAgICB0aW1lb3V0ID0gMjAwMDAsXG4gICAgaW5jbHVkZVN0ZGVycixcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFfLmlzU3RyaW5nKGNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlICdjb21tYW5kJyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuXG4gIGNvbnN0IGFkYkFyZ3MgPSBbXG4gICAgLi4udGhpcy5hZGIuZXhlY3V0YWJsZS5kZWZhdWx0QXJncyxcbiAgICAnc2hlbGwnLFxuICAgIGNvbW1hbmQsXG4gICAgLi4uKF8uaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbYXJnc10pXG4gIF07XG4gIHRoaXMubG9nLmRlYnVnKGBSdW5uaW5nICcke3RoaXMuYWRiLmV4ZWN1dGFibGUucGF0aH0gJHt1dGlsLnF1b3RlKGFkYkFyZ3MpfSdgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgZXhlYyh0aGlzLmFkYi5leGVjdXRhYmxlLnBhdGgsIGFkYkFyZ3MsIHt0aW1lb3V0fSk7XG4gICAgaWYgKGluY2x1ZGVTdGRlcnIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0ZG91dCxcbiAgICAgICAgc3RkZXJyXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gc3Rkb3V0O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZXhlY3V0ZSB0aGUgJyR7Y29tbWFuZH0nIHNoZWxsIGNvbW1hbmQuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfS4gYCArXG4gICAgICBgU3RkT3V0OiAke2Vyci5zdGRvdXR9LiBTdGRFcnI6ICR7ZXJyLnN0ZGVycn1gKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLFdBQTFCO0FBRUEsSUFBSUMsUUFBUSxHQUFHLEVBQWY7OztBQUVBQSxRQUFRLENBQUNDLFdBQVQsR0FBdUIsZUFBZUEsV0FBZixDQUE0QkMsSUFBSSxHQUFHLEVBQW5DLEVBQXVDO0VBQzVELEtBQUtDLG9CQUFMLENBQTBCSixpQkFBMUI7RUFFQSxNQUFNO0lBQ0pLLE9BREk7SUFFSkMsSUFBSSxHQUFHLEVBRkg7SUFHSkMsT0FBTyxHQUFHLEtBSE47SUFJSkM7RUFKSSxJQUtGTCxJQUxKOztFQU9BLElBQUksQ0FBQ00sZUFBQSxDQUFFQyxRQUFGLENBQVdMLE9BQVgsQ0FBTCxFQUEwQjtJQUN4QixNQUFNLElBQUlNLGNBQUEsQ0FBT0Msb0JBQVgsQ0FBaUMscUNBQWpDLENBQU47RUFDRDs7RUFFRCxNQUFNQyxPQUFPLEdBQUcsQ0FDZCxHQUFHLEtBQUtDLEdBQUwsQ0FBU0MsVUFBVCxDQUFvQkMsV0FEVCxFQUVkLE9BRmMsRUFHZFgsT0FIYyxFQUlkLElBQUlJLGVBQUEsQ0FBRVEsT0FBRixDQUFVWCxJQUFWLElBQWtCQSxJQUFsQixHQUF5QixDQUFDQSxJQUFELENBQTdCLENBSmMsQ0FBaEI7RUFNQSxLQUFLWSxHQUFMLENBQVNDLEtBQVQsQ0FBZ0IsWUFBVyxLQUFLTCxHQUFMLENBQVNDLFVBQVQsQ0FBb0JLLElBQUssSUFBR0MsYUFBQSxDQUFLQyxLQUFMLENBQVdULE9BQVgsQ0FBb0IsR0FBM0U7O0VBQ0EsSUFBSTtJQUNGLE1BQU07TUFBQ1UsTUFBRDtNQUFTQztJQUFULElBQW1CLE1BQU0sSUFBQUMsa0JBQUEsRUFBSyxLQUFLWCxHQUFMLENBQVNDLFVBQVQsQ0FBb0JLLElBQXpCLEVBQStCUCxPQUEvQixFQUF3QztNQUFDTjtJQUFELENBQXhDLENBQS9COztJQUNBLElBQUlDLGFBQUosRUFBbUI7TUFDakIsT0FBTztRQUNMZSxNQURLO1FBRUxDO01BRkssQ0FBUDtJQUlEOztJQUNELE9BQU9ELE1BQVA7RUFDRCxDQVRELENBU0UsT0FBT0csR0FBUCxFQUFZO0lBQ1osS0FBS1IsR0FBTCxDQUFTUyxhQUFULENBQXdCLHVCQUFzQnRCLE9BQVEsbUJBQS9CLEdBQ3BCLG1CQUFrQnFCLEdBQUcsQ0FBQ0UsT0FBUSxJQURWLEdBRXBCLFdBQVVGLEdBQUcsQ0FBQ0gsTUFBTyxhQUFZRyxHQUFHLENBQUNGLE1BQU8sRUFGL0M7RUFHRDtBQUNGLENBbkNEOztlQXNDZXZCLFEifQ==
@@ -11,7 +11,7 @@ require("source-map-support/register");
11
11
 
12
12
  var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
- var _support = require("@appium/support");
14
+ var _support = require("appium/support");
15
15
 
16
16
  var _teen_process = require("teen_process");
17
17
 
@@ -420,4 +420,4 @@ var _default = commands;
420
420
  exports.default = _default;require('source-map-support').install();
421
421
 
422
422
 
423
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL3N0cmVhbXNjcmVlbi5qcyIsIm5hbWVzIjpbImNvbW1hbmRzIiwiUkVDT1JESU5HX0lOVEVSVkFMX1NFQyIsIlNUUkVBTUlOR19TVEFSVFVQX1RJTUVPVVRfTVMiLCJHU1RSRUFNRVJfQklOQVJZIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiR1NUX0lOU1BFQ1RfQklOQVJZIiwiUkVRVUlSRURfR1NUX1BMVUdJTlMiLCJhdmRlY19oMjY0IiwiaDI2NHBhcnNlIiwianBlZ2VuYyIsInRjcHNlcnZlcnNpbmsiLCJtdWx0aXBhcnRtdXgiLCJTQ1JFRU5SRUNPUkRfQklOQVJZIiwiR1NUX1RVVE9SSUFMX1VSTCIsIkRFRkFVTFRfSE9TVCIsIlRDUF9IT1NUIiwiREVGQVVMVF9QT1JUIiwiREVGQVVMVF9RVUFMSVRZIiwiREVGQVVMVF9CSVRSQVRFIiwiQk9VTkRBUllfU1RSSU5HIiwiQURCX1NDUkVFTl9TVFJFQU1JTkdfRkVBVFVSRSIsImNyZWF0ZVN0cmVhbWluZ0xvZ2dlciIsInN0cmVhbU5hbWUiLCJ1ZGlkIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiXyIsInRydW5jYXRlIiwibGVuZ3RoIiwib21pc3Npb24iLCJ2ZXJpZnlTdHJlYW1pbmdSZXF1aXJlbWVudHMiLCJhZGIiLCJ0cmltIiwic2hlbGwiLCJFcnJvciIsImdzdHJlYW1lckNoZWNrUHJvbWlzZXMiLCJiaW5hcnlOYW1lIiwicHVzaCIsImZzIiwid2hpY2giLCJlIiwiQiIsImFsbCIsIm1vZHVsZUNoZWNrUHJvbWlzZXMiLCJuYW1lIiwibW9kTmFtZSIsInRvUGFpcnMiLCJzdGRvdXQiLCJleGVjIiwiaW5jbHVkZXMiLCJnZXREZXZpY2VJbmZvIiwibG9nIiwib3V0cHV0IiwicmVzdWx0Iiwia2V5IiwicGF0dGVybiIsIm1hdGNoIiwiZGVidWciLCJwYXJzZUludCIsImN1ckRldmljZUlkIiwiaW5pdERldmljZVN0cmVhbWluZ1Byb2MiLCJkZXZpY2VJbmZvIiwib3B0cyIsIndpZHRoIiwiaGVpZ2h0IiwiYml0UmF0ZSIsImFkanVzdGVkV2lkdGgiLCJhZGp1c3RlZEhlaWdodCIsImFkanVzdGVkQml0cmF0ZSIsInNjcmVlblJlY29yZENtZCIsImFkYkFyZ3MiLCJleGVjdXRhYmxlIiwiZGVmYXVsdEFyZ3MiLCJkZXZpY2VTdHJlYW1pbmciLCJzcGF3biIsInBhdGgiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJpc1N0YXJ0ZWQiLCJkZXZpY2VTdHJlYW1pbmdMb2dnZXIiLCJlcnJvcnNMaXN0ZW5lciIsImNodW5rIiwic3RkZXJyIiwidG9TdHJpbmciLCJzdGFydHVwTGlzdGVuZXIiLCJpc0VtcHR5IiwiaW5mbyIsInV0aWwiLCJxdW90ZSIsIndhaXRGb3JDb25kaXRpb24iLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiZXJyb3JBbmRUaHJvdyIsIm1lc3NhZ2UiLCJyZW1vdmVMaXN0ZW5lciIsImluaXRHc3RyZWFtZXJQaXBlbGluZSIsImRldmljZVN0cmVhbWluZ1Byb2MiLCJxdWFsaXR5IiwidGNwUG9ydCIsImNvbnNpZGVyUm90YXRpb24iLCJsb2dQaXBlbGluZURldGFpbHMiLCJnc3RyZWFtZXJQaXBlbGluZSIsIlN1YlByb2Nlc3MiLCJNYXRoIiwibWF4IiwiZnBzIiwic3RkaW8iLCJnc3RyZWFtZXJMb2dnZXIiLCJnc3RPdXRwdXRMaXN0ZW5lciIsImRpZEZhaWwiLCJyZXAiLCJzdGFydCIsImNoZWNrUG9ydFN0YXR1cyIsImlnbiIsImV4dHJhY3RSZW1vdGVBZGRyZXNzIiwicmVxIiwiaGVhZGVycyIsInNvY2tldCIsInJlbW90ZUFkZHJlc3MiLCJjb25uZWN0aW9uIiwibW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmciLCJvcHRpb25zIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJob3N0IiwicG9ydCIsInBhdGhuYW1lIiwiaXNVbmRlZmluZWQiLCJfc2NyZWVuU3RyZWFtaW5nUHJvcHMiLCJraWxsIiwibWpwZWdTb2NrZXQiLCJtanBlZ1NlcnZlciIsInJlc29sdmUiLCJyZWplY3QiLCJuZXQiLCJjcmVhdGVDb25uZWN0aW9uIiwiaHR0cCIsImNyZWF0ZVNlcnZlciIsInJlcyIsImN1cnJlbnRQYXRobmFtZSIsInVybCIsInBhcnNlIiwid3JpdGVIZWFkIiwiQ29ubmVjdGlvbiIsIndyaXRlIiwiZW5kIiwiUHJhZ21hIiwicGlwZSIsIndhcm4iLCJsaXN0ZW4iLCJlcnJvciIsInRpbWVvdXQiLCJpc1J1bm5pbmciLCJzdG9wIiwiZGVzdHJveSIsImxpc3RlbmluZyIsImNsb3NlIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsImUxIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL2NvbW1hbmRzL3N0cmVhbXNjcmVlbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMsIHN5c3RlbSwgbG9nZ2VyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGV4ZWMsIFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY2hlY2tQb3J0U3RhdHVzIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuY29uc3QgUkVDT1JESU5HX0lOVEVSVkFMX1NFQyA9IDU7XG5jb25zdCBTVFJFQU1JTkdfU1RBUlRVUF9USU1FT1VUX01TID0gNTAwMDtcbmNvbnN0IEdTVFJFQU1FUl9CSU5BUlkgPSBgZ3N0LWxhdW5jaC0xLjAke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG5jb25zdCBHU1RfSU5TUEVDVF9CSU5BUlkgPSBgZ3N0LWluc3BlY3QtMS4wJHtzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJ31gO1xuY29uc3QgUkVRVUlSRURfR1NUX1BMVUdJTlMgPSB7XG4gIGF2ZGVjX2gyNjQ6ICdnc3QtbGliYXYnLFxuICBoMjY0cGFyc2U6ICdnc3QtcGx1Z2lucy1iYWQnLFxuICBqcGVnZW5jOiAnZ3N0LXBsdWdpbnMtZ29vZCcsXG4gIHRjcHNlcnZlcnNpbms6ICdnc3QtcGx1Z2lucy1iYXNlJyxcbiAgbXVsdGlwYXJ0bXV4OiAnZ3N0LXBsdWdpbnMtZ29vZCcsXG59O1xuY29uc3QgU0NSRUVOUkVDT1JEX0JJTkFSWSA9ICdzY3JlZW5yZWNvcmQnO1xuY29uc3QgR1NUX1RVVE9SSUFMX1VSTCA9ICdodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG9jdW1lbnRhdGlvbi9pbnN0YWxsaW5nL2luZGV4Lmh0bWwnO1xuY29uc3QgREVGQVVMVF9IT1NUID0gJzEyNy4wLjAuMSc7XG5jb25zdCBUQ1BfSE9TVCA9ICcxMjcuMC4wLjEnO1xuY29uc3QgREVGQVVMVF9QT1JUID0gODA5MztcbmNvbnN0IERFRkFVTFRfUVVBTElUWSA9IDcwO1xuY29uc3QgREVGQVVMVF9CSVRSQVRFID0gNDAwMDAwMDsgLy8gNCBNYnBzXG5jb25zdCBCT1VOREFSWV9TVFJJTkcgPSAnLS0yYWU5NzQ2ODg3ZjE3MGI4Y2Y3YzI3MTA0N2NlMzE0Yyc7XG5cbmNvbnN0IEFEQl9TQ1JFRU5fU1RSRUFNSU5HX0ZFQVRVUkUgPSAnYWRiX3NjcmVlbl9zdHJlYW1pbmcnO1xuXG5mdW5jdGlvbiBjcmVhdGVTdHJlYW1pbmdMb2dnZXIgKHN0cmVhbU5hbWUsIHVkaWQpIHtcbiAgcmV0dXJuIGxvZ2dlci5nZXRMb2dnZXIoYCR7c3RyZWFtTmFtZX1AYCArIF8udHJ1bmNhdGUodWRpZCwge1xuICAgIGxlbmd0aDogOCxcbiAgICBvbWlzc2lvbjogJycsXG4gIH0pKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5U3RyZWFtaW5nUmVxdWlyZW1lbnRzIChhZGIpIHtcbiAgaWYgKCFfLnRyaW0oYXdhaXQgYWRiLnNoZWxsKFsnd2hpY2gnLCBTQ1JFRU5SRUNPUkRfQklOQVJZXSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSByZXF1aXJlZCAnJHtTQ1JFRU5SRUNPUkRfQklOQVJZfScgYmluYXJ5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0YCk7XG4gIH1cblxuICBjb25zdCBnc3RyZWFtZXJDaGVja1Byb21pc2VzID0gW107XG4gIGZvciAoY29uc3QgYmluYXJ5TmFtZSBvZiBbR1NUUkVBTUVSX0JJTkFSWSwgR1NUX0lOU1BFQ1RfQklOQVJZXSkge1xuICAgIGdzdHJlYW1lckNoZWNrUHJvbWlzZXMucHVzaCgoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud2hpY2goYmluYXJ5TmFtZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICcke2JpbmFyeU5hbWV9JyBiaW5hcnkgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgUEFUSCBvbiB0aGUgaG9zdCBzeXN0ZW0uIGAgK1xuICAgICAgICAgIGBTZWUgJHtHU1RfVFVUT1JJQUxfVVJMfSBmb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyB0byBpbnN0YWxsIGl0LmApO1xuICAgICAgfVxuICAgIH0pKCkpO1xuICB9XG4gIGF3YWl0IEIuYWxsKGdzdHJlYW1lckNoZWNrUHJvbWlzZXMpO1xuXG4gIGNvbnN0IG1vZHVsZUNoZWNrUHJvbWlzZXMgPSBbXTtcbiAgZm9yIChjb25zdCBbbmFtZSwgbW9kTmFtZV0gb2YgXy50b1BhaXJzKFJFUVVJUkVEX0dTVF9QTFVHSU5TKSkge1xuICAgIG1vZHVsZUNoZWNrUHJvbWlzZXMucHVzaCgoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdTVF9JTlNQRUNUX0JJTkFSWSwgW25hbWVdKTtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhzdGRvdXQsIG1vZE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhlIHJlcXVpcmVkIEdTdHJlYW1lciBwbHVnaW4gJyR7bmFtZX0nIGZyb20gJyR7bW9kTmFtZX0nIG1vZHVsZSBpcyBub3QgaW5zdGFsbGVkLiBgICtcbiAgICAgICAgICBgU2VlICR7R1NUX1RVVE9SSUFMX1VSTH0gZm9yIG1vcmUgZGV0YWlscyBvbiBob3cgdG8gaW5zdGFsbCBpdC5gKTtcbiAgICAgIH1cbiAgICB9KSgpKTtcbiAgfVxuICBhd2FpdCBCLmFsbChtb2R1bGVDaGVja1Byb21pc2VzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlSW5mbyAoYWRiLCBsb2cgPSBudWxsKSB7XG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IGFkYi5zaGVsbChbJ2R1bXBzeXMnLCAnZGlzcGxheSddKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgcGF0dGVybl0gb2YgW1xuICAgIFsnd2lkdGgnLCAvXFxiZGV2aWNlV2lkdGg9KFxcZCspL10sXG4gICAgWydoZWlnaHQnLCAvXFxiZGV2aWNlSGVpZ2h0PShcXGQrKS9dLFxuICAgIFsnZnBzJywgL1xcYmZwcz0oXFxkKykvXSxcbiAgXSkge1xuICAgIGNvbnN0IG1hdGNoID0gcGF0dGVybi5leGVjKG91dHB1dCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgbG9nPy5kZWJ1ZyhvdXRwdXQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGRldmljZSAke2tleX0gZnJvbSB0aGUgYWRiIGNvbW1hbmQgb3V0cHV0LiBgICtcbiAgICAgICAgYENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMuYCk7XG4gICAgfVxuICAgIHJlc3VsdFtrZXldID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgfVxuICByZXN1bHQudWRpZCA9IGFkYi5jdXJEZXZpY2VJZDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5pdERldmljZVN0cmVhbWluZ1Byb2MgKGFkYiwgbG9nLCBkZXZpY2VJbmZvLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBiaXRSYXRlLFxuICB9ID0gb3B0cztcbiAgY29uc3QgYWRqdXN0ZWRXaWR0aCA9IHBhcnNlSW50KHdpZHRoLCAxMCkgfHwgZGV2aWNlSW5mby53aWR0aDtcbiAgY29uc3QgYWRqdXN0ZWRIZWlnaHQgPSBwYXJzZUludChoZWlnaHQsIDEwKSB8fCBkZXZpY2VJbmZvLmhlaWdodDtcbiAgY29uc3QgYWRqdXN0ZWRCaXRyYXRlID0gcGFyc2VJbnQoYml0UmF0ZSwgMTApIHx8IERFRkFVTFRfQklUUkFURTtcbiAgbGV0IHNjcmVlblJlY29yZENtZCA9IFNDUkVFTlJFQ09SRF9CSU5BUlkgK1xuICAgIGAgLS1vdXRwdXQtZm9ybWF0PWgyNjRgICtcbiAgICAvLyA1IHNlY29uZHMgaXMgZmluZSB0byBkZXRlY3Qgcm90YXRpb24gY2hhbmdlc1xuICAgIGAgLS10aW1lLWxpbWl0PSR7UkVDT1JESU5HX0lOVEVSVkFMX1NFQ31gO1xuICBpZiAod2lkdGggfHwgaGVpZ2h0KSB7XG4gICAgc2NyZWVuUmVjb3JkQ21kICs9IGAgLS1zaXplPSR7YWRqdXN0ZWRXaWR0aH14JHthZGp1c3RlZEhlaWdodH1gO1xuICB9XG4gIGlmIChiaXRSYXRlKSB7XG4gICAgc2NyZWVuUmVjb3JkQ21kICs9IGAgLS1iaXQtcmF0ZT0ke2FkanVzdGVkQml0cmF0ZX1gO1xuICB9XG4gIGNvbnN0IGFkYkFyZ3MgPSBbXG4gICAgLi4uYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MsXG4gICAgJ2V4ZWMtb3V0JyxcbiAgICAvLyBUaGUgbG9vcCBpcyByZXF1aXJlZCwgYmVjYXVzZSBieSBkZWZhdWx0IHRoZSBtYXhpbXVtIHJlY29yZCBkdXJhdGlvblxuICAgIC8vIGZvciBzY3JlZW5yZWNvcmQgaXMgYWx3YXlzIGxpbWl0ZWRcbiAgICBgd2hpbGUgdHJ1ZTsgZG8gJHtzY3JlZW5SZWNvcmRDbWR9IC07IGRvbmVgLFxuICBdO1xuICBjb25zdCBkZXZpY2VTdHJlYW1pbmcgPSBzcGF3bihhZGIuZXhlY3V0YWJsZS5wYXRoLCBhZGJBcmdzKTtcbiAgZGV2aWNlU3RyZWFtaW5nLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgIGxvZy5kZWJ1ZyhgRGV2aWNlIHN0cmVhbWluZyBwcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWApO1xuICB9KTtcblxuICBsZXQgaXNTdGFydGVkID0gZmFsc2U7XG4gIGNvbnN0IGRldmljZVN0cmVhbWluZ0xvZ2dlciA9IGNyZWF0ZVN0cmVhbWluZ0xvZ2dlcihTQ1JFRU5SRUNPUkRfQklOQVJZLCBkZXZpY2VJbmZvLnVkaWQpO1xuICBjb25zdCBlcnJvcnNMaXN0ZW5lciA9IChjaHVuaykgPT4ge1xuICAgIGNvbnN0IHN0ZGVyciA9IGNodW5rLnRvU3RyaW5nKCk7XG4gICAgaWYgKF8udHJpbShzdGRlcnIpKSB7XG4gICAgICBkZXZpY2VTdHJlYW1pbmdMb2dnZXIuZGVidWcoc3RkZXJyKTtcbiAgICB9XG4gIH07XG4gIGRldmljZVN0cmVhbWluZy5zdGRlcnIub24oJ2RhdGEnLCBlcnJvcnNMaXN0ZW5lcik7XG5cbiAgY29uc3Qgc3RhcnR1cExpc3RlbmVyID0gKGNodW5rKSA9PiB7XG4gICAgaWYgKCFpc1N0YXJ0ZWQpIHtcbiAgICAgIGlzU3RhcnRlZCA9ICFfLmlzRW1wdHkoY2h1bmspO1xuICAgIH1cbiAgfTtcbiAgZGV2aWNlU3RyZWFtaW5nLnN0ZG91dC5vbignZGF0YScsIHN0YXJ0dXBMaXN0ZW5lcik7XG5cbiAgdHJ5IHtcbiAgICBsb2cuaW5mbyhgU3RhcnRpbmcgZGV2aWNlIHN0cmVhbWluZzogJHt1dGlsLnF1b3RlKFthZGIuZXhlY3V0YWJsZS5wYXRoLCAuLi5hZGJBcmdzXSl9YCk7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbigoKSA9PiBpc1N0YXJ0ZWQsIHtcbiAgICAgIHdhaXRNczogU1RSRUFNSU5HX1NUQVJUVVBfVElNRU9VVF9NUyxcbiAgICAgIGludGVydmFsTXM6IDMwMCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KFxuICAgICAgYENhbm5vdCBzdGFydCB0aGUgc2NyZWVuIHN0cmVhbWluZyBwcm9jZXNzLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgZGV2aWNlU3RyZWFtaW5nLnN0ZGVyci5yZW1vdmVMaXN0ZW5lcignZGF0YScsIGVycm9yc0xpc3RlbmVyKTtcbiAgICBkZXZpY2VTdHJlYW1pbmcuc3Rkb3V0LnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgc3RhcnR1cExpc3RlbmVyKTtcbiAgfVxuICByZXR1cm4gZGV2aWNlU3RyZWFtaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbml0R3N0cmVhbWVyUGlwZWxpbmUgKGRldmljZVN0cmVhbWluZ1Byb2MsIGRldmljZUluZm8sIGxvZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgcXVhbGl0eSxcbiAgICB0Y3BQb3J0LFxuICAgIGNvbnNpZGVyUm90YXRpb24sXG4gICAgbG9nUGlwZWxpbmVEZXRhaWxzLFxuICB9ID0gb3B0cztcbiAgY29uc3QgYWRqdXN0ZWRXaWR0aCA9IHBhcnNlSW50KHdpZHRoLCAxMCkgfHwgZGV2aWNlSW5mby53aWR0aDtcbiAgY29uc3QgYWRqdXN0ZWRIZWlnaHQgPSBwYXJzZUludChoZWlnaHQsIDEwKSB8fCBkZXZpY2VJbmZvLmhlaWdodDtcbiAgY29uc3QgZ3N0cmVhbWVyUGlwZWxpbmUgPSBuZXcgU3ViUHJvY2VzcyhHU1RSRUFNRVJfQklOQVJZLCBbXG4gICAgJy12JyxcbiAgICAnZmRzcmMnLCAnZmQ9MCcsXG4gICAgJyEnLCAndmlkZW8veC1oMjY0LCcgK1xuICAgICAgYHdpZHRoPSR7Y29uc2lkZXJSb3RhdGlvbiA/IE1hdGgubWF4KGFkanVzdGVkV2lkdGgsIGFkanVzdGVkSGVpZ2h0KSA6IGFkanVzdGVkV2lkdGh9LGAgK1xuICAgICAgYGhlaWdodD0ke2NvbnNpZGVyUm90YXRpb24gPyBNYXRoLm1heChhZGp1c3RlZFdpZHRoLCBhZGp1c3RlZEhlaWdodCkgOiBhZGp1c3RlZEhlaWdodH0sYCArXG4gICAgICBgZnJhbWVyYXRlPSR7ZGV2aWNlSW5mby5mcHN9LzEsYCArXG4gICAgICAnYnl0ZS1zdHJlYW09dHJ1ZScsXG4gICAgJyEnLCAnaDI2NHBhcnNlJyxcbiAgICAnIScsICdxdWV1ZScsICdsZWFreT1kb3duc3RyZWFtJyxcbiAgICAnIScsICdhdmRlY19oMjY0JyxcbiAgICAnIScsICdxdWV1ZScsICdsZWFreT1kb3duc3RyZWFtJyxcbiAgICAnIScsICdqcGVnZW5jJywgYHF1YWxpdHk9JHtxdWFsaXR5fWAsXG4gICAgJyEnLCAnbXVsdGlwYXJ0bXV4JywgYGJvdW5kYXJ5PSR7Qk9VTkRBUllfU1RSSU5HfWAsXG4gICAgJyEnLCAndGNwc2VydmVyc2luaycsIGBob3N0PSR7VENQX0hPU1R9YCwgYHBvcnQ9JHt0Y3BQb3J0fWAsXG4gIF0sIHtcbiAgICBzdGRpbzogW2RldmljZVN0cmVhbWluZ1Byb2Muc3Rkb3V0LCAncGlwZScsICdwaXBlJ11cbiAgfSk7XG4gIGdzdHJlYW1lclBpcGVsaW5lLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgIGxvZy5kZWJ1ZyhgUGlwZWxpbmUgc3RyZWFtaW5nIHByb2Nlc3MgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YCk7XG4gIH0pO1xuICBjb25zdCBnc3RyZWFtZXJMb2dnZXIgPSBjcmVhdGVTdHJlYW1pbmdMb2dnZXIoJ2dzdCcsIGRldmljZUluZm8udWRpZCk7XG4gIGNvbnN0IGdzdE91dHB1dExpc3RlbmVyID0gKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgaWYgKF8udHJpbShzdGRlcnIgfHwgc3Rkb3V0KSkge1xuICAgICAgZ3N0cmVhbWVyTG9nZ2VyLmRlYnVnKHN0ZGVyciB8fCBzdGRvdXQpO1xuICAgIH1cbiAgfTtcbiAgZ3N0cmVhbWVyUGlwZWxpbmUub24oJ291dHB1dCcsIGdzdE91dHB1dExpc3RlbmVyKTtcbiAgbGV0IGRpZEZhaWwgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBsb2cuaW5mbyhgU3RhcnRpbmcgR1N0cmVhbWVyIHBpcGVsaW5lOiAke2dzdHJlYW1lclBpcGVsaW5lLnJlcH1gKTtcbiAgICBhd2FpdCBnc3RyZWFtZXJQaXBlbGluZS5zdGFydCgwKTtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgY2hlY2tQb3J0U3RhdHVzKHRjcFBvcnQsIFRDUF9IT1NUKSkgPT09ICdvcGVuJztcbiAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAgd2FpdE1zOiBTVFJFQU1JTkdfU1RBUlRVUF9USU1FT1VUX01TLFxuICAgICAgaW50ZXJ2YWxNczogMzAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZGlkRmFpbCA9IHRydWU7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coXG4gICAgICBgQ2Fubm90IHN0YXJ0IHRoZSBzY3JlZW4gc3RyZWFtaW5nIHBpcGVsaW5lLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKCFsb2dQaXBlbGluZURldGFpbHMgfHwgZGlkRmFpbCkge1xuICAgICAgZ3N0cmVhbWVyUGlwZWxpbmUucmVtb3ZlTGlzdGVuZXIoJ291dHB1dCcsIGdzdE91dHB1dExpc3RlbmVyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGdzdHJlYW1lclBpcGVsaW5lO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UmVtb3RlQWRkcmVzcyAocmVxKSB7XG4gIHJldHVybiByZXEuaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ11cbiAgICB8fCByZXEuc29ja2V0LnJlbW90ZUFkZHJlc3NcbiAgICB8fCByZXEuY29ubmVjdGlvbi5yZW1vdGVBZGRyZXNzXG4gICAgfHwgcmVxLmNvbm5lY3Rpb24uc29ja2V0LnJlbW90ZUFkZHJlc3M7XG59XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydFNjcmVlblN0cmVhbWluZ09wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHdpZHRoIC0gVGhlIHNjYWxlZCB3aWR0aCBvZiB0aGUgZGV2aWNlJ3Mgc2NyZWVuLiBJZiB1bnNldCB0aGVuIHRoZSBzY3JpcHQgd2lsbCBhc3NpZ24gaXRcbiAqIHRvIHRoZSBhY3R1YWwgc2NyZWVuIHdpZHRoIG1lYXN1cmVkIGluIHBpeGVscy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gaGVpZ2h0IC0gVGhlIHNjYWxlZCBoZWlnaHQgb2YgdGhlIGRldmljZSdzIHNjcmVlbi4gSWYgdW5zZXQgdGhlbiB0aGUgc2NyaXB0IHdpbGwgYXNzaWduIGl0XG4gKiB0byB0aGUgYWN0dWFsIHNjcmVlbiBoZWlnaHQgbWVhc3VyZWQgaW4gcGl4ZWxzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBiaXRSYXRlIC0gVGhlIHZpZGVvIGJpdCByYXRlIGZvciB0aGUgdmlkZW8sIGluIGJpdHMgcGVyIHNlY29uZC5cbiAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDQwMDAwMDAgKDQgTWIvcykuIFlvdSBjYW4gaW5jcmVhc2UgdGhlIGJpdCByYXRlIHRvIGltcHJvdmUgdmlkZW8gcXVhbGl0eSxcbiAqIGJ1dCBkb2luZyBzbyByZXN1bHRzIGluIGxhcmdlciBtb3ZpZSBmaWxlcy5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaG9zdCBbMTI3LjAuMC4xXSAtIFRoZSBJUCBhZGRyZXNzL2hvc3QgbmFtZSB0byBzdGFydCB0aGUgTUpQRUcgc2VydmVyIG9uLlxuICogWW91IGNhbiBzZXQgaXQgdG8gYDAuMC4wLjBgIHRvIHRyaWdnZXIgdGhlIGJyb2FkY2FzdCBvbiBhbGwgYXZhaWxhYmxlIG5ldHdvcmsgaW50ZXJmYWNlcy5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGF0aG5hbWUgLSBUaGUgSFRUUCByZXF1ZXN0IHBhdGggdGhlIE1KUEVHIHNlcnZlciBzaG91bGQgYmUgYXZhaWxhYmxlIG9uLlxuICogSWYgdW5zZXQgdGhlbiBhbnkgcGF0aG5hbWUgb24gdGhlIGdpdmVuIGBob3N0YC9gcG9ydGAgY29tYmluYXRpb24gd2lsbCB3b3JrLiBOb3RlIHRoYXQgdGhlIHZhbHVlXG4gKiBzaG91bGQgYWx3YXlzIHN0YXJ0IHdpdGggYSBzaW5nbGUgc2xhc2g6IGAvYFxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0Y3BQb3J0IFs4MDk0XSAtIFRoZSBwb3J0IG51bWJlciB0byBzdGFydCB0aGUgaW50ZXJuYWwgVENQIE1KUEVHIGJyb2FkY2FzdCBvbi5cbiAqIFRoaXMgdHlwZSBvZiBicm9hZGNhc3QgYWx3YXlzIHN0YXJ0cyBvbiB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIChgMTI3LjAuMC4xYCkuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHBvcnQgWzgwOTNdIC0gVGhlIHBvcnQgbnVtYmVyIHRvIHN0YXJ0IHRoZSBNSlBFRyBzZXJ2ZXIgb24uXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHF1YWxpdHkgWzcwXSAtIFRoZSBxdWFsaXR5IHZhbHVlIGZvciB0aGUgc3RyZWFtZWQgSlBFRyBpbWFnZXMuXG4gKiBUaGlzIG51bWJlciBzaG91bGQgYmUgaW4gcmFuZ2UgWzEsIDEwMF0sIHdoZXJlIDEwMCBpcyB0aGUgYmVzdCBxdWFsaXR5LlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gY29uc2lkZXJSb3RhdGlvbiBbZmFsc2VdIC0gSWYgc2V0IHRvIGB0cnVlYCB0aGVuIEdTdHJlYW1lciBwaXBlbGluZSB3aWxsXG4gKiBpbmNyZWFzZSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgcmVzdWx0aW5nIGltYWdlcyB0byBwcm9wZXJseSBmaXQgaW1hZ2VzIGluIGJvdGggbGFuZHNjYXBlIGFuZFxuICogcG9ydHJhaXQgb3JpZW50YXRpb25zLiBTZXQgaXQgdG8gYHRydWVgIGlmIHRoZSBkZXZpY2Ugcm90YXRpb24gaXMgbm90IGdvaW5nIHRvIGJlIHRoZSBzYW1lIGR1cmluZyB0aGVcbiAqIGJyb2FkY2FzdGluZyBzZXNzaW9uLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gbG9nUGlwZWxpbmVEZXRhaWxzIFtmYWxzZV0gLSBXaGV0aGVyIHRvIGxvZyBHU3RyZWFtZXIgcGlwZWxpbmUgZXZlbnRzIGludG9cbiAqIHRoZSBzdGFuZGFyZCBsb2cgb3V0cHV0LiBNaWdodCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiAqL1xuXG4vKipcbiAqIFN0YXJ0cyBkZXZpY2Ugc2NyZWVuIGJyb2FkY2FzdCBieSBjcmVhdGluZyBNSlBFRyBzZXJ2ZXIuXG4gKiBNdWx0aXBsZSBjYWxscyB0byB0aGlzIG1ldGhvZCBoYXZlIG5vIGVmZmVjdCB1bmxlc3MgdGhlIHByZXZpb3VzIHN0cmVhbWluZ1xuICogc2Vzc2lvbiBpcyBzdG9wcGVkLlxuICogVGhpcyBtZXRob2Qgb25seSB3b3JrcyBpZiB0aGUgYGFkYl9zY3JlZW5fc3RyZWFtaW5nYCBmZWF0dXJlIGlzXG4gKiBlbmFibGVkIG9uIHRoZSBzZXJ2ZXIgc2lkZS5cbiAqXG4gKiBAcGFyYW0gez9TdGFydFNjcmVlblN0cmVhbWluZ09wdGlvbnN9IG9wdGlvbnMgLSBUaGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgc2NyZWVuIHN0cmVhbWluZyBoYXMgZmFpbGVkIHRvIHN0YXJ0IG9yXG4gKiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBob3N0IHN5c3RlbSBvclxuICogdGhlIGNvcnJlc3BvbmRpbmcgc2VydmVyIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0YXJ0U2NyZWVuU3RyZWFtaW5nID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcgKG9wdGlvbnMgPSB7fSkge1xuICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKEFEQl9TQ1JFRU5fU1RSRUFNSU5HX0ZFQVRVUkUpO1xuXG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgYml0UmF0ZSxcbiAgICBob3N0ID0gREVGQVVMVF9IT1NULFxuICAgIHBvcnQgPSBERUZBVUxUX1BPUlQsXG4gICAgcGF0aG5hbWUsXG4gICAgdGNwUG9ydCA9IERFRkFVTFRfUE9SVCArIDEsXG4gICAgcXVhbGl0eSA9IERFRkFVTFRfUVVBTElUWSxcbiAgICBjb25zaWRlclJvdGF0aW9uID0gZmFsc2UsXG4gICAgbG9nUGlwZWxpbmVEZXRhaWxzID0gZmFsc2UsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuX3NjcmVlblN0cmVhbWluZ1Byb3BzKSkge1xuICAgIGF3YWl0IHZlcmlmeVN0cmVhbWluZ1JlcXVpcmVtZW50cyh0aGlzLmFkYik7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuU3RyZWFtaW5nUHJvcHMpKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgVGhlIHNjcmVlbiBzdHJlYW1pbmcgc2Vzc2lvbiBpcyBhbHJlYWR5IHJ1bm5pbmcuIGAgK1xuICAgICAgYFN0b3AgaXQgZmlyc3QgaW4gb3JkZXIgdG8gc3RhcnQgYSBuZXcgb25lLmApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoKGF3YWl0IGNoZWNrUG9ydFN0YXR1cyhwb3J0LCBob3N0KSkgPT09ICdvcGVuJykge1xuICAgIHRoaXMubG9nLmluZm8oYFRoZSBwb3J0ICMke3BvcnR9IGF0ICR7aG9zdH0gaXMgYnVzeS4gYCArXG4gICAgICBgQXNzdW1pbmcgdGhlIHNjcmVlbiBzdHJlYW1pbmcgaXMgYWxyZWFkeSBydW5uaW5nYCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICgoYXdhaXQgY2hlY2tQb3J0U3RhdHVzKHRjcFBvcnQsIFRDUF9IT1NUKSkgPT09ICdvcGVuJykge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZSBwb3J0ICMke3RjcFBvcnR9IGF0ICR7VENQX0hPU1R9IGlzIGJ1c3kuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbGVmdG92ZXJzIGZyb20gcHJldmlvdXMgc2Vzc2lvbnMuYCk7XG4gIH1cbiAgdGhpcy5fc2NyZWVuU3RyZWFtaW5nUHJvcHMgPSBudWxsO1xuXG4gIGNvbnN0IGRldmljZUluZm8gPSBhd2FpdCBnZXREZXZpY2VJbmZvKHRoaXMuYWRiLCB0aGlzLmxvZyk7XG4gIGNvbnN0IGRldmljZVN0cmVhbWluZ1Byb2MgPSBhd2FpdCBpbml0RGV2aWNlU3RyZWFtaW5nUHJvYyh0aGlzLmFkYiwgdGhpcy5sb2csIGRldmljZUluZm8sIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgYml0UmF0ZSxcbiAgfSk7XG4gIGxldCBnc3RyZWFtZXJQaXBlbGluZTtcbiAgdHJ5IHtcbiAgICBnc3RyZWFtZXJQaXBlbGluZSA9IGF3YWl0IGluaXRHc3RyZWFtZXJQaXBlbGluZShkZXZpY2VTdHJlYW1pbmdQcm9jLCBkZXZpY2VJbmZvLCB0aGlzLmxvZywge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBxdWFsaXR5LFxuICAgICAgdGNwUG9ydCxcbiAgICAgIGNvbnNpZGVyUm90YXRpb24sXG4gICAgICBsb2dQaXBlbGluZURldGFpbHMsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZGV2aWNlU3RyZWFtaW5nUHJvYy5raWxsKDApKSB7XG4gICAgICBkZXZpY2VTdHJlYW1pbmdQcm9jLmtpbGwoKTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIGxldCBtanBlZ1NvY2tldDtcbiAgbGV0IG1qcGVnU2VydmVyO1xuICB0cnkge1xuICAgIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG1qcGVnU29ja2V0ID0gbmV0LmNyZWF0ZUNvbm5lY3Rpb24odGNwUG9ydCwgVENQX0hPU1QsICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgU3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byBNSlBFRyBzdHJlYW0gYXQgdGNwOi8vJHtUQ1BfSE9TVH06JHt0Y3BQb3J0fWApO1xuICAgICAgICBtanBlZ1NlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKChyZXEsIHJlcykgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbW90ZUFkZHJlc3MgPSBleHRyYWN0UmVtb3RlQWRkcmVzcyhyZXEpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYXRobmFtZSA9IHVybC5wYXJzZShyZXEudXJsKS5wYXRobmFtZTtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBHb3QgYW4gaW5jb21pbmcgc2NyZWVuIGJyYWRjYXN0aW5nIHJlcXVlc3QgZnJvbSAke3JlbW90ZUFkZHJlc3N9IGAgK1xuICAgICAgICAgICAgYCgke3JlcS5oZWFkZXJzWyd1c2VyLWFnZW50J10gfHwgJ1VzZXIgQWdlbnQgdW5rbm93bid9KSBhdCAke2N1cnJlbnRQYXRobmFtZX1gKTtcblxuICAgICAgICAgIGlmIChwYXRobmFtZSAmJiBjdXJyZW50UGF0aG5hbWUgIT09IHBhdGhuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy5pbmZvKCdSZWplY3RpbmcgdGhlIGJyb2FkY2FzdCByZXF1ZXN0IHNpbmNlIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBnaXZlbiBwYXRobmFtZScpO1xuICAgICAgICAgICAgcmVzLndyaXRlSGVhZCg0MDQsIHtcbiAgICAgICAgICAgICAgQ29ubmVjdGlvbjogJ2Nsb3NlJyxcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzLndyaXRlKGAnJHtjdXJyZW50UGF0aG5hbWV9JyBkaWQgbm90IG1hdGNoIGFueSBrbm93biBlbmRwb2ludHNgKTtcbiAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKCdTdGFydGluZyBNSlBFRyBicm9hZGNhc3QnKTtcbiAgICAgICAgICByZXMud3JpdGVIZWFkKDIwMCwge1xuICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHByZS1jaGVjaz0wLCBwb3N0LWNoZWNrPTAsIG1heC1hZ2U9MCcsXG4gICAgICAgICAgICBQcmFnbWE6ICduby1jYWNoZScsXG4gICAgICAgICAgICBDb25uZWN0aW9uOiAnY2xvc2UnLFxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IGBtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlOyBib3VuZGFyeT0ke0JPVU5EQVJZX1NUUklOR31gXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtanBlZ1NvY2tldC5waXBlKHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBtanBlZ1NlcnZlci5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oZSk7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgbWpwZWdTZXJ2ZXIub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBNSlBFRyBzZXJ2ZXIgYXQgaHR0cDovLyR7aG9zdH06JHtwb3J0fSBoYXMgYmVlbiBjbG9zZWRgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1qcGVnU2VydmVyLm9uKCdsaXN0ZW5pbmcnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgTUpQRUcgc2VydmVyIGF0IGh0dHA6Ly8ke2hvc3R9OiR7cG9ydH1gKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBtanBlZ1NlcnZlci5saXN0ZW4ocG9ydCwgaG9zdCk7XG4gICAgICB9KTtcbiAgICAgIG1qcGVnU29ja2V0Lm9uKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yKGUpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KTtcbiAgICB9KS50aW1lb3V0KFNUUkVBTUlOR19TVEFSVFVQX1RJTUVPVVRfTVMsXG4gICAgICBgQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHN0cmVhbWluZyBzZXJ2ZXIgd2l0aGluICR7U1RSRUFNSU5HX1NUQVJUVVBfVElNRU9VVF9NU31tc2ApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGRldmljZVN0cmVhbWluZ1Byb2Mua2lsbCgwKSkge1xuICAgICAgZGV2aWNlU3RyZWFtaW5nUHJvYy5raWxsKCk7XG4gICAgfVxuICAgIGlmIChnc3RyZWFtZXJQaXBlbGluZS5pc1J1bm5pbmcpIHtcbiAgICAgIGF3YWl0IGdzdHJlYW1lclBpcGVsaW5lLnN0b3AoKTtcbiAgICB9XG4gICAgaWYgKG1qcGVnU29ja2V0KSB7XG4gICAgICBtanBlZ1NvY2tldC5kZXN0cm95KCk7XG4gICAgfVxuICAgIGlmIChtanBlZ1NlcnZlciAmJiBtanBlZ1NlcnZlci5saXN0ZW5pbmcpIHtcbiAgICAgIG1qcGVnU2VydmVyLmNsb3NlKCk7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cblxuICB0aGlzLl9zY3JlZW5TdHJlYW1pbmdQcm9wcyA9IHtcbiAgICBkZXZpY2VTdHJlYW1pbmdQcm9jLFxuICAgIGdzdHJlYW1lclBpcGVsaW5lLFxuICAgIG1qcGVnU29ja2V0LFxuICAgIG1qcGVnU2VydmVyLFxuICB9O1xufTtcblxuLyoqXG4gKiBTdG9wIHNjcmVlbiBzdHJlYW1pbmcuXG4gKiBJZiBubyBzY3JlZW4gc3RyZWFtaW5nIHNlcnZlciBoYXMgYmVlbiBzdGFydGVkIHRoZW4gbm90aGluZyBpcyBkb25lLlxuICovXG5jb21tYW5kcy5tb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyAoLyogb3B0aW9ucyA9IHt9ICovKSB7XG4gIGlmIChfLmlzRW1wdHkodGhpcy5fc2NyZWVuU3RyZWFtaW5nUHJvcHMpKSB7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuX3NjcmVlblN0cmVhbWluZ1Byb3BzKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNjcmVlbiBzdHJlYW1pbmcgaXMgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gc3RvcGApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgZGV2aWNlU3RyZWFtaW5nUHJvYyxcbiAgICBnc3RyZWFtZXJQaXBlbGluZSxcbiAgICBtanBlZ1NvY2tldCxcbiAgICBtanBlZ1NlcnZlcixcbiAgfSA9IHRoaXMuX3NjcmVlblN0cmVhbWluZ1Byb3BzO1xuXG4gIHRyeSB7XG4gICAgbWpwZWdTb2NrZXQuZW5kKCk7XG4gICAgaWYgKG1qcGVnU2VydmVyLmxpc3RlbmluZykge1xuICAgICAgbWpwZWdTZXJ2ZXIuY2xvc2UoKTtcbiAgICB9XG4gICAgaWYgKGRldmljZVN0cmVhbWluZ1Byb2Mua2lsbCgwKSkge1xuICAgICAgZGV2aWNlU3RyZWFtaW5nUHJvYy5raWxsKCdTSUdJTlQnKTtcbiAgICB9XG4gICAgaWYgKGdzdHJlYW1lclBpcGVsaW5lLmlzUnVubmluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZ3N0cmVhbWVyUGlwZWxpbmUuc3RvcCgnU0lHSU5UJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZ3N0cmVhbWVyUGlwZWxpbmUuc3RvcCgnU0lHS0lMTCcpO1xuICAgICAgICB9IGNhdGNoIChlMSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yKGUxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxvZy5pbmZvKGBTdWNjZXNzZnVsbHkgdGVybWluYXRlZCB0aGUgc2NyZWVuIHN0cmVhbWluZyBNSlBFRyBzZXJ2ZXJgKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLl9zY3JlZW5TdHJlYW1pbmdQcm9wcyA9IG51bGw7XG4gIH1cbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCO0FBRUEsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBL0I7QUFDQSxNQUFNQyw0QkFBNEIsR0FBRyxJQUFyQztBQUNBLE1BQU1DLGdCQUFnQixHQUFJLGlCQUFnQkMsZUFBQSxDQUFPQyxTQUFQLEtBQXFCLE1BQXJCLEdBQThCLEVBQUcsRUFBM0U7QUFDQSxNQUFNQyxrQkFBa0IsR0FBSSxrQkFBaUJGLGVBQUEsQ0FBT0MsU0FBUCxLQUFxQixNQUFyQixHQUE4QixFQUFHLEVBQTlFO0FBQ0EsTUFBTUUsb0JBQW9CLEdBQUc7RUFDM0JDLFVBQVUsRUFBRSxXQURlO0VBRTNCQyxTQUFTLEVBQUUsaUJBRmdCO0VBRzNCQyxPQUFPLEVBQUUsa0JBSGtCO0VBSTNCQyxhQUFhLEVBQUUsa0JBSlk7RUFLM0JDLFlBQVksRUFBRTtBQUxhLENBQTdCO0FBT0EsTUFBTUMsbUJBQW1CLEdBQUcsY0FBNUI7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyx1RUFBekI7QUFDQSxNQUFNQyxZQUFZLEdBQUcsV0FBckI7QUFDQSxNQUFNQyxRQUFRLEdBQUcsV0FBakI7QUFDQSxNQUFNQyxZQUFZLEdBQUcsSUFBckI7QUFDQSxNQUFNQyxlQUFlLEdBQUcsRUFBeEI7QUFDQSxNQUFNQyxlQUFlLEdBQUcsT0FBeEI7QUFDQSxNQUFNQyxlQUFlLEdBQUcsb0NBQXhCO0FBRUEsTUFBTUMsNEJBQTRCLEdBQUcsc0JBQXJDOztBQUVBLFNBQVNDLHFCQUFULENBQWdDQyxVQUFoQyxFQUE0Q0MsSUFBNUMsRUFBa0Q7RUFDaEQsT0FBT0MsZUFBQSxDQUFPQyxTQUFQLENBQWtCLEdBQUVILFVBQVcsR0FBZCxHQUFtQkksZUFBQSxDQUFFQyxRQUFGLENBQVdKLElBQVgsRUFBaUI7SUFDMURLLE1BQU0sRUFBRSxDQURrRDtJQUUxREMsUUFBUSxFQUFFO0VBRmdELENBQWpCLENBQXBDLENBQVA7QUFJRDs7QUFFRCxlQUFlQywyQkFBZixDQUE0Q0MsR0FBNUMsRUFBaUQ7RUFDL0MsSUFBSSxDQUFDTCxlQUFBLENBQUVNLElBQUYsQ0FBTyxNQUFNRCxHQUFHLENBQUNFLEtBQUosQ0FBVSxDQUFDLE9BQUQsRUFBVXJCLG1CQUFWLENBQVYsQ0FBYixDQUFMLEVBQThEO0lBQzVELE1BQU0sSUFBSXNCLEtBQUosQ0FDSCxpQkFBZ0J0QixtQkFBb0Isb0RBRGpDLENBQU47RUFFRDs7RUFFRCxNQUFNdUIsc0JBQXNCLEdBQUcsRUFBL0I7O0VBQ0EsS0FBSyxNQUFNQyxVQUFYLElBQXlCLENBQUNsQyxnQkFBRCxFQUFtQkcsa0JBQW5CLENBQXpCLEVBQWlFO0lBQy9EOEIsc0JBQXNCLENBQUNFLElBQXZCLENBQTRCLENBQUMsWUFBWTtNQUN2QyxJQUFJO1FBQ0YsTUFBTUMsV0FBQSxDQUFHQyxLQUFILENBQVNILFVBQVQsQ0FBTjtNQUNELENBRkQsQ0FFRSxPQUFPSSxDQUFQLEVBQVU7UUFDVixNQUFNLElBQUlOLEtBQUosQ0FBVyxRQUFPRSxVQUFXLDREQUFuQixHQUNiLE9BQU12QixnQkFBaUIseUNBRHBCLENBQU47TUFFRDtJQUNGLENBUDJCLEdBQTVCO0VBUUQ7O0VBQ0QsTUFBTTRCLGlCQUFBLENBQUVDLEdBQUYsQ0FBTVAsc0JBQU4sQ0FBTjtFQUVBLE1BQU1RLG1CQUFtQixHQUFHLEVBQTVCOztFQUNBLEtBQUssTUFBTSxDQUFDQyxJQUFELEVBQU9DLE9BQVAsQ0FBWCxJQUE4Qm5CLGVBQUEsQ0FBRW9CLE9BQUYsQ0FBVXhDLG9CQUFWLENBQTlCLEVBQStEO0lBQzdEcUMsbUJBQW1CLENBQUNOLElBQXBCLENBQXlCLENBQUMsWUFBWTtNQUNwQyxNQUFNO1FBQUNVO01BQUQsSUFBVyxNQUFNLElBQUFDLGtCQUFBLEVBQUszQyxrQkFBTCxFQUF5QixDQUFDdUMsSUFBRCxDQUF6QixDQUF2Qjs7TUFDQSxJQUFJLENBQUNsQixlQUFBLENBQUV1QixRQUFGLENBQVdGLE1BQVgsRUFBbUJGLE9BQW5CLENBQUwsRUFBa0M7UUFDaEMsTUFBTSxJQUFJWCxLQUFKLENBQ0gsa0NBQWlDVSxJQUFLLFdBQVVDLE9BQVEsNkJBQXpELEdBQ0MsT0FBTWhDLGdCQUFpQix5Q0FGcEIsQ0FBTjtNQUdEO0lBQ0YsQ0FQd0IsR0FBekI7RUFRRDs7RUFDRCxNQUFNNEIsaUJBQUEsQ0FBRUMsR0FBRixDQUFNQyxtQkFBTixDQUFOO0FBQ0Q7O0FBRUQsZUFBZU8sYUFBZixDQUE4Qm5CLEdBQTlCLEVBQW1Db0IsR0FBRyxHQUFHLElBQXpDLEVBQStDO0VBQzdDLE1BQU1DLE1BQU0sR0FBRyxNQUFNckIsR0FBRyxDQUFDRSxLQUFKLENBQVUsQ0FBQyxTQUFELEVBQVksU0FBWixDQUFWLENBQXJCO0VBQ0EsTUFBTW9CLE1BQU0sR0FBRyxFQUFmOztFQUNBLEtBQUssTUFBTSxDQUFDQyxHQUFELEVBQU1DLE9BQU4sQ0FBWCxJQUE2QixDQUMzQixDQUFDLE9BQUQsRUFBVSxxQkFBVixDQUQyQixFQUUzQixDQUFDLFFBQUQsRUFBVyxzQkFBWCxDQUYyQixFQUczQixDQUFDLEtBQUQsRUFBUSxhQUFSLENBSDJCLENBQTdCLEVBSUc7SUFDRCxNQUFNQyxLQUFLLEdBQUdELE9BQU8sQ0FBQ1AsSUFBUixDQUFhSSxNQUFiLENBQWQ7O0lBQ0EsSUFBSSxDQUFDSSxLQUFMLEVBQVk7TUFDVkwsR0FBRyxTQUFILElBQUFBLEdBQUcsV0FBSCxZQUFBQSxHQUFHLENBQUVNLEtBQUwsQ0FBV0wsTUFBWDtNQUNBLE1BQU0sSUFBSWxCLEtBQUosQ0FBVywyQkFBMEJvQixHQUFJLGdDQUEvQixHQUNiLHdDQURHLENBQU47SUFFRDs7SUFDREQsTUFBTSxDQUFDQyxHQUFELENBQU4sR0FBY0ksUUFBUSxDQUFDRixLQUFLLENBQUMsQ0FBRCxDQUFOLEVBQVcsRUFBWCxDQUF0QjtFQUNEOztFQUNESCxNQUFNLENBQUM5QixJQUFQLEdBQWNRLEdBQUcsQ0FBQzRCLFdBQWxCO0VBQ0EsT0FBT04sTUFBUDtBQUNEOztBQUVELGVBQWVPLHVCQUFmLENBQXdDN0IsR0FBeEMsRUFBNkNvQixHQUE3QyxFQUFrRFUsVUFBbEQsRUFBOERDLElBQUksR0FBRyxFQUFyRSxFQUF5RTtFQUN2RSxNQUFNO0lBQ0pDLEtBREk7SUFFSkMsTUFGSTtJQUdKQztFQUhJLElBSUZILElBSko7RUFLQSxNQUFNSSxhQUFhLEdBQUdSLFFBQVEsQ0FBQ0ssS0FBRCxFQUFRLEVBQVIsQ0FBUixJQUF1QkYsVUFBVSxDQUFDRSxLQUF4RDtFQUNBLE1BQU1JLGNBQWMsR0FBR1QsUUFBUSxDQUFDTSxNQUFELEVBQVMsRUFBVCxDQUFSLElBQXdCSCxVQUFVLENBQUNHLE1BQTFEO0VBQ0EsTUFBTUksZUFBZSxHQUFHVixRQUFRLENBQUNPLE9BQUQsRUFBVSxFQUFWLENBQVIsSUFBeUIvQyxlQUFqRDtFQUNBLElBQUltRCxlQUFlLEdBQUd6RCxtQkFBbUIsR0FDdEMsdUJBRG1CLEdBR25CLGlCQUFnQlosc0JBQXVCLEVBSDFDOztFQUlBLElBQUkrRCxLQUFLLElBQUlDLE1BQWIsRUFBcUI7SUFDbkJLLGVBQWUsSUFBSyxXQUFVSCxhQUFjLElBQUdDLGNBQWUsRUFBOUQ7RUFDRDs7RUFDRCxJQUFJRixPQUFKLEVBQWE7SUFDWEksZUFBZSxJQUFLLGVBQWNELGVBQWdCLEVBQWxEO0VBQ0Q7O0VBQ0QsTUFBTUUsT0FBTyxHQUFHLENBQ2QsR0FBR3ZDLEdBQUcsQ0FBQ3dDLFVBQUosQ0FBZUMsV0FESixFQUVkLFVBRmMsRUFLYixrQkFBaUJILGVBQWdCLFVBTHBCLENBQWhCO0VBT0EsTUFBTUksZUFBZSxHQUFHLElBQUFDLG9CQUFBLEVBQU0zQyxHQUFHLENBQUN3QyxVQUFKLENBQWVJLElBQXJCLEVBQTJCTCxPQUEzQixDQUF4QjtFQUNBRyxlQUFlLENBQUNHLEVBQWhCLENBQW1CLE1BQW5CLEVBQTJCLENBQUNDLElBQUQsRUFBT0MsTUFBUCxLQUFrQjtJQUMzQzNCLEdBQUcsQ0FBQ00sS0FBSixDQUFXLDZDQUE0Q29CLElBQUssWUFBV0MsTUFBTyxFQUE5RTtFQUNELENBRkQ7RUFJQSxJQUFJQyxTQUFTLEdBQUcsS0FBaEI7RUFDQSxNQUFNQyxxQkFBcUIsR0FBRzNELHFCQUFxQixDQUFDVCxtQkFBRCxFQUFzQmlELFVBQVUsQ0FBQ3RDLElBQWpDLENBQW5EOztFQUNBLE1BQU0wRCxjQUFjLEdBQUlDLEtBQUQsSUFBVztJQUNoQyxNQUFNQyxNQUFNLEdBQUdELEtBQUssQ0FBQ0UsUUFBTixFQUFmOztJQUNBLElBQUkxRCxlQUFBLENBQUVNLElBQUYsQ0FBT21ELE1BQVAsQ0FBSixFQUFvQjtNQUNsQkgscUJBQXFCLENBQUN2QixLQUF0QixDQUE0QjBCLE1BQTVCO0lBQ0Q7RUFDRixDQUxEOztFQU1BVixlQUFlLENBQUNVLE1BQWhCLENBQXVCUCxFQUF2QixDQUEwQixNQUExQixFQUFrQ0ssY0FBbEM7O0VBRUEsTUFBTUksZUFBZSxHQUFJSCxLQUFELElBQVc7SUFDakMsSUFBSSxDQUFDSCxTQUFMLEVBQWdCO01BQ2RBLFNBQVMsR0FBRyxDQUFDckQsZUFBQSxDQUFFNEQsT0FBRixDQUFVSixLQUFWLENBQWI7SUFDRDtFQUNGLENBSkQ7O0VBS0FULGVBQWUsQ0FBQzFCLE1BQWhCLENBQXVCNkIsRUFBdkIsQ0FBMEIsTUFBMUIsRUFBa0NTLGVBQWxDOztFQUVBLElBQUk7SUFDRmxDLEdBQUcsQ0FBQ29DLElBQUosQ0FBVSw4QkFBNkJDLGFBQUEsQ0FBS0MsS0FBTCxDQUFXLENBQUMxRCxHQUFHLENBQUN3QyxVQUFKLENBQWVJLElBQWhCLEVBQXNCLEdBQUdMLE9BQXpCLENBQVgsQ0FBOEMsRUFBckY7SUFDQSxNQUFNLElBQUFvQiwwQkFBQSxFQUFpQixNQUFNWCxTQUF2QixFQUFrQztNQUN0Q1ksTUFBTSxFQUFFMUYsNEJBRDhCO01BRXRDMkYsVUFBVSxFQUFFO0lBRjBCLENBQWxDLENBQU47RUFJRCxDQU5ELENBTUUsT0FBT3BELENBQVAsRUFBVTtJQUNWVyxHQUFHLENBQUMwQyxhQUFKLENBQ0csOERBQTZEckQsQ0FBQyxDQUFDc0QsT0FBUSxFQUQxRTtFQUVELENBVEQsU0FTVTtJQUNSckIsZUFBZSxDQUFDVSxNQUFoQixDQUF1QlksY0FBdkIsQ0FBc0MsTUFBdEMsRUFBOENkLGNBQTlDO0lBQ0FSLGVBQWUsQ0FBQzFCLE1BQWhCLENBQXVCZ0QsY0FBdkIsQ0FBc0MsTUFBdEMsRUFBOENWLGVBQTlDO0VBQ0Q7O0VBQ0QsT0FBT1osZUFBUDtBQUNEOztBQUVELGVBQWV1QixxQkFBZixDQUFzQ0MsbUJBQXRDLEVBQTJEcEMsVUFBM0QsRUFBdUVWLEdBQXZFLEVBQTRFVyxJQUFJLEdBQUcsRUFBbkYsRUFBdUY7RUFDckYsTUFBTTtJQUNKQyxLQURJO0lBRUpDLE1BRkk7SUFHSmtDLE9BSEk7SUFJSkMsT0FKSTtJQUtKQyxnQkFMSTtJQU1KQztFQU5JLElBT0Z2QyxJQVBKO0VBUUEsTUFBTUksYUFBYSxHQUFHUixRQUFRLENBQUNLLEtBQUQsRUFBUSxFQUFSLENBQVIsSUFBdUJGLFVBQVUsQ0FBQ0UsS0FBeEQ7RUFDQSxNQUFNSSxjQUFjLEdBQUdULFFBQVEsQ0FBQ00sTUFBRCxFQUFTLEVBQVQsQ0FBUixJQUF3QkgsVUFBVSxDQUFDRyxNQUExRDtFQUNBLE1BQU1zQyxpQkFBaUIsR0FBRyxJQUFJQyx3QkFBSixDQUFlckcsZ0JBQWYsRUFBaUMsQ0FDekQsSUFEeUQsRUFFekQsT0FGeUQsRUFFaEQsTUFGZ0QsRUFHekQsR0FIeUQsRUFHcEQsa0JBQ0YsU0FBUWtHLGdCQUFnQixHQUFHSSxJQUFJLENBQUNDLEdBQUwsQ0FBU3ZDLGFBQVQsRUFBd0JDLGNBQXhCLENBQUgsR0FBNkNELGFBQWMsR0FEakYsR0FFRixVQUFTa0MsZ0JBQWdCLEdBQUdJLElBQUksQ0FBQ0MsR0FBTCxDQUFTdkMsYUFBVCxFQUF3QkMsY0FBeEIsQ0FBSCxHQUE2Q0EsY0FBZSxHQUZuRixHQUdGLGFBQVlOLFVBQVUsQ0FBQzZDLEdBQUksS0FIekIsR0FJSCxrQkFQdUQsRUFRekQsR0FSeUQsRUFRcEQsV0FSb0QsRUFTekQsR0FUeUQsRUFTcEQsT0FUb0QsRUFTM0Msa0JBVDJDLEVBVXpELEdBVnlELEVBVXBELFlBVm9ELEVBV3pELEdBWHlELEVBV3BELE9BWG9ELEVBVzNDLGtCQVgyQyxFQVl6RCxHQVp5RCxFQVlwRCxTQVpvRCxFQVl4QyxXQUFVUixPQUFRLEVBWnNCLEVBYXpELEdBYnlELEVBYXBELGNBYm9ELEVBYW5DLFlBQVcvRSxlQUFnQixFQWJRLEVBY3pELEdBZHlELEVBY3BELGVBZG9ELEVBY2xDLFFBQU9KLFFBQVMsRUFka0IsRUFjZCxRQUFPb0YsT0FBUSxFQWRELENBQWpDLEVBZXZCO0lBQ0RRLEtBQUssRUFBRSxDQUFDVixtQkFBbUIsQ0FBQ2xELE1BQXJCLEVBQTZCLE1BQTdCLEVBQXFDLE1BQXJDO0VBRE4sQ0FmdUIsQ0FBMUI7RUFrQkF1RCxpQkFBaUIsQ0FBQzFCLEVBQWxCLENBQXFCLE1BQXJCLEVBQTZCLENBQUNDLElBQUQsRUFBT0MsTUFBUCxLQUFrQjtJQUM3QzNCLEdBQUcsQ0FBQ00sS0FBSixDQUFXLCtDQUE4Q29CLElBQUssWUFBV0MsTUFBTyxFQUFoRjtFQUNELENBRkQ7RUFHQSxNQUFNOEIsZUFBZSxHQUFHdkYscUJBQXFCLENBQUMsS0FBRCxFQUFRd0MsVUFBVSxDQUFDdEMsSUFBbkIsQ0FBN0M7O0VBQ0EsTUFBTXNGLGlCQUFpQixHQUFHLENBQUM5RCxNQUFELEVBQVNvQyxNQUFULEtBQW9CO0lBQzVDLElBQUl6RCxlQUFBLENBQUVNLElBQUYsQ0FBT21ELE1BQU0sSUFBSXBDLE1BQWpCLENBQUosRUFBOEI7TUFDNUI2RCxlQUFlLENBQUNuRCxLQUFoQixDQUFzQjBCLE1BQU0sSUFBSXBDLE1BQWhDO0lBQ0Q7RUFDRixDQUpEOztFQUtBdUQsaUJBQWlCLENBQUMxQixFQUFsQixDQUFxQixRQUFyQixFQUErQmlDLGlCQUEvQjtFQUNBLElBQUlDLE9BQU8sR0FBRyxLQUFkOztFQUNBLElBQUk7SUFDRjNELEdBQUcsQ0FBQ29DLElBQUosQ0FBVSxnQ0FBK0JlLGlCQUFpQixDQUFDUyxHQUFJLEVBQS9EO0lBQ0EsTUFBTVQsaUJBQWlCLENBQUNVLEtBQWxCLENBQXdCLENBQXhCLENBQU47SUFDQSxNQUFNLElBQUF0QiwwQkFBQSxFQUFpQixZQUFZO01BQ2pDLElBQUk7UUFDRixPQUFPLENBQUMsTUFBTSxJQUFBdUIsNEJBQUEsRUFBZ0JkLE9BQWhCLEVBQXlCcEYsUUFBekIsQ0FBUCxNQUErQyxNQUF0RDtNQUNELENBRkQsQ0FFRSxPQUFPbUcsR0FBUCxFQUFZO1FBQ1osT0FBTyxLQUFQO01BQ0Q7SUFDRixDQU5LLEVBTUg7TUFDRHZCLE1BQU0sRUFBRTFGLDRCQURQO01BRUQyRixVQUFVLEVBQUU7SUFGWCxDQU5HLENBQU47RUFVRCxDQWJELENBYUUsT0FBT3BELENBQVAsRUFBVTtJQUNWc0UsT0FBTyxHQUFHLElBQVY7SUFDQTNELEdBQUcsQ0FBQzBDLGFBQUosQ0FDRywrREFBOERyRCxDQUFDLENBQUNzRCxPQUFRLEVBRDNFO0VBRUQsQ0FqQkQsU0FpQlU7SUFDUixJQUFJLENBQUNPLGtCQUFELElBQXVCUyxPQUEzQixFQUFvQztNQUNsQ1IsaUJBQWlCLENBQUNQLGNBQWxCLENBQWlDLFFBQWpDLEVBQTJDYyxpQkFBM0M7SUFDRDtFQUNGOztFQUNELE9BQU9QLGlCQUFQO0FBQ0Q7O0FBRUQsU0FBU2Esb0JBQVQsQ0FBK0JDLEdBQS9CLEVBQW9DO0VBQ2xDLE9BQU9BLEdBQUcsQ0FBQ0MsT0FBSixDQUFZLGlCQUFaLEtBQ0ZELEdBQUcsQ0FBQ0UsTUFBSixDQUFXQyxhQURULElBRUZILEdBQUcsQ0FBQ0ksVUFBSixDQUFlRCxhQUZiLElBR0ZILEdBQUcsQ0FBQ0ksVUFBSixDQUFlRixNQUFmLENBQXNCQyxhQUgzQjtBQUlEOztBQTJDRHhILFFBQVEsQ0FBQzBILDBCQUFULEdBQXNDLGVBQWVBLDBCQUFmLENBQTJDQyxPQUFPLEdBQUcsRUFBckQsRUFBeUQ7RUFDN0YsS0FBS0Msb0JBQUwsQ0FBMEJ2Ryw0QkFBMUI7RUFFQSxNQUFNO0lBQ0oyQyxLQURJO0lBRUpDLE1BRkk7SUFHSkMsT0FISTtJQUlKMkQsSUFBSSxHQUFHOUcsWUFKSDtJQUtKK0csSUFBSSxHQUFHN0csWUFMSDtJQU1KOEcsUUFOSTtJQU9KM0IsT0FBTyxHQUFHbkYsWUFBWSxHQUFHLENBUHJCO0lBUUprRixPQUFPLEdBQUdqRixlQVJOO0lBU0ptRixnQkFBZ0IsR0FBRyxLQVRmO0lBVUpDLGtCQUFrQixHQUFHO0VBVmpCLElBV0ZxQixPQVhKOztFQWFBLElBQUloRyxlQUFBLENBQUVxRyxXQUFGLENBQWMsS0FBS0MscUJBQW5CLENBQUosRUFBK0M7SUFDN0MsTUFBTWxHLDJCQUEyQixDQUFDLEtBQUtDLEdBQU4sQ0FBakM7RUFDRDs7RUFDRCxJQUFJLENBQUNMLGVBQUEsQ0FBRTRELE9BQUYsQ0FBVSxLQUFLMEMscUJBQWYsQ0FBTCxFQUE0QztJQUMxQyxLQUFLN0UsR0FBTCxDQUFTb0MsSUFBVCxDQUFlLG1EQUFELEdBQ1gsNENBREg7SUFFQTtFQUNEOztFQUNELElBQUksQ0FBQyxNQUFNLElBQUEwQiw0QkFBQSxFQUFnQlksSUFBaEIsRUFBc0JELElBQXRCLENBQVAsTUFBd0MsTUFBNUMsRUFBb0Q7SUFDbEQsS0FBS3pFLEdBQUwsQ0FBU29DLElBQVQsQ0FBZSxhQUFZc0MsSUFBSyxPQUFNRCxJQUFLLFlBQTdCLEdBQ1gsa0RBREg7SUFFQTtFQUNEOztFQUNELElBQUksQ0FBQyxNQUFNLElBQUFYLDRCQUFBLEVBQWdCZCxPQUFoQixFQUF5QnBGLFFBQXpCLENBQVAsTUFBK0MsTUFBbkQsRUFBMkQ7SUFDekQsS0FBS29DLEdBQUwsQ0FBUzBDLGFBQVQsQ0FBd0IsYUFBWU0sT0FBUSxPQUFNcEYsUUFBUyxZQUFwQyxHQUNwQiwwREFESDtFQUVEOztFQUNELEtBQUtpSCxxQkFBTCxHQUE2QixJQUE3QjtFQUVBLE1BQU1uRSxVQUFVLEdBQUcsTUFBTVgsYUFBYSxDQUFDLEtBQUtuQixHQUFOLEVBQVcsS0FBS29CLEdBQWhCLENBQXRDO0VBQ0EsTUFBTThDLG1CQUFtQixHQUFHLE1BQU1yQyx1QkFBdUIsQ0FBQyxLQUFLN0IsR0FBTixFQUFXLEtBQUtvQixHQUFoQixFQUFxQlUsVUFBckIsRUFBaUM7SUFDeEZFLEtBRHdGO0lBRXhGQyxNQUZ3RjtJQUd4RkM7RUFId0YsQ0FBakMsQ0FBekQ7RUFLQSxJQUFJcUMsaUJBQUo7O0VBQ0EsSUFBSTtJQUNGQSxpQkFBaUIsR0FBRyxNQUFNTixxQkFBcUIsQ0FBQ0MsbUJBQUQsRUFBc0JwQyxVQUF0QixFQUFrQyxLQUFLVixHQUF2QyxFQUE0QztNQUN6RlksS0FEeUY7TUFFekZDLE1BRnlGO01BR3pGa0MsT0FIeUY7TUFJekZDLE9BSnlGO01BS3pGQyxnQkFMeUY7TUFNekZDO0lBTnlGLENBQTVDLENBQS9DO0VBUUQsQ0FURCxDQVNFLE9BQU83RCxDQUFQLEVBQVU7SUFDVixJQUFJeUQsbUJBQW1CLENBQUNnQyxJQUFwQixDQUF5QixDQUF6QixDQUFKLEVBQWlDO01BQy9CaEMsbUJBQW1CLENBQUNnQyxJQUFwQjtJQUNEOztJQUNELE1BQU16RixDQUFOO0VBQ0Q7O0VBRUQsSUFBSTBGLFdBQUo7RUFDQSxJQUFJQyxXQUFKOztFQUNBLElBQUk7SUFDRixNQUFNLElBQUkxRixpQkFBSixDQUFNLENBQUMyRixPQUFELEVBQVVDLE1BQVYsS0FBcUI7TUFDL0JILFdBQVcsR0FBR0ksWUFBQSxDQUFJQyxnQkFBSixDQUFxQnBDLE9BQXJCLEVBQThCcEYsUUFBOUIsRUFBd0MsTUFBTTtRQUMxRCxLQUFLb0MsR0FBTCxDQUFTb0MsSUFBVCxDQUFlLG1EQUFrRHhFLFFBQVMsSUFBR29GLE9BQVEsRUFBckY7UUFDQWdDLFdBQVcsR0FBR0ssYUFBQSxDQUFLQyxZQUFMLENBQWtCLENBQUNyQixHQUFELEVBQU1zQixHQUFOLEtBQWM7VUFDNUMsTUFBTW5CLGFBQWEsR0FBR0osb0JBQW9CLENBQUNDLEdBQUQsQ0FBMUM7O1VBQ0EsTUFBTXVCLGVBQWUsR0FBR0MsWUFBQSxDQUFJQyxLQUFKLENBQVV6QixHQUFHLENBQUN3QixHQUFkLEVBQW1CZCxRQUEzQzs7VUFDQSxLQUFLM0UsR0FBTCxDQUFTb0MsSUFBVCxDQUFlLG1EQUFrRGdDLGFBQWMsR0FBakUsR0FDWCxJQUFHSCxHQUFHLENBQUNDLE9BQUosQ0FBWSxZQUFaLEtBQTZCLG9CQUFxQixRQUFPc0IsZUFBZ0IsRUFEL0U7O1VBR0EsSUFBSWIsUUFBUSxJQUFJYSxlQUFlLEtBQUtiLFFBQXBDLEVBQThDO1lBQzVDLEtBQUszRSxHQUFMLENBQVNvQyxJQUFULENBQWMsNEVBQWQ7WUFDQW1ELEdBQUcsQ0FBQ0ksU0FBSixDQUFjLEdBQWQsRUFBbUI7Y0FDakJDLFVBQVUsRUFBRSxPQURLO2NBRWpCLGdCQUFnQjtZQUZDLENBQW5CO1lBSUFMLEdBQUcsQ0FBQ00sS0FBSixDQUFXLElBQUdMLGVBQWdCLHFDQUE5QjtZQUNBRCxHQUFHLENBQUNPLEdBQUo7WUFDQTtVQUNEOztVQUVELEtBQUs5RixHQUFMLENBQVNvQyxJQUFULENBQWMsMEJBQWQ7VUFDQW1ELEdBQUcsQ0FBQ0ksU0FBSixDQUFjLEdBQWQsRUFBbUI7WUFDakIsaUJBQWlCLDJFQURBO1lBRWpCSSxNQUFNLEVBQUUsVUFGUztZQUdqQkgsVUFBVSxFQUFFLE9BSEs7WUFJakIsZ0JBQWlCLHVDQUFzQzVILGVBQWdCO1VBSnRELENBQW5CO1VBT0ErRyxXQUFXLENBQUNpQixJQUFaLENBQWlCVCxHQUFqQjtRQUNELENBMUJhLENBQWQ7UUEyQkFQLFdBQVcsQ0FBQ3ZELEVBQVosQ0FBZSxPQUFmLEVBQXlCcEMsQ0FBRCxJQUFPO1VBQzdCLEtBQUtXLEdBQUwsQ0FBU2lHLElBQVQsQ0FBYzVHLENBQWQ7VUFDQTZGLE1BQU0sQ0FBQzdGLENBQUQsQ0FBTjtRQUNELENBSEQ7UUFJQTJGLFdBQVcsQ0FBQ3ZELEVBQVosQ0FBZSxPQUFmLEVBQXdCLE1BQU07VUFDNUIsS0FBS3pCLEdBQUwsQ0FBU00sS0FBVCxDQUFnQiwwQkFBeUJtRSxJQUFLLElBQUdDLElBQUssa0JBQXREO1FBQ0QsQ0FGRDtRQUdBTSxXQUFXLENBQUN2RCxFQUFaLENBQWUsV0FBZixFQUE0QixNQUFNO1VBQ2hDLEtBQUt6QixHQUFMLENBQVNvQyxJQUFULENBQWUsK0NBQThDcUMsSUFBSyxJQUFHQyxJQUFLLEVBQTFFO1VBQ0FPLE9BQU87UUFDUixDQUhEO1FBSUFELFdBQVcsQ0FBQ2tCLE1BQVosQ0FBbUJ4QixJQUFuQixFQUF5QkQsSUFBekI7TUFDRCxDQXpDYSxDQUFkO01BMENBTSxXQUFXLENBQUN0RCxFQUFaLENBQWUsT0FBZixFQUF5QnBDLENBQUQsSUFBTztRQUM3QixLQUFLVyxHQUFMLENBQVNtRyxLQUFULENBQWU5RyxDQUFmO1FBQ0E2RixNQUFNLENBQUM3RixDQUFELENBQU47TUFDRCxDQUhEO0lBSUQsQ0EvQ0ssRUErQ0grRyxPQS9DRyxDQStDS3RKLDRCQS9DTCxFQWdESCxpREFBZ0RBLDRCQUE2QixJQWhEMUUsQ0FBTjtFQWlERCxDQWxERCxDQWtERSxPQUFPdUMsQ0FBUCxFQUFVO0lBQ1YsSUFBSXlELG1CQUFtQixDQUFDZ0MsSUFBcEIsQ0FBeUIsQ0FBekIsQ0FBSixFQUFpQztNQUMvQmhDLG1CQUFtQixDQUFDZ0MsSUFBcEI7SUFDRDs7SUFDRCxJQUFJM0IsaUJBQWlCLENBQUNrRCxTQUF0QixFQUFpQztNQUMvQixNQUFNbEQsaUJBQWlCLENBQUNtRCxJQUFsQixFQUFOO0lBQ0Q7O0lBQ0QsSUFBSXZCLFdBQUosRUFBaUI7TUFDZkEsV0FBVyxDQUFDd0IsT0FBWjtJQUNEOztJQUNELElBQUl2QixXQUFXLElBQUlBLFdBQVcsQ0FBQ3dCLFNBQS9CLEVBQTBDO01BQ3hDeEIsV0FBVyxDQUFDeUIsS0FBWjtJQUNEOztJQUNELE1BQU1wSCxDQUFOO0VBQ0Q7O0VBRUQsS0FBS3dGLHFCQUFMLEdBQTZCO0lBQzNCL0IsbUJBRDJCO0lBRTNCSyxpQkFGMkI7SUFHM0I0QixXQUgyQjtJQUkzQkM7RUFKMkIsQ0FBN0I7QUFNRCxDQXBJRDs7QUEwSUFwSSxRQUFRLENBQUM4Six5QkFBVCxHQUFxQyxlQUFlQSx5QkFBZixHQUE4RDtFQUNqRyxJQUFJbkksZUFBQSxDQUFFNEQsT0FBRixDQUFVLEtBQUswQyxxQkFBZixDQUFKLEVBQTJDO0lBQ3pDLElBQUksQ0FBQ3RHLGVBQUEsQ0FBRXFHLFdBQUYsQ0FBYyxLQUFLQyxxQkFBbkIsQ0FBTCxFQUFnRDtNQUM5QyxLQUFLN0UsR0FBTCxDQUFTTSxLQUFULENBQWdCLDJEQUFoQjtJQUNEOztJQUNEO0VBQ0Q7O0VBRUQsTUFBTTtJQUNKd0MsbUJBREk7SUFFSkssaUJBRkk7SUFHSjRCLFdBSEk7SUFJSkM7RUFKSSxJQUtGLEtBQUtILHFCQUxUOztFQU9BLElBQUk7SUFDRkUsV0FBVyxDQUFDZSxHQUFaOztJQUNBLElBQUlkLFdBQVcsQ0FBQ3dCLFNBQWhCLEVBQTJCO01BQ3pCeEIsV0FBVyxDQUFDeUIsS0FBWjtJQUNEOztJQUNELElBQUkzRCxtQkFBbUIsQ0FBQ2dDLElBQXBCLENBQXlCLENBQXpCLENBQUosRUFBaUM7TUFDL0JoQyxtQkFBbUIsQ0FBQ2dDLElBQXBCLENBQXlCLFFBQXpCO0lBQ0Q7O0lBQ0QsSUFBSTNCLGlCQUFpQixDQUFDa0QsU0FBdEIsRUFBaUM7TUFDL0IsSUFBSTtRQUNGLE1BQU1sRCxpQkFBaUIsQ0FBQ21ELElBQWxCLENBQXVCLFFBQXZCLENBQU47TUFDRCxDQUZELENBRUUsT0FBT2pILENBQVAsRUFBVTtRQUNWLEtBQUtXLEdBQUwsQ0FBU2lHLElBQVQsQ0FBYzVHLENBQWQ7O1FBQ0EsSUFBSTtVQUNGLE1BQU04RCxpQkFBaUIsQ0FBQ21ELElBQWxCLENBQXVCLFNBQXZCLENBQU47UUFDRCxDQUZELENBRUUsT0FBT0ssRUFBUCxFQUFXO1VBQ1gsS0FBSzNHLEdBQUwsQ0FBU21HLEtBQVQsQ0FBZVEsRUFBZjtRQUNEO01BQ0Y7SUFDRjs7SUFDRCxLQUFLM0csR0FBTCxDQUFTb0MsSUFBVCxDQUFlLDJEQUFmO0VBQ0QsQ0FyQkQsU0FxQlU7SUFDUixLQUFLeUMscUJBQUwsR0FBNkIsSUFBN0I7RUFDRDtBQUNGLENBdkNEOztlQTBDZWpJLFEifQ==
423
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL3N0cmVhbXNjcmVlbi5qcyIsIm5hbWVzIjpbImNvbW1hbmRzIiwiUkVDT1JESU5HX0lOVEVSVkFMX1NFQyIsIlNUUkVBTUlOR19TVEFSVFVQX1RJTUVPVVRfTVMiLCJHU1RSRUFNRVJfQklOQVJZIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiR1NUX0lOU1BFQ1RfQklOQVJZIiwiUkVRVUlSRURfR1NUX1BMVUdJTlMiLCJhdmRlY19oMjY0IiwiaDI2NHBhcnNlIiwianBlZ2VuYyIsInRjcHNlcnZlcnNpbmsiLCJtdWx0aXBhcnRtdXgiLCJTQ1JFRU5SRUNPUkRfQklOQVJZIiwiR1NUX1RVVE9SSUFMX1VSTCIsIkRFRkFVTFRfSE9TVCIsIlRDUF9IT1NUIiwiREVGQVVMVF9QT1JUIiwiREVGQVVMVF9RVUFMSVRZIiwiREVGQVVMVF9CSVRSQVRFIiwiQk9VTkRBUllfU1RSSU5HIiwiQURCX1NDUkVFTl9TVFJFQU1JTkdfRkVBVFVSRSIsImNyZWF0ZVN0cmVhbWluZ0xvZ2dlciIsInN0cmVhbU5hbWUiLCJ1ZGlkIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiXyIsInRydW5jYXRlIiwibGVuZ3RoIiwib21pc3Npb24iLCJ2ZXJpZnlTdHJlYW1pbmdSZXF1aXJlbWVudHMiLCJhZGIiLCJ0cmltIiwic2hlbGwiLCJFcnJvciIsImdzdHJlYW1lckNoZWNrUHJvbWlzZXMiLCJiaW5hcnlOYW1lIiwicHVzaCIsImZzIiwid2hpY2giLCJlIiwiQiIsImFsbCIsIm1vZHVsZUNoZWNrUHJvbWlzZXMiLCJuYW1lIiwibW9kTmFtZSIsInRvUGFpcnMiLCJzdGRvdXQiLCJleGVjIiwiaW5jbHVkZXMiLCJnZXREZXZpY2VJbmZvIiwibG9nIiwib3V0cHV0IiwicmVzdWx0Iiwia2V5IiwicGF0dGVybiIsIm1hdGNoIiwiZGVidWciLCJwYXJzZUludCIsImN1ckRldmljZUlkIiwiaW5pdERldmljZVN0cmVhbWluZ1Byb2MiLCJkZXZpY2VJbmZvIiwib3B0cyIsIndpZHRoIiwiaGVpZ2h0IiwiYml0UmF0ZSIsImFkanVzdGVkV2lkdGgiLCJhZGp1c3RlZEhlaWdodCIsImFkanVzdGVkQml0cmF0ZSIsInNjcmVlblJlY29yZENtZCIsImFkYkFyZ3MiLCJleGVjdXRhYmxlIiwiZGVmYXVsdEFyZ3MiLCJkZXZpY2VTdHJlYW1pbmciLCJzcGF3biIsInBhdGgiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJpc1N0YXJ0ZWQiLCJkZXZpY2VTdHJlYW1pbmdMb2dnZXIiLCJlcnJvcnNMaXN0ZW5lciIsImNodW5rIiwic3RkZXJyIiwidG9TdHJpbmciLCJzdGFydHVwTGlzdGVuZXIiLCJpc0VtcHR5IiwiaW5mbyIsInV0aWwiLCJxdW90ZSIsIndhaXRGb3JDb25kaXRpb24iLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiZXJyb3JBbmRUaHJvdyIsIm1lc3NhZ2UiLCJyZW1vdmVMaXN0ZW5lciIsImluaXRHc3RyZWFtZXJQaXBlbGluZSIsImRldmljZVN0cmVhbWluZ1Byb2MiLCJxdWFsaXR5IiwidGNwUG9ydCIsImNvbnNpZGVyUm90YXRpb24iLCJsb2dQaXBlbGluZURldGFpbHMiLCJnc3RyZWFtZXJQaXBlbGluZSIsIlN1YlByb2Nlc3MiLCJNYXRoIiwibWF4IiwiZnBzIiwic3RkaW8iLCJnc3RyZWFtZXJMb2dnZXIiLCJnc3RPdXRwdXRMaXN0ZW5lciIsImRpZEZhaWwiLCJyZXAiLCJzdGFydCIsImNoZWNrUG9ydFN0YXR1cyIsImlnbiIsImV4dHJhY3RSZW1vdGVBZGRyZXNzIiwicmVxIiwiaGVhZGVycyIsInNvY2tldCIsInJlbW90ZUFkZHJlc3MiLCJjb25uZWN0aW9uIiwibW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmciLCJvcHRpb25zIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJob3N0IiwicG9ydCIsInBhdGhuYW1lIiwiaXNVbmRlZmluZWQiLCJfc2NyZWVuU3RyZWFtaW5nUHJvcHMiLCJraWxsIiwibWpwZWdTb2NrZXQiLCJtanBlZ1NlcnZlciIsInJlc29sdmUiLCJyZWplY3QiLCJuZXQiLCJjcmVhdGVDb25uZWN0aW9uIiwiaHR0cCIsImNyZWF0ZVNlcnZlciIsInJlcyIsImN1cnJlbnRQYXRobmFtZSIsInVybCIsInBhcnNlIiwid3JpdGVIZWFkIiwiQ29ubmVjdGlvbiIsIndyaXRlIiwiZW5kIiwiUHJhZ21hIiwicGlwZSIsIndhcm4iLCJsaXN0ZW4iLCJlcnJvciIsInRpbWVvdXQiLCJpc1J1bm5pbmciLCJzdG9wIiwiZGVzdHJveSIsImxpc3RlbmluZyIsImNsb3NlIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsImUxIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL2NvbW1hbmRzL3N0cmVhbXNjcmVlbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMsIHN5c3RlbSwgbG9nZ2VyLCB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXhlYywgU3ViUHJvY2VzcyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBjaGVja1BvcnRTdGF0dXMgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCBuZXQgZnJvbSAnbmV0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5jb25zdCBSRUNPUkRJTkdfSU5URVJWQUxfU0VDID0gNTtcbmNvbnN0IFNUUkVBTUlOR19TVEFSVFVQX1RJTUVPVVRfTVMgPSA1MDAwO1xuY29uc3QgR1NUUkVBTUVSX0JJTkFSWSA9IGBnc3QtbGF1bmNoLTEuMCR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbmNvbnN0IEdTVF9JTlNQRUNUX0JJTkFSWSA9IGBnc3QtaW5zcGVjdC0xLjAke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG5jb25zdCBSRVFVSVJFRF9HU1RfUExVR0lOUyA9IHtcbiAgYXZkZWNfaDI2NDogJ2dzdC1saWJhdicsXG4gIGgyNjRwYXJzZTogJ2dzdC1wbHVnaW5zLWJhZCcsXG4gIGpwZWdlbmM6ICdnc3QtcGx1Z2lucy1nb29kJyxcbiAgdGNwc2VydmVyc2luazogJ2dzdC1wbHVnaW5zLWJhc2UnLFxuICBtdWx0aXBhcnRtdXg6ICdnc3QtcGx1Z2lucy1nb29kJyxcbn07XG5jb25zdCBTQ1JFRU5SRUNPUkRfQklOQVJZID0gJ3NjcmVlbnJlY29yZCc7XG5jb25zdCBHU1RfVFVUT1JJQUxfVVJMID0gJ2h0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kb2N1bWVudGF0aW9uL2luc3RhbGxpbmcvaW5kZXguaHRtbCc7XG5jb25zdCBERUZBVUxUX0hPU1QgPSAnMTI3LjAuMC4xJztcbmNvbnN0IFRDUF9IT1NUID0gJzEyNy4wLjAuMSc7XG5jb25zdCBERUZBVUxUX1BPUlQgPSA4MDkzO1xuY29uc3QgREVGQVVMVF9RVUFMSVRZID0gNzA7XG5jb25zdCBERUZBVUxUX0JJVFJBVEUgPSA0MDAwMDAwOyAvLyA0IE1icHNcbmNvbnN0IEJPVU5EQVJZX1NUUklORyA9ICctLTJhZTk3NDY4ODdmMTcwYjhjZjdjMjcxMDQ3Y2UzMTRjJztcblxuY29uc3QgQURCX1NDUkVFTl9TVFJFQU1JTkdfRkVBVFVSRSA9ICdhZGJfc2NyZWVuX3N0cmVhbWluZyc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmVhbWluZ0xvZ2dlciAoc3RyZWFtTmFtZSwgdWRpZCkge1xuICByZXR1cm4gbG9nZ2VyLmdldExvZ2dlcihgJHtzdHJlYW1OYW1lfUBgICsgXy50cnVuY2F0ZSh1ZGlkLCB7XG4gICAgbGVuZ3RoOiA4LFxuICAgIG9taXNzaW9uOiAnJyxcbiAgfSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlTdHJlYW1pbmdSZXF1aXJlbWVudHMgKGFkYikge1xuICBpZiAoIV8udHJpbShhd2FpdCBhZGIuc2hlbGwoWyd3aGljaCcsIFNDUkVFTlJFQ09SRF9CSU5BUlldKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIHJlcXVpcmVkICcke1NDUkVFTlJFQ09SRF9CSU5BUll9JyBiaW5hcnkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RgKTtcbiAgfVxuXG4gIGNvbnN0IGdzdHJlYW1lckNoZWNrUHJvbWlzZXMgPSBbXTtcbiAgZm9yIChjb25zdCBiaW5hcnlOYW1lIG9mIFtHU1RSRUFNRVJfQklOQVJZLCBHU1RfSU5TUEVDVF9CSU5BUlldKSB7XG4gICAgZ3N0cmVhbWVyQ2hlY2tQcm9taXNlcy5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy53aGljaChiaW5hcnlOYW1lKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7YmluYXJ5TmFtZX0nIGJpbmFyeSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBQQVRIIG9uIHRoZSBob3N0IHN5c3RlbS4gYCArXG4gICAgICAgICAgYFNlZSAke0dTVF9UVVRPUklBTF9VUkx9IGZvciBtb3JlIGRldGFpbHMgb24gaG93IHRvIGluc3RhbGwgaXQuYCk7XG4gICAgICB9XG4gICAgfSkoKSk7XG4gIH1cbiAgYXdhaXQgQi5hbGwoZ3N0cmVhbWVyQ2hlY2tQcm9taXNlcyk7XG5cbiAgY29uc3QgbW9kdWxlQ2hlY2tQcm9taXNlcyA9IFtdO1xuICBmb3IgKGNvbnN0IFtuYW1lLCBtb2ROYW1lXSBvZiBfLnRvUGFpcnMoUkVRVUlSRURfR1NUX1BMVUdJTlMpKSB7XG4gICAgbW9kdWxlQ2hlY2tQcm9taXNlcy5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR1NUX0lOU1BFQ1RfQklOQVJZLCBbbmFtZV0pO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKHN0ZG91dCwgbW9kTmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGUgcmVxdWlyZWQgR1N0cmVhbWVyIHBsdWdpbiAnJHtuYW1lfScgZnJvbSAnJHttb2ROYW1lfScgbW9kdWxlIGlzIG5vdCBpbnN0YWxsZWQuIGAgK1xuICAgICAgICAgIGBTZWUgJHtHU1RfVFVUT1JJQUxfVVJMfSBmb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyB0byBpbnN0YWxsIGl0LmApO1xuICAgICAgfVxuICAgIH0pKCkpO1xuICB9XG4gIGF3YWl0IEIuYWxsKG1vZHVsZUNoZWNrUHJvbWlzZXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXREZXZpY2VJbmZvIChhZGIsIGxvZyA9IG51bGwpIHtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYWRiLnNoZWxsKFsnZHVtcHN5cycsICdkaXNwbGF5J10pO1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCBwYXR0ZXJuXSBvZiBbXG4gICAgWyd3aWR0aCcsIC9cXGJkZXZpY2VXaWR0aD0oXFxkKykvXSxcbiAgICBbJ2hlaWdodCcsIC9cXGJkZXZpY2VIZWlnaHQ9KFxcZCspL10sXG4gICAgWydmcHMnLCAvXFxiZnBzPShcXGQrKS9dLFxuICBdKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMob3V0cHV0KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBsb2c/LmRlYnVnKG91dHB1dCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgZGV2aWNlICR7a2V5fSBmcm9tIHRoZSBhZGIgY29tbWFuZCBvdXRwdXQuIGAgK1xuICAgICAgICBgQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscy5gKTtcbiAgICB9XG4gICAgcmVzdWx0W2tleV0gPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICB9XG4gIHJlc3VsdC51ZGlkID0gYWRiLmN1ckRldmljZUlkO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbml0RGV2aWNlU3RyZWFtaW5nUHJvYyAoYWRiLCBsb2csIGRldmljZUluZm8sIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGJpdFJhdGUsXG4gIH0gPSBvcHRzO1xuICBjb25zdCBhZGp1c3RlZFdpZHRoID0gcGFyc2VJbnQod2lkdGgsIDEwKSB8fCBkZXZpY2VJbmZvLndpZHRoO1xuICBjb25zdCBhZGp1c3RlZEhlaWdodCA9IHBhcnNlSW50KGhlaWdodCwgMTApIHx8IGRldmljZUluZm8uaGVpZ2h0O1xuICBjb25zdCBhZGp1c3RlZEJpdHJhdGUgPSBwYXJzZUludChiaXRSYXRlLCAxMCkgfHwgREVGQVVMVF9CSVRSQVRFO1xuICBsZXQgc2NyZWVuUmVjb3JkQ21kID0gU0NSRUVOUkVDT1JEX0JJTkFSWSArXG4gICAgYCAtLW91dHB1dC1mb3JtYXQ9aDI2NGAgK1xuICAgIC8vIDUgc2Vjb25kcyBpcyBmaW5lIHRvIGRldGVjdCByb3RhdGlvbiBjaGFuZ2VzXG4gICAgYCAtLXRpbWUtbGltaXQ9JHtSRUNPUkRJTkdfSU5URVJWQUxfU0VDfWA7XG4gIGlmICh3aWR0aCB8fCBoZWlnaHQpIHtcbiAgICBzY3JlZW5SZWNvcmRDbWQgKz0gYCAtLXNpemU9JHthZGp1c3RlZFdpZHRofXgke2FkanVzdGVkSGVpZ2h0fWA7XG4gIH1cbiAgaWYgKGJpdFJhdGUpIHtcbiAgICBzY3JlZW5SZWNvcmRDbWQgKz0gYCAtLWJpdC1yYXRlPSR7YWRqdXN0ZWRCaXRyYXRlfWA7XG4gIH1cbiAgY29uc3QgYWRiQXJncyA9IFtcbiAgICAuLi5hZGIuZXhlY3V0YWJsZS5kZWZhdWx0QXJncyxcbiAgICAnZXhlYy1vdXQnLFxuICAgIC8vIFRoZSBsb29wIGlzIHJlcXVpcmVkLCBiZWNhdXNlIGJ5IGRlZmF1bHQgdGhlIG1heGltdW0gcmVjb3JkIGR1cmF0aW9uXG4gICAgLy8gZm9yIHNjcmVlbnJlY29yZCBpcyBhbHdheXMgbGltaXRlZFxuICAgIGB3aGlsZSB0cnVlOyBkbyAke3NjcmVlblJlY29yZENtZH0gLTsgZG9uZWAsXG4gIF07XG4gIGNvbnN0IGRldmljZVN0cmVhbWluZyA9IHNwYXduKGFkYi5leGVjdXRhYmxlLnBhdGgsIGFkYkFyZ3MpO1xuICBkZXZpY2VTdHJlYW1pbmcub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgbG9nLmRlYnVnKGBEZXZpY2Ugc3RyZWFtaW5nIHByb2Nlc3MgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YCk7XG4gIH0pO1xuXG4gIGxldCBpc1N0YXJ0ZWQgPSBmYWxzZTtcbiAgY29uc3QgZGV2aWNlU3RyZWFtaW5nTG9nZ2VyID0gY3JlYXRlU3RyZWFtaW5nTG9nZ2VyKFNDUkVFTlJFQ09SRF9CSU5BUlksIGRldmljZUluZm8udWRpZCk7XG4gIGNvbnN0IGVycm9yc0xpc3RlbmVyID0gKGNodW5rKSA9PiB7XG4gICAgY29uc3Qgc3RkZXJyID0gY2h1bmsudG9TdHJpbmcoKTtcbiAgICBpZiAoXy50cmltKHN0ZGVycikpIHtcbiAgICAgIGRldmljZVN0cmVhbWluZ0xvZ2dlci5kZWJ1ZyhzdGRlcnIpO1xuICAgIH1cbiAgfTtcbiAgZGV2aWNlU3RyZWFtaW5nLnN0ZGVyci5vbignZGF0YScsIGVycm9yc0xpc3RlbmVyKTtcblxuICBjb25zdCBzdGFydHVwTGlzdGVuZXIgPSAoY2h1bmspID0+IHtcbiAgICBpZiAoIWlzU3RhcnRlZCkge1xuICAgICAgaXNTdGFydGVkID0gIV8uaXNFbXB0eShjaHVuayk7XG4gICAgfVxuICB9O1xuICBkZXZpY2VTdHJlYW1pbmcuc3Rkb3V0Lm9uKCdkYXRhJywgc3RhcnR1cExpc3RlbmVyKTtcblxuICB0cnkge1xuICAgIGxvZy5pbmZvKGBTdGFydGluZyBkZXZpY2Ugc3RyZWFtaW5nOiAke3V0aWwucXVvdGUoW2FkYi5leGVjdXRhYmxlLnBhdGgsIC4uLmFkYkFyZ3NdKX1gKTtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+IGlzU3RhcnRlZCwge1xuICAgICAgd2FpdE1zOiBTVFJFQU1JTkdfU1RBUlRVUF9USU1FT1VUX01TLFxuICAgICAgaW50ZXJ2YWxNczogMzAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coXG4gICAgICBgQ2Fubm90IHN0YXJ0IHRoZSBzY3JlZW4gc3RyZWFtaW5nIHByb2Nlc3MuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBkZXZpY2VTdHJlYW1pbmcuc3RkZXJyLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgZXJyb3JzTGlzdGVuZXIpO1xuICAgIGRldmljZVN0cmVhbWluZy5zdGRvdXQucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBzdGFydHVwTGlzdGVuZXIpO1xuICB9XG4gIHJldHVybiBkZXZpY2VTdHJlYW1pbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluaXRHc3RyZWFtZXJQaXBlbGluZSAoZGV2aWNlU3RyZWFtaW5nUHJvYywgZGV2aWNlSW5mbywgbG9nLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBxdWFsaXR5LFxuICAgIHRjcFBvcnQsXG4gICAgY29uc2lkZXJSb3RhdGlvbixcbiAgICBsb2dQaXBlbGluZURldGFpbHMsXG4gIH0gPSBvcHRzO1xuICBjb25zdCBhZGp1c3RlZFdpZHRoID0gcGFyc2VJbnQod2lkdGgsIDEwKSB8fCBkZXZpY2VJbmZvLndpZHRoO1xuICBjb25zdCBhZGp1c3RlZEhlaWdodCA9IHBhcnNlSW50KGhlaWdodCwgMTApIHx8IGRldmljZUluZm8uaGVpZ2h0O1xuICBjb25zdCBnc3RyZWFtZXJQaXBlbGluZSA9IG5ldyBTdWJQcm9jZXNzKEdTVFJFQU1FUl9CSU5BUlksIFtcbiAgICAnLXYnLFxuICAgICdmZHNyYycsICdmZD0wJyxcbiAgICAnIScsICd2aWRlby94LWgyNjQsJyArXG4gICAgICBgd2lkdGg9JHtjb25zaWRlclJvdGF0aW9uID8gTWF0aC5tYXgoYWRqdXN0ZWRXaWR0aCwgYWRqdXN0ZWRIZWlnaHQpIDogYWRqdXN0ZWRXaWR0aH0sYCArXG4gICAgICBgaGVpZ2h0PSR7Y29uc2lkZXJSb3RhdGlvbiA/IE1hdGgubWF4KGFkanVzdGVkV2lkdGgsIGFkanVzdGVkSGVpZ2h0KSA6IGFkanVzdGVkSGVpZ2h0fSxgICtcbiAgICAgIGBmcmFtZXJhdGU9JHtkZXZpY2VJbmZvLmZwc30vMSxgICtcbiAgICAgICdieXRlLXN0cmVhbT10cnVlJyxcbiAgICAnIScsICdoMjY0cGFyc2UnLFxuICAgICchJywgJ3F1ZXVlJywgJ2xlYWt5PWRvd25zdHJlYW0nLFxuICAgICchJywgJ2F2ZGVjX2gyNjQnLFxuICAgICchJywgJ3F1ZXVlJywgJ2xlYWt5PWRvd25zdHJlYW0nLFxuICAgICchJywgJ2pwZWdlbmMnLCBgcXVhbGl0eT0ke3F1YWxpdHl9YCxcbiAgICAnIScsICdtdWx0aXBhcnRtdXgnLCBgYm91bmRhcnk9JHtCT1VOREFSWV9TVFJJTkd9YCxcbiAgICAnIScsICd0Y3BzZXJ2ZXJzaW5rJywgYGhvc3Q9JHtUQ1BfSE9TVH1gLCBgcG9ydD0ke3RjcFBvcnR9YCxcbiAgXSwge1xuICAgIHN0ZGlvOiBbZGV2aWNlU3RyZWFtaW5nUHJvYy5zdGRvdXQsICdwaXBlJywgJ3BpcGUnXVxuICB9KTtcbiAgZ3N0cmVhbWVyUGlwZWxpbmUub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgbG9nLmRlYnVnKGBQaXBlbGluZSBzdHJlYW1pbmcgcHJvY2VzcyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgfSk7XG4gIGNvbnN0IGdzdHJlYW1lckxvZ2dlciA9IGNyZWF0ZVN0cmVhbWluZ0xvZ2dlcignZ3N0JywgZGV2aWNlSW5mby51ZGlkKTtcbiAgY29uc3QgZ3N0T3V0cHV0TGlzdGVuZXIgPSAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICBpZiAoXy50cmltKHN0ZGVyciB8fCBzdGRvdXQpKSB7XG4gICAgICBnc3RyZWFtZXJMb2dnZXIuZGVidWcoc3RkZXJyIHx8IHN0ZG91dCk7XG4gICAgfVxuICB9O1xuICBnc3RyZWFtZXJQaXBlbGluZS5vbignb3V0cHV0JywgZ3N0T3V0cHV0TGlzdGVuZXIpO1xuICBsZXQgZGlkRmFpbCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGxvZy5pbmZvKGBTdGFydGluZyBHU3RyZWFtZXIgcGlwZWxpbmU6ICR7Z3N0cmVhbWVyUGlwZWxpbmUucmVwfWApO1xuICAgIGF3YWl0IGdzdHJlYW1lclBpcGVsaW5lLnN0YXJ0KDApO1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBjaGVja1BvcnRTdGF0dXModGNwUG9ydCwgVENQX0hPU1QpKSA9PT0gJ29wZW4nO1xuICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICB3YWl0TXM6IFNUUkVBTUlOR19TVEFSVFVQX1RJTUVPVVRfTVMsXG4gICAgICBpbnRlcnZhbE1zOiAzMDAsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBkaWRGYWlsID0gdHJ1ZTtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhcbiAgICAgIGBDYW5ub3Qgc3RhcnQgdGhlIHNjcmVlbiBzdHJlYW1pbmcgcGlwZWxpbmUuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoIWxvZ1BpcGVsaW5lRGV0YWlscyB8fCBkaWRGYWlsKSB7XG4gICAgICBnc3RyZWFtZXJQaXBlbGluZS5yZW1vdmVMaXN0ZW5lcignb3V0cHV0JywgZ3N0T3V0cHV0TGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ3N0cmVhbWVyUGlwZWxpbmU7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RSZW1vdGVBZGRyZXNzIChyZXEpIHtcbiAgcmV0dXJuIHJlcS5oZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXVxuICAgIHx8IHJlcS5zb2NrZXQucmVtb3RlQWRkcmVzc1xuICAgIHx8IHJlcS5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3NcbiAgICB8fCByZXEuY29ubmVjdGlvbi5zb2NrZXQucmVtb3RlQWRkcmVzcztcbn1cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YXJ0U2NyZWVuU3RyZWFtaW5nT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgc2NhbGVkIHdpZHRoIG9mIHRoZSBkZXZpY2UncyBzY3JlZW4uIElmIHVuc2V0IHRoZW4gdGhlIHNjcmlwdCB3aWxsIGFzc2lnbiBpdFxuICogdG8gdGhlIGFjdHVhbCBzY3JlZW4gd2lkdGggbWVhc3VyZWQgaW4gcGl4ZWxzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgc2NhbGVkIGhlaWdodCBvZiB0aGUgZGV2aWNlJ3Mgc2NyZWVuLiBJZiB1bnNldCB0aGVuIHRoZSBzY3JpcHQgd2lsbCBhc3NpZ24gaXRcbiAqIHRvIHRoZSBhY3R1YWwgc2NyZWVuIGhlaWdodCBtZWFzdXJlZCBpbiBwaXhlbHMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGJpdFJhdGUgLSBUaGUgdmlkZW8gYml0IHJhdGUgZm9yIHRoZSB2aWRlbywgaW4gYml0cyBwZXIgc2Vjb25kLlxuICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgNDAwMDAwMCAoNCBNYi9zKS4gWW91IGNhbiBpbmNyZWFzZSB0aGUgYml0IHJhdGUgdG8gaW1wcm92ZSB2aWRlbyBxdWFsaXR5LFxuICogYnV0IGRvaW5nIHNvIHJlc3VsdHMgaW4gbGFyZ2VyIG1vdmllIGZpbGVzLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBob3N0IFsxMjcuMC4wLjFdIC0gVGhlIElQIGFkZHJlc3MvaG9zdCBuYW1lIHRvIHN0YXJ0IHRoZSBNSlBFRyBzZXJ2ZXIgb24uXG4gKiBZb3UgY2FuIHNldCBpdCB0byBgMC4wLjAuMGAgdG8gdHJpZ2dlciB0aGUgYnJvYWRjYXN0IG9uIGFsbCBhdmFpbGFibGUgbmV0d29yayBpbnRlcmZhY2VzLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYXRobmFtZSAtIFRoZSBIVFRQIHJlcXVlc3QgcGF0aCB0aGUgTUpQRUcgc2VydmVyIHNob3VsZCBiZSBhdmFpbGFibGUgb24uXG4gKiBJZiB1bnNldCB0aGVuIGFueSBwYXRobmFtZSBvbiB0aGUgZ2l2ZW4gYGhvc3RgL2Bwb3J0YCBjb21iaW5hdGlvbiB3aWxsIHdvcmsuIE5vdGUgdGhhdCB0aGUgdmFsdWVcbiAqIHNob3VsZCBhbHdheXMgc3RhcnQgd2l0aCBhIHNpbmdsZSBzbGFzaDogYC9gXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRjcFBvcnQgWzgwOTRdIC0gVGhlIHBvcnQgbnVtYmVyIHRvIHN0YXJ0IHRoZSBpbnRlcm5hbCBUQ1AgTUpQRUcgYnJvYWRjYXN0IG9uLlxuICogVGhpcyB0eXBlIG9mIGJyb2FkY2FzdCBhbHdheXMgc3RhcnRzIG9uIHRoZSBsb29wYmFjayBpbnRlcmZhY2UgKGAxMjcuMC4wLjFgKS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gcG9ydCBbODA5M10gLSBUaGUgcG9ydCBudW1iZXIgdG8gc3RhcnQgdGhlIE1KUEVHIHNlcnZlciBvbi5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gcXVhbGl0eSBbNzBdIC0gVGhlIHF1YWxpdHkgdmFsdWUgZm9yIHRoZSBzdHJlYW1lZCBKUEVHIGltYWdlcy5cbiAqIFRoaXMgbnVtYmVyIHNob3VsZCBiZSBpbiByYW5nZSBbMSwgMTAwXSwgd2hlcmUgMTAwIGlzIHRoZSBiZXN0IHF1YWxpdHkuXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBjb25zaWRlclJvdGF0aW9uIFtmYWxzZV0gLSBJZiBzZXQgdG8gYHRydWVgIHRoZW4gR1N0cmVhbWVyIHBpcGVsaW5lIHdpbGxcbiAqIGluY3JlYXNlIHRoZSBkaW1lbnNpb25zIG9mIHRoZSByZXN1bHRpbmcgaW1hZ2VzIHRvIHByb3Blcmx5IGZpdCBpbWFnZXMgaW4gYm90aCBsYW5kc2NhcGUgYW5kXG4gKiBwb3J0cmFpdCBvcmllbnRhdGlvbnMuIFNldCBpdCB0byBgdHJ1ZWAgaWYgdGhlIGRldmljZSByb3RhdGlvbiBpcyBub3QgZ29pbmcgdG8gYmUgdGhlIHNhbWUgZHVyaW5nIHRoZVxuICogYnJvYWRjYXN0aW5nIHNlc3Npb24uXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBsb2dQaXBlbGluZURldGFpbHMgW2ZhbHNlXSAtIFdoZXRoZXIgdG8gbG9nIEdTdHJlYW1lciBwaXBlbGluZSBldmVudHMgaW50b1xuICogdGhlIHN0YW5kYXJkIGxvZyBvdXRwdXQuIE1pZ2h0IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuICovXG5cbi8qKlxuICogU3RhcnRzIGRldmljZSBzY3JlZW4gYnJvYWRjYXN0IGJ5IGNyZWF0aW5nIE1KUEVHIHNlcnZlci5cbiAqIE11bHRpcGxlIGNhbGxzIHRvIHRoaXMgbWV0aG9kIGhhdmUgbm8gZWZmZWN0IHVubGVzcyB0aGUgcHJldmlvdXMgc3RyZWFtaW5nXG4gKiBzZXNzaW9uIGlzIHN0b3BwZWQuXG4gKiBUaGlzIG1ldGhvZCBvbmx5IHdvcmtzIGlmIHRoZSBgYWRiX3NjcmVlbl9zdHJlYW1pbmdgIGZlYXR1cmUgaXNcbiAqIGVuYWJsZWQgb24gdGhlIHNlcnZlciBzaWRlLlxuICpcbiAqIEBwYXJhbSB7P1N0YXJ0U2NyZWVuU3RyZWFtaW5nT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBzY3JlZW4gc3RyZWFtaW5nIGhhcyBmYWlsZWQgdG8gc3RhcnQgb3JcbiAqIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGhvc3Qgc3lzdGVtIG9yXG4gKiB0aGUgY29ycmVzcG9uZGluZyBzZXJ2ZXIgZmVhdHVyZSBpcyBub3QgZW5hYmxlZC5cbiAqL1xuY29tbWFuZHMubW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZyAob3B0aW9ucyA9IHt9KSB7XG4gIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoQURCX1NDUkVFTl9TVFJFQU1JTkdfRkVBVFVSRSk7XG5cbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBiaXRSYXRlLFxuICAgIGhvc3QgPSBERUZBVUxUX0hPU1QsXG4gICAgcG9ydCA9IERFRkFVTFRfUE9SVCxcbiAgICBwYXRobmFtZSxcbiAgICB0Y3BQb3J0ID0gREVGQVVMVF9QT1JUICsgMSxcbiAgICBxdWFsaXR5ID0gREVGQVVMVF9RVUFMSVRZLFxuICAgIGNvbnNpZGVyUm90YXRpb24gPSBmYWxzZSxcbiAgICBsb2dQaXBlbGluZURldGFpbHMgPSBmYWxzZSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5fc2NyZWVuU3RyZWFtaW5nUHJvcHMpKSB7XG4gICAgYXdhaXQgdmVyaWZ5U3RyZWFtaW5nUmVxdWlyZW1lbnRzKHRoaXMuYWRiKTtcbiAgfVxuICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5TdHJlYW1pbmdQcm9wcykpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBUaGUgc2NyZWVuIHN0cmVhbWluZyBzZXNzaW9uIGlzIGFscmVhZHkgcnVubmluZy4gYCArXG4gICAgICBgU3RvcCBpdCBmaXJzdCBpbiBvcmRlciB0byBzdGFydCBhIG5ldyBvbmUuYCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICgoYXdhaXQgY2hlY2tQb3J0U3RhdHVzKHBvcnQsIGhvc3QpKSA9PT0gJ29wZW4nKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgVGhlIHBvcnQgIyR7cG9ydH0gYXQgJHtob3N0fSBpcyBidXN5LiBgICtcbiAgICAgIGBBc3N1bWluZyB0aGUgc2NyZWVuIHN0cmVhbWluZyBpcyBhbHJlYWR5IHJ1bm5pbmdgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKChhd2FpdCBjaGVja1BvcnRTdGF0dXModGNwUG9ydCwgVENQX0hPU1QpKSA9PT0gJ29wZW4nKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIHBvcnQgIyR7dGNwUG9ydH0gYXQgJHtUQ1BfSE9TVH0gaXMgYnVzeS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBsZWZ0b3ZlcnMgZnJvbSBwcmV2aW91cyBzZXNzaW9ucy5gKTtcbiAgfVxuICB0aGlzLl9zY3JlZW5TdHJlYW1pbmdQcm9wcyA9IG51bGw7XG5cbiAgY29uc3QgZGV2aWNlSW5mbyA9IGF3YWl0IGdldERldmljZUluZm8odGhpcy5hZGIsIHRoaXMubG9nKTtcbiAgY29uc3QgZGV2aWNlU3RyZWFtaW5nUHJvYyA9IGF3YWl0IGluaXREZXZpY2VTdHJlYW1pbmdQcm9jKHRoaXMuYWRiLCB0aGlzLmxvZywgZGV2aWNlSW5mbywge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBiaXRSYXRlLFxuICB9KTtcbiAgbGV0IGdzdHJlYW1lclBpcGVsaW5lO1xuICB0cnkge1xuICAgIGdzdHJlYW1lclBpcGVsaW5lID0gYXdhaXQgaW5pdEdzdHJlYW1lclBpcGVsaW5lKGRldmljZVN0cmVhbWluZ1Byb2MsIGRldmljZUluZm8sIHRoaXMubG9nLCB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHF1YWxpdHksXG4gICAgICB0Y3BQb3J0LFxuICAgICAgY29uc2lkZXJSb3RhdGlvbixcbiAgICAgIGxvZ1BpcGVsaW5lRGV0YWlscyxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChkZXZpY2VTdHJlYW1pbmdQcm9jLmtpbGwoMCkpIHtcbiAgICAgIGRldmljZVN0cmVhbWluZ1Byb2Mua2lsbCgpO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgbGV0IG1qcGVnU29ja2V0O1xuICBsZXQgbWpwZWdTZXJ2ZXI7XG4gIHRyeSB7XG4gICAgYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbWpwZWdTb2NrZXQgPSBuZXQuY3JlYXRlQ29ubmVjdGlvbih0Y3BQb3J0LCBUQ1BfSE9TVCwgKCkgPT4ge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIE1KUEVHIHN0cmVhbSBhdCB0Y3A6Ly8ke1RDUF9IT1NUfToke3RjcFBvcnR9YCk7XG4gICAgICAgIG1qcGVnU2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVtb3RlQWRkcmVzcyA9IGV4dHJhY3RSZW1vdGVBZGRyZXNzKHJlcSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFBhdGhuYW1lID0gdXJsLnBhcnNlKHJlcS51cmwpLnBhdGhuYW1lO1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYEdvdCBhbiBpbmNvbWluZyBzY3JlZW4gYnJhZGNhc3RpbmcgcmVxdWVzdCBmcm9tICR7cmVtb3RlQWRkcmVzc30gYCArXG4gICAgICAgICAgICBgKCR7cmVxLmhlYWRlcnNbJ3VzZXItYWdlbnQnXSB8fCAnVXNlciBBZ2VudCB1bmtub3duJ30pIGF0ICR7Y3VycmVudFBhdGhuYW1lfWApO1xuXG4gICAgICAgICAgaWYgKHBhdGhuYW1lICYmIGN1cnJlbnRQYXRobmFtZSAhPT0gcGF0aG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLmluZm8oJ1JlamVjdGluZyB0aGUgYnJvYWRjYXN0IHJlcXVlc3Qgc2luY2UgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGdpdmVuIHBhdGhuYW1lJyk7XG4gICAgICAgICAgICByZXMud3JpdGVIZWFkKDQwNCwge1xuICAgICAgICAgICAgICBDb25uZWN0aW9uOiAnY2xvc2UnLFxuICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXMud3JpdGUoYCcke2N1cnJlbnRQYXRobmFtZX0nIGRpZCBub3QgbWF0Y2ggYW55IGtub3duIGVuZHBvaW50c2ApO1xuICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMubG9nLmluZm8oJ1N0YXJ0aW5nIE1KUEVHIGJyb2FkY2FzdCcpO1xuICAgICAgICAgIHJlcy53cml0ZUhlYWQoMjAwLCB7XG4gICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSwgcHJlLWNoZWNrPTAsIHBvc3QtY2hlY2s9MCwgbWF4LWFnZT0wJyxcbiAgICAgICAgICAgIFByYWdtYTogJ25vLWNhY2hlJyxcbiAgICAgICAgICAgIENvbm5lY3Rpb246ICdjbG9zZScsXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogYG11bHRpcGFydC94LW1peGVkLXJlcGxhY2U7IGJvdW5kYXJ5PSR7Qk9VTkRBUllfU1RSSU5HfWBcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1qcGVnU29ja2V0LnBpcGUocmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1qcGVnU2VydmVyLm9uKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihlKTtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBtanBlZ1NlcnZlci5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYE1KUEVHIHNlcnZlciBhdCBodHRwOi8vJHtob3N0fToke3BvcnR9IGhhcyBiZWVuIGNsb3NlZGApO1xuICAgICAgICB9KTtcbiAgICAgICAgbWpwZWdTZXJ2ZXIub24oJ2xpc3RlbmluZycsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBTdWNjZXNzZnVsbHkgc3RhcnRlZCBNSlBFRyBzZXJ2ZXIgYXQgaHR0cDovLyR7aG9zdH06JHtwb3J0fWApO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1qcGVnU2VydmVyLmxpc3Rlbihwb3J0LCBob3N0KTtcbiAgICAgIH0pO1xuICAgICAgbWpwZWdTb2NrZXQub24oJ2Vycm9yJywgKGUpID0+IHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3IoZSk7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pO1xuICAgIH0pLnRpbWVvdXQoU1RSRUFNSU5HX1NUQVJUVVBfVElNRU9VVF9NUyxcbiAgICAgIGBDYW5ub3QgY29ubmVjdCB0byB0aGUgc3RyZWFtaW5nIHNlcnZlciB3aXRoaW4gJHtTVFJFQU1JTkdfU1RBUlRVUF9USU1FT1VUX01TfW1zYCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZGV2aWNlU3RyZWFtaW5nUHJvYy5raWxsKDApKSB7XG4gICAgICBkZXZpY2VTdHJlYW1pbmdQcm9jLmtpbGwoKTtcbiAgICB9XG4gICAgaWYgKGdzdHJlYW1lclBpcGVsaW5lLmlzUnVubmluZykge1xuICAgICAgYXdhaXQgZ3N0cmVhbWVyUGlwZWxpbmUuc3RvcCgpO1xuICAgIH1cbiAgICBpZiAobWpwZWdTb2NrZXQpIHtcbiAgICAgIG1qcGVnU29ja2V0LmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKG1qcGVnU2VydmVyICYmIG1qcGVnU2VydmVyLmxpc3RlbmluZykge1xuICAgICAgbWpwZWdTZXJ2ZXIuY2xvc2UoKTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHRoaXMuX3NjcmVlblN0cmVhbWluZ1Byb3BzID0ge1xuICAgIGRldmljZVN0cmVhbWluZ1Byb2MsXG4gICAgZ3N0cmVhbWVyUGlwZWxpbmUsXG4gICAgbWpwZWdTb2NrZXQsXG4gICAgbWpwZWdTZXJ2ZXIsXG4gIH07XG59O1xuXG4vKipcbiAqIFN0b3Agc2NyZWVuIHN0cmVhbWluZy5cbiAqIElmIG5vIHNjcmVlbiBzdHJlYW1pbmcgc2VydmVyIGhhcyBiZWVuIHN0YXJ0ZWQgdGhlbiBub3RoaW5nIGlzIGRvbmUuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nICgvKiBvcHRpb25zID0ge30gKi8pIHtcbiAgaWYgKF8uaXNFbXB0eSh0aGlzLl9zY3JlZW5TdHJlYW1pbmdQcm9wcykpIHtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5fc2NyZWVuU3RyZWFtaW5nUHJvcHMpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2NyZWVuIHN0cmVhbWluZyBpcyBub3QgcnVubmluZy4gVGhlcmUgaXMgbm90aGluZyB0byBzdG9wYCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBkZXZpY2VTdHJlYW1pbmdQcm9jLFxuICAgIGdzdHJlYW1lclBpcGVsaW5lLFxuICAgIG1qcGVnU29ja2V0LFxuICAgIG1qcGVnU2VydmVyLFxuICB9ID0gdGhpcy5fc2NyZWVuU3RyZWFtaW5nUHJvcHM7XG5cbiAgdHJ5IHtcbiAgICBtanBlZ1NvY2tldC5lbmQoKTtcbiAgICBpZiAobWpwZWdTZXJ2ZXIubGlzdGVuaW5nKSB7XG4gICAgICBtanBlZ1NlcnZlci5jbG9zZSgpO1xuICAgIH1cbiAgICBpZiAoZGV2aWNlU3RyZWFtaW5nUHJvYy5raWxsKDApKSB7XG4gICAgICBkZXZpY2VTdHJlYW1pbmdQcm9jLmtpbGwoJ1NJR0lOVCcpO1xuICAgIH1cbiAgICBpZiAoZ3N0cmVhbWVyUGlwZWxpbmUuaXNSdW5uaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBnc3RyZWFtZXJQaXBlbGluZS5zdG9wKCdTSUdJTlQnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBnc3RyZWFtZXJQaXBlbGluZS5zdG9wKCdTSUdLSUxMJyk7XG4gICAgICAgIH0gY2F0Y2ggKGUxKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IoZTEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubG9nLmluZm8oYFN1Y2Nlc3NmdWxseSB0ZXJtaW5hdGVkIHRoZSBzY3JlZW4gc3RyZWFtaW5nIE1KUEVHIHNlcnZlcmApO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMuX3NjcmVlblN0cmVhbWluZ1Byb3BzID0gbnVsbDtcbiAgfVxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7QUFFQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUEvQjtBQUNBLE1BQU1DLDRCQUE0QixHQUFHLElBQXJDO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUksaUJBQWdCQyxlQUFBLENBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFBRyxFQUEzRTtBQUNBLE1BQU1DLGtCQUFrQixHQUFJLGtCQUFpQkYsZUFBQSxDQUFPQyxTQUFQLEtBQXFCLE1BQXJCLEdBQThCLEVBQUcsRUFBOUU7QUFDQSxNQUFNRSxvQkFBb0IsR0FBRztFQUMzQkMsVUFBVSxFQUFFLFdBRGU7RUFFM0JDLFNBQVMsRUFBRSxpQkFGZ0I7RUFHM0JDLE9BQU8sRUFBRSxrQkFIa0I7RUFJM0JDLGFBQWEsRUFBRSxrQkFKWTtFQUszQkMsWUFBWSxFQUFFO0FBTGEsQ0FBN0I7QUFPQSxNQUFNQyxtQkFBbUIsR0FBRyxjQUE1QjtBQUNBLE1BQU1DLGdCQUFnQixHQUFHLHVFQUF6QjtBQUNBLE1BQU1DLFlBQVksR0FBRyxXQUFyQjtBQUNBLE1BQU1DLFFBQVEsR0FBRyxXQUFqQjtBQUNB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