appium-xcuitest-driver 4.0.0 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/driver.js +6 -2
- package/lib/driver.js +13 -5
- package/package.json +1 -1
package/build/lib/driver.js
CHANGED
|
@@ -259,6 +259,10 @@ class XCUITestDriver extends _baseDriver.BaseDriver {
|
|
|
259
259
|
}
|
|
260
260
|
}
|
|
261
261
|
|
|
262
|
+
getDefaultUrl() {
|
|
263
|
+
return this.isRealDevice() ? 'http://appium.io' : `http://${this.opts.address.includes(':') ? `[${this.opts.address}]` : this.opts.address}:${this.opts.port}/welcome`;
|
|
264
|
+
}
|
|
265
|
+
|
|
262
266
|
async start() {
|
|
263
267
|
this.opts.noReset = !!this.opts.noReset;
|
|
264
268
|
this.opts.fullReset = !!this.opts.fullReset;
|
|
@@ -317,7 +321,7 @@ class XCUITestDriver extends _baseDriver.BaseDriver {
|
|
|
317
321
|
this.opts.app = undefined;
|
|
318
322
|
this.opts.processArguments = this.opts.processArguments || {};
|
|
319
323
|
this.opts.bundleId = SAFARI_BUNDLE_ID;
|
|
320
|
-
this._currentUrl = this.opts.safariInitialUrl ||
|
|
324
|
+
this._currentUrl = this.opts.safariInitialUrl || this.getDefaultUrl();
|
|
321
325
|
|
|
322
326
|
if (_support.util.compareVersions(this.opts.platformVersion, '<', '12.2')) {
|
|
323
327
|
this.opts.processArguments.args = ['-u', this._currentUrl];
|
|
@@ -1331,4 +1335,4 @@ var _default = XCUITestDriver;
|
|
|
1331
1335
|
exports.default = _default;require('source-map-support').install();
|
|
1332
1336
|
|
|
1333
1337
|
|
|
1334
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSIsIk5PX1BST1hZX05BVElWRV9MSVNUIiwiTk9fUFJPWFlfV0VCX0xJU1QiLCJjb25jYXQiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJYQ1VJVGVzdERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsIndlYkxvY2F0b3JTdHJhdGVnaWVzIiwicmVzZXRJb3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJsb2dzIiwiZm4iLCJfIiwibWVtb2l6ZSIsImtleSIsInZhbHVlIiwicHJveHlDb21tYW5kIiwid2RhIiwiZGV2aWNlIiwiandwUHJveHlBY3RpdmUiLCJwcm94eVJlcVJlcyIsImp3cFByb3h5QXZvaWQiLCJzYWZhcmkiLCJjYWNoZWRXZGFTdGF0dXMiLCJjdXJXZWJGcmFtZXMiLCJfY3VycmVudFVybCIsImN1ckNvbnRleHQiLCJ4Y29kZVZlcnNpb24iLCJjb250ZXh0cyIsImltcGxpY2l0V2FpdE1zIiwiYXN5bmNsaWJXYWl0TXMiLCJwYWdlTG9hZE1zIiwibGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0IiwicmVtb3RlIiwid2ViRWxlbWVudHNDYWNoZSIsIkxSVSIsIm1heCIsImRyaXZlckRhdGEiLCJnZXRTdGF0dXMiLCJkcml2ZXJJbmZvIiwic3RhdHVzIiwiYnVpbGQiLCJ2ZXJzaW9uIiwibWVyZ2VDbGlBcmdzVG9PcHRzIiwiZGlkTWVyZ2UiLCJPYmplY3QiLCJlbnRyaWVzIiwiY2xpQXJncyIsImhhcyIsImxvZyIsImluZm8iLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsImxpZmVjeWNsZURhdGEiLCJzZXNzaW9uSWQiLCJjYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInN0YXJ0IiwiYXNzaWduIiwidWRpZCIsInVwZGF0ZVNldHRpbmdzIiwid2RhU2V0dGluZ3MiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJlIiwiZXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVsZXRlU2Vzc2lvbiIsIm5vUmVzZXQiLCJmdWxsUmVzZXQiLCJpb3NTZGtWZXJzaW9uIiwicmVhbERldmljZSIsImRldGVybWluZURldmljZSIsInNpbXVsYXRvckRldmljZXNTZXRQYXRoIiwiZGV2aWNlc1NldFBhdGgiLCJwbGF0Zm9ybVZlcnNpb24iLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJub3JtYWxpemVkVmVyc2lvbiIsInV0aWwiLCJjb21wYXJlVmVyc2lvbnMiLCJFcnJvciIsImlzRW1wdHkiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsImxvZ0V2ZW50IiwidG9Mb3dlciIsImFwcCIsInVuZGVmaW5lZCIsInByb2Nlc3NBcmd1bWVudHMiLCJidW5kbGVJZCIsInNhZmFyaUluaXRpYWxVcmwiLCJpc1JlYWxEZXZpY2UiLCJhZGRyZXNzIiwicG9ydCIsImNvbmZpZ3VyZUFwcCIsInJ1blJlc2V0IiwiV2ViRHJpdmVyQWdlbnQiLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsImNhdGNoIiwiZGVidWciLCJtZW1vaXplZExvZ0luZm8iLCJsb2dJbmZvIiwic3RhcnRMb2dDYXB0dXJlIiwic2tpcExvZ0NhcHR1cmUiLCJyZXN1bHQiLCJpc0xvZ0NhcHR1cmVTdGFydGVkIiwiaXNTaW11bGF0b3IiLCJzaHV0ZG93bk90aGVyU2ltdWxhdG9ycyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiaXNTYWZhcmkiLCJzYWZhcmlHbG9iYWxQcmVmZXJlbmNlcyIsInVwZGF0ZVNhZmFyaUdsb2JhbFNldHRpbmdzIiwibG9jYWxDb25maWciLCJzaW0iLCJjdXN0b21TU0xDZXJ0IiwiY2VydEhlYWQiLCJ0cnVuY2F0ZSIsImxlbmd0aCIsInN0YXJ0U2ltIiwibGF1bmNoV2l0aElEQiIsImlkYiIsIklEQiIsImNvbm5lY3QiLCJtZXNzYWdlIiwiUHlpZGV2aWNlIiwiaW5zdGFsbFByb2ZpbGUiLCJwYXlsb2FkIiwiaW5zdGFsbEFVVCIsImlzQXBwSW5zdGFsbGVkIiwiZXJyb3JBbmRUaHJvdyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbnNNYXBwaW5nIiwidG9QYWlycyIsInBhcnNlIiwic2V0UGVybWlzc2lvbnMiLCJ3YXJuIiwiY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkIiwiZW5hYmxlQ2FsZW5kYXJBY2Nlc3MiLCJkaXNhYmxlQ2FsZW5kYXJBY2Nlc3MiLCJzdGFydFdkYSIsInNldFJlZHVjZU1vdGlvbiIsInNldEluaXRpYWxPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIiwib3BlblVybCIsImF1dG9XZWJ2aWV3IiwibmF2VG9Jbml0aWFsV2VidmlldyIsInNldFVybCIsImhhc1ZhbHVlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwidXNlUG9ydEZvcndhcmRpbmciLCJ3ZGFCYXNlVXJsIiwiREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkiLCJyZXF1ZXN0Q29ubmVjdGlvbiIsInVybCIsImRldmljZVBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwic3luY2hyb25pemF0aW9uS2V5IiwibmFtZSIsInVzZVhjdGVzdHJ1bkZpbGUiLCJpc1NvdXJjZUZyZXNoIiwiZGVyaXZlZERhdGFQYXRoIiwicGF0aCIsIm5vcm1hbGl6ZSIsImlzQnVzeSIsImJvb3RzdHJhcFBhdGgiLCJhY3F1aXJlIiwidXNlTmV3V0RBIiwicXVpdEFuZFVuaW5zdGFsbCIsInNldHVwQ2FjaGluZyIsIm1zZyIsInJlc3VsdEJ1bmRsZVBhdGgiLCJzdGFydHVwUmV0cmllcyIsIndkYVN0YXJ0dXBSZXRyaWVzIiwic3RhcnR1cFJldHJ5SW50ZXJ2YWwiLCJ3ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCIsInJldHJ5Q291bnQiLCJyZXRyaWVzIiwibWFqb3IiLCJsYXVuY2giLCJlcnIiLCJlcnJvck1zZyIsIm9yaWdpbmFsU3RhY2t0cmFjZSIsInN0YXJ0V2RhU2Vzc2lvbiIsInN0YWNrIiwiY2xlYXJTeXN0ZW1GaWxlcyIsImZ1bGx5U3RhcnRlZCIsInNlcnZlciIsInJlY29yZGVyIiwiY29tcGFjdCIsIl9yZWNlbnRTY3JlZW5SZWNvcmRlciIsIl9hdWRpb1JlY29yZGVyIiwiX3RyYWZmaWNDYXB0dXJlIiwiaW50ZXJydXB0IiwiY2xlYW51cCIsIl9wZXJmUmVjb3JkZXJzIiwiQiIsImFsbCIsIm1hcCIsIngiLCJzdG9wIiwic3RvcFJlbW90ZSIsInJlc2V0T25TZXNzaW9uU3RhcnRPbmx5IiwiZW5mb3JjZVNpbXVsYXRvclNodXRkb3duIiwiY3JlYXRlU2ltIiwiZGVsZXRlIiwic2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSIsImlnbm9yZSIsInN5c2xvZyIsInN0b3BDYXB0dXJlIiwiandwcm94eSIsInF1aXQiLCJyZWxlYXNlQ29ubmVjdGlvbiIsImV4ZWN1dGVDb21tYW5kIiwiY21kIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJhcHBJc1BhY2thZ2VPckJ1bmRsZSIsInRlc3QiLCJoZWxwZXJzIiwiZGV2aWNlTmFtZSIsInNldHVwVmVyc2lvbkNhcHMiLCJ0b0xvd2VyQ2FzZSIsImRldmljZVBsYXRmb3JtIiwiZGV2aWNlcyIsImpvaW4iLCJpbmNsdWRlcyIsImlnbiIsImVuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uIiwicnVuT3B0cyIsInNjYWxlRmFjdG9yIiwiY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQiLCJwYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsInNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jIiwiaXNIZWFkbGVzcyIsInRyYWNlUG9pbnRlciIsInNpbXVsYXRvclRyYWNlUG9pbnRlciIsImRldmljZVByZWZlcmVuY2VzIiwiU2ltdWxhdG9yV2luZG93Q2VudGVyIiwiaXNJbnRlZ2VyIiwic2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQiLCJzdGFydHVwVGltZW91dCIsImlzU3RyaW5nIiwidG9VcHBlckNhc2UiLCJTaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiIsIlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUiLCJydW4iLCJwbGF0Zm9ybU5hbWUiLCJpc1R2T1MiLCJQTEFURk9STV9OQU1FX1RWT1MiLCJQTEFURk9STV9OQU1FX0lPUyIsImxhdW5jaEFwcCIsIkFQUF9MQVVOQ0hfVElNRU9VVCIsInNpbWN0bCIsImNoZWNrU3RhdHVzIiwicmVzcG9uc2UiLCJjdXJyZW50QXBwIiwiYnVuZGxlSUQiLCJwYXJzZUludCIsImlzQXJyYXkiLCJlbnYiLCJpc1BsYWluT2JqZWN0IiwibGFuZ3VhZ2UiLCJwdXNoIiwibG9jYWxlIiwiaXNOaWwiLCJzaG91bGRUZXJtaW5hdGVBcHAiLCJmb3JjZUFwcExhdW5jaCIsIndkYUNhcHMiLCJhdXRvTGF1bmNoIiwiYXJndW1lbnRzIiwiZW52aXJvbm1lbnQiLCJldmVudGxvb3BJZGxlRGVsYXlTZWMiLCJ3ZGFFdmVudGxvb3BJZGxlRGVsYXkiLCJzaG91bGRXYWl0Rm9yUXVpZXNjZW5jZSIsIndhaXRGb3JRdWllc2NlbmNlIiwic2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uIiwic2ltcGxlSXNWaXNpYmxlQ2hlY2siLCJtYXhUeXBpbmdGcmVxdWVuY3kiLCJzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlciIsIndhaXRGb3JJZGxlVGltZW91dCIsImVsZW1lbnRSZXNwb25zZUZpZWxkcyIsImRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyIsInVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneSIsImZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlIiwiYXV0b0FjY2VwdEFsZXJ0cyIsImRlZmF1bHRBbGVydEFjdGlvbiIsImF1dG9EaXNtaXNzQWxlcnRzIiwiY2FwYWJpbGl0aWVzIiwiZmlyc3RNYXRjaCIsImFsd2F5c01hdGNoIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImlzV2VidmlldyIsImNhblByb3h5IiwiaXNXZWJDb250ZXh0IiwidmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kiLCJzdHJhdGVneSIsImNvZXJjZVZlcnNpb24iLCJ2ZXJpZnlQcm9jZXNzQXJndW1lbnQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiY29tbWFuZFRpbWVvdXRzIiwicHJvdG9jb2wiLCJob3N0IiwicGVybXMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsInBhcnNlQ2Fwc0FycmF5IiwidGltZW91dCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibmV3U2ltdWxhdG9yIiwib3RoZXJBcHBzIiwiaW5zdGFsbE90aGVyQXBwcyIsImlvc0luc3RhbGxQYXVzZSIsInBhdXNlIiwiZGVsYXkiLCJhcHBzTGlzdCIsImFwcFBhdGhzIiwib3RoZXJBcHAiLCJpc0VuYWJsZWQiLCJpc0Jvb2xlYW4iLCJjdXJPcmllbnRhdGlvbiIsIl9nZXRDb21tYW5kVGltZW91dCIsImNtZE5hbWUiLCJERUZBVUxUX1RJTUVPVVRfS0VZIiwiZ2V0U2Vzc2lvbiIsImRyaXZlclNlc3Npb24iLCJzaG91bGRHZXREZXZpY2VDYXBzIiwiaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvIiwiZGV2aWNlQ2FwcyIsInN0YXR1c0JhclNpemUiLCJzY2FsZSIsImdldFNjcmVlbkluZm8iLCJwaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdwb3J0UmVjdCIsInJlc2V0IiwiY2xvbmVEZWVwIiwic2h1dGRvd25IYW5kbGVyIiwicmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVFBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLHdCQUF3QixHQUFHLHFCQUFqQztBQUNBLE1BQU1DLDRCQUE0QixHQUFHLDhCQUFyQztBQUVBLE1BQU1DLGlCQUFpQixHQUFHO0FBQ3hCQyxFQUFBQSxpQkFBaUIsRUFBRSxLQURLO0FBRXhCQyxFQUFBQSxzQkFBc0IsRUFBRSxLQUZBO0FB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O0FBSEosT0FBbEI7QUFLRDs7QUFDRG5TLG9CQUFJQyxJQUFKLENBQVMsK0RBQVQ7O0FBQ0EsV0FBT0wsTUFBTSxDQUFDYSxNQUFQLENBQWM7QUFBQ0MsTUFBQUEsSUFBSSxFQUFFLEtBQUszRCxJQUFMLENBQVUyRDtBQUFqQixLQUFkLEVBQXNDOFEsYUFBdEMsRUFDTCxLQUFLM0QsT0FBTCxDQUFhb0IsWUFEUixFQUNzQixLQUFLMEMsVUFBTCxJQUFtQixFQUR6QyxDQUFQO0FBRUQ7O0FBRVUsUUFBTFMsS0FBSyxHQUFJO0FBQ2IsUUFBSSxLQUFLclYsSUFBTCxDQUFVdUUsT0FBZCxFQUF1QjtBQUVyQixVQUFJdkUsSUFBSSxHQUFHWSxnQkFBRTBVLFNBQUYsQ0FBWSxLQUFLdFYsSUFBakIsQ0FBWDs7QUFDQUEsTUFBQUEsSUFBSSxDQUFDdUUsT0FBTCxHQUFlLEtBQWY7QUFDQXZFLE1BQUFBLElBQUksQ0FBQ3dFLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxZQUFNK1EsZUFBZSxHQUFHLEtBQUtDLHlCQUE3Qjs7QUFDQSxXQUFLQSx5QkFBTCxHQUFpQyxNQUFNLENBQUUsQ0FBekM7O0FBQ0EsVUFBSTtBQUNGLGNBQU0sS0FBS3ZQLFFBQUwsQ0FBY2pHLElBQWQsQ0FBTjtBQUNELE9BRkQsU0FFVTtBQUNSLGFBQUt3Vix5QkFBTCxHQUFpQ0QsZUFBakM7QUFDRDtBQUNGOztBQUNELFVBQU0sTUFBTUYsS0FBTixFQUFOO0FBQ0Q7O0FBdHFDcUM7OztBQXlxQ3hDeFMsTUFBTSxDQUFDYSxNQUFQLENBQWM3RCxjQUFjLENBQUM0VixTQUE3QixFQUF3Q0MsY0FBeEM7ZUFFZTdWLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCwgbWpwZWcgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCB7IFdlYkRyaXZlckFnZW50IH0gZnJvbSAnYXBwaXVtLXdlYmRyaXZlcmFnZW50JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IExSVSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU2ltLCBnZXRFeGlzdGluZ1NpbSwgcnVuU2ltdWxhdG9yUmVzZXQsIGluc3RhbGxUb1NpbXVsYXRvcixcbiAgc2h1dGRvd25PdGhlclNpbXVsYXRvcnMsIHNodXRkb3duU2ltdWxhdG9yLCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlc1xufSBmcm9tICcuL3NpbXVsYXRvci1tYW5hZ2VtZW50JztcbmltcG9ydCB7IGdldFNpbXVsYXRvciB9IGZyb20gJ2FwcGl1bS1pb3Mtc2ltdWxhdG9yJztcbmltcG9ydCB7XG4gIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGksIGluc3RhbGxDZXJ0aWZpY2F0ZSwgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5LFxuICBoYXNDZXJ0aWZpY2F0ZUxlZ2FjeSxcbn0gZnJvbSAnLi9jZXJ0LXV0aWxzJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIHJldHJ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSwgZXh0cmFjdEJ1bmRsZUlkIH0gZnJvbSAnLi9hcHAtdXRpbHMnO1xuaW1wb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzLCBQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgZGV0ZWN0VWRpZCwgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24sIGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbixcbiAgY2hlY2tBcHBQcmVzZW50LCBnZXREcml2ZXJJbmZvLFxuICBjbGVhclN5c3RlbUZpbGVzLCB0cmFuc2xhdGVEZXZpY2VOYW1lLCBub3JtYWxpemVDb21tYW5kVGltZW91dHMsXG4gIERFRkFVTFRfVElNRU9VVF9LRVksIG1hcmtTeXN0ZW1GaWxlc0ZvckNsZWFudXAsXG4gIHByaW50VXNlciwgcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzLFxuICBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24sIGlzTG9jYWxIb3N0XG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgcnVuUmVhbERldmljZVJlc2V0LCBpbnN0YWxsVG9SZWFsRGV2aWNlLFxuICBnZXRSZWFsRGV2aWNlT2JqXG59IGZyb20gJy4vcmVhbC1kZXZpY2UtbWFuYWdlbWVudCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgSURCIGZyb20gJ2FwcGl1bS1pZGInO1xuaW1wb3J0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZIGZyb20gJy4vZGV2aWNlLWNvbm5lY3Rpb25zLWZhY3RvcnknO1xuaW1wb3J0IFB5aWRldmljZSBmcm9tICcuL3B5LWlvcy1kZXZpY2UtY2xpZW50JztcblxuXG5jb25zdCBTSFVURE9XTl9PVEhFUl9GRUFUX05BTUUgPSAnc2h1dGRvd25fb3RoZXJfc2ltcyc7XG5jb25zdCBDVVNUT01JWkVfUkVTVUxUX0JVTkRQRV9QQVRIID0gJ2N1c3RvbWl6ZV9yZXN1bHRfYnVuZGxlX3BhdGgnO1xuXG5jb25zdCBkZWZhdWx0U2VydmVyQ2FwcyA9IHtcbiAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgYnJvd3Nlck5hbWU6ICcnLFxuICBwbGF0Zm9ybTogJ01BQycsXG4gIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogZmFsc2UsXG59O1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IFdEQV9TSU1fU1RBUlRVUF9SRVRSSUVTID0gMjtcbmNvbnN0IFdEQV9SRUFMX0RFVl9TVEFSVFVQX1JFVFJJRVMgPSAxO1xuY29uc3QgV0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTCA9ICdodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS14Y3VpdGVzdC1kcml2ZXIvYmxvYi9tYXN0ZXIvZG9jcy9yZWFsLWRldmljZS1jb25maWcubWQnO1xuY29uc3QgV0RBX1NUQVJUVVBfUkVUUllfSU5URVJWQUwgPSAxMDAwMDtcbmNvbnN0IERFRkFVTFRfU0VUVElOR1MgPSB7XG4gIG5hdGl2ZVdlYlRhcDogZmFsc2UsXG4gIG5hdGl2ZVdlYlRhcFN0cmljdDogZmFsc2UsXG4gIHVzZUpTT05Tb3VyY2U6IGZhbHNlLFxuICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiB0cnVlLFxuICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiAndHlwZSxsYWJlbCcsXG4gIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9XZWJEcml2ZXJBZ2VudC9ibG9iL21hc3Rlci9XZWJEcml2ZXJBZ2VudExpYi9VdGlsaXRpZXMvRkJDb25maWd1cmF0aW9uLm0gZm9yIGZvbGxvd2luZyBzZXR0aW5ncycgdmFsdWVzXG4gIG1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk6IDI1LFxuICBtanBlZ1NlcnZlckZyYW1lcmF0ZTogMTAsXG4gIHNjcmVlbnNob3RRdWFsaXR5OiAxLFxuICBtanBlZ1NjYWxpbmdGYWN0b3I6IDEwMCxcbiAgLy8gc2V0IGByZWR1Y2VNb3Rpb25gIHRvIGBudWxsYCBzbyB0aGF0IGl0IHdpbGwgYmUgdmVyaWZpZWQgYnV0IHN0aWxsIHNldCBlaXRoZXIgdHJ1ZS9mYWxzZVxuICByZWR1Y2VNb3Rpb246IG51bGwsXG59O1xuLy8gVGhpcyBsb2NrIGFzc3VyZXMsIHRoYXQgZWFjaCBkcml2ZXIgc2Vzc2lvbiBkb2VzIG5vdFxuLy8gYWZmZWN0IHNoYXJlZCByZXNvdXJjZXMgb2YgdGhlIG90aGVyIHBhcmFsbGVsIHNlc3Npb25zXG5jb25zdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgV0VCX0VMRU1FTlRTX0NBQ0hFX1NJWkUgPSA1MDA7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5jb25zdCBOT19QUk9YWV9OQVRJVkVfTElTVCA9IFtcbiAgWydERUxFVEUnLCAvd2luZG93L10sXG4gIFsnR0VUJywgL15cXC9zZXNzaW9uXFwvW15cXC9dKyQvXSxcbiAgWydHRVQnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ0dFVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydHRVQnLCAvYXBwaXVtL10sXG4gIFsnR0VUJywgL2F0dHJpYnV0ZS9dLFxuICBbJ0dFVCcsIC9jb250ZXh0L10sXG4gIFsnR0VUJywgL2xvY2F0aW9uL10sXG4gIFsnR0VUJywgL2xvZy9dLFxuICBbJ0dFVCcsIC9zY3JlZW5zaG90L10sXG4gIFsnR0VUJywgL3NpemUvXSxcbiAgWydHRVQnLCAvc291cmNlL10sXG4gIFsnR0VUJywgL3RpbWVvdXRzJC9dLFxuICBbJ0dFVCcsIC91cmwvXSxcbiAgWydHRVQnLCAvd2luZG93L10sXG4gIFsnUE9TVCcsIC9hY2NlcHRfYWxlcnQvXSxcbiAgWydQT1NUJywgL2FjdGlvbnMkL10sXG4gIFsnUE9TVCcsIC9hbGVydF90ZXh0L10sXG4gIFsnUE9TVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydQT1NUJywgL2FwcGl1bS9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvaXNfbG9ja2VkL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC9sb2NrL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC91bmxvY2svXSxcbiAgWydQT1NUJywgL2JhY2svXSxcbiAgWydQT1NUJywgL2NsZWFyL10sXG4gIFsnUE9TVCcsIC9jb250ZXh0L10sXG4gIFsnUE9TVCcsIC9kaXNtaXNzX2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9lbGVtZW50XFwvYWN0aXZlL10sIC8vIE1KU09OV1AgZ2V0IGFjdGl2ZSBlbGVtZW50IHNob3VsZCBwcm94eVxuICBbJ1BPU1QnLCAvZWxlbWVudCQvXSxcbiAgWydQT1NUJywgL2VsZW1lbnRzJC9dLFxuICBbJ1BPU1QnLCAvZXhlY3V0ZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvbG9nL10sXG4gIFsnUE9TVCcsIC9tb3ZldG8vXSxcbiAgWydQT1NUJywgL3JlY2VpdmVfYXN5bmNfcmVzcG9uc2UvXSwgLy8gYWx3YXlzLCBpbiBjYXNlIGNvbnRleHQgc3dpdGNoZXMgd2hpbGUgd2FpdGluZ1xuICBbJ1BPU1QnLCAvc2Vzc2lvblxcL1teXFwvXStcXC9sb2NhdGlvbi9dLCAvLyBnZW8gbG9jYXRpb24sIGJ1dCBub3QgZWxlbWVudCBsb2NhdGlvblxuICBbJ1BPU1QnLCAvc2hha2UvXSxcbiAgWydQT1NUJywgL3RpbWVvdXRzL10sXG4gIFsnUE9TVCcsIC90b3VjaC9dLFxuICBbJ1BPU1QnLCAvdXJsL10sXG4gIFsnUE9TVCcsIC92YWx1ZS9dLFxuICBbJ1BPU1QnLCAvd2luZG93L10sXG4gIFsnREVMRVRFJywgL2Nvb2tpZS9dLFxuICBbJ0dFVCcsIC9jb29raWUvXSxcbiAgWydQT1NUJywgL2Nvb2tpZS9dLFxuXTtcbmNvbnN0IE5PX1BST1hZX1dFQl9MSVNUID0gW1xuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvZWxlbWVudC9dLFxuICBbJ0dFVCcsIC90ZXh0L10sXG4gIFsnR0VUJywgL3RpdGxlL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY2xpY2svXSxcbiAgWydQT1NUJywgL2VsZW1lbnQvXSxcbiAgWydQT1NUJywgL2ZvcndhcmQvXSxcbiAgWydQT1NUJywgL2ZyYW1lL10sXG4gIFsnUE9TVCcsIC9rZXlzL10sXG4gIFsnUE9TVCcsIC9yZWZyZXNoL10sXG5dLmNvbmNhdChOT19QUk9YWV9OQVRJVkVfTElTVCk7XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5cbmNvbnN0IE1FTU9JWkVEX0ZVTkNUSU9OUyA9IFtcbiAgJ2dldFN0YXR1c0JhckhlaWdodCcsXG4gICdnZXREZXZpY2VQaXhlbFJhdGlvJyxcbiAgJ2dldFNjcmVlbkluZm8nLFxuXTtcblxuY2xhc3MgWENVSVRlc3REcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcblxuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICctaW9zIHByZWRpY2F0ZSBzdHJpbmcnLFxuICAgICAgJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgXTtcbiAgICB0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgICd0YWcgbmFtZScsXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdwYXJ0aWFsIGxpbmsgdGV4dCcsXG4gICAgXTtcbiAgICB0aGlzLnJlc2V0SW9zKCk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyhERUZBVUxUX1NFVFRJTkdTLCB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5sb2dzID0ge307XG5cbiAgICAvLyBtZW1vaXplIGZ1bmN0aW9ucyBoZXJlLCBzbyB0aGF0IHRoZXkgYXJlIGRvbmUgb24gYSBwZXItaW5zdGFuY2UgYmFzaXNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE1FTU9JWkVEX0ZVTkNUSU9OUykge1xuICAgICAgdGhpc1tmbl0gPSBfLm1lbW9pemUodGhpc1tmbl0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ICE9PSAnbmF0aXZlV2ViVGFwJyAmJiBrZXkgIT09ICduYXRpdmVXZWJUYXBTdHJpY3QnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnUE9TVCcsIHtcbiAgICAgICAgc2V0dGluZ3M6IHtba2V5XTogdmFsdWV9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5vcHRzW2tleV0gPSAhIXZhbHVlO1xuICB9XG5cbiAgcmVzZXRJb3MgKCkge1xuICAgIHRoaXMub3B0cyA9IHRoaXMub3B0cyB8fCB7fTtcbiAgICB0aGlzLndkYSA9IG51bGw7XG4gICAgdGhpcy5vcHRzLmRldmljZSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IFtdO1xuICAgIHRoaXMuc2FmYXJpID0gZmFsc2U7XG4gICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICB0aGlzLl9jdXJyZW50VXJsID0gbnVsbDtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0ge307XG4gICAgdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSAwO1xuICAgIHRoaXMuYXN5bmNsaWJXYWl0TXMgPSAwO1xuICAgIHRoaXMucGFnZUxvYWRNcyA9IDYwMDA7XG4gICAgdGhpcy5sYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQgPSAwO1xuICAgIHRoaXMucmVtb3RlID0gbnVsbDtcblxuICAgIHRoaXMud2ViRWxlbWVudHNDYWNoZSA9IG5ldyBMUlUoe1xuICAgICAgbWF4OiBXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGwgb3V0IHJlc291cmNlIGluZm8gaGVyZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmRyaXZlckluZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmRyaXZlckluZm8gPSBhd2FpdCBnZXREcml2ZXJJbmZvKCk7XG4gICAgfVxuICAgIGxldCBzdGF0dXMgPSB7YnVpbGQ6IHt2ZXJzaW9uOiB0aGlzLmRyaXZlckluZm8udmVyc2lvbn19O1xuICAgIGlmICh0aGlzLmNhY2hlZFdkYVN0YXR1cykge1xuICAgICAgc3RhdHVzLndkYSA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgbWVyZ2VDbGlBcmdzVG9PcHRzICgpIHtcbiAgICBsZXQgZGlkTWVyZ2UgPSBmYWxzZTtcbiAgICAvLyB0aGlzLmNsaUFyZ3Mgc2hvdWxkIG5ldmVyIGluY2x1ZGUgYW55dGhpbmcgd2UgZG8gbm90IGV4cGVjdC5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNsaUFyZ3MgPz8ge30pKSB7XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCBrZXkpKSB7XG4gICAgICAgIGxvZy5pbmZvKGBDTEkgYXJnICcke2tleX0nIHdpdGggdmFsdWUgJyR7dmFsdWV9JyBvdmVyd3JpdGVzIHZhbHVlICcke3RoaXMub3B0c1trZXldfScgc2VudCBpbiB2aWEgY2FwcylgKTtcbiAgICAgICAgZGlkTWVyZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRpZE1lcmdlO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YSA9IHt9OyAvLyB0aGlzIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN0YXRlIHdlIHN0YXJ0IHNvIHdoZW4gd2UgZGVsZXRlIHRoZSBzZXNzaW9uIHdlIGNhbiBwdXQgdGhpbmdzIGJhY2tcbiAgICB0cnkge1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcbiAgICAgIHRoaXMub3B0cy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG5cbiAgICAgIC8vIG1lcmdlIGNsaSBhcmdzIHRvIG9wdHMsIGFuZCBpZiB3ZSBkaWQgbWVyZ2UgYW55LCByZXZhbGlkYXRlIG9wdHMgdG8gZW5zdXJlIHRoZSBmaW5hbCBzZXRcbiAgICAgIC8vIGlzIGFsc28gY29uc2lzdGVudFxuICAgICAgaWYgKHRoaXMubWVyZ2VDbGlBcmdzVG9PcHRzKCkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZURlc2lyZWRDYXBzKHsuLi5jYXBzLCAuLi50aGlzLmNsaUFyZ3N9KTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuXG4gICAgICAvLyBtZXJnZSBzZXJ2ZXIgY2FwYWJpbGl0aWVzICsgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNhcHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2VydmVyQ2FwcywgY2Fwcyk7XG4gICAgICAvLyB1cGRhdGUgdGhlIHVkaWQgd2l0aCB3aGF0IGlzIGFjdHVhbGx5IHVzZWRcbiAgICAgIGNhcHMudWRpZCA9IHRoaXMub3B0cy51ZGlkO1xuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIG5hdGl2ZVdlYlRhcCBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbmF0aXZlV2ViVGFwJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7bmF0aXZlV2ViVGFwOiB0aGlzLm9wdHMubmF0aXZlV2ViVGFwfSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwU3RyaWN0IGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXBTdHJpY3QnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXBTdHJpY3Q6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXBTdHJpY3R9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayB1c2VKU09OU291cmNlIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICd1c2VKU09OU291cmNlJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7dXNlSlNPTlNvdXJjZTogdGhpcy5vcHRzLnVzZUpTT05Tb3VyY2V9KTtcbiAgICAgIH1cblxuICAgICAgbGV0IHdkYVNldHRpbmdzID0ge1xuICAgICAgICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiBERUZBVUxUX1NFVFRJTkdTLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMsXG4gICAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IERFRkFVTFRfU0VUVElOR1Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIH07XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcycpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMgPSB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcztcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyA9IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ21qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHknKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5ID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJGcmFtZXJhdGUnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlckZyYW1lcmF0ZSA9IHRoaXMub3B0cy5tanBlZ1NlcnZlckZyYW1lcmF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIGxvZy5pbmZvKGBTZXR0aW5nIHRoZSBxdWFsaXR5IG9mIHBob25lIHNjcmVlbnNob3Q6ICcke3RoaXMub3B0cy5zY3JlZW5zaG90UXVhbGl0eX0nYCk7XG4gICAgICAgIHdkYVNldHRpbmdzLnNjcmVlbnNob3RRdWFsaXR5ID0gdGhpcy5vcHRzLnNjcmVlbnNob3RRdWFsaXR5O1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIFdEQSBnZXRzIG91ciBkZWZhdWx0cyBpbnN0ZWFkIG9mIHdoYXRldmVyIGl0cyBvd24gbWlnaHQgYmVcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Mod2RhU2V0dGluZ3MpO1xuXG4gICAgICAvLyB0dXJuIG9uIG1qcGVnIHN0cmVhbSByZWFkaW5nIGlmIHJlcXVlc3RlZFxuICAgICAgaWYgKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpIHtcbiAgICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nIE1KUEVHIHN0cmVhbSByZWFkaW5nIFVSTDogJyR7dGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybH0nYCk7XG4gICAgICAgIHRoaXMubWpwZWdTdHJlYW0gPSBuZXcgbWpwZWcuTUpwZWdTdHJlYW0odGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCk7XG4gICAgICAgIGF3YWl0IHRoaXMubWpwZWdTdHJlYW0uc3RhcnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCBjYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICB0aGlzLm9wdHMubm9SZXNldCA9ICEhdGhpcy5vcHRzLm5vUmVzZXQ7XG4gICAgdGhpcy5vcHRzLmZ1bGxSZXNldCA9ICEhdGhpcy5vcHRzLmZ1bGxSZXNldDtcblxuICAgIGF3YWl0IHByaW50VXNlcigpO1xuXG4gICAgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24gPSBudWxsOyAvLyBGb3IgV0RBIGFuZCB4Y29kZWJ1aWxkXG4gICAgY29uc3Qge2RldmljZSwgdWRpZCwgcmVhbERldmljZX0gPSBhd2FpdCB0aGlzLmRldGVybWluZURldmljZSgpO1xuICAgIGxvZy5pbmZvKGBEZXRlcm1pbmluZyBkZXZpY2UgdG8gcnVuIHRlc3RzIG9uOiB1ZGlkOiAnJHt1ZGlkfScsIHJlYWwgZGV2aWNlOiAke3JlYWxEZXZpY2V9YCk7XG4gICAgdGhpcy5vcHRzLmRldmljZSA9IGRldmljZTtcbiAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgdGhpcy5vcHRzLnJlYWxEZXZpY2UgPSByZWFsRGV2aWNlO1xuXG4gICAgaWYgKHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aCkge1xuICAgICAgaWYgKHJlYWxEZXZpY2UpIHtcbiAgICAgICAgbG9nLmluZm8oYFRoZSAnc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgnIGNhcGFiaWxpdHkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFNpbXVsYXRvciBkZXZpY2VzYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuaW5mbyhgU2V0dGluZyBzaW11bGF0b3IgZGV2aWNlcyBzZXQgcGF0aCB0byAnJHt0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGh9J2ApO1xuICAgICAgICB0aGlzLm9wdHMuZGV2aWNlLmRldmljZXNTZXRQYXRoID0gdGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQgaWYgdGhlcmUgaXMgbm8gcGxhdGZvcm1WZXJzaW9uLCBnZXQgaXQgZnJvbSB0aGUgZGV2aWNlXG4gICAgaWYgKCF0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICYmIHRoaXMub3B0cy5kZXZpY2UpIHtcbiAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmdldFBsYXRmb3JtVmVyc2lvbigpO1xuICAgICAgbG9nLmluZm8oYE5vIHBsYXRmb3JtVmVyc2lvbiBzcGVjaWZpZWQuIFVzaW5nIGRldmljZSB2ZXJzaW9uOiAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufSdgKTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkVmVyc2lvbiA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbih0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAhPT0gbm9ybWFsaXplZFZlcnNpb24pIHtcbiAgICAgIGxvZy5pbmZvKGBOb3JtYWxpemVkIHBsYXRmb3JtVmVyc2lvbiBjYXBhYmlsaXR5IHZhbHVlICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259JyB0byAnJHtub3JtYWxpemVkVmVyc2lvbn0nYCk7XG4gICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gbm9ybWFsaXplZFZlcnNpb247XG4gICAgfVxuICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICc5LjMnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGF0Zm9ybSB2ZXJzaW9uIG11c3QgYmUgOS4zIG9yIGFib3ZlLiAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMueGNvZGVWZXJzaW9uKSAmJiAoIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCB8fCAhdGhpcy5vcHRzLnJlYWxEZXZpY2UpKSB7XG4gICAgICAvLyBubyBgd2ViRHJpdmVyQWdlbnRVcmxgLCBvciBvbiBhIHNpbXVsYXRvciwgc28gd2UgbmVlZCBhbiBYY29kZSB2ZXJzaW9uXG4gICAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrWGNvZGVWZXJzaW9uKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3hjb2RlRGV0YWlsc1JldHJpZXZlZCcpO1xuXG4gICAgaWYgKF8udG9Mb3dlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpID09PSAnc2FmYXJpJykge1xuICAgICAgbG9nLmluZm8oJ1NhZmFyaSB0ZXN0IHJlcXVlc3RlZCcpO1xuICAgICAgdGhpcy5zYWZhcmkgPSB0cnVlO1xuICAgICAgdGhpcy5vcHRzLmFwcCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzID0gdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMgfHwge307XG4gICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSBTQUZBUklfQlVORExFX0lEO1xuICAgICAgdGhpcy5fY3VycmVudFVybCA9IHRoaXMub3B0cy5zYWZhcmlJbml0aWFsVXJsIHx8IChcbiAgICAgICAgdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgICAgID8gJ2h0dHA6Ly9hcHBpdW0uaW8nXG4gICAgICAgICAgOiBgaHR0cDovLyR7dGhpcy5vcHRzLmFkZHJlc3N9OiR7dGhpcy5vcHRzLnBvcnR9L3dlbGNvbWVgXG4gICAgICApO1xuICAgICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjInKSkge1xuICAgICAgICAvLyB0aGlzIG9wdGlvbiBkb2VzIG5vdCB3b3JrIG9uIDEyLjIgYW5kIGFib3ZlXG4gICAgICAgIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzLmFyZ3MgPSBbJy11JywgdGhpcy5fY3VycmVudFVybF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXBwIHx8IHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVBcHAoKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwQ29uZmlndXJlZCcpO1xuXG4gICAgLy8gZmFpbCB2ZXJ5IGVhcmx5IGlmIHRoZSBhcHAgZG9lc24ndCBhY3R1YWxseSBleGlzdFxuICAgIC8vIG9yIGlmIGJ1bmRsZSBpZCBkb2Vzbid0IHBvaW50IHRvIGFuIGluc3RhbGxlZCBhcHBcbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgY2hlY2tBcHBQcmVzZW50KHRoaXMub3B0cy5hcHApO1xuXG4gICAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSBhd2FpdCBleHRyYWN0QnVuZGxlSWQodGhpcy5vcHRzLmFwcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5ydW5SZXNldCgpO1xuXG4gICAgdGhpcy53ZGEgPSBuZXcgV2ViRHJpdmVyQWdlbnQodGhpcy54Y29kZVZlcnNpb24sIHRoaXMub3B0cyk7XG4gICAgLy8gRGVyaXZlZCBkYXRhIHBhdGggcmV0cmlldmFsIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb25cbiAgICAvLyBXZSBjb3VsZCBzdGFydCB0aGF0IG5vdyBpbiBiYWNrZ3JvdW5kIGFuZCBnZXQgdGhlIGNhY2hlZCByZXN1bHRcbiAgICAvLyB3aGVuZXZlciBpdCBpcyBuZWVkZWRcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgIHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCkuY2F0Y2goKGUpID0+IGxvZy5kZWJ1ZyhlKSk7XG5cbiAgICBjb25zdCBtZW1vaXplZExvZ0luZm8gPSBfLm1lbW9pemUoZnVuY3Rpb24gbG9nSW5mbyAoKSB7XG4gICAgICBsb2cuaW5mbyhcIidza2lwTG9nQ2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2dzIHN1Y2ggYXMgY3Jhc2gsIHN5c3RlbSwgc2FmYXJpIGNvbnNvbGUgYW5kIHNhZmFyaSBuZXR3b3JrLlwiKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydExvZ0NhcHR1cmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNraXBMb2dDYXB0dXJlKSB7XG4gICAgICAgIG1lbW9pemVkTG9nSW5mbygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2xvZ0NhcHR1cmVTdGFydGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgaXNMb2dDYXB0dXJlU3RhcnRlZCA9IGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuXG4gICAgbG9nLmluZm8oYFNldHRpbmcgdXAgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdzaW11bGF0b3InfWApO1xuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgaWYgKHRoaXMub3B0cy5zaHV0ZG93bk90aGVyU2ltdWxhdG9ycykge1xuICAgICAgICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKFNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duT3RoZXJTaW11bGF0b3JzKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGlzIHNob3VsZCBiZSBkb25lIGJlZm9yZSB0aGUgc2ltdWxhdG9yIGlzIHN0YXJ0ZWRcbiAgICAgIC8vIGlmIGl0IGlzIGFscmVhZHkgcnVubmluZywgdGhpcyBjYXAgd29uJ3Qgd29yaywgd2hpY2ggaXMgZG9jdW1lbnRlZFxuICAgICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiB0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMub3B0cy5kZXZpY2UudXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3ModGhpcy5vcHRzLnNhZmFyaUdsb2JhbFByZWZlcmVuY2VzKSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgU2FmYXJpIGdsb2JhbCBwcmVmZXJlbmNlcyB1cGRhdGVkYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2NhbENvbmZpZyA9IGF3YWl0IHNldExvY2FsZUFuZFByZWZlcmVuY2VzKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cywgdGhpcy5pc1NhZmFyaSgpLCBhc3luYyAoc2ltKSA9PiB7XG4gICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHNpbSk7XG5cbiAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyBpZiB0aGVyZSBuZWVkcyB0byBiZSBjaGFuZ2VzIGEgcHJpb3JpLCBzbyBjaGFuZ2UgZmlyc3QuXG4gICAgICAgIC8vIHNvbWV0aW1lcyB0aGUgc2h1dGRvd24gcHJvY2VzcyBjaGFuZ2VzIHRoZSBzZXR0aW5ncywgc28gcmVzZXQgdGhlbSxcbiAgICAgICAgLy8ga25vd2luZyB0aGF0IHRoZSBzaW0gaXMgYWxyZWFkeSBzaHV0XG4gICAgICAgIGF3YWl0IHNldExvY2FsZUFuZFByZWZlcmVuY2VzKHNpbSwgdGhpcy5vcHRzLCB0aGlzLmlzU2FmYXJpKCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCAmJiAhKGF3YWl0IGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkodGhpcy5vcHRzLmRldmljZSkpKSB7XG4gICAgICAgIGNvbnN0IGNlcnRIZWFkID0gXy50cnVuY2F0ZSh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCwge2xlbmd0aDogMjB9KTtcbiAgICAgICAgbG9nLmluZm8oYEluc3RhbGxpbmcgdGhlIGN1c3RvbSBTU0wgY2VydGlmaWNhdGUgJyR7Y2VydEhlYWR9J2ApO1xuICAgICAgICBpZiAoYXdhaXQgaGFzQ2VydGlmaWNhdGVMZWdhY3kodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFNTTCBjZXJ0aWZpY2F0ZSAnJHtjZXJ0SGVhZH0nIGFscmVhZHkgaW5zdGFsbGVkYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nLmluZm8oYE1ha2luZyBzdXJlIFNpbXVsYXRvciBpcyBzaHV0IGRvd24sICcgK1xuICAgICAgICAgICAgJ3NvIHRoYXQgU1NMIGNlcnRpZmljYXRlIGluc3RhbGxhdGlvbiB0YWtlcyBlZmZlY3RgKTtcbiAgICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgICAgICBhd2FpdCBpbnN0YWxsQ2VydGlmaWNhdGVMZWdhY3kodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2N1c3RvbUNlcnRJbnN0YWxsZWQnKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydFNpbSgpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQgJiYgYXdhaXQgZG9lc1N1cHBvcnRLZXljaGFpbkFwaSh0aGlzLm9wdHMuZGV2aWNlKSkge1xuICAgICAgICAvLyBTaW11bGF0b3IgbXVzdCBiZSBib290ZWQgaW4gb3JkZXIgdG8gY2FsbCB0aGlzIGhlbHBlclxuICAgICAgICBhd2FpdCBpbnN0YWxsQ2VydGlmaWNhdGUodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdjdXN0b21DZXJ0SW5zdGFsbGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMubGF1bmNoV2l0aElEQiAmJiB0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpZGIgPSBuZXcgSURCKHt1ZGlkfSk7XG4gICAgICAgICAgYXdhaXQgaWRiLmNvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm9wdHMuZGV2aWNlLmlkYiA9IGlkYjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy5pbmZvKGBpZGIgd2lsbCBub3QgYmUgdXNlZCBmb3IgU2ltdWxhdG9yIGludGVyYWN0aW9uLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dFdmVudCgnc2ltU3RhcnRlZCcpO1xuICAgICAgaWYgKCFpc0xvZ0NhcHR1cmVTdGFydGVkKSB7XG4gICAgICAgIC8vIFJldHJ5IGxvZyBjYXB0dXJlIGlmIFNpbXVsYXRvciB3YXMgbm90IHJ1bm5pbmcgYmVmb3JlXG4gICAgICAgIGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpIHtcbiAgICAgIGF3YWl0IG5ldyBQeWlkZXZpY2UodWRpZCkuaW5zdGFsbFByb2ZpbGUoe3BheWxvYWQ6IHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0fSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbEFVVCgpO1xuICAgICAgdGhpcy5sb2dFdmVudCgnYXBwSW5zdGFsbGVkJyk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugb25seSBoYXZlIGJ1bmRsZSBpZGVudGlmaWVyIGFuZCBubyBhcHAsIGZhaWwgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkXG4gICAgaWYgKCF0aGlzLm9wdHMuYXBwICYmIHRoaXMub3B0cy5idW5kbGVJZCAmJiAhdGhpcy5zYWZhcmkpIHtcbiAgICAgIGlmICghYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pc0FwcEluc3RhbGxlZCh0aGlzLm9wdHMuYnVuZGxlSWQpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBBcHAgd2l0aCBidW5kbGUgaWRlbnRpZmllciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB1bmtub3duYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5wZXJtaXNzaW9ucykge1xuICAgICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgICBsb2cuZGVidWcoJ1NldHRpbmcgdGhlIHJlcXVlc3RlZCBwZXJtaXNzaW9ucyBiZWZvcmUgV0RBIGlzIHN0YXJ0ZWQnKTtcbiAgICAgICAgZm9yIChjb25zdCBbYnVuZGxlSWQsIHBlcm1pc3Npb25zTWFwcGluZ10gb2YgXy50b1BhaXJzKEpTT04ucGFyc2UodGhpcy5vcHRzLnBlcm1pc3Npb25zKSkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNldFBlcm1pc3Npb25zKGJ1bmRsZUlkLCBwZXJtaXNzaW9uc01hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybignU2V0dGluZyBwZXJtaXNzaW9ucyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBTaW11bGF0b3IuICcgK1xuICAgICAgICAgICdUaGUgXCJwZXJtaXNzaW9uc1wiIGNhcGFiaWxpdHkgd2lsbCBiZSBpZ25vcmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZW5hYmxlQ2FsZW5kYXJBY2Nlc3ModGhpcy5vcHRzLmJ1bmRsZUlkKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5kaXNhYmxlQ2FsZW5kYXJBY2Nlc3ModGhpcy5vcHRzLmJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnN0YXJ0V2RhKHRoaXMub3B0cy5zZXNzaW9uSWQsIHJlYWxEZXZpY2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRSZWR1Y2VNb3Rpb24odGhpcy5vcHRzLnJlZHVjZU1vdGlvbik7XG5cbiAgICBhd2FpdCB0aGlzLnNldEluaXRpYWxPcmllbnRhdGlvbih0aGlzLm9wdHMub3JpZW50YXRpb24pO1xuICAgIHRoaXMubG9nRXZlbnQoJ29yaWVudGF0aW9uU2V0Jyk7XG5cbiAgICAvLyByZWFsIGRldmljZXMgd2lsbCBiZSBoYW5kbGVkIGxhdGVyLCBhZnRlciB0aGUgd2ViIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmICF0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAmJiB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAvLyBvbiAxMi4yIHRoZSBwYWdlIGlzIG5vdCBvcGVuZWQgaW4gV0RBXG4gICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLm9wZW5VcmwodGhpcy5fY3VycmVudFVybCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGxvZy5kZWJ1ZygnV2FpdGluZyBmb3IgaW5pdGlhbCB3ZWJ2aWV3Jyk7XG4gICAgICBhd2FpdCB0aGlzLm5hdlRvSW5pdGlhbFdlYnZpZXcoKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoJ2luaXRpYWxXZWJ2aWV3TmF2aWdhdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiB0aGlzLmlzUmVhbERldmljZSgpICYmIHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc+PScsICcxMi4yJykpIHtcbiAgICAgIC8vIG9uIDEyLjIgdGhlIHBhZ2UgaXMgbm90IG9wZW5lZCBpbiBXREFcbiAgICAgIGF3YWl0IHRoaXMuc2V0VXJsKHRoaXMuX2N1cnJlbnRVcmwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBXZWJEcml2ZXJBZ2VudFJ1bm5lclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIC0gVGhlIGlkIG9mIHRoZSB0YXJnZXQgc2Vzc2lvbiB0byBsYXVuY2ggV0RBIHdpdGguXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhbERldmljZSAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSB0ZXN0IHRhcmdldCBkZXZpY2UgaXMgYSByZWFsIGRldmljZS5cbiAgICovXG4gIGFzeW5jIHN0YXJ0V2RhIChzZXNzaW9uSWQsIHJlYWxEZXZpY2UpIHtcbiAgICAvLyBEb24ndCBjbGVhbnVwIHRoZSBwcm9jZXNzZXMgaWYgd2ViRHJpdmVyQWdlbnRVcmwgaXMgc2V0XG4gICAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgYXdhaXQgdGhpcy53ZGEuY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlUG9ydEZvcndhcmRpbmcgPSB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAmJiAhdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmxcbiAgICAgICYmIGlzTG9jYWxIb3N0KHRoaXMud2RhLndkYUJhc2VVcmwpO1xuICAgIGF3YWl0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlcXVlc3RDb25uZWN0aW9uKHRoaXMub3B0cy51ZGlkLCB0aGlzLndkYS51cmwucG9ydCwge1xuICAgICAgZGV2aWNlUG9ydDogdXNlUG9ydEZvcndhcmRpbmcgPyB0aGlzLndkYS53ZGFSZW1vdGVQb3J0IDogbnVsbCxcbiAgICAgIHVzZVBvcnRGb3J3YXJkaW5nLFxuICAgIH0pO1xuXG4gICAgLy8gTGV0IG11bHRpcGxlIFdEQSBiaW5hcmllcyB3aXRoIGRpZmZlcmVudCBkZXJpdmVkIGRhdGEgZm9sZGVycyBiZSBidWlsdCBpbiBwYXJhbGxlbFxuICAgIC8vIENvbmN1cnJlbnQgV0RBIGJ1aWxkcyBmcm9tIHRoZSBzYW1lIHNvdXJjZSB3aWxsIGNhdXNlIHhjb2RlYnVpbGQgc3luY2hyb25pemF0aW9uIGVycm9yc1xuICAgIGxldCBzeW5jaHJvbml6YXRpb25LZXkgPSBYQ1VJVGVzdERyaXZlci5uYW1lO1xuICAgIGlmICh0aGlzLm9wdHMudXNlWGN0ZXN0cnVuRmlsZSB8fCAhKGF3YWl0IHRoaXMud2RhLmlzU291cmNlRnJlc2goKSkpIHtcbiAgICAgIC8vIEZpcnN0LXRpbWUgY29tcGlsYXRpb24gaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiwgd2hpY2ggaXMgZG9uZSBmYXN0ZXIgaWYgZXhlY3V0ZWRcbiAgICAgIC8vIHNlcXVlbnRpYWxseS4gWGNvZGVidWlsZCBzcHJlYWRzIHRoZSBsb2FkIGNhdXNlZCBieSB0aGUgY2xhbmcgY29tcGlsZXIgdG8gYWxsIGF2YWlsYWJsZSBDUFUgY29yZXNcbiAgICAgIGNvbnN0IGRlcml2ZWREYXRhUGF0aCA9IGF3YWl0IHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gICAgICBpZiAoZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICAgIHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKGRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgU3RhcnRpbmcgV2ViRHJpdmVyQWdlbnQgaW5pdGlhbGl6YXRpb24gd2l0aCB0aGUgc3luY2hyb25pemF0aW9uIGtleSAnJHtzeW5jaHJvbml6YXRpb25LZXl9J2ApO1xuICAgIGlmIChTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmlzQnVzeSgpICYmICF0aGlzLm9wdHMuZGVyaXZlZERhdGFQYXRoICYmICF0aGlzLm9wdHMuYm9vdHN0cmFwUGF0aCkge1xuICAgICAgbG9nLmRlYnVnKGBDb25zaWRlciBzZXR0aW5nIGEgdW5pcXVlICdkZXJpdmVkRGF0YVBhdGgnIGNhcGFiaWxpdHkgdmFsdWUgZm9yIGVhY2ggcGFyYWxsZWwgZHJpdmVyIGluc3RhbmNlIGAgK1xuICAgICAgICBgdG8gYXZvaWQgY29uZmxpY3RzIGFuZCBzcGVlZCB1cCB0aGUgYnVpbGRpbmcgcHJvY2Vzc2ApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy51c2VOZXdXREEpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBDYXBhYmlsaXR5ICd1c2VOZXdXREEnIHNldCB0byB0cnVlLCBzbyB1bmluc3RhbGxpbmcgV0RBIGJlZm9yZSBwcm9jZWVkaW5nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXRBbmRVbmluc3RhbGwoKTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhVW5pbnN0YWxsZWQnKTtcbiAgICAgIH0gZWxzZSBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnNldHVwQ2FjaGluZygpO1xuICAgICAgfVxuXG4gICAgICAvLyBsb2NhbCBoZWxwZXIgZm9yIHRoZSB0d28gcGxhY2VzIHdlIG5lZWQgdG8gdW5pbnN0YWxsIHdkYSBhbmQgcmUtc3RhcnQgaXRcbiAgICAgIGNvbnN0IHF1aXRBbmRVbmluc3RhbGwgPSBhc3luYyAobXNnKSA9PiB7XG4gICAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKCdOb3QgcXVpdHRpbmcvdW5pbnN0YWxsaW5nIFdlYkRyaXZlckFnZW50IHNpbmNlIHdlYkRyaXZlckFnZW50VXJsIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgICAgICBsb2cud2FybignUXVpdHRpbmcgYW5kIHVuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCcpO1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0QW5kVW5pbnN0YWxsKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9O1xuXG4gICAgICAvLyBVc2VkIGluIHRoZSBmb2xsb3dpbmcgV0RBIGJ1aWxkXG4gICAgICBpZiAodGhpcy5vcHRzLnJlc3VsdEJ1bmRsZVBhdGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVGZWF0dXJlRW5hYmxlZChDVVNUT01JWkVfUkVTVUxUX0JVTkRQRV9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnR1cFJldHJpZXMgPSB0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJpZXMgfHwgKHRoaXMuaXNSZWFsRGV2aWNlKCkgPyBXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTIDogV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMpO1xuICAgICAgY29uc3Qgc3RhcnR1cFJldHJ5SW50ZXJ2YWwgPSB0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwgfHwgV0RBX1NUQVJUVVBfUkVUUllfSU5URVJWQUw7XG4gICAgICBsb2cuZGVidWcoYFRyeWluZyB0byBzdGFydCBXZWJEcml2ZXJBZ2VudCAke3N0YXJ0dXBSZXRyaWVzfSB0aW1lcyB3aXRoICR7c3RhcnR1cFJldHJ5SW50ZXJ2YWx9bXMgaW50ZXJ2YWxgKTtcbiAgICAgIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJpZXMpICYmICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGVzZSB2YWx1ZXMgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgY2hhbmdpbmcgd2RhU3RhcnR1cFJldHJpZXMvd2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwgY2FwYWJpbGl0aWVzYCk7XG4gICAgICB9XG4gICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgICBhd2FpdCByZXRyeUludGVydmFsKHN0YXJ0dXBSZXRyaWVzLCBzdGFydHVwUmV0cnlJbnRlcnZhbCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydEF0dGVtcHRlZCcpO1xuICAgICAgICBpZiAocmV0cnlDb3VudCA+IDApIHtcbiAgICAgICAgICBsb2cuaW5mbyhgUmV0cnlpbmcgV0RBIHN0YXJ0dXAgKCR7cmV0cnlDb3VudCArIDF9IG9mICR7c3RhcnR1cFJldHJpZXN9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gb24geGNvZGUgMTAgaW5zdGFsbGQgd2lsbCBvZnRlbiB0cnkgdG8gYWNjZXNzIHRoZSBhcHAgZnJvbSBpdHMgc3RhZ2luZ1xuICAgICAgICAgIC8vIGRpcmVjdG9yeSBiZWZvcmUgZnVsbHkgbW92aW5nIGl0IHRoZXJlLCBhbmQgZmFpbC4gUmV0cnlpbmcgb25jZVxuICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGhlbHBzXG4gICAgICAgICAgY29uc3QgcmV0cmllcyA9IHRoaXMueGNvZGVWZXJzaW9uLm1ham9yID49IDEwID8gMiA6IDE7XG4gICAgICAgICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBhd2FpdCByZXRyeShyZXRyaWVzLCB0aGlzLndkYS5sYXVuY2guYmluZCh0aGlzLndkYSksIHNlc3Npb25JZCwgcmVhbERldmljZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0RmFpbGVkJyk7XG4gICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICAgIGxldCBlcnJvck1zZyA9IGBVbmFibGUgdG8gbGF1bmNoIFdlYkRyaXZlckFnZW50IGJlY2F1c2Ugb2YgeGNvZGVidWlsZCBmYWlsdXJlOiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIGVycm9yTXNnICs9IGAuIE1ha2Ugc3VyZSB5b3UgZm9sbG93IHRoZSB0dXRvcmlhbCBhdCAke1dEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkx9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUcnkgdG8gcmVtb3ZlIHRoZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCByZWJvb3QgdGhlIGRldmljZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBxdWl0QW5kVW5pbnN0YWxsKGVycm9yTXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLndkYS5wcm94eVJlcVJlcy5iaW5kKHRoaXMud2RhKTtcbiAgICAgICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgbGV0IG9yaWdpbmFsU3RhY2t0cmFjZSA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgxNSwgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvbkF0dGVtcHRlZCcpO1xuICAgICAgICAgICAgbG9nLmRlYnVnKCdTZW5kaW5nIGNyZWF0ZVNlc3Npb24gY29tbWFuZCB0byBXREEnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gdGhpcy5jYWNoZWRXZGFTdGF0dXMgfHwgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRXZGFTZXNzaW9uKHRoaXMub3B0cy5idW5kbGVJZCwgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsU3RhY2t0cmFjZSA9IGVyci5zdGFjaztcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKGBGYWlsZWQgdG8gY3JlYXRlIFdEQSBzZXNzaW9uICgke2Vyci5tZXNzYWdlfSkuIFJldHJ5aW5nLi4uYCk7XG4gICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTZXNzaW9uU3RhcnRlZCcpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAob3JpZ2luYWxTdGFja3RyYWNlKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcob3JpZ2luYWxTdGFja3RyYWNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGVycm9yTXNnID0gYFVuYWJsZSB0byBzdGFydCBXZWJEcml2ZXJBZ2VudCBzZXNzaW9uIGJlY2F1c2Ugb2YgeGNvZGVidWlsZCBmYWlsdXJlOiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIGVycm9yTXNnICs9IGAgTWFrZSBzdXJlIHlvdSBmb2xsb3cgdGhlIHR1dG9yaWFsIGF0ICR7V0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTH0uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFRyeSB0byByZW1vdmUgdGhlIFdlYkRyaXZlckFnZW50UnVubmVyIGFwcGxpY2F0aW9uIGZyb20gdGhlIGRldmljZSBpZiBpdCBpcyBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgYW5kIHJlYm9vdCB0aGUgZGV2aWNlLmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHF1aXRBbmRVbmluc3RhbGwoZXJyb3JNc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5jbGVhclN5c3RlbUZpbGVzICYmICF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgICBhd2FpdCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwKHRoaXMud2RhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIGV4cGVjdCBjZXJ0YWluIHNvY2tldCBlcnJvcnMgdW50aWwgdGhpcyBwb2ludCwgYnV0IG5vd1xuICAgICAgICAvLyBtYXJrIHRoaW5ncyBhcyBmdWxseSB3b3JraW5nXG4gICAgICAgIHRoaXMud2RhLmZ1bGx5U3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0ZWQnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcnVuUmVzZXQgKG9wdHMgPSBudWxsKSB7XG4gICAgdGhpcy5sb2dFdmVudCgncmVzZXRTdGFydGVkJyk7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGF3YWl0IHJ1blJlYWxEZXZpY2VSZXNldCh0aGlzLm9wdHMuZGV2aWNlLCBvcHRzIHx8IHRoaXMub3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHJ1blNpbXVsYXRvclJlc2V0KHRoaXMub3B0cy5kZXZpY2UsIG9wdHMgfHwgdGhpcy5vcHRzKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgncmVzZXRDb21wbGV0ZScpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgYXdhaXQgcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlY29yZGVyIG9mIF8uY29tcGFjdChbXG4gICAgICB0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlciwgdGhpcy5fYXVkaW9SZWNvcmRlciwgdGhpcy5fdHJhZmZpY0NhcHR1cmVcbiAgICBdKSkge1xuICAgICAgYXdhaXQgcmVjb3JkZXIuaW50ZXJydXB0KHRydWUpO1xuICAgICAgYXdhaXQgcmVjb3JkZXIuY2xlYW51cCgpO1xuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3BlcmZSZWNvcmRlcnMpKSB7XG4gICAgICBhd2FpdCBCLmFsbCh0aGlzLl9wZXJmUmVjb3JkZXJzLm1hcCgoeCkgPT4geC5zdG9wKHRydWUpKSk7XG4gICAgICB0aGlzLl9wZXJmUmVjb3JkZXJzID0gW107XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdG9wKCk7XG5cbiAgICBpZiAodGhpcy53ZGEgJiYgIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5jbGVhclN5c3RlbUZpbGVzKSB7XG4gICAgICAgIGxldCBzeW5jaHJvbml6YXRpb25LZXkgPSBYQ1VJVGVzdERyaXZlci5uYW1lO1xuICAgICAgICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICAgICAgICBpZiAoZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICAgICAgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUoZGVyaXZlZERhdGFQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgY2xlYXJTeXN0ZW1GaWxlcyh0aGlzLndkYSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKCdOb3QgY2xlYXJpbmcgbG9nIGZpbGVzLiBVc2UgYGNsZWFyU3lzdGVtRmlsZXNgIGNhcGFiaWxpdHkgdG8gdHVybiBvbi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW1vdGUpIHtcbiAgICAgIGxvZy5kZWJ1ZygnRm91bmQgYSByZW1vdGUgZGVidWdnZXIgc2Vzc2lvbi4gUmVtb3ZpbmcuLi4nKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcFJlbW90ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkgPT09IGZhbHNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0cywge1xuICAgICAgICBlbmZvcmNlU2ltdWxhdG9yU2h1dGRvd246IHRydWUsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSAmJiAhdGhpcy5vcHRzLm5vUmVzZXQgJiYgISF0aGlzLm9wdHMuZGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSkge1xuICAgICAgICBsb2cuZGVidWcoYERlbGV0aW5nIHNpbXVsYXRvciBjcmVhdGVkIGZvciB0aGlzIHJ1biAodWRpZDogJyR7dGhpcy5vcHRzLnVkaWR9JylgKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSk7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGVsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlID0gdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiAhIXRoaXMub3B0cy5yZXNldExvY2F0aW9uU2VydmljZTtcbiAgICBpZiAoc2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLm1vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlKCk7XG4gICAgICB9IGNhdGNoIChpZ25vcmUpIHsgLyogSWdub3JlIHRoaXMgZXJyb3Igc2luY2UgbW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UgYWxyZWFkeSBsb2dnZWQgdGhlIGVycm9yICovIH1cbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmxvZ3MpKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvZ3Muc3lzbG9nLnN0b3BDYXB0dXJlKCk7XG4gICAgICB0aGlzLmxvZ3MgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tanBlZ1N0cmVhbSkge1xuICAgICAgbG9nLmluZm8oJ0Nsb3NpbmcgTUpQRUcgc3RyZWFtJyk7XG4gICAgICB0aGlzLm1qcGVnU3RyZWFtLnN0b3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0SW9zKCk7XG5cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG5cblxuICAgIGlmICh0aGlzLndkYSAmJiB0aGlzLndkYS5mdWxseVN0YXJ0ZWQpIHtcbiAgICAgIGlmICh0aGlzLndkYS5qd3Byb3h5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9zZXNzaW9uLyR7dGhpcy5zZXNzaW9uSWR9YCwgJ0RFTEVURScpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBhbiBlcnJvciBoZXJlIHNob3VsZCBub3Qgc2hvcnQtY2lyY3VpdCB0aGUgcmVzdCBvZiBjbGVhbiB1cFxuICAgICAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIERFTEVURSBzZXNzaW9uIG9uIFdEQTogJyR7ZXJyLm1lc3NhZ2V9Jy4gQ29udGludWluZyBzaHV0ZG93bi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCAmJiB0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWS5yZWxlYXNlQ29ubmVjdGlvbih0aGlzLm9wdHMudWRpZCk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQ29tbWFuZCAoY21kLCAuLi5hcmdzKSB7XG4gICAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgY29tbWFuZCAnJHtjbWR9J2ApO1xuXG4gICAgaWYgKGNtZCA9PT0gJ3JlY2VpdmVBc3luY1Jlc3BvbnNlJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVjZWl2ZUFzeW5jUmVzcG9uc2UoLi4uYXJncyk7XG4gICAgfVxuICAgIC8vIFRPRE86IG9uY2UgdGhpcyBmaXggZ2V0cyBpbnRvIGJhc2UgZHJpdmVyIHJlbW92ZSBmcm9tIGhlcmVcbiAgICBpZiAoY21kID09PSAnZ2V0U3RhdHVzJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5leGVjdXRlQ29tbWFuZChjbWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgY29uZmlndXJlQXBwICgpIHtcbiAgICBmdW5jdGlvbiBhcHBJc1BhY2thZ2VPckJ1bmRsZSAoYXBwKSB7XG4gICAgICByZXR1cm4gKC9eKFthLXpBLVowLTlcXC1fXStcXC5bYS16QS1aMC05XFwtX10rKSskLykudGVzdChhcHApO1xuICAgIH1cblxuICAgIC8vIHRoZSBhcHAgbmFtZSBpcyBhIGJ1bmRsZUlkIGFzc2lnbiBpdCB0byB0aGUgYnVuZGxlSWQgcHJvcGVydHlcbiAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gdGhpcy5vcHRzLmFwcDtcbiAgICAgIHRoaXMub3B0cy5hcHAgPSAnJztcbiAgICB9XG4gICAgLy8gd2UgaGF2ZSBhIGJ1bmRsZSBJRCwgYnV0IG5vIGFwcCwgb3IgYXBwIGlzIGFsc28gYSBidW5kbGVcbiAgICBpZiAoKHRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYnVuZGxlSWQpKSAmJlxuICAgICAgICAodGhpcy5vcHRzLmFwcCA9PT0gJycgfHwgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICBsb2cuZGVidWcoJ0FwcCBpcyBhbiBpT1MgYnVuZGxlLCB3aWxsIGF0dGVtcHQgdG8gcnVuIGFzIHByZS1leGlzdGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciBzdXBwb3J0ZWQgYnVpbGQtaW4gYXBwc1xuICAgIHN3aXRjaCAoXy50b0xvd2VyKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9ICdjb20uYXBwbGUuUHJlZmVyZW5jZXMnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnY2FsZW5kYXInOlxuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSAnY29tLmFwcGxlLm1vYmlsZWNhbCc7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGRvd25sb2FkIGlmIG5lY2Vzc2FyeVxuICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwgJy5hcHAnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5lcnJvcihlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXBwOiAke3RoaXMub3B0cy5hcHB9LiBgICtcbiAgICAgICAgYEFwcCBwYXRocyBuZWVkIHRvIGJlIGFic29sdXRlIG9yIGFuIFVSTCB0byBhIGNvbXByZXNzZWQgYXBwIGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGV2aWNlICgpIHtcbiAgICAvLyBpbiB0aGUgb25lIGNhc2Ugd2hlcmUgd2UgY3JlYXRlIGEgc2ltLCB3ZSB3aWxsIHNldCB0aGlzIHN0YXRlXG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IGZhbHNlO1xuXG4gICAgLy8gaWYgd2UgZ2V0IGdlbmVyaWMgbmFtZXMsIHRyYW5zbGF0ZSB0aGVtXG4gICAgdGhpcy5vcHRzLmRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sIHRoaXMub3B0cy5kZXZpY2VOYW1lKTtcblxuICAgIGNvbnN0IHNldHVwVmVyc2lvbkNhcHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbigpO1xuICAgICAgbG9nLmluZm8oYGlPUyBTREsgVmVyc2lvbiBzZXQgdG8gJyR7dGhpcy5vcHRzLmlvc1Nka1ZlcnNpb259J2ApO1xuICAgICAgaWYgKCF0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICYmIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uKSB7XG4gICAgICAgIGxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyB0aGUgbGF0ZXN0IHZlcnNpb24gWGNvZGUgc3VwcG9ydHM6ICcke3RoaXMub3B0cy5pb3NTZGtWZXJzaW9ufScuIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSBjYXVzZSBwcm9ibGVtcyBpZiBhIHNpbXVsYXRvciBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBwbGF0Zm9ybSB2ZXJzaW9uLmApO1xuICAgICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0cy51ZGlkKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVkaWQudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vcHRzLnVkaWQgPSBhd2FpdCBkZXRlY3RVZGlkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIFRyeWluZyB0byBmaW5kIG1hdGNoaW5nIFVESUQgZm9yIFNpbXVsYXRvclxuICAgICAgICAgIGxvZy53YXJuKGBDYW5ub3QgZGV0ZWN0IGFueSBjb25uZWN0ZWQgcmVhbCBkZXZpY2VzLiBGYWxsaW5nIGJhY2sgdG8gU2ltdWxhdG9yLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuICAgICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICAvLyBObyBtYXRjaGluZyBTaW11bGF0b3IgaXMgZm91bmQuIFRocm93IGFuIGVycm9yXG4gICAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGRldGVjdCB1ZGlkIGZvciAke3RoaXMub3B0cy5kZXZpY2VOYW1lfSBTaW11bGF0b3IgcnVubmluZyBpT1MgJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hdGNoaW5nIFNpbXVsYXRvciBleGlzdHMgYW5kIGlzIGZvdW5kLiBVc2UgaXRcbiAgICAgICAgICB0aGlzLm9wdHMudWRpZCA9IGRldmljZS51ZGlkO1xuICAgICAgICAgIGNvbnN0IGRldmljZVBsYXRmb3JtID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKGF3YWl0IGRldmljZS5nZXRQbGF0Zm9ybVZlcnNpb24oKSk7XG4gICAgICAgICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IGRldmljZVBsYXRmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gZGV2aWNlUGxhdGZvcm07XG4gICAgICAgICAgICBsb2cuaW5mbyhgU2V0IHBsYXRmb3JtVmVyc2lvbiB0byAnJHtkZXZpY2VQbGF0Zm9ybX0nIHRvIG1hdGNoIHRoZSBkZXZpY2Ugd2l0aCBnaXZlbiBVRElEYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHNldHVwVmVyc2lvbkNhcHMoKTtcbiAgICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIGl0IGlzIGEgY29ubmVjdGVkIGRldmljZS4gSWYgbm90LCB0aGUgdWRpZCBwYXNzZWQgaW4gaXMgaW52YWxpZFxuICAgICAgICBjb25zdCBkZXZpY2VzID0gYXdhaXQgZ2V0Q29ubmVjdGVkRGV2aWNlcygpO1xuICAgICAgICBsb2cuZGVidWcoYEF2YWlsYWJsZSBkZXZpY2VzOiAke2RldmljZXMuam9pbignLCAnKX1gKTtcbiAgICAgICAgaWYgKCFkZXZpY2VzLmluY2x1ZGVzKHRoaXMub3B0cy51ZGlkKSkge1xuICAgICAgICAgIC8vIGNoZWNrIGZvciBhIHBhcnRpY3VsYXIgc2ltdWxhdG9yXG4gICAgICAgICAgbG9nLmRlYnVnKGBObyByZWFsIGRldmljZSB3aXRoIHVkaWQgJyR7dGhpcy5vcHRzLnVkaWR9Jy4gTG9va2luZyBmb3Igc2ltdWxhdG9yYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldFNpbXVsYXRvcih0aGlzLm9wdHMudWRpZCwge1xuICAgICAgICAgICAgICBkZXZpY2VzU2V0UGF0aDogdGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IHRoaXMub3B0cy51ZGlkfTtcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkZXZpY2Ugb3Igc2ltdWxhdG9yIFVESUQ6ICcke3RoaXMub3B0cy51ZGlkfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0UmVhbERldmljZU9iaih0aGlzLm9wdHMudWRpZCk7XG4gICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogdHJ1ZSwgdWRpZDogdGhpcy5vcHRzLnVkaWR9O1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBrbm93IGZvciBzdXJlIHRoZSBkZXZpY2Ugd2lsbCBiZSBhIFNpbXVsYXRvclxuICAgIGF3YWl0IHNldHVwVmVyc2lvbkNhcHMoKTtcbiAgICBpZiAodGhpcy5vcHRzLmVuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uKSB7XG4gICAgICBsb2cuZGVidWcoYE5ldyBzaW11bGF0b3IgaXMgcmVxdWVzdGVkLiBJZiB0aGlzIGlzIG5vdCB3YW50ZWQsIHNldCAnZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24nIGNhcGFiaWxpdHkgdG8gZmFsc2VgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBzaW11bGF0b3IgdG8gdXNlLCBnaXZlbiB0aGUgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldEV4aXN0aW5nU2ltKHRoaXMub3B0cyk7XG5cbiAgICAgIC8vIGNoZWNrIGZvciBhbiBleGlzdGluZyBzaW11bGF0b3JcbiAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICB9XG5cbiAgICAgIGxvZy5pbmZvKCdTaW11bGF0b3IgdWRpZCBub3QgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBubyBkZXZpY2Ugb2YgdGhpcyB0eXBlIGV4aXN0cywgb3IgdGhleSByZXF1ZXN0IG5ldyBzaW0sIHNvIGNyZWF0ZSBvbmVcbiAgICBsb2cuaW5mbygnVXNpbmcgZGVzaXJlZCBjYXBzIHRvIGNyZWF0ZSBhIG5ldyBzaW11bGF0b3InKTtcbiAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCB0aGlzLmNyZWF0ZVNpbSgpO1xuICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTaW0gKCkge1xuICAgIGNvbnN0IHJ1bk9wdHMgPSB7XG4gICAgICBzY2FsZUZhY3RvcjogdGhpcy5vcHRzLnNjYWxlRmFjdG9yLFxuICAgICAgY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQ6ICEhdGhpcy5vcHRzLmNvbm5lY3RIYXJkd2FyZUtleWJvYXJkLFxuICAgICAgcGFzdGVib2FyZEF1dG9tYXRpY1N5bmM6IHRoaXMub3B0cy5zaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyA/PyAnb2ZmJyxcbiAgICAgIGlzSGVhZGxlc3M6ICEhdGhpcy5vcHRzLmlzSGVhZGxlc3MsXG4gICAgICB0cmFjZVBvaW50ZXI6IHRoaXMub3B0cy5zaW11bGF0b3JUcmFjZVBvaW50ZXIsXG4gICAgICBkZXZpY2VQcmVmZXJlbmNlczoge30sXG4gICAgfTtcblxuICAgIC8vIGFkZCB0aGUgd2luZG93IGNlbnRlciwgaWYgaXQgaXMgc3BlY2lmaWVkXG4gICAgaWYgKHRoaXMub3B0cy5TaW11bGF0b3JXaW5kb3dDZW50ZXIpIHtcbiAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Q2VudGVyID0gdGhpcy5vcHRzLlNpbXVsYXRvcldpbmRvd0NlbnRlcjtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0ludGVnZXIodGhpcy5vcHRzLnNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0KSkge1xuICAgICAgcnVuT3B0cy5zdGFydHVwVGltZW91dCA9IHRoaXMub3B0cy5zaW11bGF0b3JTdGFydHVwVGltZW91dDtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIHRvIHdvcmthcm91bmQgWENUZXN0IGJ1ZyBhYm91dCBjaGFuZ2luZyBTaW11bGF0b3JcbiAgICAvLyBvcmllbnRhdGlvbiBpcyBub3Qgc3luY2hyb25pemVkIHRvIHRoZSBhY3R1YWwgd2luZG93IG9yaWVudGF0aW9uXG4gICAgY29uc3Qgb3JpZW50YXRpb24gPSBfLmlzU3RyaW5nKHRoaXMub3B0cy5vcmllbnRhdGlvbikgJiYgdGhpcy5vcHRzLm9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG4gICAgc3dpdGNoIChvcmllbnRhdGlvbikge1xuICAgICAgY2FzZSAnTEFORFNDQVBFJzpcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiA9ICdMYW5kc2NhcGVMZWZ0JztcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlID0gOTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUE9SVFJBSVQnOlxuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uID0gJ1BvcnRyYWl0JztcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5ydW4ocnVuT3B0cyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTaW0gKCkge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0gPSB0cnVlO1xuXG4gICAgLy8gR2V0IHBsYXRmb3JtIG5hbWUgZnJvbSBjb25zdCBzaW5jZSBpdCBtdXN0IGJlIGNhc2Ugc2Vuc2l0aXZlIHRvIGNyZWF0ZSBhIG5ldyBzaW11bGF0b3JcbiAgICBjb25zdCBwbGF0Zm9ybU5hbWUgPSB0aGlzLmlzVHZPUygpID8gUExBVEZPUk1fTkFNRV9UVk9TIDogUExBVEZPUk1fTkFNRV9JT1M7XG5cbiAgICAvLyBjcmVhdGUgc2ltIGZvciBjYXBzXG4gICAgY29uc3Qgc2ltID0gYXdhaXQgY3JlYXRlU2ltKHRoaXMub3B0cywgcGxhdGZvcm1OYW1lKTtcbiAgICBsb2cuaW5mbyhgQ3JlYXRlZCBzaW11bGF0b3Igd2l0aCB1ZGlkICcke3NpbS51ZGlkfScuYCk7XG5cbiAgICByZXR1cm4gc2ltO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoQXBwICgpIHtcbiAgICBjb25zdCBBUFBfTEFVTkNIX1RJTUVPVVQgPSAyMCAqIDEwMDA7XG5cbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBMYXVuY2hBdHRlbXB0ZWQnKTtcbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNpbWN0bC5sYXVuY2hBcHAodGhpcy5vcHRzLmJ1bmRsZUlkKTtcblxuICAgIGxldCBjaGVja1N0YXR1cyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgbGV0IGN1cnJlbnRBcHAgPSByZXNwb25zZS5jdXJyZW50QXBwLmJ1bmRsZUlEO1xuICAgICAgaWYgKGN1cnJlbnRBcHAgIT09IHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5vcHRzLmJ1bmRsZUlkfSBub3QgaW4gZm9yZWdyb3VuZC4gJHtjdXJyZW50QXBwfSBpcyBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxvZy5pbmZvKGBXYWl0aW5nIGZvciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB0byBiZSBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgbGV0IHJldHJpZXMgPSBwYXJzZUludChBUFBfTEFVTkNIX1RJTUVPVVQgLyAyMDAsIDEwKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIDIwMCwgY2hlY2tTdGF0dXMpO1xuICAgIGxvZy5pbmZvKGAke3RoaXMub3B0cy5idW5kbGVJZH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgIHRoaXMubG9nRXZlbnQoJ2FwcExhdW5jaGVkJyk7XG4gIH1cblxuICBhc3luYyBzdGFydFdkYVNlc3Npb24gKGJ1bmRsZUlkLCBwcm9jZXNzQXJndW1lbnRzKSB7XG4gICAgY29uc3QgYXJncyA9IHByb2Nlc3NBcmd1bWVudHMgPyAocHJvY2Vzc0FyZ3VtZW50cy5hcmdzIHx8IFtdKSA6IFtdO1xuICAgIGlmICghXy5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb2Nlc3NBcmd1bWVudHMuYXJncyBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5LiBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoYXJncyl9IGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgY29uc3QgZW52ID0gcHJvY2Vzc0FyZ3VtZW50cyA/IChwcm9jZXNzQXJndW1lbnRzLmVudiB8fCB7fSkgOiB7fTtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChlbnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb2Nlc3NBcmd1bWVudHMuZW52IGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBkaWN0aW9uYXJ5LiBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoZW52KX0gaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cblxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5sYW5ndWFnZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLUFwcGxlTGFuZ3VhZ2VzJywgYCgke3RoaXMub3B0cy5sYW5ndWFnZX0pYCk7XG4gICAgICBhcmdzLnB1c2goJy1OU0xhbmd1YWdlcycsIGAoJHt0aGlzLm9wdHMubGFuZ3VhZ2V9KWApO1xuICAgIH1cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubG9jYWxlKSkge1xuICAgICAgYXJncy5wdXNoKCctQXBwbGVMb2NhbGUnLCB0aGlzLm9wdHMubG9jYWxlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgIGlmIChfLmlzTmlsKHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHApKSB7XG4gICAgICAgIHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzTmlsKHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCkpIHtcbiAgICAgICAgdGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2RhQ2FwcyA9IHtcbiAgICAgIGJ1bmRsZUlkOiB0aGlzLm9wdHMuYXV0b0xhdW5jaCA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBidW5kbGVJZCxcbiAgICAgIGFyZ3VtZW50czogYXJncyxcbiAgICAgIGVudmlyb25tZW50OiBlbnYsXG4gICAgICBldmVudGxvb3BJZGxlRGVsYXlTZWM6IHRoaXMub3B0cy53ZGFFdmVudGxvb3BJZGxlRGVsYXkgPz8gMCxcbiAgICAgIHNob3VsZFdhaXRGb3JRdWllc2NlbmNlOiB0aGlzLm9wdHMud2FpdEZvclF1aWVzY2VuY2UgPz8gdHJ1ZSxcbiAgICAgIHNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbjogdGhpcy5vcHRzLnNpbXBsZUlzVmlzaWJsZUNoZWNrID8/IGZhbHNlLFxuICAgICAgbWF4VHlwaW5nRnJlcXVlbmN5OiB0aGlzLm9wdHMubWF4VHlwaW5nRnJlcXVlbmN5ID8/IDYwLFxuICAgICAgc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXI6IHRoaXMub3B0cy5zaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlciA/PyB0cnVlLFxuICAgICAgd2FpdEZvcklkbGVUaW1lb3V0OiB0aGlzLm9wdHMud2FpdEZvcklkbGVUaW1lb3V0LFxuICAgICAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogdGhpcy5vcHRzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMsXG4gICAgICBlbGVtZW50UmVzcG9uc2VGaWVsZHM6IHRoaXMub3B0cy5lbGVtZW50UmVzcG9uc2VGaWVsZHMsXG4gICAgICBkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHM6IHRoaXMub3B0cy5kaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMsXG4gICAgICBzaG91bGRUZXJtaW5hdGVBcHA6IHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHAgPz8gdHJ1ZSxcbiAgICAgIGZvcmNlQXBwTGF1bmNoOiB0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2ggPz8gdHJ1ZSxcbiAgICAgIHVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneTogdGhpcy5vcHRzLnVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneSA/PyB0cnVlLFxuICAgICAgZm9yY2VTaW11bGF0b3JTb2Z0d2FyZUtleWJvYXJkUHJlc2VuY2U6IHRoaXMub3B0cy5mb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZVxuICAgICAgICA/PyAodGhpcy5vcHRzLmNvbm5lY3RIYXJkd2FyZUtleWJvYXJkID09PSB0cnVlID8gZmFsc2UgOiB0cnVlKSxcbiAgICB9O1xuICAgIGlmICh0aGlzLm9wdHMuYXV0b0FjY2VwdEFsZXJ0cykge1xuICAgICAgd2RhQ2Fwcy5kZWZhdWx0QWxlcnRBY3Rpb24gPSAnYWNjZXB0JztcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hdXRvRGlzbWlzc0FsZXJ0cykge1xuICAgICAgd2RhQ2Fwcy5kZWZhdWx0QWxlcnRBY3Rpb24gPSAnZGlzbWlzcyc7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW3dkYUNhcHNdLFxuICAgICAgICBhbHdheXNNYXRjaDoge30sXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBPdmVycmlkZSBQcm94eSBtZXRob2RzIGZyb20gQmFzZURyaXZlclxuICBwcm94eUFjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBY3RpdmU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoKSB7XG4gICAgaWYgKHRoaXMuaXNXZWJ2aWV3KCkpIHtcbiAgICAgIHJldHVybiBOT19QUk9YWV9XRUJfTElTVDtcbiAgICB9XG4gICAgcmV0dXJuIE5PX1BST1hZX05BVElWRV9MSVNUO1xuICB9XG5cbiAgY2FuUHJveHkgKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNTYWZhcmkgKCkge1xuICAgIHJldHVybiAhIXRoaXMuc2FmYXJpO1xuICB9XG5cbiAgaXNSZWFsRGV2aWNlICgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRzLnJlYWxEZXZpY2U7XG4gIH1cblxuICBpc1NpbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuICF0aGlzLm9wdHMucmVhbERldmljZTtcbiAgfVxuXG4gIGlzVHZPUyAoKSB7XG4gICAgcmV0dXJuIF8udG9Mb3dlcih0aGlzLm9wdHMucGxhdGZvcm1OYW1lKSA9PT0gXy50b0xvd2VyKFBMQVRGT1JNX05BTUVfVFZPUyk7XG4gIH1cblxuICBpc1dlYnZpZXcgKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2FmYXJpKCkgfHwgdGhpcy5pc1dlYkNvbnRleHQoKTtcbiAgfVxuXG4gIHZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5IChzdHJhdGVneSkge1xuICAgIHN1cGVyLnZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5KHN0cmF0ZWd5LCB0aGlzLmlzV2ViQ29udGV4dCgpKTtcbiAgfVxuXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgICBpZiAoIXN1cGVyLnZhbGlkYXRlRGVzaXJlZENhcHMoY2FwcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgb25lIG9mIGBhcHBgIG9yIGBidW5kbGVJZGBcbiAgICBpZiAoXy50b0xvd2VyKGNhcHMuYnJvd3Nlck5hbWUpICE9PSAnc2FmYXJpJyAmJiAhY2Fwcy5hcHAgJiYgIWNhcHMuYnVuZGxlSWQpIHtcbiAgICAgIGxvZy5pbmZvKCdUaGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgaW5jbHVkZSBuZWl0aGVyIGFuIGFwcCBub3IgYSBidW5kbGVJZC4gJyArXG4gICAgICAgICdXZWJEcml2ZXJBZ2VudCB3aWxsIGJlIHN0YXJ0ZWQgd2l0aG91dCB0aGUgZGVmYXVsdCBhcHAnKTtcbiAgICB9XG5cbiAgICBpZiAoIXV0aWwuY29lcmNlVmVyc2lvbihjYXBzLnBsYXRmb3JtVmVyc2lvbiwgZmFsc2UpKSB7XG4gICAgICBsb2cud2FybihgJ3BsYXRmb3JtVmVyc2lvbicgY2FwYWJpbGl0eSAoJyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259JykgaXMgbm90IGEgdmFsaWQgdmVyc2lvbiBudW1iZXIuIGAgK1xuICAgICAgICBgQ29uc2lkZXIgZml4aW5nIGl0IG9yIGJlIHJlYWR5IHRvIGV4cGVyaWVuY2UgYW4gaW5jb25zaXN0ZW50IGRyaXZlciBiZWhhdmlvci5gKTtcbiAgICB9XG5cbiAgICBsZXQgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50ID0gKHByb2Nlc3NBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHthcmdzLCBlbnZ9ID0gcHJvY2Vzc0FyZ3VtZW50cztcbiAgICAgIGlmICghXy5pc05pbChhcmdzKSAmJiAhXy5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KCdwcm9jZXNzQXJndW1lbnRzLmFyZ3MgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNOaWwoZW52KSAmJiAhXy5pc1BsYWluT2JqZWN0KGVudikpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ3Byb2Nlc3NBcmd1bWVudHMuZW52IG11c3QgYmUgYW4gb2JqZWN0IDxrZXksdmFsdWU+IHBhaXIge2E6YiwgYzpkfScpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBgcHJvY2Vzc0FyZ3VtZW50c2Agc2hvdWxkIGJlIEpTT04gc3RyaW5nIG9yIGFuIG9iamVjdCB3aXRoIGFyZ3VtZW50cyBhbmQvIGVudmlyb25tZW50IGRldGFpbHNcbiAgICBpZiAoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSB7XG4gICAgICBpZiAoXy5pc1N0cmluZyhjYXBzLnByb2Nlc3NBcmd1bWVudHMpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gdHJ5IHRvIHBhcnNlIHRoZSBzdHJpbmcgYXMgSlNPTlxuICAgICAgICAgIGNhcHMucHJvY2Vzc0FyZ3VtZW50cyA9IEpTT04ucGFyc2UoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgICB2ZXJpZnlQcm9jZXNzQXJndW1lbnQoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYHByb2Nlc3NBcmd1bWVudHMgbXVzdCBiZSBhIEpTT04gZm9ybWF0IG9yIGFuIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgICBgQm90aCBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnQgY2FuIGJlIG51bGwuIEVycm9yOiAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB2ZXJpZnlQcm9jZXNzQXJndW1lbnQoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAncHJvY2Vzc0FyZ3VtZW50cyBtdXN0IGJlIGFuIG9iamVjdCwgb3IgYSBzdHJpbmcgSlNPTiBvYmplY3Qgd2l0aCBmb3JtYXQge2FyZ3MgOiBbXSwgZW52IDoge2E6YiwgYzpkfX0uIGAgK1xuICAgICAgICAgIGBCb3RoIGVudmlyb25tZW50IGFuZCBhcmd1bWVudCBjYW4gYmUgbnVsbC5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGVyZSBpcyBubyBwb2ludCBpbiBoYXZpbmcgYGtleWNoYWluUGF0aGAgd2l0aG91dCBga2V5Y2hhaW5QYXNzd29yZGBcbiAgICBpZiAoKGNhcHMua2V5Y2hhaW5QYXRoICYmICFjYXBzLmtleWNoYWluUGFzc3dvcmQpIHx8ICghY2Fwcy5rZXljaGFpblBhdGggJiYgY2Fwcy5rZXljaGFpblBhc3N3b3JkKSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYElmICdrZXljaGFpblBhdGgnIGlzIHNldCwgJ2tleWNoYWluUGFzc3dvcmQnIG11c3QgYWxzbyBiZSBzZXQgKGFuZCB2aWNlIHZlcnNhKS5gKTtcbiAgICB9XG5cbiAgICAvLyBgcmVzZXRPblNlc3Npb25TdGFydE9ubHlgIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgdGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5ID0gIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5KSB8fCB0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHk7XG4gICAgdGhpcy5vcHRzLnVzZU5ld1dEQSA9IHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLnVzZU5ld1dEQSkgPyB0aGlzLm9wdHMudXNlTmV3V0RBIDogZmFsc2U7XG5cbiAgICBpZiAoY2Fwcy5jb21tYW5kVGltZW91dHMpIHtcbiAgICAgIGNhcHMuY29tbWFuZFRpbWVvdXRzID0gbm9ybWFsaXplQ29tbWFuZFRpbWVvdXRzKGNhcHMuY29tbWFuZFRpbWVvdXRzKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1N0cmluZyhjYXBzLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgY29uc3Qge3Byb3RvY29sLCBob3N0fSA9IHVybC5wYXJzZShjYXBzLndlYkRyaXZlckFnZW50VXJsKTtcbiAgICAgIGlmIChfLmlzRW1wdHkocHJvdG9jb2wpIHx8IF8uaXNFbXB0eShob3N0KSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3dlYkRyaXZlckFnZW50VXJsJyBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gYSB2YWxpZCBXZWJEcml2ZXJBZ2VudCBzZXJ2ZXIgVVJMLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke2NhcHMud2ViRHJpdmVyQWdlbnRVcmx9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMuYnJvd3Nlck5hbWUpIHtcbiAgICAgIGlmIChjYXBzLmJ1bmRsZUlkKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnYnJvd3Nlck5hbWUnIGNhbm5vdCBiZSBzZXQgdG9nZXRoZXIgd2l0aCAnYnVuZGxlSWQnIGNhcGFiaWxpdHlgKTtcbiAgICAgIH1cbiAgICAgIC8vIHdhcm4gaWYgdGhlIGNhcGFiaWxpdGllcyBoYXZlIGJvdGggYGFwcGAgYW5kIGBicm93c2VyLCBhbHRob3VnaCB0aGlzXG4gICAgICAvLyBpcyBjb21tb24gd2l0aCBzZWxlbml1bSBncmlkXG4gICAgICBpZiAoY2Fwcy5hcHApIHtcbiAgICAgICAgbG9nLndhcm4oYFRoZSBjYXBhYmlsaXRpZXMgc2hvdWxkIGdlbmVyYWxseSBub3QgaW5jbHVkZSBib3RoIGFuICdhcHAnIGFuZCBhICdicm93c2VyTmFtZSdgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5wZXJtaXNzaW9ucykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChjb25zdCBbYnVuZGxlSWQsIHBlcm1zXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZShjYXBzLnBlcm1pc3Npb25zKSkpIHtcbiAgICAgICAgICBpZiAoIV8uaXNTdHJpbmcoYnVuZGxlSWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke0pTT04uc3RyaW5naWZ5KGJ1bmRsZUlkKX0nIG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfLmlzUGxhaW5PYmplY3QocGVybXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke0pTT04uc3RyaW5naWZ5KHBlcm1zKX0nIG11c3QgYmUgYSBKU09OIG9iamVjdGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJyR7Y2Fwcy5wZXJtaXNzaW9uc30nIGlzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgb2JqZWN0IHdpdGggZm9ybWF0IGAgK1xuICAgICAgICAgIGB7XCI8YnVuZGxlSWQxPlwiOiB7XCI8c2VydmljZU5hbWUxPlwiOiBcIjxzZXJ2aWNlU3RhdHVzMT5cIiwgLi4ufSwgLi4ufS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLnBsYXRmb3JtVmVyc2lvbiAmJiAhdXRpbC5jb2VyY2VWZXJzaW9uKGNhcHMucGxhdGZvcm1WZXJzaW9uLCBmYWxzZSkpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGAncGxhdGZvcm1WZXJzaW9uJyBtdXN0IGJlIGEgdmFsaWQgdmVyc2lvbiBudW1iZXIuIGAgK1xuICAgICAgICBgJyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259JyBpcyBnaXZlbiBpbnN0ZWFkLmApO1xuICAgIH1cblxuICAgIC8vIGFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzIGlzIGFuIGFycmF5LCBKU09OIGFycmF5LCBvciBzdHJpbmdcbiAgICBpZiAoY2Fwcy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcykge1xuICAgICAgY2Fwcy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyA9IHRoaXMuaGVscGVycy5wYXJzZUNhcHNBcnJheShjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzKTtcbiAgICB9XG5cbiAgICAvLyBmaW5hbGx5LCByZXR1cm4gdHJ1ZSBzaW5jZSB0aGUgc3VwZXJjbGFzcyBjaGVjayBwYXNzZWQsIGFzIGRpZCB0aGlzXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsQVVUICgpIHtcbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSh0aGlzLm9wdHMuYXBwLCB7XG4gICAgICBpc1NpbXVsYXRvcjogdGhpcy5pc1NpbXVsYXRvcigpLFxuICAgICAgaXNUdk9TOiB0aGlzLmlzVHZPUygpLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1JlYWxEZXZpY2UodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmJ1bmRsZUlkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICB0aW1lb3V0OiB0aGlzLm9wdHMuYXBwUHVzaFRpbWVvdXQsXG4gICAgICAgIHN0cmF0ZWd5OiB0aGlzLm9wdHMuYXBwSW5zdGFsbFN0cmF0ZWd5LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYnVuZGxlSWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIG5ld1NpbXVsYXRvcjogdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLm90aGVyQXBwcykge1xuICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsT3RoZXJBcHBzKHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgIH1cblxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5pb3NJbnN0YWxsUGF1c2UpKSB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvNjg4OVxuICAgICAgbGV0IHBhdXNlID0gcGFyc2VJbnQodGhpcy5vcHRzLmlvc0luc3RhbGxQYXVzZSwgMTApO1xuICAgICAgbG9nLmRlYnVnKGBpb3NJbnN0YWxsUGF1c2Ugc2V0LiBQYXVzaW5nICR7cGF1c2V9IG1zIGJlZm9yZSBjb250aW51aW5nYCk7XG4gICAgICBhd2FpdCBCLmRlbGF5KHBhdXNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnN0YWxsT3RoZXJBcHBzIChvdGhlckFwcHMpIHtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgbG9nLndhcm4oJ0NhcGFiaWxpdHkgb3RoZXJBcHBzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3JzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBhcHBzTGlzdDtcbiAgICB0cnkge1xuICAgICAgYXBwc0xpc3QgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkob3RoZXJBcHBzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwib3RoZXJBcHBzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkoYXBwc0xpc3QpKSB7XG4gICAgICBsb2cuaW5mbyhgR290IHplcm8gYXBwcyBmcm9tICdvdGhlckFwcHMnIGNhcGFiaWxpdHkgdmFsdWUuIERvaW5nIG5vdGhpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBQYXRocyA9IGF3YWl0IEIuYWxsKGFwcHNMaXN0Lm1hcChcbiAgICAgIChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpXG4gICAgKSk7XG4gICAgZm9yIChjb25zdCBvdGhlckFwcCBvZiBhcHBQYXRocykge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UsIG90aGVyQXBwLCB1bmRlZmluZWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIG5ld1NpbXVsYXRvcjogdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVkdWNlTW90aW9uIGFzICdpc0VuYWJsZWQnIG9ubHkgd2hlbiB0aGUgY2FwYWJpbGl0aWVzIGhhcyAncmVkdWNlTW90aW9uJ1xuICAgKiBUaGUgY2FsbCBpcyBpZ25vcmVkIGZvciByZWFsIGRldmljZXMuXG4gICAqIEBwYXJhbSB7P2Jvb2xlYW59IGlzRW5hYmxlZCBXZXRoZXIgZW5hYmxlIHJlZHVjZU1vdGlvblxuICAgKi9cbiAgYXN5bmMgc2V0UmVkdWNlTW90aW9uIChpc0VuYWJsZWQpIHtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSB8fCAhXy5pc0Jvb2xlYW4oaXNFbmFibGVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKGBTZXR0aW5nIHJlZHVjZU1vdGlvbiB0byAke2lzRW5hYmxlZH1gKTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtyZWR1Y2VNb3Rpb246IGlzRW5hYmxlZH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0SW5pdGlhbE9yaWVudGF0aW9uIChvcmllbnRhdGlvbikge1xuICAgIGlmICghXy5pc1N0cmluZyhvcmllbnRhdGlvbikpIHtcbiAgICAgIGxvZy5pbmZvKCdTa2lwcGluZyBzZXR0aW5nIG9mIHRoZSBpbml0aWFsIGRpc3BsYXkgb3JpZW50YXRpb24uICcgK1xuICAgICAgICAnU2V0IHRoZSBcIm9yaWVudGF0aW9uXCIgY2FwYWJpbGl0eSB0byBlaXRoZXIgXCJMQU5EU0NBUEVcIiBvciBcIlBPUlRSQUlUXCIsIGlmIHRoaXMgaXMgYW4gdW5kZXNpcmVkIGJlaGF2aW9yLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKCFfLmluY2x1ZGVzKFsnTEFORFNDQVBFJywgJ1BPUlRSQUlUJ10sIG9yaWVudGF0aW9uKSkge1xuICAgICAgbG9nLmRlYnVnKGBVbmFibGUgdG8gc2V0IGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7b3JpZW50YXRpb259J2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHtvcmllbnRhdGlvbn0nYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvb3JpZW50YXRpb24nLCAnUE9TVCcsIHtvcmllbnRhdGlvbn0pO1xuICAgICAgdGhpcy5vcHRzLmN1ck9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIGZhaWxlZCB3aXRoOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRDb21tYW5kVGltZW91dCAoY21kTmFtZSkge1xuICAgIGlmICh0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzKSB7XG4gICAgICBpZiAoY21kTmFtZSAmJiBfLmhhcyh0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzLCBjbWROYW1lKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0c1tjbWROYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzW0RFRkFVTFRfVElNRU9VVF9LRVldO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2Vzc2lvbiBjYXBhYmlsaXRpZXMgbWVyZ2VkIHdpdGggd2hhdCBXREEgcmVwb3J0c1xuICAgKiBUaGlzIGlzIGEgbGlicmFyeSBjb21tYW5kIGJ1dCBuZWVkcyB0byBjYWxsICdzdXBlcicgc28gY2FuJ3QgYmUgb25cbiAgICogYSBoZWxwZXIgb2JqZWN0XG4gICAqL1xuICBhc3luYyBnZXRTZXNzaW9uICgpIHtcbiAgICAvLyBjYWxsIHN1cGVyIHRvIGdldCBldmVudCB0aW1pbmdzLCBldGMuLi5cbiAgICBjb25zdCBkcml2ZXJTZXNzaW9uID0gYXdhaXQgc3VwZXIuZ2V0U2Vzc2lvbigpO1xuICAgIGlmICghdGhpcy53ZGFDYXBzKSB7XG4gICAgICB0aGlzLndkYUNhcHMgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnLycsICdHRVQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRHZXREZXZpY2VDYXBzID0gXy5pc0Jvb2xlYW4odGhpcy5vcHRzLmluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mbylcbiAgICAgID8gdGhpcy5vcHRzLmluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mb1xuICAgICAgOiB0cnVlOyAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgaWYgKHNob3VsZEdldERldmljZUNhcHMgJiYgIXRoaXMuZGV2aWNlQ2Fwcykge1xuICAgICAgY29uc3Qge3N0YXR1c0JhclNpemUsIHNjYWxlfSA9IGF3YWl0IHRoaXMuZ2V0U2NyZWVuSW5mbygpO1xuICAgICAgdGhpcy5kZXZpY2VDYXBzID0ge1xuICAgICAgICBwaXhlbFJhdGlvOiBzY2FsZSxcbiAgICAgICAgc3RhdEJhckhlaWdodDogc3RhdHVzQmFyU2l6ZS5oZWlnaHQsXG4gICAgICAgIHZpZXdwb3J0UmVjdDogYXdhaXQgdGhpcy5nZXRWaWV3cG9ydFJlY3QoKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGxvZy5pbmZvKCdNZXJnaW5nIFdEQSBjYXBzIG92ZXIgQXBwaXVtIGNhcHMgZm9yIHNlc3Npb24gZGV0YWlsIHJlc3BvbnNlJyk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe3VkaWQ6IHRoaXMub3B0cy51ZGlkfSwgZHJpdmVyU2Vzc2lvbixcbiAgICAgIHRoaXMud2RhQ2Fwcy5jYXBhYmlsaXRpZXMsIHRoaXMuZGV2aWNlQ2FwcyB8fCB7fSk7XG4gIH1cblxuICBhc3luYyByZXNldCAoKSB7XG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICAvLyBUaGlzIGlzIHRvIG1ha2Ugc3VyZSByZXNldCBoYXBwZW5zIGV2ZW4gaWYgbm9SZXNldCBpcyBzZXQgdG8gdHJ1ZVxuICAgICAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuICAgICAgb3B0cy5ub1Jlc2V0ID0gZmFsc2U7XG4gICAgICBvcHRzLmZ1bGxSZXNldCA9IGZhbHNlO1xuICAgICAgY29uc3Qgc2h1dGRvd25IYW5kbGVyID0gdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duO1xuICAgICAgdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duID0gKCkgPT4ge307XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KG9wdHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duID0gc2h1dGRvd25IYW5kbGVyO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBzdXBlci5yZXNldCgpO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oWENVSVRlc3REcml2ZXIucHJvdG90eXBlLCBjb21tYW5kcyk7XG5cbmV4cG9ydCBkZWZhdWx0IFhDVUlUZXN0RHJpdmVyO1xuZXhwb3J0IHsgWENVSVRlc3REcml2ZXIgfTtcbiJdLCJmaWxlIjoibGliL2RyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
1338
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSIsIk5PX1BST1hZX05BVElWRV9MSVNUIiwiTk9fUFJPWFlfV0VCX0xJU1QiLCJjb25jYXQiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJYQ1VJVGVzdERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsIndlYkxvY2F0b3JTdHJhdGVnaWVzIiwicmVzZXRJb3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJsb2dzIiwiZm4iLCJfIiwibWVtb2l6ZSIsImtleSIsInZhbHVlIiwicHJveHlDb21tYW5kIiwid2RhIiwiZGV2aWNlIiwiandwUHJveHlBY3RpdmUiLCJwcm94eVJlcVJlcyIsImp3cFByb3h5QXZvaWQiLCJzYWZhcmkiLCJjYWNoZWRXZGFTdGF0dXMiLCJjdXJXZWJGcmFtZXMiLCJfY3VycmVudFVybCIsImN1ckNvbnRleHQiLCJ4Y29kZVZlcnNpb24iLCJjb250ZXh0cyIsImltcGxpY2l0V2FpdE1zIiwiYXN5bmNsaWJXYWl0TXMiLCJwYWdlTG9hZE1zIiwibGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0IiwicmVtb3RlIiwid2ViRWxlbWVudHNDYWNoZSIsIkxSVSIsIm1heCIsImRyaXZlckRhdGEiLCJnZXRTdGF0dXMiLCJkcml2ZXJJbmZvIiwic3RhdHVzIiwiYnVpbGQiLCJ2ZXJzaW9uIiwibWVyZ2VDbGlBcmdzVG9PcHRzIiwiZGlkTWVyZ2UiLCJPYmplY3QiLCJlbnRyaWVzIiwiY2xpQXJncyIsImhhcyIsImxvZyIsImluZm8iLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsImxpZmVjeWNsZURhdGEiLCJzZXNzaW9uSWQiLCJjYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInN0YXJ0IiwiYXNzaWduIiwidWRpZCIsInVwZGF0ZVNldHRpbmdzIiwid2RhU2V0dGluZ3MiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJlIiwiZXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVsZXRlU2Vzc2lvbiIsImdldERlZmF1bHRVcmwiLCJpc1JlYWxEZXZpY2UiLCJhZGRyZXNzIiwiaW5jbHVkZXMiLCJwb3J0Iiwibm9SZXNldCIsImZ1bGxSZXNldCIsImlvc1Nka1ZlcnNpb24iLCJyZWFsRGV2aWNlIiwiZGV0ZXJtaW5lRGV2aWNlIiwic2ltdWxhdG9yRGV2aWNlc1NldFBhdGgiLCJkZXZpY2VzU2V0UGF0aCIsInBsYXRmb3JtVmVyc2lvbiIsImdldFBsYXRmb3JtVmVyc2lvbiIsIm5vcm1hbGl6ZWRWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsIkVycm9yIiwiaXNFbXB0eSIsIndlYkRyaXZlckFnZW50VXJsIiwibG9nRXZlbnQiLCJ0b0xvd2VyIiwiYXBwIiwidW5kZWZpbmVkIiwicHJvY2Vzc0FyZ3VtZW50cyIsImJ1bmRsZUlkIiwic2FmYXJpSW5pdGlhbFVybCIsImNvbmZpZ3VyZUFwcCIsInJ1blJlc2V0IiwiV2ViRHJpdmVyQWdlbnQiLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsImNhdGNoIiwiZGVidWciLCJtZW1vaXplZExvZ0luZm8iLCJsb2dJbmZvIiwic3RhcnRMb2dDYXB0dXJlIiwic2tpcExvZ0NhcHR1cmUiLCJyZXN1bHQiLCJpc0xvZ0NhcHR1cmVTdGFydGVkIiwiaXNTaW11bGF0b3IiLCJzaHV0ZG93bk90aGVyU2ltdWxhdG9ycyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiaXNTYWZhcmkiLCJzYWZhcmlHbG9iYWxQcmVmZXJlbmNlcyIsInVwZGF0ZVNhZmFyaUdsb2JhbFNldHRpbmdzIiwibG9jYWxDb25maWciLCJzaW0iLCJjdXN0b21TU0xDZXJ0IiwiY2VydEhlYWQiLCJ0cnVuY2F0ZSIsImxlbmd0aCIsInN0YXJ0U2ltIiwibGF1bmNoV2l0aElEQiIsImlkYiIsIklEQiIsImNvbm5lY3QiLCJtZXNzYWdlIiwiUHlpZGV2aWNlIiwiaW5zdGFsbFByb2ZpbGUiLCJwYXlsb2FkIiwiaW5zdGFsbEFVVCIsImlzQXBwSW5zdGFsbGVkIiwiZXJyb3JBbmRUaHJvdyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbnNNYXBwaW5nIiwidG9QYWlycyIsInBhcnNlIiwic2V0UGVybWlzc2lvbnMiLCJ3YXJuIiwiY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkIiwiZW5hYmxlQ2FsZW5kYXJBY2Nlc3MiLCJkaXNhYmxlQ2FsZW5kYXJBY2Nlc3MiLCJzdGFydFdkYSIsInNldFJlZHVjZU1vdGlvbiIsInNldEluaXRpYWxPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIiwib3BlblVybCIsImF1dG9XZWJ2aWV3IiwibmF2VG9Jbml0aWFsV2VidmlldyIsInNldFVybCIsImhhc1ZhbHVlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwidXNlUG9ydEZvcndhcmRpbmciLCJ3ZGFCYXNlVXJsIiwiREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkiLCJyZXF1ZXN0Q29ubmVjdGlvbiIsInVybCIsImRldmljZVBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwic3luY2hyb25pemF0aW9uS2V5IiwibmFtZSIsInVzZVhjdGVzdHJ1bkZpbGUiLCJpc1NvdXJjZUZyZXNoIiwiZGVyaXZlZERhdGFQYXRoIiwicGF0aCIsIm5vcm1hbGl6ZSIsImlzQnVzeSIsImJvb3RzdHJhcFBhdGgiLCJhY3F1aXJlIiwidXNlTmV3V0RBIiwicXVpdEFuZFVuaW5zdGFsbCIsInNldHVwQ2FjaGluZyIsIm1zZyIsInJlc3VsdEJ1bmRsZVBhdGgiLCJzdGFydHVwUmV0cmllcyIsIndkYVN0YXJ0dXBSZXRyaWVzIiwic3RhcnR1cFJldHJ5SW50ZXJ2YWwiLCJ3ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCIsInJldHJ5Q291bnQiLCJyZXRyaWVzIiwibWFqb3IiLCJsYXVuY2giLCJlcnIiLCJlcnJvck1zZyIsIm9yaWdpbmFsU3RhY2t0cmFjZSIsInN0YXJ0V2RhU2Vzc2lvbiIsInN0YWNrIiwiY2xlYXJTeXN0ZW1GaWxlcyIsImZ1bGx5U3RhcnRlZCIsInNlcnZlciIsInJlY29yZGVyIiwiY29tcGFjdCIsIl9yZWNlbnRTY3JlZW5SZWNvcmRlciIsIl9hdWRpb1JlY29yZGVyIiwiX3RyYWZmaWNDYXB0dXJlIiwiaW50ZXJydXB0IiwiY2xlYW51cCIsIl9wZXJmUmVjb3JkZXJzIiwiQiIsImFsbCIsIm1hcCIsIngiLCJzdG9wIiwic3RvcFJlbW90ZSIsInJlc2V0T25TZXNzaW9uU3RhcnRPbmx5IiwiZW5mb3JjZVNpbXVsYXRvclNodXRkb3duIiwiY3JlYXRlU2ltIiwiZGVsZXRlIiwic2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSIsImlnbm9yZSIsInN5c2xvZyIsInN0b3BDYXB0dXJlIiwiandwcm94eSIsInF1aXQiLCJyZWxlYXNlQ29ubmVjdGlvbiIsImV4ZWN1dGVDb21tYW5kIiwiY21kIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJhcHBJc1BhY2thZ2VPckJ1bmRsZSIsInRlc3QiLCJoZWxwZXJzIiwiZGV2aWNlTmFtZSIsInNldHVwVmVyc2lvbkNhcHMiLCJ0b0xvd2VyQ2FzZSIsImRldmljZVBsYXRmb3JtIiwiZGV2aWNlcyIsImpvaW4iLCJpZ24iLCJlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbiIsInJ1bk9wdHMiLCJzY2FsZUZhY3RvciIsImNvbm5lY3RIYXJkd2FyZUtleWJvYXJkIiwicGFzdGVib2FyZEF1dG9tYXRpY1N5bmMiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsImlzSGVhZGxlc3MiLCJ0cmFjZVBvaW50ZXIiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJkZXZpY2VQcmVmZXJlbmNlcyIsIlNpbXVsYXRvcldpbmRvd0NlbnRlciIsImlzSW50ZWdlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic3RhcnR1cFRpbWVvdXQiLCJpc1N0cmluZyIsInRvVXBwZXJDYXNlIiwiU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24iLCJTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIiwicnVuIiwicGxhdGZvcm1OYW1lIiwiaXNUdk9TIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwiUExBVEZPUk1fTkFNRV9JT1MiLCJsYXVuY2hBcHAiLCJBUFBfTEFVTkNIX1RJTUVPVVQiLCJzaW1jdGwiLCJjaGVja1N0YXR1cyIsInJlc3BvbnNlIiwiY3VycmVudEFwcCIsImJ1bmRsZUlEIiwicGFyc2VJbnQiLCJpc0FycmF5IiwiZW52IiwiaXNQbGFpbk9iamVjdCIsImxhbmd1YWdlIiwicHVzaCIsImxvY2FsZSIsImlzTmlsIiwic2hvdWxkVGVybWluYXRlQXBwIiwiZm9yY2VBcHBMYXVuY2giLCJ3ZGFDYXBzIiwiYXV0b0xhdW5jaCIsImFyZ3VtZW50cyIsImVudmlyb25tZW50IiwiZXZlbnRsb29wSWRsZURlbGF5U2VjIiwid2RhRXZlbnRsb29wSWRsZURlbGF5Iiwic2hvdWxkV2FpdEZvclF1aWVzY2VuY2UiLCJ3YWl0Rm9yUXVpZXNjZW5jZSIsInNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbiIsInNpbXBsZUlzVmlzaWJsZUNoZWNrIiwibWF4VHlwaW5nRnJlcXVlbmN5Iiwic2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIiLCJ3YWl0Rm9ySWRsZVRpbWVvdXQiLCJlbGVtZW50UmVzcG9uc2VGaWVsZHMiLCJkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMiLCJ1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kiLCJmb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZSIsImF1dG9BY2NlcHRBbGVydHMiLCJkZWZhdWx0QWxlcnRBY3Rpb24iLCJhdXRvRGlzbWlzc0FsZXJ0cyIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJpc1dlYnZpZXciLCJjYW5Qcm94eSIsImlzV2ViQ29udGV4dCIsInZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJjb2VyY2VWZXJzaW9uIiwidmVyaWZ5UHJvY2Vzc0FyZ3VtZW50Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImNvbW1hbmRUaW1lb3V0cyIsInByb3RvY29sIiwiaG9zdCIsInBlcm1zIiwiYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMiLCJwYXJzZUNhcHNBcnJheSIsInRpbWVvdXQiLCJhcHBQdXNoVGltZW91dCIsImFwcEluc3RhbGxTdHJhdGVneSIsIm5ld1NpbXVsYXRvciIsIm90aGVyQXBwcyIsImluc3RhbGxPdGhlckFwcHMiLCJpb3NJbnN0YWxsUGF1c2UiLCJwYXVzZSIsImRlbGF5IiwiYXBwc0xpc3QiLCJhcHBQYXRocyIsIm90aGVyQXBwIiwiaXNFbmFibGVkIiwiaXNCb29sZWFuIiwiY3VyT3JpZW50YXRpb24iLCJfZ2V0Q29tbWFuZFRpbWVvdXQiLCJjbWROYW1lIiwiREVGQVVMVF9USU1FT1VUX0tFWSIsImdldFNlc3Npb24iLCJkcml2ZXJTZXNzaW9uIiwic2hvdWxkR2V0RGV2aWNlQ2FwcyIsImluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mbyIsImRldmljZUNhcHMiLCJzdGF0dXNCYXJTaXplIiwic2NhbGUiLCJnZXRTY3JlZW5JbmZvIiwicGl4ZWxSYXRpbyIsInN0YXRCYXJIZWlnaHQiLCJoZWlnaHQiLCJ2aWV3cG9ydFJlY3QiLCJnZXRWaWV3cG9ydFJlY3QiLCJyZXNldCIsImNsb25lRGVlcCIsInNodXRkb3duSGFuZGxlciIsInJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24iLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFRQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSx3QkFBd0IsR0FBRyxxQkFBakM7QUFDQSxNQUFNQyw0QkFBNEIsR0FBRyw4QkFBckM7QUFFQSxNQUFNQyxpQkFBaUIsR0FBRztBQUN4QkMsRUFBQUEsaUJBQWlCLEVBQUUsS0FESztBQUV4QkMsRUFBQUEsc0JB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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCwgbWpwZWcgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCB7IFdlYkRyaXZlckFnZW50IH0gZnJvbSAnYXBwaXVtLXdlYmRyaXZlcmFnZW50JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IExSVSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU2ltLCBnZXRFeGlzdGluZ1NpbSwgcnVuU2ltdWxhdG9yUmVzZXQsIGluc3RhbGxUb1NpbXVsYXRvcixcbiAgc2h1dGRvd25PdGhlclNpbXVsYXRvcnMsIHNodXRkb3duU2ltdWxhdG9yLCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlc1xufSBmcm9tICcuL3NpbXVsYXRvci1tYW5hZ2VtZW50JztcbmltcG9ydCB7IGdldFNpbXVsYXRvciB9IGZyb20gJ2FwcGl1bS1pb3Mtc2ltdWxhdG9yJztcbmltcG9ydCB7XG4gIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGksIGluc3RhbGxDZXJ0aWZpY2F0ZSwgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5LFxuICBoYXNDZXJ0aWZpY2F0ZUxlZ2FjeSxcbn0gZnJvbSAnLi9jZXJ0LXV0aWxzJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIHJldHJ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSwgZXh0cmFjdEJ1bmRsZUlkIH0gZnJvbSAnLi9hcHAtdXRpbHMnO1xuaW1wb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzLCBQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgZGV0ZWN0VWRpZCwgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24sIGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbixcbiAgY2hlY2tBcHBQcmVzZW50LCBnZXREcml2ZXJJbmZvLFxuICBjbGVhclN5c3RlbUZpbGVzLCB0cmFuc2xhdGVEZXZpY2VOYW1lLCBub3JtYWxpemVDb21tYW5kVGltZW91dHMsXG4gIERFRkFVTFRfVElNRU9VVF9LRVksIG1hcmtTeXN0ZW1GaWxlc0ZvckNsZWFudXAsXG4gIHByaW50VXNlciwgcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzLFxuICBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24sIGlzTG9jYWxIb3N0XG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgcnVuUmVhbERldmljZVJlc2V0LCBpbnN0YWxsVG9SZWFsRGV2aWNlLFxuICBnZXRSZWFsRGV2aWNlT2JqXG59IGZyb20gJy4vcmVhbC1kZXZpY2UtbWFuYWdlbWVudCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgSURCIGZyb20gJ2FwcGl1bS1pZGInO1xuaW1wb3J0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZIGZyb20gJy4vZGV2aWNlLWNvbm5lY3Rpb25zLWZhY3RvcnknO1xuaW1wb3J0IFB5aWRldmljZSBmcm9tICcuL3B5LWlvcy1kZXZpY2UtY2xpZW50JztcblxuXG5jb25zdCBTSFVURE9XTl9PVEhFUl9GRUFUX05BTUUgPSAnc2h1dGRvd25fb3RoZXJfc2ltcyc7XG5jb25zdCBDVVNUT01JWkVfUkVTVUxUX0JVTkRQRV9QQVRIID0gJ2N1c3RvbWl6ZV9yZXN1bHRfYnVuZGxlX3BhdGgnO1xuXG5jb25zdCBkZWZhdWx0U2VydmVyQ2FwcyA9IHtcbiAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgYnJvd3Nlck5hbWU6ICcnLFxuICBwbGF0Zm9ybTogJ01BQycsXG4gIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogZmFsc2UsXG59O1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IFdEQV9TSU1fU1RBUlRVUF9SRVRSSUVTID0gMjtcbmNvbnN0IFdEQV9SRUFMX0RFVl9TVEFSVFVQX1JFVFJJRVMgPSAxO1xuY29uc3QgV0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTCA9ICdodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS14Y3VpdGVzdC1kcml2ZXIvYmxvYi9tYXN0ZXIvZG9jcy9yZWFsLWRldmljZS1jb25maWcubWQnO1xuY29uc3QgV0RBX1NUQVJUVVBfUkVUUllfSU5URVJWQUwgPSAxMDAwMDtcbmNvbnN0IERFRkFVTFRfU0VUVElOR1MgPSB7XG4gIG5hdGl2ZVdlYlRhcDogZmFsc2UsXG4gIG5hdGl2ZVdlYlRhcFN0cmljdDogZmFsc2UsXG4gIHVzZUpTT05Tb3VyY2U6IGZhbHNlLFxuICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiB0cnVlLFxuICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiAndHlwZSxsYWJlbCcsXG4gIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9XZWJEcml2ZXJBZ2VudC9ibG9iL21hc3Rlci9XZWJEcml2ZXJBZ2VudExpYi9VdGlsaXRpZXMvRkJDb25maWd1cmF0aW9uLm0gZm9yIGZvbGxvd2luZyBzZXR0aW5ncycgdmFsdWVzXG4gIG1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk6IDI1LFxuICBtanBlZ1NlcnZlckZyYW1lcmF0ZTogMTAsXG4gIHNjcmVlbnNob3RRdWFsaXR5OiAxLFxuICBtanBlZ1NjYWxpbmdGYWN0b3I6IDEwMCxcbiAgLy8gc2V0IGByZWR1Y2VNb3Rpb25gIHRvIGBudWxsYCBzbyB0aGF0IGl0IHdpbGwgYmUgdmVyaWZpZWQgYnV0IHN0aWxsIHNldCBlaXRoZXIgdHJ1ZS9mYWxzZVxuICByZWR1Y2VNb3Rpb246IG51bGwsXG59O1xuLy8gVGhpcyBsb2NrIGFzc3VyZXMsIHRoYXQgZWFjaCBkcml2ZXIgc2Vzc2lvbiBkb2VzIG5vdFxuLy8gYWZmZWN0IHNoYXJlZCByZXNvdXJjZXMgb2YgdGhlIG90aGVyIHBhcmFsbGVsIHNlc3Npb25zXG5jb25zdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgV0VCX0VMRU1FTlRTX0NBQ0hFX1NJWkUgPSA1MDA7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5jb25zdCBOT19QUk9YWV9OQVRJVkVfTElTVCA9IFtcbiAgWydERUxFVEUnLCAvd2luZG93L10sXG4gIFsnR0VUJywgL15cXC9zZXNzaW9uXFwvW15cXC9dKyQvXSxcbiAgWydHRVQnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ0dFVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydHRVQnLCAvYXBwaXVtL10sXG4gIFsnR0VUJywgL2F0dHJpYnV0ZS9dLFxuICBbJ0dFVCcsIC9jb250ZXh0L10sXG4gIFsnR0VUJywgL2xvY2F0aW9uL10sXG4gIFsnR0VUJywgL2xvZy9dLFxuICBbJ0dFVCcsIC9zY3JlZW5zaG90L10sXG4gIFsnR0VUJywgL3NpemUvXSxcbiAgWydHRVQnLCAvc291cmNlL10sXG4gIFsnR0VUJywgL3RpbWVvdXRzJC9dLFxuICBbJ0dFVCcsIC91cmwvXSxcbiAgWydHRVQnLCAvd2luZG93L10sXG4gIFsnUE9TVCcsIC9hY2NlcHRfYWxlcnQvXSxcbiAgWydQT1NUJywgL2FjdGlvbnMkL10sXG4gIFsnUE9TVCcsIC9hbGVydF90ZXh0L10sXG4gIFsnUE9TVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydQT1NUJywgL2FwcGl1bS9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvaXNfbG9ja2VkL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC9sb2NrL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC91bmxvY2svXSxcbiAgWydQT1NUJywgL2JhY2svXSxcbiAgWydQT1NUJywgL2NsZWFyL10sXG4gIFsnUE9TVCcsIC9jb250ZXh0L10sXG4gIFsnUE9TVCcsIC9kaXNtaXNzX2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9lbGVtZW50XFwvYWN0aXZlL10sIC8vIE1KU09OV1AgZ2V0IGFjdGl2ZSBlbGVtZW50IHNob3VsZCBwcm94eVxuICBbJ1BPU1QnLCAvZWxlbWVudCQvXSxcbiAgWydQT1NUJywgL2VsZW1lbnRzJC9dLFxuICBbJ1BPU1QnLCAvZXhlY3V0ZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvbG9nL10sXG4gIFsnUE9TVCcsIC9tb3ZldG8vXSxcbiAgWydQT1NUJywgL3JlY2VpdmVfYXN5bmNfcmVzcG9uc2UvXSwgLy8gYWx3YXlzLCBpbiBjYXNlIGNvbnRleHQgc3dpdGNoZXMgd2hpbGUgd2FpdGluZ1xuICBbJ1BPU1QnLCAvc2Vzc2lvblxcL1teXFwvXStcXC9sb2NhdGlvbi9dLCAvLyBnZW8gbG9jYXRpb24sIGJ1dCBub3QgZWxlbWVudCBsb2NhdGlvblxuICBbJ1BPU1QnLCAvc2hha2UvXSxcbiAgWydQT1NUJywgL3RpbWVvdXRzL10sXG4gIFsnUE9TVCcsIC90b3VjaC9dLFxuICBbJ1BPU1QnLCAvdXJsL10sXG4gIFsnUE9TVCcsIC92YWx1ZS9dLFxuICBbJ1BPU1QnLCAvd2luZG93L10sXG4gIFsnREVMRVRFJywgL2Nvb2tpZS9dLFxuICBbJ0dFVCcsIC9jb29raWUvXSxcbiAgWydQT1NUJywgL2Nvb2tpZS9dLFxuXTtcbmNvbnN0IE5PX1BST1hZX1dFQl9MSVNUID0gW1xuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvZWxlbWVudC9dLFxuICBbJ0dFVCcsIC90ZXh0L10sXG4gIFsnR0VUJywgL3RpdGxlL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY2xpY2svXSxcbiAgWydQT1NUJywgL2VsZW1lbnQvXSxcbiAgWydQT1NUJywgL2ZvcndhcmQvXSxcbiAgWydQT1NUJywgL2ZyYW1lL10sXG4gIFsnUE9TVCcsIC9rZXlzL10sXG4gIFsnUE9TVCcsIC9yZWZyZXNoL10sXG5dLmNvbmNhdChOT19QUk9YWV9OQVRJVkVfTElTVCk7XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5cbmNvbnN0IE1FTU9JWkVEX0ZVTkNUSU9OUyA9IFtcbiAgJ2dldFN0YXR1c0JhckhlaWdodCcsXG4gICdnZXREZXZpY2VQaXhlbFJhdGlvJyxcbiAgJ2dldFNjcmVlbkluZm8nLFxuXTtcblxuY2xhc3MgWENVSVRlc3REcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcblxuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICctaW9zIHByZWRpY2F0ZSBzdHJpbmcnLFxuICAgICAgJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgXTtcbiAgICB0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgICd0YWcgbmFtZScsXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdwYXJ0aWFsIGxpbmsgdGV4dCcsXG4gICAgXTtcbiAgICB0aGlzLnJlc2V0SW9zKCk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyhERUZBVUxUX1NFVFRJTkdTLCB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5sb2dzID0ge307XG5cbiAgICAvLyBtZW1vaXplIGZ1bmN0aW9ucyBoZXJlLCBzbyB0aGF0IHRoZXkgYXJlIGRvbmUgb24gYSBwZXItaW5zdGFuY2UgYmFzaXNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE1FTU9JWkVEX0ZVTkNUSU9OUykge1xuICAgICAgdGhpc1tmbl0gPSBfLm1lbW9pemUodGhpc1tmbl0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ICE9PSAnbmF0aXZlV2ViVGFwJyAmJiBrZXkgIT09ICduYXRpdmVXZWJUYXBTdHJpY3QnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnUE9TVCcsIHtcbiAgICAgICAgc2V0dGluZ3M6IHtba2V5XTogdmFsdWV9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5vcHRzW2tleV0gPSAhIXZhbHVlO1xuICB9XG5cbiAgcmVzZXRJb3MgKCkge1xuICAgIHRoaXMub3B0cyA9IHRoaXMub3B0cyB8fCB7fTtcbiAgICB0aGlzLndkYSA9IG51bGw7XG4gICAgdGhpcy5vcHRzLmRldmljZSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IFtdO1xuICAgIHRoaXMuc2FmYXJpID0gZmFsc2U7XG4gICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICB0aGlzLl9jdXJyZW50VXJsID0gbnVsbDtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0ge307XG4gICAgdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSAwO1xuICAgIHRoaXMuYXN5bmNsaWJXYWl0TXMgPSAwO1xuICAgIHRoaXMucGFnZUxvYWRNcyA9IDYwMDA7XG4gICAgdGhpcy5sYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQgPSAwO1xuICAgIHRoaXMucmVtb3RlID0gbnVsbDtcblxuICAgIHRoaXMud2ViRWxlbWVudHNDYWNoZSA9IG5ldyBMUlUoe1xuICAgICAgbWF4OiBXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGwgb3V0IHJlc291cmNlIGluZm8gaGVyZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmRyaXZlckluZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmRyaXZlckluZm8gPSBhd2FpdCBnZXREcml2ZXJJbmZvKCk7XG4gICAgfVxuICAgIGxldCBzdGF0dXMgPSB7YnVpbGQ6IHt2ZXJzaW9uOiB0aGlzLmRyaXZlckluZm8udmVyc2lvbn19O1xuICAgIGlmICh0aGlzLmNhY2hlZFdkYVN0YXR1cykge1xuICAgICAgc3RhdHVzLndkYSA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgbWVyZ2VDbGlBcmdzVG9PcHRzICgpIHtcbiAgICBsZXQgZGlkTWVyZ2UgPSBmYWxzZTtcbiAgICAvLyB0aGlzLmNsaUFyZ3Mgc2hvdWxkIG5ldmVyIGluY2x1ZGUgYW55dGhpbmcgd2UgZG8gbm90IGV4cGVjdC5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNsaUFyZ3MgPz8ge30pKSB7XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCBrZXkpKSB7XG4gICAgICAgIGxvZy5pbmZvKGBDTEkgYXJnICcke2tleX0nIHdpdGggdmFsdWUgJyR7dmFsdWV9JyBvdmVyd3JpdGVzIHZhbHVlICcke3RoaXMub3B0c1trZXldfScgc2VudCBpbiB2aWEgY2FwcylgKTtcbiAgICAgICAgZGlkTWVyZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRpZE1lcmdlO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YSA9IHt9OyAvLyB0aGlzIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN0YXRlIHdlIHN0YXJ0IHNvIHdoZW4gd2UgZGVsZXRlIHRoZSBzZXNzaW9uIHdlIGNhbiBwdXQgdGhpbmdzIGJhY2tcbiAgICB0cnkge1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcbiAgICAgIHRoaXMub3B0cy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG5cbiAgICAgIC8vIG1lcmdlIGNsaSBhcmdzIHRvIG9wdHMsIGFuZCBpZiB3ZSBkaWQgbWVyZ2UgYW55LCByZXZhbGlkYXRlIG9wdHMgdG8gZW5zdXJlIHRoZSBmaW5hbCBzZXRcbiAgICAgIC8vIGlzIGFsc28gY29uc2lzdGVudFxuICAgICAgaWYgKHRoaXMubWVyZ2VDbGlBcmdzVG9PcHRzKCkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZURlc2lyZWRDYXBzKHsuLi5jYXBzLCAuLi50aGlzLmNsaUFyZ3N9KTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuXG4gICAgICAvLyBtZXJnZSBzZXJ2ZXIgY2FwYWJpbGl0aWVzICsgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNhcHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2VydmVyQ2FwcywgY2Fwcyk7XG4gICAgICAvLyB1cGRhdGUgdGhlIHVkaWQgd2l0aCB3aGF0IGlzIGFjdHVhbGx5IHVzZWRcbiAgICAgIGNhcHMudWRpZCA9IHRoaXMub3B0cy51ZGlkO1xuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIG5hdGl2ZVdlYlRhcCBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbmF0aXZlV2ViVGFwJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7bmF0aXZlV2ViVGFwOiB0aGlzLm9wdHMubmF0aXZlV2ViVGFwfSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwU3RyaWN0IGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXBTdHJpY3QnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXBTdHJpY3Q6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXBTdHJpY3R9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayB1c2VKU09OU291cmNlIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICd1c2VKU09OU291cmNlJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7dXNlSlNPTlNvdXJjZTogdGhpcy5vcHRzLnVzZUpTT05Tb3VyY2V9KTtcbiAgICAgIH1cblxuICAgICAgbGV0IHdkYVNldHRpbmdzID0ge1xuICAgICAgICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiBERUZBVUxUX1NFVFRJTkdTLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMsXG4gICAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IERFRkFVTFRfU0VUVElOR1Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIH07XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcycpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMgPSB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcztcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyA9IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ21qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHknKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5ID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJGcmFtZXJhdGUnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlckZyYW1lcmF0ZSA9IHRoaXMub3B0cy5tanBlZ1NlcnZlckZyYW1lcmF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIGxvZy5pbmZvKGBTZXR0aW5nIHRoZSBxdWFsaXR5IG9mIHBob25lIHNjcmVlbnNob3Q6ICcke3RoaXMub3B0cy5zY3JlZW5zaG90UXVhbGl0eX0nYCk7XG4gICAgICAgIHdkYVNldHRpbmdzLnNjcmVlbnNob3RRdWFsaXR5ID0gdGhpcy5vcHRzLnNjcmVlbnNob3RRdWFsaXR5O1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIFdEQSBnZXRzIG91ciBkZWZhdWx0cyBpbnN0ZWFkIG9mIHdoYXRldmVyIGl0cyBvd24gbWlnaHQgYmVcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Mod2RhU2V0dGluZ3MpO1xuXG4gICAgICAvLyB0dXJuIG9uIG1qcGVnIHN0cmVhbSByZWFkaW5nIGlmIHJlcXVlc3RlZFxuICAgICAgaWYgKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpIHtcbiAgICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nIE1KUEVHIHN0cmVhbSByZWFkaW5nIFVSTDogJyR7dGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybH0nYCk7XG4gICAgICAgIHRoaXMubWpwZWdTdHJlYW0gPSBuZXcgbWpwZWcuTUpwZWdTdHJlYW0odGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCk7XG4gICAgICAgIGF3YWl0IHRoaXMubWpwZWdTdHJlYW0uc3RhcnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCBjYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IFVSTCBmb3IgU2FmYXJpIGJyb3dzZXJcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgVVJMXG4gICAqL1xuICBnZXREZWZhdWx0VXJsICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgPyAnaHR0cDovL2FwcGl1bS5pbydcbiAgICAgIDogYGh0dHA6Ly8ke1xuICAgICAgICB0aGlzLm9wdHMuYWRkcmVzcy5pbmNsdWRlcygnOicpID8gYFske3RoaXMub3B0cy5hZGRyZXNzfV1gIDogdGhpcy5vcHRzLmFkZHJlc3NcbiAgICAgIH06JHt0aGlzLm9wdHMucG9ydH0vd2VsY29tZWA7XG4gIH1cblxuICBhc3luYyBzdGFydCAoKSB7XG4gICAgdGhpcy5vcHRzLm5vUmVzZXQgPSAhIXRoaXMub3B0cy5ub1Jlc2V0O1xuICAgIHRoaXMub3B0cy5mdWxsUmVzZXQgPSAhIXRoaXMub3B0cy5mdWxsUmVzZXQ7XG5cbiAgICBhd2FpdCBwcmludFVzZXIoKTtcblxuICAgIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uID0gbnVsbDsgLy8gRm9yIFdEQSBhbmQgeGNvZGVidWlsZFxuICAgIGNvbnN0IHtkZXZpY2UsIHVkaWQsIHJlYWxEZXZpY2V9ID0gYXdhaXQgdGhpcy5kZXRlcm1pbmVEZXZpY2UoKTtcbiAgICBsb2cuaW5mbyhgRGV0ZXJtaW5pbmcgZGV2aWNlIHRvIHJ1biB0ZXN0cyBvbjogdWRpZDogJyR7dWRpZH0nLCByZWFsIGRldmljZTogJHtyZWFsRGV2aWNlfWApO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5yZWFsRGV2aWNlID0gcmVhbERldmljZTtcblxuICAgIGlmICh0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgpIHtcbiAgICAgIGlmIChyZWFsRGV2aWNlKSB7XG4gICAgICAgIGxvZy5pbmZvKGBUaGUgJ3NpbXVsYXRvckRldmljZXNTZXRQYXRoJyBjYXBhYmlsaXR5IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3IgZGV2aWNlc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oYFNldHRpbmcgc2ltdWxhdG9yIGRldmljZXMgc2V0IHBhdGggdG8gJyR7dGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRofSdgKTtcbiAgICAgICAgdGhpcy5vcHRzLmRldmljZS5kZXZpY2VzU2V0UGF0aCA9IHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50IGlmIHRoZXJlIGlzIG5vIHBsYXRmb3JtVmVyc2lvbiwgZ2V0IGl0IGZyb20gdGhlIGRldmljZVxuICAgIGlmICghdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAmJiB0aGlzLm9wdHMuZGV2aWNlKSB7XG4gICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgIGxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyBkZXZpY2UgdmVyc2lvbjogJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFZlcnNpb24gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24odGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbik7XG4gICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IG5vcm1hbGl6ZWRWZXJzaW9uKSB7XG4gICAgICBsb2cuaW5mbyhgTm9ybWFsaXplZCBwbGF0Zm9ybVZlcnNpb24gY2FwYWJpbGl0eSB2YWx1ZSAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgdG8gJyR7bm9ybWFsaXplZFZlcnNpb259J2ApO1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZWRWZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnOS4zJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGxhdGZvcm0gdmVyc2lvbiBtdXN0IGJlIDkuMyBvciBhYm92ZS4gJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnhjb2RlVmVyc2lvbikgJiYgKCF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwgfHwgIXRoaXMub3B0cy5yZWFsRGV2aWNlKSkge1xuICAgICAgLy8gbm8gYHdlYkRyaXZlckFnZW50VXJsYCwgb3Igb24gYSBzaW11bGF0b3IsIHNvIHdlIG5lZWQgYW4gWGNvZGUgdmVyc2lvblxuICAgICAgdGhpcy54Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbigpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCd4Y29kZURldGFpbHNSZXRyaWV2ZWQnKTtcblxuICAgIGlmIChfLnRvTG93ZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKSA9PT0gJ3NhZmFyaScpIHtcbiAgICAgIGxvZy5pbmZvKCdTYWZhcmkgdGVzdCByZXF1ZXN0ZWQnKTtcbiAgICAgIHRoaXMuc2FmYXJpID0gdHJ1ZTtcbiAgICAgIHRoaXMub3B0cy5hcHAgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyA9IHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzIHx8IHt9O1xuICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gU0FGQVJJX0JVTkRMRV9JRDtcbiAgICAgIHRoaXMuX2N1cnJlbnRVcmwgPSB0aGlzLm9wdHMuc2FmYXJpSW5pdGlhbFVybCB8fCB0aGlzLmdldERlZmF1bHRVcmwoKTtcbiAgICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4yJykpIHtcbiAgICAgICAgLy8gdGhpcyBvcHRpb24gZG9lcyBub3Qgd29yayBvbiAxMi4yIGFuZCBhYm92ZVxuICAgICAgICB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cy5hcmdzID0gWyctdScsIHRoaXMuX2N1cnJlbnRVcmxdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcCB8fCB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlQXBwKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ2FwcENvbmZpZ3VyZWQnKTtcblxuICAgIC8vIGZhaWwgdmVyeSBlYXJseSBpZiB0aGUgYXBwIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3RcbiAgICAvLyBvciBpZiBidW5kbGUgaWQgZG9lc24ndCBwb2ludCB0byBhbiBpbnN0YWxsZWQgYXBwXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IGNoZWNrQXBwUHJlc2VudCh0aGlzLm9wdHMuYXBwKTtcblxuICAgICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdEJ1bmRsZUlkKHRoaXMub3B0cy5hcHApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucnVuUmVzZXQoKTtcblxuICAgIHRoaXMud2RhID0gbmV3IFdlYkRyaXZlckFnZW50KHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLm9wdHMpO1xuICAgIC8vIERlcml2ZWQgZGF0YSBwYXRoIHJldHJpZXZhbCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uXG4gICAgLy8gV2UgY291bGQgc3RhcnQgdGhhdCBub3cgaW4gYmFja2dyb3VuZCBhbmQgZ2V0IHRoZSBjYWNoZWQgcmVzdWx0XG4gICAgLy8gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW5cbiAgICB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpLmNhdGNoKChlKSA9PiBsb2cuZGVidWcoZSkpO1xuXG4gICAgY29uc3QgbWVtb2l6ZWRMb2dJbmZvID0gXy5tZW1vaXplKGZ1bmN0aW9uIGxvZ0luZm8gKCkge1xuICAgICAgbG9nLmluZm8oXCInc2tpcExvZ0NhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9ncyBzdWNoIGFzIGNyYXNoLCBzeXN0ZW0sIHNhZmFyaSBjb25zb2xlIGFuZCBzYWZhcmkgbmV0d29yay5cIik7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRMb2dDYXB0dXJlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy5za2lwTG9nQ2FwdHVyZSkge1xuICAgICAgICBtZW1vaXplZExvZ0luZm8oKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdsb2dDYXB0dXJlU3RhcnRlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvbnN0IGlzTG9nQ2FwdHVyZVN0YXJ0ZWQgPSBhd2FpdCBzdGFydExvZ0NhcHR1cmUoKTtcblxuICAgIGxvZy5pbmZvKGBTZXR0aW5nIHVwICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnc2ltdWxhdG9yJ31gKTtcblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuc2h1dGRvd25PdGhlclNpbXVsYXRvcnMpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVGZWF0dXJlRW5hYmxlZChTSFVURE9XTl9PVEhFUl9GRUFUX05BTUUpO1xuICAgICAgICBhd2FpdCBzaHV0ZG93bk90aGVyU2ltdWxhdG9ycyh0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgIH1cblxuICAgICAgLy8gdGhpcyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgdGhlIHNpbXVsYXRvciBpcyBzdGFydGVkXG4gICAgICAvLyBpZiBpdCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRoaXMgY2FwIHdvbid0IHdvcmssIHdoaWNoIGlzIGRvY3VtZW50ZWRcbiAgICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgdGhpcy5vcHRzLnNhZmFyaUdsb2JhbFByZWZlcmVuY2VzKSB7XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnVwZGF0ZVNhZmFyaUdsb2JhbFNldHRpbmdzKHRoaXMub3B0cy5zYWZhcmlHbG9iYWxQcmVmZXJlbmNlcykpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFNhZmFyaSBnbG9iYWwgcHJlZmVyZW5jZXMgdXBkYXRlZGApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9jYWxDb25maWcgPSBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMsIHRoaXMuaXNTYWZhcmkoKSwgYXN5bmMgKHNpbSkgPT4ge1xuICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcihzaW0pO1xuXG4gICAgICAgIC8vIHdlIGRvbid0IGtub3cgaWYgdGhlcmUgbmVlZHMgdG8gYmUgY2hhbmdlcyBhIHByaW9yaSwgc28gY2hhbmdlIGZpcnN0LlxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIHNodXRkb3duIHByb2Nlc3MgY2hhbmdlcyB0aGUgc2V0dGluZ3MsIHNvIHJlc2V0IHRoZW0sXG4gICAgICAgIC8vIGtub3dpbmcgdGhhdCB0aGUgc2ltIGlzIGFscmVhZHkgc2h1dFxuICAgICAgICBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyhzaW0sIHRoaXMub3B0cywgdGhpcy5pc1NhZmFyaSgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQgJiYgIShhd2FpdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpKHRoaXMub3B0cy5kZXZpY2UpKSkge1xuICAgICAgICBjb25zdCBjZXJ0SGVhZCA9IF8udHJ1bmNhdGUodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQsIHtsZW5ndGg6IDIwfSk7XG4gICAgICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIHRoZSBjdXN0b20gU1NMIGNlcnRpZmljYXRlICcke2NlcnRIZWFkfSdgKTtcbiAgICAgICAgaWYgKGF3YWl0IGhhc0NlcnRpZmljYXRlTGVnYWN5KHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KSkge1xuICAgICAgICAgIGxvZy5pbmZvKGBTU0wgY2VydGlmaWNhdGUgJyR7Y2VydEhlYWR9JyBhbHJlYWR5IGluc3RhbGxlZGApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy5pbmZvKGBNYWtpbmcgc3VyZSBTaW11bGF0b3IgaXMgc2h1dCBkb3duLCAnICtcbiAgICAgICAgICAgICdzbyB0aGF0IFNTTCBjZXJ0aWZpY2F0ZSBpbnN0YWxsYXRpb24gdGFrZXMgZWZmZWN0YCk7XG4gICAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSk7XG4gICAgICAgICAgYXdhaXQgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5KHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdjdXN0b21DZXJ0SW5zdGFsbGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRTaW0oKTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0ICYmIGF3YWl0IGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkodGhpcy5vcHRzLmRldmljZSkpIHtcbiAgICAgICAgLy8gU2ltdWxhdG9yIG11c3QgYmUgYm9vdGVkIGluIG9yZGVyIHRvIGNhbGwgdGhpcyBoZWxwZXJcbiAgICAgICAgYXdhaXQgaW5zdGFsbENlcnRpZmljYXRlKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnY3VzdG9tQ2VydEluc3RhbGxlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmxhdW5jaFdpdGhJREIgJiYgdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaWRiID0gbmV3IElEQih7dWRpZH0pO1xuICAgICAgICAgIGF3YWl0IGlkYi5jb25uZWN0KCk7XG4gICAgICAgICAgdGhpcy5vcHRzLmRldmljZS5pZGIgPSBpZGI7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgaWRiIHdpbGwgbm90IGJlIHVzZWQgZm9yIFNpbXVsYXRvciBpbnRlcmFjdGlvbi4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nRXZlbnQoJ3NpbVN0YXJ0ZWQnKTtcbiAgICAgIGlmICghaXNMb2dDYXB0dXJlU3RhcnRlZCkge1xuICAgICAgICAvLyBSZXRyeSBsb2cgY2FwdHVyZSBpZiBTaW11bGF0b3Igd2FzIG5vdCBydW5uaW5nIGJlZm9yZVxuICAgICAgICBhd2FpdCBzdGFydExvZ0NhcHR1cmUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KSB7XG4gICAgICBhd2FpdCBuZXcgUHlpZGV2aWNlKHVkaWQpLmluc3RhbGxQcm9maWxlKHtwYXlsb2FkOiB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RhbGxBVVQoKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoJ2FwcEluc3RhbGxlZCcpO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIG9ubHkgaGF2ZSBidW5kbGUgaWRlbnRpZmllciBhbmQgbm8gYXBwLCBmYWlsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCAmJiB0aGlzLm9wdHMuYnVuZGxlSWQgJiYgIXRoaXMuc2FmYXJpKSB7XG4gICAgICBpZiAoIWF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQodGhpcy5vcHRzLmJ1bmRsZUlkKSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQXBwIHdpdGggYnVuZGxlIGlkZW50aWZpZXIgJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScgdW5rbm93bmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucGVybWlzc2lvbnMpIHtcbiAgICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKCdTZXR0aW5nIHRoZSByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYmVmb3JlIFdEQSBpcyBzdGFydGVkJyk7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtaXNzaW9uc01hcHBpbmddIG9mIF8udG9QYWlycyhKU09OLnBhcnNlKHRoaXMub3B0cy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zZXRQZXJtaXNzaW9ucyhidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLndhcm4oJ1NldHRpbmcgcGVybWlzc2lvbnMgaXMgb25seSBzdXBwb3J0ZWQgb24gU2ltdWxhdG9yLiAnICtcbiAgICAgICAgICAnVGhlIFwicGVybWlzc2lvbnNcIiBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmVuYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGlzYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdGFydFdkYSh0aGlzLm9wdHMuc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0UmVkdWNlTW90aW9uKHRoaXMub3B0cy5yZWR1Y2VNb3Rpb24pO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRJbml0aWFsT3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdvcmllbnRhdGlvblNldCcpO1xuXG4gICAgLy8gcmVhbCBkZXZpY2VzIHdpbGwgYmUgaGFuZGxlZCBsYXRlciwgYWZ0ZXIgdGhlIHdlYiBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiAhdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgLy8gb24gMTIuMiB0aGUgcGFnZSBpcyBub3Qgb3BlbmVkIGluIFdEQVxuICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5vcGVuVXJsKHRoaXMuX2N1cnJlbnRVcmwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgfHwgdGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBsb2cuZGVidWcoJ1dhaXRpbmcgZm9yIGluaXRpYWwgd2VidmlldycpO1xuICAgICAgYXdhaXQgdGhpcy5uYXZUb0luaXRpYWxXZWJ2aWV3KCk7XG4gICAgICB0aGlzLmxvZ0V2ZW50KCdpbml0aWFsV2Vidmlld05hdmlnYXRlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAvLyBvbiAxMi4yIHRoZSBwYWdlIGlzIG5vdCBvcGVuZWQgaW4gV0RBXG4gICAgICBhd2FpdCB0aGlzLnNldFVybCh0aGlzLl9jdXJyZW50VXJsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgV2ViRHJpdmVyQWdlbnRSdW5uZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCAtIFRoZSBpZCBvZiB0aGUgdGFyZ2V0IHNlc3Npb24gdG8gbGF1bmNoIFdEQSB3aXRoLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlYWxEZXZpY2UgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgdGVzdCB0YXJnZXQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2UuXG4gICAqL1xuICBhc3luYyBzdGFydFdkYSAoc2Vzc2lvbklkLCByZWFsRGV2aWNlKSB7XG4gICAgLy8gRG9uJ3QgY2xlYW51cCB0aGUgcHJvY2Vzc2VzIGlmIHdlYkRyaXZlckFnZW50VXJsIGlzIHNldFxuICAgIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGF3YWl0IHRoaXMud2RhLmNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZVBvcnRGb3J3YXJkaW5nID0gdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgJiYgIXRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsXG4gICAgICAmJiBpc0xvY2FsSG9zdCh0aGlzLndkYS53ZGFCYXNlVXJsKTtcbiAgICBhd2FpdCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWS5yZXF1ZXN0Q29ubmVjdGlvbih0aGlzLm9wdHMudWRpZCwgdGhpcy53ZGEudXJsLnBvcnQsIHtcbiAgICAgIGRldmljZVBvcnQ6IHVzZVBvcnRGb3J3YXJkaW5nID8gdGhpcy53ZGEud2RhUmVtb3RlUG9ydCA6IG51bGwsXG4gICAgICB1c2VQb3J0Rm9yd2FyZGluZyxcbiAgICB9KTtcblxuICAgIC8vIExldCBtdWx0aXBsZSBXREEgYmluYXJpZXMgd2l0aCBkaWZmZXJlbnQgZGVyaXZlZCBkYXRhIGZvbGRlcnMgYmUgYnVpbHQgaW4gcGFyYWxsZWxcbiAgICAvLyBDb25jdXJyZW50IFdEQSBidWlsZHMgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugd2lsbCBjYXVzZSB4Y29kZWJ1aWxkIHN5bmNocm9uaXphdGlvbiBlcnJvcnNcbiAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICBpZiAodGhpcy5vcHRzLnVzZVhjdGVzdHJ1bkZpbGUgfHwgIShhd2FpdCB0aGlzLndkYS5pc1NvdXJjZUZyZXNoKCkpKSB7XG4gICAgICAvLyBGaXJzdC10aW1lIGNvbXBpbGF0aW9uIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24sIHdoaWNoIGlzIGRvbmUgZmFzdGVyIGlmIGV4ZWN1dGVkXG4gICAgICAvLyBzZXF1ZW50aWFsbHkuIFhjb2RlYnVpbGQgc3ByZWFkcyB0aGUgbG9hZCBjYXVzZWQgYnkgdGhlIGNsYW5nIGNvbXBpbGVyIHRvIGFsbCBhdmFpbGFibGUgQ1BVIGNvcmVzXG4gICAgICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZShkZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFN0YXJ0aW5nIFdlYkRyaXZlckFnZW50IGluaXRpYWxpemF0aW9uIHdpdGggdGhlIHN5bmNocm9uaXphdGlvbiBrZXkgJyR7c3luY2hyb25pemF0aW9uS2V5fSdgKTtcbiAgICBpZiAoU0hBUkVEX1JFU09VUkNFU19HVUFSRC5pc0J1c3koKSAmJiAhdGhpcy5vcHRzLmRlcml2ZWREYXRhUGF0aCAmJiAhdGhpcy5vcHRzLmJvb3RzdHJhcFBhdGgpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29uc2lkZXIgc2V0dGluZyBhIHVuaXF1ZSAnZGVyaXZlZERhdGFQYXRoJyBjYXBhYmlsaXR5IHZhbHVlIGZvciBlYWNoIHBhcmFsbGVsIGRyaXZlciBpbnN0YW5jZSBgICtcbiAgICAgICAgYHRvIGF2b2lkIGNvbmZsaWN0cyBhbmQgc3BlZWQgdXAgdGhlIGJ1aWxkaW5nIHByb2Nlc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ2FwYWJpbGl0eSAndXNlTmV3V0RBJyBzZXQgdG8gdHJ1ZSwgc28gdW5pbnN0YWxsaW5nIFdEQSBiZWZvcmUgcHJvY2VlZGluZ2ApO1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0QW5kVW5pbnN0YWxsKCk7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVVuaW5zdGFsbGVkJyk7XG4gICAgICB9IGVsc2UgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5zZXR1cENhY2hpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gbG9jYWwgaGVscGVyIGZvciB0aGUgdHdvIHBsYWNlcyB3ZSBuZWVkIHRvIHVuaW5zdGFsbCB3ZGEgYW5kIHJlLXN0YXJ0IGl0XG4gICAgICBjb25zdCBxdWl0QW5kVW5pbnN0YWxsID0gYXN5bmMgKG1zZykgPT4ge1xuICAgICAgICBsb2cuZGVidWcobXNnKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZygnTm90IHF1aXR0aW5nL3VuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCBzaW5jZSB3ZWJEcml2ZXJBZ2VudFVybCBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nLndhcm4oJ1F1aXR0aW5nIGFuZCB1bmluc3RhbGxpbmcgV2ViRHJpdmVyQWdlbnQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdEFuZFVuaW5zdGFsbCgpO1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfTtcblxuICAgICAgLy8gVXNlZCBpbiB0aGUgZm9sbG93aW5nIFdEQSBidWlsZFxuICAgICAgaWYgKHRoaXMub3B0cy5yZXN1bHRCdW5kbGVQYXRoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyaWVzID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzIHx8ICh0aGlzLmlzUmVhbERldmljZSgpID8gV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyA6IFdEQV9TSU1fU1RBUlRVUF9SRVRSSUVTKTtcbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyeUludGVydmFsID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsIHx8IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMO1xuICAgICAgbG9nLmRlYnVnKGBUcnlpbmcgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgJHtzdGFydHVwUmV0cmllc30gdGltZXMgd2l0aCAke3N0YXJ0dXBSZXRyeUludGVydmFsfW1zIGludGVydmFsYCk7XG4gICAgICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzKSAmJiAhdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlc2UgdmFsdWVzIGNhbiBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHdkYVN0YXJ0dXBSZXRyaWVzL3dkYVN0YXJ0dXBSZXRyeUludGVydmFsIGNhcGFiaWxpdGllc2ApO1xuICAgICAgfVxuICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbChzdGFydHVwUmV0cmllcywgc3RhcnR1cFJldHJ5SW50ZXJ2YWwsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRBdHRlbXB0ZWQnKTtcbiAgICAgICAgaWYgKHJldHJ5Q291bnQgPiAwKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFJldHJ5aW5nIFdEQSBzdGFydHVwICgke3JldHJ5Q291bnQgKyAxfSBvZiAke3N0YXJ0dXBSZXRyaWVzfSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIG9uIHhjb2RlIDEwIGluc3RhbGxkIHdpbGwgb2Z0ZW4gdHJ5IHRvIGFjY2VzcyB0aGUgYXBwIGZyb20gaXRzIHN0YWdpbmdcbiAgICAgICAgICAvLyBkaXJlY3RvcnkgYmVmb3JlIGZ1bGx5IG1vdmluZyBpdCB0aGVyZSwgYW5kIGZhaWwuIFJldHJ5aW5nIG9uY2VcbiAgICAgICAgICAvLyBpbW1lZGlhdGVseSBoZWxwc1xuICAgICAgICAgIGNvbnN0IHJldHJpZXMgPSB0aGlzLnhjb2RlVmVyc2lvbi5tYWpvciA+PSAxMCA/IDIgOiAxO1xuICAgICAgICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gYXdhaXQgcmV0cnkocmV0cmllcywgdGhpcy53ZGEubGF1bmNoLmJpbmQodGhpcy53ZGEpLCBzZXNzaW9uSWQsIHJlYWxEZXZpY2UpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydEZhaWxlZCcpO1xuICAgICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBgVW5hYmxlIHRvIGxhdW5jaCBXZWJEcml2ZXJBZ2VudCBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgLiBNYWtlIHN1cmUgeW91IGZvbGxvdyB0aGUgdHV0b3JpYWwgYXQgJHtXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMfS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgVHJ5IHRvIHJlbW92ZSB0aGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIGluc3RhbGxlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBhbmQgcmVib290IHRoZSBkZXZpY2UuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcXVpdEFuZFVuaW5zdGFsbChlcnJvck1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy53ZGEucHJveHlSZXFSZXMuYmluZCh0aGlzLndkYSk7XG4gICAgICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgIGxldCBvcmlnaW5hbFN0YWNrdHJhY2UgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoMTUsIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVNlc3Npb25BdHRlbXB0ZWQnKTtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZygnU2VuZGluZyBjcmVhdGVTZXNzaW9uIGNvbW1hbmQgdG8gV0RBJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzIHx8IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0V2RhU2Vzc2lvbih0aGlzLm9wdHMuYnVuZGxlSWQsIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBvcmlnaW5hbFN0YWNrdHJhY2UgPSBlcnIuc3RhY2s7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgRmFpbGVkIHRvIGNyZWF0ZSBXREEgc2Vzc2lvbiAoJHtlcnIubWVzc2FnZX0pLiBSZXRyeWluZy4uLmApO1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvblN0YXJ0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKG9yaWdpbmFsU3RhY2t0cmFjZSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKG9yaWdpbmFsU3RhY2t0cmFjZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBlcnJvck1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgc2Vzc2lvbiBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgIE1ha2Ugc3VyZSB5b3UgZm9sbG93IHRoZSB0dXRvcmlhbCBhdCAke1dEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkx9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUcnkgdG8gcmVtb3ZlIHRoZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCByZWJvb3QgdGhlIGRldmljZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBxdWl0QW5kVW5pbnN0YWxsKGVycm9yTXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcyAmJiAhdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgICAgYXdhaXQgbWFya1N5c3RlbUZpbGVzRm9yQ2xlYW51cCh0aGlzLndkYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBleHBlY3QgY2VydGFpbiBzb2NrZXQgZXJyb3JzIHVudGlsIHRoaXMgcG9pbnQsIGJ1dCBub3dcbiAgICAgICAgLy8gbWFyayB0aGluZ3MgYXMgZnVsbHkgd29ya2luZ1xuICAgICAgICB0aGlzLndkYS5mdWxseVN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydGVkJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJ1blJlc2V0IChvcHRzID0gbnVsbCkge1xuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0U3RhcnRlZCcpO1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBydW5SZWFsRGV2aWNlUmVzZXQodGhpcy5vcHRzLmRldmljZSwgb3B0cyB8fCB0aGlzLm9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBydW5TaW11bGF0b3JSZXNldCh0aGlzLm9wdHMuZGV2aWNlLCBvcHRzIHx8IHRoaXMub3B0cyk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0Q29tcGxldGUnKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIGF3YWl0IHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgZm9yIChjb25zdCByZWNvcmRlciBvZiBfLmNvbXBhY3QoW1xuICAgICAgdGhpcy5fcmVjZW50U2NyZWVuUmVjb3JkZXIsIHRoaXMuX2F1ZGlvUmVjb3JkZXIsIHRoaXMuX3RyYWZmaWNDYXB0dXJlXG4gICAgXSkpIHtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmludGVycnVwdCh0cnVlKTtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmNsZWFudXAoKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9wZXJmUmVjb3JkZXJzKSkge1xuICAgICAgYXdhaXQgQi5hbGwodGhpcy5fcGVyZlJlY29yZGVycy5tYXAoKHgpID0+IHguc3RvcCh0cnVlKSkpO1xuICAgICAgdGhpcy5fcGVyZlJlY29yZGVycyA9IFtdO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuXG4gICAgaWYgKHRoaXMud2RhICYmICF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcykge1xuICAgICAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICAgICAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICAgIHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKGRlcml2ZWREYXRhUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGNsZWFyU3lzdGVtRmlsZXModGhpcy53ZGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnTm90IGNsZWFyaW5nIGxvZyBmaWxlcy4gVXNlIGBjbGVhclN5c3RlbUZpbGVzYCBjYXBhYmlsaXR5IHRvIHR1cm4gb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3RlKSB7XG4gICAgICBsb2cuZGVidWcoJ0ZvdW5kIGEgcmVtb3RlIGRlYnVnZ2VyIHNlc3Npb24uIFJlbW92aW5nLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3BSZW1vdGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5ID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtcbiAgICAgICAgZW5mb3JjZVNpbXVsYXRvclNodXRkb3duOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkgJiYgIXRoaXMub3B0cy5ub1Jlc2V0ICYmICEhdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgaWYgKHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0pIHtcbiAgICAgICAgbG9nLmRlYnVnKGBEZWxldGluZyBzaW11bGF0b3IgY3JlYXRlZCBmb3IgdGhpcyBydW4gKHVkaWQ6ICcke3RoaXMub3B0cy51ZGlkfScpYCk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmRlbGV0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSA9IHRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgISF0aGlzLm9wdHMucmVzZXRMb2NhdGlvblNlcnZpY2U7XG4gICAgaWYgKHNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSgpO1xuICAgICAgfSBjYXRjaCAoaWdub3JlKSB7IC8qIElnbm9yZSB0aGlzIGVycm9yIHNpbmNlIG1vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlIGFscmVhZHkgbG9nZ2VkIHRoZSBlcnJvciAqLyB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5sb2dzKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2dzLnN5c2xvZy5zdG9wQ2FwdHVyZSgpO1xuICAgICAgdGhpcy5sb2dzID0ge307XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIGxvZy5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldElvcygpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuXG5cbiAgICBpZiAodGhpcy53ZGEgJiYgdGhpcy53ZGEuZnVsbHlTdGFydGVkKSB7XG4gICAgICBpZiAodGhpcy53ZGEuandwcm94eSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gYW4gZXJyb3IgaGVyZSBzaG91bGQgbm90IHNob3J0LWNpcmN1aXQgdGhlIHJlc3Qgb2YgY2xlYW4gdXBcbiAgICAgICAgICBsb2cuZGVidWcoYFVuYWJsZSB0byBERUxFVEUgc2Vzc2lvbiBvbiBXREE6ICcke2Vyci5tZXNzYWdlfScuIENvbnRpbnVpbmcgc2h1dGRvd24uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwgJiYgdGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVsZWFzZUNvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIGNvbW1hbmQgJyR7Y21kfSdgKTtcblxuICAgIGlmIChjbWQgPT09ICdyZWNlaXZlQXN5bmNSZXNwb25zZScpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY2VpdmVBc3luY1Jlc3BvbnNlKC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBvbmNlIHRoaXMgZml4IGdldHMgaW50byBiYXNlIGRyaXZlciByZW1vdmUgZnJvbSBoZXJlXG4gICAgaWYgKGNtZCA9PT0gJ2dldFN0YXR1cycpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpZ3VyZUFwcCAoKSB7XG4gICAgZnVuY3Rpb24gYXBwSXNQYWNrYWdlT3JCdW5kbGUgKGFwcCkge1xuICAgICAgcmV0dXJuICgvXihbYS16QS1aMC05XFwtX10rXFwuW2EtekEtWjAtOVxcLV9dKykrJC8pLnRlc3QoYXBwKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgYXBwIG5hbWUgaXMgYSBidW5kbGVJZCBhc3NpZ24gaXQgdG8gdGhlIGJ1bmRsZUlkIHByb3BlcnR5XG4gICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IHRoaXMub3B0cy5hcHA7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gJyc7XG4gICAgfVxuICAgIC8vIHdlIGhhdmUgYSBidW5kbGUgSUQsIGJ1dCBubyBhcHAsIG9yIGFwcCBpcyBhbHNvIGEgYnVuZGxlXG4gICAgaWYgKCh0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmJ1bmRsZUlkKSkgJiZcbiAgICAgICAgKHRoaXMub3B0cy5hcHAgPT09ICcnIHx8IGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgbG9nLmRlYnVnKCdBcHAgaXMgYW4gaU9TIGJ1bmRsZSwgd2lsbCBhdHRlbXB0IHRvIHJ1biBhcyBwcmUtZXhpc3RpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3Igc3VwcG9ydGVkIGJ1aWxkLWluIGFwcHNcbiAgICBzd2l0Y2ggKF8udG9Mb3dlcih0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSAnY29tLmFwcGxlLlByZWZlcmVuY2VzJztcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2NhbGVuZGFyJzpcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gJ2NvbS5hcHBsZS5tb2JpbGVjYWwnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBkb3dubG9hZCBpZiBuZWNlc3NhcnlcbiAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsICcuYXBwJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoZXJyKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGFwcDogJHt0aGlzLm9wdHMuYXBwfS4gYCArXG4gICAgICAgIGBBcHAgcGF0aHMgbmVlZCB0byBiZSBhYnNvbHV0ZSBvciBhbiBVUkwgdG8gYSBjb21wcmVzc2VkIGFwcCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRldGVybWluZURldmljZSAoKSB7XG4gICAgLy8gaW4gdGhlIG9uZSBjYXNlIHdoZXJlIHdlIGNyZWF0ZSBhIHNpbSwgd2Ugd2lsbCBzZXQgdGhpcyBzdGF0ZVxuICAgIHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0gPSBmYWxzZTtcblxuICAgIC8vIGlmIHdlIGdldCBnZW5lcmljIG5hbWVzLCB0cmFuc2xhdGUgdGhlbVxuICAgIHRoaXMub3B0cy5kZXZpY2VOYW1lID0gdHJhbnNsYXRlRGV2aWNlTmFtZSh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCB0aGlzLm9wdHMuZGV2aWNlTmFtZSk7XG5cbiAgICBjb25zdCBzZXR1cFZlcnNpb25DYXBzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24oKTtcbiAgICAgIGxvZy5pbmZvKGBpT1MgU0RLIFZlcnNpb24gc2V0IHRvICcke3RoaXMub3B0cy5pb3NTZGtWZXJzaW9ufSdgKTtcbiAgICAgIGlmICghdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAmJiB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbikge1xuICAgICAgICBsb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIFhjb2RlIHN1cHBvcnRzOiAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nLiBgICtcbiAgICAgICAgICBgVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgaWYgYSBzaW11bGF0b3IgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgcGxhdGZvcm0gdmVyc2lvbi5gKTtcbiAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbih0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdHMudWRpZCkge1xuICAgICAgaWYgKHRoaXMub3B0cy51ZGlkLnRvTG93ZXJDYXNlKCkgPT09ICdhdXRvJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gYXdhaXQgZGV0ZWN0VWRpZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBUcnlpbmcgdG8gZmluZCBtYXRjaGluZyBVRElEIGZvciBTaW11bGF0b3JcbiAgICAgICAgICBsb2cud2FybihgQ2Fubm90IGRldGVjdCBhbnkgY29ubmVjdGVkIHJlYWwgZGV2aWNlcy4gRmFsbGluZyBiYWNrIHRvIFNpbXVsYXRvci4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0RXhpc3RpbmdTaW0odGhpcy5vcHRzKTtcbiAgICAgICAgICBpZiAoIWRldmljZSkge1xuICAgICAgICAgICAgLy8gTm8gbWF0Y2hpbmcgU2ltdWxhdG9yIGlzIGZvdW5kLiBUaHJvdyBhbiBlcnJvclxuICAgICAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBkZXRlY3QgdWRpZCBmb3IgJHt0aGlzLm9wdHMuZGV2aWNlTmFtZX0gU2ltdWxhdG9yIHJ1bm5pbmcgaU9TICR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXRjaGluZyBTaW11bGF0b3IgZXhpc3RzIGFuZCBpcyBmb3VuZC4gVXNlIGl0XG4gICAgICAgICAgdGhpcy5vcHRzLnVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBjb25zdCBkZXZpY2VQbGF0Zm9ybSA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbihhd2FpdCBkZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCkpO1xuICAgICAgICAgIGlmICh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICE9PSBkZXZpY2VQbGF0Zm9ybSkge1xuICAgICAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGRldmljZVBsYXRmb3JtO1xuICAgICAgICAgICAgbG9nLmluZm8oYFNldCBwbGF0Zm9ybVZlcnNpb24gdG8gJyR7ZGV2aWNlUGxhdGZvcm19JyB0byBtYXRjaCB0aGUgZGV2aWNlIHdpdGggZ2l2ZW4gVURJRGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyBhIGNvbm5lY3RlZCBkZXZpY2UuIElmIG5vdCwgdGhlIHVkaWQgcGFzc2VkIGluIGlzIGludmFsaWRcbiAgICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IGdldENvbm5lY3RlZERldmljZXMoKTtcbiAgICAgICAgbG9nLmRlYnVnKGBBdmFpbGFibGUgZGV2aWNlczogJHtkZXZpY2VzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIGlmICghZGV2aWNlcy5pbmNsdWRlcyh0aGlzLm9wdHMudWRpZCkpIHtcbiAgICAgICAgICAvLyBjaGVjayBmb3IgYSBwYXJ0aWN1bGFyIHNpbXVsYXRvclxuICAgICAgICAgIGxvZy5kZWJ1ZyhgTm8gcmVhbCBkZXZpY2Ugd2l0aCB1ZGlkICcke3RoaXMub3B0cy51ZGlkfScuIExvb2tpbmcgZm9yIHNpbXVsYXRvcmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRTaW11bGF0b3IodGhpcy5vcHRzLnVkaWQsIHtcbiAgICAgICAgICAgICAgZGV2aWNlc1NldFBhdGg6IHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGV2aWNlIG9yIHNpbXVsYXRvciBVRElEOiAnJHt0aGlzLm9wdHMudWRpZH0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldFJlYWxEZXZpY2VPYmoodGhpcy5vcHRzLnVkaWQpO1xuICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IHRydWUsIHVkaWQ6IHRoaXMub3B0cy51ZGlkfTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2Uga25vdyBmb3Igc3VyZSB0aGUgZGV2aWNlIHdpbGwgYmUgYSBTaW11bGF0b3JcbiAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgaWYgKHRoaXMub3B0cy5lbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbikge1xuICAgICAgbG9nLmRlYnVnKGBOZXcgc2ltdWxhdG9yIGlzIHJlcXVlc3RlZC4gSWYgdGhpcyBpcyBub3Qgd2FudGVkLCBzZXQgJ2VuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uJyBjYXBhYmlsaXR5IHRvIGZhbHNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3Qgc2ltdWxhdG9yIHRvIHVzZSwgZ2l2ZW4gdGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuXG4gICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3Rpbmcgc2ltdWxhdG9yXG4gICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICAgICAgfVxuXG4gICAgICBsb2cuaW5mbygnU2ltdWxhdG9yIHVkaWQgbm90IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gbm8gZGV2aWNlIG9mIHRoaXMgdHlwZSBleGlzdHMsIG9yIHRoZXkgcmVxdWVzdCBuZXcgc2ltLCBzbyBjcmVhdGUgb25lXG4gICAgbG9nLmluZm8oJ1VzaW5nIGRlc2lyZWQgY2FwcyB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yJyk7XG4gICAgY29uc3QgZGV2aWNlID0gYXdhaXQgdGhpcy5jcmVhdGVTaW0oKTtcbiAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2ltICgpIHtcbiAgICBjb25zdCBydW5PcHRzID0ge1xuICAgICAgc2NhbGVGYWN0b3I6IHRoaXMub3B0cy5zY2FsZUZhY3RvcixcbiAgICAgIGNvbm5lY3RIYXJkd2FyZUtleWJvYXJkOiAhIXRoaXMub3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCxcbiAgICAgIHBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jOiB0aGlzLm9wdHMuc2ltdWxhdG9yUGFzdGVib2FyZEF1dG9tYXRpY1N5bmMgPz8gJ29mZicsXG4gICAgICBpc0hlYWRsZXNzOiAhIXRoaXMub3B0cy5pc0hlYWRsZXNzLFxuICAgICAgdHJhY2VQb2ludGVyOiB0aGlzLm9wdHMuc2ltdWxhdG9yVHJhY2VQb2ludGVyLFxuICAgICAgZGV2aWNlUHJlZmVyZW5jZXM6IHt9LFxuICAgIH07XG5cbiAgICAvLyBhZGQgdGhlIHdpbmRvdyBjZW50ZXIsIGlmIGl0IGlzIHNwZWNpZmllZFxuICAgIGlmICh0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyKSB7XG4gICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd0NlbnRlciA9IHRoaXMub3B0cy5TaW11bGF0b3JXaW5kb3dDZW50ZXI7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNJbnRlZ2VyKHRoaXMub3B0cy5zaW11bGF0b3JTdGFydHVwVGltZW91dCkpIHtcbiAgICAgIHJ1bk9wdHMuc3RhcnR1cFRpbWVvdXQgPSB0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQ7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0byB3b3JrYXJvdW5kIFhDVGVzdCBidWcgYWJvdXQgY2hhbmdpbmcgU2ltdWxhdG9yXG4gICAgLy8gb3JpZW50YXRpb24gaXMgbm90IHN5bmNocm9uaXplZCB0byB0aGUgYWN0dWFsIHdpbmRvdyBvcmllbnRhdGlvblxuICAgIGNvbnN0IG9yaWVudGF0aW9uID0gXy5pc1N0cmluZyh0aGlzLm9wdHMub3JpZW50YXRpb24pICYmIHRoaXMub3B0cy5vcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIHN3aXRjaCAob3JpZW50YXRpb24pIHtcbiAgICAgIGNhc2UgJ0xBTkRTQ0FQRSc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnTGFuZHNjYXBlTGVmdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDkwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1BPUlRSQUlUJzpcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiA9ICdQb3J0cmFpdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UucnVuKHJ1bk9wdHMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2ltICgpIHtcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltID0gdHJ1ZTtcblxuICAgIC8vIEdldCBwbGF0Zm9ybSBuYW1lIGZyb20gY29uc3Qgc2luY2UgaXQgbXVzdCBiZSBjYXNlIHNlbnNpdGl2ZSB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yXG4gICAgY29uc3QgcGxhdGZvcm1OYW1lID0gdGhpcy5pc1R2T1MoKSA/IFBMQVRGT1JNX05BTUVfVFZPUyA6IFBMQVRGT1JNX05BTUVfSU9TO1xuXG4gICAgLy8gY3JlYXRlIHNpbSBmb3IgY2Fwc1xuICAgIGNvbnN0IHNpbSA9IGF3YWl0IGNyZWF0ZVNpbSh0aGlzLm9wdHMsIHBsYXRmb3JtTmFtZSk7XG4gICAgbG9nLmluZm8oYENyZWF0ZWQgc2ltdWxhdG9yIHdpdGggdWRpZCAnJHtzaW0udWRpZH0nLmApO1xuXG4gICAgcmV0dXJuIHNpbTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaEFwcCAoKSB7XG4gICAgY29uc3QgQVBQX0xBVU5DSF9USU1FT1VUID0gMjAgKiAxMDAwO1xuXG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoQXR0ZW1wdGVkJyk7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGwubGF1bmNoQXBwKHRoaXMub3B0cy5idW5kbGVJZCk7XG5cbiAgICBsZXQgY2hlY2tTdGF0dXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGxldCBjdXJyZW50QXBwID0gcmVzcG9uc2UuY3VycmVudEFwcC5idW5kbGVJRDtcbiAgICAgIGlmIChjdXJyZW50QXBwICE9PSB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMub3B0cy5idW5kbGVJZH0gbm90IGluIGZvcmVncm91bmQuICR7Y3VycmVudEFwcH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsb2cuaW5mbyhgV2FpdGluZyBmb3IgJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScgdG8gYmUgaW4gZm9yZWdyb3VuZGApO1xuICAgIGxldCByZXRyaWVzID0gcGFyc2VJbnQoQVBQX0xBVU5DSF9USU1FT1VUIC8gMjAwLCAxMCk7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbChyZXRyaWVzLCAyMDAsIGNoZWNrU3RhdHVzKTtcbiAgICBsb2cuaW5mbyhgJHt0aGlzLm9wdHMuYnVuZGxlSWR9IGlzIGluIGZvcmVncm91bmRgKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBMYXVuY2hlZCcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXZGFTZXNzaW9uIChidW5kbGVJZCwgcHJvY2Vzc0FyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3MgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuYXJncyB8fCBbXSkgOiBbXTtcbiAgICBpZiAoIV8uaXNBcnJheShhcmdzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmFyZ3MgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuICAgIGNvbnN0IGVudiA9IHByb2Nlc3NBcmd1bWVudHMgPyAocHJvY2Vzc0FyZ3VtZW50cy5lbnYgfHwge30pIDoge307XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmVudiBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGJlIGEgZGljdGlvbmFyeS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGVudil9IGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubGFuZ3VhZ2UpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxhbmd1YWdlcycsIGAoJHt0aGlzLm9wdHMubGFuZ3VhZ2V9KWApO1xuICAgICAgYXJncy5wdXNoKCctTlNMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICB9XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxvY2FsZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLUFwcGxlTG9jYWxlJywgdGhpcy5vcHRzLmxvY2FsZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICBpZiAoXy5pc05pbCh0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwKSkge1xuICAgICAgICB0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc05pbCh0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2gpKSB7XG4gICAgICAgIHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdkYUNhcHMgPSB7XG4gICAgICBidW5kbGVJZDogdGhpcy5vcHRzLmF1dG9MYXVuY2ggPT09IGZhbHNlID8gdW5kZWZpbmVkIDogYnVuZGxlSWQsXG4gICAgICBhcmd1bWVudHM6IGFyZ3MsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZXZlbnRsb29wSWRsZURlbGF5U2VjOiB0aGlzLm9wdHMud2RhRXZlbnRsb29wSWRsZURlbGF5ID8/IDAsXG4gICAgICBzaG91bGRXYWl0Rm9yUXVpZXNjZW5jZTogdGhpcy5vcHRzLndhaXRGb3JRdWllc2NlbmNlID8/IHRydWUsXG4gICAgICBzaG91bGRVc2VUZXN0TWFuYWdlckZvclZpc2liaWxpdHlEZXRlY3Rpb246IHRoaXMub3B0cy5zaW1wbGVJc1Zpc2libGVDaGVjayA/PyBmYWxzZSxcbiAgICAgIG1heFR5cGluZ0ZyZXF1ZW5jeTogdGhpcy5vcHRzLm1heFR5cGluZ0ZyZXF1ZW5jeSA/PyA2MCxcbiAgICAgIHNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyOiB0aGlzLm9wdHMuc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIgPz8gdHJ1ZSxcbiAgICAgIHdhaXRGb3JJZGxlVGltZW91dDogdGhpcy5vcHRzLndhaXRGb3JJZGxlVGltZW91dCxcbiAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzLFxuICAgICAgZWxlbWVudFJlc3BvbnNlRmllbGRzOiB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlRmllbGRzLFxuICAgICAgZGlzYWJsZUF1dG9tYXRpY1NjcmVlbnNob3RzOiB0aGlzLm9wdHMuZGlzYWJsZUF1dG9tYXRpY1NjcmVlbnNob3RzLFxuICAgICAgc2hvdWxkVGVybWluYXRlQXBwOiB0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwID8/IHRydWUsXG4gICAgICBmb3JjZUFwcExhdW5jaDogdGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoID8/IHRydWUsXG4gICAgICB1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3k6IHRoaXMub3B0cy51c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kgPz8gdHJ1ZSxcbiAgICAgIGZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlOiB0aGlzLm9wdHMuZm9yY2VTaW11bGF0b3JTb2Z0d2FyZUtleWJvYXJkUHJlc2VuY2VcbiAgICAgICAgPz8gKHRoaXMub3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZSksXG4gICAgfTtcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9BY2NlcHRBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2FjY2VwdCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXV0b0Rpc21pc3NBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2Rpc21pc3MnO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFt3ZGFDYXBzXSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHt9LFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgUHJveHkgbWV0aG9kcyBmcm9tIEJhc2VEcml2ZXJcbiAgcHJveHlBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIGlmICh0aGlzLmlzV2VidmlldygpKSB7XG4gICAgICByZXR1cm4gTk9fUFJPWFlfV0VCX0xJU1Q7XG4gICAgfVxuICAgIHJldHVybiBOT19QUk9YWV9OQVRJVkVfTElTVDtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzU2FmYXJpICgpIHtcbiAgICByZXR1cm4gISF0aGlzLnNhZmFyaTtcbiAgfVxuXG4gIGlzUmVhbERldmljZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNTaW11bGF0b3IgKCkge1xuICAgIHJldHVybiAhdGhpcy5vcHRzLnJlYWxEZXZpY2U7XG4gIH1cblxuICBpc1R2T1MgKCkge1xuICAgIHJldHVybiBfLnRvTG93ZXIodGhpcy5vcHRzLnBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xuICB9XG5cbiAgaXNXZWJ2aWV3ICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NhZmFyaSgpIHx8IHRoaXMuaXNXZWJDb250ZXh0KCk7XG4gIH1cblxuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSAoc3RyYXRlZ3kpIHtcbiAgICBzdXBlci52YWxpZGF0ZUxvY2F0b3JTdHJhdGVneShzdHJhdGVneSwgdGhpcy5pc1dlYkNvbnRleHQoKSk7XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgaWYgKCFzdXBlci52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIGNhcGFiaWxpdGllcyBoYXZlIG9uZSBvZiBgYXBwYCBvciBgYnVuZGxlSWRgXG4gICAgaWYgKF8udG9Mb3dlcihjYXBzLmJyb3dzZXJOYW1lKSAhPT0gJ3NhZmFyaScgJiYgIWNhcHMuYXBwICYmICFjYXBzLmJ1bmRsZUlkKSB7XG4gICAgICBsb2cuaW5mbygnVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIGluY2x1ZGUgbmVpdGhlciBhbiBhcHAgbm9yIGEgYnVuZGxlSWQuICcgK1xuICAgICAgICAnV2ViRHJpdmVyQWdlbnQgd2lsbCBiZSBzdGFydGVkIHdpdGhvdXQgdGhlIGRlZmF1bHQgYXBwJyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgbG9nLndhcm4oYCdwbGF0Zm9ybVZlcnNpb24nIGNhcGFiaWxpdHkgKCcke2NhcHMucGxhdGZvcm1WZXJzaW9ufScpIGlzIG5vdCBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBgICtcbiAgICAgICAgYENvbnNpZGVyIGZpeGluZyBpdCBvciBiZSByZWFkeSB0byBleHBlcmllbmNlIGFuIGluY29uc2lzdGVudCBkcml2ZXIgYmVoYXZpb3IuYCk7XG4gICAgfVxuXG4gICAgbGV0IHZlcmlmeVByb2Nlc3NBcmd1bWVudCA9IChwcm9jZXNzQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCB7YXJncywgZW52fSA9IHByb2Nlc3NBcmd1bWVudHM7XG4gICAgICBpZiAoIV8uaXNOaWwoYXJncykgJiYgIV8uaXNBcnJheShhcmdzKSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygncHJvY2Vzc0FyZ3VtZW50cy5hcmdzIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzTmlsKGVudikgJiYgIV8uaXNQbGFpbk9iamVjdChlbnYpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KCdwcm9jZXNzQXJndW1lbnRzLmVudiBtdXN0IGJlIGFuIG9iamVjdCA8a2V5LHZhbHVlPiBwYWlyIHthOmIsIGM6ZH0nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYHByb2Nlc3NBcmd1bWVudHNgIHNob3VsZCBiZSBKU09OIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCBhcmd1bWVudHMgYW5kLyBlbnZpcm9ubWVudCBkZXRhaWxzXG4gICAgaWYgKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykge1xuICAgICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIGFzIEpTT05cbiAgICAgICAgICBjYXBzLnByb2Nlc3NBcmd1bWVudHMgPSBKU09OLnBhcnNlKGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYSBKU09OIGZvcm1hdCBvciBhbiBvYmplY3Qgd2l0aCBmb3JtYXQge2FyZ3MgOiBbXSwgZW52IDoge2E6YiwgYzpkfX0uIGAgK1xuICAgICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLiBFcnJvcjogJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGNhcHMucHJvY2Vzc0FyZ3VtZW50cykpIHtcbiAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3Byb2Nlc3NBcmd1bWVudHMgbXVzdCBiZSBhbiBvYmplY3QsIG9yIGEgc3RyaW5nIEpTT04gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICBgQm90aCBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnQgY2FuIGJlIG51bGwuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlcmUgaXMgbm8gcG9pbnQgaW4gaGF2aW5nIGBrZXljaGFpblBhdGhgIHdpdGhvdXQgYGtleWNoYWluUGFzc3dvcmRgXG4gICAgaWYgKChjYXBzLmtleWNoYWluUGF0aCAmJiAhY2Fwcy5rZXljaGFpblBhc3N3b3JkKSB8fCAoIWNhcHMua2V5Y2hhaW5QYXRoICYmIGNhcHMua2V5Y2hhaW5QYXNzd29yZCkpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBJZiAna2V5Y2hhaW5QYXRoJyBpcyBzZXQsICdrZXljaGFpblBhc3N3b3JkJyBtdXN0IGFsc28gYmUgc2V0IChhbmQgdmljZSB2ZXJzYSkuYCk7XG4gICAgfVxuXG4gICAgLy8gYHJlc2V0T25TZXNzaW9uU3RhcnRPbmx5YCBzaG91bGQgYmUgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9ICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSkgfHwgdGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5O1xuICAgIHRoaXMub3B0cy51c2VOZXdXREEgPSB1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy51c2VOZXdXREEpID8gdGhpcy5vcHRzLnVzZU5ld1dEQSA6IGZhbHNlO1xuXG4gICAgaWYgKGNhcHMuY29tbWFuZFRpbWVvdXRzKSB7XG4gICAgICBjYXBzLmNvbW1hbmRUaW1lb3V0cyA9IG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyhjYXBzLmNvbW1hbmRUaW1lb3V0cyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdH0gPSB1cmwucGFyc2UoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KHByb3RvY29sKSB8fCBfLmlzRW1wdHkoaG9zdCkpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCd3ZWJEcml2ZXJBZ2VudFVybCcgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBjb250YWluIGEgdmFsaWQgV2ViRHJpdmVyQWdlbnQgc2VydmVyIFVSTC4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAnJHtjYXBzLndlYkRyaXZlckFnZW50VXJsfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgICBpZiAoY2Fwcy5idW5kbGVJZCkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ2Jyb3dzZXJOYW1lJyBjYW5ub3QgYmUgc2V0IHRvZ2V0aGVyIHdpdGggJ2J1bmRsZUlkJyBjYXBhYmlsaXR5YCk7XG4gICAgICB9XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpc1xuICAgICAgLy8gaXMgY29tbW9uIHdpdGggc2VsZW5pdW0gZ3JpZFxuICAgICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAgIGxvZy53YXJuKGBUaGUgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGVybWlzc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtc10gb2YgXy50b1BhaXJzKEpTT04ucGFyc2UoY2Fwcy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgaWYgKCFfLmlzU3RyaW5nKGJ1bmRsZUlkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShidW5kbGVJZCl9JyBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHBlcm1zKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShwZXJtcyl9JyBtdXN0IGJlIGEgSlNPTiBvYmplY3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCcke2NhcHMucGVybWlzc2lvbnN9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIG9iamVjdCB3aXRoIGZvcm1hdCBgICtcbiAgICAgICAgICBge1wiPGJ1bmRsZUlkMT5cIjoge1wiPHNlcnZpY2VOYW1lMT5cIjogXCI8c2VydmljZVN0YXR1czE+XCIsIC4uLn0sIC4uLn0uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5wbGF0Zm9ybVZlcnNpb24gJiYgIXV0aWwuY29lcmNlVmVyc2lvbihjYXBzLnBsYXRmb3JtVmVyc2lvbiwgZmFsc2UpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3BsYXRmb3JtVmVyc2lvbicgbXVzdCBiZSBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBgICtcbiAgICAgICAgYCcke2NhcHMucGxhdGZvcm1WZXJzaW9ufScgaXMgZ2l2ZW4gaW5zdGVhZC5gKTtcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyBpcyBhbiBhcnJheSwgSlNPTiBhcnJheSwgb3Igc3RyaW5nXG4gICAgaWYgKGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpIHtcbiAgICAgIGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkoY2Fwcy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyk7XG4gICAgfVxuXG4gICAgLy8gZmluYWxseSwgcmV0dXJuIHRydWUgc2luY2UgdGhlIHN1cGVyY2xhc3MgY2hlY2sgcGFzc2VkLCBhcyBkaWQgdGhpc1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbEFVVCAoKSB7XG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0odGhpcy5vcHRzLmFwcCwge1xuICAgICAgaXNTaW11bGF0b3I6IHRoaXMuaXNTaW11bGF0b3IoKSxcbiAgICAgIGlzVHZPUzogdGhpcy5pc1R2T1MoKSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9SZWFsRGV2aWNlKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5idW5kbGVJZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgdGltZW91dDogdGhpcy5vcHRzLmFwcFB1c2hUaW1lb3V0LFxuICAgICAgICBzdHJhdGVneTogdGhpcy5vcHRzLmFwcEluc3RhbGxTdHJhdGVneSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmJ1bmRsZUlkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbE90aGVyQXBwcyh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlKSkge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzY4ODlcbiAgICAgIGxldCBwYXVzZSA9IHBhcnNlSW50KHRoaXMub3B0cy5pb3NJbnN0YWxsUGF1c2UsIDEwKTtcbiAgICAgIGxvZy5kZWJ1ZyhgaW9zSW5zdGFsbFBhdXNlIHNldC4gUGF1c2luZyAke3BhdXNlfSBtcyBiZWZvcmUgY29udGludWluZ2ApO1xuICAgICAgYXdhaXQgQi5kZWxheShwYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbE90aGVyQXBwcyAob3RoZXJBcHBzKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGxvZy53YXJuKCdDYXBhYmlsaXR5IG90aGVyQXBwcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgU2ltdWxhdG9ycycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYXBwc0xpc3Q7XG4gICAgdHJ5IHtcbiAgICAgIGFwcHNMaXN0ID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KG90aGVyQXBwcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KGFwcHNMaXN0KSkge1xuICAgICAgbG9nLmluZm8oYEdvdCB6ZXJvIGFwcHMgZnJvbSAnb3RoZXJBcHBzJyBjYXBhYmlsaXR5IHZhbHVlLiBEb2luZyBub3RoaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBwUGF0aHMgPSBhd2FpdCBCLmFsbChhcHBzTGlzdC5tYXAoXG4gICAgICAoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKVxuICAgICkpO1xuICAgIGZvciAoY29uc3Qgb3RoZXJBcHAgb2YgYXBwUGF0aHMpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCBvdGhlckFwcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlZHVjZU1vdGlvbiBhcyAnaXNFbmFibGVkJyBvbmx5IHdoZW4gdGhlIGNhcGFiaWxpdGllcyBoYXMgJ3JlZHVjZU1vdGlvbidcbiAgICogVGhlIGNhbGwgaXMgaWdub3JlZCBmb3IgcmVhbCBkZXZpY2VzLlxuICAgKiBAcGFyYW0gez9ib29sZWFufSBpc0VuYWJsZWQgV2V0aGVyIGVuYWJsZSByZWR1Y2VNb3Rpb25cbiAgICovXG4gIGFzeW5jIHNldFJlZHVjZU1vdGlvbiAoaXNFbmFibGVkKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkgfHwgIV8uaXNCb29sZWFuKGlzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhgU2V0dGluZyByZWR1Y2VNb3Rpb24gdG8gJHtpc0VuYWJsZWR9YCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7cmVkdWNlTW90aW9uOiBpc0VuYWJsZWR9KTtcbiAgfVxuXG4gIGFzeW5jIHNldEluaXRpYWxPcmllbnRhdGlvbiAob3JpZW50YXRpb24pIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcob3JpZW50YXRpb24pKSB7XG4gICAgICBsb2cuaW5mbygnU2tpcHBpbmcgc2V0dGluZyBvZiB0aGUgaW5pdGlhbCBkaXNwbGF5IG9yaWVudGF0aW9uLiAnICtcbiAgICAgICAgJ1NldCB0aGUgXCJvcmllbnRhdGlvblwiIGNhcGFiaWxpdHkgdG8gZWl0aGVyIFwiTEFORFNDQVBFXCIgb3IgXCJQT1JUUkFJVFwiLCBpZiB0aGlzIGlzIGFuIHVuZGVzaXJlZCBiZWhhdmlvci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIGlmICghXy5pbmNsdWRlcyhbJ0xBTkRTQ0FQRScsICdQT1JUUkFJVCddLCBvcmllbnRhdGlvbikpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIHNldCBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7b3JpZW50YXRpb259J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL29yaWVudGF0aW9uJywgJ1BPU1QnLCB7b3JpZW50YXRpb259KTtcbiAgICAgIHRoaXMub3B0cy5jdXJPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiBmYWlsZWQgd2l0aDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBfZ2V0Q29tbWFuZFRpbWVvdXQgKGNtZE5hbWUpIHtcbiAgICBpZiAodGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgaWYgKGNtZE5hbWUgJiYgXy5oYXModGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cywgY21kTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbY21kTmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0c1tERUZBVUxUX1RJTUVPVVRfS0VZXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlc3Npb24gY2FwYWJpbGl0aWVzIG1lcmdlZCB3aXRoIHdoYXQgV0RBIHJlcG9ydHNcbiAgICogVGhpcyBpcyBhIGxpYnJhcnkgY29tbWFuZCBidXQgbmVlZHMgdG8gY2FsbCAnc3VwZXInIHNvIGNhbid0IGJlIG9uXG4gICAqIGEgaGVscGVyIG9iamVjdFxuICAgKi9cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgLy8gY2FsbCBzdXBlciB0byBnZXQgZXZlbnQgdGltaW5ncywgZXRjLi4uXG4gICAgY29uc3QgZHJpdmVyU2Vzc2lvbiA9IGF3YWl0IHN1cGVyLmdldFNlc3Npb24oKTtcbiAgICBpZiAoIXRoaXMud2RhQ2Fwcykge1xuICAgICAgdGhpcy53ZGFDYXBzID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy8nLCAnR0VUJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkR2V0RGV2aWNlQ2FwcyA9IF8uaXNCb29sZWFuKHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm8pXG4gICAgICA/IHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm9cbiAgICAgIDogdHJ1ZTsgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGlmIChzaG91bGRHZXREZXZpY2VDYXBzICYmICF0aGlzLmRldmljZUNhcHMpIHtcbiAgICAgIGNvbnN0IHtzdGF0dXNCYXJTaXplLCBzY2FsZX0gPSBhd2FpdCB0aGlzLmdldFNjcmVlbkluZm8oKTtcbiAgICAgIHRoaXMuZGV2aWNlQ2FwcyA9IHtcbiAgICAgICAgcGl4ZWxSYXRpbzogc2NhbGUsXG4gICAgICAgIHN0YXRCYXJIZWlnaHQ6IHN0YXR1c0JhclNpemUuaGVpZ2h0LFxuICAgICAgICB2aWV3cG9ydFJlY3Q6IGF3YWl0IHRoaXMuZ2V0Vmlld3BvcnRSZWN0KCksXG4gICAgICB9O1xuICAgIH1cbiAgICBsb2cuaW5mbygnTWVyZ2luZyBXREEgY2FwcyBvdmVyIEFwcGl1bSBjYXBzIGZvciBzZXNzaW9uIGRldGFpbCByZXNwb25zZScpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt1ZGlkOiB0aGlzLm9wdHMudWRpZH0sIGRyaXZlclNlc3Npb24sXG4gICAgICB0aGlzLndkYUNhcHMuY2FwYWJpbGl0aWVzLCB0aGlzLmRldmljZUNhcHMgfHwge30pO1xuICB9XG5cbiAgYXN5bmMgcmVzZXQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgcmVzZXQgaGFwcGVucyBldmVuIGlmIG5vUmVzZXQgaXMgc2V0IHRvIHRydWVcbiAgICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICAgIG9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgb3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHNodXRkb3duSGFuZGxlciA9IHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9ICgpID0+IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChvcHRzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9IHNodXRkb3duSGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIucmVzZXQoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFhDVUlUZXN0RHJpdmVyLnByb3RvdHlwZSwgY29tbWFuZHMpO1xuXG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
package/lib/driver.js
CHANGED
|
@@ -309,6 +309,18 @@ class XCUITestDriver extends BaseDriver {
|
|
|
309
309
|
}
|
|
310
310
|
}
|
|
311
311
|
|
|
312
|
+
/**
|
|
313
|
+
* Returns the default URL for Safari browser
|
|
314
|
+
* @returns {string} The default URL
|
|
315
|
+
*/
|
|
316
|
+
getDefaultUrl () {
|
|
317
|
+
return this.isRealDevice()
|
|
318
|
+
? 'http://appium.io'
|
|
319
|
+
: `http://${
|
|
320
|
+
this.opts.address.includes(':') ? `[${this.opts.address}]` : this.opts.address
|
|
321
|
+
}:${this.opts.port}/welcome`;
|
|
322
|
+
}
|
|
323
|
+
|
|
312
324
|
async start () {
|
|
313
325
|
this.opts.noReset = !!this.opts.noReset;
|
|
314
326
|
this.opts.fullReset = !!this.opts.fullReset;
|
|
@@ -358,11 +370,7 @@ class XCUITestDriver extends BaseDriver {
|
|
|
358
370
|
this.opts.app = undefined;
|
|
359
371
|
this.opts.processArguments = this.opts.processArguments || {};
|
|
360
372
|
this.opts.bundleId = SAFARI_BUNDLE_ID;
|
|
361
|
-
this._currentUrl = this.opts.safariInitialUrl || (
|
|
362
|
-
this.isRealDevice()
|
|
363
|
-
? 'http://appium.io'
|
|
364
|
-
: `http://${this.opts.address}:${this.opts.port}/welcome`
|
|
365
|
-
);
|
|
373
|
+
this._currentUrl = this.opts.safariInitialUrl || this.getDefaultUrl();
|
|
366
374
|
if (util.compareVersions(this.opts.platformVersion, '<', '12.2')) {
|
|
367
375
|
// this option does not work on 12.2 and above
|
|
368
376
|
this.opts.processArguments.args = ['-u', this._currentUrl];
|