appium-xcuitest-driver 4.8.0 → 4.9.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 CHANGED
@@ -1334,6 +1334,80 @@ Reset the location service on real device since Appium 1.22.0.
1334
1334
  It could delay a few seconds to reflect the location by the system.
1335
1335
  It raises an error if the device is simulator or an error occurred during the reset.
1336
1336
 
1337
+ ### mobile: enableConditionInducer
1338
+
1339
+ Important: Device conditions are available for real devices running iOS 13.0 and later.
1340
+
1341
+ This API is going to throw an error if it is called while another condition inducer has been already enabled and is not explicitly disabled.
1342
+
1343
+ ```
1344
+ mobile: enableConditionInducer
1345
+ mobile: disableConditionInducer
1346
+ mobile: listConditionInducers
1347
+ ```
1348
+
1349
+ The above three extensions are available since the driver version 4.9.0.
1350
+
1351
+ You can create a condition on a connected device to test your app under adverse conditions, such as poor network connectivity or thermal constraints.
1352
+
1353
+ When you start a device condition, the operating system on the device behaves as if its environment has changed. The device condition remains active until you stop the device condition or disconnect the device. For example, you can start a device condition, run your app, monitor your app’s energy usage, and then stop the condition.
1354
+
1355
+ Reference: [Test under adverse device conditions (iOS)](https://help.apple.com/xcode/mac/current/#/dev308429d42)
1356
+
1357
+ Name | Type | Required | Description | Example
1358
+ --- | --- | --- | --- | ---
1359
+ conditionID | string | yes | Get the conditionID parameter through the command `mobile: availableConditionInducer` | SlowNetworkCondition
1360
+ profileID | string | yes | Get the profileID parameter through the command `mobile: availableConditionInducer` | SlowNetwork100PctLoss
1361
+
1362
+ #### Returned Result
1363
+
1364
+ Either `true` or `false`, where `true` means enabling of the condition inducer has been successful
1365
+
1366
+ ### mobile: listConditionInducers
1367
+
1368
+ Get all condition inducer configuration profiles
1369
+
1370
+ #### Returned Result
1371
+
1372
+ The response looks like
1373
+
1374
+ ```
1375
+ [{
1376
+ "profiles": [
1377
+ {
1378
+ "name": "100% packet loss",
1379
+ "identifier": "SlowNetwork100PctLoss", // enableConditionInducer profileID
1380
+ "description": "Name: 100% Loss Scenario
1381
+ Downlink Bandwidth: 0 Mbps
1382
+ Downlink Latency: 0 ms
1383
+ Downlink Packet Loss Ratio: 100%
1384
+ Uplink Bandwidth: 0 Mbps
1385
+ Uplink Latency: 0 ms
1386
+ Uplink Packet Loss Ratio: 100%"
1387
+ },
1388
+ ],
1389
+ "profilesSorted": true,
1390
+ "identifier": "SlowNetworkCondition", // enableConditionInducer conditionID
1391
+ "isDestructive": false,
1392
+ "isInternal": false,
1393
+ "activeProfile": "",
1394
+ "name": "Network Link",
1395
+ "isActive": false
1396
+ }]
1397
+ ```
1398
+
1399
+ ### mobile: disableConditionInducer
1400
+
1401
+ Disable device condition inducer.
1402
+
1403
+ Usually a persistent connection is maintained after enable the condition inducer, and this method is only valid for this connection.
1404
+
1405
+ If the connection is disconnected, condition inducer will be automatically disabled
1406
+
1407
+ #### Returned Result
1408
+
1409
+ Either `true` or `false`, where `true` means disabling of the condition inducer has been successful
1410
+
1337
1411
  ## Known issues
1338
1412
 
1339
1413
  * `shake` is implemented via AppleScript and works only on Simulator due to lack of support from Apple
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.commands = void 0;
9
+
10
+ require("source-map-support/register");
11
+
12
+ var _appiumIosDevice = require("appium-ios-device");
13
+
14
+ var _lodash = _interopRequireDefault(require("lodash"));
15
+
16
+ var _support = require("appium/support");
17
+
18
+ const commands = {};
19
+ exports.commands = commands;
20
+
21
+ function requireConditionInducerCompatibleDevice(driver) {
22
+ if (driver.isSimulator()) {
23
+ driver.log.errorAndThrow('Condition inducer only works on real devices');
24
+ }
25
+
26
+ if (_support.util.compareVersions(driver.opts.platformVersion, '<', '13.0')) {
27
+ driver.log.errorAndThrow('Condition inducer is only supported since iOS 13+');
28
+ }
29
+ }
30
+
31
+ commands.mobileListConditionInducers = async function listConditionInducers() {
32
+ requireConditionInducerCompatibleDevice(this);
33
+ const conditionInducerService = await _appiumIosDevice.services.startInstrumentService(this.opts.device.udid);
34
+
35
+ try {
36
+ const ret = await conditionInducerService.callChannel(_appiumIosDevice.INSTRUMENT_CHANNEL.CONDITION_INDUCER, 'availableConditionInducers');
37
+ return ret.selector;
38
+ } finally {
39
+ conditionInducerService.close();
40
+ }
41
+ };
42
+
43
+ commands.mobileEnableConditionInducer = async function enableConditionInducer(options = {}) {
44
+ requireConditionInducerCompatibleDevice(this);
45
+
46
+ if (this._conditionInducerService && !this._conditionInducerService._socketClient.destroyed) {
47
+ this.log.errorAndThrow(`Condition inducer has been started. A condition is already active.`);
48
+ }
49
+
50
+ const {
51
+ conditionID,
52
+ profileID
53
+ } = options;
54
+ this._conditionInducerService = await _appiumIosDevice.services.startInstrumentService(this.opts.device.udid);
55
+ const ret = await this._conditionInducerService.callChannel(_appiumIosDevice.INSTRUMENT_CHANNEL.CONDITION_INDUCER, 'enableConditionWithIdentifier:profileIdentifier:', conditionID, profileID);
56
+
57
+ if (!_lodash.default.isBoolean(ret.selector)) {
58
+ this._conditionInducerService.close();
59
+
60
+ this._conditionInducerService = null;
61
+ this.log.errorAndThrow(`Enable condition inducer error: '${JSON.stringify(ret.selector)}'`);
62
+ }
63
+
64
+ return ret.selector;
65
+ };
66
+
67
+ commands.mobileDisableConditionInducer = async function disableConditionInducer() {
68
+ if (!this._conditionInducerService) {
69
+ this.log.warn('Condition inducer server is not started');
70
+ return false;
71
+ }
72
+
73
+ try {
74
+ const ret = await this._conditionInducerService.callChannel(_appiumIosDevice.INSTRUMENT_CHANNEL.CONDITION_INDUCER, 'disableActiveCondition');
75
+
76
+ if (!_lodash.default.isBoolean(ret.selector)) {
77
+ this.log.warn(`Disable condition inducer error: '${JSON.stringify(ret.selector)}'`);
78
+ return false;
79
+ }
80
+
81
+ return ret.selector;
82
+ } finally {
83
+ if (this._conditionInducerService) {
84
+ this._conditionInducerService.close();
85
+
86
+ this._conditionInducerService = null;
87
+ }
88
+ }
89
+ };
90
+
91
+ var _default = commands;
92
+ exports.default = _default;require('source-map-support').install();
93
+
94
+
95
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2NvbmRpdGlvbi5qcyIsIm5hbWVzIjpbImNvbW1hbmRzIiwicmVxdWlyZUNvbmRpdGlvbkluZHVjZXJDb21wYXRpYmxlRGV2aWNlIiwiZHJpdmVyIiwiaXNTaW11bGF0b3IiLCJsb2ciLCJlcnJvckFuZFRocm93IiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJtb2JpbGVMaXN0Q29uZGl0aW9uSW5kdWNlcnMiLCJsaXN0Q29uZGl0aW9uSW5kdWNlcnMiLCJjb25kaXRpb25JbmR1Y2VyU2VydmljZSIsInNlcnZpY2VzIiwic3RhcnRJbnN0cnVtZW50U2VydmljZSIsImRldmljZSIsInVkaWQiLCJyZXQiLCJjYWxsQ2hhbm5lbCIsIklOU1RSVU1FTlRfQ0hBTk5FTCIsIkNPTkRJVElPTl9JTkRVQ0VSIiwic2VsZWN0b3IiLCJjbG9zZSIsIm1vYmlsZUVuYWJsZUNvbmRpdGlvbkluZHVjZXIiLCJlbmFibGVDb25kaXRpb25JbmR1Y2VyIiwib3B0aW9ucyIsIl9jb25kaXRpb25JbmR1Y2VyU2VydmljZSIsIl9zb2NrZXRDbGllbnQiLCJkZXN0cm95ZWQiLCJjb25kaXRpb25JRCIsInByb2ZpbGVJRCIsIl8iLCJpc0Jvb2xlYW4iLCJKU09OIiwic3RyaW5naWZ5IiwibW9iaWxlRGlzYWJsZUNvbmRpdGlvbkluZHVjZXIiLCJkaXNhYmxlQ29uZGl0aW9uSW5kdWNlciIsIndhcm4iXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvY29uZGl0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElOU1RSVU1FTlRfQ0hBTk5FTCwgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuZnVuY3Rpb24gcmVxdWlyZUNvbmRpdGlvbkluZHVjZXJDb21wYXRpYmxlRGV2aWNlIChkcml2ZXIpIHtcbiAgICBpZiAoZHJpdmVyLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgIGRyaXZlci5sb2cuZXJyb3JBbmRUaHJvdygnQ29uZGl0aW9uIGluZHVjZXIgb25seSB3b3JrcyBvbiByZWFsIGRldmljZXMnKTtcbiAgICB9XG4gICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKGRyaXZlci5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnMTMuMCcpKSB7XG4gICAgICBkcml2ZXIubG9nLmVycm9yQW5kVGhyb3coJ0NvbmRpdGlvbiBpbmR1Y2VyIGlzIG9ubHkgc3VwcG9ydGVkIHNpbmNlIGlPUyAxMysnKTtcbiAgICB9XG4gIH1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQcm9maWxlXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbmFtZVxuICogQHByb3BlcnR5IHtTdHJpbmd9IGlkZW50aWZpZXIgIHRoZSBwcm9wZXJ0eSBpcyBwcm9maWxlSUQgdXNlZCBpbiBNb2JpbGVFbmFibGVDb25kaXRpb25JbmR1Y2VyXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBXZSBjYW4gdXNlIHRoZSByZXR1cm5lZCBkYXRhIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBDb25kaXRpb24gaXMgZW5hYmxlZCBhbmQgdGhlIGN1cnJlbnRseSBlbmFibGVkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25cbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvbmRpdGlvblxuICogQHByb3BlcnR5IHtBcnJheTxQcm9maWxlPn0gcHJvZmlsZXNcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBpZGVudGlmaWVyIHRoZSBwcm9wZXJ0eSBpcyBjb25kaXRpb25JRCB1c2VkIGluIE1vYmlsZUVuYWJsZUNvbmRpdGlvbkluZHVjZXJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcHJvZmlsZXNTb3J0ZWRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNEZXN0cnVjdGl2ZVxuICogQHByb3BlcnR5IHtib29sZWFufSBpc0ludGVybmFsXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzQWN0aXZlIGB0cnVlYCBpZiB0aGlzIGNvbmRpdGlvbiBpZGVudGlmaWVyIGlzIGVuYWJsZWRcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBhY3RpdmVQcm9maWxlICBlbmFibGVkIHByb2ZpbGVzIGlkZW50aWZpZXJcbiAqL1xuXG4vKipcbiAqIEdldCBhbGwgQ29uZGl0aW9uSW5kdWNlciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uXG4gKiBXZSB3aWxsIHVzZSBjb25kaXRpb25JRCBhbmQgcHJvZmlsZUlEIGluIHRoZSBtb2JpbGVFbmFibGVDb25kaXRpb25JbmR1Y2VyXG4gKiBAcmV0dXJucyB7QXJyYXk8Q29uZGl0aW9uPn1cbiAqIFt7XG4gKiAgICAgXCJwcm9maWxlc1wiOiBbXG4gKiAgICAgICAgICB7XG4gKiAgICAgICAgICAgICBcIm5hbWVcIjogXCIxMDAlIHBhY2tldCBsb3NzXCIsXG4gKiAgICAgICAgICAgICBcImlkZW50aWZpZXJcIjogXCJTbG93TmV0d29yazEwMFBjdExvc3NcIiwgIC8vIE1vYmlsZUVuYWJsZUNvbmRpdGlvbkluZHVjZXIgcHJvZmlsZUlEXG4gKiAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZTogMTAwJSBMb3NzIFNjZW5hcmlvXFxuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxpbmsgQmFuZHdpZHRoOiAwIE1icHNcXG5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3dubGluayBMYXRlbmN5OjAgbXNcXG5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3dubGluayBQYWNrZXQgTG9zcyBSYXRpbzogMTAwJVxcblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwbGluayBCYW5kd2lkdGg6IDAgTWJwc1xcblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwbGluayBMYXRlbmN5OiAwIG1zXFxuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBsaW5rIFBhY2tldCBMb3NzIFJhdGlvOiAxMDAlXCJcbiAqICAgICAgICAgfVxuICogICAgIF0sXG4gKiAgICAgXCJwcm9maWxlc1NvcnRlZFwiOiB0cnVlLFxuICogICAgIFwiaWRlbnRpZmllclwiOiBcIlNsb3dOZXR3b3JrQ29uZGl0aW9uXCIsICAgIC8vIE1vYmlsZUVuYWJsZUNvbmRpdGlvbkluZHVjZXIgY29uZGl0aW9uSURcbiAqICAgICBcImlzRGVzdHJ1Y3RpdmVcIjogZmFsc2UsXG4gKiAgICAgXCJpc0ludGVybmFsXCI6IGZhbHNlLFxuICogICAgIFwiYWN0aXZlUHJvZmlsZVwiOiBcIlwiLFxuICogICAgIFwibmFtZVwiOiBcIk5ldHdvcmsgTGlua1wiLFxuICogICAgIFwiaXNBY3RpdmVcIjogZmFsc2VcbiAqIH1dXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RDb25kaXRpb25JbmR1Y2VycyA9IGFzeW5jIGZ1bmN0aW9uIGxpc3RDb25kaXRpb25JbmR1Y2VycyAoKSB7XG4gIHJlcXVpcmVDb25kaXRpb25JbmR1Y2VyQ29tcGF0aWJsZURldmljZSh0aGlzKTtcbiAgY29uc3QgY29uZGl0aW9uSW5kdWNlclNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RydW1lbnRTZXJ2aWNlKHRoaXMub3B0cy5kZXZpY2UudWRpZCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgY29uZGl0aW9uSW5kdWNlclNlcnZpY2UuY2FsbENoYW5uZWwoSU5TVFJVTUVOVF9DSEFOTkVMLkNPTkRJVElPTl9JTkRVQ0VSLCAnYXZhaWxhYmxlQ29uZGl0aW9uSW5kdWNlcnMnKTtcbiAgICByZXR1cm4gcmV0LnNlbGVjdG9yO1xuICB9IGZpbmFsbHkge1xuICAgIGNvbmRpdGlvbkluZHVjZXJTZXJ2aWNlLmNsb3NlKCk7XG4gIH1cbn07XG5cbi8qKlxuICogRW5hYmxlIGNvbmRpdGlvbiBpbmR1Y2VyLiBUaGUgc29ja2V0IG5lZWRzIHRvIHJlbWFpbiBjb25uZWN0ZWQgZHVyaW5nIG9wZXJhdGlvblxuICogY29uZGl0aW9uSUQgIENvbmRpdGlvblswXS5pZGVudGlmaWVyXG4gKiBwcm9maWxlSUQgICAgQ29uZGl0aW9uWzBdLnByb2ZpbGVzWzBdLmlkZW50aWZpZXJcbiAqIEBwYXJhbSB7e2NvbmRpdGlvbklELHByb2ZpbGVJRH19IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgZW5hYmxlIHRoZSBjb25kaXRpb24gc3VjY2VlZGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdHJ5IHRvIHN0YXJ0IGFub3RoZXIgQ29uZGl0aW9uIGFuZCB0aGUgcHJldmlvdXMgQ29uZGl0aW9uIGhhcyBub3Qgc3RvcHBlZCwgaXQgd2lsbCB0aHJvdyBhbiBlcnJvclxuICovXG5jb21tYW5kcy5tb2JpbGVFbmFibGVDb25kaXRpb25JbmR1Y2VyID0gYXN5bmMgZnVuY3Rpb24gZW5hYmxlQ29uZGl0aW9uSW5kdWNlciAob3B0aW9ucyA9IHt9KSB7XG4gIHJlcXVpcmVDb25kaXRpb25JbmR1Y2VyQ29tcGF0aWJsZURldmljZSh0aGlzKTtcbiAgaWYgKHRoaXMuX2NvbmRpdGlvbkluZHVjZXJTZXJ2aWNlICYmICF0aGlzLl9jb25kaXRpb25JbmR1Y2VyU2VydmljZS5fc29ja2V0Q2xpZW50LmRlc3Ryb3llZCkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvbmRpdGlvbiBpbmR1Y2VyIGhhcyBiZWVuIHN0YXJ0ZWQuIEEgY29uZGl0aW9uIGlzIGFscmVhZHkgYWN0aXZlLmApO1xuICB9XG4gIGNvbnN0IHtcbiAgICBjb25kaXRpb25JRCxcbiAgICBwcm9maWxlSUQsXG4gIH0gPSBvcHRpb25zO1xuICB0aGlzLl9jb25kaXRpb25JbmR1Y2VyU2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdHJ1bWVudFNlcnZpY2UodGhpcy5vcHRzLmRldmljZS51ZGlkKTtcbiAgY29uc3QgcmV0ID0gYXdhaXQgdGhpcy5fY29uZGl0aW9uSW5kdWNlclNlcnZpY2UuY2FsbENoYW5uZWwoSU5TVFJVTUVOVF9DSEFOTkVMLkNPTkRJVElPTl9JTkRVQ0VSLFxuICAgICdlbmFibGVDb25kaXRpb25XaXRoSWRlbnRpZmllcjpwcm9maWxlSWRlbnRpZmllcjonLCBjb25kaXRpb25JRCwgcHJvZmlsZUlEKTtcbiAgaWYgKCFfLmlzQm9vbGVhbihyZXQuc2VsZWN0b3IpKSB7XG4gICAgdGhpcy5fY29uZGl0aW9uSW5kdWNlclNlcnZpY2UuY2xvc2UoKTtcbiAgICB0aGlzLl9jb25kaXRpb25JbmR1Y2VyU2VydmljZSA9IG51bGw7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRW5hYmxlIGNvbmRpdGlvbiBpbmR1Y2VyIGVycm9yOiAnJHtKU09OLnN0cmluZ2lmeShyZXQuc2VsZWN0b3IpfSdgKTtcbiAgfVxuICByZXR1cm4gcmV0LnNlbGVjdG9yO1xufTtcblxuLyoqXG4gKiBEaXNhYmxlIGNvbmRpdGlvbiBpbmR1Y2VyXG4gKiB0aGlzIGNhbGwgdXBvbiBkcml2ZXIgZGVsZXRpb25cbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgZGlzYWJsZSB0aGUgY29uZGl0aW9uIHN1Y2NlZWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVEaXNhYmxlQ29uZGl0aW9uSW5kdWNlciA9IGFzeW5jIGZ1bmN0aW9uIGRpc2FibGVDb25kaXRpb25JbmR1Y2VyICgpIHtcbiAgaWYgKCF0aGlzLl9jb25kaXRpb25JbmR1Y2VyU2VydmljZSkge1xuICAgIHRoaXMubG9nLndhcm4oJ0NvbmRpdGlvbiBpbmR1Y2VyIHNlcnZlciBpcyBub3Qgc3RhcnRlZCcpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMuX2NvbmRpdGlvbkluZHVjZXJTZXJ2aWNlLmNhbGxDaGFubmVsKElOU1RSVU1FTlRfQ0hBTk5FTC5DT05ESVRJT05fSU5EVUNFUiwgJ2Rpc2FibGVBY3RpdmVDb25kaXRpb24nKTtcbiAgICBpZiAoIV8uaXNCb29sZWFuKHJldC5zZWxlY3RvcikpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYERpc2FibGUgY29uZGl0aW9uIGluZHVjZXIgZXJyb3I6ICcke0pTT04uc3RyaW5naWZ5KHJldC5zZWxlY3Rvcil9J2ApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcmV0LnNlbGVjdG9yO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICh0aGlzLl9jb25kaXRpb25JbmR1Y2VyU2VydmljZSkge1xuICAgICAgdGhpcy5fY29uZGl0aW9uSW5kdWNlclNlcnZpY2UuY2xvc2UoKTtcbiAgICAgIHRoaXMuX2NvbmRpdGlvbkluZHVjZXJTZXJ2aWNlID0gbnVsbDtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCB7Y29tbWFuZHN9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOzs7QUFFQSxTQUFTQyx1Q0FBVCxDQUFrREMsTUFBbEQsRUFBMEQ7RUFDdEQsSUFBSUEsTUFBTSxDQUFDQyxXQUFQLEVBQUosRUFBMEI7SUFDeEJELE1BQU0sQ0FBQ0UsR0FBUCxDQUFXQyxhQUFYLENBQXlCLDhDQUF6QjtFQUNEOztFQUNELElBQUlDLGFBQUEsQ0FBS0MsZUFBTCxDQUFxQkwsTUFBTSxDQUFDTSxJQUFQLENBQVlDLGVBQWpDLEVBQWtELEdBQWxELEVBQXVELE1BQXZELENBQUosRUFBb0U7SUFDbEVQLE1BQU0sQ0FBQ0UsR0FBUCxDQUFXQyxhQUFYLENBQXlCLG1EQUF6QjtFQUNEO0FBQ0Y7O0FBZ0RITCxRQUFRLENBQUNVLDJCQUFULEdBQXVDLGVBQWVDLHFCQUFmLEdBQXdD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
@@ -126,7 +126,10 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
126
126
  configureLocalization: 'mobileConfigureLocalization',
127
127
  resetLocationService: 'mobileResetLocationService',
128
128
  startPcap: 'mobileStartPcap',
129
- stopPcap: 'mobileStopPcap'
129
+ stopPcap: 'mobileStopPcap',
130
+ listConditionInducers: 'mobileListConditionInducers',
131
+ enableConditionInducer: 'mobileEnableConditionInducer',
132
+ disableConditionInducer: 'mobileDisableConditionInducer'
130
133
  };
131
134
 
