appium-espresso-driver 2.5.0 → 2.7.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.
@@ -13,11 +13,13 @@ var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
14
  var _path = _interopRequireDefault(require("path"));
15
15
 
16
- var _baseDriver = require("@appium/base-driver");
16
+ var _bluebird = _interopRequireDefault(require("bluebird"));
17
+
18
+ var _driver = require("appium/driver");
17
19
 
18
20
  var _espressoRunner = require("./espresso-runner");
19
21
 
20
- var _support = require("@appium/support");
22
+ var _support = require("appium/support");
21
23
 
22
24
  var _commands = _interopRequireDefault(require("./commands"));
23
25
 
@@ -44,7 +46,7 @@ const APK_EXT = '.apk';
44
46
  const AAB_EXT = '.aab';
45
47
  const SUPPORTED_EXTENSIONS = [APK_EXT, AAB_EXT];
46
48
 
47
- class EspressoDriver extends _baseDriver.BaseDriver {
49
+ class EspressoDriver extends _driver.BaseDriver {
48
50
  constructor(opts = {}, shouldValidateCaps = true) {
49
51
  delete opts.shell;
50
52
  super(opts, shouldValidateCaps);
@@ -55,7 +57,7 @@ class EspressoDriver extends _baseDriver.BaseDriver {
55
57
  this.defaultIME = null;
56
58
  this.jwpProxyAvoid = NO_PROXY;
57
59
  this.apkStrings = {};
58
- this.settings = new _baseDriver.DeviceSettings({}, this.onSettingsUpdate.bind(this));
60
+ this.settings = new _driver.DeviceSettings({}, this.onSettingsUpdate.bind(this));
59
61
  this.chromedriver = null;
60
62
  this.sessionChromedrivers = {};
61
63
  }
@@ -128,11 +130,11 @@ class EspressoDriver extends _baseDriver.BaseDriver {
128
130
  await this.deleteSession();
129
131
  e.message += `${_lodash.default.endsWith(e.message, '.') ? '' : '.'} Check ` + 'https://github.com/appium/appium-espresso-driver#troubleshooting ' + 'regarding advanced session startup troubleshooting.';
130
132
 
131
- if ((0, _baseDriver.isErrorType)(e, _baseDriver.errors.SessionNotCreatedError)) {
133
+ if ((0, _driver.isErrorType)(e, _driver.errors.SessionNotCreatedError)) {
132
134
  throw e;
133
135
  }
134
136
 
135
- const err = new _baseDriver.errors.SessionNotCreatedError(e.message);
137
+ const err = new _driver.errors.SessionNotCreatedError(e.message);
136
138
  err.stack = e.stack;
137
139
  throw err;
138
140
  }
@@ -429,15 +431,20 @@ class EspressoDriver extends _baseDriver.BaseDriver {
429
431
 
430
432
  async deleteSession() {
431
433
  this.log.debug('Deleting espresso session');
432
-
433
- try {
434
+ const screenRecordingStopTasks = [async () => {
434
435
  if (!_lodash.default.isEmpty(this._screenRecordingProperties)) {
435
436
  await this.stopRecordingScreen();
436
437
  }
437
- } catch (ign) {}
438
-
438
+ }, async () => {
439
+ if (await this.mobileIsMediaProjectionRecordingRunning()) {
440
+ await this.mobileStopMediaProjectionRecording();
441
+ }
442
+ }, async () => {
443
+ if (!_lodash.default.isEmpty(this._screenStreamingProps)) {
444
+ await this.mobileStopScreenStreaming();
445
+ }
446
+ }];
439
447
  await _appiumAndroidDriver.androidHelpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);
440
- await this.mobileStopScreenStreaming();
441
448
 
442
449
  if (this.espresso) {
443
450
  if (this.jwpProxyActive) {
@@ -450,6 +457,14 @@ class EspressoDriver extends _baseDriver.BaseDriver {
450
457
  this.jwpProxyActive = false;
451
458
 
452
459
  if (this.adb) {
460
+ await _bluebird.default.all(screenRecordingStopTasks.map(task => {
461
+ (async () => {
462
+ try {
463
+ await task();
464
+ } catch (ign) {}
465
+ })();
466
+ }));
467
+
453
468
  if (this.wasAnimationEnabled) {
454
469
  try {
455
470
  await this.adb.setAnimationState(true);
@@ -546,4 +561,4 @@ var _default = EspressoDriver;
546
561
  exports.default = _default;require('source-map-support').install();
547
562
 
548
563
 
549
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbImhlbHBlcnMiLCJhbmRyb2lkSGVscGVycyIsIlNZU1RFTV9QT1JUX1JBTkdFIiwiREVWSUNFX1BPUlQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkNIUk9NRV9OT19QUk9YWSIsIkFQS19FWFQiLCJBQUJfRVhUIiwiU1VQUE9SVEVEX0VYVEVOU0lPTlMiLCJFc3ByZXNzb0RyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzaGVsbCIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiZXNwcmVzc28iLCJqd3BQcm94eUFjdGl2ZSIsImRlZmF1bHRJTUUiLCJqd3BQcm94eUF2b2lkIiwiYXBrU3RyaW5ncyIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZGVmYXVsdE9wdHMiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJfIiwiZGVmYXVsdHMiLCJpc0Nocm9tZVNlc3Npb24iLCJhcHAiLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJhZGRXaXBlRGF0YVRvQXZkQXJncyIsInN5c3RlbVBvcnQiLCJmaW5kQVBvcnROb3RJblVzZSIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJhZGIiLCJjcmVhdGVBREIiLCJjb25maWd1cmVBcHAiLCJvblBvc3RQcm9jZXNzIiwib25Qb3N0Q29uZmlndXJlQXBwIiwic3VwcG9ydGVkRXh0ZW5zaW9ucyIsImFwcE9uRGV2aWNlIiwiaW5mbyIsImFwcFBhY2thZ2UiLCJpc0FwcEluc3RhbGxlZCIsInN0YXJ0RXNwcmVzc29TZXNzaW9uIiwiZSIsImRlbGV0ZVNlc3Npb24iLCJtZXNzYWdlIiwiZW5kc1dpdGgiLCJpc0Vycm9yVHlwZSIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJlcnIiLCJzdGFjayIsInVuemlwQXBwIiwiYXBwUGF0aCIsInVzZVN5c3RlbVVuemlwRW52IiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQIiwidXNlU3lzdGVtVW56aXAiLCJpc0VtcHR5IiwiaW5jbHVkZXMiLCJ0b0xvd2VyIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiZ2xvYlBhdHRlcm4iLCJtYXAiLCJleHQiLCJyZXBsYWNlIiwiam9pbiIsInNvcnRlZEJ1bmRsZUl0ZW1zIiwiZnMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwic29ydCIsImEiLCJiIiwic3BsaXQiLCJwYXRoIiwic2VwIiwibGVuZ3RoIiwidW56aXBwZWRBcHBQYXRoIiwiZmlyc3QiLCJkZWJ1ZyIsImNhY2hlZEFwcEluZm8iLCJpc1VybCIsInByZXNpZ25BcHAiLCJhcHBMb2NhdGlvbiIsIm5vU2lnbiIsImNoZWNrQXBrQ2VydCIsInNpZ24iLCJoYXNBcGtFeHQiLCJoYXNBYWJFeHQiLCJleHRyYWN0VW5pdmVyc2FsQXBrIiwic2hvdWxkRXh0cmFjdCIsInBhdGhJbkNhY2hlIiwiaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCIsImlzUGxhaW5PYmplY3QiLCJwYWNrYWdlSGFzaCIsImhhc2giLCJleGlzdHMiLCJmdWxsUGF0aCIsImlzQXBrIiwic2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkIiwiaXNVbnppcHBlZEFwayIsInJpbXJhZiIsImRyaXZlckRhdGEiLCJpc0VtdWxhdG9yIiwiYXZkIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsImF2ZEFyZ3MiLCJ0b0xvd2VyQ2FzZSIsInZlcnNpb24iLCJnZXRBcGlMZXZlbCIsInNldEhpZGRlbkFwaVBvbGljeSIsImlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJpbml0RGV2aWNlIiwiaXNBbmltYXRpb25PbiIsInNldEFuaW1hdGlvblN0YXRlIiwid2FzQW5pbWF0aW9uRW5hYmxlZCIsImN1ckRldmljZUlkIiwiZGV2aWNlVURJRCIsImluaXRFc3ByZXNzb1NlcnZlciIsImZvcndhcmRQb3J0Iiwic2tpcFVubG9jayIsInVubG9jayIsImluaXRBVVQiLCJhcHBXYWl0UGFja2FnZSIsImFwcEFjdGl2aXR5IiwicXVhbGlmeUFjdGl2aXR5TmFtZSIsImFwcFdhaXRBY3Rpdml0eSIsInN0YXJ0U2Vzc2lvbiIsIndhaXRGb3JBY3Rpdml0eSIsImFwcFdhaXREdXJhdGlvbiIsImF1dG9XZWJ2aWV3IiwiaW5pdFdlYnZpZXciLCJhZGREZXZpY2VJbmZvVG9DYXBzIiwidmlld05hbWUiLCJhbmRyb2lkQ29tbWFuZHMiLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjYWxsIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwiYXBpVmVyc2lvbiIsIm1hbnVmYWN0dXJlciIsIm1vZGVsIiwicmVhbERpc3BsYXlTaXplIiwiZGlzcGxheURlbnNpdHkiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwiZGV2aWNlQXBpTGV2ZWwiLCJwYXJzZUludCIsImRldmljZVNjcmVlblNpemUiLCJkZXZpY2VTY3JlZW5EZW5zaXR5IiwiZGV2aWNlTW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJFc3ByZXNzb1J1bm5lciIsImhvc3QiLCJyZW1vdGVBZGJIb3N0IiwiZGV2aWNlUG9ydCIsImFwayIsInRtcERpciIsImZvcmNlRXNwcmVzc29SZWJ1aWxkIiwiZXNwcmVzc29CdWlsZENvbmZpZyIsInNob3dHcmFkbGVMb2ciLCJzZXJ2ZXJMYXVuY2hUaW1lb3V0IiwiZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0Iiwic2tpcFNlcnZlckluc3RhbGxhdGlvbiIsInVzZUtleXN0b3JlIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInByb3h5UmVxUmVzIiwicHJveHlDb21tYW5kIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiVEVTVF9BUEtfUEtHIiwiZmFzdFJlc2V0IiwicmVzZXRBcHAiLCJza2lwVW5pbnN0YWxsIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbEFwayIsImluc3RhbGxUZXN0QXBrIiwiYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0Iiwic3RkZXJyIiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwiaWduIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3kiLCJ1bmRlZmluZWQiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsImVycm9yIiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNOaWwiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJpc1BhY2thZ2VPckJ1bmRsZSIsImNtZCIsImZuIiwidG9QYWlycyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyLCBlcnJvcnMsIGlzRXJyb3JUeXBlLCBEZXZpY2VTZXR0aW5nc30gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBFc3ByZXNzb1J1bm5lciwgVEVTVF9BUEtfUEtHIH0gZnJvbSAnLi9lc3ByZXNzby1ydW5uZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHppcCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgeyBERUZBVUxUX0FEQl9QT1JUIH0gZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQgeyBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lEIH0gZnJvbSAnYXBwaXVtLWFuZHJvaWQtZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHF1YWxpZnlBY3Rpdml0eU5hbWUgfSBmcm9tICcuL3V0aWxzJztcblxuXG4vLyBUT0RPIG1lcmdlIG91ciBvd24gaGVscGVycyBvbnRvIHRoaXMgbGF0ZXJcbmNvbnN0IGhlbHBlcnMgPSBhbmRyb2lkSGVscGVycztcblxuLy8gVGhlIHJhbmdlIG9mIHBvcnRzIHdlIGNhbiB1c2Ugb24gdGhlIHN5c3RlbSBmb3IgY29tbXVuaWNhdGluZyB0byB0aGVcbi8vIEVzcHJlc3NvIEhUVFAgc2VydmVyIG9uIHRoZSBkZXZpY2VcbmNvbnN0IFNZU1RFTV9QT1JUX1JBTkdFID0gWzgzMDAsIDgzOTldO1xuXG4vLyBUaGlzIGlzIHRoZSBwb3J0IHRoYXQgdGhlIGVzcHJlc3NvIHNlcnZlciBsaXN0ZW5zIHRvIG9uIHRoZSBkZXZpY2UuIFdlIHdpbGxcbi8vIGZvcndhcmQgb25lIG9mIHRoZSBwb3J0cyBhYm92ZSBvbiB0aGUgc3lzdGVtIHRvIHRoaXMgcG9ydCBvbiB0aGUgZGV2aWNlLlxuY29uc3QgREVWSUNFX1BPUlQgPSA2NzkxO1xuXG4vLyBOT19QUk9YWSBjb250YWlucyB0aGUgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIGVzcHJlc3NvIHNlcnZlci5cbi8vIFRPRE86ICBBZGQgdGhlIGxpc3Qgb2YgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIGVzcHJlc3NvIHNlcnZlci5cbi8vIFRPRE86IE5lZWQgdG8gc2VncmVnYXRlIHRoZSBwYXRocyBiZXR0ZXIgd2F5IHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hlcmV2ZXIgYXBwbGljYWJsZS5cbi8vIChOb3Qgc2VncmVnYXRpbmcgcmlnaHQgYXdheSBiZWNhdXNlIG1vcmUgcGF0aHMgdG8gYmUgYWRkZWQgaW4gdGhlIE5PX1BST1hZIGxpc3QpXG5jb25zdCBOT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vKD8hLiovKScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9jdXJyZW50X2FjdGl2aXR5JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2N1cnJlbnRfcGFja2FnZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvaXNfa2V5Ym9hcmRfc2hvd24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2Uvc3lzdGVtX2JhcnMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2Uvc3lzdGVtX3RpbWUnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dHMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9iYWNrZ3JvdW5kJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9jbG9zZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvbGF1bmNoJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9yZXNldCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvc3RyaW5ncycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9jb21wYXJlX2ltYWdlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvYWN0aXZhdGVfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9hcHBfaW5zdGFsbGVkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9hcHBfc3RhdGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2Zpbmdlcl9wcmludCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvaW5zdGFsbF9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2lzX2xvY2tlZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvbG9jaycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcHVsbF9maWxlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9wdWxsX2ZvbGRlcicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcHVzaF9maWxlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9yZW1vdmVfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvdGVybWluYXRlX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvdW5sb2NrJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2dldFBlcmZvcm1hbmNlRGF0YScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9wZXJmb3JtYW5jZURhdGEvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZXhlY3V0ZV9kcml2ZXInKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RhcnRfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdG9wX3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvYXN5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlX2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9jYXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZycpXSxcblxuICAvLyBXM0MgY29tbWFuZHNcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cvdHlwZXMnKV0sXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZycpXSxcbl07XG5cbi8vIFRoaXMgaXMgYSBzZXQgb2YgbWV0aG9kcyBhbmQgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIENocm9tZWRyaXZlci5cbmNvbnN0IENIUk9NRV9OT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3JlY3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL3BlcmZvcm0nKV0sXG5cbiAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgbW9iaWxlOiBjb21tYW5kcyB3b3JraW5nIGluIHdlYiBjb250ZXh0XG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZycpXSxcblxuICAvLyBXM0MgY29tbWFuZHNcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cvdHlwZXMnKV0sXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZycpXSxcbl07XG5cblxuY29uc3QgQVBLX0VYVCA9ICcuYXBrJztcbmNvbnN0IEFBQl9FWFQgPSAnLmFhYic7XG5jb25zdCBTVVBQT1JURURfRVhURU5TSU9OUyA9IFtBUEtfRVhULCBBQUJfRVhUXTtcblxuY2xhc3MgRXNwcmVzc29Ecml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIC8vIGBzaGVsbGAgb3ZlcndyaXRlcyBhZGIuc2hlbGwsIHNvIHJlbW92ZVxuICAgIGRlbGV0ZSBvcHRzLnNoZWxsO1xuXG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ2lkJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICBdO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMuZXNwcmVzc28gPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRJTUUgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IE5PX1BST1hZO1xuXG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307IC8vIG1hcCBvZiBsYW5ndWFnZSAtPiBzdHJpbmdzIG9ialxuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moe30sIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE8gaGFuZGxlIG90aGVyU2Vzc2lvbkRhdGEgZm9yIG11bHRpcGxlIHNlc3Npb25zXG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuXG4gICAgICBsZXQgc2VydmVyRGV0YWlscyA9IHtcbiAgICAgICAgcGxhdGZvcm06ICdMSU5VWCcsXG4gICAgICAgIHdlYlN0b3JhZ2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGFrZXNTY3JlZW5zaG90OiB0cnVlLFxuICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgZGF0YWJhc2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkOiB0cnVlLFxuICAgICAgICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgd2FybmluZ3M6IHt9LFxuICAgICAgICBkZXNpcmVkOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNhcHMpXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhcHMgPSBPYmplY3QuYXNzaWduKHNlcnZlckRldGFpbHMsIHRoaXMuY2Fwcyk7XG5cbiAgICAgIHRoaXMuY3VyQ29udGV4dCA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG5cbiAgICAgIGxldCBkZWZhdWx0T3B0cyA9IHtcbiAgICAgICAgZnVsbFJlc2V0OiBmYWxzZSxcbiAgICAgICAgYXV0b0xhdW5jaDogdHJ1ZSxcbiAgICAgICAgYWRiUG9ydDogREVGQVVMVF9BREJfUE9SVCxcbiAgICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiA5MDAwMFxuICAgICAgfTtcbiAgICAgIF8uZGVmYXVsdHModGhpcy5vcHRzLCBkZWZhdWx0T3B0cyk7XG5cbiAgICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikge1xuICAgICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYCdicm93c2VyTmFtZScgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWRgKTtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBDaHJvbWUgYnJvd3NlciBjYW5ub3QgYmUgcnVuIGluIEVzcHJlc3NvIHNlc3Npb25zIGJlY2F1c2UgRXNwcmVzc28gYXV0b21hdGlvbiBkb2Vzbid0IGAgK1xuICAgICAgICAgICAgICBgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBDaHJvbWVgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDaHJvbWUgYnJvd3NlciBzZXNzaW9ucyBjYW5ub3QgYmUgcnVuIGluIEVzcHJlc3NvIGJlY2F1c2UgRXNwcmVzc28gYCArXG4gICAgICAgICAgICBgYXV0b21hdGlvbiBkb2Vzbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgQ2hyb21lYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgdGhpcy5zZXRBdmRGcm9tQ2FwYWJpbGl0aWVzKGNhcHMpO1xuICAgICAgICB0aGlzLmFkZFdpcGVEYXRhVG9BdmRBcmdzKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0cy5zeXN0ZW1Qb3J0ID0gdGhpcy5vcHRzLnN5c3RlbVBvcnRcbiAgICAgICAgfHwgYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2UoU1lTVEVNX1BPUlRfUkFOR0VbMF0sIFNZU1RFTV9QT1JUX1JBTkdFWzFdKTtcbiAgICAgIHRoaXMub3B0cy5hZGJQb3J0ID0gdGhpcy5vcHRzLmFkYlBvcnQgfHwgREVGQVVMVF9BREJfUE9SVDtcbiAgICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IGF3YWl0IGhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzKHRoaXMub3B0cyk7XG4gICAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgICB0aGlzLm9wdHMuZW1Qb3J0ID0gZW1Qb3J0O1xuICAgICAgLy8gbm93IHRoYXQgd2Uga25vdyBvdXIgamF2YSB2ZXJzaW9uIGFuZCBkZXZpY2UgaW5mbywgd2UgY2FuIGNyZWF0ZSBvdXJcbiAgICAgIC8vIEFEQiBpbnN0YW5jZVxuICAgICAgdGhpcy5hZGIgPSBhd2FpdCBhbmRyb2lkSGVscGVycy5jcmVhdGVBREIodGhpcy5vcHRzKTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCB7XG4gICAgICAgICAgb25Qb3N0UHJvY2VzczogdGhpcy5vblBvc3RDb25maWd1cmVBcHAuYmluZCh0aGlzKSxcbiAgICAgICAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiBTVVBQT1JURURfRVhURU5TSU9OU1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBPbkRldmljZSkge1xuICAgICAgICAvLyB0aGUgYXBwIGlzbid0IGFuIGFjdHVhbCBhcHAgZmlsZSBidXQgcmF0aGVyIHNvbWV0aGluZyB3ZSB3YW50IHRvXG4gICAgICAgIC8vIGFzc3VtZSBpcyBvbiB0aGUgZGV2aWNlIGFuZCBqdXN0IGxhdW5jaCB2aWEgdGhlIGFwcFBhY2thZ2VcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgQXBwIGZpbGUgd2FzIG5vdCBsaXN0ZWQsIGluc3RlYWQgd2UncmUgZ29pbmcgdG8gcnVuIGAgK1xuICAgICAgICAgICAgYCR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9IGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgICAgaWYgKCFhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZCh0aGlzLm9wdHMuYXBwUGFja2FnZSkpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCB0aGUgcGFja2FnZSAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nIGAgK1xuICAgICAgICAgICAgYGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydEVzcHJlc3NvU2Vzc2lvbigpO1xuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgZS5tZXNzYWdlICs9IGAke18uZW5kc1dpdGgoZS5tZXNzYWdlLCAnLicpID8gJycgOiAnLid9IENoZWNrIGAgK1xuICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tZXNwcmVzc28tZHJpdmVyI3Ryb3VibGVzaG9vdGluZyAnICtcbiAgICAgICAgJ3JlZ2FyZGluZyBhZHZhbmNlZCBzZXNzaW9uIHN0YXJ0dXAgdHJvdWJsZXNob290aW5nLic7XG4gICAgICBpZiAoaXNFcnJvclR5cGUoZSwgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnIgPSBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIGVyci5zdGFjayA9IGUuc3RhY2s7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuemlwIHRoZSBnaXZlbiBhcHAgcGF0aCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBwYWNrYWdlIHRoYXQgaGFzIFNVUFBPUlRFRF9FWFRFTlNJT05TXG4gICAqIGluIHRoZSBhcmNoaXZlZCBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCBUaGUgcGF0aCB0byBhcHAgZmlsZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dW5zIHRoZSBwYXRoIHRvIGFuIHVuemlwcGVkIGFwcCBmaWxlIHBhdGguXG4gICAqIEB0aHJvd3MgUmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSB6aXAgZGlkIG5vdCBoYXZlIGFueSBTVVBQT1JURURfRVhURU5TSU9OUyBwYWNrYWdlcy5cbiAgICovXG4gIGFzeW5jIHVuemlwQXBwIChhcHBQYXRoKSB7XG4gICAgY29uc3QgdXNlU3lzdGVtVW56aXBFbnYgPSBwcm9jZXNzLmVudi5BUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUDtcbiAgICBjb25zdCB1c2VTeXN0ZW1VbnppcCA9IF8uaXNFbXB0eSh1c2VTeXN0ZW1VbnppcEVudilcbiAgICAgIHx8ICFbJzAnLCAnZmFsc2UnXS5pbmNsdWRlcyhfLnRvTG93ZXIodXNlU3lzdGVtVW56aXBFbnYpKTtcbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhhcHBQYXRoLCB0bXBSb290LCB7dXNlU3lzdGVtVW56aXB9KTtcblxuICAgIGNvbnN0IGdsb2JQYXR0ZXJuID0gYCoqLyouKygke1NVUFBPUlRFRF9FWFRFTlNJT05TLm1hcCgoZXh0KSA9PiBleHQucmVwbGFjZSgvXlxcLi8sICcnKSkuam9pbignfCcpfSlgO1xuICAgIGNvbnN0IHNvcnRlZEJ1bmRsZUl0ZW1zID0gKGF3YWl0IGZzLmdsb2IoZ2xvYlBhdHRlcm4sIHtcbiAgICAgIGN3ZDogdG1wUm9vdCxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgfSkpLnNvcnQoKGEsIGIpID0+IGEuc3BsaXQocGF0aC5zZXApLmxlbmd0aCAtIGIuc3BsaXQocGF0aC5zZXApLmxlbmd0aCk7XG4gICAgaWYgKHNvcnRlZEJ1bmRsZUl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gbm8gZXhwZWN0ZWQgcGFja2FnZXMgaW4gdGhlIHppcFxuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJHt0aGlzLm9wdHMuYXBwfSBkaWQgbm90IGhhdmUgYW55IG9mICcke1NVUFBPUlRFRF9FWFRFTlNJT05TLmpvaW4oJywgJyl9JyBgICtcbiAgICAgICAgYGV4dGVuc2lvbiBwYWNrYWdlcy4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgLnppcCBhcmNoaXZlIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSB2YWxpZCBhcHBsaWNhdGlvbiBwYWNrYWdlLmApO1xuICAgIH1cbiAgICBjb25zdCB1bnppcHBlZEFwcFBhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgXy5maXJzdChzb3J0ZWRCdW5kbGVJdGVtcykpO1xuICAgIHRoaXMubG9nLmRlYnVnKGAnJHt1bnppcHBlZEFwcFBhdGh9JyBpcyB0aGUgdW56aXBwZWQgZmlsZSBmcm9tICcke2FwcFBhdGh9J2ApO1xuICAgIHJldHVybiB1bnppcHBlZEFwcFBhdGg7XG4gIH1cblxuICBhc3luYyBvblBvc3RDb25maWd1cmVBcHAgKHtjYWNoZWRBcHBJbmZvLCBpc1VybCwgYXBwUGF0aH0pIHtcbiAgICBjb25zdCBwcmVzaWduQXBwID0gYXN5bmMgKGFwcExvY2F0aW9uKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLm5vU2lnbikge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdTa2lwcGluZyBhcHBsaWNhdGlvbiBzaWduaW5nIGJlY2F1c2Ugbm9TaWduIGNhcGFiaWxpdHkgaXMgc2V0IHRvIHRydWUuICcgK1xuICAgICAgICAgICdIYXZpbmcgdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3Qgd2l0aCBpbXByb3BlciBzaWduYXR1cmUvbm9uLXNpZ25lZCB3aWxsIGNhdXNlICcgK1xuICAgICAgICAgICdFc3ByZXNzbyBhdXRvbWF0aW9uIHN0YXJ0dXAgZmFpbHVyZS4nKTtcbiAgICAgIH0gZWxzZSBpZiAoIWF3YWl0IHRoaXMuYWRiLmNoZWNrQXBrQ2VydChhcHBMb2NhdGlvbiwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNpZ24oYXBwTG9jYXRpb24sIHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFzQXBrRXh0ID0gKGFwcFBhdGgpID0+IF8uZW5kc1dpdGgoXy50b0xvd2VyKGFwcFBhdGgpLCBBUEtfRVhUKTtcbiAgICBjb25zdCBoYXNBYWJFeHQgPSAoYXBwUGF0aCkgPT4gXy5lbmRzV2l0aChfLnRvTG93ZXIoYXBwUGF0aCksIEFBQl9FWFQpO1xuICAgIGNvbnN0IGV4dHJhY3RVbml2ZXJzYWxBcGsgPSBhc3luYyAoc2hvdWxkRXh0cmFjdCwgYXBwUGF0aCkgPT5cbiAgICAgIHNob3VsZEV4dHJhY3QgPyBhcHBQYXRoIDogYXdhaXQgdGhpcy5hZGIuZXh0cmFjdFVuaXZlcnNhbEFwayhhcHBQYXRoKTtcblxuICAgIGxldCBwYXRoSW5DYWNoZSA9IG51bGw7XG4gICAgbGV0IGlzUmVzdWx0QXBwUGF0aEFscmVhZHlDYWNoZWQgPSBmYWxzZTtcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGNhY2hlZEFwcEluZm8pKSB7XG4gICAgICBjb25zdCBwYWNrYWdlSGFzaCA9IGF3YWl0IGZzLmhhc2goYXBwUGF0aCk7XG4gICAgICBpZiAocGFja2FnZUhhc2ggPT09IGNhY2hlZEFwcEluZm8ucGFja2FnZUhhc2ggJiYgYXdhaXQgZnMuZXhpc3RzKGNhY2hlZEFwcEluZm8uZnVsbFBhdGgpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFVzaW5nICcke2NhY2hlZEFwcEluZm8uZnVsbFBhdGh9JyB3aGljaCBpcyBjYWNoZWQgZnJvbSAnJHthcHBQYXRofSdgKTtcbiAgICAgICAgaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCA9IHRydWU7XG4gICAgICAgIHBhdGhJbkNhY2hlID0gY2FjaGVkQXBwSW5mby5mdWxsUGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhcHBQYXRoIGNhbiBiZSAuemlwLCAuYXBrIG9yIC5hYWJcbiAgICBjb25zdCBpc0FwayA9IGhhc0Fwa0V4dChhcHBQYXRoKTtcbiAgICAvLyBPbmx5IGxvY2FsIC5hcGsgZmlsZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGluLXBsYWNlIHNob3VsZCBub3QgYmUgY2FjaGVkXG4gICAgY29uc3Qgc2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkID0gIWlzQXBrIHx8IChpc0FwayAmJiBpc1VybCk7XG5cbiAgICBpZiAoIWlzUmVzdWx0QXBwUGF0aEFscmVhZHlDYWNoZWQpIHtcbiAgICAgIGlmIChzaG91bGRSZXN1bHRBcHBQYXRoQmVDYWNoZWQpIHtcbiAgICAgICAgLy8gLnppcCwgLmFhYiBvciBkb3dubG9hZGVkIC5hcGtcblxuICAgICAgICBsZXQgdW56aXBwZWRBcHBQYXRoO1xuICAgICAgICBsZXQgaXNVbnppcHBlZEFwayA9IGZhbHNlO1xuICAgICAgICBpZiAoIShoYXNBcGtFeHQoYXBwUGF0aCkgfHwgaGFzQWFiRXh0KGFwcFBhdGgpKSkge1xuICAgICAgICAgIHVuemlwcGVkQXBwUGF0aCA9IGF3YWl0IHRoaXMudW56aXBBcHAoYXBwUGF0aCk7XG4gICAgICAgICAgaXNVbnppcHBlZEFwayA9IGhhc0Fwa0V4dCh1bnppcHBlZEFwcFBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW56aXBwZWRBcHBQYXRoIG9yIGFwcFBhdGggaGFzIFNVUFBPUlRFRF9FWFRFTlNJT05TLlxuICAgICAgICBwYXRoSW5DYWNoZSA9IHVuemlwcGVkQXBwUGF0aFxuICAgICAgICAgID8gYXdhaXQgZXh0cmFjdFVuaXZlcnNhbEFwayhpc1VuemlwcGVkQXBrLCB1bnppcHBlZEFwcFBhdGgpXG4gICAgICAgICAgOiBhd2FpdCBleHRyYWN0VW5pdmVyc2FsQXBrKGlzQXBrLCBhcHBQYXRoKTtcblxuICAgICAgICBpZiAoIWlzQXBrICYmIGlzVXJsKSB7XG4gICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIHRlbXBvcmFyaWx5IGRvd25sb2FkZWQgLmFhYiBvciAuemlwIHBhY2thZ2VcbiAgICAgICAgICBhd2FpdCBmcy5yaW1yYWYoYXBwUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0FhYkV4dCh1bnppcHBlZEFwcFBhdGgpKSB7XG4gICAgICAgICAgLy8gQ2xlYW51cCB0aGUgbG9jYWwgdW56aXBwZWQgLmFhYiBmaWxlXG4gICAgICAgICAgYXdhaXQgZnMucmltcmFmKHVuemlwcGVkQXBwUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcHJlc2lnbkFwcChwYXRoSW5DYWNoZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzQXBrKSB7XG4gICAgICAgIC8vIEl0IGlzIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBpZGVhIHRvIG1vZGlmeSB0aGUgcHJvdmlkZWQgYXBwIGluLXBsYWNlLFxuICAgICAgICAvLyBidXQgdGhpcyBpcyBob3cgaXQgd2FzIGFsd2F5cyB3b3JraW5nXG4gICAgICAgIGF3YWl0IHByZXNpZ25BcHAoYXBwUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaG91bGRSZXN1bHRBcHBQYXRoQmVDYWNoZWQgPyB7YXBwUGF0aDogcGF0aEluQ2FjaGV9IDogZmFsc2U7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsZSBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgaXNFbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNFbXVsYXRvcih0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBtZXRob2QgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMi1kcml2ZXI7IGNvbnNvbGlkYXRlXG4gIHNldEF2ZEZyb21DYXBhYmlsaXRpZXMgKGNhcHMpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF2ZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgcGxhdGZvcm1WZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBhdmREZXZpY2UgPSBjYXBzLmRldmljZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfLl0vZywgJy0nKTtcbiAgICAgIHRoaXMub3B0cy5hdmQgPSBgJHthdmREZXZpY2V9X18ke2NhcHMucGxhdGZvcm1WZXJzaW9ufWA7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyB0aGlzIG1ldGhvZCBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyLWRyaXZlcjsgY29uc29saWRhdGVcbiAgYWRkV2lwZURhdGFUb0F2ZEFyZ3MgKCkge1xuICAgIGlmICghdGhpcy5vcHRzLmF2ZEFyZ3MpIHtcbiAgICAgIHRoaXMub3B0cy5hdmRBcmdzID0gJy13aXBlLWRhdGEnO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0cy5hdmRBcmdzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgdGhpcy5vcHRzLmF2ZEFyZ3MgKz0gJyAtd2lwZS1kYXRhJztcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPIG11Y2ggb2YgdGhpcyBsb2dpYyBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyXG4gIGFzeW5jIHN0YXJ0RXNwcmVzc29TZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBFc3ByZXNzb0RyaXZlciB2ZXJzaW9uOiAke3ZlcnNpb259YCk7XG5cbiAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLWFuZHJvaWQtZHJpdmVyL3B1bGwvNDYxIHdoYXQgaGFwcGVucyBpZiB0aGVyIGlzIG5vIHNldEhpZGRlbkFwaVBvbGljeSBmb3IgQW5kcm9pZCBQK1xuICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgdGhpcy5sb2cud2FybignUmVsYXhpbmcgaGlkZGVuIGFwaSBwb2xpY3knKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEhpZGRlbkFwaVBvbGljeSgnMScsICEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBnZXQgYXBwUGFja2FnZSBldCBhbCBmcm9tIG1hbmlmZXN0IGlmIG5lY2Vzc2FyeVxuICAgIGxldCBhcHBJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGlmIChhcHBJbmZvKSB7XG4gICAgICAvLyBhbmQgZ2V0IGl0IG9udG8gb3VyICdvcHRzJyBvYmplY3Qgc28gd2UgdXNlIGl0IGZyb20gbm93IG9uXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgYXBwSW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcEluZm8gPSB0aGlzLm9wdHM7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgYW4gYXZkLCBzZXQgdGhlIGxhbmd1YWdlL2xvY2FsZSwgcGljayBhbiBlbXVsYXRvciwgZXRjLi4uXG4gICAgLy8gVE9ETyB3aXRoIG11bHRpcGxlIGRldmljZXMgd2UnbGwgbmVlZCB0byBwYXJhbWV0ZXJpemUgdGhpc1xuICAgIGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1lc3ByZXNzby1kcml2ZXIvaXNzdWVzLzcyXG4gICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLndhc0FuaW1hdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byB0dXJuIG9mZiBhbmltYXRpb25zOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWRcbiAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9IHRoaXMuYWRiLmN1ckRldmljZUlkO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VVRElEID0gdGhpcy5vcHRzLnVkaWQ7XG5cbiAgICAvLyBzZXQgdXAgdGhlIG1vZGlmaWVkIGVzcHJlc3NvIHNlcnZlciBldGNcbiAgICB0aGlzLmluaXRFc3ByZXNzb1NlcnZlcigpO1xuICAgIC8vIEZ1cnRoZXIgcHJlcGFyZSB0aGUgZGV2aWNlIGJ5IGZvcndhcmRpbmcgdGhlIGVzcHJlc3NvIHBvcnRcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRm9yd2FyZGluZyBFc3ByZXNzbyBTZXJ2ZXIgcG9ydCAke0RFVklDRV9QT1JUfSB0byAke3RoaXMub3B0cy5zeXN0ZW1Qb3J0fWApO1xuICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0LCBERVZJQ0VfUE9SVCk7XG5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5sb2NrKSB7XG4gICAgICAvLyB1bmxvY2sgdGhlIGRldmljZSB0byBwcmVwYXJlIGl0IGZvciB0ZXN0aW5nXG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYCdza2lwVW5sb2NrJyBjYXBhYmlsaXR5IHNldCwgc28gc2tpcHBpbmcgZGV2aWNlIHVubG9ja2ApO1xuICAgIH1cblxuICAgIC8vIHNldCB1cCBhcHAgdW5kZXIgdGVzdFxuICAgIC8vIHByZXBhcmUgb3VyIGFjdHVhbCBBVVQsIGdldCBpdCBvbiB0aGUgZGV2aWNlLCBldGMuLi5cbiAgICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcblxuICAgIC8vQWRkaW5nIEFVVCBwYWNrYWdlIG5hbWUgaW4gdGhlIGNhcGFiaWxpdGllcyBpZiBwYWNrYWdlIG5hbWUgbm90IGV4aXN0IGluIGNhcHNcbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICB0aGlzLmNhcHMuYXBwUGFja2FnZSA9IGFwcEluZm8uYXBwUGFja2FnZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSA9IGFwcEluZm8uYXBwV2FpdFBhY2thZ2UgfHwgYXBwSW5mby5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHBQYWNrYWdlO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXBzLmFwcEFjdGl2aXR5KSB7XG4gICAgICB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSwgdGhpcy5jYXBzLmFwcFBhY2thZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEluZm8uYXBwQWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEluZm8uYXBwV2FpdEFjdGl2aXR5IHx8IGFwcEluZm8uYXBwQWN0aXZpdHkgfHwgdGhpcy5jYXBzLmFwcEFjdGl2aXR5LFxuICAgICAgICB0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpO1xuICAgIH1cblxuICAgIC8vIGxhdW5jaCBlc3ByZXNzbyBhbmQgd2FpdCB0aWxsIGl0cyBvbmxpbmUgYW5kIHdlIGhhdmUgYSBzZXNzaW9uXG4gICAgYXdhaXQgdGhpcy5lc3ByZXNzby5zdGFydFNlc3Npb24odGhpcy5jYXBzKTtcbiAgICBpZiAodGhpcy5jYXBzLmF1dG9MYXVuY2ggPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBOb3Qgd2FpdGluZyBmb3IgdGhlIGFwcGxpY2F0aW9uIGFjdGl2aXR5IHRvIHN0YXJ0IGJlY2F1c2UgJ2F1dG9MYXVuY2gnIGlzIGRpc2FibGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JBY3Rpdml0eSh0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UsIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHksIHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24pO1xuICAgIH1cbiAgICAvLyBpZiB3ZSB3YW50IHRvIGltbWVkaWF0ZWx5IGdldCBpbnRvIGEgd2Vidmlldywgc2V0IG91ciBjb250ZXh0XG4gICAgLy8gYXBwcm9wcmlhdGVseVxuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdFdlYnZpZXcoKTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCBldmVyeXRoaW5nIGhhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseSwgdHVybiBvbiBwcm94eWluZyBzbyBhbGxcbiAgICAvLyBzdWJzZXF1ZW50IHNlc3Npb24gcmVxdWVzdHMgZ28gc3RyYWlnaHQgdG8vZnJvbSBlc3ByZXNzb1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gICAgYXdhaXQgdGhpcy5hZGREZXZpY2VJbmZvVG9DYXBzKCk7XG4gIH1cblxuICBhc3luYyBpbml0V2VidmlldyAoKSB7XG4gICAgY29uc3Qgdmlld05hbWUgPSBhbmRyb2lkQ29tbWFuZHMuZGVmYXVsdFdlYnZpZXdOYW1lLmNhbGwodGhpcyk7XG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMub3B0cy5hdXRvV2Vidmlld1RpbWVvdXQgfHwgMjAwMDtcbiAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgLyA1MDAsIDUwMCwgdGhpcy5zZXRDb250ZXh0LmJpbmQodGhpcyksIHZpZXdOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGFkZERldmljZUluZm9Ub0NhcHMgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgICBtYW51ZmFjdHVyZXIsXG4gICAgICBtb2RlbCxcbiAgICAgIHJlYWxEaXNwbGF5U2l6ZSxcbiAgICAgIGRpc3BsYXlEZW5zaXR5LFxuICAgIH0gPSBhd2FpdCB0aGlzLm1vYmlsZUdldERldmljZUluZm8oKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlQXBpTGV2ZWwgPSBwYXJzZUludChhcGlWZXJzaW9uLCAxMCk7XG4gICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9IHBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuU2l6ZSA9IHJlYWxEaXNwbGF5U2l6ZTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuRGVuc2l0eSA9IGRpc3BsYXlEZW5zaXR5O1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNb2RlbCA9IG1vZGVsO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNYW51ZmFjdHVyZXIgPSBtYW51ZmFjdHVyZXI7XG4gIH1cblxuICBpbml0RXNwcmVzc29TZXJ2ZXIgKCkge1xuICAgIC8vIG5vdyB0aGF0IHdlIGhhdmUgcGFja2FnZSBhbmQgYWN0aXZpdHksIHdlIGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2ZcbiAgICAvLyBlc3ByZXNzbyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhXG4gICAgdGhpcy5lc3ByZXNzbyA9IG5ldyBFc3ByZXNzb1J1bm5lcih0aGlzLmxvZywge1xuICAgICAgaG9zdDogdGhpcy5vcHRzLnJlbW90ZUFkYkhvc3QgfHwgdGhpcy5vcHRzLmhvc3QgfHwgJzEyNy4wLjAuMScsXG4gICAgICBzeXN0ZW1Qb3J0OiB0aGlzLm9wdHMuc3lzdGVtUG9ydCxcbiAgICAgIGRldmljZVBvcnQ6IERFVklDRV9QT1JULFxuICAgICAgYWRiOiB0aGlzLmFkYixcbiAgICAgIGFwazogdGhpcy5vcHRzLmFwcCxcbiAgICAgIHRtcERpcjogdGhpcy5vcHRzLnRtcERpcixcbiAgICAgIGFwcFBhY2thZ2U6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgYXBwQWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgIGZvcmNlRXNwcmVzc29SZWJ1aWxkOiAhIXRoaXMub3B0cy5mb3JjZUVzcHJlc3NvUmVidWlsZCxcbiAgICAgIGVzcHJlc3NvQnVpbGRDb25maWc6IHRoaXMub3B0cy5lc3ByZXNzb0J1aWxkQ29uZmlnLFxuICAgICAgc2hvd0dyYWRsZUxvZzogISF0aGlzLm9wdHMuc2hvd0dyYWRsZUxvZyxcbiAgICAgIHNlcnZlckxhdW5jaFRpbWVvdXQ6IHRoaXMub3B0cy5lc3ByZXNzb1NlcnZlckxhdW5jaFRpbWVvdXQsXG4gICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IHRoaXMub3B0cy5hbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgICBza2lwU2VydmVySW5zdGFsbGF0aW9uOiB0aGlzLm9wdHMuc2tpcFNlcnZlckluc3RhbGxhdGlvbixcbiAgICAgIHVzZUtleXN0b3JlOiB0aGlzLm9wdHMudXNlS2V5c3RvcmUsXG4gICAgICBrZXlzdG9yZVBhdGg6IHRoaXMub3B0cy5rZXlzdG9yZVBhdGgsXG4gICAgICBrZXlzdG9yZVBhc3N3b3JkOiB0aGlzLm9wdHMua2V5c3RvcmVQYXNzd29yZCxcbiAgICAgIGtleUFsaWFzOiB0aGlzLm9wdHMua2V5QWxpYXMsXG4gICAgICBrZXlQYXNzd29yZDogdGhpcy5vcHRzLmtleVBhc3N3b3JkLFxuICAgICAgZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U6IHRoaXMub3B0cy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5lc3ByZXNzby5wcm94eVJlcVJlcy5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICAgIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5lc3ByZXNzby5wcm94eUNvbW1hbmQuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBtZXRob2QgaXMgbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjJcbiAgYXN5bmMgaW5pdEFVVCAoKSB7XG4gICAgLy8gc2V0IHRoZSBsb2NhbGl6ZWQgc3RyaW5ncyBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgZnJvbSB0aGUgYXBrXG4gICAgLy8gVE9ETzogaW5jb3Jwb3JhdGUgY2hhbmdlcyBmcm9tIGFwcGl1bSM1MzA4IHdoaWNoIGZpeCBhIHJhY2UgY29uZC1cbiAgICAvLyBpdGlvbiBidWcgaW4gb2xkIGFwcGl1bSBhbmQgbmVlZCB0byBiZSByZXBsaWNhdGVkIGhlcmVcbiAgICAvLyB0aGlzLmFwa1N0cmluZ3NbdGhpcy5vcHRzLmxhbmd1YWdlXSA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLnB1c2hTdHJpbmdzKFxuICAgIC8vICAgICB0aGlzLm9wdHMubGFuZ3VhZ2UsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuXG4gICAgLy8gVW5pbnN0YWxsIGFueSB1bmluc3RhbGxPdGhlclBhY2thZ2VzIHdoaWNoIHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBURVNUX0FQS19QS0ddXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdza2lwU2VydmVySW5zdGFsbGF0aW9uIGNhcGFiaWxpdHkgaXMgc2V0LiBOb3QgaW5zdGFsbGlnIGVzcHJlc3NvLXNlcnZlciAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5lc3ByZXNzby5pbnN0YWxsVGVzdEFwaygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0KFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFRFU1RfQVBLX1BLRyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBhZGQgc2VydmVyIHBhY2thZ2VzIHRvIHRoZSBEb3plIHdoaXRlbGlzdC4gT3JpZ2luYWwgZXJyb3I6IGAgK1xuICAgICAgICAgIChlLnN0ZGVyciB8fCBlLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnRGVsZXRpbmcgZXNwcmVzc28gc2Vzc2lvbicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcFJlY29yZGluZ1NjcmVlbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cblxuICAgIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nKCk7XG5cbiAgICBpZiAodGhpcy5lc3ByZXNzbykge1xuICAgICAgaWYgKHRoaXMuandwUHJveHlBY3RpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5lc3ByZXNzby5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVzcHJlc3NvID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLy8gVE9ETyBiZWxvdyBsb2dpYyBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBpZiAodGhpcy53YXNBbmltYXRpb25FbmFibGVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byByZXNldCBhbmltYXRpb246ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkICYmIHRoaXMub3B0cy5yZXNldEtleWJvYXJkICYmXG4gICAgICAgICAgdGhpcy5kZWZhdWx0SU1FKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICcke3RoaXMuZGVmYXVsdElNRX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2hyb21lU2Vzc2lvbiAmJiB0aGlzLm9wdHMuYXBwUGFja2FnZSAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsICYmICF0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBGVUxMX1JFU0VUIHNldCB0byAndHJ1ZScsIFVuaW5zdGFsbGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICBsZXQgYXZkTmFtZSA9IHRoaXMub3B0cy5hdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYGNsb3NpbmcgZW11bGF0b3IgJyR7YXZkTmFtZX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3JpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gdGhlIGRldmljZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSghIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHJlbW92ZSBwb3J0IGZvcndhcmQgJyR7ZXJyb3IubWVzc2FnZX0nYCk7XG4gICAgICAgIC8vSWdub3JlLCB0aGlzIGJsb2NrIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hlbiB3ZSBmYWxsIGluIGNhdGNoIGJsb2NrXG4gICAgICAgIC8vIGFuZCBiZWZvcmUgZXZlbiBwb3J0IGZvcndhcmQuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoKSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBkbyBub3RoaW5nIGhlcmUsIHNpbmNlIGNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzIHByb3hpZXNcbiAgICAvLyBzZXR0aW5ncyB0byB0aGUgZXNwcmVzc28gc2VydmVyIGFscmVhZHlcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgYWx3YXlzIGhhdmUgYW4gYWN0aXZlIHByb3h5IHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNhblByb3h5IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5jYW5Qcm94eShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgY2FuIGFsd2F5cyBwcm94eSB0byB0aGUgZXNwcmVzc28gc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKTtcbiAgICAvLyB3ZSBhcmUgbWFpbnRhaW5pbmcgdHdvIHNldHMgb2YgTk9fUFJPWFkgbGlzdHMsIG9uZSBmb3IgY2hyb21lZHJpdmVyKENIUk9NRV9OT19QUk9YWSlcbiAgICAvLyBhbmQgb25lIGZvciBFc3ByZXNzbyhOT19QUk9YWSksIGJhc2VkIG9uIGN1cnJlbnQgY29udGV4dCB3aWxsIHJldHVybiByZWxhdGVkIE5PX1BST1hZIGxpc3RcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBfLmlzTmlsKHRoaXMuY2hyb21lZHJpdmVyKSA/IE5PX1BST1hZIDogQ0hST01FX05PX1BST1hZO1xuICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gWy4uLnRoaXMuandwUHJveHlBdm9pZCwgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2NyZWVuc2hvdCcpXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGdldCBpc0Nocm9tZVNlc3Npb24gKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzQ2hyb21lQnJvd3Nlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICB9XG5cbiAgZ2V0IGFwcE9uRGV2aWNlICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5hcHAgJiYgdGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgfVxufVxuXG4vLyBmaXJzdCBhZGQgdGhlIGFuZHJvaWQtZHJpdmVyIGNvbW1hbmRzIHdoaWNoIHdlIHdpbGwgZmFsbCBiYWNrIHRvXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGFuZHJvaWRDb21tYW5kcykpIHtcbiAgLy8gd2UgZG8gc29tZSBkaWZmZXJlbnQvc3BlY2lhbCB0aGluZ3Mgd2l0aCB0aGVzZSBtZXRob2RzXG4gIGlmICghXy5pbmNsdWRlcyhbJ2RlZmF1bHRXZWJ2aWV3TmFtZSddLCBjbWQpKSB7XG4gICAgRXNwcmVzc29Ecml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbiAgfVxufVxuXG4vLyB0aGVuIG92ZXJ3cml0ZSB3aXRoIGFueSBlc3ByZXNzby1zcGVjaWZpYyBjb21tYW5kc1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgRXNwcmVzc29Ecml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuZXhwb3J0IHsgRXNwcmVzc29Ecml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEVzcHJlc3NvRHJpdmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBLE1BQU1BLE9BQU8sR0FBR0MsbUNBQWhCO0FBSUEsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUExQjtBQUlBLE1BQU1DLFdBQVcsR0FBRyxJQUFwQjtBQU1BLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBRCxFQUFRLElBQUlDLE1BQUosQ0FBVyxtQkFBWCxDQUFSLENBRGUsRUFFZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsZ0RBQVgsQ0FBUixDQUZlLEVBR2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLCtDQUFYLENBQVIsQ0FIZSxFQUlmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywrQ0FBWCxDQUFSLENBSmUsRUFLZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsaURBQVgsQ0FBUixDQUxlLEVBTWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLDJDQUFYLENBQVIsQ0FOZSxFQU9mLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywyQ0FBWCxDQUFSLENBUGUsRUFRZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsaUNBQVgsQ0FBUixDQVJlLEVBU2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLHlCQUFYLENBQVIsQ0FUZSxFQVVmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywwQkFBWCxDQUFSLENBVmUsRUFXZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsMkJBQVgsQ0FBUixDQVhlLEVBWWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLG9DQUFYLENBQVIsQ0FaZSxFQWFmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywwQkFBWCxDQUFSLENBYmUsRUFjZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcscUJBQVgsQ0FBUixDQWRlLEVBZWYsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLHVDQUFYLENBQVQsQ0FmZSxFQWdCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsa0NBQVgsQ0FBVCxDQWhCZSxFQWlCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsbUNBQVgsQ0FBVCxDQWpCZSxFQWtCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsa0NBQVgsQ0FBVCxDQWxCZSxFQW1CZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBVCxDQW5CZSxFQW9CZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsdUNBQVgsQ0FBVCxDQXBCZSxFQXFCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNENBQVgsQ0FBVCxDQXJCZSxFQXNCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQXRCZSxFQXVCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQXZCZSxFQXdCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNENBQVgsQ0FBVCxDQXhCZSxFQXlCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQXpCZSxFQTBCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQTFCZSxFQTJCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQTNCZSxFQTRCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBVCxDQTVCZSxFQTZCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQTdCZSxFQThCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQTlCZSxFQStCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQS9CZSxFQWdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMENBQVgsQ0FBVCxDQWhDZSxFQWlDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQWpDZSxFQWtDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQWxDZSxFQW1DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsc0NBQVgsQ0FBVCxDQW5DZSxFQW9DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQXBDZSxFQXFDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQXJDZSxFQXNDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsaUNBQVgsQ0FBVCxDQXRDZSxFQXVDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsdUNBQVgsQ0FBVCxDQXZDZSxFQXdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0NBQVgsQ0FBVCxDQXhDZSxF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
564
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbImhlbHBlcnMiLCJhbmRyb2lkSGVscGVycyIsIlNZU1RFTV9QT1JUX1JBTkdFIiwiREVWSUNFX1BPUlQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkNIUk9NRV9OT19QUk9YWSIsIkFQS19FWFQiLCJBQUJfRVhUIiwiU1VQUE9SVEVEX0VYVEVOU0lPTlMiLCJFc3ByZXNzb0RyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzaGVsbCIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiZXNwcmVzc28iLCJqd3BQcm94eUFjdGl2ZSIsImRlZmF1bHRJTUUiLCJqd3BQcm94eUF2b2lkIiwiYXBrU3RyaW5ncyIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZGVmYXVsdE9wdHMiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJfIiwiZGVmYXVsdHMiLCJpc0Nocm9tZVNlc3Npb24iLCJhcHAiLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJhZGRXaXBlRGF0YVRvQXZkQXJncyIsInN5c3RlbVBvcnQiLCJmaW5kQVBvcnROb3RJblVzZSIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJhZGIiLCJjcmVhdGVBREIiLCJjb25maWd1cmVBcHAiLCJvblBvc3RQcm9jZXNzIiwib25Qb3N0Q29uZmlndXJlQXBwIiwic3VwcG9ydGVkRXh0ZW5zaW9ucyIsImFwcE9uRGV2aWNlIiwiaW5mbyIsImFwcFBhY2thZ2UiLCJpc0FwcEluc3RhbGxlZCIsInN0YXJ0RXNwcmVzc29TZXNzaW9uIiwiZSIsImRlbGV0ZVNlc3Npb24iLCJtZXNzYWdlIiwiZW5kc1dpdGgiLCJpc0Vycm9yVHlwZSIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJlcnIiLCJzdGFjayIsInVuemlwQXBwIiwiYXBwUGF0aCIsInVzZVN5c3RlbVVuemlwRW52IiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQIiwidXNlU3lzdGVtVW56aXAiLCJpc0VtcHR5IiwiaW5jbHVkZXMiLCJ0b0xvd2VyIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiZ2xvYlBhdHRlcm4iLCJtYXAiLCJleHQiLCJyZXBsYWNlIiwiam9pbiIsInNvcnRlZEJ1bmRsZUl0ZW1zIiwiZnMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwic29ydCIsImEiLCJiIiwic3BsaXQiLCJwYXRoIiwic2VwIiwibGVuZ3RoIiwidW56aXBwZWRBcHBQYXRoIiwiZmlyc3QiLCJkZWJ1ZyIsImNhY2hlZEFwcEluZm8iLCJpc1VybCIsInByZXNpZ25BcHAiLCJhcHBMb2NhdGlvbiIsIm5vU2lnbiIsImNoZWNrQXBrQ2VydCIsInNpZ24iLCJoYXNBcGtFeHQiLCJoYXNBYWJFeHQiLCJleHRyYWN0VW5pdmVyc2FsQXBrIiwic2hvdWxkRXh0cmFjdCIsInBhdGhJbkNhY2hlIiwiaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCIsImlzUGxhaW5PYmplY3QiLCJwYWNrYWdlSGFzaCIsImhhc2giLCJleGlzdHMiLCJmdWxsUGF0aCIsImlzQXBrIiwic2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkIiwiaXNVbnppcHBlZEFwayIsInJpbXJhZiIsImRyaXZlckRhdGEiLCJpc0VtdWxhdG9yIiwiYXZkIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsImF2ZEFyZ3MiLCJ0b0xvd2VyQ2FzZSIsInZlcnNpb24iLCJnZXRBcGlMZXZlbCIsInNldEhpZGRlbkFwaVBvbGljeSIsImlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJpbml0RGV2aWNlIiwiaXNBbmltYXRpb25PbiIsInNldEFuaW1hdGlvblN0YXRlIiwid2FzQW5pbWF0aW9uRW5hYmxlZCIsImN1ckRldmljZUlkIiwiZGV2aWNlVURJRCIsImluaXRFc3ByZXNzb1NlcnZlciIsImZvcndhcmRQb3J0Iiwic2tpcFVubG9jayIsInVubG9jayIsImluaXRBVVQiLCJhcHBXYWl0UGFja2FnZSIsImFwcEFjdGl2aXR5IiwicXVhbGlmeUFjdGl2aXR5TmFtZSIsImFwcFdhaXRBY3Rpdml0eSIsInN0YXJ0U2Vzc2lvbiIsIndhaXRGb3JBY3Rpdml0eSIsImFwcFdhaXREdXJhdGlvbiIsImF1dG9XZWJ2aWV3IiwiaW5pdFdlYnZpZXciLCJhZGREZXZpY2VJbmZvVG9DYXBzIiwidmlld05hbWUiLCJhbmRyb2lkQ29tbWFuZHMiLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjYWxsIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwiYXBpVmVyc2lvbiIsIm1hbnVmYWN0dXJlciIsIm1vZGVsIiwicmVhbERpc3BsYXlTaXplIiwiZGlzcGxheURlbnNpdHkiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwiZGV2aWNlQXBpTGV2ZWwiLCJwYXJzZUludCIsImRldmljZVNjcmVlblNpemUiLCJkZXZpY2VTY3JlZW5EZW5zaXR5IiwiZGV2aWNlTW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJFc3ByZXNzb1J1bm5lciIsImhvc3QiLCJyZW1vdGVBZGJIb3N0IiwiZGV2aWNlUG9ydCIsImFwayIsInRtcERpciIsImZvcmNlRXNwcmVzc29SZWJ1aWxkIiwiZXNwcmVzc29CdWlsZENvbmZpZyIsInNob3dHcmFkbGVMb2ciLCJzZXJ2ZXJMYXVuY2hUaW1lb3V0IiwiZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0Iiwic2tpcFNlcnZlckluc3RhbGxhdGlvbiIsInVzZUtleXN0b3JlIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInByb3h5UmVxUmVzIiwicHJveHlDb21tYW5kIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiVEVTVF9BUEtfUEtHIiwiZmFzdFJlc2V0IiwicmVzZXRBcHAiLCJza2lwVW5pbnN0YWxsIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbEFwayIsImluc3RhbGxUZXN0QXBrIiwiYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0Iiwic3RkZXJyIiwic2NyZWVuUmVjb3JkaW5nU3RvcFRhc2tzIiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwibW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwibW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsIl9zY3JlZW5TdHJlYW1pbmdQcm9wcyIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJCIiwiYWxsIiwidGFzayIsImlnbiIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3kiLCJ1bmRlZmluZWQiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsImVycm9yIiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNOaWwiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJpc1BhY2thZ2VPckJ1bmRsZSIsImNtZCIsImZuIiwidG9QYWlycyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyLCBlcnJvcnMsIGlzRXJyb3JUeXBlLCBEZXZpY2VTZXR0aW5nc30gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBFc3ByZXNzb1J1bm5lciwgVEVTVF9BUEtfUEtHIH0gZnJvbSAnLi9lc3ByZXNzby1ydW5uZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHppcCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IERFRkFVTFRfQURCX1BPUlQgfSBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7IGFuZHJvaWRIZWxwZXJzLCBhbmRyb2lkQ29tbWFuZHMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgfSBmcm9tICdhcHBpdW0tYW5kcm9pZC1kcml2ZXInO1xuaW1wb3J0IGRlc2lyZWRDYXBDb25zdHJhaW50cyBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgcXVhbGlmeUFjdGl2aXR5TmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5cbi8vIFRPRE8gbWVyZ2Ugb3VyIG93biBoZWxwZXJzIG9udG8gdGhpcyBsYXRlclxuY29uc3QgaGVscGVycyA9IGFuZHJvaWRIZWxwZXJzO1xuXG4vLyBUaGUgcmFuZ2Ugb2YgcG9ydHMgd2UgY2FuIHVzZSBvbiB0aGUgc3lzdGVtIGZvciBjb21tdW5pY2F0aW5nIHRvIHRoZVxuLy8gRXNwcmVzc28gSFRUUCBzZXJ2ZXIgb24gdGhlIGRldmljZVxuY29uc3QgU1lTVEVNX1BPUlRfUkFOR0UgPSBbODMwMCwgODM5OV07XG5cbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCB0aGUgZXNwcmVzc28gc2VydmVyIGxpc3RlbnMgdG8gb24gdGhlIGRldmljZS4gV2Ugd2lsbFxuLy8gZm9yd2FyZCBvbmUgb2YgdGhlIHBvcnRzIGFib3ZlIG9uIHRoZSBzeXN0ZW0gdG8gdGhpcyBwb3J0IG9uIHRoZSBkZXZpY2UuXG5jb25zdCBERVZJQ0VfUE9SVCA9IDY3OTE7XG5cbi8vIE5PX1BST1hZIGNvbnRhaW5zIHRoZSBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gZXNwcmVzc28gc2VydmVyLlxuLy8gVE9ETzogIEFkZCB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gZXNwcmVzc28gc2VydmVyLlxuLy8gVE9ETzogTmVlZCB0byBzZWdyZWdhdGUgdGhlIHBhdGhzIGJldHRlciB3YXkgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucyB3aGVyZXZlciBhcHBsaWNhYmxlLlxuLy8gKE5vdCBzZWdyZWdhdGluZyByaWdodCBhd2F5IGJlY2F1c2UgbW9yZSBwYXRocyB0byBiZSBhZGRlZCBpbiB0aGUgTk9fUFJPWFkgbGlzdClcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi8oPyEuKi8pJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2N1cnJlbnRfYWN0aXZpdHknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvY3VycmVudF9wYWNrYWdlJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9pc19rZXlib2FyZF9zaG93bicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9zeXN0ZW1fYmFycycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9zeXN0ZW1fdGltZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL2JhY2tncm91bmQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL2Nsb3NlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9sYXVuY2gnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL3Jlc2V0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9zdHJpbmdzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2NvbXBhcmVfaW1hZ2VzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9hY3RpdmF0ZV9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2FwcF9pbnN0YWxsZWQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2FwcF9zdGF0ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvZmluZ2VyX3ByaW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9nZXRfY2xpcGJvYXJkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9pbnN0YWxsX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvaXNfbG9ja2VkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9sb2NrJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9wdWxsX2ZpbGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3B1bGxfZm9sZGVyJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9wdXNoX2ZpbGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3JlbW92ZV9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3N0YXJ0X2FjdGl2aXR5JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS90ZXJtaW5hdGVfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS91bmxvY2snKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZ2V0UGVyZm9ybWFuY2VEYXRhJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3BlcmZvcm1hbmNlRGF0YS90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9leGVjdXRlX2RyaXZlcicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdGFydF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0b3BfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGVfYXN5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2NhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcycpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJyldLFxuXTtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gQ2hyb21lZHJpdmVyLlxuY29uc3QgQ0hST01FX05PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvcmVjdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcblxuICAvLyB0aGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBtb2JpbGU6IGNvbW1hbmRzIHdvcmtpbmcgaW4gd2ViIGNvbnRleHRcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcycpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJyldLFxuXTtcblxuXG5jb25zdCBBUEtfRVhUID0gJy5hcGsnO1xuY29uc3QgQUFCX0VYVCA9ICcuYWFiJztcbmNvbnN0IFNVUFBPUlRFRF9FWFRFTlNJT05TID0gW0FQS19FWFQsIEFBQl9FWFRdO1xuXG5jbGFzcyBFc3ByZXNzb0RyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gICAgLy8gYHNoZWxsYCBvdmVyd3JpdGVzIGFkYi5zaGVsbCwgc28gcmVtb3ZlXG4gICAgZGVsZXRlIG9wdHMuc2hlbGw7XG5cbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIF07XG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG4gICAgdGhpcy5lc3ByZXNzbyA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG5cbiAgICB0aGlzLmFwa1N0cmluZ3MgPSB7fTsgLy8gbWFwIG9mIGxhbmd1YWdlIC0+IHN0cmluZ3Mgb2JqXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7fSwgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICAgIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMgPSB7fTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVE9ETyBoYW5kbGUgb3RoZXJTZXNzaW9uRGF0YSBmb3IgbXVsdGlwbGUgc2Vzc2lvbnNcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY2FwcylcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FwcyA9IE9iamVjdC5hc3NpZ24oc2VydmVyRGV0YWlscywgdGhpcy5jYXBzKTtcblxuICAgICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcblxuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IDkwMDAwXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgJ2Jyb3dzZXJOYW1lJyBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZGApO1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYENocm9tZSBicm93c2VyIGNhbm5vdCBiZSBydW4gaW4gRXNwcmVzc28gc2Vzc2lvbnMgYmVjYXVzZSBFc3ByZXNzbyBhdXRvbWF0aW9uIGRvZXNuJ3QgYCArXG4gICAgICAgICAgICAgIGBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIENocm9tZWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENocm9tZSBicm93c2VyIHNlc3Npb25zIGNhbm5vdCBiZSBydW4gaW4gRXNwcmVzc28gYmVjYXVzZSBFc3ByZXNzbyBgICtcbiAgICAgICAgICAgIGBhdXRvbWF0aW9uIGRvZXNuJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBDaHJvbWVgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICB0aGlzLnNldEF2ZEZyb21DYXBhYmlsaXRpZXMoY2Fwcyk7XG4gICAgICAgIHRoaXMuYWRkV2lwZURhdGFUb0F2ZEFyZ3MoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcHRzLnN5c3RlbVBvcnQgPSB0aGlzLm9wdHMuc3lzdGVtUG9ydFxuICAgICAgICB8fCBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShTWVNURU1fUE9SVF9SQU5HRVswXSwgU1lTVEVNX1BPUlRfUkFOR0VbMV0pO1xuICAgICAgdGhpcy5vcHRzLmFkYlBvcnQgPSB0aGlzLm9wdHMuYWRiUG9ydCB8fCBERUZBVUxUX0FEQl9QT1JUO1xuICAgICAgLy8gZ2V0IGRldmljZSB1ZGlkIGZvciB0aGlzIHNlc3Npb25cbiAgICAgIGNvbnN0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG4gICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IG91ciBqYXZhIHZlcnNpb24gYW5kIGRldmljZSBpbmZvLCB3ZSBjYW4gY3JlYXRlIG91clxuICAgICAgLy8gQURCIGluc3RhbmNlXG4gICAgICB0aGlzLmFkYiA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLmNyZWF0ZUFEQih0aGlzLm9wdHMpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgICAgICBvblBvc3RQcm9jZXNzOiB0aGlzLm9uUG9zdENvbmZpZ3VyZUFwcC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbnM6IFNVUFBPUlRFRF9FWFRFTlNJT05TXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIC8vIHRoZSBhcHAgaXNuJ3QgYW4gYWN0dWFsIGFwcCBmaWxlIGJ1dCByYXRoZXIgc29tZXRoaW5nIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gYXNzdW1lIGlzIG9uIHRoZSBkZXZpY2UgYW5kIGp1c3QgbGF1bmNoIHZpYSB0aGUgYXBwUGFja2FnZVxuICAgICAgICB0aGlzLmxvZy5pbmZvKGBBcHAgZmlsZSB3YXMgbm90IGxpc3RlZCwgaW5zdGVhZCB3ZSdyZSBnb2luZyB0byBydW4gYCArXG4gICAgICAgICAgICBgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgICBpZiAoIWF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIHRoZSBwYWNrYWdlICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfScgYCArXG4gICAgICAgICAgICBgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0RXNwcmVzc29TZXNzaW9uKCk7XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICBlLm1lc3NhZ2UgKz0gYCR7Xy5lbmRzV2l0aChlLm1lc3NhZ2UsICcuJykgPyAnJyA6ICcuJ30gQ2hlY2sgYCArXG4gICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1lc3ByZXNzby1kcml2ZXIjdHJvdWJsZXNob290aW5nICcgK1xuICAgICAgICAncmVnYXJkaW5nIGFkdmFuY2VkIHNlc3Npb24gc3RhcnR1cCB0cm91Ymxlc2hvb3RpbmcuJztcbiAgICAgIGlmIChpc0Vycm9yVHlwZShlLCBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVyciA9IG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgZXJyLnN0YWNrID0gZS5zdGFjaztcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW56aXAgdGhlIGdpdmVuIGFwcCBwYXRoIGFuZCByZXR1cm4gdGhlIGZpcnN0IHBhY2thZ2UgdGhhdCBoYXMgU1VQUE9SVEVEX0VYVEVOU0lPTlNcbiAgICogaW4gdGhlIGFyY2hpdmVkIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIFRoZSBwYXRoIHRvIGFwcCBmaWxlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1bnMgdGhlIHBhdGggdG8gYW4gdW56aXBwZWQgYXBwIGZpbGUgcGF0aC5cbiAgICogQHRocm93cyBSYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIHppcCBkaWQgbm90IGhhdmUgYW55IFNVUFBPUlRFRF9FWFRFTlNJT05TIHBhY2thZ2VzLlxuICAgKi9cbiAgYXN5bmMgdW56aXBBcHAgKGFwcFBhdGgpIHtcbiAgICBjb25zdCB1c2VTeXN0ZW1VbnppcEVudiA9IHByb2Nlc3MuZW52LkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQO1xuICAgIGNvbnN0IHVzZVN5c3RlbVVuemlwID0gXy5pc0VtcHR5KHVzZVN5c3RlbVVuemlwRW52KVxuICAgICAgfHwgIVsnMCcsICdmYWxzZSddLmluY2x1ZGVzKF8udG9Mb3dlcih1c2VTeXN0ZW1VbnppcEVudikpO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKGFwcFBhdGgsIHRtcFJvb3QsIHt1c2VTeXN0ZW1VbnppcH0pO1xuXG4gICAgY29uc3QgZ2xvYlBhdHRlcm4gPSBgKiovKi4rKCR7U1VQUE9SVEVEX0VYVEVOU0lPTlMubWFwKChleHQpID0+IGV4dC5yZXBsYWNlKC9eXFwuLywgJycpKS5qb2luKCd8Jyl9KWA7XG4gICAgY29uc3Qgc29ydGVkQnVuZGxlSXRlbXMgPSAoYXdhaXQgZnMuZ2xvYihnbG9iUGF0dGVybiwge1xuICAgICAgY3dkOiB0bXBSb290LFxuICAgICAgc3RyaWN0OiBmYWxzZSxcbiAgICB9KSkuc29ydCgoYSwgYikgPT4gYS5zcGxpdChwYXRoLnNlcCkubGVuZ3RoIC0gYi5zcGxpdChwYXRoLnNlcCkubGVuZ3RoKTtcbiAgICBpZiAoc29ydGVkQnVuZGxlSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBubyBleHBlY3RlZCBwYWNrYWdlcyBpbiB0aGUgemlwXG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAke3RoaXMub3B0cy5hcHB9IGRpZCBub3QgaGF2ZSBhbnkgb2YgJyR7U1VQUE9SVEVEX0VYVEVOU0lPTlMuam9pbignLCAnKX0nIGAgK1xuICAgICAgICBgZXh0ZW5zaW9uIHBhY2thZ2VzLiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwcm92aWRlZCAuemlwIGFyY2hpdmUgY29udGFpbnMgYXQgbGVhc3Qgb25lIHZhbGlkIGFwcGxpY2F0aW9uIHBhY2thZ2UuYCk7XG4gICAgfVxuICAgIGNvbnN0IHVuemlwcGVkQXBwUGF0aCA9IHBhdGguam9pbih0bXBSb290LCBfLmZpcnN0KHNvcnRlZEJ1bmRsZUl0ZW1zKSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCcke3VuemlwcGVkQXBwUGF0aH0nIGlzIHRoZSB1bnppcHBlZCBmaWxlIGZyb20gJyR7YXBwUGF0aH0nYCk7XG4gICAgcmV0dXJuIHVuemlwcGVkQXBwUGF0aDtcbiAgfVxuXG4gIGFzeW5jIG9uUG9zdENvbmZpZ3VyZUFwcCAoe2NhY2hlZEFwcEluZm8sIGlzVXJsLCBhcHBQYXRofSkge1xuICAgIGNvbnN0IHByZXNpZ25BcHAgPSBhc3luYyAoYXBwTG9jYXRpb24pID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMubm9TaWduKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1NraXBwaW5nIGFwcGxpY2F0aW9uIHNpZ25pbmcgYmVjYXVzZSBub1NpZ24gY2FwYWJpbGl0eSBpcyBzZXQgdG8gdHJ1ZS4gJyArXG4gICAgICAgICAgJ0hhdmluZyB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCB3aXRoIGltcHJvcGVyIHNpZ25hdHVyZS9ub24tc2lnbmVkIHdpbGwgY2F1c2UgJyArXG4gICAgICAgICAgJ0VzcHJlc3NvIGF1dG9tYXRpb24gc3RhcnR1cCBmYWlsdXJlLicpO1xuICAgICAgfSBlbHNlIGlmICghYXdhaXQgdGhpcy5hZGIuY2hlY2tBcGtDZXJ0KGFwcExvY2F0aW9uLCB0aGlzLm9wdHMuYXBwUGFja2FnZSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2lnbihhcHBMb2NhdGlvbiwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBoYXNBcGtFeHQgPSAoYXBwUGF0aCkgPT4gXy5lbmRzV2l0aChfLnRvTG93ZXIoYXBwUGF0aCksIEFQS19FWFQpO1xuICAgIGNvbnN0IGhhc0FhYkV4dCA9IChhcHBQYXRoKSA9PiBfLmVuZHNXaXRoKF8udG9Mb3dlcihhcHBQYXRoKSwgQUFCX0VYVCk7XG4gICAgY29uc3QgZXh0cmFjdFVuaXZlcnNhbEFwayA9IGFzeW5jIChzaG91bGRFeHRyYWN0LCBhcHBQYXRoKSA9PlxuICAgICAgc2hvdWxkRXh0cmFjdCA/IGFwcFBhdGggOiBhd2FpdCB0aGlzLmFkYi5leHRyYWN0VW5pdmVyc2FsQXBrKGFwcFBhdGgpO1xuXG4gICAgbGV0IHBhdGhJbkNhY2hlID0gbnVsbDtcbiAgICBsZXQgaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCA9IGZhbHNlO1xuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoY2FjaGVkQXBwSW5mbykpIHtcbiAgICAgIGNvbnN0IHBhY2thZ2VIYXNoID0gYXdhaXQgZnMuaGFzaChhcHBQYXRoKTtcbiAgICAgIGlmIChwYWNrYWdlSGFzaCA9PT0gY2FjaGVkQXBwSW5mby5wYWNrYWdlSGFzaCAmJiBhd2FpdCBmcy5leGlzdHMoY2FjaGVkQXBwSW5mby5mdWxsUGF0aCkpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgJyR7Y2FjaGVkQXBwSW5mby5mdWxsUGF0aH0nIHdoaWNoIGlzIGNhY2hlZCBmcm9tICcke2FwcFBhdGh9J2ApO1xuICAgICAgICBpc1Jlc3VsdEFwcFBhdGhBbHJlYWR5Q2FjaGVkID0gdHJ1ZTtcbiAgICAgICAgcGF0aEluQ2FjaGUgPSBjYWNoZWRBcHBJbmZvLmZ1bGxQYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFwcFBhdGggY2FuIGJlIC56aXAsIC5hcGsgb3IgLmFhYlxuICAgIGNvbnN0IGlzQXBrID0gaGFzQXBrRXh0KGFwcFBhdGgpO1xuICAgIC8vIE9ubHkgbG9jYWwgLmFwayBmaWxlcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4tcGxhY2Ugc2hvdWxkIG5vdCBiZSBjYWNoZWRcbiAgICBjb25zdCBzaG91bGRSZXN1bHRBcHBQYXRoQmVDYWNoZWQgPSAhaXNBcGsgfHwgKGlzQXBrICYmIGlzVXJsKTtcblxuICAgIGlmICghaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCkge1xuICAgICAgaWYgKHNob3VsZFJlc3VsdEFwcFBhdGhCZUNhY2hlZCkge1xuICAgICAgICAvLyAuemlwLCAuYWFiIG9yIGRvd25sb2FkZWQgLmFwa1xuXG4gICAgICAgIGxldCB1bnppcHBlZEFwcFBhdGg7XG4gICAgICAgIGxldCBpc1VuemlwcGVkQXBrID0gZmFsc2U7XG4gICAgICAgIGlmICghKGhhc0Fwa0V4dChhcHBQYXRoKSB8fCBoYXNBYWJFeHQoYXBwUGF0aCkpKSB7XG4gICAgICAgICAgdW56aXBwZWRBcHBQYXRoID0gYXdhaXQgdGhpcy51bnppcEFwcChhcHBQYXRoKTtcbiAgICAgICAgICBpc1VuemlwcGVkQXBrID0gaGFzQXBrRXh0KHVuemlwcGVkQXBwUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1bnppcHBlZEFwcFBhdGggb3IgYXBwUGF0aCBoYXMgU1VQUE9SVEVEX0VYVEVOU0lPTlMuXG4gICAgICAgIHBhdGhJbkNhY2hlID0gdW56aXBwZWRBcHBQYXRoXG4gICAgICAgICAgPyBhd2FpdCBleHRyYWN0VW5pdmVyc2FsQXBrKGlzVW56aXBwZWRBcGssIHVuemlwcGVkQXBwUGF0aClcbiAgICAgICAgICA6IGF3YWl0IGV4dHJhY3RVbml2ZXJzYWxBcGsoaXNBcGssIGFwcFBhdGgpO1xuXG4gICAgICAgIGlmICghaXNBcGsgJiYgaXNVcmwpIHtcbiAgICAgICAgICAvLyBDbGVhbiB1cCB0aGUgdGVtcG9yYXJpbHkgZG93bmxvYWRlZCAuYWFiIG9yIC56aXAgcGFja2FnZVxuICAgICAgICAgIGF3YWl0IGZzLnJpbXJhZihhcHBQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzQWFiRXh0KHVuemlwcGVkQXBwUGF0aCkpIHtcbiAgICAgICAgICAvLyBDbGVhbnVwIHRoZSBsb2NhbCB1bnppcHBlZCAuYWFiIGZpbGVcbiAgICAgICAgICBhd2FpdCBmcy5yaW1yYWYodW56aXBwZWRBcHBQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBwcmVzaWduQXBwKHBhdGhJbkNhY2hlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNBcGspIHtcbiAgICAgICAgLy8gSXQgaXMgcHJvYmFibHkgbm90IHRoZSBiZXN0IGlkZWEgdG8gbW9kaWZ5IHRoZSBwcm92aWRlZCBhcHAgaW4tcGxhY2UsXG4gICAgICAgIC8vIGJ1dCB0aGlzIGlzIGhvdyBpdCB3YXMgYWx3YXlzIHdvcmtpbmdcbiAgICAgICAgYXdhaXQgcHJlc2lnbkFwcChhcHBQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZFJlc3VsdEFwcFBhdGhCZUNhY2hlZCA/IHthcHBQYXRoOiBwYXRoSW5DYWNoZX0gOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGxlIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBpc0VtdWxhdG9yICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0VtdWxhdG9yKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG5cbiAgLy8gVE9ETyB0aGlzIG1ldGhvZCBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyLWRyaXZlcjsgY29uc29saWRhdGVcbiAgc2V0QXZkRnJvbUNhcGFiaWxpdGllcyAoY2Fwcykge1xuICAgIGlmICh0aGlzLm9wdHMuYXZkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgZGV2aWNlTmFtZSBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWNhcHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBwbGF0Zm9ybVZlcnNpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGF2ZERldmljZSA9IGNhcHMuZGV2aWNlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV8uXS9nLCAnLScpO1xuICAgICAgdGhpcy5vcHRzLmF2ZCA9IGAke2F2ZERldmljZX1fXyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259YDtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPIHRoaXMgbWV0aG9kIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjItZHJpdmVyOyBjb25zb2xpZGF0ZVxuICBhZGRXaXBlRGF0YVRvQXZkQXJncyAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuYXZkQXJncykge1xuICAgICAgdGhpcy5vcHRzLmF2ZEFyZ3MgPSAnLXdpcGUtZGF0YSc7XG4gICAgfSBlbHNlIGlmICghdGhpcy5vcHRzLmF2ZEFyZ3MudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnLXdpcGUtZGF0YScpKSB7XG4gICAgICB0aGlzLm9wdHMuYXZkQXJncyArPSAnIC13aXBlLWRhdGEnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gbXVjaCBvZiB0aGlzIGxvZ2ljIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjJcbiAgYXN5bmMgc3RhcnRFc3ByZXNzb1Nlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmluZm8oYEVzcHJlc3NvRHJpdmVyIHZlcnNpb246ICR7dmVyc2lvbn1gKTtcblxuICAgIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tYW5kcm9pZC1kcml2ZXIvcHVsbC80NjEgd2hhdCBoYXBwZW5zIGlmIHRoZXIgaXMgbm8gc2V0SGlkZGVuQXBpUG9saWN5IGZvciBBbmRyb2lkIFArXG4gICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICB0aGlzLmxvZy53YXJuKCdSZWxheGluZyBoaWRkZW4gYXBpIHBvbGljeScpO1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SGlkZGVuQXBpUG9saWN5KCcxJywgISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgIH1cblxuICAgIC8vIGdldCBhcHBQYWNrYWdlIGV0IGFsIGZyb20gbWFuaWZlc3QgaWYgbmVjZXNzYXJ5XG4gICAgbGV0IGFwcEluZm8gPSBhd2FpdCBoZWxwZXJzLmdldExhdW5jaEluZm8odGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgaWYgKGFwcEluZm8pIHtcbiAgICAgIC8vIGFuZCBnZXQgaXQgb250byBvdXIgJ29wdHMnIG9iamVjdCBzbyB3ZSB1c2UgaXQgZnJvbSBub3cgb25cbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRzLCBhcHBJbmZvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwSW5mbyA9IHRoaXMub3B0cztcbiAgICB9XG5cbiAgICAvLyBzdGFydCBhbiBhdmQsIHNldCB0aGUgbGFuZ3VhZ2UvbG9jYWxlLCBwaWNrIGFuIGVtdWxhdG9yLCBldGMuLi5cbiAgICAvLyBUT0RPIHdpdGggbXVsdGlwbGUgZGV2aWNlcyB3ZSdsbCBuZWVkIHRvIHBhcmFtZXRlcml6ZSB0aGlzXG4gICAgYXdhaXQgaGVscGVycy5pbml0RGV2aWNlKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLWVzcHJlc3NvLWRyaXZlci9pc3N1ZXMvNzJcbiAgICBpZiAoYXdhaXQgdGhpcy5hZGIuaXNBbmltYXRpb25PbigpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZShmYWxzZSk7XG4gICAgICAgIHRoaXMud2FzQW5pbWF0aW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHR1cm4gb2ZmIGFuaW1hdGlvbnM6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IGFjdHVhbCBkZXZpY2UgbmFtZSwgdWRpZFxuICAgIHRoaXMuY2Fwcy5kZXZpY2VOYW1lID0gdGhpcy5hZGIuY3VyRGV2aWNlSWQ7XG4gICAgdGhpcy5jYXBzLmRldmljZVVESUQgPSB0aGlzLm9wdHMudWRpZDtcblxuICAgIC8vIHNldCB1cCB0aGUgbW9kaWZpZWQgZXNwcmVzc28gc2VydmVyIGV0Y1xuICAgIHRoaXMuaW5pdEVzcHJlc3NvU2VydmVyKCk7XG4gICAgLy8gRnVydGhlciBwcmVwYXJlIHRoZSBkZXZpY2UgYnkgZm9yd2FyZGluZyB0aGUgZXNwcmVzc28gcG9ydFxuICAgIHRoaXMubG9nLmRlYnVnKGBGb3J3YXJkaW5nIEVzcHJlc3NvIFNlcnZlciBwb3J0ICR7REVWSUNFX1BPUlR9IHRvICR7dGhpcy5vcHRzLnN5c3RlbVBvcnR9YCk7XG4gICAgYXdhaXQgdGhpcy5hZGIuZm9yd2FyZFBvcnQodGhpcy5vcHRzLnN5c3RlbVBvcnQsIERFVklDRV9QT1JUKTtcblxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIC8vIHVubG9jayB0aGUgZGV2aWNlIHRvIHByZXBhcmUgaXQgZm9yIHRlc3RpbmdcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgJ3NraXBVbmxvY2snIGNhcGFiaWxpdHkgc2V0LCBzbyBza2lwcGluZyBkZXZpY2UgdW5sb2NrYCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHVwIGFwcCB1bmRlciB0ZXN0XG4gICAgLy8gcHJlcGFyZSBvdXIgYWN0dWFsIEFVVCwgZ2V0IGl0IG9uIHRoZSBkZXZpY2UsIGV0Yy4uLlxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy9BZGRpbmcgQVVUIHBhY2thZ2UgbmFtZSBpbiB0aGUgY2FwYWJpbGl0aWVzIGlmIHBhY2thZ2UgbmFtZSBub3QgZXhpc3QgaW4gY2Fwc1xuICAgIGlmICghdGhpcy5jYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBQYWNrYWdlID0gYXBwSW5mby5hcHBQYWNrYWdlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSkge1xuICAgICAgdGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlID0gYXBwSW5mby5hcHBXYWl0UGFja2FnZSB8fCBhcHBJbmZvLmFwcFBhY2thZ2UgfHwgdGhpcy5jYXBzLmFwcFBhY2thZ2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhcHMuYXBwQWN0aXZpdHkpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUodGhpcy5jYXBzLmFwcEFjdGl2aXR5LCB0aGlzLmNhcHMuYXBwUGFja2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUoYXBwSW5mby5hcHBBY3Rpdml0eSwgdGhpcy5jYXBzLmFwcFBhY2thZ2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXBzLmFwcFdhaXRBY3Rpdml0eSkge1xuICAgICAgdGhpcy5jYXBzLmFwcFdhaXRBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUodGhpcy5jYXBzLmFwcFdhaXRBY3Rpdml0eSwgdGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXBzLmFwcFdhaXRBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUoYXBwSW5mby5hcHBXYWl0QWN0aXZpdHkgfHwgYXBwSW5mby5hcHBBY3Rpdml0eSB8fCB0aGlzLmNhcHMuYXBwQWN0aXZpdHksXG4gICAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSk7XG4gICAgfVxuXG4gICAgLy8gbGF1bmNoIGVzcHJlc3NvIGFuZCB3YWl0IHRpbGwgaXRzIG9ubGluZSBhbmQgd2UgaGF2ZSBhIHNlc3Npb25cbiAgICBhd2FpdCB0aGlzLmVzcHJlc3NvLnN0YXJ0U2Vzc2lvbih0aGlzLmNhcHMpO1xuICAgIGlmICh0aGlzLmNhcHMuYXV0b0xhdW5jaCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYE5vdCB3YWl0aW5nIGZvciB0aGUgYXBwbGljYXRpb24gYWN0aXZpdHkgdG8gc3RhcnQgYmVjYXVzZSAnYXV0b0xhdW5jaCcgaXMgZGlzYWJsZWRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5hZGIud2FpdEZvckFjdGl2aXR5KHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSwgdGhpcy5jYXBzLmFwcFdhaXRBY3Rpdml0eSwgdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbik7XG4gICAgfVxuICAgIC8vIGlmIHdlIHdhbnQgdG8gaW1tZWRpYXRlbHkgZ2V0IGludG8gYSB3ZWJ2aWV3LCBzZXQgb3VyIGNvbnRleHRcbiAgICAvLyBhcHByb3ByaWF0ZWx5XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgYXdhaXQgdGhpcy5pbml0V2VidmlldygpO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IGV2ZXJ5dGhpbmcgaGFzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LCB0dXJuIG9uIHByb3h5aW5nIHNvIGFsbFxuICAgIC8vIHN1YnNlcXVlbnQgc2Vzc2lvbiByZXF1ZXN0cyBnbyBzdHJhaWdodCB0by9mcm9tIGVzcHJlc3NvXG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG5cbiAgICBhd2FpdCB0aGlzLmFkZERldmljZUluZm9Ub0NhcHMoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRXZWJ2aWV3ICgpIHtcbiAgICBjb25zdCB2aWV3TmFtZSA9IGFuZHJvaWRDb21tYW5kcy5kZWZhdWx0V2Vidmlld05hbWUuY2FsbCh0aGlzKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5vcHRzLmF1dG9XZWJ2aWV3VGltZW91dCB8fCAyMDAwO1xuICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgd2VidmlldyB0byBjb250ZXh0ICcke3ZpZXdOYW1lfScgd2l0aCB0aW1lb3V0ICR7dGltZW91dH1tc2ApO1xuICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCB0aGlzLnNldENvbnRleHQuYmluZCh0aGlzKSwgdmlld05hbWUpO1xuICB9XG5cbiAgYXN5bmMgYWRkRGV2aWNlSW5mb1RvQ2FwcyAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtVmVyc2lvbixcbiAgICAgIG1hbnVmYWN0dXJlcixcbiAgICAgIG1vZGVsLFxuICAgICAgcmVhbERpc3BsYXlTaXplLFxuICAgICAgZGlzcGxheURlbnNpdHksXG4gICAgfSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0RGV2aWNlSW5mbygpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VBcGlMZXZlbCA9IHBhcnNlSW50KGFwaVZlcnNpb24sIDEwKTtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5TaXplID0gcmVhbERpc3BsYXlTaXplO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5EZW5zaXR5ID0gZGlzcGxheURlbnNpdHk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5jYXBzLmRldmljZU1hbnVmYWN0dXJlciA9IG1hbnVmYWN0dXJlcjtcbiAgfVxuXG4gIGluaXRFc3ByZXNzb1NlcnZlciAoKSB7XG4gICAgLy8gbm93IHRoYXQgd2UgaGF2ZSBwYWNrYWdlIGFuZCBhY3Rpdml0eSwgd2UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZlxuICAgIC8vIGVzcHJlc3NvIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRhdGFcbiAgICB0aGlzLmVzcHJlc3NvID0gbmV3IEVzcHJlc3NvUnVubmVyKHRoaXMubG9nLCB7XG4gICAgICBob3N0OiB0aGlzLm9wdHMucmVtb3RlQWRiSG9zdCB8fCB0aGlzLm9wdHMuaG9zdCB8fCAnMTI3LjAuMC4xJyxcbiAgICAgIHN5c3RlbVBvcnQ6IHRoaXMub3B0cy5zeXN0ZW1Qb3J0LFxuICAgICAgZGV2aWNlUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICBhZGI6IHRoaXMuYWRiLFxuICAgICAgYXBrOiB0aGlzLm9wdHMuYXBwLFxuICAgICAgdG1wRGlyOiB0aGlzLm9wdHMudG1wRGlyLFxuICAgICAgYXBwUGFja2FnZTogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICBhcHBBY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgZm9yY2VFc3ByZXNzb1JlYnVpbGQ6ICEhdGhpcy5vcHRzLmZvcmNlRXNwcmVzc29SZWJ1aWxkLFxuICAgICAgZXNwcmVzc29CdWlsZENvbmZpZzogdGhpcy5vcHRzLmVzcHJlc3NvQnVpbGRDb25maWcsXG4gICAgICBzaG93R3JhZGxlTG9nOiAhIXRoaXMub3B0cy5zaG93R3JhZGxlTG9nLFxuICAgICAgc2VydmVyTGF1bmNoVGltZW91dDogdGhpcy5vcHRzLmVzcHJlc3NvU2VydmVyTGF1bmNoVGltZW91dCxcbiAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogdGhpcy5vcHRzLmFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIHNraXBTZXJ2ZXJJbnN0YWxsYXRpb246IHRoaXMub3B0cy5za2lwU2VydmVySW5zdGFsbGF0aW9uLFxuICAgICAgdXNlS2V5c3RvcmU6IHRoaXMub3B0cy51c2VLZXlzdG9yZSxcbiAgICAgIGtleXN0b3JlUGF0aDogdGhpcy5vcHRzLmtleXN0b3JlUGF0aCxcbiAgICAgIGtleXN0b3JlUGFzc3dvcmQ6IHRoaXMub3B0cy5rZXlzdG9yZVBhc3N3b3JkLFxuICAgICAga2V5QWxpYXM6IHRoaXMub3B0cy5rZXlBbGlhcyxcbiAgICAgIGtleVBhc3N3b3JkOiB0aGlzLm9wdHMua2V5UGFzc3dvcmQsXG4gICAgICBkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZTogdGhpcy5vcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmVzcHJlc3NvLnByb3h5UmVxUmVzLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gICAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLmVzcHJlc3NvLnByb3h5Q29tbWFuZC5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICB9XG5cbiAgLy8gVE9ETyB0aGlzIG1ldGhvZCBpcyBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMlxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBzZXQgdGhlIGxvY2FsaXplZCBzdHJpbmdzIGZvciB0aGUgY3VycmVudCBsYW5ndWFnZSBmcm9tIHRoZSBhcGtcbiAgICAvLyBUT0RPOiBpbmNvcnBvcmF0ZSBjaGFuZ2VzIGZyb20gYXBwaXVtIzUzMDggd2hpY2ggZml4IGEgcmFjZSBjb25kLVxuICAgIC8vIGl0aW9uIGJ1ZyBpbiBvbGQgYXBwaXVtIGFuZCBuZWVkIHRvIGJlIHJlcGxpY2F0ZWQgaGVyZVxuICAgIC8vIHRoaXMuYXBrU3RyaW5nc1t0aGlzLm9wdHMubGFuZ3VhZ2VdID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMucHVzaFN0cmluZ3MoXG4gICAgLy8gICAgIHRoaXMub3B0cy5sYW5ndWFnZSwgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG5cbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgYXdhaXQgaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzKFxuICAgICAgICB0aGlzLmFkYixcbiAgICAgICAgaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSxcbiAgICAgICAgW1NFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFRFU1RfQVBLX1BLR11cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdGdWxsIHJlc2V0IHJlcXVpcmVzIGFuIGFwcCBjYXBhYmlsaXR5LCB1c2UgZmFzdFJlc2V0IGlmIGFwcCBpcyBub3QgcHJvdmlkZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBhcHAgY2FwYWJpbGl0eS4gQXNzdW1pbmcgaXQgaXMgYWxyZWFkeSBvbiB0aGUgZGV2aWNlJyk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZhc3RSZXNldCkge1xuICAgICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0QXBwKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmluc3RhbGwpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxBcGsodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMuc2tpcFNlcnZlckluc3RhbGxhdGlvbikge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ3NraXBTZXJ2ZXJJbnN0YWxsYXRpb24gY2FwYWJpbGl0eSBpcyBzZXQuIE5vdCBpbnN0YWxsaWcgZXNwcmVzc28tc2VydmVyICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmVzcHJlc3NvLmluc3RhbGxUZXN0QXBrKCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5hZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QoU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgVEVTVF9BUEtfUEtHKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IGFkZCBzZXJ2ZXIgcGFja2FnZXMgdG8gdGhlIERvemUgd2hpdGVsaXN0LiBPcmlnaW5hbCBlcnJvcjogYCArXG4gICAgICAgICAgKGUuc3RkZXJyIHx8IGUubWVzc2FnZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdEZWxldGluZyBlc3ByZXNzbyBzZXNzaW9uJyk7XG5cbiAgICBjb25zdCBzY3JlZW5SZWNvcmRpbmdTdG9wVGFza3MgPSBbYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9wUmVjb3JkaW5nU2NyZWVuKCk7XG4gICAgICB9XG4gICAgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGF3YWl0IHRoaXMubW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nKCk7XG4gICAgICB9XG4gICAgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuU3RyZWFtaW5nUHJvcHMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuICAgICAgfVxuICAgIH1dO1xuXG4gICAgYXdhaXQgYW5kcm9pZEhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBpZiAodGhpcy5lc3ByZXNzbykge1xuICAgICAgaWYgKHRoaXMuandwUHJveHlBY3RpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5lc3ByZXNzby5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVzcHJlc3NvID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBhd2FpdCBCLmFsbChzY3JlZW5SZWNvcmRpbmdTdG9wVGFza3MubWFwKCh0YXNrKSA9PiB7XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRhc2soKTtcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgIH0pKCk7XG4gICAgICB9KSk7XG4gICAgICBpZiAodGhpcy53YXNBbmltYXRpb25FbmFibGVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byByZXNldCBhbmltYXRpb246ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkICYmIHRoaXMub3B0cy5yZXNldEtleWJvYXJkICYmXG4gICAgICAgICAgdGhpcy5kZWZhdWx0SU1FKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICcke3RoaXMuZGVmYXVsdElNRX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2hyb21lU2Vzc2lvbiAmJiB0aGlzLm9wdHMuYXBwUGFja2FnZSAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsICYmICF0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBGVUxMX1JFU0VUIHNldCB0byAndHJ1ZScsIFVuaW5zdGFsbGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICBsZXQgYXZkTmFtZSA9IHRoaXMub3B0cy5hdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYGNsb3NpbmcgZW11bGF0b3IgJyR7YXZkTmFtZX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3JpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gdGhlIGRldmljZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSghIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHJlbW92ZSBwb3J0IGZvcndhcmQgJyR7ZXJyb3IubWVzc2FnZX0nYCk7XG4gICAgICAgIC8vSWdub3JlLCB0aGlzIGJsb2NrIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hlbiB3ZSBmYWxsIGluIGNhdGNoIGJsb2NrXG4gICAgICAgIC8vIGFuZCBiZWZvcmUgZXZlbiBwb3J0IGZvcndhcmQuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoKSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBkbyBub3RoaW5nIGhlcmUsIHNpbmNlIGNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzIHByb3hpZXNcbiAgICAvLyBzZXR0aW5ncyB0byB0aGUgZXNwcmVzc28gc2VydmVyIGFscmVhZHlcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgYWx3YXlzIGhhdmUgYW4gYWN0aXZlIHByb3h5IHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNhblByb3h5IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5jYW5Qcm94eShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgY2FuIGFsd2F5cyBwcm94eSB0byB0aGUgZXNwcmVzc28gc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKTtcbiAgICAvLyB3ZSBhcmUgbWFpbnRhaW5pbmcgdHdvIHNldHMgb2YgTk9fUFJPWFkgbGlzdHMsIG9uZSBmb3IgY2hyb21lZHJpdmVyKENIUk9NRV9OT19QUk9YWSlcbiAgICAvLyBhbmQgb25lIGZvciBFc3ByZXNzbyhOT19QUk9YWSksIGJhc2VkIG9uIGN1cnJlbnQgY29udGV4dCB3aWxsIHJldHVybiByZWxhdGVkIE5PX1BST1hZIGxpc3RcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBfLmlzTmlsKHRoaXMuY2hyb21lZHJpdmVyKSA/IE5PX1BST1hZIDogQ0hST01FX05PX1BST1hZO1xuICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gWy4uLnRoaXMuandwUHJveHlBdm9pZCwgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2NyZWVuc2hvdCcpXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGdldCBpc0Nocm9tZVNlc3Npb24gKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzQ2hyb21lQnJvd3Nlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICB9XG5cbiAgZ2V0IGFwcE9uRGV2aWNlICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5hcHAgJiYgdGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgfVxufVxuXG4vLyBmaXJzdCBhZGQgdGhlIGFuZHJvaWQtZHJpdmVyIGNvbW1hbmRzIHdoaWNoIHdlIHdpbGwgZmFsbCBiYWNrIHRvXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGFuZHJvaWRDb21tYW5kcykpIHtcbiAgLy8gd2UgZG8gc29tZSBkaWZmZXJlbnQvc3BlY2lhbCB0aGluZ3Mgd2l0aCB0aGVzZSBtZXRob2RzXG4gIGlmICghXy5pbmNsdWRlcyhbJ2RlZmF1bHRXZWJ2aWV3TmFtZSddLCBjbWQpKSB7XG4gICAgRXNwcmVzc29Ecml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbiAgfVxufVxuXG4vLyB0aGVuIG92ZXJ3cml0ZSB3aXRoIGFueSBlc3ByZXNzby1zcGVjaWZpYyBjb21tYW5kc1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgRXNwcmVzc29Ecml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuZXhwb3J0IHsgRXNwcmVzc29Ecml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEVzcHJlc3NvRHJpdmVy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QSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQTlCZSxFQStCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQS9CZSxFQWdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMENBQVgsQ0FBVCxDQWhDZSxFQWlDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQWpDZSxFQWtDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQWxDZSxFQW1DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsc0NBQVgsQ0FBVCxDQW5DZSxFQW9DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQXBDZSxFQXFDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQXJDZSxFQXNDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsaUNBQVgsQ0FBVCxDQXRDZSxFQXVDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsdUNBQVgsQ0FBVCxDQXZDZSxFQXdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0NBQVgsQ0FBVCxDQXhDZSxFQXlDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQXpDZSxFQTBDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBVCxDQTFDZSxFQTJDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBVCxDQTNDZSxFQTRDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0JBQVgsQ0FBVCxDQTVDZSxFQTZDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOEJBQVgsQ0FBVCxDQTdDZSxFQThDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0JBQVgsQ0FBVCxDQTlDZSxFQStDZixD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