appium-android-driver 4.48.2 → 4.52.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 (43) hide show
  1. package/build/index.js +6 -4
  2. package/build/lib/android-helpers.js +59 -42
  3. package/build/lib/commands/actions.js +1 -1
  4. package/build/lib/commands/alert.js +1 -1
  5. package/build/lib/commands/app-management.js +15 -1
  6. package/build/lib/commands/context.js +9 -4
  7. package/build/lib/commands/element.js +1 -1
  8. package/build/lib/commands/execute.js +4 -2
  9. package/build/lib/commands/find.js +1 -1
  10. package/build/lib/commands/general.js +23 -35
  11. package/build/lib/commands/ime.js +1 -1
  12. package/build/lib/commands/log.js +1 -1
  13. package/build/lib/commands/network.js +1 -1
  14. package/build/lib/commands/performance.js +1 -1
  15. package/build/lib/commands/touch.js +1 -1
  16. package/build/lib/desired-caps.js +9 -2
  17. package/build/lib/unlock-helpers.js +86 -105
  18. package/build/lib/webview-helpers.js +9 -5
  19. package/lib/.android-helpers.js.un~ +0 -0
  20. package/lib/.desired-caps.js.un~ +0 -0
  21. package/lib/.driver.js.un~ +0 -0
  22. package/lib/.server.js.un~ +0 -0
  23. package/lib/.webview-helpers.js.un~ +0 -0
  24. package/lib/android-helpers.js +53 -34
  25. package/lib/commands/.alert.js.un~ +0 -0
  26. package/lib/commands/.context.js.un~ +0 -0
  27. package/lib/commands/.element.js.un~ +0 -0
  28. package/lib/commands/.find.js.un~ +0 -0
  29. package/lib/commands/.general.js.un~ +0 -0
  30. package/lib/commands/.ime.js.un~ +0 -0
  31. package/lib/commands/.index.js.un~ +0 -0
  32. package/lib/commands/.network.js.un~ +0 -0
  33. package/lib/commands/.touch.js.un~ +0 -0
  34. package/lib/commands/app-management.js +19 -0
  35. package/lib/commands/context.js +3 -0
  36. package/lib/commands/execute.js +4 -0
  37. package/lib/commands/general.js +34 -21
  38. package/lib/desired-caps.js +7 -0
  39. package/lib/unlock-helpers.js +99 -96
  40. package/lib/webview-helpers.js +9 -6
  41. package/package.json +4 -4
  42. package/bootstrap/README.md +0 -19
  43. package/lib/.DS_Store +0 -0
package/build/index.js CHANGED
@@ -1,12 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
 
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
5
-
6
4
  Object.defineProperty(exports, "__esModule", {
7
5
  value: true
8
6
  });
9
- exports.SETTINGS_HELPER_PKG_ID = exports.CHROMIUM_WIN = exports.WEBVIEW_BASE = exports.WEBVIEW_WIN = exports.NATIVE_WIN = exports.webviewHelpers = exports.commonCapConstraints = exports.startServer = exports.AndroidDriver = exports.androidCommands = exports.androidHelpers = exports.default = void 0;
7
+ exports.webviewHelpers = exports.startServer = exports.default = exports.commonCapConstraints = exports.androidHelpers = exports.androidCommands = exports.WEBVIEW_WIN = exports.WEBVIEW_BASE = exports.SETTINGS_HELPER_PKG_ID = exports.NATIVE_WIN = exports.CHROMIUM_WIN = exports.AndroidDriver = void 0;
10
8
 
11
9
  require("source-map-support/register");
12
10
 
@@ -24,6 +22,10 @@ var webview = _interopRequireWildcard(require("./lib/webview-helpers"));
24
22
 
25
23
  var caps = _interopRequireWildcard(require("./lib/desired-caps"));
26
24
 
25
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
26
+
27
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
28
+
27
29
  const {
28
30
  startServer
29
31
  } = server;
@@ -80,4 +82,4 @@ var _default = AndroidDriver;
80
82
  exports.default = _default;require('source-map-support').install();
81
83
 
82
84
 
83
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbInN0YXJ0U2VydmVyIiwic2VydmVyIiwiREVGQVVMVF9IT1NUIiwiREVGQVVMVF9QT1JUIiwibWFpbiIsImdldEFyZ1ZhbHVlIiwiYXJnTmFtZSIsImFyZ0luZGV4IiwicHJvY2VzcyIsImFyZ3YiLCJpbmRleE9mIiwicG9ydCIsInBhcnNlSW50IiwiaG9zdCIsInJlcXVpcmUiLCJtb2R1bGUiLCJBbmRyb2lkRHJpdmVyIiwiZHJpdmVyIiwiaGVscGVycyIsIndlYnZpZXdIZWxwZXJzIiwiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiV0VCVklFV19CQVNFIiwiQ0hST01JVU1fV0lOIiwid2VidmlldyIsImNvbW1vbkNhcENvbnN0cmFpbnRzIiwiY2FwcyIsImNvbW1hbmRzIiwiYW5kcm9pZENvbW1hbmRzIiwiY29tbWFuZEluZGV4IiwiYW5kcm9pZEhlbHBlcnMiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiYW5kcm9pZEhlbHBlckluZGV4Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBdUJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQXhCQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBa0JDLE1BQXhCOztBQUVBLE1BQU1DLFlBQVksR0FBRyxXQUFyQjtBQUNBLE1BQU1DLFlBQVksR0FBRyxJQUFyQjs7QUFFQSxlQUFlQyxJQUFmLEdBQXVCO0FBQ3JCLFFBQU1DLFdBQVcsR0FBSUMsT0FBRCxJQUFhO0FBQy9CLFVBQU1DLFFBQVEsR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWFDLE9BQWIsQ0FBcUJKLE9BQXJCLENBQWpCO0FBQ0EsV0FBT0MsUUFBUSxHQUFHLENBQVgsR0FBZUMsT0FBTyxDQUFDQyxJQUFSLENBQWFGLFFBQVEsR0FBRyxDQUF4QixDQUFmLEdBQTRDLElBQW5EO0FBQ0QsR0FIRDs7QUFJQSxRQUFNSSxJQUFJLEdBQUdDLFFBQVEsQ0FBQ1AsV0FBVyxDQUFDLFFBQUQsQ0FBWixFQUF3QixFQUF4QixDQUFSLElBQXVDRixZQUFwRDtBQUNBLFFBQU1VLElBQUksR0FBR1IsV0FBVyxDQUFDLFFBQUQsQ0FBWCxJQUF5QkgsWUFBdEM7QUFDQSxTQUFPLE1BQU1GLFdBQVcsQ0FBQ1csSUFBRCxFQUFPRSxJQUFQLENBQXhCO0FBQ0Q7O0FBRUQsSUFBSUMsT0FBTyxDQUFDVixJQUFSLEtBQWlCVyxNQUFyQixFQUE2QjtBQUMzQiwwQkFBU1gsSUFBVDtBQUNEOztBQVVELE1BQU07QUFBRVksRUFBQUE7QUFBRixJQUFvQkMsTUFBMUI7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxPQUFPLEVBQUVDLGNBQVg7QUFBMkJDLEVBQUFBLFVBQTNCO0FBQXVDQyxFQUFBQSxXQUF2QztBQUFvREMsRUFBQUEsWUFBcEQ7QUFDRUMsRUFBQUE7QUFERixJQUNtQkMsT0FEekI7Ozs7OztBQUVBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUEyQkMsSUFBakM7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxRQUFRLEVBQUVDO0FBQVosSUFBZ0NDLFlBQXRDOztBQUNBLE1BQU07QUFBRVgsRUFBQUEsT0FBTyxFQUFFWSxjQUFYO0FBQTJCQyxFQUFBQTtBQUEzQixJQUFzREMsa0JBQTVEOzs7ZUFHZWhCLGEiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgeyBhc3luY2lmeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCAqIGFzIHNlcnZlciBmcm9tICcuL2xpYi9zZXJ2ZXInO1xuXG5cbmNvbnN0IHsgc3RhcnRTZXJ2ZXIgfSA9IHNlcnZlcjtcblxuY29uc3QgREVGQVVMVF9IT1NUID0gJ2xvY2FsaG9zdCc7XG5jb25zdCBERUZBVUxUX1BPUlQgPSA0NzIzO1xuXG5hc3luYyBmdW5jdGlvbiBtYWluICgpIHtcbiAgY29uc3QgZ2V0QXJnVmFsdWUgPSAoYXJnTmFtZSkgPT4ge1xuICAgIGNvbnN0IGFyZ0luZGV4ID0gcHJvY2Vzcy5hcmd2LmluZGV4T2YoYXJnTmFtZSk7XG4gICAgcmV0dXJuIGFyZ0luZGV4ID4gMCA/IHByb2Nlc3MuYXJndlthcmdJbmRleCArIDFdIDogbnVsbDtcbiAgfTtcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGdldEFyZ1ZhbHVlKCctLXBvcnQnKSwgMTApIHx8IERFRkFVTFRfUE9SVDtcbiAgY29uc3QgaG9zdCA9IGdldEFyZ1ZhbHVlKCctLWhvc3QnKSB8fCBERUZBVUxUX0hPU1Q7XG4gIHJldHVybiBhd2FpdCBzdGFydFNlcnZlcihwb3J0LCBob3N0KTtcbn1cblxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGFzeW5jaWZ5KG1haW4pO1xufVxuXG5cbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi9kcml2ZXInO1xuaW1wb3J0ICogYXMgYW5kcm9pZEhlbHBlckluZGV4IGZyb20gJy4vbGliL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgKiBhcyBjb21tYW5kSW5kZXggZnJvbSAnLi9saWIvY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0ICogYXMgd2VidmlldyBmcm9tICcuL2xpYi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0ICogYXMgY2FwcyBmcm9tICcuL2xpYi9kZXNpcmVkLWNhcHMnO1xuXG5cbmNvbnN0IHsgQW5kcm9pZERyaXZlciB9ID0gZHJpdmVyO1xuY29uc3QgeyBoZWxwZXJzOiB3ZWJ2aWV3SGVscGVycywgTkFUSVZFX1dJTiwgV0VCVklFV19XSU4sIFdFQlZJRVdfQkFTRSxcbiAgICAgICAgQ0hST01JVU1fV0lOIH0gPSB3ZWJ2aWV3O1xuY29uc3QgeyBjb21tb25DYXBDb25zdHJhaW50cyB9ID0gY2FwcztcbmNvbnN0IHsgY29tbWFuZHM6IGFuZHJvaWRDb21tYW5kcyB9ID0gY29tbWFuZEluZGV4O1xuY29uc3QgeyBoZWxwZXJzOiBhbmRyb2lkSGVscGVycywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCB9ID0gYW5kcm9pZEhlbHBlckluZGV4O1xuXG5cbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWREcml2ZXI7XG5leHBvcnQge1xuICBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBBbmRyb2lkRHJpdmVyLCBzdGFydFNlcnZlcixcbiAgY29tbW9uQ2FwQ29uc3RyYWludHMsIHdlYnZpZXdIZWxwZXJzLCBOQVRJVkVfV0lOLCBXRUJWSUVXX1dJTixcbiAgV0VCVklFV19CQVNFLCBDSFJPTUlVTV9XSU4sIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsXG59O1xuIl0sImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZVJvb3QiOiIuLiJ9
85
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbInN0YXJ0U2VydmVyIiwic2VydmVyIiwiREVGQVVMVF9IT1NUIiwiREVGQVVMVF9QT1JUIiwibWFpbiIsImdldEFyZ1ZhbHVlIiwiYXJnTmFtZSIsImFyZ0luZGV4IiwicHJvY2VzcyIsImFyZ3YiLCJpbmRleE9mIiwicG9ydCIsInBhcnNlSW50IiwiaG9zdCIsInJlcXVpcmUiLCJtb2R1bGUiLCJBbmRyb2lkRHJpdmVyIiwiZHJpdmVyIiwiaGVscGVycyIsIndlYnZpZXdIZWxwZXJzIiwiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiV0VCVklFV19CQVNFIiwiQ0hST01JVU1fV0lOIiwid2VidmlldyIsImNvbW1vbkNhcENvbnN0cmFpbnRzIiwiY2FwcyIsImNvbW1hbmRzIiwiYW5kcm9pZENvbW1hbmRzIiwiY29tbWFuZEluZGV4IiwiYW5kcm9pZEhlbHBlcnMiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiYW5kcm9pZEhlbHBlckluZGV4Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQXVCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBeEJBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFrQkMsTUFBeEI7O0FBRUEsTUFBTUMsWUFBWSxHQUFHLFdBQXJCO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLElBQXJCOztBQUVBLGVBQWVDLElBQWYsR0FBdUI7QUFDckIsUUFBTUMsV0FBVyxHQUFJQyxPQUFELElBQWE7QUFDL0IsVUFBTUMsUUFBUSxHQUFHQyxPQUFPLENBQUNDLElBQVIsQ0FBYUMsT0FBYixDQUFxQkosT0FBckIsQ0FBakI7QUFDQSxXQUFPQyxRQUFRLEdBQUcsQ0FBWCxHQUFlQyxPQUFPLENBQUNDLElBQVIsQ0FBYUYsUUFBUSxHQUFHLENBQXhCLENBQWYsR0FBNEMsSUFBbkQ7QUFDRCxHQUhEOztBQUlBLFFBQU1JLElBQUksR0FBR0MsUUFBUSxDQUFDUCxXQUFXLENBQUMsUUFBRCxDQUFaLEVBQXdCLEVBQXhCLENBQVIsSUFBdUNGLFlBQXBEO0FBQ0EsUUFBTVUsSUFBSSxHQUFHUixXQUFXLENBQUMsUUFBRCxDQUFYLElBQXlCSCxZQUF0QztBQUNBLFNBQU8sTUFBTUYsV0FBVyxDQUFDVyxJQUFELEVBQU9FLElBQVAsQ0FBeEI7QUFDRDs7QUFFRCxJQUFJQyxPQUFPLENBQUNWLElBQVIsS0FBaUJXLE1BQXJCLEVBQTZCO0FBQzNCLDBCQUFTWCxJQUFUO0FBQ0Q7O0FBVUQsTUFBTTtBQUFFWSxFQUFBQTtBQUFGLElBQW9CQyxNQUExQjs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBLE9BQU8sRUFBRUMsY0FBWDtBQUEyQkMsRUFBQUEsVUFBM0I7QUFBdUNDLEVBQUFBLFdBQXZDO0FBQW9EQyxFQUFBQSxZQUFwRDtBQUNFQyxFQUFBQTtBQURGLElBQ21CQyxPQUR6Qjs7Ozs7O0FBRUEsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQTJCQyxJQUFqQzs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBLFFBQVEsRUFBRUM7QUFBWixJQUFnQ0MsWUFBdEM7O0FBQ0EsTUFBTTtBQUFFWCxFQUFBQSxPQUFPLEVBQUVZLGNBQVg7QUFBMkJDLEVBQUFBO0FBQTNCLElBQXNEQyxrQkFBNUQ7OztlQUdlaEIsYSIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbi8vIHRyYW5zcGlsZTptYWluXG5cbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0ICogYXMgc2VydmVyIGZyb20gJy4vbGliL3NlcnZlcic7XG5cblxuY29uc3QgeyBzdGFydFNlcnZlciB9ID0gc2VydmVyO1xuXG5jb25zdCBERUZBVUxUX0hPU1QgPSAnbG9jYWxob3N0JztcbmNvbnN0IERFRkFVTFRfUE9SVCA9IDQ3MjM7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4gKCkge1xuICBjb25zdCBnZXRBcmdWYWx1ZSA9IChhcmdOYW1lKSA9PiB7XG4gICAgY29uc3QgYXJnSW5kZXggPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihhcmdOYW1lKTtcbiAgICByZXR1cm4gYXJnSW5kZXggPiAwID8gcHJvY2Vzcy5hcmd2W2FyZ0luZGV4ICsgMV0gOiBudWxsO1xuICB9O1xuICBjb25zdCBwb3J0ID0gcGFyc2VJbnQoZ2V0QXJnVmFsdWUoJy0tcG9ydCcpLCAxMCkgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCBob3N0ID0gZ2V0QXJnVmFsdWUoJy0taG9zdCcpIHx8IERFRkFVTFRfSE9TVDtcbiAgcmV0dXJuIGF3YWl0IHN0YXJ0U2VydmVyKHBvcnQsIGhvc3QpO1xufVxuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkobWFpbik7XG59XG5cblxuaW1wb3J0ICogYXMgZHJpdmVyIGZyb20gJy4vbGliL2RyaXZlcic7XG5pbXBvcnQgKiBhcyBhbmRyb2lkSGVscGVySW5kZXggZnJvbSAnLi9saWIvYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCAqIGFzIGNvbW1hbmRJbmRleCBmcm9tICcuL2xpYi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgKiBhcyB3ZWJ2aWV3IGZyb20gJy4vbGliL3dlYnZpZXctaGVscGVycyc7XG5pbXBvcnQgKiBhcyBjYXBzIGZyb20gJy4vbGliL2Rlc2lyZWQtY2Fwcyc7XG5cblxuY29uc3QgeyBBbmRyb2lkRHJpdmVyIH0gPSBkcml2ZXI7XG5jb25zdCB7IGhlbHBlcnM6IHdlYnZpZXdIZWxwZXJzLCBOQVRJVkVfV0lOLCBXRUJWSUVXX1dJTiwgV0VCVklFV19CQVNFLFxuICAgICAgICBDSFJPTUlVTV9XSU4gfSA9IHdlYnZpZXc7XG5jb25zdCB7IGNvbW1vbkNhcENvbnN0cmFpbnRzIH0gPSBjYXBzO1xuY29uc3QgeyBjb21tYW5kczogYW5kcm9pZENvbW1hbmRzIH0gPSBjb21tYW5kSW5kZXg7XG5jb25zdCB7IGhlbHBlcnM6IGFuZHJvaWRIZWxwZXJzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lEIH0gPSBhbmRyb2lkSGVscGVySW5kZXg7XG5cblxuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZERyaXZlcjtcbmV4cG9ydCB7XG4gIGFuZHJvaWRIZWxwZXJzLCBhbmRyb2lkQ29tbWFuZHMsIEFuZHJvaWREcml2ZXIsIHN0YXJ0U2VydmVyLFxuICBjb21tb25DYXBDb25zdHJhaW50cywgd2Vidmlld0hlbHBlcnMsIE5BVElWRV9XSU4sIFdFQlZJRVdfV0lOLFxuICBXRUJWSUVXX0JBU0UsIENIUk9NSVVNX1dJTiwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCxcbn07XG4iXSwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlUm9vdCI6Ii4uIn0=
@@ -1,15 +1,14 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
- exports.prepareAvdArgs = prepareAvdArgs;
8
+ exports.default = exports.SETTINGS_HELPER_PKG_ID = exports.APP_STATE = void 0;
11
9
  exports.ensureNetworkSpeed = ensureNetworkSpeed;
12
- exports.default = exports.APP_STATE = exports.SETTINGS_HELPER_PKG_ID = exports.helpers = void 0;
10
+ exports.helpers = void 0;
11
+ exports.prepareAvdArgs = prepareAvdArgs;
13
12
 
14
13
  require("source-map-support/register");
15
14
 
@@ -37,6 +36,10 @@ var _os = require("os");
37
36
 
38
37
  var _semver = _interopRequireDefault(require("semver"));
39
38
 
39
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
40
+
41
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
42
+
40
43
  const PACKAGE_INSTALL_TIMEOUT = 90000;