132
135
  if (!_lodash.default.has(commandMap, mobileCommand)) {
@@ -140,4 +143,4 @@ var _default = extensions;
140
143
  exports.default = _default;require('source-map-support').install();
141
144
 
142
145
 
143
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiLCJuYW1lcyI6WyJleHRlbnNpb25zIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJzdGF0dXMiLCJ2YWx1ZSIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJoYXNWYWx1ZSIsImFzeW5jUHJvbWlzZSIsIndhcm4iLCJyZWplY3QiLCJlcnJvckZyb21Db2RlIiwibWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsImVycm9yIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwicmVzb2x2ZSIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiY29udmVydEVsZW1lbnRzRm9yQXRvbXMiLCJyZXN1bHQiLCJleGVjdXRlQXRvbSIsImNhY2hlV2ViRWxlbWVudHMiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZXhlY3V0ZUFzeW5jIiwiYXN5bmNXYWl0TXMiLCJwcm9taXNlIiwicmVtb3RlIiwiZXhlY3V0ZUF0b21Bc3luYyIsImN1cldlYkZyYW1lcyIsIndhaXRGb3JBdG9tIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJjb21tYW5kTWFwIiwidGFwIiwic2Nyb2xsIiwic2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsInN3aXBlIiwicGluY2giLCJkb3VibGVUYXAiLCJ0d29GaW5nZXJUYXAiLCJ0YXBXaXRoTnVtYmVyT2ZUYXBzIiwidG91Y2hBbmRIb2xkIiwiZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwicm90YXRlRWxlbWVudCIsImZvcmNlUHJlc3MiLCJzY3JvbGxUb0VsZW1lbnQiLCJhbGVydCIsInNldFBhc3RlYm9hcmQiLCJnZXRQYXN0ZWJvYXJkIiwic291cmNlIiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsQXBwIiwiaXNBcHBJbnN0YWxsZWQiLCJyZW1vdmVBcHAiLCJsYXVuY2hBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJraWxsQXBwIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwibGlzdEFwcHMiLCJ2aWV3cG9ydFNjcmVlbnNob3QiLCJ2aWV3cG9ydFJlY3QiLCJzdGFydFBlcmZSZWNvcmQiLCJzdG9wUGVyZlJlY29yZCIsImluc3RhbGxDZXJ0aWZpY2F0ZSIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiYmF0dGVyeUluZm8iLCJkZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVGltZSIsImFjdGl2ZUFwcEluZm8iLCJkZXZpY2VTY3JlZW5JbmZvIiwicHJlc3NCdXR0b24iLCJlbnJvbGxCaW9tZXRyaWMiLCJzZW5kQmlvbWV0cmljTWF0Y2giLCJpc0Jpb21ldHJpY0Vucm9sbGVkIiwiY2xlYXJLZXljaGFpbnMiLCJnZXRQZXJtaXNzaW9uIiwic2V0UGVybWlzc2lvbiIsInJlc2V0UGVybWlzc2lvbiIsImdldEFwcGVhcmFuY2UiLCJzZXRBcHBlYXJhbmNlIiwic2lyaUNvbW1hbmQiLCJkZWxldGVGaWxlIiwiZGVsZXRlRm9sZGVyIiwic3RhcnRBdWRpb1JlY29yZGluZyIsInN0b3BBdWRpb1JlY29yZGluZyIsInJ1blhDVGVzdCIsImluc3RhbGxYQ1Rlc3RCdW5kbGUiLCJsaXN0WENUZXN0QnVuZGxlcyIsImxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlIiwicHVzaE5vdGlmaWNhdGlvbiIsImV4cGVjdE5vdGlmaWNhdGlvbiIsInBlcmZvcm1Jb0hpZEV2ZW50IiwiY29uZmlndXJlTG9jYWxpemF0aW9uIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJzdGFydFBjYXAiLCJzdG9wUGNhcCIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwiam9pbiJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBlcnJvcnMsIGVycm9yRnJvbUNvZGUsIGVycm9yRnJvbVczQ0pzb25Db2RlXG59IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLnJlY2VpdmVBc3luY1Jlc3BvbnNlID0gYXN5bmMgZnVuY3Rpb24gcmVjZWl2ZUFzeW5jUmVzcG9uc2UgKHN0YXR1cywgdmFsdWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLmFzeW5jUHJvbWlzZSkpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZSB3aGVuIHdlIHdlcmUgbm90IGV4cGVjdGluZyBvbmUhIGAgK1xuICAgICAgYFJlc3BvbnNlIHdhczogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHV0aWwuaGFzVmFsdWUoc3RhdHVzKSAmJiBzdGF0dXMgIT09IDApIHtcbiAgICAvLyBNSlNPTldQXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21Db2RlKHN0YXR1cywgdmFsdWUubWVzc2FnZSkpO1xuICB9XG4gIGlmICghdXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHZhbHVlICYmIF8uaXNTdHJpbmcodmFsdWUuZXJyb3IpKSB7XG4gICAgLy8gVzNDXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21XM0NKc29uQ29kZSh2YWx1ZS5lcnJvciwgdmFsdWUubWVzc2FnZSwgdmFsdWUuc3RhY2t0cmFjZSkpO1xuICB9XG4gIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKHNjcmlwdCwgYXJncykge1xuICBpZiAoc2NyaXB0Lm1hdGNoKC9ebW9iaWxlOi8pKSB7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tb2JpbGU6LywgJycpLnRyaW0oKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlTW9iaWxlKHNjcmlwdCwgXy5pc0FycmF5KGFyZ3MpID8gYXJnc1swXSA6IGFyZ3MpO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIGFyZ3NdKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZUFzeW5jID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUFzeW5jIChzY3JpcHQsIGFyZ3MpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgdGhpcy5hc3luY1dhaXRNcyA9IHRoaXMuYXN5bmNXYWl0TXMgfHwgMDtcbiAgY29uc3QgcHJvbWlzZSA9IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tQXN5bmMoJ2V4ZWN1dGVfYXN5bmNfc2NyaXB0JywgW1xuICAgIHNjcmlwdCwgYXJncywgdGhpcy5hc3luY1dhaXRNc1xuICBdLCB0aGlzLmN1cldlYkZyYW1lcyk7XG4gIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKSk7XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTW9iaWxlIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgY29tbWFuZE1hcCA9IHtcbiAgICAvL3JlZ2lvbiBnZXN0dXJlcyBzdXBwb3J0XG4gICAgdGFwOiAnbW9iaWxlVGFwJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHNlbGVjdFBpY2tlcldoZWVsVmFsdWU6ICdtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OC1zd2lwZWxlZnQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc0LXN3aXBlcmlnaHQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY3LXN3aXBldXA/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY0LXN3aXBlZG93bj9sYW5ndWFnZT1vYmpjXG4gICAgc3dpcGU6ICdtb2JpbGVTd2lwZScsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjktcGluY2h3aXRoc2NhbGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHBpbmNoOiAnbW9iaWxlUGluY2gnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjczLWRvdWJsZXRhcD9sYW5ndWFnZT1vYmpjXG4gICAgZG91YmxlVGFwOiAnbW9iaWxlRG91YmxlVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3NS10d29maW5nZXJ0YXA/bGFuZ3VhZ2U9b2JqY1xuICAgIHR3b0ZpbmdlclRhcDogJ21vYmlsZVR3b0ZpbmdlclRhcCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzEtdGFwd2l0aG51bWJlcm9mdGFwcz9sYW5ndWFnZT1vYmpjXG4gICAgdGFwV2l0aE51bWJlck9mVGFwczogJ21vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjYzLXByZXNzZm9yZHVyYXRpb24/bGFuZ3VhZ2U9b2JqY1xuICAgIHRvdWNoQW5kSG9sZDogJ21vYmlsZVRvdWNoQW5kSG9sZCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzAtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uOiAnbW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2NS1yb3RhdGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHJvdGF0ZUVsZW1lbnQ6ICdtb2JpbGVSb3RhdGVFbGVtZW50JyxcbiAgICBmb3JjZVByZXNzOiAnbW9iaWxlRm9yY2VQcmVzcycsXG4gICAgc2Nyb2xsVG9FbGVtZW50OiAnbW9iaWxlU2Nyb2xsVG9FbGVtZW50JyxcblxuICAgIC8vZW5kcmVnaW9uIGdlc3R1cmVzIHN1cHBvcnRcbiAgICBhbGVydDogJ21vYmlsZUhhbmRsZUFsZXJ0JyxcblxuICAgIHNldFBhc3RlYm9hcmQ6ICdtb2JpbGVTZXRQYXN0ZWJvYXJkJyxcbiAgICBnZXRQYXN0ZWJvYXJkOiAnbW9iaWxlR2V0UGFzdGVib2FyZCcsXG5cbiAgICBzb3VyY2U6ICdtb2JpbGVHZXRTb3VyY2UnLFxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgLy9yZWdpb24gbXVsdGlwbGUgYXBwcyBtYW5hZ2VtZW50XG4gICAgaW5zdGFsbEFwcDogJ21vYmlsZUluc3RhbGxBcHAnLFxuICAgIGlzQXBwSW5zdGFsbGVkOiAnbW9iaWxlSXNBcHBJbnN0YWxsZWQnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgbGF1bmNoQXBwOiAnbW9iaWxlTGF1bmNoQXBwJyxcbiAgICB0ZXJtaW5hdGVBcHA6ICdtb2JpbGVUZXJtaW5hdGVBcHAnLFxuICAgIGtpbGxBcHA6ICdtb2JpbGVLaWxsQXBwJyxcbiAgICBxdWVyeUFwcFN0YXRlOiAnbW9iaWxlUXVlcnlBcHBTdGF0ZScsXG4gICAgYWN0aXZhdGVBcHA6ICdtb2JpbGVBY3RpdmF0ZUFwcCcsXG4gICAgbGlzdEFwcHM6ICdtb2JpbGVMaXN0QXBwcycsXG4gICAgLy9lbmRyZWdpb24gbXVsdGlwbGUgYXBwcyBtYW5hZ2VtZW50XG5cbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdnZXRWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ2dldFZpZXdwb3J0UmVjdCcsXG5cbiAgICBzdGFydFBlcmZSZWNvcmQ6ICdtb2JpbGVTdGFydFBlcmZSZWNvcmQnLFxuICAgIHN0b3BQZXJmUmVjb3JkOiAnbW9iaWxlU3RvcFBlcmZSZWNvcmQnLFxuXG4gICAgaW5zdGFsbENlcnRpZmljYXRlOiAnbW9iaWxlSW5zdGFsbENlcnRpZmljYXRlJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG4gICAgZ2V0RGV2aWNlVGltZTogJ21vYmlsZUdldERldmljZVRpbWUnLFxuICAgIGFjdGl2ZUFwcEluZm86ICdtb2JpbGVHZXRBY3RpdmVBcHBJbmZvJyxcbiAgICBkZXZpY2VTY3JlZW5JbmZvOiAnZ2V0U2NyZWVuSW5mbycsXG5cbiAgICBwcmVzc0J1dHRvbjogJ21vYmlsZVByZXNzQnV0dG9uJyxcblxuICAgIGVucm9sbEJpb21ldHJpYzogJ21vYmlsZUVucm9sbEJpb21ldHJpYycsXG4gICAgc2VuZEJpb21ldHJpY01hdGNoOiAnbW9iaWxlU2VuZEJpb21ldHJpY01hdGNoJyxcbiAgICBpc0Jpb21ldHJpY0Vucm9sbGVkOiAnbW9iaWxlSXNCaW9tZXRyaWNFbnJvbGxlZCcsXG5cbiAgICBjbGVhcktleWNoYWluczogJ21vYmlsZUNsZWFyS2V5Y2hhaW5zJyxcblxuICAgIGdldFBlcm1pc3Npb246ICdtb2JpbGVHZXRQZXJtaXNzaW9uJyxcbiAgICBzZXRQZXJtaXNzaW9uOiAnbW9iaWxlU2V0UGVybWlzc2lvbnMnLFxuICAgIHJlc2V0UGVybWlzc2lvbjogJ21vYmlsZVJlc2V0UGVybWlzc2lvbicsXG5cbiAgICBnZXRBcHBlYXJhbmNlOiAnbW9iaWxlR2V0QXBwZWFyYW5jZScsXG4gICAgc2V0QXBwZWFyYW5jZTogJ21vYmlsZVNldEFwcGVhcmFuY2UnLFxuXG4gICAgc2lyaUNvbW1hbmQ6ICdtb2JpbGVTaXJpQ29tbWFuZCcsXG5cbiAgICBkZWxldGVGaWxlOiAnbW9iaWxlRGVsZXRlRmlsZScsXG4gICAgZGVsZXRlRm9sZGVyOiAnbW9iaWxlRGVsZXRlRm9sZGVyJyxcblxuICAgIHN0YXJ0QXVkaW9SZWNvcmRpbmc6ICdzdGFydEF1ZGlvUmVjb3JkaW5nJyxcbiAgICBzdG9wQXVkaW9SZWNvcmRpbmc6ICdzdG9wQXVkaW9SZWNvcmRpbmcnLFxuXG4gICAgLy8gWENUZXN0XG4gICAgcnVuWENUZXN0OiAnbW9iaWxlUnVuWENUZXN0JyxcbiAgICBpbnN0YWxsWENUZXN0QnVuZGxlOiAnbW9iaWxlSW5zdGFsbFhDVGVzdEJ1bmRsZScsXG4gICAgbGlzdFhDVGVzdEJ1bmRsZXM6ICdtb2JpbGVMaXN0WENUZXN0QnVuZGxlcycsXG4gICAgbGlzdFhDVGVzdHNJblRlc3RCdW5kbGU6ICdtb2JpbGVMaXN0WENUZXN0c0luVGVzdEJ1bmRsZScsXG5cbiAgICBwdXNoTm90aWZpY2F0aW9uOiAnbW9iaWxlUHVzaE5vdGlmaWNhdGlvbicsXG4gICAgZXhwZWN0Tm90aWZpY2F0aW9uOiAnbW9iaWxlRXhwZWN0Tm90aWZpY2F0aW9uJyxcblxuICAgIHBlcmZvcm1Jb0hpZEV2ZW50OiAnbW9iaWxlUGVyZm9ybUlvSGlkRXZlbnQnLFxuXG4gICAgY29uZmlndXJlTG9jYWxpemF0aW9uOiAnbW9iaWxlQ29uZmlndXJlTG9jYWxpemF0aW9uJyxcblxuICAgIHJlc2V0TG9jYXRpb25TZXJ2aWNlOiAnbW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UnLFxuXG4gICAgc3RhcnRQY2FwOiAnbW9iaWxlU3RhcnRQY2FwJyxcbiAgICBzdG9wUGNhcDogJ21vYmlsZVN0b3BQY2FwJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKGNvbW1hbmRNYXAsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kICcke21vYmlsZUNvbW1hbmR9Jy4gT25seSAke18ua2V5cyhjb21tYW5kTWFwKS5qb2luKCcsICcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW2NvbW1hbmRNYXBbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsRUFBbkI7O0FBRUFBLFVBQVUsQ0FBQ0Msb0JBQVgsR0FBa0MsZUFBZUEsb0JBQWYsQ0FBcUNDLE1BQXJDLEVBQTZDQyxLQUE3QyxFQUFvRDtFQUNwRixLQUFLQyxHQUFMLENBQVNDLEtBQVQsQ0FBZ0IsNEJBQTJCQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUosS0FBZixDQUFzQixFQUFqRTs7RUFDQSxJQUFJLENBQUNLLGFBQUEsQ0FBS0MsUUFBTCxDQUFjLEtBQUtDLFlBQW5CLENBQUwsRUFBdUM7SUFDckMsS0FBS04sR0FBTCxDQUFTTyxJQUFULENBQWUsMERBQUQsR0FDWCxpQkFBZ0JMLElBQUksQ0FBQ0MsU0FBTCxDQUFlSixLQUFmLENBQXNCLEVBRHpDO0lBRUE7RUFDRDs7RUFFRCxJQUFJSyxhQUFBLENBQUtDLFFBQUwsQ0FBY1AsTUFBZCxLQUF5QkEsTUFBTSxLQUFLLENBQXhDLEVBQTJDO0lBRXpDLE9BQU8sS0FBS1EsWUFBTCxDQUFrQkUsTUFBbEIsQ0FBeUIsSUFBQUMscUJBQUEsRUFBY1gsTUFBZCxFQUFzQkMsS0FBSyxDQUFDVyxPQUE1QixDQUF6QixDQUFQO0VBQ0Q7O0VBQ0QsSUFBSSxDQUFDTixhQUFBLENBQUtDLFFBQUwsQ0FBY1AsTUFBZCxDQUFELElBQTBCQyxLQUExQixJQUFtQ1ksZUFBQSxDQUFFQyxRQUFGLENBQVdiLEtBQUssQ0FBQ2MsS0FBakIsQ0FBdkMsRUFBZ0U7SUFFOUQsT0FBTyxLQUFLUCxZQUFMLENBQWtCRSxNQUFsQixDQUF5QixJQUFBTSw0QkFBQSxF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
146
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiLCJuYW1lcyI6WyJleHRlbnNpb25zIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJzdGF0dXMiLCJ2YWx1ZSIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJoYXNWYWx1ZSIsImFzeW5jUHJvbWlzZSIsIndhcm4iLCJyZWplY3QiLCJlcnJvckZyb21Db2RlIiwibWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsImVycm9yIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwicmVzb2x2ZSIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiY29udmVydEVsZW1lbnRzRm9yQXRvbXMiLCJyZXN1bHQiLCJleGVjdXRlQXRvbSIsImNhY2hlV2ViRWxlbWVudHMiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZXhlY3V0ZUFzeW5jIiwiYXN5bmNXYWl0TXMiLCJwcm9taXNlIiwicmVtb3RlIiwiZXhlY3V0ZUF0b21Bc3luYyIsImN1cldlYkZyYW1lcyIsIndhaXRGb3JBdG9tIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJjb21tYW5kTWFwIiwidGFwIiwic2Nyb2xsIiwic2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsInN3aXBlIiwicGluY2giLCJkb3VibGVUYXAiLCJ0d29GaW5nZXJUYXAiLCJ0YXBXaXRoTnVtYmVyT2ZUYXBzIiwidG91Y2hBbmRIb2xkIiwiZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwicm90YXRlRWxlbWVudCIsImZvcmNlUHJlc3MiLCJzY3JvbGxUb0VsZW1lbnQiLCJhbGVydCIsInNldFBhc3RlYm9hcmQiLCJnZXRQYXN0ZWJvYXJkIiwic291cmNlIiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsQXBwIiwiaXNBcHBJbnN0YWxsZWQiLCJyZW1vdmVBcHAiLCJsYXVuY2hBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJraWxsQXBwIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwibGlzdEFwcHMiLCJ2aWV3cG9ydFNjcmVlbnNob3QiLCJ2aWV3cG9ydFJlY3QiLCJzdGFydFBlcmZSZWNvcmQiLCJzdG9wUGVyZlJlY29yZCIsImluc3RhbGxDZXJ0aWZpY2F0ZSIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiYmF0dGVyeUluZm8iLCJkZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVGltZSIsImFjdGl2ZUFwcEluZm8iLCJkZXZpY2VTY3JlZW5JbmZvIiwicHJlc3NCdXR0b24iLCJlbnJvbGxCaW9tZXRyaWMiLCJzZW5kQmlvbWV0cmljTWF0Y2giLCJpc0Jpb21ldHJpY0Vucm9sbGVkIiwiY2xlYXJLZXljaGFpbnMiLCJnZXRQZXJtaXNzaW9uIiwic2V0UGVybWlzc2lvbiIsInJlc2V0UGVybWlzc2lvbiIsImdldEFwcGVhcmFuY2UiLCJzZXRBcHBlYXJhbmNlIiwic2lyaUNvbW1hbmQiLCJkZWxldGVGaWxlIiwiZGVsZXRlRm9sZGVyIiwic3RhcnRBdWRpb1JlY29yZGluZyIsInN0b3BBdWRpb1JlY29yZGluZyIsInJ1blhDVGVzdCIsImluc3RhbGxYQ1Rlc3RCdW5kbGUiLCJsaXN0WENUZXN0QnVuZGxlcyIsImxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlIiwicHVzaE5vdGlmaWNhdGlvbiIsImV4cGVjdE5vdGlmaWNhdGlvbiIsInBlcmZvcm1Jb0hpZEV2ZW50IiwiY29uZmlndXJlTG9jYWxpemF0aW9uIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJzdGFydFBjYXAiLCJzdG9wUGNhcCIsImxpc3RDb25kaXRpb25JbmR1Y2VycyIsImVuYWJsZUNvbmRpdGlvbkluZHVjZXIiLCJkaXNhYmxlQ29uZGl0aW9uSW5kdWNlciIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwiam9pbiJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBlcnJvcnMsIGVycm9yRnJvbUNvZGUsIGVycm9yRnJvbVczQ0pzb25Db2RlXG59IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLnJlY2VpdmVBc3luY1Jlc3BvbnNlID0gYXN5bmMgZnVuY3Rpb24gcmVjZWl2ZUFzeW5jUmVzcG9uc2UgKHN0YXR1cywgdmFsdWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLmFzeW5jUHJvbWlzZSkpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZSB3aGVuIHdlIHdlcmUgbm90IGV4cGVjdGluZyBvbmUhIGAgK1xuICAgICAgYFJlc3BvbnNlIHdhczogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHV0aWwuaGFzVmFsdWUoc3RhdHVzKSAmJiBzdGF0dXMgIT09IDApIHtcbiAgICAvLyBNSlNPTldQXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21Db2RlKHN0YXR1cywgdmFsdWUubWVzc2FnZSkpO1xuICB9XG4gIGlmICghdXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHZhbHVlICYmIF8uaXNTdHJpbmcodmFsdWUuZXJyb3IpKSB7XG4gICAgLy8gVzNDXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21XM0NKc29uQ29kZSh2YWx1ZS5lcnJvciwgdmFsdWUubWVzc2FnZSwgdmFsdWUuc3RhY2t0cmFjZSkpO1xuICB9XG4gIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKHNjcmlwdCwgYXJncykge1xuICBpZiAoc2NyaXB0Lm1hdGNoKC9ebW9iaWxlOi8pKSB7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tb2JpbGU6LywgJycpLnRyaW0oKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlTW9iaWxlKHNjcmlwdCwgXy5pc0FycmF5KGFyZ3MpID8gYXJnc1swXSA6IGFyZ3MpO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIGFyZ3NdKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZUFzeW5jID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUFzeW5jIChzY3JpcHQsIGFyZ3MpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgdGhpcy5hc3luY1dhaXRNcyA9IHRoaXMuYXN5bmNXYWl0TXMgfHwgMDtcbiAgY29uc3QgcHJvbWlzZSA9IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tQXN5bmMoJ2V4ZWN1dGVfYXN5bmNfc2NyaXB0JywgW1xuICAgIHNjcmlwdCwgYXJncywgdGhpcy5hc3luY1dhaXRNc1xuICBdLCB0aGlzLmN1cldlYkZyYW1lcyk7XG4gIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKSk7XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTW9iaWxlIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgY29tbWFuZE1hcCA9IHtcbiAgICAvL3JlZ2lvbiBnZXN0dXJlcyBzdXBwb3J0XG4gICAgdGFwOiAnbW9iaWxlVGFwJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHNlbGVjdFBpY2tlcldoZWVsVmFsdWU6ICdtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OC1zd2lwZWxlZnQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc0LXN3aXBlcmlnaHQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY3LXN3aXBldXA/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY0LXN3aXBlZG93bj9sYW5ndWFnZT1vYmpjXG4gICAgc3dpcGU6ICdtb2JpbGVTd2lwZScsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjktcGluY2h3aXRoc2NhbGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHBpbmNoOiAnbW9iaWxlUGluY2gnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjczLWRvdWJsZXRhcD9sYW5ndWFnZT1vYmpjXG4gICAgZG91YmxlVGFwOiAnbW9iaWxlRG91YmxlVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3NS10d29maW5nZXJ0YXA/bGFuZ3VhZ2U9b2JqY1xuICAgIHR3b0ZpbmdlclRhcDogJ21vYmlsZVR3b0ZpbmdlclRhcCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzEtdGFwd2l0aG51bWJlcm9mdGFwcz9sYW5ndWFnZT1vYmpjXG4gICAgdGFwV2l0aE51bWJlck9mVGFwczogJ21vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjYzLXByZXNzZm9yZHVyYXRpb24/bGFuZ3VhZ2U9b2JqY1xuICAgIHRvdWNoQW5kSG9sZDogJ21vYmlsZVRvdWNoQW5kSG9sZCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzAtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uOiAnbW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2NS1yb3RhdGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHJvdGF0ZUVsZW1lbnQ6ICdtb2JpbGVSb3RhdGVFbGVtZW50JyxcbiAgICBmb3JjZVByZXNzOiAnbW9iaWxlRm9yY2VQcmVzcycsXG4gICAgc2Nyb2xsVG9FbGVtZW50OiAnbW9iaWxlU2Nyb2xsVG9FbGVtZW50JyxcblxuICAgIC8vZW5kcmVnaW9uIGdlc3R1cmVzIHN1cHBvcnRcbiAgICBhbGVydDogJ21vYmlsZUhhbmRsZUFsZXJ0JyxcblxuICAgIHNldFBhc3RlYm9hcmQ6ICdtb2JpbGVTZXRQYXN0ZWJvYXJkJyxcbiAgICBnZXRQYXN0ZWJvYXJkOiAnbW9iaWxlR2V0UGFzdGVib2FyZCcsXG5cbiAgICBzb3VyY2U6ICdtb2JpbGVHZXRTb3VyY2UnLFxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgLy9yZWdpb24gbXVsdGlwbGUgYXBwcyBtYW5hZ2VtZW50XG4gICAgaW5zdGFsbEFwcDogJ21vYmlsZUluc3RhbGxBcHAnLFxuICAgIGlzQXBwSW5zdGFsbGVkOiAnbW9iaWxlSXNBcHBJbnN0YWxsZWQnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgbGF1bmNoQXBwOiAnbW9iaWxlTGF1bmNoQXBwJyxcbiAgICB0ZXJtaW5hdGVBcHA6ICdtb2JpbGVUZXJtaW5hdGVBcHAnLFxuICAgIGtpbGxBcHA6ICdtb2JpbGVLaWxsQXBwJyxcbiAgICBxdWVyeUFwcFN0YXRlOiAnbW9iaWxlUXVlcnlBcHBTdGF0ZScsXG4gICAgYWN0aXZhdGVBcHA6ICdtb2JpbGVBY3RpdmF0ZUFwcCcsXG4gICAgbGlzdEFwcHM6ICdtb2JpbGVMaXN0QXBwcycsXG4gICAgLy9lbmRyZWdpb24gbXVsdGlwbGUgYXBwcyBtYW5hZ2VtZW50XG5cbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdnZXRWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ2dldFZpZXdwb3J0UmVjdCcsXG5cbiAgICBzdGFydFBlcmZSZWNvcmQ6ICdtb2JpbGVTdGFydFBlcmZSZWNvcmQnLFxuICAgIHN0b3BQZXJmUmVjb3JkOiAnbW9iaWxlU3RvcFBlcmZSZWNvcmQnLFxuXG4gICAgaW5zdGFsbENlcnRpZmljYXRlOiAnbW9iaWxlSW5zdGFsbENlcnRpZmljYXRlJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG4gICAgZ2V0RGV2aWNlVGltZTogJ21vYmlsZUdldERldmljZVRpbWUnLFxuICAgIGFjdGl2ZUFwcEluZm86ICdtb2JpbGVHZXRBY3RpdmVBcHBJbmZvJyxcbiAgICBkZXZpY2VTY3JlZW5JbmZvOiAnZ2V0U2NyZWVuSW5mbycsXG5cbiAgICBwcmVzc0J1dHRvbjogJ21vYmlsZVByZXNzQnV0dG9uJyxcblxuICAgIGVucm9sbEJpb21ldHJpYzogJ21vYmlsZUVucm9sbEJpb21ldHJpYycsXG4gICAgc2VuZEJpb21ldHJpY01hdGNoOiAnbW9iaWxlU2VuZEJpb21ldHJpY01hdGNoJyxcbiAgICBpc0Jpb21ldHJpY0Vucm9sbGVkOiAnbW9iaWxlSXNCaW9tZXRyaWNFbnJvbGxlZCcsXG5cbiAgICBjbGVhcktleWNoYWluczogJ21vYmlsZUNsZWFyS2V5Y2hhaW5zJyxcblxuICAgIGdldFBlcm1pc3Npb246ICdtb2JpbGVHZXRQZXJtaXNzaW9uJyxcbiAgICBzZXRQZXJtaXNzaW9uOiAnbW9iaWxlU2V0UGVybWlzc2lvbnMnLFxuICAgIHJlc2V0UGVybWlzc2lvbjogJ21vYmlsZVJlc2V0UGVybWlzc2lvbicsXG5cbiAgICBnZXRBcHBlYXJhbmNlOiAnbW9iaWxlR2V0QXBwZWFyYW5jZScsXG4gICAgc2V0QXBwZWFyYW5jZTogJ21vYmlsZVNldEFwcGVhcmFuY2UnLFxuXG4gICAgc2lyaUNvbW1hbmQ6ICdtb2JpbGVTaXJpQ29tbWFuZCcsXG5cbiAgICBkZWxldGVGaWxlOiAnbW9iaWxlRGVsZXRlRmlsZScsXG4gICAgZGVsZXRlRm9sZGVyOiAnbW9iaWxlRGVsZXRlRm9sZGVyJyxcblxuICAgIHN0YXJ0QXVkaW9SZWNvcmRpbmc6ICdzdGFydEF1ZGlvUmVjb3JkaW5nJyxcbiAgICBzdG9wQXVkaW9SZWNvcmRpbmc6ICdzdG9wQXVkaW9SZWNvcmRpbmcnLFxuXG4gICAgLy8gWENUZXN0XG4gICAgcnVuWENUZXN0OiAnbW9iaWxlUnVuWENUZXN0JyxcbiAgICBpbnN0YWxsWENUZXN0QnVuZGxlOiAnbW9iaWxlSW5zdGFsbFhDVGVzdEJ1bmRsZScsXG4gICAgbGlzdFhDVGVzdEJ1bmRsZXM6ICdtb2JpbGVMaXN0WENUZXN0QnVuZGxlcycsXG4gICAgbGlzdFhDVGVzdHNJblRlc3RCdW5kbGU6ICdtb2JpbGVMaXN0WENUZXN0c0luVGVzdEJ1bmRsZScsXG5cbiAgICBwdXNoTm90aWZpY2F0aW9uOiAnbW9iaWxlUHVzaE5vdGlmaWNhdGlvbicsXG4gICAgZXhwZWN0Tm90aWZpY2F0aW9uOiAnbW9iaWxlRXhwZWN0Tm90aWZpY2F0aW9uJyxcblxuICAgIHBlcmZvcm1Jb0hpZEV2ZW50OiAnbW9iaWxlUGVyZm9ybUlvSGlkRXZlbnQnLFxuXG4gICAgY29uZmlndXJlTG9jYWxpemF0aW9uOiAnbW9iaWxlQ29uZmlndXJlTG9jYWxpemF0aW9uJyxcblxuICAgIHJlc2V0TG9jYXRpb25TZXJ2aWNlOiAnbW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UnLFxuXG4gICAgc3RhcnRQY2FwOiAnbW9iaWxlU3RhcnRQY2FwJyxcbiAgICBzdG9wUGNhcDogJ21vYmlsZVN0b3BQY2FwJyxcbiAgICBsaXN0Q29uZGl0aW9uSW5kdWNlcnM6ICdtb2JpbGVMaXN0Q29uZGl0aW9uSW5kdWNlcnMnLFxuICAgIGVuYWJsZUNvbmRpdGlvbkluZHVjZXI6ICdtb2JpbGVFbmFibGVDb25kaXRpb25JbmR1Y2VyJyxcbiAgICBkaXNhYmxlQ29uZGl0aW9uSW5kdWNlcjogJ21vYmlsZURpc2FibGVDb25kaXRpb25JbmR1Y2VyJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKGNvbW1hbmRNYXAsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kICcke21vYmlsZUNvbW1hbmR9Jy4gT25seSAke18ua2V5cyhjb21tYW5kTWFwKS5qb2luKCcsICcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW2NvbW1hbmRNYXBbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsRUFBbkI7O0FBRUFBLFVBQVUsQ0FBQ0Msb0JBQVgsR0FBa0MsZUFBZUEsb0JBQWYsQ0FBcUNDLE1BQXJDLEVBQTZDQyxLQUE3QyxFQUFvRDtFQUNwRixLQUFLQyxHQUFMLENBQVNDLEtBQVQsQ0FBZ0IsNEJBQTJCQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUosS0FBZixDQUFzQixFQUFqRTs7RUFDQSxJQUFJLENBQUNLLGFBQUEsQ0FBS0MsUUFBTCxDQUFjLEtBQUtDLFlBQW5CLENBQUwsRUFBdUM7SUFDckMsS0FBS04sR0FBTCxDQUFTTyxJQUFULENBQWUsMERBQUQsR0FDWCxpQkFBZ0JMLElBQUksQ0FBQ0MsU0FBTCxDQUFlSixLQUFmLENBQXNCLEVBRHpDO0lBRUE7RUFDRDs7RUFFRCxJQUFJSyxhQUFBLENBQUtDLFFBQUwsQ0FBY1AsTUFBZCxLQUF5QkEsTUFBTSxLQUFLLENBQXhDLEVBQTJDO0lBRXpDLE9BQU8sS0FBS1EsWUFB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
@@ -83,10 +83,12 @@ var _localization = _interopRequireDefault(require("./localization"));
83
83
 
84
84
  var _pcap = _interopRequireDefault(require("./pcap"));
85
85
 
86
+ var _condition = _interopRequireDefault(require("./condition"));
87
+
86
88
  const commands = {};
87
- Object.assign(commands, _context.default, _execute.default, _gesture.default, _find.default, _proxyHelper.default, _source.default, _general.default, _log.default, _web.default, _timeouts.default, _navigation.default, _element.default, _fileMovement.default, _alert.default, _screenshots.default, _pasteboard.default, _location.default, _lock.default, _recordscreen.default, _appManagement.default, _performance.default, _clipboard.default, _certificate.default, _battery.default, _cookies.default, _biometric.default, _keychains.default, _permissions.default, _deviceInfo.default, _activeAppInfo.default, _recordAudio.default, _appearance.default, _xctest.default, _notifications.default, _iohid.default, _localization.default, _pcap.default);
89
+ Object.assign(commands, _context.default, _execute.default, _gesture.default, _find.default, _proxyHelper.default, _source.default, _general.default, _log.default, _web.default, _timeouts.default, _navigation.default, _element.default, _fileMovement.default, _alert.default, _screenshots.default, _pasteboard.default, _location.default, _lock.default, _recordscreen.default, _appManagement.default, _performance.default, _clipboard.default, _certificate.default, _battery.default, _cookies.default, _biometric.default, _keychains.default, _permissions.default, _deviceInfo.default, _activeAppInfo.default, _recordAudio.default, _appearance.default, _xctest.default, _notifications.default, _iohid.default, _localization.default, _pcap.default, _condition.default);
88
90
  var _default = commands;
89
91
  exports.default = _default;require('source-map-support').install();
90
92
 
91
93
 
92
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2luZGV4LmpzIiwibmFtZXMiOlsiY29tbWFuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJjb250ZXh0Q29tbWFuZHMiLCJleGVjdXRlRXh0ZW5zaW9ucyIsImdlc3R1cmVFeHRlbnNpb25zIiwiZmluZEV4dGVuc2lvbnMiLCJwcm94eUhlbHBlckV4dGVuc2lvbnMiLCJzb3VyY2VFeHRlbnNpb25zIiwiZ2VuZXJhbEV4dGVuc2lvbnMiLCJsb2dFeHRlbnNpb25zIiwid2ViRXh0ZW5zaW9ucyIsInRpbWVvdXRFeHRlbnNpb25zIiwibmF2aWdhdGlvbkV4dGVuc2lvbnMiLCJlbGVtZW50RXh0ZW5zaW9ucyIsImZpbGVNb3ZlbWVudEV4dGVuc2lvbnMiLCJhbGVydEV4dGVuc2lvbnMiLCJzY3JlZW5zaG90RXh0ZW5zaW9ucyIsInBhc3RlYm9hcmRFeHRlbnNpb25zIiwibG9jYXRpb25FeHRlbnNpb25zIiwibG9ja0V4dGVuc2lvbnMiLCJyZWNvcmRTY3JlZW5FeHRlbnNpb25zIiwiYXBwTWFuYWdlbWVudEV4dGVuc2lvbnMiLCJwZXJmb3JtYW5jZUV4dGVuc2lvbnMiLCJjbGlwYm9hcmRFeHRlbnNpb25zIiwiY2VydGlmaWNhdGVFeHRlbnNpb25zIiwiYmF0dGVyeUV4dGVuc2lvbnMiLCJjb29raWVzRXh0ZW5zaW9ucyIsImJpb21ldHJpY0V4dGVuc2lvbnMiLCJrZXljaGFpbnNFeHRlbnNpb25zIiwicGVybWlzc2lvbnNFeHRlbnNpb25zIiwiZGV2aWNlSW5mb0V4dGVuc2lvbnMiLCJhY3RpdmVBcHBJbmZvRXh0ZW5zaW9ucyIsInJlY29yZEF1ZGlvRXh0ZW5zaW9ucyIsImFwcGVhcmFuY2VFeHRlbnNpb25zIiwieGN0ZXN0RXh0ZW5zaW9ucyIsIm5vdGlmaWNhdGlvbnNFeHRlbnNpb25zIiwiaW9oaWRFeHRlbnNpb25zIiwibG9jYWxpemF0aW9uRXh0ZW5zaW9ucyIsInBjYXBFeHRlbnNpb25zIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL2NvbW1hbmRzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb250ZXh0Q29tbWFuZHMgZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCBleGVjdXRlRXh0ZW5zaW9ucyBmcm9tICcuL2V4ZWN1dGUnO1xuaW1wb3J0IGdlc3R1cmVFeHRlbnNpb25zIGZyb20gJy4vZ2VzdHVyZSc7XG5pbXBvcnQgZmluZEV4dGVuc2lvbnMgZnJvbSAnLi9maW5kJztcbmltcG9ydCBwcm94eUhlbHBlckV4dGVuc2lvbnMgZnJvbSAnLi9wcm94eS1oZWxwZXInO1xuaW1wb3J0IGFsZXJ0RXh0ZW5zaW9ucyBmcm9tICcuL2FsZXJ0JztcbmltcG9ydCBzb3VyY2VFeHRlbnNpb25zIGZyb20gJy4vc291cmNlJztcbmltcG9ydCBnZW5lcmFsRXh0ZW5zaW9ucyBmcm9tICcuL2dlbmVyYWwnO1xuaW1wb3J0IGxvZ0V4dGVuc2lvbnMgZnJvbSAnLi9sb2cnO1xuaW1wb3J0IHdlYkV4dGVuc2lvbnMgZnJvbSAnLi93ZWInO1xuaW1wb3J0IHRpbWVvdXRFeHRlbnNpb25zIGZyb20gJy4vdGltZW91dHMnO1xuaW1wb3J0IG5hdmlnYXRpb25FeHRlbnNpb25zIGZyb20gJy4vbmF2aWdhdGlvbic7XG5pbXBvcnQgZWxlbWVudEV4dGVuc2lvbnMgZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCBmaWxlTW92ZW1lbnRFeHRlbnNpb25zIGZyb20gJy4vZmlsZS1tb3ZlbWVudCc7XG5pbXBvcnQgc2NyZWVuc2hvdEV4dGVuc2lvbnMgZnJvbSAnLi9zY3JlZW5zaG90cyc7XG5pbXBvcnQgcGFzdGVib2FyZEV4dGVuc2lvbnMgZnJvbSAnLi9wYXN0ZWJvYXJkJztcbmltcG9ydCBsb2NhdGlvbkV4dGVuc2lvbnMgZnJvbSAnLi9sb2NhdGlvbic7XG5pbXBvcnQgcmVjb3JkQXVkaW9FeHRlbnNpb25zIGZyb20gJy4vcmVjb3JkLWF1ZGlvJztcbmltcG9ydCByZWNvcmRTY3JlZW5FeHRlbnNpb25zIGZyb20gJy4vcmVjb3Jkc2NyZWVuJztcbmltcG9ydCBsb2NrRXh0ZW5zaW9ucyBmcm9tICcuL2xvY2snO1xuaW1wb3J0IGFwcE1hbmFnZW1lbnRFeHRlbnNpb25zIGZyb20gJy4vYXBwLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHBlcmZvcm1hbmNlRXh0ZW5zaW9ucyBmcm9tICcuL3BlcmZvcm1hbmNlJztcbmltcG9ydCBjbGlwYm9hcmRFeHRlbnNpb25zIGZyb20gJy4vY2xpcGJvYXJkJztcbmltcG9ydCBjZXJ0aWZpY2F0ZUV4dGVuc2lvbnMgZnJvbSAnLi9jZXJ0aWZpY2F0ZSc7XG5pbXBvcnQgYmF0dGVyeUV4dGVuc2lvbnMgZnJvbSAnLi9iYXR0ZXJ5JztcbmltcG9ydCBkZXZpY2VJbmZvRXh0ZW5zaW9ucyBmcm9tICcuL2RldmljZUluZm8nO1xuaW1wb3J0IGFjdGl2ZUFwcEluZm9FeHRlbnNpb25zIGZyb20gJy4vYWN0aXZlQXBwSW5mbyc7XG5pbXBvcnQgY29va2llc0V4dGVuc2lvbnMgZnJvbSAnLi9jb29raWVzJztcbmltcG9ydCBiaW9tZXRyaWNFeHRlbnNpb25zIGZyb20gJy4vYmlvbWV0cmljJztcbmltcG9ydCBrZXljaGFpbnNFeHRlbnNpb25zIGZyb20gJy4va2V5Y2hhaW5zJztcbmltcG9ydCBwZXJtaXNzaW9uc0V4dGVuc2lvbnMgZnJvbSAnLi9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgYXBwZWFyYW5jZUV4dGVuc2lvbnMgZnJvbSAnLi9hcHBlYXJhbmNlJztcbmltcG9ydCB4Y3Rlc3RFeHRlbnNpb25zIGZyb20gJy4veGN0ZXN0JztcbmltcG9ydCBub3RpZmljYXRpb25zRXh0ZW5zaW9ucyBmcm9tICcuL25vdGlmaWNhdGlvbnMnO1xuaW1wb3J0IGlvaGlkRXh0ZW5zaW9ucyBmcm9tICcuL2lvaGlkJztcbmltcG9ydCBsb2NhbGl6YXRpb25FeHRlbnNpb25zIGZyb20gJy4vbG9jYWxpemF0aW9uJztcbmltcG9ydCBwY2FwRXh0ZW5zaW9ucyBmcm9tICcuL3BjYXAnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5PYmplY3QuYXNzaWduKGNvbW1hbmRzLCBjb250ZXh0Q29tbWFuZHMsIGV4ZWN1dGVFeHRlbnNpb25zLFxuICBnZXN0dXJlRXh0ZW5zaW9ucywgZmluZEV4dGVuc2lvbnMsIHByb3h5SGVscGVyRXh0ZW5zaW9ucywgc291cmNlRXh0ZW5zaW9ucyxcbiAgZ2VuZXJhbEV4dGVuc2lvbnMsIGxvZ0V4dGVuc2lvbnMsIHdlYkV4dGVuc2lvbnMsIHRpbWVvdXRFeHRlbnNpb25zLFxuICBuYXZpZ2F0aW9uRXh0ZW5zaW9ucywgZWxlbWVudEV4dGVuc2lvbnMsIGZpbGVNb3ZlbWVudEV4dGVuc2lvbnMsXG4gIGFsZXJ0RXh0ZW5zaW9ucywgc2NyZWVuc2hvdEV4dGVuc2lvbnMsIHBhc3RlYm9hcmRFeHRlbnNpb25zLCBsb2NhdGlvbkV4dGVuc2lvbnMsXG4gIGxvY2tFeHRlbnNpb25zLCByZWNvcmRTY3JlZW5FeHRlbnNpb25zLCBhcHBNYW5hZ2VtZW50RXh0ZW5zaW9ucywgcGVyZm9ybWFuY2VFeHRlbnNpb25zLFxuICBjbGlwYm9hcmRFeHRlbnNpb25zLCBjZXJ0aWZpY2F0ZUV4dGVuc2lvbnMsIGJhdHRlcnlFeHRlbnNpb25zLCBjb29raWVzRXh0ZW5zaW9ucyxcbiAgYmlvbWV0cmljRXh0ZW5zaW9ucywga2V5Y2hhaW5zRXh0ZW5zaW9ucywgcGVybWlzc2lvbnNFeHRlbnNpb25zLCBkZXZpY2VJbmZvRXh0ZW5zaW9ucyxcbiAgYWN0aXZlQXBwSW5mb0V4dGVuc2lvbnMsIHJlY29yZEF1ZGlvRXh0ZW5zaW9ucywgYXBwZWFyYW5jZUV4dGVuc2lvbnMsIHhjdGVzdEV4dGVuc2lvbnMsXG4gIG5vdGlmaWNhdGlvbnNFeHRlbnNpb25zLCBpb2hpZEV4dGVuc2lvbnMsIGxvY2FsaXphdGlvbkV4dGVuc2lvbnMsIHBjYXBFeHRlbnNpb25zLFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCO0FBRUFDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjRixRQUFkLEVBQXdCRyxnQkFBeEIsRUFBeUNDLGdCQUF6QyxFQUNFQyxnQkFERixFQUNxQkMsYUFEckIsRUFDcUNDLG9CQURyQyxFQUM0REMsZUFENUQsRUFFRUMsZ0JBRkYsRUFFcUJDLFlBRnJCLEVBRW9DQyxZQUZwQyxFQUVtREMsaUJBRm5ELEVBR0VDLG1CQUhGLEVBR3dCQyxnQkFIeEIsRUFHMkNDLHFCQUgzQyxFQUlFQyxjQUpGLEVBSW1CQyxvQkFKbkIsRUFJeUNDLG1CQUp6QyxFQUkrREMsaUJBSi9ELEVBS0VDLGFBTEYsRUFLa0JDLHFCQUxsQixFQUswQ0Msc0JBTDFDLEVBS21FQyxvQkFMbkUsRUFNRUMsa0JBTkYsRUFNdUJDLG9CQU52QixFQU04Q0MsZ0JBTjlDLEVBTWlFQyxnQkFOakUsRUFPRUMsa0JBUEYsRUFPdUJDLGtCQVB2QixFQU80Q0Msb0JBUDVDLEVBT21FQyxtQkFQbkUsRUFRRUMsc0JBUkYsRUFRMkJDLG9CQVIzQixFQVFrREMsbUJBUmxELEVBUXdFQyxlQVJ4RSxFQVNFQyxzQkFURixFQVMyQkMsY0FUM0IsRUFTNENDLHFCQVQ1QyxFQVNvRUMsYUFUcEU7ZUFZZXZDLFEifQ==
94
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2luZGV4LmpzIiwibmFtZXMiOlsiY29tbWFuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJjb250ZXh0Q29tbWFuZHMiLCJleGVjdXRlRXh0ZW5zaW9ucyIsImdlc3R1cmVFeHRlbnNpb25zIiwiZmluZEV4dGVuc2lvbnMiLCJwcm94eUhlbHBlckV4dGVuc2lvbnMiLCJzb3VyY2VFeHRlbnNpb25zIiwiZ2VuZXJhbEV4dGVuc2lvbnMiLCJsb2dFeHRlbnNpb25zIiwid2ViRXh0ZW5zaW9ucyIsInRpbWVvdXRFeHRlbnNpb25zIiwibmF2aWdhdGlvbkV4dGVuc2lvbnMiLCJlbGVtZW50RXh0ZW5zaW9ucyIsImZpbGVNb3ZlbWVudEV4dGVuc2lvbnMiLCJhbGVydEV4dGVuc2lvbnMiLCJzY3JlZW5zaG90RXh0ZW5zaW9ucyIsInBhc3RlYm9hcmRFeHRlbnNpb25zIiwibG9jYXRpb25FeHRlbnNpb25zIiwibG9ja0V4dGVuc2lvbnMiLCJyZWNvcmRTY3JlZW5FeHRlbnNpb25zIiwiYXBwTWFuYWdlbWVudEV4dGVuc2lvbnMiLCJwZXJmb3JtYW5jZUV4dGVuc2lvbnMiLCJjbGlwYm9hcmRFeHRlbnNpb25zIiwiY2VydGlmaWNhdGVFeHRlbnNpb25zIiwiYmF0dGVyeUV4dGVuc2lvbnMiLCJjb29raWVzRXh0ZW5zaW9ucyIsImJpb21ldHJpY0V4dGVuc2lvbnMiLCJrZXljaGFpbnNFeHRlbnNpb25zIiwicGVybWlzc2lvbnNFeHRlbnNpb25zIiwiZGV2aWNlSW5mb0V4dGVuc2lvbnMiLCJhY3RpdmVBcHBJbmZvRXh0ZW5zaW9ucyIsInJlY29yZEF1ZGlvRXh0ZW5zaW9ucyIsImFwcGVhcmFuY2VFeHRlbnNpb25zIiwieGN0ZXN0RXh0ZW5zaW9ucyIsIm5vdGlmaWNhdGlvbnNFeHRlbnNpb25zIiwiaW9oaWRFeHRlbnNpb25zIiwibG9jYWxpemF0aW9uRXh0ZW5zaW9ucyIsInBjYXBFeHRlbnNpb25zIiwiY29uZGl0aW9uRXh0ZW5zaW9ucyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29udGV4dENvbW1hbmRzIGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgZXhlY3V0ZUV4dGVuc2lvbnMgZnJvbSAnLi9leGVjdXRlJztcbmltcG9ydCBnZXN0dXJlRXh0ZW5zaW9ucyBmcm9tICcuL2dlc3R1cmUnO1xuaW1wb3J0IGZpbmRFeHRlbnNpb25zIGZyb20gJy4vZmluZCc7XG5pbXBvcnQgcHJveHlIZWxwZXJFeHRlbnNpb25zIGZyb20gJy4vcHJveHktaGVscGVyJztcbmltcG9ydCBhbGVydEV4dGVuc2lvbnMgZnJvbSAnLi9hbGVydCc7XG5pbXBvcnQgc291cmNlRXh0ZW5zaW9ucyBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgZ2VuZXJhbEV4dGVuc2lvbnMgZnJvbSAnLi9nZW5lcmFsJztcbmltcG9ydCBsb2dFeHRlbnNpb25zIGZyb20gJy4vbG9nJztcbmltcG9ydCB3ZWJFeHRlbnNpb25zIGZyb20gJy4vd2ViJztcbmltcG9ydCB0aW1lb3V0RXh0ZW5zaW9ucyBmcm9tICcuL3RpbWVvdXRzJztcbmltcG9ydCBuYXZpZ2F0aW9uRXh0ZW5zaW9ucyBmcm9tICcuL25hdmlnYXRpb24nO1xuaW1wb3J0IGVsZW1lbnRFeHRlbnNpb25zIGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgZmlsZU1vdmVtZW50RXh0ZW5zaW9ucyBmcm9tICcuL2ZpbGUtbW92ZW1lbnQnO1xuaW1wb3J0IHNjcmVlbnNob3RFeHRlbnNpb25zIGZyb20gJy4vc2NyZWVuc2hvdHMnO1xuaW1wb3J0IHBhc3RlYm9hcmRFeHRlbnNpb25zIGZyb20gJy4vcGFzdGVib2FyZCc7XG5pbXBvcnQgbG9jYXRpb25FeHRlbnNpb25zIGZyb20gJy4vbG9jYXRpb24nO1xuaW1wb3J0IHJlY29yZEF1ZGlvRXh0ZW5zaW9ucyBmcm9tICcuL3JlY29yZC1hdWRpbyc7XG5pbXBvcnQgcmVjb3JkU2NyZWVuRXh0ZW5zaW9ucyBmcm9tICcuL3JlY29yZHNjcmVlbic7XG5pbXBvcnQgbG9ja0V4dGVuc2lvbnMgZnJvbSAnLi9sb2NrJztcbmltcG9ydCBhcHBNYW5hZ2VtZW50RXh0ZW5zaW9ucyBmcm9tICcuL2FwcC1tYW5hZ2VtZW50JztcbmltcG9ydCBwZXJmb3JtYW5jZUV4dGVuc2lvbnMgZnJvbSAnLi9wZXJmb3JtYW5jZSc7XG5pbXBvcnQgY2xpcGJvYXJkRXh0ZW5zaW9ucyBmcm9tICcuL2NsaXBib2FyZCc7XG5pbXBvcnQgY2VydGlmaWNhdGVFeHRlbnNpb25zIGZyb20gJy4vY2VydGlmaWNhdGUnO1xuaW1wb3J0IGJhdHRlcnlFeHRlbnNpb25zIGZyb20gJy4vYmF0dGVyeSc7XG5pbXBvcnQgZGV2aWNlSW5mb0V4dGVuc2lvbnMgZnJvbSAnLi9kZXZpY2VJbmZvJztcbmltcG9ydCBhY3RpdmVBcHBJbmZvRXh0ZW5zaW9ucyBmcm9tICcuL2FjdGl2ZUFwcEluZm8nO1xuaW1wb3J0IGNvb2tpZXNFeHRlbnNpb25zIGZyb20gJy4vY29va2llcyc7XG5pbXBvcnQgYmlvbWV0cmljRXh0ZW5zaW9ucyBmcm9tICcuL2Jpb21ldHJpYyc7XG5pbXBvcnQga2V5Y2hhaW5zRXh0ZW5zaW9ucyBmcm9tICcuL2tleWNoYWlucyc7XG5pbXBvcnQgcGVybWlzc2lvbnNFeHRlbnNpb25zIGZyb20gJy4vcGVybWlzc2lvbnMnO1xuaW1wb3J0IGFwcGVhcmFuY2VFeHRlbnNpb25zIGZyb20gJy4vYXBwZWFyYW5jZSc7XG5pbXBvcnQgeGN0ZXN0RXh0ZW5zaW9ucyBmcm9tICcuL3hjdGVzdCc7XG5pbXBvcnQgbm90aWZpY2F0aW9uc0V4dGVuc2lvbnMgZnJvbSAnLi9ub3RpZmljYXRpb25zJztcbmltcG9ydCBpb2hpZEV4dGVuc2lvbnMgZnJvbSAnLi9pb2hpZCc7XG5pbXBvcnQgbG9jYWxpemF0aW9uRXh0ZW5zaW9ucyBmcm9tICcuL2xvY2FsaXphdGlvbic7XG5pbXBvcnQgcGNhcEV4dGVuc2lvbnMgZnJvbSAnLi9wY2FwJztcbmltcG9ydCBjb25kaXRpb25FeHRlbnNpb25zIGZyb20gJy4vY29uZGl0aW9uJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuT2JqZWN0LmFzc2lnbihjb21tYW5kcywgY29udGV4dENvbW1hbmRzLCBleGVjdXRlRXh0ZW5zaW9ucyxcbiAgZ2VzdHVyZUV4dGVuc2lvbnMsIGZpbmRFeHRlbnNpb25zLCBwcm94eUhlbHBlckV4dGVuc2lvbnMsIHNvdXJjZUV4dGVuc2lvbnMsXG4gIGdlbmVyYWxFeHRlbnNpb25zLCBsb2dFeHRlbnNpb25zLCB3ZWJFeHRlbnNpb25zLCB0aW1lb3V0RXh0ZW5zaW9ucyxcbiAgbmF2aWdhdGlvbkV4dGVuc2lvbnMsIGVsZW1lbnRFeHRlbnNpb25zLCBmaWxlTW92ZW1lbnRFeHRlbnNpb25zLFxuICBhbGVydEV4dGVuc2lvbnMsIHNjcmVlbnNob3RFeHRlbnNpb25zLCBwYXN0ZWJvYXJkRXh0ZW5zaW9ucywgbG9jYXRpb25FeHRlbnNpb25zLFxuICBsb2NrRXh0ZW5zaW9ucywgcmVjb3JkU2NyZWVuRXh0ZW5zaW9ucywgYXBwTWFuYWdlbWVudEV4dGVuc2lvbnMsIHBlcmZvcm1hbmNlRXh0ZW5zaW9ucyxcbiAgY2xpcGJvYXJkRXh0ZW5zaW9ucywgY2VydGlmaWNhdGVFeHRlbnNpb25zLCBiYXR0ZXJ5RXh0ZW5zaW9ucywgY29va2llc0V4dGVuc2lvbnMsXG4gIGJpb21ldHJpY0V4dGVuc2lvbnMsIGtleWNoYWluc0V4dGVuc2lvbnMsIHBlcm1pc3Npb25zRXh0ZW5zaW9ucywgZGV2aWNlSW5mb0V4dGVuc2lvbnMsXG4gIGFjdGl2ZUFwcEluZm9FeHRlbnNpb25zLCByZWNvcmRBdWRpb0V4dGVuc2lvbnMsIGFwcGVhcmFuY2VFeHRlbnNpb25zLCB4Y3Rlc3RFeHRlbnNpb25zLFxuICBub3RpZmljYXRpb25zRXh0ZW5zaW9ucywgaW9oaWRFeHRlbnNpb25zLCBsb2NhbGl6YXRpb25FeHRlbnNpb25zLCBwY2FwRXh0ZW5zaW9ucyxcbiAgY29uZGl0aW9uRXh0ZW5zaW9ucyxcbik7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjtBQUVBQyxNQUFNLENBQUNDLE1BQVAsQ0FBY0YsUUFBZCxFQUF3QkcsZ0JBQXhCLEVBQXlDQyxnQkFBekMsRUFDRUMsZ0JBREYsRUFDcUJDLGFBRHJCLEVBQ3FDQyxvQkFEckMsRUFDNERDLGVBRDVELEVBRUVDLGdCQUZGLEVBRXFCQyxZQUZyQixFQUVvQ0MsWUFGcEMsRUFFbURDLGlCQUZuRCxFQUdFQyxtQkFIRixFQUd3QkMsZ0JBSHhCLEVBRzJDQyxxQkFIM0MsRUFJRUMsY0FKRixFQUltQkMsb0JBSm5CLEVBSXlDQyxtQkFKekMsRUFJK0RDLGlCQUovRCxFQUtFQyxhQUxGLEVBS2tCQyxxQkFMbEIsRUFLMENDLHNCQUwxQyxFQUttRUMsb0JBTG5FLEVBTUVDLGtCQU5GLEVBTXVCQyxvQkFOdkIsRUFNOENDLGdCQU45QyxFQU1pRUMsZ0JBTmpFLEVBT0VDLGtCQVBGLEVBT3VCQyxrQkFQdkIsRUFPNENDLG9CQVA1QyxFQU9tRUMsbUJBUG5FLEVBUUVDLHNCQVJGLEVBUTJCQyxvQkFSM0IsRUFRa0RDLG1CQVJsRCxFQVF3RUMsZUFSeEUsRUFTRUMsc0JBVEYsRUFTMkJDLGNBVDNCLEVBUzRDQyxxQkFUNUMsRUFTb0VDLGFBVHBFLEVBVUVDLGtCQVZGO2VBYWV4QyxRIn0=
@@ -133,6 +133,7 @@ class XCUITestDriver extends _driver.BaseDriver {
133
133
  this.pageLoadMs = 6000;
134
134
  this.landscapeWebCoordsOffset = 0;
135
135
  this.remote = null;
136
+ this._conditionInducerService = null;
136
137
  this.webElementsCache = new _lruCache.default({
137
138
  max: WEB_ELEMENTS_CACHE_SIZE
138
139
  });
@@ -618,6 +619,10 @@ class XCUITestDriver extends _driver.BaseDriver {
618
619
  this._perfRecorders = [];
619
620
  }
620
621
 
622
+ if (this._conditionInducerService) {
623
+ this.mobileDisableConditionInducer();
624
+ }
625
+
621
626
  await this.stop();
622
627
 
623
628
  if (this.wda && !this.opts.webDriverAgentUrl) {
@@ -1363,4 +1368,4 @@ var _default = XCUITestDriver;
1363
1368
  exports.default = _default;require('source-map-support').install();
1364
1369
 
1365
1370
 
1366
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbIlNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSIsIkNVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEgiLCJTVVBQT1JURURfRVhURU5TSU9OUyIsIklQQV9FWFQiLCJBUFBfRVhUIiwiTUFYX0FSQ0hJVkVfU0NBTl9ERVBUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMiLCJXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTCIsIldEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMIiwiREVGQVVMVF9TRVRUSU5HUyIsIm5hdGl2ZVdlYlRhcCIsIm5hdGl2ZVdlYlRhcFN0cmljdCIsInVzZUpTT05Tb3VyY2UiLCJzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzIiwiZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyIsIm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkiLCJtanBlZ1NlcnZlckZyYW1lcmF0ZSIsInNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTY2FsaW5nRmFjdG9yIiwicmVkdWNlTW90aW9uIiwiU0hBUkVEX1JFU09VUkNFU19HVUFSRCIsIkFzeW5jTG9jayIsIldFQl9FTEVNRU5UU19DQUNIRV9TSVpFIiwiTk9fUFJPWFlfTkFUSVZFX0xJU1QiLCJOT19QUk9YWV9XRUJfTElTVCIsImNvbmNhdCIsIk1FTU9JWkVEX0ZVTkNUSU9OUyIsIlhDVUlUZXN0RHJpdmVyIiwiQmFzZURyaXZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsImxvY2F0b3JTdHJhdGVnaWVzIiwid2ViTG9jYXRvclN0cmF0ZWdpZXMiLCJyZXNldElvcyIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImxvZ3MiLCJmbiIsIl8iLCJtZW1vaXplIiwia2V5IiwidmFsdWUiLCJwcm94eUNvbW1hbmQiLCJ3ZGEiLCJkZXZpY2UiLCJqd3BQcm94eUFjdGl2ZSIsInByb3h5UmVxUmVzIiwiandwUHJveHlBdm9pZCIsInNhZmFyaSIsImNhY2hlZFdkYVN0YXR1cyIsImN1cldlYkZyYW1lcyIsIl9jdXJyZW50VXJsIiwiY3VyQ29udGV4dCIsInhjb2RlVmVyc2lvbiIsImNvbnRleHRzIiwiaW1wbGljaXRXYWl0TXMiLCJhc3luY2xpYldhaXRNcyIsInBhZ2VMb2FkTXMiLCJsYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQiLCJyZW1vdGUiLCJ3ZWJFbGVtZW50c0NhY2hlIiwiTFJVIiwibWF4IiwiZHJpdmVyRGF0YSIsImdldFN0YXR1cyIsImRyaXZlckluZm8iLCJnZXREcml2ZXJJbmZvIiwic3RhdHVzIiwiYnVpbGQiLCJ2ZXJzaW9uIiwibWVyZ2VDbGlBcmdzVG9PcHRzIiwiZGlkTWVyZ2UiLCJPYmplY3QiLCJlbnRyaWVzIiwiY2xpQXJncyIsImhhcyIsImxvZyIsImluZm8iLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsImxpZmVjeWNsZURhdGEiLCJzZXNzaW9uSWQiLCJjYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInN0YXJ0IiwiYXNzaWduIiwidWRpZCIsInVwZGF0ZVNldHRpbmdzIiwid2RhU2V0dGluZ3MiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJlIiwiZXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVsZXRlU2Vzc2lvbiIsImdldERlZmF1bHRVcmwiLCJpc1JlYWxEZXZpY2UiLCJ3ZGFMb2NhbFBvcnQiLCJhZGRyZXNzIiwiaW5jbHVkZXMiLCJwb3J0Iiwibm9SZXNldCIsImZ1bGxSZXNldCIsInByaW50VXNlciIsImlvc1Nka1ZlcnNpb24iLCJyZWFsRGV2aWNlIiwiZGV0ZXJtaW5lRGV2aWNlIiwic2ltdWxhdG9yRGV2aWNlc1NldFBhdGgiLCJkZXZpY2VzU2V0UGF0aCIsInBsYXRmb3JtVmVyc2lvbiIsImdldFBsYXRmb3JtVmVyc2lvbiIsIm5vcm1hbGl6ZWRWZXJzaW9uIiwibm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsIkVycm9yIiwiaXNFbXB0eSIsIndlYkRyaXZlckFnZW50VXJsIiwiZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24iLCJsb2dFdmVudCIsInRvTG93ZXIiLCJhcHAiLCJ1bmRlZmluZWQiLCJwcm9jZXNzQXJndW1lbnRzIiwiYnVuZGxlSWQiLCJTQUZBUklfQlVORExFX0lEIiwic2FmYXJpSW5pdGlhbFVybCIsImNvbmZpZ3VyZUFwcCIsImNoZWNrQXBwUHJlc2VudCIsImV4dHJhY3RCdW5kbGVJZCIsInJ1blJlc2V0IiwiV2ViRHJpdmVyQWdlbnQiLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsImNhdGNoIiwiZGVidWciLCJtZW1vaXplZExvZ0luZm8iLCJzdGFydExvZ0NhcHR1cmUiLCJza2lwTG9nQ2FwdHVyZSIsInJlc3VsdCIsImlzTG9nQ2FwdHVyZVN0YXJ0ZWQiLCJpc1NpbXVsYXRvciIsInNodXRkb3duT3RoZXJTaW11bGF0b3JzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJpc1NhZmFyaSIsInNhZmFyaUdsb2JhbFByZWZlcmVuY2VzIiwidXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3MiLCJsb2NhbENvbmZpZyIsInNldExvY2FsZUFuZFByZWZlcmVuY2VzIiwic2ltIiwic2h1dGRvd25TaW11bGF0b3IiLCJjdXN0b21TU0xDZXJ0IiwiZG9lc1N1cHBvcnRLZXljaGFpbkFwaSIsImNlcnRIZWFkIiwidHJ1bmNhdGUiLCJsZW5ndGgiLCJoYXNDZXJ0aWZpY2F0ZUxlZ2FjeSIsImluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSIsInN0YXJ0U2ltIiwiaW5zdGFsbENlcnRpZmljYXRlIiwibGF1bmNoV2l0aElEQiIsImlkYiIsIklEQiIsImNvbm5lY3QiLCJtZXNzYWdlIiwiUHlpZGV2aWNlIiwiaW5zdGFsbFByb2ZpbGUiLCJwYXlsb2FkIiwiaW5zdGFsbEFVVCIsImlzQXBwSW5zdGFsbGVkIiwiZXJyb3JBbmRUaHJvdyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbnNNYXBwaW5nIiwidG9QYWlycyIsInBhcnNlIiwic2V0UGVybWlzc2lvbnMiLCJ3YXJuIiwiY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkIiwiZW5hYmxlQ2FsZW5kYXJBY2Nlc3MiLCJkaXNhYmxlQ2FsZW5kYXJBY2Nlc3MiLCJzdGFydFdkYSIsInNldFJlZHVjZU1vdGlvbiIsInNldEluaXRpYWxPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIiwiYXV0b1dlYnZpZXciLCJhY3RpdmF0ZVJlY2VudFdlYnZpZXciLCJpc05pbCIsImdldEN1cnJlbnRVcmwiLCJzZXRVcmwiLCJzZXRDdXJyZW50VXJsIiwiZ2V0VXJsIiwiaGFzVmFsdWUiLCJjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMiLCJ1c2VQb3J0Rm9yd2FyZGluZyIsImlzTG9jYWxIb3N0Iiwid2RhQmFzZVVybCIsIkRFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZIiwicmVxdWVzdENvbm5lY3Rpb24iLCJ1cmwiLCJkZXZpY2VQb3J0Iiwid2RhUmVtb3RlUG9ydCIsInN5bmNocm9uaXphdGlvbktleSIsIm5hbWUiLCJ1c2VYY3Rlc3RydW5GaWxlIiwiaXNTb3VyY2VGcmVzaCIsImRlcml2ZWREYXRhUGF0aCIsInBhdGgiLCJub3JtYWxpemUiLCJpc0J1c3kiLCJib290c3RyYXBQYXRoIiwiYWNxdWlyZSIsInVzZU5ld1dEQSIsInF1aXRBbmRVbmluc3RhbGwiLCJzZXR1cENhY2hpbmciLCJtc2ciLCJyZXN1bHRCdW5kbGVQYXRoIiwic3RhcnR1cFJldHJpZXMiLCJ3ZGFTdGFydHVwUmV0cmllcyIsInN0YXJ0dXBSZXRyeUludGVydmFsIiwid2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwiLCJyZXRyeUNvdW50IiwicmV0cnlJbnRlcnZhbCIsInJldHJpZXMiLCJtYWpvciIsInJldHJ5IiwibGF1bmNoIiwiZXJyIiwiZXJyb3JNc2ciLCJvcmlnaW5hbFN0YWNrdHJhY2UiLCJzdGFydFdkYVNlc3Npb24iLCJzdGFjayIsImNsZWFyU3lzdGVtRmlsZXMiLCJtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwIiwiZnVsbHlTdGFydGVkIiwicnVuUmVhbERldmljZVJlc2V0IiwicnVuU2ltdWxhdG9yUmVzZXQiLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJyZWNvcmRlciIsImNvbXBhY3QiLCJfcmVjZW50U2NyZWVuUmVjb3JkZXIiLCJfYXVkaW9SZWNvcmRlciIsIl90cmFmZmljQ2FwdHVyZSIsImludGVycnVwdCIsImNsZWFudXAiLCJfcGVyZlJlY29yZGVycyIsIkIiLCJhbGwiLCJtYXAiLCJ4Iiwic3RvcCIsInN0b3BSZW1vdGUiLCJyZXNldE9uU2Vzc2lvblN0YXJ0T25seSIsImVuZm9yY2VTaW11bGF0b3JTaHV0ZG93biIsImNyZWF0ZVNpbSIsImRlbGV0ZSIsInNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSIsInJlc2V0TG9jYXRpb25TZXJ2aWNlIiwibW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UiLCJpZ25vcmUiLCJzeXNsb2ciLCJzdG9wQ2FwdHVyZSIsImp3cHJveHkiLCJxdWl0IiwicmVsZWFzZUNvbm5lY3Rpb24iLCJleGVjdXRlQ29tbWFuZCIsImNtZCIsInJlY2VpdmVBc3luY1Jlc3BvbnNlIiwiYXBwSXNQYWNrYWdlT3JCdW5kbGUiLCJ0ZXN0IiwiaGVscGVycyIsIm9uUG9zdFByb2Nlc3MiLCJvblBvc3RDb25maWd1cmVBcHAiLCJzdXBwb3J0ZWRFeHRlbnNpb25zIiwidW56aXBBcHAiLCJhcHBQYXRoIiwiZGVwdGgiLCJyb290RGlyIiwibWF0Y2hlZFBhdGhzIiwiZmluZEFwcHMiLCJiYXNlbmFtZSIsInBsdXJhbGl6ZSIsIm1hdGNoZWRQYXRoIiwiZnVsbFBhdGgiLCJqb2luIiwiaXNBcHBCdW5kbGUiLCJzdXBwb3J0ZWRQbGF0Zm9ybXMiLCJmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyIsInNvbWUiLCJwIiwiaXNvbGF0ZUFwcEJ1bmRsZSIsImVuZHNXaXRoIiwiZnMiLCJzdGF0IiwiaXNGaWxlIiwicmltcmFmIiwiY2FjaGVkQXBwSW5mbyIsImlzVXJsIiwiaXNQbGFpbk9iamVjdCIsImhhc2giLCJwYWNrYWdlSGFzaCIsImV4aXN0cyIsImdsb2IiLCJjd2QiLCJzdHJpY3QiLCJub3NvcnQiLCJpbnRlZ3JpdHkiLCJmb2xkZXIiLCJkZXZpY2VOYW1lIiwidHJhbnNsYXRlRGV2aWNlTmFtZSIsInNldHVwVmVyc2lvbkNhcHMiLCJnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24iLCJ0b0xvd2VyQ2FzZSIsImRldGVjdFVkaWQiLCJnZXRFeGlzdGluZ1NpbSIsImRldmljZVBsYXRmb3JtIiwiZGV2aWNlcyIsImdldENvbm5lY3RlZERldmljZXMiLCJnZXRTaW11bGF0b3IiLCJpZ24iLCJnZXRSZWFsRGV2aWNlT2JqIiwiZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24iLCJydW5PcHRzIiwic2NhbGVGYWN0b3IiLCJjb25uZWN0SGFyZHdhcmVLZXlib2FyZCIsInBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jIiwic2ltdWxhdG9yUGFzdGVib2FyZEF1dG9tYXRpY1N5bmMiLCJpc0hlYWRsZXNzIiwidHJhY2VQb2ludGVyIiwic2ltdWxhdG9yVHJhY2VQb2ludGVyIiwiZGV2aWNlUHJlZmVyZW5jZXMiLCJTaW11bGF0b3JXaW5kb3dDZW50ZXIiLCJpc0ludGVnZXIiLCJzaW11bGF0b3JTdGFydHVwVGltZW91dCIsInN0YXJ0dXBUaW1lb3V0IiwiaXNTdHJpbmciLCJ0b1VwcGVyQ2FzZSIsIlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uIiwiU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSIsInJ1biIsInBsYXRmb3JtTmFtZSIsImlzVHZPUyIsIlBMQVRGT1JNX05BTUVfVFZPUyIsIlBMQVRGT1JNX05BTUVfSU9TIiwibGF1bmNoQXBwIiwiQVBQX0xBVU5DSF9USU1FT1VUIiwic2ltY3RsIiwiY2hlY2tTdGF0dXMiLCJyZXNwb25zZSIsImN1cnJlbnRBcHAiLCJidW5kbGVJRCIsInBhcnNlSW50IiwiaXNBcnJheSIsImVudiIsImxhbmd1YWdlIiwicHVzaCIsImxvY2FsZSIsInNob3VsZFRlcm1pbmF0ZUFwcCIsImZvcmNlQXBwTGF1bmNoIiwid2RhQ2FwcyIsImF1dG9MYXVuY2giLCJhcmd1bWVudHMiLCJlbnZpcm9ubWVudCIsImV2ZW50bG9vcElkbGVEZWxheVNlYyIsIndkYUV2ZW50bG9vcElkbGVEZWxheSIsInNob3VsZFdhaXRGb3JRdWllc2NlbmNlIiwid2FpdEZvclF1aWVzY2VuY2UiLCJzaG91bGRVc2VUZXN0TWFuYWdlckZvclZpc2liaWxpdHlEZXRlY3Rpb24iLCJzaW1wbGVJc1Zpc2libGVDaGVjayIsIm1heFR5cGluZ0ZyZXF1ZW5jeSIsInNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyIiwid2FpdEZvcklkbGVUaW1lb3V0IiwiZWxlbWVudFJlc3BvbnNlRmllbGRzIiwiZGlzYWJsZUF1dG9tYXRpY1NjcmVlbnNob3RzIiwidXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5IiwiZm9yY2VTaW11bGF0b3JTb2Z0d2FyZUtleWJvYXJkUHJlc2VuY2UiLCJhdXRvQWNjZXB0QWxlcnRzIiwiZGVmYXVsdEFsZXJ0QWN0aW9uIiwiYXV0b0Rpc21pc3NBbGVydHMiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNXZWJ2aWV3IiwiY2FuUHJveHkiLCJpc1dlYkNvbnRleHQiLCJ2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSIsInN0cmF0ZWd5IiwiY29lcmNlVmVyc2lvbiIsInZlcmlmeVByb2Nlc3NBcmd1bWVudCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJjb21tYW5kVGltZW91dHMiLCJub3JtYWxpemVDb21tYW5kVGltZW91dHMiLCJwcm90b2NvbCIsImhvc3QiLCJwZXJtcyIsImFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzIiwicGFyc2VDYXBzQXJyYXkiLCJ2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtIiwiaW5zdGFsbFRvUmVhbERldmljZSIsInRpbWVvdXQiLCJhcHBQdXNoVGltZW91dCIsImFwcEluc3RhbGxTdHJhdGVneSIsImluc3RhbGxUb1NpbXVsYXRvciIsIm5ld1NpbXVsYXRvciIsIm90aGVyQXBwcyIsImluc3RhbGxPdGhlckFwcHMiLCJpb3NJbnN0YWxsUGF1c2UiLCJwYXVzZSIsImRlbGF5IiwiYXBwc0xpc3QiLCJhcHBQYXRocyIsIm90aGVyQXBwIiwiaXNFbmFibGVkIiwiaXNCb29sZWFuIiwiY3VyT3JpZW50YXRpb24iLCJfZ2V0Q29tbWFuZFRpbWVvdXQiLCJjbWROYW1lIiwiREVGQVVMVF9USU1FT1VUX0tFWSIsImdldFNlc3Npb24iLCJkcml2ZXJTZXNzaW9uIiwic2hvdWxkR2V0RGV2aWNlQ2FwcyIsImluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mbyIsImRldmljZUNhcHMiLCJzdGF0dXNCYXJTaXplIiwic2NhbGUiLCJnZXRTY3JlZW5JbmZvIiwicGl4ZWxSYXRpbyIsInN0YXRCYXJIZWlnaHQiLCJoZWlnaHQiLCJ2aWV3cG9ydFJlY3QiLCJnZXRWaWV3cG9ydFJlY3QiLCJyZXNldCIsImNsb25lRGVlcCIsInNodXRkb3duSGFuZGxlciIsInJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24iLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHV0aWwsIG1qcGVnLCBmcyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgeyBXZWJEcml2ZXJBZ2VudCB9IGZyb20gJ2FwcGl1bS13ZWJkcml2ZXJhZ2VudCc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQge1xuICBjcmVhdGVTaW0sIGdldEV4aXN0aW5nU2ltLCBydW5TaW11bGF0b3JSZXNldCwgaW5zdGFsbFRvU2ltdWxhdG9yLFxuICBzaHV0ZG93bk90aGVyU2ltdWxhdG9ycywgc2h1dGRvd25TaW11bGF0b3IsIHNldExvY2FsZUFuZFByZWZlcmVuY2VzXG59IGZyb20gJy4vc2ltdWxhdG9yLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgZ2V0U2ltdWxhdG9yIH0gZnJvbSAnYXBwaXVtLWlvcy1zaW11bGF0b3InO1xuaW1wb3J0IHtcbiAgZG9lc1N1cHBvcnRLZXljaGFpbkFwaSwgaW5zdGFsbENlcnRpZmljYXRlLCBpbnN0YWxsQ2VydGlmaWNhdGVMZWdhY3ksXG4gIGhhc0NlcnRpZmljYXRlTGVnYWN5LFxufSBmcm9tICcuL2NlcnQtdXRpbHMnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgcmV0cnkgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQge1xuICB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtLCBleHRyYWN0QnVuZGxlSWQsIFNBRkFSSV9CVU5ETEVfSUQsXG4gIGZldGNoU3VwcG9ydGVkQXBwUGxhdGZvcm1zLCBBUFBfRVhULCBJUEFfRVhULFxuICBpc0FwcEJ1bmRsZSwgZmluZEFwcHMsIGlzb2xhdGVBcHBCdW5kbGUsXG59IGZyb20gJy4vYXBwLXV0aWxzJztcbmltcG9ydCB7XG4gIGRlc2lyZWRDYXBDb25zdHJhaW50cywgUExBVEZPUk1fTkFNRV9JT1MsIFBMQVRGT1JNX05BTUVfVFZPU1xufSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQge1xuICBkZXRlY3RVZGlkLCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbiwgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uLFxuICBjaGVja0FwcFByZXNlbnQsIGdldERyaXZlckluZm8sXG4gIGNsZWFyU3lzdGVtRmlsZXMsIHRyYW5zbGF0ZURldmljZU5hbWUsIG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyxcbiAgREVGQVVMVF9USU1FT1VUX0tFWSwgbWFya1N5c3RlbUZpbGVzRm9yQ2xlYW51cCxcbiAgcHJpbnRVc2VyLCByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMsXG4gIG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbiwgaXNMb2NhbEhvc3Rcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1xuICBnZXRDb25uZWN0ZWREZXZpY2VzLCBydW5SZWFsRGV2aWNlUmVzZXQsIGluc3RhbGxUb1JlYWxEZXZpY2UsXG4gIGdldFJlYWxEZXZpY2VPYmpcbn0gZnJvbSAnLi9yZWFsLWRldmljZS1tYW5hZ2VtZW50JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBJREIgZnJvbSAnYXBwaXVtLWlkYic7XG5pbXBvcnQgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkgZnJvbSAnLi9kZXZpY2UtY29ubmVjdGlvbnMtZmFjdG9yeSc7XG5pbXBvcnQgUHlpZGV2aWNlIGZyb20gJy4vcHktaW9zLWRldmljZS1jbGllbnQnO1xuXG5cbmNvbnN0IFNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSA9ICdzaHV0ZG93bl9vdGhlcl9zaW1zJztcbmNvbnN0IENVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEggPSAnY3VzdG9taXplX3Jlc3VsdF9idW5kbGVfcGF0aCc7XG5cbmNvbnN0IFNVUFBPUlRFRF9FWFRFTlNJT05TID0gW0lQQV9FWFQsIEFQUF9FWFRdO1xuY29uc3QgTUFYX0FSQ0hJVkVfU0NBTl9ERVBUSCA9IDE7XG5jb25zdCBkZWZhdWx0U2VydmVyQ2FwcyA9IHtcbiAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgYnJvd3Nlck5hbWU6ICcnLFxuICBwbGF0Zm9ybTogJ01BQycsXG4gIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogZmFsc2UsXG59O1xuY29uc3QgV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMgPSAyO1xuY29uc3QgV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyA9IDE7XG5jb25zdCBXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLXhjdWl0ZXN0LWRyaXZlci9ibG9iL21hc3Rlci9kb2NzL3JlYWwtZGV2aWNlLWNvbmZpZy5tZCc7XG5jb25zdCBXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCA9IDEwMDAwO1xuY29uc3QgREVGQVVMVF9TRVRUSU5HUyA9IHtcbiAgbmF0aXZlV2ViVGFwOiBmYWxzZSxcbiAgbmF0aXZlV2ViVGFwU3RyaWN0OiBmYWxzZSxcbiAgdXNlSlNPTlNvdXJjZTogZmFsc2UsXG4gIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IHRydWUsXG4gIGVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM6ICd0eXBlLGxhYmVsJyxcbiAgLy8gUmVhZCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL1dlYkRyaXZlckFnZW50L2Jsb2IvbWFzdGVyL1dlYkRyaXZlckFnZW50TGliL1V0aWxpdGllcy9GQkNvbmZpZ3VyYXRpb24ubSBmb3IgZm9sbG93aW5nIHNldHRpbmdzJyB2YWx1ZXNcbiAgbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eTogMjUsXG4gIG1qcGVnU2VydmVyRnJhbWVyYXRlOiAxMCxcbiAgc2NyZWVuc2hvdFF1YWxpdHk6IDEsXG4gIG1qcGVnU2NhbGluZ0ZhY3RvcjogMTAwLFxuICAvLyBzZXQgYHJlZHVjZU1vdGlvbmAgdG8gYG51bGxgIHNvIHRoYXQgaXQgd2lsbCBiZSB2ZXJpZmllZCBidXQgc3RpbGwgc2V0IGVpdGhlciB0cnVlL2ZhbHNlXG4gIHJlZHVjZU1vdGlvbjogbnVsbCxcbn07XG4vLyBUaGlzIGxvY2sgYXNzdXJlcywgdGhhdCBlYWNoIGRyaXZlciBzZXNzaW9uIGRvZXMgbm90XG4vLyBhZmZlY3Qgc2hhcmVkIHJlc291cmNlcyBvZiB0aGUgb3RoZXIgcGFyYWxsZWwgc2Vzc2lvbnNcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5jb25zdCBXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSA9IDUwMDtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbmNvbnN0IE5PX1BST1hZX05BVElWRV9MSVNUID0gW1xuICBbJ0RFTEVURScsIC93aW5kb3cvXSxcbiAgWydHRVQnLCAvXlxcL3Nlc3Npb25cXC9bXlxcL10rJC9dLFxuICBbJ0dFVCcsIC9hbGVydF90ZXh0L10sXG4gIFsnR0VUJywgL2FsZXJ0XFwvW15cXC9dKy9dLFxuICBbJ0dFVCcsIC9hcHBpdW0vXSxcbiAgWydHRVQnLCAvYXR0cmlidXRlL10sXG4gIFsnR0VUJywgL2NvbnRleHQvXSxcbiAgWydHRVQnLCAvbG9jYXRpb24vXSxcbiAgWydHRVQnLCAvbG9nL10sXG4gIFsnR0VUJywgL3NjcmVlbnNob3QvXSxcbiAgWydHRVQnLCAvc2l6ZS9dLFxuICBbJ0dFVCcsIC9zb3VyY2UvXSxcbiAgWydHRVQnLCAvdGltZW91dHMkL10sXG4gIFsnR0VUJywgL3VybC9dLFxuICBbJ0dFVCcsIC93aW5kb3cvXSxcbiAgWydQT1NUJywgL2FjY2VwdF9hbGVydC9dLFxuICBbJ1BPU1QnLCAvYWN0aW9ucyQvXSxcbiAgWydQT1NUJywgL2FsZXJ0X3RleHQvXSxcbiAgWydQT1NUJywgL2FsZXJ0XFwvW15cXC9dKy9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC9pc19sb2NrZWQvXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL2xvY2svXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL3VubG9jay9dLFxuICBbJ1BPU1QnLCAvYmFjay9dLFxuICBbJ1BPU1QnLCAvY2xlYXIvXSxcbiAgWydQT1NUJywgL2NvbnRleHQvXSxcbiAgWydQT1NUJywgL2Rpc21pc3NfYWxlcnQvXSxcbiAgWydQT1NUJywgL2VsZW1lbnRcXC9hY3RpdmUvXSwgLy8gTUpTT05XUCBnZXQgYWN0aXZlIGVsZW1lbnQgc2hvdWxkIHByb3h5XG4gIFsnUE9TVCcsIC9lbGVtZW50JC9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudHMkL10sXG4gIFsnUE9TVCcsIC9leGVjdXRlL10sXG4gIFsnUE9TVCcsIC9rZXlzL10sXG4gIFsnUE9TVCcsIC9sb2cvXSxcbiAgWydQT1NUJywgL21vdmV0by9dLFxuICBbJ1BPU1QnLCAvcmVjZWl2ZV9hc3luY19yZXNwb25zZS9dLCAvLyBhbHdheXMsIGluIGNhc2UgY29udGV4dCBzd2l0Y2hlcyB3aGlsZSB3YWl0aW5nXG4gIFsnUE9TVCcsIC9zZXNzaW9uXFwvW15cXC9dK1xcL2xvY2F0aW9uL10sIC8vIGdlbyBsb2NhdGlvbiwgYnV0IG5vdCBlbGVtZW50IGxvY2F0aW9uXG4gIFsnUE9TVCcsIC9zaGFrZS9dLFxuICBbJ1BPU1QnLCAvdGltZW91dHMvXSxcbiAgWydQT1NUJywgL3RvdWNoL10sXG4gIFsnUE9TVCcsIC91cmwvXSxcbiAgWydQT1NUJywgL3ZhbHVlL10sXG4gIFsnUE9TVCcsIC93aW5kb3cvXSxcbiAgWydERUxFVEUnLCAvY29va2llL10sXG4gIFsnR0VUJywgL2Nvb2tpZS9dLFxuICBbJ1BPU1QnLCAvY29va2llL10sXG5dO1xuY29uc3QgTk9fUFJPWFlfV0VCX0xJU1QgPSBbXG4gIFsnR0VUJywgL2F0dHJpYnV0ZS9dLFxuICBbJ0dFVCcsIC9lbGVtZW50L10sXG4gIFsnR0VUJywgL3RleHQvXSxcbiAgWydHRVQnLCAvdGl0bGUvXSxcbiAgWydQT1NUJywgL2NsZWFyL10sXG4gIFsnUE9TVCcsIC9jbGljay9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudC9dLFxuICBbJ1BPU1QnLCAvZm9yd2FyZC9dLFxuICBbJ1BPU1QnLCAvZnJhbWUvXSxcbiAgWydQT1NUJywgL2tleXMvXSxcbiAgWydQT1NUJywgL3JlZnJlc2gvXSxcbl0uY29uY2F0KE5PX1BST1hZX05BVElWRV9MSVNUKTtcbi8qIGVzbGludC1lbmFibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cblxuY29uc3QgTUVNT0laRURfRlVOQ1RJT05TID0gW1xuICAnZ2V0U3RhdHVzQmFySGVpZ2h0JyxcbiAgJ2dldERldmljZVBpeGVsUmF0aW8nLFxuICAnZ2V0U2NyZWVuSW5mbycsXG5dO1xuXG5cbmNsYXNzIFhDVUlUZXN0RHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG5cbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnbmFtZScsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJyxcbiAgICAgICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgIF07XG4gICAgdGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAndGFnIG5hbWUnLFxuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAncGFydGlhbCBsaW5rIHRleHQnLFxuICAgIF07XG4gICAgdGhpcy5yZXNldElvcygpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3MoREVGQVVMVF9TRVRUSU5HUywgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIHRoaXMubG9ncyA9IHt9O1xuXG4gICAgLy8gbWVtb2l6ZSBmdW5jdGlvbnMgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSBkb25lIG9uIGEgcGVyLWluc3RhbmNlIGJhc2lzXG4gICAgZm9yIChjb25zdCBmbiBvZiBNRU1PSVpFRF9GVU5DVElPTlMpIHtcbiAgICAgIHRoaXNbZm5dID0gXy5tZW1vaXplKHRoaXNbZm5dKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAhPT0gJ25hdGl2ZVdlYlRhcCcgJiYga2V5ICE9PSAnbmF0aXZlV2ViVGFwU3RyaWN0Jykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ1BPU1QnLCB7XG4gICAgICAgIHNldHRpbmdzOiB7W2tleV06IHZhbHVlfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMub3B0c1trZXldID0gISF2YWx1ZTtcbiAgfVxuXG4gIHJlc2V0SW9zICgpIHtcbiAgICB0aGlzLm9wdHMgPSB0aGlzLm9wdHMgfHwge307XG4gICAgdGhpcy53ZGEgPSBudWxsO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbXTtcbiAgICB0aGlzLnNhZmFyaSA9IGZhbHNlO1xuICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gbnVsbDtcblxuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gICAgdGhpcy5fY3VycmVudFVybCA9IG51bGw7XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHt9O1xuICAgIHRoaXMuY29udGV4dHMgPSBbXTtcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gMDtcbiAgICB0aGlzLmFzeW5jbGliV2FpdE1zID0gMDtcbiAgICB0aGlzLnBhZ2VMb2FkTXMgPSA2MDAwO1xuICAgIHRoaXMubGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnJlbW90ZSA9IG51bGw7XG5cbiAgICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUgPSBuZXcgTFJVKHtcbiAgICAgIG1heDogV0VCX0VMRU1FTlRTX0NBQ0hFX1NJWkUsXG4gICAgfSk7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kcml2ZXJJbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5kcml2ZXJJbmZvID0gYXdhaXQgZ2V0RHJpdmVySW5mbygpO1xuICAgIH1cbiAgICBsZXQgc3RhdHVzID0ge2J1aWxkOiB7dmVyc2lvbjogdGhpcy5kcml2ZXJJbmZvLnZlcnNpb259fTtcbiAgICBpZiAodGhpcy5jYWNoZWRXZGFTdGF0dXMpIHtcbiAgICAgIHN0YXR1cy53ZGEgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cztcbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfVxuXG4gIG1lcmdlQ2xpQXJnc1RvT3B0cyAoKSB7XG4gICAgbGV0IGRpZE1lcmdlID0gZmFsc2U7XG4gICAgLy8gdGhpcy5jbGlBcmdzIHNob3VsZCBuZXZlciBpbmNsdWRlIGFueXRoaW5nIHdlIGRvIG5vdCBleHBlY3QuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jbGlBcmdzID8/IHt9KSkge1xuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywga2V5KSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBDTEkgYXJnICcke2tleX0nIHdpdGggdmFsdWUgJyR7dmFsdWV9JyBvdmVyd3JpdGVzIHZhbHVlICcke3RoaXMub3B0c1trZXldfScgc2VudCBpbiB2aWEgY2FwcylgKTtcbiAgICAgICAgZGlkTWVyZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRpZE1lcmdlO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YSA9IHt9OyAvLyB0aGlzIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN0YXRlIHdlIHN0YXJ0IHNvIHdoZW4gd2UgZGVsZXRlIHRoZSBzZXNzaW9uIHdlIGNhbiBwdXQgdGhpbmdzIGJhY2tcbiAgICB0cnkge1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcbiAgICAgIHRoaXMub3B0cy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG5cbiAgICAgIC8vIG1lcmdlIGNsaSBhcmdzIHRvIG9wdHMsIGFuZCBpZiB3ZSBkaWQgbWVyZ2UgYW55LCByZXZhbGlkYXRlIG9wdHMgdG8gZW5zdXJlIHRoZSBmaW5hbCBzZXRcbiAgICAgIC8vIGlzIGFsc28gY29uc2lzdGVudFxuICAgICAgaWYgKHRoaXMubWVyZ2VDbGlBcmdzVG9PcHRzKCkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZURlc2lyZWRDYXBzKHsuLi5jYXBzLCAuLi50aGlzLmNsaUFyZ3N9KTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuXG4gICAgICAvLyBtZXJnZSBzZXJ2ZXIgY2FwYWJpbGl0aWVzICsgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNhcHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2VydmVyQ2FwcywgY2Fwcyk7XG4gICAgICAvLyB1cGRhdGUgdGhlIHVkaWQgd2l0aCB3aGF0IGlzIGFjdHVhbGx5IHVzZWRcbiAgICAgIGNhcHMudWRpZCA9IHRoaXMub3B0cy51ZGlkO1xuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIG5hdGl2ZVdlYlRhcCBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbmF0aXZlV2ViVGFwJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7bmF0aXZlV2ViVGFwOiB0aGlzLm9wdHMubmF0aXZlV2ViVGFwfSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwU3RyaWN0IGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXBTdHJpY3QnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXBTdHJpY3Q6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXBTdHJpY3R9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayB1c2VKU09OU291cmNlIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICd1c2VKU09OU291cmNlJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7dXNlSlNPTlNvdXJjZTogdGhpcy5vcHRzLnVzZUpTT05Tb3VyY2V9KTtcbiAgICAgIH1cblxuICAgICAgbGV0IHdkYVNldHRpbmdzID0ge1xuICAgICAgICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiBERUZBVUxUX1NFVFRJTkdTLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMsXG4gICAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IERFRkFVTFRfU0VUVElOR1Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIH07XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcycpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMgPSB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcztcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyA9IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ21qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHknKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5ID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJGcmFtZXJhdGUnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlckZyYW1lcmF0ZSA9IHRoaXMub3B0cy5tanBlZ1NlcnZlckZyYW1lcmF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgdGhlIHF1YWxpdHkgb2YgcGhvbmUgc2NyZWVuc2hvdDogJyR7dGhpcy5vcHRzLnNjcmVlbnNob3RRdWFsaXR5fSdgKTtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgV0RBIGdldHMgb3VyIGRlZmF1bHRzIGluc3RlYWQgb2Ygd2hhdGV2ZXIgaXRzIG93biBtaWdodCBiZVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh3ZGFTZXR0aW5ncyk7XG5cbiAgICAgIC8vIHR1cm4gb24gbWpwZWcgc3RyZWFtIHJlYWRpbmcgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IFVSTCBmb3IgU2FmYXJpIGJyb3dzZXJcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgVVJMXG4gICAqL1xuICBnZXREZWZhdWx0VXJsICgpIHtcbiAgICAvLyBTZXR0aW5nIHRoaXMgdG8gc29tZSBleHRlcm5hbCBVUkwgc2xvd3MgZG93biBBcHBpdW0gc3RhcnR1cFxuICAgIHJldHVybiB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICA/IGBodHRwOi8vMTI3LjAuMC4xOiR7dGhpcy5vcHRzLndkYUxvY2FsUG9ydCB8fCA4MTAwfS9oZWFsdGhgXG4gICAgICA6IGBodHRwOi8vJHtcbiAgICAgICAgdGhpcy5vcHRzLmFkZHJlc3MuaW5jbHVkZXMoJzonKSA/IGBbJHt0aGlzLm9wdHMuYWRkcmVzc31dYCA6IHRoaXMub3B0cy5hZGRyZXNzXG4gICAgICB9OiR7dGhpcy5vcHRzLnBvcnR9L3dlbGNvbWVgO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gISF0aGlzLm9wdHMubm9SZXNldDtcbiAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gISF0aGlzLm9wdHMuZnVsbFJlc2V0O1xuXG4gICAgYXdhaXQgcHJpbnRVc2VyKCk7XG5cbiAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IG51bGw7IC8vIEZvciBXREEgYW5kIHhjb2RlYnVpbGRcbiAgICBjb25zdCB7ZGV2aWNlLCB1ZGlkLCByZWFsRGV2aWNlfSA9IGF3YWl0IHRoaXMuZGV0ZXJtaW5lRGV2aWNlKCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgRGV0ZXJtaW5pbmcgZGV2aWNlIHRvIHJ1biB0ZXN0cyBvbjogdWRpZDogJyR7dWRpZH0nLCByZWFsIGRldmljZTogJHtyZWFsRGV2aWNlfWApO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5yZWFsRGV2aWNlID0gcmVhbERldmljZTtcblxuICAgIGlmICh0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgpIHtcbiAgICAgIGlmIChyZWFsRGV2aWNlKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFRoZSAnc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgnIGNhcGFiaWxpdHkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFNpbXVsYXRvciBkZXZpY2VzYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIHNpbXVsYXRvciBkZXZpY2VzIHNldCBwYXRoIHRvICcke3RoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aH0nYCk7XG4gICAgICAgIHRoaXMub3B0cy5kZXZpY2UuZGV2aWNlc1NldFBhdGggPSB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCBpZiB0aGVyZSBpcyBubyBwbGF0Zm9ybVZlcnNpb24sIGdldCBpdCBmcm9tIHRoZSBkZXZpY2VcbiAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyBkZXZpY2UgdmVyc2lvbjogJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFZlcnNpb24gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24odGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbik7XG4gICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IG5vcm1hbGl6ZWRWZXJzaW9uKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBOb3JtYWxpemVkIHBsYXRmb3JtVmVyc2lvbiBjYXBhYmlsaXR5IHZhbHVlICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259JyB0byAnJHtub3JtYWxpemVkVmVyc2lvbn0nYCk7XG4gICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gbm9ybWFsaXplZFZlcnNpb247XG4gICAgfVxuICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICc5LjMnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGF0Zm9ybSB2ZXJzaW9uIG11c3QgYmUgOS4zIG9yIGFib3ZlLiAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMueGNvZGVWZXJzaW9uKSAmJiAoIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCB8fCAhdGhpcy5vcHRzLnJlYWxEZXZpY2UpKSB7XG4gICAgICAvLyBubyBgd2ViRHJpdmVyQWdlbnRVcmxgLCBvciBvbiBhIHNpbXVsYXRvciwgc28gd2UgbmVlZCBhbiBYY29kZSB2ZXJzaW9uXG4gICAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrWGNvZGVWZXJzaW9uKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3hjb2RlRGV0YWlsc1JldHJpZXZlZCcpO1xuXG4gICAgaWYgKF8udG9Mb3dlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpID09PSAnc2FmYXJpJykge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2FmYXJpIHRlc3QgcmVxdWVzdGVkJyk7XG4gICAgICB0aGlzLnNhZmFyaSA9IHRydWU7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMgPSB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyB8fCB7fTtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IFNBRkFSSV9CVU5ETEVfSUQ7XG4gICAgICB0aGlzLl9jdXJyZW50VXJsID0gdGhpcy5vcHRzLnNhZmFyaUluaXRpYWxVcmwgfHwgdGhpcy5nZXREZWZhdWx0VXJsKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXBwIHx8IHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVBcHAoKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwQ29uZmlndXJlZCcpO1xuXG4gICAgLy8gZmFpbCB2ZXJ5IGVhcmx5IGlmIHRoZSBhcHAgZG9lc24ndCBhY3R1YWxseSBleGlzdFxuICAgIC8vIG9yIGlmIGJ1bmRsZSBpZCBkb2Vzbid0IHBvaW50IHRvIGFuIGluc3RhbGxlZCBhcHBcbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgY2hlY2tBcHBQcmVzZW50KHRoaXMub3B0cy5hcHApO1xuXG4gICAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSBhd2FpdCBleHRyYWN0QnVuZGxlSWQodGhpcy5vcHRzLmFwcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5ydW5SZXNldCgpO1xuXG4gICAgdGhpcy53ZGEgPSBuZXcgV2ViRHJpdmVyQWdlbnQodGhpcy54Y29kZVZlcnNpb24sIHRoaXMub3B0cywgdGhpcy5sb2cpO1xuICAgIC8vIERlcml2ZWQgZGF0YSBwYXRoIHJldHJpZXZhbCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uXG4gICAgLy8gV2UgY291bGQgc3RhcnQgdGhhdCBub3cgaW4gYmFja2dyb3VuZCBhbmQgZ2V0IHRoZSBjYWNoZWQgcmVzdWx0XG4gICAgLy8gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW5cbiAgICB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpLmNhdGNoKChlKSA9PiB0aGlzLmxvZy5kZWJ1ZyhlKSk7XG5cbiAgICBjb25zdCBtZW1vaXplZExvZ0luZm8gPSBfLm1lbW9pemUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2cuaW5mbyhcIidza2lwTG9nQ2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2dzIHN1Y2ggYXMgY3Jhc2gsIHN5c3RlbSwgc2FmYXJpIGNvbnNvbGUgYW5kIHNhZmFyaSBuZXR3b3JrLlwiKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydExvZ0NhcHR1cmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNraXBMb2dDYXB0dXJlKSB7XG4gICAgICAgIG1lbW9pemVkTG9nSW5mbygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2xvZ0NhcHR1cmVTdGFydGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgaXNMb2dDYXB0dXJlU3RhcnRlZCA9IGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuXG4gICAgdGhpcy5sb2cuaW5mbyhgU2V0dGluZyB1cCAke3RoaXMuaXNSZWFsRGV2aWNlKCkgPyAncmVhbCBkZXZpY2UnIDogJ3NpbXVsYXRvcid9YCk7XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNodXRkb3duT3RoZXJTaW11bGF0b3JzKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25PdGhlclNpbXVsYXRvcnModGhpcy5vcHRzLmRldmljZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHRoZSBzaW11bGF0b3IgaXMgc3RhcnRlZFxuICAgICAgLy8gaWYgaXQgaXMgYWxyZWFkeSBydW5uaW5nLCB0aGlzIGNhcCB3b24ndCB3b3JrLCB3aGljaCBpcyBkb2N1bWVudGVkXG4gICAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMub3B0cy5zYWZhcmlHbG9iYWxQcmVmZXJlbmNlcykge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5vcHRzLmRldmljZS51cGRhdGVTYWZhcmlHbG9iYWxTZXR0aW5ncyh0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFNhZmFyaSBnbG9iYWwgcHJlZmVyZW5jZXMgdXBkYXRlZGApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9jYWxDb25maWcgPSBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMsIHRoaXMuaXNTYWZhcmkoKSwgYXN5bmMgKHNpbSkgPT4ge1xuICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcihzaW0pO1xuXG4gICAgICAgIC8vIHdlIGRvbid0IGtub3cgaWYgdGhlcmUgbmVlZHMgdG8gYmUgY2hhbmdlcyBhIHByaW9yaSwgc28gY2hhbmdlIGZpcnN0LlxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIHNodXRkb3duIHByb2Nlc3MgY2hhbmdlcyB0aGUgc2V0dGluZ3MsIHNvIHJlc2V0IHRoZW0sXG4gICAgICAgIC8vIGtub3dpbmcgdGhhdCB0aGUgc2ltIGlzIGFscmVhZHkgc2h1dFxuICAgICAgICBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyhzaW0sIHRoaXMub3B0cywgdGhpcy5pc1NhZmFyaSgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQgJiYgIShhd2FpdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpKHRoaXMub3B0cy5kZXZpY2UpKSkge1xuICAgICAgICBjb25zdCBjZXJ0SGVhZCA9IF8udHJ1bmNhdGUodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQsIHtsZW5ndGg6IDIwfSk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYEluc3RhbGxpbmcgdGhlIGN1c3RvbSBTU0wgY2VydGlmaWNhdGUgJyR7Y2VydEhlYWR9J2ApO1xuICAgICAgICBpZiAoYXdhaXQgaGFzQ2VydGlmaWNhdGVMZWdhY3kodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgU1NMIGNlcnRpZmljYXRlICcke2NlcnRIZWFkfScgYWxyZWFkeSBpbnN0YWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBNYWtpbmcgc3VyZSBTaW11bGF0b3IgaXMgc2h1dCBkb3duLCAnICtcbiAgICAgICAgICAgICdzbyB0aGF0IFNTTCBjZXJ0aWZpY2F0ZSBpbnN0YWxsYXRpb24gdGFrZXMgZWZmZWN0YCk7XG4gICAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSk7XG4gICAgICAgICAgYXdhaXQgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5KHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdjdXN0b21DZXJ0SW5zdGFsbGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRTaW0oKTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0ICYmIGF3YWl0IGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkodGhpcy5vcHRzLmRldmljZSkpIHtcbiAgICAgICAgLy8gU2ltdWxhdG9yIG11c3QgYmUgYm9vdGVkIGluIG9yZGVyIHRvIGNhbGwgdGhpcyBoZWxwZXJcbiAgICAgICAgYXdhaXQgaW5zdGFsbENlcnRpZmljYXRlKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnY3VzdG9tQ2VydEluc3RhbGxlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmxhdW5jaFdpdGhJREIgJiYgdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaWRiID0gbmV3IElEQih7dWRpZH0pO1xuICAgICAgICAgIGF3YWl0IGlkYi5jb25uZWN0KCk7XG4gICAgICAgICAgdGhpcy5vcHRzLmRldmljZS5pZGIgPSBpZGI7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBpZGIgd2lsbCBub3QgYmUgdXNlZCBmb3IgU2ltdWxhdG9yIGludGVyYWN0aW9uLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dFdmVudCgnc2ltU3RhcnRlZCcpO1xuICAgICAgaWYgKCFpc0xvZ0NhcHR1cmVTdGFydGVkKSB7XG4gICAgICAgIC8vIFJldHJ5IGxvZyBjYXB0dXJlIGlmIFNpbXVsYXRvciB3YXMgbm90IHJ1bm5pbmcgYmVmb3JlXG4gICAgICAgIGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpIHtcbiAgICAgIGF3YWl0IG5ldyBQeWlkZXZpY2UodWRpZCkuaW5zdGFsbFByb2ZpbGUoe3BheWxvYWQ6IHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0fSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbEFVVCgpO1xuICAgICAgdGhpcy5sb2dFdmVudCgnYXBwSW5zdGFsbGVkJyk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugb25seSBoYXZlIGJ1bmRsZSBpZGVudGlmaWVyIGFuZCBubyBhcHAsIGZhaWwgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkXG4gICAgaWYgKCF0aGlzLm9wdHMuYXBwICYmIHRoaXMub3B0cy5idW5kbGVJZCAmJiAhdGhpcy5pc1NhZmFyaSgpKSB7XG4gICAgICBpZiAoIWF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQodGhpcy5vcHRzLmJ1bmRsZUlkKSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBBcHAgd2l0aCBidW5kbGUgaWRlbnRpZmllciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB1bmtub3duYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5wZXJtaXNzaW9ucykge1xuICAgICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnU2V0dGluZyB0aGUgcmVxdWVzdGVkIHBlcm1pc3Npb25zIGJlZm9yZSBXREEgaXMgc3RhcnRlZCcpO1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZSh0aGlzLm9wdHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0UGVybWlzc2lvbnMoYnVuZGxlSWQsIHBlcm1pc3Npb25zTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oJ1NldHRpbmcgcGVybWlzc2lvbnMgaXMgb25seSBzdXBwb3J0ZWQgb24gU2ltdWxhdG9yLiAnICtcbiAgICAgICAgICAnVGhlIFwicGVybWlzc2lvbnNcIiBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmVuYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGlzYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdGFydFdkYSh0aGlzLm9wdHMuc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0UmVkdWNlTW90aW9uKHRoaXMub3B0cy5yZWR1Y2VNb3Rpb24pO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRJbml0aWFsT3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdvcmllbnRhdGlvblNldCcpO1xuXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aXZhdGVSZWNlbnRXZWJ2aWV3KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkpIHtcbiAgICAgIGlmICghKHRoaXMub3B0cy5zYWZhcmlJbml0aWFsVXJsID09PSAnJ1xuICAgICAgICAgIHx8ICh0aGlzLm9wdHMubm9SZXNldCAmJiBfLmlzTmlsKHRoaXMub3B0cy5zYWZhcmlJbml0aWFsVXJsKSkpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYEFib3V0IHRvIHNldCB0aGUgaW5pdGlhbCBTYWZhcmkgVVJMIHRvICcke3RoaXMuZ2V0Q3VycmVudFVybCgpfScuYCArXG4gICAgICAgICAgYFVzZSAnc2FmYXJpSW5pdGlhbFVybCcgY2FwYWJpbGl0eSBpbiBvcmRlciB0byBjdXN0b21pemUgaXRgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRVcmwodGhpcy5nZXRDdXJyZW50VXJsKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50VXJsKGF3YWl0IHRoaXMuZ2V0VXJsKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBXZWJEcml2ZXJBZ2VudFJ1bm5lclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIC0gVGhlIGlkIG9mIHRoZSB0YXJnZXQgc2Vzc2lvbiB0byBsYXVuY2ggV0RBIHdpdGguXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhbERldmljZSAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSB0ZXN0IHRhcmdldCBkZXZpY2UgaXMgYSByZWFsIGRldmljZS5cbiAgICovXG4gIGFzeW5jIHN0YXJ0V2RhIChzZXNzaW9uSWQsIHJlYWxEZXZpY2UpIHtcbiAgICAvLyBEb24ndCBjbGVhbnVwIHRoZSBwcm9jZXNzZXMgaWYgd2ViRHJpdmVyQWdlbnRVcmwgaXMgc2V0XG4gICAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgYXdhaXQgdGhpcy53ZGEuY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlUG9ydEZvcndhcmRpbmcgPSB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAmJiAhdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmxcbiAgICAgICYmIGlzTG9jYWxIb3N0KHRoaXMud2RhLndkYUJhc2VVcmwpO1xuICAgIGF3YWl0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlcXVlc3RDb25uZWN0aW9uKHRoaXMub3B0cy51ZGlkLCB0aGlzLndkYS51cmwucG9ydCwge1xuICAgICAgZGV2aWNlUG9ydDogdXNlUG9ydEZvcndhcmRpbmcgPyB0aGlzLndkYS53ZGFSZW1vdGVQb3J0IDogbnVsbCxcbiAgICAgIHVzZVBvcnRGb3J3YXJkaW5nLFxuICAgIH0pO1xuXG4gICAgLy8gTGV0IG11bHRpcGxlIFdEQSBiaW5hcmllcyB3aXRoIGRpZmZlcmVudCBkZXJpdmVkIGRhdGEgZm9sZGVycyBiZSBidWlsdCBpbiBwYXJhbGxlbFxuICAgIC8vIENvbmN1cnJlbnQgV0RBIGJ1aWxkcyBmcm9tIHRoZSBzYW1lIHNvdXJjZSB3aWxsIGNhdXNlIHhjb2RlYnVpbGQgc3luY2hyb25pemF0aW9uIGVycm9yc1xuICAgIGxldCBzeW5jaHJvbml6YXRpb25LZXkgPSBYQ1VJVGVzdERyaXZlci5uYW1lO1xuICAgIGlmICh0aGlzLm9wdHMudXNlWGN0ZXN0cnVuRmlsZSB8fCAhKGF3YWl0IHRoaXMud2RhLmlzU291cmNlRnJlc2goKSkpIHtcbiAgICAgIC8vIEZpcnN0LXRpbWUgY29tcGlsYXRpb24gaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiwgd2hpY2ggaXMgZG9uZSBmYXN0ZXIgaWYgZXhlY3V0ZWRcbiAgICAgIC8vIHNlcXVlbnRpYWxseS4gWGNvZGVidWlsZCBzcHJlYWRzIHRoZSBsb2FkIGNhdXNlZCBieSB0aGUgY2xhbmcgY29tcGlsZXIgdG8gYWxsIGF2YWlsYWJsZSBDUFUgY29yZXNcbiAgICAgIGNvbnN0IGRlcml2ZWREYXRhUGF0aCA9IGF3YWl0IHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gICAgICBpZiAoZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICAgIHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKGRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBTdGFydGluZyBXZWJEcml2ZXJBZ2VudCBpbml0aWFsaXphdGlvbiB3aXRoIHRoZSBzeW5jaHJvbml6YXRpb24ga2V5ICcke3N5bmNocm9uaXphdGlvbktleX0nYCk7XG4gICAgaWYgKFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuaXNCdXN5KCkgJiYgIXRoaXMub3B0cy5kZXJpdmVkRGF0YVBhdGggJiYgIXRoaXMub3B0cy5ib290c3RyYXBQYXRoKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29uc2lkZXIgc2V0dGluZyBhIHVuaXF1ZSAnZGVyaXZlZERhdGFQYXRoJyBjYXBhYmlsaXR5IHZhbHVlIGZvciBlYWNoIHBhcmFsbGVsIGRyaXZlciBpbnN0YW5jZSBgICtcbiAgICAgICAgYHRvIGF2b2lkIGNvbmZsaWN0cyBhbmQgc3BlZWQgdXAgdGhlIGJ1aWxkaW5nIHByb2Nlc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDYXBhYmlsaXR5ICd1c2VOZXdXREEnIHNldCB0byB0cnVlLCBzbyB1bmluc3RhbGxpbmcgV0RBIGJlZm9yZSBwcm9jZWVkaW5nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXRBbmRVbmluc3RhbGwoKTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhVW5pbnN0YWxsZWQnKTtcbiAgICAgIH0gZWxzZSBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnNldHVwQ2FjaGluZygpO1xuICAgICAgfVxuXG4gICAgICAvLyBsb2NhbCBoZWxwZXIgZm9yIHRoZSB0d28gcGxhY2VzIHdlIG5lZWQgdG8gdW5pbnN0YWxsIHdkYSBhbmQgcmUtc3RhcnQgaXRcbiAgICAgIGNvbnN0IHF1aXRBbmRVbmluc3RhbGwgPSBhc3luYyAobXNnKSA9PiB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKG1zZyk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnTm90IHF1aXR0aW5nL3VuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCBzaW5jZSB3ZWJEcml2ZXJBZ2VudFVybCBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2cud2FybignUXVpdHRpbmcgYW5kIHVuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCcpO1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0QW5kVW5pbnN0YWxsKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9O1xuXG4gICAgICAvLyBVc2VkIGluIHRoZSBmb2xsb3dpbmcgV0RBIGJ1aWxkXG4gICAgICBpZiAodGhpcy5vcHRzLnJlc3VsdEJ1bmRsZVBhdGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVGZWF0dXJlRW5hYmxlZChDVVNUT01JWkVfUkVTVUxUX0JVTkRQRV9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnR1cFJldHJpZXMgPSB0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJpZXMgfHwgKHRoaXMuaXNSZWFsRGV2aWNlKCkgPyBXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTIDogV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMpO1xuICAgICAgY29uc3Qgc3RhcnR1cFJldHJ5SW50ZXJ2YWwgPSB0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwgfHwgV0RBX1NUQVJUVVBfUkVUUllfSU5URVJWQUw7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVHJ5aW5nIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50ICR7c3RhcnR1cFJldHJpZXN9IHRpbWVzIHdpdGggJHtzdGFydHVwUmV0cnlJbnRlcnZhbH1tcyBpbnRlcnZhbGApO1xuICAgICAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cmllcykgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsKSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlc2UgdmFsdWVzIGNhbiBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHdkYVN0YXJ0dXBSZXRyaWVzL3dkYVN0YXJ0dXBSZXRyeUludGVydmFsIGNhcGFiaWxpdGllc2ApO1xuICAgICAgfVxuICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbChzdGFydHVwUmV0cmllcywgc3RhcnR1cFJldHJ5SW50ZXJ2YWwsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRBdHRlbXB0ZWQnKTtcbiAgICAgICAgaWYgKHJldHJ5Q291bnQgPiAwKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgUmV0cnlpbmcgV0RBIHN0YXJ0dXAgKCR7cmV0cnlDb3VudCArIDF9IG9mICR7c3RhcnR1cFJldHJpZXN9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gb24geGNvZGUgMTAgaW5zdGFsbGQgd2lsbCBvZnRlbiB0cnkgdG8gYWNjZXNzIHRoZSBhcHAgZnJvbSBpdHMgc3RhZ2luZ1xuICAgICAgICAgIC8vIGRpcmVjdG9yeSBiZWZvcmUgZnVsbHkgbW92aW5nIGl0IHRoZXJlLCBhbmQgZmFpbC4gUmV0cnlpbmcgb25jZVxuICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGhlbHBzXG4gICAgICAgICAgY29uc3QgcmV0cmllcyA9IHRoaXMueGNvZGVWZXJzaW9uLm1ham9yID49IDEwID8gMiA6IDE7XG4gICAgICAgICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBhd2FpdCByZXRyeShyZXRyaWVzLCB0aGlzLndkYS5sYXVuY2guYmluZCh0aGlzLndkYSksIHNlc3Npb25JZCwgcmVhbERldmljZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0RmFpbGVkJyk7XG4gICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICAgIGxldCBlcnJvck1zZyA9IGBVbmFibGUgdG8gbGF1bmNoIFdlYkRyaXZlckFnZW50IGJlY2F1c2Ugb2YgeGNvZGVidWlsZCBmYWlsdXJlOiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIGVycm9yTXNnICs9IGAuIE1ha2Ugc3VyZSB5b3UgZm9sbG93IHRoZSB0dXRvcmlhbCBhdCAke1dEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkx9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUcnkgdG8gcmVtb3ZlIHRoZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCByZWJvb3QgdGhlIGRldmljZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBxdWl0QW5kVW5pbnN0YWxsKGVycm9yTXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLndkYS5wcm94eVJlcVJlcy5iaW5kKHRoaXMud2RhKTtcbiAgICAgICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgbGV0IG9yaWdpbmFsU3RhY2t0cmFjZSA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgxNSwgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvbkF0dGVtcHRlZCcpO1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoJ1NlbmRpbmcgY3JlYXRlU2Vzc2lvbiBjb21tYW5kIHRvIFdEQScpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cyB8fCBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFdkYVNlc3Npb24odGhpcy5vcHRzLmJ1bmRsZUlkLCB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxTdGFja3RyYWNlID0gZXJyLnN0YWNrO1xuICAgICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgRmFpbGVkIHRvIGNyZWF0ZSBXREEgc2Vzc2lvbiAoJHtlcnIubWVzc2FnZX0pLiBSZXRyeWluZy4uLmApO1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvblN0YXJ0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKG9yaWdpbmFsU3RhY2t0cmFjZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcob3JpZ2luYWxTdGFja3RyYWNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGVycm9yTXNnID0gYFVuYWJsZSB0byBzdGFydCBXZWJEcml2ZXJBZ2VudCBzZXNzaW9uIGJlY2F1c2Ugb2YgeGNvZGVidWlsZCBmYWlsdXJlOiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIGVycm9yTXNnICs9IGAgTWFrZSBzdXJlIHlvdSBmb2xsb3cgdGhlIHR1dG9yaWFsIGF0ICR7V0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTH0uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFRyeSB0byByZW1vdmUgdGhlIFdlYkRyaXZlckFnZW50UnVubmVyIGFwcGxpY2F0aW9uIGZyb20gdGhlIGRldmljZSBpZiBpdCBpcyBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgYW5kIHJlYm9vdCB0aGUgZGV2aWNlLmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHF1aXRBbmRVbmluc3RhbGwoZXJyb3JNc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5jbGVhclN5c3RlbUZpbGVzICYmICF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgICBhd2FpdCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwKHRoaXMud2RhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIGV4cGVjdCBjZXJ0YWluIHNvY2tldCBlcnJvcnMgdW50aWwgdGhpcyBwb2ludCwgYnV0IG5vd1xuICAgICAgICAvLyBtYXJrIHRoaW5ncyBhcyBmdWxseSB3b3JraW5nXG4gICAgICAgIHRoaXMud2RhLmZ1bGx5U3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0ZWQnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcnVuUmVzZXQgKG9wdHMgPSBudWxsKSB7XG4gICAgdGhpcy5sb2dFdmVudCgncmVzZXRTdGFydGVkJyk7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGF3YWl0IHJ1blJlYWxEZXZpY2VSZXNldCh0aGlzLm9wdHMuZGV2aWNlLCBvcHRzIHx8IHRoaXMub3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHJ1blNpbXVsYXRvclJlc2V0KHRoaXMub3B0cy5kZXZpY2UsIG9wdHMgfHwgdGhpcy5vcHRzKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgncmVzZXRDb21wbGV0ZScpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgYXdhaXQgcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlY29yZGVyIG9mIF8uY29tcGFjdChbXG4gICAgICB0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlciwgdGhpcy5fYXVkaW9SZWNvcmRlciwgdGhpcy5fdHJhZmZpY0NhcHR1cmVcbiAgICBdKSkge1xuICAgICAgYXdhaXQgcmVjb3JkZXIuaW50ZXJydXB0KHRydWUpO1xuICAgICAgYXdhaXQgcmVjb3JkZXIuY2xlYW51cCgpO1xuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3BlcmZSZWNvcmRlcnMpKSB7XG4gICAgICBhd2FpdCBCLmFsbCh0aGlzLl9wZXJmUmVjb3JkZXJzLm1hcCgoeCkgPT4geC5zdG9wKHRydWUpKSk7XG4gICAgICB0aGlzLl9wZXJmUmVjb3JkZXJzID0gW107XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdG9wKCk7XG5cbiAgICBpZiAodGhpcy53ZGEgJiYgIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5jbGVhclN5c3RlbUZpbGVzKSB7XG4gICAgICAgIGxldCBzeW5jaHJvbml6YXRpb25LZXkgPSBYQ1VJVGVzdERyaXZlci5uYW1lO1xuICAgICAgICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICAgICAgICBpZiAoZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICAgICAgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUoZGVyaXZlZERhdGFQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgY2xlYXJTeXN0ZW1GaWxlcyh0aGlzLndkYSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ05vdCBjbGVhcmluZyBsb2cgZmlsZXMuIFVzZSBgY2xlYXJTeXN0ZW1GaWxlc2AgY2FwYWJpbGl0eSB0byB0dXJuIG9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbW90ZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0ZvdW5kIGEgcmVtb3RlIGRlYnVnZ2VyIHNlc3Npb24uIFJlbW92aW5nLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3BSZW1vdGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5ID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtcbiAgICAgICAgZW5mb3JjZVNpbXVsYXRvclNodXRkb3duOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkgJiYgIXRoaXMub3B0cy5ub1Jlc2V0ICYmICEhdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgaWYgKHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0pIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYERlbGV0aW5nIHNpbXVsYXRvciBjcmVhdGVkIGZvciB0aGlzIHJ1biAodWRpZDogJyR7dGhpcy5vcHRzLnVkaWR9JylgKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSk7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGVsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlID0gdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiAhIXRoaXMub3B0cy5yZXNldExvY2F0aW9uU2VydmljZTtcbiAgICBpZiAoc2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLm1vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlKCk7XG4gICAgICB9IGNhdGNoIChpZ25vcmUpIHsgLyogSWdub3JlIHRoaXMgZXJyb3Igc2luY2UgbW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UgYWxyZWFkeSBsb2dnZWQgdGhlIGVycm9yICovIH1cbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmxvZ3MpKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvZ3Muc3lzbG9nLnN0b3BDYXB0dXJlKCk7XG4gICAgICB0aGlzLmxvZ3MgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tanBlZ1N0cmVhbSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnQ2xvc2luZyBNSlBFRyBzdHJlYW0nKTtcbiAgICAgIHRoaXMubWpwZWdTdHJlYW0uc3RvcCgpO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRJb3MoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcblxuXG4gICAgaWYgKHRoaXMud2RhICYmIHRoaXMud2RhLmZ1bGx5U3RhcnRlZCkge1xuICAgICAgaWYgKHRoaXMud2RhLmp3cHJveHkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3Nlc3Npb24vJHt0aGlzLnNlc3Npb25JZH1gLCAnREVMRVRFJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIGFuIGVycm9yIGhlcmUgc2hvdWxkIG5vdCBzaG9ydC1jaXJjdWl0IHRoZSByZXN0IG9mIGNsZWFuIHVwXG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFVuYWJsZSB0byBERUxFVEUgc2Vzc2lvbiBvbiBXREE6ICcke2Vyci5tZXNzYWdlfScuIENvbnRpbnVpbmcgc2h1dGRvd24uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwgJiYgdGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVsZWFzZUNvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIHRoaXMubG9nLmRlYnVnKGBFeGVjdXRpbmcgY29tbWFuZCAnJHtjbWR9J2ApO1xuXG4gICAgaWYgKGNtZCA9PT0gJ3JlY2VpdmVBc3luY1Jlc3BvbnNlJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVjZWl2ZUFzeW5jUmVzcG9uc2UoLi4uYXJncyk7XG4gICAgfVxuICAgIC8vIFRPRE86IG9uY2UgdGhpcyBmaXggZ2V0cyBpbnRvIGJhc2UgZHJpdmVyIHJlbW92ZSBmcm9tIGhlcmVcbiAgICBpZiAoY21kID09PSAnZ2V0U3RhdHVzJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5leGVjdXRlQ29tbWFuZChjbWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgY29uZmlndXJlQXBwICgpIHtcbiAgICBmdW5jdGlvbiBhcHBJc1BhY2thZ2VPckJ1bmRsZSAoYXBwKSB7XG4gICAgICByZXR1cm4gKC9eKFthLXpBLVowLTlcXC1fXStcXC5bYS16QS1aMC05XFwtX10rKSskLykudGVzdChhcHApO1xuICAgIH1cblxuICAgIC8vIHRoZSBhcHAgbmFtZSBpcyBhIGJ1bmRsZUlkIGFzc2lnbiBpdCB0byB0aGUgYnVuZGxlSWQgcHJvcGVydHlcbiAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gdGhpcy5vcHRzLmFwcDtcbiAgICAgIHRoaXMub3B0cy5hcHAgPSAnJztcbiAgICB9XG4gICAgLy8gd2UgaGF2ZSBhIGJ1bmRsZSBJRCwgYnV0IG5vIGFwcCwgb3IgYXBwIGlzIGFsc28gYSBidW5kbGVcbiAgICBpZiAoKHRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYnVuZGxlSWQpKSAmJlxuICAgICAgICAodGhpcy5vcHRzLmFwcCA9PT0gJycgfHwgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnQXBwIGlzIGFuIGlPUyBidW5kbGUsIHdpbGwgYXR0ZW1wdCB0byBydW4gYXMgcHJlLWV4aXN0aW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHN1cHBvcnRlZCBidWlsZC1pbiBhcHBzXG4gICAgc3dpdGNoIChfLnRvTG93ZXIodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gJ2NvbS5hcHBsZS5QcmVmZXJlbmNlcyc7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdjYWxlbmRhcic6XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9ICdjb20uYXBwbGUubW9iaWxlY2FsJztcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCB7XG4gICAgICBvblBvc3RQcm9jZXNzOiB0aGlzLm9uUG9zdENvbmZpZ3VyZUFwcC5iaW5kKHRoaXMpLFxuICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogU1VQUE9SVEVEX0VYVEVOU0lPTlNcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnppcCB0aGUgZ2l2ZW4gYXJjaGl2ZSBhbmQgZmluZCBhIG1hdGNoaW5nIC5hcHAgYnVuZGxlIGluIGl0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIFRoZSBwYXRoIHRvIHRoZSBhcmNoaXZlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVwdGggWzBdIHRoZSBjdXJyZW50IG5lc3RpbmcgZGVwdGguIEFwcCBidW5kbGVzIHdob3NlIG5lc3RpbmcgbGV2ZWxcbiAgICogaXMgZ3JlYXRlciB0aGFuIDEgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEZ1bGwgcGF0aCB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgLmFwcCBidW5kbGUuLlxuICAgKiBAdGhyb3dzIElmIG5vIG1hdGNoaW5nIC5hcHAgYnVuZGxlcyB3ZXJlIGZvdW5kIGluIHRoZSBwcm92aWRlZCBhcmNoaXZlLlxuICAgKi9cbiAgYXN5bmMgdW56aXBBcHAgKGFwcFBhdGgsIGRlcHRoID0gMCkge1xuICAgIGlmIChkZXB0aCA+IE1BWF9BUkNISVZFX1NDQU5fREVQVEgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmVzdGluZyBvZiBwYWNrYWdlIGJ1bmRsZXMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgICBjb25zdCBbcm9vdERpciwgbWF0Y2hlZFBhdGhzXSA9IGF3YWl0IGZpbmRBcHBzKGFwcFBhdGgsIFNVUFBPUlRFRF9FWFRFTlNJT05TKTtcbiAgICBpZiAoXy5pc0VtcHR5KG1hdGNoZWRQYXRocykpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGAnJHtwYXRoLmJhc2VuYW1lKGFwcFBhdGgpfScgaGFzIG5vIGJ1bmRsZXNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICAgIGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdidW5kbGUnLCBtYXRjaGVkUGF0aHMubGVuZ3RoLCB0cnVlKX0gaW4gYCArXG4gICAgICAgIGAnJHtwYXRoLmJhc2VuYW1lKGFwcFBhdGgpfSc6ICR7bWF0Y2hlZFBhdGhzfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IG1hdGNoZWRQYXRoIG9mIG1hdGNoZWRQYXRocykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihyb290RGlyLCBtYXRjaGVkUGF0aCk7XG4gICAgICAgIGlmIChhd2FpdCBpc0FwcEJ1bmRsZShmdWxsUGF0aCkpIHtcbiAgICAgICAgICBjb25zdCBzdXBwb3J0ZWRQbGF0Zm9ybXMgPSBhd2FpdCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyhmdWxsUGF0aCk7XG4gICAgICAgICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSAmJiAhc3VwcG9ydGVkUGxhdGZvcm1zLnNvbWUoKHApID0+IF8uaW5jbHVkZXMocCwgJ1NpbXVsYXRvcicpKSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuaW5mbyhgJyR7bWF0Y2hlZFBhdGh9JyBkb2VzIG5vdCBoYXZlIFNpbXVsYXRvciBkZXZpY2VzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBwbGF0Zm9ybXMgYCArXG4gICAgICAgICAgICAgIGAoJHtzdXBwb3J0ZWRQbGF0Zm9ybXMuam9pbignLCcpfSkuIFNraXBwaW5nIGl0YCk7O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpICYmICFzdXBwb3J0ZWRQbGF0Zm9ybXMuc29tZSgocCkgPT4gXy5pbmNsdWRlcyhwLCAnT1MnKSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLmluZm8oYCcke21hdGNoZWRQYXRofScgZG9lcyBub3QgaGF2ZSByZWFsIGRldmljZXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHBsYXRmb3JtcyBgICtcbiAgICAgICAgICAgICAgYCgke3N1cHBvcnRlZFBsYXRmb3Jtcy5qb2luKCcsJyl9KS4gU2tpcHBpbmcgaXRgKTs7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgJyR7bWF0Y2hlZFBhdGh9JyBpcyB0aGUgcmVzdWx0aW5nIGFwcGxpY2F0aW9uIGJ1bmRsZSBzZWxlY3RlZCBmcm9tICcke2FwcFBhdGh9J2ApO1xuICAgICAgICAgIHJldHVybiBhd2FpdCBpc29sYXRlQXBwQnVuZGxlKGZ1bGxQYXRoKTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmVuZHNXaXRoKF8udG9Mb3dlcihmdWxsUGF0aCksIElQQV9FWFQpICYmIChhd2FpdCBmcy5zdGF0KGZ1bGxQYXRoKSkuaXNGaWxlKCkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW56aXBBcHAoZnVsbFBhdGgsIGRlcHRoICsgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cud2FybihgU2tpcHBpbmcgcHJvY2Vzc2luZyBvZiAnJHttYXRjaGVkUGF0aH0nOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHJvb3REaXIpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5vcHRzLmFwcH0gZGlkIG5vdCBoYXZlIGFueSBtYXRjaGluZyAke0FQUF9FWFR9IG9yICR7SVBBX0VYVH0gYCArXG4gICAgICBgYnVuZGxlcy4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgcGFja2FnZSBpcyB2YWxpZCBhbmQgY29udGFpbnMgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGAgK1xuICAgICAgYGFwcGxpY2F0aW9uIGJ1bmRsZSB3aGljaCBpcyBub3QgbmVzdGVkLmBcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgb25Qb3N0Q29uZmlndXJlQXBwICh7Y2FjaGVkQXBwSW5mbywgaXNVcmwsIGFwcFBhdGh9KSB7XG4gICAgLy8gUGljayB0aGUgcHJldmlvdXNseSBjYWNoZWQgZW50cnkgaWYgaXRzIGludGVncml0eSBoYXMgYmVlbiBwcmVzZXJ2ZWRcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGNhY2hlZEFwcEluZm8pXG4gICAgICAgICYmIChhd2FpdCBmcy5zdGF0KGFwcFBhdGgpKS5pc0ZpbGUoKVxuICAgICAgICAmJiBhd2FpdCBmcy5oYXNoKGFwcFBhdGgpID09PSBjYWNoZWRBcHBJbmZvLnBhY2thZ2VIYXNoXG4gICAgICAgICYmIGF3YWl0IGZzLmV4aXN0cyhjYWNoZWRBcHBJbmZvLmZ1bGxQYXRoKVxuICAgICAgICAmJiAoYXdhaXQgZnMuZ2xvYignKiovKicsIHtcbiAgICAgICAgICBjd2Q6IGNhY2hlZEFwcEluZm8uZnVsbFBhdGgsIHN0cmljdDogZmFsc2UsIG5vc29ydDogdHJ1ZVxuICAgICAgICB9KSkubGVuZ3RoID09PSBjYWNoZWRBcHBJbmZvLmludGVncml0eS5mb2xkZXIpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFVzaW5nICcke2NhY2hlZEFwcEluZm8uZnVsbFBhdGh9JyB3aGljaCB3YXMgY2FjaGVkIGZyb20gJyR7YXBwUGF0aH0nYCk7XG4gICAgICByZXR1cm4ge2FwcFBhdGg6IGNhY2hlZEFwcEluZm8uZnVsbFBhdGh9O1xuICAgIH1cblxuICAgIC8vIE9ubHkgbG9jYWwgLmFwcCBidW5kbGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbi1wbGFjZSBzaG91bGQgbm90IGJlIGNhY2hlZFxuICAgIGlmIChhd2FpdCBpc0FwcEJ1bmRsZShhcHBQYXRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgdGhlIGFwcCBidW5kbGUgYW5kIGNhY2hlIGl0XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7YXBwUGF0aDogYXdhaXQgdGhpcy51bnppcEFwcChhcHBQYXRoKX07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENsZWFudXAgcHJldmlvdXNseSBkb3dubG9hZGVkIGFyY2hpdmVcbiAgICAgIGlmIChpc1VybCkge1xuICAgICAgICBhd2FpdCBmcy5yaW1yYWYoYXBwUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGV2aWNlICgpIHtcbiAgICAvLyBpbiB0aGUgb25lIGNhc2Ugd2hlcmUgd2UgY3JlYXRlIGEgc2ltLCB3ZSB3aWxsIHNldCB0aGlzIHN0YXRlXG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IGZhbHNlO1xuXG4gICAgLy8gaWYgd2UgZ2V0IGdlbmVyaWMgbmFtZXMsIHRyYW5zbGF0ZSB0aGVtXG4gICAgdGhpcy5vcHRzLmRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sIHRoaXMub3B0cy5kZXZpY2VOYW1lKTtcblxuICAgIGNvbnN0IHNldHVwVmVyc2lvbkNhcHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbigpO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgaU9TIFNESyBWZXJzaW9uIHNldCB0byAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nYCk7XG4gICAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIFhjb2RlIHN1cHBvcnRzOiAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nLiBgICtcbiAgICAgICAgICBgVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgaWYgYSBzaW11bGF0b3IgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgcGxhdGZvcm0gdmVyc2lvbi5gKTtcbiAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbih0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdHMudWRpZCkge1xuICAgICAgaWYgKHRoaXMub3B0cy51ZGlkLnRvTG93ZXJDYXNlKCkgPT09ICdhdXRvJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gYXdhaXQgZGV0ZWN0VWRpZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBUcnlpbmcgdG8gZmluZCBtYXRjaGluZyBVRElEIGZvciBTaW11bGF0b3JcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgZGV0ZWN0IGFueSBjb25uZWN0ZWQgcmVhbCBkZXZpY2VzLiBGYWxsaW5nIGJhY2sgdG8gU2ltdWxhdG9yLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuICAgICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICAvLyBObyBtYXRjaGluZyBTaW11bGF0b3IgaXMgZm91bmQuIFRocm93IGFuIGVycm9yXG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZGV0ZWN0IHVkaWQgZm9yICR7dGhpcy5vcHRzLmRldmljZU5hbWV9IFNpbXVsYXRvciBydW5uaW5nIGlPUyAke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWF0Y2hpbmcgU2ltdWxhdG9yIGV4aXN0cyBhbmQgaXMgZm91bmQuIFVzZSBpdFxuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICAgICAgY29uc3QgZGV2aWNlUGxhdGZvcm0gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24oYXdhaXQgZGV2aWNlLmdldFBsYXRmb3JtVmVyc2lvbigpKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAhPT0gZGV2aWNlUGxhdGZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBkZXZpY2VQbGF0Zm9ybTtcbiAgICAgICAgICAgIHRoaXMubG9nLmluZm8oYFNldCBwbGF0Zm9ybVZlcnNpb24gdG8gJyR7ZGV2aWNlUGxhdGZvcm19JyB0byBtYXRjaCB0aGUgZGV2aWNlIHdpdGggZ2l2ZW4gVURJRGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyBhIGNvbm5lY3RlZCBkZXZpY2UuIElmIG5vdCwgdGhlIHVkaWQgcGFzc2VkIGluIGlzIGludmFsaWRcbiAgICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IGdldENvbm5lY3RlZERldmljZXMoKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYEF2YWlsYWJsZSBkZXZpY2VzOiAke2RldmljZXMuam9pbignLCAnKX1gKTtcbiAgICAgICAgaWYgKCFkZXZpY2VzLmluY2x1ZGVzKHRoaXMub3B0cy51ZGlkKSkge1xuICAgICAgICAgIC8vIGNoZWNrIGZvciBhIHBhcnRpY3VsYXIgc2ltdWxhdG9yXG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYE5vIHJlYWwgZGV2aWNlIHdpdGggdWRpZCAnJHt0aGlzLm9wdHMudWRpZH0nLiBMb29raW5nIGZvciBzaW11bGF0b3JgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0U2ltdWxhdG9yKHRoaXMub3B0cy51ZGlkLCB7XG4gICAgICAgICAgICAgIGRldmljZXNTZXRQYXRoOiB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogdGhpcy5vcHRzLnVkaWR9O1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRldmljZSBvciBzaW11bGF0b3IgVURJRDogJyR7dGhpcy5vcHRzLnVkaWR9J2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRSZWFsRGV2aWNlT2JqKHRoaXMub3B0cy51ZGlkKTtcbiAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiB0cnVlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGtub3cgZm9yIHN1cmUgdGhlIGRldmljZSB3aWxsIGJlIGEgU2ltdWxhdG9yXG4gICAgYXdhaXQgc2V0dXBWZXJzaW9uQ2FwcygpO1xuICAgIGlmICh0aGlzLm9wdHMuZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBOZXcgc2ltdWxhdG9yIGlzIHJlcXVlc3RlZC4gSWYgdGhpcyBpcyBub3Qgd2FudGVkLCBzZXQgJ2VuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uJyBjYXBhYmlsaXR5IHRvIGZhbHNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3Qgc2ltdWxhdG9yIHRvIHVzZSwgZ2l2ZW4gdGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuXG4gICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3Rpbmcgc2ltdWxhdG9yXG4gICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5pbmZvKCdTaW11bGF0b3IgdWRpZCBub3QgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBubyBkZXZpY2Ugb2YgdGhpcyB0eXBlIGV4aXN0cywgb3IgdGhleSByZXF1ZXN0IG5ldyBzaW0sIHNvIGNyZWF0ZSBvbmVcbiAgICB0aGlzLmxvZy5pbmZvKCdVc2luZyBkZXNpcmVkIGNhcHMgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvcicpO1xuICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMuY3JlYXRlU2ltKCk7XG4gICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gIH1cblxuICBhc3luYyBzdGFydFNpbSAoKSB7XG4gICAgY29uc3QgcnVuT3B0cyA9IHtcbiAgICAgIHNjYWxlRmFjdG9yOiB0aGlzLm9wdHMuc2NhbGVGYWN0b3IsXG4gICAgICBjb25uZWN0SGFyZHdhcmVLZXlib2FyZDogISF0aGlzLm9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQsXG4gICAgICBwYXN0ZWJvYXJkQXV0b21hdGljU3luYzogdGhpcy5vcHRzLnNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jID8/ICdvZmYnLFxuICAgICAgaXNIZWFkbGVzczogISF0aGlzLm9wdHMuaXNIZWFkbGVzcyxcbiAgICAgIHRyYWNlUG9pbnRlcjogdGhpcy5vcHRzLnNpbXVsYXRvclRyYWNlUG9pbnRlcixcbiAgICAgIGRldmljZVByZWZlcmVuY2VzOiB7fSxcbiAgICB9O1xuXG4gICAgLy8gYWRkIHRoZSB3aW5kb3cgY2VudGVyLCBpZiBpdCBpcyBzcGVjaWZpZWRcbiAgICBpZiAodGhpcy5vcHRzLlNpbXVsYXRvcldpbmRvd0NlbnRlcikge1xuICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dDZW50ZXIgPSB0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyO1xuICAgIH1cblxuICAgIGlmIChfLmlzSW50ZWdlcih0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQpKSB7XG4gICAgICBydW5PcHRzLnN0YXJ0dXBUaW1lb3V0ID0gdGhpcy5vcHRzLnNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0O1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgdG8gd29ya2Fyb3VuZCBYQ1Rlc3QgYnVnIGFib3V0IGNoYW5naW5nIFNpbXVsYXRvclxuICAgIC8vIG9yaWVudGF0aW9uIGlzIG5vdCBzeW5jaHJvbml6ZWQgdG8gdGhlIGFjdHVhbCB3aW5kb3cgb3JpZW50YXRpb25cbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IF8uaXNTdHJpbmcodGhpcy5vcHRzLm9yaWVudGF0aW9uKSAmJiB0aGlzLm9wdHMub3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gICAgICBjYXNlICdMQU5EU0NBUEUnOlxuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uID0gJ0xhbmRzY2FwZUxlZnQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSA5MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdQT1JUUkFJVCc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnUG9ydHJhaXQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJ1bihydW5PcHRzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNpbSAoKSB7XG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IHRydWU7XG5cbiAgICAvLyBHZXQgcGxhdGZvcm0gbmFtZSBmcm9tIGNvbnN0IHNpbmNlIGl0IG11c3QgYmUgY2FzZSBzZW5zaXRpdmUgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvclxuICAgIGNvbnN0IHBsYXRmb3JtTmFtZSA9IHRoaXMuaXNUdk9TKCkgPyBQTEFURk9STV9OQU1FX1RWT1MgOiBQTEFURk9STV9OQU1FX0lPUztcblxuICAgIC8vIGNyZWF0ZSBzaW0gZm9yIGNhcHNcbiAgICBjb25zdCBzaW0gPSBhd2FpdCBjcmVhdGVTaW0odGhpcy5vcHRzLCBwbGF0Zm9ybU5hbWUpO1xuICAgIHRoaXMubG9nLmluZm8oYENyZWF0ZWQgc2ltdWxhdG9yIHdpdGggdWRpZCAnJHtzaW0udWRpZH0nLmApO1xuXG4gICAgcmV0dXJuIHNpbTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaEFwcCAoKSB7XG4gICAgY29uc3QgQVBQX0xBVU5DSF9USU1FT1VUID0gMjAgKiAxMDAwO1xuXG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoQXR0ZW1wdGVkJyk7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGwubGF1bmNoQXBwKHRoaXMub3B0cy5idW5kbGVJZCk7XG5cbiAgICBsZXQgY2hlY2tTdGF0dXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGxldCBjdXJyZW50QXBwID0gcmVzcG9uc2UuY3VycmVudEFwcC5idW5kbGVJRDtcbiAgICAgIGlmIChjdXJyZW50QXBwICE9PSB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMub3B0cy5idW5kbGVJZH0gbm90IGluIGZvcmVncm91bmQuICR7Y3VycmVudEFwcH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmxvZy5pbmZvKGBXYWl0aW5nIGZvciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB0byBiZSBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgbGV0IHJldHJpZXMgPSBwYXJzZUludChBUFBfTEFVTkNIX1RJTUVPVVQgLyAyMDAsIDEwKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIDIwMCwgY2hlY2tTdGF0dXMpO1xuICAgIHRoaXMubG9nLmluZm8oYCR7dGhpcy5vcHRzLmJ1bmRsZUlkfSBpcyBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoZWQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2RhU2Vzc2lvbiAoYnVuZGxlSWQsIHByb2Nlc3NBcmd1bWVudHMpIHtcbiAgICBjb25zdCBhcmdzID0gcHJvY2Vzc0FyZ3VtZW50cyA/IChwcm9jZXNzQXJndW1lbnRzLmFyZ3MgfHwgW10pIDogW107XG4gICAgaWYgKCFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5hcmdzIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShhcmdzKX0gaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICBjb25zdCBlbnYgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuZW52IHx8IHt9KSA6IHt9O1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGVudikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5lbnYgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhIGRpY3Rpb25hcnkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShlbnYpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxhbmd1YWdlKSkge1xuICAgICAgYXJncy5wdXNoKCctQXBwbGVMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICAgIGFyZ3MucHVzaCgnLU5TTGFuZ3VhZ2VzJywgYCgke3RoaXMub3B0cy5sYW5ndWFnZX0pYCk7XG4gICAgfVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5sb2NhbGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxvY2FsZScsIHRoaXMub3B0cy5sb2NhbGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCkpIHtcbiAgICAgICAgdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoKSkge1xuICAgICAgICB0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2ggPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3ZGFDYXBzID0ge1xuICAgICAgYnVuZGxlSWQ6IHRoaXMub3B0cy5hdXRvTGF1bmNoID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGJ1bmRsZUlkLFxuICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgICAgZW52aXJvbm1lbnQ6IGVudixcbiAgICAgIGV2ZW50bG9vcElkbGVEZWxheVNlYzogdGhpcy5vcHRzLndkYUV2ZW50bG9vcElkbGVEZWxheSA/PyAwLFxuICAgICAgc2hvdWxkV2FpdEZvclF1aWVzY2VuY2U6IHRoaXMub3B0cy53YWl0Rm9yUXVpZXNjZW5jZSA/PyB0cnVlLFxuICAgICAgc2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uOiB0aGlzLm9wdHMuc2ltcGxlSXNWaXNpYmxlQ2hlY2sgPz8gZmFsc2UsXG4gICAgICBtYXhUeXBpbmdGcmVxdWVuY3k6IHRoaXMub3B0cy5tYXhUeXBpbmdGcmVxdWVuY3kgPz8gNjAsXG4gICAgICBzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlcjogdGhpcy5vcHRzLnNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyID8/IHRydWUsXG4gICAgICB3YWl0Rm9ySWRsZVRpbWVvdXQ6IHRoaXMub3B0cy53YWl0Rm9ySWRsZVRpbWVvdXQsXG4gICAgICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiB0aGlzLm9wdHMuc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIGVsZW1lbnRSZXNwb25zZUZpZWxkczogdGhpcy5vcHRzLmVsZW1lbnRSZXNwb25zZUZpZWxkcyxcbiAgICAgIGRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90czogdGhpcy5vcHRzLmRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyxcbiAgICAgIHNob3VsZFRlcm1pbmF0ZUFwcDogdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA/PyB0cnVlLFxuICAgICAgZm9yY2VBcHBMYXVuY2g6IHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCA/PyB0cnVlLFxuICAgICAgdXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5OiB0aGlzLm9wdHMudXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5ID8/IHRydWUsXG4gICAgICBmb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZTogdGhpcy5vcHRzLmZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlXG4gICAgICAgID8/ICh0aGlzLm9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQgPT09IHRydWUgPyBmYWxzZSA6IHRydWUpLFxuICAgIH07XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvQWNjZXB0QWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdhY2NlcHQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmF1dG9EaXNtaXNzQWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdkaXNtaXNzJztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbd2RhQ2Fwc10sXG4gICAgICAgIGFsd2F5c01hdGNoOiB7fSxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIFByb3h5IG1ldGhvZHMgZnJvbSBCYXNlRHJpdmVyXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgpIHtcbiAgICBpZiAodGhpcy5pc1dlYnZpZXcoKSkge1xuICAgICAgcmV0dXJuIE5PX1BST1hZX1dFQl9MSVNUO1xuICAgIH1cbiAgICByZXR1cm4gTk9fUFJPWFlfTkFUSVZFX0xJU1Q7XG4gIH1cblxuICBjYW5Qcm94eSAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc1NhZmFyaSAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zYWZhcmk7XG4gIH1cblxuICBpc1JlYWxEZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLm9wdHMucmVhbERldmljZTtcbiAgfVxuXG4gIGlzU2ltdWxhdG9yICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNUdk9TICgpIHtcbiAgICByZXR1cm4gXy50b0xvd2VyKHRoaXMub3B0cy5wbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbiAgfVxuXG4gIGlzV2VidmlldyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLmlzV2ViQ29udGV4dCgpO1xuICB9XG5cbiAgdmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kgKHN0cmF0ZWd5KSB7XG4gICAgc3VwZXIudmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3koc3RyYXRlZ3ksIHRoaXMuaXNXZWJDb250ZXh0KCkpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBvbmUgb2YgYGFwcGAgb3IgYGJ1bmRsZUlkYFxuICAgIGlmIChfLnRvTG93ZXIoY2Fwcy5icm93c2VyTmFtZSkgIT09ICdzYWZhcmknICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5idW5kbGVJZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIGluY2x1ZGUgbmVpdGhlciBhbiBhcHAgbm9yIGEgYnVuZGxlSWQuICcgK1xuICAgICAgICAnV2ViRHJpdmVyQWdlbnQgd2lsbCBiZSBzdGFydGVkIHdpdGhvdXQgdGhlIGRlZmF1bHQgYXBwJyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgdGhpcy5sb2cud2FybihgJ3BsYXRmb3JtVmVyc2lvbicgY2FwYWJpbGl0eSAoJyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259JykgaXMgbm90IGEgdmFsaWQgdmVyc2lvbiBudW1iZXIuIGAgK1xuICAgICAgICBgQ29uc2lkZXIgZml4aW5nIGl0IG9yIGJlIHJlYWR5IHRvIGV4cGVyaWVuY2UgYW4gaW5jb25zaXN0ZW50IGRyaXZlciBiZWhhdmlvci5gKTtcbiAgICB9XG5cbiAgICBsZXQgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50ID0gKHByb2Nlc3NBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHthcmdzLCBlbnZ9ID0gcHJvY2Vzc0FyZ3VtZW50cztcbiAgICAgIGlmICghXy5pc05pbChhcmdzKSAmJiAhXy5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3Byb2Nlc3NBcmd1bWVudHMuYXJncyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc05pbChlbnYpICYmICFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdwcm9jZXNzQXJndW1lbnRzLmVudiBtdXN0IGJlIGFuIG9iamVjdCA8a2V5LHZhbHVlPiBwYWlyIHthOmIsIGM6ZH0nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYHByb2Nlc3NBcmd1bWVudHNgIHNob3VsZCBiZSBKU09OIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCBhcmd1bWVudHMgYW5kLyBlbnZpcm9ubWVudCBkZXRhaWxzXG4gICAgaWYgKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykge1xuICAgICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIGFzIEpTT05cbiAgICAgICAgICBjYXBzLnByb2Nlc3NBcmd1bWVudHMgPSBKU09OLnBhcnNlKGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYHByb2Nlc3NBcmd1bWVudHMgbXVzdCBiZSBhIEpTT04gZm9ybWF0IG9yIGFuIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgICBgQm90aCBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnQgY2FuIGJlIG51bGwuIEVycm9yOiAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB2ZXJpZnlQcm9jZXNzQXJndW1lbnQoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBvciBhIHN0cmluZyBKU09OIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoZXJlIGlzIG5vIHBvaW50IGluIGhhdmluZyBga2V5Y2hhaW5QYXRoYCB3aXRob3V0IGBrZXljaGFpblBhc3N3b3JkYFxuICAgIGlmICgoY2Fwcy5rZXljaGFpblBhdGggJiYgIWNhcHMua2V5Y2hhaW5QYXNzd29yZCkgfHwgKCFjYXBzLmtleWNoYWluUGF0aCAmJiBjYXBzLmtleWNoYWluUGFzc3dvcmQpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBJZiAna2V5Y2hhaW5QYXRoJyBpcyBzZXQsICdrZXljaGFpblBhc3N3b3JkJyBtdXN0IGFsc28gYmUgc2V0IChhbmQgdmljZSB2ZXJzYSkuYCk7XG4gICAgfVxuXG4gICAgLy8gYHJlc2V0T25TZXNzaW9uU3RhcnRPbmx5YCBzaG91bGQgYmUgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9ICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSkgfHwgdGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5O1xuICAgIHRoaXMub3B0cy51c2VOZXdXREEgPSB1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy51c2VOZXdXREEpID8gdGhpcy5vcHRzLnVzZU5ld1dEQSA6IGZhbHNlO1xuXG4gICAgaWYgKGNhcHMuY29tbWFuZFRpbWVvdXRzKSB7XG4gICAgICBjYXBzLmNvbW1hbmRUaW1lb3V0cyA9IG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyhjYXBzLmNvbW1hbmRUaW1lb3V0cyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdH0gPSB1cmwucGFyc2UoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KHByb3RvY29sKSB8fCBfLmlzRW1wdHkoaG9zdCkpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJ3dlYkRyaXZlckFnZW50VXJsJyBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gYSB2YWxpZCBXZWJEcml2ZXJBZ2VudCBzZXJ2ZXIgVVJMLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke2NhcHMud2ViRHJpdmVyQWdlbnRVcmx9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMuYnJvd3Nlck5hbWUpIHtcbiAgICAgIGlmIChjYXBzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdicm93c2VyTmFtZScgY2Fubm90IGJlIHNldCB0b2dldGhlciB3aXRoICdidW5kbGVJZCcgY2FwYWJpbGl0eWApO1xuICAgICAgfVxuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXNcbiAgICAgIC8vIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBUaGUgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGVybWlzc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtc10gb2YgXy50b1BhaXJzKEpTT04ucGFyc2UoY2Fwcy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgaWYgKCFfLmlzU3RyaW5nKGJ1bmRsZUlkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShidW5kbGVJZCl9JyBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHBlcm1zKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShwZXJtcyl9JyBtdXN0IGJlIGEgSlNPTiBvYmplY3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJyR7Y2Fwcy5wZXJtaXNzaW9uc30nIGlzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgb2JqZWN0IHdpdGggZm9ybWF0IGAgK1xuICAgICAgICAgIGB7XCI8YnVuZGxlSWQxPlwiOiB7XCI8c2VydmljZU5hbWUxPlwiOiBcIjxzZXJ2aWNlU3RhdHVzMT5cIiwgLi4ufSwgLi4ufS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLnBsYXRmb3JtVmVyc2lvbiAmJiAhdXRpbC5jb2VyY2VWZXJzaW9uKGNhcHMucGxhdGZvcm1WZXJzaW9uLCBmYWxzZSkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdwbGF0Zm9ybVZlcnNpb24nIG11c3QgYmUgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGAnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIGdpdmVuIGluc3RlYWQuYCk7XG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgaXMgYW4gYXJyYXksIEpTT04gYXJyYXksIG9yIHN0cmluZ1xuICAgIGlmIChjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzKSB7XG4gICAgICBjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpO1xuICAgIH1cblxuICAgIC8vIGZpbmFsbHksIHJldHVybiB0cnVlIHNpbmNlIHRoZSBzdXBlcmNsYXNzIGNoZWNrIHBhc3NlZCwgYXMgZGlkIHRoaXNcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxBVVQgKCkge1xuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgIGlzU2ltdWxhdG9yOiB0aGlzLmlzU2ltdWxhdG9yKCksXG4gICAgICBpc1R2T1M6IHRoaXMuaXNUdk9TKCksXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvUmVhbERldmljZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYnVuZGxlSWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCxcbiAgICAgICAgc3RyYXRlZ3k6IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3ksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5idW5kbGVJZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgbmV3U2ltdWxhdG9yOiB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RhbGxPdGhlckFwcHModGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmlvc0luc3RhbGxQYXVzZSkpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy82ODg5XG4gICAgICBsZXQgcGF1c2UgPSBwYXJzZUludCh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlLCAxMCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgaW9zSW5zdGFsbFBhdXNlIHNldC4gUGF1c2luZyAke3BhdXNlfSBtcyBiZWZvcmUgY29udGludWluZ2ApO1xuICAgICAgYXdhaXQgQi5kZWxheShwYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbE90aGVyQXBwcyAob3RoZXJBcHBzKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ0NhcGFiaWxpdHkgb3RoZXJBcHBzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3JzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBhcHBzTGlzdDtcbiAgICB0cnkge1xuICAgICAgYXBwc0xpc3QgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkob3RoZXJBcHBzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShhcHBzTGlzdCkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYEdvdCB6ZXJvIGFwcHMgZnJvbSAnb3RoZXJBcHBzJyBjYXBhYmlsaXR5IHZhbHVlLiBEb2luZyBub3RoaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBwUGF0aHMgPSBhd2FpdCBCLmFsbChhcHBzTGlzdC5tYXAoXG4gICAgICAoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKVxuICAgICkpO1xuICAgIGZvciAoY29uc3Qgb3RoZXJBcHAgb2YgYXBwUGF0aHMpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCBvdGhlckFwcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlZHVjZU1vdGlvbiBhcyAnaXNFbmFibGVkJyBvbmx5IHdoZW4gdGhlIGNhcGFiaWxpdGllcyBoYXMgJ3JlZHVjZU1vdGlvbidcbiAgICogVGhlIGNhbGwgaXMgaWdub3JlZCBmb3IgcmVhbCBkZXZpY2VzLlxuICAgKiBAcGFyYW0gez9ib29sZWFufSBpc0VuYWJsZWQgV2V0aGVyIGVuYWJsZSByZWR1Y2VNb3Rpb25cbiAgICovXG4gIGFzeW5jIHNldFJlZHVjZU1vdGlvbiAoaXNFbmFibGVkKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkgfHwgIV8uaXNCb29sZWFuKGlzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIHJlZHVjZU1vdGlvbiB0byAke2lzRW5hYmxlZH1gKTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtyZWR1Y2VNb3Rpb246IGlzRW5hYmxlZH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0SW5pdGlhbE9yaWVudGF0aW9uIChvcmllbnRhdGlvbikge1xuICAgIGlmICghXy5pc1N0cmluZyhvcmllbnRhdGlvbikpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1NraXBwaW5nIHNldHRpbmcgb2YgdGhlIGluaXRpYWwgZGlzcGxheSBvcmllbnRhdGlvbi4gJyArXG4gICAgICAgICdTZXQgdGhlIFwib3JpZW50YXRpb25cIiBjYXBhYmlsaXR5IHRvIGVpdGhlciBcIkxBTkRTQ0FQRVwiIG9yIFwiUE9SVFJBSVRcIiwgaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9yaWVudGF0aW9uID0gb3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBpZiAoIV8uaW5jbHVkZXMoWydMQU5EU0NBUEUnLCAnUE9SVFJBSVQnXSwgb3JpZW50YXRpb24pKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVW5hYmxlIHRvIHNldCBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHtvcmllbnRhdGlvbn0nYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvb3JpZW50YXRpb24nLCAnUE9TVCcsIHtvcmllbnRhdGlvbn0pO1xuICAgICAgdGhpcy5vcHRzLmN1ck9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gZmFpbGVkIHdpdGg6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgX2dldENvbW1hbmRUaW1lb3V0IChjbWROYW1lKSB7XG4gICAgaWYgKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMpIHtcbiAgICAgIGlmIChjbWROYW1lICYmIF8uaGFzKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMsIGNtZE5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzW2NtZE5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbREVGQVVMVF9USU1FT1VUX0tFWV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZXNzaW9uIGNhcGFiaWxpdGllcyBtZXJnZWQgd2l0aCB3aGF0IFdEQSByZXBvcnRzXG4gICAqIFRoaXMgaXMgYSBsaWJyYXJ5IGNvbW1hbmQgYnV0IG5lZWRzIHRvIGNhbGwgJ3N1cGVyJyBzbyBjYW4ndCBiZSBvblxuICAgKiBhIGhlbHBlciBvYmplY3RcbiAgICovXG4gIGFzeW5jIGdldFNlc3Npb24gKCkge1xuICAgIC8vIGNhbGwgc3VwZXIgdG8gZ2V0IGV2ZW50IHRpbWluZ3MsIGV0Yy4uLlxuICAgIGNvbnN0IGRyaXZlclNlc3Npb24gPSBhd2FpdCBzdXBlci5nZXRTZXNzaW9uKCk7XG4gICAgaWYgKCF0aGlzLndkYUNhcHMpIHtcbiAgICAgIHRoaXMud2RhQ2FwcyA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvJywgJ0dFVCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEdldERldmljZUNhcHMgPSBfLmlzQm9vbGVhbih0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvKVxuICAgICAgPyB0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvXG4gICAgICA6IHRydWU7IC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBpZiAoc2hvdWxkR2V0RGV2aWNlQ2FwcyAmJiAhdGhpcy5kZXZpY2VDYXBzKSB7XG4gICAgICBjb25zdCB7c3RhdHVzQmFyU2l6ZSwgc2NhbGV9ID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5JbmZvKCk7XG4gICAgICB0aGlzLmRldmljZUNhcHMgPSB7XG4gICAgICAgIHBpeGVsUmF0aW86IHNjYWxlLFxuICAgICAgICBzdGF0QmFySGVpZ2h0OiBzdGF0dXNCYXJTaXplLmhlaWdodCxcbiAgICAgICAgdmlld3BvcnRSZWN0OiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0UmVjdCgpLFxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5sb2cuaW5mbygnTWVyZ2luZyBXREEgY2FwcyBvdmVyIEFwcGl1bSBjYXBzIGZvciBzZXNzaW9uIGRldGFpbCByZXNwb25zZScpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt1ZGlkOiB0aGlzLm9wdHMudWRpZH0sIGRyaXZlclNlc3Npb24sXG4gICAgICB0aGlzLndkYUNhcHMuY2FwYWJpbGl0aWVzLCB0aGlzLmRldmljZUNhcHMgfHwge30pO1xuICB9XG5cbiAgYXN5bmMgcmVzZXQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgcmVzZXQgaGFwcGVucyBldmVuIGlmIG5vUmVzZXQgaXMgc2V0IHRvIHRydWVcbiAgICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICAgIG9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgb3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHNodXRkb3duSGFuZGxlciA9IHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9ICgpID0+IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChvcHRzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9IHNodXRkb3duSGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIucmVzZXQoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFhDVUlUZXN0RHJpdmVyLnByb3RvdHlwZSwgY29tbWFuZHMpO1xuXG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBS0E7O0FBR0E7O0FBQ0E7O0FBUUE7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsd0JBQXdCLEdBQUcscUJBQWpDO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsOEJBQXJDO0FBRUEsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBQ0MsaUJBQUQsRUFBVUMsaUJBQVYsQ0FBN0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUEvQjtBQUNBLE1BQU1DLGlCQUFpQixHQUFHO0VBQ3hCQyxpQkFBaUIsRUFBRSxLQURLO0VBRXhCQyxzQkFBc0IsRUFBRSxLQUZBO0VBR3hCQyxXQUFXLEVBQUUsRUFIVztFQUl4QkMsUUFBUSxFQUFFLEtBSmM7RUFLeEJDLGlCQUFpQixFQUFFLElBTEs7RUFNeEJDLGVBQWUsRUFBRSxLQU5PO0VBT3hCQyxlQUFlLEVBQUUsSUFQTztFQVF4QkMsd0JBQXdCLEVBQUU7QUFSRixDQUExQjtBQVVBLE1BQU1DLHVCQUF1QixHQUFHLENBQWhDO0FBQ0EsTUFBTUMsNEJBQTRC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
1371
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbIlNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSIsIkNVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEgiLCJTVVBQT1JURURfRVhURU5TSU9OUyIsIklQQV9FWFQiLCJBUFBfRVhUIiwiTUFYX0FSQ0hJVkVfU0NBTl9ERVBUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMiLCJXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTCIsIldEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMIiwiREVGQVVMVF9TRVRUSU5HUyIsIm5hdGl2ZVdlYlRhcCIsIm5hdGl2ZVdlYlRhcFN0cmljdCIsInVzZUpTT05Tb3VyY2UiLCJzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzIiwiZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyIsIm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkiLCJtanBlZ1NlcnZlckZyYW1lcmF0ZSIsInNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTY2FsaW5nRmFjdG9yIiwicmVkdWNlTW90aW9uIiwiU0hBUkVEX1JFU09VUkNFU19HVUFSRCIsIkFzeW5jTG9jayIsIldFQl9FTEVNRU5UU19DQUNIRV9TSVpFIiwiTk9fUFJPWFlfTkFUSVZFX0xJU1QiLCJOT19QUk9YWV9XRUJfTElTVCIsImNvbmNhdCIsIk1FTU9JWkVEX0ZVTkNUSU9OUyIsIlhDVUlUZXN0RHJpdmVyIiwiQmFzZURyaXZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsImxvY2F0b3JTdHJhdGVnaWVzIiwid2ViTG9jYXRvclN0cmF0ZWdpZXMiLCJyZXNldElvcyIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImxvZ3MiLCJmbiIsIl8iLCJtZW1vaXplIiwia2V5IiwidmFsdWUiLCJwcm94eUNvbW1hbmQiLCJ3ZGEiLCJkZXZpY2UiLCJqd3BQcm94eUFjdGl2ZSIsInByb3h5UmVxUmVzIiwiandwUHJveHlBdm9pZCIsInNhZmFyaSIsImNhY2hlZFdkYVN0YXR1cyIsImN1cldlYkZyYW1lcyIsIl9jdXJyZW50VXJsIiwiY3VyQ29udGV4dCIsInhjb2RlVmVyc2lvbiIsImNvbnRleHRzIiwiaW1wbGljaXRXYWl0TXMiLCJhc3luY2xpYldhaXRNcyIsInBhZ2VMb2FkTXMiLCJsYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQiLCJyZW1vdGUiLCJfY29uZGl0aW9uSW5kdWNlclNlcnZpY2UiLCJ3ZWJFbGVtZW50c0NhY2hlIiwiTFJVIiwibWF4IiwiZHJpdmVyRGF0YSIsImdldFN0YXR1cyIsImRyaXZlckluZm8iLCJnZXREcml2ZXJJbmZvIiwic3RhdHVzIiwiYnVpbGQiLCJ2ZXJzaW9uIiwibWVyZ2VDbGlBcmdzVG9PcHRzIiwiZGlkTWVyZ2UiLCJPYmplY3QiLCJlbnRyaWVzIiwiY2xpQXJncyIsImhhcyIsImxvZyIsImluZm8iLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsImxpZmVjeWNsZURhdGEiLCJzZXNzaW9uSWQiLCJjYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInN0YXJ0IiwiYXNzaWduIiwidWRpZCIsInVwZGF0ZVNldHRpbmdzIiwid2RhU2V0dGluZ3MiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJlIiwiZXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVsZXRlU2Vzc2lvbiIsImdldERlZmF1bHRVcmwiLCJpc1JlYWxEZXZpY2UiLCJ3ZGFMb2NhbFBvcnQiLCJhZGRyZXNzIiwiaW5jbHVkZXMiLCJwb3J0Iiwibm9SZXNldCIsImZ1bGxSZXNldCIsInByaW50VXNlciIsImlvc1Nka1ZlcnNpb24iLCJyZWFsRGV2aWNlIiwiZGV0ZXJtaW5lRGV2aWNlIiwic2ltdWxhdG9yRGV2aWNlc1NldFBhdGgiLCJkZXZpY2VzU2V0UGF0aCIsInBsYXRmb3JtVmVyc2lvbiIsImdldFBsYXRmb3JtVmVyc2lvbiIsIm5vcm1hbGl6ZWRWZXJzaW9uIiwibm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsIkVycm9yIiwiaXNFbXB0eSIsIndlYkRyaXZlckFnZW50VXJsIiwiZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24iLCJsb2dFdmVudCIsInRvTG93ZXIiLCJhcHAiLCJ1bmRlZmluZWQiLCJwcm9jZXNzQXJndW1lbnRzIiwiYnVuZGxlSWQiLCJTQUZBUklfQlVORExFX0lEIiwic2FmYXJpSW5pdGlhbFVybCIsImNvbmZpZ3VyZUFwcCIsImNoZWNrQXBwUHJlc2VudCIsImV4dHJhY3RCdW5kbGVJZCIsInJ1blJlc2V0IiwiV2ViRHJpdmVyQWdlbnQiLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsImNhdGNoIiwiZGVidWciLCJtZW1vaXplZExvZ0luZm8iLCJzdGFydExvZ0NhcHR1cmUiLCJza2lwTG9nQ2FwdHVyZSIsInJlc3VsdCIsImlzTG9nQ2FwdHVyZVN0YXJ0ZWQiLCJpc1NpbXVsYXRvciIsInNodXRkb3duT3RoZXJTaW11bGF0b3JzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJpc1NhZmFyaSIsInNhZmFyaUdsb2JhbFByZWZlcmVuY2VzIiwidXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3MiLCJsb2NhbENvbmZpZyIsInNldExvY2FsZUFuZFByZWZlcmVuY2VzIiwic2ltIiwic2h1dGRvd25TaW11bGF0b3IiLCJjdXN0b21TU0xDZXJ0IiwiZG9lc1N1cHBvcnRLZXljaGFpbkFwaSIsImNlcnRIZWFkIiwidHJ1bmNhdGUiLCJsZW5ndGgiLCJoYXNDZXJ0aWZpY2F0ZUxlZ2FjeSIsImluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSIsInN0YXJ0U2ltIiwiaW5zdGFsbENlcnRpZmljYXRlIiwibGF1bmNoV2l0aElEQiIsImlkYiIsIklEQiIsImNvbm5lY3QiLCJtZXNzYWdlIiwiUHlpZGV2aWNlIiwiaW5zdGFsbFByb2ZpbGUiLCJwYXlsb2FkIiwiaW5zdGFsbEFVVCIsImlzQXBwSW5zdGFsbGVkIiwiZXJyb3JBbmRUaHJvdyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbnNNYXBwaW5nIiwidG9QYWlycyIsInBhcnNlIiwic2V0UGVybWlzc2lvbnMiLCJ3YXJuIiwiY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkIiwiZW5hYmxlQ2FsZW5kYXJBY2Nlc3MiLCJkaXNhYmxlQ2FsZW5kYXJBY2Nlc3MiLCJzdGFydFdkYSIsInNldFJlZHVjZU1vdGlvbiIsInNldEluaXRpYWxPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIiwiYXV0b1dlYnZpZXciLCJhY3RpdmF0ZVJlY2VudFdlYnZpZXciLCJpc05pbCIsImdldEN1cnJlbnRVcmwiLCJzZXRVcmwiLCJzZXRDdXJyZW50VXJsIiwiZ2V0VXJsIiwiaGFzVmFsdWUiLCJjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMiLCJ1c2VQb3J0Rm9yd2FyZGluZyIsImlzTG9jYWxIb3N0Iiwid2RhQmFzZVVybCIsIkRFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZIiwicmVxdWVzdENvbm5lY3Rpb24iLCJ1cmwiLCJkZXZpY2VQb3J0Iiwid2RhUmVtb3RlUG9ydCIsInN5bmNocm9uaXphdGlvbktleSIsIm5hbWUiLCJ1c2VYY3Rlc3RydW5GaWxlIiwiaXNTb3VyY2VGcmVzaCIsImRlcml2ZWREYXRhUGF0aCIsInBhdGgiLCJub3JtYWxpemUiLCJpc0J1c3kiLCJib290c3RyYXBQYXRoIiwiYWNxdWlyZSIsInVzZU5ld1dEQSIsInF1aXRBbmRVbmluc3RhbGwiLCJzZXR1cENhY2hpbmciLCJtc2ciLCJyZXN1bHRCdW5kbGVQYXRoIiwic3RhcnR1cFJldHJpZXMiLCJ3ZGFTdGFydHVwUmV0cmllcyIsInN0YXJ0dXBSZXRyeUludGVydmFsIiwid2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwiLCJyZXRyeUNvdW50IiwicmV0cnlJbnRlcnZhbCIsInJldHJpZXMiLCJtYWpvciIsInJldHJ5IiwibGF1bmNoIiwiZXJyIiwiZXJyb3JNc2ciLCJvcmlnaW5hbFN0YWNrdHJhY2UiLCJzdGFydFdkYVNlc3Npb24iLCJzdGFjayIsImNsZWFyU3lzdGVtRmlsZXMiLCJtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwIiwiZnVsbHlTdGFydGVkIiwicnVuUmVhbERldmljZVJlc2V0IiwicnVuU2ltdWxhdG9yUmVzZXQiLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJyZWNvcmRlciIsImNvbXBhY3QiLCJfcmVjZW50U2NyZWVuUmVjb3JkZXIiLCJfYXVkaW9SZWNvcmRlciIsIl90cmFmZmljQ2FwdHVyZSIsImludGVycnVwdCIsImNsZWFudXAiLCJfcGVyZlJlY29yZGVycyIsIkIiLCJhbGwiLCJtYXAiLCJ4Iiwic3RvcCIsIm1vYmlsZURpc2FibGVDb25kaXRpb25JbmR1Y2VyIiwic3RvcFJlbW90ZSIsInJlc2V0T25TZXNzaW9uU3RhcnRPbmx5IiwiZW5mb3JjZVNpbXVsYXRvclNodXRkb3duIiwiY3JlYXRlU2ltIiwiZGVsZXRlIiwic2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSIsImlnbm9yZSIsInN5c2xvZyIsInN0b3BDYXB0dXJlIiwiandwcm94eSIsInF1aXQiLCJyZWxlYXNlQ29ubmVjdGlvbiIsImV4ZWN1dGVDb21tYW5kIiwiY21kIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJhcHBJc1BhY2thZ2VPckJ1bmRsZSIsInRlc3QiLCJoZWxwZXJzIiwib25Qb3N0UHJvY2VzcyIsIm9uUG9zdENvbmZpZ3VyZUFwcCIsInN1cHBvcnRlZEV4dGVuc2lvbnMiLCJ1bnppcEFwcCIsImFwcFBhdGgiLCJkZXB0aCIsInJvb3REaXIiLCJtYXRjaGVkUGF0aHMiLCJmaW5kQXBwcyIsImJhc2VuYW1lIiwicGx1cmFsaXplIiwibWF0Y2hlZFBhdGgiLCJmdWxsUGF0aCIsImpvaW4iLCJpc0FwcEJ1bmRsZSIsInN1cHBvcnRlZFBsYXRmb3JtcyIsImZldGNoU3VwcG9ydGVkQXBwUGxhdGZvcm1zIiwic29tZSIsInAiLCJpc29sYXRlQXBwQnVuZGxlIiwiZW5kc1dpdGgiLCJmcyIsInN0YXQiLCJpc0ZpbGUiLCJyaW1yYWYiLCJjYWNoZWRBcHBJbmZvIiwiaXNVcmwiLCJpc1BsYWluT2JqZWN0IiwiaGFzaCIsInBhY2thZ2VIYXNoIiwiZXhpc3RzIiwiZ2xvYiIsImN3ZCIsInN0cmljdCIsIm5vc29ydCIsImludGVncml0eSIsImZvbGRlciIsImRldmljZU5hbWUiLCJ0cmFuc2xhdGVEZXZpY2VOYW1lIiwic2V0dXBWZXJzaW9uQ2FwcyIsImdldEFuZENoZWNrSW9zU2RrVmVyc2lvbiIsInRvTG93ZXJDYXNlIiwiZGV0ZWN0VWRpZCIsImdldEV4aXN0aW5nU2ltIiwiZGV2aWNlUGxhdGZvcm0iLCJkZXZpY2VzIiwiZ2V0Q29ubmVjdGVkRGV2aWNlcyIsImdldFNpbXVsYXRvciIsImlnbiIsImdldFJlYWxEZXZpY2VPYmoiLCJlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbiIsInJ1bk9wdHMiLCJzY2FsZUZhY3RvciIsImNvbm5lY3RIYXJkd2FyZUtleWJvYXJkIiwicGFzdGVib2FyZEF1dG9tYXRpY1N5bmMiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsImlzSGVhZGxlc3MiLCJ0cmFjZVBvaW50ZXIiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJkZXZpY2VQcmVmZXJlbmNlcyIsIlNpbXVsYXRvcldpbmRvd0NlbnRlciIsImlzSW50ZWdlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic3RhcnR1cFRpbWVvdXQiLCJpc1N0cmluZyIsInRvVXBwZXJDYXNlIiwiU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24iLCJTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIiwicnVuIiwicGxhdGZvcm1OYW1lIiwiaXNUdk9TIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwiUExBVEZPUk1fTkFNRV9JT1MiLCJsYXVuY2hBcHAiLCJBUFBfTEFVTkNIX1RJTUVPVVQiLCJzaW1jdGwiLCJjaGVja1N0YXR1cyIsInJlc3BvbnNlIiwiY3VycmVudEFwcCIsImJ1bmRsZUlEIiwicGFyc2VJbnQiLCJpc0FycmF5IiwiZW52IiwibGFuZ3VhZ2UiLCJwdXNoIiwibG9jYWxlIiwic2hvdWxkVGVybWluYXRlQXBwIiwiZm9yY2VBcHBMYXVuY2giLCJ3ZGFDYXBzIiwiYXV0b0xhdW5jaCIsImFyZ3VtZW50cyIsImVudmlyb25tZW50IiwiZXZlbnRsb29wSWRsZURlbGF5U2VjIiwid2RhRXZlbnRsb29wSWRsZURlbGF5Iiwic2hvdWxkV2FpdEZvclF1aWVzY2VuY2UiLCJ3YWl0Rm9yUXVpZXNjZW5jZSIsInNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbiIsInNpbXBsZUlzVmlzaWJsZUNoZWNrIiwibWF4VHlwaW5nRnJlcXVlbmN5Iiwic2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIiLCJ3YWl0Rm9ySWRsZVRpbWVvdXQiLCJlbGVtZW50UmVzcG9uc2VGaWVsZHMiLCJkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMiLCJ1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kiLCJmb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZSIsImF1dG9BY2NlcHRBbGVydHMiLCJkZWZhdWx0QWxlcnRBY3Rpb24iLCJhdXRvRGlzbWlzc0FsZXJ0cyIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJpc1dlYnZpZXciLCJjYW5Qcm94eSIsImlzV2ViQ29udGV4dCIsInZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJjb2VyY2VWZXJzaW9uIiwidmVyaWZ5UHJvY2Vzc0FyZ3VtZW50Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImNvbW1hbmRUaW1lb3V0cyIsIm5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyIsInByb3RvY29sIiwiaG9zdCIsInBlcm1zIiwiYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMiLCJwYXJzZUNhcHNBcnJheSIsInZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0iLCJpbnN0YWxsVG9SZWFsRGV2aWNlIiwidGltZW91dCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwiaW5zdGFsbFRvU2ltdWxhdG9yIiwibmV3U2ltdWxhdG9yIiwib3RoZXJBcHBzIiwiaW5zdGFsbE90aGVyQXBwcyIsImlvc0luc3RhbGxQYXVzZSIsInBhdXNlIiwiZGVsYXkiLCJhcHBzTGlzdCIsImFwcFBhdGhzIiwib3RoZXJBcHAiLCJpc0VuYWJsZWQiLCJpc0Jvb2xlYW4iLCJjdXJPcmllbnRhdGlvbiIsIl9nZXRDb21tYW5kVGltZW91dCIsImNtZE5hbWUiLCJERUZBVUxUX1RJTUVPVVRfS0VZIiwiZ2V0U2Vzc2lvbiIsImRyaXZlclNlc3Npb24iLCJzaG91bGRHZXREZXZpY2VDYXBzIiwiaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvIiwiZGV2aWNlQ2FwcyIsInN0YXR1c0JhclNpemUiLCJzY2FsZSIsImdldFNjcmVlbkluZm8iLCJwaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdwb3J0UmVjdCIsInJlc2V0IiwiY2xvbmVEZWVwIiwic2h1dGRvd25IYW5kbGVyIiwicmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCwgbWpwZWcsIGZzIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCB7IFdlYkRyaXZlckFnZW50IH0gZnJvbSAnYXBwaXVtLXdlYmRyaXZlcmFnZW50JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7XG4gIGNyZWF0ZVNpbSwgZ2V0RXhpc3RpbmdTaW0sIHJ1blNpbXVsYXRvclJlc2V0LCBpbnN0YWxsVG9TaW11bGF0b3IsXG4gIHNodXRkb3duT3RoZXJTaW11bGF0b3JzLCBzaHV0ZG93blNpbXVsYXRvciwgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXNcbn0gZnJvbSAnLi9zaW11bGF0b3ItbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBnZXRTaW11bGF0b3IgfSBmcm9tICdhcHBpdW0taW9zLXNpbXVsYXRvcic7XG5pbXBvcnQge1xuICBkb2VzU3VwcG9ydEtleWNoYWluQXBpLCBpbnN0YWxsQ2VydGlmaWNhdGUsIGluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSxcbiAgaGFzQ2VydGlmaWNhdGVMZWdhY3ksXG59IGZyb20gJy4vY2VydC11dGlscyc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCByZXRyeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7XG4gIHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIGV4dHJhY3RCdW5kbGVJZCwgU0FGQVJJX0JVTkRMRV9JRCxcbiAgZmV0Y2hTdXBwb3J0ZWRBcHBQbGF0Zm9ybXMsIEFQUF9FWFQsIElQQV9FWFQsXG4gIGlzQXBwQnVuZGxlLCBmaW5kQXBwcywgaXNvbGF0ZUFwcEJ1bmRsZSxcbn0gZnJvbSAnLi9hcHAtdXRpbHMnO1xuaW1wb3J0IHtcbiAgZGVzaXJlZENhcENvbnN0cmFpbnRzLCBQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TXG59IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7XG4gIGRldGVjdFVkaWQsIGdldEFuZENoZWNrWGNvZGVWZXJzaW9uLCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24sXG4gIGNoZWNrQXBwUHJlc2VudCwgZ2V0RHJpdmVySW5mbyxcbiAgY2xlYXJTeXN0ZW1GaWxlcywgdHJhbnNsYXRlRGV2aWNlTmFtZSwgbm9ybWFsaXplQ29tbWFuZFRpbWVvdXRzLFxuICBERUZBVUxUX1RJTUVPVVRfS0VZLCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwLFxuICBwcmludFVzZXIsIHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyxcbiAgbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uLCBpc0xvY2FsSG9zdFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIGdldENvbm5lY3RlZERldmljZXMsIHJ1blJlYWxEZXZpY2VSZXNldCwgaW5zdGFsbFRvUmVhbERldmljZSxcbiAgZ2V0UmVhbERldmljZU9ialxufSBmcm9tICcuL3JlYWwtZGV2aWNlLW1hbmFnZW1lbnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IElEQiBmcm9tICdhcHBpdW0taWRiJztcbmltcG9ydCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSBmcm9tICcuL2RldmljZS1jb25uZWN0aW9ucy1mYWN0b3J5JztcbmltcG9ydCBQeWlkZXZpY2UgZnJvbSAnLi9weS1pb3MtZGV2aWNlLWNsaWVudCc7XG5cblxuY29uc3QgU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FID0gJ3NodXRkb3duX290aGVyX3NpbXMnO1xuY29uc3QgQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCA9ICdjdXN0b21pemVfcmVzdWx0X2J1bmRsZV9wYXRoJztcblxuY29uc3QgU1VQUE9SVEVEX0VYVEVOU0lPTlMgPSBbSVBBX0VYVCwgQVBQX0VYVF07XG5jb25zdCBNQVhfQVJDSElWRV9TQ0FOX0RFUFRIID0gMTtcbmNvbnN0IGRlZmF1bHRTZXJ2ZXJDYXBzID0ge1xuICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICBicm93c2VyTmFtZTogJycsXG4gIHBsYXRmb3JtOiAnTUFDJyxcbiAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgbmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkOiBmYWxzZSxcbn07XG5jb25zdCBXREFfU0lNX1NUQVJUVVBfUkVUUklFUyA9IDI7XG5jb25zdCBXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTID0gMTtcbmNvbnN0IFdEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0teGN1aXRlc3QtZHJpdmVyL2Jsb2IvbWFzdGVyL2RvY3MvcmVhbC1kZXZpY2UtY29uZmlnLm1kJztcbmNvbnN0IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMID0gMTAwMDA7XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTID0ge1xuICBuYXRpdmVXZWJUYXA6IGZhbHNlLFxuICBuYXRpdmVXZWJUYXBTdHJpY3Q6IGZhbHNlLFxuICB1c2VKU09OU291cmNlOiBmYWxzZSxcbiAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogdHJ1ZSxcbiAgZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlczogJ3R5cGUsbGFiZWwnLFxuICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvYmxvYi9tYXN0ZXIvV2ViRHJpdmVyQWdlbnRMaWIvVXRpbGl0aWVzL0ZCQ29uZmlndXJhdGlvbi5tIGZvciBmb2xsb3dpbmcgc2V0dGluZ3MnIHZhbHVlc1xuICBtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5OiAyNSxcbiAgbWpwZWdTZXJ2ZXJGcmFtZXJhdGU6IDEwLFxuICBzY3JlZW5zaG90UXVhbGl0eTogMSxcbiAgbWpwZWdTY2FsaW5nRmFjdG9yOiAxMDAsXG4gIC8vIHNldCBgcmVkdWNlTW90aW9uYCB0byBgbnVsbGAgc28gdGhhdCBpdCB3aWxsIGJlIHZlcmlmaWVkIGJ1dCBzdGlsbCBzZXQgZWl0aGVyIHRydWUvZmFsc2VcbiAgcmVkdWNlTW90aW9uOiBudWxsLFxufTtcbi8vIFRoaXMgbG9jayBhc3N1cmVzLCB0aGF0IGVhY2ggZHJpdmVyIHNlc3Npb24gZG9lcyBub3Rcbi8vIGFmZmVjdCBzaGFyZWQgcmVzb3VyY2VzIG9mIHRoZSBvdGhlciBwYXJhbGxlbCBzZXNzaW9uc1xuY29uc3QgU0hBUkVEX1JFU09VUkNFU19HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFdFQl9FTEVNRU5UU19DQUNIRV9TSVpFID0gNTAwO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuY29uc3QgTk9fUFJPWFlfTkFUSVZFX0xJU1QgPSBbXG4gIFsnREVMRVRFJywgL3dpbmRvdy9dLFxuICBbJ0dFVCcsIC9eXFwvc2Vzc2lvblxcL1teXFwvXSskL10sXG4gIFsnR0VUJywgL2FsZXJ0X3RleHQvXSxcbiAgWydHRVQnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnR0VUJywgL2FwcGl1bS9dLFxuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvY29udGV4dC9dLFxuICBbJ0dFVCcsIC9sb2NhdGlvbi9dLFxuICBbJ0dFVCcsIC9sb2cvXSxcbiAgWydHRVQnLCAvc2NyZWVuc2hvdC9dLFxuICBbJ0dFVCcsIC9zaXplL10sXG4gIFsnR0VUJywgL3NvdXJjZS9dLFxuICBbJ0dFVCcsIC90aW1lb3V0cyQvXSxcbiAgWydHRVQnLCAvdXJsL10sXG4gIFsnR0VUJywgL3dpbmRvdy9dLFxuICBbJ1BPU1QnLCAvYWNjZXB0X2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9hY3Rpb25zJC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnUE9TVCcsIC9hcHBpdW0vXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL2lzX2xvY2tlZC9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvbG9jay9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvdW5sb2NrL10sXG4gIFsnUE9TVCcsIC9iYWNrL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY29udGV4dC9dLFxuICBbJ1BPU1QnLCAvZGlzbWlzc19hbGVydC9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudFxcL2FjdGl2ZS9dLCAvLyBNSlNPTldQIGdldCBhY3RpdmUgZWxlbWVudCBzaG91bGQgcHJveHlcbiAgWydQT1NUJywgL2VsZW1lbnQkL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50cyQvXSxcbiAgWydQT1NUJywgL2V4ZWN1dGUvXSxcbiAgWydQT1NUJywgL2tleXMvXSxcbiAgWydQT1NUJywgL2xvZy9dLFxuICBbJ1BPU1QnLCAvbW92ZXRvL10sXG4gIFsnUE9TVCcsIC9yZWNlaXZlX2FzeW5jX3Jlc3BvbnNlL10sIC8vIGFsd2F5cywgaW4gY2FzZSBjb250ZXh0IHN3aXRjaGVzIHdoaWxlIHdhaXRpbmdcbiAgWydQT1NUJywgL3Nlc3Npb25cXC9bXlxcL10rXFwvbG9jYXRpb24vXSwgLy8gZ2VvIGxvY2F0aW9uLCBidXQgbm90IGVsZW1lbnQgbG9jYXRpb25cbiAgWydQT1NUJywgL3NoYWtlL10sXG4gIFsnUE9TVCcsIC90aW1lb3V0cy9dLFxuICBbJ1BPU1QnLCAvdG91Y2gvXSxcbiAgWydQT1NUJywgL3VybC9dLFxuICBbJ1BPU1QnLCAvdmFsdWUvXSxcbiAgWydQT1NUJywgL3dpbmRvdy9dLFxuICBbJ0RFTEVURScsIC9jb29raWUvXSxcbiAgWydHRVQnLCAvY29va2llL10sXG4gIFsnUE9TVCcsIC9jb29raWUvXSxcbl07XG5jb25zdCBOT19QUk9YWV9XRUJfTElTVCA9IFtcbiAgWydHRVQnLCAvYXR0cmlidXRlL10sXG4gIFsnR0VUJywgL2VsZW1lbnQvXSxcbiAgWydHRVQnLCAvdGV4dC9dLFxuICBbJ0dFVCcsIC90aXRsZS9dLFxuICBbJ1BPU1QnLCAvY2xlYXIvXSxcbiAgWydQT1NUJywgL2NsaWNrL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50L10sXG4gIFsnUE9TVCcsIC9mb3J3YXJkL10sXG4gIFsnUE9TVCcsIC9mcmFtZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvcmVmcmVzaC9dLFxuXS5jb25jYXQoTk9fUFJPWFlfTkFUSVZFX0xJU1QpO1xuLyogZXNsaW50LWVuYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuXG5jb25zdCBNRU1PSVpFRF9GVU5DVElPTlMgPSBbXG4gICdnZXRTdGF0dXNCYXJIZWlnaHQnLFxuICAnZ2V0RGV2aWNlUGl4ZWxSYXRpbycsXG4gICdnZXRTY3JlZW5JbmZvJyxcbl07XG5cblxuY2xhc3MgWENVSVRlc3REcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcblxuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICctaW9zIHByZWRpY2F0ZSBzdHJpbmcnLFxuICAgICAgJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgXTtcbiAgICB0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgICd0YWcgbmFtZScsXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdwYXJ0aWFsIGxpbmsgdGV4dCcsXG4gICAgXTtcbiAgICB0aGlzLnJlc2V0SW9zKCk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyhERUZBVUxUX1NFVFRJTkdTLCB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5sb2dzID0ge307XG5cbiAgICAvLyBtZW1vaXplIGZ1bmN0aW9ucyBoZXJlLCBzbyB0aGF0IHRoZXkgYXJlIGRvbmUgb24gYSBwZXItaW5zdGFuY2UgYmFzaXNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE1FTU9JWkVEX0ZVTkNUSU9OUykge1xuICAgICAgdGhpc1tmbl0gPSBfLm1lbW9pemUodGhpc1tmbl0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ICE9PSAnbmF0aXZlV2ViVGFwJyAmJiBrZXkgIT09ICduYXRpdmVXZWJUYXBTdHJpY3QnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnUE9TVCcsIHtcbiAgICAgICAgc2V0dGluZ3M6IHtba2V5XTogdmFsdWV9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5vcHRzW2tleV0gPSAhIXZhbHVlO1xuICB9XG5cbiAgcmVzZXRJb3MgKCkge1xuICAgIHRoaXMub3B0cyA9IHRoaXMub3B0cyB8fCB7fTtcbiAgICB0aGlzLndkYSA9IG51bGw7XG4gICAgdGhpcy5vcHRzLmRldmljZSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IFtdO1xuICAgIHRoaXMuc2FmYXJpID0gZmFsc2U7XG4gICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICB0aGlzLl9jdXJyZW50VXJsID0gbnVsbDtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0ge307XG4gICAgdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSAwO1xuICAgIHRoaXMuYXN5bmNsaWJXYWl0TXMgPSAwO1xuICAgIHRoaXMucGFnZUxvYWRNcyA9IDYwMDA7XG4gICAgdGhpcy5sYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQgPSAwO1xuICAgIHRoaXMucmVtb3RlID0gbnVsbDtcbiAgICB0aGlzLl9jb25kaXRpb25JbmR1Y2VyU2VydmljZSA9IG51bGw7XG5cbiAgICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUgPSBuZXcgTFJVKHtcbiAgICAgIG1heDogV0VCX0VMRU1FTlRTX0NBQ0hFX1NJWkUsXG4gICAgfSk7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kcml2ZXJJbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5kcml2ZXJJbmZvID0gYXdhaXQgZ2V0RHJpdmVySW5mbygpO1xuICAgIH1cbiAgICBsZXQgc3RhdHVzID0ge2J1aWxkOiB7dmVyc2lvbjogdGhpcy5kcml2ZXJJbmZvLnZlcnNpb259fTtcbiAgICBpZiAodGhpcy5jYWNoZWRXZGFTdGF0dXMpIHtcbiAgICAgIHN0YXR1cy53ZGEgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cztcbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfVxuXG4gIG1lcmdlQ2xpQXJnc1RvT3B0cyAoKSB7XG4gICAgbGV0IGRpZE1lcmdlID0gZmFsc2U7XG4gICAgLy8gdGhpcy5jbGlBcmdzIHNob3VsZCBuZXZlciBpbmNsdWRlIGFueXRoaW5nIHdlIGRvIG5vdCBleHBlY3QuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jbGlBcmdzID8/IHt9KSkge1xuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywga2V5KSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBDTEkgYXJnICcke2tleX0nIHdpdGggdmFsdWUgJyR7dmFsdWV9JyBvdmVyd3JpdGVzIHZhbHVlICcke3RoaXMub3B0c1trZXldfScgc2VudCBpbiB2aWEgY2FwcylgKTtcbiAgICAgICAgZGlkTWVyZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRpZE1lcmdlO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YSA9IHt9OyAvLyB0aGlzIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN0YXRlIHdlIHN0YXJ0IHNvIHdoZW4gd2UgZGVsZXRlIHRoZSBzZXNzaW9uIHdlIGNhbiBwdXQgdGhpbmdzIGJhY2tcbiAgICB0cnkge1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcbiAgICAgIHRoaXMub3B0cy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG5cbiAgICAgIC8vIG1lcmdlIGNsaSBhcmdzIHRvIG9wdHMsIGFuZCBpZiB3ZSBkaWQgbWVyZ2UgYW55LCByZXZhbGlkYXRlIG9wdHMgdG8gZW5zdXJlIHRoZSBmaW5hbCBzZXRcbiAgICAgIC8vIGlzIGFsc28gY29uc2lzdGVudFxuICAgICAgaWYgKHRoaXMubWVyZ2VDbGlBcmdzVG9PcHRzKCkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZURlc2lyZWRDYXBzKHsuLi5jYXBzLCAuLi50aGlzLmNsaUFyZ3N9KTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuXG4gICAgICAvLyBtZXJnZSBzZXJ2ZXIgY2FwYWJpbGl0aWVzICsgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNhcHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2VydmVyQ2FwcywgY2Fwcyk7XG4gICAgICAvLyB1cGRhdGUgdGhlIHVkaWQgd2l0aCB3aGF0IGlzIGFjdHVhbGx5IHVzZWRcbiAgICAgIGNhcHMudWRpZCA9IHRoaXMub3B0cy51ZGlkO1xuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIG5hdGl2ZVdlYlRhcCBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbmF0aXZlV2ViVGFwJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7bmF0aXZlV2ViVGFwOiB0aGlzLm9wdHMubmF0aXZlV2ViVGFwfSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwU3RyaWN0IGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXBTdHJpY3QnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXBTdHJpY3Q6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXBTdHJpY3R9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayB1c2VKU09OU291cmNlIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICd1c2VKU09OU291cmNlJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7dXNlSlNPTlNvdXJjZTogdGhpcy5vcHRzLnVzZUpTT05Tb3VyY2V9KTtcbiAgICAgIH1cblxuICAgICAgbGV0IHdkYVNldHRpbmdzID0ge1xuICAgICAgICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiBERUZBVUxUX1NFVFRJTkdTLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMsXG4gICAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IERFRkFVTFRfU0VUVElOR1Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIH07XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcycpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMgPSB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcztcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyA9IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ21qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHknKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5ID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJGcmFtZXJhdGUnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlckZyYW1lcmF0ZSA9IHRoaXMub3B0cy5tanBlZ1NlcnZlckZyYW1lcmF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgdGhlIHF1YWxpdHkgb2YgcGhvbmUgc2NyZWVuc2hvdDogJyR7dGhpcy5vcHRzLnNjcmVlbnNob3RRdWFsaXR5fSdgKTtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgV0RBIGdldHMgb3VyIGRlZmF1bHRzIGluc3RlYWQgb2Ygd2hhdGV2ZXIgaXRzIG93biBtaWdodCBiZVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh3ZGFTZXR0aW5ncyk7XG5cbiAgICAgIC8vIHR1cm4gb24gbWpwZWcgc3RyZWFtIHJlYWRpbmcgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IFVSTCBmb3IgU2FmYXJpIGJyb3dzZXJcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgVVJMXG4gICAqL1xuICBnZXREZWZhdWx0VXJsICgpIHtcbiAgICAvLyBTZXR0aW5nIHRoaXMgdG8gc29tZSBleHRlcm5hbCBVUkwgc2xvd3MgZG93biBBcHBpdW0gc3RhcnR1cFxuICAgIHJldHVybiB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICA/IGBodHRwOi8vMTI3LjAuMC4xOiR7dGhpcy5vcHRzLndkYUxvY2FsUG9ydCB8fCA4MTAwfS9oZWFsdGhgXG4gICAgICA6IGBodHRwOi8vJHtcbiAgICAgICAgdGhpcy5vcHRzLmFkZHJlc3MuaW5jbHVkZXMoJzonKSA/IGBbJHt0aGlzLm9wdHMuYWRkcmVzc31dYCA6IHRoaXMub3B0cy5hZGRyZXNzXG4gICAgICB9OiR7dGhpcy5vcHRzLnBvcnR9L3dlbGNvbWVgO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gISF0aGlzLm9wdHMubm9SZXNldDtcbiAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gISF0aGlzLm9wdHMuZnVsbFJlc2V0O1xuXG4gICAgYXdhaXQgcHJpbnRVc2VyKCk7XG5cbiAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IG51bGw7IC8vIEZvciBXREEgYW5kIHhjb2RlYnVpbGRcbiAgICBjb25zdCB7ZGV2aWNlLCB1ZGlkLCByZWFsRGV2aWNlfSA9IGF3YWl0IHRoaXMuZGV0ZXJtaW5lRGV2aWNlKCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgRGV0ZXJtaW5pbmcgZGV2aWNlIHRvIHJ1biB0ZXN0cyBvbjogdWRpZDogJyR7dWRpZH0nLCByZWFsIGRldmljZTogJHtyZWFsRGV2aWNlfWApO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5yZWFsRGV2aWNlID0gcmVhbERldmljZTtcblxuICAgIGlmICh0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgpIHtcbiAgICAgIGlmIChyZWFsRGV2aWNlKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFRoZSAnc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgnIGNhcGFiaWxpdHkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFNpbXVsYXRvciBkZXZpY2VzYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIHNpbXVsYXRvciBkZXZpY2VzIHNldCBwYXRoIHRvICcke3RoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aH0nYCk7XG4gICAgICAgIHRoaXMub3B0cy5kZXZpY2UuZGV2aWNlc1NldFBhdGggPSB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCBpZiB0aGVyZSBpcyBubyBwbGF0Zm9ybVZlcnNpb24sIGdldCBpdCBmcm9tIHRoZSBkZXZpY2VcbiAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyBkZXZpY2UgdmVyc2lvbjogJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFZlcnNpb24gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24odGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbik7XG4gICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IG5vcm1hbGl6ZWRWZXJzaW9uKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBOb3JtYWxpemVkIHBsYXRmb3JtVmVyc2lvbiBjYXBhYmlsaXR5IHZhbHVlICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259JyB0byAnJHtub3JtYWxpemVkVmVyc2lvbn0nYCk7XG4gICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gbm9ybWFsaXplZFZlcnNpb247XG4gICAgfVxuICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICc5LjMnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGF0Zm9ybSB2ZXJzaW9uIG11c3QgYmUgOS4zIG9yIGFib3ZlLiAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMueGNvZGVWZXJzaW9uKSAmJiAoIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCB8fCAhdGhpcy5vcHRzLnJlYWxEZXZpY2UpKSB7XG4gICAgICAvLyBubyBgd2ViRHJpdmVyQWdlbnRVcmxgLCBvciBvbiBhIHNpbXVsYXRvciwgc28gd2UgbmVlZCBhbiBYY29kZSB2ZXJzaW9uXG4gICAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrWGNvZGVWZXJzaW9uKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3hjb2RlRGV0YWlsc1JldHJpZXZlZCcpO1xuXG4gICAgaWYgKF8udG9Mb3dlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpID09PSAnc2FmYXJpJykge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2FmYXJpIHRlc3QgcmVxdWVzdGVkJyk7XG4gICAgICB0aGlzLnNhZmFyaSA9IHRydWU7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMgPSB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyB8fCB7fTtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IFNBRkFSSV9CVU5ETEVfSUQ7XG4gICAgICB0aGlzLl9jdXJyZW50VXJsID0gdGhpcy5vcHRzLnNhZmFyaUluaXRpYWxVcmwgfHwgdGhpcy5nZXREZWZhdWx0VXJsKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXBwIHx8IHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVBcHAoKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwQ29uZmlndXJlZCcpO1xuXG4gICAgLy8gZmFpbCB2ZXJ5IGVhcmx5IGlmIHRoZSBhcHAgZG9lc24ndCBhY3R1YWxseSBleGlzdFxuICAgIC8vIG9yIGlmIGJ1bmRsZSBpZCBkb2Vzbid0IHBvaW50IHRvIGFuIGluc3RhbGxlZCBhcHBcbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgY2hlY2tBcHBQcmVzZW50KHRoaXMub3B0cy5hcHApO1xuXG4gICAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSBhd2FpdCBleHRyYWN0QnVuZGxlSWQodGhpcy5vcHRzLmFwcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5ydW5SZXNldCgpO1xuXG4gICAgdGhpcy53ZGEgPSBuZXcgV2ViRHJpdmVyQWdlbnQodGhpcy54Y29kZVZlcnNpb24sIHRoaXMub3B0cywgdGhpcy5sb2cpO1xuICAgIC8vIERlcml2ZWQgZGF0YSBwYXRoIHJldHJpZXZhbCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uXG4gICAgLy8gV2UgY291bGQgc3RhcnQgdGhhdCBub3cgaW4gYmFja2dyb3VuZCBhbmQgZ2V0IHRoZSBjYWNoZWQgcmVzdWx0XG4gICAgLy8gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW5cbiAgICB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpLmNhdGNoKChlKSA9PiB0aGlzLmxvZy5kZWJ1ZyhlKSk7XG5cbiAgICBjb25zdCBtZW1vaXplZExvZ0luZm8gPSBfLm1lbW9pemUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2cuaW5mbyhcIidza2lwTG9nQ2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2dzIHN1Y2ggYXMgY3Jhc2gsIHN5c3RlbSwgc2FmYXJpIGNvbnNvbGUgYW5kIHNhZmFyaSBuZXR3b3JrLlwiKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydExvZ0NhcHR1cmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNraXBMb2dDYXB0dXJlKSB7XG4gICAgICAgIG1lbW9pemVkTG9nSW5mbygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2xvZ0NhcHR1cmVTdGFydGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgaXNMb2dDYXB0dXJlU3RhcnRlZCA9IGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuXG4gICAgdGhpcy5sb2cuaW5mbyhgU2V0dGluZyB1cCAke3RoaXMuaXNSZWFsRGV2aWNlKCkgPyAncmVhbCBkZXZpY2UnIDogJ3NpbXVsYXRvcid9YCk7XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNodXRkb3duT3RoZXJTaW11bGF0b3JzKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25PdGhlclNpbXVsYXRvcnModGhpcy5vcHRzLmRldmljZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHRoZSBzaW11bGF0b3IgaXMgc3RhcnRlZFxuICAgICAgLy8gaWYgaXQgaXMgYWxyZWFkeSBydW5uaW5nLCB0aGlzIGNhcCB3b24ndCB3b3JrLCB3aGljaCBpcyBkb2N1bWVudGVkXG4gICAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMub3B0cy5zYWZhcmlHbG9iYWxQcmVmZXJlbmNlcykge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5vcHRzLmRldmljZS51cGRhdGVTYWZhcmlHbG9iYWxTZXR0aW5ncyh0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFNhZmFyaSBnbG9iYWwgcHJlZmVyZW5jZXMgdXBkYXRlZGApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9jYWxDb25maWcgPSBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMsIHRoaXMuaXNTYWZhcmkoKSwgYXN5bmMgKHNpbSkgPT4ge1xuICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcihzaW0pO1xuXG4gICAgICAgIC8vIHdlIGRvbid0IGtub3cgaWYgdGhlcmUgbmVlZHMgdG8gYmUgY2hhbmdlcyBhIHByaW9yaSwgc28gY2hhbmdlIGZpcnN0LlxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIHNodXRkb3duIHByb2Nlc3MgY2hhbmdlcyB0aGUgc2V0dGluZ3MsIHNvIHJlc2V0IHRoZW0sXG4gICAgICAgIC8vIGtub3dpbmcgdGhhdCB0aGUgc2ltIGlzIGFscmVhZHkgc2h1dFxuICAgICAgICBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyhzaW0sIHRoaXMub3B0cywgdGhpcy5pc1NhZmFyaSgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQgJiYgIShhd2FpdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpKHRoaXMub3B0cy5kZXZpY2UpKSkge1xuICAgICAgICBjb25zdCBjZXJ0SGVhZCA9IF8udHJ1bmNhdGUodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQsIHtsZW5ndGg6IDIwfSk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYEluc3RhbGxpbmcgdGhlIGN1c3RvbSBTU0wgY2VydGlmaWNhdGUgJyR7Y2VydEhlYWR9J2ApO1xuICAgICAgICBpZiAoYXdhaXQgaGFzQ2VydGlmaWNhdGVMZWdhY3kodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgU1NMIGNlcnRpZmljYXRlICcke2NlcnRIZWFkfScgYWxyZWFkeSBpbnN0YWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBNYWtpbmcgc3VyZSBTaW11bGF0b3IgaXMgc2h1dCBkb3duLCAnICtcbiAgICAgICAgICAgICdzbyB0aGF0IFNTTCBjZXJ0aWZpY2F0ZSBpbnN0YWxsYXRpb24gdGFrZXMgZWZmZWN0YCk7XG4gICAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSk7XG4gICAgICAgICAgYXdhaXQgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5KHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdjdXN0b21DZXJ0SW5zdGFsbGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRTaW0oKTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0ICYmIGF3YWl0IGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkodGhpcy5vcHRzLmRldmljZSkpIHtcbiAgICAgICAgLy8gU2ltdWxhdG9yIG11c3QgYmUgYm9vdGVkIGluIG9yZGVyIHRvIGNhbGwgdGhpcyBoZWxwZXJcbiAgICAgICAgYXdhaXQgaW5zdGFsbENlcnRpZmljYXRlKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnY3VzdG9tQ2VydEluc3RhbGxlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmxhdW5jaFdpdGhJREIgJiYgdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaWRiID0gbmV3IElEQih7dWRpZH0pO1xuICAgICAgICAgIGF3YWl0IGlkYi5jb25uZWN0KCk7XG4gICAgICAgICAgdGhpcy5vcHRzLmRldmljZS5pZGIgPSBpZGI7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBpZGIgd2lsbCBub3QgYmUgdXNlZCBmb3IgU2ltdWxhdG9yIGludGVyYWN0aW9uLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dFdmVudCgnc2ltU3RhcnRlZCcpO1xuICAgICAgaWYgKCFpc0xvZ0NhcHR1cmVTdGFydGVkKSB7XG4gICAgICAgIC8vIFJldHJ5IGxvZyBjYXB0dXJlIGlmIFNpbXVsYXRvciB3YXMgbm90IHJ1bm5pbmcgYmVmb3JlXG4gICAgICAgIGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpIHtcbiAgICAgIGF3YWl0IG5ldyBQeWlkZXZpY2UodWRpZCkuaW5zdGFsbFByb2ZpbGUoe3BheWxvYWQ6IHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0fSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbEFVVCgpO1xuICAgICAgdGhpcy5sb2dFdmVudCgnYXBwSW5zdGFsbGVkJyk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugb25seSBoYXZlIGJ1bmRsZSBpZGVudGlmaWVyIGFuZCBubyBhcHAsIGZhaWwgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkXG4gICAgaWYgKCF0aGlzLm9wdHMuYXBwICYmIHRoaXMub3B0cy5idW5kbGVJZCAmJiAhdGhpcy5pc1NhZmFyaSgpKSB7XG4gICAgICBpZiAoIWF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQodGhpcy5vcHRzLmJ1bmRsZUlkKSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBBcHAgd2l0aCBidW5kbGUgaWRlbnRpZmllciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB1bmtub3duYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5wZXJtaXNzaW9ucykge1xuICAgICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnU2V0dGluZyB0aGUgcmVxdWVzdGVkIHBlcm1pc3Npb25zIGJlZm9yZSBXREEgaXMgc3RhcnRlZCcpO1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZSh0aGlzLm9wdHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0UGVybWlzc2lvbnMoYnVuZGxlSWQsIHBlcm1pc3Npb25zTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oJ1NldHRpbmcgcGVybWlzc2lvbnMgaXMgb25seSBzdXBwb3J0ZWQgb24gU2ltdWxhdG9yLiAnICtcbiAgICAgICAgICAnVGhlIFwicGVybWlzc2lvbnNcIiBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmVuYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGlzYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdGFydFdkYSh0aGlzLm9wdHMuc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0UmVkdWNlTW90aW9uKHRoaXMub3B0cy5yZWR1Y2VNb3Rpb24pO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRJbml0aWFsT3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdvcmllbnRhdGlvblNldCcpO1xuXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aXZhdGVSZWNlbnRXZWJ2aWV3KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkpIHtcbiAgICAgIGlmICghKHRoaXMub3B0cy5zYWZhcmlJbml0aWFsVXJsID09PSAnJ1xuICAgICAgICAgIHx8ICh0aGlzLm9wdHMubm9SZXNldCAmJiBfLmlzTmlsKHRoaXMub3B0cy5zYWZhcmlJbml0aWFsVXJsKSkpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYEFib3V0IHRvIHNldCB0aGUgaW5pdGlhbCBTYWZhcmkgVVJMIHRvICcke3RoaXMuZ2V0Q3VycmVudFVybCgpfScuYCArXG4gICAgICAgICAgYFVzZSAnc2FmYXJpSW5pdGlhbFVybCcgY2FwYWJpbGl0eSBpbiBvcmRlciB0byBjdXN0b21pemUgaXRgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRVcmwodGhpcy5nZXRDdXJyZW50VXJsKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50VXJsKGF3YWl0IHRoaXMuZ2V0VXJsKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBXZWJEcml2ZXJBZ2VudFJ1bm5lclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIC0gVGhlIGlkIG9mIHRoZSB0YXJnZXQgc2Vzc2lvbiB0byBsYXVuY2ggV0RBIHdpdGguXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhbERldmljZSAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSB0ZXN0IHRhcmdldCBkZXZpY2UgaXMgYSByZWFsIGRldmljZS5cbiAgICovXG4gIGFzeW5jIHN0YXJ0V2RhIChzZXNzaW9uSWQsIHJlYWxEZXZpY2UpIHtcbiAgICAvLyBEb24ndCBjbGVhbnVwIHRoZSBwcm9jZXNzZXMgaWYgd2ViRHJpdmVyQWdlbnRVcmwgaXMgc2V0XG4gICAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgYXdhaXQgdGhpcy53ZGEuY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlUG9ydEZvcndhcmRpbmcgPSB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAmJiAhdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmxcbiAgICAgICYmIGlzTG9jYWxIb3N0KHRoaXMud2RhLndkYUJhc2VVcmwpO1xuICAgIGF3YWl0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlcXVlc3RDb25uZWN0aW9uKHRoaXMub3B0cy51ZGlkLCB0aGlzLndkYS51cmwucG9ydCwge1xuICAgICAgZGV2aWNlUG9ydDogdXNlUG9ydEZvcndhcmRpbmcgPyB0aGlzLndkYS53ZGFSZW1vdGVQb3J0IDogbnVsbCxcbiAgICAgIHVzZVBvcnRGb3J3YXJkaW5nLFxuICAgIH0pO1xuXG4gICAgLy8gTGV0IG11bHRpcGxlIFdEQSBiaW5hcmllcyB3aXRoIGRpZmZlcmVudCBkZXJpdmVkIGRhdGEgZm9sZGVycyBiZSBidWlsdCBpbiBwYXJhbGxlbFxuICAgIC8vIENvbmN1cnJlbnQgV0RBIGJ1aWxkcyBmcm9tIHRoZSBzYW1lIHNvdXJjZSB3aWxsIGNhdXNlIHhjb2RlYnVpbGQgc3luY2hyb25pemF0aW9uIGVycm9yc1xuICAgIGxldCBzeW5jaHJvbml6YXRpb25LZXkgPSBYQ1VJVGVzdERyaXZlci5uYW1lO1xuICAgIGlmICh0aGlzLm9wdHMudXNlWGN0ZXN0cnVuRmlsZSB8fCAhKGF3YWl0IHRoaXMud2RhLmlzU291cmNlRnJlc2goKSkpIHtcbiAgICAgIC8vIEZpcnN0LXRpbWUgY29tcGlsYXRpb24gaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiwgd2hpY2ggaXMgZG9uZSBmYXN0ZXIgaWYgZXhlY3V0ZWRcbiAgICAgIC8vIHNlcXVlbnRpYWxseS4gWGNvZGVidWlsZCBzcHJlYWRzIHRoZSBsb2FkIGNhdXNlZCBieSB0aGUgY2xhbmcgY29tcGlsZXIgdG8gYWxsIGF2YWlsYWJsZSBDUFUgY29yZXNcbiAgICAgIGNvbnN0IGRlcml2ZWREYXRhUGF0aCA9IGF3YWl0IHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gICAgICBpZiAoZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICAgIHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKGRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBTdGFydGluZyBXZWJEcml2ZXJBZ2VudCBpbml0aWFsaXphdGlvbiB3aXRoIHRoZSBzeW5jaHJvbml6YXRpb24ga2V5ICcke3N5bmNocm9uaXphdGlvbktleX0nYCk7XG4gICAgaWYgKFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuaXNCdXN5KCkgJiYgIXRoaXMub3B0cy5kZXJpdmVkRGF0YVBhdGggJiYgIXRoaXMub3B0cy5ib290c3RyYXBQYXRoKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29uc2lkZXIgc2V0dGluZyBhIHVuaXF1ZSAnZGVyaXZlZERhdGFQYXRoJyBjYXBhYmlsaXR5IHZhbHVlIGZvciBlYWNoIHBhcmFsbGVsIGRyaXZlciBpbnN0YW5jZSBgICtcbiAgICAgICAgYHRvIGF2b2lkIGNvbmZsaWN0cyBhbmQgc3BlZWQgdXAgdGhlIGJ1aWxkaW5nIHByb2Nlc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDYXBhYmlsaXR5ICd1c2VOZXdXREEnIHNldCB0byB0cnVlLCBzbyB1bmluc3RhbGxpbmcgV0RBIGJlZm9yZSBwcm9jZWVkaW5nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXRBbmRVbmluc3RhbGwoKTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhVW5pbnN0YWxsZWQnKTtcbiAgICAgIH0gZWxzZSBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnNldHVwQ2FjaGluZygpO1xuICAgICAgfVxuXG4gICAgICAvLyBsb2NhbCBoZWxwZXIgZm9yIHRoZSB0d28gcGxhY2VzIHdlIG5lZWQgdG8gdW5pbnN0YWxsIHdkYSBhbmQgcmUtc3RhcnQgaXRcbiAgICAgIGNvbnN0IHF1aXRBbmRVbmluc3RhbGwgPSBhc3luYyAobXNnKSA9PiB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKG1zZyk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnTm90IHF1aXR0aW5nL3VuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCBzaW5jZSB3ZWJEcml2ZXJBZ2VudFVybCBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2cud2FybignUXVpdHRpbmcgYW5kIHVuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCcpO1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0QW5kVW5pbnN0YWxsKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9O1xuXG4gICAgICAvLyBVc2VkIGluIHRoZSBmb2xsb3dpbmcgV0RBIGJ1aWxkXG4gICAgICBpZiAodGhpcy5vcHRzLnJlc3VsdEJ1bmRsZVBhdGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVGZWF0dXJlRW5hYmxlZChDVVNUT01JWkVfUkVTVUxUX0JVTkRQRV9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnR1cFJldHJpZXMgPSB0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJpZXMgfHwgKHRoaXMuaXNSZWFsRGV2aWNlKCkgPyBXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTIDogV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMpO1xuICAgICAgY29uc3Qgc3RhcnR1cFJldHJ5SW50ZXJ2YWwgPSB0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwgfHwgV0RBX1NUQVJUVVBfUkVUUllfSU5URVJWQUw7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVHJ5aW5nIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50ICR7c3RhcnR1cFJldHJpZXN9IHRpbWVzIHdpdGggJHtzdGFydHVwUmV0cnlJbnRlcnZhbH1tcyBpbnRlcnZhbGApO1xuICAgICAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cmllcykgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsKSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlc2UgdmFsdWVzIGNhbiBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHdkYVN0YXJ0dXBSZXRyaWVzL3dkYVN0YXJ0dXBSZXRyeUludGVydmFsIGNhcGFiaWxpdGllc2ApO1xuICAgICAgfVxuICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbChzdGFydHVwUmV0cmllcywgc3RhcnR1cFJldHJ5SW50ZXJ2YWwsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRBdHRlbXB0ZWQnKTtcbiAgICAgICAgaWYgKHJldHJ5Q291bnQgPiAwKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgUmV0cnlpbmcgV0RBIHN0YXJ0dXAgKCR7cmV0cnlDb3VudCArIDF9IG9mICR7c3RhcnR1cFJldHJpZXN9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gb24geGNvZGUgMTAgaW5zdGFsbGQgd2lsbCBvZnRlbiB0cnkgdG8gYWNjZXNzIHRoZSBhcHAgZnJvbSBpdHMgc3RhZ2luZ1xuICAgICAgICAgIC8vIGRpcmVjdG9yeSBiZWZvcmUgZnVsbHkgbW92aW5nIGl0IHRoZXJlLCBhbmQgZmFpbC4gUmV0cnlpbmcgb25jZVxuICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGhlbHBzXG4gICAgICAgICAgY29uc3QgcmV0cmllcyA9IHRoaXMueGNvZGVWZXJzaW9uLm1ham9yID49IDEwID8gMiA6IDE7XG4gICAgICAgICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBhd2FpdCByZXRyeShyZXRyaWVzLCB0aGlzLndkYS5sYXVuY2guYmluZCh0aGlzLndkYSksIHNlc3Npb25JZCwgcmVhbERldmljZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0RmFpbGVkJyk7XG4gICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICAgIGxldCBlcnJvck1zZyA9IGBVbmFibGUgdG8gbGF1bmNoIFdlYkRyaXZlckFnZW50IGJlY2F1c2Ugb2YgeGNvZGVidWlsZCBmYWlsdXJlOiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIGVycm9yTXNnICs9IGAuIE1ha2Ugc3VyZSB5b3UgZm9sbG93IHRoZSB0dXRvcmlhbCBhdCAke1dEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkx9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUcnkgdG8gcmVtb3ZlIHRoZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCByZWJvb3QgdGhlIGRldmljZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBxdWl0QW5kVW5pbnN0YWxsKGVycm9yTXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLndkYS5wcm94eVJlcVJlcy5iaW5kKHRoaXMud2RhKTtcbiAgICAgICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgbGV0IG9yaWdpbmFsU3RhY2t0cmFjZSA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgxNSwgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvbkF0dGVtcHRlZCcpO1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoJ1NlbmRpbmcgY3JlYXRlU2Vzc2lvbiBjb21tYW5kIHRvIFdEQScpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cyB8fCBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFdkYVNlc3Npb24odGhpcy5vcHRzLmJ1bmRsZUlkLCB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxTdGFja3RyYWNlID0gZXJyLnN0YWNrO1xuICAgICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgRmFpbGVkIHRvIGNyZWF0ZSBXREEgc2Vzc2lvbiAoJHtlcnIubWVzc2FnZX0pLiBSZXRyeWluZy4uLmApO1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvblN0YXJ0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKG9yaWdpbmFsU3RhY2t0cmFjZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcob3JpZ2luYWxTdGFja3RyYWNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGVycm9yTXNnID0gYFVuYWJsZSB0byBzdGFydCBXZWJEcml2ZXJBZ2VudCBzZXNzaW9uIGJlY2F1c2Ugb2YgeGNvZGVidWlsZCBmYWlsdXJlOiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIGVycm9yTXNnICs9IGAgTWFrZSBzdXJlIHlvdSBmb2xsb3cgdGhlIHR1dG9yaWFsIGF0ICR7V0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTH0uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFRyeSB0byByZW1vdmUgdGhlIFdlYkRyaXZlckFnZW50UnVubmVyIGFwcGxpY2F0aW9uIGZyb20gdGhlIGRldmljZSBpZiBpdCBpcyBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgYW5kIHJlYm9vdCB0aGUgZGV2aWNlLmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHF1aXRBbmRVbmluc3RhbGwoZXJyb3JNc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5jbGVhclN5c3RlbUZpbGVzICYmICF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgICBhd2FpdCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwKHRoaXMud2RhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIGV4cGVjdCBjZXJ0YWluIHNvY2tldCBlcnJvcnMgdW50aWwgdGhpcyBwb2ludCwgYnV0IG5vd1xuICAgICAgICAvLyBtYXJrIHRoaW5ncyBhcyBmdWxseSB3b3JraW5nXG4gICAgICAgIHRoaXMud2RhLmZ1bGx5U3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0ZWQnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcnVuUmVzZXQgKG9wdHMgPSBudWxsKSB7XG4gICAgdGhpcy5sb2dFdmVudCgncmVzZXRTdGFydGVkJyk7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGF3YWl0IHJ1blJlYWxEZXZpY2VSZXNldCh0aGlzLm9wdHMuZGV2aWNlLCBvcHRzIHx8IHRoaXMub3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHJ1blNpbXVsYXRvclJlc2V0KHRoaXMub3B0cy5kZXZpY2UsIG9wdHMgfHwgdGhpcy5vcHRzKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgncmVzZXRDb21wbGV0ZScpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgYXdhaXQgcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlY29yZGVyIG9mIF8uY29tcGFjdChbXG4gICAgICB0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlciwgdGhpcy5fYXVkaW9SZWNvcmRlciwgdGhpcy5fdHJhZmZpY0NhcHR1cmVcbiAgICBdKSkge1xuICAgICAgYXdhaXQgcmVjb3JkZXIuaW50ZXJydXB0KHRydWUpO1xuICAgICAgYXdhaXQgcmVjb3JkZXIuY2xlYW51cCgpO1xuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3BlcmZSZWNvcmRlcnMpKSB7XG4gICAgICBhd2FpdCBCLmFsbCh0aGlzLl9wZXJmUmVjb3JkZXJzLm1hcCgoeCkgPT4geC5zdG9wKHRydWUpKSk7XG4gICAgICB0aGlzLl9wZXJmUmVjb3JkZXJzID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmRpdGlvbkluZHVjZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLm1vYmlsZURpc2FibGVDb25kaXRpb25JbmR1Y2VyKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdG9wKCk7XG5cbiAgICBpZiAodGhpcy53ZGEgJiYgIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5jbGVhclN5c3RlbUZpbGVzKSB7XG4gICAgICAgIGxldCBzeW5jaHJvbml6YXRpb25LZXkgPSBYQ1VJVGVzdERyaXZlci5uYW1lO1xuICAgICAgICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICAgICAgICBpZiAoZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICAgICAgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUoZGVyaXZlZERhdGFQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgY2xlYXJTeXN0ZW1GaWxlcyh0aGlzLndkYSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ05vdCBjbGVhcmluZyBsb2cgZmlsZXMuIFVzZSBgY2xlYXJTeXN0ZW1GaWxlc2AgY2FwYWJpbGl0eSB0byB0dXJuIG9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbW90ZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0ZvdW5kIGEgcmVtb3RlIGRlYnVnZ2VyIHNlc3Npb24uIFJlbW92aW5nLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3BSZW1vdGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5ID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtcbiAgICAgICAgZW5mb3JjZVNpbXVsYXRvclNodXRkb3duOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkgJiYgIXRoaXMub3B0cy5ub1Jlc2V0ICYmICEhdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgaWYgKHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0pIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYERlbGV0aW5nIHNpbXVsYXRvciBjcmVhdGVkIGZvciB0aGlzIHJ1biAodWRpZDogJyR7dGhpcy5vcHRzLnVkaWR9JylgKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSk7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGVsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlID0gdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiAhIXRoaXMub3B0cy5yZXNldExvY2F0aW9uU2VydmljZTtcbiAgICBpZiAoc2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLm1vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlKCk7XG4gICAgICB9IGNhdGNoIChpZ25vcmUpIHsgLyogSWdub3JlIHRoaXMgZXJyb3Igc2luY2UgbW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UgYWxyZWFkeSBsb2dnZWQgdGhlIGVycm9yICovIH1cbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmxvZ3MpKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvZ3Muc3lzbG9nLnN0b3BDYXB0dXJlKCk7XG4gICAgICB0aGlzLmxvZ3MgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tanBlZ1N0cmVhbSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnQ2xvc2luZyBNSlBFRyBzdHJlYW0nKTtcbiAgICAgIHRoaXMubWpwZWdTdHJlYW0uc3RvcCgpO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRJb3MoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcblxuXG4gICAgaWYgKHRoaXMud2RhICYmIHRoaXMud2RhLmZ1bGx5U3RhcnRlZCkge1xuICAgICAgaWYgKHRoaXMud2RhLmp3cHJveHkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3Nlc3Npb24vJHt0aGlzLnNlc3Npb25JZH1gLCAnREVMRVRFJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIGFuIGVycm9yIGhlcmUgc2hvdWxkIG5vdCBzaG9ydC1jaXJjdWl0IHRoZSByZXN0IG9mIGNsZWFuIHVwXG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFVuYWJsZSB0byBERUxFVEUgc2Vzc2lvbiBvbiBXREE6ICcke2Vyci5tZXNzYWdlfScuIENvbnRpbnVpbmcgc2h1dGRvd24uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwgJiYgdGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVsZWFzZUNvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIHRoaXMubG9nLmRlYnVnKGBFeGVjdXRpbmcgY29tbWFuZCAnJHtjbWR9J2ApO1xuXG4gICAgaWYgKGNtZCA9PT0gJ3JlY2VpdmVBc3luY1Jlc3BvbnNlJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVjZWl2ZUFzeW5jUmVzcG9uc2UoLi4uYXJncyk7XG4gICAgfVxuICAgIC8vIFRPRE86IG9uY2UgdGhpcyBmaXggZ2V0cyBpbnRvIGJhc2UgZHJpdmVyIHJlbW92ZSBmcm9tIGhlcmVcbiAgICBpZiAoY21kID09PSAnZ2V0U3RhdHVzJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5leGVjdXRlQ29tbWFuZChjbWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgY29uZmlndXJlQXBwICgpIHtcbiAgICBmdW5jdGlvbiBhcHBJc1BhY2thZ2VPckJ1bmRsZSAoYXBwKSB7XG4gICAgICByZXR1cm4gKC9eKFthLXpBLVowLTlcXC1fXStcXC5bYS16QS1aMC05XFwtX10rKSskLykudGVzdChhcHApO1xuICAgIH1cblxuICAgIC8vIHRoZSBhcHAgbmFtZSBpcyBhIGJ1bmRsZUlkIGFzc2lnbiBpdCB0byB0aGUgYnVuZGxlSWQgcHJvcGVydHlcbiAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gdGhpcy5vcHRzLmFwcDtcbiAgICAgIHRoaXMub3B0cy5hcHAgPSAnJztcbiAgICB9XG4gICAgLy8gd2UgaGF2ZSBhIGJ1bmRsZSBJRCwgYnV0IG5vIGFwcCwgb3IgYXBwIGlzIGFsc28gYSBidW5kbGVcbiAgICBpZiAoKHRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYnVuZGxlSWQpKSAmJlxuICAgICAgICAodGhpcy5vcHRzLmFwcCA9PT0gJycgfHwgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnQXBwIGlzIGFuIGlPUyBidW5kbGUsIHdpbGwgYXR0ZW1wdCB0byBydW4gYXMgcHJlLWV4aXN0aW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHN1cHBvcnRlZCBidWlsZC1pbiBhcHBzXG4gICAgc3dpdGNoIChfLnRvTG93ZXIodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gJ2NvbS5hcHBsZS5QcmVmZXJlbmNlcyc7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdjYWxlbmRhcic6XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9ICdjb20uYXBwbGUubW9iaWxlY2FsJztcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCB7XG4gICAgICBvblBvc3RQcm9jZXNzOiB0aGlzLm9uUG9zdENvbmZpZ3VyZUFwcC5iaW5kKHRoaXMpLFxuICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogU1VQUE9SVEVEX0VYVEVOU0lPTlNcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnppcCB0aGUgZ2l2ZW4gYXJjaGl2ZSBhbmQgZmluZCBhIG1hdGNoaW5nIC5hcHAgYnVuZGxlIGluIGl0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIFRoZSBwYXRoIHRvIHRoZSBhcmNoaXZlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVwdGggWzBdIHRoZSBjdXJyZW50IG5lc3RpbmcgZGVwdGguIEFwcCBidW5kbGVzIHdob3NlIG5lc3RpbmcgbGV2ZWxcbiAgICogaXMgZ3JlYXRlciB0aGFuIDEgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEZ1bGwgcGF0aCB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgLmFwcCBidW5kbGUuLlxuICAgKiBAdGhyb3dzIElmIG5vIG1hdGNoaW5nIC5hcHAgYnVuZGxlcyB3ZXJlIGZvdW5kIGluIHRoZSBwcm92aWRlZCBhcmNoaXZlLlxuICAgKi9cbiAgYXN5bmMgdW56aXBBcHAgKGFwcFBhdGgsIGRlcHRoID0gMCkge1xuICAgIGlmIChkZXB0aCA+IE1BWF9BUkNISVZFX1NDQU5fREVQVEgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmVzdGluZyBvZiBwYWNrYWdlIGJ1bmRsZXMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgICBjb25zdCBbcm9vdERpciwgbWF0Y2hlZFBhdGhzXSA9IGF3YWl0IGZpbmRBcHBzKGFwcFBhdGgsIFNVUFBPUlRFRF9FWFRFTlNJT05TKTtcbiAgICBpZiAoXy5pc0VtcHR5KG1hdGNoZWRQYXRocykpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGAnJHtwYXRoLmJhc2VuYW1lKGFwcFBhdGgpfScgaGFzIG5vIGJ1bmRsZXNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICAgIGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdidW5kbGUnLCBtYXRjaGVkUGF0aHMubGVuZ3RoLCB0cnVlKX0gaW4gYCArXG4gICAgICAgIGAnJHtwYXRoLmJhc2VuYW1lKGFwcFBhdGgpfSc6ICR7bWF0Y2hlZFBhdGhzfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IG1hdGNoZWRQYXRoIG9mIG1hdGNoZWRQYXRocykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihyb290RGlyLCBtYXRjaGVkUGF0aCk7XG4gICAgICAgIGlmIChhd2FpdCBpc0FwcEJ1bmRsZShmdWxsUGF0aCkpIHtcbiAgICAgICAgICBjb25zdCBzdXBwb3J0ZWRQbGF0Zm9ybXMgPSBhd2FpdCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyhmdWxsUGF0aCk7XG4gICAgICAgICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSAmJiAhc3VwcG9ydGVkUGxhdGZvcm1zLnNvbWUoKHApID0+IF8uaW5jbHVkZXMocCwgJ1NpbXVsYXRvcicpKSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuaW5mbyhgJyR7bWF0Y2hlZFBhdGh9JyBkb2VzIG5vdCBoYXZlIFNpbXVsYXRvciBkZXZpY2VzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBwbGF0Zm9ybXMgYCArXG4gICAgICAgICAgICAgIGAoJHtzdXBwb3J0ZWRQbGF0Zm9ybXMuam9pbignLCcpfSkuIFNraXBwaW5nIGl0YCk7O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpICYmICFzdXBwb3J0ZWRQbGF0Zm9ybXMuc29tZSgocCkgPT4gXy5pbmNsdWRlcyhwLCAnT1MnKSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLmluZm8oYCcke21hdGNoZWRQYXRofScgZG9lcyBub3QgaGF2ZSByZWFsIGRldmljZXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHBsYXRmb3JtcyBgICtcbiAgICAgICAgICAgICAgYCgke3N1cHBvcnRlZFBsYXRmb3Jtcy5qb2luKCcsJyl9KS4gU2tpcHBpbmcgaXRgKTs7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgJyR7bWF0Y2hlZFBhdGh9JyBpcyB0aGUgcmVzdWx0aW5nIGFwcGxpY2F0aW9uIGJ1bmRsZSBzZWxlY3RlZCBmcm9tICcke2FwcFBhdGh9J2ApO1xuICAgICAgICAgIHJldHVybiBhd2FpdCBpc29sYXRlQXBwQnVuZGxlKGZ1bGxQYXRoKTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmVuZHNXaXRoKF8udG9Mb3dlcihmdWxsUGF0aCksIElQQV9FWFQpICYmIChhd2FpdCBmcy5zdGF0KGZ1bGxQYXRoKSkuaXNGaWxlKCkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW56aXBBcHAoZnVsbFBhdGgsIGRlcHRoICsgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cud2FybihgU2tpcHBpbmcgcHJvY2Vzc2luZyBvZiAnJHttYXRjaGVkUGF0aH0nOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHJvb3REaXIpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5vcHRzLmFwcH0gZGlkIG5vdCBoYXZlIGFueSBtYXRjaGluZyAke0FQUF9FWFR9IG9yICR7SVBBX0VYVH0gYCArXG4gICAgICBgYnVuZGxlcy4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgcGFja2FnZSBpcyB2YWxpZCBhbmQgY29udGFpbnMgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGAgK1xuICAgICAgYGFwcGxpY2F0aW9uIGJ1bmRsZSB3aGljaCBpcyBub3QgbmVzdGVkLmBcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgb25Qb3N0Q29uZmlndXJlQXBwICh7Y2FjaGVkQXBwSW5mbywgaXNVcmwsIGFwcFBhdGh9KSB7XG4gICAgLy8gUGljayB0aGUgcHJldmlvdXNseSBjYWNoZWQgZW50cnkgaWYgaXRzIGludGVncml0eSBoYXMgYmVlbiBwcmVzZXJ2ZWRcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGNhY2hlZEFwcEluZm8pXG4gICAgICAgICYmIChhd2FpdCBmcy5zdGF0KGFwcFBhdGgpKS5pc0ZpbGUoKVxuICAgICAgICAmJiBhd2FpdCBmcy5oYXNoKGFwcFBhdGgpID09PSBjYWNoZWRBcHBJbmZvLnBhY2thZ2VIYXNoXG4gICAgICAgICYmIGF3YWl0IGZzLmV4aXN0cyhjYWNoZWRBcHBJbmZvLmZ1bGxQYXRoKVxuICAgICAgICAmJiAoYXdhaXQgZnMuZ2xvYignKiovKicsIHtcbiAgICAgICAgICBjd2Q6IGNhY2hlZEFwcEluZm8uZnVsbFBhdGgsIHN0cmljdDogZmFsc2UsIG5vc29ydDogdHJ1ZVxuICAgICAgICB9KSkubGVuZ3RoID09PSBjYWNoZWRBcHBJbmZvLmludGVncml0eS5mb2xkZXIpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFVzaW5nICcke2NhY2hlZEFwcEluZm8uZnVsbFBhdGh9JyB3aGljaCB3YXMgY2FjaGVkIGZyb20gJyR7YXBwUGF0aH0nYCk7XG4gICAgICByZXR1cm4ge2FwcFBhdGg6IGNhY2hlZEFwcEluZm8uZnVsbFBhdGh9O1xuICAgIH1cblxuICAgIC8vIE9ubHkgbG9jYWwgLmFwcCBidW5kbGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbi1wbGFjZSBzaG91bGQgbm90IGJlIGNhY2hlZFxuICAgIGlmIChhd2FpdCBpc0FwcEJ1bmRsZShhcHBQYXRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgdGhlIGFwcCBidW5kbGUgYW5kIGNhY2hlIGl0XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7YXBwUGF0aDogYXdhaXQgdGhpcy51bnppcEFwcChhcHBQYXRoKX07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENsZWFudXAgcHJldmlvdXNseSBkb3dubG9hZGVkIGFyY2hpdmVcbiAgICAgIGlmIChpc1VybCkge1xuICAgICAgICBhd2FpdCBmcy5yaW1yYWYoYXBwUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGV2aWNlICgpIHtcbiAgICAvLyBpbiB0aGUgb25lIGNhc2Ugd2hlcmUgd2UgY3JlYXRlIGEgc2ltLCB3ZSB3aWxsIHNldCB0aGlzIHN0YXRlXG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IGZhbHNlO1xuXG4gICAgLy8gaWYgd2UgZ2V0IGdlbmVyaWMgbmFtZXMsIHRyYW5zbGF0ZSB0aGVtXG4gICAgdGhpcy5vcHRzLmRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sIHRoaXMub3B0cy5kZXZpY2VOYW1lKTtcblxuICAgIGNvbnN0IHNldHVwVmVyc2lvbkNhcHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbigpO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgaU9TIFNESyBWZXJzaW9uIHNldCB0byAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nYCk7XG4gICAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIFhjb2RlIHN1cHBvcnRzOiAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nLiBgICtcbiAgICAgICAgICBgVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgaWYgYSBzaW11bGF0b3IgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgcGxhdGZvcm0gdmVyc2lvbi5gKTtcbiAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbih0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdHMudWRpZCkge1xuICAgICAgaWYgKHRoaXMub3B0cy51ZGlkLnRvTG93ZXJDYXNlKCkgPT09ICdhdXRvJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gYXdhaXQgZGV0ZWN0VWRpZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBUcnlpbmcgdG8gZmluZCBtYXRjaGluZyBVRElEIGZvciBTaW11bGF0b3JcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgZGV0ZWN0IGFueSBjb25uZWN0ZWQgcmVhbCBkZXZpY2VzLiBGYWxsaW5nIGJhY2sgdG8gU2ltdWxhdG9yLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuICAgICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICAvLyBObyBtYXRjaGluZyBTaW11bGF0b3IgaXMgZm91bmQuIFRocm93IGFuIGVycm9yXG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZGV0ZWN0IHVkaWQgZm9yICR7dGhpcy5vcHRzLmRldmljZU5hbWV9IFNpbXVsYXRvciBydW5uaW5nIGlPUyAke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWF0Y2hpbmcgU2ltdWxhdG9yIGV4aXN0cyBhbmQgaXMgZm91bmQuIFVzZSBpdFxuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICAgICAgY29uc3QgZGV2aWNlUGxhdGZvcm0gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24oYXdhaXQgZGV2aWNlLmdldFBsYXRmb3JtVmVyc2lvbigpKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAhPT0gZGV2aWNlUGxhdGZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBkZXZpY2VQbGF0Zm9ybTtcbiAgICAgICAgICAgIHRoaXMubG9nLmluZm8oYFNldCBwbGF0Zm9ybVZlcnNpb24gdG8gJyR7ZGV2aWNlUGxhdGZvcm19JyB0byBtYXRjaCB0aGUgZGV2aWNlIHdpdGggZ2l2ZW4gVURJRGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyBhIGNvbm5lY3RlZCBkZXZpY2UuIElmIG5vdCwgdGhlIHVkaWQgcGFzc2VkIGluIGlzIGludmFsaWRcbiAgICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IGdldENvbm5lY3RlZERldmljZXMoKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYEF2YWlsYWJsZSBkZXZpY2VzOiAke2RldmljZXMuam9pbignLCAnKX1gKTtcbiAgICAgICAgaWYgKCFkZXZpY2VzLmluY2x1ZGVzKHRoaXMub3B0cy51ZGlkKSkge1xuICAgICAgICAgIC8vIGNoZWNrIGZvciBhIHBhcnRpY3VsYXIgc2ltdWxhdG9yXG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYE5vIHJlYWwgZGV2aWNlIHdpdGggdWRpZCAnJHt0aGlzLm9wdHMudWRpZH0nLiBMb29raW5nIGZvciBzaW11bGF0b3JgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0U2ltdWxhdG9yKHRoaXMub3B0cy51ZGlkLCB7XG4gICAgICAgICAgICAgIGRldmljZXNTZXRQYXRoOiB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogdGhpcy5vcHRzLnVkaWR9O1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRldmljZSBvciBzaW11bGF0b3IgVURJRDogJyR7dGhpcy5vcHRzLnVkaWR9J2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRSZWFsRGV2aWNlT2JqKHRoaXMub3B0cy51ZGlkKTtcbiAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiB0cnVlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGtub3cgZm9yIHN1cmUgdGhlIGRldmljZSB3aWxsIGJlIGEgU2ltdWxhdG9yXG4gICAgYXdhaXQgc2V0dXBWZXJzaW9uQ2FwcygpO1xuICAgIGlmICh0aGlzLm9wdHMuZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBOZXcgc2ltdWxhdG9yIGlzIHJlcXVlc3RlZC4gSWYgdGhpcyBpcyBub3Qgd2FudGVkLCBzZXQgJ2VuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uJyBjYXBhYmlsaXR5IHRvIGZhbHNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3Qgc2ltdWxhdG9yIHRvIHVzZSwgZ2l2ZW4gdGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuXG4gICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3Rpbmcgc2ltdWxhdG9yXG4gICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5pbmZvKCdTaW11bGF0b3IgdWRpZCBub3QgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBubyBkZXZpY2Ugb2YgdGhpcyB0eXBlIGV4aXN0cywgb3IgdGhleSByZXF1ZXN0IG5ldyBzaW0sIHNvIGNyZWF0ZSBvbmVcbiAgICB0aGlzLmxvZy5pbmZvKCdVc2luZyBkZXNpcmVkIGNhcHMgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvcicpO1xuICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMuY3JlYXRlU2ltKCk7XG4gICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gIH1cblxuICBhc3luYyBzdGFydFNpbSAoKSB7XG4gICAgY29uc3QgcnVuT3B0cyA9IHtcbiAgICAgIHNjYWxlRmFjdG9yOiB0aGlzLm9wdHMuc2NhbGVGYWN0b3IsXG4gICAgICBjb25uZWN0SGFyZHdhcmVLZXlib2FyZDogISF0aGlzLm9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQsXG4gICAgICBwYXN0ZWJvYXJkQXV0b21hdGljU3luYzogdGhpcy5vcHRzLnNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jID8/ICdvZmYnLFxuICAgICAgaXNIZWFkbGVzczogISF0aGlzLm9wdHMuaXNIZWFkbGVzcyxcbiAgICAgIHRyYWNlUG9pbnRlcjogdGhpcy5vcHRzLnNpbXVsYXRvclRyYWNlUG9pbnRlcixcbiAgICAgIGRldmljZVByZWZlcmVuY2VzOiB7fSxcbiAgICB9O1xuXG4gICAgLy8gYWRkIHRoZSB3aW5kb3cgY2VudGVyLCBpZiBpdCBpcyBzcGVjaWZpZWRcbiAgICBpZiAodGhpcy5vcHRzLlNpbXVsYXRvcldpbmRvd0NlbnRlcikge1xuICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dDZW50ZXIgPSB0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyO1xuICAgIH1cblxuICAgIGlmIChfLmlzSW50ZWdlcih0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQpKSB7XG4gICAgICBydW5PcHRzLnN0YXJ0dXBUaW1lb3V0ID0gdGhpcy5vcHRzLnNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0O1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgdG8gd29ya2Fyb3VuZCBYQ1Rlc3QgYnVnIGFib3V0IGNoYW5naW5nIFNpbXVsYXRvclxuICAgIC8vIG9yaWVudGF0aW9uIGlzIG5vdCBzeW5jaHJvbml6ZWQgdG8gdGhlIGFjdHVhbCB3aW5kb3cgb3JpZW50YXRpb25cbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IF8uaXNTdHJpbmcodGhpcy5vcHRzLm9yaWVudGF0aW9uKSAmJiB0aGlzLm9wdHMub3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gICAgICBjYXNlICdMQU5EU0NBUEUnOlxuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uID0gJ0xhbmRzY2FwZUxlZnQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSA5MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdQT1JUUkFJVCc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnUG9ydHJhaXQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJ1bihydW5PcHRzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNpbSAoKSB7XG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IHRydWU7XG5cbiAgICAvLyBHZXQgcGxhdGZvcm0gbmFtZSBmcm9tIGNvbnN0IHNpbmNlIGl0IG11c3QgYmUgY2FzZSBzZW5zaXRpdmUgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvclxuICAgIGNvbnN0IHBsYXRmb3JtTmFtZSA9IHRoaXMuaXNUdk9TKCkgPyBQTEFURk9STV9OQU1FX1RWT1MgOiBQTEFURk9STV9OQU1FX0lPUztcblxuICAgIC8vIGNyZWF0ZSBzaW0gZm9yIGNhcHNcbiAgICBjb25zdCBzaW0gPSBhd2FpdCBjcmVhdGVTaW0odGhpcy5vcHRzLCBwbGF0Zm9ybU5hbWUpO1xuICAgIHRoaXMubG9nLmluZm8oYENyZWF0ZWQgc2ltdWxhdG9yIHdpdGggdWRpZCAnJHtzaW0udWRpZH0nLmApO1xuXG4gICAgcmV0dXJuIHNpbTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaEFwcCAoKSB7XG4gICAgY29uc3QgQVBQX0xBVU5DSF9USU1FT1VUID0gMjAgKiAxMDAwO1xuXG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoQXR0ZW1wdGVkJyk7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGwubGF1bmNoQXBwKHRoaXMub3B0cy5idW5kbGVJZCk7XG5cbiAgICBsZXQgY2hlY2tTdGF0dXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGxldCBjdXJyZW50QXBwID0gcmVzcG9uc2UuY3VycmVudEFwcC5idW5kbGVJRDtcbiAgICAgIGlmIChjdXJyZW50QXBwICE9PSB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMub3B0cy5idW5kbGVJZH0gbm90IGluIGZvcmVncm91bmQuICR7Y3VycmVudEFwcH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmxvZy5pbmZvKGBXYWl0aW5nIGZvciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB0byBiZSBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgbGV0IHJldHJpZXMgPSBwYXJzZUludChBUFBfTEFVTkNIX1RJTUVPVVQgLyAyMDAsIDEwKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIDIwMCwgY2hlY2tTdGF0dXMpO1xuICAgIHRoaXMubG9nLmluZm8oYCR7dGhpcy5vcHRzLmJ1bmRsZUlkfSBpcyBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoZWQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2RhU2Vzc2lvbiAoYnVuZGxlSWQsIHByb2Nlc3NBcmd1bWVudHMpIHtcbiAgICBjb25zdCBhcmdzID0gcHJvY2Vzc0FyZ3VtZW50cyA/IChwcm9jZXNzQXJndW1lbnRzLmFyZ3MgfHwgW10pIDogW107XG4gICAgaWYgKCFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5hcmdzIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShhcmdzKX0gaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICBjb25zdCBlbnYgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuZW52IHx8IHt9KSA6IHt9O1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGVudikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5lbnYgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhIGRpY3Rpb25hcnkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShlbnYpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxhbmd1YWdlKSkge1xuICAgICAgYXJncy5wdXNoKCctQXBwbGVMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICAgIGFyZ3MucHVzaCgnLU5TTGFuZ3VhZ2VzJywgYCgke3RoaXMub3B0cy5sYW5ndWFnZX0pYCk7XG4gICAgfVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5sb2NhbGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxvY2FsZScsIHRoaXMub3B0cy5sb2NhbGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCkpIHtcbiAgICAgICAgdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoKSkge1xuICAgICAgICB0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2ggPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3ZGFDYXBzID0ge1xuICAgICAgYnVuZGxlSWQ6IHRoaXMub3B0cy5hdXRvTGF1bmNoID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGJ1bmRsZUlkLFxuICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgICAgZW52aXJvbm1lbnQ6IGVudixcbiAgICAgIGV2ZW50bG9vcElkbGVEZWxheVNlYzogdGhpcy5vcHRzLndkYUV2ZW50bG9vcElkbGVEZWxheSA/PyAwLFxuICAgICAgc2hvdWxkV2FpdEZvclF1aWVzY2VuY2U6IHRoaXMub3B0cy53YWl0Rm9yUXVpZXNjZW5jZSA/PyB0cnVlLFxuICAgICAgc2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uOiB0aGlzLm9wdHMuc2ltcGxlSXNWaXNpYmxlQ2hlY2sgPz8gZmFsc2UsXG4gICAgICBtYXhUeXBpbmdGcmVxdWVuY3k6IHRoaXMub3B0cy5tYXhUeXBpbmdGcmVxdWVuY3kgPz8gNjAsXG4gICAgICBzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlcjogdGhpcy5vcHRzLnNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyID8/IHRydWUsXG4gICAgICB3YWl0Rm9ySWRsZVRpbWVvdXQ6IHRoaXMub3B0cy53YWl0Rm9ySWRsZVRpbWVvdXQsXG4gICAgICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiB0aGlzLm9wdHMuc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIGVsZW1lbnRSZXNwb25zZUZpZWxkczogdGhpcy5vcHRzLmVsZW1lbnRSZXNwb25zZUZpZWxkcyxcbiAgICAgIGRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90czogdGhpcy5vcHRzLmRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyxcbiAgICAgIHNob3VsZFRlcm1pbmF0ZUFwcDogdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA/PyB0cnVlLFxuICAgICAgZm9yY2VBcHBMYXVuY2g6IHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCA/PyB0cnVlLFxuICAgICAgdXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5OiB0aGlzLm9wdHMudXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5ID8/IHRydWUsXG4gICAgICBmb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZTogdGhpcy5vcHRzLmZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlXG4gICAgICAgID8/ICh0aGlzLm9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQgPT09IHRydWUgPyBmYWxzZSA6IHRydWUpLFxuICAgIH07XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvQWNjZXB0QWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdhY2NlcHQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmF1dG9EaXNtaXNzQWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdkaXNtaXNzJztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbd2RhQ2Fwc10sXG4gICAgICAgIGFsd2F5c01hdGNoOiB7fSxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIFByb3h5IG1ldGhvZHMgZnJvbSBCYXNlRHJpdmVyXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgpIHtcbiAgICBpZiAodGhpcy5pc1dlYnZpZXcoKSkge1xuICAgICAgcmV0dXJuIE5PX1BST1hZX1dFQl9MSVNUO1xuICAgIH1cbiAgICByZXR1cm4gTk9fUFJPWFlfTkFUSVZFX0xJU1Q7XG4gIH1cblxuICBjYW5Qcm94eSAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc1NhZmFyaSAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zYWZhcmk7XG4gIH1cblxuICBpc1JlYWxEZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLm9wdHMucmVhbERldmljZTtcbiAgfVxuXG4gIGlzU2ltdWxhdG9yICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNUdk9TICgpIHtcbiAgICByZXR1cm4gXy50b0xvd2VyKHRoaXMub3B0cy5wbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbiAgfVxuXG4gIGlzV2VidmlldyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLmlzV2ViQ29udGV4dCgpO1xuICB9XG5cbiAgdmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kgKHN0cmF0ZWd5KSB7XG4gICAgc3VwZXIudmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3koc3RyYXRlZ3ksIHRoaXMuaXNXZWJDb250ZXh0KCkpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBvbmUgb2YgYGFwcGAgb3IgYGJ1bmRsZUlkYFxuICAgIGlmIChfLnRvTG93ZXIoY2Fwcy5icm93c2VyTmFtZSkgIT09ICdzYWZhcmknICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5idW5kbGVJZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIGluY2x1ZGUgbmVpdGhlciBhbiBhcHAgbm9yIGEgYnVuZGxlSWQuICcgK1xuICAgICAgICAnV2ViRHJpdmVyQWdlbnQgd2lsbCBiZSBzdGFydGVkIHdpdGhvdXQgdGhlIGRlZmF1bHQgYXBwJyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgdGhpcy5sb2cud2FybihgJ3BsYXRmb3JtVmVyc2lvbicgY2FwYWJpbGl0eSAoJyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259JykgaXMgbm90IGEgdmFsaWQgdmVyc2lvbiBudW1iZXIuIGAgK1xuICAgICAgICBgQ29uc2lkZXIgZml4aW5nIGl0IG9yIGJlIHJlYWR5IHRvIGV4cGVyaWVuY2UgYW4gaW5jb25zaXN0ZW50IGRyaXZlciBiZWhhdmlvci5gKTtcbiAgICB9XG5cbiAgICBsZXQgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50ID0gKHByb2Nlc3NBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHthcmdzLCBlbnZ9ID0gcHJvY2Vzc0FyZ3VtZW50cztcbiAgICAgIGlmICghXy5pc05pbChhcmdzKSAmJiAhXy5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3Byb2Nlc3NBcmd1bWVudHMuYXJncyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc05pbChlbnYpICYmICFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdwcm9jZXNzQXJndW1lbnRzLmVudiBtdXN0IGJlIGFuIG9iamVjdCA8a2V5LHZhbHVlPiBwYWlyIHthOmIsIGM6ZH0nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYHByb2Nlc3NBcmd1bWVudHNgIHNob3VsZCBiZSBKU09OIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCBhcmd1bWVudHMgYW5kLyBlbnZpcm9ubWVudCBkZXRhaWxzXG4gICAgaWYgKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykge1xuICAgICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIGFzIEpTT05cbiAgICAgICAgICBjYXBzLnByb2Nlc3NBcmd1bWVudHMgPSBKU09OLnBhcnNlKGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYHByb2Nlc3NBcmd1bWVudHMgbXVzdCBiZSBhIEpTT04gZm9ybWF0IG9yIGFuIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgICBgQm90aCBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnQgY2FuIGJlIG51bGwuIEVycm9yOiAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB2ZXJpZnlQcm9jZXNzQXJndW1lbnQoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBvciBhIHN0cmluZyBKU09OIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoZXJlIGlzIG5vIHBvaW50IGluIGhhdmluZyBga2V5Y2hhaW5QYXRoYCB3aXRob3V0IGBrZXljaGFpblBhc3N3b3JkYFxuICAgIGlmICgoY2Fwcy5rZXljaGFpblBhdGggJiYgIWNhcHMua2V5Y2hhaW5QYXNzd29yZCkgfHwgKCFjYXBzLmtleWNoYWluUGF0aCAmJiBjYXBzLmtleWNoYWluUGFzc3dvcmQpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBJZiAna2V5Y2hhaW5QYXRoJyBpcyBzZXQsICdrZXljaGFpblBhc3N3b3JkJyBtdXN0IGFsc28gYmUgc2V0IChhbmQgdmljZSB2ZXJzYSkuYCk7XG4gICAgfVxuXG4gICAgLy8gYHJlc2V0T25TZXNzaW9uU3RhcnRPbmx5YCBzaG91bGQgYmUgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9ICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSkgfHwgdGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5O1xuICAgIHRoaXMub3B0cy51c2VOZXdXREEgPSB1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy51c2VOZXdXREEpID8gdGhpcy5vcHRzLnVzZU5ld1dEQSA6IGZhbHNlO1xuXG4gICAgaWYgKGNhcHMuY29tbWFuZFRpbWVvdXRzKSB7XG4gICAgICBjYXBzLmNvbW1hbmRUaW1lb3V0cyA9IG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyhjYXBzLmNvbW1hbmRUaW1lb3V0cyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdH0gPSB1cmwucGFyc2UoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KHByb3RvY29sKSB8fCBfLmlzRW1wdHkoaG9zdCkpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJ3dlYkRyaXZlckFnZW50VXJsJyBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gYSB2YWxpZCBXZWJEcml2ZXJBZ2VudCBzZXJ2ZXIgVVJMLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke2NhcHMud2ViRHJpdmVyQWdlbnRVcmx9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMuYnJvd3Nlck5hbWUpIHtcbiAgICAgIGlmIChjYXBzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdicm93c2VyTmFtZScgY2Fubm90IGJlIHNldCB0b2dldGhlciB3aXRoICdidW5kbGVJZCcgY2FwYWJpbGl0eWApO1xuICAgICAgfVxuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXNcbiAgICAgIC8vIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBUaGUgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGVybWlzc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtc10gb2YgXy50b1BhaXJzKEpTT04ucGFyc2UoY2Fwcy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgaWYgKCFfLmlzU3RyaW5nKGJ1bmRsZUlkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShidW5kbGVJZCl9JyBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHBlcm1zKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShwZXJtcyl9JyBtdXN0IGJlIGEgSlNPTiBvYmplY3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJyR7Y2Fwcy5wZXJtaXNzaW9uc30nIGlzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgb2JqZWN0IHdpdGggZm9ybWF0IGAgK1xuICAgICAgICAgIGB7XCI8YnVuZGxlSWQxPlwiOiB7XCI8c2VydmljZU5hbWUxPlwiOiBcIjxzZXJ2aWNlU3RhdHVzMT5cIiwgLi4ufSwgLi4ufS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLnBsYXRmb3JtVmVyc2lvbiAmJiAhdXRpbC5jb2VyY2VWZXJzaW9uKGNhcHMucGxhdGZvcm1WZXJzaW9uLCBmYWxzZSkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdwbGF0Zm9ybVZlcnNpb24nIG11c3QgYmUgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGAnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIGdpdmVuIGluc3RlYWQuYCk7XG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgaXMgYW4gYXJyYXksIEpTT04gYXJyYXksIG9yIHN0cmluZ1xuICAgIGlmIChjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzKSB7XG4gICAgICBjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpO1xuICAgIH1cblxuICAgIC8vIGZpbmFsbHksIHJldHVybiB0cnVlIHNpbmNlIHRoZSBzdXBlcmNsYXNzIGNoZWNrIHBhc3NlZCwgYXMgZGlkIHRoaXNcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxBVVQgKCkge1xuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgIGlzU2ltdWxhdG9yOiB0aGlzLmlzU2ltdWxhdG9yKCksXG4gICAgICBpc1R2T1M6IHRoaXMuaXNUdk9TKCksXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvUmVhbERldmljZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYnVuZGxlSWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCxcbiAgICAgICAgc3RyYXRlZ3k6IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3ksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5idW5kbGVJZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgbmV3U2ltdWxhdG9yOiB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RhbGxPdGhlckFwcHModGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmlvc0luc3RhbGxQYXVzZSkpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy82ODg5XG4gICAgICBsZXQgcGF1c2UgPSBwYXJzZUludCh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlLCAxMCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgaW9zSW5zdGFsbFBhdXNlIHNldC4gUGF1c2luZyAke3BhdXNlfSBtcyBiZWZvcmUgY29udGludWluZ2ApO1xuICAgICAgYXdhaXQgQi5kZWxheShwYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbE90aGVyQXBwcyAob3RoZXJBcHBzKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ0NhcGFiaWxpdHkgb3RoZXJBcHBzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3JzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBhcHBzTGlzdDtcbiAgICB0cnkge1xuICAgICAgYXBwc0xpc3QgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkob3RoZXJBcHBzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShhcHBzTGlzdCkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYEdvdCB6ZXJvIGFwcHMgZnJvbSAnb3RoZXJBcHBzJyBjYXBhYmlsaXR5IHZhbHVlLiBEb2luZyBub3RoaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBwUGF0aHMgPSBhd2FpdCBCLmFsbChhcHBzTGlzdC5tYXAoXG4gICAgICAoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKVxuICAgICkpO1xuICAgIGZvciAoY29uc3Qgb3RoZXJBcHAgb2YgYXBwUGF0aHMpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCBvdGhlckFwcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlZHVjZU1vdGlvbiBhcyAnaXNFbmFibGVkJyBvbmx5IHdoZW4gdGhlIGNhcGFiaWxpdGllcyBoYXMgJ3JlZHVjZU1vdGlvbidcbiAgICogVGhlIGNhbGwgaXMgaWdub3JlZCBmb3IgcmVhbCBkZXZpY2VzLlxuICAgKiBAcGFyYW0gez9ib29sZWFufSBpc0VuYWJsZWQgV2V0aGVyIGVuYWJsZSByZWR1Y2VNb3Rpb25cbiAgICovXG4gIGFzeW5jIHNldFJlZHVjZU1vdGlvbiAoaXNFbmFibGVkKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkgfHwgIV8uaXNCb29sZWFuKGlzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIHJlZHVjZU1vdGlvbiB0byAke2lzRW5hYmxlZH1gKTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtyZWR1Y2VNb3Rpb246IGlzRW5hYmxlZH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0SW5pdGlhbE9yaWVudGF0aW9uIChvcmllbnRhdGlvbikge1xuICAgIGlmICghXy5pc1N0cmluZyhvcmllbnRhdGlvbikpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1NraXBwaW5nIHNldHRpbmcgb2YgdGhlIGluaXRpYWwgZGlzcGxheSBvcmllbnRhdGlvbi4gJyArXG4gICAgICAgICdTZXQgdGhlIFwib3JpZW50YXRpb25cIiBjYXBhYmlsaXR5IHRvIGVpdGhlciBcIkxBTkRTQ0FQRVwiIG9yIFwiUE9SVFJBSVRcIiwgaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9yaWVudGF0aW9uID0gb3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBpZiAoIV8uaW5jbHVkZXMoWydMQU5EU0NBUEUnLCAnUE9SVFJBSVQnXSwgb3JpZW50YXRpb24pKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVW5hYmxlIHRvIHNldCBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHtvcmllbnRhdGlvbn0nYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvb3JpZW50YXRpb24nLCAnUE9TVCcsIHtvcmllbnRhdGlvbn0pO1xuICAgICAgdGhpcy5vcHRzLmN1ck9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gZmFpbGVkIHdpdGg6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgX2dldENvbW1hbmRUaW1lb3V0IChjbWROYW1lKSB7XG4gICAgaWYgKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMpIHtcbiAgICAgIGlmIChjbWROYW1lICYmIF8uaGFzKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMsIGNtZE5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzW2NtZE5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbREVGQVVMVF9USU1FT1VUX0tFWV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZXNzaW9uIGNhcGFiaWxpdGllcyBtZXJnZWQgd2l0aCB3aGF0IFdEQSByZXBvcnRzXG4gICAqIFRoaXMgaXMgYSBsaWJyYXJ5IGNvbW1hbmQgYnV0IG5lZWRzIHRvIGNhbGwgJ3N1cGVyJyBzbyBjYW4ndCBiZSBvblxuICAgKiBhIGhlbHBlciBvYmplY3RcbiAgICovXG4gIGFzeW5jIGdldFNlc3Npb24gKCkge1xuICAgIC8vIGNhbGwgc3VwZXIgdG8gZ2V0IGV2ZW50IHRpbWluZ3MsIGV0Yy4uLlxuICAgIGNvbnN0IGRyaXZlclNlc3Npb24gPSBhd2FpdCBzdXBlci5nZXRTZXNzaW9uKCk7XG4gICAgaWYgKCF0aGlzLndkYUNhcHMpIHtcbiAgICAgIHRoaXMud2RhQ2FwcyA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvJywgJ0dFVCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEdldERldmljZUNhcHMgPSBfLmlzQm9vbGVhbih0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvKVxuICAgICAgPyB0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvXG4gICAgICA6IHRydWU7IC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBpZiAoc2hvdWxkR2V0RGV2aWNlQ2FwcyAmJiAhdGhpcy5kZXZpY2VDYXBzKSB7XG4gICAgICBjb25zdCB7c3RhdHVzQmFyU2l6ZSwgc2NhbGV9ID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5JbmZvKCk7XG4gICAgICB0aGlzLmRldmljZUNhcHMgPSB7XG4gICAgICAgIHBpeGVsUmF0aW86IHNjYWxlLFxuICAgICAgICBzdGF0QmFySGVpZ2h0OiBzdGF0dXNCYXJTaXplLmhlaWdodCxcbiAgICAgICAgdmlld3BvcnRSZWN0OiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0UmVjdCgpLFxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5sb2cuaW5mbygnTWVyZ2luZyBXREEgY2FwcyBvdmVyIEFwcGl1bSBjYXBzIGZvciBzZXNzaW9uIGRldGFpbCByZXNwb25zZScpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt1ZGlkOiB0aGlzLm9wdHMudWRpZH0sIGRyaXZlclNlc3Npb24sXG4gICAgICB0aGlzLndkYUNhcHMuY2FwYWJpbGl0aWVzLCB0aGlzLmRldmljZUNhcHMgfHwge30pO1xuICB9XG5cbiAgYXN5bmMgcmVzZXQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgcmVzZXQgaGFwcGVucyBldmVuIGlmIG5vUmVzZXQgaXMgc2V0IHRvIHRydWVcbiAgICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICAgIG9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgb3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHNodXRkb3duSGFuZGxlciA9IHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9ICgpID0+IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChvcHRzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9IHNodXRkb3duSGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIucmVzZXQoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFhDVUlUZXN0RHJpdmVyLnByb3RvdHlwZSwgY29tbWFuZHMpO1xuXG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBS0E7O0FBR0E7O0FBQ0E7O0FBUUE7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsd0JBQXdCLEdBQUcscUJBQWpDO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsOEJBQXJDO0FBRUEsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBQ0MsaUJBQUQsRUFBVUMsaUJBQVYsQ0FBN0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUEvQjtBQUNBLE1BQU1DLGlCQUFpQixHQUFHO0VBQ3hCQyxpQkFBaUIsRUFBRSxLQURLO0VBRXhCQyxzQkFBc0Is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
@@ -0,0 +1,127 @@
1
+ import { INSTRUMENT_CHANNEL, services } from 'appium-ios-device';
2
+ import _ from 'lodash';
3
+ import { util } from 'appium/support';
4
+
5
+ const commands = {};
6
+
7
+ function requireConditionInducerCompatibleDevice (driver) {
8
+ if (driver.isSimulator()) {
9
+ driver.log.errorAndThrow('Condition inducer only works on real devices');
10
+ }
11
+ if (util.compareVersions(driver.opts.platformVersion, '<', '13.0')) {
12
+ driver.log.errorAndThrow('Condition inducer is only supported since iOS 13+');
13
+ }
14
+ }
15
+
16
+ /**
17
+ * @typedef {Object} Profile
18
+ * @property {String} name
19
+ * @property {String} identifier the property is profileID used in MobileEnableConditionInducer
20
+ * @property {String} description Configuration details
21
+ */
22
+
23
+ /**
24
+ * We can use the returned data to determine whether the Condition is enabled and the currently enabled configuration information
25
+ * @typedef {Object} Condition
26
+ * @property {Array<Profile>} profiles
27
+ * @property {String} identifier the property is conditionID used in MobileEnableConditionInducer
28
+ * @property {boolean} profilesSorted
29
+ * @property {boolean} isDestructive
30
+ * @property {boolean} isInternal
31
+ * @property {boolean} isActive `true` if this condition identifier is enabled
32
+ * @property {String} activeProfile enabled profiles identifier
33
+ */
34
+
35
+ /**
36
+ * Get all ConditionInducer configuration information
37
+ * We will use conditionID and profileID in the mobileEnableConditionInducer
38
+ * @returns {Array<Condition>}
39
+ * [{
40
+ * "profiles": [
41
+ * {
42
+ * "name": "100% packet loss",
43
+ * "identifier": "SlowNetwork100PctLoss", // MobileEnableConditionInducer profileID
44
+ * "description": "Name: 100% Loss Scenario\n
45
+ * Downlink Bandwidth: 0 Mbps\n
46
+ * Downlink Latency:0 ms\n
47
+ * Downlink Packet Loss Ratio: 100%\n
48
+ * Uplink Bandwidth: 0 Mbps\n
49
+ * Uplink Latency: 0 ms\n
50
+ * Uplink Packet Loss Ratio: 100%"
51
+ * }
52
+ * ],
53
+ * "profilesSorted": true,
54
+ * "identifier": "SlowNetworkCondition", // MobileEnableConditionInducer conditionID
55
+ * "isDestructive": false,
56
+ * "isInternal": false,
57
+ * "activeProfile": "",
58
+ * "name": "Network Link",
59
+ * "isActive": false
60
+ * }]
61
+ */
62
+ commands.mobileListConditionInducers = async function listConditionInducers () {
63
+ requireConditionInducerCompatibleDevice(this);
64
+ const conditionInducerService = await services.startInstrumentService(this.opts.device.udid);
65
+ try {
66
+ const ret = await conditionInducerService.callChannel(INSTRUMENT_CHANNEL.CONDITION_INDUCER, 'availableConditionInducers');
67
+ return ret.selector;
68
+ } finally {
69
+ conditionInducerService.close();
70
+ }
71
+ };
72
+
73
+ /**
74
+ * Enable condition inducer. The socket needs to remain connected during operation
75
+ * conditionID Condition[0].identifier
76
+ * profileID Condition[0].profiles[0].identifier
77
+ * @param {{conditionID,profileID}} options
78
+ * @returns {boolean} `true` if enable the condition succeeded
79
+ * @throws {Error} If try to start another Condition and the previous Condition has not stopped, it will throw an error
80
+ */
81
+ commands.mobileEnableConditionInducer = async function enableConditionInducer (options = {}) {
82
+ requireConditionInducerCompatibleDevice(this);
83
+ if (this._conditionInducerService && !this._conditionInducerService._socketClient.destroyed) {
84
+ this.log.errorAndThrow(`Condition inducer has been started. A condition is already active.`);
85
+ }
86
+ const {
87
+ conditionID,
88
+ profileID,
89
+ } = options;
90
+ this._conditionInducerService = await services.startInstrumentService(this.opts.device.udid);
91
+ const ret = await this._conditionInducerService.callChannel(INSTRUMENT_CHANNEL.CONDITION_INDUCER,
92
+ 'enableConditionWithIdentifier:profileIdentifier:', conditionID, profileID);
93
+ if (!_.isBoolean(ret.selector)) {
94
+ this._conditionInducerService.close();
95
+ this._conditionInducerService = null;
96
+ this.log.errorAndThrow(`Enable condition inducer error: '${JSON.stringify(ret.selector)}'`);
97
+ }
98
+ return ret.selector;
99
+ };
100
+
101
+ /**
102
+ * Disable condition inducer
103
+ * this call upon driver deletion
104
+ * @returns {boolean} `true` if disable the condition succeeded
105
+ */
106
+ commands.mobileDisableConditionInducer = async function disableConditionInducer () {
107
+ if (!this._conditionInducerService) {
108
+ this.log.warn('Condition inducer server is not started');
109
+ return false;
110
+ }
111
+ try {
112
+ const ret = await this._conditionInducerService.callChannel(INSTRUMENT_CHANNEL.CONDITION_INDUCER, 'disableActiveCondition');
113
+ if (!_.isBoolean(ret.selector)) {
114
+ this.log.warn(`Disable condition inducer error: '${JSON.stringify(ret.selector)}'`);
115
+ return false;
116
+ }
117
+ return ret.selector;
118
+ } finally {
119
+ if (this._conditionInducerService) {
120
+ this._conditionInducerService.close();
121
+ this._conditionInducerService = null;
122
+ }
123
+ }
124
+ };
125
+
126
+ export {commands};
127
+ export default commands;
@@ -157,6 +157,9 @@ extensions.executeMobile = async function executeMobile (mobileCommand, opts = {
157
157
 
158
158
  startPcap: 'mobileStartPcap',
159
159
  stopPcap: 'mobileStopPcap',
160
+ listConditionInducers: 'mobileListConditionInducers',
161
+ enableConditionInducer: 'mobileEnableConditionInducer',
162
+ disableConditionInducer: 'mobileDisableConditionInducer',
160
163
  };
161
164
 
162
165
  if (!_.has(commandMap, mobileCommand)) {
@@ -35,6 +35,7 @@ import notificationsExtensions from './notifications';
35
35
  import iohidExtensions from './iohid';
36
36
  import localizationExtensions from './localization';
37
37
  import pcapExtensions from './pcap';
38
+ import conditionExtensions from './condition';
38
39
 
39
40
  const commands = {};
40
41
 
@@ -48,6 +49,7 @@ Object.assign(commands, contextCommands, executeExtensions,
48
49
  biometricExtensions, keychainsExtensions, permissionsExtensions, deviceInfoExtensions,
49
50
  activeAppInfoExtensions, recordAudioExtensions, appearanceExtensions, xctestExtensions,
50
51
  notificationsExtensions, iohidExtensions, localizationExtensions, pcapExtensions,
52
+ conditionExtensions,
51
53
  );
52
54
 
53
55
  export default commands;
package/lib/driver.js CHANGED
@@ -213,6 +213,7 @@ class XCUITestDriver extends BaseDriver {
213
213
  this.pageLoadMs = 6000;
214
214
  this.landscapeWebCoordsOffset = 0;
215
215
  this.remote = null;
216
+ this._conditionInducerService = null;
216
217
 
217
218
  this.webElementsCache = new LRU({
218
219
  max: WEB_ELEMENTS_CACHE_SIZE,
@@ -700,6 +701,10 @@ class XCUITestDriver extends BaseDriver {
700
701
  this._perfRecorders = [];
701
702
  }
702
703
 
704
+ if (this._conditionInducerService) {
705
+ this.mobileDisableConditionInducer();
706
+ }
707
+
703
708
  await this.stop();
704
709
 
705
710
  if (this.wda && !this.opts.webDriverAgentUrl) {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "appium-xcuitest-driver",
3
- "version": "4.8.0",
3
+ "version": "4.9.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "appium-xcuitest-driver",
9
- "version": "4.8.0",
9
+ "version": "4.9.0",
10
10
  "engines": [
11
11
  "node"
12
12
  ],
@@ -284,7 +284,7 @@
284
284
  }
285
285
  },
286
286
  "node_modules/@babel/parser": {
287
- "version": "7.18.9",
287
+ "version": "7.18.10",
288
288
  "extraneous": true,
289
289
  "license": "MIT",
290
290
  "bin": {
@@ -5440,7 +5440,7 @@
5440
5440
  }
5441
5441
  },
5442
5442
  "@babel/parser": {
5443
- "version": "7.18.9",
5443
+ "version": "7.18.10",
5444
5444
  "extraneous": true
5445
5445
  },
5446
5446
  "@babel/runtime": {
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "xcuitest",
9
9
  "xctest"
10
10
  ],
11
- "version": "4.8.0",
11
+ "version": "4.9.0",
12
12
  "author": "appium",
13
13
  "license": "Apache-2.0",
14
14
  "repository": {