appium-chromedriver 5.2.7 → 5.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## [5.2.9](https://github.com/appium/appium-chromedriver/compare/v5.2.8...v5.2.9) (2022-12-01)
2
+
3
+ ## [5.2.8](https://github.com/appium/appium-chromedriver/compare/v5.2.7...v5.2.8) (2022-11-29)
4
+
1
5
  ## [5.2.7](https://github.com/appium/appium-chromedriver/compare/v5.2.6...v5.2.7) (2022-11-22)
2
6
 
3
7
  ## [5.2.6](https://github.com/appium/appium-chromedriver/compare/v5.2.5...v5.2.6) (2022-11-06)
package/README.md CHANGED
@@ -9,6 +9,11 @@ Chrome/Chromium-based browsers
9
9
  and web views using Hybrid Mode approach. Check the corresponding driver tutorials to get
10
10
  more details on it.
11
11
 
12
+ > **Note**
13
+ >
14
+ > The normal use of this package is via an Appium driver such as [UiAutomator2](https://github.com/appium/appium-uiautomator2-driver/) and not directly.
15
+ > Please ensure you know what you are doing before using this package directly.
16
+
12
17
  ## Skipping binary installation
13
18
 
14
19
  By default, upon installation the package downloads the most recent known Chromedriver version from
@@ -27,22 +32,10 @@ The full list of known Chromedriver versions and their corresponding supported
27
32
  Chrome version could be found in
28
33
  [mapping.json](https://github.com/appium/appium-chromedriver/blob/master/config/mapping.json)
29
34
 
30
- To download a custom version of Chromedriver, use either npm config property `chromedriver_version`.
31
-
32
- ```bash
33
- npm install appium-chromedriver --chromedriver_version="2.16"
34
- ```
35
-
36
- The property could also be added into your [`.npmrc`](https://docs.npmjs.com/files/npmrc) file.
37
-
38
- ```bash
39
- chromedriver_version=2.16
40
- ```
41
-
42
- Another possibility is to set the `CHROMEDRIVER_VERSION` environment variable:
35
+ To download a custom version of Chromedriver, please set `CHROMEDRIVER_VERSION` environment variable:
43
36
 
44
37
  ```bash
45
- CHROMEDRIVER_VERSION=2.20 npm install appium-chromedriver
38
+ CHROMEDRIVER_VERSION=107.0.5304.62 npm install appium-chromedriver
46
39
  ```
47
40
 
48
41
  ## Custom binaries url
@@ -20,7 +20,6 @@ var _path = _interopRequireDefault(require("path"));
20
20
  var _compareVersions = require("compare-versions");
21
21
  var _storageClient = _interopRequireDefault(require("./storage-client"));
22
22
  var _protocolHelpers = require("./protocol-helpers");
23
-
24
23
  const NEW_CD_VERSION_FORMAT_MAJOR_VERSION = 73;
25
24
  const DEFAULT_HOST = '127.0.0.1';
26
25
  const MIN_CD_VERSION_WITH_W3C_SUPPORT = 75;
@@ -98,7 +97,6 @@ class Chromedriver extends _events.default.EventEmitter {
98
97
  } else {
99
98
  this.log.debug('Using the static Chromedriver->Chrome mapping');
100
99
  }
101
-
102
100
  for (const [cdVersion, chromeVersion] of _lodash.default.toPairs(mapping)) {
103
101
  const coercedVersion = _semver.default.coerce(chromeVersion);
104
102
  if (coercedVersion) {
@@ -146,7 +144,6 @@ class Chromedriver extends _events.default.EventEmitter {
146
144
  if (!(err.message || '').includes('timed out') && !(err.stdout || '').includes('Starting ChromeDriver')) {
147
145
  return logError(err);
148
146
  }
149
-
150
147
  stdout = err.stdout;
151
148
  }
152
149
  const match = /ChromeDriver\s+\(?v?([\d.]+)\)?/i.exec(stdout);
@@ -199,7 +196,6 @@ class Chromedriver extends _events.default.EventEmitter {
199
196
  }
200
197
  }
201
198
  let chromeVersion;
202
-
203
199
  if (this.bundleId === WEBVIEW_SHELL_BUNDLE_ID) {
204
200
  for (const bundleId of WEBVIEW_BUNDLE_IDS) {
205
201
  chromeVersion = await (0, _utils.getChromeVersion)(this.adb, bundleId);
@@ -210,17 +206,14 @@ class Chromedriver extends _events.default.EventEmitter {
210
206
  }
211
207
  return null;
212
208
  }
213
-
214
209
  if (this.adb) {
215
210
  const apiLevel = await this.adb.getApiLevel();
216
211
  if (apiLevel >= 24 && apiLevel <= 28 && [WEBVIEW_SHELL_BUNDLE_ID, ...WEBVIEW_BUNDLE_IDS].includes(this.bundleId)) {
217
212
  this.bundleId = CHROME_BUNDLE_ID;
218
213
  }
219
214
  }
220
-
221
215
  if (!this.bundleId) {
222
216
  this.bundleId = CHROME_BUNDLE_ID;
223
-
224
217
  for (const bundleId of WEBVIEW_BUNDLE_IDS) {
225
218
  chromeVersion = await (0, _utils.getChromeVersion)(this.adb, bundleId);
226
219
  if (chromeVersion) {
@@ -229,11 +222,9 @@ class Chromedriver extends _events.default.EventEmitter {
229
222
  }
230
223
  }
231
224
  }
232
-
233
225
  if (!chromeVersion) {
234
226
  chromeVersion = await (0, _utils.getChromeVersion)(this.adb, this.bundleId);
235
227
  }
236
-
237
228
  return chromeVersion ? _semver.default.coerce(chromeVersion) : null;
238
229
  }
239
230
  async updateDriversMapping(newMapping) {
@@ -357,7 +348,6 @@ class Chromedriver extends _events.default.EventEmitter {
357
348
  }
358
349
  async initChromedriverPath() {
359
350
  if (this.executableVerified) return;
360
-
361
351
  if (!this.chromedriver) {
362
352
  this.chromedriver = this.useSystemExecutable ? await (0, _utils.getChromedriverBinaryPath)() : await this.getCompatibleChromedriver();
363
353
  }
@@ -383,7 +373,6 @@ class Chromedriver extends _events.default.EventEmitter {
383
373
  }
384
374
  async start(caps, emitStartingState = true) {
385
375
  this.capabilities = _lodash.default.cloneDeep(caps);
386
-
387
376
  this.capabilities.loggingPrefs = _lodash.default.cloneDeep((0, _protocolHelpers.getCapValue)(caps, 'loggingPrefs', {}));
388
377
  if (_lodash.default.isEmpty(this.capabilities.loggingPrefs.browser)) {
389
378
  this.capabilities.loggingPrefs.browser = 'ALL';
@@ -411,10 +400,8 @@ class Chromedriver extends _events.default.EventEmitter {
411
400
  try {
412
401
  await this.initChromedriverPath();
413
402
  await this.killAll();
414
-
415
403
  this.proc = new _teen_process.SubProcess(this.chromedriver, args);
416
404
  processIsAlive = true;
417
-
418
405
  this.proc.on('output', (stdout, stderr) => {
419
406
  const out = stdout + stderr;
420
407
  let match = /"Browser": "(.*)"/.exec(out);
@@ -422,13 +409,11 @@ class Chromedriver extends _events.default.EventEmitter {
422
409
  webviewVersion = match[1];
423
410
  this.log.debug(`Webview version: '${webviewVersion}'`);
424
411
  }
425
-
426
412
  match = /Starting ChromeDriver ([.\d]+)/.exec(out);
427
413
  if (match) {
428
414
  this.log.debug(`Chromedriver version: '${match[1]}'`);
429
415
  this.syncProtocol(match[1]);
430
416
  }
431
-
432
417
  if (this.verbose) {
433
418
  for (let line of (stdout || '').trim().split('\n')) {
434
419
  if (!line.trim().length) continue;
@@ -440,7 +425,6 @@ class Chromedriver extends _events.default.EventEmitter {
440
425
  }
441
426
  }
442
427
  });
443
-
444
428
  this.proc.on('exit', (code, signal) => {
445
429
  processIsAlive = false;
446
430
  if (this.state !== Chromedriver.STATE_STOPPED && this.state !== Chromedriver.STATE_STOPPING && this.state !== Chromedriver.STATE_RESTARTING) {
@@ -600,4 +584,4 @@ Chromedriver.STATE_STOPPING = 'stopping';
600
584
  Chromedriver.STATE_RESTARTING = 'restarting';
601
585
  var _default = Chromedriver;
602
586
  exports.default = _default;
603
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTiIsIkRFRkFVTFRfSE9TVCIsIk1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQiLCJERUZBVUxUX1BPUlQiLCJDSFJPTUVfQlVORExFX0lEIiwiV0VCVklFV19TSEVMTF9CVU5ETEVfSUQiLCJXRUJWSUVXX0JVTkRMRV9JRFMiLCJWRVJTSU9OX1BBVFRFUk4iLCJDRF9WRVJTSU9OX1RJTUVPVVQiLCJDaHJvbWVkcml2ZXIiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJob3N0IiwicG9ydCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJleGVjdXRhYmxlIiwiZXhlY3V0YWJsZURpciIsImdldENocm9tZWRyaXZlckRpciIsImJ1bmRsZUlkIiwibWFwcGluZ1BhdGgiLCJjbWRBcmdzIiwiYWRiIiwidmVyYm9zZSIsImxvZ1BhdGgiLCJkaXNhYmxlQnVpbGRDaGVjayIsImRldGFpbHMiLCJpc0F1dG9kb3dubG9hZEVuYWJsZWQiLCJfbG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiZ2VuZXJhdGVMb2dQcmVmaXgiLCJwcm94eUhvc3QiLCJwcm94eVBvcnQiLCJwcm9jIiwiY2hyb21lZHJpdmVyIiwiZXhlY3V0YWJsZVZlcmlmaWVkIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiandwcm94eSIsIkpXUHJveHkiLCJzZXJ2ZXIiLCJsb2ciLCJzdG9yYWdlQ2xpZW50IiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNocm9tZWRyaXZlckRpciIsImNhcGFiaWxpdGllcyIsImRlc2lyZWRQcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJnZXREcml2ZXJzTWFwcGluZyIsIm1hcHBpbmciLCJfIiwiY2xvbmVEZWVwIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwiZGVidWciLCJmcyIsImV4aXN0cyIsIndhcm4iLCJpbmZvIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGUiLCJlcnIiLCJtZXNzYWdlIiwiY2RWZXJzaW9uIiwiY2hyb21lVmVyc2lvbiIsInRvUGFpcnMiLCJjb2VyY2VkVmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsInZlcnNpb24iLCJnZXRDaHJvbWVkcml2ZXJzIiwiZXhlY3V0YWJsZXMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwibm9kaXIiLCJhYnNvbHV0ZSIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJjZHMiLCJhc3luY21hcCIsImxvZ0Vycm9yIiwic3Rkb3V0Iiwic3RkZXJyIiwiZXJyTXNnIiwicGF0aCIsImJhc2VuYW1lIiwiZXhlYyIsInRpbWVvdXQiLCJpbmNsdWRlcyIsIm1hdGNoIiwibWluQ2hyb21lVmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJmaWx0ZXIiLCJjZCIsInNvcnQiLCJhIiwiYiIsImNvbXBhcmVWZXJzaW9ucyIsImlzRW1wdHkiLCJnZXRDaHJvbWVWZXJzaW9uIiwiQnJvd3NlciIsInZlcnNpb25NYXRjaCIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJ1cGRhdGVEcml2ZXJzTWFwcGluZyIsIm5ld01hcHBpbmciLCJzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwiZSIsIk9iamVjdCIsImFzc2lnbiIsImdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIiLCJnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIiwidmFsdWVzIiwiZGlkU3RvcmFnZVN5bmMiLCJzeW5jQ2hyb21lZHJpdmVycyIsInJldHJpZXZlZE1hcHBpbmciLCJyZXRyaWV2ZU1hcHBpbmciLCJkcml2ZXJLZXlzIiwic3luY0RyaXZlcnMiLCJtaW5Ccm93c2VyVmVyc2lvbiIsInN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nIiwicmVkdWNlIiwiYWNjIiwieCIsIm1pc3NpbmdWZXJzaW9ucyIsImNvZXJjZWRWZXIiLCJzaXplIiwiZXJyb3JBbmRUaHJvdyIsIm1hdGNoaW5nRHJpdmVycyIsIm1pbkNocm9tZVZlcnNpb25TIiwiZ3RlIiwiQ0RfQ0ROIiwic3RhY2siLCJhdXRvZG93bmxvYWRTdWdnZXN0aW9uIiwiRXJyb3IiLCJiaW5QYXRoIiwiaW5pdENocm9tZWRyaXZlclBhdGgiLCJzeW5jUHJvdG9jb2wiLCJXM0MiLCJjaHJvbWVPcHRpb25zIiwiZ2V0Q2FwVmFsdWUiLCJ3M2MiLCJ0b1czY0NhcE5hbWVzIiwic3RhcnQiLCJjYXBzIiwiZW1pdFN0YXJ0aW5nU3RhdGUiLCJsb2dnaW5nUHJlZnMiLCJicm93c2VyIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImFkYlBvcnQiLCJwdXNoIiwiaXNBcnJheSIsInN0YXJ0RGV0ZWN0b3IiLCJzdGFydHNXaXRoIiwicHJvY2Vzc0lzQWxpdmUiLCJ3ZWJ2aWV3VmVyc2lvbiIsImtpbGxBbGwiLCJTdWJQcm9jZXNzIiwib24iLCJvdXQiLCJsaW5lIiwidHJpbSIsInNwbGl0IiwiZXJyb3IiLCJjb2RlIiwic2lnbmFsIiwiU1RBVEVfU1RPUFBJTkciLCJTVEFURV9SRVNUQVJUSU5HIiwibXNnIiwiam9pbiIsIndhaXRGb3JPbmxpbmUiLCJzdGFydFNlc3Npb24iLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwidmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlciIsInNlc3Npb25JZCIsIlNUQVRFX09OTElORSIsInJlc3RhcnQiLCJjaHJvbWVkcml2ZXJTdG9wcGVkIiwicmV0cnlJbnRlcnZhbCIsImdldFN0YXR1cyIsImNvbW1hbmQiLCJzZXNzaW9uQ2FwcyIsImFsd2F5c01hdGNoIiwiZGVzaXJlZENhcGFiaWxpdGllcyIsInByZWZpeCIsImVtaXRTdGF0ZXMiLCJydW5TYWZlU3RlcCIsImYiLCJFVkVOVF9DSEFOR0VEIiwic2VuZENvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwicHJveHlSZXEiLCJyZXEiLCJyZXMiLCJwcm94eVJlcVJlcyIsImNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsIkIiLCJwcm9taXNpZnkiLCJjcCIsInVkaWRJbmRleCIsImRlZmF1bHRBcmdzIiwiZmluZEluZGV4IiwiaXRlbSIsInVkaWQiLCJjb25uIiwiZ2V0Rm9yd2FyZExpc3QiLCJwYXJhbXMiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsInJlcGxhY2UiLCJoYXNXb3JraW5nV2VidmlldyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jaHJvbWVkcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1haW5cblxuaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgSldQcm94eSwgUFJPVE9DT0xTIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgYXN5bmNtYXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIGdldENocm9tZVZlcnNpb24sIGdldENocm9tZWRyaXZlckRpciwgQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HLFxuICBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoLCBDRF9DRE4sIGdlbmVyYXRlTG9nUHJlZml4XG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY29tcGFyZVZlcnNpb25zIH0gZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCBmcm9tICcuL3N0b3JhZ2UtY2xpZW50JztcbmltcG9ydCB7IHRvVzNjQ2FwTmFtZXMsIGdldENhcFZhbHVlIH0gZnJvbSAnLi9wcm90b2NvbC1oZWxwZXJzJztcblxuY29uc3QgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04gPSA3MztcbmNvbnN0IERFRkFVTFRfSE9TVCA9ICcxMjcuMC4wLjEnO1xuY29uc3QgTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCA9IDc1O1xuY29uc3QgREVGQVVMVF9QT1JUID0gOTUxNTtcbmNvbnN0IENIUk9NRV9CVU5ETEVfSUQgPSAnY29tLmFuZHJvaWQuY2hyb21lJztcbmNvbnN0IFdFQlZJRVdfU0hFTExfQlVORExFX0lEID0gJ29yZy5jaHJvbWl1bS53ZWJ2aWV3X3NoZWxsJztcbmNvbnN0IFdFQlZJRVdfQlVORExFX0lEUyA9IFtcbiAgJ2NvbS5nb29nbGUuYW5kcm9pZC53ZWJ2aWV3JyxcbiAgJ2NvbS5hbmRyb2lkLndlYnZpZXcnLFxuXTtcbmNvbnN0IFZFUlNJT05fUEFUVEVSTiA9IC8oW1xcZC5dKykvO1xuXG5jb25zdCBDRF9WRVJTSU9OX1RJTUVPVVQgPSA1MDAwO1xuXG5jbGFzcyBDaHJvbWVkcml2ZXIgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKGFyZ3MgPSB7fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCB7XG4gICAgICBob3N0ID0gREVGQVVMVF9IT1NULFxuICAgICAgcG9ydCA9IERFRkFVTFRfUE9SVCxcbiAgICAgIHVzZVN5c3RlbUV4ZWN1dGFibGUgPSBmYWxzZSxcbiAgICAgIGV4ZWN1dGFibGUsXG4gICAgICBleGVjdXRhYmxlRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKCksXG4gICAgICBidW5kbGVJZCxcbiAgICAgIG1hcHBpbmdQYXRoLFxuICAgICAgY21kQXJncyxcbiAgICAgIGFkYixcbiAgICAgIHZlcmJvc2UsXG4gICAgICBsb2dQYXRoLFxuICAgICAgZGlzYWJsZUJ1aWxkQ2hlY2ssXG4gICAgICBkZXRhaWxzLFxuICAgICAgaXNBdXRvZG93bmxvYWRFbmFibGVkID0gZmFsc2UsXG4gICAgfSA9IGFyZ3M7XG4gICAgdGhpcy5fbG9nID0gbG9nZ2VyLmdldExvZ2dlcihnZW5lcmF0ZUxvZ1ByZWZpeCh0aGlzKSk7XG5cbiAgICB0aGlzLnByb3h5SG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wcm94eVBvcnQgPSBwb3J0O1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMuY21kQXJncyA9IGNtZEFyZ3M7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICB0aGlzLnVzZVN5c3RlbUV4ZWN1dGFibGUgPSB1c2VTeXN0ZW1FeGVjdXRhYmxlO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gZXhlY3V0YWJsZTtcbiAgICB0aGlzLmV4ZWN1dGFibGVEaXIgPSBleGVjdXRhYmxlRGlyO1xuICAgIHRoaXMubWFwcGluZ1BhdGggPSBtYXBwaW5nUGF0aDtcbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5leGVjdXRhYmxlVmVyaWZpZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXRlID0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQ7XG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEpXUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnByb3h5SG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMucHJveHlQb3J0LFxuICAgICAgbG9nOiB0aGlzLl9sb2csXG4gICAgfSk7XG4gICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTtcbiAgICB0aGlzLmxvZ1BhdGggPSBsb2dQYXRoO1xuICAgIHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2sgPSAhIWRpc2FibGVCdWlsZENoZWNrO1xuICAgIHRoaXMuc3RvcmFnZUNsaWVudCA9IGlzQXV0b2Rvd25sb2FkRW5hYmxlZFxuICAgICAgPyBuZXcgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCh7IGNocm9tZWRyaXZlckRpcjogdGhpcy5leGVjdXRhYmxlRGlyIH0pXG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IHt9O1xuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBnZXQgbG9nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nO1xuICB9XG5cbiAgYXN5bmMgZ2V0RHJpdmVyc01hcHBpbmcgKCkge1xuICAgIGxldCBtYXBwaW5nID0gXy5jbG9uZURlZXAoQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HKTtcbiAgICBpZiAodGhpcy5tYXBwaW5nUGF0aCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEF0dGVtcHRpbmcgdG8gdXNlIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSdgKTtcbiAgICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHRoaXMubWFwcGluZ1BhdGgpKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYE5vIGZpbGUgZm91bmQgYXQgJyR7dGhpcy5tYXBwaW5nUGF0aH0nYCk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0RlZmF1bHRpbmcgdG8gdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1hcHBpbmcgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMubWFwcGluZ1BhdGgsICd1dGY4JykpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBFcnJvciBwYXJzaW5nIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbygnRGVmYXVsdGluZyB0byB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnVXNpbmcgdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlcyBmb3IgbWluaW11bSBjaHJvbWUgdmVyc2lvbiBhcmUgc2VtdmVyIGNvbXBsaWFudFxuICAgIGZvciAoY29uc3QgW2NkVmVyc2lvbiwgY2hyb21lVmVyc2lvbl0gb2YgXy50b1BhaXJzKG1hcHBpbmcpKSB7XG4gICAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbik7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgbWFwcGluZ1tjZFZlcnNpb25dID0gY29lcmNlZFZlcnNpb24udmVyc2lvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYCcke2Nocm9tZVZlcnNpb259JyBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gU2tpcHBpbmcgaXRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBpbmc7XG4gIH1cblxuICBhc3luYyBnZXRDaHJvbWVkcml2ZXJzIChtYXBwaW5nKSB7XG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdmVyc2lvbnMgYXZhaWxhYmxlXG4gICAgY29uc3QgZXhlY3V0YWJsZXMgPSBhd2FpdCBmcy5nbG9iKCcqJywge1xuICAgICAgY3dkOiB0aGlzLmV4ZWN1dGFibGVEaXIsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgbm9kaXI6IHRydWUsXG4gICAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnZXhlY3V0YWJsZScsIGV4ZWN1dGFibGVzLmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgICAgYGluICcke3RoaXMuZXhlY3V0YWJsZURpcn0nYCk7XG4gICAgY29uc3QgY2RzID0gKGF3YWl0IGFzeW5jbWFwKGV4ZWN1dGFibGVzLCBhc3luYyAoZXhlY3V0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgbG9nRXJyb3IgPSAoe21lc3NhZ2UsIHN0ZG91dCA9IG51bGwsIHN0ZGVyciA9IG51bGx9KSA9PiB7XG4gICAgICAgIGxldCBlcnJNc2cgPSBgQ2Fubm90IHJldHJpZXZlIHZlcnNpb24gbnVtYmVyIGZyb20gJyR7cGF0aC5iYXNlbmFtZShleGVjdXRhYmxlKX0nIENocm9tZWRyaXZlciBiaW5hcnkuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgaXQgcmV0dXJucyBhIHZhbGlkIHZlcnNpb24gc3RyaW5nIGluIHJlc3BvbnNlIHRvICctLXZlcnNpb24nIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gJHttZXNzYWdlfWA7XG4gICAgICAgIGlmIChzdGRvdXQpIHtcbiAgICAgICAgICBlcnJNc2cgKz0gYFxcblN0ZG91dDogJHtzdGRvdXR9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgZXJyTXNnICs9IGBcXG5TdGRlcnI6ICR7c3RkZXJyfWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2cud2FybihlcnJNc2cpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICBsZXQgc3RkZXJyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgKHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCBleGVjKGV4ZWN1dGFibGUsIFsnLS12ZXJzaW9uJ10sIHtcbiAgICAgICAgICB0aW1lb3V0OiBDRF9WRVJTSU9OX1RJTUVPVVQsXG4gICAgICAgIH0pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIShlcnIubWVzc2FnZSB8fCAnJykuaW5jbHVkZXMoJ3RpbWVkIG91dCcpICYmICEoZXJyLnN0ZG91dCB8fCAnJykuaW5jbHVkZXMoJ1N0YXJ0aW5nIENocm9tZURyaXZlcicpKSB7XG4gICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIGhhcyB0aW1lZCBvdXQsIGl0IGhhcyBhY3R1YWxseSBzdGFydGVkIENocm9tZWRyaXZlcixcbiAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGVyZSB3aWxsIGFsc28gYmUgdGhlIHZlcnNpb24gc3RyaW5nIGluIHRoZSBvdXRwdXRcbiAgICAgICAgc3Rkb3V0ID0gZXJyLnN0ZG91dDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF0Y2ggPSAvQ2hyb21lRHJpdmVyXFxzK1xcKD92PyhbXFxkLl0rKVxcKT8vaS5leGVjKHN0ZG91dCk7IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvenBqNXdBLzFcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHttZXNzYWdlOiAnQ2Fubm90IHBhcnNlIHRoZSB2ZXJzaW9uIHN0cmluZycsIHN0ZG91dCwgc3RkZXJyfSk7XG4gICAgICB9XG4gICAgICBsZXQgdmVyc2lvbiA9IG1hdGNoWzFdO1xuICAgICAgbGV0IG1pbkNocm9tZVZlcnNpb24gPSBtYXBwaW5nW3ZlcnNpb25dO1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKHZlcnNpb24pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIC8vIGJlZm9yZSAyMDE5LTAzLTA2IHZlcnNpb25zIHdlcmUgb2YgdGhlIGZvcm0gbWFqb3IubWlub3JcbiAgICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uLm1ham9yIDwgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICB2ZXJzaW9uID0gYCR7Y29lcmNlZFZlcnNpb24ubWFqb3J9LiR7Y29lcmNlZFZlcnNpb24ubWlub3J9YDtcbiAgICAgICAgICBtaW5DaHJvbWVWZXJzaW9uID0gbWFwcGluZ1t2ZXJzaW9uXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb24gJiYgY29lcmNlZFZlcnNpb24ubWFqb3IgPj0gTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICAvLyBBc3N1bWUgdGhlIG1ham9yIENocm9tZSB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBtYWpvciB2ZXJzaW9uXG4gICAgICAgICAgbWluQ2hyb21lVmVyc2lvbiA9IGAke2NvZXJjZWRWZXJzaW9uLm1ham9yfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4ZWN1dGFibGUsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIG1pbkNocm9tZVZlcnNpb24sXG4gICAgICB9O1xuICAgIH0pKVxuICAgICAgLmZpbHRlcigoY2QpID0+ICEhY2QpXG4gICAgICAuc29ydCgoYSwgYikgPT4gY29tcGFyZVZlcnNpb25zKGIudmVyc2lvbiwgYS52ZXJzaW9uKSk7XG4gICAgaWYgKF8uaXNFbXB0eShjZHMpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBObyBDaHJvbWVkcml2ZXJzIHdlcmUgZm91bmQgaW4gJyR7dGhpcy5leGVjdXRhYmxlRGlyfSdgKTtcbiAgICAgIHJldHVybiBjZHM7XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgZm9sbG93aW5nIENocm9tZWRyaXZlciBleGVjdXRhYmxlcyB3ZXJlIGZvdW5kOmApO1xuICAgIGZvciAoY29uc3QgY2Qgb2YgY2RzKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgICcke2NkLmV4ZWN1dGFibGV9JyAodmVyc2lvbiAnJHtjZC52ZXJzaW9ufScsIG1pbmltdW0gQ2hyb21lIHZlcnNpb24gJyR7Y2QubWluQ2hyb21lVmVyc2lvbiA/IGNkLm1pbkNocm9tZVZlcnNpb24gOiAnVW5rbm93bid9JylgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNkcztcbiAgfVxuXG4gIGFzeW5jIGdldENocm9tZVZlcnNpb24gKCkge1xuICAgIC8vIFRyeSB0byByZXRyaWV2ZSB0aGUgdmVyc2lvbiBmcm9tIGBkZXRhaWxzYCBwcm9wZXJ0eSBpZiBpdCBpcyBzZXRcbiAgICAvLyBUaGUgYGluZm9gIGl0ZW0gbXVzdCBjb250YWluIHRoZSBvdXRwdXQgb2YgL2pzb24vdmVyc2lvbiBDRFAgY29tbWFuZFxuICAgIC8vIHdoZXJlIGBCcm93c2VyYCBmaWVsZCBsb29rcyBsaWtlIGBDaHJvbWUvNzIuMC4zNjAxLjBgYFxuICAgIGlmICh0aGlzLmRldGFpbHM/LmluZm8pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBCcm93c2VyIHZlcnNpb24gaW4gdGhlIHN1cHBsaWVkIGRldGFpbHM6ICR7dGhpcy5kZXRhaWxzPy5pbmZvPy5Ccm93c2VyfWApO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBWRVJTSU9OX1BBVFRFUk4uZXhlYyh0aGlzLmRldGFpbHM/LmluZm8/LkJyb3dzZXIpO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uTWF0Y2hbMV0pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBjb2VyY2VkVmVyc2lvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY2hyb21lVmVyc2lvbjtcblxuICAgIC8vIGluIGNhc2Ugb2YgV2ViVmlldyBCcm93c2VyIFRlc3Rlciwgc2ltcGx5IHRyeSB0byBmaW5kIHRoZSB1bmRlcmx5aW5nIHdlYnZpZXdcbiAgICBpZiAodGhpcy5idW5kbGVJZCA9PT0gV0VCVklFV19TSEVMTF9CVU5ETEVfSUQpIHtcbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIHJldHVybiBzZW12ZXIuY29lcmNlKGNocm9tZVZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBvbiBBbmRyb2lkIDctOSB3ZWJ2aWV3cyBhcmUgYmFja2VkIGJ5IHRoZSBtYWluIENocm9tZSwgbm90IHRoZSBzeXN0ZW0gd2Vidmlld1xuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAgICAgaWYgKGFwaUxldmVsID49IDI0ICYmIGFwaUxldmVsIDw9IDI4ICYmXG4gICAgICAgICAgW1dFQlZJRVdfU0hFTExfQlVORExFX0lELCAuLi5XRUJWSUVXX0JVTkRMRV9JRFNdLmluY2x1ZGVzKHRoaXMuYnVuZGxlSWQpKSB7XG4gICAgICAgIHRoaXMuYnVuZGxlSWQgPSBDSFJPTUVfQlVORExFX0lEO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRyeSBvdXQgd2Vidmlld3Mgd2hlbiBubyBidW5kbGUgaWQgaXMgc2VudCBpblxuICAgIGlmICghdGhpcy5idW5kbGVJZCkge1xuICAgICAgLy8gZGVmYXVsdCB0byB0aGUgZ2VuZXJpYyBDaHJvbWUgYnVuZGxlXG4gICAgICB0aGlzLmJ1bmRsZUlkID0gQ0hST01FX0JVTkRMRV9JRDtcblxuICAgICAgLy8gd2UgaGF2ZSBhIHdlYnZpZXcgb2Ygc29tZSBzb3J0LCBzbyB0cnkgdG8gZmluZCB0aGUgYnVuZGxlIHZlcnNpb25cbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgZG8gbm90IGhhdmUgYSBjaHJvbWUgdmVyc2lvbiwgaXQgbXVzdCBub3QgYmUgYSB3ZWJ2aWV3XG4gICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICBjaHJvbWVWZXJzaW9uID0gYXdhaXQgZ2V0Q2hyb21lVmVyc2lvbih0aGlzLmFkYiwgdGhpcy5idW5kbGVJZCk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIGl0IGlzIHNlbXZlciwgc28gbGF0ZXIgY2hlY2tzIHdvbid0IGZhaWxcbiAgICByZXR1cm4gY2hyb21lVmVyc2lvbiA/IHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbikgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRHJpdmVyc01hcHBpbmcgKG5ld01hcHBpbmcpIHtcbiAgICBsZXQgc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZyA9IHRydWU7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm1hcHBpbmdQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMubWFwcGluZ1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld01hcHBpbmcsIG51bGwsIDIpLCAndXRmOCcpO1xuICAgICAgICBzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nID0gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBzdG9yZSB0aGUgdXBkYXRlZCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgaW50byAnJHt0aGlzLm1hcHBpbmdQYXRofScuIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlIG9mIGZ1cnRoZXIgZXhlY3V0aW9ucy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZykge1xuICAgICAgT2JqZWN0LmFzc2lnbihDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsIG5ld01hcHBpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIgKCkge1xuICAgIGlmICghdGhpcy5hZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwcGluZyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyc01hcHBpbmcoKTtcbiAgICBpZiAoIV8uaXNFbXB0eShtYXBwaW5nKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSBtb3N0IHJlY2VudCBrbm93biBDaHJvbWUgdmVyc2lvbjogJHtfLnZhbHVlcyhtYXBwaW5nKVswXX1gKTtcbiAgICB9XG5cbiAgICBsZXQgZGlkU3RvcmFnZVN5bmMgPSBmYWxzZTtcbiAgICBjb25zdCBzeW5jQ2hyb21lZHJpdmVycyA9IGFzeW5jIChjaHJvbWVWZXJzaW9uKSA9PiB7XG4gICAgICBkaWRTdG9yYWdlU3luYyA9IHRydWU7XG4gICAgICBjb25zdCByZXRyaWV2ZWRNYXBwaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlQ2xpZW50LnJldHJpZXZlTWFwcGluZygpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0dvdCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgZnJvbSB0aGUgc3RvcmFnZTogJyArXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHJldHJpZXZlZE1hcHBpbmcsIG51bGwsIDIpKTtcbiAgICAgIGNvbnN0IGRyaXZlcktleXMgPSBhd2FpdCB0aGlzLnN0b3JhZ2VDbGllbnQuc3luY0RyaXZlcnMoe1xuICAgICAgICBtaW5Ccm93c2VyVmVyc2lvbjogY2hyb21lVmVyc2lvbi5tYWpvcixcbiAgICAgIH0pO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJLZXlzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyA9IGRyaXZlcktleXMucmVkdWNlKChhY2MsIHgpID0+IHtcbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIG1pbkJyb3dzZXJWZXJzaW9ufSA9IHJldHJpZXZlZE1hcHBpbmdbeF07XG4gICAgICAgIGFjY1t2ZXJzaW9uXSA9IG1pbkJyb3dzZXJWZXJzaW9uO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgT2JqZWN0LmFzc2lnbihtYXBwaW5nLCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKG1hcHBpbmcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGNkcyA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lZHJpdmVycyhtYXBwaW5nKTtcblxuICAgICAgY29uc3QgbWlzc2luZ1ZlcnNpb25zID0ge307XG4gICAgICBmb3IgKGNvbnN0IHt2ZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9ufSBvZiBjZHMpIHtcbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uIHx8IG1hcHBpbmdbdmVyc2lvbl0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2VyY2VkVmVyID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uKTtcbiAgICAgICAgaWYgKCFjb2VyY2VkVmVyIHx8IGNvZXJjZWRWZXIubWFqb3IgPCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWlzc2luZ1ZlcnNpb25zW3ZlcnNpb25dID0gbWluQ2hyb21lVmVyc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdWZXJzaW9ucykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnQ2hyb21lZHJpdmVyJywgXy5zaXplKG1pc3NpbmdWZXJzaW9ucyksIHRydWUpfSwgYCArXG4gICAgICAgICAgYHdoaWNoICR7Xy5zaXplKG1pc3NpbmdWZXJzaW9ucykgPT09IDEgPyAnaXMnIDogJ2FyZSd9IG1pc3NpbmcgaW4gdGhlIGxpc3Qgb2Yga25vd24gdmVyc2lvbnM6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1pc3NpbmdWZXJzaW9ucykpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKE9iamVjdC5hc3NpZ24obWFwcGluZywgbWlzc2luZ1ZlcnNpb25zKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIENocm9tZWRyaXZlciBleGVjdXRhYmxlIGF2YWlsYWJsZSBmb3IgdXNlIGlmIGAgK1xuICAgICAgICAgICAgYCdjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjaycgY2FwYWJpbGl0eSBpcyBzZXQgdG8gJ3RydWUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIGV4ZWN1dGFibGV9ID0gY2RzWzBdO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDaHJvbWUgYnVpbGQgY2hlY2sgZGlzYWJsZWQuIFVzaW5nIG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uICgke3ZlcnNpb259LCBhdCAnJHtleGVjdXRhYmxlfScpYCk7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYElmIHRoaXMgaXMgd3JvbmcsIHNldCAnY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2snIGNhcGFiaWxpdHkgdG8gJ2ZhbHNlJ2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hyb21lVmVyc2lvbiA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lVmVyc2lvbigpO1xuICAgICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgIC8vIHVuYWJsZSB0byBnZXQgdGhlIGNocm9tZSB2ZXJzaW9uXG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIENocm9tZWRyaXZlciBleGVjdXRhYmxlIGF2YWlsYWJsZSBmb3IgdXNlIGlmIGAgK1xuICAgICAgICAgICAgYHRoZSBjdXJyZW50IENocm9tZSB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIGV4ZWN1dGFibGV9ID0gY2RzWzBdO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZGlzY292ZXIgQ2hyb21lIHZlcnNpb24uIFVzaW5nIENocm9tZWRyaXZlciAke3ZlcnNpb259IGF0ICcke2V4ZWN1dGFibGV9J2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCBDaHJvbWUgYnVuZGxlICcke3RoaXMuYnVuZGxlSWR9JyB2ZXJzaW9uICcke2Nocm9tZVZlcnNpb259J2ApO1xuXG4gICAgICBjb25zdCBtYXRjaGluZ0RyaXZlcnMgPSBjZHMuZmlsdGVyKCh7bWluQ2hyb21lVmVyc2lvbn0pID0+IHtcbiAgICAgICAgY29uc3QgbWluQ2hyb21lVmVyc2lvblMgPSBtaW5DaHJvbWVWZXJzaW9uICYmIHNlbXZlci5jb2VyY2UobWluQ2hyb21lVmVyc2lvbik7XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvblMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hyb21lVmVyc2lvbi5tYWpvciA+IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OXG4gICAgICAgICAgPyBtaW5DaHJvbWVWZXJzaW9uUy5tYWpvciA9PT0gY2hyb21lVmVyc2lvbi5tYWpvclxuICAgICAgICAgIDogc2VtdmVyLmd0ZShjaHJvbWVWZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9uUyk7XG4gICAgICB9KTtcbiAgICAgIGlmIChfLmlzRW1wdHkobWF0Y2hpbmdEcml2ZXJzKSkge1xuICAgICAgICBpZiAodGhpcy5zdG9yYWdlQ2xpZW50ICYmICFkaWRTdG9yYWdlU3luYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgc3luY0Nocm9tZWRyaXZlcnMoY2hyb21lVmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHN5bmNocm9uaXplIGxvY2FsIGNocm9tZWRyaXZlcnMgd2l0aCB0aGUgcmVtb3RlIHN0b3JhZ2UgYXQgJHtDRF9DRE59OiBgICtcbiAgICAgICAgICAgICAgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdXRvZG93bmxvYWRTdWdnZXN0aW9uID1cbiAgICAgICAgICAnWW91IGNvdWxkIGFsc28gdHJ5IHRvIGVuYWJsZSBhdXRvbWF0ZWQgY2hyb21lZHJpdmVycyBkb3dubG9hZCBhcyAnICtcbiAgICAgICAgICAnYSBwb3NzaWJsZSB3b3JrYXJvdW5kLic7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ2hyb21lZHJpdmVyIGZvdW5kIHRoYXQgY2FuIGF1dG9tYXRlIENocm9tZSAnJHtjaHJvbWVWZXJzaW9ufScuYCArXG4gICAgICAgICAgKHRoaXMuc3RvcmFnZUNsaWVudCA/ICcnIDogYCAke2F1dG9kb3dubG9hZFN1Z2dlc3Rpb259YCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiaW5QYXRoID0gbWF0Y2hpbmdEcml2ZXJzWzBdLmV4ZWN1dGFibGU7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnZXhlY3V0YWJsZScsIG1hdGNoaW5nRHJpdmVycy5sZW5ndGgsIHRydWUpfSBgICtcbiAgICAgICAgYGNhcGFibGUgb2YgYXV0b21hdGluZyBDaHJvbWUgJyR7Y2hyb21lVmVyc2lvbn0nLlxcbkNob29zaW5nIHRoZSBtb3N0IHJlY2VudCwgJyR7YmluUGF0aH0nLmApO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0lmIGEgc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1aXJlZCwgc3BlY2lmeSBpdCB3aXRoIHRoZSBgY2hyb21lZHJpdmVyRXhlY3V0YWJsZWAnICtcbiAgICAgICAgJ2Rlc2lyZWQgY2FwYWJpbGl0eS4nKTtcbiAgICAgIHJldHVybiBiaW5QYXRoO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICB9IHdoaWxlICh0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRDaHJvbWVkcml2ZXJQYXRoICgpIHtcbiAgICBpZiAodGhpcy5leGVjdXRhYmxlVmVyaWZpZWQpIHJldHVybjsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICAvLyB0aGUgZXhlY3V0YWJsZSBtaWdodCBiZSBzZXQgKGlmIHBhc3NlZCBpbilcbiAgICAvLyBvciB3ZSBtaWdodCB3YW50IHRvIHVzZSB0aGUgYmFzaWMgb25lIGluc3RhbGxlZCB3aXRoIHRoaXMgZHJpdmVyXG4gICAgLy8gb3Igd2Ugd2FudCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IG9uZVxuICAgIGlmICghdGhpcy5jaHJvbWVkcml2ZXIpIHtcbiAgICAgIHRoaXMuY2hyb21lZHJpdmVyID0gdGhpcy51c2VTeXN0ZW1FeGVjdXRhYmxlXG4gICAgICAgID8gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCgpXG4gICAgICAgIDogYXdhaXQgdGhpcy5nZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHModGhpcy5jaHJvbWVkcml2ZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgYSBjaHJvbWVkcml2ZXIgYmluYXJ5IGF0IHRoZSBwYXRoIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY2hyb21lZHJpdmVyfSwgYnV0IGl0IGRvZXNuJ3QgZXhpc3QhYCk7XG4gICAgfVxuICAgIHRoaXMuZXhlY3V0YWJsZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB0aGlzLmxvZy5pbmZvKGBTZXQgY2hyb21lZHJpdmVyIGJpbmFyeSBhczogJHt0aGlzLmNocm9tZWRyaXZlcn1gKTtcbiAgfVxuXG4gIHN5bmNQcm90b2NvbCAoY2RWZXJzaW9uID0gbnVsbCkge1xuICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShjZFZlcnNpb24pO1xuICAgIGlmICghY29lcmNlZFZlcnNpb24gfHwgY29lcmNlZFZlcnNpb24ubWFqb3IgPCBNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hyb21lZHJpdmVyIHYuICR7Y2RWZXJzaW9ufSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0ICR7UFJPVE9DT0xTLlczQ30gcHJvdG9jb2wuIGAgK1xuICAgICAgICBgRGVmYXVsdGluZyB0byAke1BST1RPQ09MUy5NSlNPTldQfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaHJvbWVPcHRpb25zID0gZ2V0Q2FwVmFsdWUodGhpcy5jYXBhYmlsaXRpZXMsICdjaHJvbWVPcHRpb25zJywge30pO1xuICAgIGlmIChjaHJvbWVPcHRpb25zLnczYyA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYENocm9tZWRyaXZlciB2LiAke2NkVmVyc2lvbn0gc3VwcG9ydHMgJHtQUk9UT0NPTFMuVzNDfSBwcm90b2NvbCwgYCArXG4gICAgICAgIGBidXQgJHtQUk9UT0NPTFMuTUpTT05XUH0gb25lIGhhcyBiZWVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLlczQztcbiAgICAvLyBnaXZlbiBjYXBzIG1pZ2h0IG5vdCBiZSBwcm9wZXJseSBwcmVmaXhlZFxuICAgIC8vIHNvIHdlIHRyeSB0byBmaXggdGhlbSBpbiBvcmRlciB0byBwcm9wZXJseSBpbml0XG4gICAgLy8gdGhlIG5ldyBXM0Mgc2Vzc2lvblxuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gdG9XM2NDYXBOYW1lcyh0aGlzLmNhcGFiaWxpdGllcyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoY2FwcywgZW1pdFN0YXJ0aW5nU3RhdGUgPSB0cnVlKSB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChjYXBzKTtcblxuICAgIC8vIHNldCB0aGUgbG9nZ2luZyBwcmVmZXJlbmNlcyB0byBBTEwgdGhlIGNvbnNvbGUgbG9nc1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcyA9IF8uY2xvbmVEZWVwKGdldENhcFZhbHVlKGNhcHMsICdsb2dnaW5nUHJlZnMnLCB7fSkpO1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzLmJyb3dzZXIpKSB7XG4gICAgICB0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMuYnJvd3NlciA9ICdBTEwnO1xuICAgIH1cblxuICAgIGlmIChlbWl0U3RhcnRpbmdTdGF0ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RBUlRJTkcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSBbYC0tcG9ydD0ke3RoaXMucHJveHlQb3J0fWBdO1xuICAgIGlmICh0aGlzLmFkYiAmJiB0aGlzLmFkYi5hZGJQb3J0KSB7XG4gICAgICBhcmdzLnB1c2goYC0tYWRiLXBvcnQ9JHt0aGlzLmFkYi5hZGJQb3J0fWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0FycmF5KHRoaXMuY21kQXJncykpIHtcbiAgICAgIGFyZ3MucHVzaCguLi50aGlzLmNtZEFyZ3MpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2dQYXRoKSB7XG4gICAgICBhcmdzLnB1c2goYC0tbG9nLXBhdGg9JHt0aGlzLmxvZ1BhdGh9YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICBhcmdzLnB1c2goJy0tZGlzYWJsZS1idWlsZC1jaGVjaycpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy0tdmVyYm9zZScpO1xuICAgIC8vIHdoYXQgYXJlIHRoZSBwcm9jZXNzIHN0ZG91dC9zdGRlcnIgY29uZGl0aW9ucyB3aGVyZWluIHdlIGtub3cgdGhhdFxuICAgIC8vIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkIHRvIG91ciBzYXRpc2ZhY3Rpb24/XG4gICAgY29uc3Qgc3RhcnREZXRlY3RvciA9IChzdGRvdXQpID0+IHN0ZG91dC5zdGFydHNXaXRoKCdTdGFydGluZyAnKTtcblxuICAgIGxldCBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgIGxldCB3ZWJ2aWV3VmVyc2lvbjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0Q2hyb21lZHJpdmVyUGF0aCgpO1xuICAgICAgYXdhaXQgdGhpcy5raWxsQWxsKCk7XG5cbiAgICAgIC8vIHNldCB1cCBvdXIgc3VicHJvY2VzcyBvYmplY3RcbiAgICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHRoaXMuY2hyb21lZHJpdmVyLCBhcmdzKTtcbiAgICAgIHByb2Nlc3NJc0FsaXZlID0gdHJ1ZTtcblxuICAgICAgLy8gaGFuZGxlIGxvZyBvdXRwdXRcbiAgICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIC8vIGlmIHRoZSBjZCBvdXRwdXQgaXMgbm90IHByaW50ZWQsIGZpbmQgdGhlIGNocm9tZSB2ZXJzaW9uIGFuZCBwcmludFxuICAgICAgICAvLyB3aWxsIGdldCBhIHJlc3BvbnNlIGxpa2VcbiAgICAgICAgLy8gICBEZXZUb29scyByZXNwb25zZToge1xuICAgICAgICAvLyAgICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNhbXBsZWFwcFwiLFxuICAgICAgICAvLyAgICAgIFwiQnJvd3NlclwiOiBcIkNocm9tZS81NS4wLjI4ODMuOTFcIixcbiAgICAgICAgLy8gICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjJcIixcbiAgICAgICAgLy8gICAgICBcIlVzZXItQWdlbnRcIjogXCIuLi5cIixcbiAgICAgICAgLy8gICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2XCJcbiAgICAgICAgLy8gICB9XG4gICAgICAgIGNvbnN0IG91dCA9IHN0ZG91dCArIHN0ZGVycjtcbiAgICAgICAgbGV0IG1hdGNoID0gL1wiQnJvd3NlclwiOiBcIiguKilcIi8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB3ZWJ2aWV3VmVyc2lvbiA9IG1hdGNoWzFdO1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBXZWJ2aWV3IHZlcnNpb246ICcke3dlYnZpZXdWZXJzaW9ufSdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFsc28gcHJpbnQgY2hyb21lZHJpdmVyIHZlcnNpb24gdG8gbG9nc1xuICAgICAgICAvLyB3aWxsIG91dHB1dCBzb21ldGhpbmcgbGlrZVxuICAgICAgICAvLyAgU3RhcnRpbmcgQ2hyb21lRHJpdmVyIDIuMzMuNTA2MTA2ICg4YTA2YzM5YzQ1ODJmYmZiYWI2OTY2ZGJiMWMzOGE5MTczYmZiMWEyKSBvbiBwb3J0IDk1MTVcbiAgICAgICAgbWF0Y2ggPSAvU3RhcnRpbmcgQ2hyb21lRHJpdmVyIChbLlxcZF0rKS8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hyb21lZHJpdmVyIHZlcnNpb246ICcke21hdGNoWzFdfSdgKTtcbiAgICAgICAgICB0aGlzLnN5bmNQcm90b2NvbChtYXRjaFsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnaXZlIHRoZSBvdXRwdXQgaWYgaXQgaXMgcmVxdWVzdGVkXG4gICAgICAgIGlmICh0aGlzLnZlcmJvc2UpIHtcbiAgICAgICAgICBmb3IgKGxldCBsaW5lIG9mIChzdGRvdXQgfHwgJycpLnRyaW0oKS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgIGlmICghbGluZS50cmltKCkubGVuZ3RoKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFtTVERPVVRdICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgbGluZSBvZiAoc3RkZXJyIHx8ICcnKS50cmltKCkuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpLmxlbmd0aCkgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKGBbU1RERVJSXSAke2xpbmV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9SRVNUQVJUSU5HKSB7XG4gICAgICAgICAgY29uc3QgbXNnID0gYENocm9tZWRyaXZlciBleGl0ZWQgdW5leHBlY3RlZGx5IHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YDtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvcihtc2cpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nLmluZm8oYFNwYXduaW5nIGNocm9tZWRyaXZlciB3aXRoOiAke3RoaXMuY2hyb21lZHJpdmVyfSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgLy8gc3RhcnQgc3VicHJvYyBhbmQgd2FpdCBmb3Igc3RhcnREZXRlY3RvclxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yT25saW5lKCk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9FUlJPUiwgZSk7XG4gICAgICAvLyBqdXN0IGJlY2F1c2Ugd2UgaGFkIGFuIGVycm9yIGRvZXNuJ3QgbWVhbiB0aGUgY2hyb21lZHJpdmVyIHByb2Nlc3NcbiAgICAgIC8vIGZpbmlzaGVkOyB3ZSBzaG91bGQgY2xlYW4gdXAgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAocHJvY2Vzc0lzQWxpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICAgIC8vIG9mdGVuIHRoZSB1c2VyJ3MgQ2hyb21lIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdmVyc2lvbiBvZiBDaHJvbWVkcml2ZXJcbiAgICAgIGlmIChlLm1lc3NhZ2UuaW5jbHVkZXMoJ0Nocm9tZSB2ZXJzaW9uIG11c3QgYmUnKSkge1xuICAgICAgICBtZXNzYWdlICs9ICdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24gYmVjYXVzZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBDaHJvbWVkcml2ZXIuXFxuJztcbiAgICAgICAgaWYgKHdlYnZpZXdWZXJzaW9uKSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBgQ2hyb21lIHZlcnNpb24gb24gdGhlIGRldmljZTogJHt3ZWJ2aWV3VmVyc2lvbn1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXIgPSAvQ2hyb21lIHZlcnNpb24gbXVzdCBiZSAoLispLy5leGVjKGUubWVzc2FnZSk/LlsxXSB8fCAnJztcbiAgICAgICAgaWYgKHZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXIpIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBDaHJvbWVkcml2ZXIgc3VwcG9ydHMgQ2hyb21lIHZlcnNpb24ocyk6ICR7dmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlcn1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2UgKz0gJ0NoZWNrIHRoZSBkcml2ZXIgdHV0b3JpYWwgZm9yIHRyb3VibGVzaG9vdGluZy5cXG4nO1xuICAgICAgfVxuXG4gICAgICBtZXNzYWdlICs9IGUubWVzc2FnZTtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3cobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgc2Vzc2lvbklkICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSA/IHRoaXMuandwcm94eS5zZXNzaW9uSWQgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgcmVzdGFydCAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnUmVzdGFydGluZyBjaHJvbWVkcml2ZXInKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcmVzdGFydCB3aGVuIHdlJ3JlIG5vdCBvbmxpbmVcIik7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcpO1xuICAgIGF3YWl0IHRoaXMuc3RvcChmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0aGlzLmNhcGFiaWxpdGllcywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvck9ubGluZSAoKSB7XG4gICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBDRCBoYXNuJ3QgY3Jhc2hlZFxuICAgIGxldCBjaHJvbWVkcml2ZXJTdG9wcGVkID0gZmFsc2U7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgyMCwgMjAwLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgICAgLy8gd2UgYXJlIGVpdGhlciBzdG9wcGVkIG9yIHN0b3BwaW5nLCBzbyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgICBjaHJvbWVkcml2ZXJTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9KTtcbiAgICBpZiAoY2hyb21lZHJpdmVyU3RvcHBlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaHJvbWVEcml2ZXIgY3Jhc2hlZCBkdXJpbmcgc3RhcnR1cC4nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoKSB7XG4gICAgY29uc3Qgc2Vzc2lvbkNhcHMgPSB0aGlzLmRlc2lyZWRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQ1xuICAgICAgPyB7Y2FwYWJpbGl0aWVzOiB7YWx3YXlzTWF0Y2g6IHRoaXMuY2FwYWJpbGl0aWVzfX1cbiAgICAgIDoge2Rlc2lyZWRDYXBhYmlsaXRpZXM6IHRoaXMuY2FwYWJpbGl0aWVzfTtcbiAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyAke3RoaXMuZGVzaXJlZFByb3RvY29sfSBDaHJvbWVkcml2ZXIgc2Vzc2lvbiB3aXRoIGNhcGFiaWxpdGllczogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShzZXNzaW9uQ2FwcywgbnVsbCwgMikpO1xuICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywgc2Vzc2lvbkNhcHMpO1xuICAgIHRoaXMubG9nLnByZWZpeCA9IGdlbmVyYXRlTG9nUHJlZml4KHRoaXMsIHRoaXMuandwcm94eS5zZXNzaW9uSWQpO1xuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSk7XG4gIH1cblxuICBhc3luYyBzdG9wIChlbWl0U3RhdGVzID0gdHJ1ZSkge1xuICAgIGlmIChlbWl0U3RhdGVzKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyk7XG4gICAgfVxuICAgIGNvbnN0IHJ1blNhZmVTdGVwID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oZS5tZXNzYWdlKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfTtcbiAgICBhd2FpdCBydW5TYWZlU3RlcCgoKSA9PiB0aGlzLmp3cHJveHkuY29tbWFuZCgnJywgJ0RFTEVURScpKTtcbiAgICBhd2FpdCBydW5TYWZlU3RlcCgoKSA9PiB0aGlzLnByb2Muc3RvcCgnU0lHVEVSTScsIDIwMDAwKSk7XG4gICAgdGhpcy5sb2cucHJlZml4ID0gZ2VuZXJhdGVMb2dQcmVmaXgodGhpcyk7XG4gICAgaWYgKGVtaXRTdGF0ZXMpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVN0YXRlIChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hhbmdlZCBzdGF0ZSB0byAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cblxuICBhc3luYyBwcm94eVJlcSAocmVxLCByZXMpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzKHJlcSwgcmVzKTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxBbGwgKCkge1xuICAgIGxldCBjbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKClcbiAgICAgID8gYHdtaWMgcHJvY2VzcyB3aGVyZSBcImNvbW1hbmRsaW5lIGxpa2UgJyVjaHJvbWVkcml2ZXIuZXhlJS0tcG9ydD0ke3RoaXMucHJveHlQb3J0fSUnXCIgZGVsZXRlYFxuICAgICAgOiBgcGtpbGwgLTE1IC1mIFwiJHt0aGlzLmNocm9tZWRyaXZlcn0uKi0tcG9ydD0ke3RoaXMucHJveHlQb3J0fVwiYDtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgS2lsbGluZyBhbnkgb2xkIGNocm9tZWRyaXZlcnMsIHJ1bm5pbmc6ICR7Y21kfWApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCAoQi5wcm9taXNpZnkoY3AuZXhlYykpKGNtZCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnU3VjY2Vzc2Z1bGx5IGNsZWFuZWQgdXAgb2xkIGNocm9tZWRyaXZlcnMnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ05vIG9sZCBjaHJvbWVkcml2ZXJzIHNlZW0gdG8gZXhpc3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hZGIpIHtcbiAgICAgIGNvbnN0IHVkaWRJbmRleCA9IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtID09PSAnLXMnKTtcbiAgICAgIGNvbnN0IHVkaWQgPSB1ZGlkSW5kZXggPiAtMSA/IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3NbdWRpZEluZGV4ICsgMV0gOiBudWxsO1xuXG4gICAgICBpZiAodWRpZCkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdGhpcyBkZXZpY2UncyBhZGIgZm9yd2FyZGVkIHBvcnQgc29ja2V0IGNvbm5lY3Rpb25zOiAke3VkaWR9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xlYW5pbmcgYW55IG9sZCBhZGIgZm9yd2FyZGVkIHBvcnQgc29ja2V0IGNvbm5lY3Rpb25zYCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGNvbm4gb2YgYXdhaXQgdGhpcy5hZGIuZ2V0Rm9yd2FyZExpc3QoKSkge1xuICAgICAgICAgIC8vIGNocm9tZWRyaXZlciB3aWxsIGFzayBBREIgdG8gZm9yd2FyZCBhIHBvcnQgbGlrZSBcImRldmljZUlkIHRjcDpwb3J0IGxvY2FsYWJzdHJhY3Q6d2Vidmlld19kZXZ0b29sc19yZW1vdGVfcG9ydFwiXG4gICAgICAgICAgaWYgKCEoY29ubi5pbmNsdWRlcygnd2Vidmlld19kZXZ0b29scycpICYmICghdWRpZCB8fCBjb25uLmluY2x1ZGVzKHVkaWQpKSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBwYXJhbXMgPSBjb25uLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZChwYXJhbXNbMV0ucmVwbGFjZSgvW1xcRF0qLywgJycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gY2xlYW4gZm9yd2FyZGVkIHBvcnRzLiBFcnJvcjogJyR7ZXJyLm1lc3NhZ2V9Jy4gQ29udGludWluZy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBoYXNXb3JraW5nV2VidmlldyAoKSB7XG4gICAgLy8gc29tZXRpbWVzIGNocm9tZWRyaXZlciBzdG9wcyBhdXRvbWF0aW5nIHdlYnZpZXdzLiB0aGlzIG1ldGhvZCBydW5zIGFcbiAgICAvLyBzaW1wbGUgY29tbWFuZCB0byBkZXRlcm1pbmUgb3VyIHN0YXRlLCBhbmQgcmVzcG9uZHMgYWNjb3JkaW5nbHlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy91cmwnLCAnR0VUJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbkNocm9tZWRyaXZlci5FVkVOVF9FUlJPUiA9ICdjaHJvbWVkcml2ZXJfZXJyb3InO1xuQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEID0gJ3N0b3BwZWQnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUQVJUSU5HID0gJ3N0YXJ0aW5nJztcbkNocm9tZWRyaXZlci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyA9ICdzdG9wcGluZyc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORyA9ICdyZXN0YXJ0aW5nJztcblxuZXhwb3J0IHsgQ2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBDaHJvbWVkcml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxtQ0FBbUMsR0FBRyxFQUFFO0FBQzlDLE1BQU1DLFlBQVksR0FBRyxXQUFXO0FBQ2hDLE1BQU1DLCtCQUErQixHQUFHLEVBQUU7QUFDMUMsTUFBTUMsWUFBWSxHQUFHLElBQUk7QUFDekIsTUFBTUMsZ0JBQWdCLEdBQUcsb0JBQW9CO0FBQzdDLE1BQU1DLHVCQUF1QixHQUFHLDRCQUE0QjtBQUM1RCxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6Qiw0QkFBNEIsRUFDNUIscUJBQXFCLENBQ3RCO0FBQ0QsTUFBTUMsZUFBZSxHQUFHLFVBQVU7QUFFbEMsTUFBTUMsa0JBQWtCLEdBQUcsSUFBSTtBQUUvQixNQUFNQyxZQUFZLFNBQVNDLGVBQU0sQ0FBQ0MsWUFBWSxDQUFDO0VBQzdDQyxXQUFXLENBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtJQUN0QixLQUFLLEVBQUU7SUFFUCxNQUFNO01BQ0pDLElBQUksR0FBR2IsWUFBWTtNQUNuQmMsSUFBSSxHQUFHWixZQUFZO01BQ25CYSxtQkFBbUIs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
587
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTiIsIkRFRkFVTFRfSE9TVCIsIk1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQiLCJERUZBVUxUX1BPUlQiLCJDSFJPTUVfQlVORExFX0lEIiwiV0VCVklFV19TSEVMTF9CVU5ETEVfSUQiLCJXRUJWSUVXX0JVTkRMRV9JRFMiLCJWRVJTSU9OX1BBVFRFUk4iLCJDRF9WRVJTSU9OX1RJTUVPVVQiLCJDaHJvbWVkcml2ZXIiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJob3N0IiwicG9ydCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJleGVjdXRhYmxlIiwiZXhlY3V0YWJsZURpciIsImdldENocm9tZWRyaXZlckRpciIsImJ1bmRsZUlkIiwibWFwcGluZ1BhdGgiLCJjbWRBcmdzIiwiYWRiIiwidmVyYm9zZSIsImxvZ1BhdGgiLCJkaXNhYmxlQnVpbGRDaGVjayIsImRldGFpbHMiLCJpc0F1dG9kb3dubG9hZEVuYWJsZWQiLCJfbG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiZ2VuZXJhdGVMb2dQcmVmaXgiLCJwcm94eUhvc3QiLCJwcm94eVBvcnQiLCJwcm9jIiwiY2hyb21lZHJpdmVyIiwiZXhlY3V0YWJsZVZlcmlmaWVkIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiandwcm94eSIsIkpXUHJveHkiLCJzZXJ2ZXIiLCJsb2ciLCJzdG9yYWdlQ2xpZW50IiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNocm9tZWRyaXZlckRpciIsImNhcGFiaWxpdGllcyIsImRlc2lyZWRQcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJnZXREcml2ZXJzTWFwcGluZyIsIm1hcHBpbmciLCJfIiwiY2xvbmVEZWVwIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwiZGVidWciLCJmcyIsImV4aXN0cyIsIndhcm4iLCJpbmZvIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGUiLCJlcnIiLCJtZXNzYWdlIiwiY2RWZXJzaW9uIiwiY2hyb21lVmVyc2lvbiIsInRvUGFpcnMiLCJjb2VyY2VkVmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsInZlcnNpb24iLCJnZXRDaHJvbWVkcml2ZXJzIiwiZXhlY3V0YWJsZXMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwibm9kaXIiLCJhYnNvbHV0ZSIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJjZHMiLCJhc3luY21hcCIsImxvZ0Vycm9yIiwic3Rkb3V0Iiwic3RkZXJyIiwiZXJyTXNnIiwicGF0aCIsImJhc2VuYW1lIiwiZXhlYyIsInRpbWVvdXQiLCJpbmNsdWRlcyIsIm1hdGNoIiwibWluQ2hyb21lVmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJmaWx0ZXIiLCJjZCIsInNvcnQiLCJhIiwiYiIsImNvbXBhcmVWZXJzaW9ucyIsImlzRW1wdHkiLCJnZXRDaHJvbWVWZXJzaW9uIiwiQnJvd3NlciIsInZlcnNpb25NYXRjaCIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJ1cGRhdGVEcml2ZXJzTWFwcGluZyIsIm5ld01hcHBpbmciLCJzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwiZSIsIk9iamVjdCIsImFzc2lnbiIsImdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIiLCJnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIiwidmFsdWVzIiwiZGlkU3RvcmFnZVN5bmMiLCJzeW5jQ2hyb21lZHJpdmVycyIsInJldHJpZXZlZE1hcHBpbmciLCJyZXRyaWV2ZU1hcHBpbmciLCJkcml2ZXJLZXlzIiwic3luY0RyaXZlcnMiLCJtaW5Ccm93c2VyVmVyc2lvbiIsInN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nIiwicmVkdWNlIiwiYWNjIiwieCIsIm1pc3NpbmdWZXJzaW9ucyIsImNvZXJjZWRWZXIiLCJzaXplIiwiZXJyb3JBbmRUaHJvdyIsIm1hdGNoaW5nRHJpdmVycyIsIm1pbkNocm9tZVZlcnNpb25TIiwiZ3RlIiwiQ0RfQ0ROIiwic3RhY2siLCJhdXRvZG93bmxvYWRTdWdnZXN0aW9uIiwiRXJyb3IiLCJiaW5QYXRoIiwiaW5pdENocm9tZWRyaXZlclBhdGgiLCJzeW5jUHJvdG9jb2wiLCJXM0MiLCJjaHJvbWVPcHRpb25zIiwiZ2V0Q2FwVmFsdWUiLCJ3M2MiLCJ0b1czY0NhcE5hbWVzIiwic3RhcnQiLCJjYXBzIiwiZW1pdFN0YXJ0aW5nU3RhdGUiLCJsb2dnaW5nUHJlZnMiLCJicm93c2VyIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImFkYlBvcnQiLCJwdXNoIiwiaXNBcnJheSIsInN0YXJ0RGV0ZWN0b3IiLCJzdGFydHNXaXRoIiwicHJvY2Vzc0lzQWxpdmUiLCJ3ZWJ2aWV3VmVyc2lvbiIsImtpbGxBbGwiLCJTdWJQcm9jZXNzIiwib24iLCJvdXQiLCJsaW5lIiwidHJpbSIsInNwbGl0IiwiZXJyb3IiLCJjb2RlIiwic2lnbmFsIiwiU1RBVEVfU1RPUFBJTkciLCJTVEFURV9SRVNUQVJUSU5HIiwibXNnIiwiam9pbiIsIndhaXRGb3JPbmxpbmUiLCJzdGFydFNlc3Npb24iLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwidmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlciIsInNlc3Npb25JZCIsIlNUQVRFX09OTElORSIsInJlc3RhcnQiLCJjaHJvbWVkcml2ZXJTdG9wcGVkIiwicmV0cnlJbnRlcnZhbCIsImdldFN0YXR1cyIsImNvbW1hbmQiLCJzZXNzaW9uQ2FwcyIsImFsd2F5c01hdGNoIiwiZGVzaXJlZENhcGFiaWxpdGllcyIsInByZWZpeCIsImVtaXRTdGF0ZXMiLCJydW5TYWZlU3RlcCIsImYiLCJFVkVOVF9DSEFOR0VEIiwic2VuZENvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwicHJveHlSZXEiLCJyZXEiLCJyZXMiLCJwcm94eVJlcVJlcyIsImNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsIkIiLCJwcm9taXNpZnkiLCJjcCIsInVkaWRJbmRleCIsImRlZmF1bHRBcmdzIiwiZmluZEluZGV4IiwiaXRlbSIsInVkaWQiLCJjb25uIiwiZ2V0Rm9yd2FyZExpc3QiLCJwYXJhbXMiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsInJlcGxhY2UiLCJoYXNXb3JraW5nV2VidmlldyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jaHJvbWVkcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1haW5cblxuaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgSldQcm94eSwgUFJPVE9DT0xTIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgYXN5bmNtYXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIGdldENocm9tZVZlcnNpb24sIGdldENocm9tZWRyaXZlckRpciwgQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HLFxuICBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoLCBDRF9DRE4sIGdlbmVyYXRlTG9nUHJlZml4XG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY29tcGFyZVZlcnNpb25zIH0gZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCBmcm9tICcuL3N0b3JhZ2UtY2xpZW50JztcbmltcG9ydCB7IHRvVzNjQ2FwTmFtZXMsIGdldENhcFZhbHVlIH0gZnJvbSAnLi9wcm90b2NvbC1oZWxwZXJzJztcblxuY29uc3QgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04gPSA3MztcbmNvbnN0IERFRkFVTFRfSE9TVCA9ICcxMjcuMC4wLjEnO1xuY29uc3QgTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCA9IDc1O1xuY29uc3QgREVGQVVMVF9QT1JUID0gOTUxNTtcbmNvbnN0IENIUk9NRV9CVU5ETEVfSUQgPSAnY29tLmFuZHJvaWQuY2hyb21lJztcbmNvbnN0IFdFQlZJRVdfU0hFTExfQlVORExFX0lEID0gJ29yZy5jaHJvbWl1bS53ZWJ2aWV3X3NoZWxsJztcbmNvbnN0IFdFQlZJRVdfQlVORExFX0lEUyA9IFtcbiAgJ2NvbS5nb29nbGUuYW5kcm9pZC53ZWJ2aWV3JyxcbiAgJ2NvbS5hbmRyb2lkLndlYnZpZXcnLFxuXTtcbmNvbnN0IFZFUlNJT05fUEFUVEVSTiA9IC8oW1xcZC5dKykvO1xuXG5jb25zdCBDRF9WRVJTSU9OX1RJTUVPVVQgPSA1MDAwO1xuXG5jbGFzcyBDaHJvbWVkcml2ZXIgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKGFyZ3MgPSB7fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCB7XG4gICAgICBob3N0ID0gREVGQVVMVF9IT1NULFxuICAgICAgcG9ydCA9IERFRkFVTFRfUE9SVCxcbiAgICAgIHVzZVN5c3RlbUV4ZWN1dGFibGUgPSBmYWxzZSxcbiAgICAgIGV4ZWN1dGFibGUsXG4gICAgICBleGVjdXRhYmxlRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKCksXG4gICAgICBidW5kbGVJZCxcbiAgICAgIG1hcHBpbmdQYXRoLFxuICAgICAgY21kQXJncyxcbiAgICAgIGFkYixcbiAgICAgIHZlcmJvc2UsXG4gICAgICBsb2dQYXRoLFxuICAgICAgZGlzYWJsZUJ1aWxkQ2hlY2ssXG4gICAgICBkZXRhaWxzLFxuICAgICAgaXNBdXRvZG93bmxvYWRFbmFibGVkID0gZmFsc2UsXG4gICAgfSA9IGFyZ3M7XG4gICAgdGhpcy5fbG9nID0gbG9nZ2VyLmdldExvZ2dlcihnZW5lcmF0ZUxvZ1ByZWZpeCh0aGlzKSk7XG5cbiAgICB0aGlzLnByb3h5SG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wcm94eVBvcnQgPSBwb3J0O1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMuY21kQXJncyA9IGNtZEFyZ3M7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICB0aGlzLnVzZVN5c3RlbUV4ZWN1dGFibGUgPSB1c2VTeXN0ZW1FeGVjdXRhYmxlO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gZXhlY3V0YWJsZTtcbiAgICB0aGlzLmV4ZWN1dGFibGVEaXIgPSBleGVjdXRhYmxlRGlyO1xuICAgIHRoaXMubWFwcGluZ1BhdGggPSBtYXBwaW5nUGF0aDtcbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5leGVjdXRhYmxlVmVyaWZpZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXRlID0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQ7XG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEpXUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnByb3h5SG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMucHJveHlQb3J0LFxuICAgICAgbG9nOiB0aGlzLl9sb2csXG4gICAgfSk7XG4gICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTtcbiAgICB0aGlzLmxvZ1BhdGggPSBsb2dQYXRoO1xuICAgIHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2sgPSAhIWRpc2FibGVCdWlsZENoZWNrO1xuICAgIHRoaXMuc3RvcmFnZUNsaWVudCA9IGlzQXV0b2Rvd25sb2FkRW5hYmxlZFxuICAgICAgPyBuZXcgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCh7IGNocm9tZWRyaXZlckRpcjogdGhpcy5leGVjdXRhYmxlRGlyIH0pXG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IHt9O1xuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBnZXQgbG9nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nO1xuICB9XG5cbiAgYXN5bmMgZ2V0RHJpdmVyc01hcHBpbmcgKCkge1xuICAgIGxldCBtYXBwaW5nID0gXy5jbG9uZURlZXAoQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HKTtcbiAgICBpZiAodGhpcy5tYXBwaW5nUGF0aCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEF0dGVtcHRpbmcgdG8gdXNlIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSdgKTtcbiAgICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHRoaXMubWFwcGluZ1BhdGgpKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYE5vIGZpbGUgZm91bmQgYXQgJyR7dGhpcy5tYXBwaW5nUGF0aH0nYCk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0RlZmF1bHRpbmcgdG8gdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1hcHBpbmcgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMubWFwcGluZ1BhdGgsICd1dGY4JykpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBFcnJvciBwYXJzaW5nIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbygnRGVmYXVsdGluZyB0byB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnVXNpbmcgdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlcyBmb3IgbWluaW11bSBjaHJvbWUgdmVyc2lvbiBhcmUgc2VtdmVyIGNvbXBsaWFudFxuICAgIGZvciAoY29uc3QgW2NkVmVyc2lvbiwgY2hyb21lVmVyc2lvbl0gb2YgXy50b1BhaXJzKG1hcHBpbmcpKSB7XG4gICAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbik7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgbWFwcGluZ1tjZFZlcnNpb25dID0gY29lcmNlZFZlcnNpb24udmVyc2lvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYCcke2Nocm9tZVZlcnNpb259JyBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gU2tpcHBpbmcgaXRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBpbmc7XG4gIH1cblxuICBhc3luYyBnZXRDaHJvbWVkcml2ZXJzIChtYXBwaW5nKSB7XG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdmVyc2lvbnMgYXZhaWxhYmxlXG4gICAgY29uc3QgZXhlY3V0YWJsZXMgPSBhd2FpdCBmcy5nbG9iKCcqJywge1xuICAgICAgY3dkOiB0aGlzLmV4ZWN1dGFibGVEaXIsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgbm9kaXI6IHRydWUsXG4gICAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnZXhlY3V0YWJsZScsIGV4ZWN1dGFibGVzLmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgICAgYGluICcke3RoaXMuZXhlY3V0YWJsZURpcn0nYCk7XG4gICAgY29uc3QgY2RzID0gKGF3YWl0IGFzeW5jbWFwKGV4ZWN1dGFibGVzLCBhc3luYyAoZXhlY3V0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgbG9nRXJyb3IgPSAoe21lc3NhZ2UsIHN0ZG91dCA9IG51bGwsIHN0ZGVyciA9IG51bGx9KSA9PiB7XG4gICAgICAgIGxldCBlcnJNc2cgPSBgQ2Fubm90IHJldHJpZXZlIHZlcnNpb24gbnVtYmVyIGZyb20gJyR7cGF0aC5iYXNlbmFtZShleGVjdXRhYmxlKX0nIENocm9tZWRyaXZlciBiaW5hcnkuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgaXQgcmV0dXJucyBhIHZhbGlkIHZlcnNpb24gc3RyaW5nIGluIHJlc3BvbnNlIHRvICctLXZlcnNpb24nIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gJHttZXNzYWdlfWA7XG4gICAgICAgIGlmIChzdGRvdXQpIHtcbiAgICAgICAgICBlcnJNc2cgKz0gYFxcblN0ZG91dDogJHtzdGRvdXR9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgZXJyTXNnICs9IGBcXG5TdGRlcnI6ICR7c3RkZXJyfWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2cud2FybihlcnJNc2cpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICBsZXQgc3RkZXJyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgKHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCBleGVjKGV4ZWN1dGFibGUsIFsnLS12ZXJzaW9uJ10sIHtcbiAgICAgICAgICB0aW1lb3V0OiBDRF9WRVJTSU9OX1RJTUVPVVQsXG4gICAgICAgIH0pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIShlcnIubWVzc2FnZSB8fCAnJykuaW5jbHVkZXMoJ3RpbWVkIG91dCcpICYmICEoZXJyLnN0ZG91dCB8fCAnJykuaW5jbHVkZXMoJ1N0YXJ0aW5nIENocm9tZURyaXZlcicpKSB7XG4gICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIGhhcyB0aW1lZCBvdXQsIGl0IGhhcyBhY3R1YWxseSBzdGFydGVkIENocm9tZWRyaXZlcixcbiAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGVyZSB3aWxsIGFsc28gYmUgdGhlIHZlcnNpb24gc3RyaW5nIGluIHRoZSBvdXRwdXRcbiAgICAgICAgc3Rkb3V0ID0gZXJyLnN0ZG91dDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF0Y2ggPSAvQ2hyb21lRHJpdmVyXFxzK1xcKD92PyhbXFxkLl0rKVxcKT8vaS5leGVjKHN0ZG91dCk7IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvenBqNXdBLzFcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHttZXNzYWdlOiAnQ2Fubm90IHBhcnNlIHRoZSB2ZXJzaW9uIHN0cmluZycsIHN0ZG91dCwgc3RkZXJyfSk7XG4gICAgICB9XG4gICAgICBsZXQgdmVyc2lvbiA9IG1hdGNoWzFdO1xuICAgICAgbGV0IG1pbkNocm9tZVZlcnNpb24gPSBtYXBwaW5nW3ZlcnNpb25dO1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKHZlcnNpb24pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIC8vIGJlZm9yZSAyMDE5LTAzLTA2IHZlcnNpb25zIHdlcmUgb2YgdGhlIGZvcm0gbWFqb3IubWlub3JcbiAgICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uLm1ham9yIDwgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICB2ZXJzaW9uID0gYCR7Y29lcmNlZFZlcnNpb24ubWFqb3J9LiR7Y29lcmNlZFZlcnNpb24ubWlub3J9YDtcbiAgICAgICAgICBtaW5DaHJvbWVWZXJzaW9uID0gbWFwcGluZ1t2ZXJzaW9uXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb24gJiYgY29lcmNlZFZlcnNpb24ubWFqb3IgPj0gTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICAvLyBBc3N1bWUgdGhlIG1ham9yIENocm9tZSB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBtYWpvciB2ZXJzaW9uXG4gICAgICAgICAgbWluQ2hyb21lVmVyc2lvbiA9IGAke2NvZXJjZWRWZXJzaW9uLm1ham9yfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4ZWN1dGFibGUsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIG1pbkNocm9tZVZlcnNpb24sXG4gICAgICB9O1xuICAgIH0pKVxuICAgICAgLmZpbHRlcigoY2QpID0+ICEhY2QpXG4gICAgICAuc29ydCgoYSwgYikgPT4gY29tcGFyZVZlcnNpb25zKGIudmVyc2lvbiwgYS52ZXJzaW9uKSk7XG4gICAgaWYgKF8uaXNFbXB0eShjZHMpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBObyBDaHJvbWVkcml2ZXJzIHdlcmUgZm91bmQgaW4gJyR7dGhpcy5leGVjdXRhYmxlRGlyfSdgKTtcbiAgICAgIHJldHVybiBjZHM7XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgZm9sbG93aW5nIENocm9tZWRyaXZlciBleGVjdXRhYmxlcyB3ZXJlIGZvdW5kOmApO1xuICAgIGZvciAoY29uc3QgY2Qgb2YgY2RzKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgICcke2NkLmV4ZWN1dGFibGV9JyAodmVyc2lvbiAnJHtjZC52ZXJzaW9ufScsIG1pbmltdW0gQ2hyb21lIHZlcnNpb24gJyR7Y2QubWluQ2hyb21lVmVyc2lvbiA/IGNkLm1pbkNocm9tZVZlcnNpb24gOiAnVW5rbm93bid9JylgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNkcztcbiAgfVxuXG4gIGFzeW5jIGdldENocm9tZVZlcnNpb24gKCkge1xuICAgIC8vIFRyeSB0byByZXRyaWV2ZSB0aGUgdmVyc2lvbiBmcm9tIGBkZXRhaWxzYCBwcm9wZXJ0eSBpZiBpdCBpcyBzZXRcbiAgICAvLyBUaGUgYGluZm9gIGl0ZW0gbXVzdCBjb250YWluIHRoZSBvdXRwdXQgb2YgL2pzb24vdmVyc2lvbiBDRFAgY29tbWFuZFxuICAgIC8vIHdoZXJlIGBCcm93c2VyYCBmaWVsZCBsb29rcyBsaWtlIGBDaHJvbWUvNzIuMC4zNjAxLjBgYFxuICAgIGlmICh0aGlzLmRldGFpbHM/LmluZm8pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBCcm93c2VyIHZlcnNpb24gaW4gdGhlIHN1cHBsaWVkIGRldGFpbHM6ICR7dGhpcy5kZXRhaWxzPy5pbmZvPy5Ccm93c2VyfWApO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBWRVJTSU9OX1BBVFRFUk4uZXhlYyh0aGlzLmRldGFpbHM/LmluZm8/LkJyb3dzZXIpO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uTWF0Y2hbMV0pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBjb2VyY2VkVmVyc2lvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY2hyb21lVmVyc2lvbjtcblxuICAgIC8vIGluIGNhc2Ugb2YgV2ViVmlldyBCcm93c2VyIFRlc3Rlciwgc2ltcGx5IHRyeSB0byBmaW5kIHRoZSB1bmRlcmx5aW5nIHdlYnZpZXdcbiAgICBpZiAodGhpcy5idW5kbGVJZCA9PT0gV0VCVklFV19TSEVMTF9CVU5ETEVfSUQpIHtcbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIHJldHVybiBzZW12ZXIuY29lcmNlKGNocm9tZVZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBvbiBBbmRyb2lkIDctOSB3ZWJ2aWV3cyBhcmUgYmFja2VkIGJ5IHRoZSBtYWluIENocm9tZSwgbm90IHRoZSBzeXN0ZW0gd2Vidmlld1xuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAgICAgaWYgKGFwaUxldmVsID49IDI0ICYmIGFwaUxldmVsIDw9IDI4ICYmXG4gICAgICAgICAgW1dFQlZJRVdfU0hFTExfQlVORExFX0lELCAuLi5XRUJWSUVXX0JVTkRMRV9JRFNdLmluY2x1ZGVzKHRoaXMuYnVuZGxlSWQpKSB7XG4gICAgICAgIHRoaXMuYnVuZGxlSWQgPSBDSFJPTUVfQlVORExFX0lEO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRyeSBvdXQgd2Vidmlld3Mgd2hlbiBubyBidW5kbGUgaWQgaXMgc2VudCBpblxuICAgIGlmICghdGhpcy5idW5kbGVJZCkge1xuICAgICAgLy8gZGVmYXVsdCB0byB0aGUgZ2VuZXJpYyBDaHJvbWUgYnVuZGxlXG4gICAgICB0aGlzLmJ1bmRsZUlkID0gQ0hST01FX0JVTkRMRV9JRDtcblxuICAgICAgLy8gd2UgaGF2ZSBhIHdlYnZpZXcgb2Ygc29tZSBzb3J0LCBzbyB0cnkgdG8gZmluZCB0aGUgYnVuZGxlIHZlcnNpb25cbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgZG8gbm90IGhhdmUgYSBjaHJvbWUgdmVyc2lvbiwgaXQgbXVzdCBub3QgYmUgYSB3ZWJ2aWV3XG4gICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICBjaHJvbWVWZXJzaW9uID0gYXdhaXQgZ2V0Q2hyb21lVmVyc2lvbih0aGlzLmFkYiwgdGhpcy5idW5kbGVJZCk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIGl0IGlzIHNlbXZlciwgc28gbGF0ZXIgY2hlY2tzIHdvbid0IGZhaWxcbiAgICByZXR1cm4gY2hyb21lVmVyc2lvbiA/IHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbikgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRHJpdmVyc01hcHBpbmcgKG5ld01hcHBpbmcpIHtcbiAgICBsZXQgc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZyA9IHRydWU7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm1hcHBpbmdQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMubWFwcGluZ1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld01hcHBpbmcsIG51bGwsIDIpLCAndXRmOCcpO1xuICAgICAgICBzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nID0gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBzdG9yZSB0aGUgdXBkYXRlZCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgaW50byAnJHt0aGlzLm1hcHBpbmdQYXRofScuIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlIG9mIGZ1cnRoZXIgZXhlY3V0aW9ucy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZykge1xuICAgICAgT2JqZWN0LmFzc2lnbihDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsIG5ld01hcHBpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIgKCkge1xuICAgIGlmICghdGhpcy5hZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwcGluZyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyc01hcHBpbmcoKTtcbiAgICBpZiAoIV8uaXNFbXB0eShtYXBwaW5nKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSBtb3N0IHJlY2VudCBrbm93biBDaHJvbWUgdmVyc2lvbjogJHtfLnZhbHVlcyhtYXBwaW5nKVswXX1gKTtcbiAgICB9XG5cbiAgICBsZXQgZGlkU3RvcmFnZVN5bmMgPSBmYWxzZTtcbiAgICBjb25zdCBzeW5jQ2hyb21lZHJpdmVycyA9IGFzeW5jIChjaHJvbWVWZXJzaW9uKSA9PiB7XG4gICAgICBkaWRTdG9yYWdlU3luYyA9IHRydWU7XG4gICAgICBjb25zdCByZXRyaWV2ZWRNYXBwaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlQ2xpZW50LnJldHJpZXZlTWFwcGluZygpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0dvdCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgZnJvbSB0aGUgc3RvcmFnZTogJyArXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHJldHJpZXZlZE1hcHBpbmcsIG51bGwsIDIpKTtcbiAgICAgIGNvbnN0IGRyaXZlcktleXMgPSBhd2FpdCB0aGlzLnN0b3JhZ2VDbGllbnQuc3luY0RyaXZlcnMoe1xuICAgICAgICBtaW5Ccm93c2VyVmVyc2lvbjogY2hyb21lVmVyc2lvbi5tYWpvcixcbiAgICAgIH0pO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJLZXlzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyA9IGRyaXZlcktleXMucmVkdWNlKChhY2MsIHgpID0+IHtcbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIG1pbkJyb3dzZXJWZXJzaW9ufSA9IHJldHJpZXZlZE1hcHBpbmdbeF07XG4gICAgICAgIGFjY1t2ZXJzaW9uXSA9IG1pbkJyb3dzZXJWZXJzaW9uO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgT2JqZWN0LmFzc2lnbihtYXBwaW5nLCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKG1hcHBpbmcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGNkcyA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lZHJpdmVycyhtYXBwaW5nKTtcblxuICAgICAgY29uc3QgbWlzc2luZ1ZlcnNpb25zID0ge307XG4gICAgICBmb3IgKGNvbnN0IHt2ZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9ufSBvZiBjZHMpIHtcbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uIHx8IG1hcHBpbmdbdmVyc2lvbl0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2VyY2VkVmVyID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uKTtcbiAgICAgICAgaWYgKCFjb2VyY2VkVmVyIHx8IGNvZXJjZWRWZXIubWFqb3IgPCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWlzc2luZ1ZlcnNpb25zW3ZlcnNpb25dID0gbWluQ2hyb21lVmVyc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdWZXJzaW9ucykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnQ2hyb21lZHJpdmVyJywgXy5zaXplKG1pc3NpbmdWZXJzaW9ucyksIHRydWUpfSwgYCArXG4gICAgICAgICAgYHdoaWNoICR7Xy5zaXplKG1pc3NpbmdWZXJzaW9ucykgPT09IDEgPyAnaXMnIDogJ2FyZSd9IG1pc3NpbmcgaW4gdGhlIGxpc3Qgb2Yga25vd24gdmVyc2lvbnM6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1pc3NpbmdWZXJzaW9ucykpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKE9iamVjdC5hc3NpZ24obWFwcGluZywgbWlzc2luZ1ZlcnNpb25zKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIENocm9tZWRyaXZlciBleGVjdXRhYmxlIGF2YWlsYWJsZSBmb3IgdXNlIGlmIGAgK1xuICAgICAgICAgICAgYCdjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjaycgY2FwYWJpbGl0eSBpcyBzZXQgdG8gJ3RydWUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIGV4ZWN1dGFibGV9ID0gY2RzWzBdO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDaHJvbWUgYnVpbGQgY2hlY2sgZGlzYWJsZWQuIFVzaW5nIG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uICgke3ZlcnNpb259LCBhdCAnJHtleGVjdXRhYmxlfScpYCk7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYElmIHRoaXMgaXMgd3JvbmcsIHNldCAnY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2snIGNhcGFiaWxpdHkgdG8gJ2ZhbHNlJ2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hyb21lVmVyc2lvbiA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lVmVyc2lvbigpO1xuICAgICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgIC8vIHVuYWJsZSB0byBnZXQgdGhlIGNocm9tZSB2ZXJzaW9uXG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIENocm9tZWRyaXZlciBleGVjdXRhYmxlIGF2YWlsYWJsZSBmb3IgdXNlIGlmIGAgK1xuICAgICAgICAgICAgYHRoZSBjdXJyZW50IENocm9tZSB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIGV4ZWN1dGFibGV9ID0gY2RzWzBdO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZGlzY292ZXIgQ2hyb21lIHZlcnNpb24uIFVzaW5nIENocm9tZWRyaXZlciAke3ZlcnNpb259IGF0ICcke2V4ZWN1dGFibGV9J2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCBDaHJvbWUgYnVuZGxlICcke3RoaXMuYnVuZGxlSWR9JyB2ZXJzaW9uICcke2Nocm9tZVZlcnNpb259J2ApO1xuXG4gICAgICBjb25zdCBtYXRjaGluZ0RyaXZlcnMgPSBjZHMuZmlsdGVyKCh7bWluQ2hyb21lVmVyc2lvbn0pID0+IHtcbiAgICAgICAgY29uc3QgbWluQ2hyb21lVmVyc2lvblMgPSBtaW5DaHJvbWVWZXJzaW9uICYmIHNlbXZlci5jb2VyY2UobWluQ2hyb21lVmVyc2lvbik7XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvblMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hyb21lVmVyc2lvbi5tYWpvciA+IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OXG4gICAgICAgICAgPyBtaW5DaHJvbWVWZXJzaW9uUy5tYWpvciA9PT0gY2hyb21lVmVyc2lvbi5tYWpvclxuICAgICAgICAgIDogc2VtdmVyLmd0ZShjaHJvbWVWZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9uUyk7XG4gICAgICB9KTtcbiAgICAgIGlmIChfLmlzRW1wdHkobWF0Y2hpbmdEcml2ZXJzKSkge1xuICAgICAgICBpZiAodGhpcy5zdG9yYWdlQ2xpZW50ICYmICFkaWRTdG9yYWdlU3luYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgc3luY0Nocm9tZWRyaXZlcnMoY2hyb21lVmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHN5bmNocm9uaXplIGxvY2FsIGNocm9tZWRyaXZlcnMgd2l0aCB0aGUgcmVtb3RlIHN0b3JhZ2UgYXQgJHtDRF9DRE59OiBgICtcbiAgICAgICAgICAgICAgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdXRvZG93bmxvYWRTdWdnZXN0aW9uID1cbiAgICAgICAgICAnWW91IGNvdWxkIGFsc28gdHJ5IHRvIGVuYWJsZSBhdXRvbWF0ZWQgY2hyb21lZHJpdmVycyBkb3dubG9hZCBhcyAnICtcbiAgICAgICAgICAnYSBwb3NzaWJsZSB3b3JrYXJvdW5kLic7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ2hyb21lZHJpdmVyIGZvdW5kIHRoYXQgY2FuIGF1dG9tYXRlIENocm9tZSAnJHtjaHJvbWVWZXJzaW9ufScuYCArXG4gICAgICAgICAgKHRoaXMuc3RvcmFnZUNsaWVudCA/ICcnIDogYCAke2F1dG9kb3dubG9hZFN1Z2dlc3Rpb259YCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiaW5QYXRoID0gbWF0Y2hpbmdEcml2ZXJzWzBdLmV4ZWN1dGFibGU7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnZXhlY3V0YWJsZScsIG1hdGNoaW5nRHJpdmVycy5sZW5ndGgsIHRydWUpfSBgICtcbiAgICAgICAgYGNhcGFibGUgb2YgYXV0b21hdGluZyBDaHJvbWUgJyR7Y2hyb21lVmVyc2lvbn0nLlxcbkNob29zaW5nIHRoZSBtb3N0IHJlY2VudCwgJyR7YmluUGF0aH0nLmApO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0lmIGEgc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1aXJlZCwgc3BlY2lmeSBpdCB3aXRoIHRoZSBgY2hyb21lZHJpdmVyRXhlY3V0YWJsZWAnICtcbiAgICAgICAgJ2Rlc2lyZWQgY2FwYWJpbGl0eS4nKTtcbiAgICAgIHJldHVybiBiaW5QYXRoO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICB9IHdoaWxlICh0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRDaHJvbWVkcml2ZXJQYXRoICgpIHtcbiAgICBpZiAodGhpcy5leGVjdXRhYmxlVmVyaWZpZWQpIHJldHVybjsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICAvLyB0aGUgZXhlY3V0YWJsZSBtaWdodCBiZSBzZXQgKGlmIHBhc3NlZCBpbilcbiAgICAvLyBvciB3ZSBtaWdodCB3YW50IHRvIHVzZSB0aGUgYmFzaWMgb25lIGluc3RhbGxlZCB3aXRoIHRoaXMgZHJpdmVyXG4gICAgLy8gb3Igd2Ugd2FudCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IG9uZVxuICAgIGlmICghdGhpcy5jaHJvbWVkcml2ZXIpIHtcbiAgICAgIHRoaXMuY2hyb21lZHJpdmVyID0gdGhpcy51c2VTeXN0ZW1FeGVjdXRhYmxlXG4gICAgICAgID8gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCgpXG4gICAgICAgIDogYXdhaXQgdGhpcy5nZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHModGhpcy5jaHJvbWVkcml2ZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgYSBjaHJvbWVkcml2ZXIgYmluYXJ5IGF0IHRoZSBwYXRoIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY2hyb21lZHJpdmVyfSwgYnV0IGl0IGRvZXNuJ3QgZXhpc3QhYCk7XG4gICAgfVxuICAgIHRoaXMuZXhlY3V0YWJsZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB0aGlzLmxvZy5pbmZvKGBTZXQgY2hyb21lZHJpdmVyIGJpbmFyeSBhczogJHt0aGlzLmNocm9tZWRyaXZlcn1gKTtcbiAgfVxuXG4gIHN5bmNQcm90b2NvbCAoY2RWZXJzaW9uID0gbnVsbCkge1xuICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShjZFZlcnNpb24pO1xuICAgIGlmICghY29lcmNlZFZlcnNpb24gfHwgY29lcmNlZFZlcnNpb24ubWFqb3IgPCBNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hyb21lZHJpdmVyIHYuICR7Y2RWZXJzaW9ufSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0ICR7UFJPVE9DT0xTLlczQ30gcHJvdG9jb2wuIGAgK1xuICAgICAgICBgRGVmYXVsdGluZyB0byAke1BST1RPQ09MUy5NSlNPTldQfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaHJvbWVPcHRpb25zID0gZ2V0Q2FwVmFsdWUodGhpcy5jYXBhYmlsaXRpZXMsICdjaHJvbWVPcHRpb25zJywge30pO1xuICAgIGlmIChjaHJvbWVPcHRpb25zLnczYyA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYENocm9tZWRyaXZlciB2LiAke2NkVmVyc2lvbn0gc3VwcG9ydHMgJHtQUk9UT0NPTFMuVzNDfSBwcm90b2NvbCwgYCArXG4gICAgICAgIGBidXQgJHtQUk9UT0NPTFMuTUpTT05XUH0gb25lIGhhcyBiZWVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLlczQztcbiAgICAvLyBnaXZlbiBjYXBzIG1pZ2h0IG5vdCBiZSBwcm9wZXJseSBwcmVmaXhlZFxuICAgIC8vIHNvIHdlIHRyeSB0byBmaXggdGhlbSBpbiBvcmRlciB0byBwcm9wZXJseSBpbml0XG4gICAgLy8gdGhlIG5ldyBXM0Mgc2Vzc2lvblxuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gdG9XM2NDYXBOYW1lcyh0aGlzLmNhcGFiaWxpdGllcyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoY2FwcywgZW1pdFN0YXJ0aW5nU3RhdGUgPSB0cnVlKSB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChjYXBzKTtcblxuICAgIC8vIHNldCB0aGUgbG9nZ2luZyBwcmVmZXJlbmNlcyB0byBBTEwgdGhlIGNvbnNvbGUgbG9nc1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcyA9IF8uY2xvbmVEZWVwKGdldENhcFZhbHVlKGNhcHMsICdsb2dnaW5nUHJlZnMnLCB7fSkpO1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzLmJyb3dzZXIpKSB7XG4gICAgICB0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMuYnJvd3NlciA9ICdBTEwnO1xuICAgIH1cblxuICAgIGlmIChlbWl0U3RhcnRpbmdTdGF0ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RBUlRJTkcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSBbYC0tcG9ydD0ke3RoaXMucHJveHlQb3J0fWBdO1xuICAgIGlmICh0aGlzLmFkYiAmJiB0aGlzLmFkYi5hZGJQb3J0KSB7XG4gICAgICBhcmdzLnB1c2goYC0tYWRiLXBvcnQ9JHt0aGlzLmFkYi5hZGJQb3J0fWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0FycmF5KHRoaXMuY21kQXJncykpIHtcbiAgICAgIGFyZ3MucHVzaCguLi50aGlzLmNtZEFyZ3MpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2dQYXRoKSB7XG4gICAgICBhcmdzLnB1c2goYC0tbG9nLXBhdGg9JHt0aGlzLmxvZ1BhdGh9YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICBhcmdzLnB1c2goJy0tZGlzYWJsZS1idWlsZC1jaGVjaycpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy0tdmVyYm9zZScpO1xuICAgIC8vIHdoYXQgYXJlIHRoZSBwcm9jZXNzIHN0ZG91dC9zdGRlcnIgY29uZGl0aW9ucyB3aGVyZWluIHdlIGtub3cgdGhhdFxuICAgIC8vIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkIHRvIG91ciBzYXRpc2ZhY3Rpb24/XG4gICAgY29uc3Qgc3RhcnREZXRlY3RvciA9IChzdGRvdXQpID0+IHN0ZG91dC5zdGFydHNXaXRoKCdTdGFydGluZyAnKTtcblxuICAgIGxldCBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgIGxldCB3ZWJ2aWV3VmVyc2lvbjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0Q2hyb21lZHJpdmVyUGF0aCgpO1xuICAgICAgYXdhaXQgdGhpcy5raWxsQWxsKCk7XG5cbiAgICAgIC8vIHNldCB1cCBvdXIgc3VicHJvY2VzcyBvYmplY3RcbiAgICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHRoaXMuY2hyb21lZHJpdmVyLCBhcmdzKTtcbiAgICAgIHByb2Nlc3NJc0FsaXZlID0gdHJ1ZTtcblxuICAgICAgLy8gaGFuZGxlIGxvZyBvdXRwdXRcbiAgICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIC8vIGlmIHRoZSBjZCBvdXRwdXQgaXMgbm90IHByaW50ZWQsIGZpbmQgdGhlIGNocm9tZSB2ZXJzaW9uIGFuZCBwcmludFxuICAgICAgICAvLyB3aWxsIGdldCBhIHJlc3BvbnNlIGxpa2VcbiAgICAgICAgLy8gICBEZXZUb29scyByZXNwb25zZToge1xuICAgICAgICAvLyAgICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNhbXBsZWFwcFwiLFxuICAgICAgICAvLyAgICAgIFwiQnJvd3NlclwiOiBcIkNocm9tZS81NS4wLjI4ODMuOTFcIixcbiAgICAgICAgLy8gICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjJcIixcbiAgICAgICAgLy8gICAgICBcIlVzZXItQWdlbnRcIjogXCIuLi5cIixcbiAgICAgICAgLy8gICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2XCJcbiAgICAgICAgLy8gICB9XG4gICAgICAgIGNvbnN0IG91dCA9IHN0ZG91dCArIHN0ZGVycjtcbiAgICAgICAgbGV0IG1hdGNoID0gL1wiQnJvd3NlclwiOiBcIiguKilcIi8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB3ZWJ2aWV3VmVyc2lvbiA9IG1hdGNoWzFdO1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBXZWJ2aWV3IHZlcnNpb246ICcke3dlYnZpZXdWZXJzaW9ufSdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFsc28gcHJpbnQgY2hyb21lZHJpdmVyIHZlcnNpb24gdG8gbG9nc1xuICAgICAgICAvLyB3aWxsIG91dHB1dCBzb21ldGhpbmcgbGlrZVxuICAgICAgICAvLyAgU3RhcnRpbmcgQ2hyb21lRHJpdmVyIDIuMzMuNTA2MTA2ICg4YTA2YzM5YzQ1ODJmYmZiYWI2OTY2ZGJiMWMzOGE5MTczYmZiMWEyKSBvbiBwb3J0IDk1MTVcbiAgICAgICAgbWF0Y2ggPSAvU3RhcnRpbmcgQ2hyb21lRHJpdmVyIChbLlxcZF0rKS8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hyb21lZHJpdmVyIHZlcnNpb246ICcke21hdGNoWzFdfSdgKTtcbiAgICAgICAgICB0aGlzLnN5bmNQcm90b2NvbChtYXRjaFsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnaXZlIHRoZSBvdXRwdXQgaWYgaXQgaXMgcmVxdWVzdGVkXG4gICAgICAgIGlmICh0aGlzLnZlcmJvc2UpIHtcbiAgICAgICAgICBmb3IgKGxldCBsaW5lIG9mIChzdGRvdXQgfHwgJycpLnRyaW0oKS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgIGlmICghbGluZS50cmltKCkubGVuZ3RoKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFtTVERPVVRdICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgbGluZSBvZiAoc3RkZXJyIHx8ICcnKS50cmltKCkuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpLmxlbmd0aCkgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKGBbU1RERVJSXSAke2xpbmV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9SRVNUQVJUSU5HKSB7XG4gICAgICAgICAgY29uc3QgbXNnID0gYENocm9tZWRyaXZlciBleGl0ZWQgdW5leHBlY3RlZGx5IHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YDtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvcihtc2cpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nLmluZm8oYFNwYXduaW5nIGNocm9tZWRyaXZlciB3aXRoOiAke3RoaXMuY2hyb21lZHJpdmVyfSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgLy8gc3RhcnQgc3VicHJvYyBhbmQgd2FpdCBmb3Igc3RhcnREZXRlY3RvclxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yT25saW5lKCk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9FUlJPUiwgZSk7XG4gICAgICAvLyBqdXN0IGJlY2F1c2Ugd2UgaGFkIGFuIGVycm9yIGRvZXNuJ3QgbWVhbiB0aGUgY2hyb21lZHJpdmVyIHByb2Nlc3NcbiAgICAgIC8vIGZpbmlzaGVkOyB3ZSBzaG91bGQgY2xlYW4gdXAgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAocHJvY2Vzc0lzQWxpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICAgIC8vIG9mdGVuIHRoZSB1c2VyJ3MgQ2hyb21lIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdmVyc2lvbiBvZiBDaHJvbWVkcml2ZXJcbiAgICAgIGlmIChlLm1lc3NhZ2UuaW5jbHVkZXMoJ0Nocm9tZSB2ZXJzaW9uIG11c3QgYmUnKSkge1xuICAgICAgICBtZXNzYWdlICs9ICdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24gYmVjYXVzZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBDaHJvbWVkcml2ZXIuXFxuJztcbiAgICAgICAgaWYgKHdlYnZpZXdWZXJzaW9uKSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBgQ2hyb21lIHZlcnNpb24gb24gdGhlIGRldmljZTogJHt3ZWJ2aWV3VmVyc2lvbn1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXIgPSAvQ2hyb21lIHZlcnNpb24gbXVzdCBiZSAoLispLy5leGVjKGUubWVzc2FnZSk/LlsxXSB8fCAnJztcbiAgICAgICAgaWYgKHZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXIpIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBDaHJvbWVkcml2ZXIgc3VwcG9ydHMgQ2hyb21lIHZlcnNpb24ocyk6ICR7dmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlcn1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2UgKz0gJ0NoZWNrIHRoZSBkcml2ZXIgdHV0b3JpYWwgZm9yIHRyb3VibGVzaG9vdGluZy5cXG4nO1xuICAgICAgfVxuXG4gICAgICBtZXNzYWdlICs9IGUubWVzc2FnZTtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3cobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgc2Vzc2lvbklkICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSA/IHRoaXMuandwcm94eS5zZXNzaW9uSWQgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgcmVzdGFydCAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnUmVzdGFydGluZyBjaHJvbWVkcml2ZXInKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcmVzdGFydCB3aGVuIHdlJ3JlIG5vdCBvbmxpbmVcIik7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcpO1xuICAgIGF3YWl0IHRoaXMuc3RvcChmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0aGlzLmNhcGFiaWxpdGllcywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvck9ubGluZSAoKSB7XG4gICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBDRCBoYXNuJ3QgY3Jhc2hlZFxuICAgIGxldCBjaHJvbWVkcml2ZXJTdG9wcGVkID0gZmFsc2U7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgyMCwgMjAwLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgICAgLy8gd2UgYXJlIGVpdGhlciBzdG9wcGVkIG9yIHN0b3BwaW5nLCBzbyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgICBjaHJvbWVkcml2ZXJTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9KTtcbiAgICBpZiAoY2hyb21lZHJpdmVyU3RvcHBlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaHJvbWVEcml2ZXIgY3Jhc2hlZCBkdXJpbmcgc3RhcnR1cC4nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoKSB7XG4gICAgY29uc3Qgc2Vzc2lvbkNhcHMgPSB0aGlzLmRlc2lyZWRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQ1xuICAgICAgPyB7Y2FwYWJpbGl0aWVzOiB7YWx3YXlzTWF0Y2g6IHRoaXMuY2FwYWJpbGl0aWVzfX1cbiAgICAgIDoge2Rlc2lyZWRDYXBhYmlsaXRpZXM6IHRoaXMuY2FwYWJpbGl0aWVzfTtcbiAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyAke3RoaXMuZGVzaXJlZFByb3RvY29sfSBDaHJvbWVkcml2ZXIgc2Vzc2lvbiB3aXRoIGNhcGFiaWxpdGllczogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShzZXNzaW9uQ2FwcywgbnVsbCwgMikpO1xuICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywgc2Vzc2lvbkNhcHMpO1xuICAgIHRoaXMubG9nLnByZWZpeCA9IGdlbmVyYXRlTG9nUHJlZml4KHRoaXMsIHRoaXMuandwcm94eS5zZXNzaW9uSWQpO1xuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSk7XG4gIH1cblxuICBhc3luYyBzdG9wIChlbWl0U3RhdGVzID0gdHJ1ZSkge1xuICAgIGlmIChlbWl0U3RhdGVzKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyk7XG4gICAgfVxuICAgIGNvbnN0IHJ1blNhZmVTdGVwID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oZS5tZXNzYWdlKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfTtcbiAgICBhd2FpdCBydW5TYWZlU3RlcCgoKSA9PiB0aGlzLmp3cHJveHkuY29tbWFuZCgnJywgJ0RFTEVURScpKTtcbiAgICBhd2FpdCBydW5TYWZlU3RlcCgoKSA9PiB0aGlzLnByb2Muc3RvcCgnU0lHVEVSTScsIDIwMDAwKSk7XG4gICAgdGhpcy5sb2cucHJlZml4ID0gZ2VuZXJhdGVMb2dQcmVmaXgodGhpcyk7XG4gICAgaWYgKGVtaXRTdGF0ZXMpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVN0YXRlIChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hhbmdlZCBzdGF0ZSB0byAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cblxuICBhc3luYyBwcm94eVJlcSAocmVxLCByZXMpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzKHJlcSwgcmVzKTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxBbGwgKCkge1xuICAgIGxldCBjbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKClcbiAgICAgID8gYHdtaWMgcHJvY2VzcyB3aGVyZSBcImNvbW1hbmRsaW5lIGxpa2UgJyVjaHJvbWVkcml2ZXIuZXhlJS0tcG9ydD0ke3RoaXMucHJveHlQb3J0fSUnXCIgZGVsZXRlYFxuICAgICAgOiBgcGtpbGwgLTE1IC1mIFwiJHt0aGlzLmNocm9tZWRyaXZlcn0uKi0tcG9ydD0ke3RoaXMucHJveHlQb3J0fVwiYDtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgS2lsbGluZyBhbnkgb2xkIGNocm9tZWRyaXZlcnMsIHJ1bm5pbmc6ICR7Y21kfWApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCAoQi5wcm9taXNpZnkoY3AuZXhlYykpKGNtZCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnU3VjY2Vzc2Z1bGx5IGNsZWFuZWQgdXAgb2xkIGNocm9tZWRyaXZlcnMnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ05vIG9sZCBjaHJvbWVkcml2ZXJzIHNlZW0gdG8gZXhpc3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hZGIpIHtcbiAgICAgIGNvbnN0IHVkaWRJbmRleCA9IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtID09PSAnLXMnKTtcbiAgICAgIGNvbnN0IHVkaWQgPSB1ZGlkSW5kZXggPiAtMSA/IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3NbdWRpZEluZGV4ICsgMV0gOiBudWxsO1xuXG4gICAgICBpZiAodWRpZCkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdGhpcyBkZXZpY2UncyBhZGIgZm9yd2FyZGVkIHBvcnQgc29ja2V0IGNvbm5lY3Rpb25zOiAke3VkaWR9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xlYW5pbmcgYW55IG9sZCBhZGIgZm9yd2FyZGVkIHBvcnQgc29ja2V0IGNvbm5lY3Rpb25zYCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGNvbm4gb2YgYXdhaXQgdGhpcy5hZGIuZ2V0Rm9yd2FyZExpc3QoKSkge1xuICAgICAgICAgIC8vIGNocm9tZWRyaXZlciB3aWxsIGFzayBBREIgdG8gZm9yd2FyZCBhIHBvcnQgbGlrZSBcImRldmljZUlkIHRjcDpwb3J0IGxvY2FsYWJzdHJhY3Q6d2Vidmlld19kZXZ0b29sc19yZW1vdGVfcG9ydFwiXG4gICAgICAgICAgaWYgKCEoY29ubi5pbmNsdWRlcygnd2Vidmlld19kZXZ0b29scycpICYmICghdWRpZCB8fCBjb25uLmluY2x1ZGVzKHVkaWQpKSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBwYXJhbXMgPSBjb25uLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZChwYXJhbXNbMV0ucmVwbGFjZSgvW1xcRF0qLywgJycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gY2xlYW4gZm9yd2FyZGVkIHBvcnRzLiBFcnJvcjogJyR7ZXJyLm1lc3NhZ2V9Jy4gQ29udGludWluZy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBoYXNXb3JraW5nV2VidmlldyAoKSB7XG4gICAgLy8gc29tZXRpbWVzIGNocm9tZWRyaXZlciBzdG9wcyBhdXRvbWF0aW5nIHdlYnZpZXdzLiB0aGlzIG1ldGhvZCBydW5zIGFcbiAgICAvLyBzaW1wbGUgY29tbWFuZCB0byBkZXRlcm1pbmUgb3VyIHN0YXRlLCBhbmQgcmVzcG9uZHMgYWNjb3JkaW5nbHlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy91cmwnLCAnR0VUJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbkNocm9tZWRyaXZlci5FVkVOVF9FUlJPUiA9ICdjaHJvbWVkcml2ZXJfZXJyb3InO1xuQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEID0gJ3N0b3BwZWQnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUQVJUSU5HID0gJ3N0YXJ0aW5nJztcbkNocm9tZWRyaXZlci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyA9ICdzdG9wcGluZyc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORyA9ICdyZXN0YXJ0aW5nJztcblxuZXhwb3J0IHsgQ2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBDaHJvbWVkcml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLG1DQUFtQyxHQUFHLEVBQUU7QUFDOUMsTUFBTUMsWUFBWSxHQUFHLFdBQVc7QUFDaEMsTUFBTUMsK0JBQStCLEdBQUcsRUFBRTtBQUMxQyxNQUFNQyxZQUFZLEdBQUcsSUFBSTtBQUN6QixNQUFNQyxnQkFBZ0IsR0FBRyxvQkFBb0I7QUFDN0MsTUFBTUMsdUJBQXVCLEdBQUcsNEJBQTRCO0FBQzVELE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCLDRCQUE0QixFQUM1QixxQkFBcUIsQ0FDdEI7QUFDRCxNQUFNQyxlQUFlLEdBQUcsVUFBVTtBQUVsQyxNQUFNQyxrQkFBa0IsR0FBRyxJQUFJO0FBRS9CLE1BQU1DLFlBQVksU0FBU0MsZUFBTSxDQUFDQyxZQUFZLENBQUM7RUFDN0NDLFdBQVcsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3RCLEtBQUssRUFBRTtJQUVQLE1BQU07TUFDSkMsSUFBSSxHQUFHYixZQUFZO01BQ25CYyxJQUFJLEdBQUdaLFlBQVk7TUFDbkJhLG1CQUFtQixH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