41
44
  const CHROME_BROWSER_PACKAGE_ACTIVITY = {
42
45
  chrome: {
@@ -117,6 +120,21 @@ function prepareAvdArgs(adb, opts) {
117
120
  return result;
118
121
  }
119
122
 
123
+ function toCredentialType(unlockType) {
124
+ const result = {
125
+ [_unlockHelpers.PIN_UNLOCK]: 'pin',
126
+ [_unlockHelpers.PIN_UNLOCK_KEY_EVENT]: 'pin',
127
+ [_unlockHelpers.PASSWORD_UNLOCK]: 'password',
128
+ [_unlockHelpers.PATTERN_UNLOCK]: 'pattern'
129
+ }[unlockType];
130
+
131
+ if (result) {
132
+ return result;
133
+ }
134
+
135
+ throw new Error(`Unlock type '${unlockType}' is not known`);
136
+ }
137
+
120
138
  const helpers = {};
121
139
  exports.helpers = helpers;
122
140
 
@@ -642,29 +660,6 @@ helpers.pushStrings = async function pushStrings(language, adb, opts) {
642
660
  return {};
643
661
  };
644
662
 
645
- helpers.unlockWithUIAutomation = async function unlockWithUIAutomation(driver, adb, unlockCapabilities) {
646
- let unlockType = unlockCapabilities.unlockType;
647
-
648
- if (!_unlockHelpers.default.isValidUnlockType(unlockType)) {
649
- throw new Error(`Invalid unlock type ${unlockType}`);
650
- }
651
-
652
- let unlockKey = unlockCapabilities.unlockKey;
653
-
654
- if (!_unlockHelpers.default.isValidKey(unlockType, unlockKey)) {
655
- throw new Error(`Missing unlockKey ${unlockKey} capability for unlockType ${unlockType}`);
656
- }
657
-
658
- const unlockMethod = {
659
- [_unlockHelpers.PIN_UNLOCK]: _unlockHelpers.default.pinUnlock,
660
- [_unlockHelpers.PIN_UNLOCK_KEY_EVENT]: _unlockHelpers.default.pinUnlockWithKeyEvent,
661
- [_unlockHelpers.PASSWORD_UNLOCK]: _unlockHelpers.default.passwordUnlock,
662
- [_unlockHelpers.PATTERN_UNLOCK]: _unlockHelpers.default.patternUnlock,
663
- [_unlockHelpers.FINGERPRINT_UNLOCK]: _unlockHelpers.default.fingerprintUnlock
664
- }[unlockType];
665
- await unlockMethod(adb, driver, unlockCapabilities);
666
- };
667
-
668
663
  helpers.unlockWithHelperApp = async function unlockWithHelperApp(adb) {
669
664
  _logger.default.info('Unlocking screen');
670
665
 
@@ -702,28 +697,50 @@ helpers.unlock = async function unlock(driver, adb, capabilities) {
702
697
 
703
698
  _logger.default.debug('Screen is locked, trying to unlock');
704
699
 
705
- if (_lodash.default.isUndefined(capabilities.unlockType)) {
700
+ if (!capabilities.unlockType && !capabilities.unlockKey) {
706
701
  _logger.default.warn('Using app unlock, this is going to be deprecated!');
707
702
 
708
703
  await helpers.unlockWithHelperApp(adb);
709
- } else {
710
- await helpers.unlockWithUIAutomation(driver, adb, {
711
- unlockType: capabilities.unlockType,
712
- unlockKey: capabilities.unlockKey
704
+ return;
705
+ }
706
+
707
+ const {
708
+ unlockType,
709
+ unlockKey,
710
+ unlockStrategy,
711
+ unlockSuccessTimeout
712
+ } = _unlockHelpers.default.validateUnlockCapabilities(capabilities);
713
+
714
+ if (unlockKey && unlockType !== _unlockHelpers.FINGERPRINT_UNLOCK && (_lodash.default.isNil(unlockStrategy) || _lodash.default.toLower(unlockStrategy) === 'locksettings') && (await adb.isLockManagementSupported())) {
715
+ await _unlockHelpers.default.fastUnlock(adb, {
716
+ credential: unlockKey,
717
+ credentialType: toCredentialType(unlockType)
713
718
  });
714
- await helpers.verifyUnlock(adb, capabilities.unlockSuccessTimeout);
719
+ } else {
720
+ const unlockMethod = {
721
+ [_unlockHelpers.PIN_UNLOCK]: _unlockHelpers.default.pinUnlock,
722
+ [_unlockHelpers.PIN_UNLOCK_KEY_EVENT]: _unlockHelpers.default.pinUnlockWithKeyEvent,
723
+ [_unlockHelpers.PASSWORD_UNLOCK]: _unlockHelpers.default.passwordUnlock,
724
+ [_unlockHelpers.PATTERN_UNLOCK]: _unlockHelpers.default.patternUnlock,
725
+ [_unlockHelpers.FINGERPRINT_UNLOCK]: _unlockHelpers.default.fingerprintUnlock
726
+ }[unlockType];
727
+ await unlockMethod(adb, driver, capabilities);
715
728
  }
729
+
730
+ await helpers.verifyUnlock(adb, unlockSuccessTimeout);
716
731
  };
717
732
 
718
- helpers.verifyUnlock = async function verifyUnlock(adb, unlockSuccessTimeout) {
719
- let successTimeout = unlockSuccessTimeout || 2000;
720
- await (0, _asyncbox.retryInterval)(successTimeout / 1000, successTimeout, async () => {
721
- if (await adb.isScreenLocked()) {
722
- throw new Error('Screen did not unlock successfully, retrying');
723
- }
733
+ helpers.verifyUnlock = async function verifyUnlock(adb, timeoutMs = null) {
734
+ try {
735
+ await (0, _asyncbox.waitForCondition)(async () => !(await adb.isScreenLocked()), {
736
+ waitMs: timeoutMs !== null && timeoutMs !== void 0 ? timeoutMs : 2000,
737
+ intervalMs: 500
738
+ });
739
+ } catch (ign) {
740
+ throw new Error('The device has failed to be unlocked');
741
+ }
724
742
 
725
- _logger.default.debug('Screen unlocked successfully');
726
- });
743
+ _logger.default.info('The device has been successfully unlocked');
727
744
  };
728
745
 
729
746
  helpers.initDevice = async function initDevice(adb, opts) {
@@ -884,4 +901,4 @@ var _default = helpers;
884
901
  exports.default = _default;require('source-map-support').install();
885
902
 
886
903
 
887
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hbmRyb2lkLWhlbHBlcnMuanMiXSwibmFtZXMiOlsiUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQiLCJDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZIiwiY2hyb21lIiwicGtnIiwiYWN0aXZpdHkiLCJjaHJvbWl1bSIsImNocm9tZWJldGEiLCJicm93c2VyIiwiZGVmYXVsdCIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZIiwiRU1VTEFUT1JfUEFUVEVSTiIsIkFQUF9TVEFURSIsIk9iamVjdCIsImZyZWV6ZSIsIk5PVF9JTlNUQUxMRUQiLCJOT1RfUlVOTklORyIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsImVuc3VyZU5ldHdvcmtTcGVlZCIsImFkYiIsIm5ldHdvcmtTcGVlZCIsIl8iLCJ2YWx1ZXMiLCJORVRXT1JLX1NQRUVEIiwiaW5jbHVkZXMiLCJsb2dnZXIiLCJ3YXJuIiwiRlVMTCIsInByZXBhcmVBdmRBcmdzIiwib3B0cyIsImlzSGVhZGxlc3MiLCJhdmRBcmdzIiwicmVzdWx0IiwiaXNBcnJheSIsInB1c2giLCJ1dGlsIiwic2hlbGxQYXJzZSIsImhlbHBlcnMiLCJjcmVhdGVCYXNlQURCIiwiYWRiUG9ydCIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJ1c2VLZXlzdG9yZSIsImtleXN0b3JlUGF0aCIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsImFsbG93T2ZmbGluZURldmljZXMiLCJhbGxvd0RlbGF5QWRiIiwiQURCIiwiY3JlYXRlQURCIiwicHJlcGFyZUVtdWxhdG9yIiwiYXZkIiwiYXZkRW52IiwiZW52IiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJjb3VudHJ5IiwiYXZkTGF1bmNoVGltZW91dCIsImxhdW5jaFRpbWVvdXQiLCJhdmRSZWFkeVRpbWVvdXQiLCJyZWFkeVRpbWVvdXQiLCJFcnJvciIsImF2ZE5hbWUiLCJyZXBsYWNlIiwicnVubmluZ0FWRCIsImdldFJ1bm5pbmdBVkQiLCJhcmdzIiwiZGVidWciLCJraWxsRW11bGF0b3IiLCJsYXVuY2hBVkQiLCJlbnN1cmVEZXZpY2VMb2NhbGUiLCJzY3JpcHQiLCJpc1N0cmluZyIsInNldERldmljZUxhbmd1YWdlQ291bnRyeSIsImVuc3VyZUN1cnJlbnRMb2NhbGUiLCJtZXNzYWdlIiwiZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIiwidWRpZCIsImVtUG9ydCIsImN1ckRldmljZUlkIiwiZW11bGF0b3JQb3J0IiwiaW5mbyIsImRldmljZXMiLCJnZXREZXZpY2VzV2l0aFJldHJ5IiwibWFwIiwiZXJyb3JBbmRUaHJvdyIsImdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmciLCJwbGF0Zm9ybVZlcnNpb24iLCJ0cmltIiwic2VtdmVyIiwiY29lcmNlIiwiYXZhaWxEZXZpY2VzIiwicGFydGlhbE1hdGNoQ2FuZGlkYXRlIiwiZGV2aWNlIiwic2V0RGV2aWNlSWQiLCJyYXdEZXZpY2VPUyIsImdldFBsYXRmb3JtVmVyc2lvbiIsImRldmljZU9TIiwiYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkIiwidmFsaWQiLCJib3RoVmVyc2lvbnNBcmVTdHJpbmdzIiwidmVyc2lvbiIsInRvTG93ZXIiLCJtYWpvciIsIm1pbm9yIiwiZ3QiLCJrZXlzIiwiam9pbiIsInNldEVtdWxhdG9yUG9ydCIsInZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMiLCJrZXkiLCJuYW1lIiwibWF0Y2giLCJleGVjIiwiaW5kZXgiLCJzdWJzdHJpbmciLCJnZXRMYXVuY2hJbmZvIiwiYXBwIiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhcGtQYWNrYWdlIiwiYXBrQWN0aXZpdHkiLCJwYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QiLCJyZXNldEFwcCIsImZhc3RSZXNldCIsImZ1bGxSZXNldCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImF1dG9HcmFudFBlcm1pc3Npb25zIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJpc0luc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwiZm9yY2VTdG9wIiwiaWduIiwib3V0cHV0IiwiY2xlYXIiLCJ0b0xvd2VyQ2FzZSIsImdyYW50QWxsUGVybWlzc2lvbnMiLCJlcnJvciIsInVuaW5zdGFsbEFwayIsImluc3RhbGwiLCJncmFudFBlcm1pc3Npb25zIiwidGltZW91dCIsImluc3RhbGxBcGsiLCJlbmZvcmNlQXBwSW5zdGFsbCIsImFwcFN0YXRlIiwid2FzVW5pbnN0YWxsZWQiLCJpbnN0YWxsT3JVcGdyYWRlIiwiZW5mb3JjZUN1cnJlbnRCdWlsZCIsImlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwIiwiQVBQX0lOU1RBTExfU1RBVEUiLCJpbnN0YWxsT3RoZXJBcGtzIiwib3RoZXJBcHBzIiwiQiIsImFsbCIsIm90aGVyQXBwIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsImFwcFBhY2thZ2VzIiwiZmlsdGVyUGFja2FnZXMiLCJnZXRUaGlyZFBhcnR5UGFja2FnZXMiLCJwYWNrYWdlc1N0cmluZyIsInNoZWxsIiwiYXBwUGFja2FnZXNBcnJheSIsInNwbGl0IiwiRU9MIiwiZGlmZmVyZW5jZSIsImVyciIsImluaXRVbmljb2RlS2V5Ym9hcmQiLCJkZWZhdWx0SU1FIiwiYXBwaXVtSU1FIiwiZW5hYmxlSU1FIiwic2V0SU1FIiwic2V0TW9ja0xvY2F0aW9uQXBwIiwiZ2V0QXBpTGV2ZWwiLCJpbnN0YWxsSGVscGVyQXBwIiwiYXBrUGF0aCIsInBhY2thZ2VJZCIsInJldHJ5SW5zdGFsbEhlbHBlckFwcCIsInB1c2hTZXR0aW5nc0FwcCIsInRocm93RXJyb3IiLCJzZXR0aW5nc0Fwa1BhdGgiLCJwcm9jZXNzRXhpc3RzIiwicGVybXMiLCJ4IiwicmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCIsInB1c2hTdHJpbmdzIiwicmVtb3RlRGlyIiwic3RyaW5nc0pzb24iLCJyZW1vdGVGaWxlIiwicGF0aCIsInBvc2l4IiwicmVzb2x2ZSIsInJpbXJhZiIsInB1bGxBcGsiLCJ0bXBEaXIiLCJpc0VtcHR5IiwiZnMiLCJleGlzdHMiLCJzdHJpbmdzVG1wRGlyIiwiYXBrU3RyaW5ncyIsImxvY2FsUGF0aCIsImV4dHJhY3RTdHJpbmdzRnJvbUFwayIsInVubG9ja1dpdGhVSUF1dG9tYXRpb24iLCJkcml2ZXIiLCJ1bmxvY2tDYXBhYmlsaXRpZXMiLCJ1bmxvY2tUeXBlIiwidW5sb2NrZXIiLCJpc1ZhbGlkVW5sb2NrVHlwZSIsInVubG9ja0tleSIsImlzVmFsaWRLZXkiLCJ1bmxvY2tNZXRob2QiLCJQSU5fVU5MT0NLIiwicGluVW5sb2NrIiwiUElOX1VOTE9DS19LRVlfRVZFTlQiLCJwaW5VbmxvY2tXaXRoS2V5RXZlbnQiLCJQQVNTV09SRF9VTkxPQ0siLCJwYXNzd29yZFVubG9jayIsIlBBVFRFUk5fVU5MT0NLIiwicGF0dGVyblVubG9jayIsIkZJTkdFUlBSSU5UX1VOTE9DSyIsImZpbmdlcnByaW50VW5sb2NrIiwidW5sb2NrV2l0aEhlbHBlckFwcCIsImZpcnN0UnVuIiwibGF1bmNoSGVscGVyIiwiaXNTY3JlZW5Mb2NrZWQiLCJlIiwiZGVsYXkiLCJ1bmxvY2siLCJjYXBhYmlsaXRpZXMiLCJpc1VuZGVmaW5lZCIsInZlcmlmeVVubG9jayIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0Iiwic3VjY2Vzc1RpbWVvdXQiLCJpbml0RGV2aWNlIiwic2tpcERldmljZUluaXRpYWxpemF0aW9uIiwibG9jYWxlU2NyaXB0IiwidW5pY29kZUtleWJvYXJkIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsInNraXBVbmxvY2siLCJtb2NrTG9jYXRpb25BcHAiLCJza2lwTG9nY2F0Q2FwdHVyZSIsImxvZ2NhdEZvcm1hdCIsImxvZ2NhdEZpbHRlclNwZWNzIiwid2FpdEZvckRldmljZSIsInNob3VsZFRocm93RXJyb3IiLCJpc0VtdWxhdG9yIiwic3RhcnRMb2djYXQiLCJmb3JtYXQiLCJmaWx0ZXJTcGVjcyIsInJlbW92ZU51bGxQcm9wZXJ0aWVzIiwib2JqIiwiaXNOdWxsIiwidHJ1bmNhdGVEZWNpbWFscyIsIm51bWJlciIsImRpZ2l0cyIsIm11bHRpcGxpZXIiLCJNYXRoIiwicG93IiwiYWRqdXN0ZWROdW0iLCJ0cnVuY2F0ZWROdW0iLCJpc0Nocm9tZUJyb3dzZXIiLCJnZXRDaHJvbWVQa2ciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJzZXNzaW9uSWQiLCJpc0Z1bmN0aW9uIiwiZ2V0V2ViU29ja2V0SGFuZGxlcnMiLCJhY3RpdmVIYW5kbGVycyIsInBhdGhuYW1lIiwicmVtb3ZlV2ViU29ja2V0SGFuZGxlciIsInBhcnNlQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwiSlNPTiIsInBhcnNlIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNhcHMiLCJicm93c2VyTmFtZSIsImFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyIsInN0cmluZ2lmeSIsInBvc3NpYmxlTmFtZXMiLCJzb21lIiwidGVzdCIsImJvb3RzdHJhcCIsIkJvb3RzdHJhcCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBRUEsTUFBTUEsdUJBQXVCLEdBQUcsS0FBaEM7QUFFQSxNQUFNQywrQkFBK0IsR0FBRztBQUN0Q0MsRUFBQUEsTUFBTSxFQUFFO0FBQ05DLElBQUFBLEdBQUcsRUFBRSxvQkFEQztBQUVOQyxJQUFBQSxRQUFRLEVBQUU7QUFGSixHQUQ4QjtBQUt0Q0MsRUFBQUEsUUFBUSxFQUFFO0FBQ1JGLElBQUFBLEdBQUcsRUFBRSwyQkFERztB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Q0FBRCxJQUFPbkwsZ0JBQWdCLENBQUNzUixJQUFqQixDQUFzQm5HLENBQXRCLENBQTFCLENBQXJCO0FBQ0QsQ0FIRDs7QUFLQXhKLE9BQU8sQ0FBQzRQLFNBQVIsR0FBb0JDLGtCQUFwQjtBQUNBN1AsT0FBTyxDQUFDK0ssUUFBUixHQUFtQkEsc0JBQW5CO2VBR2UvSyxPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmV0cnksIHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGZzLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgcGF0aCBhcyBzZXR0aW5nc0Fwa1BhdGggfSBmcm9tICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuaW1wb3J0IEJvb3RzdHJhcCBmcm9tICcuL2Jvb3RzdHJhcCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgQURCIGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHtcbiAgZGVmYXVsdCBhcyB1bmxvY2tlciwgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsIFBBU1NXT1JEX1VOTE9DSyxcbiAgUEFUVEVSTl9VTkxPQ0ssIEZJTkdFUlBSSU5UX1VOTE9DS1xufSBmcm9tICcuL3VubG9jay1oZWxwZXJzJztcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuY29uc3QgUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQgPSA5MDAwMDsgLy8gbWlsbGlzZWNvbmRzXG4vLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvY2hyb21lL2Jyb3dzZXIvZGV2dG9vbHMvZGV2aWNlL2FuZHJvaWRfZGV2aWNlX2luZm9fcXVlcnkuY2NcbmNvbnN0IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkgPSB7XG4gIGNocm9tZToge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG4gIGNocm9taXVtOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICcuQ2hyb21lU2hlbGxBY3Rpdml0eScsXG4gIH0sXG4gIGNocm9tZWJldGE6IHtcbiAgICBwa2c6ICdjb20uY2hyb21lLmJldGEnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBicm93c2VyOiB7XG4gICAgcGtnOiAnY29tLmFuZHJvaWQuYnJvd3NlcicsXG4gICAgYWN0aXZpdHk6ICdjb20uYW5kcm9pZC5icm93c2VyLkJyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gICdjaHJvbWl1bS1icm93c2VyJzoge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICAnY2hyb21pdW0td2Vidmlldyc6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbC5XZWJWaWV3QnJvd3NlckFjdGl2aXR5JyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG59O1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1BLR19JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1VOTE9DS19BQ1RJVklUWSA9ICcuVW5sb2NrJztcbmNvbnN0IEVNVUxBVE9SX1BBVFRFUk4gPSAvXFxiZW11bGF0b3JcXGIvaTtcbi8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaW4gc3luYyB3aXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGUveGN1aWFwcGxpY2F0aW9uc3RhdGVydW5uaW5nYmFja2dyb3VuZD9sYW5ndWFnZT1vYmpjXG5jb25zdCBBUFBfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX0lOU1RBTExFRDogMCxcbiAgTk9UX1JVTk5JTkc6IDEsXG4gIFJVTk5JTkdfSU5fQkFDS0dST1VORDogMyxcbiAgUlVOTklOR19JTl9GT1JFR1JPVU5EOiA0XG59KTtcblxuXG5mdW5jdGlvbiBlbnN1cmVOZXR3b3JrU3BlZWQgKGFkYiwgbmV0d29ya1NwZWVkKSB7XG4gIGlmIChfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCkuaW5jbHVkZXMobmV0d29ya1NwZWVkKSkge1xuICAgIHJldHVybiBuZXR3b3JrU3BlZWQ7XG4gIH1cbiAgbG9nZ2VyLndhcm4oYFdyb25nIG5ldHdvcmsgc3BlZWQgcGFyYW0gJyR7bmV0d29ya1NwZWVkfScsIHVzaW5nIGRlZmF1bHQ6ICR7YWRiLk5FVFdPUktfU1BFRUQuRlVMTH0uIGAgK1xuICAgIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgcmV0dXJuIGFkYi5ORVRXT1JLX1NQRUVELkZVTEw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBdmRBcmdzIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtTcGVlZCxcbiAgICBpc0hlYWRsZXNzLFxuICAgIGF2ZEFyZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGF2ZEFyZ3MpIHtcbiAgICBpZiAoXy5pc0FycmF5KGF2ZEFyZ3MpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hdmRBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKHV0aWwuc2hlbGxQYXJzZShgJHthdmRBcmdzfWApKSk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrU3BlZWQpIHtcbiAgICByZXN1bHQucHVzaCgnLW5ldHNwZWVkJywgZW5zdXJlTmV0d29ya1NwZWVkKGFkYiwgbmV0d29ya1NwZWVkKSk7XG4gIH1cbiAgaWYgKGlzSGVhZGxlc3MpIHtcbiAgICByZXN1bHQucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuY29uc3QgaGVscGVycyA9IHt9O1xuXG5oZWxwZXJzLmNyZWF0ZUJhc2VBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVCYXNlQURCIChvcHRzID0ge30pIHtcbiAgLy8gZmlsdGVyIG91dCBhbnkgdW53YW50ZWQgb3B0aW9ucyBzZW50IGluXG4gIC8vIHRoaXMgbGlzdCBzaG91bGQgYmUgdXBkYXRlZCBhcyBBREIgdGFrZXMgbW9yZSBhcmd1bWVudHNcbiAgY29uc3Qge1xuICAgIGFkYlBvcnQsXG4gICAgc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgIHJlbW90ZUFkYkhvc3QsXG4gICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICBhZGJFeGVjVGltZW91dCxcbiAgICB1c2VLZXlzdG9yZSxcbiAgICBrZXlzdG9yZVBhdGgsXG4gICAga2V5c3RvcmVQYXNzd29yZCxcbiAgICBrZXlBbGlhcyxcbiAgICBrZXlQYXNzd29yZCxcbiAgICByZW1vdGVBcHBzQ2FjaGVMaW1pdCxcbiAgICBidWlsZFRvb2xzVmVyc2lvbixcbiAgICBhbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgIGFsbG93RGVsYXlBZGIsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgQURCLmNyZWF0ZUFEQih7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSk7XG59O1xuXG5oZWxwZXJzLnByZXBhcmVFbXVsYXRvciA9IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBhdmQsXG4gICAgYXZkRW52OiBlbnYsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbG9jYWxlOiBjb3VudHJ5LFxuICAgIGF2ZExhdW5jaFRpbWVvdXQ6IGxhdW5jaFRpbWVvdXQsXG4gICAgYXZkUmVhZHlUaW1lb3V0OiByZWFkeVRpbWVvdXQsXG4gIH0gPSBvcHRzO1xuICBpZiAoIWF2ZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGxhdW5jaCBBVkQgd2l0aG91dCBBVkQgbmFtZScpO1xuICB9XG5cbiAgY29uc3QgYXZkTmFtZSA9IGF2ZC5yZXBsYWNlKCdAJywgJycpO1xuICBjb25zdCBydW5uaW5nQVZEID0gYXdhaXQgYWRiLmdldFJ1bm5pbmdBVkQoYXZkTmFtZSk7XG4gIGNvbnN0IGFyZ3MgPSBwcmVwYXJlQXZkQXJncyhhZGIsIG9wdHMpO1xuICBpZiAocnVubmluZ0FWRCkge1xuICAgIGlmIChhcmdzLmluY2x1ZGVzKCctd2lwZS1kYXRhJykpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgS2lsbGluZyAnJHthdmROYW1lfScgYmVjYXVzZSBpdCBuZWVkcyB0byBiZSB3aXBlZCBhdCBzdGFydC5gKTtcbiAgICAgIGF3YWl0IGFkYi5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTm90IGxhdW5jaGluZyBBVkQgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IHJ1bm5pbmcuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGF3YWl0IGFkYi5sYXVuY2hBVkQoYXZkLCB7XG4gICAgYXJncyxcbiAgICBlbnYsXG4gICAgbGFuZ3VhZ2UsXG4gICAgY291bnRyeSxcbiAgICBsYXVuY2hUaW1lb3V0LFxuICAgIHJlYWR5VGltZW91dCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFNldCBhbmQgZW5zdXJlIHRoZSBsb2NhbGUgbmFtZSBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UuIFRoZSBsYW5ndWFnZSBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlLCBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIGxvd2VyIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezIsOH0uIGUuZy4gZW4sIGphIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50cnkgLSBDb3VudHJ5LiBUaGUgY291bnRyeSAocmVnaW9uKSBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlLCBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIHVwcGVyIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezJ9IHwgWzAtOV17M30uIGUuZy4gVVMsIEpQIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHBhcmFtIHs/c3RyaW5nfSBzY3JpcHQgLSBTY3JpcHQuIFRoZSBzY3JpcHQgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIHRpdGxlIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezR9LiBlLmcuIEhhbnMgaW4gemgtSGFucy1DTiA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlsZWQgdG8gc2V0IGxvY2FsZSBwcm9wZXJseVxuICovXG5oZWxwZXJzLmVuc3VyZURldmljZUxvY2FsZSA9IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZURldmljZUxvY2FsZSAoYWRiLCBsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0ID0gbnVsbCkge1xuICBpZiAoIV8uaXNTdHJpbmcobGFuZ3VhZ2UpICYmICFfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgbG9nZ2VyLndhcm4oYHNldERldmljZUxhbmd1YWdlQ291bnRyeSByZXF1aXJlcyBsYW5ndWFnZSBvciBjb3VudHJ5LmApO1xuICAgIGxvZ2dlci53YXJuKGBHb3QgbGFuZ3VhZ2U6ICcke2xhbmd1YWdlfScgYW5kIGNvdW50cnk6ICcke2NvdW50cnl9J2ApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGFkYi5zZXREZXZpY2VMYW5ndWFnZUNvdW50cnkobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCk7XG5cbiAgaWYgKCFhd2FpdCBhZGIuZW5zdXJlQ3VycmVudExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBzY3JpcHQgPyBgbGFuZ3VhZ2U6ICR7bGFuZ3VhZ2V9LCBjb3VudHJ5OiAke2NvdW50cnl9IGFuZCBzY3JpcHQ6ICR7c2NyaXB0fWAgOiBgbGFuZ3VhZ2U6ICR7bGFuZ3VhZ2V9IGFuZCBjb3VudHJ5OiAke2NvdW50cnl9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgJHttZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2FwcyA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZUluZm9Gcm9tQ2FwcyAob3B0cyA9IHt9KSB7XG4gIC8vIHdlIGNhbiBjcmVhdGUgYSB0aHJvd2F3YXkgQURCIGluc3RhbmNlIGhlcmUsIHNvIHRoZXJlIGlzIG5vIGRlcGVuZGVuY3lcbiAgLy8gb24gaW5zdGFudGlhdGluZyBvbiBlYXJsaWVyIChhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIG5vIHVkaWQpXG4gIC8vIHdlIGNhbiBvbmx5IHVzZSB0aGlzIEFEQiBvYmplY3QgZm9yIGNvbW1hbmRzIHRoYXQgd291bGQgbm90IGJlIGNvbmZ1c2VkXG4gIC8vIGlmIG11bHRpcGxlIGRldmljZXMgYXJlIGNvbm5lY3RlZFxuICBjb25zdCBhZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUJhc2VBREIob3B0cyk7XG4gIGxldCB1ZGlkID0gb3B0cy51ZGlkO1xuICBsZXQgZW1Qb3J0ID0gbnVsbDtcblxuICAvLyBhIHNwZWNpZmljIGF2ZCBuYW1lIHdhcyBnaXZlbi4gdHJ5IHRvIGluaXRpYWxpemUgd2l0aCB0aGF0XG4gIGlmIChvcHRzLmF2ZCkge1xuICAgIGF3YWl0IGhlbHBlcnMucHJlcGFyZUVtdWxhdG9yKGFkYiwgb3B0cyk7XG4gICAgdWRpZCA9IGFkYi5jdXJEZXZpY2VJZDtcbiAgICBlbVBvcnQgPSBhZGIuZW11bGF0b3JQb3J0O1xuICB9IGVsc2Uge1xuICAgIC8vIG5vIGF2ZCBnaXZlbi4gbGV0cyB0cnkgd2hhdGV2ZXIncyBwbHVnZ2VkIGluIGRldmljZXMvZW11bGF0b3JzXG4gICAgbG9nZ2VyLmluZm8oJ1JldHJpZXZpbmcgZGV2aWNlIGxpc3QnKTtcbiAgICBsZXQgZGV2aWNlcyA9IGF3YWl0IGFkYi5nZXREZXZpY2VzV2l0aFJldHJ5KCk7XG5cbiAgICAvLyB1ZGlkIHdhcyBnaXZlbiwgbGV0cyB0cnkgdG8gaW5pdCB3aXRoIHRoYXQgZGV2aWNlXG4gICAgaWYgKHVkaWQpIHtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhfLm1hcChkZXZpY2VzLCAndWRpZCcpLCB1ZGlkKSkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgRGV2aWNlICR7dWRpZH0gd2FzIG5vdCBpbiB0aGUgbGlzdCBvZiBjb25uZWN0ZWQgZGV2aWNlc2ApO1xuICAgICAgfVxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIGlmIChvcHRzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgb3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBgJHtvcHRzLnBsYXRmb3JtVmVyc2lvbn1gLnRyaW0oKTtcblxuICAgICAgLy8gYSBwbGF0Zm9ybSB2ZXJzaW9uIHdhcyBnaXZlbi4gbGV0cyB0cnkgdG8gZmluZCBhIGRldmljZSB3aXRoIHRoZSBzYW1lIG9zXG4gICAgICBjb25zdCBwbGF0Zm9ybVZlcnNpb24gPSBzZW12ZXIuY29lcmNlKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB8fCBvcHRzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICAgIGxvZ2dlci5pbmZvKGBMb29raW5nIGZvciBhIGRldmljZSB3aXRoIEFuZHJvaWQgJyR7cGxhdGZvcm1WZXJzaW9ufSdgKTtcblxuICAgICAgLy8gaW4gY2FzZSB3ZSBmYWlsIHRvIGZpbmQgc29tZXRoaW5nLCBnaXZlIHRoZSB1c2VyIGEgdXNlZnVsIGxvZyB0aGF0IGhhc1xuICAgICAgLy8gdGhlIGRldmljZSB1ZGlkcyBhbmQgb3MgdmVyc2lvbnMgc28gdGhleSBrbm93IHdoYXQncyBhdmFpbGFibGVcbiAgICAgIGNvbnN0IGF2YWlsRGV2aWNlcyA9IFtdO1xuICAgICAgbGV0IHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IG51bGw7XG4gICAgICAvLyBmaXJzdCB0cnkgc3RhcnRlZCBkZXZpY2VzL2VtdWxhdG9yc1xuICAgICAgZm9yIChjb25zdCBkZXZpY2Ugb2YgZGV2aWNlcykge1xuICAgICAgICAvLyBkaXJlY3QgYWRiIGNhbGxzIHRvIHRoZSBzcGVjaWZpYyBkZXZpY2VcbiAgICAgICAgYXdhaXQgYWRiLnNldERldmljZUlkKGRldmljZS51ZGlkKTtcbiAgICAgICAgY29uc3QgcmF3RGV2aWNlT1MgPSBhd2FpdCBhZGIuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgICAgIC8vIFRoZSBkZXZpY2UgT1MgY291bGQgZWl0aGVyIGJlIGEgbnVtYmVyLCBsaWtlIGA2LjBgXG4gICAgICAgIC8vIG9yIGFuIGFiYnJldmlhdGlvbiwgbGlrZSBgUmBcbiAgICAgICAgYXZhaWxEZXZpY2VzLnB1c2goYCR7ZGV2aWNlLnVkaWR9ICgke3Jhd0RldmljZU9TfSlgKTtcbiAgICAgICAgY29uc3QgZGV2aWNlT1MgPSBzZW12ZXIuY29lcmNlKHJhd0RldmljZU9TKSB8fCByYXdEZXZpY2VPUztcbiAgICAgICAgaWYgKCFkZXZpY2VPUykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkID0gc2VtdmVyLnZhbGlkKGRldmljZU9TKSAmJiBzZW12ZXIudmFsaWQocGxhdGZvcm1WZXJzaW9uKTtcbiAgICAgICAgY29uc3QgYm90aFZlcnNpb25zQXJlU3RyaW5ncyA9IF8uaXNTdHJpbmcoZGV2aWNlT1MpICYmIF8uaXNTdHJpbmcocGxhdGZvcm1WZXJzaW9uKTtcbiAgICAgICAgaWYgKGJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCAmJiBkZXZpY2VPUy52ZXJzaW9uID09PSBwbGF0Zm9ybVZlcnNpb24udmVyc2lvblxuICAgICAgICAgICAgfHwgYm90aFZlcnNpb25zQXJlU3RyaW5ncyAmJiBfLnRvTG93ZXIoZGV2aWNlT1MpID09PSBfLnRvTG93ZXIocGxhdGZvcm1WZXJzaW9uKSkge1xuICAgICAgICAgIC8vIEdvdCBhbiBleGFjdCBtYXRjaCAtIHByb2NlZWQgaW1tZWRpYXRlbHlcbiAgICAgICAgICB1ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoIWJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCkge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIHBvaW50IHRvIGNoZWNrIGZvciBwYXJ0aWFsIG1hdGNoIGlmIGVpdGhlciBvZiB2ZXJzaW9uIG51bWJlcnMgaXMgbm90IGNvZXJjaWJsZVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCghXy5pbmNsdWRlcyhvcHRzLnBsYXRmb3JtVmVyc2lvbiwgJy4nKSAmJiBwbGF0Zm9ybVZlcnNpb24ubWFqb3IgPT09IGRldmljZU9TLm1ham9yXG4gICAgICAgICAgICB8fCBwbGF0Zm9ybVZlcnNpb24ubWFqb3IgPT09IGRldmljZU9TLm1ham9yICYmIHBsYXRmb3JtVmVyc2lvbi5taW5vciA9PT0gZGV2aWNlT1MubWlub3IpXG4gICAgICAgICAgICAvLyBHb3QgYSBwYXJ0aWFsIG1hdGNoIC0gbWFrZSBzdXJlIHdlIGNvbnNpZGVyIHRoZSBtb3N0IHJlY2VudFxuICAgICAgICAgICAgLy8gZGV2aWNlIHZlcnNpb24gYXZhaWxhYmxlIG9uIHRoZSBob3N0IHN5c3RlbVxuICAgICAgICAgICAgJiYgKHBhcnRpYWxNYXRjaENhbmRpZGF0ZSAmJiBzZW12ZXIuZ3QoZGV2aWNlT1MsIF8udmFsdWVzKHBhcnRpYWxNYXRjaENhbmRpZGF0ZSlbMF0pXG4gICAgICAgICAgICAgICAgfHwgIXBhcnRpYWxNYXRjaENhbmRpZGF0ZSkpIHtcbiAgICAgICAgICBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUgPSB7W2RldmljZS51ZGlkXTogZGV2aWNlT1N9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXVkaWQgJiYgcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSB7XG4gICAgICAgIHVkaWQgPSBfLmtleXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXTtcbiAgICAgICAgYXdhaXQgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXVkaWQpIHtcbiAgICAgICAgLy8gd2UgY291bGRuJ3QgZmluZCBhbnl0aGluZyEgcXVpdFxuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgVW5hYmxlIHRvIGZpbmQgYW4gYWN0aXZlIGRldmljZSBvciBlbXVsYXRvciBgICtcbiAgICAgICAgICBgd2l0aCBPUyAke29wdHMucGxhdGZvcm1WZXJzaW9ufS4gVGhlIGZvbGxvd2luZyBhcmUgYXZhaWxhYmxlOiBgICtcbiAgICAgICAgICBhdmFpbERldmljZXMuam9pbignLCAnKSk7XG4gICAgICB9XG5cbiAgICAgIGVtUG9ydCA9IGFkYi5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKHVkaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhIHVkaWQgd2FzIG5vdCBnaXZlbiwgZ3JhYiB0aGUgZmlyc3QgZGV2aWNlIHdlIHNlZVxuICAgICAgdWRpZCA9IGRldmljZXNbMF0udWRpZDtcbiAgICAgIGVtUG9ydCA9IGFkYi5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKHVkaWQpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5pbmZvKGBVc2luZyBkZXZpY2U6ICR7dWRpZH1gKTtcbiAgcmV0dXJuIHt1ZGlkLCBlbVBvcnR9O1xufTtcblxuLy8gcmV0dXJucyBhIG5ldyBhZGIgaW5zdGFuY2Ugd2l0aCBkZXZpY2VJZCBzZXRcbmhlbHBlcnMuY3JlYXRlQURCID0gYXN5bmMgZnVuY3Rpb24gY3JlYXRlQURCIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3VkaWQsIGVtUG9ydH0gPSBvcHRzO1xuICBjb25zdCBhZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUJhc2VBREIob3B0cyk7XG4gIGFkYi5zZXREZXZpY2VJZCh1ZGlkKTtcbiAgaWYgKGVtUG9ydCkge1xuICAgIGFkYi5zZXRFbXVsYXRvclBvcnQoZW1Qb3J0KTtcbiAgfVxuXG4gIHJldHVybiBhZGI7XG59O1xuXG5oZWxwZXJzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgPSBmdW5jdGlvbiB2YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzIChvcHRzKSB7XG4gIGZvciAoY29uc3Qga2V5IG9mIFsnYXBwUGFja2FnZScsICdhcHBBY3Rpdml0eScsICdhcHBXYWl0UGFja2FnZScsICdhcHBXYWl0QWN0aXZpdHknXSkge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRzW2tleV07XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IC8oW15cXHcuKixdKSsvLmV4ZWMobmFtZSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYENhcGFiaWxpdHkgJyR7a2V5fScgaXMgZXhwZWN0ZWQgdG8gb25seSBpbmNsdWRlIGxhdGluIGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZSwgZG90LCBjb21tYSBhbmQgYXN0ZXJpc2sgY2hhcmFjdGVycy5gKTtcbiAgICBsb2dnZXIud2FybihgQ3VycmVudCB2YWx1ZSAnJHtuYW1lfScgaGFzIG5vbi1tYXRjaGluZyBjaGFyYWN0ZXIgYXQgaW5kZXggJHttYXRjaC5pbmRleH06ICcke25hbWUuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4ICsgMSl9J2ApO1xuICB9XG59O1xuXG5oZWxwZXJzLmdldExhdW5jaEluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRMYXVuY2hJbmZvIChhZGIsIG9wdHMpIHtcbiAgbGV0IHthcHAsIGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5fSA9IG9wdHM7XG4gIGlmICghYXBwKSB7XG4gICAgbG9nZ2VyLndhcm4oJ05vIGFwcCBzZW50IGluLCBub3QgcGFyc2luZyBwYWNrYWdlL2FjdGl2aXR5Jyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy52YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzKG9wdHMpO1xuXG4gIGlmIChhcHBQYWNrYWdlICYmIGFwcEFjdGl2aXR5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKCdQYXJzaW5nIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGZyb20gYXBwIG1hbmlmZXN0Jyk7XG4gIGxldCB7YXBrUGFja2FnZSwgYXBrQWN0aXZpdHl9ID1cbiAgICBhd2FpdCBhZGIucGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0KGFwcCk7XG4gIGlmIChhcGtQYWNrYWdlICYmICFhcHBQYWNrYWdlKSB7XG4gICAgYXBwUGFja2FnZSA9IGFwa1BhY2thZ2U7XG4gIH1cbiAgaWYgKCFhcHBXYWl0UGFja2FnZSkge1xuICAgIGFwcFdhaXRQYWNrYWdlID0gYXBwUGFja2FnZTtcbiAgfVxuICBpZiAoYXBrQWN0aXZpdHkgJiYgIWFwcEFjdGl2aXR5KSB7XG4gICAgYXBwQWN0aXZpdHkgPSBhcGtBY3Rpdml0eTtcbiAgfVxuICBpZiAoIWFwcFdhaXRBY3Rpdml0eSkge1xuICAgIGFwcFdhaXRBY3Rpdml0eSA9IGFwcEFjdGl2aXR5O1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGFyZTogJHthcGtQYWNrYWdlfS8ke2Fwa0FjdGl2aXR5fWApO1xuICByZXR1cm4ge2FwcFBhY2thZ2UsIGFwcFdhaXRQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdEFjdGl2aXR5fTtcbn07XG5cbmhlbHBlcnMucmVzZXRBcHAgPSBhc3luYyBmdW5jdGlvbiByZXNldEFwcCAoYWRiLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhcHBQYWNrYWdlLFxuICAgIGZhc3RSZXNldCxcbiAgICBmdWxsUmVzZXQsXG4gICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0ID0gUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQsXG4gICAgYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXNcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFhcHBQYWNrYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2FwcFBhY2thZ2UnIG9wdGlvbiBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IGlzSW5zdGFsbGVkID0gYXdhaXQgYWRiLmlzQXBwSW5zdGFsbGVkKGFwcFBhY2thZ2UpO1xuXG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhZGIuZm9yY2VTdG9wKGFwcFBhY2thZ2UpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAvLyBmdWxsUmVzZXQgaGFzIHByaW9yaXR5IG92ZXIgZmFzdFJlc2V0XG4gICAgaWYgKCFmdWxsUmVzZXQgJiYgZmFzdFJlc2V0KSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBhZGIuY2xlYXIoYXBwUGFja2FnZSk7XG4gICAgICBpZiAoXy5pc1N0cmluZyhvdXRwdXQpICYmIG91dHB1dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdmYWlsZWQnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciB0aGUgYXBwbGljYXRpb24gZGF0YSBvZiAnJHthcHBQYWNrYWdlfScuIE9yaWdpbmFsIGVycm9yOiAke291dHB1dH1gKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4ZWN1dGluZyBgc2hlbGwgcG0gY2xlYXJgIHJlc2V0cyBwcmV2aW91c2x5IGFzc2lnbmVkIGFwcGxpY2F0aW9uIHBlcm1pc3Npb25zIGFzIHdlbGxcbiAgICAgIGlmIChhdXRvR3JhbnRQZXJtaXNzaW9ucykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFkYi5ncmFudEFsbFBlcm1pc3Npb25zKGFwcFBhY2thZ2UpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgVW5hYmxlIHRvIGdyYW50IHBlcm1pc3Npb25zIHJlcXVlc3RlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLmRlYnVnKGBQZXJmb3JtZWQgZmFzdCByZXNldCBvbiB0aGUgaW5zdGFsbGVkICcke2FwcFBhY2thZ2V9JyBhcHBsaWNhdGlvbiAoc3RvcCBhbmQgY2xlYXIpYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFhcHApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwJyBvcHRpb24gaXMgcmVxdWlyZWQgZm9yIHJlaW5zdGFsbFwiKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhgUnVubmluZyBmdWxsIHJlc2V0IG9uICcke2FwcFBhY2thZ2V9JyAocmVpbnN0YWxsKWApO1xuICBpZiAoaXNJbnN0YWxsZWQpIHtcbiAgICBhd2FpdCBhZGIudW5pbnN0YWxsQXBrKGFwcFBhY2thZ2UpO1xuICB9XG4gIGF3YWl0IGFkYi5pbnN0YWxsKGFwcCwge1xuICAgIGdyYW50UGVybWlzc2lvbnM6IGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmluc3RhbGxBcGsgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBrIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICBlbmZvcmNlQXBwSW5zdGFsbCxcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFhcHAgfHwgIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwJyBhbmQgJ2FwcFBhY2thZ2UnIG9wdGlvbnMgYXJlIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgaWYgKGZ1bGxSZXNldCkge1xuICAgIGF3YWl0IHRoaXMucmVzZXRBcHAoYWRiLCBvcHRzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwU3RhdGUsXG4gICAgd2FzVW5pbnN0YWxsZWRcbiAgfSA9IGF3YWl0IGFkYi5pbnN0YWxsT3JVcGdyYWRlKGFwcCwgYXBwUGFja2FnZSwge1xuICAgIGdyYW50UGVybWlzc2lvbnM6IGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICBlbmZvcmNlQ3VycmVudEJ1aWxkOiBlbmZvcmNlQXBwSW5zdGFsbCxcbiAgfSk7XG5cbiAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCB0aGUgbmV3bHkgaW5zdGFsbGVkIGFwcFxuICBjb25zdCBpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCA9ICF3YXNVbmluc3RhbGxlZFxuICAgICYmIGFwcFN0YXRlICE9PSBhZGIuQVBQX0lOU1RBTExfU1RBVEUuTk9UX0lOU1RBTExFRDtcbiAgaWYgKGZhc3RSZXNldCAmJiBpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCkge1xuICAgIGxvZ2dlci5pbmZvKGBQZXJmb3JtaW5nIGZhc3QgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nYCk7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICB9XG59O1xuXG4vKipcbiAqIEluc3RhbGxzIGFuIGFycmF5IG9mIGFwa3NcbiAqIEBwYXJhbSB7QURCfSBhZGIgSW5zdGFuY2Ugb2YgQXBwaXVtIEFEQiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdHMgZGVmaW5lZCBpbiBkcml2ZXIuanNcbiAqL1xuaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbE90aGVyQXBrcyAob3RoZXJBcHBzLCBhZGIsIG9wdHMpIHtcbiAgbGV0IHtcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICAvLyBJbnN0YWxsIGFsbCBvZiB0aGUgQVBLJ3MgYXN5bmNocm9ub3VzbHlcbiAgYXdhaXQgQi5hbGwob3RoZXJBcHBzLm1hcCgob3RoZXJBcHApID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEluc3RhbGxpbmcgYXBwOiAke290aGVyQXBwfWApO1xuICAgIHJldHVybiBhZGIuaW5zdGFsbE9yVXBncmFkZShvdGhlckFwcCwgbnVsbCwge1xuICAgICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgICB0aW1lb3V0OiBhbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICB9KTtcbiAgfSkpO1xufTtcblxuLyoqXG4gKiBVbmluc3RhbGwgYW4gYXJyYXkgb2YgcGFja2FnZXNcbiAqIEBwYXJhbSB7QURCfSBhZGIgSW5zdGFuY2Ugb2YgQXBwaXVtIEFEQiBvYmplY3RcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBwUGFja2FnZXMgQW4gYXJyYXkgb2YgcGFja2FnZSBuYW1lcyB0byB1bmluc3RhbGwuIElmIHRoaXMgaW5jbHVkZXMgYCcqJ2AsIHVuaW5zdGFsbCBhbGwgb2YgM3JkIHBhcnR5IGFwcHNcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmlsdGVyUGFja2FnZXMgQW4gYXJyYXkgb2YgcGFja2FnZXMgZG9lcyBub3QgdW5pbnN0YWxsIHdoZW4gYCpgIGlzIHByb3ZpZGVkIGFzIGBhcHBQYWNrYWdlc2BcbiAqL1xuaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzID0gYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyAoYWRiLCBhcHBQYWNrYWdlcywgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICBpZiAoYXBwUGFja2FnZXMuaW5jbHVkZXMoJyonKSkge1xuICAgIGxvZ2dlci5kZWJ1ZygnVW5pbnN0YWxsIHRoaXJkIHBhcnR5IHBhY2thZ2VzJyk7XG4gICAgYXBwUGFja2FnZXMgPSBhd2FpdCB0aGlzLmdldFRoaXJkUGFydHlQYWNrYWdlcyhhZGIsIGZpbHRlclBhY2thZ2VzKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhgVW5pbnN0YWxsaW5nIHBhY2thZ2VzOiAke2FwcFBhY2thZ2VzfWApO1xuICBhd2FpdCBCLmFsbChhcHBQYWNrYWdlcy5tYXAoKGFwcFBhY2thZ2UpID0+IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSkpKTtcbn07XG5cbi8qKlxuICogR2V0IHRoaXJkIHBhcnR5IHBhY2thZ2VzIGZpbHRlcmVkIHdpdGggYGZpbHRlclBhY2thZ2VzYFxuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IEFuIGFycmF5IG9mIGluc3RhbGxlZCB0aGlyZCBwYXJ5IHBhY2thZ2VzXG4gKi9cbmhlbHBlcnMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzID0gYXN5bmMgZnVuY3Rpb24gZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIChhZGIsIGZpbHRlclBhY2thZ2VzID0gW10pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlc1N0cmluZyA9IGF3YWl0IGFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnLCAnLTMnXSk7XG4gICAgY29uc3QgYXBwUGFja2FnZXNBcnJheSA9IHBhY2thZ2VzU3RyaW5nLnRyaW0oKS5yZXBsYWNlKC9wYWNrYWdlOi9nLCAnJykuc3BsaXQoRU9MKTtcbiAgICBsb2dnZXIuZGVidWcoYCcke2FwcFBhY2thZ2VzQXJyYXl9JyBmaWx0ZXJlZCB3aXRoICcke2ZpbHRlclBhY2thZ2VzfSdgKTtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFwcFBhY2thZ2VzQXJyYXksIGZpbHRlclBhY2thZ2VzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBnZXQgcGFja2FnZXMgd2l0aCAnYWRiIHNoZWxsIHBtIGxpc3QgcGFja2FnZXMgLTMnOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuaGVscGVycy5pbml0VW5pY29kZUtleWJvYXJkID0gYXN5bmMgZnVuY3Rpb24gaW5pdFVuaWNvZGVLZXlib2FyZCAoYWRiKSB7XG4gIGxvZ2dlci5kZWJ1ZygnRW5hYmxpbmcgVW5pY29kZSBrZXlib2FyZCBzdXBwb3J0Jyk7XG5cbiAgLy8gZ2V0IHRoZSBkZWZhdWx0IElNRSBzbyB3ZSBjYW4gcmV0dXJuIGJhY2sgdG8gaXQgbGF0ZXIgaWYgd2Ugd2FudFxuICBsZXQgZGVmYXVsdElNRSA9IGF3YWl0IGFkYi5kZWZhdWx0SU1FKCk7XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbnNldHRpbmcgcHJldmlvdXMgSU1FICR7ZGVmYXVsdElNRX1gKTtcbiAgY29uc3QgYXBwaXVtSU1FID0gYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vLlVuaWNvZGVJTUVgO1xuICBsb2dnZXIuZGVidWcoYFNldHRpbmcgSU1FIHRvICcke2FwcGl1bUlNRX0nYCk7XG4gIGF3YWl0IGFkYi5lbmFibGVJTUUoYXBwaXVtSU1FKTtcbiAgYXdhaXQgYWRiLnNldElNRShhcHBpdW1JTUUpO1xuICByZXR1cm4gZGVmYXVsdElNRTtcbn07XG5cbmhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwID0gYXN5bmMgZnVuY3Rpb24gc2V0TW9ja0xvY2F0aW9uQXBwIChhZGIsIGFwcCkge1xuICB0cnkge1xuICAgIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8IDIzKSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydzZXR0aW5ncycsICdwdXQnLCAnc2VjdXJlJywgJ21vY2tfbG9jYXRpb24nLCAnMSddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsnYXBwb3BzJywgJ3NldCcsIGFwcCwgJ2FuZHJvaWQ6bW9ja19sb2NhdGlvbicsICdhbGxvdyddKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gc2V0IG1vY2sgbG9jYXRpb24gZm9yIGFwcCAnJHthcHB9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5pbnN0YWxsSGVscGVyQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEhlbHBlckFwcCAoYWRiLCBhcGtQYXRoLCBwYWNrYWdlSWQpIHtcbiAgLy8gU29tZXRpbWVzIGFkYiBwdXNoIG9yIGFkYiBpbnN0YWwgdGFrZSBtb3JlIHRpbWUgdGhhbiBleHBlY3RlZCB0byBpbnN0YWxsIGFuIGFwcFxuICAvLyBlLmcuIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vaW8uYXBwaXVtLnNldHRpbmdzL2lzc3Vlcy80MCNpc3N1ZWNvbW1lbnQtNDc2NTkzMTc0XG4gIGF3YWl0IHJldHJ5KDIsIGFzeW5jIGZ1bmN0aW9uIHJldHJ5SW5zdGFsbEhlbHBlckFwcCAoKSB7XG4gICAgYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBrUGF0aCwgcGFja2FnZUlkLCB7Z3JhbnRQZXJtaXNzaW9uczogdHJ1ZX0pO1xuICB9KTtcbn07XG5cbi8qKlxuICogUHVzaGVzIGFuZCBpbnN0YWxscyBpby5hcHBpdW0uc2V0dGluZ3MgYXBwLlxuICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzZXR0aW5nIGFwcCBpcyByZXF1aXJlZFxuICpcbiAqIEBwYXJhbSB7QWRifSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdGhyb3dFcnJvcltmYWxzZV0gLSBXaGV0aGVyIHRocm93IGVycm9yIG9yIG5vdFxuICogQHRocm93cyB7RXJyb3J9IElmIHRocm93RXJyb3IgaXMgdHJ1ZSBhbmQgc29tZXRoaW5nIGhhcHBlbnMgaW4gaW5zdGFsbGF0aW9uIHN0ZXBcbiAqL1xuaGVscGVycy5wdXNoU2V0dGluZ3NBcHAgPSBhc3luYyBmdW5jdGlvbiBwdXNoU2V0dGluZ3NBcHAgKGFkYiwgdGhyb3dFcnJvciA9IGZhbHNlKSB7XG4gIGxvZ2dlci5kZWJ1ZygnUHVzaGluZyBzZXR0aW5ncyBhcGsgdG8gZGV2aWNlLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAoYWRiLCBzZXR0aW5nc0Fwa1BhdGgsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIHRocm93RXJyb3IpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGxvZ2dlci53YXJuKGBJZ25vcmVkIGVycm9yIHdoaWxlIGluc3RhbGxpbmcgJyR7c2V0dGluZ3NBcGtQYXRofSc6IGAgK1xuICAgICAgICAgICAgICAgIGAnJHtlcnIubWVzc2FnZX0nLiBGZWF0dXJlcyB0aGF0IHJlbHkgb24gdGhpcyBoZWxwZXIgYCArXG4gICAgICAgICAgICAgICAgJ3JlcXVpcmUgdGhlIGFwayBzdWNoIGFzIHRvZ2dsZSBXaUZpIGFuZCBnZXR0aW5nIGxvY2F0aW9uICcgK1xuICAgICAgICAgICAgICAgICd3aWxsIHJhaXNlIGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gdXNlIHRoZW0uJyk7XG4gIH1cblxuICAvLyBSZWluc3RhbGwgd2lsbCBzdG9wIHRoZSBzZXR0aW5ncyBoZWxwZXIgcHJvY2VzcyBhbnl3YXksIHNvXG4gIC8vIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHN0aWxsIHJ1bm5pbmdcbiAgaWYgKGF3YWl0IGFkYi5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9IGlzIGFscmVhZHkgcnVubmluZy4gYCArXG4gICAgICBgVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCBpdHMgcGVybWlzc2lvbnMuYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDw9IDIzKSB7IC8vIEFuZHJvaWQgNi0gZGV2aWNlcyBzaG91bGQgaGF2ZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcHVsbC8xMTY0MCNpc3N1ZWNvbW1lbnQtNDM4MjYwNDc3XG4gICAgY29uc3QgcGVybXMgPSBbJ1NFVF9BTklNQVRJT05fU0NBTEUnLCAnQ0hBTkdFX0NPTkZJR1VSQVRJT04nLCAnQUNDRVNTX0ZJTkVfTE9DQVRJT04nXTtcbiAgICBsb2dnZXIuaW5mbyhgR3JhbnRpbmcgcGVybWlzc2lvbnMgJHtwZXJtc30gdG8gJyR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0nYCk7XG4gICAgYXdhaXQgYWRiLmdyYW50UGVybWlzc2lvbnMoU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgcGVybXMubWFwKCh4KSA9PiBgYW5kcm9pZC5wZXJtaXNzaW9uLiR7eH1gKSk7XG4gIH1cblxuICAvLyBsYXVuY2ggaW8uYXBwaXVtLnNldHRpbmdzIGFwcCBkdWUgdG8gc2V0dGluZ3MgZmFpbGluZyB0byBiZSBzZXRcbiAgLy8gaWYgdGhlIGFwcCBpcyBub3QgbGF1bmNoZWQgcHJpb3IgdG8gc3RhcnQgdGhlIHNlc3Npb24gb24gYW5kcm9pZCA3K1xuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzg5NTdcbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoZXJyKTtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBzdHJpbmcueG1sIGFuZCBjb252ZXJ0cyBpdCB0byBzdHJpbmcuanNvbiBhbmQgcHVzaGVzXG4gKiBpdCB0byAvZGF0YS9sb2NhbC90bXAvc3RyaW5nLmpzb24gb24gZm9yIHVzZSBvZiBib290c3RyYXBcbiAqIElmIGFwcCBpcyBub3QgcHJlc2VudCB0byBleHRyYWN0IHN0cmluZy54bWwgaXQgZGVsZXRlcyByZW1vdGUgc3RyaW5ncy5qc29uXG4gKiBJZiBhcHAgZG9lcyBub3QgaGF2ZSBzdHJpbmdzLnhtbCB3ZSBwdXNoIGFuIGVtcHR5IGpzb24gb2JqZWN0IHRvIHJlbW90ZVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZSBhYmJyZXZpYXRpb24sIGZvciBleGFtcGxlICdmcicuIFRoZSBkZWZhdWx0IGxhbmd1YWdlXG4gKiBpcyB1c2VkIGlmIHRoaXMgYXJndW1lbnQgaXMgbm90IGRlZmluZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIERyaXZlciBvcHRpb25zIGRpY3Rpb25hcnkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGljdGlvbmFyeSwgd2hlcmUgc3RyaW5nIHJlc291cmNlIGlkZW50aWZpZXJzIGFyZSBrZXlzXG4gKiBhbG9uZyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2Ugb3IgYW4gZW1wdHkgb2JqZWN0XG4gKiBpZiBubyBtYXRjaGluZyByZXNvdXJjZXMgd2VyZSBleHRyYWN0ZWQuXG4gKi9cbmhlbHBlcnMucHVzaFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiBwdXNoU3RyaW5ncyAobGFuZ3VhZ2UsIGFkYiwgb3B0cykge1xuICBjb25zdCByZW1vdGVEaXIgPSAnL2RhdGEvbG9jYWwvdG1wJztcbiAgY29uc3Qgc3RyaW5nc0pzb24gPSAnc3RyaW5ncy5qc29uJztcbiAgY29uc3QgcmVtb3RlRmlsZSA9IHBhdGgucG9zaXgucmVzb2x2ZShyZW1vdGVEaXIsIHN0cmluZ3NKc29uKTtcblxuICAvLyBjbGVhbiB1cCByZW1vdGUgc3RyaW5nLmpzb24gaWYgcHJlc2VudFxuICBhd2FpdCBhZGIucmltcmFmKHJlbW90ZUZpbGUpO1xuXG4gIGxldCBhcHA7XG4gIHRyeSB7XG4gICAgYXBwID0gb3B0cy5hcHAgfHwgYXdhaXQgYWRiLnB1bGxBcGsob3B0cy5hcHBQYWNrYWdlLCBvcHRzLnRtcERpcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5pbmZvKGBGYWlsZWQgdG8gcHVsbCBhbiBhcGsgZnJvbSAnJHtvcHRzLmFwcFBhY2thZ2V9JyB0byAnJHtvcHRzLnRtcERpcn0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlmIChfLmlzRW1wdHkob3B0cy5hcHBQYWNrYWdlKSB8fCAhKGF3YWl0IGZzLmV4aXN0cyhhcHApKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gYXBwIG9yIHBhY2thZ2Ugc3BlY2lmaWVkLiBSZXR1cm5pbmcgZW1wdHkgc3RyaW5nc2ApO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ3NUbXBEaXIgPSBwYXRoLnJlc29sdmUob3B0cy50bXBEaXIsIG9wdHMuYXBwUGFja2FnZSk7XG4gIHRyeSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdFeHRyYWN0aW5nIHN0cmluZ3MgZnJvbSBhcGsnLCBhcHAsIGxhbmd1YWdlLCBzdHJpbmdzVG1wRGlyKTtcbiAgICBjb25zdCB7YXBrU3RyaW5ncywgbG9jYWxQYXRofSA9IGF3YWl0IGFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgc3RyaW5nc1RtcERpcik7XG4gICAgYXdhaXQgYWRiLnB1c2gobG9jYWxQYXRoLCByZW1vdGVEaXIpO1xuICAgIHJldHVybiBhcGtTdHJpbmdzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgQ291bGQgbm90IGdldCBzdHJpbmdzLCBjb250aW51aW5nIGFueXdheS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgYXdhaXQgYWRiLnNoZWxsKCdlY2hvJywgW2Ane30nID4gJHtyZW1vdGVGaWxlfWBdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoc3RyaW5nc1RtcERpcik7XG4gIH1cbiAgcmV0dXJuIHt9O1xufTtcblxuaGVscGVycy51bmxvY2tXaXRoVUlBdXRvbWF0aW9uID0gYXN5bmMgZnVuY3Rpb24gdW5sb2NrV2l0aFVJQXV0b21hdGlvbiAoZHJpdmVyLCBhZGIsIHVubG9ja0NhcGFiaWxpdGllcykge1xuICBsZXQgdW5sb2NrVHlwZSA9IHVubG9ja0NhcGFiaWxpdGllcy51bmxvY2tUeXBlO1xuICBpZiAoIXVubG9ja2VyLmlzVmFsaWRVbmxvY2tUeXBlKHVubG9ja1R5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVubG9jayB0eXBlICR7dW5sb2NrVHlwZX1gKTtcbiAgfVxuICBsZXQgdW5sb2NrS2V5ID0gdW5sb2NrQ2FwYWJpbGl0aWVzLnVubG9ja0tleTtcbiAgaWYgKCF1bmxvY2tlci5pc1ZhbGlkS2V5KHVubG9ja1R5cGUsIHVubG9ja0tleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgdW5sb2NrS2V5ICR7dW5sb2NrS2V5fSBjYXBhYmlsaXR5IGZvciB1bmxvY2tUeXBlICR7dW5sb2NrVHlwZX1gKTtcbiAgfVxuICBjb25zdCB1bmxvY2tNZXRob2QgPSB7XG4gICAgW1BJTl9VTkxPQ0tdOiB1bmxvY2tlci5waW5VbmxvY2ssXG4gICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogdW5sb2NrZXIucGluVW5sb2NrV2l0aEtleUV2ZW50LFxuICAgIFtQQVNTV09SRF9VTkxPQ0tdOiB1bmxvY2tlci5wYXNzd29yZFVubG9jayxcbiAgICBbUEFUVEVSTl9VTkxPQ0tdOiB1bmxvY2tlci5wYXR0ZXJuVW5sb2NrLFxuICAgIFtGSU5HRVJQUklOVF9VTkxPQ0tdOiB1bmxvY2tlci5maW5nZXJwcmludFVubG9ja1xuICB9W3VubG9ja1R5cGVdO1xuICBhd2FpdCB1bmxvY2tNZXRob2QoYWRiLCBkcml2ZXIsIHVubG9ja0NhcGFiaWxpdGllcyk7XG59O1xuXG5oZWxwZXJzLnVubG9ja1dpdGhIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2tXaXRoSGVscGVyQXBwIChhZGIpIHtcbiAgbG9nZ2VyLmluZm8oJ1VubG9ja2luZyBzY3JlZW4nKTtcblxuICAvLyBVbmxvY2sgc3VjY2VlZCB3aXRoIGEgY291cGxlIG9mIHJldHJpZXMuXG4gIGxldCBmaXJzdFJ1biA9IHRydWU7XG4gIGF3YWl0IHJldHJ5KDMsIGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEhlbHBlciAoKSB7XG4gICAgLy8gVG8gcmVkdWNlIGEgdGltZSB0byBjYWxsIGFkYi5pc1NjcmVlbkxvY2tlZCgpIHNpbmNlIGBhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dgIGlzIGVhc3kgdG8gaGFuZyBhZGIgY29tbWFuZHNcbiAgICBpZiAoZmlyc3RSdW4pIHtcbiAgICAgIGZpcnN0UnVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgRXJyb3IgaW4gaXNTY3JlZW5Mb2NrZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICBsb2dnZXIud2FybignXCJhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dcIiBjb21tYW5kIGhhcyB0aW1lZCBvdXQuJyk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdUaGUgcmVhc29uIG9mIHRoaXMgdGltZW91dCBpcyB0aGUgZGVsYXllZCBhZGIgcmVzcG9uc2UuIFJlc2V0dGluZyBhZGIgc2VydmVyIGNhbiBpbXByb3ZlIGl0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKGBMYXVuY2hpbmcgJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbChbXG4gICAgICAnYW0nLCAnc3RhcnQnLFxuICAgICAgJy1uJywgYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWAsXG4gICAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAgICctZicsICcweDEwMjAwMDAwJyxcbiAgICBdKTtcbiAgICBhd2FpdCBCLmRlbGF5KDEwMDApO1xuICB9KTtcbn07XG5cbmhlbHBlcnMudW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdW5sb2NrIChkcml2ZXIsIGFkYiwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgIGxvZ2dlci5pbmZvKCdTY3JlZW4gYWxyZWFkeSB1bmxvY2tlZCwgZG9pbmcgbm90aGluZycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZygnU2NyZWVuIGlzIGxvY2tlZCwgdHJ5aW5nIHRvIHVubG9jaycpO1xuICBpZiAoXy5pc1VuZGVmaW5lZChjYXBhYmlsaXRpZXMudW5sb2NrVHlwZSkpIHtcbiAgICBsb2dnZXIud2FybignVXNpbmcgYXBwIHVubG9jaywgdGhpcyBpcyBnb2luZyB0byBiZSBkZXByZWNhdGVkIScpO1xuICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrV2l0aEhlbHBlckFwcChhZGIpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrV2l0aFVJQXV0b21hdGlvbihkcml2ZXIsIGFkYiwge3VubG9ja1R5cGU6IGNhcGFiaWxpdGllcy51bmxvY2tUeXBlLCB1bmxvY2tLZXk6IGNhcGFiaWxpdGllcy51bmxvY2tLZXl9KTtcbiAgICBhd2FpdCBoZWxwZXJzLnZlcmlmeVVubG9jayhhZGIsIGNhcGFiaWxpdGllcy51bmxvY2tTdWNjZXNzVGltZW91dCk7XG4gIH1cbn07XG5cbmhlbHBlcnMudmVyaWZ5VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VW5sb2NrIChhZGIsIHVubG9ja1N1Y2Nlc3NUaW1lb3V0KSB7XG4gIGxldCBzdWNjZXNzVGltZW91dCA9IHVubG9ja1N1Y2Nlc3NUaW1lb3V0IHx8IDIwMDA7XG4gIGF3YWl0IHJldHJ5SW50ZXJ2YWwoc3VjY2Vzc1RpbWVvdXQgLyAxMDAwLCBzdWNjZXNzVGltZW91dCwgYXN5bmMgKCkgPT4ge1xuICAgIGlmIChhd2FpdCBhZGIuaXNTY3JlZW5Mb2NrZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY3JlZW4gZGlkIG5vdCB1bmxvY2sgc3VjY2Vzc2Z1bGx5LCByZXRyeWluZycpO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoJ1NjcmVlbiB1bmxvY2tlZCBzdWNjZXNzZnVsbHknKTtcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmluaXREZXZpY2UgPSBhc3luYyBmdW5jdGlvbiBpbml0RGV2aWNlIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIHNraXBEZXZpY2VJbml0aWFsaXphdGlvbixcbiAgICBsb2NhbGUsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbG9jYWxlU2NyaXB0LFxuICAgIHVuaWNvZGVLZXlib2FyZCxcbiAgICBkaXNhYmxlV2luZG93QW5pbWF0aW9uLFxuICAgIHNraXBVbmxvY2ssXG4gICAgbW9ja0xvY2F0aW9uQXBwLFxuICAgIHNraXBMb2djYXRDYXB0dXJlLFxuICAgIGxvZ2NhdEZvcm1hdCxcbiAgICBsb2djYXRGaWx0ZXJTcGVjcyxcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKHNraXBEZXZpY2VJbml0aWFsaXphdGlvbikge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcERldmljZUluaXRpYWxpemF0aW9uJyBpcyBzZXQuIFNraXBwaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi5gKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBhZGIud2FpdEZvckRldmljZSgpO1xuICAgIC8vIHB1c2hTZXR0aW5nc0FwcCByZXF1aXJlZCBiZWZvcmUgY2FsbGluZyBlbnN1cmVEZXZpY2VMb2NhbGUgZm9yIEFQSSBMZXZlbCAyNCtcblxuICAgIC8vIFNvbWUgZmVhdHVyZSBzdWNoIGFzIGxvY2F0aW9uL3dpZmkgYXJlIG5vdCBuZWNlc3NhcnkgZm9yIGFsbCB1c2VycyxcbiAgICAvLyBidXQgdGhleSByZXF1aXJlIHRoZSBzZXR0aW5ncyBhcHAuIFNvLCB0cnkgdG8gY29uZmlndXJlIGl0IHdoaWxlIEFwcGl1bVxuICAgIC8vIGRvZXMgbm90IHRocm93IGVycm9yIGV2ZW4gaWYgdGhleSBmYWlsLlxuICAgIGNvbnN0IHNob3VsZFRocm93RXJyb3IgPSBsYW5ndWFnZVxuICAgICAgfHwgbG9jYWxlXG4gICAgICB8fCBsb2NhbGVTY3JpcHRcbiAgICAgIHx8IHVuaWNvZGVLZXlib2FyZFxuICAgICAgfHwgZGlzYWJsZVdpbmRvd0FuaW1hdGlvblxuICAgICAgfHwgIXNraXBVbmxvY2s7XG4gICAgYXdhaXQgaGVscGVycy5wdXNoU2V0dGluZ3NBcHAoYWRiLCBzaG91bGRUaHJvd0Vycm9yKTtcbiAgfVxuXG4gIGlmICghaGVscGVycy5pc0VtdWxhdG9yKGFkYiwgb3B0cykgJiYgKG1vY2tMb2NhdGlvbkFwcCB8fCBfLmlzVW5kZWZpbmVkKG1vY2tMb2NhdGlvbkFwcCkpKSB7XG4gICAgYXdhaXQgaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAoYWRiLCBtb2NrTG9jYXRpb25BcHAgfHwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCk7XG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgfHwgbG9jYWxlKSB7XG4gICAgYXdhaXQgaGVscGVycy5lbnN1cmVEZXZpY2VMb2NhbGUoYWRiLCBsYW5ndWFnZSwgbG9jYWxlLCBsb2NhbGVTY3JpcHQpO1xuICB9XG5cbiAgaWYgKHNraXBMb2djYXRDYXB0dXJlKSB7XG4gICAgbG9nZ2VyLmluZm8oYCdza2lwTG9nY2F0Q2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2djYXQgY2FwdHVyZS5gKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBhZGIuc3RhcnRMb2djYXQoe1xuICAgICAgZm9ybWF0OiBsb2djYXRGb3JtYXQsXG4gICAgICBmaWx0ZXJTcGVjczogbG9nY2F0RmlsdGVyU3BlY3MsXG4gICAgfSk7XG4gIH1cblxuICBpZiAodW5pY29kZUtleWJvYXJkKSB7XG4gICAgcmV0dXJuIGF3YWl0IGhlbHBlcnMuaW5pdFVuaWNvZGVLZXlib2FyZChhZGIpO1xuICB9XG59O1xuXG5oZWxwZXJzLnJlbW92ZU51bGxQcm9wZXJ0aWVzID0gZnVuY3Rpb24gcmVtb3ZlTnVsbFByb3BlcnRpZXMgKG9iaikge1xuICBmb3IgKGxldCBrZXkgb2YgXy5rZXlzKG9iaikpIHtcbiAgICBpZiAoXy5pc051bGwob2JqW2tleV0pIHx8IF8uaXNVbmRlZmluZWQob2JqW2tleV0pKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLnRydW5jYXRlRGVjaW1hbHMgPSBmdW5jdGlvbiB0cnVuY2F0ZURlY2ltYWxzIChudW1iZXIsIGRpZ2l0cykge1xuICBsZXQgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBkaWdpdHMpLFxuICAgICAgYWRqdXN0ZWROdW0gPSBudW1iZXIgKiBtdWx0aXBsaWVyLFxuICAgICAgdHJ1bmNhdGVkTnVtID0gTWF0aFthZGp1c3RlZE51bSA8IDAgPyAnY2VpbCcgOiAnZmxvb3InXShhZGp1c3RlZE51bSk7XG5cbiAgcmV0dXJuIHRydW5jYXRlZE51bSAvIG11bHRpcGxpZXI7XG59O1xuXG5oZWxwZXJzLmlzQ2hyb21lQnJvd3NlciA9IGZ1bmN0aW9uIGlzQ2hyb21lQnJvd3NlciAoYnJvd3Nlcikge1xuICByZXR1cm4gXy5pbmNsdWRlcyhPYmplY3Qua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSwgKGJyb3dzZXIgfHwgJycpLnRvTG93ZXJDYXNlKCkpO1xufTtcblxuaGVscGVycy5nZXRDaHJvbWVQa2cgPSBmdW5jdGlvbiBnZXRDaHJvbWVQa2cgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFlbYnJvd3Nlci50b0xvd2VyQ2FzZSgpXSB8fCBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZLmRlZmF1bHQ7XG59O1xuXG5oZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyA9IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyAoc2VydmVyLCBzZXNzaW9uSWQpIHtcbiAgaWYgKCFzZXJ2ZXIgfHwgIV8uaXNGdW5jdGlvbihzZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWN0aXZlSGFuZGxlcnMgPSBhd2FpdCBzZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMoc2Vzc2lvbklkKTtcbiAgZm9yIChjb25zdCBwYXRobmFtZSBvZiBfLmtleXMoYWN0aXZlSGFuZGxlcnMpKSB7XG4gICAgYXdhaXQgc2VydmVyLnJlbW92ZVdlYlNvY2tldEhhbmRsZXIocGF0aG5hbWUpO1xuICB9XG59O1xuXG4vKipcbiAqIFRha2VzIGEgZGVzaXJlZCBjYXBhYmlsaXR5IGFuZCB0cmllcyB0byBKU09OLnBhcnNlIGl0IGFzIGFuIGFycmF5LFxuICogYW5kIGVpdGhlciByZXR1cm5zIHRoZSBwYXJzZWQgYXJyYXkgb3IgYSBzaW5nbGV0b24gYXJyYXkuXG4gKlxuICogQHBhcmFtIHthbnl9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnBhcnNlQXJyYXkgPSBmdW5jdGlvbiBwYXJzZUFycmF5IChjYXApIHtcbiAgbGV0IHBhcnNlZENhcHM7XG4gIHRyeSB7XG4gICAgcGFyc2VkQ2FwcyA9IEpTT04ucGFyc2UoY2FwKTtcbiAgfSBjYXRjaCAoaWduKSB7IH1cblxuICBpZiAoXy5pc0FycmF5KHBhcnNlZENhcHMpKSB7XG4gICAgcmV0dXJuIHBhcnNlZENhcHM7XG4gIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhjYXApKSB7XG4gICAgcmV0dXJuIFtjYXBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBtdXN0IHByb3ZpZGUgYSBzdHJpbmcgb3IgSlNPTiBBcnJheTsgcmVjZWl2ZWQgJHtjYXB9YCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGRlc2lyZWQgY2FwYWJpbGl0aWVzLiBSZXR1cm5zIHRydWUgaWYgY2FwYWJpbGl0eSBpcyB2YWxpZFxuICpcbiAqIEBwYXJhbSB7Kn0gY2FwIEEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY2FwcyBoYXMgaW52YWxpZCBjYXBhYmlsaXR5XG4gKi9cbmhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyA9IGZ1bmN0aW9uIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgaWYgKGNhcHMuYnJvd3Nlck5hbWUpIHtcbiAgICBpZiAoY2Fwcy5hcHApIHtcbiAgICAgIC8vIHdhcm4gaWYgdGhlIGNhcGFiaWxpdGllcyBoYXZlIGJvdGggYGFwcGAgYW5kIGBicm93c2VyLCBhbHRob3VnaCB0aGlzIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGxvZ2dlci53YXJuKGBUaGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgc2hvdWxkIGdlbmVyYWxseSBub3QgaW5jbHVkZSBib3RoIGFuICdhcHAnIGFuZCBhICdicm93c2VyTmFtZSdgKTtcbiAgICB9XG4gICAgaWYgKGNhcHMuYXBwUGFja2FnZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYFRoZSBkZXNpcmVkIHNob3VsZCBub3QgaW5jbHVkZSBib3RoIG9mIGFuICdhcHBQYWNrYWdlJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnBhcnNlQXJyYXkoY2Fwcy51bmluc3RhbGxPdGhlclBhY2thZ2VzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwidW5pbnN0YWxsT3RoZXJQYWNrYWdlc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGp1c3QgdGhlIGNhcGFiaWxpdGllcyBmb3IgYSBicm93c2VyIHNlc3Npb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY2FwcyAtIEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdFxuICogISEhIFRoZSBvYmplY3QgaXMgbXV0YXRlZCBieSB0aGlzIG1ldGhvZCBjYWxsICEhIVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHNhbWUgcG9zc2libHkgbXV0YXRlZCBgb3B0c2AgaW5zdGFuY2UuXG4gKiBObyBtdXRhdGlvbiBpcyBoYXBwZW5pbmcgaXMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZlxuICogYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBzIGhhdmUgYWxyZWFkeSBiZWVuIHByb3ZpZGVkLlxuICovXG5oZWxwZXJzLmFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyA9IGZ1bmN0aW9uIGFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyAoY2FwcyA9IHt9KSB7XG4gIGNvbnN0IHsgYnJvd3Nlck5hbWUgfSA9IGNhcHM7XG4gIGxvZ2dlci5pbmZvKGBUaGUgY3VycmVudCBzZXNzaW9uIGlzIGNvbnNpZGVyZWQgYnJvd3Nlci1iYXNlZGApO1xuICBsb2dnZXIuaW5mbyhgU3VwcG9ydGVkIGJyb3dzZXIgbmFtZXM6ICR7SlNPTi5zdHJpbmdpZnkoXy5rZXlzKENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkpKX1gKTtcbiAgaWYgKGNhcHMuYXBwUGFja2FnZSB8fCBjYXBzLmFwcEFjdGl2aXR5KSB7XG4gICAgbG9nZ2VyLmluZm8oYE5vdCBvdmVycmlkaW5nIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgZm9yICcke2Jyb3dzZXJOYW1lfScgYCArXG4gICAgICAnYmVjYXVzZSBzb21lIG9mIHRoZW0gaGF2ZSBiZWVuIGFscmVhZHkgcHJvdmlkZWQnKTtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIGNvbnN0IHtwa2csIGFjdGl2aXR5fSA9IHRoaXMuZ2V0Q2hyb21lUGtnKGJyb3dzZXJOYW1lKTtcbiAgY2Fwcy5hcHBQYWNrYWdlID0gcGtnO1xuICBjYXBzLmFwcEFjdGl2aXR5ID0gYWN0aXZpdHk7XG4gIGxvZ2dlci5pbmZvKGBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdGllcyBoYXZlIGJlZW4gYXV0b21hdGljYWxseSBzZXQgdG8gJHtwa2d9LyR7YWN0aXZpdHl9IGAgK1xuICAgIGBmb3IgJyR7YnJvd3Nlck5hbWV9J2ApO1xuICBsb2dnZXIuaW5mbyhgQ29uc2lkZXIgY2hhbmdpbmcgdGhlIGJyb3dzZXJOYW1lIHRvIHRoZSBvbmUgZnJvbSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgYnJvd3NlciBuYW1lcyBgICtcbiAgICBgb3IgcHJvdmlkZSBjdXN0b20gYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXR5IHZhbHVlcyBpZiB0aGUgYXV0b21hdGljYWxseSBhc3NpZ25lZCBvbmVzIGRvIGAgK1xuICAgIGBub3QgbWFrZSBzZW5zZWApO1xuICByZXR1cm4gY2Fwcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZGV2aWNlIHVuZGVyIHRlc3QgaXMgYW4gZW11bGF0b3JcbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIC0gYXBwaXVtLWFkYiBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBkcml2ZXIgb3B0aW9ucyBtYXBwaW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBkZXZpY2UgaXMgYW4gQW5kcm9pZCBlbXVsYXRvclxuICovXG5oZWxwZXJzLmlzRW11bGF0b3IgPSBmdW5jdGlvbiBpc0VtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3QgcG9zc2libGVOYW1lcyA9IFtvcHRzLnVkaWQsIGFkYj8uY3VyRGV2aWNlSWRdO1xuICByZXR1cm4gISFvcHRzLmF2ZCB8fCBwb3NzaWJsZU5hbWVzLnNvbWUoKHgpID0+IEVNVUxBVE9SX1BBVFRFUk4udGVzdCh4KSk7XG59O1xuXG5oZWxwZXJzLmJvb3RzdHJhcCA9IEJvb3RzdHJhcDtcbmhlbHBlcnMudW5sb2NrZXIgPSB1bmxvY2tlcjtcblxuZXhwb3J0IHsgaGVscGVycywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgQVBQX1NUQVRFLCBwcmVwYXJlQXZkQXJncywgZW5zdXJlTmV0d29ya1NwZWVkIH07XG5leHBvcnQgZGVmYXVsdCBoZWxwZXJzO1xuIl0sImZpbGUiOiJsaWIvYW5kcm9pZC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
904
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hbmRyb2lkLWhlbHBlcnMuanMiXSwibmFtZXMiOlsiUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQiLCJDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZIiwiY2hyb21lIiwicGtnIiwiYWN0aXZpdHkiLCJjaHJvbWl1bSIsImNocm9tZWJldGEiLCJicm93c2VyIiwiZGVmYXVsdCIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZIiwiRU1VTEFUT1JfUEFUVEVSTiIsIkFQUF9TVEFURSIsIk9iamVjdCIsImZyZWV6ZSIsIk5PVF9JTlNUQUxMRUQiLCJOT1RfUlVOTklORyIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsImVuc3VyZU5ldHdvcmtTcGVlZCIsImFkYiIsIm5ldHdvcmtTcGVlZCIsIl8iLCJ2YWx1ZXMiLCJORVRXT1JLX1NQRUVEIiwiaW5jbHVkZXMiLCJsb2dnZXIiLCJ3YXJuIiwiRlVMTCIsInByZXBhcmVBdmRBcmdzIiwib3B0cyIsImlzSGVhZGxlc3MiLCJhdmRBcmdzIiwicmVzdWx0IiwiaXNBcnJheSIsInB1c2giLCJ1dGlsIiwic2hlbGxQYXJzZSIsInRvQ3JlZGVudGlhbFR5cGUiLCJ1bmxvY2tUeXBlIiwiUElOX1VOTE9DSyIsIlBJTl9VTkxPQ0tfS0VZX0VWRU5UIiwiUEFTU1dPUkRfVU5MT0NLIiwiUEFUVEVSTl9VTkxPQ0siLCJFcnJvciIsImhlbHBlcnMiLCJjcmVhdGVCYXNlQURCIiwiYWRiUG9ydCIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJ1c2VLZXlzdG9yZSIsImtleXN0b3JlUGF0aCIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsImFsbG93T2ZmbGluZURldmljZXMiLCJhbGxvd0RlbGF5QWRiIiwiQURCIiwiY3JlYXRlQURCIiwicHJlcGFyZUVtdWxhdG9yIiwiYXZkIiwiYXZkRW52IiwiZW52IiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJjb3VudHJ5IiwiYXZkTGF1bmNoVGltZW91dCIsImxhdW5jaFRpbWVvdXQiLCJhdmRSZWFkeVRpbWVvdXQiLCJyZWFkeVRpbWVvdXQiLCJhdmROYW1lIiwicmVwbGFjZSIsInJ1bm5pbmdBVkQiLCJnZXRSdW5uaW5nQVZEIiwiYXJncyIsImRlYnVnIiwia2lsbEVtdWxhdG9yIiwibGF1bmNoQVZEIiwiZW5zdXJlRGV2aWNlTG9jYWxlIiwic2NyaXB0IiwiaXNTdHJpbmciLCJzZXREZXZpY2VMYW5ndWFnZUNvdW50cnkiLCJlbnN1cmVDdXJyZW50TG9jYWxlIiwibWVzc2FnZSIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsInVkaWQiLCJlbVBvcnQiLCJjdXJEZXZpY2VJZCIsImVtdWxhdG9yUG9ydCIsImluZm8iLCJkZXZpY2VzIiwiZ2V0RGV2aWNlc1dpdGhSZXRyeSIsIm1hcCIsImVycm9yQW5kVGhyb3ciLCJnZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nIiwicGxhdGZvcm1WZXJzaW9uIiwidHJpbSIsInNlbXZlciIsImNvZXJjZSIsImF2YWlsRGV2aWNlcyIsInBhcnRpYWxNYXRjaENhbmRpZGF0ZSIsImRldmljZSIsInNldERldmljZUlkIiwicmF3RGV2aWNlT1MiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VPUyIsImJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCIsInZhbGlkIiwiYm90aFZlcnNpb25zQXJlU3RyaW5ncyIsInZlcnNpb24iLCJ0b0xvd2VyIiwibWFqb3IiLCJtaW5vciIsImd0Iiwia2V5cyIsImpvaW4iLCJzZXRFbXVsYXRvclBvcnQiLCJ2YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzIiwia2V5IiwibmFtZSIsIm1hdGNoIiwiZXhlYyIsImluZGV4Iiwic3Vic3RyaW5nIiwiZ2V0TGF1bmNoSW5mbyIsImFwcCIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiYXBrUGFja2FnZSIsImFwa0FjdGl2aXR5IiwicGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0IiwicmVzZXRBcHAiLCJmYXN0UmVzZXQiLCJmdWxsUmVzZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwiaXNJbnN0YWxsZWQiLCJpc0FwcEluc3RhbGxlZCIsImZvcmNlU3RvcCIsImlnbiIsIm91dHB1dCIsImNsZWFyIiwidG9Mb3dlckNhc2UiLCJncmFudEFsbFBlcm1pc3Npb25zIiwiZXJyb3IiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInRpbWVvdXQiLCJpbnN0YWxsQXBrIiwiZW5mb3JjZUFwcEluc3RhbGwiLCJhcHBTdGF0ZSIsIndhc1VuaW5zdGFsbGVkIiwiaW5zdGFsbE9yVXBncmFkZSIsImVuZm9yY2VDdXJyZW50QnVpbGQiLCJpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCIsIkFQUF9JTlNUQUxMX1NUQVRFIiwiaW5zdGFsbE90aGVyQXBrcyIsIm90aGVyQXBwcyIsIkIiLCJhbGwiLCJvdGhlckFwcCIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJhcHBQYWNrYWdlcyIsImZpbHRlclBhY2thZ2VzIiwiZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIiwicGFja2FnZXNTdHJpbmciLCJzaGVsbCIsImFwcFBhY2thZ2VzQXJyYXkiLCJzcGxpdCIsIkVPTCIsImRpZmZlcmVuY2UiLCJlcnIiLCJpbml0VW5pY29kZUtleWJvYXJkIiwiZGVmYXVsdElNRSIsImFwcGl1bUlNRSIsImVuYWJsZUlNRSIsInNldElNRSIsInNldE1vY2tMb2NhdGlvbkFwcCIsImdldEFwaUxldmVsIiwiaW5zdGFsbEhlbHBlckFwcCIsImFwa1BhdGgiLCJwYWNrYWdlSWQiLCJyZXRyeUluc3RhbGxIZWxwZXJBcHAiLCJwdXNoU2V0dGluZ3NBcHAiLCJ0aHJvd0Vycm9yIiwic2V0dGluZ3NBcGtQYXRoIiwicHJvY2Vzc0V4aXN0cyIsInBlcm1zIiwieCIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJwdXNoU3RyaW5ncyIsInJlbW90ZURpciIsInN0cmluZ3NKc29uIiwicmVtb3RlRmlsZSIsInBhdGgiLCJwb3NpeCIsInJlc29sdmUiLCJyaW1yYWYiLCJwdWxsQXBrIiwidG1wRGlyIiwiaXNFbXB0eSIsImZzIiwiZXhpc3RzIiwic3RyaW5nc1RtcERpciIsImFwa1N0cmluZ3MiLCJsb2NhbFBhdGgiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJ1bmxvY2tXaXRoSGVscGVyQXBwIiwiZmlyc3RSdW4iLCJsYXVuY2hIZWxwZXIiLCJpc1NjcmVlbkxvY2tlZCIsImUiLCJkZWxheSIsInVubG9jayIsImRyaXZlciIsImNhcGFiaWxpdGllcyIsInVubG9ja0tleSIsInVubG9ja1N0cmF0ZWd5IiwidW5sb2NrU3VjY2Vzc1RpbWVvdXQiLCJ1bmxvY2tlciIsInZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzIiwiRklOR0VSUFJJTlRfVU5MT0NLIiwiaXNOaWwiLCJpc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkIiwiZmFzdFVubG9jayIsImNyZWRlbnRpYWwiLCJjcmVkZW50aWFsVHlwZSIsInVubG9ja01ldGhvZCIsInBpblVubG9jayIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBhc3N3b3JkVW5sb2NrIiwicGF0dGVyblVubG9jayIsImZpbmdlcnByaW50VW5sb2NrIiwidmVyaWZ5VW5sb2NrIiwidGltZW91dE1zIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImluaXREZXZpY2UiLCJza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24iLCJsb2NhbGVTY3JpcHQiLCJ1bmljb2RlS2V5Ym9hcmQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic2tpcFVubG9jayIsIm1vY2tMb2NhdGlvbkFwcCIsInNraXBMb2djYXRDYXB0dXJlIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJ3YWl0Rm9yRGV2aWNlIiwic2hvdWxkVGhyb3dFcnJvciIsImlzRW11bGF0b3IiLCJpc1VuZGVmaW5lZCIsInN0YXJ0TG9nY2F0IiwiZm9ybWF0IiwiZmlsdGVyU3BlY3MiLCJyZW1vdmVOdWxsUHJvcGVydGllcyIsIm9iaiIsImlzTnVsbCIsInRydW5jYXRlRGVjaW1hbHMiLCJudW1iZXIiLCJkaWdpdHMiLCJtdWx0aXBsaWVyIiwiTWF0aCIsInBvdyIsImFkanVzdGVkTnVtIiwidHJ1bmNhdGVkTnVtIiwiaXNDaHJvbWVCcm93c2VyIiwiZ2V0Q2hyb21lUGtnIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwic2Vzc2lvbklkIiwiaXNGdW5jdGlvbiIsImdldFdlYlNvY2tldEhhbmRsZXJzIiwiYWN0aXZlSGFuZGxlcnMiLCJwYXRobmFtZSIsInJlbW92ZVdlYlNvY2tldEhhbmRsZXIiLCJwYXJzZUFycmF5IiwiY2FwIiwicGFyc2VkQ2FwcyIsIkpTT04iLCJwYXJzZSIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJjYXBzIiwiYnJvd3Nlck5hbWUiLCJhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMiLCJzdHJpbmdpZnkiLCJwb3NzaWJsZU5hbWVzIiwic29tZSIsInRlc3QiLCJib290c3RyYXAiLCJCb290c3RyYXAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLHVCQUF1QixHQUFHLEtBQWhDO0FBRUEsTUFBTUMsK0JBQStCLEdBQUc7QUFDdENDLEVBQUFBLE1BQU0sRUFBRTtBQUNOQyxJQUFBQSxHQUFHLEVBQUUsb0JBREM7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Rkg7O0FBR0EsU0FBT29NLElBQVA7QUFDRCxDQW5CRDs7QUE0QkFwUCxPQUFPLENBQUNvTixVQUFSLEdBQXFCLFNBQVNBLFVBQVQsQ0FBcUI3TyxHQUFyQixFQUEwQlUsSUFBMUIsRUFBZ0M7QUFDbkQsUUFBTXVRLGFBQWEsR0FBRyxDQUFDdlEsSUFBSSxDQUFDMkQsSUFBTixFQUFZckUsR0FBWixhQUFZQSxHQUFaLHVCQUFZQSxHQUFHLENBQUV1RSxXQUFqQixDQUF0QjtBQUNBLFNBQU8sQ0FBQyxDQUFDN0QsSUFBSSxDQUFDa0MsR0FBUCxJQUFjcU8sYUFBYSxDQUFDQyxJQUFkLENBQW9CbEcsQ0FBRCxJQUFPekwsZ0JBQWdCLENBQUM0UixJQUFqQixDQUFzQm5HLENBQXRCLENBQTFCLENBQXJCO0FBQ0QsQ0FIRDs7QUFLQXZKLE9BQU8sQ0FBQzJQLFNBQVIsR0FBb0JDLGtCQUFwQjtBQUNBNVAsT0FBTyxDQUFDc0wsUUFBUixHQUFtQkEsc0JBQW5CO2VBR2V0TCxPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmV0cnksIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGZzLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgcGF0aCBhcyBzZXR0aW5nc0Fwa1BhdGggfSBmcm9tICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuaW1wb3J0IEJvb3RzdHJhcCBmcm9tICcuL2Jvb3RzdHJhcCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgQURCIGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHtcbiAgZGVmYXVsdCBhcyB1bmxvY2tlciwgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsXG4gIFBBU1NXT1JEX1VOTE9DSywgUEFUVEVSTl9VTkxPQ0ssIEZJTkdFUlBSSU5UX1VOTE9DS1xufSBmcm9tICcuL3VubG9jay1oZWxwZXJzJztcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuY29uc3QgUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQgPSA5MDAwMDsgLy8gbWlsbGlzZWNvbmRzXG4vLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvY2hyb21lL2Jyb3dzZXIvZGV2dG9vbHMvZGV2aWNlL2FuZHJvaWRfZGV2aWNlX2luZm9fcXVlcnkuY2NcbmNvbnN0IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkgPSB7XG4gIGNocm9tZToge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG4gIGNocm9taXVtOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICcuQ2hyb21lU2hlbGxBY3Rpdml0eScsXG4gIH0sXG4gIGNocm9tZWJldGE6IHtcbiAgICBwa2c6ICdjb20uY2hyb21lLmJldGEnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBicm93c2VyOiB7XG4gICAgcGtnOiAnY29tLmFuZHJvaWQuYnJvd3NlcicsXG4gICAgYWN0aXZpdHk6ICdjb20uYW5kcm9pZC5icm93c2VyLkJyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gICdjaHJvbWl1bS1icm93c2VyJzoge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICAnY2hyb21pdW0td2Vidmlldyc6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbC5XZWJWaWV3QnJvd3NlckFjdGl2aXR5JyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG59O1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1BLR19JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1VOTE9DS19BQ1RJVklUWSA9ICcuVW5sb2NrJztcbmNvbnN0IEVNVUxBVE9SX1BBVFRFUk4gPSAvXFxiZW11bGF0b3JcXGIvaTtcbi8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaW4gc3luYyB3aXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGUveGN1aWFwcGxpY2F0aW9uc3RhdGVydW5uaW5nYmFja2dyb3VuZD9sYW5ndWFnZT1vYmpjXG5jb25zdCBBUFBfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX0lOU1RBTExFRDogMCxcbiAgTk9UX1JVTk5JTkc6IDEsXG4gIFJVTk5JTkdfSU5fQkFDS0dST1VORDogMyxcbiAgUlVOTklOR19JTl9GT1JFR1JPVU5EOiA0XG59KTtcblxuXG5mdW5jdGlvbiBlbnN1cmVOZXR3b3JrU3BlZWQgKGFkYiwgbmV0d29ya1NwZWVkKSB7XG4gIGlmIChfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCkuaW5jbHVkZXMobmV0d29ya1NwZWVkKSkge1xuICAgIHJldHVybiBuZXR3b3JrU3BlZWQ7XG4gIH1cbiAgbG9nZ2VyLndhcm4oYFdyb25nIG5ldHdvcmsgc3BlZWQgcGFyYW0gJyR7bmV0d29ya1NwZWVkfScsIHVzaW5nIGRlZmF1bHQ6ICR7YWRiLk5FVFdPUktfU1BFRUQuRlVMTH0uIGAgK1xuICAgIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgcmV0dXJuIGFkYi5ORVRXT1JLX1NQRUVELkZVTEw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBdmRBcmdzIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtTcGVlZCxcbiAgICBpc0hlYWRsZXNzLFxuICAgIGF2ZEFyZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGF2ZEFyZ3MpIHtcbiAgICBpZiAoXy5pc0FycmF5KGF2ZEFyZ3MpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hdmRBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKHV0aWwuc2hlbGxQYXJzZShgJHthdmRBcmdzfWApKSk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrU3BlZWQpIHtcbiAgICByZXN1bHQucHVzaCgnLW5ldHNwZWVkJywgZW5zdXJlTmV0d29ya1NwZWVkKGFkYiwgbmV0d29ya1NwZWVkKSk7XG4gIH1cbiAgaWYgKGlzSGVhZGxlc3MpIHtcbiAgICByZXN1bHQucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHRvQ3JlZGVudGlhbFR5cGUgKHVubG9ja1R5cGUpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFtQSU5fVU5MT0NLXTogJ3BpbicsXG4gICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogJ3BpbicsXG4gICAgW1BBU1NXT1JEX1VOTE9DS106ICdwYXNzd29yZCcsXG4gICAgW1BBVFRFUk5fVU5MT0NLXTogJ3BhdHRlcm4nLFxuICB9W3VubG9ja1R5cGVdO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayB0eXBlICcke3VubG9ja1R5cGV9JyBpcyBub3Qga25vd25gKTtcbn1cblxuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmhlbHBlcnMuY3JlYXRlQmFzZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJhc2VBREIgKG9wdHMgPSB7fSkge1xuICAvLyBmaWx0ZXIgb3V0IGFueSB1bndhbnRlZCBvcHRpb25zIHNlbnQgaW5cbiAgLy8gdGhpcyBsaXN0IHNob3VsZCBiZSB1cGRhdGVkIGFzIEFEQiB0YWtlcyBtb3JlIGFyZ3VtZW50c1xuICBjb25zdCB7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCBBREIuY3JlYXRlQURCKHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9KTtcbn07XG5cbmhlbHBlcnMucHJlcGFyZUVtdWxhdG9yID0gYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUVtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIGF2ZCxcbiAgICBhdmRFbnY6IGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGU6IGNvdW50cnksXG4gICAgYXZkTGF1bmNoVGltZW91dDogbGF1bmNoVGltZW91dCxcbiAgICBhdmRSZWFkeVRpbWVvdXQ6IHJlYWR5VGltZW91dCxcbiAgfSA9IG9wdHM7XG4gIGlmICghYXZkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbGF1bmNoIEFWRCB3aXRob3V0IEFWRCBuYW1lJyk7XG4gIH1cblxuICBjb25zdCBhdmROYW1lID0gYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGNvbnN0IHJ1bm5pbmdBVkQgPSBhd2FpdCBhZGIuZ2V0UnVubmluZ0FWRChhdmROYW1lKTtcbiAgY29uc3QgYXJncyA9IHByZXBhcmVBdmRBcmdzKGFkYiwgb3B0cyk7XG4gIGlmIChydW5uaW5nQVZEKSB7XG4gICAgaWYgKGFyZ3MuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBLaWxsaW5nICcke2F2ZE5hbWV9JyBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIHdpcGVkIGF0IHN0YXJ0LmApO1xuICAgICAgYXdhaXQgYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdOb3QgbGF1bmNoaW5nIEFWRCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgcnVubmluZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgYXdhaXQgYWRiLmxhdW5jaEFWRChhdmQsIHtcbiAgICBhcmdzLFxuICAgIGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBjb3VudHJ5LFxuICAgIGxhdW5jaFRpbWVvdXQsXG4gICAgcmVhZHlUaW1lb3V0LFxuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IGFuZCBlbnN1cmUgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Miw4fS4gZS5nLiBlbiwgamEgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIFRoZSBjb3VudHJ5IChyZWdpb24pIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdXBwZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Mn0gfCBbMC05XXszfS4gZS5nLiBVUywgSlAgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gVGhlIHNjcmlwdCBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdGl0bGUgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17NH0uIGUuZy4gSGFucyBpbiB6aC1IYW5zLUNOIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxlZCB0byBzZXQgbG9jYWxlIHByb3Blcmx5XG4gKi9cbmhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlID0gYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGV2aWNlTG9jYWxlIChhZGIsIGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGlmICghXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgIV8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICBsb2dnZXIud2Fybihgc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IHJlcXVpcmVzIGxhbmd1YWdlIG9yIGNvdW50cnkuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEdvdCBsYW5ndWFnZTogJyR7bGFuZ3VhZ2V9JyBhbmQgY291bnRyeTogJyR7Y291bnRyeX0nYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLnNldERldmljZUxhbmd1YWdlQ291bnRyeShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KTtcblxuICBpZiAoIWF3YWl0IGFkYi5lbnN1cmVDdXJyZW50TG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHNjcmlwdCA/IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0sIGNvdW50cnk6ICR7Y291bnRyeX0gYW5kIHNjcmlwdDogJHtzY3JpcHR9YCA6IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0gYW5kIGNvdW50cnk6ICR7Y291bnRyeX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCAke21lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIChvcHRzID0ge30pIHtcbiAgLy8gd2UgY2FuIGNyZWF0ZSBhIHRocm93YXdheSBBREIgaW5zdGFuY2UgaGVyZSwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jeVxuICAvLyBvbiBpbnN0YW50aWF0aW5nIG9uIGVhcmxpZXIgKGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgbm8gdWRpZClcbiAgLy8gd2UgY2FuIG9ubHkgdXNlIHRoaXMgQURCIG9iamVjdCBmb3IgY29tbWFuZHMgdGhhdCB3b3VsZCBub3QgYmUgY29uZnVzZWRcbiAgLy8gaWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUgY29ubmVjdGVkXG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgbGV0IHVkaWQgPSBvcHRzLnVkaWQ7XG4gIGxldCBlbVBvcnQgPSBudWxsO1xuXG4gIC8vIGEgc3BlY2lmaWMgYXZkIG5hbWUgd2FzIGdpdmVuLiB0cnkgdG8gaW5pdGlhbGl6ZSB3aXRoIHRoYXRcbiAgaWYgKG9wdHMuYXZkKSB7XG4gICAgYXdhaXQgaGVscGVycy5wcmVwYXJlRW11bGF0b3IoYWRiLCBvcHRzKTtcbiAgICB1ZGlkID0gYWRiLmN1ckRldmljZUlkO1xuICAgIGVtUG9ydCA9IGFkYi5lbXVsYXRvclBvcnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gYXZkIGdpdmVuLiBsZXRzIHRyeSB3aGF0ZXZlcidzIHBsdWdnZWQgaW4gZGV2aWNlcy9lbXVsYXRvcnNcbiAgICBsb2dnZXIuaW5mbygnUmV0cmlldmluZyBkZXZpY2UgbGlzdCcpO1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgYWRiLmdldERldmljZXNXaXRoUmV0cnkoKTtcblxuICAgIC8vIHVkaWQgd2FzIGdpdmVuLCBsZXRzIHRyeSB0byBpbml0IHdpdGggdGhhdCBkZXZpY2VcbiAgICBpZiAodWRpZCkge1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKF8ubWFwKGRldmljZXMsICd1ZGlkJyksIHVkaWQpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBEZXZpY2UgJHt1ZGlkfSB3YXMgbm90IGluIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzYCk7XG4gICAgICB9XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICBvcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGAke29wdHMucGxhdGZvcm1WZXJzaW9ufWAudHJpbSgpO1xuXG4gICAgICAvLyBhIHBsYXRmb3JtIHZlcnNpb24gd2FzIGdpdmVuLiBsZXRzIHRyeSB0byBmaW5kIGEgZGV2aWNlIHdpdGggdGhlIHNhbWUgb3NcbiAgICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbiA9IHNlbXZlci5jb2VyY2Uob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHx8IG9wdHMucGxhdGZvcm1WZXJzaW9uO1xuICAgICAgbG9nZ2VyLmluZm8oYExvb2tpbmcgZm9yIGEgZGV2aWNlIHdpdGggQW5kcm9pZCAnJHtwbGF0Zm9ybVZlcnNpb259J2ApO1xuXG4gICAgICAvLyBpbiBjYXNlIHdlIGZhaWwgdG8gZmluZCBzb21ldGhpbmcsIGdpdmUgdGhlIHVzZXIgYSB1c2VmdWwgbG9nIHRoYXQgaGFzXG4gICAgICAvLyB0aGUgZGV2aWNlIHVkaWRzIGFuZCBvcyB2ZXJzaW9ucyBzbyB0aGV5IGtub3cgd2hhdCdzIGF2YWlsYWJsZVxuICAgICAgY29uc3QgYXZhaWxEZXZpY2VzID0gW107XG4gICAgICBsZXQgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0gbnVsbDtcbiAgICAgIC8vIGZpcnN0IHRyeSBzdGFydGVkIGRldmljZXMvZW11bGF0b3JzXG4gICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICAgIC8vIGRpcmVjdCBhZGIgY2FsbHMgdG8gdGhlIHNwZWNpZmljIGRldmljZVxuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQoZGV2aWNlLnVkaWQpO1xuICAgICAgICBjb25zdCByYXdEZXZpY2VPUyA9IGF3YWl0IGFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgICAgLy8gVGhlIGRldmljZSBPUyBjb3VsZCBlaXRoZXIgYmUgYSBudW1iZXIsIGxpa2UgYDYuMGBcbiAgICAgICAgLy8gb3IgYW4gYWJicmV2aWF0aW9uLCBsaWtlIGBSYFxuICAgICAgICBhdmFpbERldmljZXMucHVzaChgJHtkZXZpY2UudWRpZH0gKCR7cmF3RGV2aWNlT1N9KWApO1xuICAgICAgICBjb25zdCBkZXZpY2VPUyA9IHNlbXZlci5jb2VyY2UocmF3RGV2aWNlT1MpIHx8IHJhd0RldmljZU9TO1xuICAgICAgICBpZiAoIWRldmljZU9TKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgPSBzZW12ZXIudmFsaWQoZGV2aWNlT1MpICYmIHNlbXZlci52YWxpZChwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzID0gXy5pc1N0cmluZyhkZXZpY2VPUykgJiYgXy5pc1N0cmluZyhwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBpZiAoYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkICYmIGRldmljZU9TLnZlcnNpb24gPT09IHBsYXRmb3JtVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgICAgICB8fCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzICYmIF8udG9Mb3dlcihkZXZpY2VPUykgPT09IF8udG9Mb3dlcihwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgICAgICAgLy8gR290IGFuIGV4YWN0IG1hdGNoIC0gcHJvY2VlZCBpbW1lZGlhdGVseVxuICAgICAgICAgIHVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgaXMgbm8gcG9pbnQgdG8gY2hlY2sgZm9yIHBhcnRpYWwgbWF0Y2ggaWYgZWl0aGVyIG9mIHZlcnNpb24gbnVtYmVycyBpcyBub3QgY29lcmNpYmxlXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFfLmluY2x1ZGVzKG9wdHMucGxhdGZvcm1WZXJzaW9uLCAnLicpICYmIHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3JcbiAgICAgICAgICAgIHx8IHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3IgJiYgcGxhdGZvcm1WZXJzaW9uLm1pbm9yID09PSBkZXZpY2VPUy5taW5vcilcbiAgICAgICAgICAgIC8vIEdvdCBhIHBhcnRpYWwgbWF0Y2ggLSBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIG1vc3QgcmVjZW50XG4gICAgICAgICAgICAvLyBkZXZpY2UgdmVyc2lvbiBhdmFpbGFibGUgb24gdGhlIGhvc3Qgc3lzdGVtXG4gICAgICAgICAgICAmJiAocGFydGlhbE1hdGNoQ2FuZGlkYXRlICYmIHNlbXZlci5ndChkZXZpY2VPUywgXy52YWx1ZXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXSlcbiAgICAgICAgICAgICAgICB8fCAhcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSkge1xuICAgICAgICAgIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IHtbZGV2aWNlLnVkaWRdOiBkZXZpY2VPU307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdWRpZCAmJiBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpIHtcbiAgICAgICAgdWRpZCA9IF8ua2V5cyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdO1xuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdWRpZCkge1xuICAgICAgICAvLyB3ZSBjb3VsZG4ndCBmaW5kIGFueXRoaW5nISBxdWl0XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gZmluZCBhbiBhY3RpdmUgZGV2aWNlIG9yIGVtdWxhdG9yIGAgK1xuICAgICAgICAgIGB3aXRoIE9TICR7b3B0cy5wbGF0Zm9ybVZlcnNpb259LiBUaGUgZm9sbG93aW5nIGFyZSBhdmFpbGFibGU6IGAgK1xuICAgICAgICAgIGF2YWlsRGV2aWNlcy5qb2luKCcsICcpKTtcbiAgICAgIH1cblxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGEgdWRpZCB3YXMgbm90IGdpdmVuLCBncmFiIHRoZSBmaXJzdCBkZXZpY2Ugd2Ugc2VlXG4gICAgICB1ZGlkID0gZGV2aWNlc1swXS51ZGlkO1xuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmluZm8oYFVzaW5nIGRldmljZTogJHt1ZGlkfWApO1xuICByZXR1cm4ge3VkaWQsIGVtUG9ydH07XG59O1xuXG4vLyByZXR1cm5zIGEgbmV3IGFkYiBpbnN0YW5jZSB3aXRoIGRldmljZUlkIHNldFxuaGVscGVycy5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IG9wdHM7XG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICBpZiAoZW1Qb3J0KSB7XG4gICAgYWRiLnNldEVtdWxhdG9yUG9ydChlbVBvcnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkYjtcbn07XG5cbmhlbHBlcnMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyA9IGZ1bmN0aW9uIHZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgKG9wdHMpIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydhcHBQYWNrYWdlJywgJ2FwcEFjdGl2aXR5JywgJ2FwcFdhaXRQYWNrYWdlJywgJ2FwcFdhaXRBY3Rpdml0eSddKSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdHNba2V5XTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gLyhbXlxcdy4qLF0pKy8uZXhlYyhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgQ2FwYWJpbGl0eSAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBvbmx5IGluY2x1ZGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3JlLCBkb3QsIGNvbW1hIGFuZCBhc3RlcmlzayBjaGFyYWN0ZXJzLmApO1xuICAgIGxvZ2dlci53YXJuKGBDdXJyZW50IHZhbHVlICcke25hbWV9JyBoYXMgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBhdCBpbmRleCAke21hdGNoLmluZGV4fTogJyR7bmFtZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXggKyAxKX0nYCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0TGF1bmNoSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldExhdW5jaEluZm8gKGFkYiwgb3B0cykge1xuICBsZXQge2FwcCwgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHl9ID0gb3B0cztcbiAgaWYgKCFhcHApIHtcbiAgICBsb2dnZXIud2FybignTm8gYXBwIHNlbnQgaW4sIG5vdCBwYXJzaW5nIHBhY2thZ2UvYWN0aXZpdHknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMob3B0cyk7XG5cbiAgaWYgKGFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ1BhcnNpbmcgcGFja2FnZSBhbmQgYWN0aXZpdHkgZnJvbSBhcHAgbWFuaWZlc3QnKTtcbiAgbGV0IHthcGtQYWNrYWdlLCBhcGtBY3Rpdml0eX0gPVxuICAgIGF3YWl0IGFkYi5wYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QoYXBwKTtcbiAgaWYgKGFwa1BhY2thZ2UgJiYgIWFwcFBhY2thZ2UpIHtcbiAgICBhcHBQYWNrYWdlID0gYXBrUGFja2FnZTtcbiAgfVxuICBpZiAoIWFwcFdhaXRQYWNrYWdlKSB7XG4gICAgYXBwV2FpdFBhY2thZ2UgPSBhcHBQYWNrYWdlO1xuICB9XG4gIGlmIChhcGtBY3Rpdml0eSAmJiAhYXBwQWN0aXZpdHkpIHtcbiAgICBhcHBBY3Rpdml0eSA9IGFwa0FjdGl2aXR5O1xuICB9XG4gIGlmICghYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgYXBwV2FpdEFjdGl2aXR5ID0gYXBwQWN0aXZpdHk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHkgYXJlOiAke2Fwa1BhY2thZ2V9LyR7YXBrQWN0aXZpdHl9YCk7XG4gIHJldHVybiB7YXBwUGFja2FnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0QWN0aXZpdHl9O1xufTtcblxuaGVscGVycy5yZXNldEFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0QXBwIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwUGFja2FnZScgb3B0aW9uIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCBhZGIuaXNBcHBJbnN0YWxsZWQoYXBwUGFja2FnZSk7XG5cbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5mb3JjZVN0b3AoYXBwUGFja2FnZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIC8vIGZ1bGxSZXNldCBoYXMgcHJpb3JpdHkgb3ZlciBmYXN0UmVzZXRcbiAgICBpZiAoIWZ1bGxSZXNldCAmJiBmYXN0UmVzZXQpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGFkYi5jbGVhcihhcHBQYWNrYWdlKTtcbiAgICAgIGlmIChfLmlzU3RyaW5nKG91dHB1dCkgJiYgb3V0cHV0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2ZhaWxlZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNsZWFyIHRoZSBhcHBsaWNhdGlvbiBkYXRhIG9mICcke2FwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgLy8gZXhlY3V0aW5nIGBzaGVsbCBwbSBjbGVhcmAgcmVzZXRzIHByZXZpb3VzbHkgYXNzaWduZWQgYXBwbGljYXRpb24gcGVybWlzc2lvbnMgYXMgd2VsbFxuICAgICAgaWYgKGF1dG9HcmFudFBlcm1pc3Npb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWRiLmdyYW50QWxsUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gZ3JhbnQgcGVybWlzc2lvbnMgcmVxdWVzdGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoYFBlcmZvcm1lZCBmYXN0IHJlc2V0IG9uIHRoZSBpbnN0YWxsZWQgJyR7YXBwUGFja2FnZX0nIGFwcGxpY2F0aW9uIChzdG9wIGFuZCBjbGVhcilgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWFwcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIG9wdGlvbiBpcyByZXF1aXJlZCBmb3IgcmVpbnN0YWxsXCIpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBSdW5uaW5nIGZ1bGwgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nIChyZWluc3RhbGwpYCk7XG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSk7XG4gIH1cbiAgYXdhaXQgYWRiLmluc3RhbGwoYXBwLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICB9KTtcbn07XG5cbmhlbHBlcnMuaW5zdGFsbEFwayA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcGsgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCB8fCAhYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIGFuZCAnYXBwUGFja2FnZScgb3B0aW9ucyBhcmUgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAoZnVsbFJlc2V0KSB7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBhcHBTdGF0ZSxcbiAgICB3YXNVbmluc3RhbGxlZFxuICB9ID0gYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBwLCBhcHBQYWNrYWdlLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VDdXJyZW50QnVpbGQ6IGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9KTtcblxuICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IHRoZSBuZXdseSBpbnN0YWxsZWQgYXBwXG4gIGNvbnN0IGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwID0gIXdhc1VuaW5zdGFsbGVkXG4gICAgJiYgYXBwU3RhdGUgIT09IGFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICBpZiAoZmFzdFJlc2V0ICYmIGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwKSB7XG4gICAgbG9nZ2VyLmluZm8oYFBlcmZvcm1pbmcgZmFzdCByZXNldCBvbiAnJHthcHBQYWNrYWdlfSdgKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gIH1cbn07XG5cbi8qKlxuICogSW5zdGFsbHMgYW4gYXJyYXkgb2YgYXBrc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0cyBkZWZpbmVkIGluIGRyaXZlci5qc1xuICovXG5oZWxwZXJzLmluc3RhbGxPdGhlckFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsT3RoZXJBcGtzIChvdGhlckFwcHMsIGFkYiwgb3B0cykge1xuICBsZXQge1xuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIC8vIEluc3RhbGwgYWxsIG9mIHRoZSBBUEsncyBhc3luY2hyb25vdXNseVxuICBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChvdGhlckFwcCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgSW5zdGFsbGluZyBhcHA6ICR7b3RoZXJBcHB9YCk7XG4gICAgcmV0dXJuIGFkYi5pbnN0YWxsT3JVcGdyYWRlKG90aGVyQXBwLCBudWxsLCB7XG4gICAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIH0pO1xuICB9KSk7XG59O1xuXG4vKipcbiAqIFVuaW5zdGFsbCBhbiBhcnJheSBvZiBwYWNrYWdlc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcHBQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlIG5hbWVzIHRvIHVuaW5zdGFsbC4gSWYgdGhpcyBpbmNsdWRlcyBgJyonYCwgdW5pbnN0YWxsIGFsbCBvZiAzcmQgcGFydHkgYXBwc1xuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICovXG5oZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxPdGhlclBhY2thZ2VzIChhZGIsIGFwcFBhY2thZ2VzLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIGlmIChhcHBQYWNrYWdlcy5pbmNsdWRlcygnKicpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdVbmluc3RhbGwgdGhpcmQgcGFydHkgcGFja2FnZXMnKTtcbiAgICBhcHBQYWNrYWdlcyA9IGF3YWl0IHRoaXMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzKGFkYiwgZmlsdGVyUGFja2FnZXMpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbmluc3RhbGxpbmcgcGFja2FnZXM6ICR7YXBwUGFja2FnZXN9YCk7XG4gIGF3YWl0IEIuYWxsKGFwcFBhY2thZ2VzLm1hcCgoYXBwUGFja2FnZSkgPT4gYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKSkpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhpcmQgcGFydHkgcGFja2FnZXMgZmlsdGVyZWQgd2l0aCBgZmlsdGVyUGFja2FnZXNgXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gYXJyYXkgb2YgaW5zdGFsbGVkIHRoaXJkIHBhcnkgcGFja2FnZXNcbiAqL1xuaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRUaGlyZFBhcnR5UGFja2FnZXMgKGFkYiwgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VzU3RyaW5nID0gYXdhaXQgYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsICctMyddKTtcbiAgICBjb25zdCBhcHBQYWNrYWdlc0FycmF5ID0gcGFja2FnZXNTdHJpbmcudHJpbSgpLnJlcGxhY2UoL3BhY2thZ2U6L2csICcnKS5zcGxpdChFT0wpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgJyR7YXBwUGFja2FnZXNBcnJheX0nIGZpbHRlcmVkIHdpdGggJyR7ZmlsdGVyUGFja2FnZXN9J2ApO1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXBwUGFja2FnZXNBcnJheSwgZmlsdGVyUGFja2FnZXMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIGdldCBwYWNrYWdlcyB3aXRoICdhZGIgc2hlbGwgcG0gbGlzdCBwYWNrYWdlcyAtMyc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5oZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBpbml0VW5pY29kZUtleWJvYXJkIChhZGIpIHtcbiAgbG9nZ2VyLmRlYnVnKCdFbmFibGluZyBVbmljb2RlIGtleWJvYXJkIHN1cHBvcnQnKTtcblxuICAvLyBnZXQgdGhlIGRlZmF1bHQgSU1FIHNvIHdlIGNhbiByZXR1cm4gYmFjayB0byBpdCBsYXRlciBpZiB3ZSB3YW50XG4gIGxldCBkZWZhdWx0SU1FID0gYXdhaXQgYWRiLmRlZmF1bHRJTUUoKTtcblxuICBsb2dnZXIuZGVidWcoYFVuc2V0dGluZyBwcmV2aW91cyBJTUUgJHtkZWZhdWx0SU1FfWApO1xuICBjb25zdCBhcHBpdW1JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8uVW5pY29kZUlNRWA7XG4gIGxvZ2dlci5kZWJ1ZyhgU2V0dGluZyBJTUUgdG8gJyR7YXBwaXVtSU1FfSdgKTtcbiAgYXdhaXQgYWRiLmVuYWJsZUlNRShhcHBpdW1JTUUpO1xuICBhd2FpdCBhZGIuc2V0SU1FKGFwcGl1bUlNRSk7XG4gIHJldHVybiBkZWZhdWx0SU1FO1xufTtcblxuaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAgPSBhc3luYyBmdW5jdGlvbiBzZXRNb2NrTG9jYXRpb25BcHAgKGFkYiwgYXBwKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcxJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgYXBwLCAnYW5kcm9pZDptb2NrX2xvY2F0aW9uJywgJ2FsbG93J10pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzZXQgbW9jayBsb2NhdGlvbiBmb3IgYXBwICcke2FwcH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSGVscGVyQXBwIChhZGIsIGFwa1BhdGgsIHBhY2thZ2VJZCkge1xuICAvLyBTb21ldGltZXMgYWRiIHB1c2ggb3IgYWRiIGluc3RhbCB0YWtlIG1vcmUgdGltZSB0aGFuIGV4cGVjdGVkIHRvIGluc3RhbGwgYW4gYXBwXG4gIC8vIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MvaXNzdWVzLzQwI2lzc3VlY29tbWVudC00NzY1OTMxNzRcbiAgYXdhaXQgcmV0cnkoMiwgYXN5bmMgZnVuY3Rpb24gcmV0cnlJbnN0YWxsSGVscGVyQXBwICgpIHtcbiAgICBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcGtQYXRoLCBwYWNrYWdlSWQsIHtncmFudFBlcm1pc3Npb25zOiB0cnVlfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQdXNoZXMgYW5kIGluc3RhbGxzIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHNldHRpbmcgYXBwIGlzIHJlcXVpcmVkXG4gKlxuICogQHBhcmFtIHtBZGJ9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtib29sZWFufSB0aHJvd0Vycm9yW2ZhbHNlXSAtIFdoZXRoZXIgdGhyb3cgZXJyb3Igb3Igbm90XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhyb3dFcnJvciBpcyB0cnVlIGFuZCBzb21ldGhpbmcgaGFwcGVucyBpbiBpbnN0YWxsYXRpb24gc3RlcFxuICovXG5oZWxwZXJzLnB1c2hTZXR0aW5nc0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHB1c2hTZXR0aW5nc0FwcCAoYWRiLCB0aHJvd0Vycm9yID0gZmFsc2UpIHtcbiAgbG9nZ2VyLmRlYnVnKCdQdXNoaW5nIHNldHRpbmdzIGFwayB0byBkZXZpY2UuLi4nKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEhlbHBlckFwcChhZGIsIHNldHRpbmdzQXBrUGF0aCwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgdGhyb3dFcnJvcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYElnbm9yZWQgZXJyb3Igd2hpbGUgaW5zdGFsbGluZyAnJHtzZXR0aW5nc0Fwa1BhdGh9JzogYCArXG4gICAgICAgICAgICAgICAgYCcke2Vyci5tZXNzYWdlfScuIEZlYXR1cmVzIHRoYXQgcmVseSBvbiB0aGlzIGhlbHBlciBgICtcbiAgICAgICAgICAgICAgICAncmVxdWlyZSB0aGUgYXBrIHN1Y2ggYXMgdG9nZ2xlIFdpRmkgYW5kIGdldHRpbmcgbG9jYXRpb24gJyArXG4gICAgICAgICAgICAgICAgJ3dpbGwgcmFpc2UgYW4gZXJyb3IgaWYgeW91IHRyeSB0byB1c2UgdGhlbS4nKTtcbiAgfVxuXG4gIC8vIFJlaW5zdGFsbCB3aWxsIHN0b3AgdGhlIHNldHRpbmdzIGhlbHBlciBwcm9jZXNzIGFueXdheSwgc29cbiAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aGUgYXBwbGljYXRpb24gaXMgc3RpbGwgcnVubmluZ1xuICBpZiAoYXdhaXQgYWRiLnByb2Nlc3NFeGlzdHMoU0VUVElOR1NfSEVMUEVSX1BLR19JRCkpIHtcbiAgICBsb2dnZXIuZGVidWcoYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0gaXMgYWxyZWFkeSBydW5uaW5nLiBgICtcbiAgICAgIGBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IGl0cyBwZXJtaXNzaW9ucy5gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXdhaXQgYWRiLmdldEFwaUxldmVsKCkgPD0gMjMpIHsgLy8gQW5kcm9pZCA2LSBkZXZpY2VzIHNob3VsZCBoYXZlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9wdWxsLzExNjQwI2lzc3VlY29tbWVudC00MzgyNjA0NzdcbiAgICBjb25zdCBwZXJtcyA9IFsnU0VUX0FOSU1BVElPTl9TQ0FMRScsICdDSEFOR0VfQ09ORklHVVJBVElPTicsICdBQ0NFU1NfRklORV9MT0NBVElPTiddO1xuICAgIGxvZ2dlci5pbmZvKGBHcmFudGluZyBwZXJtaXNzaW9ucyAke3Blcm1zfSB0byAnJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfSdgKTtcbiAgICBhd2FpdCBhZGIuZ3JhbnRQZXJtaXNzaW9ucyhTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBwZXJtcy5tYXAoKHgpID0+IGBhbmRyb2lkLnBlcm1pc3Npb24uJHt4fWApKTtcbiAgfVxuXG4gIC8vIGxhdW5jaCBpby5hcHBpdW0uc2V0dGluZ3MgYXBwIGR1ZSB0byBzZXR0aW5ncyBmYWlsaW5nIHRvIGJlIHNldFxuICAvLyBpZiB0aGUgYXBwIGlzIG5vdCBsYXVuY2hlZCBwcmlvciB0byBzdGFydCB0aGUgc2Vzc2lvbiBvbiBhbmRyb2lkIDcrXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvODk1N1xuICB0cnkge1xuICAgIGF3YWl0IGFkYi5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhlcnIpO1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIHN0cmluZy54bWwgYW5kIGNvbnZlcnRzIGl0IHRvIHN0cmluZy5qc29uIGFuZCBwdXNoZXNcbiAqIGl0IHRvIC9kYXRhL2xvY2FsL3RtcC9zdHJpbmcuanNvbiBvbiBmb3IgdXNlIG9mIGJvb3RzdHJhcFxuICogSWYgYXBwIGlzIG5vdCBwcmVzZW50IHRvIGV4dHJhY3Qgc3RyaW5nLnhtbCBpdCBkZWxldGVzIHJlbW90ZSBzdHJpbmdzLmpzb25cbiAqIElmIGFwcCBkb2VzIG5vdCBoYXZlIHN0cmluZ3MueG1sIHdlIHB1c2ggYW4gZW1wdHkganNvbiBvYmplY3QgdG8gcmVtb3RlXG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlIGFiYnJldmlhdGlvbiwgZm9yIGV4YW1wbGUgJ2ZyJy4gVGhlIGRlZmF1bHQgbGFuZ3VhZ2VcbiAqIGlzIHVzZWQgaWYgdGhpcyBhcmd1bWVudCBpcyBub3QgZGVmaW5lZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gRHJpdmVyIG9wdGlvbnMgZGljdGlvbmFyeS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkaWN0aW9uYXJ5LCB3aGVyZSBzdHJpbmcgcmVzb3VyY2UgaWRlbnRpZmllcnMgYXJlIGtleXNcbiAqIGFsb25nIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBvciBhbiBlbXB0eSBvYmplY3RcbiAqIGlmIG5vIG1hdGNoaW5nIHJlc291cmNlcyB3ZXJlIGV4dHJhY3RlZC5cbiAqL1xuaGVscGVycy5wdXNoU3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIHB1c2hTdHJpbmdzIChsYW5ndWFnZSwgYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHJlbW90ZURpciA9ICcvZGF0YS9sb2NhbC90bXAnO1xuICBjb25zdCBzdHJpbmdzSnNvbiA9ICdzdHJpbmdzLmpzb24nO1xuICBjb25zdCByZW1vdGVGaWxlID0gcGF0aC5wb3NpeC5yZXNvbHZlKHJlbW90ZURpciwgc3RyaW5nc0pzb24pO1xuXG4gIC8vIGNsZWFuIHVwIHJlbW90ZSBzdHJpbmcuanNvbiBpZiBwcmVzZW50XG4gIGF3YWl0IGFkYi5yaW1yYWYocmVtb3RlRmlsZSk7XG5cbiAgbGV0IGFwcDtcbiAgdHJ5IHtcbiAgICBhcHAgPSBvcHRzLmFwcCB8fCBhd2FpdCBhZGIucHVsbEFwayhvcHRzLmFwcFBhY2thZ2UsIG9wdHMudG1wRGlyKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmluZm8oYEZhaWxlZCB0byBwdWxsIGFuIGFwayBmcm9tICcke29wdHMuYXBwUGFja2FnZX0nIHRvICcke29wdHMudG1wRGlyfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShvcHRzLmFwcFBhY2thZ2UpIHx8ICEoYXdhaXQgZnMuZXhpc3RzKGFwcCkpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBObyBhcHAgb3IgcGFja2FnZSBzcGVjaWZpZWQuIFJldHVybmluZyBlbXB0eSBzdHJpbmdzYCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qgc3RyaW5nc1RtcERpciA9IHBhdGgucmVzb2x2ZShvcHRzLnRtcERpciwgb3B0cy5hcHBQYWNrYWdlKTtcbiAgdHJ5IHtcbiAgICBsb2dnZXIuZGVidWcoJ0V4dHJhY3Rpbmcgc3RyaW5ncyBmcm9tIGFwaycsIGFwcCwgbGFuZ3VhZ2UsIHN0cmluZ3NUbXBEaXIpO1xuICAgIGNvbnN0IHthcGtTdHJpbmdzLCBsb2NhbFBhdGh9ID0gYXdhaXQgYWRiLmV4dHJhY3RTdHJpbmdzRnJvbUFwayhhcHAsIGxhbmd1YWdlLCBzdHJpbmdzVG1wRGlyKTtcbiAgICBhd2FpdCBhZGIucHVzaChsb2NhbFBhdGgsIHJlbW90ZURpcik7XG4gICAgcmV0dXJuIGFwa1N0cmluZ3M7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBDb3VsZCBub3QgZ2V0IHN0cmluZ3MsIGNvbnRpbnVpbmcgYW55d2F5LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBhd2FpdCBhZGIuc2hlbGwoJ2VjaG8nLCBbYCd7fScgPiAke3JlbW90ZUZpbGV9YF0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihzdHJpbmdzVG1wRGlyKTtcbiAgfVxuICByZXR1cm4ge307XG59O1xuXG5oZWxwZXJzLnVubG9ja1dpdGhIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2tXaXRoSGVscGVyQXBwIChhZGIpIHtcbiAgbG9nZ2VyLmluZm8oJ1VubG9ja2luZyBzY3JlZW4nKTtcblxuICAvLyBVbmxvY2sgc3VjY2VlZCB3aXRoIGEgY291cGxlIG9mIHJldHJpZXMuXG4gIGxldCBmaXJzdFJ1biA9IHRydWU7XG4gIGF3YWl0IHJldHJ5KDMsIGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEhlbHBlciAoKSB7XG4gICAgLy8gVG8gcmVkdWNlIGEgdGltZSB0byBjYWxsIGFkYi5pc1NjcmVlbkxvY2tlZCgpIHNpbmNlIGBhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dgIGlzIGVhc3kgdG8gaGFuZyBhZGIgY29tbWFuZHNcbiAgICBpZiAoZmlyc3RSdW4pIHtcbiAgICAgIGZpcnN0UnVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgRXJyb3IgaW4gaXNTY3JlZW5Mb2NrZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICBsb2dnZXIud2FybignXCJhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dcIiBjb21tYW5kIGhhcyB0aW1lZCBvdXQuJyk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdUaGUgcmVhc29uIG9mIHRoaXMgdGltZW91dCBpcyB0aGUgZGVsYXllZCBhZGIgcmVzcG9uc2UuIFJlc2V0dGluZyBhZGIgc2VydmVyIGNhbiBpbXByb3ZlIGl0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKGBMYXVuY2hpbmcgJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbChbXG4gICAgICAnYW0nLCAnc3RhcnQnLFxuICAgICAgJy1uJywgYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWAsXG4gICAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAgICctZicsICcweDEwMjAwMDAwJyxcbiAgICBdKTtcbiAgICBhd2FpdCBCLmRlbGF5KDEwMDApO1xuICB9KTtcbn07XG5cbmhlbHBlcnMudW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdW5sb2NrIChkcml2ZXIsIGFkYiwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgIGxvZ2dlci5pbmZvKCdTY3JlZW4gYWxyZWFkeSB1bmxvY2tlZCwgZG9pbmcgbm90aGluZycpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2dnZXIuZGVidWcoJ1NjcmVlbiBpcyBsb2NrZWQsIHRyeWluZyB0byB1bmxvY2snKTtcblxuICBpZiAoIWNhcGFiaWxpdGllcy51bmxvY2tUeXBlICYmICFjYXBhYmlsaXRpZXMudW5sb2NrS2V5KSB7XG4gICAgbG9nZ2VyLndhcm4oJ1VzaW5nIGFwcCB1bmxvY2ssIHRoaXMgaXMgZ29pbmcgdG8gYmUgZGVwcmVjYXRlZCEnKTtcbiAgICBhd2FpdCBoZWxwZXJzLnVubG9ja1dpdGhIZWxwZXJBcHAoYWRiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgdW5sb2NrVHlwZSxcbiAgICB1bmxvY2tLZXksXG4gICAgdW5sb2NrU3RyYXRlZ3ksXG4gICAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQsXG4gIH0gPSB1bmxvY2tlci52YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpO1xuICBpZiAodW5sb2NrS2V5ICYmIHVubG9ja1R5cGUgIT09IEZJTkdFUlBSSU5UX1VOTE9DS1xuICAgICAgJiYgKF8uaXNOaWwodW5sb2NrU3RyYXRlZ3kpIHx8IF8udG9Mb3dlcih1bmxvY2tTdHJhdGVneSkgPT09ICdsb2Nrc2V0dGluZ3MnKVxuICAgICAgJiYgYXdhaXQgYWRiLmlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQoKSkge1xuICAgIGF3YWl0IHVubG9ja2VyLmZhc3RVbmxvY2soYWRiLCB7XG4gICAgICBjcmVkZW50aWFsOiB1bmxvY2tLZXksXG4gICAgICBjcmVkZW50aWFsVHlwZTogdG9DcmVkZW50aWFsVHlwZSh1bmxvY2tUeXBlKSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1bmxvY2tNZXRob2QgPSB7XG4gICAgICBbUElOX1VOTE9DS106IHVubG9ja2VyLnBpblVubG9jayxcbiAgICAgIFtQSU5fVU5MT0NLX0tFWV9FVkVOVF06IHVubG9ja2VyLnBpblVubG9ja1dpdGhLZXlFdmVudCxcbiAgICAgIFtQQVNTV09SRF9VTkxPQ0tdOiB1bmxvY2tlci5wYXNzd29yZFVubG9jayxcbiAgICAgIFtQQVRURVJOX1VOTE9DS106IHVubG9ja2VyLnBhdHRlcm5VbmxvY2ssXG4gICAgICBbRklOR0VSUFJJTlRfVU5MT0NLXTogdW5sb2NrZXIuZmluZ2VycHJpbnRVbmxvY2ssXG4gICAgfVt1bmxvY2tUeXBlXTtcbiAgICBhd2FpdCB1bmxvY2tNZXRob2QoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcyk7XG4gIH1cbiAgYXdhaXQgaGVscGVycy52ZXJpZnlVbmxvY2soYWRiLCB1bmxvY2tTdWNjZXNzVGltZW91dCk7XG59O1xuXG5oZWxwZXJzLnZlcmlmeVVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVVubG9jayAoYWRiLCB0aW1lb3V0TXMgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiAhKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSwge1xuICAgICAgd2FpdE1zOiB0aW1lb3V0TXMgPz8gMjAwMCxcbiAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGV2aWNlIGhhcyBmYWlsZWQgdG8gYmUgdW5sb2NrZWQnKTtcbiAgfVxuICBsb2dnZXIuaW5mbygnVGhlIGRldmljZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdW5sb2NrZWQnKTtcbn07XG5cbmhlbHBlcnMuaW5pdERldmljZSA9IGFzeW5jIGZ1bmN0aW9uIGluaXREZXZpY2UgKGFkYiwgb3B0cykge1xuICBjb25zdCB7XG4gICAgc2tpcERldmljZUluaXRpYWxpemF0aW9uLFxuICAgIGxvY2FsZSxcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGVTY3JpcHQsXG4gICAgdW5pY29kZUtleWJvYXJkLFxuICAgIGRpc2FibGVXaW5kb3dBbmltYXRpb24sXG4gICAgc2tpcFVubG9jayxcbiAgICBtb2NrTG9jYXRpb25BcHAsXG4gICAgc2tpcExvZ2NhdENhcHR1cmUsXG4gICAgbG9nY2F0Rm9ybWF0LFxuICAgIGxvZ2NhdEZpbHRlclNwZWNzLFxuICB9ID0gb3B0cztcblxuICBpZiAoc2tpcERldmljZUluaXRpYWxpemF0aW9uKSB7XG4gICAgbG9nZ2VyLmluZm8oYCdza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24nIGlzIHNldC4gU2tpcHBpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLmApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGFkYi53YWl0Rm9yRGV2aWNlKCk7XG4gICAgLy8gcHVzaFNldHRpbmdzQXBwIHJlcXVpcmVkIGJlZm9yZSBjYWxsaW5nIGVuc3VyZURldmljZUxvY2FsZSBmb3IgQVBJIExldmVsIDI0K1xuXG4gICAgLy8gU29tZSBmZWF0dXJlIHN1Y2ggYXMgbG9jYXRpb24vd2lmaSBhcmUgbm90IG5lY2Vzc2FyeSBmb3IgYWxsIHVzZXJzLFxuICAgIC8vIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIHNldHRpbmdzIGFwcC4gU28sIHRyeSB0byBjb25maWd1cmUgaXQgd2hpbGUgQXBwaXVtXG4gICAgLy8gZG9lcyBub3QgdGhyb3cgZXJyb3IgZXZlbiBpZiB0aGV5IGZhaWwuXG4gICAgY29uc3Qgc2hvdWxkVGhyb3dFcnJvciA9IGxhbmd1YWdlXG4gICAgICB8fCBsb2NhbGVcbiAgICAgIHx8IGxvY2FsZVNjcmlwdFxuICAgICAgfHwgdW5pY29kZUtleWJvYXJkXG4gICAgICB8fCBkaXNhYmxlV2luZG93QW5pbWF0aW9uXG4gICAgICB8fCAhc2tpcFVubG9jaztcbiAgICBhd2FpdCBoZWxwZXJzLnB1c2hTZXR0aW5nc0FwcChhZGIsIHNob3VsZFRocm93RXJyb3IpO1xuICB9XG5cbiAgaWYgKCFoZWxwZXJzLmlzRW11bGF0b3IoYWRiLCBvcHRzKSAmJiAobW9ja0xvY2F0aW9uQXBwIHx8IF8uaXNVbmRlZmluZWQobW9ja0xvY2F0aW9uQXBwKSkpIHtcbiAgICBhd2FpdCBoZWxwZXJzLnNldE1vY2tMb2NhdGlvbkFwcChhZGIsIG1vY2tMb2NhdGlvbkFwcCB8fCBTRVRUSU5HU19IRUxQRVJfUEtHX0lEKTtcbiAgfVxuXG4gIGlmIChsYW5ndWFnZSB8fCBsb2NhbGUpIHtcbiAgICBhd2FpdCBoZWxwZXJzLmVuc3VyZURldmljZUxvY2FsZShhZGIsIGxhbmd1YWdlLCBsb2NhbGUsIGxvY2FsZVNjcmlwdCk7XG4gIH1cblxuICBpZiAoc2tpcExvZ2NhdENhcHR1cmUpIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBMb2djYXRDYXB0dXJlJyBpcyBzZXQuIFNraXBwaW5nIHN0YXJ0aW5nIGxvZ2NhdCBjYXB0dXJlLmApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGFkYi5zdGFydExvZ2NhdCh7XG4gICAgICBmb3JtYXQ6IGxvZ2NhdEZvcm1hdCxcbiAgICAgIGZpbHRlclNwZWNzOiBsb2djYXRGaWx0ZXJTcGVjcyxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh1bmljb2RlS2V5Ym9hcmQpIHtcbiAgICByZXR1cm4gYXdhaXQgaGVscGVycy5pbml0VW5pY29kZUtleWJvYXJkKGFkYik7XG4gIH1cbn07XG5cbmhlbHBlcnMucmVtb3ZlTnVsbFByb3BlcnRpZXMgPSBmdW5jdGlvbiByZW1vdmVOdWxsUHJvcGVydGllcyAob2JqKSB7XG4gIGZvciAobGV0IGtleSBvZiBfLmtleXMob2JqKSkge1xuICAgIGlmIChfLmlzTnVsbChvYmpba2V5XSkgfHwgXy5pc1VuZGVmaW5lZChvYmpba2V5XSkpIHtcbiAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMudHJ1bmNhdGVEZWNpbWFscyA9IGZ1bmN0aW9uIHRydW5jYXRlRGVjaW1hbHMgKG51bWJlciwgZGlnaXRzKSB7XG4gIGxldCBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIGRpZ2l0cyksXG4gICAgICBhZGp1c3RlZE51bSA9IG51bWJlciAqIG11bHRpcGxpZXIsXG4gICAgICB0cnVuY2F0ZWROdW0gPSBNYXRoW2FkanVzdGVkTnVtIDwgMCA/ICdjZWlsJyA6ICdmbG9vciddKGFkanVzdGVkTnVtKTtcblxuICByZXR1cm4gdHJ1bmNhdGVkTnVtIC8gbXVsdGlwbGllcjtcbn07XG5cbmhlbHBlcnMuaXNDaHJvbWVCcm93c2VyID0gZnVuY3Rpb24gaXNDaHJvbWVCcm93c2VyIChicm93c2VyKSB7XG4gIHJldHVybiBfLmluY2x1ZGVzKE9iamVjdC5rZXlzKENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkpLCAoYnJvd3NlciB8fCAnJykudG9Mb3dlckNhc2UoKSk7XG59O1xuXG5oZWxwZXJzLmdldENocm9tZVBrZyA9IGZ1bmN0aW9uIGdldENocm9tZVBrZyAoYnJvd3Nlcikge1xuICByZXR1cm4gQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWVticm93c2VyLnRvTG93ZXJDYXNlKCldIHx8IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkuZGVmYXVsdDtcbn07XG5cbmhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzID0gYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIChzZXJ2ZXIsIHNlc3Npb25JZCkge1xuICBpZiAoIXNlcnZlciB8fCAhXy5pc0Z1bmN0aW9uKHNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhY3RpdmVIYW5kbGVycyA9IGF3YWl0IHNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycyhzZXNzaW9uSWQpO1xuICBmb3IgKGNvbnN0IHBhdGhuYW1lIG9mIF8ua2V5cyhhY3RpdmVIYW5kbGVycykpIHtcbiAgICBhd2FpdCBzZXJ2ZXIucmVtb3ZlV2ViU29ja2V0SGFuZGxlcihwYXRobmFtZSk7XG4gIH1cbn07XG5cbi8qKlxuICogVGFrZXMgYSBkZXNpcmVkIGNhcGFiaWxpdHkgYW5kIHRyaWVzIHRvIEpTT04ucGFyc2UgaXQgYXMgYW4gYXJyYXksXG4gKiBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHBhcnNlZCBhcnJheSBvciBhIHNpbmdsZXRvbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gY2FwIEEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gKi9cbmhlbHBlcnMucGFyc2VBcnJheSA9IGZ1bmN0aW9uIHBhcnNlQXJyYXkgKGNhcCkge1xuICBsZXQgcGFyc2VkQ2FwcztcbiAgdHJ5IHtcbiAgICBwYXJzZWRDYXBzID0gSlNPTi5wYXJzZShjYXApO1xuICB9IGNhdGNoIChpZ24pIHsgfVxuXG4gIGlmIChfLmlzQXJyYXkocGFyc2VkQ2FwcykpIHtcbiAgICByZXR1cm4gcGFyc2VkQ2FwcztcbiAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKGNhcCkpIHtcbiAgICByZXR1cm4gW2NhcF07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBhIHN0cmluZyBvciBKU09OIEFycmF5OyByZWNlaXZlZCAke2NhcH1gKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMuIFJldHVybnMgdHJ1ZSBpZiBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKlxuICogQHBhcmFtIHsqfSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FwYWJpbGl0eSBpcyB2YWxpZFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjYXBzIGhhcyBpbnZhbGlkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzID0gZnVuY3Rpb24gdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICBpZiAoY2Fwcy5icm93c2VyTmFtZSkge1xuICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXMgaXMgY29tbW9uIHdpdGggc2VsZW5pdW0gZ3JpZFxuICAgICAgbG9nZ2VyLndhcm4oYFRoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBzaG91bGQgZ2VuZXJhbGx5IG5vdCBpbmNsdWRlIGJvdGggYW4gJ2FwcCcgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgICBpZiAoY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgVGhlIGRlc2lyZWQgc2hvdWxkIG5vdCBpbmNsdWRlIGJvdGggb2YgYW4gJ2FwcFBhY2thZ2UnIGFuZCBhICdicm93c2VyTmFtZSdgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY2Fwcy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucGFyc2VBcnJheShjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkanVzdCB0aGUgY2FwYWJpbGl0aWVzIGZvciBhIGJyb3dzZXIgc2Vzc2lvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYXBzIC0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKiAhISEgVGhlIG9iamVjdCBpcyBtdXRhdGVkIGJ5IHRoaXMgbWV0aG9kIGNhbGwgISEhXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBwb3NzaWJseSBtdXRhdGVkIGBvcHRzYCBpbnN0YW5jZS5cbiAqIE5vIG11dGF0aW9uIGlzIGhhcHBlbmluZyBpcyB0aGUgY3VycmVudCBzZXNzaW9uIGlmXG4gKiBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcHMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvdmlkZWQuXG4gKi9cbmhlbHBlcnMuYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzID0gZnVuY3Rpb24gYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIChjYXBzID0ge30pIHtcbiAgY29uc3QgeyBicm93c2VyTmFtZSB9ID0gY2FwcztcbiAgbG9nZ2VyLmluZm8oYFRoZSBjdXJyZW50IHNlc3Npb24gaXMgY29uc2lkZXJlZCBicm93c2VyLWJhc2VkYCk7XG4gIGxvZ2dlci5pbmZvKGBTdXBwb3J0ZWQgYnJvd3NlciBuYW1lczogJHtKU09OLnN0cmluZ2lmeShfLmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSkpfWApO1xuICBpZiAoY2Fwcy5hcHBQYWNrYWdlIHx8IGNhcHMuYXBwQWN0aXZpdHkpIHtcbiAgICBsb2dnZXIuaW5mbyhgTm90IG92ZXJyaWRpbmcgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXR5IHZhbHVlcyBmb3IgJyR7YnJvd3Nlck5hbWV9JyBgICtcbiAgICAgICdiZWNhdXNlIHNvbWUgb2YgdGhlbSBoYXZlIGJlZW4gYWxyZWFkeSBwcm92aWRlZCcpO1xuICAgIHJldHVybiBjYXBzO1xuICB9XG5cbiAgY29uc3Qge3BrZywgYWN0aXZpdHl9ID0gdGhpcy5nZXRDaHJvbWVQa2coYnJvd3Nlck5hbWUpO1xuICBjYXBzLmFwcFBhY2thZ2UgPSBwa2c7XG4gIGNhcHMuYXBwQWN0aXZpdHkgPSBhY3Rpdml0eTtcbiAgbG9nZ2VyLmluZm8oYGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0aWVzIGhhdmUgYmVlbiBhdXRvbWF0aWNhbGx5IHNldCB0byAke3BrZ30vJHthY3Rpdml0eX0gYCArXG4gICAgYGZvciAnJHticm93c2VyTmFtZX0nYCk7XG4gIGxvZ2dlci5pbmZvKGBDb25zaWRlciBjaGFuZ2luZyB0aGUgYnJvd3Nlck5hbWUgdG8gdGhlIG9uZSBmcm9tIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBicm93c2VyIG5hbWVzIGAgK1xuICAgIGBvciBwcm92aWRlIGN1c3RvbSBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGlmIHRoZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIG9uZXMgZG8gYCArXG4gICAgYG5vdCBtYWtlIHNlbnNlYCk7XG4gIHJldHVybiBjYXBzO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBkZXZpY2UgdW5kZXIgdGVzdCBpcyBhbiBlbXVsYXRvclxuICpcbiAqIEBwYXJhbSB7QURCfSBhZGIgLSBhcHBpdW0tYWRiIGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIGRyaXZlciBvcHRpb25zIG1hcHBpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGRldmljZSBpcyBhbiBBbmRyb2lkIGVtdWxhdG9yXG4gKi9cbmhlbHBlcnMuaXNFbXVsYXRvciA9IGZ1bmN0aW9uIGlzRW11bGF0b3IgKGFkYiwgb3B0cykge1xuICBjb25zdCBwb3NzaWJsZU5hbWVzID0gW29wdHMudWRpZCwgYWRiPy5jdXJEZXZpY2VJZF07XG4gIHJldHVybiAhIW9wdHMuYXZkIHx8IHBvc3NpYmxlTmFtZXMuc29tZSgoeCkgPT4gRU1VTEFUT1JfUEFUVEVSTi50ZXN0KHgpKTtcbn07XG5cbmhlbHBlcnMuYm9vdHN0cmFwID0gQm9vdHN0cmFwO1xuaGVscGVycy51bmxvY2tlciA9IHVubG9ja2VyO1xuXG5leHBvcnQgeyBoZWxwZXJzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBBUFBfU1RBVEUsIHByZXBhcmVBdmRBcmdzLCBlbnN1cmVOZXR3b3JrU3BlZWQgfTtcbmV4cG9ydCBkZWZhdWx0IGhlbHBlcnM7XG4iXSwiZmlsZSI6ImxpYi9hbmRyb2lkLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.helpers = exports.commands = void 0;
8
+ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.helpers = exports.commands = void 0;
6
+ exports.helpers = exports.default = exports.commands = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9