appium-uiautomator2-driver 1.70.1 → 1.74.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/README.md +26 -5
- package/build/lib/commands/find.js +5 -11
- package/build/lib/commands/general.js +5 -2
- package/build/lib/commands/gestures.js +14 -6
- package/build/lib/css-converter.js +119 -112
- package/build/lib/driver.js +17 -12
- package/build/lib/uiautomator2.js +2 -1
- package/lib/commands/find.js +5 -9
- package/lib/commands/general.js +4 -0
- package/lib/commands/gestures.js +29 -4
- package/lib/css-converter.js +177 -169
- package/lib/driver.js +27 -11
- package/lib/uiautomator2.js +1 -0
- package/package.json +9 -9
package/build/lib/driver.js
CHANGED
|
@@ -52,8 +52,8 @@ const DEVICE_PORT_ALLOCATION_GUARD = _appiumSupport.util.getLockFileGuard(_path.
|
|
|
52
52
|
const DEVICE_PORT = 6790;
|
|
53
53
|
const MJPEG_SERVER_DEVICE_PORT = 7810;
|
|
54
54
|
const LOCALHOST_IP4 = '127.0.0.1';
|
|
55
|
-
const NO_PROXY = [['GET', new RegExp('^/session/(?!.*/)')], ['GET', new RegExp('^/session/[^/]+/alert_[^/]+')], ['GET', new RegExp('^/session/[^/]+/alert/[^/]+')], ['GET', new RegExp('^/session/[^/]+/appium/[^/]+/current_activity')], ['GET', new RegExp('^/session/[^/]+/appium/[^/]+/current_package')], ['GET', new RegExp('^/session/[^/]+/appium/app/[^/]+')], ['GET', new RegExp('^/session/[^/]+/appium/device/[^/]+')], ['GET', new RegExp('^/session/[^/]+/appium/settings')], ['GET', new RegExp('^/session/[^/]+/context')], ['GET', new RegExp('^/session/[^/]+/contexts')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/attribute')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/displayed')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/enabled')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/location_in_view')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/name')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/screenshot')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/selected')], ['GET', new RegExp('^/session/[^/]+/ime/[^/]+')], ['GET', new RegExp('^/session/[^/]+/location')], ['GET', new RegExp('^/session/[^/]+/
|
|
56
|
-
const CHROME_NO_PROXY = [['GET', new RegExp('^/session/[^/]+/appium')], ['GET', new RegExp('^/session/[^/]+/context')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/rect')], ['GET', new RegExp('^/session/[^/]+/
|
|
55
|
+
const NO_PROXY = [['GET', new RegExp('^/session/(?!.*/)')], ['GET', new RegExp('^/session/[^/]+/alert_[^/]+')], ['GET', new RegExp('^/session/[^/]+/alert/[^/]+')], ['GET', new RegExp('^/session/[^/]+/appium/[^/]+/current_activity')], ['GET', new RegExp('^/session/[^/]+/appium/[^/]+/current_package')], ['GET', new RegExp('^/session/[^/]+/appium/app/[^/]+')], ['GET', new RegExp('^/session/[^/]+/appium/device/[^/]+')], ['GET', new RegExp('^/session/[^/]+/appium/settings')], ['GET', new RegExp('^/session/[^/]+/context')], ['GET', new RegExp('^/session/[^/]+/contexts')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/attribute')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/displayed')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/enabled')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/location_in_view')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/name')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/screenshot')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/selected')], ['GET', new RegExp('^/session/[^/]+/ime/[^/]+')], ['GET', new RegExp('^/session/[^/]+/location')], ['GET', new RegExp('^/session/[^/]+/network_connection')], ['GET', new RegExp('^/session/[^/]+/screenshot')], ['GET', new RegExp('^/session/[^/]+/timeouts')], ['GET', new RegExp('^/session/[^/]+/url')], ['POST', new RegExp('^/session/[^/]+/[^/]+_alert$')], ['POST', new RegExp('^/session/[^/]+/actions')], ['POST', new RegExp('^/session/[^/]+/alert/[^/]+')], ['POST', new RegExp('^/session/[^/]+/app/[^/]')], ['POST', new RegExp('^/session/[^/]+/appium/[^/]+/start_activity')], ['POST', new RegExp('^/session/[^/]+/appium/app/[^/]+')], ['POST', new RegExp('^/session/[^/]+/appium/compare_images')], ['POST', new RegExp('^/session/[^/]+/appium/device/(?!set_clipboard)[^/]+')], ['POST', new RegExp('^/session/[^/]+/appium/element/[^/]+/replace_value')], ['POST', new RegExp('^/session/[^/]+/appium/element/[^/]+/value')], ['POST', new RegExp('^/session/[^/]+/appium/getPerformanceData')], ['POST', new RegExp('^/session/[^/]+/appium/performanceData/types')], ['POST', new RegExp('^/session/[^/]+/appium/settings')], ['POST', new RegExp('^/session/[^/]+/appium/execute_driver')], ['POST', new RegExp('^/session/[^/]+/appium/start_recording_screen')], ['POST', new RegExp('^/session/[^/]+/appium/stop_recording_screen')], ['POST', new RegExp('^/session/[^/]+/appium/.*event')], ['POST', new RegExp('^/session/[^/]+/context')], ['POST', new RegExp('^/session/[^/]+/element')], ['POST', new RegExp('^/session/[^/]+/ime/[^/]+')], ['POST', new RegExp('^/session/[^/]+/keys')], ['POST', new RegExp('^/session/[^/]+/location')], ['POST', new RegExp('^/session/[^/]+/network_connection')], ['POST', new RegExp('^/session/[^/]+/timeouts')], ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')], ['POST', new RegExp('^/session/[^/]+/touch/perform')], ['POST', new RegExp('^/session/[^/]+/url')], ['GET', new RegExp('^/session/[^/]+/log/types')], ['POST', new RegExp('^/session/[^/]+/execute')], ['POST', new RegExp('^/session/[^/]+/execute_async')], ['POST', new RegExp('^/session/[^/]+/log')], ['GET', new RegExp('^/session/[^/]+/se/log/types')], ['GET', new RegExp('^/session/[^/]+/window/rect')], ['POST', new RegExp('^/session/[^/]+/execute/async')], ['POST', new RegExp('^/session/[^/]+/execute/sync')], ['POST', new RegExp('^/session/[^/]+/se/log')]];
|
|
56
|
+
const CHROME_NO_PROXY = [['GET', new RegExp('^/session/[^/]+/appium')], ['GET', new RegExp('^/session/[^/]+/context')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/rect')], ['GET', new RegExp('^/session/[^/]+/orientation')], ['POST', new RegExp('^/session/[^/]+/appium')], ['POST', new RegExp('^/session/[^/]+/context')], ['POST', new RegExp('^/session/[^/]+/orientation')], ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')], ['POST', new RegExp('^/session/[^/]+/touch/perform')], ['POST', new RegExp('^/session/[^/]+/execute$')], ['POST', new RegExp('^/session/[^/]+/execute/sync')], ['GET', new RegExp('^/session/[^/]+/log/types$')], ['POST', new RegExp('^/session/[^/]+/log$')], ['GET', new RegExp('^/session/[^/]+/se/log/types$')], ['POST', new RegExp('^/session/[^/]+/se/log$')]];
|
|
57
57
|
const MEMOIZED_FUNCTIONS = ['getStatusBarHeight', 'getDevicePixelRatio'];
|
|
58
58
|
|
|
59
59
|
class AndroidUiautomator2Driver extends _appiumBaseDriver.BaseDriver {
|
|
@@ -367,6 +367,7 @@ class AndroidUiautomator2Driver extends _appiumBaseDriver.BaseDriver {
|
|
|
367
367
|
};
|
|
368
368
|
this.uiautomator2 = new _uiautomator.UiAutomator2Server(uiautomator2Opts);
|
|
369
369
|
this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);
|
|
370
|
+
this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);
|
|
370
371
|
|
|
371
372
|
if (this.opts.skipServerInstallation) {
|
|
372
373
|
_logger.default.info(`'skipServerInstallation' is set. Skipping UIAutomator2 server installation.`);
|
|
@@ -400,17 +401,21 @@ class AndroidUiautomator2Driver extends _appiumBaseDriver.BaseDriver {
|
|
|
400
401
|
}
|
|
401
402
|
|
|
402
403
|
if (this.opts.app) {
|
|
403
|
-
if (
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
404
|
+
if (this.opts.noReset && !(await this.adb.isAppInstalled(this.opts.appPackage)) || !this.opts.noReset) {
|
|
405
|
+
if (!this.opts.noSign && !(await this.adb.checkApkCert(this.opts.app, this.opts.appPackage, {
|
|
406
|
+
requireDefaultCert: false
|
|
407
|
+
}))) {
|
|
408
|
+
await helpers.signApp(this.adb, this.opts.app);
|
|
409
|
+
}
|
|
408
410
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
411
|
+
if (!this.opts.skipUninstall) {
|
|
412
|
+
await this.adb.uninstallApk(this.opts.appPackage);
|
|
413
|
+
}
|
|
412
414
|
|
|
413
|
-
|
|
415
|
+
await helpers.installApk(this.adb, this.opts);
|
|
416
|
+
} else {
|
|
417
|
+
_logger.default.debug('noReset has been requested and the app is already installed. Doing nothing');
|
|
418
|
+
}
|
|
414
419
|
} else {
|
|
415
420
|
if (this.opts.fullReset) {
|
|
416
421
|
_logger.default.errorAndThrow('Full reset requires an app capability, use fastReset if app is not provided');
|
|
@@ -641,4 +646,4 @@ var _default = AndroidUiautomator2Driver;
|
|
|
641
646
|
exports.default = _default;require('source-map-support').install();
|
|
642
647
|
|
|
643
648
|
|
|
644
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiaGVscGVycyIsIk9iamVjdCIsImFzc2lnbiIsInVpYXV0b21hdG9yMkhlbHBlcnMiLCJhbmRyb2lkSGVscGVycyIsIkRFVklDRV9QT1JUX1JBTkdFIiwiREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRCIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwicGF0aCIsInJlc29sdmUiLCJvcyIsInRtcGRpciIsInRpbWVvdXQiLCJ0cnlSZWNvdmVyeSIsIkRFVklDRV9QT1JUIiwiTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUIiwiTE9DQUxIT1NUX0lQNCIsIk5PX1BST1hZIiwiUmVnRXhwIiwiQ0hST01FX05PX1BST1hZIiwiTUVNT0laRURfRlVOQ1RJT05TIiwiQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzaGVsbCIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwidWlhdXRvbWF0b3IyIiwiandwUHJveHlBY3RpdmUiLCJkZWZhdWx0SU1FIiwiandwUHJveHlBdm9pZCIsImFwa1N0cmluZ3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiaWdub3JlVW5pbXBvcnRhbnRWaWV3cyIsImFsbG93SW52aXNpYmxlRWxlbWVudHMiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiZm4iLCJfIiwibWVtb2l6ZSIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJjYXBzIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJzZXJ2ZXJEZXRhaWxzIiwicGxhdGZvcm0iLCJ3ZWJTdG9yYWdlRW5hYmxlZCIsInRha2VzU2NyZWVuc2hvdCIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwibG9jYXRpb25Db250ZXh0RW5hYmxlZCIsIndhcm5pbmdzIiwiZGVzaXJlZCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJkZWZhdWx0T3B0cyIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRlZmF1bHRzIiwiaXNDaHJvbWVTZXNzaW9uIiwibG9nZ2VyIiwiaW5mbyIsInBrZyIsImFjdGl2aXR5IiwiZ2V0Q2hyb21lUGtnIiwiYnJvd3Nlck5hbWUiLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwiYXBwIiwiY29uZmlndXJlQXBwIiwiQVBLX0VYVEVOU0lPTiIsIkFQS1NfRVhURU5TSU9OIiwiY2hlY2tBcHBQcmVzZW50Iiwic3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uIiwiZmlsbERldmljZURldGFpbHMiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJzdGFydCIsImUiLCJkZWxldGVTZXNzaW9uIiwicGl4ZWxSYXRpbyIsImdldERldmljZVBpeGVsUmF0aW8iLCJzdGF0QmFySGVpZ2h0IiwiZ2V0U3RhdHVzQmFySGVpZ2h0Iiwidmlld3BvcnRSZWN0IiwiZ2V0Vmlld1BvcnRSZWN0IiwiZHJpdmVyRGF0YSIsImdldFNlc3Npb24iLCJzZXNzaW9uRGF0YSIsImRlYnVnIiwidWlhMkRhdGEiLCJqd3Byb3h5IiwiY29tbWFuZCIsImlzRW11bGF0b3IiLCJhZGIiLCJhdmQiLCJkZXZpY2VOYW1lIiwiZXJyb3JBbmRUaHJvdyIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsInJlcGxhY2UiLCJhbGxvY2F0ZVN5c3RlbVBvcnQiLCJmb3J3YXJkUG9ydCIsImxvY2FsUG9ydCIsInN5c3RlbVBvcnQiLCJfaGFzU3lzdGVtUG9ydEluQ2FwcyIsInN0YXJ0UG9ydCIsImVuZFBvcnQiLCJyZWxlYXNlU3lzdGVtUG9ydCIsInJlbW92ZVBvcnRGb3J3YXJkIiwiYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQiLCJtanBlZ1NlcnZlclBvcnQiLCJyZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0IiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImNyZWF0ZUFEQiIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJzZXRIaWRkZW5BcGlQb2xpY3kiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsImhhc1ZhbHVlIiwiZ3BzRW5hYmxlZCIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJ3YXJuIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJpbml0RGV2aWNlIiwiaW5pdFVpQXV0b21hdG9yMlNlcnZlciIsImRpc2FibGVXaW5kb3dBbmltYXRpb24iLCJpc0FuaW1hdGlvbk9uIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwic3RhcnRTZXNzaW9uIiwiYWRkRGV2aWNlSW5mb1RvQ2FwcyIsInNraXBVbmxvY2siLCJ1bmxvY2siLCJzdGFydENocm9tZVNlc3Npb24iLCJlbnN1cmVBcHBTdGFydHMiLCJvcmllbnRhdGlvbiIsInNldE9yaWVudGF0aW9uIiwiYXV0b1dlYnZpZXciLCJ2aWV3TmFtZSIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImF1dG9XZWJ2aWV3VGltZW91dCIsInNldENvbnRleHQiLCJhcGlWZXJzaW9uIiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJyZWFsRGlzcGxheVNpemUiLCJkaXNwbGF5RGVuc2l0eSIsIm1vYmlsZUdldERldmljZUluZm8iLCJkZXZpY2VBcGlMZXZlbCIsInBhcnNlSW50IiwiZGV2aWNlU2NyZWVuU2l6ZSIsImRldmljZVNjcmVlbkRlbnNpdHkiLCJkZXZpY2VNb2RlbCIsImRldmljZU1hbnVmYWN0dXJlciIsInVpYXV0b21hdG9yMk9wdHMiLCJob3N0IiwicmVtb3RlQWRiSG9zdCIsImRldmljZVBvcnQiLCJhcGsiLCJ0bXBEaXIiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInJlYWRUaW1lb3V0IiwidWlhdXRvbWF0b3IyU2VydmVyUmVhZFRpbWVvdXQiLCJVaUF1dG9tYXRvcjJTZXJ2ZXIiLCJwcm94eVJlcVJlcyIsInNraXBTZXJ2ZXJJbnN0YWxsYXRpb24iLCJpbnN0YWxsU2VydmVyQXBrIiwidWlhdXRvbWF0b3IyU2VydmVySW5zdGFsbFRpbWVvdXQiLCJhZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiU0VSVkVSX1BBQ0tBR0VfSUQiLCJTRVJWRVJfVEVTVF9QQUNLQUdFX0lEIiwic3RkZXJyIiwibWVzc2FnZSIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJwYXJzZUFycmF5Iiwib3RoZXJBcHBzIiwiQiIsImFsbCIsIm1hcCIsImluc3RhbGxPdGhlckFwa3MiLCJub1NpZ24iLCJjaGVja0Fwa0NlcnQiLCJyZXF1aXJlRGVmYXVsdENlcnQiLCJzaWduQXBwIiwic2tpcFVuaW5zdGFsbCIsInVuaW5zdGFsbEFwayIsImluc3RhbGxBcGsiLCJmYXN0UmVzZXQiLCJyZXNldEFwcCIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiYW5kcm9pZENvdmVyYWdlIiwic3RhcnRBcHAiLCJhY3Rpb24iLCJpbnRlbnRBY3Rpb24iLCJjYXRlZ29yeSIsImludGVudENhdGVnb3J5IiwiZmxhZ3MiLCJpbnRlbnRGbGFncyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJ3YWl0Rm9yTGF1bmNoIiwiYXBwV2FpdEZvckxhdW5jaCIsIndhaXREdXJhdGlvbiIsImFwcFdhaXREdXJhdGlvbiIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwic3RvcEFwcCIsImRvbnRTdG9wQXBwT25SZXNldCIsInJldHJ5IiwidXNlciIsInVzZXJQcm9maWxlIiwiaXNFbXB0eSIsIl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzIiwic3RvcFJlY29yZGluZ1NjcmVlbiIsImlnbiIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsImVyciIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJlbmRBbmRyb2lkQ292ZXJhZ2UiLCJhbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQiLCJicm9hZGNhc3QiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiZXJyb3IiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInN0b3AiLCJmcyIsImV4aXN0cyIsIndyYXBCb290c3RyYXBEaXNjb25uZWN0Iiwid3JhcHBlZCIsInJlc3RhcnQiLCJwcm94eUFjdGl2ZSIsImNhblByb3h5IiwiZ2V0UHJveHlBdm9pZExpc3QiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiY21kIiwidG9QYWlycyIsImFuZHJvaWRDb21tYW5kcyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLE9BQU8sR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQkMsZ0JBQWxCLEVBQXVDQyxtQ0FBdkMsQ0FBaEI7QUFJQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLENBQTFCOztBQUlBLE1BQU1DLDRCQUE0QixHQUFHQyxvQkFBS0MsZ0JBQUws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LElBQUlkLE1BQUosQ0FBVyw0QkFBWCxDQUFSLENBQXhCLENBQXJCO0FBQ0Q7O0FBRUQsV0FBTyxLQUFLYyxhQUFaO0FBQ0Q7O0FBRWtCLE1BQWZxQyxlQUFlLEdBQUk7QUFDckIsV0FBT3RFLE9BQU8sQ0FBQ3lRLGVBQVIsQ0FBd0IsS0FBS2hQLElBQUwsQ0FBVW1ELFdBQWxDLENBQVA7QUFDRDs7QUFubUJnRDs7OztBQXVtQm5ELEtBQUssSUFBSSxDQUFDOEwsR0FBRCxFQUFNL04sRUFBTixDQUFULElBQXNCQyxnQkFBRStOLE9BQUYsQ0FBVUMsb0NBQVYsQ0FBdEIsRUFBa0Q7QUFDaER0UCxFQUFBQSx5QkFBeUIsQ0FBQ3VQLFNBQTFCLENBQW9DSCxHQUFwQyxJQUEyQy9OLEVBQTNDO0FBQ0Q7O0FBR0QsS0FBSyxJQUFJLENBQUMrTixHQUFELEVBQU0vTixFQUFOLENBQVQsSUFBc0JDLGdCQUFFK04sT0FBRixDQUFVRyxjQUFWLENBQXRCLEVBQTJDO0FBQ3pDeFAsRUFBQUEseUJBQXlCLENBQUN1UCxTQUExQixDQUFvQ0gsR0FBcEMsSUFBMkMvTixFQUEzQztBQUNEOztlQUdjckIseUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHtcbiAgVWlBdXRvbWF0b3IyU2VydmVyLCBTRVJWRVJfUEFDS0FHRV9JRCwgU0VSVkVSX1RFU1RfUEFDS0FHRV9JRFxufSBmcm9tICcuL3VpYXV0b21hdG9yMic7XG5pbXBvcnQgeyBmcywgdXRpbCwgbWpwZWcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgeyBERUZBVUxUX0FEQl9QT1JUIH0gZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQgdWlhdXRvbWF0b3IySGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtcbiAgYW5kcm9pZEhlbHBlcnMsIGFuZHJvaWRDb21tYW5kcywgU0VUVElOR1NfSEVMUEVSX1BLR19JRFxufSBmcm9tICdhcHBpdW0tYW5kcm9pZC1kcml2ZXInO1xuaW1wb3J0IGRlc2lyZWRDYXBDb25zdHJhaW50cyBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgeyBmaW5kQVBvcnROb3RJblVzZSwgY2hlY2tQb3J0U3RhdHVzIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT04gfSBmcm9tICcuL2V4dGVuc2lvbnMnO1xuXG5cbmNvbnN0IGhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB1aWF1dG9tYXRvcjJIZWxwZXJzLCBhbmRyb2lkSGVscGVycyk7XG5cbi8vIFRoZSByYW5nZSBvZiBwb3J0cyB3ZSBjYW4gdXNlIG9uIHRoZSBzeXN0ZW0gZm9yIGNvbW11bmljYXRpbmcgdG8gdGhlXG4vLyBVaUF1dG9tYXRvcjIgSFRUUCBzZXJ2ZXIgb24gdGhlIGRldmljZVxuY29uc3QgREVWSUNFX1BPUlRfUkFOR0UgPSBbODIwMCwgODI5OV07XG5cbi8vIFRoZSBndWFyZCBpcyBuZWVkZWQgdG8gYXZvaWQgZHluYW1pYyBzeXN0ZW0gcG9ydCBhbGxvY2F0aW9uIGNvbmZsaWN0cyBmb3Jcbi8vIHBhcmFsbGVsIGRyaXZlciBzZXNzaW9uc1xuY29uc3QgREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRCA9IHV0aWwuZ2V0TG9ja0ZpbGVHdWFyZChcbiAgcGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLCAndWlhMl9kZXZpY2VfcG9ydF9ndWFyZCcpLFxuICB7dGltZW91dDogMjUsIHRyeVJlY292ZXJ5OiB0cnVlfVxuKTtcblxuLy8gVGhpcyBpcyB0aGUgcG9ydCB0aGF0IFVpQXV0b21hdG9yMiBsaXN0ZW5zIHRvIG9uIHRoZSBkZXZpY2UuIFdlIHdpbGwgZm9yd2FyZFxuLy8gb25lIG9mIHRoZSBwb3J0cyBhYm92ZSBvbiB0aGUgc3lzdGVtIHRvIHRoaXMgcG9ydCBvbiB0aGUgZGV2aWNlLlxuY29uc3QgREVWSUNFX1BPUlQgPSA2NzkwO1xuLy8gVGhpcyBpcyB0aGUgcG9ydCB0aGF0IHRoZSBVaUF1dG9tYXRvcjIgTUpQRUcgc2VydmVyIGxpc3RlbnMgdG8gb24gdGhlIGRldmljZS5cbi8vIFdlIHdpbGwgZm9yd2FyZCBvbmUgb2YgdGhlIHBvcnRzIGFib3ZlIG9uIHRoZSBzeXN0ZW0gdG8gdGhpcyBwb3J0IG9uIHRoZVxuLy8gZGV2aWNlLlxuY29uc3QgTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUID0gNzgxMDtcblxuY29uc3QgTE9DQUxIT1NUX0lQNCA9ICcxMjcuMC4wLjEnO1xuXG4vLyBOT19QUk9YWSBjb250YWlucyB0aGUgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIFVpQXV0b21hdG9yMiBzZXJ2ZXIuXG4vLyBUT0RPOiAgQWRkIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBVaUF1dG9tYXRvcjIgc2VydmVyLlxuLy8gVE9ETzogTmVlZCB0byBzZWdyZWdhdGUgdGhlIHBhdGhzIGJldHRlciB3YXkgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucyB3aGVyZXZlciBhcHBsaWNhYmxlLlxuLy8gKE5vdCBzZWdyZWdhdGluZyByaWdodCBhd2F5IGJlY2F1c2UgbW9yZSBwYXRocyB0byBiZSBhZGRlZCBpbiB0aGUgTk9fUFJPWFkgbGlzdClcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi8oPyEuKi8pJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hbGVydF9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWxlcnQvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9bXi9dKy9jdXJyZW50X2FjdGl2aXR5JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvY3VycmVudF9wYWNrYWdlJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2F0dHJpYnV0ZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9kaXNwbGF5ZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZW5hYmxlZCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9sb2NhdGlvbl9pbl92aWV3JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL25hbWUnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvc2NyZWVuc2hvdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9zZWxlY3RlZCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2NhdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NjcmVlbnNob3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9bXi9dK19hbGVydCQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hY3Rpb25zJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWxlcnQvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHAvW14vXScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9bXi9dKy9zdGFydF9hY3Rpdml0eScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vY29tcGFyZV9pbWFnZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlLyg/IXNldF9jbGlwYm9hcmQpW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZWxlbWVudC9bXi9dKy9yZXBsYWNlX3ZhbHVlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2VsZW1lbnQvW14vXSsvdmFsdWUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZ2V0UGVyZm9ybWFuY2VEYXRhJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3BlcmZvcm1hbmNlRGF0YS90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9leGVjdXRlX2RyaXZlcicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdGFydF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0b3BfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS8uKmV2ZW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9rZXlzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9jYXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlX2FzeW5jJyldLFxuICAvLyBXM0MgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvd2luZG93L3JlY3QnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuXTtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gQ2hyb21lZHJpdmVyLlxuY29uc3QgQ0hST01FX05PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvcmVjdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL3BlcmZvcm0nKV0sXG5cbiAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgbW9iaWxlOiBjb21tYW5kcyB3b3JraW5nIGluIHdlYiBjb250ZXh0XG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcbl07XG5cbmNvbnN0IE1FTU9JWkVEX0ZVTkNUSU9OUyA9IFtcbiAgJ2dldFN0YXR1c0JhckhlaWdodCcsXG4gICdnZXREZXZpY2VQaXhlbFJhdGlvJyxcbl07XG5cbmNsYXNzIEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIC8vIGBzaGVsbGAgb3ZlcndyaXRlcyBhZGIuc2hlbGwsIHNvIHJlbW92ZVxuICAgIGRlbGV0ZSBvcHRzLnNoZWxsO1xuXG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgICctYW5kcm9pZCB1aWF1dG9tYXRvcidcbiAgICBdO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0SU1FID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcbiAgICB0aGlzLmFwa1N0cmluZ3MgPSB7fTsgLy8gbWFwIG9mIGxhbmd1YWdlIC0+IHN0cmluZ3Mgb2JqXG5cbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiBmYWxzZSwgYWxsb3dJbnZpc2libGVFbGVtZW50czogZmFsc2V9LFxuICAgICAgICB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgLy8gaGFuZGxlIHdlYnZpZXcgbWVjaGFuaWNzIGZyb20gQW5kcm9pZERyaXZlclxuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG5cbiAgICAvLyBtZW1vaXplIGZ1bmN0aW9ucyBoZXJlLCBzbyB0aGF0IHRoZXkgYXJlIGRvbmUgb24gYSBwZXItaW5zdGFuY2UgYmFzaXNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE1FTU9JWkVEX0ZVTkNUSU9OUykge1xuICAgICAgdGhpc1tmbl0gPSBfLm1lbW9pemUodGhpc1tmbl0pO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgICByZXR1cm4gc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSAmJiBhbmRyb2lkSGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPIGhhbmRsZSBvdGhlclNlc3Npb25EYXRhIGZvciBtdWx0aXBsZSBzZXNzaW9uc1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogdGhpcy5jYXBzLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuXG4gICAgICBsZXQgZGVmYXVsdE9wdHMgPSB7XG4gICAgICAgIGZ1bGxSZXNldDogZmFsc2UsXG4gICAgICAgIGF1dG9MYXVuY2g6IHRydWUsXG4gICAgICAgIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDBcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJXZSdyZSBnb2luZyB0byBydW4gYSBDaHJvbWUtYmFzZWQgc2Vzc2lvblwiKTtcbiAgICAgICAgbGV0IHtwa2csIGFjdGl2aXR5fSA9IGhlbHBlcnMuZ2V0Q2hyb21lUGtnKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gICAgICAgIHRoaXMub3B0cy5hcHBQYWNrYWdlID0gdGhpcy5jYXBzLmFwcFBhY2thZ2UgPSBwa2c7XG4gICAgICAgIHRoaXMub3B0cy5hcHBBY3Rpdml0eSA9IHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICAgICAgICBsb2dnZXIuaW5mbyhgQ2hyb21lLXR5cGUgcGFja2FnZSBhbmQgYWN0aXZpdHkgYXJlICR7cGtnfSBhbmQgJHthY3Rpdml0eX1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgdGhpcy5zZXRBdmRGcm9tQ2FwYWJpbGl0aWVzKGNhcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIFtBUEtfRVhURU5TSU9OLCBBUEtTX0VYVEVOU0lPTl0pO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQXBwUHJlc2VudCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXBwUGFja2FnZSkge1xuICAgICAgICAvLyB0aGUgYXBwIGlzbid0IGFuIGFjdHVhbCBhcHAgZmlsZSBidXQgcmF0aGVyIHNvbWV0aGluZyB3ZSB3YW50IHRvXG4gICAgICAgIC8vIGFzc3VtZSBpcyBvbiB0aGUgZGV2aWNlIGFuZCBqdXN0IGxhdW5jaCB2aWEgdGhlIGFwcFBhY2thZ2VcbiAgICAgICAgbG9nZ2VyLmluZm8oYFN0YXJ0aW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfScgZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYE5laXRoZXIgJ2FwcCcgbm9yICdhcHBQYWNrYWdlJyB3YXMgc2V0LiBTdGFydGluZyBVaUF1dG9tYXRvcjIgYCArXG4gICAgICAgICAgJ3dpdGhvdXQgdGhlIHRhcmdldCBhcHBsaWNhdGlvbicpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzLmFkYlBvcnQgPSB0aGlzLm9wdHMuYWRiUG9ydCB8fCBERUZBVUxUX0FEQl9QT1JUO1xuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0VWlBdXRvbWF0b3IyU2Vzc2lvbigpO1xuICAgICAgYXdhaXQgdGhpcy5maWxsRGV2aWNlRGV0YWlscygpO1xuICAgICAgaWYgKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFN0YXJ0aW5nIE1KUEVHIHN0cmVhbSByZWFkaW5nIFVSTDogJyR7dGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybH0nYCk7XG4gICAgICAgIHRoaXMubWpwZWdTdHJlYW0gPSBuZXcgbWpwZWcuTUpwZWdTdHJlYW0odGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCk7XG4gICAgICAgIGF3YWl0IHRoaXMubWpwZWdTdHJlYW0uc3RhcnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCB0aGlzLmNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmaWxsRGV2aWNlRGV0YWlscyAoKSB7XG4gICAgdGhpcy5jYXBzLnBpeGVsUmF0aW8gPSBhd2FpdCB0aGlzLmdldERldmljZVBpeGVsUmF0aW8oKTtcbiAgICB0aGlzLmNhcHMuc3RhdEJhckhlaWdodCA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzQmFySGVpZ2h0KCk7XG4gICAgdGhpcy5jYXBzLnZpZXdwb3J0UmVjdCA9IGF3YWl0IHRoaXMuZ2V0Vmlld1BvcnRSZWN0KCk7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyBnZXRTZXNzaW9uICgpIHtcbiAgICBsZXQgc2Vzc2lvbkRhdGEgPSBhd2FpdCBzdXBlci5nZXRTZXNzaW9uKCk7XG4gICAgbG9nZ2VyLmRlYnVnKCdHZXR0aW5nIHNlc3Npb24gZGV0YWlscyBmcm9tIHNlcnZlciB0byBtaXggaW4nKTtcbiAgICBsZXQgdWlhMkRhdGEgPSBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy8nLCAnR0VUJywge30pO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzZXNzaW9uRGF0YSwgdWlhMkRhdGEpO1xuICB9XG5cbiAgaXNFbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNFbXVsYXRvcih0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuXG4gIHNldEF2ZEZyb21DYXBhYmlsaXRpZXMgKGNhcHMpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF2ZCkge1xuICAgICAgbG9nZ2VyLmluZm8oJ2F2ZCBuYW1lIGRlZmluZWQsIGlnbm9yaW5nIGRldmljZSBuYW1lIGFuZCBwbGF0Zm9ybSB2ZXJzaW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2Fwcy5kZXZpY2VOYW1lKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KCdhdmQgb3IgZGV2aWNlTmFtZSBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWNhcHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KCdhdmQgb3IgcGxhdGZvcm1WZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBhdmREZXZpY2UgPSBjYXBzLmRldmljZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfLl0vZywgJy0nKTtcbiAgICAgIHRoaXMub3B0cy5hdmQgPSBgJHthdmREZXZpY2V9X18ke2NhcHMucGxhdGZvcm1WZXJzaW9ufWA7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWxsb2NhdGVTeXN0ZW1Qb3J0ICgpIHtcbiAgICBjb25zdCBmb3J3YXJkUG9ydCA9IGFzeW5jIChsb2NhbFBvcnQpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRm9yd2FyZGluZyBVaUF1dG9tYXRvcjIgU2VydmVyIHBvcnQgJHtERVZJQ0VfUE9SVH0gdG8gbG9jYWwgcG9ydCAke2xvY2FsUG9ydH1gKTtcbiAgICAgIGlmICgoYXdhaXQgY2hlY2tQb3J0U3RhdHVzKGxvY2FsUG9ydCwgTE9DQUxIT1NUX0lQNCkpID09PSAnb3BlbicpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYFVpQXV0b21hdG9yMiBTZXJ2ZXIgY2Fubm90IHN0YXJ0IGJlY2F1c2UgdGhlIGxvY2FsIHBvcnQgIyR7bG9jYWxQb3J0fSBpcyBidXN5LiBgICtcbiAgICAgICAgICBgTWFrZSBzdXJlIHRoZSBwb3J0IHlvdSBwcm92aWRlIHZpYSAnc3lzdGVtUG9ydCcgY2FwYWJpbGl0eSBpcyBub3Qgb2NjdXBpZWQuIGAgK1xuICAgICAgICAgIGBUaGlzIHNpdHVhdGlvbiBtaWdodCBvZnRlbiBiZSBhIHJlc3VsdCBvZiBhbiBpbmFjY3VyYXRlIHNlc3Npb25zIG1hbmFnZW1lbnQsIGUuZy4gYCArXG4gICAgICAgICAgYG9sZCBhdXRvbWF0aW9uIHNlc3Npb25zIG9uIHRoZSBzYW1lIGRldmljZSBtdXN0IGFsd2F5cyBiZSBjbG9zZWQgYmVmb3JlIHN0YXJ0aW5nIG5ldyBvbmVzLmApO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yd2FyZFBvcnQobG9jYWxQb3J0LCBERVZJQ0VfUE9SVCk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdHMuc3lzdGVtUG9ydCkge1xuICAgICAgdGhpcy5faGFzU3lzdGVtUG9ydEluQ2FwcyA9IHRydWU7XG4gICAgICByZXR1cm4gYXdhaXQgZm9yd2FyZFBvcnQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgIH1cblxuICAgIGF3YWl0IERFVklDRV9QT1JUX0FMTE9DQVRJT05fR1VBUkQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgW3N0YXJ0UG9ydCwgZW5kUG9ydF0gPSBERVZJQ0VfUE9SVF9SQU5HRTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMub3B0cy5zeXN0ZW1Qb3J0ID0gYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2Uoc3RhcnRQb3J0LCBlbmRQb3J0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coXG4gICAgICAgICAgYENhbm5vdCBmaW5kIGFueSBmcmVlIHBvcnQgaW4gcmFuZ2UgJHtzdGFydFBvcnR9Li4ke2VuZFBvcnR9fS4gYCArXG4gICAgICAgICAgYFBsZWFzZSBzZXQgdGhlIGF2YWlsYWJsZSBwb3J0IG51bWJlciBieSBwcm92aWRpbmcgdGhlIHN5c3RlbVBvcnQgY2FwYWJpbGl0eSBvciBgICtcbiAgICAgICAgICBgZG91YmxlIGNoZWNrIHRoZSBwcm9jZXNzZXMgdGhhdCBhcmUgbG9ja2luZyBwb3J0cyB3aXRoaW4gdGhpcyByYW5nZSBhbmQgdGVybWluYXRlIGAgK1xuICAgICAgICAgIGB0aGVzZSB3aGljaCBhcmUgbm90IG5lZWRlZCBhbnltb3JlYCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBmb3J3YXJkUG9ydCh0aGlzLm9wdHMuc3lzdGVtUG9ydCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWxlYXNlU3lzdGVtUG9ydCAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuc3lzdGVtUG9ydCB8fCAhdGhpcy5hZGIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGFzU3lzdGVtUG9ydEluQ2Fwcykge1xuICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEKGFzeW5jICgpID0+IGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5mb3J3YXJkUG9ydCh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0LCBNSlBFR19TRVJWRVJfREVWSUNFX1BPUlQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbGVhc2VNanBlZ1NlcnZlclBvcnQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFVpQXV0b21hdG9yMlNlc3Npb24gKCkge1xuICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgbGV0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcblxuICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgb3VyIGphdmEgdmVyc2lvbiBhbmQgZGV2aWNlIGluZm8sIHdlIGNhbiBjcmVhdGUgb3VyXG4gICAgLy8gQURCIGluc3RhbmNlXG4gICAgdGhpcy5hZGIgPSBhd2FpdCBhbmRyb2lkSGVscGVycy5jcmVhdGVBREIodGhpcy5vcHRzKTtcblxuICAgIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcblxuICAgIGlmIChhcGlMZXZlbCA8IDIxKSB7XG4gICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnVUlBdXRvbWF0b3IyIGlzIG9ubHkgc3VwcG9ydGVkIHNpbmNlIEFuZHJvaWQgNS4wIChMb2xsaXBvcCkuICcgK1xuICAgICAgICAnWW91IGNvdWxkIHN0aWxsIHVzZSBvdGhlciBzdXBwb3J0ZWQgYmFja2VuZHMgaW4gb3JkZXIgdG8gYXV0b21hdGUgb2xkZXIgQW5kcm9pZCB2ZXJzaW9ucy4nKTtcbiAgICB9XG5cbiAgICBpZiAoYXBpTGV2ZWwgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICBsb2dnZXIuaW5mbygnUmVsYXhpbmcgaGlkZGVuIGFwaSBwb2xpY3knKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEhpZGRlbkFwaVBvbGljeSgnMScsICEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIHRvIGVuYWJsZS9kaXNhYmxlIGdwcyBiZWZvcmUgcnVubmluZyB0aGUgYXBwbGljYXRpb25cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuZ3BzRW5hYmxlZCkpIHtcbiAgICAgIGlmICh0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvICR7dGhpcy5vcHRzLmdwc0VuYWJsZWQgPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ30gZ3BzIGxvY2F0aW9uIHByb3ZpZGVyYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIodGhpcy5vcHRzLmdwc0VuYWJsZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFNvcnJ5ISAnZ3BzRW5hYmxlZCcgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFwcFBhY2thZ2UgZXQgYWwgZnJvbSBtYW5pZmVzdCBpZiBuZWNlc3NhcnlcbiAgICBjb25zdCBhcHBJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIC8vIGFuZCBnZXQgaXQgb250byBvdXIgJ29wdHMnIG9iamVjdCBzbyB3ZSB1c2UgaXQgZnJvbSBub3cgb25cbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgYXBwSW5mbyB8fCB7fSk7XG5cbiAgICAvLyBzZXQgYWN0dWFsIGRldmljZSBuYW1lLCB1ZGlkLCBwbGF0Zm9ybSB2ZXJzaW9uLCBzY3JlZW4gc2l6ZSwgc2NyZWVuIGRlbnNpdHksIG1vZGVsIGFuZCBtYW51ZmFjdHVyZXIgZGV0YWlsc1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VOYW1lID0gdGhpcy5hZGIuY3VyRGV2aWNlSWQ7XG4gICAgdGhpcy5jYXBzLmRldmljZVVESUQgPSB0aGlzLm9wdHMudWRpZDtcblxuICAgIC8vIHN0YXJ0IGFuIGF2ZCwgc2V0IHRoZSBsYW5ndWFnZS9sb2NhbGUsIHBpY2sgYW4gZW11bGF0b3IsIGV0Yy4uLlxuICAgIC8vIFRPRE8gd2l0aCBtdWx0aXBsZSBkZXZpY2VzIHdlJ2xsIG5lZWQgdG8gcGFyYW1ldGVyaXplIHRoaXNcbiAgICB0aGlzLmRlZmF1bHRJTUUgPSBhd2FpdCBoZWxwZXJzLmluaXREZXZpY2UodGhpcy5hZGIsIHRoaXMub3B0cyk7XG5cbiAgICAvLyBQcmVwYXJlIHRoZSBkZXZpY2UgYnkgZm9yd2FyZGluZyB0aGUgVWlBdXRvbWF0b3IyIHBvcnRcbiAgICAvLyBUaGlzIGNhbGwgbXV0YXRlcyB0aGlzLm9wdHMuc3lzdGVtUG9ydCBpZiBpdCBpcyBub3Qgc2V0IGV4cGxpY2l0bHlcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlU3lzdGVtUG9ydCgpO1xuXG4gICAgLy8gUHJlcGFyZSB0aGUgZGV2aWNlIGJ5IGZvcndhcmRpbmcgdGhlIFVpQXV0b21hdG9yMiBNSlBFRyBzZXJ2ZXIgcG9ydCAoaWZcbiAgICAvLyBhcHBsaWNhYmxlKVxuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQoKTtcblxuICAgIC8vIHNldCB1cCB0aGUgbW9kaWZpZWQgVWlBdXRvbWF0b3IyIHNlcnZlciBldGNcbiAgICBhd2FpdCB0aGlzLmluaXRVaUF1dG9tYXRvcjJTZXJ2ZXIoKTtcblxuICAgIC8vIFNob3VsZCBiZSBhZnRlciBpbnN0YWxsaW5nIGlvLmFwcGl1bS5zZXR0aW5ncyBpbiBoZWxwZXJzLmluaXREZXZpY2VcbiAgICBpZiAodGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24gJiYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyNikpIHsgLy8gQVBJIGxldmVsIDI2IGlzIEFuZHJvaWQgOC4wLlxuICAgICAgLy8gR3JhbnRpbmcgYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9BTklNQVRJT05fU0NBTEUgaXMgbmVjZXNzYXJ5IHRvIGhhbmRsZSBhbmltYXRpb25zIHVuZGVyIEFQSSBsZXZlbCAyNlxuICAgICAgLy8gUmVhZCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9wdWxsLzExNjQwI2lzc3VlY29tbWVudC00MzgyNjA0NzdcbiAgICAgIC8vIGAtLW5vLXdpbmRvdy1hbmltYXRpb25gIHdvcmtzIG92ZXIgQW5kcm9pZCA4IHRvIGRpc2FibGUgYWxsIG9mIGFuaW1hdGlvbnNcbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FuaW1hdGlvbk9uKCkpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0Rpc2FibGluZyBhbmltYXRpb24gdmlhIGlvLmFwcGl1bS5zZXR0aW5ncycpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdXaW5kb3cgYW5pbWF0aW9uIGlzIGFscmVhZHkgZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICAvLyBwcmVwYXJlIG91ciBhY3R1YWwgQVVULCBnZXQgaXQgb24gdGhlIGRldmljZSwgZXRjLi4uXG4gICAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG5cbiAgICAvLyBBZGRpbmcgQVVUIHBhY2thZ2UgbmFtZSBpbiB0aGUgY2FwYWJpbGl0aWVzIGlmIHBhY2thZ2UgbmFtZSBub3QgZXhpc3QgaW4gY2Fwc1xuICAgIGlmICghdGhpcy5jYXBzLmFwcFBhY2thZ2UgJiYgYXBwSW5mbykge1xuICAgICAgdGhpcy5jYXBzLmFwcFBhY2thZ2UgPSBhcHBJbmZvLmFwcFBhY2thZ2U7XG4gICAgfVxuXG4gICAgLy8gbGF1bmNoIFVpQXV0b21hdG9yMiBhbmQgd2FpdCB0aWxsIGl0cyBvbmxpbmUgYW5kIHdlIGhhdmUgYSBzZXNzaW9uXG4gICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuc3RhcnRTZXNzaW9uKHRoaXMuY2Fwcyk7XG5cbiAgICBhd2FpdCB0aGlzLmFkZERldmljZUluZm9Ub0NhcHMoKTtcblxuICAgIC8vIFVubG9jayB0aGUgZGV2aWNlIGFmdGVyIHRoZSBzZXNzaW9uIGlzIHN0YXJ0ZWQuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgLy8gdW5sb2NrIHRoZSBkZXZpY2UgdG8gcHJlcGFyZSBpdCBmb3IgdGVzdGluZ1xuICAgICAgYXdhaXQgaGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgJ3NraXBVbmxvY2snIGNhcGFiaWxpdHkgc2V0LCBzbyBza2lwcGluZyBkZXZpY2UgdW5sb2NrYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7IC8vIHN0YXJ0IGEgY2hyb21lZHJpdmVyIHNlc3Npb25cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRDaHJvbWVTZXNzaW9uKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmF1dG9MYXVuY2ggJiYgdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlQXBwU3RhcnRzKCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIGluaXRpYWwgb3JpZW50YXRpb24gaXMgcmVxdWVzdGVkLCBzZXQgaXRcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMub3JpZW50YXRpb24pKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHt0aGlzLm9wdHMub3JpZW50YXRpb259J2ApO1xuICAgICAgYXdhaXQgdGhpcy5zZXRPcmllbnRhdGlvbih0aGlzLm9wdHMub3JpZW50YXRpb24pO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIHdhbnQgdG8gaW1tZWRpYXRlbHkgZ2V0IGludG8gYSB3ZWJ2aWV3LCBzZXQgb3VyIGNvbnRleHRcbiAgICAvLyBhcHByb3ByaWF0ZWx5XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgY29uc3Qgdmlld05hbWUgPSB0aGlzLmRlZmF1bHRXZWJ2aWV3TmFtZSgpO1xuICAgICAgY29uc3QgdGltZW91dCA9IHRoaXMub3B0cy5hdXRvV2Vidmlld1RpbWVvdXQgfHwgMjAwMDtcbiAgICAgIGxvZ2dlci5pbmZvKGBTZXR0aW5nIGF1dG8gd2VidmlldyB0byBjb250ZXh0ICcke3ZpZXdOYW1lfScgd2l0aCB0aW1lb3V0ICR7dGltZW91dH1tc2ApO1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IC8gNTAwLCA1MDAsIHRoaXMuc2V0Q29udGV4dC5iaW5kKHRoaXMpLCB2aWV3TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gbm93IHRoYXQgZXZlcnl0aGluZyBoYXMgc3RhcnRlZCBzdWNjZXNzZnVsbHksIHR1cm4gb24gcHJveHlpbmcgc28gYWxsXG4gICAgLy8gc3Vic2VxdWVudCBzZXNzaW9uIHJlcXVlc3RzIGdvIHN0cmFpZ2h0IHRvL2Zyb20gdWlhdXRvbWF0b3IyXG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG4gIH1cblxuICBhc3luYyBhZGREZXZpY2VJbmZvVG9DYXBzICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgcGxhdGZvcm1WZXJzaW9uLFxuICAgICAgbWFudWZhY3R1cmVyLFxuICAgICAgbW9kZWwsXG4gICAgICByZWFsRGlzcGxheVNpemUsXG4gICAgICBkaXNwbGF5RGVuc2l0eSxcbiAgICB9ID0gYXdhaXQgdGhpcy5tb2JpbGVHZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZUFwaUxldmVsID0gcGFyc2VJbnQoYXBpVmVyc2lvbiwgMTApO1xuICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlblNpemUgPSByZWFsRGlzcGxheVNpemU7XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlbkRlbnNpdHkgPSBkaXNwbGF5RGVuc2l0eTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTW9kZWwgPSBtb2RlbDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTWFudWZhY3R1cmVyID0gbWFudWZhY3R1cmVyO1xuICB9XG5cbiAgYXN5bmMgaW5pdFVpQXV0b21hdG9yMlNlcnZlciAoKSB7XG4gICAgLy8gYnJva2VuIG91dCBmb3IgcmVhZGFiaWxpdHlcbiAgICBjb25zdCB1aWF1dG9tYXRvcjJPcHRzID0ge1xuICAgICAgaG9zdDogdGhpcy5vcHRzLnJlbW90ZUFkYkhvc3QgfHwgdGhpcy5vcHRzLmhvc3QgfHwgTE9DQUxIT1NUX0lQNCxcbiAgICAgIHN5c3RlbVBvcnQ6IHRoaXMub3B0cy5zeXN0ZW1Qb3J0LFxuICAgICAgZGV2aWNlUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICBhZGI6IHRoaXMuYWRiLFxuICAgICAgYXBrOiB0aGlzLm9wdHMuYXBwLFxuICAgICAgdG1wRGlyOiB0aGlzLm9wdHMudG1wRGlyLFxuICAgICAgYXBwUGFja2FnZTogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICBhcHBBY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbjogISF0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICAgIGRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlOiB0aGlzLm9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UsXG4gICAgICByZWFkVGltZW91dDogdGhpcy5vcHRzLnVpYXV0b21hdG9yMlNlcnZlclJlYWRUaW1lb3V0LFxuICAgIH07XG4gICAgLy8gbm93IHRoYXQgd2UgaGF2ZSBwYWNrYWdlIGFuZCBhY3Rpdml0eSwgd2UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZlxuICAgIC8vIHVpYXV0b21hdG9yMiB3aXRoIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zXG4gICAgdGhpcy51aWF1dG9tYXRvcjIgPSBuZXcgVWlBdXRvbWF0b3IyU2VydmVyKHVpYXV0b21hdG9yMk9wdHMpO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcblxuICAgIGlmICh0aGlzLm9wdHMuc2tpcFNlcnZlckluc3RhbGxhdGlvbikge1xuICAgICAgbG9nZ2VyLmluZm8oYCdza2lwU2VydmVySW5zdGFsbGF0aW9uJyBpcyBzZXQuIFNraXBwaW5nIFVJQXV0b21hdG9yMiBzZXJ2ZXIgaW5zdGFsbGF0aW9uLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5pbnN0YWxsU2VydmVyQXBrKHRoaXMub3B0cy51aWF1dG9tYXRvcjJTZXJ2ZXJJbnN0YWxsVGltZW91dCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5hZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QoXG4gICAgICAgICAgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQsXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW5ub3QgYWRkIHNlcnZlciBwYWNrYWdlcyB0byB0aGUgRG96ZSB3aGl0ZWxpc3QuIE9yaWdpbmFsIGVycm9yOiBgICtcbiAgICAgICAgICAoZS5zdGRlcnIgfHwgZS5tZXNzYWdlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdEFVVCAoKSB7XG4gICAgLy8gVW5pbnN0YWxsIGFueSB1bmluc3RhbGxPdGhlclBhY2thZ2VzIHdoaWNoIHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBTRVJWRVJfUEFDS0FHRV9JRCwgU0VSVkVSX1RFU1RfUEFDS0FHRV9JRF1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5zdGFsbCBhbnkgXCJvdGhlckFwcHNcIiB0aGF0IHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLm90aGVyQXBwcykge1xuICAgICAgbGV0IG90aGVyQXBwcztcbiAgICAgIHRyeSB7XG4gICAgICAgIG90aGVyQXBwcyA9IGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgb3RoZXJBcHBzID0gYXdhaXQgQi5hbGwob3RoZXJBcHBzXG4gICAgICAgIC5tYXAoKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsIFtBUEtfRVhURU5TSU9OLCBBUEtTX0VYVEVOU0lPTl0pKSk7XG4gICAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxPdGhlckFwa3Mob3RoZXJBcHBzLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKCF0aGlzLm9wdHMubm9TaWduXG4gICAgICAgICYmICFhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmFwcFBhY2thZ2UsIHtcbiAgICAgICAgICByZXF1aXJlRGVmYXVsdENlcnQ6IGZhbHNlLFxuICAgICAgICB9KSkge1xuICAgICAgICBhd2FpdCBoZWxwZXJzLnNpZ25BcHAodGhpcy5hZGIsIHRoaXMub3B0cy5hcHApO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0ICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5zdXJlQXBwU3RhcnRzICgpIHtcbiAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBhY3Rpdml0eSBhbmQgcGFja2FnZSB0byB3YWl0IGZvclxuICAgIGNvbnN0IGFwcFdhaXRQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlIHx8IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICAgIGNvbnN0IGFwcFdhaXRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHkgfHwgdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuXG4gICAgbG9nZ2VyLmluZm8oYFN0YXJ0aW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfS8ke3RoaXMub3B0cy5hcHBBY3Rpdml0eX0gYCArXG4gICAgICBgYW5kIHdhaXRpbmcgZm9yICcke2FwcFdhaXRQYWNrYWdlfS8ke2FwcFdhaXRBY3Rpdml0eX0nYCk7XG5cbiAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgbG9nZ2VyLmluZm8oYGFuZHJvaWRDb3ZlcmFnZSBpcyBjb25maWd1cmVkLiBgICtcbiAgICAgICAgYCBTdGFydGluZyBpbnN0cnVtZW50YXRpb24gb2YgJyR7dGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZX0nLi4uYCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5hbmRyb2lkQ292ZXJhZ2UodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKHtcbiAgICAgICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgICAgYWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5LFxuICAgICAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzLFxuICAgICAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICAgICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICAgICAgc3RvcEFwcDogIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQsXG4gICAgICAgIHJldHJ5OiB0cnVlLFxuICAgICAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIGxvZ2dlci5kZWJ1ZygnRGVsZXRpbmcgVWlBdXRvbWF0b3IyIHNlc3Npb24nKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuXG4gICAgaWYgKHRoaXMudWlhdXRvbWF0b3IyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzdG9wIENocm9tZURyaXZlciBwcm94aWVzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuandwUHJveHlBY3RpdmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5kZWxldGVTZXNzaW9uKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcHJveHkgZGVsZXRlU2Vzc2lvbiB0byBVaUF1dG9tYXRvcjI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCAmJiB0aGlzLm9wdHMucmVzZXRLZXlib2FyZCAmJiB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICcke3RoaXMuZGVmYXVsdElNRX0nYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcmVzZXQgSU1FOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgICBsb2dnZXIuaW5mbygnU2h1dHRpbmcgZG93biB0aGUgYWRiIHByb2Nlc3Mgb2YgaW5zdHJ1bWVudGF0aW9uLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmVuZEFuZHJvaWRDb3ZlcmFnZSgpO1xuICAgICAgICAvLyBVc2UgdGhpcyBicm9hZGNhc3QgaW50ZW50IHRvIG5vdGlmeSBpdCdzIHRpbWUgdG8gZHVtcCBjb3ZlcmFnZSB0byBmaWxlXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFNlbmRpbmcgaW50ZW50IGJyb2FkY2FzdCAnJHt0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50fScgYXQgdGhlIGVuZCBvZiBpbnN0cnVtZW50aW5nLmApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmJyb2FkY2FzdCh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIud2FybignTm8gYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50IGlzIGNvbmZpZ3VyZWQgaW4gY2Fwcy4gUG9zc2libHkgeW91IGNhbm5vdCBnZXQgY292ZXJhZ2UgZmlsZS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Nocm9tZVNlc3Npb24gJiYgIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gZm9yY2Ugc3RvcCBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FwYWJpbGl0eSAnZnVsbFJlc2V0JyBzZXQgdG8gJ3RydWUnLCBVbmluc3RhbGxpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9J2ApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byB1bmluc3RhbGwgYXBwOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVGhpcyB2YWx1ZSBjYW4gYmUgdHJ1ZSBpZiB0ZXN0IHRhcmdldCBkZXZpY2UgaXMgPD0gMjZcbiAgICAgIGlmICh0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCkge1xuICAgICAgICBsb2dnZXIuaW5mbygnUmVzdG9yaW5nIHdpbmRvdyBhbmltYXRpb24gc3RhdGUnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbGVhc2VTeXN0ZW1Qb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHJlbW92ZSBzeXN0ZW0gcG9ydCBmb3J3YXJkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIC8vIElnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHJlbW92ZSBNSlBFRyBzZXJ2ZXIgcG9ydCBmb3J3YXJkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIC8vIElnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gY2xvc2UgZW11bGF0b3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrQXBwUHJlc2VudCAoKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIGFwcCBpcyBhY3R1YWxseSBwcmVzZW50Jyk7XG4gICAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIGFwcCBhcGsgYXQgJyR7dGhpcy5vcHRzLmFwcH0nYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoKSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBkbyBub3RoaW5nIGhlcmUsIHNpbmNlIGNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzIHByb3hpZXNcbiAgICAvLyBzZXR0aW5ncyB0byB0aGUgdWlhdXRvMiBzZXJ2ZXIgYWxyZWFkeVxuICB9XG5cbiAgLy8gTmVlZCB0byBvdmVycmlkZSBhbmRyb2lkLWRyaXZlcidzIHZlcnNpb24gb2YgdGhpcyBzaW5jZSB3ZSBkb24ndCBhY3R1YWxseVxuICAvLyBoYXZlIGEgYm9vdHN0cmFwOyBpbnN0ZWFkIHdlIGp1c3QgcmVzdGFydCBhZGIgYW5kIHJlLWZvcndhcmQgdGhlIFVpQXV0b21hdG9yMlxuICAvLyBwb3J0XG4gIGFzeW5jIHdyYXBCb290c3RyYXBEaXNjb25uZWN0ICh3cmFwcGVkKSB7XG4gICAgYXdhaXQgd3JhcHBlZCgpO1xuICAgIGF3YWl0IHRoaXMuYWRiLnJlc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlU3lzdGVtUG9ydCgpO1xuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQoKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgYWx3YXlzIGhhdmUgYW4gYWN0aXZlIHByb3h5IHRvIHRoZSBVaUF1dG9tYXRvcjIgc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGNhbiBhbHdheXMgcHJveHkgdG8gdGhlIHVpYXV0b21hdG9yMiBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuICAgIC8vIHdlIGFyZSBtYWludGFpbmluZyB0d28gc2V0cyBvZiBOT19QUk9YWSBsaXN0cywgb25lIGZvciBjaHJvbWVkcml2ZXIoQ0hST01FX05PX1BST1hZKVxuICAgIC8vIGFuZCBvbmUgZm9yIHVpYXV0b21hdG9yMihOT19QUk9YWSksIGJhc2VkIG9uIGN1cnJlbnQgY29udGV4dCB3aWxsIHJldHVybiByZWxhdGVkIE5PX1BST1hZIGxpc3RcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmNocm9tZWRyaXZlcikpIHtcbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgd2VidmlldyhjaHJvbWVkcml2ZXIpLCB0aGVuIHJldHVybiBDSFJPTUVfTk9fUFJPWFkgbGlzdFxuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gQ0hST01FX05PX1BST1hZO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbLi4udGhpcy5qd3BQcm94eUF2b2lkLCBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cbn1cblxuLy8gZmlyc3QgYWRkIHRoZSBhbmRyb2lkLWRyaXZlciBjb21tYW5kcyB3aGljaCB3ZSB3aWxsIGZhbGwgYmFjayB0b1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhhbmRyb2lkQ29tbWFuZHMpKSB7XG4gIEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuLy8gdGhlbiBvdmVyd3JpdGUgd2l0aCBhbnkgdWlhdXRvbWF0b3IyLXNwZWNpZmljIGNvbW1hbmRzXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbmV4cG9ydCB7IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXI7XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
649
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiaGVscGVycyIsIk9iamVjdCIsImFzc2lnbiIsInVpYXV0b21hdG9yMkhlbHBlcnMiLCJhbmRyb2lkSGVscGVycyIsIkRFVklDRV9QT1JUX1JBTkdFIiwiREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRCIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwicGF0aCIsInJlc29sdmUiLCJvcyIsInRtcGRpciIsInRpbWVvdXQiLCJ0cnlSZWNvdmVyeSIsIkRFVklDRV9QT1JUIiwiTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUIiwiTE9DQUxIT1NUX0lQNCIsIk5PX1BST1hZIiwiUmVnRXhwIiwiQ0hST01FX05PX1BST1hZIiwiTUVNT0laRURfRlVOQ1RJT05TIiwiQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzaGVsbCIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwidWlhdXRvbWF0b3IyIiwiandwUHJveHlBY3RpdmUiLCJkZWZhdWx0SU1FIiwiandwUHJveHlBdm9pZCIsImFwa1N0cmluZ3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiaWdub3JlVW5pbXBvcnRhbnRWaWV3cyIsImFsbG93SW52aXNpYmxlRWxlbWVudHMiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiZm4iLCJfIiwibWVtb2l6ZSIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJjYXBzIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJzZXJ2ZXJEZXRhaWxzIiwicGxhdGZvcm0iLCJ3ZWJTdG9yYWdlRW5hYmxlZCIsInRha2VzU2NyZWVuc2hvdCIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwibG9jYXRpb25Db250ZXh0RW5hYmxlZCIsIndhcm5pbmdzIiwiZGVzaXJlZCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJkZWZhdWx0T3B0cyIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRlZmF1bHRzIiwiaXNDaHJvbWVTZXNzaW9uIiwibG9nZ2VyIiwiaW5mbyIsInBrZyIsImFjdGl2aXR5IiwiZ2V0Q2hyb21lUGtnIiwiYnJvd3Nlck5hbWUiLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwiYXBwIiwiY29uZmlndXJlQXBwIiwiQVBLX0VYVEVOU0lPTiIsIkFQS1NfRVhURU5TSU9OIiwiY2hlY2tBcHBQcmVzZW50Iiwic3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uIiwiZmlsbERldmljZURldGFpbHMiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJzdGFydCIsImUiLCJkZWxldGVTZXNzaW9uIiwicGl4ZWxSYXRpbyIsImdldERldmljZVBpeGVsUmF0aW8iLCJzdGF0QmFySGVpZ2h0IiwiZ2V0U3RhdHVzQmFySGVpZ2h0Iiwidmlld3BvcnRSZWN0IiwiZ2V0Vmlld1BvcnRSZWN0IiwiZHJpdmVyRGF0YSIsImdldFNlc3Npb24iLCJzZXNzaW9uRGF0YSIsImRlYnVnIiwidWlhMkRhdGEiLCJqd3Byb3h5IiwiY29tbWFuZCIsImlzRW11bGF0b3IiLCJhZGIiLCJhdmQiLCJkZXZpY2VOYW1lIiwiZXJyb3JBbmRUaHJvdyIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsInJlcGxhY2UiLCJhbGxvY2F0ZVN5c3RlbVBvcnQiLCJmb3J3YXJkUG9ydCIsImxvY2FsUG9ydCIsInN5c3RlbVBvcnQiLCJfaGFzU3lzdGVtUG9ydEluQ2FwcyIsInN0YXJ0UG9ydCIsImVuZFBvcnQiLCJyZWxlYXNlU3lzdGVtUG9ydCIsInJlbW92ZVBvcnRGb3J3YXJkIiwiYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQiLCJtanBlZ1NlcnZlclBvcnQiLCJyZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0IiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImNyZWF0ZUFEQiIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJzZXRIaWRkZW5BcGlQb2xpY3kiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsImhhc1ZhbHVlIiwiZ3BzRW5hYmxlZCIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJ3YXJuIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJpbml0RGV2aWNlIiwiaW5pdFVpQXV0b21hdG9yMlNlcnZlciIsImRpc2FibGVXaW5kb3dBbmltYXRpb24iLCJpc0FuaW1hdGlvbk9uIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwic3RhcnRTZXNzaW9uIiwiYWRkRGV2aWNlSW5mb1RvQ2FwcyIsInNraXBVbmxvY2siLCJ1bmxvY2siLCJzdGFydENocm9tZVNlc3Npb24iLCJlbnN1cmVBcHBTdGFydHMiLCJvcmllbnRhdGlvbiIsInNldE9yaWVudGF0aW9uIiwiYXV0b1dlYnZpZXciLCJ2aWV3TmFtZSIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImF1dG9XZWJ2aWV3VGltZW91dCIsInNldENvbnRleHQiLCJhcGlWZXJzaW9uIiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJyZWFsRGlzcGxheVNpemUiLCJkaXNwbGF5RGVuc2l0eSIsIm1vYmlsZUdldERldmljZUluZm8iLCJkZXZpY2VBcGlMZXZlbCIsInBhcnNlSW50IiwiZGV2aWNlU2NyZWVuU2l6ZSIsImRldmljZVNjcmVlbkRlbnNpdHkiLCJkZXZpY2VNb2RlbCIsImRldmljZU1hbnVmYWN0dXJlciIsInVpYXV0b21hdG9yMk9wdHMiLCJob3N0IiwicmVtb3RlQWRiSG9zdCIsImRldmljZVBvcnQiLCJhcGsiLCJ0bXBEaXIiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInJlYWRUaW1lb3V0IiwidWlhdXRvbWF0b3IyU2VydmVyUmVhZFRpbWVvdXQiLCJVaUF1dG9tYXRvcjJTZXJ2ZXIiLCJwcm94eVJlcVJlcyIsInByb3h5Q29tbWFuZCIsInNraXBTZXJ2ZXJJbnN0YWxsYXRpb24iLCJpbnN0YWxsU2VydmVyQXBrIiwidWlhdXRvbWF0b3IyU2VydmVySW5zdGFsbFRpbWVvdXQiLCJhZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiU0VSVkVSX1BBQ0tBR0VfSUQiLCJTRVJWRVJfVEVTVF9QQUNLQUdFX0lEIiwic3RkZXJyIiwibWVzc2FnZSIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJwYXJzZUFycmF5Iiwib3RoZXJBcHBzIiwiQiIsImFsbCIsIm1hcCIsImluc3RhbGxPdGhlckFwa3MiLCJub1Jlc2V0IiwiaXNBcHBJbnN0YWxsZWQiLCJub1NpZ24iLCJjaGVja0Fwa0NlcnQiLCJyZXF1aXJlRGVmYXVsdENlcnQiLCJzaWduQXBwIiwic2tpcFVuaW5zdGFsbCIsInVuaW5zdGFsbEFwayIsImluc3RhbGxBcGsiLCJmYXN0UmVzZXQiLCJyZXNldEFwcCIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiYW5kcm9pZENvdmVyYWdlIiwic3RhcnRBcHAiLCJhY3Rpb24iLCJpbnRlbnRBY3Rpb24iLCJjYXRlZ29yeSIsImludGVudENhdGVnb3J5IiwiZmxhZ3MiLCJpbnRlbnRGbGFncyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJ3YWl0Rm9yTGF1bmNoIiwiYXBwV2FpdEZvckxhdW5jaCIsIndhaXREdXJhdGlvbiIsImFwcFdhaXREdXJhdGlvbiIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwic3RvcEFwcCIsImRvbnRTdG9wQXBwT25SZXNldCIsInJldHJ5IiwidXNlciIsInVzZXJQcm9maWxlIiwiaXNFbXB0eSIsIl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzIiwic3RvcFJlY29yZGluZ1NjcmVlbiIsImlnbiIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsImVyciIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJlbmRBbmRyb2lkQ292ZXJhZ2UiLCJhbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQiLCJicm9hZGNhc3QiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiZXJyb3IiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInN0b3AiLCJmcyIsImV4aXN0cyIsIndyYXBCb290c3RyYXBEaXNjb25uZWN0Iiwid3JhcHBlZCIsInJlc3RhcnQiLCJwcm94eUFjdGl2ZSIsImNhblByb3h5IiwiZ2V0UHJveHlBdm9pZExpc3QiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiY21kIiwidG9QYWlycyIsImFuZHJvaWRDb21tYW5kcyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLE9BQU8sR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQkMsZ0JBQWxCLEVBQXVDQyxtQ0FBdkMsQ0FBaEI7QUFJQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLENB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Q0Q7O0FBR0QsS0FBSyxJQUFJLENBQUNrTyxHQUFELEVBQU1sTyxFQUFOLENBQVQsSUFBc0JDLGdCQUFFa08sT0FBRixDQUFVRyxjQUFWLENBQXRCLEVBQTJDO0FBQ3pDM1AsRUFBQUEseUJBQXlCLENBQUMwUCxTQUExQixDQUFvQ0gsR0FBcEMsSUFBMkNsTyxFQUEzQztBQUNEOztlQUdjckIseUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHtcbiAgVWlBdXRvbWF0b3IyU2VydmVyLCBTRVJWRVJfUEFDS0FHRV9JRCwgU0VSVkVSX1RFU1RfUEFDS0FHRV9JRFxufSBmcm9tICcuL3VpYXV0b21hdG9yMic7XG5pbXBvcnQgeyBmcywgdXRpbCwgbWpwZWcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgeyBERUZBVUxUX0FEQl9QT1JUIH0gZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQgdWlhdXRvbWF0b3IySGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtcbiAgYW5kcm9pZEhlbHBlcnMsIGFuZHJvaWRDb21tYW5kcywgU0VUVElOR1NfSEVMUEVSX1BLR19JRFxufSBmcm9tICdhcHBpdW0tYW5kcm9pZC1kcml2ZXInO1xuaW1wb3J0IGRlc2lyZWRDYXBDb25zdHJhaW50cyBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgeyBmaW5kQVBvcnROb3RJblVzZSwgY2hlY2tQb3J0U3RhdHVzIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT04gfSBmcm9tICcuL2V4dGVuc2lvbnMnO1xuXG5cbmNvbnN0IGhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB1aWF1dG9tYXRvcjJIZWxwZXJzLCBhbmRyb2lkSGVscGVycyk7XG5cbi8vIFRoZSByYW5nZSBvZiBwb3J0cyB3ZSBjYW4gdXNlIG9uIHRoZSBzeXN0ZW0gZm9yIGNvbW11bmljYXRpbmcgdG8gdGhlXG4vLyBVaUF1dG9tYXRvcjIgSFRUUCBzZXJ2ZXIgb24gdGhlIGRldmljZVxuY29uc3QgREVWSUNFX1BPUlRfUkFOR0UgPSBbODIwMCwgODI5OV07XG5cbi8vIFRoZSBndWFyZCBpcyBuZWVkZWQgdG8gYXZvaWQgZHluYW1pYyBzeXN0ZW0gcG9ydCBhbGxvY2F0aW9uIGNvbmZsaWN0cyBmb3Jcbi8vIHBhcmFsbGVsIGRyaXZlciBzZXNzaW9uc1xuY29uc3QgREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRCA9IHV0aWwuZ2V0TG9ja0ZpbGVHdWFyZChcbiAgcGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLCAndWlhMl9kZXZpY2VfcG9ydF9ndWFyZCcpLFxuICB7dGltZW91dDogMjUsIHRyeVJlY292ZXJ5OiB0cnVlfVxuKTtcblxuLy8gVGhpcyBpcyB0aGUgcG9ydCB0aGF0IFVpQXV0b21hdG9yMiBsaXN0ZW5zIHRvIG9uIHRoZSBkZXZpY2UuIFdlIHdpbGwgZm9yd2FyZFxuLy8gb25lIG9mIHRoZSBwb3J0cyBhYm92ZSBvbiB0aGUgc3lzdGVtIHRvIHRoaXMgcG9ydCBvbiB0aGUgZGV2aWNlLlxuY29uc3QgREVWSUNFX1BPUlQgPSA2NzkwO1xuLy8gVGhpcyBpcyB0aGUgcG9ydCB0aGF0IHRoZSBVaUF1dG9tYXRvcjIgTUpQRUcgc2VydmVyIGxpc3RlbnMgdG8gb24gdGhlIGRldmljZS5cbi8vIFdlIHdpbGwgZm9yd2FyZCBvbmUgb2YgdGhlIHBvcnRzIGFib3ZlIG9uIHRoZSBzeXN0ZW0gdG8gdGhpcyBwb3J0IG9uIHRoZVxuLy8gZGV2aWNlLlxuY29uc3QgTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUID0gNzgxMDtcblxuY29uc3QgTE9DQUxIT1NUX0lQNCA9ICcxMjcuMC4wLjEnO1xuXG4vLyBOT19QUk9YWSBjb250YWlucyB0aGUgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIFVpQXV0b21hdG9yMiBzZXJ2ZXIuXG4vLyBUT0RPOiAgQWRkIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBVaUF1dG9tYXRvcjIgc2VydmVyLlxuLy8gVE9ETzogTmVlZCB0byBzZWdyZWdhdGUgdGhlIHBhdGhzIGJldHRlciB3YXkgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucyB3aGVyZXZlciBhcHBsaWNhYmxlLlxuLy8gKE5vdCBzZWdyZWdhdGluZyByaWdodCBhd2F5IGJlY2F1c2UgbW9yZSBwYXRocyB0byBiZSBhZGRlZCBpbiB0aGUgTk9fUFJPWFkgbGlzdClcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi8oPyEuKi8pJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hbGVydF9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWxlcnQvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9bXi9dKy9jdXJyZW50X2FjdGl2aXR5JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvY3VycmVudF9wYWNrYWdlJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2F0dHJpYnV0ZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9kaXNwbGF5ZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZW5hYmxlZCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9sb2NhdGlvbl9pbl92aWV3JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL25hbWUnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvc2NyZWVuc2hvdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9zZWxlY3RlZCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2NhdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvW14vXStfYWxlcnQkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWN0aW9ucycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FsZXJ0L1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwL1teL10nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvc3RhcnRfYWN0aXZpdHknKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2NvbXBhcmVfaW1hZ2VzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS8oPyFzZXRfY2xpcGJvYXJkKVteL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2VsZW1lbnQvW14vXSsvcmVwbGFjZV92YWx1ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9lbGVtZW50L1teL10rL3ZhbHVlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2dldFBlcmZvcm1hbmNlRGF0YScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9wZXJmb3JtYW5jZURhdGEvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZXhlY3V0ZV9kcml2ZXInKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RhcnRfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdG9wX3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vLipldmVudCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsva2V5cycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvY2F0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlX2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuICAvLyBXM0MgY29tbWFuZHNcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cvdHlwZXMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3dpbmRvdy9yZWN0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJyldLFxuXTtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gQ2hyb21lZHJpdmVyLlxuY29uc3QgQ0hST01FX05PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvcmVjdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcblxuICAvLyB0aGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBtb2JpbGU6IGNvbW1hbmRzIHdvcmtpbmcgaW4gd2ViIGNvbnRleHRcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZyQnKV0sXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcyQnKV0sXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZyQnKV0sXG5dO1xuXG5jb25zdCBNRU1PSVpFRF9GVU5DVElPTlMgPSBbXG4gICdnZXRTdGF0dXNCYXJIZWlnaHQnLFxuICAnZ2V0RGV2aWNlUGl4ZWxSYXRpbycsXG5dO1xuXG5jbGFzcyBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICAvLyBgc2hlbGxgIG92ZXJ3cml0ZXMgYWRiLnNoZWxsLCBzbyByZW1vdmVcbiAgICBkZWxldGUgb3B0cy5zaGVsbDtcblxuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAnLWFuZHJvaWQgdWlhdXRvbWF0b3InXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcbiAgICB0aGlzLnVpYXV0b21hdG9yMiA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307IC8vIG1hcCBvZiBsYW5ndWFnZSAtPiBzdHJpbmdzIG9ialxuXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogZmFsc2UsIGFsbG93SW52aXNpYmxlRWxlbWVudHM6IGZhbHNlfSxcbiAgICAgICAgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIC8vIGhhbmRsZSB3ZWJ2aWV3IG1lY2hhbmljcyBmcm9tIEFuZHJvaWREcml2ZXJcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuXG4gICAgLy8gbWVtb2l6ZSBmdW5jdGlvbnMgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSBkb25lIG9uIGEgcGVyLWluc3RhbmNlIGJhc2lzXG4gICAgZm9yIChjb25zdCBmbiBvZiBNRU1PSVpFRF9GVU5DVElPTlMpIHtcbiAgICAgIHRoaXNbZm5dID0gXy5tZW1vaXplKHRoaXNbZm5dKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlRGVzaXJlZENhcHMoY2FwcykgJiYgYW5kcm9pZEhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVE9ETyBoYW5kbGUgb3RoZXJTZXNzaW9uRGF0YSBmb3IgbXVsdGlwbGUgc2Vzc2lvbnNcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IHRoaXMuY2FwcyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FwcyA9IE9iamVjdC5hc3NpZ24oc2VydmVyRGV0YWlscywgdGhpcy5jYXBzKTtcblxuICAgICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcblxuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IDkwMDAwXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiV2UncmUgZ29pbmcgdG8gcnVuIGEgQ2hyb21lLWJhc2VkIHNlc3Npb25cIik7XG4gICAgICAgIGxldCB7cGtnLCBhY3Rpdml0eX0gPSBoZWxwZXJzLmdldENocm9tZVBrZyh0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICAgICAgICB0aGlzLm9wdHMuYXBwUGFja2FnZSA9IHRoaXMuY2Fwcy5hcHBQYWNrYWdlID0gcGtnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwQWN0aXZpdHkgPSB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBhY3Rpdml0eTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYENocm9tZS10eXBlIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGFyZSAke3BrZ30gYW5kICR7YWN0aXZpdHl9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIHRoaXMuc2V0QXZkRnJvbUNhcGFiaWxpdGllcyhjYXBzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFByZXNlbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdGFydGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nIGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBOZWl0aGVyICdhcHAnIG5vciAnYXBwUGFja2FnZScgd2FzIHNldC4gU3RhcnRpbmcgVWlBdXRvbWF0b3IyIGAgK1xuICAgICAgICAgICd3aXRob3V0IHRoZSB0YXJnZXQgYXBwbGljYXRpb24nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0cy5hZGJQb3J0ID0gdGhpcy5vcHRzLmFkYlBvcnQgfHwgREVGQVVMVF9BREJfUE9SVDtcblxuICAgICAgYXdhaXQgdGhpcy5zdGFydFVpQXV0b21hdG9yMlNlc3Npb24oKTtcbiAgICAgIGF3YWl0IHRoaXMuZmlsbERldmljZURldGFpbHMoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgdGhpcy5jYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmlsbERldmljZURldGFpbHMgKCkge1xuICAgIHRoaXMuY2Fwcy5waXhlbFJhdGlvID0gYXdhaXQgdGhpcy5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgdGhpcy5jYXBzLnN0YXRCYXJIZWlnaHQgPSBhd2FpdCB0aGlzLmdldFN0YXR1c0JhckhlaWdodCgpO1xuICAgIHRoaXMuY2Fwcy52aWV3cG9ydFJlY3QgPSBhd2FpdCB0aGlzLmdldFZpZXdQb3J0UmVjdCgpO1xuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbCBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgbGV0IHNlc3Npb25EYXRhID0gYXdhaXQgc3VwZXIuZ2V0U2Vzc2lvbigpO1xuICAgIGxvZ2dlci5kZWJ1ZygnR2V0dGluZyBzZXNzaW9uIGRldGFpbHMgZnJvbSBzZXJ2ZXIgdG8gbWl4IGluJyk7XG4gICAgbGV0IHVpYTJEYXRhID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvJywgJ0dFVCcsIHt9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc2Vzc2lvbkRhdGEsIHVpYTJEYXRhKTtcbiAgfVxuXG4gIGlzRW11bGF0b3IgKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzRW11bGF0b3IodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIH1cblxuICBzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIChjYXBzKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdmQpIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnYXZkIG9yIHBsYXRmb3JtVmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgYXZkRGV2aWNlID0gY2Fwcy5kZXZpY2VOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy5dL2csICctJyk7XG4gICAgICB0aGlzLm9wdHMuYXZkID0gYCR7YXZkRGV2aWNlfV9fJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn1gO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFsbG9jYXRlU3lzdGVtUG9ydCAoKSB7XG4gICAgY29uc3QgZm9yd2FyZFBvcnQgPSBhc3luYyAobG9jYWxQb3J0KSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZvcndhcmRpbmcgVWlBdXRvbWF0b3IyIFNlcnZlciBwb3J0ICR7REVWSUNFX1BPUlR9IHRvIGxvY2FsIHBvcnQgJHtsb2NhbFBvcnR9YCk7XG4gICAgICBpZiAoKGF3YWl0IGNoZWNrUG9ydFN0YXR1cyhsb2NhbFBvcnQsIExPQ0FMSE9TVF9JUDQpKSA9PT0gJ29wZW4nKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVaUF1dG9tYXRvcjIgU2VydmVyIGNhbm5vdCBzdGFydCBiZWNhdXNlIHRoZSBsb2NhbCBwb3J0ICMke2xvY2FsUG9ydH0gaXMgYnVzeS4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSB0aGUgcG9ydCB5b3UgcHJvdmlkZSB2aWEgJ3N5c3RlbVBvcnQnIGNhcGFiaWxpdHkgaXMgbm90IG9jY3VwaWVkLiBgICtcbiAgICAgICAgICBgVGhpcyBzaXR1YXRpb24gbWlnaHQgb2Z0ZW4gYmUgYSByZXN1bHQgb2YgYW4gaW5hY2N1cmF0ZSBzZXNzaW9ucyBtYW5hZ2VtZW50LCBlLmcuIGAgK1xuICAgICAgICAgIGBvbGQgYXV0b21hdGlvbiBzZXNzaW9ucyBvbiB0aGUgc2FtZSBkZXZpY2UgbXVzdCBhbHdheXMgYmUgY2xvc2VkIGJlZm9yZSBzdGFydGluZyBuZXcgb25lcy5gKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KGxvY2FsUG9ydCwgREVWSUNFX1BPUlQpO1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQpIHtcbiAgICAgIHRoaXMuX2hhc1N5c3RlbVBvcnRJbkNhcHMgPSB0cnVlO1xuICAgICAgcmV0dXJuIGF3YWl0IGZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9XG5cbiAgICBhd2FpdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFtzdGFydFBvcnQsIGVuZFBvcnRdID0gREVWSUNFX1BPUlRfUkFOR0U7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm9wdHMuc3lzdGVtUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KFxuICAgICAgICAgIGBDYW5ub3QgZmluZCBhbnkgZnJlZSBwb3J0IGluIHJhbmdlICR7c3RhcnRQb3J0fS4uJHtlbmRQb3J0fX0uIGAgK1xuICAgICAgICAgIGBQbGVhc2Ugc2V0IHRoZSBhdmFpbGFibGUgcG9ydCBudW1iZXIgYnkgcHJvdmlkaW5nIHRoZSBzeXN0ZW1Qb3J0IGNhcGFiaWxpdHkgb3IgYCArXG4gICAgICAgICAgYGRvdWJsZSBjaGVjayB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGxvY2tpbmcgcG9ydHMgd2l0aGluIHRoaXMgcmFuZ2UgYW5kIHRlcm1pbmF0ZSBgICtcbiAgICAgICAgICBgdGhlc2Ugd2hpY2ggYXJlIG5vdCBuZWVkZWQgYW55bW9yZWApO1xuICAgICAgfVxuICAgICAgYXdhaXQgZm9yd2FyZFBvcnQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVsZWFzZVN5c3RlbVBvcnQgKCkge1xuICAgIGlmICghdGhpcy5vcHRzLnN5c3RlbVBvcnQgfHwgIXRoaXMuYWRiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hhc1N5c3RlbVBvcnRJbkNhcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRChhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMuc3lzdGVtUG9ydCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yd2FyZFBvcnQodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCwgTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uICgpIHtcbiAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgIGxldCB7dWRpZCwgZW1Qb3J0fSA9IGF3YWl0IGhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzKHRoaXMub3B0cyk7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBrbm93IG91ciBqYXZhIHZlcnNpb24gYW5kIGRldmljZSBpbmZvLCB3ZSBjYW4gY3JlYXRlIG91clxuICAgIC8vIEFEQiBpbnN0YW5jZVxuICAgIHRoaXMuYWRiID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMuY3JlYXRlQURCKHRoaXMub3B0cyk7XG5cbiAgICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG5cbiAgICBpZiAoYXBpTGV2ZWwgPCAyMSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coJ1VJQXV0b21hdG9yMiBpcyBvbmx5IHN1cHBvcnRlZCBzaW5jZSBBbmRyb2lkIDUuMCAoTG9sbGlwb3ApLiAnICtcbiAgICAgICAgJ1lvdSBjb3VsZCBzdGlsbCB1c2Ugb3RoZXIgc3VwcG9ydGVkIGJhY2tlbmRzIGluIG9yZGVyIHRvIGF1dG9tYXRlIG9sZGVyIEFuZHJvaWQgdmVyc2lvbnMuJyk7XG4gICAgfVxuXG4gICAgaWYgKGFwaUxldmVsID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgbG9nZ2VyLmluZm8oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5Jyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBlbmFibGUvZGlzYWJsZSBncHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmdwc0VuYWJsZWQpKSB7XG4gICAgICBpZiAodGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byAke3RoaXMub3B0cy5ncHNFbmFibGVkID8gJ2VuYWJsZScgOiAnZGlzYWJsZSd9IGdwcyBsb2NhdGlvbiBwcm92aWRlcmApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi50b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyKHRoaXMub3B0cy5ncHNFbmFibGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBTb3JyeSEgJ2dwc0VuYWJsZWQnIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9yc2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCBhcHBQYWNrYWdlIGV0IGFsIGZyb20gbWFuaWZlc3QgaWYgbmVjZXNzYXJ5XG4gICAgY29uc3QgYXBwSW5mbyA9IGF3YWl0IGhlbHBlcnMuZ2V0TGF1bmNoSW5mbyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAvLyBhbmQgZ2V0IGl0IG9udG8gb3VyICdvcHRzJyBvYmplY3Qgc28gd2UgdXNlIGl0IGZyb20gbm93IG9uXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIGFwcEluZm8gfHwge30pO1xuXG4gICAgLy8gc2V0IGFjdHVhbCBkZXZpY2UgbmFtZSwgdWRpZCwgcGxhdGZvcm0gdmVyc2lvbiwgc2NyZWVuIHNpemUsIHNjcmVlbiBkZW5zaXR5LCBtb2RlbCBhbmQgbWFudWZhY3R1cmVyIGRldGFpbHNcbiAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9IHRoaXMuYWRiLmN1ckRldmljZUlkO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VVRElEID0gdGhpcy5vcHRzLnVkaWQ7XG5cbiAgICAvLyBzdGFydCBhbiBhdmQsIHNldCB0aGUgbGFuZ3VhZ2UvbG9jYWxlLCBwaWNrIGFuIGVtdWxhdG9yLCBldGMuLi5cbiAgICAvLyBUT0RPIHdpdGggbXVsdGlwbGUgZGV2aWNlcyB3ZSdsbCBuZWVkIHRvIHBhcmFtZXRlcml6ZSB0aGlzXG4gICAgdGhpcy5kZWZhdWx0SU1FID0gYXdhaXQgaGVscGVycy5pbml0RGV2aWNlKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuXG4gICAgLy8gUHJlcGFyZSB0aGUgZGV2aWNlIGJ5IGZvcndhcmRpbmcgdGhlIFVpQXV0b21hdG9yMiBwb3J0XG4gICAgLy8gVGhpcyBjYWxsIG11dGF0ZXMgdGhpcy5vcHRzLnN5c3RlbVBvcnQgaWYgaXQgaXMgbm90IHNldCBleHBsaWNpdGx5XG4gICAgYXdhaXQgdGhpcy5hbGxvY2F0ZVN5c3RlbVBvcnQoKTtcblxuICAgIC8vIFByZXBhcmUgdGhlIGRldmljZSBieSBmb3J3YXJkaW5nIHRoZSBVaUF1dG9tYXRvcjIgTUpQRUcgc2VydmVyIHBvcnQgKGlmXG4gICAgLy8gYXBwbGljYWJsZSlcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0KCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIG1vZGlmaWVkIFVpQXV0b21hdG9yMiBzZXJ2ZXIgZXRjXG4gICAgYXdhaXQgdGhpcy5pbml0VWlBdXRvbWF0b3IyU2VydmVyKCk7XG5cbiAgICAvLyBTaG91bGQgYmUgYWZ0ZXIgaW5zdGFsbGluZyBpby5hcHBpdW0uc2V0dGluZ3MgaW4gaGVscGVycy5pbml0RGV2aWNlXG4gICAgaWYgKHRoaXMub3B0cy5kaXNhYmxlV2luZG93QW5pbWF0aW9uICYmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpIDwgMjYpKSB7IC8vIEFQSSBsZXZlbCAyNiBpcyBBbmRyb2lkIDguMC5cbiAgICAgIC8vIEdyYW50aW5nIGFuZHJvaWQucGVybWlzc2lvbi5TRVRfQU5JTUFUSU9OX1NDQUxFIGlzIG5lY2Vzc2FyeSB0byBoYW5kbGUgYW5pbWF0aW9ucyB1bmRlciBBUEkgbGV2ZWwgMjZcbiAgICAgIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcHVsbC8xMTY0MCNpc3N1ZWNvbW1lbnQtNDM4MjYwNDc3XG4gICAgICAvLyBgLS1uby13aW5kb3ctYW5pbWF0aW9uYCB3b3JrcyBvdmVyIEFuZHJvaWQgOCB0byBkaXNhYmxlIGFsbCBvZiBhbmltYXRpb25zXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuaXNBbmltYXRpb25PbigpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdEaXNhYmxpbmcgYW5pbWF0aW9uIHZpYSBpby5hcHBpdW0uc2V0dGluZ3MnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuaW5mbygnV2luZG93IGFuaW1hdGlvbiBpcyBhbHJlYWR5IGRpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IHVwIGFwcCB1bmRlciB0ZXN0XG4gICAgLy8gcHJlcGFyZSBvdXIgYWN0dWFsIEFVVCwgZ2V0IGl0IG9uIHRoZSBkZXZpY2UsIGV0Yy4uLlxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy8gQWRkaW5nIEFVVCBwYWNrYWdlIG5hbWUgaW4gdGhlIGNhcGFiaWxpdGllcyBpZiBwYWNrYWdlIG5hbWUgbm90IGV4aXN0IGluIGNhcHNcbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBQYWNrYWdlICYmIGFwcEluZm8pIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBQYWNrYWdlID0gYXBwSW5mby5hcHBQYWNrYWdlO1xuICAgIH1cblxuICAgIC8vIGxhdW5jaCBVaUF1dG9tYXRvcjIgYW5kIHdhaXQgdGlsbCBpdHMgb25saW5lIGFuZCB3ZSBoYXZlIGEgc2Vzc2lvblxuICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLnN0YXJ0U2Vzc2lvbih0aGlzLmNhcHMpO1xuXG4gICAgYXdhaXQgdGhpcy5hZGREZXZpY2VJbmZvVG9DYXBzKCk7XG5cbiAgICAvLyBVbmxvY2sgdGhlIGRldmljZSBhZnRlciB0aGUgc2Vzc2lvbiBpcyBzdGFydGVkLlxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIC8vIHVubG9jayB0aGUgZGV2aWNlIHRvIHByZXBhcmUgaXQgZm9yIHRlc3RpbmdcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYCdza2lwVW5sb2NrJyBjYXBhYmlsaXR5IHNldCwgc28gc2tpcHBpbmcgZGV2aWNlIHVubG9ja2ApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikgeyAvLyBzdGFydCBhIGNocm9tZWRyaXZlciBzZXNzaW9uXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbih0aGlzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hdXRvTGF1bmNoICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICBhd2FpdCB0aGlzLmVuc3VyZUFwcFN0YXJ0cygpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBpbml0aWFsIG9yaWVudGF0aW9uIGlzIHJlcXVlc3RlZCwgc2V0IGl0XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm9yaWVudGF0aW9uKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7dGhpcy5vcHRzLm9yaWVudGF0aW9ufSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0T3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSB3YW50IHRvIGltbWVkaWF0ZWx5IGdldCBpbnRvIGEgd2Vidmlldywgc2V0IG91ciBjb250ZXh0XG4gICAgLy8gYXBwcm9wcmlhdGVseVxuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGNvbnN0IHZpZXdOYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0IHx8IDIwMDA7XG4gICAgICBsb2dnZXIuaW5mbyhgU2V0dGluZyBhdXRvIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCB0aGlzLnNldENvbnRleHQuYmluZCh0aGlzKSwgdmlld05hbWUpO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IGV2ZXJ5dGhpbmcgaGFzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LCB0dXJuIG9uIHByb3h5aW5nIHNvIGFsbFxuICAgIC8vIHN1YnNlcXVlbnQgc2Vzc2lvbiByZXF1ZXN0cyBnbyBzdHJhaWdodCB0by9mcm9tIHVpYXV0b21hdG9yMlxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgYWRkRGV2aWNlSW5mb1RvQ2FwcyAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtVmVyc2lvbixcbiAgICAgIG1hbnVmYWN0dXJlcixcbiAgICAgIG1vZGVsLFxuICAgICAgcmVhbERpc3BsYXlTaXplLFxuICAgICAgZGlzcGxheURlbnNpdHksXG4gICAgfSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0RGV2aWNlSW5mbygpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VBcGlMZXZlbCA9IHBhcnNlSW50KGFwaVZlcnNpb24sIDEwKTtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5TaXplID0gcmVhbERpc3BsYXlTaXplO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5EZW5zaXR5ID0gZGlzcGxheURlbnNpdHk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5jYXBzLmRldmljZU1hbnVmYWN0dXJlciA9IG1hbnVmYWN0dXJlcjtcbiAgfVxuXG4gIGFzeW5jIGluaXRVaUF1dG9tYXRvcjJTZXJ2ZXIgKCkge1xuICAgIC8vIGJyb2tlbiBvdXQgZm9yIHJlYWRhYmlsaXR5XG4gICAgY29uc3QgdWlhdXRvbWF0b3IyT3B0cyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0IHx8IHRoaXMub3B0cy5ob3N0IHx8IExPQ0FMSE9TVF9JUDQsXG4gICAgICBzeXN0ZW1Qb3J0OiB0aGlzLm9wdHMuc3lzdGVtUG9ydCxcbiAgICAgIGRldmljZVBvcnQ6IERFVklDRV9QT1JULFxuICAgICAgYWRiOiB0aGlzLmFkYixcbiAgICAgIGFwazogdGhpcy5vcHRzLmFwcCxcbiAgICAgIHRtcERpcjogdGhpcy5vcHRzLnRtcERpcixcbiAgICAgIGFwcFBhY2thZ2U6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgYXBwQWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgIGRpc2FibGVXaW5kb3dBbmltYXRpb246ICEhdGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24sXG4gICAgICBkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZTogdGhpcy5vcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlLFxuICAgICAgcmVhZFRpbWVvdXQ6IHRoaXMub3B0cy51aWF1dG9tYXRvcjJTZXJ2ZXJSZWFkVGltZW91dCxcbiAgICB9O1xuICAgIC8vIG5vdyB0aGF0IHdlIGhhdmUgcGFja2FnZSBhbmQgYWN0aXZpdHksIHdlIGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2ZcbiAgICAvLyB1aWF1dG9tYXRvcjIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uc1xuICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbmV3IFVpQXV0b21hdG9yMlNlcnZlcih1aWF1dG9tYXRvcjJPcHRzKTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gICAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG5cbiAgICBpZiAodGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24pIHtcbiAgICAgIGxvZ2dlci5pbmZvKGAnc2tpcFNlcnZlckluc3RhbGxhdGlvbicgaXMgc2V0LiBTa2lwcGluZyBVSUF1dG9tYXRvcjIgc2VydmVyIGluc3RhbGxhdGlvbi5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuaW5zdGFsbFNlcnZlckFwayh0aGlzLm9wdHMudWlhdXRvbWF0b3IyU2VydmVySW5zdGFsbFRpbWVvdXQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0KFxuICAgICAgICAgIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lELFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgQ2Fubm90IGFkZCBzZXJ2ZXIgcGFja2FnZXMgdG8gdGhlIERvemUgd2hpdGVsaXN0LiBPcmlnaW5hbCBlcnJvcjogYCArXG4gICAgICAgICAgKGUuc3RkZXJyIHx8IGUubWVzc2FnZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRBVVQgKCkge1xuICAgIC8vIFVuaW5zdGFsbCBhbnkgdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyB3aGljaCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMoXG4gICAgICAgIHRoaXMuYWRiLFxuICAgICAgICBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpLFxuICAgICAgICBbU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSURdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEluc3RhbGwgYW55IFwib3RoZXJBcHBzXCIgdGhhdCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGxldCBvdGhlckFwcHM7XG4gICAgICB0cnkge1xuICAgICAgICBvdGhlckFwcHMgPSBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwc1xuICAgICAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKSkpO1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzKG90aGVyQXBwcywgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCAmJiAhKGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5hcHBQYWNrYWdlKSlcbiAgICAgICAgICB8fCAhdGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubm9TaWduICYmICFhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmFwcFBhY2thZ2UsIHtcbiAgICAgICAgICByZXF1aXJlRGVmYXVsdENlcnQ6IGZhbHNlLFxuICAgICAgICB9KSkge1xuICAgICAgICAgIGF3YWl0IGhlbHBlcnMuc2lnbkFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzLmFwcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdub1Jlc2V0IGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQgdGhlIGFwcCBpcyBhbHJlYWR5IGluc3RhbGxlZC4gRG9pbmcgbm90aGluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0ICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5zdXJlQXBwU3RhcnRzICgpIHtcbiAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBhY3Rpdml0eSBhbmQgcGFja2FnZSB0byB3YWl0IGZvclxuICAgIGNvbnN0IGFwcFdhaXRQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlIHx8IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICAgIGNvbnN0IGFwcFdhaXRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHkgfHwgdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuXG4gICAgbG9nZ2VyLmluZm8oYFN0YXJ0aW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfS8ke3RoaXMub3B0cy5hcHBBY3Rpdml0eX0gYCArXG4gICAgICBgYW5kIHdhaXRpbmcgZm9yICcke2FwcFdhaXRQYWNrYWdlfS8ke2FwcFdhaXRBY3Rpdml0eX0nYCk7XG5cbiAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgbG9nZ2VyLmluZm8oYGFuZHJvaWRDb3ZlcmFnZSBpcyBjb25maWd1cmVkLiBgICtcbiAgICAgICAgYCBTdGFydGluZyBpbnN0cnVtZW50YXRpb24gb2YgJyR7dGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZX0nLi4uYCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5hbmRyb2lkQ292ZXJhZ2UodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKHtcbiAgICAgICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgICAgYWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5LFxuICAgICAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzLFxuICAgICAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICAgICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICAgICAgc3RvcEFwcDogIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQsXG4gICAgICAgIHJldHJ5OiB0cnVlLFxuICAgICAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIGxvZ2dlci5kZWJ1ZygnRGVsZXRpbmcgVWlBdXRvbWF0b3IyIHNlc3Npb24nKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuXG4gICAgaWYgKHRoaXMudWlhdXRvbWF0b3IyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzdG9wIENocm9tZURyaXZlciBwcm94aWVzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuandwUHJveHlBY3RpdmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5kZWxldGVTZXNzaW9uKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcHJveHkgZGVsZXRlU2Vzc2lvbiB0byBVaUF1dG9tYXRvcjI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCAmJiB0aGlzLm9wdHMucmVzZXRLZXlib2FyZCAmJiB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICcke3RoaXMuZGVmYXVsdElNRX0nYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcmVzZXQgSU1FOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgICBsb2dnZXIuaW5mbygnU2h1dHRpbmcgZG93biB0aGUgYWRiIHByb2Nlc3Mgb2YgaW5zdHJ1bWVudGF0aW9uLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmVuZEFuZHJvaWRDb3ZlcmFnZSgpO1xuICAgICAgICAvLyBVc2UgdGhpcyBicm9hZGNhc3QgaW50ZW50IHRvIG5vdGlmeSBpdCdzIHRpbWUgdG8gZHVtcCBjb3ZlcmFnZSB0byBmaWxlXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFNlbmRpbmcgaW50ZW50IGJyb2FkY2FzdCAnJHt0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50fScgYXQgdGhlIGVuZCBvZiBpbnN0cnVtZW50aW5nLmApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmJyb2FkY2FzdCh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIud2FybignTm8gYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50IGlzIGNvbmZpZ3VyZWQgaW4gY2Fwcy4gUG9zc2libHkgeW91IGNhbm5vdCBnZXQgY292ZXJhZ2UgZmlsZS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Nocm9tZVNlc3Npb24gJiYgIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gZm9yY2Ugc3RvcCBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FwYWJpbGl0eSAnZnVsbFJlc2V0JyBzZXQgdG8gJ3RydWUnLCBVbmluc3RhbGxpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9J2ApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byB1bmluc3RhbGwgYXBwOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVGhpcyB2YWx1ZSBjYW4gYmUgdHJ1ZSBpZiB0ZXN0IHRhcmdldCBkZXZpY2UgaXMgPD0gMjZcbiAgICAgIGlmICh0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCkge1xuICAgICAgICBsb2dnZXIuaW5mbygnUmVzdG9yaW5nIHdpbmRvdyBhbmltYXRpb24gc3RhdGUnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbGVhc2VTeXN0ZW1Qb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHJlbW92ZSBzeXN0ZW0gcG9ydCBmb3J3YXJkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIC8vIElnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHJlbW92ZSBNSlBFRyBzZXJ2ZXIgcG9ydCBmb3J3YXJkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIC8vIElnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gY2xvc2UgZW11bGF0b3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrQXBwUHJlc2VudCAoKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIGFwcCBpcyBhY3R1YWxseSBwcmVzZW50Jyk7XG4gICAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIGFwcCBhcGsgYXQgJyR7dGhpcy5vcHRzLmFwcH0nYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoKSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBkbyBub3RoaW5nIGhlcmUsIHNpbmNlIGNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzIHByb3hpZXNcbiAgICAvLyBzZXR0aW5ncyB0byB0aGUgdWlhdXRvMiBzZXJ2ZXIgYWxyZWFkeVxuICB9XG5cbiAgLy8gTmVlZCB0byBvdmVycmlkZSBhbmRyb2lkLWRyaXZlcidzIHZlcnNpb24gb2YgdGhpcyBzaW5jZSB3ZSBkb24ndCBhY3R1YWxseVxuICAvLyBoYXZlIGEgYm9vdHN0cmFwOyBpbnN0ZWFkIHdlIGp1c3QgcmVzdGFydCBhZGIgYW5kIHJlLWZvcndhcmQgdGhlIFVpQXV0b21hdG9yMlxuICAvLyBwb3J0XG4gIGFzeW5jIHdyYXBCb290c3RyYXBEaXNjb25uZWN0ICh3cmFwcGVkKSB7XG4gICAgYXdhaXQgd3JhcHBlZCgpO1xuICAgIGF3YWl0IHRoaXMuYWRiLnJlc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlU3lzdGVtUG9ydCgpO1xuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQoKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgYWx3YXlzIGhhdmUgYW4gYWN0aXZlIHByb3h5IHRvIHRoZSBVaUF1dG9tYXRvcjIgc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGNhbiBhbHdheXMgcHJveHkgdG8gdGhlIHVpYXV0b21hdG9yMiBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuICAgIC8vIHdlIGFyZSBtYWludGFpbmluZyB0d28gc2V0cyBvZiBOT19QUk9YWSBsaXN0cywgb25lIGZvciBjaHJvbWVkcml2ZXIoQ0hST01FX05PX1BST1hZKVxuICAgIC8vIGFuZCBvbmUgZm9yIHVpYXV0b21hdG9yMihOT19QUk9YWSksIGJhc2VkIG9uIGN1cnJlbnQgY29udGV4dCB3aWxsIHJldHVybiByZWxhdGVkIE5PX1BST1hZIGxpc3RcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmNocm9tZWRyaXZlcikpIHtcbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgd2VidmlldyhjaHJvbWVkcml2ZXIpLCB0aGVuIHJldHVybiBDSFJPTUVfTk9fUFJPWFkgbGlzdFxuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gQ0hST01FX05PX1BST1hZO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbLi4udGhpcy5qd3BQcm94eUF2b2lkLCBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cbn1cblxuLy8gZmlyc3QgYWRkIHRoZSBhbmRyb2lkLWRyaXZlciBjb21tYW5kcyB3aGljaCB3ZSB3aWxsIGZhbGwgYmFjayB0b1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhhbmRyb2lkQ29tbWFuZHMpKSB7XG4gIEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuLy8gdGhlbiBvdmVyd3JpdGUgd2l0aCBhbnkgdWlhdXRvbWF0b3IyLXNwZWNpZmljIGNvbW1hbmRzXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbmV4cG9ydCB7IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXI7XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
@@ -76,6 +76,7 @@ class UiAutomator2Server {
|
|
|
76
76
|
|
|
77
77
|
this.jwproxy = new UIA2Proxy(proxyOpts);
|
|
78
78
|
this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);
|
|
79
|
+
this.proxyCommand = this.jwproxy.command.bind(this.jwproxy);
|
|
79
80
|
this.jwproxy.didInstrumentationExit = false;
|
|
80
81
|
}
|
|
81
82
|
|
|
@@ -387,4 +388,4 @@ var _default = UiAutomator2Server;
|
|
|
387
388
|
exports.default = _default;require('source-map-support').install();
|
|
388
389
|
|
|
389
390
|
|
|
390
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91aWF1dG9tYXRvcjIuanMiXSwibmFtZXMiOlsiUkVRRF9QQVJBTVMiLCJTRVJWRVJfTEFVTkNIX1RJTUVPVVQiLCJTRVJWRVJfSU5TVEFMTF9SRVRSSUVTIiwiU0VSVklDRVNfTEFVTkNIX1RJTUVPVVQiLCJTRVJWRVJfUEFDS0FHRV9JRCIsIlNFUlZFUl9URVNUX1BBQ0tBR0VfSUQiLCJJTlNUUlVNRU5UQVRJT05fVEFSR0VUIiwiaW5zdHJ1bWVudGF0aW9uTG9nZ2VyIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiVUlBMlByb3h5IiwiSldQcm94eSIsInByb3h5Q29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJkaWRJbnN0cnVtZW50YXRpb25FeGl0IiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIlVpQXV0b21hdG9yMlNlcnZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInJlcSIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UiLCJwcm94eU9wdHMiLCJzZXJ2ZXIiLCJob3N0IiwicG9ydCIsInN5c3RlbVBvcnQiLCJrZWVwQWxpdmUiLCJyZWFkVGltZW91dCIsInRpbWVvdXQiLCJqd3Byb3h5IiwicHJveHlSZXFSZXMiLCJiaW5kIiwiaW5zdGFsbFNlcnZlckFwayIsImluc3RhbGxUaW1lb3V0IiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwicGFja2FnZUluZm9zTWFwcGVyIiwiYXBwUGF0aCIsImFwcElkIiwiaGVscGVycyIsImlzV3JpdGVhYmxlIiwibG9nIiwiaW5mbyIsImRzdFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImJhc2VuYW1lIiwiZnMiLCJjb3B5RmlsZSIsInBhY2thZ2VzSW5mbyIsIkIiLCJhbGwiLCJtYXAiLCJhcGtQYXRoIiwidGVzdEFwa1BhdGgiLCJzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyIsInNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyIsImlzQXBwSW5zdGFsbGVkIiwiYWRiIiwiY2hlY2tBcGtDZXJ0Iiwic2lnbkFwcCIsImFwcFN0YXRlIiwiZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUiLCJkZWJ1ZyIsIkFQUF9JTlNUQUxMX1NUQVRFIiwiT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJORVdFUl9WRVJTSU9OX0lOU1RBTExFRCIsImluY2x1ZGVzIiwiTk9UX0lOU1RBTExFRCIsInVuaW5zdGFsbEFwayIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwiaW5zdGFsbCIsIm5vSW5jcmVtZW50YWwiLCJyZXBsYWNlIiwidGltZW91dENhcE5hbWUiLCJyaW1yYWYiLCJ2ZXJpZnlTZXJ2aWNlc0F2YWlsYWJpbGl0eSIsImlzUG1TZXJ2aWNlQXZhaWxhYmxlIiwicG1PdXRwdXQiLCJwbUVycm9yIiwic2hlbGwiLCJlIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwibGluZSIsInNwbGl0Iiwic3RhcnRTZXNzaW9uIiwiY2FwcyIsImNsZWFudXBBdXRvbWF0aW9uTGVmdG92ZXJzIiwic2tpcFNlcnZlckluc3RhbGxhdGlvbiIsInNlcnZlclZlcnNpb24iLCJ1aWF1dG9tYXRvcjJTZXJ2ZXJMYXVuY2hUaW1lb3V0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwicmV0cmllcyIsIm1heFJldHJpZXMiLCJkZWxheUJldHdlZW5SZXRyaWVzIiwic3RhcnRJbnN0cnVtZW50YXRpb25Qcm9jZXNzIiwiY29tbWFuZCIsImVycm9yQW5kVGhyb3ciLCJkZWxheSIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiY2FwYWJpbGl0aWVzIiwiZmlyc3RNYXRjaCIsImFsd2F5c01hdGNoIiwiY21kIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsInB1c2giLCJfIiwiaXNCb29sZWFuIiwiaW5zdHJ1bWVudGF0aW9uUHJvY2VzcyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJvbiIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dCIsInRyaW0iLCJjb2RlIiwiZGVsZXRlU2Vzc2lvbiIsInN0cmljdENsZWFudXAiLCJ2YWx1ZSIsImRhdGEiLCJhY3RpdmVTZXNzaW9uSWRzIiwiaWQiLCJmaWx0ZXIiLCJCb29sZWFuIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsInBsdXJhbGl6ZSIsImF4aW9zIiwiZGVsZXRlIiwiZm9yY2VTdG9wIiwiaWdub3JlIiwia2lsbFByb2Nlc3Nlc0J5TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxXQUFXLEdBQUcsQ0FBQyxLQUFELEVBQVEsUUFBUixFQUFrQixNQUFsQixFQUEwQixZQUExQixFQUF3QyxZQUF4QyxFQUFzRCx3QkFBdEQsQ0FBcEI7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxLQUE5QjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLEVBQS9CO0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsS0FBaEM7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRywrQkFBMUI7O0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUksR0FBRUQsaUJBQWtCLE9BQXBEOztBQUNBLE1BQU1FLHNCQUFzQixHQUFJLEdBQUVELHNCQUF1QiwwQ0FBekQ7OztBQUNBLE1BQU1FLHFCQUFxQixHQUFHQyxzQkFBT0MsU0FBUCxDQUFpQixpQkFBakIsQ0FBOUI7O0FBRUEsTUFBTUMsU0FBTixTQUF3QkMseUJBQXhCLENBQWdDO0FBQ1osUUFBWkMsWUFBWSxDQUFFQyxHQUFGLEVBQU9DLE1BQVAsRUFBZUMsSUFBSSxHQUFHLElBQXRCLEVBQTRCO0FBQzVDLFFBQUksS0FBS0Msc0JBQVQsRUFBaUM7QUFDL0IsWUFBTSxJQUFJQyx5QkFBT0MsbUJBQVgsQ0FDSCxJQUFHSixNQUFPLElBQUdELEdBQUkscURBQWxCLEdBQ0EsaUVBREEsR0FFQSxnRUFISSxDQUFOO0FBSUQ7O0FBQ0Qs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OFNWaEksa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7XG4gIFNFUlZFUl9BUEtfUEFUSCBhcyBhcGtQYXRoLFxuICBURVNUX0FQS19QQVRIIGFzIHRlc3RBcGtQYXRoLFxuICB2ZXJzaW9uIGFzIHNlcnZlclZlcnNpb25cbn0gZnJvbSAnYXBwaXVtLXVpYXV0b21hdG9yMi1zZXJ2ZXInO1xuaW1wb3J0IHtcbiAgdXRpbCwgbG9nZ2VyLCB0ZW1wRGlyLCBmcywgdGltaW5nXG59IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBoZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmNvbnN0IFJFUURfUEFSQU1TID0gWydhZGInLCAndG1wRGlyJywgJ2hvc3QnLCAnc3lzdGVtUG9ydCcsICdkZXZpY2VQb3J0JywgJ2Rpc2FibGVXaW5kb3dBbmltYXRpb24nXTtcbmNvbnN0IFNFUlZFUl9MQVVOQ0hfVElNRU9VVCA9IDMwMDAwO1xuY29uc3QgU0VSVkVSX0lOU1RBTExfUkVUUklFUyA9IDIwO1xuY29uc3QgU0VSVklDRVNfTEFVTkNIX1RJTUVPVVQgPSAzMDAwMDtcbmNvbnN0IFNFUlZFUl9QQUNLQUdFX0lEID0gJ2lvLmFwcGl1bS51aWF1dG9tYXRvcjIuc2VydmVyJztcbmNvbnN0IFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQgPSBgJHtTRVJWRVJfUEFDS0FHRV9JRH0udGVzdGA7XG5jb25zdCBJTlNUUlVNRU5UQVRJT05fVEFSR0VUID0gYCR7U0VSVkVSX1RFU1RfUEFDS0FHRV9JRH0vYW5kcm9pZHgudGVzdC5ydW5uZXIuQW5kcm9pZEpVbml0UnVubmVyYDtcbmNvbnN0IGluc3RydW1lbnRhdGlvbkxvZ2dlciA9IGxvZ2dlci5nZXRMb2dnZXIoJ0luc3RydW1lbnRhdGlvbicpO1xuXG5jbGFzcyBVSUEyUHJveHkgZXh0ZW5kcyBKV1Byb3h5IHtcbiAgYXN5bmMgcHJveHlDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5kaWRJbnN0cnVtZW50YXRpb25FeGl0KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoXG4gICAgICAgIGAnJHttZXRob2R9ICR7dXJsfScgY2Fubm90IGJlIHByb3hpZWQgdG8gVWlBdXRvbWF0b3IyIHNlcnZlciBiZWNhdXNlIGAgK1xuICAgICAgICAndGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGlzIG5vdCBydW5uaW5nIChwcm9iYWJseSBjcmFzaGVkKS4gJyArXG4gICAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBhbmQvb3IgdGhlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlscycpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIucHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxufVxuXG5jbGFzcyBVaUF1dG9tYXRvcjJTZXJ2ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgZm9yIChsZXQgcmVxIG9mIFJFUURfUEFSQU1TKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgIXV0aWwuaGFzVmFsdWUob3B0c1tyZXFdKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wdGlvbiAnJHtyZXF9JyBpcyByZXF1aXJlZCFgKTtcbiAgICAgIH1cbiAgICAgIHRoaXNbcmVxXSA9IG9wdHNbcmVxXTtcbiAgICB9XG4gICAgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSA9IG9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U7XG4gICAgY29uc3QgcHJveHlPcHRzID0ge1xuICAgICAgc2VydmVyOiB0aGlzLmhvc3QsXG4gICAgICBwb3J0OiB0aGlzLnN5c3RlbVBvcnQsXG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgfTtcbiAgICBpZiAob3B0cy5yZWFkVGltZW91dCAmJiBvcHRzLnJlYWRUaW1lb3V0ID4gMCkge1xuICAgICAgcHJveHlPcHRzLnRpbWVvdXQgPSBvcHRzLnJlYWRUaW1lb3V0O1xuICAgIH1cbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgVUlBMlByb3h5KHByb3h5T3B0cyk7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuandwcm94eS5wcm94eVJlcVJlcy5iaW5kKHRoaXMuandwcm94eSk7XG4gICAgdGhpcy5qd3Byb3h5LmRpZEluc3RydW1lbnRhdGlvbkV4aXQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YWxscyB0aGUgYXBrcyBvbiB0byB0aGUgZGV2aWNlIG9yIGVtdWxhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5zdGFsbFRpbWVvdXQgLSBJbnN0YWxsYXRpb24gdGltZW91dFxuICAgKi9cbiAgYXN5bmMgaW5zdGFsbFNlcnZlckFwayAoaW5zdGFsbFRpbWVvdXQgPSBTRVJWRVJfSU5TVEFMTF9SRVRSSUVTICogMTAwMCkge1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBjb25zdCBwYWNrYWdlSW5mb3NNYXBwZXIgPSBhc3luYyAoe2FwcFBhdGgsIGFwcElkfSkgPT4ge1xuICAgICAgaWYgKGF3YWl0IGhlbHBlcnMuaXNXcml0ZWFibGUoYXBwUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHsgYXBwUGF0aCwgYXBwSWQgfTtcbiAgICAgIH1cblxuICAgICAgbG9nLmluZm8oYFNlcnZlciBwYWNrYWdlIGF0ICcke2FwcFBhdGh9JyBpcyBub3Qgd3JpdGVhYmxlLiBgICtcbiAgICAgICAgYFdpbGwgY29weSBpdCBpbnRvIHRoZSB0ZW1wb3JhcnkgbG9jYXRpb24gYXQgJyR7dG1wUm9vdH0nIGFzIGEgd29ya2Fyb3VuZC4gYCArXG4gICAgICAgIGBDb25zaWRlciBtYWtpbmcgdGhpcyBmaWxlIHdyaXRlYWJsZSBtYW51YWxseSBpbiBvcmRlciB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBzZXNzaW9uIHN0YXJ0dXAuYCk7XG4gICAgICBjb25zdCBkc3RQYXRoID0gcGF0aC5yZXNvbHZlKHRtcFJvb3QsIHBhdGguYmFzZW5hbWUoYXBwUGF0aCkpO1xuICAgICAgYXdhaXQgZnMuY29weUZpbGUoYXBwUGF0aCwgZHN0UGF0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcHBQYXRoOiBkc3RQYXRoLFxuICAgICAgICBhcHBJZCxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWNrYWdlc0luZm8gPSBhd2FpdCBCLmFsbChCLm1hcChbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBQYXRoOiBhcGtQYXRoLFxuICAgICAgICAgIGFwcElkOiBTRVJWRVJfUEFDS0FHRV9JRCxcbiAgICAgICAgfSwge1xuICAgICAgICAgIGFwcFBhdGg6IHRlc3RBcGtQYXRoLFxuICAgICAgICAgIGFwcElkOiBTRVJWRVJfVEVTVF9QQUNLQUdFX0lELFxuICAgICAgICB9LFxuICAgICAgXSwgcGFja2FnZUluZm9zTWFwcGVyKSk7XG5cbiAgICAgIGxldCBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IGZhbHNlO1xuICAgICAgbGV0IHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCB7YXBwSWQsIGFwcFBhdGh9IG9mIHBhY2thZ2VzSW5mbykge1xuICAgICAgICBpZiAoYXBwSWQgPT09IFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQpIHtcbiAgICAgICAgICBjb25zdCBpc0FwcEluc3RhbGxlZCA9IGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKGFwcElkKTtcblxuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIHBvaW50IGluIGdldHRpbmcgdGhlIHN0YXRlIGZvciB0ZXN0IHNlcnZlcixcbiAgICAgICAgICAvLyBzaW5jZSBpdCBkb2VzIG5vdCBjb250YWluIHZlcnNpb24gaW5mb1xuICAgICAgICAgIGlmICghYXdhaXQgdGhpcy5hZGIuY2hlY2tBcGtDZXJ0KGFwcFBhdGgsIGFwcElkKSkge1xuICAgICAgICAgICAgYXdhaXQgaGVscGVycy5zaWduQXBwKHRoaXMuYWRiLCBhcHBQYXRoKTtcbiAgICAgICAgICAgIHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzID0gc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMgfHwgaXNBcHBJbnN0YWxsZWQ7XG4gICAgICAgICAgICBzaG91bGRJbnN0YWxsU2VydmVyUGFja2FnZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaXNBcHBJbnN0YWxsZWQpIHtcbiAgICAgICAgICAgIHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwU3RhdGUgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcHBsaWNhdGlvbkluc3RhbGxTdGF0ZShhcHBQYXRoLCBhcHBJZCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgJHthcHBJZH0gaW5zdGFsbGF0aW9uIHN0YXRlOiAke2FwcFN0YXRlfWApO1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuY2hlY2tBcGtDZXJ0KGFwcFBhdGgsIGFwcElkKSkge1xuICAgICAgICAgIHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzID0gc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMgfHwgW1xuICAgICAgICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQsXG4gICAgICAgICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5ORVdFUl9WRVJTSU9OX0lOU1RBTExFRCxcbiAgICAgICAgICBdLmluY2x1ZGVzKGFwcFN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBoZWxwZXJzLnNpZ25BcHAodGhpcy5hZGIsIGFwcFBhdGgpO1xuICAgICAgICAgIHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzID0gc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMgfHwgIVtcbiAgICAgICAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk5PVF9JTlNUQUxMRUQsXG4gICAgICAgICAgXS5pbmNsdWRlcyhhcHBTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2hvdWxkSW5zdGFsbFNlcnZlclBhY2thZ2VzID0gc2hvdWxkSW5zdGFsbFNlcnZlclBhY2thZ2VzIHx8IHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzIHx8IFtcbiAgICAgICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVELFxuICAgICAgICBdLmluY2x1ZGVzKGFwcFN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKGBTZXJ2ZXIgcGFja2FnZXMgYXJlICR7c2hvdWxkSW5zdGFsbFNlcnZlclBhY2thZ2VzID8gJycgOiAnbm90ICd9Z29pbmcgdG8gYmUgKHJlKWluc3RhbGxlZGApO1xuICAgICAgaWYgKHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyAmJiBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcykge1xuICAgICAgICBsb2cuaW5mbygnRnVsbCBwYWNrYWdlcyByZWluc3RhbGwgaXMgZ29pbmcgdG8gYmUgcGVyZm9ybWVkJyk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHthcHBJZCwgYXBwUGF0aH0gb2YgcGFja2FnZXNJbmZvKSB7XG4gICAgICAgIGlmIChzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsoYXBwSWQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbG9nLndhcm4oYEVycm9yIHVuaW5zdGFsbGluZyAnJHthcHBJZH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkSW5zdGFsbFNlcnZlclBhY2thZ2VzKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuaW5zdGFsbChhcHBQYXRoLCB7XG4gICAgICAgICAgICBub0luY3JlbWVudGFsOiB0cnVlLFxuICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IGluc3RhbGxUaW1lb3V0LFxuICAgICAgICAgICAgdGltZW91dENhcE5hbWU6ICd1aWF1dG9tYXRvcjJTZXJ2ZXJJbnN0YWxsVGltZW91dCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy52ZXJpZnlTZXJ2aWNlc0F2YWlsYWJpbGl0eSgpO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5U2VydmljZXNBdmFpbGFiaWxpdHkgKCkge1xuICAgIGxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke1NFUlZJQ0VTX0xBVU5DSF9USU1FT1VUfW1zIGZvciBzZXJ2aWNlcyB0byBiZSBhdmFpbGFibGVgKTtcbiAgICBsZXQgaXNQbVNlcnZpY2VBdmFpbGFibGUgPSBmYWxzZTtcbiAgICBsZXQgcG1PdXRwdXQgPSAnJztcbiAgICBsZXQgcG1FcnJvciA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIWlzUG1TZXJ2aWNlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgcG1FcnJvciA9IG51bGw7XG4gICAgICAgICAgcG1PdXRwdXQgPSAnJztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcG1PdXRwdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAnaW5zdHJ1bWVudGF0aW9uJ10pO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHBtRXJyb3IgPSBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocG1PdXRwdXQuaW5jbHVkZXMoJ0NvdWxkIG5vdCBhY2Nlc3MgdGhlIFBhY2thZ2UgTWFuYWdlcicpKSB7XG4gICAgICAgICAgICBwbUVycm9yID0gbmV3IEVycm9yKGBQcm9ibGVtIHJ1bm5pbmcgUGFja2FnZSBNYW5hZ2VyOiAke3BtT3V0cHV0fWApO1xuICAgICAgICAgICAgcG1PdXRwdXQgPSAnJzsgLy8gcmVtb3ZlIG91dHB1dCwgc28gaXQgaXMgbm90IHByaW50ZWQgYmVsb3dcbiAgICAgICAgICB9IGVsc2UgaWYgKHBtT3V0cHV0LmluY2x1ZGVzKElOU1RSVU1FTlRBVElPTl9UQVJHRVQpKSB7XG4gICAgICAgICAgICBwbU91dHB1dCA9ICcnOyAvLyByZW1vdmUgb3V0cHV0LCBzbyBpdCBpcyBub3QgcHJpbnRlZCBiZWxvd1xuICAgICAgICAgICAgbG9nLmRlYnVnKGBJbnN0cnVtZW50YXRpb24gdGFyZ2V0ICcke0lOU1RSVU1FTlRBVElPTl9UQVJHRVR9JyBpcyBhdmFpbGFibGVgKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzXG4gICAgICAgICAgICBpc1BtU2VydmljZUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICghcG1FcnJvcikge1xuICAgICAgICAgICAgcG1FcnJvciA9IG5ldyBFcnJvcignVGhlIGluc3RydW1lbnRhdGlvbiB0YXJnZXQgaXMgbm90IGxpc3RlZCBieSBQYWNrYWdlIE1hbmFnZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzUG1TZXJ2aWNlQXZhaWxhYmxlO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNFUlZJQ0VTX0xBVU5DSF9USU1FT1VULFxuICAgICAgICBpbnRlcnZhbE1zOiAxMDAwLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoYFVuYWJsZSB0byBmaW5kIGluc3RydW1lbnRhdGlvbiB0YXJnZXQgJyR7SU5TVFJVTUVOVEFUSU9OX1RBUkdFVH0nOiAkeyhwbUVycm9yIHx8IHt9KS5tZXNzYWdlfWApO1xuICAgICAgaWYgKHBtT3V0cHV0KSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnQXZhaWxhYmxlIHRhcmdldHM6Jyk7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBwbU91dHB1dC5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYCAgICAke2xpbmUucmVwbGFjZSgnaW5zdHJ1bWVudGF0aW9uOicsICcnKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoY2Fwcykge1xuICAgIGF3YWl0IHRoaXMuY2xlYW51cEF1dG9tYXRpb25MZWZ0b3ZlcnMoKTtcbiAgICBpZiAoY2Fwcy5za2lwU2VydmVySW5zdGFsbGF0aW9uKSB7XG4gICAgICBsb2cuaW5mbyhgJ3NraXBTZXJ2ZXJJbnN0YWxsYXRpb24nIGlzIHNldC4gQXR0ZW1wdGluZyB0byB1c2UgVUlBdXRvbWF0b3IyIHNlcnZlciBmcm9tIHRoZSBkZXZpY2VgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nIFVJQXV0b21hdG9yMiBzZXJ2ZXIgJHtzZXJ2ZXJWZXJzaW9ufWApO1xuICAgICAgbG9nLmluZm8oYFVzaW5nIFVJQXV0b21hdG9yMiBzZXJ2ZXIgZnJvbSAnJHthcGtQYXRofScgYW5kIHRlc3QgZnJvbSAnJHt0ZXN0QXBrUGF0aH0nYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dCA9IGNhcHMudWlhdXRvbWF0b3IyU2VydmVyTGF1bmNoVGltZW91dCB8fCBTRVJWRVJfTEFVTkNIX1RJTUVPVVQ7XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBsZXQgcmV0cmllcyA9IDA7XG4gICAgY29uc3QgbWF4UmV0cmllcyA9IDI7XG4gICAgY29uc3QgZGVsYXlCZXR3ZWVuUmV0cmllcyA9IDMwMDA7XG4gICAgd2hpbGUgKHJldHJpZXMgPCBtYXhSZXRyaWVzKSB7XG4gICAgICBsb2cuaW5mbyhgV2FpdGluZyB1cCB0byAke3RpbWVvdXR9bXMgZm9yIFVpQXV0b21hdG9yMiB0byBiZSBvbmxpbmUuLi5gKTtcbiAgICAgIHRoaXMuandwcm94eS5kaWRJbnN0cnVtZW50YXRpb25FeGl0ID0gZmFsc2U7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0SW5zdHJ1bWVudGF0aW9uUHJvY2VzcygpO1xuICAgICAgaWYgKCF0aGlzLmp3cHJveHkuZGlkSW5zdHJ1bWVudGF0aW9uRXhpdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIHNob3J0IGNpcmN1aXQgdG8gcmV0cnkgb3IgZmFpbCBmYXN0XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmp3cHJveHkuZGlkSW5zdHJ1bWVudGF0aW9uRXhpdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICAgICAgICBpbnRlcnZhbE1zOiAxMDAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoaW4gJHt0aW1lb3V0fW1zIHRpbWVvdXQuIGBcbiAgICAgICAgICAgICsgJ01ha2Ugc3VyZSB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCBkb2VzIG5vdCBjcmFzaCBhbmQgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQuICdcbiAgICAgICAgICAgICsgYFlvdSBjb3VsZCBhbHNvIHRyeSB0byBpbmNyZWFzZSB0aGUgdmFsdWUgb2YgJ3VpYXV0b21hdG9yMlNlcnZlckxhdW5jaFRpbWVvdXQnIGNhcGFiaWxpdHlgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmp3cHJveHkuZGlkSW5zdHJ1bWVudGF0aW9uRXhpdCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0cmllcysrO1xuICAgICAgaWYgKHJldHJpZXMgPj0gbWF4UmV0cmllcykge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygnVGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGNhbm5vdCBiZSBpbml0aWFsaXplZC4gJ1xuICAgICAgICAgICsgJ01ha2Ugc3VyZSB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCBkb2VzIG5vdCBjcmFzaCBhbmQgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQuJyk7XG4gICAgICB9XG4gICAgICBsb2cud2FybihgVGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGhhcyBiZWVuIHVuZXhwZWN0ZWRseSB0ZXJtaW5hdGVkLiBgXG4gICAgICAgICsgYFJldHJ5aW5nIFVpQXV0b21hdG9yMiBzdGFydHVwICgjJHtyZXRyaWVzfSBvZiAke21heFJldHJpZXMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHRoaXMuY2xlYW51cEF1dG9tYXRpb25MZWZ0b3ZlcnModHJ1ZSk7XG4gICAgICBhd2FpdCBCLmRlbGF5KGRlbGF5QmV0d2VlblJldHJpZXMpO1xuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyB0b29rIGBcbiAgICAgICsgYCR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW2NhcHNdLFxuICAgICAgICBhbHdheXNNYXRjaDoge30sXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydEluc3RydW1lbnRhdGlvblByb2Nlc3MgKCkge1xuICAgIGNvbnN0IGNtZCA9IFsnYW0nLCAnaW5zdHJ1bWVudCcsICctdyddO1xuICAgIGlmICh0aGlzLmRpc2FibGVXaW5kb3dBbmltYXRpb24pIHtcbiAgICAgIGNtZC5wdXNoKCctLW5vLXdpbmRvdy1hbmltYXRpb24nKTtcbiAgICB9XG4gICAgaWYgKF8uaXNCb29sZWFuKHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UpKSB7XG4gICAgICBjbWQucHVzaCgnLWUnLCAnRElTQUJMRV9TVVBQUkVTU19BQ0NFU1NJQklMSVRZX1NFUlZJQ0VTJywgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSk7XG4gICAgfVxuICAgIC8vIERpc2FibGUgR29vZ2xlIGFuYWx5dGljcyB0byBwcmV2ZW50IHBvc3NpYmxlIGZhdGFsIGV4Y2VwdGlvblxuICAgIGNtZC5wdXNoKCctZScsICdkaXNhYmxlQW5hbHl0aWNzJywgdHJ1ZSk7XG4gICAgY21kLnB1c2goSU5TVFJVTUVOVEFUSU9OX1RBUkdFVCk7XG4gICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uUHJvY2VzcyA9IHRoaXMuYWRiLmNyZWF0ZVN1YlByb2Nlc3MoWydzaGVsbCcsIC4uLmNtZF0pO1xuICAgIGluc3RydW1lbnRhdGlvblByb2Nlc3Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gXy50cmltKHN0ZG91dCB8fCBzdGRlcnIpO1xuICAgICAgaWYgKG91dHB1dCkge1xuICAgICAgICBpbnN0cnVtZW50YXRpb25Mb2dnZXIuZGVidWcob3V0cHV0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbnN0cnVtZW50YXRpb25Qcm9jZXNzLm9uKCdleGl0JywgKGNvZGUpID0+IHtcbiAgICAgIGluc3RydW1lbnRhdGlvbkxvZ2dlci5kZWJ1ZyhgVGhlIHByb2Nlc3MgaGFzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApO1xuICAgICAgdGhpcy5qd3Byb3h5LmRpZEluc3RydW1lbnRhdGlvbkV4aXQgPSB0cnVlO1xuICAgIH0pO1xuICAgIGF3YWl0IGluc3RydW1lbnRhdGlvblByb2Nlc3Muc3RhcnQoMCk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICBsb2cuZGVidWcoJ0RlbGV0aW5nIFVpQXV0b21hdG9yMiBzZXJ2ZXIgc2Vzc2lvbicpO1xuICAgIC8vIHJlbHkgb24gandwcm94eSdzIGludGVsbGlnZW5jZSB0byBrbm93IHdoYXQgd2UncmUgdGFsa2luZyBhYm91dCBhbmRcbiAgICAvLyBkZWxldGUgdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnLycsICdERUxFVEUnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBEaWQgbm90IGdldCBjb25maXJtYXRpb24gVWlBdXRvbWF0b3IyIGRlbGV0ZVNlc3Npb24gd29ya2VkOyBgICtcbiAgICAgICAgICBgRXJyb3Igd2FzOiAke2Vycn1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjbGVhbnVwQXV0b21hdGlvbkxlZnRvdmVycyAoc3RyaWN0Q2xlYW51cCA9IGZhbHNlKSB7XG4gICAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nICR7c3RyaWN0Q2xlYW51cCA/ICdzdHJpY3QnIDogJ3NoYWxsb3cnfSBjbGVhbnVwIG9mIGF1dG9tYXRpb24gbGVmdG92ZXJzYCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge3ZhbHVlfSA9IChhd2FpdCBheGlvcyh7XG4gICAgICAgIHVybDogYGh0dHA6Ly8ke3RoaXMuaG9zdH06JHt0aGlzLnN5c3RlbVBvcnR9L3dkL2h1Yi9zZXNzaW9uc2AsXG4gICAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICAgIH0pKS5kYXRhO1xuICAgICAgY29uc3QgYWN0aXZlU2Vzc2lvbklkcyA9IHZhbHVlLm1hcCgoe2lkfSkgPT4gaWQpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGlmIChhY3RpdmVTZXNzaW9uSWRzLmxlbmd0aCkge1xuICAgICAgICBsb2cuZGVidWcoYFRoZSBmb2xsb3dpbmcgb2Jzb2xldGUgc2Vzc2lvbnMgYXJlIHN0aWxsIHJ1bm5pbmc6ICR7SlNPTi5zdHJpbmdpZnkoYWN0aXZlU2Vzc2lvbklkcyl9YCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdXAgJHt1dGlsLnBsdXJhbGl6ZSgnb2Jzb2xldGUgc2Vzc2lvbicsIGFjdGl2ZVNlc3Npb25JZHMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICAgICAgYXdhaXQgQi5hbGwoYWN0aXZlU2Vzc2lvbklkc1xuICAgICAgICAgIC5tYXAoKGlkKSA9PiBheGlvcy5kZWxldGUoYGh0dHA6Ly8ke3RoaXMuaG9zdH06JHt0aGlzLnN5c3RlbVBvcnR9L3dkL2h1Yi9zZXNzaW9uLyR7aWR9YCkpXG4gICAgICAgICk7XG4gICAgICAgIC8vIExldCBhbGwgc2Vzc2lvbnMgdG8gYmUgcHJvcGVybHkgdGVybWluYXRlZCBiZWZvcmUgY29udGludWluZ1xuICAgICAgICBhd2FpdCBCLmRlbGF5KDEwMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKCdObyBvYnNvbGV0ZSBzZXNzaW9ucyBoYXZlIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZGVidWcoYE5vIG9ic29sZXRlIHNlc3Npb25zIGhhdmUgYmVlbiBkZXRlY3RlZCAoJHtlLm1lc3NhZ2V9KWApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AoU0VSVkVSX1RFU1RfUEFDS0FHRV9JRCk7XG4gICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuICAgIGlmICghc3RyaWN0Q2xlYW51cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTA3NDlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbFByb2Nlc3Nlc0J5TmFtZSgndWlhdXRvbWF0b3InKTtcbiAgICB9IGNhdGNoIChpZ25vcmUpIHt9XG4gIH1cbn1cblxuZXhwb3J0IHsgVWlBdXRvbWF0b3IyU2VydmVyLCBJTlNUUlVNRU5UQVRJT05fVEFSR0VULCBTRVJWRVJfUEFDS0FHRV9JRCwgU0VSVkVSX1RFU1RfUEFDS0FHRV9JRCB9O1xuZXhwb3J0IGRlZmF1bHQgVWlBdXRvbWF0b3IyU2VydmVyO1xuIl0sImZpbGUiOiJsaWIvdWlhdXRvbWF0b3IyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
391
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91aWF1dG9tYXRvcjIuanMiXSwibmFtZXMiOlsiUkVRRF9QQVJBTVMiLCJTRVJWRVJfTEFVTkNIX1RJTUVPVVQiLCJTRVJWRVJfSU5TVEFMTF9SRVRSSUVTIiwiU0VSVklDRVNfTEFVTkNIX1RJTUVPVVQiLCJTRVJWRVJfUEFDS0FHRV9JRCIsIlNFUlZFUl9URVNUX1BBQ0tBR0VfSUQiLCJJTlNUUlVNRU5UQVRJT05fVEFSR0VUIiwiaW5zdHJ1bWVudGF0aW9uTG9nZ2VyIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiVUlBMlByb3h5IiwiSldQcm94eSIsInByb3h5Q29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJkaWRJbnN0cnVtZW50YXRpb25FeGl0IiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIlVpQXV0b21hdG9yMlNlcnZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInJlcSIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UiLCJwcm94eU9wdHMiLCJzZXJ2ZXIiLCJob3N0IiwicG9ydCIsInN5c3RlbVBvcnQiLCJrZWVwQWxpdmUiLCJyZWFkVGltZW91dCIsInRpbWVvdXQiLCJqd3Byb3h5IiwicHJveHlSZXFSZXMiLCJiaW5kIiwiY29tbWFuZCIsImluc3RhbGxTZXJ2ZXJBcGsiLCJpbnN0YWxsVGltZW91dCIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInBhY2thZ2VJbmZvc01hcHBlciIsImFwcFBhdGgiLCJhcHBJZCIsImhlbHBlcnMiLCJpc1dyaXRlYWJsZSIsImxvZyIsImluZm8iLCJkc3RQYXRoIiwicGF0aCIsInJlc29sdmUiLCJiYXNlbmFtZSIsImZzIiwiY29weUZpbGUiLCJwYWNrYWdlc0luZm8iLCJCIiwiYWxsIiwibWFwIiwiYXBrUGF0aCIsInRlc3RBcGtQYXRoIiwic2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMiLCJzaG91bGRJbnN0YWxsU2VydmVyUGFja2FnZXMiLCJpc0FwcEluc3RhbGxlZCIsImFkYiIsImNoZWNrQXBrQ2VydCIsInNpZ25BcHAiLCJhcHBTdGF0ZSIsImdldEFwcGxpY2F0aW9uSW5zdGFsbFN0YXRlIiwiZGVidWciLCJBUFBfSU5TVEFMTF9TVEFURSIsIk9MREVSX1ZFUlNJT05fSU5TVEFMTEVEIiwiTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJpbmNsdWRlcyIsIk5PVF9JTlNUQUxMRUQiLCJ1bmluc3RhbGxBcGsiLCJlcnIiLCJ3YXJuIiwibWVzc2FnZSIsImluc3RhbGwiLCJub0luY3JlbWVudGFsIiwicmVwbGFjZSIsInRpbWVvdXRDYXBOYW1lIiwicmltcmFmIiwidmVyaWZ5U2VydmljZXNBdmFpbGFiaWxpdHkiLCJpc1BtU2VydmljZUF2YWlsYWJsZSIsInBtT3V0cHV0IiwicG1FcnJvciIsInNoZWxsIiwiZSIsIndhaXRNcyIsImludGVydmFsTXMiLCJlcnJvciIsImxpbmUiLCJzcGxpdCIsInN0YXJ0U2Vzc2lvbiIsImNhcHMiLCJjbGVhbnVwQXV0b21hdGlvbkxlZnRvdmVycyIsInNraXBTZXJ2ZXJJbnN0YWxsYXRpb24iLCJzZXJ2ZXJWZXJzaW9uIiwidWlhdXRvbWF0b3IyU2VydmVyTGF1bmNoVGltZW91dCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInJldHJpZXMiLCJtYXhSZXRyaWVzIiwiZGVsYXlCZXR3ZWVuUmV0cmllcyIsInN0YXJ0SW5zdHJ1bWVudGF0aW9uUHJvY2VzcyIsImVycm9yQW5kVGhyb3ciLCJkZWxheSIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiY2FwYWJpbGl0aWVzIiwiZmlyc3RNYXRjaCIsImFsd2F5c01hdGNoIiwiY21kIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsInB1c2giLCJfIiwiaXNCb29sZWFuIiwiaW5zdHJ1bWVudGF0aW9uUHJvY2VzcyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJvbiIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dCIsInRyaW0iLCJjb2RlIiwiZGVsZXRlU2Vzc2lvbiIsInN0cmljdENsZWFudXAiLCJ2YWx1ZSIsImRhdGEiLCJhY3RpdmVTZXNzaW9uSWRzIiwiaWQiLCJmaWx0ZXIiLCJCb29sZWFuIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsInBsdXJhbGl6ZSIsImF4aW9zIiwiZGVsZXRlIiwiZm9yY2VTdG9wIiwiaWdub3JlIiwia2lsbFByb2Nlc3Nlc0J5TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxXQUFXLEdBQUcsQ0FBQyxLQUFELEVBQVEsUUFBUixFQUFrQixNQUFsQixFQUEwQixZQUExQixFQUF3QyxZQUF4QyxFQUFzRCx3QkFBdEQsQ0FBcEI7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxLQUE5QjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLEVBQS9CO0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsS0FBaEM7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRywrQkFBMUI7O0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUksR0FBRUQsaUJBQWtCLE9BQXBEOztBQUNBLE1BQU1FLHNCQUFzQixHQUFJLEdBQUVELHNCQUF1QiwwQ0FBekQ7OztBQUNBLE1BQU1FLHFCQUFxQixHQUFHQyxzQkFBT0MsU0FBUCxDQUFpQixpQkFBakIsQ0FBOUI7O0FBRUEsTUFBTUMsU0FBTixTQUF3QkMseUJBQXhCLENBQWdDO0FBQ1osUUFBWkMsWUFBWSxDQUFFQyxHQUFGLEVBQU9DLE1BQVAsRUFBZUMsSUFBSSxHQUFHLElBQXRCLEVBQTRCO0FBQzVDLFFBQUksS0FBS0Msc0JBQVQsRUFBaUM7QUFDL0IsWUFBTSxJQUFJQyx5QkFBT0MsbUJBQVgsQ0FDSCxJQUFHSixNQUFPLElBQUdELEdBQUkscURBQWxCLEdBQ0EsaUVBREEsR0FFQSxnRUFISSxDQUFOO0FBSUQ7O0FBQ0Qs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QVNrRixtQkFBVCxDQUE2QixhQUE3QixDQUFOO0FBQ0QsS0FGRCxDQUVFLE9BQU9ELE1BQVAsRUFBZSxDQUFFO0FBQ3BCOztBQTNTc0I7OztlQStTVmhJLGtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEpXUHJveHksIGVycm9ycyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQge1xuICBTRVJWRVJfQVBLX1BBVEggYXMgYXBrUGF0aCxcbiAgVEVTVF9BUEtfUEFUSCBhcyB0ZXN0QXBrUGF0aCxcbiAgdmVyc2lvbiBhcyBzZXJ2ZXJWZXJzaW9uXG59IGZyb20gJ2FwcGl1bS11aWF1dG9tYXRvcjItc2VydmVyJztcbmltcG9ydCB7XG4gIHV0aWwsIGxvZ2dlciwgdGVtcERpciwgZnMsIHRpbWluZ1xufSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5jb25zdCBSRVFEX1BBUkFNUyA9IFsnYWRiJywgJ3RtcERpcicsICdob3N0JywgJ3N5c3RlbVBvcnQnLCAnZGV2aWNlUG9ydCcsICdkaXNhYmxlV2luZG93QW5pbWF0aW9uJ107XG5jb25zdCBTRVJWRVJfTEFVTkNIX1RJTUVPVVQgPSAzMDAwMDtcbmNvbnN0IFNFUlZFUl9JTlNUQUxMX1JFVFJJRVMgPSAyMDtcbmNvbnN0IFNFUlZJQ0VTX0xBVU5DSF9USU1FT1VUID0gMzAwMDA7XG5jb25zdCBTRVJWRVJfUEFDS0FHRV9JRCA9ICdpby5hcHBpdW0udWlhdXRvbWF0b3IyLnNlcnZlcic7XG5jb25zdCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lEID0gYCR7U0VSVkVSX1BBQ0tBR0VfSUR9LnRlc3RgO1xuY29uc3QgSU5TVFJVTUVOVEFUSU9OX1RBUkdFVCA9IGAke1NFUlZFUl9URVNUX1BBQ0tBR0VfSUR9L2FuZHJvaWR4LnRlc3QucnVubmVyLkFuZHJvaWRKVW5pdFJ1bm5lcmA7XG5jb25zdCBpbnN0cnVtZW50YXRpb25Mb2dnZXIgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdJbnN0cnVtZW50YXRpb24nKTtcblxuY2xhc3MgVUlBMlByb3h5IGV4dGVuZHMgSldQcm94eSB7XG4gIGFzeW5jIHByb3h5Q29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMuZGlkSW5zdHJ1bWVudGF0aW9uRXhpdCkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQ29udGV4dEVycm9yKFxuICAgICAgICBgJyR7bWV0aG9kfSAke3VybH0nIGNhbm5vdCBiZSBwcm94aWVkIHRvIFVpQXV0b21hdG9yMiBzZXJ2ZXIgYmVjYXVzZSBgICtcbiAgICAgICAgJ3RoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyBpcyBub3QgcnVubmluZyAocHJvYmFibHkgY3Jhc2hlZCkuICcgK1xuICAgICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgYW5kL29yIHRoZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnByb3h5Q29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cbn1cblxuY2xhc3MgVWlBdXRvbWF0b3IyU2VydmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIGZvciAobGV0IHJlcSBvZiBSRVFEX1BBUkFNUykge1xuICAgICAgaWYgKCFvcHRzIHx8ICF1dGlsLmhhc1ZhbHVlKG9wdHNbcmVxXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcHRpb24gJyR7cmVxfScgaXMgcmVxdWlyZWQhYCk7XG4gICAgICB9XG4gICAgICB0aGlzW3JlcV0gPSBvcHRzW3JlcV07XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UgPSBvcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlO1xuICAgIGNvbnN0IHByb3h5T3B0cyA9IHtcbiAgICAgIHNlcnZlcjogdGhpcy5ob3N0LFxuICAgICAgcG9ydDogdGhpcy5zeXN0ZW1Qb3J0LFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH07XG4gICAgaWYgKG9wdHMucmVhZFRpbWVvdXQgJiYgb3B0cy5yZWFkVGltZW91dCA+IDApIHtcbiAgICAgIHByb3h5T3B0cy50aW1lb3V0ID0gb3B0cy5yZWFkVGltZW91dDtcbiAgICB9XG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IFVJQTJQcm94eShwcm94eU9wdHMpO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5qd3Byb3h5LmNvbW1hbmQuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMuandwcm94eS5kaWRJbnN0cnVtZW50YXRpb25FeGl0ID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbHMgdGhlIGFwa3Mgb24gdG8gdGhlIGRldmljZSBvciBlbXVsYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluc3RhbGxUaW1lb3V0IC0gSW5zdGFsbGF0aW9uIHRpbWVvdXRcbiAgICovXG4gIGFzeW5jIGluc3RhbGxTZXJ2ZXJBcGsgKGluc3RhbGxUaW1lb3V0ID0gU0VSVkVSX0lOU1RBTExfUkVUUklFUyAqIDEwMDApIHtcbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgY29uc3QgcGFja2FnZUluZm9zTWFwcGVyID0gYXN5bmMgKHthcHBQYXRoLCBhcHBJZH0pID0+IHtcbiAgICAgIGlmIChhd2FpdCBoZWxwZXJzLmlzV3JpdGVhYmxlKGFwcFBhdGgpKSB7XG4gICAgICAgIHJldHVybiB7IGFwcFBhdGgsIGFwcElkIH07XG4gICAgICB9XG5cbiAgICAgIGxvZy5pbmZvKGBTZXJ2ZXIgcGFja2FnZSBhdCAnJHthcHBQYXRofScgaXMgbm90IHdyaXRlYWJsZS4gYCArXG4gICAgICAgIGBXaWxsIGNvcHkgaXQgaW50byB0aGUgdGVtcG9yYXJ5IGxvY2F0aW9uIGF0ICcke3RtcFJvb3R9JyBhcyBhIHdvcmthcm91bmQuIGAgK1xuICAgICAgICBgQ29uc2lkZXIgbWFraW5nIHRoaXMgZmlsZSB3cml0ZWFibGUgbWFudWFsbHkgaW4gb3JkZXIgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygc2Vzc2lvbiBzdGFydHVwLmApO1xuICAgICAgY29uc3QgZHN0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCBwYXRoLmJhc2VuYW1lKGFwcFBhdGgpKTtcbiAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKGFwcFBhdGgsIGRzdFBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXBwUGF0aDogZHN0UGF0aCxcbiAgICAgICAgYXBwSWQsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFja2FnZXNJbmZvID0gYXdhaXQgQi5hbGwoQi5tYXAoW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwUGF0aDogYXBrUGF0aCxcbiAgICAgICAgICBhcHBJZDogU0VSVkVSX1BBQ0tBR0VfSUQsXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBhcHBQYXRoOiB0ZXN0QXBrUGF0aCxcbiAgICAgICAgICBhcHBJZDogU0VSVkVSX1RFU1RfUEFDS0FHRV9JRCxcbiAgICAgICAgfSxcbiAgICAgIF0sIHBhY2thZ2VJbmZvc01hcHBlcikpO1xuXG4gICAgICBsZXQgc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMgPSBmYWxzZTtcbiAgICAgIGxldCBzaG91bGRJbnN0YWxsU2VydmVyUGFja2FnZXMgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3Qge2FwcElkLCBhcHBQYXRofSBvZiBwYWNrYWdlc0luZm8pIHtcbiAgICAgICAgaWYgKGFwcElkID09PSBTRVJWRVJfVEVTVF9QQUNLQUdFX0lEKSB7XG4gICAgICAgICAgY29uc3QgaXNBcHBJbnN0YWxsZWQgPSBhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZChhcHBJZCk7XG5cbiAgICAgICAgICAvLyBUaGVyZSBpcyBubyBwb2ludCBpbiBnZXR0aW5nIHRoZSBzdGF0ZSBmb3IgdGVzdCBzZXJ2ZXIsXG4gICAgICAgICAgLy8gc2luY2UgaXQgZG9lcyBub3QgY29udGFpbiB2ZXJzaW9uIGluZm9cbiAgICAgICAgICBpZiAoIWF3YWl0IHRoaXMuYWRiLmNoZWNrQXBrQ2VydChhcHBQYXRoLCBhcHBJZCkpIHtcbiAgICAgICAgICAgIGF3YWl0IGhlbHBlcnMuc2lnbkFwcCh0aGlzLmFkYiwgYXBwUGF0aCk7XG4gICAgICAgICAgICBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzIHx8IGlzQXBwSW5zdGFsbGVkO1xuICAgICAgICAgICAgc2hvdWxkSW5zdGFsbFNlcnZlclBhY2thZ2VzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWlzQXBwSW5zdGFsbGVkKSB7XG4gICAgICAgICAgICBzaG91bGRJbnN0YWxsU2VydmVyUGFja2FnZXMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUoYXBwUGF0aCwgYXBwSWQpO1xuICAgICAgICBsb2cuZGVidWcoYCR7YXBwSWR9IGluc3RhbGxhdGlvbiBzdGF0ZTogJHthcHBTdGF0ZX1gKTtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmNoZWNrQXBrQ2VydChhcHBQYXRoLCBhcHBJZCkpIHtcbiAgICAgICAgICBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzIHx8IFtcbiAgICAgICAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk9MREVSX1ZFUlNJT05fSU5TVEFMTEVELFxuICAgICAgICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQsXG4gICAgICAgICAgXS5pbmNsdWRlcyhhcHBTdGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgaGVscGVycy5zaWduQXBwKHRoaXMuYWRiLCBhcHBQYXRoKTtcbiAgICAgICAgICBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzIHx8ICFbXG4gICAgICAgICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVELFxuICAgICAgICAgIF0uaW5jbHVkZXMoYXBwU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyB8fCBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyB8fCBbXG4gICAgICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuTk9UX0lOU1RBTExFRCxcbiAgICAgICAgXS5pbmNsdWRlcyhhcHBTdGF0ZSk7XG4gICAgICB9XG4gICAgICBsb2cuaW5mbyhgU2VydmVyIHBhY2thZ2VzIGFyZSAke3Nob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA/ICcnIDogJ25vdCAnfWdvaW5nIHRvIGJlIChyZSlpbnN0YWxsZWRgKTtcbiAgICAgIGlmIChzaG91bGRJbnN0YWxsU2VydmVyUGFja2FnZXMgJiYgc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMpIHtcbiAgICAgICAgbG9nLmluZm8oJ0Z1bGwgcGFja2FnZXMgcmVpbnN0YWxsIGlzIGdvaW5nIHRvIGJlIHBlcmZvcm1lZCcpO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCB7YXBwSWQsIGFwcFBhdGh9IG9mIHBhY2thZ2VzSW5mbykge1xuICAgICAgICBpZiAoc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKGFwcElkKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKGBFcnJvciB1bmluc3RhbGxpbmcgJyR7YXBwSWR9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcykge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmluc3RhbGwoYXBwUGF0aCwge1xuICAgICAgICAgICAgbm9JbmNyZW1lbnRhbDogdHJ1ZSxcbiAgICAgICAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgICAgICAgICB0aW1lb3V0OiBpbnN0YWxsVGltZW91dCxcbiAgICAgICAgICAgIHRpbWVvdXRDYXBOYW1lOiAndWlhdXRvbWF0b3IyU2VydmVySW5zdGFsbFRpbWVvdXQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMudmVyaWZ5U2VydmljZXNBdmFpbGFiaWxpdHkoKTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVNlcnZpY2VzQXZhaWxhYmlsaXR5ICgpIHtcbiAgICBsb2cuZGVidWcoYFdhaXRpbmcgdXAgdG8gJHtTRVJWSUNFU19MQVVOQ0hfVElNRU9VVH1tcyBmb3Igc2VydmljZXMgdG8gYmUgYXZhaWxhYmxlYCk7XG4gICAgbGV0IGlzUG1TZXJ2aWNlQXZhaWxhYmxlID0gZmFsc2U7XG4gICAgbGV0IHBtT3V0cHV0ID0gJyc7XG4gICAgbGV0IHBtRXJyb3IgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCFpc1BtU2VydmljZUF2YWlsYWJsZSkge1xuICAgICAgICAgIHBtRXJyb3IgPSBudWxsO1xuICAgICAgICAgIHBtT3V0cHV0ID0gJyc7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBtT3V0cHV0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydwbScsICdsaXN0JywgJ2luc3RydW1lbnRhdGlvbiddKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBwbUVycm9yID0gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBtT3V0cHV0LmluY2x1ZGVzKCdDb3VsZCBub3QgYWNjZXNzIHRoZSBQYWNrYWdlIE1hbmFnZXInKSkge1xuICAgICAgICAgICAgcG1FcnJvciA9IG5ldyBFcnJvcihgUHJvYmxlbSBydW5uaW5nIFBhY2thZ2UgTWFuYWdlcjogJHtwbU91dHB1dH1gKTtcbiAgICAgICAgICAgIHBtT3V0cHV0ID0gJyc7IC8vIHJlbW92ZSBvdXRwdXQsIHNvIGl0IGlzIG5vdCBwcmludGVkIGJlbG93XG4gICAgICAgICAgfSBlbHNlIGlmIChwbU91dHB1dC5pbmNsdWRlcyhJTlNUUlVNRU5UQVRJT05fVEFSR0VUKSkge1xuICAgICAgICAgICAgcG1PdXRwdXQgPSAnJzsgLy8gcmVtb3ZlIG91dHB1dCwgc28gaXQgaXMgbm90IHByaW50ZWQgYmVsb3dcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgSW5zdHJ1bWVudGF0aW9uIHRhcmdldCAnJHtJTlNUUlVNRU5UQVRJT05fVEFSR0VUfScgaXMgYXZhaWxhYmxlYCk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlc1xuICAgICAgICAgICAgaXNQbVNlcnZpY2VBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXBtRXJyb3IpIHtcbiAgICAgICAgICAgIHBtRXJyb3IgPSBuZXcgRXJyb3IoJ1RoZSBpbnN0cnVtZW50YXRpb24gdGFyZ2V0IGlzIG5vdCBsaXN0ZWQgYnkgUGFja2FnZSBNYW5hZ2VyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1BtU2VydmljZUF2YWlsYWJsZTtcbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiBTRVJWSUNFU19MQVVOQ0hfVElNRU9VVCxcbiAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yKGBVbmFibGUgdG8gZmluZCBpbnN0cnVtZW50YXRpb24gdGFyZ2V0ICcke0lOU1RSVU1FTlRBVElPTl9UQVJHRVR9JzogJHsocG1FcnJvciB8fCB7fSkubWVzc2FnZX1gKTtcbiAgICAgIGlmIChwbU91dHB1dCkge1xuICAgICAgICBsb2cuZGVidWcoJ0F2YWlsYWJsZSB0YXJnZXRzOicpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgcG1PdXRwdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGAgICAgJHtsaW5lLnJlcGxhY2UoJ2luc3RydW1lbnRhdGlvbjonLCAnJyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFNlc3Npb24gKGNhcHMpIHtcbiAgICBhd2FpdCB0aGlzLmNsZWFudXBBdXRvbWF0aW9uTGVmdG92ZXJzKCk7XG4gICAgaWYgKGNhcHMuc2tpcFNlcnZlckluc3RhbGxhdGlvbikge1xuICAgICAgbG9nLmluZm8oYCdza2lwU2VydmVySW5zdGFsbGF0aW9uJyBpcyBzZXQuIEF0dGVtcHRpbmcgdG8gdXNlIFVJQXV0b21hdG9yMiBzZXJ2ZXIgZnJvbSB0aGUgZGV2aWNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5pbmZvKGBTdGFydGluZyBVSUF1dG9tYXRvcjIgc2VydmVyICR7c2VydmVyVmVyc2lvbn1gKTtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyBVSUF1dG9tYXRvcjIgc2VydmVyIGZyb20gJyR7YXBrUGF0aH0nIGFuZCB0ZXN0IGZyb20gJyR7dGVzdEFwa1BhdGh9J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXQgPSBjYXBzLnVpYXV0b21hdG9yMlNlcnZlckxhdW5jaFRpbWVvdXQgfHwgU0VSVkVSX0xBVU5DSF9USU1FT1VUO1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgbGV0IHJldHJpZXMgPSAwO1xuICAgIGNvbnN0IG1heFJldHJpZXMgPSAyO1xuICAgIGNvbnN0IGRlbGF5QmV0d2VlblJldHJpZXMgPSAzMDAwO1xuICAgIHdoaWxlIChyZXRyaWVzIDwgbWF4UmV0cmllcykge1xuICAgICAgbG9nLmluZm8oYFdhaXRpbmcgdXAgdG8gJHt0aW1lb3V0fW1zIGZvciBVaUF1dG9tYXRvcjIgdG8gYmUgb25saW5lLi4uYCk7XG4gICAgICB0aGlzLmp3cHJveHkuZGlkSW5zdHJ1bWVudGF0aW9uRXhpdCA9IGZhbHNlO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydEluc3RydW1lbnRhdGlvblByb2Nlc3MoKTtcbiAgICAgIGlmICghdGhpcy5qd3Byb3h5LmRpZEluc3RydW1lbnRhdGlvbkV4aXQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAvLyBzaG9ydCBjaXJjdWl0IHRvIHJldHJ5IG9yIGZhaWwgZmFzdFxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5qd3Byb3h5LmRpZEluc3RydW1lbnRhdGlvbkV4aXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgd2FpdE1zOiB0aW1lb3V0LFxuICAgICAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aGluICR7dGltZW91dH1tcyB0aW1lb3V0LiBgXG4gICAgICAgICAgICArICdNYWtlIHN1cmUgdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QgZG9lcyBub3QgY3Jhc2ggYW5kIGludmVzdGlnYXRlIHRoZSBsb2djYXQgb3V0cHV0LiAnXG4gICAgICAgICAgICArIGBZb3UgY291bGQgYWxzbyB0cnkgdG8gaW5jcmVhc2UgdGhlIHZhbHVlIG9mICd1aWF1dG9tYXRvcjJTZXJ2ZXJMYXVuY2hUaW1lb3V0JyBjYXBhYmlsaXR5YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5qd3Byb3h5LmRpZEluc3RydW1lbnRhdGlvbkV4aXQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHJpZXMrKztcbiAgICAgIGlmIChyZXRyaWVzID49IG1heFJldHJpZXMpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ1RoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQuICdcbiAgICAgICAgICArICdNYWtlIHN1cmUgdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QgZG9lcyBub3QgY3Jhc2ggYW5kIGludmVzdGlnYXRlIHRoZSBsb2djYXQgb3V0cHV0LicpO1xuICAgICAgfVxuICAgICAgbG9nLndhcm4oYFRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyBoYXMgYmVlbiB1bmV4cGVjdGVkbHkgdGVybWluYXRlZC4gYFxuICAgICAgICArIGBSZXRyeWluZyBVaUF1dG9tYXRvcjIgc3RhcnR1cCAoIyR7cmV0cmllc30gb2YgJHttYXhSZXRyaWVzIC0gMX0pYCk7XG4gICAgICBhd2FpdCB0aGlzLmNsZWFudXBBdXRvbWF0aW9uTGVmdG92ZXJzKHRydWUpO1xuICAgICAgYXdhaXQgQi5kZWxheShkZWxheUJldHdlZW5SZXRyaWVzKTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW5zdHJ1bWVudGF0aW9uIHByb2Nlc3MgdG9vayBgXG4gICAgICArIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFtjYXBzXSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHt9LFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRJbnN0cnVtZW50YXRpb25Qcm9jZXNzICgpIHtcbiAgICBjb25zdCBjbWQgPSBbJ2FtJywgJ2luc3RydW1lbnQnLCAnLXcnXTtcbiAgICBpZiAodGhpcy5kaXNhYmxlV2luZG93QW5pbWF0aW9uKSB7XG4gICAgICBjbWQucHVzaCgnLS1uby13aW5kb3ctYW5pbWF0aW9uJyk7XG4gICAgfVxuICAgIGlmIChfLmlzQm9vbGVhbih0aGlzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlKSkge1xuICAgICAgY21kLnB1c2goJy1lJywgJ0RJU0FCTEVfU1VQUFJFU1NfQUNDRVNTSUJJTElUWV9TRVJWSUNFUycsIHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UpO1xuICAgIH1cbiAgICAvLyBEaXNhYmxlIEdvb2dsZSBhbmFseXRpY3MgdG8gcHJldmVudCBwb3NzaWJsZSBmYXRhbCBleGNlcHRpb25cbiAgICBjbWQucHVzaCgnLWUnLCAnZGlzYWJsZUFuYWx5dGljcycsIHRydWUpO1xuICAgIGNtZC5wdXNoKElOU1RSVU1FTlRBVElPTl9UQVJHRVQpO1xuICAgIGNvbnN0IGluc3RydW1lbnRhdGlvblByb2Nlc3MgPSB0aGlzLmFkYi5jcmVhdGVTdWJQcm9jZXNzKFsnc2hlbGwnLCAuLi5jbWRdKTtcbiAgICBpbnN0cnVtZW50YXRpb25Qcm9jZXNzLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IF8udHJpbShzdGRvdXQgfHwgc3RkZXJyKTtcbiAgICAgIGlmIChvdXRwdXQpIHtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9uTG9nZ2VyLmRlYnVnKG91dHB1dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaW5zdHJ1bWVudGF0aW9uUHJvY2Vzcy5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICBpbnN0cnVtZW50YXRpb25Mb2dnZXIuZGVidWcoYFRoZSBwcm9jZXNzIGhhcyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKTtcbiAgICAgIHRoaXMuandwcm94eS5kaWRJbnN0cnVtZW50YXRpb25FeGl0ID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhd2FpdCBpbnN0cnVtZW50YXRpb25Qcm9jZXNzLnN0YXJ0KDApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgbG9nLmRlYnVnKCdEZWxldGluZyBVaUF1dG9tYXRvcjIgc2VydmVyIHNlc3Npb24nKTtcbiAgICAvLyByZWx5IG9uIGp3cHJveHkncyBpbnRlbGxpZ2VuY2UgdG8ga25vdyB3aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgYW5kXG4gICAgLy8gZGVsZXRlIHRoZSBjdXJyZW50IHNlc3Npb25cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy8nLCAnREVMRVRFJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgRGlkIG5vdCBnZXQgY29uZmlybWF0aW9uIFVpQXV0b21hdG9yMiBkZWxldGVTZXNzaW9uIHdvcmtlZDsgYCArXG4gICAgICAgICAgYEVycm9yIHdhczogJHtlcnJ9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2xlYW51cEF1dG9tYXRpb25MZWZ0b3ZlcnMgKHN0cmljdENsZWFudXAgPSBmYWxzZSkge1xuICAgIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyAke3N0cmljdENsZWFudXAgPyAnc3RyaWN0JyA6ICdzaGFsbG93J30gY2xlYW51cCBvZiBhdXRvbWF0aW9uIGxlZnRvdmVyc2ApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICB1cmw6IGBodHRwOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5zeXN0ZW1Qb3J0fS93ZC9odWIvc2Vzc2lvbnNgLFxuICAgICAgICB0aW1lb3V0OiA1MDAsXG4gICAgICB9KSkuZGF0YTtcbiAgICAgIGNvbnN0IGFjdGl2ZVNlc3Npb25JZHMgPSB2YWx1ZS5tYXAoKHtpZH0pID0+IGlkKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBpZiAoYWN0aXZlU2Vzc2lvbklkcy5sZW5ndGgpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGUgZm9sbG93aW5nIG9ic29sZXRlIHNlc3Npb25zIGFyZSBzdGlsbCBydW5uaW5nOiAke0pTT04uc3RyaW5naWZ5KGFjdGl2ZVNlc3Npb25JZHMpfWApO1xuICAgICAgICBsb2cuZGVidWcoYENsZWFuaW5nIHVwICR7dXRpbC5wbHVyYWxpemUoJ29ic29sZXRlIHNlc3Npb24nLCBhY3RpdmVTZXNzaW9uSWRzLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgICAgIGF3YWl0IEIuYWxsKGFjdGl2ZVNlc3Npb25JZHNcbiAgICAgICAgICAubWFwKChpZCkgPT4gYXhpb3MuZGVsZXRlKGBodHRwOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5zeXN0ZW1Qb3J0fS93ZC9odWIvc2Vzc2lvbi8ke2lkfWApKVxuICAgICAgICApO1xuICAgICAgICAvLyBMZXQgYWxsIHNlc3Npb25zIHRvIGJlIHByb3Blcmx5IHRlcm1pbmF0ZWQgYmVmb3JlIGNvbnRpbnVpbmdcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnTm8gb2Jzb2xldGUgc2Vzc2lvbnMgaGF2ZSBiZWVuIGRldGVjdGVkJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGBObyBvYnNvbGV0ZSBzZXNzaW9ucyBoYXZlIGJlZW4gZGV0ZWN0ZWQgKCR7ZS5tZXNzYWdlfSlgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQpO1xuICAgIH0gY2F0Y2ggKGlnbm9yZSkge31cbiAgICBpZiAoIXN0cmljdENsZWFudXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzEwNzQ5XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxQcm9jZXNzZXNCeU5hbWUoJ3VpYXV0b21hdG9yJyk7XG4gICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuICB9XG59XG5cbmV4cG9ydCB7IFVpQXV0b21hdG9yMlNlcnZlciwgSU5TVFJVTUVOVEFUSU9OX1RBUkdFVCwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQgfTtcbmV4cG9ydCBkZWZhdWx0IFVpQXV0b21hdG9yMlNlcnZlcjtcbiJdLCJmaWxlIjoibGliL3VpYXV0b21hdG9yMi5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|