appium-android-driver 5.11.1 → 5.12.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.
- package/CHANGELOG.md +19 -0
- package/build/lib/android-helpers.js +8 -2
- package/build/lib/android-helpers.js.map +1 -1
- package/build/lib/commands/actions.js +13 -18
- package/build/lib/commands/actions.js.map +1 -1
- package/build/lib/commands/performance.js +70 -61
- package/build/lib/commands/performance.js.map +1 -1
- package/lib/android-helpers.js +7 -1
- package/lib/commands/actions.js +23 -14
- package/lib/commands/performance.js +153 -112
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
## [5.12.0](https://github.com/appium/appium-android-driver/compare/v5.11.2...v5.12.0) (2023-05-05)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Add mobile endpoint for getting performance data ([#810](https://github.com/appium/appium-android-driver/issues/810)) ([70a0144](https://github.com/appium/appium-android-driver/commit/70a0144751c085d5e4c4c28ffa61ca49cfc59553))
|
|
7
|
+
|
|
8
|
+
## [5.11.2](https://github.com/appium/appium-android-driver/compare/v5.11.1...v5.11.2) (2023-04-29)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Code Refactoring
|
|
12
|
+
|
|
13
|
+
* Replace jimp with sharp ([#808](https://github.com/appium/appium-android-driver/issues/808)) ([af45a7e](https://github.com/appium/appium-android-driver/commit/af45a7e36e5ab45f0cf0df2b8a6c1006e985e46e))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Miscellaneous Chores
|
|
17
|
+
|
|
18
|
+
* Enable automatic access to notifications for the settings helper ([#807](https://github.com/appium/appium-android-driver/issues/807)) ([046b970](https://github.com/appium/appium-android-driver/commit/046b97024dbf21650ae4726e2a15ead5e5eb067e))
|
|
19
|
+
|
|
1
20
|
## [5.11.1](https://github.com/appium/appium-android-driver/compare/v5.11.0...v5.11.1) (2023-04-29)
|
|
2
21
|
|
|
3
22
|
|
|
@@ -59,6 +59,7 @@ const CHROME_BROWSER_PACKAGE_ACTIVITY = {
|
|
|
59
59
|
};
|
|
60
60
|
const SETTINGS_HELPER_PKG_ID = 'io.appium.settings';
|
|
61
61
|
exports.SETTINGS_HELPER_PKG_ID = SETTINGS_HELPER_PKG_ID;
|
|
62
|
+
const SETTING_NOTIFICATIONS_LISTENER_SERVICE = `${SETTINGS_HELPER_PKG_ID}/.NLService`;
|
|
62
63
|
const EMULATOR_PATTERN = /\bemulator\b/i;
|
|
63
64
|
const APP_STATE = Object.freeze({
|
|
64
65
|
NOT_INSTALLED: 0,
|
|
@@ -538,7 +539,12 @@ helpers.pushSettingsApp = async function pushSettingsApp(adb, throwError = false
|
|
|
538
539
|
try {
|
|
539
540
|
await adb.shell(['appops', 'set', SETTINGS_HELPER_PKG_ID, 'PROJECT_MEDIA', 'allow']);
|
|
540
541
|
} catch (err) {
|
|
541
|
-
_logger.default.debug(err);
|
|
542
|
+
_logger.default.debug(err.message);
|
|
543
|
+
}
|
|
544
|
+
try {
|
|
545
|
+
await adb.shell(['cmd', 'notification', 'allow_listener', SETTING_NOTIFICATIONS_LISTENER_SERVICE]);
|
|
546
|
+
} catch (err) {
|
|
547
|
+
_logger.default.debug(err.message);
|
|
542
548
|
}
|
|
543
549
|
}
|
|
544
550
|
if (apiLevel <= 23) {
|
|
@@ -765,4 +771,4 @@ helpers.bootstrap = _bootstrap.default;
|
|
|
765
771
|
helpers.unlocker = _unlockHelpers.default;
|
|
766
772
|
var _default = helpers;
|
|
767
773
|
exports.default = _default;
|
|
768
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsIl9hc3luY2JveCIsIl9sb2dnZXIiLCJfc3VwcG9ydCIsIl9pb0FwcGl1bSIsIl9ib290c3RyYXAiLCJfYmx1ZWJpcmQiLCJfYXBwaXVtQWRiIiwiX3VubG9ja0hlbHBlcnMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9vcyIsIl9zZW12ZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiTU9DS19BUFBfSURTX1NUT1JFIiwiUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVRfTVMiLCJIRUxQRVJfQVBQX0lOU1RBTExfUkVUUklFUyIsIkhFTFBFUl9BUFBfSU5TVEFMTF9SRVRSWV9ERUxBWV9NUyIsIkNIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkiLCJjaHJvbWUiLCJwa2ciLCJhY3Rpdml0eSIsImNocm9taXVtIiwiY2hyb21lYmV0YSIsImJyb3dzZXIiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiZXhwb3J0cyIsIkVNVUxBVE9SX1BBVFRFUk4iLCJBUFBfU1RBVEUiLCJmcmVlemUiLCJOT1RfSU5TVEFMTEVEIiwiTk9UX1JVTk5JTkciLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJhZGIiLCJuZXR3b3JrU3BlZWQiLCJfIiwidmFsdWVzIiwiTkVUV09SS19TUEVFRCIsImluY2x1ZGVzIiwibG9nZ2VyIiwid2FybiIsIkZVTEwiLCJwcmVwYXJlQXZkQXJncyIsIm9wdHMiLCJpc0hlYWRsZXNzIiwiYXZkQXJncyIsInJlc3VsdCIsImlzQXJyYXkiLCJwdXNoIiwidXRpbCIsInNoZWxsUGFyc2UiLCJ0b0NyZWRlbnRpYWxUeXBlIiwidW5sb2NrVHlwZSIsIlBJTl9VTkxPQ0siLCJQSU5fVU5MT0NLX0tFWV9FVkVOVCIsIlBBU1NXT1JEX1VOTE9DSyIsIlBBVFRFUk5fVU5MT0NLIiwiRXJyb3IiLCJoZWxwZXJzIiwiY3JlYXRlQmFzZUFEQiIsImFkYlBvcnQiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJyZW1vdGVBZGJIb3N0IiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFkYkV4ZWNUaW1lb3V0IiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInJlbW90ZUFwcHNDYWNoZUxpbWl0IiwiYnVpbGRUb29sc1ZlcnNpb24iLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiYWxsb3dEZWxheUFkYiIsIkFEQiIsImNyZWF0ZUFEQiIsInByZXBhcmVFbXVsYXRvciIsImF2ZCIsImF2ZEVudiIsImVudiIsImxhbmd1YWdlIiwibG9jYWxlIiwiY291bnRyeSIsImF2ZExhdW5jaFRpbWVvdXQiLCJsYXVuY2hUaW1lb3V0IiwiYXZkUmVhZHlUaW1lb3V0IiwicmVhZHlUaW1lb3V0IiwiYXZkTmFtZSIsInJlcGxhY2UiLCJpc0VtdWxhdG9yUnVubmluZyIsImdldFJ1bm5pbmdBVkRXaXRoUmV0cnkiLCJlIiwiZGVidWciLCJtZXNzYWdlIiwiYXJncyIsImtpbGxFbXVsYXRvciIsImxhdW5jaEFWRCIsImVuc3VyZURldmljZUxvY2FsZSIsInNjcmlwdCIsImlzU3RyaW5nIiwic2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IiwiZW5zdXJlQ3VycmVudExvY2FsZSIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsInVkaWQiLCJlbVBvcnQiLCJjdXJEZXZpY2VJZCIsImVtdWxhdG9yUG9ydCIsImluZm8iLCJkZXZpY2VzIiwiZ2V0RGV2aWNlc1dpdGhSZXRyeSIsIm1hcCIsImVycm9yQW5kVGhyb3ciLCJnZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nIiwicGxhdGZvcm1WZXJzaW9uIiwidHJpbSIsInNlbXZlciIsImNvZXJjZSIsImF2YWlsRGV2aWNlcyIsInBhcnRpYWxNYXRjaENhbmRpZGF0ZSIsImRldmljZSIsInNldERldmljZUlkIiwicmF3RGV2aWNlT1MiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VPUyIsImJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCIsInZhbGlkIiwiYm90aFZlcnNpb25zQXJlU3RyaW5ncyIsInZlcnNpb24iLCJ0b0xvd2VyIiwibWFqb3IiLCJtaW5vciIsImd0Iiwia2V5cyIsImpvaW4iLCJzZXRFbXVsYXRvclBvcnQiLCJ2YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzIiwibmFtZSIsIm1hdGNoIiwiZXhlYyIsImluZGV4Iiwic3Vic3RyaW5nIiwiZ2V0TGF1bmNoSW5mbyIsImFwcCIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiYXBrUGFja2FnZSIsImFwa0FjdGl2aXR5IiwicGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0IiwicmVzZXRBcHAiLCJmYXN0UmVzZXQiLCJmdWxsUmVzZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwiaXNJbnN0YWxsZWQiLCJpc0FwcEluc3RhbGxlZCIsImZvcmNlU3RvcCIsImlnbiIsIm91dHB1dCIsImNsZWFyIiwidG9Mb3dlckNhc2UiLCJncmFudEFsbFBlcm1pc3Npb25zIiwiZXJyb3IiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInRpbWVvdXQiLCJpbnN0YWxsQXBrIiwiZW5mb3JjZUFwcEluc3RhbGwiLCJhcHBTdGF0ZSIsIndhc1VuaW5zdGFsbGVkIiwiaW5zdGFsbE9yVXBncmFkZSIsImVuZm9yY2VDdXJyZW50QnVpbGQiLCJpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCIsIkFQUF9JTlNUQUxMX1NUQVRFIiwiaW5zdGFsbE90aGVyQXBrcyIsIm90aGVyQXBwcyIsIkIiLCJhbGwiLCJvdGhlckFwcCIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJhcHBQYWNrYWdlcyIsImZpbHRlclBhY2thZ2VzIiwiZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIiwicGFja2FnZXNTdHJpbmciLCJzaGVsbCIsImFwcFBhY2thZ2VzQXJyYXkiLCJzcGxpdCIsIkVPTCIsImRpZmZlcmVuY2UiLCJlcnIiLCJpbml0VW5pY29kZUtleWJvYXJkIiwiZGVmYXVsdElNRSIsImFwcGl1bUlNRSIsImVuYWJsZUlNRSIsInNldElNRSIsInNldE1vY2tMb2NhdGlvbkFwcCIsImdldEFwaUxldmVsIiwicGtnSWRzIiwiZmlsZUV4aXN0cyIsIkpTT04iLCJwYXJzZSIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInNyY1BhdGgiLCJwYXRoIiwicG9zaXgiLCJiYXNlbmFtZSIsImZzIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwicmltcmFmIiwicmVzZXRNb2NrTG9jYXRpb24iLCJ0aGlyZFBhcnR5UGtnSWRzUHJvbWlzZSIsInRoaXJkUGFydHlQa2dJZHMiLCJyZXN1bHRQa2dzIiwiaW50ZXJzZWN0aW9uIiwic2l6ZSIsInBrZ0lkIiwiaW5zdGFsbEhlbHBlckFwcCIsImFwa1BhdGgiLCJwYWNrYWdlSWQiLCJyZXRyeUludGVydmFsIiwicmV0cnlJbnN0YWxsSGVscGVyQXBwIiwicHVzaFNldHRpbmdzQXBwIiwidGhyb3dFcnJvciIsInNldHRpbmdzQXBrUGF0aCIsInByb2Nlc3NFeGlzdHMiLCJhcGlMZXZlbCIsInBlcm1zIiwieCIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJpc0VtdWxhdG9yIiwicHVzaFN0cmluZ3MiLCJyZW1vdGVEaXIiLCJzdHJpbmdzSnNvbiIsInJlbW90ZUZpbGUiLCJyZXNvbHZlIiwicHVsbEFwayIsInRtcERpciIsImlzRW1wdHkiLCJleGlzdHMiLCJzdHJpbmdzVG1wRGlyIiwiYXBrU3RyaW5ncyIsImxvY2FsUGF0aCIsImV4dHJhY3RTdHJpbmdzRnJvbUFwayIsInVubG9jayIsImRyaXZlciIsImNhcGFiaWxpdGllcyIsImlzU2NyZWVuTG9ja2VkIiwidW5sb2NrS2V5IiwiZGlzbWlzc0tleWd1YXJkIiwidW5sb2NrU3RyYXRlZ3kiLCJ1bmxvY2tTdWNjZXNzVGltZW91dCIsInVubG9ja2VyIiwidmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMiLCJGSU5HRVJQUklOVF9VTkxPQ0siLCJpc05pbCIsImlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQiLCJmYXN0VW5sb2NrIiwiY3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwidW5sb2NrTWV0aG9kIiwicGluVW5sb2NrIiwicGluVW5sb2NrV2l0aEtleUV2ZW50IiwicGFzc3dvcmRVbmxvY2siLCJwYXR0ZXJuVW5sb2NrIiwiZmluZ2VycHJpbnRVbmxvY2siLCJ2ZXJpZnlVbmxvY2siLCJ0aW1lb3V0TXMiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImluaXREZXZpY2UiLCJza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24iLCJsb2NhbGVTY3JpcHQiLCJ1bmljb2RlS2V5Ym9hcmQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic2tpcFVubG9jayIsIm1vY2tMb2NhdGlvbkFwcCIsInNraXBMb2djYXRDYXB0dXJlIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJ3YWl0Rm9yRGV2aWNlIiwic2hvdWxkVGhyb3dFcnJvciIsImlzVW5kZWZpbmVkIiwic3RhcnRMb2djYXQiLCJmb3JtYXQiLCJmaWx0ZXJTcGVjcyIsInJlbW92ZU51bGxQcm9wZXJ0aWVzIiwiaXNOdWxsIiwidHJ1bmNhdGVEZWNpbWFscyIsIm51bWJlciIsImRpZ2l0cyIsIm11bHRpcGxpZXIiLCJNYXRoIiwicG93IiwiYWRqdXN0ZWROdW0iLCJ0cnVuY2F0ZWROdW0iLCJpc0Nocm9tZUJyb3dzZXIiLCJnZXRDaHJvbWVQa2ciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJzZXNzaW9uSWQiLCJpc0Z1bmN0aW9uIiwiZ2V0V2ViU29ja2V0SGFuZGxlcnMiLCJhY3RpdmVIYW5kbGVycyIsInBhdGhuYW1lIiwicmVtb3ZlV2ViU29ja2V0SGFuZGxlciIsInBhcnNlQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNhcHMiLCJicm93c2VyTmFtZSIsImFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyIsInBvc3NpYmxlTmFtZXMiLCJzb21lIiwidGVzdCIsImJvb3RzdHJhcCIsIkJvb3RzdHJhcCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2FuZHJvaWQtaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgdGVtcERpciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBwYXRoIGFzIHNldHRpbmdzQXBrUGF0aCB9IGZyb20gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5pbXBvcnQgQm9vdHN0cmFwIGZyb20gJy4vYm9vdHN0cmFwJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBBREIgZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQge1xuICBkZWZhdWx0IGFzIHVubG9ja2VyLCBQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCxcbiAgUEFTU1dPUkRfVU5MT0NLLCBQQVRURVJOX1VOTE9DSywgRklOR0VSUFJJTlRfVU5MT0NLXG59IGZyb20gJy4vdW5sb2NrLWhlbHBlcnMnO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG5jb25zdCBNT0NLX0FQUF9JRFNfU1RPUkUgPSAnL2RhdGEvbG9jYWwvdG1wL21vY2tfYXBwcy5qc29uJztcbmNvbnN0IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUX01TID0gOTAwMDA7XG5jb25zdCBIRUxQRVJfQVBQX0lOU1RBTExfUkVUUklFUyA9IDM7XG5jb25zdCBIRUxQRVJfQVBQX0lOU1RBTExfUkVUUllfREVMQVlfTVMgPSA1MDAwO1xuLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL2Nocm9tZS9icm93c2VyL2RldnRvb2xzL2RldmljZS9hbmRyb2lkX2RldmljZV9pbmZvX3F1ZXJ5LmNjXG5jb25zdCBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZID0ge1xuICBjaHJvbWU6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBjaHJvbWl1bToge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnLkNocm9tZVNoZWxsQWN0aXZpdHknLFxuICB9LFxuICBjaHJvbWViZXRhOiB7XG4gICAgcGtnOiAnY29tLmNocm9tZS5iZXRhJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgYnJvd3Nlcjoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmJyb3dzZXInLFxuICAgIGFjdGl2aXR5OiAnY29tLmFuZHJvaWQuYnJvd3Nlci5Ccm93c2VyQWN0aXZpdHknLFxuICB9LFxuICAnY2hyb21pdW0tYnJvd3Nlcic6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgJ2Nocm9taXVtLXdlYnZpZXcnOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwuV2ViVmlld0Jyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxufTtcbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgPSAnaW8uYXBwaXVtLnNldHRpbmdzJztcbmNvbnN0IEVNVUxBVE9SX1BBVFRFUk4gPSAvXFxiZW11bGF0b3JcXGIvaTtcbi8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaW4gc3luYyB3aXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGUveGN1aWFwcGxpY2F0aW9uc3RhdGVydW5uaW5nYmFja2dyb3VuZD9sYW5ndWFnZT1vYmpjXG5jb25zdCBBUFBfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX0lOU1RBTExFRDogMCxcbiAgTk9UX1JVTk5JTkc6IDEsXG4gIFJVTk5JTkdfSU5fQkFDS0dST1VORDogMyxcbiAgUlVOTklOR19JTl9GT1JFR1JPVU5EOiA0XG59KTtcblxuXG5mdW5jdGlvbiBlbnN1cmVOZXR3b3JrU3BlZWQgKGFkYiwgbmV0d29ya1NwZWVkKSB7XG4gIGlmIChfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCkuaW5jbHVkZXMobmV0d29ya1NwZWVkKSkge1xuICAgIHJldHVybiBuZXR3b3JrU3BlZWQ7XG4gIH1cbiAgbG9nZ2VyLndhcm4oYFdyb25nIG5ldHdvcmsgc3BlZWQgcGFyYW0gJyR7bmV0d29ya1NwZWVkfScsIHVzaW5nIGRlZmF1bHQ6ICR7YWRiLk5FVFdPUktfU1BFRUQuRlVMTH0uIGAgK1xuICAgIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgcmV0dXJuIGFkYi5ORVRXT1JLX1NQRUVELkZVTEw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBdmRBcmdzIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtTcGVlZCxcbiAgICBpc0hlYWRsZXNzLFxuICAgIGF2ZEFyZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGF2ZEFyZ3MpIHtcbiAgICBpZiAoXy5pc0FycmF5KGF2ZEFyZ3MpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hdmRBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKHV0aWwuc2hlbGxQYXJzZShgJHthdmRBcmdzfWApKSk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrU3BlZWQpIHtcbiAgICByZXN1bHQucHVzaCgnLW5ldHNwZWVkJywgZW5zdXJlTmV0d29ya1NwZWVkKGFkYiwgbmV0d29ya1NwZWVkKSk7XG4gIH1cbiAgaWYgKGlzSGVhZGxlc3MpIHtcbiAgICByZXN1bHQucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHRvQ3JlZGVudGlhbFR5cGUgKHVubG9ja1R5cGUpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFtQSU5fVU5MT0NLXTogJ3BpbicsXG4gICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogJ3BpbicsXG4gICAgW1BBU1NXT1JEX1VOTE9DS106ICdwYXNzd29yZCcsXG4gICAgW1BBVFRFUk5fVU5MT0NLXTogJ3BhdHRlcm4nLFxuICB9W3VubG9ja1R5cGVdO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayB0eXBlICcke3VubG9ja1R5cGV9JyBpcyBub3Qga25vd25gKTtcbn1cblxuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmhlbHBlcnMuY3JlYXRlQmFzZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJhc2VBREIgKG9wdHMgPSB7fSkge1xuICAvLyBmaWx0ZXIgb3V0IGFueSB1bndhbnRlZCBvcHRpb25zIHNlbnQgaW5cbiAgLy8gdGhpcyBsaXN0IHNob3VsZCBiZSB1cGRhdGVkIGFzIEFEQiB0YWtlcyBtb3JlIGFyZ3VtZW50c1xuICBjb25zdCB7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCBBREIuY3JlYXRlQURCKHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9KTtcbn07XG5cbmhlbHBlcnMucHJlcGFyZUVtdWxhdG9yID0gYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUVtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIGF2ZCxcbiAgICBhdmRFbnY6IGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGU6IGNvdW50cnksXG4gICAgYXZkTGF1bmNoVGltZW91dDogbGF1bmNoVGltZW91dCxcbiAgICBhdmRSZWFkeVRpbWVvdXQ6IHJlYWR5VGltZW91dCxcbiAgfSA9IG9wdHM7XG4gIGlmICghYXZkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbGF1bmNoIEFWRCB3aXRob3V0IEFWRCBuYW1lJyk7XG4gIH1cblxuICBjb25zdCBhdmROYW1lID0gYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGxldCBpc0VtdWxhdG9yUnVubmluZyA9IHRydWU7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLmdldFJ1bm5pbmdBVkRXaXRoUmV0cnkoYXZkTmFtZSwgNTAwMCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoYEVtdWxhdG9yICcke2F2ZE5hbWV9JyBpcyBub3QgcnVubmluZzogJHtlLm1lc3NhZ2V9YCk7XG4gICAgaXNFbXVsYXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhcmdzID0gcHJlcGFyZUF2ZEFyZ3MoYWRiLCBvcHRzKTtcbiAgaWYgKGlzRW11bGF0b3JSdW5uaW5nKSB7XG4gICAgaWYgKGFyZ3MuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBLaWxsaW5nICcke2F2ZE5hbWV9JyBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIHdpcGVkIGF0IHN0YXJ0LmApO1xuICAgICAgYXdhaXQgYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdOb3QgbGF1bmNoaW5nIEFWRCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgcnVubmluZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgYXdhaXQgYWRiLmxhdW5jaEFWRChhdmQsIHtcbiAgICBhcmdzLFxuICAgIGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBjb3VudHJ5LFxuICAgIGxhdW5jaFRpbWVvdXQsXG4gICAgcmVhZHlUaW1lb3V0LFxuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IGFuZCBlbnN1cmUgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Miw4fS4gZS5nLiBlbiwgamEgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIFRoZSBjb3VudHJ5IChyZWdpb24pIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdXBwZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Mn0gfCBbMC05XXszfS4gZS5nLiBVUywgSlAgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gVGhlIHNjcmlwdCBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdGl0bGUgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17NH0uIGUuZy4gSGFucyBpbiB6aC1IYW5zLUNOIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxlZCB0byBzZXQgbG9jYWxlIHByb3Blcmx5XG4gKi9cbmhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlID0gYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGV2aWNlTG9jYWxlIChhZGIsIGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGlmICghXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgIV8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICBsb2dnZXIud2Fybihgc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IHJlcXVpcmVzIGxhbmd1YWdlIG9yIGNvdW50cnkuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEdvdCBsYW5ndWFnZTogJyR7bGFuZ3VhZ2V9JyBhbmQgY291bnRyeTogJyR7Y291bnRyeX0nYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLnNldERldmljZUxhbmd1YWdlQ291bnRyeShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KTtcblxuICBpZiAoIWF3YWl0IGFkYi5lbnN1cmVDdXJyZW50TG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHNjcmlwdCA/IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0sIGNvdW50cnk6ICR7Y291bnRyeX0gYW5kIHNjcmlwdDogJHtzY3JpcHR9YCA6IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0gYW5kIGNvdW50cnk6ICR7Y291bnRyeX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCAke21lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIChvcHRzID0ge30pIHtcbiAgLy8gd2UgY2FuIGNyZWF0ZSBhIHRocm93YXdheSBBREIgaW5zdGFuY2UgaGVyZSwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jeVxuICAvLyBvbiBpbnN0YW50aWF0aW5nIG9uIGVhcmxpZXIgKGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgbm8gdWRpZClcbiAgLy8gd2UgY2FuIG9ubHkgdXNlIHRoaXMgQURCIG9iamVjdCBmb3IgY29tbWFuZHMgdGhhdCB3b3VsZCBub3QgYmUgY29uZnVzZWRcbiAgLy8gaWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUgY29ubmVjdGVkXG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgbGV0IHVkaWQgPSBvcHRzLnVkaWQ7XG4gIGxldCBlbVBvcnQgPSBudWxsO1xuXG4gIC8vIGEgc3BlY2lmaWMgYXZkIG5hbWUgd2FzIGdpdmVuLiB0cnkgdG8gaW5pdGlhbGl6ZSB3aXRoIHRoYXRcbiAgaWYgKG9wdHMuYXZkKSB7XG4gICAgYXdhaXQgaGVscGVycy5wcmVwYXJlRW11bGF0b3IoYWRiLCBvcHRzKTtcbiAgICB1ZGlkID0gYWRiLmN1ckRldmljZUlkO1xuICAgIGVtUG9ydCA9IGFkYi5lbXVsYXRvclBvcnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gYXZkIGdpdmVuLiBsZXRzIHRyeSB3aGF0ZXZlcidzIHBsdWdnZWQgaW4gZGV2aWNlcy9lbXVsYXRvcnNcbiAgICBsb2dnZXIuaW5mbygnUmV0cmlldmluZyBkZXZpY2UgbGlzdCcpO1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgYWRiLmdldERldmljZXNXaXRoUmV0cnkoKTtcblxuICAgIC8vIHVkaWQgd2FzIGdpdmVuLCBsZXRzIHRyeSB0byBpbml0IHdpdGggdGhhdCBkZXZpY2VcbiAgICBpZiAodWRpZCkge1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKF8ubWFwKGRldmljZXMsICd1ZGlkJyksIHVkaWQpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBEZXZpY2UgJHt1ZGlkfSB3YXMgbm90IGluIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzYCk7XG4gICAgICB9XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICBvcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGAke29wdHMucGxhdGZvcm1WZXJzaW9ufWAudHJpbSgpO1xuXG4gICAgICAvLyBhIHBsYXRmb3JtIHZlcnNpb24gd2FzIGdpdmVuLiBsZXRzIHRyeSB0byBmaW5kIGEgZGV2aWNlIHdpdGggdGhlIHNhbWUgb3NcbiAgICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbiA9IHNlbXZlci5jb2VyY2Uob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHx8IG9wdHMucGxhdGZvcm1WZXJzaW9uO1xuICAgICAgbG9nZ2VyLmluZm8oYExvb2tpbmcgZm9yIGEgZGV2aWNlIHdpdGggQW5kcm9pZCAnJHtwbGF0Zm9ybVZlcnNpb259J2ApO1xuXG4gICAgICAvLyBpbiBjYXNlIHdlIGZhaWwgdG8gZmluZCBzb21ldGhpbmcsIGdpdmUgdGhlIHVzZXIgYSB1c2VmdWwgbG9nIHRoYXQgaGFzXG4gICAgICAvLyB0aGUgZGV2aWNlIHVkaWRzIGFuZCBvcyB2ZXJzaW9ucyBzbyB0aGV5IGtub3cgd2hhdCdzIGF2YWlsYWJsZVxuICAgICAgY29uc3QgYXZhaWxEZXZpY2VzID0gW107XG4gICAgICBsZXQgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0gbnVsbDtcbiAgICAgIC8vIGZpcnN0IHRyeSBzdGFydGVkIGRldmljZXMvZW11bGF0b3JzXG4gICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICAgIC8vIGRpcmVjdCBhZGIgY2FsbHMgdG8gdGhlIHNwZWNpZmljIGRldmljZVxuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQoZGV2aWNlLnVkaWQpO1xuICAgICAgICBjb25zdCByYXdEZXZpY2VPUyA9IGF3YWl0IGFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgICAgLy8gVGhlIGRldmljZSBPUyBjb3VsZCBlaXRoZXIgYmUgYSBudW1iZXIsIGxpa2UgYDYuMGBcbiAgICAgICAgLy8gb3IgYW4gYWJicmV2aWF0aW9uLCBsaWtlIGBSYFxuICAgICAgICBhdmFpbERldmljZXMucHVzaChgJHtkZXZpY2UudWRpZH0gKCR7cmF3RGV2aWNlT1N9KWApO1xuICAgICAgICBjb25zdCBkZXZpY2VPUyA9IHNlbXZlci5jb2VyY2UocmF3RGV2aWNlT1MpIHx8IHJhd0RldmljZU9TO1xuICAgICAgICBpZiAoIWRldmljZU9TKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgPSBzZW12ZXIudmFsaWQoZGV2aWNlT1MpICYmIHNlbXZlci52YWxpZChwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzID0gXy5pc1N0cmluZyhkZXZpY2VPUykgJiYgXy5pc1N0cmluZyhwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBpZiAoYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkICYmIGRldmljZU9TLnZlcnNpb24gPT09IHBsYXRmb3JtVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgICAgICB8fCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzICYmIF8udG9Mb3dlcihkZXZpY2VPUykgPT09IF8udG9Mb3dlcihwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgICAgICAgLy8gR290IGFuIGV4YWN0IG1hdGNoIC0gcHJvY2VlZCBpbW1lZGlhdGVseVxuICAgICAgICAgIHVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgaXMgbm8gcG9pbnQgdG8gY2hlY2sgZm9yIHBhcnRpYWwgbWF0Y2ggaWYgZWl0aGVyIG9mIHZlcnNpb24gbnVtYmVycyBpcyBub3QgY29lcmNpYmxlXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFfLmluY2x1ZGVzKG9wdHMucGxhdGZvcm1WZXJzaW9uLCAnLicpICYmIHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3JcbiAgICAgICAgICAgIHx8IHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3IgJiYgcGxhdGZvcm1WZXJzaW9uLm1pbm9yID09PSBkZXZpY2VPUy5taW5vcilcbiAgICAgICAgICAgIC8vIEdvdCBhIHBhcnRpYWwgbWF0Y2ggLSBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIG1vc3QgcmVjZW50XG4gICAgICAgICAgICAvLyBkZXZpY2UgdmVyc2lvbiBhdmFpbGFibGUgb24gdGhlIGhvc3Qgc3lzdGVtXG4gICAgICAgICAgICAmJiAocGFydGlhbE1hdGNoQ2FuZGlkYXRlICYmIHNlbXZlci5ndChkZXZpY2VPUywgXy52YWx1ZXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXSlcbiAgICAgICAgICAgICAgICB8fCAhcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSkge1xuICAgICAgICAgIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IHtbZGV2aWNlLnVkaWRdOiBkZXZpY2VPU307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdWRpZCAmJiBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpIHtcbiAgICAgICAgdWRpZCA9IF8ua2V5cyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdO1xuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdWRpZCkge1xuICAgICAgICAvLyB3ZSBjb3VsZG4ndCBmaW5kIGFueXRoaW5nISBxdWl0XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gZmluZCBhbiBhY3RpdmUgZGV2aWNlIG9yIGVtdWxhdG9yIGAgK1xuICAgICAgICAgIGB3aXRoIE9TICR7b3B0cy5wbGF0Zm9ybVZlcnNpb259LiBUaGUgZm9sbG93aW5nIGFyZSBhdmFpbGFibGU6IGAgK1xuICAgICAgICAgIGF2YWlsRGV2aWNlcy5qb2luKCcsICcpKTtcbiAgICAgIH1cblxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGEgdWRpZCB3YXMgbm90IGdpdmVuLCBncmFiIHRoZSBmaXJzdCBkZXZpY2Ugd2Ugc2VlXG4gICAgICB1ZGlkID0gZGV2aWNlc1swXS51ZGlkO1xuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmluZm8oYFVzaW5nIGRldmljZTogJHt1ZGlkfWApO1xuICByZXR1cm4ge3VkaWQsIGVtUG9ydH07XG59O1xuXG4vLyByZXR1cm5zIGEgbmV3IGFkYiBpbnN0YW5jZSB3aXRoIGRldmljZUlkIHNldFxuaGVscGVycy5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IG9wdHM7XG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICBpZiAoZW1Qb3J0KSB7XG4gICAgYWRiLnNldEVtdWxhdG9yUG9ydChlbVBvcnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkYjtcbn07XG5cbmhlbHBlcnMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyA9IGZ1bmN0aW9uIHZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgKG9wdHMpIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydhcHBQYWNrYWdlJywgJ2FwcEFjdGl2aXR5JywgJ2FwcFdhaXRQYWNrYWdlJywgJ2FwcFdhaXRBY3Rpdml0eSddKSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdHNba2V5XTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gLyhbXlxcdy4qLF0pKy8uZXhlYyhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgQ2FwYWJpbGl0eSAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBvbmx5IGluY2x1ZGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3JlLCBkb3QsIGNvbW1hIGFuZCBhc3RlcmlzayBjaGFyYWN0ZXJzLmApO1xuICAgIGxvZ2dlci53YXJuKGBDdXJyZW50IHZhbHVlICcke25hbWV9JyBoYXMgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBhdCBpbmRleCAke21hdGNoLmluZGV4fTogJyR7bmFtZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXggKyAxKX0nYCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0TGF1bmNoSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldExhdW5jaEluZm8gKGFkYiwgb3B0cykge1xuICBsZXQge2FwcCwgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHl9ID0gb3B0cztcbiAgaWYgKCFhcHApIHtcbiAgICBsb2dnZXIud2FybignTm8gYXBwIHNlbnQgaW4sIG5vdCBwYXJzaW5nIHBhY2thZ2UvYWN0aXZpdHknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMob3B0cyk7XG5cbiAgaWYgKGFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ1BhcnNpbmcgcGFja2FnZSBhbmQgYWN0aXZpdHkgZnJvbSBhcHAgbWFuaWZlc3QnKTtcbiAgbGV0IHthcGtQYWNrYWdlLCBhcGtBY3Rpdml0eX0gPVxuICAgIGF3YWl0IGFkYi5wYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QoYXBwKTtcbiAgaWYgKGFwa1BhY2thZ2UgJiYgIWFwcFBhY2thZ2UpIHtcbiAgICBhcHBQYWNrYWdlID0gYXBrUGFja2FnZTtcbiAgfVxuICBpZiAoIWFwcFdhaXRQYWNrYWdlKSB7XG4gICAgYXBwV2FpdFBhY2thZ2UgPSBhcHBQYWNrYWdlO1xuICB9XG4gIGlmIChhcGtBY3Rpdml0eSAmJiAhYXBwQWN0aXZpdHkpIHtcbiAgICBhcHBBY3Rpdml0eSA9IGFwa0FjdGl2aXR5O1xuICB9XG4gIGlmICghYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgYXBwV2FpdEFjdGl2aXR5ID0gYXBwQWN0aXZpdHk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHkgYXJlOiAke2Fwa1BhY2thZ2V9LyR7YXBrQWN0aXZpdHl9YCk7XG4gIHJldHVybiB7YXBwUGFja2FnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0QWN0aXZpdHl9O1xufTtcblxuaGVscGVycy5yZXNldEFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0QXBwIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVF9NUyxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwUGFja2FnZScgb3B0aW9uIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCBhZGIuaXNBcHBJbnN0YWxsZWQoYXBwUGFja2FnZSk7XG5cbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5mb3JjZVN0b3AoYXBwUGFja2FnZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIC8vIGZ1bGxSZXNldCBoYXMgcHJpb3JpdHkgb3ZlciBmYXN0UmVzZXRcbiAgICBpZiAoIWZ1bGxSZXNldCAmJiBmYXN0UmVzZXQpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGFkYi5jbGVhcihhcHBQYWNrYWdlKTtcbiAgICAgIGlmIChfLmlzU3RyaW5nKG91dHB1dCkgJiYgb3V0cHV0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2ZhaWxlZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNsZWFyIHRoZSBhcHBsaWNhdGlvbiBkYXRhIG9mICcke2FwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgLy8gZXhlY3V0aW5nIGBzaGVsbCBwbSBjbGVhcmAgcmVzZXRzIHByZXZpb3VzbHkgYXNzaWduZWQgYXBwbGljYXRpb24gcGVybWlzc2lvbnMgYXMgd2VsbFxuICAgICAgaWYgKGF1dG9HcmFudFBlcm1pc3Npb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWRiLmdyYW50QWxsUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gZ3JhbnQgcGVybWlzc2lvbnMgcmVxdWVzdGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoYFBlcmZvcm1lZCBmYXN0IHJlc2V0IG9uIHRoZSBpbnN0YWxsZWQgJyR7YXBwUGFja2FnZX0nIGFwcGxpY2F0aW9uIChzdG9wIGFuZCBjbGVhcilgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWFwcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIHByb3ZpZGUgJ2FwcCcgb3B0aW9uIHRvIGluc3RhbGwgJyR7YXBwUGFja2FnZX0nIG9yIGAgK1xuICAgICAgYGNvbnNpZGVyIHNldHRpbmcgJ25vUmVzZXQnIHRvICd0cnVlJyBpZiAnJHthcHBQYWNrYWdlfScgaXMgc3VwcG9zZWQgdG8gYmUgcHJlaW5zdGFsbGVkLmApO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBSdW5uaW5nIGZ1bGwgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nIChyZWluc3RhbGwpYCk7XG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSk7XG4gIH1cbiAgYXdhaXQgYWRiLmluc3RhbGwoYXBwLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICB9KTtcbn07XG5cbmhlbHBlcnMuaW5zdGFsbEFwayA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcGsgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUX01TLFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCB8fCAhYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIGFuZCAnYXBwUGFja2FnZScgb3B0aW9ucyBhcmUgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAoZnVsbFJlc2V0KSB7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBhcHBTdGF0ZSxcbiAgICB3YXNVbmluc3RhbGxlZFxuICB9ID0gYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBwLCBhcHBQYWNrYWdlLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VDdXJyZW50QnVpbGQ6IGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9KTtcblxuICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IHRoZSBuZXdseSBpbnN0YWxsZWQgYXBwXG4gIGNvbnN0IGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwID0gIXdhc1VuaW5zdGFsbGVkXG4gICAgJiYgYXBwU3RhdGUgIT09IGFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICBpZiAoZmFzdFJlc2V0ICYmIGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwKSB7XG4gICAgbG9nZ2VyLmluZm8oYFBlcmZvcm1pbmcgZmFzdCByZXNldCBvbiAnJHthcHBQYWNrYWdlfSdgKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gIH1cbn07XG5cbi8qKlxuICogSW5zdGFsbHMgYW4gYXJyYXkgb2YgYXBrc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0cyBkZWZpbmVkIGluIGRyaXZlci5qc1xuICovXG5oZWxwZXJzLmluc3RhbGxPdGhlckFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsT3RoZXJBcGtzIChvdGhlckFwcHMsIGFkYiwgb3B0cykge1xuICBsZXQge1xuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUX01TLFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIC8vIEluc3RhbGwgYWxsIG9mIHRoZSBBUEsncyBhc3luY2hyb25vdXNseVxuICBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChvdGhlckFwcCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgSW5zdGFsbGluZyBhcHA6ICR7b3RoZXJBcHB9YCk7XG4gICAgcmV0dXJuIGFkYi5pbnN0YWxsT3JVcGdyYWRlKG90aGVyQXBwLCBudWxsLCB7XG4gICAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIH0pO1xuICB9KSk7XG59O1xuXG4vKipcbiAqIFVuaW5zdGFsbCBhbiBhcnJheSBvZiBwYWNrYWdlc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcHBQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlIG5hbWVzIHRvIHVuaW5zdGFsbC4gSWYgdGhpcyBpbmNsdWRlcyBgJyonYCwgdW5pbnN0YWxsIGFsbCBvZiAzcmQgcGFydHkgYXBwc1xuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICovXG5oZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxPdGhlclBhY2thZ2VzIChhZGIsIGFwcFBhY2thZ2VzLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIGlmIChhcHBQYWNrYWdlcy5pbmNsdWRlcygnKicpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdVbmluc3RhbGwgdGhpcmQgcGFydHkgcGFja2FnZXMnKTtcbiAgICBhcHBQYWNrYWdlcyA9IGF3YWl0IHRoaXMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzKGFkYiwgZmlsdGVyUGFja2FnZXMpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbmluc3RhbGxpbmcgcGFja2FnZXM6ICR7YXBwUGFja2FnZXN9YCk7XG4gIGF3YWl0IEIuYWxsKGFwcFBhY2thZ2VzLm1hcCgoYXBwUGFja2FnZSkgPT4gYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKSkpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhpcmQgcGFydHkgcGFja2FnZXMgZmlsdGVyZWQgd2l0aCBgZmlsdGVyUGFja2FnZXNgXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gYXJyYXkgb2YgaW5zdGFsbGVkIHRoaXJkIHBhcnkgcGFja2FnZXNcbiAqL1xuaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRUaGlyZFBhcnR5UGFja2FnZXMgKGFkYiwgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VzU3RyaW5nID0gYXdhaXQgYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsICctMyddKTtcbiAgICBjb25zdCBhcHBQYWNrYWdlc0FycmF5ID0gcGFja2FnZXNTdHJpbmcudHJpbSgpLnJlcGxhY2UoL3BhY2thZ2U6L2csICcnKS5zcGxpdChFT0wpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgJyR7YXBwUGFja2FnZXNBcnJheX0nIGZpbHRlcmVkIHdpdGggJyR7ZmlsdGVyUGFja2FnZXN9J2ApO1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXBwUGFja2FnZXNBcnJheSwgZmlsdGVyUGFja2FnZXMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIGdldCBwYWNrYWdlcyB3aXRoICdhZGIgc2hlbGwgcG0gbGlzdCBwYWNrYWdlcyAtMyc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5oZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBpbml0VW5pY29kZUtleWJvYXJkIChhZGIpIHtcbiAgbG9nZ2VyLmRlYnVnKCdFbmFibGluZyBVbmljb2RlIGtleWJvYXJkIHN1cHBvcnQnKTtcblxuICAvLyBnZXQgdGhlIGRlZmF1bHQgSU1FIHNvIHdlIGNhbiByZXR1cm4gYmFjayB0byBpdCBsYXRlciBpZiB3ZSB3YW50XG4gIGxldCBkZWZhdWx0SU1FID0gYXdhaXQgYWRiLmRlZmF1bHRJTUUoKTtcblxuICBsb2dnZXIuZGVidWcoYFVuc2V0dGluZyBwcmV2aW91cyBJTUUgJHtkZWZhdWx0SU1FfWApO1xuICBjb25zdCBhcHBpdW1JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8uVW5pY29kZUlNRWA7XG4gIGxvZ2dlci5kZWJ1ZyhgU2V0dGluZyBJTUUgdG8gJyR7YXBwaXVtSU1FfSdgKTtcbiAgYXdhaXQgYWRiLmVuYWJsZUlNRShhcHBpdW1JTUUpO1xuICBhd2FpdCBhZGIuc2V0SU1FKGFwcGl1bUlNRSk7XG4gIHJldHVybiBkZWZhdWx0SU1FO1xufTtcblxuaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAgPSBhc3luYyBmdW5jdGlvbiBzZXRNb2NrTG9jYXRpb25BcHAgKGFkYiwgYXBwKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcxJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgYXBwLCAnYW5kcm9pZDptb2NrX2xvY2F0aW9uJywgJ2FsbG93J10pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzZXQgbW9jayBsb2NhdGlvbiBmb3IgYXBwICcke2FwcH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGxldCBwa2dJZHMgPSBbXTtcbiAgICBpZiAoYXdhaXQgYWRiLmZpbGVFeGlzdHMoTU9DS19BUFBfSURTX1NUT1JFKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGtnSWRzID0gSlNPTi5wYXJzZShhd2FpdCBhZGIuc2hlbGwoWydjYXQnLCBNT0NLX0FQUF9JRFNfU1RPUkVdKSk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICAgIGlmIChwa2dJZHMuaW5jbHVkZXMoYXBwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwa2dJZHMucHVzaChhcHApO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5wb3NpeC5qb2luKHRtcFJvb3QsIHBhdGgucG9zaXguYmFzZW5hbWUoTU9DS19BUFBfSURTX1NUT1JFKSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShzcmNQYXRoLCBKU09OLnN0cmluZ2lmeShwa2dJZHMpLCAndXRmOCcpO1xuICAgICAgYXdhaXQgYWRiLnB1c2goc3JjUGF0aCwgTU9DS19BUFBfSURTX1NUT1JFKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcGVyc2lzdCBtb2NrIGxvY2F0aW9uIGFwcCBpZCAnJHthcHB9JzogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMucmVzZXRNb2NrTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiByZXNldE1vY2tMb2NhdGlvbiAoYWRiKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcwJ10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRoaXJkUGFydHlQa2dJZHNQcm9taXNlID0gaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMoYWRiKTtcbiAgICBsZXQgcGtnSWRzID0gW107XG4gICAgaWYgKGF3YWl0IGFkYi5maWxlRXhpc3RzKE1PQ0tfQVBQX0lEU19TVE9SRSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBrZ0lkcyA9IEpTT04ucGFyc2UoYXdhaXQgYWRiLnNoZWxsKFsnY2F0JywgTU9DS19BUFBfSURTX1NUT1JFXSkpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgICBjb25zdCB0aGlyZFBhcnR5UGtnSWRzID0gYXdhaXQgdGhpcmRQYXJ0eVBrZ0lkc1Byb21pc2U7XG4gICAgLy8gT25seSBpbmNsdWRlIGN1cnJlbnRseSBpbnN0YWxsZWQgcGFja2FnZXNcbiAgICBjb25zdCByZXN1bHRQa2dzID0gXy5pbnRlcnNlY3Rpb24ocGtnSWRzLCB0aGlyZFBhcnR5UGtnSWRzKTtcbiAgICBpZiAoXy5zaXplKHJlc3VsdFBrZ3MpIDw9IDEpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCByZXN1bHRQa2dzWzBdID8/IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsICdhbmRyb2lkOm1vY2tfbG9jYXRpb24nLCAnZGVueSddKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFJlc2V0dGluZyBtb2NrX2xvY2F0aW9uIHBlcm1pc3Npb24gZm9yIHRoZSBmb2xsb3dpbmcgYXBwczogJHtyZXN1bHRQa2dzfWApO1xuICAgIGF3YWl0IEIuYWxsKHJlc3VsdFBrZ3MubWFwKChwa2dJZCkgPT4gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCBwa2dJZCwgJ2FuZHJvaWQ6bW9ja19sb2NhdGlvbicsICdkZW55J10pO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH0pKCkpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byByZXNldCBtb2NrIGxvY2F0aW9uOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSGVscGVyQXBwIChhZGIsIGFwa1BhdGgsIHBhY2thZ2VJZCkge1xuICAvLyBTb21ldGltZXMgYWRiIHB1c2ggb3IgYWRiIGluc3RhbCB0YWtlIG1vcmUgdGltZSB0aGFuIGV4cGVjdGVkIHRvIGluc3RhbGwgYW4gYXBwXG4gIC8vIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MvaXNzdWVzLzQwI2lzc3VlY29tbWVudC00NzY1OTMxNzRcbiAgYXdhaXQgcmV0cnlJbnRlcnZhbChIRUxQRVJfQVBQX0lOU1RBTExfUkVUUklFUywgSEVMUEVSX0FQUF9JTlNUQUxMX1JFVFJZX0RFTEFZX01TLFxuICAgIGFzeW5jIGZ1bmN0aW9uIHJldHJ5SW5zdGFsbEhlbHBlckFwcCAoKSB7XG4gICAgICBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcGtQYXRoLCBwYWNrYWdlSWQsIHtncmFudFBlcm1pc3Npb25zOiB0cnVlfSk7XG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBQdXNoZXMgYW5kIGluc3RhbGxzIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHNldHRpbmcgYXBwIGlzIHJlcXVpcmVkXG4gKlxuICogQHBhcmFtIHtBZGJ9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBEcml2ZXIgb3B0aW9ucyBkaWN0aW9uYXJ5LlxuICogQHBhcmFtIHtib29sZWFufSB0aHJvd0Vycm9yIFtmYWxzZV0gLSBXaGV0aGVyIHRocm93IGFuIGVycm9yIGlmIFNldHRpbmdzIGFwcCBmYWlscyB0byBzdGFydFxuICogQHRocm93cyB7RXJyb3J9IElmIHRocm93RXJyb3IgaXMgdHJ1ZSBhbmQgc29tZXRoaW5nIGhhcHBlbnMgaW4gaW5zdGFsbGF0aW9uIHN0ZXBcbiAqL1xuaGVscGVycy5wdXNoU2V0dGluZ3NBcHAgPSBhc3luYyBmdW5jdGlvbiBwdXNoU2V0dGluZ3NBcHAgKGFkYiwgdGhyb3dFcnJvciA9IGZhbHNlLCBvcHRzID0ge30pIHtcbiAgbG9nZ2VyLmRlYnVnKCdQdXNoaW5nIHNldHRpbmdzIGFwayB0byBkZXZpY2UuLi4nKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEhlbHBlckFwcChhZGIsIHNldHRpbmdzQXBrUGF0aCwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgdGhyb3dFcnJvcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYElnbm9yZWQgZXJyb3Igd2hpbGUgaW5zdGFsbGluZyAnJHtzZXR0aW5nc0Fwa1BhdGh9JzogYCArXG4gICAgICAgICAgICAgICAgYCcke2Vyci5tZXNzYWdlfScuIEZlYXR1cmVzIHRoYXQgcmVseSBvbiB0aGlzIGhlbHBlciBgICtcbiAgICAgICAgICAgICAgICAncmVxdWlyZSB0aGUgYXBrIHN1Y2ggYXMgdG9nZ2xlIFdpRmkgYW5kIGdldHRpbmcgbG9jYXRpb24gJyArXG4gICAgICAgICAgICAgICAgJ3dpbGwgcmFpc2UgYW4gZXJyb3IgaWYgeW91IHRyeSB0byB1c2UgdGhlbS4nKTtcbiAgfVxuXG4gIC8vIFJlaW5zdGFsbCB3b3VsZCBzdG9wIHRoZSBzZXR0aW5ncyBoZWxwZXIgcHJvY2VzcyBhbnl3YXksIHNvXG4gIC8vIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHN0aWxsIHJ1bm5pbmdcbiAgaWYgKGF3YWl0IGFkYi5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9IGlzIGFscmVhZHkgcnVubmluZy4gYCArXG4gICAgICBgVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCBpdHMgcGVybWlzc2lvbnMuYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgaWYgKGFwaUxldmVsID49IDI5KSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MjaW50ZXJuYWwtYXVkaW8tLXZpZGVvLXJlY29yZGluZ1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgJ1BST0pFQ1RfTUVESUEnLCAnYWxsb3cnXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoZXJyKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFwaUxldmVsIDw9IDIzKSB7IC8vIEFuZHJvaWQgNi0gZGV2aWNlcyBzaG91bGQgaGF2ZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcHVsbC8xMTY0MCNpc3N1ZWNvbW1lbnQtNDM4MjYwNDc3XG4gICAgY29uc3QgcGVybXMgPSBbJ1NFVF9BTklNQVRJT05fU0NBTEUnLCAnQ0hBTkdFX0NPTkZJR1VSQVRJT04nLCAnQUNDRVNTX0ZJTkVfTE9DQVRJT04nXTtcbiAgICBsb2dnZXIuaW5mbyhgR3JhbnRpbmcgcGVybWlzc2lvbnMgJHtwZXJtc30gdG8gJyR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0nYCk7XG4gICAgYXdhaXQgYWRiLmdyYW50UGVybWlzc2lvbnMoU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgcGVybXMubWFwKCh4KSA9PiBgYW5kcm9pZC5wZXJtaXNzaW9uLiR7eH1gKSk7XG4gIH1cblxuICAvLyBsYXVuY2ggaW8uYXBwaXVtLnNldHRpbmdzIGFwcCBkdWUgdG8gc2V0dGluZ3MgZmFpbGluZyB0byBiZSBzZXRcbiAgLy8gaWYgdGhlIGFwcCBpcyBub3QgbGF1bmNoZWQgcHJpb3IgdG8gc3RhcnQgdGhlIHNlc3Npb24gb24gYW5kcm9pZCA3K1xuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzg5NTdcbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCh7XG4gICAgICB0aW1lb3V0OiBoZWxwZXJzLmlzRW11bGF0b3IoYWRiLCBvcHRzKSA/IDMwMDAwIDogNTAwMFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoZXJyKTtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBzdHJpbmcueG1sIGFuZCBjb252ZXJ0cyBpdCB0byBzdHJpbmcuanNvbiBhbmQgcHVzaGVzXG4gKiBpdCB0byAvZGF0YS9sb2NhbC90bXAvc3RyaW5nLmpzb24gb24gZm9yIHVzZSBvZiBib290c3RyYXBcbiAqIElmIGFwcCBpcyBub3QgcHJlc2VudCB0byBleHRyYWN0IHN0cmluZy54bWwgaXQgZGVsZXRlcyByZW1vdGUgc3RyaW5ncy5qc29uXG4gKiBJZiBhcHAgZG9lcyBub3QgaGF2ZSBzdHJpbmdzLnhtbCB3ZSBwdXNoIGFuIGVtcHR5IGpzb24gb2JqZWN0IHRvIHJlbW90ZVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZSBhYmJyZXZpYXRpb24sIGZvciBleGFtcGxlICdmcicuIFRoZSBkZWZhdWx0IGxhbmd1YWdlXG4gKiBpcyB1c2VkIGlmIHRoaXMgYXJndW1lbnQgaXMgbm90IGRlZmluZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIERyaXZlciBvcHRpb25zIGRpY3Rpb25hcnkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGljdGlvbmFyeSwgd2hlcmUgc3RyaW5nIHJlc291cmNlIGlkZW50aWZpZXJzIGFyZSBrZXlzXG4gKiBhbG9uZyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2Ugb3IgYW4gZW1wdHkgb2JqZWN0XG4gKiBpZiBubyBtYXRjaGluZyByZXNvdXJjZXMgd2VyZSBleHRyYWN0ZWQuXG4gKi9cbmhlbHBlcnMucHVzaFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiBwdXNoU3RyaW5ncyAobGFuZ3VhZ2UsIGFkYiwgb3B0cykge1xuICBjb25zdCByZW1vdGVEaXIgPSAnL2RhdGEvbG9jYWwvdG1wJztcbiAgY29uc3Qgc3RyaW5nc0pzb24gPSAnc3RyaW5ncy5qc29uJztcbiAgY29uc3QgcmVtb3RlRmlsZSA9IHBhdGgucG9zaXgucmVzb2x2ZShyZW1vdGVEaXIsIHN0cmluZ3NKc29uKTtcblxuICAvLyBjbGVhbiB1cCByZW1vdGUgc3RyaW5nLmpzb24gaWYgcHJlc2VudFxuICBhd2FpdCBhZGIucmltcmFmKHJlbW90ZUZpbGUpO1xuXG4gIGxldCBhcHA7XG4gIHRyeSB7XG4gICAgYXBwID0gb3B0cy5hcHAgfHwgYXdhaXQgYWRiLnB1bGxBcGsob3B0cy5hcHBQYWNrYWdlLCBvcHRzLnRtcERpcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5pbmZvKGBGYWlsZWQgdG8gcHVsbCBhbiBhcGsgZnJvbSAnJHtvcHRzLmFwcFBhY2thZ2V9JyB0byAnJHtvcHRzLnRtcERpcn0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlmIChfLmlzRW1wdHkob3B0cy5hcHBQYWNrYWdlKSB8fCAhKGF3YWl0IGZzLmV4aXN0cyhhcHApKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gYXBwIG9yIHBhY2thZ2Ugc3BlY2lmaWVkLiBSZXR1cm5pbmcgZW1wdHkgc3RyaW5nc2ApO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ3NUbXBEaXIgPSBwYXRoLnJlc29sdmUob3B0cy50bXBEaXIsIG9wdHMuYXBwUGFja2FnZSk7XG4gIHRyeSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdFeHRyYWN0aW5nIHN0cmluZ3MgZnJvbSBhcGsnLCBhcHAsIGxhbmd1YWdlLCBzdHJpbmdzVG1wRGlyKTtcbiAgICBjb25zdCB7YXBrU3RyaW5ncywgbG9jYWxQYXRofSA9IGF3YWl0IGFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgc3RyaW5nc1RtcERpcik7XG4gICAgYXdhaXQgYWRiLnB1c2gobG9jYWxQYXRoLCByZW1vdGVEaXIpO1xuICAgIHJldHVybiBhcGtTdHJpbmdzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgQ291bGQgbm90IGdldCBzdHJpbmdzLCBjb250aW51aW5nIGFueXdheS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgYXdhaXQgYWRiLnNoZWxsKCdlY2hvJywgW2Ane30nID4gJHtyZW1vdGVGaWxlfWBdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoc3RyaW5nc1RtcERpcik7XG4gIH1cbiAgcmV0dXJuIHt9O1xufTtcblxuaGVscGVycy51bmxvY2sgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2sgKGRyaXZlciwgYWRiLCBjYXBhYmlsaXRpZXMpIHtcbiAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NjcmVlbiBhbHJlYWR5IHVubG9ja2VkLCBkb2luZyBub3RoaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKCdTY3JlZW4gaXMgbG9ja2VkLCB0cnlpbmcgdG8gdW5sb2NrJyk7XG4gIGlmICghY2FwYWJpbGl0aWVzLnVubG9ja1R5cGUgJiYgIWNhcGFiaWxpdGllcy51bmxvY2tLZXkpIHtcbiAgICBsb2dnZXIuaW5mbyhgTmVpdGhlciAndW5sb2NrVHlwZScgbm9yICd1bmxvY2tLZXknIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQuIGAgK1xuICAgICAgYEFzc3VtaW5nIHRoZSBkZXZpY2UgaXMgbG9ja2VkIHdpdGggYSBzaW1wbGUgbG9jayBzY3JlZW4uYCk7XG4gICAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB1bmxvY2tUeXBlLFxuICAgIHVubG9ja0tleSxcbiAgICB1bmxvY2tTdHJhdGVneSxcbiAgICB1bmxvY2tTdWNjZXNzVGltZW91dCxcbiAgfSA9IHVubG9ja2VyLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7XG4gIGlmICh1bmxvY2tLZXkgJiYgdW5sb2NrVHlwZSAhPT0gRklOR0VSUFJJTlRfVU5MT0NLXG4gICAgICAmJiAoXy5pc05pbCh1bmxvY2tTdHJhdGVneSkgfHwgXy50b0xvd2VyKHVubG9ja1N0cmF0ZWd5KSA9PT0gJ2xvY2tzZXR0aW5ncycpXG4gICAgICAmJiBhd2FpdCBhZGIuaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCgpKSB7XG4gICAgYXdhaXQgdW5sb2NrZXIuZmFzdFVubG9jayhhZGIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IHVubG9ja0tleSxcbiAgICAgIGNyZWRlbnRpYWxUeXBlOiB0b0NyZWRlbnRpYWxUeXBlKHVubG9ja1R5cGUpLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVubG9ja01ldGhvZCA9IHtcbiAgICAgIFtQSU5fVU5MT0NLXTogdW5sb2NrZXIucGluVW5sb2NrLFxuICAgICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogdW5sb2NrZXIucGluVW5sb2NrV2l0aEtleUV2ZW50LFxuICAgICAgW1BBU1NXT1JEX1VOTE9DS106IHVubG9ja2VyLnBhc3N3b3JkVW5sb2NrLFxuICAgICAgW1BBVFRFUk5fVU5MT0NLXTogdW5sb2NrZXIucGF0dGVyblVubG9jayxcbiAgICAgIFtGSU5HRVJQUklOVF9VTkxPQ0tdOiB1bmxvY2tlci5maW5nZXJwcmludFVubG9jayxcbiAgICB9W3VubG9ja1R5cGVdO1xuICAgIGF3YWl0IHVubG9ja01ldGhvZChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgfVxuICBhd2FpdCBoZWxwZXJzLnZlcmlmeVVubG9jayhhZGIsIHVubG9ja1N1Y2Nlc3NUaW1lb3V0KTtcbn07XG5cbmhlbHBlcnMudmVyaWZ5VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VW5sb2NrIChhZGIsIHRpbWVvdXRNcyA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+ICEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXRNcyA/PyAyMDAwLFxuICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkZXZpY2UgaGFzIGZhaWxlZCB0byBiZSB1bmxvY2tlZCcpO1xuICB9XG4gIGxvZ2dlci5pbmZvKCdUaGUgZGV2aWNlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bmxvY2tlZCcpO1xufTtcblxuaGVscGVycy5pbml0RGV2aWNlID0gYXN5bmMgZnVuY3Rpb24gaW5pdERldmljZSAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24sXG4gICAgbG9jYWxlLFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2FsZVNjcmlwdCxcbiAgICB1bmljb2RlS2V5Ym9hcmQsXG4gICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICBza2lwVW5sb2NrLFxuICAgIG1vY2tMb2NhdGlvbkFwcCxcbiAgICBza2lwTG9nY2F0Q2FwdHVyZSxcbiAgICBsb2djYXRGb3JtYXQsXG4gICAgbG9nY2F0RmlsdGVyU3BlY3MsXG4gIH0gPSBvcHRzO1xuXG4gIGlmIChza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBEZXZpY2VJbml0aWFsaXphdGlvbicgaXMgc2V0LiBTa2lwcGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uYCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgZGV2aWNlIHdha2UgdXAgb25seSBmb3IgYW4gZW11bGF0b3IuXG4gICAgICAvLyBJdCB0YWtlcyAxIHNlY29uZCBvciBzbyBldmVuIHdoZW4gdGhlIGRldmljZSBpcyBhbHJlYWR5IGF3YWtlIGluIGEgcmVhbCBkZXZpY2UuXG4gICAgICBhd2FpdCBhZGIud2FpdEZvckRldmljZSgpO1xuICAgIH1cbiAgICAvLyBwdXNoU2V0dGluZ3NBcHAgcmVxdWlyZWQgYmVmb3JlIGNhbGxpbmcgZW5zdXJlRGV2aWNlTG9jYWxlIGZvciBBUEkgTGV2ZWwgMjQrXG5cbiAgICAvLyBTb21lIGZlYXR1cmUgc3VjaCBhcyBsb2NhdGlvbi93aWZpIGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhbGwgdXNlcnMsXG4gICAgLy8gYnV0IHRoZXkgcmVxdWlyZSB0aGUgc2V0dGluZ3MgYXBwLiBTbywgdHJ5IHRvIGNvbmZpZ3VyZSBpdCB3aGlsZSBBcHBpdW1cbiAgICAvLyBkb2VzIG5vdCB0aHJvdyBlcnJvciBldmVuIGlmIHRoZXkgZmFpbC5cbiAgICBjb25zdCBzaG91bGRUaHJvd0Vycm9yID0gbGFuZ3VhZ2VcbiAgICAgIHx8IGxvY2FsZVxuICAgICAgfHwgbG9jYWxlU2NyaXB0XG4gICAgICB8fCB1bmljb2RlS2V5Ym9hcmRcbiAgICAgIHx8IGRpc2FibGVXaW5kb3dBbmltYXRpb25cbiAgICAgIHx8ICFza2lwVW5sb2NrO1xuICAgIGF3YWl0IGhlbHBlcnMucHVzaFNldHRpbmdzQXBwKGFkYiwgc2hvdWxkVGhyb3dFcnJvciwgb3B0cyk7XG4gIH1cblxuICBpZiAoIWhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpKSB7XG4gICAgaWYgKG1vY2tMb2NhdGlvbkFwcCB8fCBfLmlzVW5kZWZpbmVkKG1vY2tMb2NhdGlvbkFwcCkpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwKGFkYiwgbW9ja0xvY2F0aW9uQXBwIHx8IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0TW9ja0xvY2F0aW9uKGFkYik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhbmd1YWdlIHx8IGxvY2FsZSkge1xuICAgIGF3YWl0IGhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlKGFkYiwgbGFuZ3VhZ2UsIGxvY2FsZSwgbG9jYWxlU2NyaXB0KTtcbiAgfVxuXG4gIGlmIChza2lwTG9nY2F0Q2FwdHVyZSkge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcExvZ2NhdENhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9nY2F0IGNhcHR1cmUuYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLnN0YXJ0TG9nY2F0KHtcbiAgICAgIGZvcm1hdDogbG9nY2F0Rm9ybWF0LFxuICAgICAgZmlsdGVyU3BlY3M6IGxvZ2NhdEZpbHRlclNwZWNzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHVuaWNvZGVLZXlib2FyZCkge1xuICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQoYWRiKTtcbiAgfVxufTtcblxuaGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyA9IGZ1bmN0aW9uIHJlbW92ZU51bGxQcm9wZXJ0aWVzIChvYmopIHtcbiAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhvYmopKSB7XG4gICAgaWYgKF8uaXNOdWxsKG9ialtrZXldKSB8fCBfLmlzVW5kZWZpbmVkKG9ialtrZXldKSkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy50cnVuY2F0ZURlY2ltYWxzID0gZnVuY3Rpb24gdHJ1bmNhdGVEZWNpbWFscyAobnVtYmVyLCBkaWdpdHMpIHtcbiAgbGV0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgZGlnaXRzKSxcbiAgICAgIGFkanVzdGVkTnVtID0gbnVtYmVyICogbXVsdGlwbGllcixcbiAgICAgIHRydW5jYXRlZE51bSA9IE1hdGhbYWRqdXN0ZWROdW0gPCAwID8gJ2NlaWwnIDogJ2Zsb29yJ10oYWRqdXN0ZWROdW0pO1xuXG4gIHJldHVybiB0cnVuY2F0ZWROdW0gLyBtdWx0aXBsaWVyO1xufTtcblxuaGVscGVycy5pc0Nocm9tZUJyb3dzZXIgPSBmdW5jdGlvbiBpc0Nocm9tZUJyb3dzZXIgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXMoT2JqZWN0LmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSksIChicm93c2VyIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbmhlbHBlcnMuZ2V0Q2hyb21lUGtnID0gZnVuY3Rpb24gZ2V0Q2hyb21lUGtnIChicm93c2VyKSB7XG4gIHJldHVybiBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZW2Jyb3dzZXIudG9Mb3dlckNhc2UoKV0gfHwgQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWS5kZWZhdWx0O1xufTtcblxuaGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgKHNlcnZlciwgc2Vzc2lvbklkKSB7XG4gIGlmICghc2VydmVyIHx8ICFfLmlzRnVuY3Rpb24oc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZUhhbmRsZXJzID0gYXdhaXQgc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKHNlc3Npb25JZCk7XG4gIGZvciAoY29uc3QgcGF0aG5hbWUgb2YgXy5rZXlzKGFjdGl2ZUhhbmRsZXJzKSkge1xuICAgIGF3YWl0IHNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUYWtlcyBhIGRlc2lyZWQgY2FwYWJpbGl0eSBhbmQgdHJpZXMgdG8gSlNPTi5wYXJzZSBpdCBhcyBhbiBhcnJheSxcbiAqIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgcGFyc2VkIGFycmF5IG9yIGEgc2luZ2xldG9uIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7YW55fSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy5wYXJzZUFycmF5ID0gZnVuY3Rpb24gcGFyc2VBcnJheSAoY2FwKSB7XG4gIGxldCBwYXJzZWRDYXBzO1xuICB0cnkge1xuICAgIHBhcnNlZENhcHMgPSBKU09OLnBhcnNlKGNhcCk7XG4gIH0gY2F0Y2ggKGlnbikgeyB9XG5cbiAgaWYgKF8uaXNBcnJheShwYXJzZWRDYXBzKSkge1xuICAgIHJldHVybiBwYXJzZWRDYXBzO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcoY2FwKSkge1xuICAgIHJldHVybiBbY2FwXTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGEgc3RyaW5nIG9yIEpTT04gQXJyYXk7IHJlY2VpdmVkICR7Y2FwfWApO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBkZXNpcmVkIGNhcGFiaWxpdGllcy4gUmV0dXJucyB0cnVlIGlmIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqXG4gKiBAcGFyYW0geyp9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNhcHMgaGFzIGludmFsaWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpcyBpcyBjb21tb24gd2l0aCBzZWxlbml1bSBncmlkXG4gICAgICBsb2dnZXIud2FybihgVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICAgIGlmIChjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBUaGUgZGVzaXJlZCBzaG91bGQgbm90IGluY2x1ZGUgYm90aCBvZiBhbiAnYXBwUGFja2FnZScgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5wYXJzZUFycmF5KGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcInVuaW5zdGFsbE90aGVyUGFja2FnZXNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRqdXN0IHRoZSBjYXBhYmlsaXRpZXMgZm9yIGEgYnJvd3NlciBzZXNzaW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgLSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3RcbiAqICEhISBUaGUgb2JqZWN0IGlzIG11dGF0ZWQgYnkgdGhpcyBtZXRob2QgY2FsbCAhISFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIHBvc3NpYmx5IG11dGF0ZWQgYG9wdHNgIGluc3RhbmNlLlxuICogTm8gbXV0YXRpb24gaXMgaGFwcGVuaW5nIGlzIHRoZSBjdXJyZW50IHNlc3Npb24gaWZcbiAqIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwcyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZC5cbiAqL1xuaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgPSBmdW5jdGlvbiBhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7IGJyb3dzZXJOYW1lIH0gPSBjYXBzO1xuICBsb2dnZXIuaW5mbyhgVGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGJyb3dzZXItYmFzZWRgKTtcbiAgbG9nZ2VyLmluZm8oYFN1cHBvcnRlZCBicm93c2VyIG5hbWVzOiAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSl9YCk7XG4gIGlmIChjYXBzLmFwcFBhY2thZ2UgfHwgY2Fwcy5hcHBBY3Rpdml0eSkge1xuICAgIGxvZ2dlci5pbmZvKGBOb3Qgb3ZlcnJpZGluZyBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGZvciAnJHticm93c2VyTmFtZX0nIGAgK1xuICAgICAgJ2JlY2F1c2Ugc29tZSBvZiB0aGVtIGhhdmUgYmVlbiBhbHJlYWR5IHByb3ZpZGVkJyk7XG4gICAgcmV0dXJuIGNhcHM7XG4gIH1cblxuICBjb25zdCB7cGtnLCBhY3Rpdml0eX0gPSB0aGlzLmdldENocm9tZVBrZyhicm93c2VyTmFtZSk7XG4gIGNhcHMuYXBwUGFja2FnZSA9IHBrZztcbiAgY2Fwcy5hcHBBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICBsb2dnZXIuaW5mbyhgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXRpZXMgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgc2V0IHRvICR7cGtnfS8ke2FjdGl2aXR5fSBgICtcbiAgICBgZm9yICcke2Jyb3dzZXJOYW1lfSdgKTtcbiAgbG9nZ2VyLmluZm8oYENvbnNpZGVyIGNoYW5naW5nIHRoZSBicm93c2VyTmFtZSB0byB0aGUgb25lIGZyb20gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGJyb3dzZXIgbmFtZXMgYCArXG4gICAgYG9yIHByb3ZpZGUgY3VzdG9tIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgaWYgdGhlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgb25lcyBkbyBgICtcbiAgICBgbm90IG1ha2Ugc2Vuc2VgKTtcbiAgcmV0dXJuIGNhcHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IGRldmljZSB1bmRlciB0ZXN0IGlzIGFuIGVtdWxhdG9yXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiAtIGFwcGl1bS1hZGIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gZHJpdmVyIG9wdGlvbnMgbWFwcGluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGFuIEFuZHJvaWQgZW11bGF0b3JcbiAqL1xuaGVscGVycy5pc0VtdWxhdG9yID0gZnVuY3Rpb24gaXNFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHBvc3NpYmxlTmFtZXMgPSBbb3B0cy51ZGlkLCBhZGI/LmN1ckRldmljZUlkXTtcbiAgcmV0dXJuICEhb3B0cy5hdmQgfHwgcG9zc2libGVOYW1lcy5zb21lKCh4KSA9PiBFTVVMQVRPUl9QQVRURVJOLnRlc3QoeCkpO1xufTtcblxuaGVscGVycy5ib290c3RyYXAgPSBCb290c3RyYXA7XG5oZWxwZXJzLnVubG9ja2VyID0gdW5sb2NrZXI7XG5cbmV4cG9ydCB7IGhlbHBlcnMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIEFQUF9TVEFURSwgcHJlcGFyZUF2ZEFyZ3MsIGVuc3VyZU5ldHdvcmtTcGVlZCB9O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFB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
|
|
774
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsIl9hc3luY2JveCIsIl9sb2dnZXIiLCJfc3VwcG9ydCIsIl9pb0FwcGl1bSIsIl9ib290c3RyYXAiLCJfYmx1ZWJpcmQiLCJfYXBwaXVtQWRiIiwiX3VubG9ja0hlbHBlcnMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9vcyIsIl9zZW12ZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiTU9DS19BUFBfSURTX1NUT1JFIiwiUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVRfTVMiLCJIRUxQRVJfQVBQX0lOU1RBTExfUkVUUklFUyIsIkhFTFBFUl9BUFBfSU5TVEFMTF9SRVRSWV9ERUxBWV9NUyIsIkNIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkiLCJjaHJvbWUiLCJwa2ciLCJhY3Rpdml0eSIsImNocm9taXVtIiwiY2hyb21lYmV0YSIsImJyb3dzZXIiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiZXhwb3J0cyIsIlNFVFRJTkdfTk9USUZJQ0FUSU9OU19MSVNURU5FUl9TRVJWSUNFIiwiRU1VTEFUT1JfUEFUVEVSTiIsIkFQUF9TVEFURSIsImZyZWV6ZSIsIk5PVF9JTlNUQUxMRUQiLCJOT1RfUlVOTklORyIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsImVuc3VyZU5ldHdvcmtTcGVlZCIsImFkYiIsIm5ldHdvcmtTcGVlZCIsIl8iLCJ2YWx1ZXMiLCJORVRXT1JLX1NQRUVEIiwiaW5jbHVkZXMiLCJsb2dnZXIiLCJ3YXJuIiwiRlVMTCIsInByZXBhcmVBdmRBcmdzIiwib3B0cyIsImlzSGVhZGxlc3MiLCJhdmRBcmdzIiwicmVzdWx0IiwiaXNBcnJheSIsInB1c2giLCJ1dGlsIiwic2hlbGxQYXJzZSIsInRvQ3JlZGVudGlhbFR5cGUiLCJ1bmxvY2tUeXBlIiwiUElOX1VOTE9DSyIsIlBJTl9VTkxPQ0tfS0VZX0VWRU5UIiwiUEFTU1dPUkRfVU5MT0NLIiwiUEFUVEVSTl9VTkxPQ0siLCJFcnJvciIsImhlbHBlcnMiLCJjcmVhdGVCYXNlQURCIiwiYWRiUG9ydCIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJ1c2VLZXlzdG9yZSIsImtleXN0b3JlUGF0aCIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsImFsbG93T2ZmbGluZURldmljZXMiLCJhbGxvd0RlbGF5QWRiIiwiQURCIiwiY3JlYXRlQURCIiwicHJlcGFyZUVtdWxhdG9yIiwiYXZkIiwiYXZkRW52IiwiZW52IiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJjb3VudHJ5IiwiYXZkTGF1bmNoVGltZW91dCIsImxhdW5jaFRpbWVvdXQiLCJhdmRSZWFkeVRpbWVvdXQiLCJyZWFkeVRpbWVvdXQiLCJhdmROYW1lIiwicmVwbGFjZSIsImlzRW11bGF0b3JSdW5uaW5nIiwiZ2V0UnVubmluZ0FWRFdpdGhSZXRyeSIsImUiLCJkZWJ1ZyIsIm1lc3NhZ2UiLCJhcmdzIiwia2lsbEVtdWxhdG9yIiwibGF1bmNoQVZEIiwiZW5zdXJlRGV2aWNlTG9jYWxlIiwic2NyaXB0IiwiaXNTdHJpbmciLCJzZXREZXZpY2VMYW5ndWFnZUNvdW50cnkiLCJlbnN1cmVDdXJyZW50TG9jYWxlIiwiZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIiwidWRpZCIsImVtUG9ydCIsImN1ckRldmljZUlkIiwiZW11bGF0b3JQb3J0IiwiaW5mbyIsImRldmljZXMiLCJnZXREZXZpY2VzV2l0aFJldHJ5IiwibWFwIiwiZXJyb3JBbmRUaHJvdyIsImdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmciLCJwbGF0Zm9ybVZlcnNpb24iLCJ0cmltIiwic2VtdmVyIiwiY29lcmNlIiwiYXZhaWxEZXZpY2VzIiwicGFydGlhbE1hdGNoQ2FuZGlkYXRlIiwiZGV2aWNlIiwic2V0RGV2aWNlSWQiLCJyYXdEZXZpY2VPUyIsImdldFBsYXRmb3JtVmVyc2lvbiIsImRldmljZU9TIiwiYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkIiwidmFsaWQiLCJib3RoVmVyc2lvbnNBcmVTdHJpbmdzIiwidmVyc2lvbiIsInRvTG93ZXIiLCJtYWpvciIsIm1pbm9yIiwiZ3QiLCJrZXlzIiwiam9pbiIsInNldEVtdWxhdG9yUG9ydCIsInZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMiLCJuYW1lIiwibWF0Y2giLCJleGVjIiwiaW5kZXgiLCJzdWJzdHJpbmciLCJnZXRMYXVuY2hJbmZvIiwiYXBwIiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhcGtQYWNrYWdlIiwiYXBrQWN0aXZpdHkiLCJwYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QiLCJyZXNldEFwcCIsImZhc3RSZXNldCIsImZ1bGxSZXNldCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImF1dG9HcmFudFBlcm1pc3Npb25zIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJpc0luc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwiZm9yY2VTdG9wIiwiaWduIiwib3V0cHV0IiwiY2xlYXIiLCJ0b0xvd2VyQ2FzZSIsImdyYW50QWxsUGVybWlzc2lvbnMiLCJlcnJvciIsInVuaW5zdGFsbEFwayIsImluc3RhbGwiLCJncmFudFBlcm1pc3Npb25zIiwidGltZW91dCIsImluc3RhbGxBcGsiLCJlbmZvcmNlQXBwSW5zdGFsbCIsImFwcFN0YXRlIiwid2FzVW5pbnN0YWxsZWQiLCJpbnN0YWxsT3JVcGdyYWRlIiwiZW5mb3JjZUN1cnJlbnRCdWlsZCIsImlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwIiwiQVBQX0lOU1RBTExfU1RBVEUiLCJpbnN0YWxsT3RoZXJBcGtzIiwib3RoZXJBcHBzIiwiQiIsImFsbCIsIm90aGVyQXBwIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsImFwcFBhY2thZ2VzIiwiZmlsdGVyUGFja2FnZXMiLCJnZXRUaGlyZFBhcnR5UGFja2FnZXMiLCJwYWNrYWdlc1N0cmluZyIsInNoZWxsIiwiYXBwUGFja2FnZXNBcnJheSIsInNwbGl0IiwiRU9MIiwiZGlmZmVyZW5jZSIsImVyciIsImluaXRVbmljb2RlS2V5Ym9hcmQiLCJkZWZhdWx0SU1FIiwiYXBwaXVtSU1FIiwiZW5hYmxlSU1FIiwic2V0SU1FIiwic2V0TW9ja0xvY2F0aW9uQXBwIiwiZ2V0QXBpTGV2ZWwiLCJwa2dJZHMiLCJmaWxlRXhpc3RzIiwiSlNPTiIsInBhcnNlIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwic3JjUGF0aCIsInBhdGgiLCJwb3NpeCIsImJhc2VuYW1lIiwiZnMiLCJ3cml0ZUZpbGUiLCJzdHJpbmdpZnkiLCJyaW1yYWYiLCJyZXNldE1vY2tMb2NhdGlvbiIsInRoaXJkUGFydHlQa2dJZHNQcm9taXNlIiwidGhpcmRQYXJ0eVBrZ0lkcyIsInJlc3VsdFBrZ3MiLCJpbnRlcnNlY3Rpb24iLCJzaXplIiwicGtnSWQiLCJpbnN0YWxsSGVscGVyQXBwIiwiYXBrUGF0aCIsInBhY2thZ2VJZCIsInJldHJ5SW50ZXJ2YWwiLCJyZXRyeUluc3RhbGxIZWxwZXJBcHAiLCJwdXNoU2V0dGluZ3NBcHAiLCJ0aHJvd0Vycm9yIiwic2V0dGluZ3NBcGtQYXRoIiwicHJvY2Vzc0V4aXN0cyIsImFwaUxldmVsIiwicGVybXMiLCJ4IiwicmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCIsImlzRW11bGF0b3IiLCJwdXNoU3RyaW5ncyIsInJlbW90ZURpciIsInN0cmluZ3NKc29uIiwicmVtb3RlRmlsZSIsInJlc29sdmUiLCJwdWxsQXBrIiwidG1wRGlyIiwiaXNFbXB0eSIsImV4aXN0cyIsInN0cmluZ3NUbXBEaXIiLCJhcGtTdHJpbmdzIiwibG9jYWxQYXRoIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwidW5sb2NrIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwiaXNTY3JlZW5Mb2NrZWQiLCJ1bmxvY2tLZXkiLCJkaXNtaXNzS2V5Z3VhcmQiLCJ1bmxvY2tTdHJhdGVneSIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0IiwidW5sb2NrZXIiLCJ2YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyIsIkZJTkdFUlBSSU5UX1VOTE9DSyIsImlzTmlsIiwiaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCIsImZhc3RVbmxvY2siLCJjcmVkZW50aWFsIiwiY3JlZGVudGlhbFR5cGUiLCJ1bmxvY2tNZXRob2QiLCJwaW5VbmxvY2siLCJwaW5VbmxvY2tXaXRoS2V5RXZlbnQiLCJwYXNzd29yZFVubG9jayIsInBhdHRlcm5VbmxvY2siLCJmaW5nZXJwcmludFVubG9jayIsInZlcmlmeVVubG9jayIsInRpbWVvdXRNcyIsIndhaXRGb3JDb25kaXRpb24iLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiaW5pdERldmljZSIsInNraXBEZXZpY2VJbml0aWFsaXphdGlvbiIsImxvY2FsZVNjcmlwdCIsInVuaWNvZGVLZXlib2FyZCIsImRpc2FibGVXaW5kb3dBbmltYXRpb24iLCJza2lwVW5sb2NrIiwibW9ja0xvY2F0aW9uQXBwIiwic2tpcExvZ2NhdENhcHR1cmUiLCJsb2djYXRGb3JtYXQiLCJsb2djYXRGaWx0ZXJTcGVjcyIsIndhaXRGb3JEZXZpY2UiLCJzaG91bGRUaHJvd0Vycm9yIiwiaXNVbmRlZmluZWQiLCJzdGFydExvZ2NhdCIsImZvcm1hdCIsImZpbHRlclNwZWNzIiwicmVtb3ZlTnVsbFByb3BlcnRpZXMiLCJpc051bGwiLCJ0cnVuY2F0ZURlY2ltYWxzIiwibnVtYmVyIiwiZGlnaXRzIiwibXVsdGlwbGllciIsIk1hdGgiLCJwb3ciLCJhZGp1c3RlZE51bSIsInRydW5jYXRlZE51bSIsImlzQ2hyb21lQnJvd3NlciIsImdldENocm9tZVBrZyIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsInNlc3Npb25JZCIsImlzRnVuY3Rpb24iLCJnZXRXZWJTb2NrZXRIYW5kbGVycyIsImFjdGl2ZUhhbmRsZXJzIiwicGF0aG5hbWUiLCJyZW1vdmVXZWJTb2NrZXRIYW5kbGVyIiwicGFyc2VBcnJheSIsImNhcCIsInBhcnNlZENhcHMiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwiY2FwcyIsImJyb3dzZXJOYW1lIiwiYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIiwicG9zc2libGVOYW1lcyIsInNvbWUiLCJ0ZXN0IiwiYm9vdHN0cmFwIiwiQm9vdHN0cmFwIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9saWIvYW5kcm9pZC1oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGZzLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHBhdGggYXMgc2V0dGluZ3NBcGtQYXRoIH0gZnJvbSAnaW8uYXBwaXVtLnNldHRpbmdzJztcbmltcG9ydCBCb290c3RyYXAgZnJvbSAnLi9ib290c3RyYXAnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFEQiBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgdW5sb2NrZXIsIFBJTl9VTkxPQ0ssIFBJTl9VTkxPQ0tfS0VZX0VWRU5ULFxuICBQQVNTV09SRF9VTkxPQ0ssIFBBVFRFUk5fVU5MT0NLLCBGSU5HRVJQUklOVF9VTkxPQ0tcbn0gZnJvbSAnLi91bmxvY2staGVscGVycyc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cbmNvbnN0IE1PQ0tfQVBQX0lEU19TVE9SRSA9ICcvZGF0YS9sb2NhbC90bXAvbW9ja19hcHBzLmpzb24nO1xuY29uc3QgUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVRfTVMgPSA5MDAwMDtcbmNvbnN0IEhFTFBFUl9BUFBfSU5TVEFMTF9SRVRSSUVTID0gMztcbmNvbnN0IEhFTFBFUl9BUFBfSU5TVEFMTF9SRVRSWV9ERUxBWV9NUyA9IDUwMDA7XG4vLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvY2hyb21lL2Jyb3dzZXIvZGV2dG9vbHMvZGV2aWNlL2FuZHJvaWRfZGV2aWNlX2luZm9fcXVlcnkuY2NcbmNvbnN0IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkgPSB7XG4gIGNocm9tZToge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG4gIGNocm9taXVtOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICcuQ2hyb21lU2hlbGxBY3Rpdml0eScsXG4gIH0sXG4gIGNocm9tZWJldGE6IHtcbiAgICBwa2c6ICdjb20uY2hyb21lLmJldGEnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBicm93c2VyOiB7XG4gICAgcGtnOiAnY29tLmFuZHJvaWQuYnJvd3NlcicsXG4gICAgYWN0aXZpdHk6ICdjb20uYW5kcm9pZC5icm93c2VyLkJyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gICdjaHJvbWl1bS1icm93c2VyJzoge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICAnY2hyb21pdW0td2Vidmlldyc6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbC5XZWJWaWV3QnJvd3NlckFjdGl2aXR5JyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG59O1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1BLR19JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR19OT1RJRklDQVRJT05TX0xJU1RFTkVSX1NFUlZJQ0UgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8uTkxTZXJ2aWNlYDtcbmNvbnN0IEVNVUxBVE9SX1BBVFRFUk4gPSAvXFxiZW11bGF0b3JcXGIvaTtcbi8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaW4gc3luYyB3aXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGUveGN1aWFwcGxpY2F0aW9uc3RhdGVydW5uaW5nYmFja2dyb3VuZD9sYW5ndWFnZT1vYmpjXG5jb25zdCBBUFBfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX0lOU1RBTExFRDogMCxcbiAgTk9UX1JVTk5JTkc6IDEsXG4gIFJVTk5JTkdfSU5fQkFDS0dST1VORDogMyxcbiAgUlVOTklOR19JTl9GT1JFR1JPVU5EOiA0XG59KTtcblxuXG5mdW5jdGlvbiBlbnN1cmVOZXR3b3JrU3BlZWQgKGFkYiwgbmV0d29ya1NwZWVkKSB7XG4gIGlmIChfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCkuaW5jbHVkZXMobmV0d29ya1NwZWVkKSkge1xuICAgIHJldHVybiBuZXR3b3JrU3BlZWQ7XG4gIH1cbiAgbG9nZ2VyLndhcm4oYFdyb25nIG5ldHdvcmsgc3BlZWQgcGFyYW0gJyR7bmV0d29ya1NwZWVkfScsIHVzaW5nIGRlZmF1bHQ6ICR7YWRiLk5FVFdPUktfU1BFRUQuRlVMTH0uIGAgK1xuICAgIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgcmV0dXJuIGFkYi5ORVRXT1JLX1NQRUVELkZVTEw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBdmRBcmdzIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtTcGVlZCxcbiAgICBpc0hlYWRsZXNzLFxuICAgIGF2ZEFyZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGF2ZEFyZ3MpIHtcbiAgICBpZiAoXy5pc0FycmF5KGF2ZEFyZ3MpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hdmRBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKHV0aWwuc2hlbGxQYXJzZShgJHthdmRBcmdzfWApKSk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrU3BlZWQpIHtcbiAgICByZXN1bHQucHVzaCgnLW5ldHNwZWVkJywgZW5zdXJlTmV0d29ya1NwZWVkKGFkYiwgbmV0d29ya1NwZWVkKSk7XG4gIH1cbiAgaWYgKGlzSGVhZGxlc3MpIHtcbiAgICByZXN1bHQucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHRvQ3JlZGVudGlhbFR5cGUgKHVubG9ja1R5cGUpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFtQSU5fVU5MT0NLXTogJ3BpbicsXG4gICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogJ3BpbicsXG4gICAgW1BBU1NXT1JEX1VOTE9DS106ICdwYXNzd29yZCcsXG4gICAgW1BBVFRFUk5fVU5MT0NLXTogJ3BhdHRlcm4nLFxuICB9W3VubG9ja1R5cGVdO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayB0eXBlICcke3VubG9ja1R5cGV9JyBpcyBub3Qga25vd25gKTtcbn1cblxuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmhlbHBlcnMuY3JlYXRlQmFzZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJhc2VBREIgKG9wdHMgPSB7fSkge1xuICAvLyBmaWx0ZXIgb3V0IGFueSB1bndhbnRlZCBvcHRpb25zIHNlbnQgaW5cbiAgLy8gdGhpcyBsaXN0IHNob3VsZCBiZSB1cGRhdGVkIGFzIEFEQiB0YWtlcyBtb3JlIGFyZ3VtZW50c1xuICBjb25zdCB7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCBBREIuY3JlYXRlQURCKHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9KTtcbn07XG5cbmhlbHBlcnMucHJlcGFyZUVtdWxhdG9yID0gYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUVtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIGF2ZCxcbiAgICBhdmRFbnY6IGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGU6IGNvdW50cnksXG4gICAgYXZkTGF1bmNoVGltZW91dDogbGF1bmNoVGltZW91dCxcbiAgICBhdmRSZWFkeVRpbWVvdXQ6IHJlYWR5VGltZW91dCxcbiAgfSA9IG9wdHM7XG4gIGlmICghYXZkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbGF1bmNoIEFWRCB3aXRob3V0IEFWRCBuYW1lJyk7XG4gIH1cblxuICBjb25zdCBhdmROYW1lID0gYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGxldCBpc0VtdWxhdG9yUnVubmluZyA9IHRydWU7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLmdldFJ1bm5pbmdBVkRXaXRoUmV0cnkoYXZkTmFtZSwgNTAwMCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoYEVtdWxhdG9yICcke2F2ZE5hbWV9JyBpcyBub3QgcnVubmluZzogJHtlLm1lc3NhZ2V9YCk7XG4gICAgaXNFbXVsYXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhcmdzID0gcHJlcGFyZUF2ZEFyZ3MoYWRiLCBvcHRzKTtcbiAgaWYgKGlzRW11bGF0b3JSdW5uaW5nKSB7XG4gICAgaWYgKGFyZ3MuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBLaWxsaW5nICcke2F2ZE5hbWV9JyBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIHdpcGVkIGF0IHN0YXJ0LmApO1xuICAgICAgYXdhaXQgYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdOb3QgbGF1bmNoaW5nIEFWRCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgcnVubmluZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgYXdhaXQgYWRiLmxhdW5jaEFWRChhdmQsIHtcbiAgICBhcmdzLFxuICAgIGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBjb3VudHJ5LFxuICAgIGxhdW5jaFRpbWVvdXQsXG4gICAgcmVhZHlUaW1lb3V0LFxuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IGFuZCBlbnN1cmUgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Miw4fS4gZS5nLiBlbiwgamEgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIFRoZSBjb3VudHJ5IChyZWdpb24pIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdXBwZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Mn0gfCBbMC05XXszfS4gZS5nLiBVUywgSlAgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gVGhlIHNjcmlwdCBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdGl0bGUgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17NH0uIGUuZy4gSGFucyBpbiB6aC1IYW5zLUNOIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxlZCB0byBzZXQgbG9jYWxlIHByb3Blcmx5XG4gKi9cbmhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlID0gYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGV2aWNlTG9jYWxlIChhZGIsIGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGlmICghXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgIV8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICBsb2dnZXIud2Fybihgc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IHJlcXVpcmVzIGxhbmd1YWdlIG9yIGNvdW50cnkuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEdvdCBsYW5ndWFnZTogJyR7bGFuZ3VhZ2V9JyBhbmQgY291bnRyeTogJyR7Y291bnRyeX0nYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLnNldERldmljZUxhbmd1YWdlQ291bnRyeShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KTtcblxuICBpZiAoIWF3YWl0IGFkYi5lbnN1cmVDdXJyZW50TG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHNjcmlwdCA/IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0sIGNvdW50cnk6ICR7Y291bnRyeX0gYW5kIHNjcmlwdDogJHtzY3JpcHR9YCA6IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0gYW5kIGNvdW50cnk6ICR7Y291bnRyeX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCAke21lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIChvcHRzID0ge30pIHtcbiAgLy8gd2UgY2FuIGNyZWF0ZSBhIHRocm93YXdheSBBREIgaW5zdGFuY2UgaGVyZSwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jeVxuICAvLyBvbiBpbnN0YW50aWF0aW5nIG9uIGVhcmxpZXIgKGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgbm8gdWRpZClcbiAgLy8gd2UgY2FuIG9ubHkgdXNlIHRoaXMgQURCIG9iamVjdCBmb3IgY29tbWFuZHMgdGhhdCB3b3VsZCBub3QgYmUgY29uZnVzZWRcbiAgLy8gaWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUgY29ubmVjdGVkXG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgbGV0IHVkaWQgPSBvcHRzLnVkaWQ7XG4gIGxldCBlbVBvcnQgPSBudWxsO1xuXG4gIC8vIGEgc3BlY2lmaWMgYXZkIG5hbWUgd2FzIGdpdmVuLiB0cnkgdG8gaW5pdGlhbGl6ZSB3aXRoIHRoYXRcbiAgaWYgKG9wdHMuYXZkKSB7XG4gICAgYXdhaXQgaGVscGVycy5wcmVwYXJlRW11bGF0b3IoYWRiLCBvcHRzKTtcbiAgICB1ZGlkID0gYWRiLmN1ckRldmljZUlkO1xuICAgIGVtUG9ydCA9IGFkYi5lbXVsYXRvclBvcnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gYXZkIGdpdmVuLiBsZXRzIHRyeSB3aGF0ZXZlcidzIHBsdWdnZWQgaW4gZGV2aWNlcy9lbXVsYXRvcnNcbiAgICBsb2dnZXIuaW5mbygnUmV0cmlldmluZyBkZXZpY2UgbGlzdCcpO1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgYWRiLmdldERldmljZXNXaXRoUmV0cnkoKTtcblxuICAgIC8vIHVkaWQgd2FzIGdpdmVuLCBsZXRzIHRyeSB0byBpbml0IHdpdGggdGhhdCBkZXZpY2VcbiAgICBpZiAodWRpZCkge1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKF8ubWFwKGRldmljZXMsICd1ZGlkJyksIHVkaWQpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBEZXZpY2UgJHt1ZGlkfSB3YXMgbm90IGluIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzYCk7XG4gICAgICB9XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICBvcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGAke29wdHMucGxhdGZvcm1WZXJzaW9ufWAudHJpbSgpO1xuXG4gICAgICAvLyBhIHBsYXRmb3JtIHZlcnNpb24gd2FzIGdpdmVuLiBsZXRzIHRyeSB0byBmaW5kIGEgZGV2aWNlIHdpdGggdGhlIHNhbWUgb3NcbiAgICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbiA9IHNlbXZlci5jb2VyY2Uob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHx8IG9wdHMucGxhdGZvcm1WZXJzaW9uO1xuICAgICAgbG9nZ2VyLmluZm8oYExvb2tpbmcgZm9yIGEgZGV2aWNlIHdpdGggQW5kcm9pZCAnJHtwbGF0Zm9ybVZlcnNpb259J2ApO1xuXG4gICAgICAvLyBpbiBjYXNlIHdlIGZhaWwgdG8gZmluZCBzb21ldGhpbmcsIGdpdmUgdGhlIHVzZXIgYSB1c2VmdWwgbG9nIHRoYXQgaGFzXG4gICAgICAvLyB0aGUgZGV2aWNlIHVkaWRzIGFuZCBvcyB2ZXJzaW9ucyBzbyB0aGV5IGtub3cgd2hhdCdzIGF2YWlsYWJsZVxuICAgICAgY29uc3QgYXZhaWxEZXZpY2VzID0gW107XG4gICAgICBsZXQgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0gbnVsbDtcbiAgICAgIC8vIGZpcnN0IHRyeSBzdGFydGVkIGRldmljZXMvZW11bGF0b3JzXG4gICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICAgIC8vIGRpcmVjdCBhZGIgY2FsbHMgdG8gdGhlIHNwZWNpZmljIGRldmljZVxuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQoZGV2aWNlLnVkaWQpO1xuICAgICAgICBjb25zdCByYXdEZXZpY2VPUyA9IGF3YWl0IGFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgICAgLy8gVGhlIGRldmljZSBPUyBjb3VsZCBlaXRoZXIgYmUgYSBudW1iZXIsIGxpa2UgYDYuMGBcbiAgICAgICAgLy8gb3IgYW4gYWJicmV2aWF0aW9uLCBsaWtlIGBSYFxuICAgICAgICBhdmFpbERldmljZXMucHVzaChgJHtkZXZpY2UudWRpZH0gKCR7cmF3RGV2aWNlT1N9KWApO1xuICAgICAgICBjb25zdCBkZXZpY2VPUyA9IHNlbXZlci5jb2VyY2UocmF3RGV2aWNlT1MpIHx8IHJhd0RldmljZU9TO1xuICAgICAgICBpZiAoIWRldmljZU9TKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgPSBzZW12ZXIudmFsaWQoZGV2aWNlT1MpICYmIHNlbXZlci52YWxpZChwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzID0gXy5pc1N0cmluZyhkZXZpY2VPUykgJiYgXy5pc1N0cmluZyhwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBpZiAoYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkICYmIGRldmljZU9TLnZlcnNpb24gPT09IHBsYXRmb3JtVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgICAgICB8fCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzICYmIF8udG9Mb3dlcihkZXZpY2VPUykgPT09IF8udG9Mb3dlcihwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgICAgICAgLy8gR290IGFuIGV4YWN0IG1hdGNoIC0gcHJvY2VlZCBpbW1lZGlhdGVseVxuICAgICAgICAgIHVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgaXMgbm8gcG9pbnQgdG8gY2hlY2sgZm9yIHBhcnRpYWwgbWF0Y2ggaWYgZWl0aGVyIG9mIHZlcnNpb24gbnVtYmVycyBpcyBub3QgY29lcmNpYmxlXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFfLmluY2x1ZGVzKG9wdHMucGxhdGZvcm1WZXJzaW9uLCAnLicpICYmIHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3JcbiAgICAgICAgICAgIHx8IHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3IgJiYgcGxhdGZvcm1WZXJzaW9uLm1pbm9yID09PSBkZXZpY2VPUy5taW5vcilcbiAgICAgICAgICAgIC8vIEdvdCBhIHBhcnRpYWwgbWF0Y2ggLSBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIG1vc3QgcmVjZW50XG4gICAgICAgICAgICAvLyBkZXZpY2UgdmVyc2lvbiBhdmFpbGFibGUgb24gdGhlIGhvc3Qgc3lzdGVtXG4gICAgICAgICAgICAmJiAocGFydGlhbE1hdGNoQ2FuZGlkYXRlICYmIHNlbXZlci5ndChkZXZpY2VPUywgXy52YWx1ZXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXSlcbiAgICAgICAgICAgICAgICB8fCAhcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSkge1xuICAgICAgICAgIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IHtbZGV2aWNlLnVkaWRdOiBkZXZpY2VPU307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdWRpZCAmJiBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpIHtcbiAgICAgICAgdWRpZCA9IF8ua2V5cyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdO1xuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdWRpZCkge1xuICAgICAgICAvLyB3ZSBjb3VsZG4ndCBmaW5kIGFueXRoaW5nISBxdWl0XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gZmluZCBhbiBhY3RpdmUgZGV2aWNlIG9yIGVtdWxhdG9yIGAgK1xuICAgICAgICAgIGB3aXRoIE9TICR7b3B0cy5wbGF0Zm9ybVZlcnNpb259LiBUaGUgZm9sbG93aW5nIGFyZSBhdmFpbGFibGU6IGAgK1xuICAgICAgICAgIGF2YWlsRGV2aWNlcy5qb2luKCcsICcpKTtcbiAgICAgIH1cblxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGEgdWRpZCB3YXMgbm90IGdpdmVuLCBncmFiIHRoZSBmaXJzdCBkZXZpY2Ugd2Ugc2VlXG4gICAgICB1ZGlkID0gZGV2aWNlc1swXS51ZGlkO1xuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmluZm8oYFVzaW5nIGRldmljZTogJHt1ZGlkfWApO1xuICByZXR1cm4ge3VkaWQsIGVtUG9ydH07XG59O1xuXG4vLyByZXR1cm5zIGEgbmV3IGFkYiBpbnN0YW5jZSB3aXRoIGRldmljZUlkIHNldFxuaGVscGVycy5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IG9wdHM7XG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICBpZiAoZW1Qb3J0KSB7XG4gICAgYWRiLnNldEVtdWxhdG9yUG9ydChlbVBvcnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkYjtcbn07XG5cbmhlbHBlcnMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyA9IGZ1bmN0aW9uIHZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgKG9wdHMpIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydhcHBQYWNrYWdlJywgJ2FwcEFjdGl2aXR5JywgJ2FwcFdhaXRQYWNrYWdlJywgJ2FwcFdhaXRBY3Rpdml0eSddKSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdHNba2V5XTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gLyhbXlxcdy4qLF0pKy8uZXhlYyhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgQ2FwYWJpbGl0eSAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBvbmx5IGluY2x1ZGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3JlLCBkb3QsIGNvbW1hIGFuZCBhc3RlcmlzayBjaGFyYWN0ZXJzLmApO1xuICAgIGxvZ2dlci53YXJuKGBDdXJyZW50IHZhbHVlICcke25hbWV9JyBoYXMgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBhdCBpbmRleCAke21hdGNoLmluZGV4fTogJyR7bmFtZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXggKyAxKX0nYCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0TGF1bmNoSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldExhdW5jaEluZm8gKGFkYiwgb3B0cykge1xuICBsZXQge2FwcCwgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHl9ID0gb3B0cztcbiAgaWYgKCFhcHApIHtcbiAgICBsb2dnZXIud2FybignTm8gYXBwIHNlbnQgaW4sIG5vdCBwYXJzaW5nIHBhY2thZ2UvYWN0aXZpdHknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMob3B0cyk7XG5cbiAgaWYgKGFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ1BhcnNpbmcgcGFja2FnZSBhbmQgYWN0aXZpdHkgZnJvbSBhcHAgbWFuaWZlc3QnKTtcbiAgbGV0IHthcGtQYWNrYWdlLCBhcGtBY3Rpdml0eX0gPVxuICAgIGF3YWl0IGFkYi5wYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QoYXBwKTtcbiAgaWYgKGFwa1BhY2thZ2UgJiYgIWFwcFBhY2thZ2UpIHtcbiAgICBhcHBQYWNrYWdlID0gYXBrUGFja2FnZTtcbiAgfVxuICBpZiAoIWFwcFdhaXRQYWNrYWdlKSB7XG4gICAgYXBwV2FpdFBhY2thZ2UgPSBhcHBQYWNrYWdlO1xuICB9XG4gIGlmIChhcGtBY3Rpdml0eSAmJiAhYXBwQWN0aXZpdHkpIHtcbiAgICBhcHBBY3Rpdml0eSA9IGFwa0FjdGl2aXR5O1xuICB9XG4gIGlmICghYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgYXBwV2FpdEFjdGl2aXR5ID0gYXBwQWN0aXZpdHk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHkgYXJlOiAke2Fwa1BhY2thZ2V9LyR7YXBrQWN0aXZpdHl9YCk7XG4gIHJldHVybiB7YXBwUGFja2FnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0QWN0aXZpdHl9O1xufTtcblxuaGVscGVycy5yZXNldEFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0QXBwIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVF9NUyxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwUGFja2FnZScgb3B0aW9uIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCBhZGIuaXNBcHBJbnN0YWxsZWQoYXBwUGFja2FnZSk7XG5cbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5mb3JjZVN0b3AoYXBwUGFja2FnZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIC8vIGZ1bGxSZXNldCBoYXMgcHJpb3JpdHkgb3ZlciBmYXN0UmVzZXRcbiAgICBpZiAoIWZ1bGxSZXNldCAmJiBmYXN0UmVzZXQpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGFkYi5jbGVhcihhcHBQYWNrYWdlKTtcbiAgICAgIGlmIChfLmlzU3RyaW5nKG91dHB1dCkgJiYgb3V0cHV0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2ZhaWxlZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNsZWFyIHRoZSBhcHBsaWNhdGlvbiBkYXRhIG9mICcke2FwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgLy8gZXhlY3V0aW5nIGBzaGVsbCBwbSBjbGVhcmAgcmVzZXRzIHByZXZpb3VzbHkgYXNzaWduZWQgYXBwbGljYXRpb24gcGVybWlzc2lvbnMgYXMgd2VsbFxuICAgICAgaWYgKGF1dG9HcmFudFBlcm1pc3Npb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWRiLmdyYW50QWxsUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gZ3JhbnQgcGVybWlzc2lvbnMgcmVxdWVzdGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoYFBlcmZvcm1lZCBmYXN0IHJlc2V0IG9uIHRoZSBpbnN0YWxsZWQgJyR7YXBwUGFja2FnZX0nIGFwcGxpY2F0aW9uIChzdG9wIGFuZCBjbGVhcilgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWFwcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIHByb3ZpZGUgJ2FwcCcgb3B0aW9uIHRvIGluc3RhbGwgJyR7YXBwUGFja2FnZX0nIG9yIGAgK1xuICAgICAgYGNvbnNpZGVyIHNldHRpbmcgJ25vUmVzZXQnIHRvICd0cnVlJyBpZiAnJHthcHBQYWNrYWdlfScgaXMgc3VwcG9zZWQgdG8gYmUgcHJlaW5zdGFsbGVkLmApO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBSdW5uaW5nIGZ1bGwgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nIChyZWluc3RhbGwpYCk7XG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSk7XG4gIH1cbiAgYXdhaXQgYWRiLmluc3RhbGwoYXBwLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICB9KTtcbn07XG5cbmhlbHBlcnMuaW5zdGFsbEFwayA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcGsgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUX01TLFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCB8fCAhYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIGFuZCAnYXBwUGFja2FnZScgb3B0aW9ucyBhcmUgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAoZnVsbFJlc2V0KSB7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBhcHBTdGF0ZSxcbiAgICB3YXNVbmluc3RhbGxlZFxuICB9ID0gYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBwLCBhcHBQYWNrYWdlLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VDdXJyZW50QnVpbGQ6IGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9KTtcblxuICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IHRoZSBuZXdseSBpbnN0YWxsZWQgYXBwXG4gIGNvbnN0IGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwID0gIXdhc1VuaW5zdGFsbGVkXG4gICAgJiYgYXBwU3RhdGUgIT09IGFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICBpZiAoZmFzdFJlc2V0ICYmIGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwKSB7XG4gICAgbG9nZ2VyLmluZm8oYFBlcmZvcm1pbmcgZmFzdCByZXNldCBvbiAnJHthcHBQYWNrYWdlfSdgKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gIH1cbn07XG5cbi8qKlxuICogSW5zdGFsbHMgYW4gYXJyYXkgb2YgYXBrc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0cyBkZWZpbmVkIGluIGRyaXZlci5qc1xuICovXG5oZWxwZXJzLmluc3RhbGxPdGhlckFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsT3RoZXJBcGtzIChvdGhlckFwcHMsIGFkYiwgb3B0cykge1xuICBsZXQge1xuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUX01TLFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIC8vIEluc3RhbGwgYWxsIG9mIHRoZSBBUEsncyBhc3luY2hyb25vdXNseVxuICBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChvdGhlckFwcCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgSW5zdGFsbGluZyBhcHA6ICR7b3RoZXJBcHB9YCk7XG4gICAgcmV0dXJuIGFkYi5pbnN0YWxsT3JVcGdyYWRlKG90aGVyQXBwLCBudWxsLCB7XG4gICAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIH0pO1xuICB9KSk7XG59O1xuXG4vKipcbiAqIFVuaW5zdGFsbCBhbiBhcnJheSBvZiBwYWNrYWdlc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcHBQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlIG5hbWVzIHRvIHVuaW5zdGFsbC4gSWYgdGhpcyBpbmNsdWRlcyBgJyonYCwgdW5pbnN0YWxsIGFsbCBvZiAzcmQgcGFydHkgYXBwc1xuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICovXG5oZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxPdGhlclBhY2thZ2VzIChhZGIsIGFwcFBhY2thZ2VzLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIGlmIChhcHBQYWNrYWdlcy5pbmNsdWRlcygnKicpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdVbmluc3RhbGwgdGhpcmQgcGFydHkgcGFja2FnZXMnKTtcbiAgICBhcHBQYWNrYWdlcyA9IGF3YWl0IHRoaXMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzKGFkYiwgZmlsdGVyUGFja2FnZXMpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbmluc3RhbGxpbmcgcGFja2FnZXM6ICR7YXBwUGFja2FnZXN9YCk7XG4gIGF3YWl0IEIuYWxsKGFwcFBhY2thZ2VzLm1hcCgoYXBwUGFja2FnZSkgPT4gYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKSkpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhpcmQgcGFydHkgcGFja2FnZXMgZmlsdGVyZWQgd2l0aCBgZmlsdGVyUGFja2FnZXNgXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gYXJyYXkgb2YgaW5zdGFsbGVkIHRoaXJkIHBhcnkgcGFja2FnZXNcbiAqL1xuaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRUaGlyZFBhcnR5UGFja2FnZXMgKGFkYiwgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VzU3RyaW5nID0gYXdhaXQgYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsICctMyddKTtcbiAgICBjb25zdCBhcHBQYWNrYWdlc0FycmF5ID0gcGFja2FnZXNTdHJpbmcudHJpbSgpLnJlcGxhY2UoL3BhY2thZ2U6L2csICcnKS5zcGxpdChFT0wpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgJyR7YXBwUGFja2FnZXNBcnJheX0nIGZpbHRlcmVkIHdpdGggJyR7ZmlsdGVyUGFja2FnZXN9J2ApO1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXBwUGFja2FnZXNBcnJheSwgZmlsdGVyUGFja2FnZXMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIGdldCBwYWNrYWdlcyB3aXRoICdhZGIgc2hlbGwgcG0gbGlzdCBwYWNrYWdlcyAtMyc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5oZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBpbml0VW5pY29kZUtleWJvYXJkIChhZGIpIHtcbiAgbG9nZ2VyLmRlYnVnKCdFbmFibGluZyBVbmljb2RlIGtleWJvYXJkIHN1cHBvcnQnKTtcblxuICAvLyBnZXQgdGhlIGRlZmF1bHQgSU1FIHNvIHdlIGNhbiByZXR1cm4gYmFjayB0byBpdCBsYXRlciBpZiB3ZSB3YW50XG4gIGxldCBkZWZhdWx0SU1FID0gYXdhaXQgYWRiLmRlZmF1bHRJTUUoKTtcblxuICBsb2dnZXIuZGVidWcoYFVuc2V0dGluZyBwcmV2aW91cyBJTUUgJHtkZWZhdWx0SU1FfWApO1xuICBjb25zdCBhcHBpdW1JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8uVW5pY29kZUlNRWA7XG4gIGxvZ2dlci5kZWJ1ZyhgU2V0dGluZyBJTUUgdG8gJyR7YXBwaXVtSU1FfSdgKTtcbiAgYXdhaXQgYWRiLmVuYWJsZUlNRShhcHBpdW1JTUUpO1xuICBhd2FpdCBhZGIuc2V0SU1FKGFwcGl1bUlNRSk7XG4gIHJldHVybiBkZWZhdWx0SU1FO1xufTtcblxuaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAgPSBhc3luYyBmdW5jdGlvbiBzZXRNb2NrTG9jYXRpb25BcHAgKGFkYiwgYXBwKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcxJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgYXBwLCAnYW5kcm9pZDptb2NrX2xvY2F0aW9uJywgJ2FsbG93J10pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzZXQgbW9jayBsb2NhdGlvbiBmb3IgYXBwICcke2FwcH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGxldCBwa2dJZHMgPSBbXTtcbiAgICBpZiAoYXdhaXQgYWRiLmZpbGVFeGlzdHMoTU9DS19BUFBfSURTX1NUT1JFKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGtnSWRzID0gSlNPTi5wYXJzZShhd2FpdCBhZGIuc2hlbGwoWydjYXQnLCBNT0NLX0FQUF9JRFNfU1RPUkVdKSk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICAgIGlmIChwa2dJZHMuaW5jbHVkZXMoYXBwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwa2dJZHMucHVzaChhcHApO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5wb3NpeC5qb2luKHRtcFJvb3QsIHBhdGgucG9zaXguYmFzZW5hbWUoTU9DS19BUFBfSURTX1NUT1JFKSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShzcmNQYXRoLCBKU09OLnN0cmluZ2lmeShwa2dJZHMpLCAndXRmOCcpO1xuICAgICAgYXdhaXQgYWRiLnB1c2goc3JjUGF0aCwgTU9DS19BUFBfSURTX1NUT1JFKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcGVyc2lzdCBtb2NrIGxvY2F0aW9uIGFwcCBpZCAnJHthcHB9JzogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMucmVzZXRNb2NrTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiByZXNldE1vY2tMb2NhdGlvbiAoYWRiKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcwJ10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRoaXJkUGFydHlQa2dJZHNQcm9taXNlID0gaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMoYWRiKTtcbiAgICBsZXQgcGtnSWRzID0gW107XG4gICAgaWYgKGF3YWl0IGFkYi5maWxlRXhpc3RzKE1PQ0tfQVBQX0lEU19TVE9SRSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBrZ0lkcyA9IEpTT04ucGFyc2UoYXdhaXQgYWRiLnNoZWxsKFsnY2F0JywgTU9DS19BUFBfSURTX1NUT1JFXSkpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgICBjb25zdCB0aGlyZFBhcnR5UGtnSWRzID0gYXdhaXQgdGhpcmRQYXJ0eVBrZ0lkc1Byb21pc2U7XG4gICAgLy8gT25seSBpbmNsdWRlIGN1cnJlbnRseSBpbnN0YWxsZWQgcGFja2FnZXNcbiAgICBjb25zdCByZXN1bHRQa2dzID0gXy5pbnRlcnNlY3Rpb24ocGtnSWRzLCB0aGlyZFBhcnR5UGtnSWRzKTtcbiAgICBpZiAoXy5zaXplKHJlc3VsdFBrZ3MpIDw9IDEpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCByZXN1bHRQa2dzWzBdID8/IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsICdhbmRyb2lkOm1vY2tfbG9jYXRpb24nLCAnZGVueSddKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFJlc2V0dGluZyBtb2NrX2xvY2F0aW9uIHBlcm1pc3Npb24gZm9yIHRoZSBmb2xsb3dpbmcgYXBwczogJHtyZXN1bHRQa2dzfWApO1xuICAgIGF3YWl0IEIuYWxsKHJlc3VsdFBrZ3MubWFwKChwa2dJZCkgPT4gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCBwa2dJZCwgJ2FuZHJvaWQ6bW9ja19sb2NhdGlvbicsICdkZW55J10pO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH0pKCkpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byByZXNldCBtb2NrIGxvY2F0aW9uOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSGVscGVyQXBwIChhZGIsIGFwa1BhdGgsIHBhY2thZ2VJZCkge1xuICAvLyBTb21ldGltZXMgYWRiIHB1c2ggb3IgYWRiIGluc3RhbCB0YWtlIG1vcmUgdGltZSB0aGFuIGV4cGVjdGVkIHRvIGluc3RhbGwgYW4gYXBwXG4gIC8vIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MvaXNzdWVzLzQwI2lzc3VlY29tbWVudC00NzY1OTMxNzRcbiAgYXdhaXQgcmV0cnlJbnRlcnZhbChIRUxQRVJfQVBQX0lOU1RBTExfUkVUUklFUywgSEVMUEVSX0FQUF9JTlNUQUxMX1JFVFJZX0RFTEFZX01TLFxuICAgIGFzeW5jIGZ1bmN0aW9uIHJldHJ5SW5zdGFsbEhlbHBlckFwcCAoKSB7XG4gICAgICBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcGtQYXRoLCBwYWNrYWdlSWQsIHtncmFudFBlcm1pc3Npb25zOiB0cnVlfSk7XG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBQdXNoZXMgYW5kIGluc3RhbGxzIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHNldHRpbmcgYXBwIGlzIHJlcXVpcmVkXG4gKlxuICogQHBhcmFtIHtBZGJ9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBEcml2ZXIgb3B0aW9ucyBkaWN0aW9uYXJ5LlxuICogQHBhcmFtIHtib29sZWFufSB0aHJvd0Vycm9yIFtmYWxzZV0gLSBXaGV0aGVyIHRocm93IGFuIGVycm9yIGlmIFNldHRpbmdzIGFwcCBmYWlscyB0byBzdGFydFxuICogQHRocm93cyB7RXJyb3J9IElmIHRocm93RXJyb3IgaXMgdHJ1ZSBhbmQgc29tZXRoaW5nIGhhcHBlbnMgaW4gaW5zdGFsbGF0aW9uIHN0ZXBcbiAqL1xuaGVscGVycy5wdXNoU2V0dGluZ3NBcHAgPSBhc3luYyBmdW5jdGlvbiBwdXNoU2V0dGluZ3NBcHAgKGFkYiwgdGhyb3dFcnJvciA9IGZhbHNlLCBvcHRzID0ge30pIHtcbiAgbG9nZ2VyLmRlYnVnKCdQdXNoaW5nIHNldHRpbmdzIGFwayB0byBkZXZpY2UuLi4nKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEhlbHBlckFwcChhZGIsIHNldHRpbmdzQXBrUGF0aCwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgdGhyb3dFcnJvcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYElnbm9yZWQgZXJyb3Igd2hpbGUgaW5zdGFsbGluZyAnJHtzZXR0aW5nc0Fwa1BhdGh9JzogYCArXG4gICAgICAgICAgICAgICAgYCcke2Vyci5tZXNzYWdlfScuIEZlYXR1cmVzIHRoYXQgcmVseSBvbiB0aGlzIGhlbHBlciBgICtcbiAgICAgICAgICAgICAgICAncmVxdWlyZSB0aGUgYXBrIHN1Y2ggYXMgdG9nZ2xlIFdpRmkgYW5kIGdldHRpbmcgbG9jYXRpb24gJyArXG4gICAgICAgICAgICAgICAgJ3dpbGwgcmFpc2UgYW4gZXJyb3IgaWYgeW91IHRyeSB0byB1c2UgdGhlbS4nKTtcbiAgfVxuXG4gIC8vIFJlaW5zdGFsbCB3b3VsZCBzdG9wIHRoZSBzZXR0aW5ncyBoZWxwZXIgcHJvY2VzcyBhbnl3YXksIHNvXG4gIC8vIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHN0aWxsIHJ1bm5pbmdcbiAgaWYgKGF3YWl0IGFkYi5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9IGlzIGFscmVhZHkgcnVubmluZy4gYCArXG4gICAgICBgVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCBpdHMgcGVybWlzc2lvbnMuYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgaWYgKGFwaUxldmVsID49IDI5KSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MjaW50ZXJuYWwtYXVkaW8tLXZpZGVvLXJlY29yZGluZ1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgJ1BST0pFQ1RfTUVESUEnLCAnYWxsb3cnXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsnY21kJywgJ25vdGlmaWNhdGlvbicsICdhbGxvd19saXN0ZW5lcicsIFNFVFRJTkdfTk9USUZJQ0FUSU9OU19MSVNURU5FUl9TRVJWSUNFXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAoYXBpTGV2ZWwgPD0gMjMpIHsgLy8gQW5kcm9pZCA2LSBkZXZpY2VzIHNob3VsZCBoYXZlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9wdWxsLzExNjQwI2lzc3VlY29tbWVudC00MzgyNjA0NzdcbiAgICBjb25zdCBwZXJtcyA9IFsnU0VUX0FOSU1BVElPTl9TQ0FMRScsICdDSEFOR0VfQ09ORklHVVJBVElPTicsICdBQ0NFU1NfRklORV9MT0NBVElPTiddO1xuICAgIGxvZ2dlci5pbmZvKGBHcmFudGluZyBwZXJtaXNzaW9ucyAke3Blcm1zfSB0byAnJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfSdgKTtcbiAgICBhd2FpdCBhZGIuZ3JhbnRQZXJtaXNzaW9ucyhTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBwZXJtcy5tYXAoKHgpID0+IGBhbmRyb2lkLnBlcm1pc3Npb24uJHt4fWApKTtcbiAgfVxuXG4gIC8vIGxhdW5jaCBpby5hcHBpdW0uc2V0dGluZ3MgYXBwIGR1ZSB0byBzZXR0aW5ncyBmYWlsaW5nIHRvIGJlIHNldFxuICAvLyBpZiB0aGUgYXBwIGlzIG5vdCBsYXVuY2hlZCBwcmlvciB0byBzdGFydCB0aGUgc2Vzc2lvbiBvbiBhbmRyb2lkIDcrXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvODk1N1xuICB0cnkge1xuICAgIGF3YWl0IGFkYi5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwKHtcbiAgICAgIHRpbWVvdXQ6IGhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpID8gMzAwMDAgOiA1MDAwXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhlcnIpO1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIHN0cmluZy54bWwgYW5kIGNvbnZlcnRzIGl0IHRvIHN0cmluZy5qc29uIGFuZCBwdXNoZXNcbiAqIGl0IHRvIC9kYXRhL2xvY2FsL3RtcC9zdHJpbmcuanNvbiBvbiBmb3IgdXNlIG9mIGJvb3RzdHJhcFxuICogSWYgYXBwIGlzIG5vdCBwcmVzZW50IHRvIGV4dHJhY3Qgc3RyaW5nLnhtbCBpdCBkZWxldGVzIHJlbW90ZSBzdHJpbmdzLmpzb25cbiAqIElmIGFwcCBkb2VzIG5vdCBoYXZlIHN0cmluZ3MueG1sIHdlIHB1c2ggYW4gZW1wdHkganNvbiBvYmplY3QgdG8gcmVtb3RlXG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlIGFiYnJldmlhdGlvbiwgZm9yIGV4YW1wbGUgJ2ZyJy4gVGhlIGRlZmF1bHQgbGFuZ3VhZ2VcbiAqIGlzIHVzZWQgaWYgdGhpcyBhcmd1bWVudCBpcyBub3QgZGVmaW5lZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gRHJpdmVyIG9wdGlvbnMgZGljdGlvbmFyeS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkaWN0aW9uYXJ5LCB3aGVyZSBzdHJpbmcgcmVzb3VyY2UgaWRlbnRpZmllcnMgYXJlIGtleXNcbiAqIGFsb25nIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBvciBhbiBlbXB0eSBvYmplY3RcbiAqIGlmIG5vIG1hdGNoaW5nIHJlc291cmNlcyB3ZXJlIGV4dHJhY3RlZC5cbiAqL1xuaGVscGVycy5wdXNoU3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIHB1c2hTdHJpbmdzIChsYW5ndWFnZSwgYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHJlbW90ZURpciA9ICcvZGF0YS9sb2NhbC90bXAnO1xuICBjb25zdCBzdHJpbmdzSnNvbiA9ICdzdHJpbmdzLmpzb24nO1xuICBjb25zdCByZW1vdGVGaWxlID0gcGF0aC5wb3NpeC5yZXNvbHZlKHJlbW90ZURpciwgc3RyaW5nc0pzb24pO1xuXG4gIC8vIGNsZWFuIHVwIHJlbW90ZSBzdHJpbmcuanNvbiBpZiBwcmVzZW50XG4gIGF3YWl0IGFkYi5yaW1yYWYocmVtb3RlRmlsZSk7XG5cbiAgbGV0IGFwcDtcbiAgdHJ5IHtcbiAgICBhcHAgPSBvcHRzLmFwcCB8fCBhd2FpdCBhZGIucHVsbEFwayhvcHRzLmFwcFBhY2thZ2UsIG9wdHMudG1wRGlyKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmluZm8oYEZhaWxlZCB0byBwdWxsIGFuIGFwayBmcm9tICcke29wdHMuYXBwUGFja2FnZX0nIHRvICcke29wdHMudG1wRGlyfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShvcHRzLmFwcFBhY2thZ2UpIHx8ICEoYXdhaXQgZnMuZXhpc3RzKGFwcCkpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBObyBhcHAgb3IgcGFja2FnZSBzcGVjaWZpZWQuIFJldHVybmluZyBlbXB0eSBzdHJpbmdzYCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qgc3RyaW5nc1RtcERpciA9IHBhdGgucmVzb2x2ZShvcHRzLnRtcERpciwgb3B0cy5hcHBQYWNrYWdlKTtcbiAgdHJ5IHtcbiAgICBsb2dnZXIuZGVidWcoJ0V4dHJhY3Rpbmcgc3RyaW5ncyBmcm9tIGFwaycsIGFwcCwgbGFuZ3VhZ2UsIHN0cmluZ3NUbXBEaXIpO1xuICAgIGNvbnN0IHthcGtTdHJpbmdzLCBsb2NhbFBhdGh9ID0gYXdhaXQgYWRiLmV4dHJhY3RTdHJpbmdzRnJvbUFwayhhcHAsIGxhbmd1YWdlLCBzdHJpbmdzVG1wRGlyKTtcbiAgICBhd2FpdCBhZGIucHVzaChsb2NhbFBhdGgsIHJlbW90ZURpcik7XG4gICAgcmV0dXJuIGFwa1N0cmluZ3M7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBDb3VsZCBub3QgZ2V0IHN0cmluZ3MsIGNvbnRpbnVpbmcgYW55d2F5LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBhd2FpdCBhZGIuc2hlbGwoJ2VjaG8nLCBbYCd7fScgPiAke3JlbW90ZUZpbGV9YF0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihzdHJpbmdzVG1wRGlyKTtcbiAgfVxuICByZXR1cm4ge307XG59O1xuXG5oZWxwZXJzLnVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHVubG9jayAoZHJpdmVyLCBhZGIsIGNhcGFiaWxpdGllcykge1xuICBpZiAoIShhd2FpdCBhZGIuaXNTY3JlZW5Mb2NrZWQoKSkpIHtcbiAgICBsb2dnZXIuaW5mbygnU2NyZWVuIGFscmVhZHkgdW5sb2NrZWQsIGRvaW5nIG5vdGhpbmcnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ1NjcmVlbiBpcyBsb2NrZWQsIHRyeWluZyB0byB1bmxvY2snKTtcbiAgaWYgKCFjYXBhYmlsaXRpZXMudW5sb2NrVHlwZSAmJiAhY2FwYWJpbGl0aWVzLnVubG9ja0tleSkge1xuICAgIGxvZ2dlci5pbmZvKGBOZWl0aGVyICd1bmxvY2tUeXBlJyBub3IgJ3VubG9ja0tleScgY2FwYWJpbGl0eSBpcyBwcm92aWRlZC4gYCArXG4gICAgICBgQXNzdW1pbmcgdGhlIGRldmljZSBpcyBsb2NrZWQgd2l0aCBhIHNpbXBsZSBsb2NrIHNjcmVlbi5gKTtcbiAgICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIHVubG9ja1R5cGUsXG4gICAgdW5sb2NrS2V5LFxuICAgIHVubG9ja1N0cmF0ZWd5LFxuICAgIHVubG9ja1N1Y2Nlc3NUaW1lb3V0LFxuICB9ID0gdW5sb2NrZXIudmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMoY2FwYWJpbGl0aWVzKTtcbiAgaWYgKHVubG9ja0tleSAmJiB1bmxvY2tUeXBlICE9PSBGSU5HRVJQUklOVF9VTkxPQ0tcbiAgICAgICYmIChfLmlzTmlsKHVubG9ja1N0cmF0ZWd5KSB8fCBfLnRvTG93ZXIodW5sb2NrU3RyYXRlZ3kpID09PSAnbG9ja3NldHRpbmdzJylcbiAgICAgICYmIGF3YWl0IGFkYi5pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkKCkpIHtcbiAgICBhd2FpdCB1bmxvY2tlci5mYXN0VW5sb2NrKGFkYiwge1xuICAgICAgY3JlZGVudGlhbDogdW5sb2NrS2V5LFxuICAgICAgY3JlZGVudGlhbFR5cGU6IHRvQ3JlZGVudGlhbFR5cGUodW5sb2NrVHlwZSksXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdW5sb2NrTWV0aG9kID0ge1xuICAgICAgW1BJTl9VTkxPQ0tdOiB1bmxvY2tlci5waW5VbmxvY2ssXG4gICAgICBbUElOX1VOTE9DS19LRVlfRVZFTlRdOiB1bmxvY2tlci5waW5VbmxvY2tXaXRoS2V5RXZlbnQsXG4gICAgICBbUEFTU1dPUkRfVU5MT0NLXTogdW5sb2NrZXIucGFzc3dvcmRVbmxvY2ssXG4gICAgICBbUEFUVEVSTl9VTkxPQ0tdOiB1bmxvY2tlci5wYXR0ZXJuVW5sb2NrLFxuICAgICAgW0ZJTkdFUlBSSU5UX1VOTE9DS106IHVubG9ja2VyLmZpbmdlcnByaW50VW5sb2NrLFxuICAgIH1bdW5sb2NrVHlwZV07XG4gICAgYXdhaXQgdW5sb2NrTWV0aG9kKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpO1xuICB9XG4gIGF3YWl0IGhlbHBlcnMudmVyaWZ5VW5sb2NrKGFkYiwgdW5sb2NrU3VjY2Vzc1RpbWVvdXQpO1xufTtcblxuaGVscGVycy52ZXJpZnlVbmxvY2sgPSBhc3luYyBmdW5jdGlvbiB2ZXJpZnlVbmxvY2sgKGFkYiwgdGltZW91dE1zID0gbnVsbCkge1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gIShhd2FpdCBhZGIuaXNTY3JlZW5Mb2NrZWQoKSksIHtcbiAgICAgIHdhaXRNczogdGltZW91dE1zID8/IDIwMDAsXG4gICAgICBpbnRlcnZhbE1zOiA1MDAsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRldmljZSBoYXMgZmFpbGVkIHRvIGJlIHVubG9ja2VkJyk7XG4gIH1cbiAgbG9nZ2VyLmluZm8oJ1RoZSBkZXZpY2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHVubG9ja2VkJyk7XG59O1xuXG5oZWxwZXJzLmluaXREZXZpY2UgPSBhc3luYyBmdW5jdGlvbiBpbml0RGV2aWNlIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIHNraXBEZXZpY2VJbml0aWFsaXphdGlvbixcbiAgICBsb2NhbGUsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbG9jYWxlU2NyaXB0LFxuICAgIHVuaWNvZGVLZXlib2FyZCxcbiAgICBkaXNhYmxlV2luZG93QW5pbWF0aW9uLFxuICAgIHNraXBVbmxvY2ssXG4gICAgbW9ja0xvY2F0aW9uQXBwLFxuICAgIHNraXBMb2djYXRDYXB0dXJlLFxuICAgIGxvZ2NhdEZvcm1hdCxcbiAgICBsb2djYXRGaWx0ZXJTcGVjcyxcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKHNraXBEZXZpY2VJbml0aWFsaXphdGlvbikge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcERldmljZUluaXRpYWxpemF0aW9uJyBpcyBzZXQuIFNraXBwaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi5gKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaGVscGVycy5pc0VtdWxhdG9yKGFkYiwgb3B0cykpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBkZXZpY2Ugd2FrZSB1cCBvbmx5IGZvciBhbiBlbXVsYXRvci5cbiAgICAgIC8vIEl0IHRha2VzIDEgc2Vjb25kIG9yIHNvIGV2ZW4gd2hlbiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgYXdha2UgaW4gYSByZWFsIGRldmljZS5cbiAgICAgIGF3YWl0IGFkYi53YWl0Rm9yRGV2aWNlKCk7XG4gICAgfVxuICAgIC8vIHB1c2hTZXR0aW5nc0FwcCByZXF1aXJlZCBiZWZvcmUgY2FsbGluZyBlbnN1cmVEZXZpY2VMb2NhbGUgZm9yIEFQSSBMZXZlbCAyNCtcblxuICAgIC8vIFNvbWUgZmVhdHVyZSBzdWNoIGFzIGxvY2F0aW9uL3dpZmkgYXJlIG5vdCBuZWNlc3NhcnkgZm9yIGFsbCB1c2VycyxcbiAgICAvLyBidXQgdGhleSByZXF1aXJlIHRoZSBzZXR0aW5ncyBhcHAuIFNvLCB0cnkgdG8gY29uZmlndXJlIGl0IHdoaWxlIEFwcGl1bVxuICAgIC8vIGRvZXMgbm90IHRocm93IGVycm9yIGV2ZW4gaWYgdGhleSBmYWlsLlxuICAgIGNvbnN0IHNob3VsZFRocm93RXJyb3IgPSBsYW5ndWFnZVxuICAgICAgfHwgbG9jYWxlXG4gICAgICB8fCBsb2NhbGVTY3JpcHRcbiAgICAgIHx8IHVuaWNvZGVLZXlib2FyZFxuICAgICAgfHwgZGlzYWJsZVdpbmRvd0FuaW1hdGlvblxuICAgICAgfHwgIXNraXBVbmxvY2s7XG4gICAgYXdhaXQgaGVscGVycy5wdXNoU2V0dGluZ3NBcHAoYWRiLCBzaG91bGRUaHJvd0Vycm9yLCBvcHRzKTtcbiAgfVxuXG4gIGlmICghaGVscGVycy5pc0VtdWxhdG9yKGFkYiwgb3B0cykpIHtcbiAgICBpZiAobW9ja0xvY2F0aW9uQXBwIHx8IF8uaXNVbmRlZmluZWQobW9ja0xvY2F0aW9uQXBwKSkge1xuICAgICAgYXdhaXQgaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAoYWRiLCBtb2NrTG9jYXRpb25BcHAgfHwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRNb2NrTG9jYXRpb24oYWRiKTtcbiAgICB9XG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgfHwgbG9jYWxlKSB7XG4gICAgYXdhaXQgaGVscGVycy5lbnN1cmVEZXZpY2VMb2NhbGUoYWRiLCBsYW5ndWFnZSwgbG9jYWxlLCBsb2NhbGVTY3JpcHQpO1xuICB9XG5cbiAgaWYgKHNraXBMb2djYXRDYXB0dXJlKSB7XG4gICAgbG9nZ2VyLmluZm8oYCdza2lwTG9nY2F0Q2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2djYXQgY2FwdHVyZS5gKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBhZGIuc3RhcnRMb2djYXQoe1xuICAgICAgZm9ybWF0OiBsb2djYXRGb3JtYXQsXG4gICAgICBmaWx0ZXJTcGVjczogbG9nY2F0RmlsdGVyU3BlY3MsXG4gICAgfSk7XG4gIH1cblxuICBpZiAodW5pY29kZUtleWJvYXJkKSB7XG4gICAgcmV0dXJuIGF3YWl0IGhlbHBlcnMuaW5pdFVuaWNvZGVLZXlib2FyZChhZGIpO1xuICB9XG59O1xuXG5oZWxwZXJzLnJlbW92ZU51bGxQcm9wZXJ0aWVzID0gZnVuY3Rpb24gcmVtb3ZlTnVsbFByb3BlcnRpZXMgKG9iaikge1xuICBmb3IgKGxldCBrZXkgb2YgXy5rZXlzKG9iaikpIHtcbiAgICBpZiAoXy5pc051bGwob2JqW2tleV0pIHx8IF8uaXNVbmRlZmluZWQob2JqW2tleV0pKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLnRydW5jYXRlRGVjaW1hbHMgPSBmdW5jdGlvbiB0cnVuY2F0ZURlY2ltYWxzIChudW1iZXIsIGRpZ2l0cykge1xuICBsZXQgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBkaWdpdHMpLFxuICAgICAgYWRqdXN0ZWROdW0gPSBudW1iZXIgKiBtdWx0aXBsaWVyLFxuICAgICAgdHJ1bmNhdGVkTnVtID0gTWF0aFthZGp1c3RlZE51bSA8IDAgPyAnY2VpbCcgOiAnZmxvb3InXShhZGp1c3RlZE51bSk7XG5cbiAgcmV0dXJuIHRydW5jYXRlZE51bSAvIG11bHRpcGxpZXI7XG59O1xuXG5oZWxwZXJzLmlzQ2hyb21lQnJvd3NlciA9IGZ1bmN0aW9uIGlzQ2hyb21lQnJvd3NlciAoYnJvd3Nlcikge1xuICByZXR1cm4gXy5pbmNsdWRlcyhPYmplY3Qua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSwgKGJyb3dzZXIgfHwgJycpLnRvTG93ZXJDYXNlKCkpO1xufTtcblxuaGVscGVycy5nZXRDaHJvbWVQa2cgPSBmdW5jdGlvbiBnZXRDaHJvbWVQa2cgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFlbYnJvd3Nlci50b0xvd2VyQ2FzZSgpXSB8fCBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZLmRlZmF1bHQ7XG59O1xuXG5oZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyA9IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyAoc2VydmVyLCBzZXNzaW9uSWQpIHtcbiAgaWYgKCFzZXJ2ZXIgfHwgIV8uaXNGdW5jdGlvbihzZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWN0aXZlSGFuZGxlcnMgPSBhd2FpdCBzZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMoc2Vzc2lvbklkKTtcbiAgZm9yIChjb25zdCBwYXRobmFtZSBvZiBfLmtleXMoYWN0aXZlSGFuZGxlcnMpKSB7XG4gICAgYXdhaXQgc2VydmVyLnJlbW92ZVdlYlNvY2tldEhhbmRsZXIocGF0aG5hbWUpO1xuICB9XG59O1xuXG4vKipcbiAqIFRha2VzIGEgZGVzaXJlZCBjYXBhYmlsaXR5IGFuZCB0cmllcyB0byBKU09OLnBhcnNlIGl0IGFzIGFuIGFycmF5LFxuICogYW5kIGVpdGhlciByZXR1cm5zIHRoZSBwYXJzZWQgYXJyYXkgb3IgYSBzaW5nbGV0b24gYXJyYXkuXG4gKlxuICogQHBhcmFtIHthbnl9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnBhcnNlQXJyYXkgPSBmdW5jdGlvbiBwYXJzZUFycmF5IChjYXApIHtcbiAgbGV0IHBhcnNlZENhcHM7XG4gIHRyeSB7XG4gICAgcGFyc2VkQ2FwcyA9IEpTT04ucGFyc2UoY2FwKTtcbiAgfSBjYXRjaCAoaWduKSB7IH1cblxuICBpZiAoXy5pc0FycmF5KHBhcnNlZENhcHMpKSB7XG4gICAgcmV0dXJuIHBhcnNlZENhcHM7XG4gIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhjYXApKSB7XG4gICAgcmV0dXJuIFtjYXBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBtdXN0IHByb3ZpZGUgYSBzdHJpbmcgb3IgSlNPTiBBcnJheTsgcmVjZWl2ZWQgJHtjYXB9YCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGRlc2lyZWQgY2FwYWJpbGl0aWVzLiBSZXR1cm5zIHRydWUgaWYgY2FwYWJpbGl0eSBpcyB2YWxpZFxuICpcbiAqIEBwYXJhbSB7Kn0gY2FwIEEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY2FwcyBoYXMgaW52YWxpZCBjYXBhYmlsaXR5XG4gKi9cbmhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyA9IGZ1bmN0aW9uIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgaWYgKGNhcHMuYnJvd3Nlck5hbWUpIHtcbiAgICBpZiAoY2Fwcy5hcHApIHtcbiAgICAgIC8vIHdhcm4gaWYgdGhlIGNhcGFiaWxpdGllcyBoYXZlIGJvdGggYGFwcGAgYW5kIGBicm93c2VyLCBhbHRob3VnaCB0aGlzIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGxvZ2dlci53YXJuKGBUaGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgc2hvdWxkIGdlbmVyYWxseSBub3QgaW5jbHVkZSBib3RoIGFuICdhcHAnIGFuZCBhICdicm93c2VyTmFtZSdgKTtcbiAgICB9XG4gICAgaWYgKGNhcHMuYXBwUGFja2FnZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYFRoZSBkZXNpcmVkIHNob3VsZCBub3QgaW5jbHVkZSBib3RoIG9mIGFuICdhcHBQYWNrYWdlJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnBhcnNlQXJyYXkoY2Fwcy51bmluc3RhbGxPdGhlclBhY2thZ2VzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwidW5pbnN0YWxsT3RoZXJQYWNrYWdlc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGp1c3QgdGhlIGNhcGFiaWxpdGllcyBmb3IgYSBicm93c2VyIHNlc3Npb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY2FwcyAtIEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdFxuICogISEhIFRoZSBvYmplY3QgaXMgbXV0YXRlZCBieSB0aGlzIG1ldGhvZCBjYWxsICEhIVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHNhbWUgcG9zc2libHkgbXV0YXRlZCBgb3B0c2AgaW5zdGFuY2UuXG4gKiBObyBtdXRhdGlvbiBpcyBoYXBwZW5pbmcgaXMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZlxuICogYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBzIGhhdmUgYWxyZWFkeSBiZWVuIHByb3ZpZGVkLlxuICovXG5oZWxwZXJzLmFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyA9IGZ1bmN0aW9uIGFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyAoY2FwcyA9IHt9KSB7XG4gIGNvbnN0IHsgYnJvd3Nlck5hbWUgfSA9IGNhcHM7XG4gIGxvZ2dlci5pbmZvKGBUaGUgY3VycmVudCBzZXNzaW9uIGlzIGNvbnNpZGVyZWQgYnJvd3Nlci1iYXNlZGApO1xuICBsb2dnZXIuaW5mbyhgU3VwcG9ydGVkIGJyb3dzZXIgbmFtZXM6ICR7SlNPTi5zdHJpbmdpZnkoXy5rZXlzKENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkpKX1gKTtcbiAgaWYgKGNhcHMuYXBwUGFja2FnZSB8fCBjYXBzLmFwcEFjdGl2aXR5KSB7XG4gICAgbG9nZ2VyLmluZm8oYE5vdCBvdmVycmlkaW5nIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgZm9yICcke2Jyb3dzZXJOYW1lfScgYCArXG4gICAgICAnYmVjYXVzZSBzb21lIG9mIHRoZW0gaGF2ZSBiZWVuIGFscmVhZHkgcHJvdmlkZWQnKTtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIGNvbnN0IHtwa2csIGFjdGl2aXR5fSA9IHRoaXMuZ2V0Q2hyb21lUGtnKGJyb3dzZXJOYW1lKTtcbiAgY2Fwcy5hcHBQYWNrYWdlID0gcGtnO1xuICBjYXBzLmFwcEFjdGl2aXR5ID0gYWN0aXZpdHk7XG4gIGxvZ2dlci5pbmZvKGBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdGllcyBoYXZlIGJlZW4gYXV0b21hdGljYWxseSBzZXQgdG8gJHtwa2d9LyR7YWN0aXZpdHl9IGAgK1xuICAgIGBmb3IgJyR7YnJvd3Nlck5hbWV9J2ApO1xuICBsb2dnZXIuaW5mbyhgQ29uc2lkZXIgY2hhbmdpbmcgdGhlIGJyb3dzZXJOYW1lIHRvIHRoZSBvbmUgZnJvbSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgYnJvd3NlciBuYW1lcyBgICtcbiAgICBgb3IgcHJvdmlkZSBjdXN0b20gYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXR5IHZhbHVlcyBpZiB0aGUgYXV0b21hdGljYWxseSBhc3NpZ25lZCBvbmVzIGRvIGAgK1xuICAgIGBub3QgbWFrZSBzZW5zZWApO1xuICByZXR1cm4gY2Fwcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZGV2aWNlIHVuZGVyIHRlc3QgaXMgYW4gZW11bGF0b3JcbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIC0gYXBwaXVtLWFkYiBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBkcml2ZXIgb3B0aW9ucyBtYXBwaW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBkZXZpY2UgaXMgYW4gQW5kcm9pZCBlbXVsYXRvclxuICovXG5oZWxwZXJzLmlzRW11bGF0b3IgPSBmdW5jdGlvbiBpc0VtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3QgcG9zc2libGVOYW1lcyA9IFtvcHRzLnVkaWQsIGFkYj8uY3VyRGV2aWNlSWRdO1xuICByZXR1cm4gISFvcHRzLmF2ZCB8fCBwb3NzaWJsZU5hbWVzLnNvbWUoKHgpID0+IEVNVUxBVE9SX1BBVFRFUk4udGVzdCh4KSk7XG59O1xuXG5oZWxwZXJzLmJvb3RzdHJhcCA9IEJvb3RzdHJhcDtcbmhlbHBlcnMudW5sb2NrZXIgPSB1bmxvY2tlcjtcblxuZXhwb3J0IHsgaGVscGVycywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgQVBQX1NUQVRFLCBwcmVwYXJlQXZkQXJncywgZW5zdXJlTmV0d29ya1NwZWVkIH07XG5leHBvcnQgZGVmYXVsdCBoZWxwZXJzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFNBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFNBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLFVBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLGNBQUEsR0FBQUMsdUJBQUEsQ0FBQVYsT0FBQTtBQUlBLElBQUFXLEdBQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLE9BQUEsR0FBQWIsc0JBQUEsQ0FBQUMsT0FBQTtBQUE0QixTQUFBYSx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdBQUE7QUFBQSxTQUFBSix3QkFBQVEsR0FBQSxFQUFBSixXQUFBLFNBQUFBLFdBQUEsSUFBQUksR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsV0FBQUQsR0FBQSxRQUFB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
|