appium-espresso-driver 2.3.0 → 2.6.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 +2 -1
- package/build/index.js +10 -38
- package/build/lib/commands/execute.js +3 -3
- package/build/lib/commands/general.js +9 -9
- package/build/lib/driver.js +7 -7
- package/build/lib/espresso-runner.js +5 -5
- package/build/lib/logger.js +2 -2
- package/build/lib/server-builder.js +3 -3
- package/build/lib/utils.js +2 -2
- package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
- package/espresso-server/app/build.gradle.kts +12 -2
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetEnabled.kt +8 -6
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocation.kt +9 -4
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocationInView.kt +3 -6
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetName.kt +9 -4
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSelected.kt +6 -3
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSize.kt +9 -4
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Text.kt +0 -1
- package/index.js +2 -26
- package/lib/commands/execute.js +1 -1
- package/lib/commands/general.js +2 -2
- package/lib/driver.js +2 -2
- package/lib/espresso-runner.js +2 -2
- package/lib/logger.js +1 -1
- package/lib/server-builder.js +3 -2
- package/lib/utils.js +1 -1
- package/package.json +6 -3
- package/build/lib/server.js +0 -39
- package/lib/server.js +0 -18
- package/npm-shrinkwrap.json +0 -37959
package/build/lib/driver.js
CHANGED
|
@@ -13,11 +13,11 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
13
13
|
|
|
14
14
|
var _path = _interopRequireDefault(require("path"));
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _driver = require("appium/driver");
|
|
17
17
|
|
|
18
18
|
var _espressoRunner = require("./espresso-runner");
|
|
19
19
|
|
|
20
|
-
var _support = require("
|
|
20
|
+
var _support = require("appium/support");
|
|
21
21
|
|
|
22
22
|
var _commands = _interopRequireDefault(require("./commands"));
|
|
23
23
|
|
|
@@ -44,7 +44,7 @@ const APK_EXT = '.apk';
|
|
|
44
44
|
const AAB_EXT = '.aab';
|
|
45
45
|
const SUPPORTED_EXTENSIONS = [APK_EXT, AAB_EXT];
|
|
46
46
|
|
|
47
|
-
class EspressoDriver extends
|
|
47
|
+
class EspressoDriver extends _driver.BaseDriver {
|
|
48
48
|
constructor(opts = {}, shouldValidateCaps = true) {
|
|
49
49
|
delete opts.shell;
|
|
50
50
|
super(opts, shouldValidateCaps);
|
|
@@ -55,7 +55,7 @@ class EspressoDriver extends _baseDriver.BaseDriver {
|
|
|
55
55
|
this.defaultIME = null;
|
|
56
56
|
this.jwpProxyAvoid = NO_PROXY;
|
|
57
57
|
this.apkStrings = {};
|
|
58
|
-
this.settings = new
|
|
58
|
+
this.settings = new _driver.DeviceSettings({}, this.onSettingsUpdate.bind(this));
|
|
59
59
|
this.chromedriver = null;
|
|
60
60
|
this.sessionChromedrivers = {};
|
|
61
61
|
}
|
|
@@ -128,11 +128,11 @@ class EspressoDriver extends _baseDriver.BaseDriver {
|
|
|
128
128
|
await this.deleteSession();
|
|
129
129
|
e.message += `${_lodash.default.endsWith(e.message, '.') ? '' : '.'} Check ` + 'https://github.com/appium/appium-espresso-driver#troubleshooting ' + 'regarding advanced session startup troubleshooting.';
|
|
130
130
|
|
|
131
|
-
if ((0,
|
|
131
|
+
if ((0, _driver.isErrorType)(e, _driver.errors.SessionNotCreatedError)) {
|
|
132
132
|
throw e;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
const err = new
|
|
135
|
+
const err = new _driver.errors.SessionNotCreatedError(e.message);
|
|
136
136
|
err.stack = e.stack;
|
|
137
137
|
throw err;
|
|
138
138
|
}
|
|
@@ -546,4 +546,4 @@ var _default = EspressoDriver;
|
|
|
546
546
|
exports.default = _default;require('source-map-support').install();
|
|
547
547
|
|
|
548
548
|
|
|
549
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbImhlbHBlcnMiLCJhbmRyb2lkSGVscGVycyIsIlNZU1RFTV9QT1JUX1JBTkdFIiwiREVWSUNFX1BPUlQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkNIUk9NRV9OT19QUk9YWSIsIkFQS19FWFQiLCJBQUJfRVhUIiwiU1VQUE9SVEVEX0VYVEVOU0lPTlMiLCJFc3ByZXNzb0RyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzaGVsbCIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiZXNwcmVzc28iLCJqd3BQcm94eUFjdGl2ZSIsImRlZmF1bHRJTUUiLCJqd3BQcm94eUF2b2lkIiwiYXBrU3RyaW5ncyIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZGVmYXVsdE9wdHMiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJfIiwiZGVmYXVsdHMiLCJpc0Nocm9tZVNlc3Npb24iLCJhcHAiLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJhZGRXaXBlRGF0YVRvQXZkQXJncyIsInN5c3RlbVBvcnQiLCJmaW5kQVBvcnROb3RJblVzZSIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJhZGIiLCJjcmVhdGVBREIiLCJjb25maWd1cmVBcHAiLCJvblBvc3RQcm9jZXNzIiwib25Qb3N0Q29uZmlndXJlQXBwIiwic3VwcG9ydGVkRXh0ZW5zaW9ucyIsImFwcE9uRGV2aWNlIiwiaW5mbyIsImFwcFBhY2thZ2UiLCJpc0FwcEluc3RhbGxlZCIsInN0YXJ0RXNwcmVzc29TZXNzaW9uIiwiZSIsImRlbGV0ZVNlc3Npb24iLCJtZXNzYWdlIiwiZW5kc1dpdGgiLCJpc0Vycm9yVHlwZSIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJlcnIiLCJzdGFjayIsInVuemlwQXBwIiwiYXBwUGF0aCIsInVzZVN5c3RlbVVuemlwRW52IiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQIiwidXNlU3lzdGVtVW56aXAiLCJpc0VtcHR5IiwiaW5jbHVkZXMiLCJ0b0xvd2VyIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiZ2xvYlBhdHRlcm4iLCJtYXAiLCJleHQiLCJyZXBsYWNlIiwiam9pbiIsInNvcnRlZEJ1bmRsZUl0ZW1zIiwiZnMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwic29ydCIsImEiLCJiIiwic3BsaXQiLCJwYXRoIiwic2VwIiwibGVuZ3RoIiwidW56aXBwZWRBcHBQYXRoIiwiZmlyc3QiLCJkZWJ1ZyIsImNhY2hlZEFwcEluZm8iLCJpc1VybCIsInByZXNpZ25BcHAiLCJhcHBMb2NhdGlvbiIsIm5vU2lnbiIsImNoZWNrQXBrQ2VydCIsInNpZ24iLCJoYXNBcGtFeHQiLCJoYXNBYWJFeHQiLCJleHRyYWN0VW5pdmVyc2FsQXBrIiwic2hvdWxkRXh0cmFjdCIsInBhdGhJbkNhY2hlIiwiaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCIsImlzUGxhaW5PYmplY3QiLCJwYWNrYWdlSGFzaCIsImhhc2giLCJleGlzdHMiLCJmdWxsUGF0aCIsImlzQXBrIiwic2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkIiwiaXNVbnppcHBlZEFwayIsInJpbXJhZiIsImRyaXZlckRhdGEiLCJpc0VtdWxhdG9yIiwiYXZkIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsImF2ZEFyZ3MiLCJ0b0xvd2VyQ2FzZSIsInZlcnNpb24iLCJnZXRBcGlMZXZlbCIsInNldEhpZGRlbkFwaVBvbGljeSIsImlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJpbml0RGV2aWNlIiwiaXNBbmltYXRpb25PbiIsInNldEFuaW1hdGlvblN0YXRlIiwid2FzQW5pbWF0aW9uRW5hYmxlZCIsImN1ckRldmljZUlkIiwiZGV2aWNlVURJRCIsImluaXRFc3ByZXNzb1NlcnZlciIsImZvcndhcmRQb3J0Iiwic2tpcFVubG9jayIsInVubG9jayIsImluaXRBVVQiLCJhcHBXYWl0UGFja2FnZSIsImFwcEFjdGl2aXR5IiwicXVhbGlmeUFjdGl2aXR5TmFtZSIsImFwcFdhaXRBY3Rpdml0eSIsInN0YXJ0U2Vzc2lvbiIsIndhaXRGb3JBY3Rpdml0eSIsImFwcFdhaXREdXJhdGlvbiIsImF1dG9XZWJ2aWV3IiwiaW5pdFdlYnZpZXciLCJhZGREZXZpY2VJbmZvVG9DYXBzIiwidmlld05hbWUiLCJhbmRyb2lkQ29tbWFuZHMiLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjYWxsIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwiYXBpVmVyc2lvbiIsIm1hbnVmYWN0dXJlciIsIm1vZGVsIiwicmVhbERpc3BsYXlTaXplIiwiZGlzcGxheURlbnNpdHkiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwiZGV2aWNlQXBpTGV2ZWwiLCJwYXJzZUludCIsImRldmljZVNjcmVlblNpemUiLCJkZXZpY2VTY3JlZW5EZW5zaXR5IiwiZGV2aWNlTW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJFc3ByZXNzb1J1bm5lciIsImhvc3QiLCJyZW1vdGVBZGJIb3N0IiwiZGV2aWNlUG9ydCIsImFwayIsInRtcERpciIsImZvcmNlRXNwcmVzc29SZWJ1aWxkIiwiZXNwcmVzc29CdWlsZENvbmZpZyIsInNob3dHcmFkbGVMb2ciLCJzZXJ2ZXJMYXVuY2hUaW1lb3V0IiwiZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0Iiwic2tpcFNlcnZlckluc3RhbGxhdGlvbiIsInVzZUtleXN0b3JlIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInByb3h5UmVxUmVzIiwicHJveHlDb21tYW5kIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiVEVTVF9BUEtfUEtHIiwiZmFzdFJlc2V0IiwicmVzZXRBcHAiLCJza2lwVW5pbnN0YWxsIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbEFwayIsImluc3RhbGxUZXN0QXBrIiwiYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0Iiwic3RkZXJyIiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwiaWduIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3kiLCJ1bmRlZmluZWQiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsImVycm9yIiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNOaWwiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJpc1BhY2thZ2VPckJ1bmRsZSIsImNtZCIsImZuIiwidG9QYWlycyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyLCBlcnJvcnMsIGlzRXJyb3JUeXBlLCBEZXZpY2VTZXR0aW5nc30gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBFc3ByZXNzb1J1bm5lciwgVEVTVF9BUEtfUEtHIH0gZnJvbSAnLi9lc3ByZXNzby1ydW5uZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHppcCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgeyBERUZBVUxUX0FEQl9QT1JUIH0gZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQgeyBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lEIH0gZnJvbSAnYXBwaXVtLWFuZHJvaWQtZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHF1YWxpZnlBY3Rpdml0eU5hbWUgfSBmcm9tICcuL3V0aWxzJztcblxuXG4vLyBUT0RPIG1lcmdlIG91ciBvd24gaGVscGVycyBvbnRvIHRoaXMgbGF0ZXJcbmNvbnN0IGhlbHBlcnMgPSBhbmRyb2lkSGVscGVycztcblxuLy8gVGhlIHJhbmdlIG9mIHBvcnRzIHdlIGNhbiB1c2Ugb24gdGhlIHN5c3RlbSBmb3IgY29tbXVuaWNhdGluZyB0byB0aGVcbi8vIEVzcHJlc3NvIEhUVFAgc2VydmVyIG9uIHRoZSBkZXZpY2VcbmNvbnN0IFNZU1RFTV9QT1JUX1JBTkdFID0gWzgzMDAsIDgzOTldO1xuXG4vLyBUaGlzIGlzIHRoZSBwb3J0IHRoYXQgdGhlIGVzcHJlc3NvIHNlcnZlciBsaXN0ZW5zIHRvIG9uIHRoZSBkZXZpY2UuIFdlIHdpbGxcbi8vIGZvcndhcmQgb25lIG9mIHRoZSBwb3J0cyBhYm92ZSBvbiB0aGUgc3lzdGVtIHRvIHRoaXMgcG9ydCBvbiB0aGUgZGV2aWNlLlxuY29uc3QgREVWSUNFX1BPUlQgPSA2NzkxO1xuXG4vLyBOT19QUk9YWSBjb250YWlucyB0aGUgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIGVzcHJlc3NvIHNlcnZlci5cbi8vIFRPRE86ICBBZGQgdGhlIGxpc3Qgb2YgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIGVzcHJlc3NvIHNlcnZlci5cbi8vIFRPRE86IE5lZWQgdG8gc2VncmVnYXRlIHRoZSBwYXRocyBiZXR0ZXIgd2F5IHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hlcmV2ZXIgYXBwbGljYWJsZS5cbi8vIChOb3Qgc2VncmVnYXRpbmcgcmlnaHQgYXdheSBiZWNhdXNlIG1vcmUgcGF0aHMgdG8gYmUgYWRkZWQgaW4gdGhlIE5PX1BST1hZIGxpc3QpXG5jb25zdCBOT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vKD8hLiovKScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9jdXJyZW50X2FjdGl2aXR5JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2N1cnJlbnRfcGFja2FnZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvaXNfa2V5Ym9hcmRfc2hvd24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2Uvc3lzdGVtX2JhcnMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2Uvc3lzdGVtX3RpbWUnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dHMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9iYWNrZ3JvdW5kJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9jbG9zZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvbGF1bmNoJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9yZXNldCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvc3RyaW5ncycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9jb21wYXJlX2ltYWdlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvYWN0aXZhdGVfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9hcHBfaW5zdGFsbGVkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9hcHBfc3RhdGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2Zpbmdlcl9wcmludCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvaW5zdGFsbF9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2lzX2xvY2tlZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvbG9jaycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcHVsbF9maWxlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9wdWxsX2ZvbGRlcicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcHVzaF9maWxlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9yZW1vdmVfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvdGVybWluYXRlX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvdW5sb2NrJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2dldFBlcmZvcm1hbmNlRGF0YScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9wZXJmb3JtYW5jZURhdGEvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZXhlY3V0ZV9kcml2ZXInKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RhcnRfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdG9wX3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvYXN5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlX2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9jYXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZycpXSxcblxuICAvLyBXM0MgY29tbWFuZHNcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cvdHlwZXMnKV0sXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZycpXSxcbl07XG5cbi8vIFRoaXMgaXMgYSBzZXQgb2YgbWV0aG9kcyBhbmQgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIENocm9tZWRyaXZlci5cbmNvbnN0IENIUk9NRV9OT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3JlY3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL3BlcmZvcm0nKV0sXG5cbiAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgbW9iaWxlOiBjb21tYW5kcyB3b3JraW5nIGluIHdlYiBjb250ZXh0XG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZycpXSxcblxuICAvLyBXM0MgY29tbWFuZHNcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cvdHlwZXMnKV0sXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZycpXSxcbl07XG5cblxuY29uc3QgQVBLX0VYVCA9ICcuYXBrJztcbmNvbnN0IEFBQl9FWFQgPSAnLmFhYic7XG5jb25zdCBTVVBQT1JURURfRVhURU5TSU9OUyA9IFtBUEtfRVhULCBBQUJfRVhUXTtcblxuY2xhc3MgRXNwcmVzc29Ecml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIC8vIGBzaGVsbGAgb3ZlcndyaXRlcyBhZGIuc2hlbGwsIHNvIHJlbW92ZVxuICAgIGRlbGV0ZSBvcHRzLnNoZWxsO1xuXG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ2lkJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICBdO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMuZXNwcmVzc28gPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRJTUUgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IE5PX1BST1hZO1xuXG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307IC8vIG1hcCBvZiBsYW5ndWFnZSAtPiBzdHJpbmdzIG9ialxuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moe30sIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE8gaGFuZGxlIG90aGVyU2Vzc2lvbkRhdGEgZm9yIG11bHRpcGxlIHNlc3Npb25zXG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuXG4gICAgICBsZXQgc2VydmVyRGV0YWlscyA9IHtcbiAgICAgICAgcGxhdGZvcm06ICdMSU5VWCcsXG4gICAgICAgIHdlYlN0b3JhZ2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGFrZXNTY3JlZW5zaG90OiB0cnVlLFxuICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgZGF0YWJhc2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkOiB0cnVlLFxuICAgICAgICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgd2FybmluZ3M6IHt9LFxuICAgICAgICBkZXNpcmVkOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNhcHMpXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhcHMgPSBPYmplY3QuYXNzaWduKHNlcnZlckRldGFpbHMsIHRoaXMuY2Fwcyk7XG5cbiAgICAgIHRoaXMuY3VyQ29udGV4dCA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG5cbiAgICAgIGxldCBkZWZhdWx0T3B0cyA9IHtcbiAgICAgICAgZnVsbFJlc2V0OiBmYWxzZSxcbiAgICAgICAgYXV0b0xhdW5jaDogdHJ1ZSxcbiAgICAgICAgYWRiUG9ydDogREVGQVVMVF9BREJfUE9SVCxcbiAgICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiA5MDAwMFxuICAgICAgfTtcbiAgICAgIF8uZGVmYXVsdHModGhpcy5vcHRzLCBkZWZhdWx0T3B0cyk7XG5cbiAgICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikge1xuICAgICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYCdicm93c2VyTmFtZScgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWRgKTtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBDaHJvbWUgYnJvd3NlciBjYW5ub3QgYmUgcnVuIGluIEVzcHJlc3NvIHNlc3Npb25zIGJlY2F1c2UgRXNwcmVzc28gYXV0b21hdGlvbiBkb2Vzbid0IGAgK1xuICAgICAgICAgICAgICBgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBDaHJvbWVgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDaHJvbWUgYnJvd3NlciBzZXNzaW9ucyBjYW5ub3QgYmUgcnVuIGluIEVzcHJlc3NvIGJlY2F1c2UgRXNwcmVzc28gYCArXG4gICAgICAgICAgICBgYXV0b21hdGlvbiBkb2Vzbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgQ2hyb21lYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgdGhpcy5zZXRBdmRGcm9tQ2FwYWJpbGl0aWVzKGNhcHMpO1xuICAgICAgICB0aGlzLmFkZFdpcGVEYXRhVG9BdmRBcmdzKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0cy5zeXN0ZW1Qb3J0ID0gdGhpcy5vcHRzLnN5c3RlbVBvcnRcbiAgICAgICAgfHwgYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2UoU1lTVEVNX1BPUlRfUkFOR0VbMF0sIFNZU1RFTV9QT1JUX1JBTkdFWzFdKTtcbiAgICAgIHRoaXMub3B0cy5hZGJQb3J0ID0gdGhpcy5vcHRzLmFkYlBvcnQgfHwgREVGQVVMVF9BREJfUE9SVDtcbiAgICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IGF3YWl0IGhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzKHRoaXMub3B0cyk7XG4gICAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgICB0aGlzLm9wdHMuZW1Qb3J0ID0gZW1Qb3J0O1xuICAgICAgLy8gbm93IHRoYXQgd2Uga25vdyBvdXIgamF2YSB2ZXJzaW9uIGFuZCBkZXZpY2UgaW5mbywgd2UgY2FuIGNyZWF0ZSBvdXJcbiAgICAgIC8vIEFEQiBpbnN0YW5jZVxuICAgICAgdGhpcy5hZGIgPSBhd2FpdCBhbmRyb2lkSGVscGVycy5jcmVhdGVBREIodGhpcy5vcHRzKTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCB7XG4gICAgICAgICAgb25Qb3N0UHJvY2VzczogdGhpcy5vblBvc3RDb25maWd1cmVBcHAuYmluZCh0aGlzKSxcbiAgICAgICAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiBTVVBQT1JURURfRVhURU5TSU9OU1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBPbkRldmljZSkge1xuICAgICAgICAvLyB0aGUgYXBwIGlzbid0IGFuIGFjdHVhbCBhcHAgZmlsZSBidXQgcmF0aGVyIHNvbWV0aGluZyB3ZSB3YW50IHRvXG4gICAgICAgIC8vIGFzc3VtZSBpcyBvbiB0aGUgZGV2aWNlIGFuZCBqdXN0IGxhdW5jaCB2aWEgdGhlIGFwcFBhY2thZ2VcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgQXBwIGZpbGUgd2FzIG5vdCBsaXN0ZWQsIGluc3RlYWQgd2UncmUgZ29pbmcgdG8gcnVuIGAgK1xuICAgICAgICAgICAgYCR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9IGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgICAgaWYgKCFhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZCh0aGlzLm9wdHMuYXBwUGFja2FnZSkpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCB0aGUgcGFja2FnZSAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nIGAgK1xuICAgICAgICAgICAgYGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydEVzcHJlc3NvU2Vzc2lvbigpO1xuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgZS5tZXNzYWdlICs9IGAke18uZW5kc1dpdGgoZS5tZXNzYWdlLCAnLicpID8gJycgOiAnLid9IENoZWNrIGAgK1xuICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tZXNwcmVzc28tZHJpdmVyI3Ryb3VibGVzaG9vdGluZyAnICtcbiAgICAgICAgJ3JlZ2FyZGluZyBhZHZhbmNlZCBzZXNzaW9uIHN0YXJ0dXAgdHJvdWJsZXNob290aW5nLic7XG4gICAgICBpZiAoaXNFcnJvclR5cGUoZSwgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnIgPSBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIGVyci5zdGFjayA9IGUuc3RhY2s7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuemlwIHRoZSBnaXZlbiBhcHAgcGF0aCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBwYWNrYWdlIHRoYXQgaGFzIFNVUFBPUlRFRF9FWFRFTlNJT05TXG4gICAqIGluIHRoZSBhcmNoaXZlZCBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCBUaGUgcGF0aCB0byBhcHAgZmlsZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dW5zIHRoZSBwYXRoIHRvIGFuIHVuemlwcGVkIGFwcCBmaWxlIHBhdGguXG4gICAqIEB0aHJvd3MgUmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSB6aXAgZGlkIG5vdCBoYXZlIGFueSBTVVBQT1JURURfRVhURU5TSU9OUyBwYWNrYWdlcy5cbiAgICovXG4gIGFzeW5jIHVuemlwQXBwIChhcHBQYXRoKSB7XG4gICAgY29uc3QgdXNlU3lzdGVtVW56aXBFbnYgPSBwcm9jZXNzLmVudi5BUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUDtcbiAgICBjb25zdCB1c2VTeXN0ZW1VbnppcCA9IF8uaXNFbXB0eSh1c2VTeXN0ZW1VbnppcEVudilcbiAgICAgIHx8ICFbJzAnLCAnZmFsc2UnXS5pbmNsdWRlcyhfLnRvTG93ZXIodXNlU3lzdGVtVW56aXBFbnYpKTtcbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhhcHBQYXRoLCB0bXBSb290LCB7dXNlU3lzdGVtVW56aXB9KTtcblxuICAgIGNvbnN0IGdsb2JQYXR0ZXJuID0gYCoqLyouKygke1NVUFBPUlRFRF9FWFRFTlNJT05TLm1hcCgoZXh0KSA9PiBleHQucmVwbGFjZSgvXlxcLi8sICcnKSkuam9pbignfCcpfSlgO1xuICAgIGNvbnN0IHNvcnRlZEJ1bmRsZUl0ZW1zID0gKGF3YWl0IGZzLmdsb2IoZ2xvYlBhdHRlcm4sIHtcbiAgICAgIGN3ZDogdG1wUm9vdCxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgfSkpLnNvcnQoKGEsIGIpID0+IGEuc3BsaXQocGF0aC5zZXApLmxlbmd0aCAtIGIuc3BsaXQocGF0aC5zZXApLmxlbmd0aCk7XG4gICAgaWYgKHNvcnRlZEJ1bmRsZUl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gbm8gZXhwZWN0ZWQgcGFja2FnZXMgaW4gdGhlIHppcFxuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJHt0aGlzLm9wdHMuYXBwfSBkaWQgbm90IGhhdmUgYW55IG9mICcke1NVUFBPUlRFRF9FWFRFTlNJT05TLmpvaW4oJywgJyl9JyBgICtcbiAgICAgICAgYGV4dGVuc2lvbiBwYWNrYWdlcy4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgLnppcCBhcmNoaXZlIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSB2YWxpZCBhcHBsaWNhdGlvbiBwYWNrYWdlLmApO1xuICAgIH1cbiAgICBjb25zdCB1bnppcHBlZEFwcFBhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgXy5maXJzdChzb3J0ZWRCdW5kbGVJdGVtcykpO1xuICAgIHRoaXMubG9nLmRlYnVnKGAnJHt1bnppcHBlZEFwcFBhdGh9JyBpcyB0aGUgdW56aXBwZWQgZmlsZSBmcm9tICcke2FwcFBhdGh9J2ApO1xuICAgIHJldHVybiB1bnppcHBlZEFwcFBhdGg7XG4gIH1cblxuICBhc3luYyBvblBvc3RDb25maWd1cmVBcHAgKHtjYWNoZWRBcHBJbmZvLCBpc1VybCwgYXBwUGF0aH0pIHtcbiAgICBjb25zdCBwcmVzaWduQXBwID0gYXN5bmMgKGFwcExvY2F0aW9uKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLm5vU2lnbikge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdTa2lwcGluZyBhcHBsaWNhdGlvbiBzaWduaW5nIGJlY2F1c2Ugbm9TaWduIGNhcGFiaWxpdHkgaXMgc2V0IHRvIHRydWUuICcgK1xuICAgICAgICAgICdIYXZpbmcgdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3Qgd2l0aCBpbXByb3BlciBzaWduYXR1cmUvbm9uLXNpZ25lZCB3aWxsIGNhdXNlICcgK1xuICAgICAgICAgICdFc3ByZXNzbyBhdXRvbWF0aW9uIHN0YXJ0dXAgZmFpbHVyZS4nKTtcbiAgICAgIH0gZWxzZSBpZiAoIWF3YWl0IHRoaXMuYWRiLmNoZWNrQXBrQ2VydChhcHBMb2NhdGlvbiwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNpZ24oYXBwTG9jYXRpb24sIHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFzQXBrRXh0ID0gKGFwcFBhdGgpID0+IF8uZW5kc1dpdGgoXy50b0xvd2VyKGFwcFBhdGgpLCBBUEtfRVhUKTtcbiAgICBjb25zdCBoYXNBYWJFeHQgPSAoYXBwUGF0aCkgPT4gXy5lbmRzV2l0aChfLnRvTG93ZXIoYXBwUGF0aCksIEFBQl9FWFQpO1xuICAgIGNvbnN0IGV4dHJhY3RVbml2ZXJzYWxBcGsgPSBhc3luYyAoc2hvdWxkRXh0cmFjdCwgYXBwUGF0aCkgPT5cbiAgICAgIHNob3VsZEV4dHJhY3QgPyBhcHBQYXRoIDogYXdhaXQgdGhpcy5hZGIuZXh0cmFjdFVuaXZlcnNhbEFwayhhcHBQYXRoKTtcblxuICAgIGxldCBwYXRoSW5DYWNoZSA9IG51bGw7XG4gICAgbGV0IGlzUmVzdWx0QXBwUGF0aEFscmVhZHlDYWNoZWQgPSBmYWxzZTtcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGNhY2hlZEFwcEluZm8pKSB7XG4gICAgICBjb25zdCBwYWNrYWdlSGFzaCA9IGF3YWl0IGZzLmhhc2goYXBwUGF0aCk7XG4gICAgICBpZiAocGFja2FnZUhhc2ggPT09IGNhY2hlZEFwcEluZm8ucGFja2FnZUhhc2ggJiYgYXdhaXQgZnMuZXhpc3RzKGNhY2hlZEFwcEluZm8uZnVsbFBhdGgpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFVzaW5nICcke2NhY2hlZEFwcEluZm8uZnVsbFBhdGh9JyB3aGljaCBpcyBjYWNoZWQgZnJvbSAnJHthcHBQYXRofSdgKTtcbiAgICAgICAgaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCA9IHRydWU7XG4gICAgICAgIHBhdGhJbkNhY2hlID0gY2FjaGVkQXBwSW5mby5mdWxsUGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhcHBQYXRoIGNhbiBiZSAuemlwLCAuYXBrIG9yIC5hYWJcbiAgICBjb25zdCBpc0FwayA9IGhhc0Fwa0V4dChhcHBQYXRoKTtcbiAgICAvLyBPbmx5IGxvY2FsIC5hcGsgZmlsZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGluLXBsYWNlIHNob3VsZCBub3QgYmUgY2FjaGVkXG4gICAgY29uc3Qgc2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkID0gIWlzQXBrIHx8IChpc0FwayAmJiBpc1VybCk7XG5cbiAgICBpZiAoIWlzUmVzdWx0QXBwUGF0aEFscmVhZHlDYWNoZWQpIHtcbiAgICAgIGlmIChzaG91bGRSZXN1bHRBcHBQYXRoQmVDYWNoZWQpIHtcbiAgICAgICAgLy8gLnppcCwgLmFhYiBvciBkb3dubG9hZGVkIC5hcGtcblxuICAgICAgICBsZXQgdW56aXBwZWRBcHBQYXRoO1xuICAgICAgICBsZXQgaXNVbnppcHBlZEFwayA9IGZhbHNlO1xuICAgICAgICBpZiAoIShoYXNBcGtFeHQoYXBwUGF0aCkgfHwgaGFzQWFiRXh0KGFwcFBhdGgpKSkge1xuICAgICAgICAgIHVuemlwcGVkQXBwUGF0aCA9IGF3YWl0IHRoaXMudW56aXBBcHAoYXBwUGF0aCk7XG4gICAgICAgICAgaXNVbnppcHBlZEFwayA9IGhhc0Fwa0V4dCh1bnppcHBlZEFwcFBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW56aXBwZWRBcHBQYXRoIG9yIGFwcFBhdGggaGFzIFNVUFBPUlRFRF9FWFRFTlNJT05TLlxuICAgICAgICBwYXRoSW5DYWNoZSA9IHVuemlwcGVkQXBwUGF0aFxuICAgICAgICAgID8gYXdhaXQgZXh0cmFjdFVuaXZlcnNhbEFwayhpc1VuemlwcGVkQXBrLCB1bnppcHBlZEFwcFBhdGgpXG4gICAgICAgICAgOiBhd2FpdCBleHRyYWN0VW5pdmVyc2FsQXBrKGlzQXBrLCBhcHBQYXRoKTtcblxuICAgICAgICBpZiAoIWlzQXBrICYmIGlzVXJsKSB7XG4gICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIHRlbXBvcmFyaWx5IGRvd25sb2FkZWQgLmFhYiBvciAuemlwIHBhY2thZ2VcbiAgICAgICAgICBhd2FpdCBmcy5yaW1yYWYoYXBwUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0FhYkV4dCh1bnppcHBlZEFwcFBhdGgpKSB7XG4gICAgICAgICAgLy8gQ2xlYW51cCB0aGUgbG9jYWwgdW56aXBwZWQgLmFhYiBmaWxlXG4gICAgICAgICAgYXdhaXQgZnMucmltcmFmKHVuemlwcGVkQXBwUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcHJlc2lnbkFwcChwYXRoSW5DYWNoZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzQXBrKSB7XG4gICAgICAgIC8vIEl0IGlzIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBpZGVhIHRvIG1vZGlmeSB0aGUgcHJvdmlkZWQgYXBwIGluLXBsYWNlLFxuICAgICAgICAvLyBidXQgdGhpcyBpcyBob3cgaXQgd2FzIGFsd2F5cyB3b3JraW5nXG4gICAgICAgIGF3YWl0IHByZXNpZ25BcHAoYXBwUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaG91bGRSZXN1bHRBcHBQYXRoQmVDYWNoZWQgPyB7YXBwUGF0aDogcGF0aEluQ2FjaGV9IDogZmFsc2U7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsZSBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgaXNFbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNFbXVsYXRvcih0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBtZXRob2QgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMi1kcml2ZXI7IGNvbnNvbGlkYXRlXG4gIHNldEF2ZEZyb21DYXBhYmlsaXRpZXMgKGNhcHMpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF2ZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgcGxhdGZvcm1WZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBhdmREZXZpY2UgPSBjYXBzLmRldmljZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfLl0vZywgJy0nKTtcbiAgICAgIHRoaXMub3B0cy5hdmQgPSBgJHthdmREZXZpY2V9X18ke2NhcHMucGxhdGZvcm1WZXJzaW9ufWA7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyB0aGlzIG1ldGhvZCBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyLWRyaXZlcjsgY29uc29saWRhdGVcbiAgYWRkV2lwZURhdGFUb0F2ZEFyZ3MgKCkge1xuICAgIGlmICghdGhpcy5vcHRzLmF2ZEFyZ3MpIHtcbiAgICAgIHRoaXMub3B0cy5hdmRBcmdzID0gJy13aXBlLWRhdGEnO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0cy5hdmRBcmdzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgdGhpcy5vcHRzLmF2ZEFyZ3MgKz0gJyAtd2lwZS1kYXRhJztcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPIG11Y2ggb2YgdGhpcyBsb2dpYyBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyXG4gIGFzeW5jIHN0YXJ0RXNwcmVzc29TZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBFc3ByZXNzb0RyaXZlciB2ZXJzaW9uOiAke3ZlcnNpb259YCk7XG5cbiAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLWFuZHJvaWQtZHJpdmVyL3B1bGwvNDYxIHdoYXQgaGFwcGVucyBpZiB0aGVyIGlzIG5vIHNldEhpZGRlbkFwaVBvbGljeSBmb3IgQW5kcm9pZCBQK1xuICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgdGhpcy5sb2cud2FybignUmVsYXhpbmcgaGlkZGVuIGFwaSBwb2xpY3knKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEhpZGRlbkFwaVBvbGljeSgnMScsICEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBnZXQgYXBwUGFja2FnZSBldCBhbCBmcm9tIG1hbmlmZXN0IGlmIG5lY2Vzc2FyeVxuICAgIGxldCBhcHBJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGlmIChhcHBJbmZvKSB7XG4gICAgICAvLyBhbmQgZ2V0IGl0IG9udG8gb3VyICdvcHRzJyBvYmplY3Qgc28gd2UgdXNlIGl0IGZyb20gbm93IG9uXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgYXBwSW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcEluZm8gPSB0aGlzLm9wdHM7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgYW4gYXZkLCBzZXQgdGhlIGxhbmd1YWdlL2xvY2FsZSwgcGljayBhbiBlbXVsYXRvciwgZXRjLi4uXG4gICAgLy8gVE9ETyB3aXRoIG11bHRpcGxlIGRldmljZXMgd2UnbGwgbmVlZCB0byBwYXJhbWV0ZXJpemUgdGhpc1xuICAgIGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1lc3ByZXNzby1kcml2ZXIvaXNzdWVzLzcyXG4gICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLndhc0FuaW1hdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byB0dXJuIG9mZiBhbmltYXRpb25zOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWRcbiAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9IHRoaXMuYWRiLmN1ckRldmljZUlkO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VVRElEID0gdGhpcy5vcHRzLnVkaWQ7XG5cbiAgICAvLyBzZXQgdXAgdGhlIG1vZGlmaWVkIGVzcHJlc3NvIHNlcnZlciBldGNcbiAgICB0aGlzLmluaXRFc3ByZXNzb1NlcnZlcigpO1xuICAgIC8vIEZ1cnRoZXIgcHJlcGFyZSB0aGUgZGV2aWNlIGJ5IGZvcndhcmRpbmcgdGhlIGVzcHJlc3NvIHBvcnRcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRm9yd2FyZGluZyBFc3ByZXNzbyBTZXJ2ZXIgcG9ydCAke0RFVklDRV9QT1JUfSB0byAke3RoaXMub3B0cy5zeXN0ZW1Qb3J0fWApO1xuICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0LCBERVZJQ0VfUE9SVCk7XG5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5sb2NrKSB7XG4gICAgICAvLyB1bmxvY2sgdGhlIGRldmljZSB0byBwcmVwYXJlIGl0IGZvciB0ZXN0aW5nXG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYCdza2lwVW5sb2NrJyBjYXBhYmlsaXR5IHNldCwgc28gc2tpcHBpbmcgZGV2aWNlIHVubG9ja2ApO1xuICAgIH1cblxuICAgIC8vIHNldCB1cCBhcHAgdW5kZXIgdGVzdFxuICAgIC8vIHByZXBhcmUgb3VyIGFjdHVhbCBBVVQsIGdldCBpdCBvbiB0aGUgZGV2aWNlLCBldGMuLi5cbiAgICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcblxuICAgIC8vQWRkaW5nIEFVVCBwYWNrYWdlIG5hbWUgaW4gdGhlIGNhcGFiaWxpdGllcyBpZiBwYWNrYWdlIG5hbWUgbm90IGV4aXN0IGluIGNhcHNcbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICB0aGlzLmNhcHMuYXBwUGFja2FnZSA9IGFwcEluZm8uYXBwUGFja2FnZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSA9IGFwcEluZm8uYXBwV2FpdFBhY2thZ2UgfHwgYXBwSW5mby5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHBQYWNrYWdlO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXBzLmFwcEFjdGl2aXR5KSB7XG4gICAgICB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSwgdGhpcy5jYXBzLmFwcFBhY2thZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEluZm8uYXBwQWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEluZm8uYXBwV2FpdEFjdGl2aXR5IHx8IGFwcEluZm8uYXBwQWN0aXZpdHkgfHwgdGhpcy5jYXBzLmFwcEFjdGl2aXR5LFxuICAgICAgICB0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpO1xuICAgIH1cblxuICAgIC8vIGxhdW5jaCBlc3ByZXNzbyBhbmQgd2FpdCB0aWxsIGl0cyBvbmxpbmUgYW5kIHdlIGhhdmUgYSBzZXNzaW9uXG4gICAgYXdhaXQgdGhpcy5lc3ByZXNzby5zdGFydFNlc3Npb24odGhpcy5jYXBzKTtcbiAgICBpZiAodGhpcy5jYXBzLmF1dG9MYXVuY2ggPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBOb3Qgd2FpdGluZyBmb3IgdGhlIGFwcGxpY2F0aW9uIGFjdGl2aXR5IHRvIHN0YXJ0IGJlY2F1c2UgJ2F1dG9MYXVuY2gnIGlzIGRpc2FibGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JBY3Rpdml0eSh0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UsIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHksIHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24pO1xuICAgIH1cbiAgICAvLyBpZiB3ZSB3YW50IHRvIGltbWVkaWF0ZWx5IGdldCBpbnRvIGEgd2Vidmlldywgc2V0IG91ciBjb250ZXh0XG4gICAgLy8gYXBwcm9wcmlhdGVseVxuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdFdlYnZpZXcoKTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCBldmVyeXRoaW5nIGhhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseSwgdHVybiBvbiBwcm94eWluZyBzbyBhbGxcbiAgICAvLyBzdWJzZXF1ZW50IHNlc3Npb24gcmVxdWVzdHMgZ28gc3RyYWlnaHQgdG8vZnJvbSBlc3ByZXNzb1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gICAgYXdhaXQgdGhpcy5hZGREZXZpY2VJbmZvVG9DYXBzKCk7XG4gIH1cblxuICBhc3luYyBpbml0V2VidmlldyAoKSB7XG4gICAgY29uc3Qgdmlld05hbWUgPSBhbmRyb2lkQ29tbWFuZHMuZGVmYXVsdFdlYnZpZXdOYW1lLmNhbGwodGhpcyk7XG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMub3B0cy5hdXRvV2Vidmlld1RpbWVvdXQgfHwgMjAwMDtcbiAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgLyA1MDAsIDUwMCwgdGhpcy5zZXRDb250ZXh0LmJpbmQodGhpcyksIHZpZXdOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGFkZERldmljZUluZm9Ub0NhcHMgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgICBtYW51ZmFjdHVyZXIsXG4gICAgICBtb2RlbCxcbiAgICAgIHJlYWxEaXNwbGF5U2l6ZSxcbiAgICAgIGRpc3BsYXlEZW5zaXR5LFxuICAgIH0gPSBhd2FpdCB0aGlzLm1vYmlsZUdldERldmljZUluZm8oKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlQXBpTGV2ZWwgPSBwYXJzZUludChhcGlWZXJzaW9uLCAxMCk7XG4gICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9IHBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuU2l6ZSA9IHJlYWxEaXNwbGF5U2l6ZTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuRGVuc2l0eSA9IGRpc3BsYXlEZW5zaXR5O1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNb2RlbCA9IG1vZGVsO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNYW51ZmFjdHVyZXIgPSBtYW51ZmFjdHVyZXI7XG4gIH1cblxuICBpbml0RXNwcmVzc29TZXJ2ZXIgKCkge1xuICAgIC8vIG5vdyB0aGF0IHdlIGhhdmUgcGFja2FnZSBhbmQgYWN0aXZpdHksIHdlIGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2ZcbiAgICAvLyBlc3ByZXNzbyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhXG4gICAgdGhpcy5lc3ByZXNzbyA9IG5ldyBFc3ByZXNzb1J1bm5lcih0aGlzLmxvZywge1xuICAgICAgaG9zdDogdGhpcy5vcHRzLnJlbW90ZUFkYkhvc3QgfHwgdGhpcy5vcHRzLmhvc3QgfHwgJzEyNy4wLjAuMScsXG4gICAgICBzeXN0ZW1Qb3J0OiB0aGlzLm9wdHMuc3lzdGVtUG9ydCxcbiAgICAgIGRldmljZVBvcnQ6IERFVklDRV9QT1JULFxuICAgICAgYWRiOiB0aGlzLmFkYixcbiAgICAgIGFwazogdGhpcy5vcHRzLmFwcCxcbiAgICAgIHRtcERpcjogdGhpcy5vcHRzLnRtcERpcixcbiAgICAgIGFwcFBhY2thZ2U6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgYXBwQWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgIGZvcmNlRXNwcmVzc29SZWJ1aWxkOiAhIXRoaXMub3B0cy5mb3JjZUVzcHJlc3NvUmVidWlsZCxcbiAgICAgIGVzcHJlc3NvQnVpbGRDb25maWc6IHRoaXMub3B0cy5lc3ByZXNzb0J1aWxkQ29uZmlnLFxuICAgICAgc2hvd0dyYWRsZUxvZzogISF0aGlzLm9wdHMuc2hvd0dyYWRsZUxvZyxcbiAgICAgIHNlcnZlckxhdW5jaFRpbWVvdXQ6IHRoaXMub3B0cy5lc3ByZXNzb1NlcnZlckxhdW5jaFRpbWVvdXQsXG4gICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IHRoaXMub3B0cy5hbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgICBza2lwU2VydmVySW5zdGFsbGF0aW9uOiB0aGlzLm9wdHMuc2tpcFNlcnZlckluc3RhbGxhdGlvbixcbiAgICAgIHVzZUtleXN0b3JlOiB0aGlzLm9wdHMudXNlS2V5c3RvcmUsXG4gICAgICBrZXlzdG9yZVBhdGg6IHRoaXMub3B0cy5rZXlzdG9yZVBhdGgsXG4gICAgICBrZXlzdG9yZVBhc3N3b3JkOiB0aGlzLm9wdHMua2V5c3RvcmVQYXNzd29yZCxcbiAgICAgIGtleUFsaWFzOiB0aGlzLm9wdHMua2V5QWxpYXMsXG4gICAgICBrZXlQYXNzd29yZDogdGhpcy5vcHRzLmtleVBhc3N3b3JkLFxuICAgICAgZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U6IHRoaXMub3B0cy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5lc3ByZXNzby5wcm94eVJlcVJlcy5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICAgIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5lc3ByZXNzby5wcm94eUNvbW1hbmQuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBtZXRob2QgaXMgbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjJcbiAgYXN5bmMgaW5pdEFVVCAoKSB7XG4gICAgLy8gc2V0IHRoZSBsb2NhbGl6ZWQgc3RyaW5ncyBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgZnJvbSB0aGUgYXBrXG4gICAgLy8gVE9ETzogaW5jb3Jwb3JhdGUgY2hhbmdlcyBmcm9tIGFwcGl1bSM1MzA4IHdoaWNoIGZpeCBhIHJhY2UgY29uZC1cbiAgICAvLyBpdGlvbiBidWcgaW4gb2xkIGFwcGl1bSBhbmQgbmVlZCB0byBiZSByZXBsaWNhdGVkIGhlcmVcbiAgICAvLyB0aGlzLmFwa1N0cmluZ3NbdGhpcy5vcHRzLmxhbmd1YWdlXSA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLnB1c2hTdHJpbmdzKFxuICAgIC8vICAgICB0aGlzLm9wdHMubGFuZ3VhZ2UsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuXG4gICAgLy8gVW5pbnN0YWxsIGFueSB1bmluc3RhbGxPdGhlclBhY2thZ2VzIHdoaWNoIHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBURVNUX0FQS19QS0ddXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdza2lwU2VydmVySW5zdGFsbGF0aW9uIGNhcGFiaWxpdHkgaXMgc2V0LiBOb3QgaW5zdGFsbGlnIGVzcHJlc3NvLXNlcnZlciAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5lc3ByZXNzby5pbnN0YWxsVGVzdEFwaygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0KFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFRFU1RfQVBLX1BLRyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBhZGQgc2VydmVyIHBhY2thZ2VzIHRvIHRoZSBEb3plIHdoaXRlbGlzdC4gT3JpZ2luYWwgZXJyb3I6IGAgK1xuICAgICAgICAgIChlLnN0ZGVyciB8fCBlLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnRGVsZXRpbmcgZXNwcmVzc28gc2Vzc2lvbicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcFJlY29yZGluZ1NjcmVlbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cblxuICAgIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nKCk7XG5cbiAgICBpZiAodGhpcy5lc3ByZXNzbykge1xuICAgICAgaWYgKHRoaXMuandwUHJveHlBY3RpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5lc3ByZXNzby5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVzcHJlc3NvID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLy8gVE9ETyBiZWxvdyBsb2dpYyBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBpZiAodGhpcy53YXNBbmltYXRpb25FbmFibGVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byByZXNldCBhbmltYXRpb246ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkICYmIHRoaXMub3B0cy5yZXNldEtleWJvYXJkICYmXG4gICAgICAgICAgdGhpcy5kZWZhdWx0SU1FKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICcke3RoaXMuZGVmYXVsdElNRX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2hyb21lU2Vzc2lvbiAmJiB0aGlzLm9wdHMuYXBwUGFja2FnZSAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsICYmICF0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBGVUxMX1JFU0VUIHNldCB0byAndHJ1ZScsIFVuaW5zdGFsbGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICBsZXQgYXZkTmFtZSA9IHRoaXMub3B0cy5hdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYGNsb3NpbmcgZW11bGF0b3IgJyR7YXZkTmFtZX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3JpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gdGhlIGRldmljZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSghIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHJlbW92ZSBwb3J0IGZvcndhcmQgJyR7ZXJyb3IubWVzc2FnZX0nYCk7XG4gICAgICAgIC8vSWdub3JlLCB0aGlzIGJsb2NrIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hlbiB3ZSBmYWxsIGluIGNhdGNoIGJsb2NrXG4gICAgICAgIC8vIGFuZCBiZWZvcmUgZXZlbiBwb3J0IGZvcndhcmQuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoKSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBkbyBub3RoaW5nIGhlcmUsIHNpbmNlIGNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzIHByb3hpZXNcbiAgICAvLyBzZXR0aW5ncyB0byB0aGUgZXNwcmVzc28gc2VydmVyIGFscmVhZHlcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgYWx3YXlzIGhhdmUgYW4gYWN0aXZlIHByb3h5IHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNhblByb3h5IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5jYW5Qcm94eShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgY2FuIGFsd2F5cyBwcm94eSB0byB0aGUgZXNwcmVzc28gc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKTtcbiAgICAvLyB3ZSBhcmUgbWFpbnRhaW5pbmcgdHdvIHNldHMgb2YgTk9fUFJPWFkgbGlzdHMsIG9uZSBmb3IgY2hyb21lZHJpdmVyKENIUk9NRV9OT19QUk9YWSlcbiAgICAvLyBhbmQgb25lIGZvciBFc3ByZXNzbyhOT19QUk9YWSksIGJhc2VkIG9uIGN1cnJlbnQgY29udGV4dCB3aWxsIHJldHVybiByZWxhdGVkIE5PX1BST1hZIGxpc3RcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBfLmlzTmlsKHRoaXMuY2hyb21lZHJpdmVyKSA/IE5PX1BST1hZIDogQ0hST01FX05PX1BST1hZO1xuICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gWy4uLnRoaXMuandwUHJveHlBdm9pZCwgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2NyZWVuc2hvdCcpXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGdldCBpc0Nocm9tZVNlc3Npb24gKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzQ2hyb21lQnJvd3Nlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICB9XG5cbiAgZ2V0IGFwcE9uRGV2aWNlICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5hcHAgJiYgdGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgfVxufVxuXG4vLyBmaXJzdCBhZGQgdGhlIGFuZHJvaWQtZHJpdmVyIGNvbW1hbmRzIHdoaWNoIHdlIHdpbGwgZmFsbCBiYWNrIHRvXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGFuZHJvaWRDb21tYW5kcykpIHtcbiAgLy8gd2UgZG8gc29tZSBkaWZmZXJlbnQvc3BlY2lhbCB0aGluZ3Mgd2l0aCB0aGVzZSBtZXRob2RzXG4gIGlmICghXy5pbmNsdWRlcyhbJ2RlZmF1bHRXZWJ2aWV3TmFtZSddLCBjbWQpKSB7XG4gICAgRXNwcmVzc29Ecml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbiAgfVxufVxuXG4vLyB0aGVuIG92ZXJ3cml0ZSB3aXRoIGFueSBlc3ByZXNzby1zcGVjaWZpYyBjb21tYW5kc1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgRXNwcmVzc29Ecml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuZXhwb3J0IHsgRXNwcmVzc29Ecml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEVzcHJlc3NvRHJpdmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBLE1BQU1BLE9BQU8sR0FBR0MsbUNBQWhCO0FBSUEsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUExQjtBQUlBLE1BQU1DLFdBQVcsR0FBRyxJQUFwQjtBQU1BLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBRCxFQUFRLElBQUlDLE1BQUosQ0FBVyxtQkFBWCxDQUFSLENBRGUsRUFFZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsZ0RBQVgsQ0FBUixDQUZlLEVBR2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLCtDQUFYLENBQVIsQ0FIZSxFQUlmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywrQ0FBWCxDQUFSLENBSmUsRUFLZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsaURBQVgsQ0FBUixDQUxlLEVBTWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLDJDQUFYLENBQVIsQ0FOZSxFQU9mLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywyQ0FBWCxDQUFSLENBUGUsRUFRZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsaUNBQVgsQ0FBUixDQVJlLEVBU2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLHlCQUFYLENBQVIsQ0FUZSxFQVVmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywwQkFBWCxDQUFSLENBVmUsRUFXZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsMkJBQVgsQ0FBUixDQVhlLEVBWWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLG9DQUFYLENBQVIsQ0FaZSxFQWFmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywwQkFBWCxDQUFSLENBYmUsRUFjZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcscUJBQVgsQ0FBUixDQWRlLEVBZWYsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLHVDQUFYLENBQVQsQ0FmZSxFQWdCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsa0NBQVgsQ0FBVCxDQWhCZSxFQWlCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsbUNBQVgsQ0FBVCxDQWpCZSxFQWtCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsa0NBQVgsQ0FBVCxDQWxCZSxFQW1CZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBVCxDQW5CZSxFQW9CZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsdUNBQVgsQ0FBVCxDQXBCZSxFQXFCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNENBQVgsQ0FBVCxDQXJCZSxFQXNCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQXRCZSxFQXVCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQXZCZSxFQXdCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNENBQVgsQ0FBVCxDQXhCZSxFQXlCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQXpCZSxFQTBCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQTFCZSxFQTJCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQTNCZSxFQTRCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBVCxDQTVCZSxFQTZCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQTdCZSxFQThCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQTlCZSxFQStCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQS9CZSxFQWdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMENBQVgsQ0FBVCxDQWhDZSxFQWlDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQWpDZSxFQWtDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQWxDZSxFQW1DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsc0NBQVgsQ0FBVCxDQW5DZSxFQW9DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQXBDZSxFQXFDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQXJDZSxFQXNDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsaUNBQVgsQ0FBVCxDQXRDZSxFQXVDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsdUNBQVgsQ0FBVCxDQXZDZSxFQXdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0NBQVgsQ0FBVCxDQXhDZSxF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
|
|
549
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbImhlbHBlcnMiLCJhbmRyb2lkSGVscGVycyIsIlNZU1RFTV9QT1JUX1JBTkdFIiwiREVWSUNFX1BPUlQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkNIUk9NRV9OT19QUk9YWSIsIkFQS19FWFQiLCJBQUJfRVhUIiwiU1VQUE9SVEVEX0VYVEVOU0lPTlMiLCJFc3ByZXNzb0RyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzaGVsbCIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiZXNwcmVzc28iLCJqd3BQcm94eUFjdGl2ZSIsImRlZmF1bHRJTUUiLCJqd3BQcm94eUF2b2lkIiwiYXBrU3RyaW5ncyIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZGVmYXVsdE9wdHMiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJfIiwiZGVmYXVsdHMiLCJpc0Nocm9tZVNlc3Npb24iLCJhcHAiLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJhZGRXaXBlRGF0YVRvQXZkQXJncyIsInN5c3RlbVBvcnQiLCJmaW5kQVBvcnROb3RJblVzZSIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJhZGIiLCJjcmVhdGVBREIiLCJjb25maWd1cmVBcHAiLCJvblBvc3RQcm9jZXNzIiwib25Qb3N0Q29uZmlndXJlQXBwIiwic3VwcG9ydGVkRXh0ZW5zaW9ucyIsImFwcE9uRGV2aWNlIiwiaW5mbyIsImFwcFBhY2thZ2UiLCJpc0FwcEluc3RhbGxlZCIsInN0YXJ0RXNwcmVzc29TZXNzaW9uIiwiZSIsImRlbGV0ZVNlc3Npb24iLCJtZXNzYWdlIiwiZW5kc1dpdGgiLCJpc0Vycm9yVHlwZSIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJlcnIiLCJzdGFjayIsInVuemlwQXBwIiwiYXBwUGF0aCIsInVzZVN5c3RlbVVuemlwRW52IiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQIiwidXNlU3lzdGVtVW56aXAiLCJpc0VtcHR5IiwiaW5jbHVkZXMiLCJ0b0xvd2VyIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiZ2xvYlBhdHRlcm4iLCJtYXAiLCJleHQiLCJyZXBsYWNlIiwiam9pbiIsInNvcnRlZEJ1bmRsZUl0ZW1zIiwiZnMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwic29ydCIsImEiLCJiIiwic3BsaXQiLCJwYXRoIiwic2VwIiwibGVuZ3RoIiwidW56aXBwZWRBcHBQYXRoIiwiZmlyc3QiLCJkZWJ1ZyIsImNhY2hlZEFwcEluZm8iLCJpc1VybCIsInByZXNpZ25BcHAiLCJhcHBMb2NhdGlvbiIsIm5vU2lnbiIsImNoZWNrQXBrQ2VydCIsInNpZ24iLCJoYXNBcGtFeHQiLCJoYXNBYWJFeHQiLCJleHRyYWN0VW5pdmVyc2FsQXBrIiwic2hvdWxkRXh0cmFjdCIsInBhdGhJbkNhY2hlIiwiaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCIsImlzUGxhaW5PYmplY3QiLCJwYWNrYWdlSGFzaCIsImhhc2giLCJleGlzdHMiLCJmdWxsUGF0aCIsImlzQXBrIiwic2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkIiwiaXNVbnppcHBlZEFwayIsInJpbXJhZiIsImRyaXZlckRhdGEiLCJpc0VtdWxhdG9yIiwiYXZkIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsImF2ZEFyZ3MiLCJ0b0xvd2VyQ2FzZSIsInZlcnNpb24iLCJnZXRBcGlMZXZlbCIsInNldEhpZGRlbkFwaVBvbGljeSIsImlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJpbml0RGV2aWNlIiwiaXNBbmltYXRpb25PbiIsInNldEFuaW1hdGlvblN0YXRlIiwid2FzQW5pbWF0aW9uRW5hYmxlZCIsImN1ckRldmljZUlkIiwiZGV2aWNlVURJRCIsImluaXRFc3ByZXNzb1NlcnZlciIsImZvcndhcmRQb3J0Iiwic2tpcFVubG9jayIsInVubG9jayIsImluaXRBVVQiLCJhcHBXYWl0UGFja2FnZSIsImFwcEFjdGl2aXR5IiwicXVhbGlmeUFjdGl2aXR5TmFtZSIsImFwcFdhaXRBY3Rpdml0eSIsInN0YXJ0U2Vzc2lvbiIsIndhaXRGb3JBY3Rpdml0eSIsImFwcFdhaXREdXJhdGlvbiIsImF1dG9XZWJ2aWV3IiwiaW5pdFdlYnZpZXciLCJhZGREZXZpY2VJbmZvVG9DYXBzIiwidmlld05hbWUiLCJhbmRyb2lkQ29tbWFuZHMiLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjYWxsIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwiYXBpVmVyc2lvbiIsIm1hbnVmYWN0dXJlciIsIm1vZGVsIiwicmVhbERpc3BsYXlTaXplIiwiZGlzcGxheURlbnNpdHkiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwiZGV2aWNlQXBpTGV2ZWwiLCJwYXJzZUludCIsImRldmljZVNjcmVlblNpemUiLCJkZXZpY2VTY3JlZW5EZW5zaXR5IiwiZGV2aWNlTW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJFc3ByZXNzb1J1bm5lciIsImhvc3QiLCJyZW1vdGVBZGJIb3N0IiwiZGV2aWNlUG9ydCIsImFwayIsInRtcERpciIsImZvcmNlRXNwcmVzc29SZWJ1aWxkIiwiZXNwcmVzc29CdWlsZENvbmZpZyIsInNob3dHcmFkbGVMb2ciLCJzZXJ2ZXJMYXVuY2hUaW1lb3V0IiwiZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0Iiwic2tpcFNlcnZlckluc3RhbGxhdGlvbiIsInVzZUtleXN0b3JlIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInByb3h5UmVxUmVzIiwicHJveHlDb21tYW5kIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiVEVTVF9BUEtfUEtHIiwiZmFzdFJlc2V0IiwicmVzZXRBcHAiLCJza2lwVW5pbnN0YWxsIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbEFwayIsImluc3RhbGxUZXN0QXBrIiwiYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0Iiwic3RkZXJyIiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwiaWduIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3kiLCJ1bmRlZmluZWQiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsImVycm9yIiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNOaWwiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJpc1BhY2thZ2VPckJ1bmRsZSIsImNtZCIsImZuIiwidG9QYWlycyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyLCBlcnJvcnMsIGlzRXJyb3JUeXBlLCBEZXZpY2VTZXR0aW5nc30gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBFc3ByZXNzb1J1bm5lciwgVEVTVF9BUEtfUEtHIH0gZnJvbSAnLi9lc3ByZXNzby1ydW5uZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHppcCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IERFRkFVTFRfQURCX1BPUlQgfSBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7IGFuZHJvaWRIZWxwZXJzLCBhbmRyb2lkQ29tbWFuZHMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgfSBmcm9tICdhcHBpdW0tYW5kcm9pZC1kcml2ZXInO1xuaW1wb3J0IGRlc2lyZWRDYXBDb25zdHJhaW50cyBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgcXVhbGlmeUFjdGl2aXR5TmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5cbi8vIFRPRE8gbWVyZ2Ugb3VyIG93biBoZWxwZXJzIG9udG8gdGhpcyBsYXRlclxuY29uc3QgaGVscGVycyA9IGFuZHJvaWRIZWxwZXJzO1xuXG4vLyBUaGUgcmFuZ2Ugb2YgcG9ydHMgd2UgY2FuIHVzZSBvbiB0aGUgc3lzdGVtIGZvciBjb21tdW5pY2F0aW5nIHRvIHRoZVxuLy8gRXNwcmVzc28gSFRUUCBzZXJ2ZXIgb24gdGhlIGRldmljZVxuY29uc3QgU1lTVEVNX1BPUlRfUkFOR0UgPSBbODMwMCwgODM5OV07XG5cbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCB0aGUgZXNwcmVzc28gc2VydmVyIGxpc3RlbnMgdG8gb24gdGhlIGRldmljZS4gV2Ugd2lsbFxuLy8gZm9yd2FyZCBvbmUgb2YgdGhlIHBvcnRzIGFib3ZlIG9uIHRoZSBzeXN0ZW0gdG8gdGhpcyBwb3J0IG9uIHRoZSBkZXZpY2UuXG5jb25zdCBERVZJQ0VfUE9SVCA9IDY3OTE7XG5cbi8vIE5PX1BST1hZIGNvbnRhaW5zIHRoZSBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gZXNwcmVzc28gc2VydmVyLlxuLy8gVE9ETzogIEFkZCB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gZXNwcmVzc28gc2VydmVyLlxuLy8gVE9ETzogTmVlZCB0byBzZWdyZWdhdGUgdGhlIHBhdGhzIGJldHRlciB3YXkgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucyB3aGVyZXZlciBhcHBsaWNhYmxlLlxuLy8gKE5vdCBzZWdyZWdhdGluZyByaWdodCBhd2F5IGJlY2F1c2UgbW9yZSBwYXRocyB0byBiZSBhZGRlZCBpbiB0aGUgTk9fUFJPWFkgbGlzdClcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi8oPyEuKi8pJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2N1cnJlbnRfYWN0aXZpdHknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvY3VycmVudF9wYWNrYWdlJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9pc19rZXlib2FyZF9zaG93bicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9zeXN0ZW1fYmFycycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9zeXN0ZW1fdGltZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL2JhY2tncm91bmQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL2Nsb3NlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9sYXVuY2gnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL3Jlc2V0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9zdHJpbmdzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2NvbXBhcmVfaW1hZ2VzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9hY3RpdmF0ZV9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2FwcF9pbnN0YWxsZWQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2FwcF9zdGF0ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvZmluZ2VyX3ByaW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9nZXRfY2xpcGJvYXJkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9pbnN0YWxsX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvaXNfbG9ja2VkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9sb2NrJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9wdWxsX2ZpbGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3B1bGxfZm9sZGVyJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9wdXNoX2ZpbGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3JlbW92ZV9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3N0YXJ0X2FjdGl2aXR5JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS90ZXJtaW5hdGVfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS91bmxvY2snKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZ2V0UGVyZm9ybWFuY2VEYXRhJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3BlcmZvcm1hbmNlRGF0YS90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9leGVjdXRlX2RyaXZlcicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdGFydF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0b3BfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGVfYXN5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2NhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcycpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJyldLFxuXTtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gQ2hyb21lZHJpdmVyLlxuY29uc3QgQ0hST01FX05PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvcmVjdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcblxuICAvLyB0aGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBtb2JpbGU6IGNvbW1hbmRzIHdvcmtpbmcgaW4gd2ViIGNvbnRleHRcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcycpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJyldLFxuXTtcblxuXG5jb25zdCBBUEtfRVhUID0gJy5hcGsnO1xuY29uc3QgQUFCX0VYVCA9ICcuYWFiJztcbmNvbnN0IFNVUFBPUlRFRF9FWFRFTlNJT05TID0gW0FQS19FWFQsIEFBQl9FWFRdO1xuXG5jbGFzcyBFc3ByZXNzb0RyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gICAgLy8gYHNoZWxsYCBvdmVyd3JpdGVzIGFkYi5zaGVsbCwgc28gcmVtb3ZlXG4gICAgZGVsZXRlIG9wdHMuc2hlbGw7XG5cbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIF07XG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG4gICAgdGhpcy5lc3ByZXNzbyA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG5cbiAgICB0aGlzLmFwa1N0cmluZ3MgPSB7fTsgLy8gbWFwIG9mIGxhbmd1YWdlIC0+IHN0cmluZ3Mgb2JqXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7fSwgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICAgIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMgPSB7fTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVE9ETyBoYW5kbGUgb3RoZXJTZXNzaW9uRGF0YSBmb3IgbXVsdGlwbGUgc2Vzc2lvbnNcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY2FwcylcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FwcyA9IE9iamVjdC5hc3NpZ24oc2VydmVyRGV0YWlscywgdGhpcy5jYXBzKTtcblxuICAgICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcblxuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IDkwMDAwXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgJ2Jyb3dzZXJOYW1lJyBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZGApO1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYENocm9tZSBicm93c2VyIGNhbm5vdCBiZSBydW4gaW4gRXNwcmVzc28gc2Vzc2lvbnMgYmVjYXVzZSBFc3ByZXNzbyBhdXRvbWF0aW9uIGRvZXNuJ3QgYCArXG4gICAgICAgICAgICAgIGBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIENocm9tZWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENocm9tZSBicm93c2VyIHNlc3Npb25zIGNhbm5vdCBiZSBydW4gaW4gRXNwcmVzc28gYmVjYXVzZSBFc3ByZXNzbyBgICtcbiAgICAgICAgICAgIGBhdXRvbWF0aW9uIGRvZXNuJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBDaHJvbWVgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICB0aGlzLnNldEF2ZEZyb21DYXBhYmlsaXRpZXMoY2Fwcyk7XG4gICAgICAgIHRoaXMuYWRkV2lwZURhdGFUb0F2ZEFyZ3MoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcHRzLnN5c3RlbVBvcnQgPSB0aGlzLm9wdHMuc3lzdGVtUG9ydFxuICAgICAgICB8fCBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShTWVNURU1fUE9SVF9SQU5HRVswXSwgU1lTVEVNX1BPUlRfUkFOR0VbMV0pO1xuICAgICAgdGhpcy5vcHRzLmFkYlBvcnQgPSB0aGlzLm9wdHMuYWRiUG9ydCB8fCBERUZBVUxUX0FEQl9QT1JUO1xuICAgICAgLy8gZ2V0IGRldmljZSB1ZGlkIGZvciB0aGlzIHNlc3Npb25cbiAgICAgIGNvbnN0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG4gICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IG91ciBqYXZhIHZlcnNpb24gYW5kIGRldmljZSBpbmZvLCB3ZSBjYW4gY3JlYXRlIG91clxuICAgICAgLy8gQURCIGluc3RhbmNlXG4gICAgICB0aGlzLmFkYiA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLmNyZWF0ZUFEQih0aGlzLm9wdHMpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgICAgICBvblBvc3RQcm9jZXNzOiB0aGlzLm9uUG9zdENvbmZpZ3VyZUFwcC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbnM6IFNVUFBPUlRFRF9FWFRFTlNJT05TXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIC8vIHRoZSBhcHAgaXNuJ3QgYW4gYWN0dWFsIGFwcCBmaWxlIGJ1dCByYXRoZXIgc29tZXRoaW5nIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gYXNzdW1lIGlzIG9uIHRoZSBkZXZpY2UgYW5kIGp1c3QgbGF1bmNoIHZpYSB0aGUgYXBwUGFja2FnZVxuICAgICAgICB0aGlzLmxvZy5pbmZvKGBBcHAgZmlsZSB3YXMgbm90IGxpc3RlZCwgaW5zdGVhZCB3ZSdyZSBnb2luZyB0byBydW4gYCArXG4gICAgICAgICAgICBgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgICBpZiAoIWF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIHRoZSBwYWNrYWdlICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfScgYCArXG4gICAgICAgICAgICBgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0RXNwcmVzc29TZXNzaW9uKCk7XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICBlLm1lc3NhZ2UgKz0gYCR7Xy5lbmRzV2l0aChlLm1lc3NhZ2UsICcuJykgPyAnJyA6ICcuJ30gQ2hlY2sgYCArXG4gICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1lc3ByZXNzby1kcml2ZXIjdHJvdWJsZXNob290aW5nICcgK1xuICAgICAgICAncmVnYXJkaW5nIGFkdmFuY2VkIHNlc3Npb24gc3RhcnR1cCB0cm91Ymxlc2hvb3RpbmcuJztcbiAgICAgIGlmIChpc0Vycm9yVHlwZShlLCBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVyciA9IG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgZXJyLnN0YWNrID0gZS5zdGFjaztcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW56aXAgdGhlIGdpdmVuIGFwcCBwYXRoIGFuZCByZXR1cm4gdGhlIGZpcnN0IHBhY2thZ2UgdGhhdCBoYXMgU1VQUE9SVEVEX0VYVEVOU0lPTlNcbiAgICogaW4gdGhlIGFyY2hpdmVkIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIFRoZSBwYXRoIHRvIGFwcCBmaWxlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1bnMgdGhlIHBhdGggdG8gYW4gdW56aXBwZWQgYXBwIGZpbGUgcGF0aC5cbiAgICogQHRocm93cyBSYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIHppcCBkaWQgbm90IGhhdmUgYW55IFNVUFBPUlRFRF9FWFRFTlNJT05TIHBhY2thZ2VzLlxuICAgKi9cbiAgYXN5bmMgdW56aXBBcHAgKGFwcFBhdGgpIHtcbiAgICBjb25zdCB1c2VTeXN0ZW1VbnppcEVudiA9IHByb2Nlc3MuZW52LkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQO1xuICAgIGNvbnN0IHVzZVN5c3RlbVVuemlwID0gXy5pc0VtcHR5KHVzZVN5c3RlbVVuemlwRW52KVxuICAgICAgfHwgIVsnMCcsICdmYWxzZSddLmluY2x1ZGVzKF8udG9Mb3dlcih1c2VTeXN0ZW1VbnppcEVudikpO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKGFwcFBhdGgsIHRtcFJvb3QsIHt1c2VTeXN0ZW1VbnppcH0pO1xuXG4gICAgY29uc3QgZ2xvYlBhdHRlcm4gPSBgKiovKi4rKCR7U1VQUE9SVEVEX0VYVEVOU0lPTlMubWFwKChleHQpID0+IGV4dC5yZXBsYWNlKC9eXFwuLywgJycpKS5qb2luKCd8Jyl9KWA7XG4gICAgY29uc3Qgc29ydGVkQnVuZGxlSXRlbXMgPSAoYXdhaXQgZnMuZ2xvYihnbG9iUGF0dGVybiwge1xuICAgICAgY3dkOiB0bXBSb290LFxuICAgICAgc3RyaWN0OiBmYWxzZSxcbiAgICB9KSkuc29ydCgoYSwgYikgPT4gYS5zcGxpdChwYXRoLnNlcCkubGVuZ3RoIC0gYi5zcGxpdChwYXRoLnNlcCkubGVuZ3RoKTtcbiAgICBpZiAoc29ydGVkQnVuZGxlSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBubyBleHBlY3RlZCBwYWNrYWdlcyBpbiB0aGUgemlwXG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAke3RoaXMub3B0cy5hcHB9IGRpZCBub3QgaGF2ZSBhbnkgb2YgJyR7U1VQUE9SVEVEX0VYVEVOU0lPTlMuam9pbignLCAnKX0nIGAgK1xuICAgICAgICBgZXh0ZW5zaW9uIHBhY2thZ2VzLiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwcm92aWRlZCAuemlwIGFyY2hpdmUgY29udGFpbnMgYXQgbGVhc3Qgb25lIHZhbGlkIGFwcGxpY2F0aW9uIHBhY2thZ2UuYCk7XG4gICAgfVxuICAgIGNvbnN0IHVuemlwcGVkQXBwUGF0aCA9IHBhdGguam9pbih0bXBSb290LCBfLmZpcnN0KHNvcnRlZEJ1bmRsZUl0ZW1zKSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCcke3VuemlwcGVkQXBwUGF0aH0nIGlzIHRoZSB1bnppcHBlZCBmaWxlIGZyb20gJyR7YXBwUGF0aH0nYCk7XG4gICAgcmV0dXJuIHVuemlwcGVkQXBwUGF0aDtcbiAgfVxuXG4gIGFzeW5jIG9uUG9zdENvbmZpZ3VyZUFwcCAoe2NhY2hlZEFwcEluZm8sIGlzVXJsLCBhcHBQYXRofSkge1xuICAgIGNvbnN0IHByZXNpZ25BcHAgPSBhc3luYyAoYXBwTG9jYXRpb24pID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMubm9TaWduKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1NraXBwaW5nIGFwcGxpY2F0aW9uIHNpZ25pbmcgYmVjYXVzZSBub1NpZ24gY2FwYWJpbGl0eSBpcyBzZXQgdG8gdHJ1ZS4gJyArXG4gICAgICAgICAgJ0hhdmluZyB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCB3aXRoIGltcHJvcGVyIHNpZ25hdHVyZS9ub24tc2lnbmVkIHdpbGwgY2F1c2UgJyArXG4gICAgICAgICAgJ0VzcHJlc3NvIGF1dG9tYXRpb24gc3RhcnR1cCBmYWlsdXJlLicpO1xuICAgICAgfSBlbHNlIGlmICghYXdhaXQgdGhpcy5hZGIuY2hlY2tBcGtDZXJ0KGFwcExvY2F0aW9uLCB0aGlzLm9wdHMuYXBwUGFja2FnZSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2lnbihhcHBMb2NhdGlvbiwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBoYXNBcGtFeHQgPSAoYXBwUGF0aCkgPT4gXy5lbmRzV2l0aChfLnRvTG93ZXIoYXBwUGF0aCksIEFQS19FWFQpO1xuICAgIGNvbnN0IGhhc0FhYkV4dCA9IChhcHBQYXRoKSA9PiBfLmVuZHNXaXRoKF8udG9Mb3dlcihhcHBQYXRoKSwgQUFCX0VYVCk7XG4gICAgY29uc3QgZXh0cmFjdFVuaXZlcnNhbEFwayA9IGFzeW5jIChzaG91bGRFeHRyYWN0LCBhcHBQYXRoKSA9PlxuICAgICAgc2hvdWxkRXh0cmFjdCA/IGFwcFBhdGggOiBhd2FpdCB0aGlzLmFkYi5leHRyYWN0VW5pdmVyc2FsQXBrKGFwcFBhdGgpO1xuXG4gICAgbGV0IHBhdGhJbkNhY2hlID0gbnVsbDtcbiAgICBsZXQgaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCA9IGZhbHNlO1xuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoY2FjaGVkQXBwSW5mbykpIHtcbiAgICAgIGNvbnN0IHBhY2thZ2VIYXNoID0gYXdhaXQgZnMuaGFzaChhcHBQYXRoKTtcbiAgICAgIGlmIChwYWNrYWdlSGFzaCA9PT0gY2FjaGVkQXBwSW5mby5wYWNrYWdlSGFzaCAmJiBhd2FpdCBmcy5leGlzdHMoY2FjaGVkQXBwSW5mby5mdWxsUGF0aCkpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgJyR7Y2FjaGVkQXBwSW5mby5mdWxsUGF0aH0nIHdoaWNoIGlzIGNhY2hlZCBmcm9tICcke2FwcFBhdGh9J2ApO1xuICAgICAgICBpc1Jlc3VsdEFwcFBhdGhBbHJlYWR5Q2FjaGVkID0gdHJ1ZTtcbiAgICAgICAgcGF0aEluQ2FjaGUgPSBjYWNoZWRBcHBJbmZvLmZ1bGxQYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFwcFBhdGggY2FuIGJlIC56aXAsIC5hcGsgb3IgLmFhYlxuICAgIGNvbnN0IGlzQXBrID0gaGFzQXBrRXh0KGFwcFBhdGgpO1xuICAgIC8vIE9ubHkgbG9jYWwgLmFwayBmaWxlcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4tcGxhY2Ugc2hvdWxkIG5vdCBiZSBjYWNoZWRcbiAgICBjb25zdCBzaG91bGRSZXN1bHRBcHBQYXRoQmVDYWNoZWQgPSAhaXNBcGsgfHwgKGlzQXBrICYmIGlzVXJsKTtcblxuICAgIGlmICghaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCkge1xuICAgICAgaWYgKHNob3VsZFJlc3VsdEFwcFBhdGhCZUNhY2hlZCkge1xuICAgICAgICAvLyAuemlwLCAuYWFiIG9yIGRvd25sb2FkZWQgLmFwa1xuXG4gICAgICAgIGxldCB1bnppcHBlZEFwcFBhdGg7XG4gICAgICAgIGxldCBpc1VuemlwcGVkQXBrID0gZmFsc2U7XG4gICAgICAgIGlmICghKGhhc0Fwa0V4dChhcHBQYXRoKSB8fCBoYXNBYWJFeHQoYXBwUGF0aCkpKSB7XG4gICAgICAgICAgdW56aXBwZWRBcHBQYXRoID0gYXdhaXQgdGhpcy51bnppcEFwcChhcHBQYXRoKTtcbiAgICAgICAgICBpc1VuemlwcGVkQXBrID0gaGFzQXBrRXh0KHVuemlwcGVkQXBwUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1bnppcHBlZEFwcFBhdGggb3IgYXBwUGF0aCBoYXMgU1VQUE9SVEVEX0VYVEVOU0lPTlMuXG4gICAgICAgIHBhdGhJbkNhY2hlID0gdW56aXBwZWRBcHBQYXRoXG4gICAgICAgICAgPyBhd2FpdCBleHRyYWN0VW5pdmVyc2FsQXBrKGlzVW56aXBwZWRBcGssIHVuemlwcGVkQXBwUGF0aClcbiAgICAgICAgICA6IGF3YWl0IGV4dHJhY3RVbml2ZXJzYWxBcGsoaXNBcGssIGFwcFBhdGgpO1xuXG4gICAgICAgIGlmICghaXNBcGsgJiYgaXNVcmwpIHtcbiAgICAgICAgICAvLyBDbGVhbiB1cCB0aGUgdGVtcG9yYXJpbHkgZG93bmxvYWRlZCAuYWFiIG9yIC56aXAgcGFja2FnZVxuICAgICAgICAgIGF3YWl0IGZzLnJpbXJhZihhcHBQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzQWFiRXh0KHVuemlwcGVkQXBwUGF0aCkpIHtcbiAgICAgICAgICAvLyBDbGVhbnVwIHRoZSBsb2NhbCB1bnppcHBlZCAuYWFiIGZpbGVcbiAgICAgICAgICBhd2FpdCBmcy5yaW1yYWYodW56aXBwZWRBcHBQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBwcmVzaWduQXBwKHBhdGhJbkNhY2hlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNBcGspIHtcbiAgICAgICAgLy8gSXQgaXMgcHJvYmFibHkgbm90IHRoZSBiZXN0IGlkZWEgdG8gbW9kaWZ5IHRoZSBwcm92aWRlZCBhcHAgaW4tcGxhY2UsXG4gICAgICAgIC8vIGJ1dCB0aGlzIGlzIGhvdyBpdCB3YXMgYWx3YXlzIHdvcmtpbmdcbiAgICAgICAgYXdhaXQgcHJlc2lnbkFwcChhcHBQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZFJlc3VsdEFwcFBhdGhCZUNhY2hlZCA/IHthcHBQYXRoOiBwYXRoSW5DYWNoZX0gOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGxlIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBpc0VtdWxhdG9yICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0VtdWxhdG9yKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG5cbiAgLy8gVE9ETyB0aGlzIG1ldGhvZCBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyLWRyaXZlcjsgY29uc29saWRhdGVcbiAgc2V0QXZkRnJvbUNhcGFiaWxpdGllcyAoY2Fwcykge1xuICAgIGlmICh0aGlzLm9wdHMuYXZkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgZGV2aWNlTmFtZSBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWNhcHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBwbGF0Zm9ybVZlcnNpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGF2ZERldmljZSA9IGNhcHMuZGV2aWNlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV8uXS9nLCAnLScpO1xuICAgICAgdGhpcy5vcHRzLmF2ZCA9IGAke2F2ZERldmljZX1fXyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259YDtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPIHRoaXMgbWV0aG9kIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjItZHJpdmVyOyBjb25zb2xpZGF0ZVxuICBhZGRXaXBlRGF0YVRvQXZkQXJncyAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuYXZkQXJncykge1xuICAgICAgdGhpcy5vcHRzLmF2ZEFyZ3MgPSAnLXdpcGUtZGF0YSc7XG4gICAgfSBlbHNlIGlmICghdGhpcy5vcHRzLmF2ZEFyZ3MudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnLXdpcGUtZGF0YScpKSB7XG4gICAgICB0aGlzLm9wdHMuYXZkQXJncyArPSAnIC13aXBlLWRhdGEnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gbXVjaCBvZiB0aGlzIGxvZ2ljIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjJcbiAgYXN5bmMgc3RhcnRFc3ByZXNzb1Nlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmluZm8oYEVzcHJlc3NvRHJpdmVyIHZlcnNpb246ICR7dmVyc2lvbn1gKTtcblxuICAgIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tYW5kcm9pZC1kcml2ZXIvcHVsbC80NjEgd2hhdCBoYXBwZW5zIGlmIHRoZXIgaXMgbm8gc2V0SGlkZGVuQXBpUG9saWN5IGZvciBBbmRyb2lkIFArXG4gICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICB0aGlzLmxvZy53YXJuKCdSZWxheGluZyBoaWRkZW4gYXBpIHBvbGljeScpO1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SGlkZGVuQXBpUG9saWN5KCcxJywgISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgIH1cblxuICAgIC8vIGdldCBhcHBQYWNrYWdlIGV0IGFsIGZyb20gbWFuaWZlc3QgaWYgbmVjZXNzYXJ5XG4gICAgbGV0IGFwcEluZm8gPSBhd2FpdCBoZWxwZXJzLmdldExhdW5jaEluZm8odGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgaWYgKGFwcEluZm8pIHtcbiAgICAgIC8vIGFuZCBnZXQgaXQgb250byBvdXIgJ29wdHMnIG9iamVjdCBzbyB3ZSB1c2UgaXQgZnJvbSBub3cgb25cbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRzLCBhcHBJbmZvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwSW5mbyA9IHRoaXMub3B0cztcbiAgICB9XG5cbiAgICAvLyBzdGFydCBhbiBhdmQsIHNldCB0aGUgbGFuZ3VhZ2UvbG9jYWxlLCBwaWNrIGFuIGVtdWxhdG9yLCBldGMuLi5cbiAgICAvLyBUT0RPIHdpdGggbXVsdGlwbGUgZGV2aWNlcyB3ZSdsbCBuZWVkIHRvIHBhcmFtZXRlcml6ZSB0aGlzXG4gICAgYXdhaXQgaGVscGVycy5pbml0RGV2aWNlKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLWVzcHJlc3NvLWRyaXZlci9pc3N1ZXMvNzJcbiAgICBpZiAoYXdhaXQgdGhpcy5hZGIuaXNBbmltYXRpb25PbigpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZShmYWxzZSk7XG4gICAgICAgIHRoaXMud2FzQW5pbWF0aW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHR1cm4gb2ZmIGFuaW1hdGlvbnM6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IGFjdHVhbCBkZXZpY2UgbmFtZSwgdWRpZFxuICAgIHRoaXMuY2Fwcy5kZXZpY2VOYW1lID0gdGhpcy5hZGIuY3VyRGV2aWNlSWQ7XG4gICAgdGhpcy5jYXBzLmRldmljZVVESUQgPSB0aGlzLm9wdHMudWRpZDtcblxuICAgIC8vIHNldCB1cCB0aGUgbW9kaWZpZWQgZXNwcmVzc28gc2VydmVyIGV0Y1xuICAgIHRoaXMuaW5pdEVzcHJlc3NvU2VydmVyKCk7XG4gICAgLy8gRnVydGhlciBwcmVwYXJlIHRoZSBkZXZpY2UgYnkgZm9yd2FyZGluZyB0aGUgZXNwcmVzc28gcG9ydFxuICAgIHRoaXMubG9nLmRlYnVnKGBGb3J3YXJkaW5nIEVzcHJlc3NvIFNlcnZlciBwb3J0ICR7REVWSUNFX1BPUlR9IHRvICR7dGhpcy5vcHRzLnN5c3RlbVBvcnR9YCk7XG4gICAgYXdhaXQgdGhpcy5hZGIuZm9yd2FyZFBvcnQodGhpcy5vcHRzLnN5c3RlbVBvcnQsIERFVklDRV9QT1JUKTtcblxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIC8vIHVubG9jayB0aGUgZGV2aWNlIHRvIHByZXBhcmUgaXQgZm9yIHRlc3RpbmdcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgJ3NraXBVbmxvY2snIGNhcGFiaWxpdHkgc2V0LCBzbyBza2lwcGluZyBkZXZpY2UgdW5sb2NrYCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHVwIGFwcCB1bmRlciB0ZXN0XG4gICAgLy8gcHJlcGFyZSBvdXIgYWN0dWFsIEFVVCwgZ2V0IGl0IG9uIHRoZSBkZXZpY2UsIGV0Yy4uLlxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy9BZGRpbmcgQVVUIHBhY2thZ2UgbmFtZSBpbiB0aGUgY2FwYWJpbGl0aWVzIGlmIHBhY2thZ2UgbmFtZSBub3QgZXhpc3QgaW4gY2Fwc1xuICAgIGlmICghdGhpcy5jYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBQYWNrYWdlID0gYXBwSW5mby5hcHBQYWNrYWdlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSkge1xuICAgICAgdGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlID0gYXBwSW5mby5hcHBXYWl0UGFja2FnZSB8fCBhcHBJbmZvLmFwcFBhY2thZ2UgfHwgdGhpcy5jYXBzLmFwcFBhY2thZ2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhcHMuYXBwQWN0aXZpdHkpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUodGhpcy5jYXBzLmFwcEFjdGl2aXR5LCB0aGlzLmNhcHMuYXBwUGFja2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUoYXBwSW5mby5hcHBBY3Rpdml0eSwgdGhpcy5jYXBzLmFwcFBhY2thZ2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXBzLmFwcFdhaXRBY3Rpdml0eSkge1xuICAgICAgdGhpcy5jYXBzLmFwcFdhaXRBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUodGhpcy5jYXBzLmFwcFdhaXRBY3Rpdml0eSwgdGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXBzLmFwcFdhaXRBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUoYXBwSW5mby5hcHBXYWl0QWN0aXZpdHkgfHwgYXBwSW5mby5hcHBBY3Rpdml0eSB8fCB0aGlzLmNhcHMuYXBwQWN0aXZpdHksXG4gICAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSk7XG4gICAgfVxuXG4gICAgLy8gbGF1bmNoIGVzcHJlc3NvIGFuZCB3YWl0IHRpbGwgaXRzIG9ubGluZSBhbmQgd2UgaGF2ZSBhIHNlc3Npb25cbiAgICBhd2FpdCB0aGlzLmVzcHJlc3NvLnN0YXJ0U2Vzc2lvbih0aGlzLmNhcHMpO1xuICAgIGlmICh0aGlzLmNhcHMuYXV0b0xhdW5jaCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYE5vdCB3YWl0aW5nIGZvciB0aGUgYXBwbGljYXRpb24gYWN0aXZpdHkgdG8gc3RhcnQgYmVjYXVzZSAnYXV0b0xhdW5jaCcgaXMgZGlzYWJsZWRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5hZGIud2FpdEZvckFjdGl2aXR5KHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSwgdGhpcy5jYXBzLmFwcFdhaXRBY3Rpdml0eSwgdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbik7XG4gICAgfVxuICAgIC8vIGlmIHdlIHdhbnQgdG8gaW1tZWRpYXRlbHkgZ2V0IGludG8gYSB3ZWJ2aWV3LCBzZXQgb3VyIGNvbnRleHRcbiAgICAvLyBhcHByb3ByaWF0ZWx5XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgYXdhaXQgdGhpcy5pbml0V2VidmlldygpO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IGV2ZXJ5dGhpbmcgaGFzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LCB0dXJuIG9uIHByb3h5aW5nIHNvIGFsbFxuICAgIC8vIHN1YnNlcXVlbnQgc2Vzc2lvbiByZXF1ZXN0cyBnbyBzdHJhaWdodCB0by9mcm9tIGVzcHJlc3NvXG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG5cbiAgICBhd2FpdCB0aGlzLmFkZERldmljZUluZm9Ub0NhcHMoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRXZWJ2aWV3ICgpIHtcbiAgICBjb25zdCB2aWV3TmFtZSA9IGFuZHJvaWRDb21tYW5kcy5kZWZhdWx0V2Vidmlld05hbWUuY2FsbCh0aGlzKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5vcHRzLmF1dG9XZWJ2aWV3VGltZW91dCB8fCAyMDAwO1xuICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgd2VidmlldyB0byBjb250ZXh0ICcke3ZpZXdOYW1lfScgd2l0aCB0aW1lb3V0ICR7dGltZW91dH1tc2ApO1xuICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCB0aGlzLnNldENvbnRleHQuYmluZCh0aGlzKSwgdmlld05hbWUpO1xuICB9XG5cbiAgYXN5bmMgYWRkRGV2aWNlSW5mb1RvQ2FwcyAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtVmVyc2lvbixcbiAgICAgIG1hbnVmYWN0dXJlcixcbiAgICAgIG1vZGVsLFxuICAgICAgcmVhbERpc3BsYXlTaXplLFxuICAgICAgZGlzcGxheURlbnNpdHksXG4gICAgfSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0RGV2aWNlSW5mbygpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VBcGlMZXZlbCA9IHBhcnNlSW50KGFwaVZlcnNpb24sIDEwKTtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5TaXplID0gcmVhbERpc3BsYXlTaXplO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5EZW5zaXR5ID0gZGlzcGxheURlbnNpdHk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5jYXBzLmRldmljZU1hbnVmYWN0dXJlciA9IG1hbnVmYWN0dXJlcjtcbiAgfVxuXG4gIGluaXRFc3ByZXNzb1NlcnZlciAoKSB7XG4gICAgLy8gbm93IHRoYXQgd2UgaGF2ZSBwYWNrYWdlIGFuZCBhY3Rpdml0eSwgd2UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZlxuICAgIC8vIGVzcHJlc3NvIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRhdGFcbiAgICB0aGlzLmVzcHJlc3NvID0gbmV3IEVzcHJlc3NvUnVubmVyKHRoaXMubG9nLCB7XG4gICAgICBob3N0OiB0aGlzLm9wdHMucmVtb3RlQWRiSG9zdCB8fCB0aGlzLm9wdHMuaG9zdCB8fCAnMTI3LjAuMC4xJyxcbiAgICAgIHN5c3RlbVBvcnQ6IHRoaXMub3B0cy5zeXN0ZW1Qb3J0LFxuICAgICAgZGV2aWNlUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICBhZGI6IHRoaXMuYWRiLFxuICAgICAgYXBrOiB0aGlzLm9wdHMuYXBwLFxuICAgICAgdG1wRGlyOiB0aGlzLm9wdHMudG1wRGlyLFxuICAgICAgYXBwUGFja2FnZTogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICBhcHBBY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgZm9yY2VFc3ByZXNzb1JlYnVpbGQ6ICEhdGhpcy5vcHRzLmZvcmNlRXNwcmVzc29SZWJ1aWxkLFxuICAgICAgZXNwcmVzc29CdWlsZENvbmZpZzogdGhpcy5vcHRzLmVzcHJlc3NvQnVpbGRDb25maWcsXG4gICAgICBzaG93R3JhZGxlTG9nOiAhIXRoaXMub3B0cy5zaG93R3JhZGxlTG9nLFxuICAgICAgc2VydmVyTGF1bmNoVGltZW91dDogdGhpcy5vcHRzLmVzcHJlc3NvU2VydmVyTGF1bmNoVGltZW91dCxcbiAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogdGhpcy5vcHRzLmFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIHNraXBTZXJ2ZXJJbnN0YWxsYXRpb246IHRoaXMub3B0cy5za2lwU2VydmVySW5zdGFsbGF0aW9uLFxuICAgICAgdXNlS2V5c3RvcmU6IHRoaXMub3B0cy51c2VLZXlzdG9yZSxcbiAgICAgIGtleXN0b3JlUGF0aDogdGhpcy5vcHRzLmtleXN0b3JlUGF0aCxcbiAgICAgIGtleXN0b3JlUGFzc3dvcmQ6IHRoaXMub3B0cy5rZXlzdG9yZVBhc3N3b3JkLFxuICAgICAga2V5QWxpYXM6IHRoaXMub3B0cy5rZXlBbGlhcyxcbiAgICAgIGtleVBhc3N3b3JkOiB0aGlzLm9wdHMua2V5UGFzc3dvcmQsXG4gICAgICBkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZTogdGhpcy5vcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmVzcHJlc3NvLnByb3h5UmVxUmVzLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gICAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLmVzcHJlc3NvLnByb3h5Q29tbWFuZC5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICB9XG5cbiAgLy8gVE9ETyB0aGlzIG1ldGhvZCBpcyBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMlxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBzZXQgdGhlIGxvY2FsaXplZCBzdHJpbmdzIGZvciB0aGUgY3VycmVudCBsYW5ndWFnZSBmcm9tIHRoZSBhcGtcbiAgICAvLyBUT0RPOiBpbmNvcnBvcmF0ZSBjaGFuZ2VzIGZyb20gYXBwaXVtIzUzMDggd2hpY2ggZml4IGEgcmFjZSBjb25kLVxuICAgIC8vIGl0aW9uIGJ1ZyBpbiBvbGQgYXBwaXVtIGFuZCBuZWVkIHRvIGJlIHJlcGxpY2F0ZWQgaGVyZVxuICAgIC8vIHRoaXMuYXBrU3RyaW5nc1t0aGlzLm9wdHMubGFuZ3VhZ2VdID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMucHVzaFN0cmluZ3MoXG4gICAgLy8gICAgIHRoaXMub3B0cy5sYW5ndWFnZSwgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG5cbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgYXdhaXQgaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzKFxuICAgICAgICB0aGlzLmFkYixcbiAgICAgICAgaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSxcbiAgICAgICAgW1NFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFRFU1RfQVBLX1BLR11cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdGdWxsIHJlc2V0IHJlcXVpcmVzIGFuIGFwcCBjYXBhYmlsaXR5LCB1c2UgZmFzdFJlc2V0IGlmIGFwcCBpcyBub3QgcHJvdmlkZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBhcHAgY2FwYWJpbGl0eS4gQXNzdW1pbmcgaXQgaXMgYWxyZWFkeSBvbiB0aGUgZGV2aWNlJyk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZhc3RSZXNldCkge1xuICAgICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0QXBwKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmluc3RhbGwpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxBcGsodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMuc2tpcFNlcnZlckluc3RhbGxhdGlvbikge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ3NraXBTZXJ2ZXJJbnN0YWxsYXRpb24gY2FwYWJpbGl0eSBpcyBzZXQuIE5vdCBpbnN0YWxsaWcgZXNwcmVzc28tc2VydmVyICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmVzcHJlc3NvLmluc3RhbGxUZXN0QXBrKCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5hZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QoU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgVEVTVF9BUEtfUEtHKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IGFkZCBzZXJ2ZXIgcGFja2FnZXMgdG8gdGhlIERvemUgd2hpdGVsaXN0LiBPcmlnaW5hbCBlcnJvcjogYCArXG4gICAgICAgICAgKGUuc3RkZXJyIHx8IGUubWVzc2FnZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdEZWxldGluZyBlc3ByZXNzbyBzZXNzaW9uJyk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9wUmVjb3JkaW5nU2NyZWVuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuXG4gICAgYXdhaXQgYW5kcm9pZEhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBhd2FpdCB0aGlzLm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcoKTtcblxuICAgIGlmICh0aGlzLmVzcHJlc3NvKSB7XG4gICAgICBpZiAodGhpcy5qd3BQcm94eUFjdGl2ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmVzcHJlc3NvLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXNwcmVzc28gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG5cbiAgICAvLyBUT0RPIGJlbG93IGxvZ2ljIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjJcbiAgICBpZiAodGhpcy5hZGIpIHtcbiAgICAgIGlmICh0aGlzLndhc0FuaW1hdGlvbkVuYWJsZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZSh0cnVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHJlc2V0IGFuaW1hdGlvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQgJiYgdGhpcy5vcHRzLnJlc2V0S2V5Ym9hcmQgJiZcbiAgICAgICAgICB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFJlc2V0dGluZyBJTUUgdG8gJyR7dGhpcy5kZWZhdWx0SU1FfSdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNDaHJvbWVTZXNzaW9uICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlICYmICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgJiYgIXRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYEZVTExfUkVTRVQgc2V0IHRvICd0cnVlJywgVW5pbnN0YWxsaW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfSdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLnN0b3BMb2djYXQoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIGxldCBhdmROYW1lID0gdGhpcy5vcHRzLmF2ZC5yZXBsYWNlKCdAJywgJycpO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgY2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICAgIGlmICh0aGlzLm9wdHMuc3lzdGVtUG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMuc3lzdGVtUG9ydCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcmVtb3ZlIHBvcnQgZm9yd2FyZCAnJHtlcnJvci5tZXNzYWdlfSdgKTtcbiAgICAgICAgLy9JZ25vcmUsIHRoaXMgYmxvY2sgd2lsbCBhbHNvIGJlIGNhbGxlZCB3aGVuIHdlIGZhbGwgaW4gY2F0Y2ggYmxvY2tcbiAgICAgICAgLy8gYW5kIGJlZm9yZSBldmVuIHBvcnQgZm9yd2FyZC5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlICgpIHtcbiAgICAvLyBpbnRlbnRpb25hbGx5IGRvIG5vdGhpbmcgaGVyZSwgc2luY2UgY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgcHJveGllc1xuICAgIC8vIHNldHRpbmdzIHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXIgYWxyZWFkeVxuICB9XG5cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBhbHdheXMgaGF2ZSBhbiBhY3RpdmUgcHJveHkgdG8gdGhlIGVzcHJlc3NvIHNlcnZlclxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmNhblByb3h5KHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBjYW4gYWx3YXlzIHByb3h5IHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuICAgIC8vIHdlIGFyZSBtYWludGFpbmluZyB0d28gc2V0cyBvZiBOT19QUk9YWSBsaXN0cywgb25lIGZvciBjaHJvbWVkcml2ZXIoQ0hST01FX05PX1BST1hZKVxuICAgIC8vIGFuZCBvbmUgZm9yIEVzcHJlc3NvKE5PX1BST1hZKSwgYmFzZWQgb24gY3VycmVudCBjb250ZXh0IHdpbGwgcmV0dXJuIHJlbGF0ZWQgTk9fUFJPWFkgbGlzdFxuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IF8uaXNOaWwodGhpcy5jaHJvbWVkcml2ZXIpID8gTk9fUFJPWFkgOiBDSFJPTUVfTk9fUFJPWFk7XG4gICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbLi4udGhpcy5qd3BQcm94eUF2b2lkLCBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cblxuICBnZXQgYXBwT25EZXZpY2UgKCkge1xuICAgIHJldHVybiAhdGhpcy5vcHRzLmFwcCAmJiB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICB9XG59XG5cbi8vIGZpcnN0IGFkZCB0aGUgYW5kcm9pZC1kcml2ZXIgY29tbWFuZHMgd2hpY2ggd2Ugd2lsbCBmYWxsIGJhY2sgdG9cbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoYW5kcm9pZENvbW1hbmRzKSkge1xuICAvLyB3ZSBkbyBzb21lIGRpZmZlcmVudC9zcGVjaWFsIHRoaW5ncyB3aXRoIHRoZXNlIG1ldGhvZHNcbiAgaWYgKCFfLmluY2x1ZGVzKFsnZGVmYXVsdFdlYnZpZXdOYW1lJ10sIGNtZCkpIHtcbiAgICBFc3ByZXNzb0RyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xuICB9XG59XG5cbi8vIHRoZW4gb3ZlcndyaXRlIHdpdGggYW55IGVzcHJlc3NvLXNwZWNpZmljIGNvbW1hbmRzXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICBFc3ByZXNzb0RyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xufVxuXG5leHBvcnQgeyBFc3ByZXNzb0RyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgRXNwcmVzc29Ecml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUEsTUFBTUEsT0FBTyxHQUFHQyxtQ0FBaEI7QUFJQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLENBQTFCO0FBSUEsTUFBTUMsV0FBVyxHQUFHLElBQXBCO0FBTUEsTUFBTUMsUUFBUSxHQUFHLENBQ2YsQ0FBQyxLQUFELEVBQVEsSUFBSUMsTUFBSixDQUFXLG1CQUFYLENBQVIsQ0FEZSxFQUVmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVyxnREFBWCxDQUFSLENBRmUsRUFHZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsK0NBQVgsQ0FBUixDQUhlLEVBSWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLCtDQUFYLENBQVIsQ0FKZSxFQUtmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVyxpREFBWCxDQUFSLENBTGUsRUFNZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBUixDQU5lLEVBT2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEs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
|
|
@@ -9,7 +9,7 @@ exports.default = exports.TEST_APK_PKG = exports.REQUIRED_PARAMS = exports.Espre
|
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _driver = require("appium/driver");
|
|
13
13
|
|
|
14
14
|
var _asyncbox = require("asyncbox");
|
|
15
15
|
|
|
@@ -17,7 +17,7 @@ var _serverBuilder = require("./server-builder");
|
|
|
17
17
|
|
|
18
18
|
var _path = _interopRequireDefault(require("path"));
|
|
19
19
|
|
|
20
|
-
var _support = require("
|
|
20
|
+
var _support = require("appium/support");
|
|
21
21
|
|
|
22
22
|
var _package = require("../../package.json");
|
|
23
23
|
|
|
@@ -38,7 +38,7 @@ exports.REQUIRED_PARAMS = REQUIRED_PARAMS;
|
|
|
38
38
|
const ESPRESSO_SERVER_LAUNCH_TIMEOUT_MS = 45000;
|
|
39
39
|
const TARGET_PACKAGE_CONTAINER = '/data/local/tmp/espresso.apppackage';
|
|
40
40
|
|
|
41
|
-
class EspressoProxy extends
|
|
41
|
+
class EspressoProxy extends _driver.JWProxy {
|
|
42
42
|
async proxyCommand(url, method, body = null) {
|
|
43
43
|
const {
|
|
44
44
|
crashed,
|
|
@@ -46,7 +46,7 @@ class EspressoProxy extends _baseDriver.JWProxy {
|
|
|
46
46
|
} = this.instrumentationState;
|
|
47
47
|
|
|
48
48
|
if (exited) {
|
|
49
|
-
throw new
|
|
49
|
+
throw new _driver.errors.InvalidContextError(`'${method} ${url}' cannot be proxied to Espresso server because ` + `the instrumentation process has ${crashed ? 'crashed' : 'been unexpectedly terminated'}. ` + `Check the Appium server log and the logcat output for more details`);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
return await super.proxyCommand(url, method, body);
|
|
@@ -354,4 +354,4 @@ var _default = EspressoRunner;
|
|
|
354
354
|
exports.default = _default;require('source-map-support').install();
|
|
355
355
|
|
|
356
356
|
|
|
357
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2VzcHJlc3NvLXJ1bm5lci5qcyIsIm5hbWVzIjpbIlRFU1RfU0VSVkVSX1JPT1QiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsIlRFU1RfQVBLX1BLRyIsIlJFUVVJUkVEX1BBUkFNUyIsIkVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUyIsIlRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUiIsIkVzcHJlc3NvUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImNyYXNoZWQiLCJleGl0ZWQiLCJpbnN0cnVtZW50YXRpb25TdGF0ZSIsImVycm9ycyIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJFc3ByZXNzb1J1bm5lciIsImNvbnN0cnVjdG9yIiwibG9nIiwib3B0cyIsInJlcSIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiandwcm94eSIsInNlcnZlciIsImhvc3QiLCJwb3J0Iiwic3lzdGVtUG9ydCIsImJhc2UiLCJrZWVwQWxpdmUiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJjb21tYW5kIiwibW9kU2VydmVyTmFtZSIsImZzIiwic2FuaXRpemVOYW1lIiwidmVyc2lvbiIsImFwcFBhY2thZ2UiLCJhZGIiLCJjdXJEZXZpY2VJZCIsInJlcGxhY2VtZW50IiwibW9kU2VydmVyUGF0aCIsInRtcERpciIsInNob3dHcmFkbGVMb2ciLCJlc3ByZXNzb0J1aWxkQ29uZmlnIiwic2VydmVyTGF1bmNoVGltZW91dCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInNpZ25pbmdDb25maWciLCJidWlsZFNlcnZlclNpZ25pbmdDb25maWciLCJrZXlzdG9yZUZpbGUiLCJpc0FwcFBhY2thZ2VDaGFuZ2VkIiwiZmlsZUV4aXN0cyIsImRlYnVnIiwicHJldmlvdXNBcHBQYWNrYWdlIiwic2hlbGwiLCJ0cmltIiwiaW5zdGFsbFNlcnZlciIsImFwcFN0YXRlIiwiZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUiLCJzaG91bGRVbmluc3RhbGxBcHAiLCJBUFBfSU5TVEFMTF9TVEFURSIsIk9MREVSX1ZFUlNJT05fSU5TVEFMTEVEIiwiTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJpbmNsdWRlcyIsInNob3VsZEluc3RhbGxBcHAiLCJOT1RfSU5TVEFMTEVEIiwiaW5mbyIsInVuaW5zdGFsbEFwayIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwiaW5zdGFsbCIsInJlcGxhY2UiLCJ0aW1lb3V0IiwiZXJyb3JBbmRUaHJvdyIsImluc3RhbGxUZXN0QXBrIiwicmVidWlsZCIsImZvcmNlRXNwcmVzc29SZWJ1aWxkIiwiZXhpc3RzIiwidW5saW5rIiwiYnVpbGROZXdNb2RTZXJ2ZXIiLCJpc1NpZ25lZCIsImNoZWNrQXBrQ2VydCIsInNpZ24iLCJidWlsZENvbmZpZ3VyYXRpb24iLCJidWlsZENvbmZpZ3VyYXRpb25TdHIiLCJyZWFkRmlsZSIsIkpTT04iLCJwYXJzZSIsImUiLCJlcnJvciIsImRpck5hbWUiLCJzZXJ2ZXJQYXRoIiwicmltcmFmIiwibWtkaXJwIiwiY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseSIsIlNlcnZlckJ1aWxkZXIiLCJ0ZXN0QXBwUGFja2FnZSIsImJ1aWxkIiwiYXBrUGF0aCIsImNvcHlGaWxlIiwiY2xlYW51cFNlc3Npb25MZWZ0b3ZlcnMiLCJ2YWx1ZSIsImF4aW9zIiwiZGF0YSIsImFjdGl2ZVNlc3Npb25JZHMiLCJtYXAiLCJzZXNzIiwiaWQiLCJsZW5ndGgiLCJzdHJpbmdpZnkiLCJCIiwiYWxsIiwiZGVsYXkiLCJzdGFydFNlc3Npb24iLCJjYXBzIiwiY21kIiwicHJvY2VzcyIsImVudiIsIkVTUFJFU1NPX0pBVkFfREVCVUciLCJfIiwiaXNCb29sZWFuIiwicHVzaCIsImpvaW4iLCJoYXNTb2NrZXRFcnJvciIsImluc3RQcm9jZXNzIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0ZG91dCIsInN0ZGVyciIsImxpbmUiLCJpc0VtcHR5IiwidG9Mb3dlckNhc2UiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsInRlc3QiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInJlY29yZFRhcmdldEFwcFBhY2thZ2UiLCJkZWxldGVTZXNzaW9uIiwiaXNSdW5uaW5nIiwic3RvcCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9lc3ByZXNzby1ydW5uZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgU2VydmVyQnVpbGRlciwgYnVpbGRTZXJ2ZXJTaWduaW5nQ29uZmlnIH0gZnJvbSAnLi9zZXJ2ZXItYnVpbGRlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZzLCB1dGlsLCBta2RpcnAsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGNvcHlHcmFkbGVQcm9qZWN0UmVjdXJzaXZlbHkgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cblxuY29uc3QgVEVTVF9TRVJWRVJfUk9PVCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICdlc3ByZXNzby1zZXJ2ZXInKTtcbmNvbnN0IFRFU1RfQVBLX1BLRyA9ICdpby5hcHBpdW0uZXNwcmVzc29zZXJ2ZXIudGVzdCc7XG5jb25zdCBSRVFVSVJFRF9QQVJBTVMgPSBbXG4gICdhZGInLFxuICAndG1wRGlyJyxcbiAgJ2hvc3QnLFxuICAnc3lzdGVtUG9ydCcsXG4gICdkZXZpY2VQb3J0JyxcbiAgJ2FwcFBhY2thZ2UnLFxuICAnZm9yY2VFc3ByZXNzb1JlYnVpbGQnLFxuXTtcbmNvbnN0IEVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUyA9IDQ1MDAwO1xuY29uc3QgVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSID0gJy9kYXRhL2xvY2FsL3RtcC9lc3ByZXNzby5hcHBwYWNrYWdlJztcblxuY2xhc3MgRXNwcmVzc29Qcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBhc3luYyBwcm94eUNvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGNvbnN0IHtjcmFzaGVkLCBleGl0ZWR9ID0gdGhpcy5pbnN0cnVtZW50YXRpb25TdGF0ZTtcbiAgICBpZiAoZXhpdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoYCcke21ldGhvZH0gJHt1cmx9JyBjYW5ub3QgYmUgcHJveGllZCB0byBFc3ByZXNzbyBzZXJ2ZXIgYmVjYXVzZSBgICtcbiAgICAgICAgYHRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyBoYXMgJHtjcmFzaGVkID8gJ2NyYXNoZWQnIDogJ2JlZW4gdW5leHBlY3RlZGx5IHRlcm1pbmF0ZWQnfS4gYCArXG4gICAgICAgIGBDaGVjayB0aGUgQXBwaXVtIHNlcnZlciBsb2cgYW5kIHRoZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnByb3h5Q29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cbn1cblxuY2xhc3MgRXNwcmVzc29SdW5uZXIge1xuICBjb25zdHJ1Y3RvciAobG9nLCBvcHRzID0ge30pIHtcbiAgICBmb3IgKGxldCByZXEgb2YgUkVRVUlSRURfUEFSQU1TKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgIXV0aWwuaGFzVmFsdWUob3B0c1tyZXFdKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wdGlvbiAnJHtyZXF9JyBpcyByZXF1aXJlZCFgKTtcbiAgICAgIH1cbiAgICAgIHRoaXNbcmVxXSA9IG9wdHNbcmVxXTtcbiAgICB9XG4gICAgdGhpcy5sb2cgPSBsb2c7XG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEVzcHJlc3NvUHJveHkoe1xuICAgICAgbG9nLFxuICAgICAgc2VydmVyOiB0aGlzLmhvc3QsXG4gICAgICBwb3J0OiB0aGlzLnN5c3RlbVBvcnQsXG4gICAgICBiYXNlOiAnJyxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzLmJpbmQodGhpcy5qd3Byb3h5KTtcbiAgICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5qd3Byb3h5KTtcbiAgICB0aGlzLmp3cHJveHkuaW5zdHJ1bWVudGF0aW9uU3RhdGUgPSB7XG4gICAgICBleGl0ZWQ6IGZhbHNlLFxuICAgICAgY3Jhc2hlZDogZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IG1vZFNlcnZlck5hbWUgPSBmcy5zYW5pdGl6ZU5hbWUoYCR7VEVTVF9BUEtfUEtHfV8ke3ZlcnNpb259XyR7dGhpcy5hcHBQYWNrYWdlfV8ke3RoaXMuYWRiLmN1ckRldmljZUlkfS5hcGtgLCB7XG4gICAgICByZXBsYWNlbWVudDogJy0nLFxuICAgIH0pO1xuICAgIHRoaXMubW9kU2VydmVyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLnRtcERpciwgbW9kU2VydmVyTmFtZSk7XG4gICAgdGhpcy5zaG93R3JhZGxlTG9nID0gb3B0cy5zaG93R3JhZGxlTG9nO1xuICAgIHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZyA9IG9wdHMuZXNwcmVzc29CdWlsZENvbmZpZztcblxuICAgIHRoaXMuc2VydmVyTGF1bmNoVGltZW91dCA9IG9wdHMuc2VydmVyTGF1bmNoVGltZW91dCB8fCBFU1BSRVNTT19TRVJWRVJfTEFVTkNIX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5hbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBvcHRzLmFuZHJvaWRJbnN0YWxsVGltZW91dDtcblxuICAgIHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UgPSBvcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlO1xuXG4gICAgLy8gRXNwcmVzc28gU2VydmVyIGFwcCBuZWVkcyB0byBiZSBzaWduZWQgd2l0aCBzYW1lIGtleVN0b3JlIGFzIGFwcFBhY2thZ2VcbiAgICBpZiAob3B0cy51c2VLZXlzdG9yZSAmJiBvcHRzLmtleXN0b3JlUGF0aCAmJiBvcHRzLmtleXN0b3JlUGFzc3dvcmQgJiYgb3B0cy5rZXlBbGlhcyAmJiBvcHRzLmtleVBhc3N3b3JkKSB7XG4gICAgICB0aGlzLnNpZ25pbmdDb25maWcgPSBidWlsZFNlcnZlclNpZ25pbmdDb25maWcoe1xuICAgICAgICBrZXlzdG9yZUZpbGU6IG9wdHMua2V5c3RvcmVQYXRoLFxuICAgICAgICBrZXlzdG9yZVBhc3N3b3JkOiBvcHRzLmtleXN0b3JlUGFzc3dvcmQsXG4gICAgICAgIGtleUFsaWFzOiBvcHRzLmtleUFsaWFzLFxuICAgICAgICBrZXlQYXNzd29yZDogb3B0cy5rZXlQYXNzd29yZFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2lnbmluZ0NvbmZpZyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNBcHBQYWNrYWdlQ2hhbmdlZCAoKSB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmFkYi5maWxlRXhpc3RzKFRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUikpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdUaGUgcHJldmlvdXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHBhY2thZ2UgaXMgdW5rbm93bicpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzQXBwUGFja2FnZSA9IChhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2NhdCcsIFRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUl0pKS50cmltKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFRoZSBwcmV2aW91cyB0YXJnZXQgYXBwbGljYXRpb24gcGFja2FnZSB3YXMgJyR7cHJldmlvdXNBcHBQYWNrYWdlfScuIGAgK1xuICAgICAgYFRoZSBjdXJyZW50IHBhY2thZ2UgaXMgJyR7dGhpcy5hcHBQYWNrYWdlfSdgKTtcbiAgICByZXR1cm4gcHJldmlvdXNBcHBQYWNrYWdlICE9PSB0aGlzLmFwcFBhY2thZ2U7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbHMgRXNwcmVzc28gc2VydmVyIGFwayBvbiB0byB0aGUgZGV2aWNlIG9yIGVtdWxhdG9yLlxuICAgKiBFYWNoIGFkYiBjb21tYW5kIHVzZXMgZGVmYXVsdCB0aW1lb3V0IGJ5IHRoZW0uXG4gICAqL1xuICBhc3luYyBpbnN0YWxsU2VydmVyICgpIHtcbiAgICBjb25zdCBhcHBTdGF0ZSA9IGF3YWl0IHRoaXMuYWRiLmdldEFwcGxpY2F0aW9uSW5zdGFsbFN0YXRlKHRoaXMubW9kU2VydmVyUGF0aCwgVEVTVF9BUEtfUEtHKTtcblxuICAgIGNvbnN0IHNob3VsZFVuaW5zdGFsbEFwcCA9IFtcbiAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk9MREVSX1ZFUlNJT05fSU5TVEFMTEVELFxuICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuTkVXRVJfVkVSU0lPTl9JTlNUQUxMRURcbiAgICBdLmluY2x1ZGVzKGFwcFN0YXRlKTtcbiAgICBjb25zdCBzaG91bGRJbnN0YWxsQXBwID0gc2hvdWxkVW5pbnN0YWxsQXBwIHx8IFtcbiAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk5PVF9JTlNUQUxMRURcbiAgICBdLmluY2x1ZGVzKGFwcFN0YXRlKTtcblxuICAgIGlmIChzaG91bGRVbmluc3RhbGxBcHApIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFVuaW5zdGFsbGluZyBFc3ByZXNzbyBUZXN0IFNlcnZlciBhcGsgZnJvbSB0aGUgdGFyZ2V0IGRldmljZSAocGtnOiAnJHtURVNUX0FQS19QS0d9JylgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayhURVNUX0FQS19QS0cpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYEVycm9yIHVuaW5zdGFsbGluZyAnJHtURVNUX0FQS19QS0d9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkSW5zdGFsbEFwcCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgSW5zdGFsbGluZyBFc3ByZXNzbyBUZXN0IFNlcnZlciBhcGsgZnJvbSB0aGUgdGFyZ2V0IGRldmljZSAocGF0aDogJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofScpYCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsKHRoaXMubW9kU2VydmVyUGF0aCwgeyByZXBsYWNlOiBmYWxzZSwgdGltZW91dDogdGhpcy5hbmRyb2lkSW5zdGFsbFRpbWVvdXQgfSk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYEluc3RhbGxlZCBFc3ByZXNzbyBUZXN0IFNlcnZlciBhcGsgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofScgKHBrZzogJyR7VEVTVF9BUEtfUEtHfScpYCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGluc3RhbGwgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofScgYmVjYXVzZSBvZiAnJHtlcnIubWVzc2FnZX0nYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFRlc3RBcGsgKCkge1xuICAgIGxldCByZWJ1aWxkID0gdGhpcy5mb3JjZUVzcHJlc3NvUmVidWlsZDtcbiAgICBpZiAocmVidWlsZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYCdmb3JjZUVzcHJlc3NvUmVidWlsZCcgY2FwYWJpbGl0eSBpcyBlbmFibGVkYCk7XG4gICAgfSBlbHNlIGlmIChhd2FpdCB0aGlzLmlzQXBwUGFja2FnZUNoYW5nZWQoKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgRm9yY2luZyBFc3ByZXNzbyBzZXJ2ZXIgcmVidWlsZCBiZWNhdXNlIG9mIGNoYW5nZWQgYXBwbGljYXRpb24gcGFja2FnZWApO1xuICAgICAgcmVidWlsZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlYnVpbGQgJiYgYXdhaXQgZnMuZXhpc3RzKHRoaXMubW9kU2VydmVyUGF0aCkpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBEZWxldGluZyB0aGUgb2Jzb2xldGUgRXNwcmVzc28gc2VydmVyIHBhY2thZ2UgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofSdgKTtcbiAgICAgIGF3YWl0IGZzLnVubGluayh0aGlzLm1vZFNlcnZlclBhdGgpO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBmcy5leGlzdHModGhpcy5tb2RTZXJ2ZXJQYXRoKSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGROZXdNb2RTZXJ2ZXIoKTtcbiAgICB9XG4gICAgY29uc3QgaXNTaWduZWQgPSBhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5tb2RTZXJ2ZXJQYXRoLCBURVNUX0FQS19QS0cpO1xuICAgIGlmICghaXNTaWduZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNpZ24odGhpcy5tb2RTZXJ2ZXJQYXRoKTtcbiAgICB9XG4gICAgaWYgKChyZWJ1aWxkIHx8ICFpc1NpZ25lZCkgJiYgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKFRFU1RfQVBLX1BLRykpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1VuaW5zdGFsbGVkIHRoZSBvYnNvbGV0ZSBFc3ByZXNzbyBzZXJ2ZXIgcGFja2FnZSBmcm9tIHRoZSBkZXZpY2UgdW5kZXIgdGVzdCcpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5zdGFsbFNlcnZlcigpO1xuICB9XG5cbiAgYXN5bmMgYnVpbGROZXdNb2RTZXJ2ZXIgKCkge1xuICAgIGxldCBidWlsZENvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICBpZiAodGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnKSB7XG4gICAgICBsZXQgYnVpbGRDb25maWd1cmF0aW9uU3RyO1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLmVzcHJlc3NvQnVpbGRDb25maWcpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYExvYWRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZnJvbSAnJHt0aGlzLmVzcHJlc3NvQnVpbGRDb25maWd9J2ApO1xuICAgICAgICBidWlsZENvbmZpZ3VyYXRpb25TdHIgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLmVzcHJlc3NvQnVpbGRDb25maWcsICd1dGY4Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBMb2FkaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZyb20gJ2VzcHJlc3NvQnVpbGRDb25maWcnIGNhcGFiaWxpdHlgKTtcbiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uU3RyID0gdGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gSlNPTi5wYXJzZShidWlsZENvbmZpZ3VyYXRpb25TdHIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvcignQ2Fubm90IHBhcnNlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIEpTT04nLCBlKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGlyTmFtZSA9IGZzLnNhbml0aXplTmFtZShgZXNwcmVzc28tc2VydmVyLSR7dGhpcy5hZGIuY3VyRGV2aWNlSWR9YCwge1xuICAgICAgcmVwbGFjZW1lbnQ6ICctJyxcbiAgICB9KTtcbiAgICBjb25zdCBzZXJ2ZXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMudG1wRGlyLCBkaXJOYW1lKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBCdWlsZGluZyBlc3ByZXNzbyBzZXJ2ZXIgaW4gJyR7c2VydmVyUGF0aH0nYCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFRoZSBidWlsZCBmb2xkZXIgcm9vdCBjb3VsZCBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHRoZSAndG1wRGlyJyBjYXBhYmlsaXR5YCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHNlcnZlclBhdGgpO1xuICAgIGF3YWl0IG1rZGlycChzZXJ2ZXJQYXRoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29weWluZyBlc3ByZXNzbyBzZXJ2ZXIgdGVtcGxhdGUgZnJvbSAoJyR7VEVTVF9TRVJWRVJfUk9PVH0nIHRvICcke3NlcnZlclBhdGh9JylgKTtcbiAgICBhd2FpdCBjb3B5R3JhZGxlUHJvamVjdFJlY3Vyc2l2ZWx5KFRFU1RfU0VSVkVSX1JPT1QsIHNlcnZlclBhdGgpO1xuICAgIHRoaXMubG9nLmRlYnVnKCdCdWxkaW5nIGVzcHJlc3NvIHNlcnZlcicpO1xuICAgIGF3YWl0IG5ldyBTZXJ2ZXJCdWlsZGVyKHRoaXMubG9nLCB7XG4gICAgICBzZXJ2ZXJQYXRoLCBidWlsZENvbmZpZ3VyYXRpb24sXG4gICAgICBzaG93R3JhZGxlTG9nOiB0aGlzLnNob3dHcmFkbGVMb2csXG4gICAgICB0ZXN0QXBwUGFja2FnZTogdGhpcy5hcHBQYWNrYWdlLFxuICAgICAgc2lnbmluZ0NvbmZpZzogdGhpcy5zaWduaW5nQ29uZmlnXG4gICAgfSkuYnVpbGQoKTtcbiAgICBjb25zdCBhcGtQYXRoID0gcGF0aC5yZXNvbHZlKHNlcnZlclBhdGgsICdhcHAnLCAnYnVpbGQnLCAnb3V0cHV0cycsICdhcGsnLCAnYW5kcm9pZFRlc3QnLCAnZGVidWcnLCAnYXBwLWRlYnVnLWFuZHJvaWRUZXN0LmFwaycpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDb3B5aW5nIGJ1aWx0IGFwayBmcm9tICcke2Fwa1BhdGh9JyB0byAnJHt0aGlzLm1vZFNlcnZlclBhdGh9J2ApO1xuICAgIGF3YWl0IGZzLmNvcHlGaWxlKGFwa1BhdGgsIHRoaXMubW9kU2VydmVyUGF0aCk7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwU2Vzc2lvbkxlZnRvdmVycyAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1BlcmZvcm1pbmcgY2xlYW51cCBvZiBhdXRvbWF0aW9uIGxlZnRvdmVycycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICB1cmw6IGBodHRwOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5zeXN0ZW1Qb3J0fS9zZXNzaW9uc2AsXG4gICAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICAgIH0pKS5kYXRhO1xuICAgICAgY29uc3QgYWN0aXZlU2Vzc2lvbklkcyA9IHZhbHVlLm1hcCgoc2VzcykgPT4gc2Vzcy5pZCk7XG4gICAgICBpZiAoYWN0aXZlU2Vzc2lvbklkcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSBmb2xsb3dpbmcgb2Jzb2xldGUgc2Vzc2lvbnMgYXJlIHN0aWxsIHJ1bm5pbmc6ICR7SlNPTi5zdHJpbmdpZnkoYWN0aXZlU2Vzc2lvbklkcyl9YCk7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdDbGVhbmluZyB1cCB0aGUgb2Jzb2xldGUgc2Vzc2lvbnMnKTtcbiAgICAgICAgYXdhaXQgQi5hbGwoYWN0aXZlU2Vzc2lvbklkcy5tYXAoKGlkKSA9PlxuICAgICAgICAgIGF4aW9zKHtcbiAgICAgICAgICAgIHVybDogYGh0dHA6Ly8ke3RoaXMuaG9zdH06JHt0aGlzLnN5c3RlbVBvcnR9L3Nlc3Npb24vJHtpZH1gLFxuICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgICAgICB9KVxuICAgICAgICApKTtcbiAgICAgICAgLy8gTGV0IGFsbCBzZXNzaW9ucyB0byBiZSBwcm9wZXJseSB0ZXJtaW5hdGVkIGJlZm9yZSBjb250aW51aW5nXG4gICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gb2Jzb2xldGUgc2Vzc2lvbnMgaGF2ZSBiZWVuIGRldGVjdGVkJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYE5vIG9ic29sZXRlIHNlc3Npb25zIGhhdmUgYmVlbiBkZXRlY3RlZCAoJHtlLm1lc3NhZ2V9KWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoY2Fwcykge1xuICAgIGF3YWl0IHRoaXMuY2xlYW51cFNlc3Npb25MZWZ0b3ZlcnMoKTtcblxuICAgIGNvbnN0IGNtZCA9IFtcbiAgICAgICdzaGVsbCcsXG4gICAgICAnYW0nLCAnaW5zdHJ1bWVudCcsXG4gICAgICAnLXcnLFxuICAgICAgJy1lJywgJ2RlYnVnJywgcHJvY2Vzcy5lbnYuRVNQUkVTU09fSkFWQV9ERUJVRyA9PT0gJ3RydWUnLFxuICAgICAgJy1lJywgJ2Rpc2FibGVBbmFseXRpY3MnLCB0cnVlLCAvLyBUbyBhdm9pZCB1bmV4cGVjdGVkIGVycm9yIGJ5IGdvb2dsZSBhbmFseXRpY3NcbiAgICBdO1xuXG4gICAgaWYgKF8uaXNCb29sZWFuKHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UpKSB7XG4gICAgICBjbWQucHVzaCgnLWUnLCAnRElTQUJMRV9TVVBQUkVTU19BQ0NFU1NJQklMSVRZX1NFUlZJQ0VTJywgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSk7XG4gICAgfVxuXG4gICAgY21kLnB1c2goYCR7VEVTVF9BUEtfUEtHfS9hbmRyb2lkeC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXRSdW5uZXJgKTtcblxuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nIEVzcHJlc3NvIFNlcnZlciB2JHt2ZXJzaW9ufSB3aXRoIGNtZDogYWRiICR7Y21kLmpvaW4oJyAnKX1gKTtcblxuICAgIGxldCBoYXNTb2NrZXRFcnJvciA9IGZhbHNlO1xuICAgIC8vIHN0YXJ0IHRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2Vzc1xuICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZSA9IHtcbiAgICAgIGV4aXRlZDogZmFsc2UsXG4gICAgICBjcmFzaGVkOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMuaW5zdFByb2Nlc3MgPSB0aGlzLmFkYi5jcmVhdGVTdWJQcm9jZXNzKGNtZCk7XG4gICAgdGhpcy5pbnN0UHJvY2Vzcy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgIHRoaXMubG9nLmluZm8oYEluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSBmcm9tIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZS5leGl0ZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuaW5zdFByb2Nlc3Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgY29uc3QgbGluZSA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICBpZiAoXy5pc0VtcHR5KGxpbmUudHJpbSgpKSkge1xuICAgICAgICAvLyBEbyBub3QgcHJpbnQgZW1wdHkgbGluZXMgaW50byB0aGUgc3lzdGVtIGxvZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBbSW5zdHJ1bWVudGF0aW9uXSAke2xpbmUudHJpbSgpfWApO1xuICAgICAgLy8gQSAnU29ja2V0RXhjZXB0aW9uJyBpbmRpY2F0ZXMgdGhhdCB3ZSBjb3VsZG4ndCBjb25uZWN0IHRvIHRoZSBFc3ByZXNzbyBzZXJ2ZXIsXG4gICAgICAvLyBiZWNhdXNlIHRoZSBJTlRFUk5FVCBwZXJtaXNzaW9uIGlzIG5vdCBzZXRcbiAgICAgIGlmIChsaW5lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2phdmEubmV0LnNvY2tldGV4Y2VwdGlvbicpKSB7XG4gICAgICAgIGhhc1NvY2tldEVycm9yID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobGluZS5pbmNsdWRlcygnUHJvY2VzcyBjcmFzaGVkJykpIHtcbiAgICAgICAgdGhpcy5qd3Byb3h5Lmluc3RydW1lbnRhdGlvblN0YXRlLmNyYXNoZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLmluc3RQcm9jZXNzLnN0YXJ0KDApO1xuICAgIHRoaXMubG9nLmluZm8oYFdhaXRpbmcgdXAgdG8gJHt0aGlzLnNlcnZlckxhdW5jaFRpbWVvdXR9bXMgZm9yIEVzcHJlc3NvIHNlcnZlciB0byBiZSBvbmxpbmVgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChoYXNTb2NrZXRFcnJvcikge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYEVzcHJlc3NvIHNlcnZlciBoYXMgZmFpbGVkIHRvIHN0YXJ0IGR1ZSB0byBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gYCArXG4gICAgICAgICAgICBgTWFrZSBzdXJlIHRoZSAnSU5URVJORVQnIHBlcm1pc3Npb24gaXMgcmVxdWVzdGVkIGluIHRoZSBBbmRyb2lkIG1hbmlmZXN0IG9mIHlvdXIgYCArXG4gICAgICAgICAgICBgYXBwbGljYXRpb24gdW5kZXIgdGVzdCAoPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9XCJhbmRyb2lkLnBlcm1pc3Npb24uSU5URVJORVRcIiAvPilgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmp3cHJveHkuaW5zdHJ1bWVudGF0aW9uU3RhdGUuZXhpdGVkKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRXNwcmVzc28gc2VydmVyIHByb2Nlc3MgaGFzIGJlZW4gdW5leHBlY3RlZGx5IHRlcm1pbmF0ZWQuIGAgK1xuICAgICAgICAgICAgYENoZWNrIHRoZSBBcHBpdW0gc2VydmVyIGxvZyBhbmQgdGhlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiB0aGlzLnNlcnZlckxhdW5jaFRpbWVvdXQsXG4gICAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICgvQ29uZGl0aW9uIHVubWV0Ly50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGltZWQgb3V0IHdhaXRpbmcgZm9yIEVzcHJlc3NvIHNlcnZlciB0byBiZSBgICtcbiAgICAgICAgICBgb25saW5lIHdpdGhpbiAke3RoaXMuc2VydmVyTGF1bmNoVGltZW91dH1tcy4gVGhlIHRpbWVvdXQgdmFsdWUgY291bGQgYmUgYCArXG4gICAgICAgICAgYGN1c3RvbWl6ZWQgdXNpbmcgJ2VzcHJlc3NvU2VydmVyTGF1bmNoVGltZW91dCcgY2FwYWJpbGl0eWApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5sb2cuaW5mbyhgRXNwcmVzc28gc2VydmVyIGlzIG9ubGluZS4gYCArXG4gICAgICBgVGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIHRoaXMubG9nLmluZm8oJ1N0YXJ0aW5nIHRoZSBzZXNzaW9uJyk7XG5cbiAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbY2Fwc10sXG4gICAgICAgIGFsd2F5c01hdGNoOiB7fVxuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMucmVjb3JkVGFyZ2V0QXBwUGFja2FnZSgpO1xuICB9XG5cbiAgYXN5bmMgcmVjb3JkVGFyZ2V0QXBwUGFja2FnZSAoKSB7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoW2BlY2hvIFwiJHt0aGlzLmFwcFBhY2thZ2V9XCIgPiBcIiR7VEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSfVwiYF0pO1xuICAgIHRoaXMubG9nLmluZm8oYFJlY29yZGVkIHRoZSB0YXJnZXQgYXBwbGljYXRpb24gcGFja2FnZSAnJHt0aGlzLmFwcFBhY2thZ2V9JyB0byAke1RBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUn1gKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdEZWxldGluZyBFc3ByZXNzbyBzZXJ2ZXIgc2Vzc2lvbicpO1xuICAgIC8vIHJlbHkgb24gandwcm94eSdzIGludGVsbGlnZW5jZSB0byBrbm93IHdoYXQgd2UncmUgdGFsa2luZyBhYm91dCBhbmRcbiAgICAvLyBkZWxldGUgdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnLycsICdERUxFVEUnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYERpZCBub3QgZ2V0IGNvbmZpcm1hdGlvbiBFc3ByZXNzbyBkZWxldGVTZXNzaW9uIHdvcmtlZDsgYCArXG4gICAgICAgICAgYEVycm9yIHdhczogJHtlcnJ9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5zdFByb2Nlc3MgJiYgdGhpcy5pbnN0UHJvY2Vzcy5pc1J1bm5pbmcpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdFByb2Nlc3Muc3RvcCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBFc3ByZXNzb1J1bm5lciwgUkVRVUlSRURfUEFSQU1TLCBURVNUX0FQS19QS0cgfTtcbmV4cG9ydCBkZWZhdWx0IEVzcHJlc3NvUnVubmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLGdCQUFnQixHQUFHQyxhQUFBLENBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixFQUFvQyxpQkFBcEMsQ0FBekI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLCtCQUFyQjs7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FDdEIsS0FEc0IsRUFFdEIsUUFGc0IsRUFHdEIsTUFIc0IsRUFJdEIsWUFKc0IsRUFLdEIsWUFMc0IsRUFNdEIsWUFOc0IsRUFPdEIsc0JBUHNCLENBQXhCOztBQVNBLE1BQU1DLGlDQUFpQyxHQUFHLEtBQTFDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcscUNBQWpDOztBQUVBLE1BQU1DLGFBQU4sU0FBNEJDLG1CQUE1QixDQUFvQztFQUNoQixNQUFaQyxZQUFZLENBQUVDLEdBQUYsRUFB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
|
|
357
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2VzcHJlc3NvLXJ1bm5lci5qcyIsIm5hbWVzIjpbIlRFU1RfU0VSVkVSX1JPT1QiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsIlRFU1RfQVBLX1BLRyIsIlJFUVVJUkVEX1BBUkFNUyIsIkVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUyIsIlRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUiIsIkVzcHJlc3NvUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImNyYXNoZWQiLCJleGl0ZWQiLCJpbnN0cnVtZW50YXRpb25TdGF0ZSIsImVycm9ycyIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJFc3ByZXNzb1J1bm5lciIsImNvbnN0cnVjdG9yIiwibG9nIiwib3B0cyIsInJlcSIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiandwcm94eSIsInNlcnZlciIsImhvc3QiLCJwb3J0Iiwic3lzdGVtUG9ydCIsImJhc2UiLCJrZWVwQWxpdmUiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJjb21tYW5kIiwibW9kU2VydmVyTmFtZSIsImZzIiwic2FuaXRpemVOYW1lIiwidmVyc2lvbiIsImFwcFBhY2thZ2UiLCJhZGIiLCJjdXJEZXZpY2VJZCIsInJlcGxhY2VtZW50IiwibW9kU2VydmVyUGF0aCIsInRtcERpciIsInNob3dHcmFkbGVMb2ciLCJlc3ByZXNzb0J1aWxkQ29uZmlnIiwic2VydmVyTGF1bmNoVGltZW91dCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInNpZ25pbmdDb25maWciLCJidWlsZFNlcnZlclNpZ25pbmdDb25maWciLCJrZXlzdG9yZUZpbGUiLCJpc0FwcFBhY2thZ2VDaGFuZ2VkIiwiZmlsZUV4aXN0cyIsImRlYnVnIiwicHJldmlvdXNBcHBQYWNrYWdlIiwic2hlbGwiLCJ0cmltIiwiaW5zdGFsbFNlcnZlciIsImFwcFN0YXRlIiwiZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUiLCJzaG91bGRVbmluc3RhbGxBcHAiLCJBUFBfSU5TVEFMTF9TVEFURSIsIk9MREVSX1ZFUlNJT05fSU5TVEFMTEVEIiwiTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJpbmNsdWRlcyIsInNob3VsZEluc3RhbGxBcHAiLCJOT1RfSU5TVEFMTEVEIiwiaW5mbyIsInVuaW5zdGFsbEFwayIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwiaW5zdGFsbCIsInJlcGxhY2UiLCJ0aW1lb3V0IiwiZXJyb3JBbmRUaHJvdyIsImluc3RhbGxUZXN0QXBrIiwicmVidWlsZCIsImZvcmNlRXNwcmVzc29SZWJ1aWxkIiwiZXhpc3RzIiwidW5saW5rIiwiYnVpbGROZXdNb2RTZXJ2ZXIiLCJpc1NpZ25lZCIsImNoZWNrQXBrQ2VydCIsInNpZ24iLCJidWlsZENvbmZpZ3VyYXRpb24iLCJidWlsZENvbmZpZ3VyYXRpb25TdHIiLCJyZWFkRmlsZSIsIkpTT04iLCJwYXJzZSIsImUiLCJlcnJvciIsImRpck5hbWUiLCJzZXJ2ZXJQYXRoIiwicmltcmFmIiwibWtkaXJwIiwiY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseSIsIlNlcnZlckJ1aWxkZXIiLCJ0ZXN0QXBwUGFja2FnZSIsImJ1aWxkIiwiYXBrUGF0aCIsImNvcHlGaWxlIiwiY2xlYW51cFNlc3Npb25MZWZ0b3ZlcnMiLCJ2YWx1ZSIsImF4aW9zIiwiZGF0YSIsImFjdGl2ZVNlc3Npb25JZHMiLCJtYXAiLCJzZXNzIiwiaWQiLCJsZW5ndGgiLCJzdHJpbmdpZnkiLCJCIiwiYWxsIiwiZGVsYXkiLCJzdGFydFNlc3Npb24iLCJjYXBzIiwiY21kIiwicHJvY2VzcyIsImVudiIsIkVTUFJFU1NPX0pBVkFfREVCVUciLCJfIiwiaXNCb29sZWFuIiwicHVzaCIsImpvaW4iLCJoYXNTb2NrZXRFcnJvciIsImluc3RQcm9jZXNzIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0ZG91dCIsInN0ZGVyciIsImxpbmUiLCJpc0VtcHR5IiwidG9Mb3dlckNhc2UiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsInRlc3QiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInJlY29yZFRhcmdldEFwcFBhY2thZ2UiLCJkZWxldGVTZXNzaW9uIiwiaXNSdW5uaW5nIiwic3RvcCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9lc3ByZXNzby1ydW5uZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgU2VydmVyQnVpbGRlciwgYnVpbGRTZXJ2ZXJTaWduaW5nQ29uZmlnIH0gZnJvbSAnLi9zZXJ2ZXItYnVpbGRlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZzLCB1dGlsLCBta2RpcnAsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuXG5jb25zdCBURVNUX1NFUlZFUl9ST09UID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2VzcHJlc3NvLXNlcnZlcicpO1xuY29uc3QgVEVTVF9BUEtfUEtHID0gJ2lvLmFwcGl1bS5lc3ByZXNzb3NlcnZlci50ZXN0JztcbmNvbnN0IFJFUVVJUkVEX1BBUkFNUyA9IFtcbiAgJ2FkYicsXG4gICd0bXBEaXInLFxuICAnaG9zdCcsXG4gICdzeXN0ZW1Qb3J0JyxcbiAgJ2RldmljZVBvcnQnLFxuICAnYXBwUGFja2FnZScsXG4gICdmb3JjZUVzcHJlc3NvUmVidWlsZCcsXG5dO1xuY29uc3QgRVNQUkVTU09fU0VSVkVSX0xBVU5DSF9USU1FT1VUX01TID0gNDUwMDA7XG5jb25zdCBUQVJHRVRfUEFDS0FHRV9DT05UQUlORVIgPSAnL2RhdGEvbG9jYWwvdG1wL2VzcHJlc3NvLmFwcHBhY2thZ2UnO1xuXG5jbGFzcyBFc3ByZXNzb1Byb3h5IGV4dGVuZHMgSldQcm94eSB7XG4gIGFzeW5jIHByb3h5Q29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkgPSBudWxsKSB7XG4gICAgY29uc3Qge2NyYXNoZWQsIGV4aXRlZH0gPSB0aGlzLmluc3RydW1lbnRhdGlvblN0YXRlO1xuICAgIGlmIChleGl0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZENvbnRleHRFcnJvcihgJyR7bWV0aG9kfSAke3VybH0nIGNhbm5vdCBiZSBwcm94aWVkIHRvIEVzcHJlc3NvIHNlcnZlciBiZWNhdXNlIGAgK1xuICAgICAgICBgdGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGhhcyAke2NyYXNoZWQgPyAnY3Jhc2hlZCcgOiAnYmVlbiB1bmV4cGVjdGVkbHkgdGVybWluYXRlZCd9LiBgICtcbiAgICAgICAgYENoZWNrIHRoZSBBcHBpdW0gc2VydmVyIGxvZyBhbmQgdGhlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIucHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxufVxuXG5jbGFzcyBFc3ByZXNzb1J1bm5lciB7XG4gIGNvbnN0cnVjdG9yIChsb2csIG9wdHMgPSB7fSkge1xuICAgIGZvciAobGV0IHJlcSBvZiBSRVFVSVJFRF9QQVJBTVMpIHtcbiAgICAgIGlmICghb3B0cyB8fCAhdXRpbC5oYXNWYWx1ZShvcHRzW3JlcV0pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT3B0aW9uICcke3JlcX0nIGlzIHJlcXVpcmVkIWApO1xuICAgICAgfVxuICAgICAgdGhpc1tyZXFdID0gb3B0c1tyZXFdO1xuICAgIH1cbiAgICB0aGlzLmxvZyA9IGxvZztcbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgRXNwcmVzc29Qcm94eSh7XG4gICAgICBsb2csXG4gICAgICBzZXJ2ZXI6IHRoaXMuaG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMuc3lzdGVtUG9ydCxcbiAgICAgIGJhc2U6ICcnLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5qd3Byb3h5LmNvbW1hbmQuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZSA9IHtcbiAgICAgIGV4aXRlZDogZmFsc2UsXG4gICAgICBjcmFzaGVkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9kU2VydmVyTmFtZSA9IGZzLnNhbml0aXplTmFtZShgJHtURVNUX0FQS19QS0d9XyR7dmVyc2lvbn1fJHt0aGlzLmFwcFBhY2thZ2V9XyR7dGhpcy5hZGIuY3VyRGV2aWNlSWR9LmFwa2AsIHtcbiAgICAgIHJlcGxhY2VtZW50OiAnLScsXG4gICAgfSk7XG4gICAgdGhpcy5tb2RTZXJ2ZXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMudG1wRGlyLCBtb2RTZXJ2ZXJOYW1lKTtcbiAgICB0aGlzLnNob3dHcmFkbGVMb2cgPSBvcHRzLnNob3dHcmFkbGVMb2c7XG4gICAgdGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnID0gb3B0cy5lc3ByZXNzb0J1aWxkQ29uZmlnO1xuXG4gICAgdGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0ID0gb3B0cy5zZXJ2ZXJMYXVuY2hUaW1lb3V0IHx8IEVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUztcbiAgICB0aGlzLmFuZHJvaWRJbnN0YWxsVGltZW91dCA9IG9wdHMuYW5kcm9pZEluc3RhbGxUaW1lb3V0O1xuXG4gICAgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSA9IG9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U7XG5cbiAgICAvLyBFc3ByZXNzbyBTZXJ2ZXIgYXBwIG5lZWRzIHRvIGJlIHNpZ25lZCB3aXRoIHNhbWUga2V5U3RvcmUgYXMgYXBwUGFja2FnZVxuICAgIGlmIChvcHRzLnVzZUtleXN0b3JlICYmIG9wdHMua2V5c3RvcmVQYXRoICYmIG9wdHMua2V5c3RvcmVQYXNzd29yZCAmJiBvcHRzLmtleUFsaWFzICYmIG9wdHMua2V5UGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2lnbmluZ0NvbmZpZyA9IGJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyh7XG4gICAgICAgIGtleXN0b3JlRmlsZTogb3B0cy5rZXlzdG9yZVBhdGgsXG4gICAgICAgIGtleXN0b3JlUGFzc3dvcmQ6IG9wdHMua2V5c3RvcmVQYXNzd29yZCxcbiAgICAgICAga2V5QWxpYXM6IG9wdHMua2V5QWxpYXMsXG4gICAgICAgIGtleVBhc3N3b3JkOiBvcHRzLmtleVBhc3N3b3JkXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaWduaW5nQ29uZmlnID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc0FwcFBhY2thZ2VDaGFuZ2VkICgpIHtcbiAgICBpZiAoIWF3YWl0IHRoaXMuYWRiLmZpbGVFeGlzdHMoVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1RoZSBwcmV2aW91cyB0YXJnZXQgYXBwbGljYXRpb24gcGFja2FnZSBpcyB1bmtub3duJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNBcHBQYWNrYWdlID0gKGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnY2F0JywgVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSXSkpLnRyaW0oKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIHByZXZpb3VzIHRhcmdldCBhcHBsaWNhdGlvbiBwYWNrYWdlIHdhcyAnJHtwcmV2aW91c0FwcFBhY2thZ2V9Jy4gYCArXG4gICAgICBgVGhlIGN1cnJlbnQgcGFja2FnZSBpcyAnJHt0aGlzLmFwcFBhY2thZ2V9J2ApO1xuICAgIHJldHVybiBwcmV2aW91c0FwcFBhY2thZ2UgIT09IHRoaXMuYXBwUGFja2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YWxscyBFc3ByZXNzbyBzZXJ2ZXIgYXBrIG9uIHRvIHRoZSBkZXZpY2Ugb3IgZW11bGF0b3IuXG4gICAqIEVhY2ggYWRiIGNvbW1hbmQgdXNlcyBkZWZhdWx0IHRpbWVvdXQgYnkgdGhlbS5cbiAgICovXG4gIGFzeW5jIGluc3RhbGxTZXJ2ZXIgKCkge1xuICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUodGhpcy5tb2RTZXJ2ZXJQYXRoLCBURVNUX0FQS19QS0cpO1xuXG4gICAgY29uc3Qgc2hvdWxkVW5pbnN0YWxsQXBwID0gW1xuICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQsXG4gICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5ORVdFUl9WRVJTSU9OX0lOU1RBTExFRFxuICAgIF0uaW5jbHVkZXMoYXBwU3RhdGUpO1xuICAgIGNvbnN0IHNob3VsZEluc3RhbGxBcHAgPSBzaG91bGRVbmluc3RhbGxBcHAgfHwgW1xuICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuTk9UX0lOU1RBTExFRFxuICAgIF0uaW5jbHVkZXMoYXBwU3RhdGUpO1xuXG4gICAgaWYgKHNob3VsZFVuaW5zdGFsbEFwcCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVW5pbnN0YWxsaW5nIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayBmcm9tIHRoZSB0YXJnZXQgZGV2aWNlIChwa2c6ICcke1RFU1RfQVBLX1BLR30nKWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKFRFU1RfQVBLX1BLRyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgRXJyb3IgdW5pbnN0YWxsaW5nICcke1RFU1RfQVBLX1BLR30nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRJbnN0YWxsQXBwKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBJbnN0YWxsaW5nIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayBmcm9tIHRoZSB0YXJnZXQgZGV2aWNlIChwYXRoOiAnJHt0aGlzLm1vZFNlcnZlclBhdGh9JylgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmluc3RhbGwodGhpcy5tb2RTZXJ2ZXJQYXRoLCB7IHJlcGxhY2U6IGZhbHNlLCB0aW1lb3V0OiB0aGlzLmFuZHJvaWRJbnN0YWxsVGltZW91dCB9KTtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgSW5zdGFsbGVkIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayAnJHt0aGlzLm1vZFNlcnZlclBhdGh9JyAocGtnOiAnJHtURVNUX0FQS19QS0d9JylgKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgaW5zdGFsbCAnJHt0aGlzLm1vZFNlcnZlclBhdGh9JyBiZWNhdXNlIG9mICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnN0YWxsVGVzdEFwayAoKSB7XG4gICAgbGV0IHJlYnVpbGQgPSB0aGlzLmZvcmNlRXNwcmVzc29SZWJ1aWxkO1xuICAgIGlmIChyZWJ1aWxkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgJ2ZvcmNlRXNwcmVzc29SZWJ1aWxkJyBjYXBhYmlsaXR5IGlzIGVuYWJsZWRgKTtcbiAgICB9IGVsc2UgaWYgKGF3YWl0IHRoaXMuaXNBcHBQYWNrYWdlQ2hhbmdlZCgpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBGb3JjaW5nIEVzcHJlc3NvIHNlcnZlciByZWJ1aWxkIGJlY2F1c2Ugb2YgY2hhbmdlZCBhcHBsaWNhdGlvbiBwYWNrYWdlYCk7XG4gICAgICByZWJ1aWxkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVidWlsZCAmJiBhd2FpdCBmcy5leGlzdHModGhpcy5tb2RTZXJ2ZXJQYXRoKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYERlbGV0aW5nIHRoZSBvYnNvbGV0ZSBFc3ByZXNzbyBzZXJ2ZXIgcGFja2FnZSAnJHt0aGlzLm1vZFNlcnZlclBhdGh9J2ApO1xuICAgICAgYXdhaXQgZnMudW5saW5rKHRoaXMubW9kU2VydmVyUGF0aCk7XG4gICAgfVxuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm1vZFNlcnZlclBhdGgpKSkge1xuICAgICAgYXdhaXQgdGhpcy5idWlsZE5ld01vZFNlcnZlcigpO1xuICAgIH1cbiAgICBjb25zdCBpc1NpZ25lZCA9IGF3YWl0IHRoaXMuYWRiLmNoZWNrQXBrQ2VydCh0aGlzLm1vZFNlcnZlclBhdGgsIFRFU1RfQVBLX1BLRyk7XG4gICAgaWYgKCFpc1NpZ25lZCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc2lnbih0aGlzLm1vZFNlcnZlclBhdGgpO1xuICAgIH1cbiAgICBpZiAoKHJlYnVpbGQgfHwgIWlzU2lnbmVkKSAmJiBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsoVEVTVF9BUEtfUEtHKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVW5pbnN0YWxsZWQgdGhlIG9ic29sZXRlIEVzcHJlc3NvIHNlcnZlciBwYWNrYWdlIGZyb20gdGhlIGRldmljZSB1bmRlciB0ZXN0Jyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbnN0YWxsU2VydmVyKCk7XG4gIH1cblxuICBhc3luYyBidWlsZE5ld01vZFNlcnZlciAoKSB7XG4gICAgbGV0IGJ1aWxkQ29uZmlndXJhdGlvbiA9IHt9O1xuICAgIGlmICh0aGlzLmVzcHJlc3NvQnVpbGRDb25maWcpIHtcbiAgICAgIGxldCBidWlsZENvbmZpZ3VyYXRpb25TdHI7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgTG9hZGluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmcm9tICcke3RoaXMuZXNwcmVzc29CdWlsZENvbmZpZ30nYCk7XG4gICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvblN0ciA9IGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZywgJ3V0ZjgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYExvYWRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZnJvbSAnZXNwcmVzc29CdWlsZENvbmZpZycgY2FwYWJpbGl0eWApO1xuICAgICAgICBidWlsZENvbmZpZ3VyYXRpb25TdHIgPSB0aGlzLmVzcHJlc3NvQnVpbGRDb25maWc7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBidWlsZENvbmZpZ3VyYXRpb24gPSBKU09OLnBhcnNlKGJ1aWxkQ29uZmlndXJhdGlvblN0cik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yKCdDYW5ub3QgcGFyc2UgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gSlNPTicsIGUpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkaXJOYW1lID0gZnMuc2FuaXRpemVOYW1lKGBlc3ByZXNzby1zZXJ2ZXItJHt0aGlzLmFkYi5jdXJEZXZpY2VJZH1gLCB7XG4gICAgICByZXBsYWNlbWVudDogJy0nLFxuICAgIH0pO1xuICAgIGNvbnN0IHNlcnZlclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy50bXBEaXIsIGRpck5hbWUpO1xuICAgIHRoaXMubG9nLmluZm8oYEJ1aWxkaW5nIGVzcHJlc3NvIHNlcnZlciBpbiAnJHtzZXJ2ZXJQYXRofSdgKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIGJ1aWxkIGZvbGRlciByb290IGNvdWxkIGJlIGN1c3RvbWl6ZWQgYnkgY2hhbmdpbmcgdGhlICd0bXBEaXInIGNhcGFiaWxpdHlgKTtcbiAgICBhd2FpdCBmcy5yaW1yYWYoc2VydmVyUGF0aCk7XG4gICAgYXdhaXQgbWtkaXJwKHNlcnZlclBhdGgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDb3B5aW5nIGVzcHJlc3NvIHNlcnZlciB0ZW1wbGF0ZSBmcm9tICgnJHtURVNUX1NFUlZFUl9ST09UfScgdG8gJyR7c2VydmVyUGF0aH0nKWApO1xuICAgIGF3YWl0IGNvcHlHcmFkbGVQcm9qZWN0UmVjdXJzaXZlbHkoVEVTVF9TRVJWRVJfUk9PVCwgc2VydmVyUGF0aCk7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0J1bGRpbmcgZXNwcmVzc28gc2VydmVyJyk7XG4gICAgYXdhaXQgbmV3IFNlcnZlckJ1aWxkZXIodGhpcy5sb2csIHtcbiAgICAgIHNlcnZlclBhdGgsIGJ1aWxkQ29uZmlndXJhdGlvbixcbiAgICAgIHNob3dHcmFkbGVMb2c6IHRoaXMuc2hvd0dyYWRsZUxvZyxcbiAgICAgIHRlc3RBcHBQYWNrYWdlOiB0aGlzLmFwcFBhY2thZ2UsXG4gICAgICBzaWduaW5nQ29uZmlnOiB0aGlzLnNpZ25pbmdDb25maWdcbiAgICB9KS5idWlsZCgpO1xuICAgIGNvbnN0IGFwa1BhdGggPSBwYXRoLnJlc29sdmUoc2VydmVyUGF0aCwgJ2FwcCcsICdidWlsZCcsICdvdXRwdXRzJywgJ2FwaycsICdhbmRyb2lkVGVzdCcsICdkZWJ1ZycsICdhcHAtZGVidWctYW5kcm9pZFRlc3QuYXBrJyk7XG4gICAgdGhpcy5sb2cuZGVidWcoYENvcHlpbmcgYnVpbHQgYXBrIGZyb20gJyR7YXBrUGF0aH0nIHRvICcke3RoaXMubW9kU2VydmVyUGF0aH0nYCk7XG4gICAgYXdhaXQgZnMuY29weUZpbGUoYXBrUGF0aCwgdGhpcy5tb2RTZXJ2ZXJQYXRoKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBTZXNzaW9uTGVmdG92ZXJzICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnUGVyZm9ybWluZyBjbGVhbnVwIG9mIGF1dG9tYXRpb24gbGVmdG92ZXJzJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge3ZhbHVlfSA9IChhd2FpdCBheGlvcyh7XG4gICAgICAgIHVybDogYGh0dHA6Ly8ke3RoaXMuaG9zdH06JHt0aGlzLnN5c3RlbVBvcnR9L3Nlc3Npb25zYCxcbiAgICAgICAgdGltZW91dDogNTAwLFxuICAgICAgfSkpLmRhdGE7XG4gICAgICBjb25zdCBhY3RpdmVTZXNzaW9uSWRzID0gdmFsdWUubWFwKChzZXNzKSA9PiBzZXNzLmlkKTtcbiAgICAgIGlmIChhY3RpdmVTZXNzaW9uSWRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIGZvbGxvd2luZyBvYnNvbGV0ZSBzZXNzaW9ucyBhcmUgc3RpbGwgcnVubmluZzogJHtKU09OLnN0cmluZ2lmeShhY3RpdmVTZXNzaW9uSWRzKX1gKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ0NsZWFuaW5nIHVwIHRoZSBvYnNvbGV0ZSBzZXNzaW9ucycpO1xuICAgICAgICBhd2FpdCBCLmFsbChhY3RpdmVTZXNzaW9uSWRzLm1hcCgoaWQpID0+XG4gICAgICAgICAgYXhpb3Moe1xuICAgICAgICAgICAgdXJsOiBgaHR0cDovLyR7dGhpcy5ob3N0fToke3RoaXMuc3lzdGVtUG9ydH0vc2Vzc2lvbi8ke2lkfWAsXG4gICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgICAgIH0pXG4gICAgICAgICkpO1xuICAgICAgICAvLyBMZXQgYWxsIHNlc3Npb25zIHRvIGJlIHByb3Blcmx5IHRlcm1pbmF0ZWQgYmVmb3JlIGNvbnRpbnVpbmdcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBvYnNvbGV0ZSBzZXNzaW9ucyBoYXZlIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gb2Jzb2xldGUgc2Vzc2lvbnMgaGF2ZSBiZWVuIGRldGVjdGVkICgke2UubWVzc2FnZX0pYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXNzaW9uIChjYXBzKSB7XG4gICAgYXdhaXQgdGhpcy5jbGVhbnVwU2Vzc2lvbkxlZnRvdmVycygpO1xuXG4gICAgY29uc3QgY21kID0gW1xuICAgICAgJ3NoZWxsJyxcbiAgICAgICdhbScsICdpbnN0cnVtZW50JyxcbiAgICAgICctdycsXG4gICAgICAnLWUnLCAnZGVidWcnLCBwcm9jZXNzLmVudi5FU1BSRVNTT19KQVZBX0RFQlVHID09PSAndHJ1ZScsXG4gICAgICAnLWUnLCAnZGlzYWJsZUFuYWx5dGljcycsIHRydWUsIC8vIFRvIGF2b2lkIHVuZXhwZWN0ZWQgZXJyb3IgYnkgZ29vZ2xlIGFuYWx5dGljc1xuICAgIF07XG5cbiAgICBpZiAoXy5pc0Jvb2xlYW4odGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSkpIHtcbiAgICAgIGNtZC5wdXNoKCctZScsICdESVNBQkxFX1NVUFBSRVNTX0FDQ0VTU0lCSUxJVFlfU0VSVklDRVMnLCB0aGlzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBjbWQucHVzaChgJHtURVNUX0FQS19QS0d9L2FuZHJvaWR4LnRlc3QucnVubmVyLkFuZHJvaWRKVW5pdFJ1bm5lcmApO1xuXG4gICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgRXNwcmVzc28gU2VydmVyIHYke3ZlcnNpb259IHdpdGggY21kOiBhZGIgJHtjbWQuam9pbignICcpfWApO1xuXG4gICAgbGV0IGhhc1NvY2tldEVycm9yID0gZmFsc2U7XG4gICAgLy8gc3RhcnQgdGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzXG4gICAgdGhpcy5qd3Byb3h5Lmluc3RydW1lbnRhdGlvblN0YXRlID0ge1xuICAgICAgZXhpdGVkOiBmYWxzZSxcbiAgICAgIGNyYXNoZWQ6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5pbnN0UHJvY2VzcyA9IHRoaXMuYWRiLmNyZWF0ZVN1YlByb2Nlc3MoY21kKTtcbiAgICB0aGlzLmluc3RQcm9jZXNzLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgSW5zdHJ1bWVudGF0aW9uIHByb2Nlc3MgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9IGZyb20gc2lnbmFsICR7c2lnbmFsfWApO1xuICAgICAgdGhpcy5qd3Byb3h5Lmluc3RydW1lbnRhdGlvblN0YXRlLmV4aXRlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgdGhpcy5pbnN0UHJvY2Vzcy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICBjb25zdCBsaW5lID0gc3Rkb3V0IHx8IHN0ZGVycjtcbiAgICAgIGlmIChfLmlzRW1wdHkobGluZS50cmltKCkpKSB7XG4gICAgICAgIC8vIERvIG5vdCBwcmludCBlbXB0eSBsaW5lcyBpbnRvIHRoZSBzeXN0ZW0gbG9nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFtJbnN0cnVtZW50YXRpb25dICR7bGluZS50cmltKCl9YCk7XG4gICAgICAvLyBBICdTb2NrZXRFeGNlcHRpb24nIGluZGljYXRlcyB0aGF0IHdlIGNvdWxkbid0IGNvbm5lY3QgdG8gdGhlIEVzcHJlc3NvIHNlcnZlcixcbiAgICAgIC8vIGJlY2F1c2UgdGhlIElOVEVSTkVUIHBlcm1pc3Npb24gaXMgbm90IHNldFxuICAgICAgaWYgKGxpbmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnamF2YS5uZXQuc29ja2V0ZXhjZXB0aW9uJykpIHtcbiAgICAgICAgaGFzU29ja2V0RXJyb3IgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChsaW5lLmluY2x1ZGVzKCdQcm9jZXNzIGNyYXNoZWQnKSkge1xuICAgICAgICB0aGlzLmp3cHJveHkuaW5zdHJ1bWVudGF0aW9uU3RhdGUuY3Jhc2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGF3YWl0IHRoaXMuaW5zdFByb2Nlc3Muc3RhcnQoMCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgV2FpdGluZyB1cCB0byAke3RoaXMuc2VydmVyTGF1bmNoVGltZW91dH1tcyBmb3IgRXNwcmVzc28gc2VydmVyIHRvIGJlIG9ubGluZWApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKGhhc1NvY2tldEVycm9yKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRXNwcmVzc28gc2VydmVyIGhhcyBmYWlsZWQgdG8gc3RhcnQgZHVlIHRvIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLiBgICtcbiAgICAgICAgICAgIGBNYWtlIHN1cmUgdGhlICdJTlRFUk5FVCcgcGVybWlzc2lvbiBpcyByZXF1ZXN0ZWQgaW4gdGhlIEFuZHJvaWQgbWFuaWZlc3Qgb2YgeW91ciBgICtcbiAgICAgICAgICAgIGBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0ICg8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT1cImFuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVFwiIC8+KWApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZS5leGl0ZWQpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBFc3ByZXNzbyBzZXJ2ZXIgcHJvY2VzcyBoYXMgYmVlbiB1bmV4cGVjdGVkbHkgdGVybWluYXRlZC4gYCArXG4gICAgICAgICAgICBgQ2hlY2sgdGhlIEFwcGl1bSBzZXJ2ZXIgbG9nIGFuZCB0aGUgbG9nY2F0IG91dHB1dCBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IHRoaXMuc2VydmVyTGF1bmNoVGltZW91dCxcbiAgICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKC9Db25kaXRpb24gdW5tZXQvLnRlc3QoZS5tZXNzYWdlKSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgRXNwcmVzc28gc2VydmVyIHRvIGJlIGAgK1xuICAgICAgICAgIGBvbmxpbmUgd2l0aGluICR7dGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0fW1zLiBUaGUgdGltZW91dCB2YWx1ZSBjb3VsZCBiZSBgICtcbiAgICAgICAgICBgY3VzdG9taXplZCB1c2luZyAnZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0JyBjYXBhYmlsaXR5YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLmxvZy5pbmZvKGBFc3ByZXNzbyBzZXJ2ZXIgaXMgb25saW5lLiBgICtcbiAgICAgIGBUaGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB0b29rICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgdGhpcy5sb2cuaW5mbygnU3RhcnRpbmcgdGhlIHNlc3Npb24nKTtcblxuICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFtjYXBzXSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHt9XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5yZWNvcmRUYXJnZXRBcHBQYWNrYWdlKCk7XG4gIH1cblxuICBhc3luYyByZWNvcmRUYXJnZXRBcHBQYWNrYWdlICgpIHtcbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbYGVjaG8gXCIke3RoaXMuYXBwUGFja2FnZX1cIiA+IFwiJHtUQVJHRVRfUEFDS0FHRV9DT05UQUlORVJ9XCJgXSk7XG4gICAgdGhpcy5sb2cuaW5mbyhgUmVjb3JkZWQgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBwYWNrYWdlICcke3RoaXMuYXBwUGFja2FnZX0nIHRvICR7VEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSfWApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0RlbGV0aW5nIEVzcHJlc3NvIHNlcnZlciBzZXNzaW9uJyk7XG4gICAgLy8gcmVseSBvbiBqd3Byb3h5J3MgaW50ZWxsaWdlbmNlIHRvIGtub3cgd2hhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGFuZFxuICAgIC8vIGRlbGV0ZSB0aGUgY3VycmVudCBzZXNzaW9uXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvJywgJ0RFTEVURScpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cud2FybihgRGlkIG5vdCBnZXQgY29uZmlybWF0aW9uIEVzcHJlc3NvIGRlbGV0ZVNlc3Npb24gd29ya2VkOyBgICtcbiAgICAgICAgICBgRXJyb3Igd2FzOiAke2Vycn1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbnN0UHJvY2VzcyAmJiB0aGlzLmluc3RQcm9jZXNzLmlzUnVubmluZykge1xuICAgICAgYXdhaXQgdGhpcy5pbnN0UHJvY2Vzcy5zdG9wKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IEVzcHJlc3NvUnVubmVyLCBSRVFVSVJFRF9QQVJBTVMsIFRFU1RfQVBLX1BLRyB9O1xuZXhwb3J0IGRlZmF1bHQgRXNwcmVzc29SdW5uZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsZ0JBQWdCLEdBQUdDLGFBQUEsQ0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCLElBQXhCLEVBQThCLElBQTlCLEVBQW9DLGlCQUFwQyxDQUF6Qjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsK0JBQXJCOztBQUNBLE1BQU1DLGVBQWUsR0FBRyxDQUN0QixLQURzQixFQUV0QixRQUZzQixFQUd0QixNQUhzQixFQUl0QixZQUpzQixFQUt0QixZQUxzQixFQU10QixZQU5zQixFQU90QixzQkFQc0IsQ0FBeEI7O0FBU0EsTUFBTUMsaUNBQWlDLEdBQUcsS0FBMUM7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxxQ0FBakM7O0FBRUEsTUFBTUMsYUFBTixTQUE0QkMsZUFBNUIsQ0FBb0M7RUFDaEIsTUFBWkMsWUFBWSxDQUFFQyxHQUFGLEVBQU9DLE1BQVAs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
|
package/build/lib/logger.js
CHANGED
|
@@ -7,7 +7,7 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
require("source-map-support/register");
|
|
9
9
|
|
|
10
|
-
var _support = require("
|
|
10
|
+
var _support = require("appium/support");
|
|
11
11
|
|
|
12
12
|
const log = _support.logger.getLogger('Espresso');
|
|
13
13
|
|
|
@@ -15,4 +15,4 @@ var _default = log;
|
|
|
15
15
|
exports.default = _default;require('source-map-support').install();
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0VzcHJlc3NvJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBR0EsTUFBTUEsR0FBRyxHQUFHQyxlQUFBLENBQU9DLFNBQVAsQ0FBaUIsVUFBakIsQ0FBWjs7ZUFFZUYsRyJ9
|