appium-chromedriver 5.1.6 → 5.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -18
- package/build/index.js +2 -4
- package/build/lib/chromedriver.js +4 -6
- package/build/lib/install.js +2 -4
- package/build/lib/protocol-helpers.js +2 -4
- package/build/lib/storage-client.js +3 -7
- package/build/lib/utils.js +37 -16
- package/config/mapping.json +1 -0
- package/lib/chromedriver.js +1 -1
- package/lib/utils.js +32 -12
- package/package.json +37 -20
package/README.md
CHANGED
|
@@ -9,23 +9,10 @@ Node.js wrapper around [Chromedriver](https://sites.google.com/a/chromium.org/ch
|
|
|
9
9
|
|
|
10
10
|
Issues for this repo are disabled. Log any issues at the [main Appium repo's issue tracker](https://github.com/appium/appium/issues).
|
|
11
11
|
|
|
12
|
-
## Local installation
|
|
13
|
-
|
|
14
|
-
Because of the oddities of `npm`'s lifecycle hooks, installing locally the first time _will_ fail, saying `Project does not appear to built yet. Please run `gulp transpile` first.`. This is because we transpile in the `prepublish` phase, but run the install script in the `install` phase. Any other way would make development dependencies necessary on user's machines, or make the binary not install, unfortunately.
|
|
15
|
-
|
|
16
|
-
The solution, however, is simple. Simple run `gulp transpile` and then `npm install`. The former will build the project and the latter will simply install the binary.
|
|
17
|
-
|
|
18
12
|
## Skipping binary installation
|
|
19
13
|
|
|
20
14
|
If, for some reason, you want to install without installing the Chromedriver
|
|
21
|
-
binary
|
|
22
|
-
pass the `--chromedriver-skip-install` flag while running `npm install`
|
|
23
|
-
or add the following property into your [`.npmrc`](https://docs.npmjs.com/files/npmrc) file.
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
chromedriver_skip_install=true
|
|
27
|
-
```
|
|
28
|
-
|
|
15
|
+
binary set the `APPIUM_SKIP_CHROMEDRIVER_INSTALL` environment variable.
|
|
29
16
|
|
|
30
17
|
## Usage
|
|
31
18
|
|
|
@@ -112,16 +99,16 @@ CHROMEDRIVER_CDNURL=http://npm.taobao.org/mirrors/chromedriver npm install appiu
|
|
|
112
99
|
|
|
113
100
|
## Dev
|
|
114
101
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
### Watch
|
|
102
|
+
### Build & Lint
|
|
118
103
|
|
|
119
104
|
```
|
|
120
|
-
npm run
|
|
105
|
+
npm run build
|
|
106
|
+
npm run lint
|
|
121
107
|
```
|
|
122
108
|
|
|
123
109
|
### Run Tests
|
|
124
110
|
|
|
125
111
|
```
|
|
126
112
|
npm test
|
|
113
|
+
npm e2e-test
|
|
127
114
|
```
|
package/build/index.js
CHANGED
|
@@ -20,7 +20,5 @@ var _chromedriver = _interopRequireDefault(require("./lib/chromedriver"));
|
|
|
20
20
|
var _storageClient = _interopRequireDefault(require("./lib/storage-client"));
|
|
21
21
|
|
|
22
22
|
var _default = _chromedriver.default;
|
|
23
|
-
exports.default = _default;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJjaHJvbWVkcml2ZXIiXSwic291cmNlUm9vdCI6Ii4uIiwic291cmNlcyI6WyJpbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZhdWx0IGFzIGNocm9tZWRyaXZlciB9IGZyb20gJy4vbGliL2Nocm9tZWRyaXZlcic7XG5pbXBvcnQgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCBmcm9tICcuL2xpYi9zdG9yYWdlLWNsaWVudCc7XG5cbmV4cG9ydCB7IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgfTtcbmV4cG9ydCBkZWZhdWx0IGNocm9tZWRyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7ZUFHZUEscUIifQ==
|
|
23
|
+
exports.default = _default;
|
|
24
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjaHJvbWVkcml2ZXIiXSwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZhdWx0IGFzIGNocm9tZWRyaXZlciB9IGZyb20gJy4vbGliL2Nocm9tZWRyaXZlcic7XG5pbXBvcnQgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCBmcm9tICcuL2xpYi9zdG9yYWdlLWNsaWVudCc7XG5cbmV4cG9ydCB7IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgfTtcbmV4cG9ydCBkZWZhdWx0IGNocm9tZWRyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7ZUFHZUEscUIifQ==
|
|
@@ -31,7 +31,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
31
31
|
|
|
32
32
|
var _path = _interopRequireDefault(require("path"));
|
|
33
33
|
|
|
34
|
-
var _compareVersions =
|
|
34
|
+
var _compareVersions = require("compare-versions");
|
|
35
35
|
|
|
36
36
|
var _storageClient = _interopRequireDefault(require("./storage-client"));
|
|
37
37
|
|
|
@@ -211,7 +211,7 @@ class Chromedriver extends _events.default.EventEmitter {
|
|
|
211
211
|
version,
|
|
212
212
|
minChromeVersion
|
|
213
213
|
};
|
|
214
|
-
})).filter(cd => !!cd).sort((a, b) => (0, _compareVersions.
|
|
214
|
+
})).filter(cd => !!cd).sort((a, b) => (0, _compareVersions.compareVersions)(b.version, a.version));
|
|
215
215
|
|
|
216
216
|
if (_lodash.default.isEmpty(cds)) {
|
|
217
217
|
this.log.info(`No Chromedrivers were found in '${this.executableDir}'`);
|
|
@@ -733,7 +733,5 @@ Chromedriver.STATE_ONLINE = 'online';
|
|
|
733
733
|
Chromedriver.STATE_STOPPING = 'stopping';
|
|
734
734
|
Chromedriver.STATE_RESTARTING = 'restarting';
|
|
735
735
|
var _default = Chromedriver;
|
|
736
|
-
exports.default = _default;
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2Nocm9tZWRyaXZlci5qcyIsIm5hbWVzIjpbIk5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OIiwiREVGQVVMVF9IT1NUIiwiTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCIsIkRFRkFVTFRfUE9SVCIsIkNIUk9NRV9CVU5ETEVfSUQiLCJXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCIsIldFQlZJRVdfQlVORExFX0lEUyIsIkNIUk9NRURSSVZFUl9UVVRPUklBTCIsIlZFUlNJT05fUEFUVEVSTiIsIkNEX1ZFUlNJT05fVElNRU9VVCIsIkNocm9tZWRyaXZlciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImhvc3QiLCJwb3J0IiwidXNlU3lzdGVtRXhlY3V0YWJsZSIsImV4ZWN1dGFibGUiLCJleGVjdXRhYmxlRGlyIiwiZ2V0Q2hyb21lZHJpdmVyRGlyIiwiYnVuZGxlSWQiLCJtYXBwaW5nUGF0aCIsImNtZEFyZ3MiLCJhZGIiLCJ2ZXJib3NlIiwibG9nUGF0aCIsImRpc2FibGVCdWlsZENoZWNrIiwiZGV0YWlscyIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIl9sb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJnZW5lcmF0ZUxvZ1ByZWZpeCIsInByb3h5SG9zdCIsInByb3h5UG9ydCIsInByb2MiLCJjaHJvbWVkcml2ZXIiLCJleGVjdXRhYmxlVmVyaWZpZWQiLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJqd3Byb3h5IiwiSldQcm94eSIsInNlcnZlciIsImxvZyIsInN0b3JhZ2VDbGllbnQiLCJDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IiwiY2hyb21lZHJpdmVyRGlyIiwiY2FwYWJpbGl0aWVzIiwiZGVzaXJlZFByb3RvY29sIiwiUFJPVE9DT0xTIiwiTUpTT05XUCIsImdldERyaXZlcnNNYXBwaW5nIiwibWFwcGluZyIsIl8iLCJjbG9uZURlZXAiLCJDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkciLCJkZWJ1ZyIsImZzIiwiZXhpc3RzIiwid2FybiIsImluZm8iLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZSIsImVyciIsIm1lc3NhZ2UiLCJjZFZlcnNpb24iLCJjaHJvbWVWZXJzaW9uIiwidG9QYWlycyIsImNvZXJjZWRWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwidmVyc2lvbiIsImdldENocm9tZWRyaXZlcnMiLCJleGVjdXRhYmxlcyIsImdsb2IiLCJjd2QiLCJzdHJpY3QiLCJub2RpciIsImFic29sdXRlIiwidXRpbCIsInBsdXJhbGl6ZSIsImxlbmd0aCIsImNkcyIsImFzeW5jbWFwIiwibG9nRXJyb3IiLCJzdGRvdXQiLCJzdGRlcnIiLCJlcnJNc2ciLCJwYXRoIiwiYmFzZW5hbWUiLCJleGVjIiwidGltZW91dCIsImluY2x1ZGVzIiwibWF0Y2giLCJtaW5DaHJvbWVWZXJzaW9uIiwibWFqb3IiLCJtaW5vciIsImZpbHRlciIsImNkIiwic29ydCIsImEiLCJiIiwiY29tcGFyZVZlcnNpb25zIiwiaXNFbXB0eSIsImdldENocm9tZVZlcnNpb24iLCJCcm93c2VyIiwidmVyc2lvbk1hdGNoIiwiYXBpTGV2ZWwiLCJnZXRBcGlMZXZlbCIsInVwZGF0ZURyaXZlcnNNYXBwaW5nIiwibmV3TWFwcGluZyIsInNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmciLCJ3cml0ZUZpbGUiLCJzdHJpbmdpZnkiLCJlIiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0Q29tcGF0aWJsZUNocm9tZWRyaXZlciIsImdldENocm9tZWRyaXZlckJpbmFyeVBhdGgiLCJ2YWx1ZXMiLCJkaWRTdG9yYWdlU3luYyIsInN5bmNDaHJvbWVkcml2ZXJzIiwicmV0cmlldmVkTWFwcGluZyIsInJldHJpZXZlTWFwcGluZyIsImRyaXZlcktleXMiLCJzeW5jRHJpdmVycyIsIm1pbkJyb3dzZXJWZXJzaW9uIiwic3luY2hyb25pemVkRHJpdmVyc01hcHBpbmciLCJyZWR1Y2UiLCJhY2MiLCJ4IiwibWlzc2luZ1ZlcnNpb25zIiwiY29lcmNlZFZlciIsInNpemUiLCJlcnJvckFuZFRocm93IiwibWF0Y2hpbmdEcml2ZXJzIiwibWluQ2hyb21lVmVyc2lvblMiLCJndGUiLCJDRF9DRE4iLCJzdGFjayIsImF1dG9kb3dubG9hZFN1Z2dlc3Rpb24iLCJFcnJvciIsImJpblBhdGgiLCJpbml0Q2hyb21lZHJpdmVyUGF0aCIsInN5bmNQcm90b2NvbCIsIlczQyIsImNocm9tZU9wdGlvbnMiLCJnZXRDYXBWYWx1ZSIsInczYyIsInRvVzNjQ2FwTmFtZXMiLCJzdGFydCIsImNhcHMiLCJlbWl0U3RhcnRpbmdTdGF0ZSIsImxvZ2dpbmdQcmVmcyIsImJyb3dzZXIiLCJjaGFuZ2VTdGF0ZSIsIlNUQVRFX1NUQVJUSU5HIiwiYWRiUG9ydCIsInB1c2giLCJpc0FycmF5Iiwic3RhcnREZXRlY3RvciIsInN0YXJ0c1dpdGgiLCJwcm9jZXNzSXNBbGl2ZSIsIndlYnZpZXdWZXJzaW9uIiwia2lsbEFsbCIsIlN1YlByb2Nlc3MiLCJvbiIsIm91dCIsImxpbmUiLCJ0cmltIiwic3BsaXQiLCJlcnJvciIsImNvZGUiLCJzaWduYWwiLCJTVEFURV9TVE9QUElORyIsIlNUQVRFX1JFU1RBUlRJTkciLCJtc2ciLCJqb2luIiwid2FpdEZvck9ubGluZSIsInN0YXJ0U2Vzc2lvbiIsImVtaXQiLCJFVkVOVF9FUlJPUiIsInN0b3AiLCJ2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyIiwic2Vzc2lvbklkIiwiU1RBVEVfT05MSU5FIiwicmVzdGFydCIsImNocm9tZWRyaXZlclN0b3BwZWQiLCJyZXRyeUludGVydmFsIiwiZ2V0U3RhdHVzIiwiY29tbWFuZCIsInNlc3Npb25DYXBzIiwiYWx3YXlzTWF0Y2giLCJkZXNpcmVkQ2FwYWJpbGl0aWVzIiwicHJlZml4IiwiZW1pdFN0YXRlcyIsInJ1blNhZmVTdGVwIiwiZiIsIkVWRU5UX0NIQU5HRUQiLCJzZW5kQ29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJwcm94eVJlcSIsInJlcSIsInJlcyIsInByb3h5UmVxUmVzIiwiY21kIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiQiIsInByb21pc2lmeSIsImNwIiwidWRpZEluZGV4IiwiZGVmYXVsdEFyZ3MiLCJmaW5kSW5kZXgiLCJpdGVtIiwidWRpZCIsImNvbm4iLCJnZXRGb3J3YXJkTGlzdCIsInBhcmFtcyIsInJlbW92ZVBvcnRGb3J3YXJkIiwicmVwbGFjZSIsImhhc1dvcmtpbmdXZWJ2aWV3Il0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2Nocm9tZWRyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBKV1Byb3h5LCBQUk9UT0NPTFMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBjcCBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN5c3RlbSwgZnMsIGxvZ2dlciwgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIGFzeW5jbWFwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgU3ViUHJvY2VzcywgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge1xuICBnZXRDaHJvbWVWZXJzaW9uLCBnZXRDaHJvbWVkcml2ZXJEaXIsIENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyxcbiAgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCwgQ0RfQ0ROLCBnZW5lcmF0ZUxvZ1ByZWZpeFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBjb21wYXJlVmVyc2lvbnMgZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCBmcm9tICcuL3N0b3JhZ2UtY2xpZW50JztcbmltcG9ydCB7IHRvVzNjQ2FwTmFtZXMsIGdldENhcFZhbHVlIH0gZnJvbSAnLi9wcm90b2NvbC1oZWxwZXJzJztcblxuY29uc3QgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04gPSA3MztcbmNvbnN0IERFRkFVTFRfSE9TVCA9ICcxMjcuMC4wLjEnO1xuY29uc3QgTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCA9IDc1O1xuY29uc3QgREVGQVVMVF9QT1JUID0gOTUxNTtcbmNvbnN0IENIUk9NRV9CVU5ETEVfSUQgPSAnY29tLmFuZHJvaWQuY2hyb21lJztcbmNvbnN0IFdFQlZJRVdfU0hFTExfQlVORExFX0lEID0gJ29yZy5jaHJvbWl1bS53ZWJ2aWV3X3NoZWxsJztcbmNvbnN0IFdFQlZJRVdfQlVORExFX0lEUyA9IFtcbiAgJ2NvbS5nb29nbGUuYW5kcm9pZC53ZWJ2aWV3JyxcbiAgJ2NvbS5hbmRyb2lkLndlYnZpZXcnLFxuXTtcbmNvbnN0IENIUk9NRURSSVZFUl9UVVRPUklBTCA9ICdodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9ibG9iL21hc3Rlci9kb2NzL2VuL3dyaXRpbmctcnVubmluZy1hcHBpdW0vd2ViL2Nocm9tZWRyaXZlci5tZCc7XG5jb25zdCBWRVJTSU9OX1BBVFRFUk4gPSAvKFtcXGQuXSspLztcblxuY29uc3QgQ0RfVkVSU0lPTl9USU1FT1VUID0gNTAwMDtcblxuY2xhc3MgQ2hyb21lZHJpdmVyIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChhcmdzID0ge30pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgY29uc3Qge1xuICAgICAgaG9zdCA9IERFRkFVTFRfSE9TVCxcbiAgICAgIHBvcnQgPSBERUZBVUxUX1BPUlQsXG4gICAgICB1c2VTeXN0ZW1FeGVjdXRhYmxlID0gZmFsc2UsXG4gICAgICBleGVjdXRhYmxlLFxuICAgICAgZXhlY3V0YWJsZURpciA9IGdldENocm9tZWRyaXZlckRpcigpLFxuICAgICAgYnVuZGxlSWQsXG4gICAgICBtYXBwaW5nUGF0aCxcbiAgICAgIGNtZEFyZ3MsXG4gICAgICBhZGIsXG4gICAgICB2ZXJib3NlLFxuICAgICAgbG9nUGF0aCxcbiAgICAgIGRpc2FibGVCdWlsZENoZWNrLFxuICAgICAgZGV0YWlscyxcbiAgICAgIGlzQXV0b2Rvd25sb2FkRW5hYmxlZCA9IGZhbHNlLFxuICAgIH0gPSBhcmdzO1xuICAgIHRoaXMuX2xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoZ2VuZXJhdGVMb2dQcmVmaXgodGhpcykpO1xuXG4gICAgdGhpcy5wcm94eUhvc3QgPSBob3N0O1xuICAgIHRoaXMucHJveHlQb3J0ID0gcG9ydDtcbiAgICB0aGlzLmFkYiA9IGFkYjtcbiAgICB0aGlzLmNtZEFyZ3MgPSBjbWRBcmdzO1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gICAgdGhpcy51c2VTeXN0ZW1FeGVjdXRhYmxlID0gdXNlU3lzdGVtRXhlY3V0YWJsZTtcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IGV4ZWN1dGFibGU7XG4gICAgdGhpcy5leGVjdXRhYmxlRGlyID0gZXhlY3V0YWJsZURpcjtcbiAgICB0aGlzLm1hcHBpbmdQYXRoID0gbWFwcGluZ1BhdGg7XG4gICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgIHRoaXMuZXhlY3V0YWJsZVZlcmlmaWVkID0gZmFsc2U7XG4gICAgdGhpcy5zdGF0ZSA9IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEO1xuICAgIHRoaXMuandwcm94eSA9IG5ldyBKV1Byb3h5KHtcbiAgICAgIHNlcnZlcjogdGhpcy5wcm94eUhvc3QsXG4gICAgICBwb3J0OiB0aGlzLnByb3h5UG9ydCxcbiAgICAgIGxvZzogdGhpcy5fbG9nLFxuICAgIH0pO1xuICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2U7XG4gICAgdGhpcy5sb2dQYXRoID0gbG9nUGF0aDtcbiAgICB0aGlzLmRpc2FibGVCdWlsZENoZWNrID0gISFkaXNhYmxlQnVpbGRDaGVjaztcbiAgICB0aGlzLnN0b3JhZ2VDbGllbnQgPSBpc0F1dG9kb3dubG9hZEVuYWJsZWRcbiAgICAgID8gbmV3IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQoeyBjaHJvbWVkcml2ZXJEaXI6IHRoaXMuZXhlY3V0YWJsZURpciB9KVxuICAgICAgOiBudWxsO1xuICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB7fTtcbiAgICB0aGlzLmRlc2lyZWRQcm90b2NvbCA9IFBST1RPQ09MUy5NSlNPTldQO1xuICB9XG5cbiAgZ2V0IGxvZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZztcbiAgfVxuXG4gIGFzeW5jIGdldERyaXZlcnNNYXBwaW5nICgpIHtcbiAgICBsZXQgbWFwcGluZyA9IF8uY2xvbmVEZWVwKENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyk7XG4gICAgaWYgKHRoaXMubWFwcGluZ1BhdGgpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBBdHRlbXB0aW5nIHRvIHVzZSBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nIGZyb20gJyR7dGhpcy5tYXBwaW5nUGF0aH0nYCk7XG4gICAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyh0aGlzLm1hcHBpbmdQYXRoKSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBObyBmaWxlIGZvdW5kIGF0ICcke3RoaXMubWFwcGluZ1BhdGh9J2ApO1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdEZWZhdWx0aW5nIHRvIHRoZSBzdGF0aWMgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtYXBwaW5nID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLm1hcHBpbmdQYXRoLCAndXRmOCcpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgRXJyb3IgcGFyc2luZyBtYXBwaW5nIGZyb20gJyR7dGhpcy5tYXBwaW5nUGF0aH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oJ0RlZmF1bHRpbmcgdG8gdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1VzaW5nIHRoZSBzdGF0aWMgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZycpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSB2YWx1ZXMgZm9yIG1pbmltdW0gY2hyb21lIHZlcnNpb24gYXJlIHNlbXZlciBjb21wbGlhbnRcbiAgICBmb3IgKGNvbnN0IFtjZFZlcnNpb24sIGNocm9tZVZlcnNpb25dIG9mIF8udG9QYWlycyhtYXBwaW5nKSkge1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKGNocm9tZVZlcnNpb24pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIG1hcHBpbmdbY2RWZXJzaW9uXSA9IGNvZXJjZWRWZXJzaW9uLnZlcnNpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGAnJHtjaHJvbWVWZXJzaW9ufScgaXMgbm90IGEgdmFsaWQgdmVyc2lvbiBudW1iZXIuIFNraXBwaW5nIGl0YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXBwaW5nO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2hyb21lZHJpdmVycyAobWFwcGluZykge1xuICAgIC8vIGdvIHRocm91Z2ggdGhlIHZlcnNpb25zIGF2YWlsYWJsZVxuICAgIGNvbnN0IGV4ZWN1dGFibGVzID0gYXdhaXQgZnMuZ2xvYignKicsIHtcbiAgICAgIGN3ZDogdGhpcy5leGVjdXRhYmxlRGlyLFxuICAgICAgc3RyaWN0OiBmYWxzZSxcbiAgICAgIG5vZGlyOiB0cnVlLFxuICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kICR7dXRpbC5wbHVyYWxpemUoJ2V4ZWN1dGFibGUnLCBleGVjdXRhYmxlcy5sZW5ndGgsIHRydWUpfSBgICtcbiAgICAgIGBpbiAnJHt0aGlzLmV4ZWN1dGFibGVEaXJ9J2ApO1xuICAgIGNvbnN0IGNkcyA9IChhd2FpdCBhc3luY21hcChleGVjdXRhYmxlcywgYXN5bmMgKGV4ZWN1dGFibGUpID0+IHtcbiAgICAgIGNvbnN0IGxvZ0Vycm9yID0gKHttZXNzYWdlLCBzdGRvdXQgPSBudWxsLCBzdGRlcnIgPSBudWxsfSkgPT4ge1xuICAgICAgICBsZXQgZXJyTXNnID0gYENhbm5vdCByZXRyaWV2ZSB2ZXJzaW9uIG51bWJlciBmcm9tICcke3BhdGguYmFzZW5hbWUoZXhlY3V0YWJsZSl9JyBDaHJvbWVkcml2ZXIgYmluYXJ5LiBgICtcbiAgICAgICAgICBgTWFrZSBzdXJlIGl0IHJldHVybnMgYSB2YWxpZCB2ZXJzaW9uIHN0cmluZyBpbiByZXNwb25zZSB0byAnLS12ZXJzaW9uJyBjb21tYW5kIGxpbmUgYXJndW1lbnQuICR7bWVzc2FnZX1gO1xuICAgICAgICBpZiAoc3Rkb3V0KSB7XG4gICAgICAgICAgZXJyTXNnICs9IGBcXG5TdGRvdXQ6ICR7c3Rkb3V0fWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZGVycikge1xuICAgICAgICAgIGVyck1zZyArPSBgXFxuU3RkZXJyOiAke3N0ZGVycn1gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nLndhcm4oZXJyTXNnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBsZXQgc3Rkb3V0O1xuICAgICAgbGV0IHN0ZGVycjtcbiAgICAgIHRyeSB7XG4gICAgICAgICh7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgZXhlYyhleGVjdXRhYmxlLCBbJy0tdmVyc2lvbiddLCB7XG4gICAgICAgICAgdGltZW91dDogQ0RfVkVSU0lPTl9USU1FT1VULFxuICAgICAgICB9KSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCEoZXJyLm1lc3NhZ2UgfHwgJycpLmluY2x1ZGVzKCd0aW1lZCBvdXQnKSAmJiAhKGVyci5zdGRvdXQgfHwgJycpLmluY2x1ZGVzKCdTdGFydGluZyBDaHJvbWVEcml2ZXInKSkge1xuICAgICAgICAgIHJldHVybiBsb2dFcnJvcihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyBoYXMgdGltZWQgb3V0LCBpdCBoYXMgYWN0dWFsbHkgc3RhcnRlZCBDaHJvbWVkcml2ZXIsXG4gICAgICAgIC8vIGluIHdoaWNoIGNhc2UgdGhlcmUgd2lsbCBhbHNvIGJlIHRoZSB2ZXJzaW9uIHN0cmluZyBpbiB0aGUgb3V0cHV0XG4gICAgICAgIHN0ZG91dCA9IGVyci5zdGRvdXQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdGNoID0gL0Nocm9tZURyaXZlclxccytcXCg/dj8oW1xcZC5dKylcXCk/L2kuZXhlYyhzdGRvdXQpOyAvLyBodHRwczovL3JlZ2V4MTAxLmNvbS9yL3pwajV3QS8xXG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiBsb2dFcnJvcih7bWVzc2FnZTogJ0Nhbm5vdCBwYXJzZSB0aGUgdmVyc2lvbiBzdHJpbmcnLCBzdGRvdXQsIHN0ZGVycn0pO1xuICAgICAgfVxuICAgICAgbGV0IHZlcnNpb24gPSBtYXRjaFsxXTtcbiAgICAgIGxldCBtaW5DaHJvbWVWZXJzaW9uID0gbWFwcGluZ1t2ZXJzaW9uXTtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uKTtcbiAgICAgIGlmIChjb2VyY2VkVmVyc2lvbikge1xuICAgICAgICAvLyBiZWZvcmUgMjAxOS0wMy0wNiB2ZXJzaW9ucyB3ZXJlIG9mIHRoZSBmb3JtIG1ham9yLm1pbm9yXG4gICAgICAgIGlmIChjb2VyY2VkVmVyc2lvbi5tYWpvciA8IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OKSB7XG4gICAgICAgICAgdmVyc2lvbiA9IGAke2NvZXJjZWRWZXJzaW9uLm1ham9yfS4ke2NvZXJjZWRWZXJzaW9uLm1pbm9yfWA7XG4gICAgICAgICAgbWluQ2hyb21lVmVyc2lvbiA9IG1hcHBpbmdbdmVyc2lvbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uICYmIGNvZXJjZWRWZXJzaW9uLm1ham9yID49IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OKSB7XG4gICAgICAgICAgLy8gQXNzdW1lIHRoZSBtYWpvciBDaHJvbWUgdmVyc2lvbiBpcyB0aGUgc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBkcml2ZXIgbWFqb3IgdmVyc2lvblxuICAgICAgICAgIG1pbkNocm9tZVZlcnNpb24gPSBgJHtjb2VyY2VkVmVyc2lvbi5tYWpvcn1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleGVjdXRhYmxlLFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBtaW5DaHJvbWVWZXJzaW9uLFxuICAgICAgfTtcbiAgICB9KSlcbiAgICAgIC5maWx0ZXIoKGNkKSA9PiAhIWNkKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGNvbXBhcmVWZXJzaW9ucyhiLnZlcnNpb24sIGEudmVyc2lvbikpO1xuICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgTm8gQ2hyb21lZHJpdmVycyB3ZXJlIGZvdW5kIGluICcke3RoaXMuZXhlY3V0YWJsZURpcn0nYCk7XG4gICAgICByZXR1cm4gY2RzO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIGZvbGxvd2luZyBDaHJvbWVkcml2ZXIgZXhlY3V0YWJsZXMgd2VyZSBmb3VuZDpgKTtcbiAgICBmb3IgKGNvbnN0IGNkIG9mIGNkcykge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYCAgICAnJHtjZC5leGVjdXRhYmxlfScgKHZlcnNpb24gJyR7Y2QudmVyc2lvbn0nLCBtaW5pbXVtIENocm9tZSB2ZXJzaW9uICcke2NkLm1pbkNocm9tZVZlcnNpb24gPyBjZC5taW5DaHJvbWVWZXJzaW9uIDogJ1Vua25vd24nfScpYCk7XG4gICAgfVxuICAgIHJldHVybiBjZHM7XG4gIH1cblxuICBhc3luYyBnZXRDaHJvbWVWZXJzaW9uICgpIHtcbiAgICAvLyBUcnkgdG8gcmV0cmlldmUgdGhlIHZlcnNpb24gZnJvbSBgZGV0YWlsc2AgcHJvcGVydHkgaWYgaXQgaXMgc2V0XG4gICAgLy8gVGhlIGBpbmZvYCBpdGVtIG11c3QgY29udGFpbiB0aGUgb3V0cHV0IG9mIC9qc29uL3ZlcnNpb24gQ0RQIGNvbW1hbmRcbiAgICAvLyB3aGVyZSBgQnJvd3NlcmAgZmllbGQgbG9va3MgbGlrZSBgQ2hyb21lLzcyLjAuMzYwMS4wYGBcbiAgICBpZiAodGhpcy5kZXRhaWxzPy5pbmZvKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQnJvd3NlciB2ZXJzaW9uIGluIHRoZSBzdXBwbGllZCBkZXRhaWxzOiAke3RoaXMuZGV0YWlscz8uaW5mbz8uQnJvd3Nlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgdmVyc2lvbk1hdGNoID0gVkVSU0lPTl9QQVRURVJOLmV4ZWModGhpcy5kZXRhaWxzPy5pbmZvPy5Ccm93c2VyKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UodmVyc2lvbk1hdGNoWzFdKTtcbiAgICAgIGlmIChjb2VyY2VkVmVyc2lvbikge1xuICAgICAgICByZXR1cm4gY29lcmNlZFZlcnNpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNocm9tZVZlcnNpb247XG5cbiAgICAvLyBpbiBjYXNlIG9mIFdlYlZpZXcgQnJvd3NlciBUZXN0ZXIsIHNpbXBseSB0cnkgdG8gZmluZCB0aGUgdW5kZXJseWluZyB3ZWJ2aWV3XG4gICAgaWYgKHRoaXMuYnVuZGxlSWQgPT09IFdFQlZJRVdfU0hFTExfQlVORExFX0lEKSB7XG4gICAgICBmb3IgKGNvbnN0IGJ1bmRsZUlkIG9mIFdFQlZJRVdfQlVORExFX0lEUykge1xuICAgICAgICBjaHJvbWVWZXJzaW9uID0gYXdhaXQgZ2V0Q2hyb21lVmVyc2lvbih0aGlzLmFkYiwgYnVuZGxlSWQpO1xuICAgICAgICBpZiAoY2hyb21lVmVyc2lvbikge1xuICAgICAgICAgIHRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDtcbiAgICAgICAgICByZXR1cm4gc2VtdmVyLmNvZXJjZShjaHJvbWVWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gb24gQW5kcm9pZCA3LTkgd2Vidmlld3MgYXJlIGJhY2tlZCBieSB0aGUgbWFpbiBDaHJvbWUsIG5vdCB0aGUgc3lzdGVtIHdlYnZpZXdcbiAgICBpZiAodGhpcy5hZGIpIHtcbiAgICAgIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgICAgIGlmIChhcGlMZXZlbCA+PSAyNCAmJiBhcGlMZXZlbCA8PSAyOCAmJlxuICAgICAgICAgIFtXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCwgLi4uV0VCVklFV19CVU5ETEVfSURTXS5pbmNsdWRlcyh0aGlzLmJ1bmRsZUlkKSkge1xuICAgICAgICB0aGlzLmJ1bmRsZUlkID0gQ0hST01FX0JVTkRMRV9JRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0cnkgb3V0IHdlYnZpZXdzIHdoZW4gbm8gYnVuZGxlIGlkIGlzIHNlbnQgaW5cbiAgICBpZiAoIXRoaXMuYnVuZGxlSWQpIHtcbiAgICAgIC8vIGRlZmF1bHQgdG8gdGhlIGdlbmVyaWMgQ2hyb21lIGJ1bmRsZVxuICAgICAgdGhpcy5idW5kbGVJZCA9IENIUk9NRV9CVU5ETEVfSUQ7XG5cbiAgICAgIC8vIHdlIGhhdmUgYSB3ZWJ2aWV3IG9mIHNvbWUgc29ydCwgc28gdHJ5IHRvIGZpbmQgdGhlIGJ1bmRsZSB2ZXJzaW9uXG4gICAgICBmb3IgKGNvbnN0IGJ1bmRsZUlkIG9mIFdFQlZJRVdfQlVORExFX0lEUykge1xuICAgICAgICBjaHJvbWVWZXJzaW9uID0gYXdhaXQgZ2V0Q2hyb21lVmVyc2lvbih0aGlzLmFkYiwgYnVuZGxlSWQpO1xuICAgICAgICBpZiAoY2hyb21lVmVyc2lvbikge1xuICAgICAgICAgIHRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHdlIGRvIG5vdCBoYXZlIGEgY2hyb21lIHZlcnNpb24sIGl0IG11c3Qgbm90IGJlIGEgd2Vidmlld1xuICAgIGlmICghY2hyb21lVmVyc2lvbikge1xuICAgICAgY2hyb21lVmVyc2lvbiA9IGF3YWl0IGdldENocm9tZVZlcnNpb24odGhpcy5hZGIsIHRoaXMuYnVuZGxlSWQpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyBzZW12ZXIsIHNvIGxhdGVyIGNoZWNrcyB3b24ndCBmYWlsXG4gICAgcmV0dXJuIGNocm9tZVZlcnNpb24gPyBzZW12ZXIuY29lcmNlKGNocm9tZVZlcnNpb24pIDogbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURyaXZlcnNNYXBwaW5nIChuZXdNYXBwaW5nKSB7XG4gICAgbGV0IHNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmcgPSB0cnVlO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHModGhpcy5tYXBwaW5nUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLm1hcHBpbmdQYXRoLCBKU09OLnN0cmluZ2lmeShuZXdNYXBwaW5nLCBudWxsLCAyKSwgJ3V0ZjgnKTtcbiAgICAgICAgc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZyA9IGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3Qgc3RvcmUgdGhlIHVwZGF0ZWQgY2hyb21lZHJpdmVycyBtYXBwaW5nIGludG8gJyR7dGhpcy5tYXBwaW5nUGF0aH0nLiBgICtcbiAgICAgICAgICBgVGhpcyBtYXkgcmVkdWNlIHRoZSBwZXJmb3JtYW5jZSBvZiBmdXJ0aGVyIGV4ZWN1dGlvbnMuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmcpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HLCBuZXdNYXBwaW5nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyICgpIHtcbiAgICBpZiAoIXRoaXMuYWRiKSB7XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmcgPSBhd2FpdCB0aGlzLmdldERyaXZlcnNNYXBwaW5nKCk7XG4gICAgaWYgKCFfLmlzRW1wdHkobWFwcGluZykpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgbW9zdCByZWNlbnQga25vd24gQ2hyb21lIHZlcnNpb246ICR7Xy52YWx1ZXMobWFwcGluZylbMF19YCk7XG4gICAgfVxuXG4gICAgbGV0IGRpZFN0b3JhZ2VTeW5jID0gZmFsc2U7XG4gICAgY29uc3Qgc3luY0Nocm9tZWRyaXZlcnMgPSBhc3luYyAoY2hyb21lVmVyc2lvbikgPT4ge1xuICAgICAgZGlkU3RvcmFnZVN5bmMgPSB0cnVlO1xuICAgICAgY29uc3QgcmV0cmlldmVkTWFwcGluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZUNsaWVudC5yZXRyaWV2ZU1hcHBpbmcoKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdHb3QgY2hyb21lZHJpdmVycyBtYXBwaW5nIGZyb20gdGhlIHN0b3JhZ2U6ICcgK1xuICAgICAgICBKU09OLnN0cmluZ2lmeShyZXRyaWV2ZWRNYXBwaW5nLCBudWxsLCAyKSk7XG4gICAgICBjb25zdCBkcml2ZXJLZXlzID0gYXdhaXQgdGhpcy5zdG9yYWdlQ2xpZW50LnN5bmNEcml2ZXJzKHtcbiAgICAgICAgbWluQnJvd3NlclZlcnNpb246IGNocm9tZVZlcnNpb24ubWFqb3IsXG4gICAgICB9KTtcbiAgICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyS2V5cykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3luY2hyb25pemVkRHJpdmVyc01hcHBpbmcgPSBkcml2ZXJLZXlzLnJlZHVjZSgoYWNjLCB4KSA9PiB7XG4gICAgICAgIGNvbnN0IHt2ZXJzaW9uLCBtaW5Ccm93c2VyVmVyc2lvbn0gPSByZXRyaWV2ZWRNYXBwaW5nW3hdO1xuICAgICAgICBhY2NbdmVyc2lvbl0gPSBtaW5Ccm93c2VyVmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcbiAgICAgIE9iamVjdC5hc3NpZ24obWFwcGluZywgc3luY2hyb25pemVkRHJpdmVyc01hcHBpbmcpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVEcml2ZXJzTWFwcGluZyhtYXBwaW5nKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBkbyB7XG4gICAgICBjb25zdCBjZHMgPSBhd2FpdCB0aGlzLmdldENocm9tZWRyaXZlcnMobWFwcGluZyk7XG5cbiAgICAgIGNvbnN0IG1pc3NpbmdWZXJzaW9ucyA9IHt9O1xuICAgICAgZm9yIChjb25zdCB7dmVyc2lvbiwgbWluQ2hyb21lVmVyc2lvbn0gb2YgY2RzKSB7XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvbiB8fCBtYXBwaW5nW3ZlcnNpb25dKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29lcmNlZFZlciA9IHNlbXZlci5jb2VyY2UodmVyc2lvbik7XG4gICAgICAgIGlmICghY29lcmNlZFZlciB8fCBjb2VyY2VkVmVyLm1ham9yIDwgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1pc3NpbmdWZXJzaW9uc1t2ZXJzaW9uXSA9IG1pbkNocm9tZVZlcnNpb247XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNFbXB0eShtaXNzaW5nVmVyc2lvbnMpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYEZvdW5kICR7dXRpbC5wbHVyYWxpemUoJ0Nocm9tZWRyaXZlcicsIF8uc2l6ZShtaXNzaW5nVmVyc2lvbnMpLCB0cnVlKX0sIGAgK1xuICAgICAgICAgIGB3aGljaCAke18uc2l6ZShtaXNzaW5nVmVyc2lvbnMpID09PSAxID8gJ2lzJyA6ICdhcmUnfSBtaXNzaW5nIGluIHRoZSBsaXN0IG9mIGtub3duIHZlcnNpb25zOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtaXNzaW5nVmVyc2lvbnMpKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVEcml2ZXJzTWFwcGluZyhPYmplY3QuYXNzaWduKG1hcHBpbmcsIG1pc3NpbmdWZXJzaW9ucykpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlQnVpbGRDaGVjaykge1xuICAgICAgICBpZiAoXy5pc0VtcHR5KGNkcykpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBDaHJvbWVkcml2ZXIgZXhlY3V0YWJsZSBhdmFpbGFibGUgZm9yIHVzZSBpZiBgICtcbiAgICAgICAgICAgIGAnY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2snIGNhcGFiaWxpdHkgaXMgc2V0IHRvICd0cnVlJ2ApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHt2ZXJzaW9uLCBleGVjdXRhYmxlfSA9IGNkc1swXTtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2hyb21lIGJ1aWxkIGNoZWNrIGRpc2FibGVkLiBVc2luZyBtb3N0IHJlY2VudCBDaHJvbWVkcml2ZXIgdmVyc2lvbiAoJHt2ZXJzaW9ufSwgYXQgJyR7ZXhlY3V0YWJsZX0nKWApO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBJZiB0aGlzIGlzIHdyb25nLCBzZXQgJ2Nocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrJyBjYXBhYmlsaXR5IHRvICdmYWxzZSdgKTtcbiAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNocm9tZVZlcnNpb24gPSBhd2FpdCB0aGlzLmdldENocm9tZVZlcnNpb24oKTtcbiAgICAgIGlmICghY2hyb21lVmVyc2lvbikge1xuICAgICAgICAvLyB1bmFibGUgdG8gZ2V0IHRoZSBjaHJvbWUgdmVyc2lvblxuICAgICAgICBpZiAoXy5pc0VtcHR5KGNkcykpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBDaHJvbWVkcml2ZXIgZXhlY3V0YWJsZSBhdmFpbGFibGUgZm9yIHVzZSBpZiBgICtcbiAgICAgICAgICAgIGB0aGUgY3VycmVudCBDaHJvbWUgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHt2ZXJzaW9uLCBleGVjdXRhYmxlfSA9IGNkc1swXTtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGRpc2NvdmVyIENocm9tZSB2ZXJzaW9uLiBVc2luZyBDaHJvbWVkcml2ZXIgJHt2ZXJzaW9ufSBhdCAnJHtleGVjdXRhYmxlfSdgKTtcbiAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgQ2hyb21lIGJ1bmRsZSAnJHt0aGlzLmJ1bmRsZUlkfScgdmVyc2lvbiAnJHtjaHJvbWVWZXJzaW9ufSdgKTtcblxuICAgICAgY29uc3QgbWF0Y2hpbmdEcml2ZXJzID0gY2RzLmZpbHRlcigoe21pbkNocm9tZVZlcnNpb259KSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbkNocm9tZVZlcnNpb25TID0gbWluQ2hyb21lVmVyc2lvbiAmJiBzZW12ZXIuY29lcmNlKG1pbkNocm9tZVZlcnNpb24pO1xuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb25TKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNocm9tZVZlcnNpb24ubWFqb3IgPiBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTlxuICAgICAgICAgID8gbWluQ2hyb21lVmVyc2lvblMubWFqb3IgPT09IGNocm9tZVZlcnNpb24ubWFqb3JcbiAgICAgICAgICA6IHNlbXZlci5ndGUoY2hyb21lVmVyc2lvbiwgbWluQ2hyb21lVmVyc2lvblMpO1xuICAgICAgfSk7XG4gICAgICBpZiAoXy5pc0VtcHR5KG1hdGNoaW5nRHJpdmVycykpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmFnZUNsaWVudCAmJiAhZGlkU3RvcmFnZVN5bmMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHN5bmNDaHJvbWVkcml2ZXJzKGNocm9tZVZlcnNpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBzeW5jaHJvbml6ZSBsb2NhbCBjaHJvbWVkcml2ZXJzIHdpdGggdGhlIHJlbW90ZSBzdG9yYWdlIGF0ICR7Q0RfQ0ROfTogYCArXG4gICAgICAgICAgICAgIGUubWVzc2FnZSk7XG4gICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhlLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXV0b2Rvd25sb2FkU3VnZ2VzdGlvbiA9XG4gICAgICAgICAgJ1lvdSBjb3VsZCBhbHNvIHRyeSB0byBlbmFibGUgYXV0b21hdGVkIGNocm9tZWRyaXZlcnMgZG93bmxvYWQgc2VydmVyIGZlYXR1cmUnO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENocm9tZWRyaXZlciBmb3VuZCB0aGF0IGNhbiBhdXRvbWF0ZSBDaHJvbWUgJyR7Y2hyb21lVmVyc2lvbn0nLiBgICtcbiAgICAgICAgICAoIXRoaXMuc3RvcmFnZUNsaWVudCA/IGAke2F1dG9kb3dubG9hZFN1Z2dlc3Rpb259LiBgIDogJycpICtcbiAgICAgICAgICBgU2VlICR7Q0hST01FRFJJVkVSX1RVVE9SSUFMfSBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJpblBhdGggPSBtYXRjaGluZ0RyaXZlcnNbMF0uZXhlY3V0YWJsZTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdleGVjdXRhYmxlJywgbWF0Y2hpbmdEcml2ZXJzLmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgICAgICBgY2FwYWJsZSBvZiBhdXRvbWF0aW5nIENocm9tZSAnJHtjaHJvbWVWZXJzaW9ufScuXFxuQ2hvb3NpbmcgdGhlIG1vc3QgcmVjZW50LCAnJHtiaW5QYXRofScuYCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnSWYgYSBzcGVjaWZpYyB2ZXJzaW9uIGlzIHJlcXVpcmVkLCBzcGVjaWZ5IGl0IHdpdGggdGhlIGBjaHJvbWVkcml2ZXJFeGVjdXRhYmxlYCcgK1xuICAgICAgICAnZGVzaXJlZCBjYXBhYmlsaXR5LicpO1xuICAgICAgcmV0dXJuIGJpblBhdGg7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgIH0gd2hpbGUgKHRydWUpO1xuICB9XG5cbiAgYXN5bmMgaW5pdENocm9tZWRyaXZlclBhdGggKCkge1xuICAgIGlmICh0aGlzLmV4ZWN1dGFibGVWZXJpZmllZCkgcmV0dXJuOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIC8vIHRoZSBleGVjdXRhYmxlIG1pZ2h0IGJlIHNldCAoaWYgcGFzc2VkIGluKVxuICAgIC8vIG9yIHdlIG1pZ2h0IHdhbnQgdG8gdXNlIHRoZSBiYXNpYyBvbmUgaW5zdGFsbGVkIHdpdGggdGhpcyBkcml2ZXJcbiAgICAvLyBvciB3ZSB3YW50IHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgb25lXG4gICAgaWYgKCF0aGlzLmNocm9tZWRyaXZlcikge1xuICAgICAgdGhpcy5jaHJvbWVkcml2ZXIgPSB0aGlzLnVzZVN5c3RlbUV4ZWN1dGFibGVcbiAgICAgICAgPyBhd2FpdCBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoKClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyh0aGlzLmNocm9tZWRyaXZlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIHVzZSBhIGNocm9tZWRyaXZlciBiaW5hcnkgYXQgdGhlIHBhdGggYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jaHJvbWVkcml2ZXJ9LCBidXQgaXQgZG9lc24ndCBleGlzdCFgKTtcbiAgICB9XG4gICAgdGhpcy5leGVjdXRhYmxlVmVyaWZpZWQgPSB0cnVlO1xuICAgIHRoaXMubG9nLmluZm8oYFNldCBjaHJvbWVkcml2ZXIgYmluYXJ5IGFzOiAke3RoaXMuY2hyb21lZHJpdmVyfWApO1xuICB9XG5cbiAgc3luY1Byb3RvY29sIChjZFZlcnNpb24gPSBudWxsKSB7XG4gICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKGNkVmVyc2lvbik7XG4gICAgaWYgKCFjb2VyY2VkVmVyc2lvbiB8fCBjb2VyY2VkVmVyc2lvbi5tYWpvciA8IE1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDaHJvbWVkcml2ZXIgdi4gJHtjZFZlcnNpb259IGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgJHtQUk9UT0NPTFMuVzNDfSBwcm90b2NvbC4gYCArXG4gICAgICAgIGBEZWZhdWx0aW5nIHRvICR7UFJPVE9DT0xTLk1KU09OV1B9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNocm9tZU9wdGlvbnMgPSBnZXRDYXBWYWx1ZSh0aGlzLmNhcGFiaWxpdGllcywgJ2Nocm9tZU9wdGlvbnMnLCB7fSk7XG4gICAgaWYgKGNocm9tZU9wdGlvbnMudzNjID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgQ2hyb21lZHJpdmVyIHYuICR7Y2RWZXJzaW9ufSBzdXBwb3J0cyAke1BST1RPQ09MUy5XM0N9IHByb3RvY29sLCBgICtcbiAgICAgICAgYGJ1dCAke1BST1RPQ09MUy5NSlNPTldQfSBvbmUgaGFzIGJlZW4gZXhwbGljaXRseSByZXF1ZXN0ZWRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZXNpcmVkUHJvdG9jb2wgPSBQUk9UT0NPTFMuVzNDO1xuICAgIC8vIGdpdmVuIGNhcHMgbWlnaHQgbm90IGJlIHByb3Blcmx5IHByZWZpeGVkXG4gICAgLy8gc28gd2UgdHJ5IHRvIGZpeCB0aGVtIGluIG9yZGVyIHRvIHByb3Blcmx5IGluaXRcbiAgICAvLyB0aGUgbmV3IFczQyBzZXNzaW9uXG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0b1czY0NhcE5hbWVzKHRoaXMuY2FwYWJpbGl0aWVzKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChjYXBzLCBlbWl0U3RhcnRpbmdTdGF0ZSA9IHRydWUpIHtcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKGNhcHMpO1xuXG4gICAgLy8gc2V0IHRoZSBsb2dnaW5nIHByZWZlcmVuY2VzIHRvIEFMTCB0aGUgY29uc29sZSBsb2dzXG4gICAgdGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzID0gXy5jbG9uZURlZXAoZ2V0Q2FwVmFsdWUoY2FwcywgJ2xvZ2dpbmdQcmVmcycsIHt9KSk7XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMuYnJvd3NlcikpIHtcbiAgICAgIHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcy5icm93c2VyID0gJ0FMTCc7XG4gICAgfVxuXG4gICAgaWYgKGVtaXRTdGFydGluZ1N0YXRlKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVEFSVElORyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IFtgLS1wb3J0PSR7dGhpcy5wcm94eVBvcnR9YF07XG4gICAgaWYgKHRoaXMuYWRiICYmIHRoaXMuYWRiLmFkYlBvcnQpIHtcbiAgICAgIGFyZ3MucHVzaChgLS1hZGItcG9ydD0ke3RoaXMuYWRiLmFkYlBvcnR9YCk7XG4gICAgfVxuICAgIGlmIChfLmlzQXJyYXkodGhpcy5jbWRBcmdzKSkge1xuICAgICAgYXJncy5wdXNoKC4uLnRoaXMuY21kQXJncyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvZ1BhdGgpIHtcbiAgICAgIGFyZ3MucHVzaChgLS1sb2ctcGF0aD0ke3RoaXMubG9nUGF0aH1gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2spIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1kaXNhYmxlLWJ1aWxkLWNoZWNrJyk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLS12ZXJib3NlJyk7XG4gICAgLy8gd2hhdCBhcmUgdGhlIHByb2Nlc3Mgc3Rkb3V0L3N0ZGVyciBjb25kaXRpb25zIHdoZXJlaW4gd2Uga25vdyB0aGF0XG4gICAgLy8gdGhlIHByb2Nlc3MgaGFzIHN0YXJ0ZWQgdG8gb3VyIHNhdGlzZmFjdGlvbj9cbiAgICBjb25zdCBzdGFydERldGVjdG9yID0gKHN0ZG91dCkgPT4gc3Rkb3V0LnN0YXJ0c1dpdGgoJ1N0YXJ0aW5nICcpO1xuXG4gICAgbGV0IHByb2Nlc3NJc0FsaXZlID0gZmFsc2U7XG4gICAgbGV0IHdlYnZpZXdWZXJzaW9uO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRDaHJvbWVkcml2ZXJQYXRoKCk7XG4gICAgICBhd2FpdCB0aGlzLmtpbGxBbGwoKTtcblxuICAgICAgLy8gc2V0IHVwIG91ciBzdWJwcm9jZXNzIG9iamVjdFxuICAgICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3ModGhpcy5jaHJvbWVkcml2ZXIsIGFyZ3MpO1xuICAgICAgcHJvY2Vzc0lzQWxpdmUgPSB0cnVlO1xuXG4gICAgICAvLyBoYW5kbGUgbG9nIG91dHB1dFxuICAgICAgdGhpcy5wcm9jLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgLy8gaWYgdGhlIGNkIG91dHB1dCBpcyBub3QgcHJpbnRlZCwgZmluZCB0aGUgY2hyb21lIHZlcnNpb24gYW5kIHByaW50XG4gICAgICAgIC8vIHdpbGwgZ2V0IGEgcmVzcG9uc2UgbGlrZVxuICAgICAgICAvLyAgIERldlRvb2xzIHJlc3BvbnNlOiB7XG4gICAgICAgIC8vICAgICAgXCJBbmRyb2lkLVBhY2thZ2VcIjogXCJpby5hcHBpdW0uc2FtcGxlYXBwXCIsXG4gICAgICAgIC8vICAgICAgXCJCcm93c2VyXCI6IFwiQ2hyb21lLzU1LjAuMjg4My45MVwiLFxuICAgICAgICAvLyAgICAgIFwiUHJvdG9jb2wtVmVyc2lvblwiOiBcIjEuMlwiLFxuICAgICAgICAvLyAgICAgIFwiVXNlci1BZ2VudFwiOiBcIi4uLlwiLFxuICAgICAgICAvLyAgICAgIFwiV2ViS2l0LVZlcnNpb25cIjogXCI1MzcuMzZcIlxuICAgICAgICAvLyAgIH1cbiAgICAgICAgY29uc3Qgb3V0ID0gc3Rkb3V0ICsgc3RkZXJyO1xuICAgICAgICBsZXQgbWF0Y2ggPSAvXCJCcm93c2VyXCI6IFwiKC4qKVwiLy5leGVjKG91dCk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHdlYnZpZXdWZXJzaW9uID0gbWF0Y2hbMV07XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFdlYnZpZXcgdmVyc2lvbjogJyR7d2Vidmlld1ZlcnNpb259J2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWxzbyBwcmludCBjaHJvbWVkcml2ZXIgdmVyc2lvbiB0byBsb2dzXG4gICAgICAgIC8vIHdpbGwgb3V0cHV0IHNvbWV0aGluZyBsaWtlXG4gICAgICAgIC8vICBTdGFydGluZyBDaHJvbWVEcml2ZXIgMi4zMy41MDYxMDYgKDhhMDZjMzljNDU4MmZiZmJhYjY5NjZkYmIxYzM4YTkxNzNiZmIxYTIpIG9uIHBvcnQgOTUxNVxuICAgICAgICBtYXRjaCA9IC9TdGFydGluZyBDaHJvbWVEcml2ZXIgKFsuXFxkXSspLy5leGVjKG91dCk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBDaHJvbWVkcml2ZXIgdmVyc2lvbjogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgICAgIHRoaXMuc3luY1Byb3RvY29sKG1hdGNoWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdpdmUgdGhlIG91dHB1dCBpZiBpdCBpcyByZXF1ZXN0ZWRcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgb2YgKHN0ZG91dCB8fCAnJykudHJpbSgpLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgaWYgKCFsaW5lLnRyaW0oKS5sZW5ndGgpIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgW1NURE9VVF0gJHtsaW5lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBsaW5lIG9mIChzdGRlcnIgfHwgJycpLnRyaW0oKS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgIGlmICghbGluZS50cmltKCkubGVuZ3RoKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IoYFtTVERFUlJdICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBoYW5kbGUgb3V0LW9mLWJvdW5kIGV4aXQgYnkgc2ltcGx5IGVtaXR0aW5nIGEgc3RvcHBlZCBzdGF0ZVxuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcpIHtcbiAgICAgICAgICBjb25zdCBtc2cgPSBgQ2hyb21lZHJpdmVyIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gO1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yKG1zZyk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgU3Bhd25pbmcgY2hyb21lZHJpdmVyIHdpdGg6ICR7dGhpcy5jaHJvbWVkcml2ZXJ9ICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICAvLyBzdGFydCBzdWJwcm9jIGFuZCB3YWl0IGZvciBzdGFydERldGVjdG9yXG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoc3RhcnREZXRlY3Rvcik7XG4gICAgICBhd2FpdCB0aGlzLndhaXRGb3JPbmxpbmUoKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRTZXNzaW9uKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoZSk7XG4gICAgICB0aGlzLmVtaXQoQ2hyb21lZHJpdmVyLkVWRU5UX0VSUk9SLCBlKTtcbiAgICAgIC8vIGp1c3QgYmVjYXVzZSB3ZSBoYWQgYW4gZXJyb3IgZG9lc24ndCBtZWFuIHRoZSBjaHJvbWVkcml2ZXIgcHJvY2Vzc1xuICAgICAgLy8gZmluaXNoZWQ7IHdlIHNob3VsZCBjbGVhbiB1cCBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChwcm9jZXNzSXNBbGl2ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgICAgLy8gb2Z0ZW4gdGhlIHVzZXIncyBDaHJvbWUgdmVyc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB2ZXJzaW9uIG9mIENocm9tZWRyaXZlclxuICAgICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcygnQ2hyb21lIHZlcnNpb24gbXVzdCBiZScpKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gJ1VuYWJsZSB0byBhdXRvbWF0ZSBDaHJvbWUgdmVyc2lvbiBiZWNhdXNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIENocm9tZWRyaXZlci5cXG4nO1xuICAgICAgICBpZiAod2Vidmlld1ZlcnNpb24pIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBDaHJvbWUgdmVyc2lvbiBvbiB0aGUgZGV2aWNlOiAke3dlYnZpZXdWZXJzaW9ufVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlciA9IC9DaHJvbWUgdmVyc2lvbiBtdXN0IGJlICguKykvLmV4ZWMoZS5tZXNzYWdlKT8uWzFdIHx8ICcnO1xuICAgICAgICBpZiAodmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlcikge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYENocm9tZWRyaXZlciBzdXBwb3J0cyBDaHJvbWUgdmVyc2lvbihzKTogJHt2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyfVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZSArPSBgVmlzaXQgJyR7Q0hST01FRFJJVkVSX1RVVE9SSUFMfScgdG8gdHJvdWJsZXNob290IHRoZSBwcm9ibGVtLlxcbmA7XG4gICAgICB9XG5cbiAgICAgIG1lc3NhZ2UgKz0gZS5tZXNzYWdlO1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBzZXNzaW9uSWQgKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FID8gdGhpcy5qd3Byb3h5LnNlc3Npb25JZCA6IG51bGw7XG4gIH1cblxuICBhc3luYyByZXN0YXJ0ICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdSZXN0YXJ0aW5nIGNocm9tZWRyaXZlcicpO1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCByZXN0YXJ0IHdoZW4gd2UncmUgbm90IG9ubGluZVwiKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORyk7XG4gICAgYXdhaXQgdGhpcy5zdG9wKGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0KHRoaXMuY2FwYWJpbGl0aWVzLCBmYWxzZSk7XG4gIH1cblxuICBhc3luYyB3YWl0Rm9yT25saW5lICgpIHtcbiAgICAvLyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IENEIGhhc24ndCBjcmFzaGVkXG4gICAgbGV0IGNocm9tZWRyaXZlclN0b3BwZWQgPSBmYWxzZTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKDIwLCAyMDAsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgICAvLyB3ZSBhcmUgZWl0aGVyIHN0b3BwZWQgb3Igc3RvcHBpbmcsIHNvIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgIGNocm9tZWRyaXZlclN0b3BwZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH0pO1xuICAgIGlmIChjaHJvbWVkcml2ZXJTdG9wcGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nocm9tZURyaXZlciBjcmFzaGVkIGR1cmluZyBzdGFydHVwLicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXNzaW9uICgpIHtcbiAgICBjb25zdCBzZXNzaW9uQ2FwcyA9IHRoaXMuZGVzaXJlZFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDXG4gICAgICA/IHtjYXBhYmlsaXRpZXM6IHthbHdheXNNYXRjaDogdGhpcy5jYXBhYmlsaXRpZXN9fVxuICAgICAgOiB7ZGVzaXJlZENhcGFiaWxpdGllczogdGhpcy5jYXBhYmlsaXRpZXN9O1xuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICR7dGhpcy5kZXNpcmVkUHJvdG9jb2x9IENocm9tZWRyaXZlciBzZXNzaW9uIHdpdGggY2FwYWJpbGl0aWVzOiBgICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHNlc3Npb25DYXBzLCBudWxsLCAyKSk7XG4gICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCBzZXNzaW9uQ2Fwcyk7XG4gICAgdGhpcy5sb2cucHJlZml4ID0gZ2VuZXJhdGVMb2dQcmVmaXgodGhpcywgdGhpcy5qd3Byb3h5LnNlc3Npb25JZCk7XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKGVtaXRTdGF0ZXMgPSB0cnVlKSB7XG4gICAgaWYgKGVtaXRTdGF0ZXMpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQSU5HKTtcbiAgICB9XG4gICAgY29uc3QgcnVuU2FmZVN0ZXAgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGYoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihlLm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhlLnN0YWNrKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGF3YWl0IHJ1blNhZmVTdGVwKCgpID0+IHRoaXMuandwcm94eS5jb21tYW5kKCcnLCAnREVMRVRFJykpO1xuICAgIGF3YWl0IHJ1blNhZmVTdGVwKCgpID0+IHRoaXMucHJvYy5zdG9wKCdTSUdURVJNJywgMjAwMDApKTtcbiAgICB0aGlzLmxvZy5wcmVmaXggPSBnZW5lcmF0ZUxvZ1ByZWZpeCh0aGlzKTtcbiAgICBpZiAoZW1pdFN0YXRlcykge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU3RhdGUgKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDaGFuZ2VkIHN0YXRlIHRvICcke3N0YXRlfSdgKTtcbiAgICB0aGlzLmVtaXQoQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIHtzdGF0ZX0pO1xuICB9XG5cbiAgYXN5bmMgc2VuZENvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxuXG4gIGFzeW5jIHByb3h5UmVxIChyZXEsIHJlcykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMocmVxLCByZXMpO1xuICB9XG5cbiAgYXN5bmMga2lsbEFsbCAoKSB7XG4gICAgbGV0IGNtZCA9IHN5c3RlbS5pc1dpbmRvd3MoKVxuICAgICAgPyBgd21pYyBwcm9jZXNzIHdoZXJlIFwiY29tbWFuZGxpbmUgbGlrZSAnJWNocm9tZWRyaXZlci5leGUlLS1wb3J0PSR7dGhpcy5wcm94eVBvcnR9JSdcIiBkZWxldGVgXG4gICAgICA6IGBwa2lsbCAtMTUgLWYgXCIke3RoaXMuY2hyb21lZHJpdmVyfS4qLS1wb3J0PSR7dGhpcy5wcm94eVBvcnR9XCJgO1xuICAgIHRoaXMubG9nLmRlYnVnKGBLaWxsaW5nIGFueSBvbGQgY2hyb21lZHJpdmVycywgcnVubmluZzogJHtjbWR9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChCLnByb21pc2lmeShjcC5leGVjKSkoY21kKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdTdWNjZXNzZnVsbHkgY2xlYW5lZCB1cCBvbGQgY2hyb21lZHJpdmVycycpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cud2FybignTm8gb2xkIGNocm9tZWRyaXZlcnMgc2VlbSB0byBleGlzdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgY29uc3QgdWRpZEluZGV4ID0gdGhpcy5hZGIuZXhlY3V0YWJsZS5kZWZhdWx0QXJncy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0gPT09ICctcycpO1xuICAgICAgY29uc3QgdWRpZCA9IHVkaWRJbmRleCA+IC0xID8gdGhpcy5hZGIuZXhlY3V0YWJsZS5kZWZhdWx0QXJnc1t1ZGlkSW5kZXggKyAxXSA6IG51bGw7XG5cbiAgICAgIGlmICh1ZGlkKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyB0aGlzIGRldmljZSdzIGFkYiBmb3J3YXJkZWQgcG9ydCBzb2NrZXQgY29ubmVjdGlvbnM6ICR7dWRpZH1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyBhbnkgb2xkIGFkYiBmb3J3YXJkZWQgcG9ydCBzb2NrZXQgY29ubmVjdGlvbnNgKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChsZXQgY29ubiBvZiBhd2FpdCB0aGlzLmFkYi5nZXRGb3J3YXJkTGlzdCgpKSB7XG4gICAgICAgICAgLy8gY2hyb21lZHJpdmVyIHdpbGwgYXNrIEFEQiB0byBmb3J3YXJkIGEgcG9ydCBsaWtlIFwiZGV2aWNlSWQgdGNwOnBvcnQgbG9jYWxhYnN0cmFjdDp3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV9wb3J0XCJcbiAgICAgICAgICBpZiAoIShjb25uLmluY2x1ZGVzKCd3ZWJ2aWV3X2RldnRvb2xzJykgJiYgKCF1ZGlkIHx8IGNvbm4uaW5jbHVkZXModWRpZCkpKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHBhcmFtcyA9IGNvbm4uc3BsaXQoL1xccysvKTtcbiAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHBhcmFtc1sxXS5yZXBsYWNlKC9bXFxEXSovLCAnJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBjbGVhbiBmb3J3YXJkZWQgcG9ydHMuIEVycm9yOiAnJHtlcnIubWVzc2FnZX0nLiBDb250aW51aW5nLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhc1dvcmtpbmdXZWJ2aWV3ICgpIHtcbiAgICAvLyBzb21ldGltZXMgY2hyb21lZHJpdmVyIHN0b3BzIGF1dG9tYXRpbmcgd2Vidmlld3MuIHRoaXMgbWV0aG9kIHJ1bnMgYVxuICAgIC8vIHNpbXBsZSBjb21tYW5kIHRvIGRldGVybWluZSBvdXIgc3RhdGUsIGFuZCByZXNwb25kcyBhY2NvcmRpbmdseVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3VybCcsICdHRVQnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuQ2hyb21lZHJpdmVyLkVWRU5UX0VSUk9SID0gJ2Nocm9tZWRyaXZlcl9lcnJvcic7XG5DaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCA9ICdzdGF0ZUNoYW5nZWQnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQgPSAnc3RvcHBlZCc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfU1RBUlRJTkcgPSAnc3RhcnRpbmcnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSA9ICdvbmxpbmUnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQSU5HID0gJ3N0b3BwaW5nJztcbkNocm9tZWRyaXZlci5TVEFURV9SRVNUQVJUSU5HID0gJ3Jlc3RhcnRpbmcnO1xuXG5leHBvcnQgeyBDaHJvbWVkcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IENocm9tZWRyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxtQ0FBbUMsR0FBRyxFQUE1QztBQUNBLE1BQU1DLFlBQVksR0FBRyxXQUFyQjtBQUNBLE1BQU1DLCtCQUErQixHQUFHLEVBQXhDO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLElBQXJCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsb0JBQXpCO0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsNEJBQWhDO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsQ0FDekIs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
|
|
736
|
+
exports.default = _default;
|
|
737
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTiIsIkRFRkFVTFRfSE9TVCIsIk1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQiLCJERUZBVUxUX1BPUlQiLCJDSFJPTUVfQlVORExFX0lEIiwiV0VCVklFV19TSEVMTF9CVU5ETEVfSUQiLCJXRUJWSUVXX0JVTkRMRV9JRFMiLCJDSFJPTUVEUklWRVJfVFVUT1JJQUwiLCJWRVJTSU9OX1BBVFRFUk4iLCJDRF9WRVJTSU9OX1RJTUVPVVQiLCJDaHJvbWVkcml2ZXIiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJob3N0IiwicG9ydCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJleGVjdXRhYmxlIiwiZXhlY3V0YWJsZURpciIsImdldENocm9tZWRyaXZlckRpciIsImJ1bmRsZUlkIiwibWFwcGluZ1BhdGgiLCJjbWRBcmdzIiwiYWRiIiwidmVyYm9zZSIsImxvZ1BhdGgiLCJkaXNhYmxlQnVpbGRDaGVjayIsImRldGFpbHMiLCJpc0F1dG9kb3dubG9hZEVuYWJsZWQiLCJfbG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiZ2VuZXJhdGVMb2dQcmVmaXgiLCJwcm94eUhvc3QiLCJwcm94eVBvcnQiLCJwcm9jIiwiY2hyb21lZHJpdmVyIiwiZXhlY3V0YWJsZVZlcmlmaWVkIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiandwcm94eSIsIkpXUHJveHkiLCJzZXJ2ZXIiLCJsb2ciLCJzdG9yYWdlQ2xpZW50IiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNocm9tZWRyaXZlckRpciIsImNhcGFiaWxpdGllcyIsImRlc2lyZWRQcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJnZXREcml2ZXJzTWFwcGluZyIsIm1hcHBpbmciLCJfIiwiY2xvbmVEZWVwIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwiZGVidWciLCJmcyIsImV4aXN0cyIsIndhcm4iLCJpbmZvIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGUiLCJlcnIiLCJtZXNzYWdlIiwiY2RWZXJzaW9uIiwiY2hyb21lVmVyc2lvbiIsInRvUGFpcnMiLCJjb2VyY2VkVmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsInZlcnNpb24iLCJnZXRDaHJvbWVkcml2ZXJzIiwiZXhlY3V0YWJsZXMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwibm9kaXIiLCJhYnNvbHV0ZSIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJjZHMiLCJhc3luY21hcCIsImxvZ0Vycm9yIiwic3Rkb3V0Iiwic3RkZXJyIiwiZXJyTXNnIiwicGF0aCIsImJhc2VuYW1lIiwiZXhlYyIsInRpbWVvdXQiLCJpbmNsdWRlcyIsIm1hdGNoIiwibWluQ2hyb21lVmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJmaWx0ZXIiLCJjZCIsInNvcnQiLCJhIiwiYiIsImNvbXBhcmVWZXJzaW9ucyIsImlzRW1wdHkiLCJnZXRDaHJvbWVWZXJzaW9uIiwiQnJvd3NlciIsInZlcnNpb25NYXRjaCIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJ1cGRhdGVEcml2ZXJzTWFwcGluZyIsIm5ld01hcHBpbmciLCJzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwiZSIsIk9iamVjdCIsImFzc2lnbiIsImdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIiLCJnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIiwidmFsdWVzIiwiZGlkU3RvcmFnZVN5bmMiLCJzeW5jQ2hyb21lZHJpdmVycyIsInJldHJpZXZlZE1hcHBpbmciLCJyZXRyaWV2ZU1hcHBpbmciLCJkcml2ZXJLZXlzIiwic3luY0RyaXZlcnMiLCJtaW5Ccm93c2VyVmVyc2lvbiIsInN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nIiwicmVkdWNlIiwiYWNjIiwieCIsIm1pc3NpbmdWZXJzaW9ucyIsImNvZXJjZWRWZXIiLCJzaXplIiwiZXJyb3JBbmRUaHJvdyIsIm1hdGNoaW5nRHJpdmVycyIsIm1pbkNocm9tZVZlcnNpb25TIiwiZ3RlIiwiQ0RfQ0ROIiwic3RhY2siLCJhdXRvZG93bmxvYWRTdWdnZXN0aW9uIiwiRXJyb3IiLCJiaW5QYXRoIiwiaW5pdENocm9tZWRyaXZlclBhdGgiLCJzeW5jUHJvdG9jb2wiLCJXM0MiLCJjaHJvbWVPcHRpb25zIiwiZ2V0Q2FwVmFsdWUiLCJ3M2MiLCJ0b1czY0NhcE5hbWVzIiwic3RhcnQiLCJjYXBzIiwiZW1pdFN0YXJ0aW5nU3RhdGUiLCJsb2dnaW5nUHJlZnMiLCJicm93c2VyIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImFkYlBvcnQiLCJwdXNoIiwiaXNBcnJheSIsInN0YXJ0RGV0ZWN0b3IiLCJzdGFydHNXaXRoIiwicHJvY2Vzc0lzQWxpdmUiLCJ3ZWJ2aWV3VmVyc2lvbiIsImtpbGxBbGwiLCJTdWJQcm9jZXNzIiwib24iLCJvdXQiLCJsaW5lIiwidHJpbSIsInNwbGl0IiwiZXJyb3IiLCJjb2RlIiwic2lnbmFsIiwiU1RBVEVfU1RPUFBJTkciLCJTVEFURV9SRVNUQVJUSU5HIiwibXNnIiwiam9pbiIsIndhaXRGb3JPbmxpbmUiLCJzdGFydFNlc3Npb24iLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwidmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlciIsInNlc3Npb25JZCIsIlNUQVRFX09OTElORSIsInJlc3RhcnQiLCJjaHJvbWVkcml2ZXJTdG9wcGVkIiwicmV0cnlJbnRlcnZhbCIsImdldFN0YXR1cyIsImNvbW1hbmQiLCJzZXNzaW9uQ2FwcyIsImFsd2F5c01hdGNoIiwiZGVzaXJlZENhcGFiaWxpdGllcyIsInByZWZpeCIsImVtaXRTdGF0ZXMiLCJydW5TYWZlU3RlcCIsImYiLCJFVkVOVF9DSEFOR0VEIiwic2VuZENvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwicHJveHlSZXEiLCJyZXEiLCJyZXMiLCJwcm94eVJlcVJlcyIsImNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsIkIiLCJwcm9taXNpZnkiLCJjcCIsInVkaWRJbmRleCIsImRlZmF1bHRBcmdzIiwiZmluZEluZGV4IiwiaXRlbSIsInVkaWQiLCJjb25uIiwiZ2V0Rm9yd2FyZExpc3QiLCJwYXJhbXMiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsInJlcGxhY2UiLCJoYXNXb3JraW5nV2VidmlldyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jaHJvbWVkcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1haW5cblxuaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgSldQcm94eSwgUFJPVE9DT0xTIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCBhc3luY21hcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFN1YlByb2Nlc3MsIGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtcbiAgZ2V0Q2hyb21lVmVyc2lvbiwgZ2V0Q2hyb21lZHJpdmVyRGlyLCBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsXG4gIGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgsIENEX0NETiwgZ2VuZXJhdGVMb2dQcmVmaXhcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcbmltcG9ydCBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IGZyb20gJy4vc3RvcmFnZS1jbGllbnQnO1xuaW1wb3J0IHsgdG9XM2NDYXBOYW1lcywgZ2V0Q2FwVmFsdWUgfSBmcm9tICcuL3Byb3RvY29sLWhlbHBlcnMnO1xuXG5jb25zdCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTiA9IDczO1xuY29uc3QgREVGQVVMVF9IT1NUID0gJzEyNy4wLjAuMSc7XG5jb25zdCBNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUID0gNzU7XG5jb25zdCBERUZBVUxUX1BPUlQgPSA5NTE1O1xuY29uc3QgQ0hST01FX0JVTkRMRV9JRCA9ICdjb20uYW5kcm9pZC5jaHJvbWUnO1xuY29uc3QgV0VCVklFV19TSEVMTF9CVU5ETEVfSUQgPSAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnO1xuY29uc3QgV0VCVklFV19CVU5ETEVfSURTID0gW1xuICAnY29tLmdvb2dsZS5hbmRyb2lkLndlYnZpZXcnLFxuICAnY29tLmFuZHJvaWQud2VidmlldycsXG5dO1xuY29uc3QgQ0hST01FRFJJVkVSX1RVVE9SSUFMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vd3JpdGluZy1ydW5uaW5nLWFwcGl1bS93ZWIvY2hyb21lZHJpdmVyLm1kJztcbmNvbnN0IFZFUlNJT05fUEFUVEVSTiA9IC8oW1xcZC5dKykvO1xuXG5jb25zdCBDRF9WRVJTSU9OX1RJTUVPVVQgPSA1MDAwO1xuXG5jbGFzcyBDaHJvbWVkcml2ZXIgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKGFyZ3MgPSB7fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCB7XG4gICAgICBob3N0ID0gREVGQVVMVF9IT1NULFxuICAgICAgcG9ydCA9IERFRkFVTFRfUE9SVCxcbiAgICAgIHVzZVN5c3RlbUV4ZWN1dGFibGUgPSBmYWxzZSxcbiAgICAgIGV4ZWN1dGFibGUsXG4gICAgICBleGVjdXRhYmxlRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKCksXG4gICAgICBidW5kbGVJZCxcbiAgICAgIG1hcHBpbmdQYXRoLFxuICAgICAgY21kQXJncyxcbiAgICAgIGFkYixcbiAgICAgIHZlcmJvc2UsXG4gICAgICBsb2dQYXRoLFxuICAgICAgZGlzYWJsZUJ1aWxkQ2hlY2ssXG4gICAgICBkZXRhaWxzLFxuICAgICAgaXNBdXRvZG93bmxvYWRFbmFibGVkID0gZmFsc2UsXG4gICAgfSA9IGFyZ3M7XG4gICAgdGhpcy5fbG9nID0gbG9nZ2VyLmdldExvZ2dlcihnZW5lcmF0ZUxvZ1ByZWZpeCh0aGlzKSk7XG5cbiAgICB0aGlzLnByb3h5SG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wcm94eVBvcnQgPSBwb3J0O1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMuY21kQXJncyA9IGNtZEFyZ3M7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICB0aGlzLnVzZVN5c3RlbUV4ZWN1dGFibGUgPSB1c2VTeXN0ZW1FeGVjdXRhYmxlO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gZXhlY3V0YWJsZTtcbiAgICB0aGlzLmV4ZWN1dGFibGVEaXIgPSBleGVjdXRhYmxlRGlyO1xuICAgIHRoaXMubWFwcGluZ1BhdGggPSBtYXBwaW5nUGF0aDtcbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5leGVjdXRhYmxlVmVyaWZpZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXRlID0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQ7XG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEpXUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnByb3h5SG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMucHJveHlQb3J0LFxuICAgICAgbG9nOiB0aGlzLl9sb2csXG4gICAgfSk7XG4gICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTtcbiAgICB0aGlzLmxvZ1BhdGggPSBsb2dQYXRoO1xuICAgIHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2sgPSAhIWRpc2FibGVCdWlsZENoZWNrO1xuICAgIHRoaXMuc3RvcmFnZUNsaWVudCA9IGlzQXV0b2Rvd25sb2FkRW5hYmxlZFxuICAgICAgPyBuZXcgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCh7IGNocm9tZWRyaXZlckRpcjogdGhpcy5leGVjdXRhYmxlRGlyIH0pXG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IHt9O1xuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBnZXQgbG9nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nO1xuICB9XG5cbiAgYXN5bmMgZ2V0RHJpdmVyc01hcHBpbmcgKCkge1xuICAgIGxldCBtYXBwaW5nID0gXy5jbG9uZURlZXAoQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HKTtcbiAgICBpZiAodGhpcy5tYXBwaW5nUGF0aCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEF0dGVtcHRpbmcgdG8gdXNlIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSdgKTtcbiAgICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHRoaXMubWFwcGluZ1BhdGgpKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYE5vIGZpbGUgZm91bmQgYXQgJyR7dGhpcy5tYXBwaW5nUGF0aH0nYCk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0RlZmF1bHRpbmcgdG8gdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1hcHBpbmcgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMubWFwcGluZ1BhdGgsICd1dGY4JykpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBFcnJvciBwYXJzaW5nIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbygnRGVmYXVsdGluZyB0byB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnVXNpbmcgdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlcyBmb3IgbWluaW11bSBjaHJvbWUgdmVyc2lvbiBhcmUgc2VtdmVyIGNvbXBsaWFudFxuICAgIGZvciAoY29uc3QgW2NkVmVyc2lvbiwgY2hyb21lVmVyc2lvbl0gb2YgXy50b1BhaXJzKG1hcHBpbmcpKSB7XG4gICAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbik7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgbWFwcGluZ1tjZFZlcnNpb25dID0gY29lcmNlZFZlcnNpb24udmVyc2lvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYCcke2Nocm9tZVZlcnNpb259JyBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gU2tpcHBpbmcgaXRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBpbmc7XG4gIH1cblxuICBhc3luYyBnZXRDaHJvbWVkcml2ZXJzIChtYXBwaW5nKSB7XG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdmVyc2lvbnMgYXZhaWxhYmxlXG4gICAgY29uc3QgZXhlY3V0YWJsZXMgPSBhd2FpdCBmcy5nbG9iKCcqJywge1xuICAgICAgY3dkOiB0aGlzLmV4ZWN1dGFibGVEaXIsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgbm9kaXI6IHRydWUsXG4gICAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnZXhlY3V0YWJsZScsIGV4ZWN1dGFibGVzLmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgICAgYGluICcke3RoaXMuZXhlY3V0YWJsZURpcn0nYCk7XG4gICAgY29uc3QgY2RzID0gKGF3YWl0IGFzeW5jbWFwKGV4ZWN1dGFibGVzLCBhc3luYyAoZXhlY3V0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgbG9nRXJyb3IgPSAoe21lc3NhZ2UsIHN0ZG91dCA9IG51bGwsIHN0ZGVyciA9IG51bGx9KSA9PiB7XG4gICAgICAgIGxldCBlcnJNc2cgPSBgQ2Fubm90IHJldHJpZXZlIHZlcnNpb24gbnVtYmVyIGZyb20gJyR7cGF0aC5iYXNlbmFtZShleGVjdXRhYmxlKX0nIENocm9tZWRyaXZlciBiaW5hcnkuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgaXQgcmV0dXJucyBhIHZhbGlkIHZlcnNpb24gc3RyaW5nIGluIHJlc3BvbnNlIHRvICctLXZlcnNpb24nIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gJHttZXNzYWdlfWA7XG4gICAgICAgIGlmIChzdGRvdXQpIHtcbiAgICAgICAgICBlcnJNc2cgKz0gYFxcblN0ZG91dDogJHtzdGRvdXR9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgZXJyTXNnICs9IGBcXG5TdGRlcnI6ICR7c3RkZXJyfWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2cud2FybihlcnJNc2cpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICBsZXQgc3RkZXJyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgKHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCBleGVjKGV4ZWN1dGFibGUsIFsnLS12ZXJzaW9uJ10sIHtcbiAgICAgICAgICB0aW1lb3V0OiBDRF9WRVJTSU9OX1RJTUVPVVQsXG4gICAgICAgIH0pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIShlcnIubWVzc2FnZSB8fCAnJykuaW5jbHVkZXMoJ3RpbWVkIG91dCcpICYmICEoZXJyLnN0ZG91dCB8fCAnJykuaW5jbHVkZXMoJ1N0YXJ0aW5nIENocm9tZURyaXZlcicpKSB7XG4gICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIGhhcyB0aW1lZCBvdXQsIGl0IGhhcyBhY3R1YWxseSBzdGFydGVkIENocm9tZWRyaXZlcixcbiAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGVyZSB3aWxsIGFsc28gYmUgdGhlIHZlcnNpb24gc3RyaW5nIGluIHRoZSBvdXRwdXRcbiAgICAgICAgc3Rkb3V0ID0gZXJyLnN0ZG91dDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF0Y2ggPSAvQ2hyb21lRHJpdmVyXFxzK1xcKD92PyhbXFxkLl0rKVxcKT8vaS5leGVjKHN0ZG91dCk7IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvenBqNXdBLzFcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHttZXNzYWdlOiAnQ2Fubm90IHBhcnNlIHRoZSB2ZXJzaW9uIHN0cmluZycsIHN0ZG91dCwgc3RkZXJyfSk7XG4gICAgICB9XG4gICAgICBsZXQgdmVyc2lvbiA9IG1hdGNoWzFdO1xuICAgICAgbGV0IG1pbkNocm9tZVZlcnNpb24gPSBtYXBwaW5nW3ZlcnNpb25dO1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKHZlcnNpb24pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIC8vIGJlZm9yZSAyMDE5LTAzLTA2IHZlcnNpb25zIHdlcmUgb2YgdGhlIGZvcm0gbWFqb3IubWlub3JcbiAgICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uLm1ham9yIDwgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICB2ZXJzaW9uID0gYCR7Y29lcmNlZFZlcnNpb24ubWFqb3J9LiR7Y29lcmNlZFZlcnNpb24ubWlub3J9YDtcbiAgICAgICAgICBtaW5DaHJvbWVWZXJzaW9uID0gbWFwcGluZ1t2ZXJzaW9uXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb24gJiYgY29lcmNlZFZlcnNpb24ubWFqb3IgPj0gTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICAvLyBBc3N1bWUgdGhlIG1ham9yIENocm9tZSB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBtYWpvciB2ZXJzaW9uXG4gICAgICAgICAgbWluQ2hyb21lVmVyc2lvbiA9IGAke2NvZXJjZWRWZXJzaW9uLm1ham9yfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4ZWN1dGFibGUsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIG1pbkNocm9tZVZlcnNpb24sXG4gICAgICB9O1xuICAgIH0pKVxuICAgICAgLmZpbHRlcigoY2QpID0+ICEhY2QpXG4gICAgICAuc29ydCgoYSwgYikgPT4gY29tcGFyZVZlcnNpb25zKGIudmVyc2lvbiwgYS52ZXJzaW9uKSk7XG4gICAgaWYgKF8uaXNFbXB0eShjZHMpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBObyBDaHJvbWVkcml2ZXJzIHdlcmUgZm91bmQgaW4gJyR7dGhpcy5leGVjdXRhYmxlRGlyfSdgKTtcbiAgICAgIHJldHVybiBjZHM7XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgZm9sbG93aW5nIENocm9tZWRyaXZlciBleGVjdXRhYmxlcyB3ZXJlIGZvdW5kOmApO1xuICAgIGZvciAoY29uc3QgY2Qgb2YgY2RzKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgICcke2NkLmV4ZWN1dGFibGV9JyAodmVyc2lvbiAnJHtjZC52ZXJzaW9ufScsIG1pbmltdW0gQ2hyb21lIHZlcnNpb24gJyR7Y2QubWluQ2hyb21lVmVyc2lvbiA/IGNkLm1pbkNocm9tZVZlcnNpb24gOiAnVW5rbm93bid9JylgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNkcztcbiAgfVxuXG4gIGFzeW5jIGdldENocm9tZVZlcnNpb24gKCkge1xuICAgIC8vIFRyeSB0byByZXRyaWV2ZSB0aGUgdmVyc2lvbiBmcm9tIGBkZXRhaWxzYCBwcm9wZXJ0eSBpZiBpdCBpcyBzZXRcbiAgICAvLyBUaGUgYGluZm9gIGl0ZW0gbXVzdCBjb250YWluIHRoZSBvdXRwdXQgb2YgL2pzb24vdmVyc2lvbiBDRFAgY29tbWFuZFxuICAgIC8vIHdoZXJlIGBCcm93c2VyYCBmaWVsZCBsb29rcyBsaWtlIGBDaHJvbWUvNzIuMC4zNjAxLjBgYFxuICAgIGlmICh0aGlzLmRldGFpbHM/LmluZm8pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBCcm93c2VyIHZlcnNpb24gaW4gdGhlIHN1cHBsaWVkIGRldGFpbHM6ICR7dGhpcy5kZXRhaWxzPy5pbmZvPy5Ccm93c2VyfWApO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBWRVJTSU9OX1BBVFRFUk4uZXhlYyh0aGlzLmRldGFpbHM/LmluZm8/LkJyb3dzZXIpO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uTWF0Y2hbMV0pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBjb2VyY2VkVmVyc2lvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY2hyb21lVmVyc2lvbjtcblxuICAgIC8vIGluIGNhc2Ugb2YgV2ViVmlldyBCcm93c2VyIFRlc3Rlciwgc2ltcGx5IHRyeSB0byBmaW5kIHRoZSB1bmRlcmx5aW5nIHdlYnZpZXdcbiAgICBpZiAodGhpcy5idW5kbGVJZCA9PT0gV0VCVklFV19TSEVMTF9CVU5ETEVfSUQpIHtcbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIHJldHVybiBzZW12ZXIuY29lcmNlKGNocm9tZVZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBvbiBBbmRyb2lkIDctOSB3ZWJ2aWV3cyBhcmUgYmFja2VkIGJ5IHRoZSBtYWluIENocm9tZSwgbm90IHRoZSBzeXN0ZW0gd2Vidmlld1xuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAgICAgaWYgKGFwaUxldmVsID49IDI0ICYmIGFwaUxldmVsIDw9IDI4ICYmXG4gICAgICAgICAgW1dFQlZJRVdfU0hFTExfQlVORExFX0lELCAuLi5XRUJWSUVXX0JVTkRMRV9JRFNdLmluY2x1ZGVzKHRoaXMuYnVuZGxlSWQpKSB7XG4gICAgICAgIHRoaXMuYnVuZGxlSWQgPSBDSFJPTUVfQlVORExFX0lEO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRyeSBvdXQgd2Vidmlld3Mgd2hlbiBubyBidW5kbGUgaWQgaXMgc2VudCBpblxuICAgIGlmICghdGhpcy5idW5kbGVJZCkge1xuICAgICAgLy8gZGVmYXVsdCB0byB0aGUgZ2VuZXJpYyBDaHJvbWUgYnVuZGxlXG4gICAgICB0aGlzLmJ1bmRsZUlkID0gQ0hST01FX0JVTkRMRV9JRDtcblxuICAgICAgLy8gd2UgaGF2ZSBhIHdlYnZpZXcgb2Ygc29tZSBzb3J0LCBzbyB0cnkgdG8gZmluZCB0aGUgYnVuZGxlIHZlcnNpb25cbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgZG8gbm90IGhhdmUgYSBjaHJvbWUgdmVyc2lvbiwgaXQgbXVzdCBub3QgYmUgYSB3ZWJ2aWV3XG4gICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICBjaHJvbWVWZXJzaW9uID0gYXdhaXQgZ2V0Q2hyb21lVmVyc2lvbih0aGlzLmFkYiwgdGhpcy5idW5kbGVJZCk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIGl0IGlzIHNlbXZlciwgc28gbGF0ZXIgY2hlY2tzIHdvbid0IGZhaWxcbiAgICByZXR1cm4gY2hyb21lVmVyc2lvbiA/IHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbikgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRHJpdmVyc01hcHBpbmcgKG5ld01hcHBpbmcpIHtcbiAgICBsZXQgc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZyA9IHRydWU7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm1hcHBpbmdQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMubWFwcGluZ1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld01hcHBpbmcsIG51bGwsIDIpLCAndXRmOCcpO1xuICAgICAgICBzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nID0gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBzdG9yZSB0aGUgdXBkYXRlZCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgaW50byAnJHt0aGlzLm1hcHBpbmdQYXRofScuIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlIG9mIGZ1cnRoZXIgZXhlY3V0aW9ucy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZykge1xuICAgICAgT2JqZWN0LmFzc2lnbihDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsIG5ld01hcHBpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIgKCkge1xuICAgIGlmICghdGhpcy5hZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwcGluZyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyc01hcHBpbmcoKTtcbiAgICBpZiAoIV8uaXNFbXB0eShtYXBwaW5nKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSBtb3N0IHJlY2VudCBrbm93biBDaHJvbWUgdmVyc2lvbjogJHtfLnZhbHVlcyhtYXBwaW5nKVswXX1gKTtcbiAgICB9XG5cbiAgICBsZXQgZGlkU3RvcmFnZVN5bmMgPSBmYWxzZTtcbiAgICBjb25zdCBzeW5jQ2hyb21lZHJpdmVycyA9IGFzeW5jIChjaHJvbWVWZXJzaW9uKSA9PiB7XG4gICAgICBkaWRTdG9yYWdlU3luYyA9IHRydWU7XG4gICAgICBjb25zdCByZXRyaWV2ZWRNYXBwaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlQ2xpZW50LnJldHJpZXZlTWFwcGluZygpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0dvdCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgZnJvbSB0aGUgc3RvcmFnZTogJyArXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHJldHJpZXZlZE1hcHBpbmcsIG51bGwsIDIpKTtcbiAgICAgIGNvbnN0IGRyaXZlcktleXMgPSBhd2FpdCB0aGlzLnN0b3JhZ2VDbGllbnQuc3luY0RyaXZlcnMoe1xuICAgICAgICBtaW5Ccm93c2VyVmVyc2lvbjogY2hyb21lVmVyc2lvbi5tYWpvcixcbiAgICAgIH0pO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJLZXlzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyA9IGRyaXZlcktleXMucmVkdWNlKChhY2MsIHgpID0+IHtcbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIG1pbkJyb3dzZXJWZXJzaW9ufSA9IHJldHJpZXZlZE1hcHBpbmdbeF07XG4gICAgICAgIGFjY1t2ZXJzaW9uXSA9IG1pbkJyb3dzZXJWZXJzaW9uO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgT2JqZWN0LmFzc2lnbihtYXBwaW5nLCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKG1hcHBpbmcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGNkcyA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lZHJpdmVycyhtYXBwaW5nKTtcblxuICAgICAgY29uc3QgbWlzc2luZ1ZlcnNpb25zID0ge307XG4gICAgICBmb3IgKGNvbnN0IHt2ZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9ufSBvZiBjZHMpIHtcbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uIHx8IG1hcHBpbmdbdmVyc2lvbl0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2VyY2VkVmVyID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uKTtcbiAgICAgICAgaWYgKCFjb2VyY2VkVmVyIHx8IGNvZXJjZWRWZXIubWFqb3IgPCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWlzc2luZ1ZlcnNpb25zW3ZlcnNpb25dID0gbWluQ2hyb21lVmVyc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdWZXJzaW9ucykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnQ2hyb21lZHJpdmVyJywgXy5zaXplKG1pc3NpbmdWZXJzaW9ucyksIHRydWUpfSwgYCArXG4gICAgICAgICAgYHdoaWNoICR7Xy5zaXplKG1pc3NpbmdWZXJzaW9ucykgPT09IDEgPyAnaXMnIDogJ2FyZSd9IG1pc3NpbmcgaW4gdGhlIGxpc3Qgb2Yga25vd24gdmVyc2lvbnM6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1pc3NpbmdWZXJzaW9ucykpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKE9iamVjdC5hc3NpZ24obWFwcGluZywgbWlzc2luZ1ZlcnNpb25zKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIENocm9tZWRyaXZlciBleGVjdXRhYmxlIGF2YWlsYWJsZSBmb3IgdXNlIGlmIGAgK1xuICAgICAgICAgICAgYCdjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjaycgY2FwYWJpbGl0eSBpcyBzZXQgdG8gJ3RydWUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIGV4ZWN1dGFibGV9ID0gY2RzWzBdO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDaHJvbWUgYnVpbGQgY2hlY2sgZGlzYWJsZWQuIFVzaW5nIG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uICgke3ZlcnNpb259LCBhdCAnJHtleGVjdXRhYmxlfScpYCk7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYElmIHRoaXMgaXMgd3JvbmcsIHNldCAnY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2snIGNhcGFiaWxpdHkgdG8gJ2ZhbHNlJ2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hyb21lVmVyc2lvbiA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lVmVyc2lvbigpO1xuICAgICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgIC8vIHVuYWJsZSB0byBnZXQgdGhlIGNocm9tZSB2ZXJzaW9uXG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIENocm9tZWRyaXZlciBleGVjdXRhYmxlIGF2YWlsYWJsZSBmb3IgdXNlIGlmIGAgK1xuICAgICAgICAgICAgYHRoZSBjdXJyZW50IENocm9tZSB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIGV4ZWN1dGFibGV9ID0gY2RzWzBdO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZGlzY292ZXIgQ2hyb21lIHZlcnNpb24uIFVzaW5nIENocm9tZWRyaXZlciAke3ZlcnNpb259IGF0ICcke2V4ZWN1dGFibGV9J2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCBDaHJvbWUgYnVuZGxlICcke3RoaXMuYnVuZGxlSWR9JyB2ZXJzaW9uICcke2Nocm9tZVZlcnNpb259J2ApO1xuXG4gICAgICBjb25zdCBtYXRjaGluZ0RyaXZlcnMgPSBjZHMuZmlsdGVyKCh7bWluQ2hyb21lVmVyc2lvbn0pID0+IHtcbiAgICAgICAgY29uc3QgbWluQ2hyb21lVmVyc2lvblMgPSBtaW5DaHJvbWVWZXJzaW9uICYmIHNlbXZlci5jb2VyY2UobWluQ2hyb21lVmVyc2lvbik7XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvblMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hyb21lVmVyc2lvbi5tYWpvciA+IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OXG4gICAgICAgICAgPyBtaW5DaHJvbWVWZXJzaW9uUy5tYWpvciA9PT0gY2hyb21lVmVyc2lvbi5tYWpvclxuICAgICAgICAgIDogc2VtdmVyLmd0ZShjaHJvbWVWZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9uUyk7XG4gICAgICB9KTtcbiAgICAgIGlmIChfLmlzRW1wdHkobWF0Y2hpbmdEcml2ZXJzKSkge1xuICAgICAgICBpZiAodGhpcy5zdG9yYWdlQ2xpZW50ICYmICFkaWRTdG9yYWdlU3luYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgc3luY0Nocm9tZWRyaXZlcnMoY2hyb21lVmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHN5bmNocm9uaXplIGxvY2FsIGNocm9tZWRyaXZlcnMgd2l0aCB0aGUgcmVtb3RlIHN0b3JhZ2UgYXQgJHtDRF9DRE59OiBgICtcbiAgICAgICAgICAgICAgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdXRvZG93bmxvYWRTdWdnZXN0aW9uID1cbiAgICAgICAgICAnWW91IGNvdWxkIGFsc28gdHJ5IHRvIGVuYWJsZSBhdXRvbWF0ZWQgY2hyb21lZHJpdmVycyBkb3dubG9hZCBzZXJ2ZXIgZmVhdHVyZSc7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ2hyb21lZHJpdmVyIGZvdW5kIHRoYXQgY2FuIGF1dG9tYXRlIENocm9tZSAnJHtjaHJvbWVWZXJzaW9ufScuIGAgK1xuICAgICAgICAgICghdGhpcy5zdG9yYWdlQ2xpZW50ID8gYCR7YXV0b2Rvd25sb2FkU3VnZ2VzdGlvbn0uIGAgOiAnJykgK1xuICAgICAgICAgIGBTZWUgJHtDSFJPTUVEUklWRVJfVFVUT1JJQUx9IGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmluUGF0aCA9IG1hdGNoaW5nRHJpdmVyc1swXS5leGVjdXRhYmxlO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kICR7dXRpbC5wbHVyYWxpemUoJ2V4ZWN1dGFibGUnLCBtYXRjaGluZ0RyaXZlcnMubGVuZ3RoLCB0cnVlKX0gYCArXG4gICAgICAgIGBjYXBhYmxlIG9mIGF1dG9tYXRpbmcgQ2hyb21lICcke2Nocm9tZVZlcnNpb259Jy5cXG5DaG9vc2luZyB0aGUgbW9zdCByZWNlbnQsICcke2JpblBhdGh9Jy5gKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdJZiBhIHNwZWNpZmljIHZlcnNpb24gaXMgcmVxdWlyZWQsIHNwZWNpZnkgaXQgd2l0aCB0aGUgYGNocm9tZWRyaXZlckV4ZWN1dGFibGVgJyArXG4gICAgICAgICdkZXNpcmVkIGNhcGFiaWxpdHkuJyk7XG4gICAgICByZXR1cm4gYmluUGF0aDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgfSB3aGlsZSAodHJ1ZSk7XG4gIH1cblxuICBhc3luYyBpbml0Q2hyb21lZHJpdmVyUGF0aCAoKSB7XG4gICAgaWYgKHRoaXMuZXhlY3V0YWJsZVZlcmlmaWVkKSByZXR1cm47IC8vZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuXG4gICAgLy8gdGhlIGV4ZWN1dGFibGUgbWlnaHQgYmUgc2V0IChpZiBwYXNzZWQgaW4pXG4gICAgLy8gb3Igd2UgbWlnaHQgd2FudCB0byB1c2UgdGhlIGJhc2ljIG9uZSBpbnN0YWxsZWQgd2l0aCB0aGlzIGRyaXZlclxuICAgIC8vIG9yIHdlIHdhbnQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBvbmVcbiAgICBpZiAoIXRoaXMuY2hyb21lZHJpdmVyKSB7XG4gICAgICB0aGlzLmNocm9tZWRyaXZlciA9IHRoaXMudXNlU3lzdGVtRXhlY3V0YWJsZVxuICAgICAgICA/IGF3YWl0IGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgoKVxuICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q29tcGF0aWJsZUNocm9tZWRyaXZlcigpO1xuICAgIH1cblxuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHRoaXMuY2hyb21lZHJpdmVyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gdXNlIGEgY2hyb21lZHJpdmVyIGJpbmFyeSBhdCB0aGUgcGF0aCBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNocm9tZWRyaXZlcn0sIGJ1dCBpdCBkb2Vzbid0IGV4aXN0IWApO1xuICAgIH1cbiAgICB0aGlzLmV4ZWN1dGFibGVWZXJpZmllZCA9IHRydWU7XG4gICAgdGhpcy5sb2cuaW5mbyhgU2V0IGNocm9tZWRyaXZlciBiaW5hcnkgYXM6ICR7dGhpcy5jaHJvbWVkcml2ZXJ9YCk7XG4gIH1cblxuICBzeW5jUHJvdG9jb2wgKGNkVmVyc2lvbiA9IG51bGwpIHtcbiAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoY2RWZXJzaW9uKTtcbiAgICBpZiAoIWNvZXJjZWRWZXJzaW9uIHx8IGNvZXJjZWRWZXJzaW9uLm1ham9yIDwgTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENocm9tZWRyaXZlciB2LiAke2NkVmVyc2lvbn0gZG9lcyBub3QgZnVsbHkgc3VwcG9ydCAke1BST1RPQ09MUy5XM0N9IHByb3RvY29sLiBgICtcbiAgICAgICAgYERlZmF1bHRpbmcgdG8gJHtQUk9UT0NPTFMuTUpTT05XUH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2hyb21lT3B0aW9ucyA9IGdldENhcFZhbHVlKHRoaXMuY2FwYWJpbGl0aWVzLCAnY2hyb21lT3B0aW9ucycsIHt9KTtcbiAgICBpZiAoY2hyb21lT3B0aW9ucy53M2MgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBDaHJvbWVkcml2ZXIgdi4gJHtjZFZlcnNpb259IHN1cHBvcnRzICR7UFJPVE9DT0xTLlczQ30gcHJvdG9jb2wsIGAgK1xuICAgICAgICBgYnV0ICR7UFJPVE9DT0xTLk1KU09OV1B9IG9uZSBoYXMgYmVlbiBleHBsaWNpdGx5IHJlcXVlc3RlZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRlc2lyZWRQcm90b2NvbCA9IFBST1RPQ09MUy5XM0M7XG4gICAgLy8gZ2l2ZW4gY2FwcyBtaWdodCBub3QgYmUgcHJvcGVybHkgcHJlZml4ZWRcbiAgICAvLyBzbyB3ZSB0cnkgdG8gZml4IHRoZW0gaW4gb3JkZXIgdG8gcHJvcGVybHkgaW5pdFxuICAgIC8vIHRoZSBuZXcgVzNDIHNlc3Npb25cbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IHRvVzNjQ2FwTmFtZXModGhpcy5jYXBhYmlsaXRpZXMpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKGNhcHMsIGVtaXRTdGFydGluZ1N0YXRlID0gdHJ1ZSkge1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoY2Fwcyk7XG5cbiAgICAvLyBzZXQgdGhlIGxvZ2dpbmcgcHJlZmVyZW5jZXMgdG8gQUxMIHRoZSBjb25zb2xlIGxvZ3NcbiAgICB0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMgPSBfLmNsb25lRGVlcChnZXRDYXBWYWx1ZShjYXBzLCAnbG9nZ2luZ1ByZWZzJywge30pKTtcbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcy5icm93c2VyKSkge1xuICAgICAgdGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzLmJyb3dzZXIgPSAnQUxMJztcbiAgICB9XG5cbiAgICBpZiAoZW1pdFN0YXJ0aW5nU3RhdGUpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUQVJUSU5HKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gW2AtLXBvcnQ9JHt0aGlzLnByb3h5UG9ydH1gXTtcbiAgICBpZiAodGhpcy5hZGIgJiYgdGhpcy5hZGIuYWRiUG9ydCkge1xuICAgICAgYXJncy5wdXNoKGAtLWFkYi1wb3J0PSR7dGhpcy5hZGIuYWRiUG9ydH1gKTtcbiAgICB9XG4gICAgaWYgKF8uaXNBcnJheSh0aGlzLmNtZEFyZ3MpKSB7XG4gICAgICBhcmdzLnB1c2goLi4udGhpcy5jbWRBcmdzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubG9nUGF0aCkge1xuICAgICAgYXJncy5wdXNoKGAtLWxvZy1wYXRoPSR7dGhpcy5sb2dQYXRofWApO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNhYmxlQnVpbGRDaGVjaykge1xuICAgICAgYXJncy5wdXNoKCctLWRpc2FibGUtYnVpbGQtY2hlY2snKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctLXZlcmJvc2UnKTtcbiAgICAvLyB3aGF0IGFyZSB0aGUgcHJvY2VzcyBzdGRvdXQvc3RkZXJyIGNvbmRpdGlvbnMgd2hlcmVpbiB3ZSBrbm93IHRoYXRcbiAgICAvLyB0aGUgcHJvY2VzcyBoYXMgc3RhcnRlZCB0byBvdXIgc2F0aXNmYWN0aW9uP1xuICAgIGNvbnN0IHN0YXJ0RGV0ZWN0b3IgPSAoc3Rkb3V0KSA9PiBzdGRvdXQuc3RhcnRzV2l0aCgnU3RhcnRpbmcgJyk7XG5cbiAgICBsZXQgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICBsZXQgd2Vidmlld1ZlcnNpb247XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdENocm9tZWRyaXZlclBhdGgoKTtcbiAgICAgIGF3YWl0IHRoaXMua2lsbEFsbCgpO1xuXG4gICAgICAvLyBzZXQgdXAgb3VyIHN1YnByb2Nlc3Mgb2JqZWN0XG4gICAgICB0aGlzLnByb2MgPSBuZXcgU3ViUHJvY2Vzcyh0aGlzLmNocm9tZWRyaXZlciwgYXJncyk7XG4gICAgICBwcm9jZXNzSXNBbGl2ZSA9IHRydWU7XG5cbiAgICAgIC8vIGhhbmRsZSBsb2cgb3V0cHV0XG4gICAgICB0aGlzLnByb2Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgICAvLyBpZiB0aGUgY2Qgb3V0cHV0IGlzIG5vdCBwcmludGVkLCBmaW5kIHRoZSBjaHJvbWUgdmVyc2lvbiBhbmQgcHJpbnRcbiAgICAgICAgLy8gd2lsbCBnZXQgYSByZXNwb25zZSBsaWtlXG4gICAgICAgIC8vICAgRGV2VG9vbHMgcmVzcG9uc2U6IHtcbiAgICAgICAgLy8gICAgICBcIkFuZHJvaWQtUGFja2FnZVwiOiBcImlvLmFwcGl1bS5zYW1wbGVhcHBcIixcbiAgICAgICAgLy8gICAgICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNTUuMC4yODgzLjkxXCIsXG4gICAgICAgIC8vICAgICAgXCJQcm90b2NvbC1WZXJzaW9uXCI6IFwiMS4yXCIsXG4gICAgICAgIC8vICAgICAgXCJVc2VyLUFnZW50XCI6IFwiLi4uXCIsXG4gICAgICAgIC8vICAgICAgXCJXZWJLaXQtVmVyc2lvblwiOiBcIjUzNy4zNlwiXG4gICAgICAgIC8vICAgfVxuICAgICAgICBjb25zdCBvdXQgPSBzdGRvdXQgKyBzdGRlcnI7XG4gICAgICAgIGxldCBtYXRjaCA9IC9cIkJyb3dzZXJcIjogXCIoLiopXCIvLmV4ZWMob3V0KTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgd2Vidmlld1ZlcnNpb24gPSBtYXRjaFsxXTtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2VidmlldyB2ZXJzaW9uOiAnJHt3ZWJ2aWV3VmVyc2lvbn0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhbHNvIHByaW50IGNocm9tZWRyaXZlciB2ZXJzaW9uIHRvIGxvZ3NcbiAgICAgICAgLy8gd2lsbCBvdXRwdXQgc29tZXRoaW5nIGxpa2VcbiAgICAgICAgLy8gIFN0YXJ0aW5nIENocm9tZURyaXZlciAyLjMzLjUwNjEwNiAoOGEwNmMzOWM0NTgyZmJmYmFiNjk2NmRiYjFjMzhhOTE3M2JmYjFhMikgb24gcG9ydCA5NTE1XG4gICAgICAgIG1hdGNoID0gL1N0YXJ0aW5nIENocm9tZURyaXZlciAoWy5cXGRdKykvLmV4ZWMob3V0KTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYENocm9tZWRyaXZlciB2ZXJzaW9uOiAnJHttYXRjaFsxXX0nYCk7XG4gICAgICAgICAgdGhpcy5zeW5jUHJvdG9jb2wobWF0Y2hbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZ2l2ZSB0aGUgb3V0cHV0IGlmIGl0IGlzIHJlcXVlc3RlZFxuICAgICAgICBpZiAodGhpcy52ZXJib3NlKSB7XG4gICAgICAgICAgZm9yIChsZXQgbGluZSBvZiAoc3Rkb3V0IHx8ICcnKS50cmltKCkuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpLmxlbmd0aCkgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBbU1RET1VUXSAke2xpbmV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGxpbmUgb2YgKHN0ZGVyciB8fCAnJykudHJpbSgpLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgaWYgKCFsaW5lLnRyaW0oKS5sZW5ndGgpIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvcihgW1NUREVSUl0gJHtsaW5lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGhhbmRsZSBvdXQtb2YtYm91bmQgZXhpdCBieSBzaW1wbHkgZW1pdHRpbmcgYSBzdG9wcGVkIHN0YXRlXG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHByb2Nlc3NJc0FsaXZlID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQSU5HICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORykge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGBDaHJvbWVkcml2ZXIgZXhpdGVkIHVuZXhwZWN0ZWRseSB3aXRoIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWA7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBTcGF3bmluZyBjaHJvbWVkcml2ZXIgd2l0aDogJHt0aGlzLmNocm9tZWRyaXZlcn0gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICAgIC8vIHN0YXJ0IHN1YnByb2MgYW5kIHdhaXQgZm9yIHN0YXJ0RGV0ZWN0b3JcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydChzdGFydERldGVjdG9yKTtcbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvck9ubGluZSgpO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydFNlc3Npb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlKTtcbiAgICAgIHRoaXMuZW1pdChDaHJvbWVkcml2ZXIuRVZFTlRfRVJST1IsIGUpO1xuICAgICAgLy8ganVzdCBiZWNhdXNlIHdlIGhhZCBhbiBlcnJvciBkb2Vzbid0IG1lYW4gdGhlIGNocm9tZWRyaXZlciBwcm9jZXNzXG4gICAgICAvLyBmaW5pc2hlZDsgd2Ugc2hvdWxkIGNsZWFuIHVwIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHByb2Nlc3NJc0FsaXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgICAvLyBvZnRlbiB0aGUgdXNlcidzIENocm9tZSB2ZXJzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHZlcnNpb24gb2YgQ2hyb21lZHJpdmVyXG4gICAgICBpZiAoZS5tZXNzYWdlLmluY2x1ZGVzKCdDaHJvbWUgdmVyc2lvbiBtdXN0IGJlJykpIHtcbiAgICAgICAgbWVzc2FnZSArPSAnVW5hYmxlIHRvIGF1dG9tYXRlIENocm9tZSB2ZXJzaW9uIGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHZlcnNpb24gb2YgQ2hyb21lZHJpdmVyLlxcbic7XG4gICAgICAgIGlmICh3ZWJ2aWV3VmVyc2lvbikge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYENocm9tZSB2ZXJzaW9uIG9uIHRoZSBkZXZpY2U6ICR7d2Vidmlld1ZlcnNpb259XFxuYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyID0gL0Nocm9tZSB2ZXJzaW9uIG11c3QgYmUgKC4rKS8uZXhlYyhlLm1lc3NhZ2UpPy5bMV0gfHwgJyc7XG4gICAgICAgIGlmICh2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyKSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBgQ2hyb21lZHJpdmVyIHN1cHBvcnRzIENocm9tZSB2ZXJzaW9uKHMpOiAke3ZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXJ9XFxuYDtcbiAgICAgICAgfVxuICAgICAgICBtZXNzYWdlICs9IGBWaXNpdCAnJHtDSFJPTUVEUklWRVJfVFVUT1JJQUx9JyB0byB0cm91Ymxlc2hvb3QgdGhlIHByb2JsZW0uXFxuYDtcbiAgICAgIH1cblxuICAgICAgbWVzc2FnZSArPSBlLm1lc3NhZ2U7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHNlc3Npb25JZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9PTkxJTkUgPyB0aGlzLmp3cHJveHkuc2Vzc2lvbklkIDogbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHJlc3RhcnQgKCkge1xuICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RhcnRpbmcgY2hyb21lZHJpdmVyJyk7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9PTkxJTkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHJlc3RhcnQgd2hlbiB3ZSdyZSBub3Qgb25saW5lXCIpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9SRVNUQVJUSU5HKTtcbiAgICBhd2FpdCB0aGlzLnN0b3AoZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnQodGhpcy5jYXBhYmlsaXRpZXMsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JPbmxpbmUgKCkge1xuICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgQ0QgaGFzbid0IGNyYXNoZWRcbiAgICBsZXQgY2hyb21lZHJpdmVyU3RvcHBlZCA9IGZhbHNlO1xuICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoMjAsIDIwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIC8vIHdlIGFyZSBlaXRoZXIgc3RvcHBlZCBvciBzdG9wcGluZywgc28gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICAgICAgY2hyb21lZHJpdmVyU3RvcHBlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgfSk7XG4gICAgaWYgKGNocm9tZWRyaXZlclN0b3BwZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hyb21lRHJpdmVyIGNyYXNoZWQgZHVyaW5nIHN0YXJ0dXAuJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gIH1cblxuICBhc3luYyBzdGFydFNlc3Npb24gKCkge1xuICAgIGNvbnN0IHNlc3Npb25DYXBzID0gdGhpcy5kZXNpcmVkUHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0NcbiAgICAgID8ge2NhcGFiaWxpdGllczoge2Fsd2F5c01hdGNoOiB0aGlzLmNhcGFiaWxpdGllc319XG4gICAgICA6IHtkZXNpcmVkQ2FwYWJpbGl0aWVzOiB0aGlzLmNhcGFiaWxpdGllc307XG4gICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgJHt0aGlzLmRlc2lyZWRQcm90b2NvbH0gQ2hyb21lZHJpdmVyIHNlc3Npb24gd2l0aCBjYXBhYmlsaXRpZXM6IGAgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkNhcHMsIG51bGwsIDIpKTtcbiAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHNlc3Npb25DYXBzKTtcbiAgICB0aGlzLmxvZy5wcmVmaXggPSBnZW5lcmF0ZUxvZ1ByZWZpeCh0aGlzLCB0aGlzLmp3cHJveHkuc2Vzc2lvbklkKTtcbiAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9PTkxJTkUpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoZW1pdFN0YXRlcyA9IHRydWUpIHtcbiAgICBpZiAoZW1pdFN0YXRlcykge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcpO1xuICAgIH1cbiAgICBjb25zdCBydW5TYWZlU3RlcCA9IGFzeW5jIChmKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGUubWVzc2FnZSk7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICAgICAgfVxuICAgIH07XG4gICAgYXdhaXQgcnVuU2FmZVN0ZXAoKCkgPT4gdGhpcy5qd3Byb3h5LmNvbW1hbmQoJycsICdERUxFVEUnKSk7XG4gICAgYXdhaXQgcnVuU2FmZVN0ZXAoKCkgPT4gdGhpcy5wcm9jLnN0b3AoJ1NJR1RFUk0nLCAyMDAwMCkpO1xuICAgIHRoaXMubG9nLnByZWZpeCA9IGdlbmVyYXRlTG9nUHJlZml4KHRoaXMpO1xuICAgIGlmIChlbWl0U3RhdGVzKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTdGF0ZSAoc3RhdGUpIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5sb2cuZGVidWcoYENoYW5nZWQgc3RhdGUgdG8gJyR7c3RhdGV9J2ApO1xuICAgIHRoaXMuZW1pdChDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCwge3N0YXRlfSk7XG4gIH1cblxuICBhc3luYyBzZW5kQ29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQodXJsLCBtZXRob2QsIGJvZHkpO1xuICB9XG5cbiAgYXN5bmMgcHJveHlSZXEgKHJlcSwgcmVzKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuandwcm94eS5wcm94eVJlcVJlcyhyZXEsIHJlcyk7XG4gIH1cblxuICBhc3luYyBraWxsQWxsICgpIHtcbiAgICBsZXQgY21kID0gc3lzdGVtLmlzV2luZG93cygpXG4gICAgICA/IGB3bWljIHByb2Nlc3Mgd2hlcmUgXCJjb21tYW5kbGluZSBsaWtlICclY2hyb21lZHJpdmVyLmV4ZSUtLXBvcnQ9JHt0aGlzLnByb3h5UG9ydH0lJ1wiIGRlbGV0ZWBcbiAgICAgIDogYHBraWxsIC0xNSAtZiBcIiR7dGhpcy5jaHJvbWVkcml2ZXJ9LiotLXBvcnQ9JHt0aGlzLnByb3h5UG9ydH1cImA7XG4gICAgdGhpcy5sb2cuZGVidWcoYEtpbGxpbmcgYW55IG9sZCBjaHJvbWVkcml2ZXJzLCBydW5uaW5nOiAke2NtZH1gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgKEIucHJvbWlzaWZ5KGNwLmV4ZWMpKShjbWQpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1N1Y2Nlc3NmdWxseSBjbGVhbmVkIHVwIG9sZCBjaHJvbWVkcml2ZXJzJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKCdObyBvbGQgY2hyb21lZHJpdmVycyBzZWVtIHRvIGV4aXN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBjb25zdCB1ZGlkSW5kZXggPSB0aGlzLmFkYi5leGVjdXRhYmxlLmRlZmF1bHRBcmdzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbSA9PT0gJy1zJyk7XG4gICAgICBjb25zdCB1ZGlkID0gdWRpZEluZGV4ID4gLTEgPyB0aGlzLmFkYi5leGVjdXRhYmxlLmRlZmF1bHRBcmdzW3VkaWRJbmRleCArIDFdIDogbnVsbDtcblxuICAgICAgaWYgKHVkaWQpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIHRoaXMgZGV2aWNlJ3MgYWRiIGZvcndhcmRlZCBwb3J0IHNvY2tldCBjb25uZWN0aW9uczogJHt1ZGlkfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIGFueSBvbGQgYWRiIGZvcndhcmRlZCBwb3J0IHNvY2tldCBjb25uZWN0aW9uc2ApO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKGxldCBjb25uIG9mIGF3YWl0IHRoaXMuYWRiLmdldEZvcndhcmRMaXN0KCkpIHtcbiAgICAgICAgICAvLyBjaHJvbWVkcml2ZXIgd2lsbCBhc2sgQURCIHRvIGZvcndhcmQgYSBwb3J0IGxpa2UgXCJkZXZpY2VJZCB0Y3A6cG9ydCBsb2NhbGFic3RyYWN0OndlYnZpZXdfZGV2dG9vbHNfcmVtb3RlX3BvcnRcIlxuICAgICAgICAgIGlmICghKGNvbm4uaW5jbHVkZXMoJ3dlYnZpZXdfZGV2dG9vbHMnKSAmJiAoIXVkaWQgfHwgY29ubi5pbmNsdWRlcyh1ZGlkKSkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgcGFyYW1zID0gY29ubi5zcGxpdCgvXFxzKy8pO1xuICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQocGFyYW1zWzFdLnJlcGxhY2UoL1tcXERdKi8sICcnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGNsZWFuIGZvcndhcmRlZCBwb3J0cy4gRXJyb3I6ICcke2Vyci5tZXNzYWdlfScuIENvbnRpbnVpbmcuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFzV29ya2luZ1dlYnZpZXcgKCkge1xuICAgIC8vIHNvbWV0aW1lcyBjaHJvbWVkcml2ZXIgc3RvcHMgYXV0b21hdGluZyB3ZWJ2aWV3cy4gdGhpcyBtZXRob2QgcnVucyBhXG4gICAgLy8gc2ltcGxlIGNvbW1hbmQgdG8gZGV0ZXJtaW5lIG91ciBzdGF0ZSwgYW5kIHJlc3BvbmRzIGFjY29yZGluZ2x5XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvdXJsJywgJ0dFVCcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5DaHJvbWVkcml2ZXIuRVZFTlRfRVJST1IgPSAnY2hyb21lZHJpdmVyX2Vycm9yJztcbkNocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VEID0gJ3N0YXRlQ2hhbmdlZCc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCA9ICdzdG9wcGVkJztcbkNocm9tZWRyaXZlci5TVEFURV9TVEFSVElORyA9ICdzdGFydGluZyc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FID0gJ29ubGluZSc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcgPSAnc3RvcHBpbmcnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcgPSAncmVzdGFydGluZyc7XG5cbmV4cG9ydCB7IENocm9tZWRyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgQ2hyb21lZHJpdmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLG1DQUFtQyxHQUFHLEVBQTVDO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLFdBQXJCO0FBQ0EsTUFBTUMsK0JBQStCLEdBQUcsRUFBeEM7QUFDQSxNQUFNQyxZQUFZLEdBQUcsSUFBckI7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxvQkFBekI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyw0QkFBaEM7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6Qiw0QkFEeUIsRUFFekIscUJBRnlCLENBQTNCO0FBSUEsTUFBTUMscUJB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
|
package/build/lib/install.js
CHANGED
|
@@ -51,7 +51,5 @@ async function install() {
|
|
|
51
51
|
|
|
52
52
|
async function doInstall() {
|
|
53
53
|
await install();
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2luc3RhbGwuanMiLCJuYW1lcyI6WyJET1dOTE9BRF9USU1FT1VUX01TIiwiTEFURVNUX1ZFUlNJT04iLCJmb3JtYXRDZFZlcnNpb24iLCJ2ZXIiLCJyZXRyaWV2ZURhdGEiLCJDRF9DRE4iLCJhY2NlcHQiLCJ0aW1lb3V0IiwidHJpbSIsInByZXBhcmVDaHJvbWVkcml2ZXJEaXIiLCJwbGF0Zm9ybU5hbWUiLCJjaHJvbWVkcml2ZXJEaXIiLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJmcyIsImV4aXN0cyIsIm1rZGlycCIsImluc3RhbGwiLCJvc0luZm8iLCJnZXRPc0luZm8iLCJjbGllbnQiLCJDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IiwibmFtZSIsInN5bmNEcml2ZXJzIiwidmVyc2lvbnMiLCJDRF9WRVIiLCJkb0luc3RhbGwiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvaW5zdGFsbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgbWtkaXJwIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgZnJvbSAnLi9zdG9yYWdlLWNsaWVudCc7XG5pbXBvcnQge1xuICBDRF9DRE4sIENEX1ZFUiwgcmV0cmlldmVEYXRhLCBnZXRPc0luZm8sIGdldENocm9tZWRyaXZlckRpcixcbn0gZnJvbSAnLi91dGlscyc7XG5cblxuY29uc3QgRE9XTkxPQURfVElNRU9VVF9NUyA9IDE1ICogMTAwMDtcbmNvbnN0IExBVEVTVF9WRVJTSU9OID0gJ0xBVEVTVCc7XG5cbmFzeW5jIGZ1bmN0aW9uIGZvcm1hdENkVmVyc2lvbiAodmVyKSB7XG4gIHJldHVybiB2ZXIgPT09IExBVEVTVF9WRVJTSU9OXG4gICAgPyAoYXdhaXQgcmV0cmlldmVEYXRhKGAke0NEX0NETn0vTEFURVNUX1JFTEVBU0VgLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IERPV05MT0FEX1RJTUVPVVRfTVMgfSkpLnRyaW0oKVxuICAgIDogdmVyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQ2hyb21lZHJpdmVyRGlyIChwbGF0Zm9ybU5hbWUpIHtcbiAgY29uc3QgY2hyb21lZHJpdmVyRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKHBsYXRmb3JtTmFtZSk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGNocm9tZWRyaXZlckRpcikpIHtcbiAgICBhd2FpdCBta2RpcnAoY2hyb21lZHJpdmVyRGlyKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyRGlyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsICgpIHtcbiAgY29uc3Qgb3NJbmZvID0gYXdhaXQgZ2V0T3NJbmZvKCk7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50KHtcbiAgICBjaHJvbWVkcml2ZXJEaXI6IGF3YWl0IHByZXBhcmVDaHJvbWVkcml2ZXJEaXIob3NJbmZvLm5hbWUpLFxuICB9KTtcbiAgYXdhaXQgY2xpZW50LnN5bmNEcml2ZXJzKHtcbiAgICBvc0luZm8sXG4gICAgdmVyc2lvbnM6IFthd2FpdCBmb3JtYXRDZFZlcnNpb24oQ0RfVkVSKV0sXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb0luc3RhbGwgKCkge1xuICBhd2FpdCBpbnN0YWxsKCk7XG59XG5cbmV4cG9ydCB7IGluc3RhbGwsIGRvSW5zdGFsbCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFLQSxNQUFNQSxtQkFBbUIsR0FBRyxLQUFLLElBQWpDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLFFBQXZCOztBQUVBLGVBQWVDLGVBQWYsQ0FBZ0NDLEdBQWhDLEVBQXFDO0VBQ25DLE9BQU9BLEdBQUcsS0FBS0YsY0FBUixHQUNILENBQUMsTUFBTSxJQUFBRyxtQkFBQSxFQUFjLEdBQUVDLGFBQU8saUJBQXZCLEVBQXlDO0lBQ2hELGNBQWMsUUFEa0M7SUFFaERDLE1BQU0sRUFBRTtFQUZ3QyxDQUF6QyxFQUdOO0lBQUVDLE9BQU8sRUFBRVA7RUFBWCxDQUhNLENBQVAsRUFHb0NRLElBSHBDLEVBREcsR0FLSEwsR0FMSjtBQU1EOztBQUVELGVBQWVNLHNCQUFmLENBQXVDQyxZQUF2QyxFQUFxRDtFQUNuRCxNQUFNQyxlQUFlLEdBQUcsSUFBQUMseUJBQUEsRUFBbUJGLFlBQW5CLENBQXhCOztFQUNBLElBQUksRUFBQyxNQUFNRyxXQUFBLENBQUdDLE1BQUgsQ0FBVUgsZUFBVixDQUFQLENBQUosRUFBdUM7SUFDckMsTUFBTSxJQUFBSSxlQUFBLEVBQU9KLGVBQVAsQ0FBTjtFQUNEOztFQUNELE9BQU9BLGVBQVA7QUFDRDs7QUFFRCxlQUFlSyxPQUFmLEdBQTBCO0VBQ3hCLE1BQU1DLE1BQU0sR0FBRyxNQUFNLElBQUFDLGdCQUFBLEdBQXJCO0VBQ0EsTUFBTUMsTUFBTSxHQUFHLElBQUlDLHNCQUFKLENBQThCO0lBQzNDVCxlQUFlLEVBQUUsTUFBTUYsc0JBQXNCLENBQUNRLE1BQU0sQ0FBQ0ksSUFBUjtFQURGLENBQTlCLENBQWY7RUFHQSxNQUFNRixNQUFNLENBQUNHLFdBQVAsQ0FBbUI7SUFDdkJMLE1BRHVCO0lBRXZCTSxRQUFRLEVBQUUsQ0FBQyxNQUFNckIsZUFBZSxDQUFDc0IsYUFBRCxDQUF0QjtFQUZhLENBQW5CLENBQU47QUFJRDs7QUFFRCxlQUFlQyxTQUFmLEdBQTRCO0VBQzFCLE1BQU1ULE9BQU8sRUFBYjtBQUNEIn0=
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJET1dOTE9BRF9USU1FT1VUX01TIiwiTEFURVNUX1ZFUlNJT04iLCJmb3JtYXRDZFZlcnNpb24iLCJ2ZXIiLCJyZXRyaWV2ZURhdGEiLCJDRF9DRE4iLCJhY2NlcHQiLCJ0aW1lb3V0IiwidHJpbSIsInByZXBhcmVDaHJvbWVkcml2ZXJEaXIiLCJwbGF0Zm9ybU5hbWUiLCJjaHJvbWVkcml2ZXJEaXIiLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJmcyIsImV4aXN0cyIsIm1rZGlycCIsImluc3RhbGwiLCJvc0luZm8iLCJnZXRPc0luZm8iLCJjbGllbnQiLCJDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IiwibmFtZSIsInN5bmNEcml2ZXJzIiwidmVyc2lvbnMiLCJDRF9WRVIiLCJkb0luc3RhbGwiXSwic291cmNlcyI6WyIuLi8uLi9saWIvaW5zdGFsbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgbWtkaXJwIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgZnJvbSAnLi9zdG9yYWdlLWNsaWVudCc7XG5pbXBvcnQge1xuICBDRF9DRE4sIENEX1ZFUiwgcmV0cmlldmVEYXRhLCBnZXRPc0luZm8sIGdldENocm9tZWRyaXZlckRpcixcbn0gZnJvbSAnLi91dGlscyc7XG5cblxuY29uc3QgRE9XTkxPQURfVElNRU9VVF9NUyA9IDE1ICogMTAwMDtcbmNvbnN0IExBVEVTVF9WRVJTSU9OID0gJ0xBVEVTVCc7XG5cbmFzeW5jIGZ1bmN0aW9uIGZvcm1hdENkVmVyc2lvbiAodmVyKSB7XG4gIHJldHVybiB2ZXIgPT09IExBVEVTVF9WRVJTSU9OXG4gICAgPyAoYXdhaXQgcmV0cmlldmVEYXRhKGAke0NEX0NETn0vTEFURVNUX1JFTEVBU0VgLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IERPV05MT0FEX1RJTUVPVVRfTVMgfSkpLnRyaW0oKVxuICAgIDogdmVyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQ2hyb21lZHJpdmVyRGlyIChwbGF0Zm9ybU5hbWUpIHtcbiAgY29uc3QgY2hyb21lZHJpdmVyRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKHBsYXRmb3JtTmFtZSk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGNocm9tZWRyaXZlckRpcikpIHtcbiAgICBhd2FpdCBta2RpcnAoY2hyb21lZHJpdmVyRGlyKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyRGlyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsICgpIHtcbiAgY29uc3Qgb3NJbmZvID0gYXdhaXQgZ2V0T3NJbmZvKCk7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50KHtcbiAgICBjaHJvbWVkcml2ZXJEaXI6IGF3YWl0IHByZXBhcmVDaHJvbWVkcml2ZXJEaXIob3NJbmZvLm5hbWUpLFxuICB9KTtcbiAgYXdhaXQgY2xpZW50LnN5bmNEcml2ZXJzKHtcbiAgICBvc0luZm8sXG4gICAgdmVyc2lvbnM6IFthd2FpdCBmb3JtYXRDZFZlcnNpb24oQ0RfVkVSKV0sXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb0luc3RhbGwgKCkge1xuICBhd2FpdCBpbnN0YWxsKCk7XG59XG5cbmV4cG9ydCB7IGluc3RhbGwsIGRvSW5zdGFsbCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFLQSxNQUFNQSxtQkFBbUIsR0FBRyxLQUFLLElBQWpDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLFFBQXZCOztBQUVBLGVBQWVDLGVBQWYsQ0FBZ0NDLEdBQWhDLEVBQXFDO0VBQ25DLE9BQU9BLEdBQUcsS0FBS0YsY0FBUixHQUNILENBQUMsTUFBTSxJQUFBRyxtQkFBQSxFQUFjLEdBQUVDLGFBQU8saUJBQXZCLEVBQXlDO0lBQ2hELGNBQWMsUUFEa0M7SUFFaERDLE1BQU0sRUFBRTtFQUZ3QyxDQUF6QyxFQUdOO0lBQUVDLE9BQU8sRUFBRVA7RUFBWCxDQUhNLENBQVAsRUFHb0NRLElBSHBDLEVBREcsR0FLSEwsR0FMSjtBQU1EOztBQUVELGVBQWVNLHNCQUFmLENBQXVDQyxZQUF2QyxFQUFxRDtFQUNuRCxNQUFNQyxlQUFlLEdBQUcsSUFBQUMseUJBQUEsRUFBbUJGLFlBQW5CLENBQXhCOztFQUNBLElBQUksRUFBQyxNQUFNRyxXQUFBLENBQUdDLE1BQUgsQ0FBVUgsZUFBVixDQUFQLENBQUosRUFBdUM7SUFDckMsTUFBTSxJQUFBSSxlQUFBLEVBQU9KLGVBQVAsQ0FBTjtFQUNEOztFQUNELE9BQU9BLGVBQVA7QUFDRDs7QUFFRCxlQUFlSyxPQUFmLEdBQTBCO0VBQ3hCLE1BQU1DLE1BQU0sR0FBRyxNQUFNLElBQUFDLGdCQUFBLEdBQXJCO0VBQ0EsTUFBTUMsTUFBTSxHQUFHLElBQUlDLHNCQUFKLENBQThCO0lBQzNDVCxlQUFlLEVBQUUsTUFBTUYsc0JBQXNCLENBQUNRLE1BQU0sQ0FBQ0ksSUFBUjtFQURGLENBQTlCLENBQWY7RUFHQSxNQUFNRixNQUFNLENBQUNHLFdBQVAsQ0FBbUI7SUFDdkJMLE1BRHVCO0lBRXZCTSxRQUFRLEVBQUUsQ0FBQyxNQUFNckIsZUFBZSxDQUFDc0IsYUFBRCxDQUF0QjtFQUZhLENBQW5CLENBQU47QUFJRDs7QUFFRCxlQUFlQyxTQUFmLEdBQTRCO0VBQzFCLE1BQU1ULE9BQU8sRUFBYjtBQUNEIn0=
|
|
@@ -35,7 +35,5 @@ function toW3cCapNames(originalCaps = {}) {
|
|
|
35
35
|
acc[toW3cCapName(key)] = value;
|
|
36
36
|
return acc;
|
|
37
37
|
}, {});
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Byb3RvY29sLWhlbHBlcnMuanMiLCJuYW1lcyI6WyJXM0NfUFJFRklYIiwidG9XM2NDYXBOYW1lIiwiY2FwTmFtZSIsIl8iLCJpc1N0cmluZyIsImluY2x1ZGVzIiwiaXNTdGFuZGFyZENhcCIsImdldENhcFZhbHVlIiwiYWxsQ2FwcyIsInJhd0NhcE5hbWUiLCJkZWZhdWx0VmFsdWUiLCJjYXBWYWx1ZSIsInRvUGFpcnMiLCJ0b1czY0NhcE5hbWVzIiwib3JpZ2luYWxDYXBzIiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJrZXkiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvcHJvdG9jb2wtaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgaXNTdGFuZGFyZENhcCB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBXM0NfUFJFRklYID0gJ2dvb2c6JztcblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lIChjYXBOYW1lKSB7XG4gIHJldHVybiAoXy5pc1N0cmluZyhjYXBOYW1lKSAmJiAhY2FwTmFtZS5pbmNsdWRlcygnOicpICYmICFpc1N0YW5kYXJkQ2FwKGNhcE5hbWUpKVxuICAgID8gYCR7VzNDX1BSRUZJWH0ke2NhcE5hbWV9YFxuICAgIDogY2FwTmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FwVmFsdWUgKGFsbENhcHMgPSB7fSwgcmF3Q2FwTmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGZvciAoY29uc3QgW2NhcE5hbWUsIGNhcFZhbHVlXSBvZiBfLnRvUGFpcnMoYWxsQ2FwcykpIHtcbiAgICBpZiAodG9XM2NDYXBOYW1lKGNhcE5hbWUpID09PSB0b1czY0NhcE5hbWUocmF3Q2FwTmFtZSkpIHtcbiAgICAgIHJldHVybiBjYXBWYWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lcyAob3JpZ2luYWxDYXBzID0ge30pIHtcbiAgcmV0dXJuIF8ucmVkdWNlKG9yaWdpbmFsQ2FwcywgKGFjYywgdmFsdWUsIGtleSkgPT4ge1xuICAgIGFjY1t0b1czY0NhcE5hbWUoa2V5KV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCB7IHRvVzNjQ2FwTmFtZXMsIGdldENhcFZhbHVlIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLFVBQVUsR0FBRyxPQUFuQjs7QUFFQSxTQUFTQyxZQUFULENBQXVCQyxPQUF2QixFQUFnQztFQUM5QixPQUFRQyxlQUFBLENBQUVDLFFBQUYsQ0FBV0YsT0FBWCxLQUF1QixDQUFDQSxPQUFPLENBQUNHLFFBQVIsQ0FBaUIsR0FBakIsQ0FBeEIsSUFBaUQsQ0FBQyxJQUFBQyxxQkFBQSxFQUFjSixPQUFkLENBQW5ELEdBQ0YsR0FBRUYsVUFBVyxHQUFFRSxPQUFRLEVBRHJCLEdBRUhBLE9BRko7QUFHRDs7QUFFRCxTQUFTSyxXQUFULENBQXNCQyxPQUFPLEdBQUcsRUFBaEMsRUFBb0NDLFVBQXBDLEVBQWdEQyxZQUFoRCxFQUE4RDtFQUM1RCxLQUFLLE1BQU0sQ0FBQ1IsT0FBRCxFQUFVUyxRQUFWLENBQVgsSUFBa0NSLGVBQUEsQ0FBRVMsT0FBRixDQUFVSixPQUFWLENBQWxDLEVBQXNEO0lBQ3BELElBQUlQLFlBQVksQ0FBQ0MsT0FBRCxDQUFaLEtBQTBCRCxZQUFZLENBQUNRLFVBQUQsQ0FBMUMsRUFBd0Q7TUFDdEQsT0FBT0UsUUFBUDtJQUNEO0VBQ0Y7O0VBQ0QsT0FBT0QsWUFBUDtBQUNEOztBQUVELFNBQVNHLGFBQVQsQ0FBd0JDLFlBQVksR0FBRyxFQUF2QyxFQUEyQztFQUN6QyxPQUFPWCxlQUFBLENBQUVZLE1BQUYsQ0FBU0QsWUFBVCxFQUF1QixDQUFDRSxHQUFELEVBQU1DLEtBQU4sRUFBYUMsR0FBYixLQUFxQjtJQUNqREYsR0FBRyxDQUFDZixZQUFZLENBQUNpQixHQUFELENBQWIsQ0FBSCxHQUF5QkQsS0FBekI7SUFDQSxPQUFPRCxHQUFQO0VBQ0QsQ0FITSxFQUdKLEVBSEksQ0FBUDtBQUlEIn0=
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfUFJFRklYIiwidG9XM2NDYXBOYW1lIiwiY2FwTmFtZSIsIl8iLCJpc1N0cmluZyIsImluY2x1ZGVzIiwiaXNTdGFuZGFyZENhcCIsImdldENhcFZhbHVlIiwiYWxsQ2FwcyIsInJhd0NhcE5hbWUiLCJkZWZhdWx0VmFsdWUiLCJjYXBWYWx1ZSIsInRvUGFpcnMiLCJ0b1czY0NhcE5hbWVzIiwib3JpZ2luYWxDYXBzIiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJrZXkiXSwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdG9jb2wtaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgaXNTdGFuZGFyZENhcCB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBXM0NfUFJFRklYID0gJ2dvb2c6JztcblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lIChjYXBOYW1lKSB7XG4gIHJldHVybiAoXy5pc1N0cmluZyhjYXBOYW1lKSAmJiAhY2FwTmFtZS5pbmNsdWRlcygnOicpICYmICFpc1N0YW5kYXJkQ2FwKGNhcE5hbWUpKVxuICAgID8gYCR7VzNDX1BSRUZJWH0ke2NhcE5hbWV9YFxuICAgIDogY2FwTmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FwVmFsdWUgKGFsbENhcHMgPSB7fSwgcmF3Q2FwTmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGZvciAoY29uc3QgW2NhcE5hbWUsIGNhcFZhbHVlXSBvZiBfLnRvUGFpcnMoYWxsQ2FwcykpIHtcbiAgICBpZiAodG9XM2NDYXBOYW1lKGNhcE5hbWUpID09PSB0b1czY0NhcE5hbWUocmF3Q2FwTmFtZSkpIHtcbiAgICAgIHJldHVybiBjYXBWYWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lcyAob3JpZ2luYWxDYXBzID0ge30pIHtcbiAgcmV0dXJuIF8ucmVkdWNlKG9yaWdpbmFsQ2FwcywgKGFjYywgdmFsdWUsIGtleSkgPT4ge1xuICAgIGFjY1t0b1czY0NhcE5hbWUoa2V5KV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCB7IHRvVzNjQ2FwTmFtZXMsIGdldENhcFZhbHVlIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLFVBQVUsR0FBRyxPQUFuQjs7QUFFQSxTQUFTQyxZQUFULENBQXVCQyxPQUF2QixFQUFnQztFQUM5QixPQUFRQyxlQUFBLENBQUVDLFFBQUYsQ0FBV0YsT0FBWCxLQUF1QixDQUFDQSxPQUFPLENBQUNHLFFBQVIsQ0FBaUIsR0FBakIsQ0FBeEIsSUFBaUQsQ0FBQyxJQUFBQyxxQkFBQSxFQUFjSixPQUFkLENBQW5ELEdBQ0YsR0FBRUYsVUFBVyxHQUFFRSxPQUFRLEVBRHJCLEdBRUhBLE9BRko7QUFHRDs7QUFFRCxTQUFTSyxXQUFULENBQXNCQyxPQUFPLEdBQUcsRUFBaEMsRUFBb0NDLFVBQXBDLEVBQWdEQyxZQUFoRCxFQUE4RDtFQUM1RCxLQUFLLE1BQU0sQ0FBQ1IsT0FBRCxFQUFVUyxRQUFWLENBQVgsSUFBa0NSLGVBQUEsQ0FBRVMsT0FBRixDQUFVSixPQUFWLENBQWxDLEVBQXNEO0lBQ3BELElBQUlQLFlBQVksQ0FBQ0MsT0FBRCxDQUFaLEtBQTBCRCxZQUFZLENBQUNRLFVBQUQsQ0FBMUMsRUFBd0Q7TUFDdEQsT0FBT0UsUUFBUDtJQUNEO0VBQ0Y7O0VBQ0QsT0FBT0QsWUFBUDtBQUNEOztBQUVELFNBQVNHLGFBQVQsQ0FBd0JDLFlBQVksR0FBRyxFQUF2QyxFQUEyQztFQUN6QyxPQUFPWCxlQUFBLENBQUVZLE1BQUYsQ0FBU0QsWUFBVCxFQUF1QixDQUFDRSxHQUFELEVBQU1DLEtBQU4sRUFBYUMsR0FBYixLQUFxQjtJQUNqREYsR0FBRyxDQUFDZixZQUFZLENBQUNpQixHQUFELENBQWIsQ0FBSCxHQUF5QkQsS0FBekI7SUFDQSxPQUFPRCxHQUFQO0VBQ0QsQ0FITSxFQUdKLEVBSEksQ0FBUDtBQUlEIn0=
|
|
@@ -333,8 +333,6 @@ class ChromedriverStorageClient {
|
|
|
333
333
|
}
|
|
334
334
|
|
|
335
335
|
async syncDrivers(opts = {}) {
|
|
336
|
-
var _opts$osInfo;
|
|
337
|
-
|
|
338
336
|
if (_lodash.default.isEmpty(this.mapping)) {
|
|
339
337
|
await this.retrieveMapping(!!opts.minBrowserVersion);
|
|
340
338
|
}
|
|
@@ -343,7 +341,7 @@ class ChromedriverStorageClient {
|
|
|
343
341
|
throw new Error('Cannot retrieve chromedrivers mapping from Google storage');
|
|
344
342
|
}
|
|
345
343
|
|
|
346
|
-
const driversToSync = this.selectMatchingDrivers(
|
|
344
|
+
const driversToSync = this.selectMatchingDrivers(opts.osInfo ?? (await (0, _utils.getOsInfo)()), opts);
|
|
347
345
|
|
|
348
346
|
if (_lodash.default.isEmpty(driversToSync)) {
|
|
349
347
|
log.debug(`There are no drivers to sync. Exiting`);
|
|
@@ -385,7 +383,5 @@ class ChromedriverStorageClient {
|
|
|
385
383
|
}
|
|
386
384
|
|
|
387
385
|
var _default = ChromedriverStorageClient;
|
|
388
|
-
exports.default = _default;
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3N0b3JhZ2UtY2xpZW50LmpzIiwibmFtZXMiOlsiVElNRU9VVF9NUyIsIk1BWF9QQVJBTExFTF9ET1dOTE9BRFMiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJpc0NyY09rIiwic3JjIiwiY2hlY2tzdW0iLCJtZDUiLCJmcyIsImhhc2giLCJfIiwidG9Mb3dlciIsImZpbmRDaGlsZE5vZGUiLCJwYXJlbnQiLCJjaGlsZE5hbWUiLCJ0ZXh0IiwiaGFzQ2hpbGROb2RlcyIsImNoaWxkTm9kZUlkeCIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJjaGlsZE5vZGUiLCJsb2NhbE5hbWUiLCJjaGlsZFRleHQiLCJleHRyYWN0Tm9kZVRleHQiLCJub2RlIiwiZmlyc3RDaGlsZCIsInV0aWwiLCJoYXNWYWx1ZSIsIm5vZGVWYWx1ZSIsIkNocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJjaHJvbWVkcml2ZXJEaXIiLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJ0aW1lb3V0IiwibWFwcGluZyIsInBhcnNlTm90ZXMiLCJjb250ZW50IiwicmVzdWx0IiwidmVyc2lvbk1hdGNoIiwiZXhlYyIsInZlcnNpb24iLCJtaW5Ccm93c2VyVmVyc2lvbk1hdGNoIiwibWluQnJvd3NlclZlcnNpb24iLCJyZXRyaWV2ZUFkZGl0aW9uYWxEcml2ZXJJbmZvIiwiZHJpdmVyS2V5Iiwibm90ZXNVcmwiLCJpbmZvRGljdCIsIm5vdGVzIiwicmV0cmlldmVEYXRhIiwiYWNjZXB0IiwiZGVidWciLCJwYXJzZVN0b3JhZ2VYbWwiLCJkb2MiLCJzaG91bGRQYXJzZU5vdGVzIiwiZHJpdmVyTm9kZXMiLCJ4cGF0aCIsInNlbGVjdCIsImlzRW1wdHkiLCJwcm9taXNlcyIsImRyaXZlck5vZGUiLCJrZXkiLCJpbmNsdWRlcyIsImV0YWciLCJjZEluZm8iLCJ1cmwiLCJDRF9DRE4iLCJ0cmltIiwiZmlyc3QiLCJzcGxpdCIsIm5vdGVzUGF0aCIsImlzTm90ZXNQcmVzZW50IiwicmVkdWNlIiwiYWNjIiwiaW5mbyIsInB1c2giLCJCIiwiYWxsIiwic2l6ZSIsInJldHJpZXZlTWFwcGluZyIsInhtbCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImNsb25lRGVlcCIsInVuemlwRHJpdmVyIiwiZHN0IiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiY2hyb21lZHJpdmVyUGF0aCIsIndhbGtEaXIiLCJpdGVtUGF0aCIsImlzRGlyZWN0b3J5IiwicGF0aCIsInBhcnNlIiwibmFtZSIsIkVycm9yIiwiYmFzZW5hbWUiLCJtdiIsIm1rZGlycCIsInJpbXJhZiIsInNlbGVjdE1hdGNoaW5nRHJpdmVycyIsIm9zSW5mbyIsIm9wdHMiLCJ2ZXJzaW9ucyIsImRyaXZlcnNUb1N5bmMiLCJrZXlzIiwiZmlsdGVyIiwiY2ROYW1lIiwicGx1cmFsaXplIiwiaXNOYU4iLCJtaW5Ccm93c2VyVmVyc2lvbkludCIsInBhcnNlSW50IiwiY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIiwiY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uIiwidW5pcSIsIm1hcCIsImFyY2giLCJoYXJkd2FyZU5hbWUiLCJYNjQiLCJzb21lIiwiWDg2IiwiT1MiLCJtYWMiLCJNMV9BUkNIX1NVRkZJWCIsInBsYXRmb3JtUmUiLCJSZWdFeHAiLCJ0ZXN0IiwicmV0cmlldmVEcml2ZXIiLCJpbmRleCIsImFyY2hpdmVzUm9vdCIsImlzU3RyaWN0IiwiYXJjaGl2ZVBhdGgiLCJyZXNvbHZlIiwibmV0IiwiZG93bmxvYWRGaWxlIiwiaXNNZXRlcmVkIiwiZSIsIm1zZyIsIm1lc3NhZ2UiLCJlcnJvciIsImZpbGVOYW1lIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwidGFyZ2V0UGF0aCIsImNobW9kIiwic3luY0RyaXZlcnMiLCJnZXRPc0luZm8iLCJKU09OIiwic3RyaW5naWZ5Iiwic3luY2hyb25pemVkRHJpdmVycyIsImlkeCIsImVudHJpZXMiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvc3RvcmFnZS1jbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0Q2hyb21lZHJpdmVyRGlyLCBDRF9DRE4sIHJldHJpZXZlRGF0YSwgZ2V0T3NJbmZvLFxuICBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeHBhdGggZnJvbSAneHBhdGgnO1xuaW1wb3J0IHsgRE9NUGFyc2VyIH0gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHRlbXBEaXIsIHppcCwgdXRpbCwgbmV0IH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IFRJTUVPVVRfTVMgPSAxNTAwMDtcbmNvbnN0IE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPSA1O1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50Jyk7XG5cblxuYXN5bmMgZnVuY3Rpb24gaXNDcmNPayAoc3JjLCBjaGVja3N1bSkge1xuICBjb25zdCBtZDUgPSBhd2FpdCBmcy5oYXNoKHNyYywgJ21kNScpO1xuICByZXR1cm4gXy50b0xvd2VyKG1kNSkgPT09IF8udG9Mb3dlcihjaGVja3N1bSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRDaGlsZE5vZGUgKHBhcmVudCwgY2hpbGROYW1lID0gbnVsbCwgdGV4dCA9IG51bGwpIHtcbiAgaWYgKCFjaGlsZE5hbWUgJiYgIXRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIXBhcmVudC5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvciAobGV0IGNoaWxkTm9kZUlkeCA9IDA7IGNoaWxkTm9kZUlkeCA8IHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aDsgY2hpbGROb2RlSWR4KyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBwYXJlbnQuY2hpbGROb2Rlc1tjaGlsZE5vZGVJZHhdO1xuICAgIGlmIChjaGlsZE5hbWUgJiYgIXRleHQgJiYgY2hpbGROYW1lID09PSBjaGlsZE5vZGUubG9jYWxOYW1lKSB7XG4gICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgIH1cbiAgICBpZiAodGV4dCkge1xuICAgICAgY29uc3QgY2hpbGRUZXh0ID0gZXh0cmFjdE5vZGVUZXh0KGNoaWxkTm9kZSk7XG4gICAgICBpZiAoIWNoaWxkVGV4dCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZE5hbWUgJiYgY2hpbGROYW1lID09PSBjaGlsZE5vZGUubG9jYWxOYW1lICYmIHRleHQgPT09IGNoaWxkVGV4dCkge1xuICAgICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGlsZE5hbWUgJiYgdGV4dCA9PT0gY2hpbGRUZXh0KSB7XG4gICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0Tm9kZVRleHQgKG5vZGUpIHtcbiAgcmV0dXJuICghbm9kZSB8fCAhbm9kZS5maXJzdENoaWxkIHx8ICF1dGlsLmhhc1ZhbHVlKG5vZGUuZmlyc3RDaGlsZC5ub2RlVmFsdWUpKVxuICAgID8gbnVsbFxuICAgIDogbm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZTtcbn1cblxuXG5jbGFzcyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNocm9tZWRyaXZlckRpciA9IGdldENocm9tZWRyaXZlckRpcigpLFxuICAgICAgdGltZW91dCA9IFRJTUVPVVRfTVMsXG4gICAgfSA9IGFyZ3M7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXJEaXIgPSBjaHJvbWVkcml2ZXJEaXI7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgICB0aGlzLm1hcHBpbmcgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc1xuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IHZlcnNpb24gLSBDaHJvbWVkcml2ZXIgdmVyc2lvblxuICAgKiBvciBgbnVsbGAgaWYgaXQgY2Fubm90IGJlIGZvdW5kXG4gICAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWluQnJvd3NlclZlcnNpb24gLSBUaGUgbWluaW11bSBicm93c2VyIHZlcnNpb25cbiAgICogc3VwcG9ydGVkIGJ5IGNocm9tZWRyaXZlciBvciBgbnVsbGAgaWYgaXQgY2Fubm90IGJlIGZvdW5kXG4gICAqL1xuXG4gIC8qKlxuICAgKiBHZXRzIGFkZGl0aW9uYWwgY2hyb21lZHJpdmVyIGRldGFpbHMgZnJvbSBjaHJvbWVkcml2ZXJcbiAgICogcmVsZWFzZSBub3Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIFJlbGVhc2Ugbm90ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2hyb21lZHJpdmVyXG4gICAqIEByZXR1cm5zIHtBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc31cbiAgICovXG4gIHBhcnNlTm90ZXMgKGNvbnRlbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSAvXlxccypbLV0rQ2hyb21lRHJpdmVyW1xcRF0rKFtcXGQuXSspL2ltLmV4ZWMoY29udGVudCk7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgcmVzdWx0LnZlcnNpb24gPSB2ZXJzaW9uTWF0Y2hbMV07XG4gICAgfVxuICAgIGNvbnN0IG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2ggPSAvXlxccypTdXBwb3J0cyBDaHJvbWVbXFxEXSsoXFxkKykvaW0uZXhlYyhjb250ZW50KTtcbiAgICBpZiAobWluQnJvd3NlclZlcnNpb25NYXRjaCkge1xuICAgICAgcmVzdWx0Lm1pbkJyb3dzZXJWZXJzaW9uID0gbWluQnJvd3NlclZlcnNpb25NYXRjaFsxXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZHMgY2hyb21lZHJpdmVyIHJlbGVhc2Ugbm90ZXMgYW5kIHB1dHMgdGhlbVxuICAgKiBpbnRvIHRoZSBkaWN0aW9uYXJ5IGFyZ3VtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkcml2ZXJLZXkgLSBEcml2ZXIgdmVyc2lvbiBwbHVzIGFyY2hpdmUgbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbm90ZXNVcmwgLSBUaGUgVVJMIG9mIGNocm9tZWRyaXZlciBub3Rlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gaW5mb0RpY3QgLSBUaGUgZGljdGlvbmFyeSBjb250YWluaW5nIGRyaXZlciBpbmZvLlxuICAgKiBUaGUgbWV0aG9kIGNhbGwgbXV0YXRlcyBieSBtZXJnaW5nIGBBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc2BcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSByZWxlYXNlIG5vdGVzIGNhbm5vdCBiZSBkb3dubG9hZGVkXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZUFkZGl0aW9uYWxEcml2ZXJJbmZvIChkcml2ZXJLZXksIG5vdGVzVXJsLCBpbmZvRGljdCkge1xuICAgIGNvbnN0IG5vdGVzID0gYXdhaXQgcmV0cmlldmVEYXRhKG5vdGVzVXJsLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IHRoaXMudGltZW91dCB9KTtcbiAgICBjb25zdCB7IG1pbkJyb3dzZXJWZXJzaW9uIH0gPSB0aGlzLnBhcnNlTm90ZXMobm90ZXMpO1xuICAgIGlmICghbWluQnJvd3NlclZlcnNpb24pIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlIGRyaXZlciAnJHtkcml2ZXJLZXl9JyBkb2VzIG5vdCBjb250YWluIHZhbGlkIHJlbGVhc2Ugbm90ZXMgYXQgJHtub3Rlc1VybH0uIGAgK1xuICAgICAgICBgU2tpcHBpbmcgaXRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5mb0RpY3QubWluQnJvd3NlclZlcnNpb24gPSBtaW5Ccm93c2VyVmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgY2hyb21lZHJpdmVyIHN0b3JhZ2UgWE1MIGFuZCBzdG9yZXNcbiAgICogdGhlIHBhcnNlZCByZXN1bHRzIGludG8gYHRoaXMubWFwcGluZ2BcbiAgICpcbiAgICogQHBhcmFtIHtET01Eb2N1bWVudH0gZG9jIC0gVGhlIERPTSByZXByZXNlbnRhdGlvblxuICAgKiBvZiB0aGUgY2hyb21lZHJpdmVyIHN0b3JhZ2UgWE1MXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUGFyc2VOb3RlcyBbdHJ1ZV0gLSBJZiBzZXQgdG8gYHRydWVgXG4gICAqIHRoZW4gYWRkaXRpb25hbCBkcml2ZXJzIGluZm9ybWF0aW9uIGlzIGdvaW5nIHRvIGJlIHBhcnNlZFxuICAgKiBhbmQgYXNzaWduZWQgdG8gYHRoaXMubWFwcGluZ2BcbiAgICovXG4gIGFzeW5jIHBhcnNlU3RvcmFnZVhtbCAoZG9jLCBzaG91bGRQYXJzZU5vdGVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRyaXZlck5vZGVzID0geHBhdGguc2VsZWN0KGAvLypbbG9jYWwtbmFtZSguKT0nQ29udGVudHMnXWAsIGRvYyk7XG4gICAgbG9nLmRlYnVnKGBQYXJzZWQgJHtkcml2ZXJOb2Rlcy5sZW5ndGh9IGVudHJpZXMgZnJvbSBzdG9yYWdlIFhNTGApO1xuICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyTm9kZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGRyaXZlck5vZGUgb2YgZHJpdmVyTm9kZXMpIHtcbiAgICAgIGNvbnN0IGtleSA9IGV4dHJhY3ROb2RlVGV4dChmaW5kQ2hpbGROb2RlKGRyaXZlck5vZGUsICdLZXknKSk7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoa2V5LCAnL2Nocm9tZWRyaXZlcl8nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXRhZyA9IGV4dHJhY3ROb2RlVGV4dChmaW5kQ2hpbGROb2RlKGRyaXZlck5vZGUsICdFVGFnJykpO1xuICAgICAgaWYgKCFldGFnKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlIGVudHJ5ICcke2tleX0nIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNoZWNrc3VtLiBTa2lwcGluZyBpdGApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2RJbmZvID0ge1xuICAgICAgICB1cmw6IGAke0NEX0NETn0vJHtrZXl9YCxcbiAgICAgICAgZXRhZzogXy50cmltKGV0YWcsICdcIicpLFxuICAgICAgICB2ZXJzaW9uOiBfLmZpcnN0KGtleS5zcGxpdCgnLycpKSxcbiAgICAgIH07XG4gICAgICB0aGlzLm1hcHBpbmdba2V5XSA9IGNkSW5mbztcblxuICAgICAgY29uc3Qgbm90ZXNQYXRoID0gYCR7Y2RJbmZvLnZlcnNpb259L25vdGVzLnR4dGA7XG4gICAgICBjb25zdCBpc05vdGVzUHJlc2VudCA9ICEhZHJpdmVyTm9kZXNcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBub2RlKSA9PiBhY2MgfHwgZmluZENoaWxkTm9kZShub2RlLCAnS2V5Jywgbm90ZXNQYXRoKSwgZmFsc2UpO1xuICAgICAgaWYgKCFpc05vdGVzUHJlc2VudCkge1xuICAgICAgICBjZEluZm8ubWluQnJvd3NlclZlcnNpb24gPSBudWxsO1xuICAgICAgICBpZiAoc2hvdWxkUGFyc2VOb3Rlcykge1xuICAgICAgICAgIGxvZy5pbmZvKGBUaGUgZW50cnkgJyR7a2V5fScgZG9lcyBub3QgY29udGFpbiBhbnkgbm90ZXMuIFNraXBwaW5nIGl0YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKCFzaG91bGRQYXJzZU5vdGVzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlcy5wdXNoKHRoaXMucmV0cmlldmVBZGRpdGlvbmFsRHJpdmVySW5mbyhrZXksIGAke0NEX0NETn0vJHtub3Rlc1BhdGh9YCwgY2RJbmZvKSk7XG4gICAgICBpZiAocHJvbWlzZXMubGVuZ3RoICUgTUFYX1BBUkFMTEVMX0RPV05MT0FEUyA9PT0gMCkge1xuICAgICAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICBsb2cuaW5mbyhgVGhlIHRvdGFsIGNvdW50IG9mIGVudHJpZXMgaW4gdGhlIG1hcHBpbmc6ICR7Xy5zaXplKHRoaXMubWFwcGluZyl9YCk7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gRHJpdmVyRGV0YWlsc1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsIC0gVGhlIGZ1bGwgdXJsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBpblxuICAgKiB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGV0YWcgLSBUaGUgQ1JDIG9mIHRoZSBkcml2ZXIgYXJjaGl2ZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbiAtIENocm9tZWRyaXZlciB2ZXJzaW9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBDaHJvbWVkcml2ZXJzTWFwcGluZ1xuICAgKiBAcHJvcGVydHkge0RyaXZlckRldGFpbHN9IC0gVGhlIGtleXMgYXJlIHVuaXF1ZSBkcml2ZXIgaWRlbnRpZmllcnNcbiAgICogKHZlcnNpb24vYXJjaGl2ZSBuYW1lKS4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGhhdmUgYERyaXZlckRldGFpbHNgXG4gICAqIGNvbnRhaW5pbmcgY2hyb21lZHJpdmVyIGRldGFpbHNcbiAgICovXG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBjaHJvbWVkcml2ZXIgbWFwcGluZyBmcm9tIHRoZSBzdG9yYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUGFyc2VOb3RlcyBbdHJ1ZV0gLSBpZiBzZXQgdG8gYHRydWVgXG4gICAqIHRoZW4gYWRkaXRpb25hbCBjaHJvbWVkcml2ZXJzIGluZm8gaXMgZ29pbmcgdG8gYmUgcmV0cmlldmVkIGFuZFxuICAgKiBwYXJzZWQgZnJvbSByZWxlYXNlIG5vdGVzXG4gICAqIEByZXR1cm5zIHtDaHJvbWVkcml2ZXJzTWFwcGluZ31cbiAgICovXG4gIGFzeW5jIHJldHJpZXZlTWFwcGluZyAoc2hvdWxkUGFyc2VOb3RlcyA9IHRydWUpIHtcbiAgICBjb25zdCB4bWwgPSBhd2FpdCByZXRyaWV2ZURhdGEoQ0RfQ0ROLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24veG1sLCAqLyonLFxuICAgIH0sIHsgdGltZW91dDogdGhpcy50aW1lb3V0IH0pO1xuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoeG1sKTtcbiAgICBhd2FpdCB0aGlzLnBhcnNlU3RvcmFnZVhtbChkb2MsIHNob3VsZFBhcnNlTm90ZXMpO1xuICAgIHJldHVybiBfLmNsb25lRGVlcCh0aGlzLm1hcHBpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGRvd25sb2FkZWQgY2hyb21lZHJpdmVyIGFyY2hpdmVcbiAgICogaW50byB0aGUgZ2l2ZW4gZGVzdGluYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNyYyAtIFRoZSBzb3VyY2UgYXJjaGl2ZSBwYXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkc3QgLSBUaGUgZGVzdGluYXRpb24gY2hyb21lZHJpdmVyIHBhdGhcbiAgICovXG4gIGFzeW5jIHVuemlwRHJpdmVyIChzcmMsIGRzdCkge1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhzcmMsIHRtcFJvb3QpO1xuICAgICAgY29uc3QgY2hyb21lZHJpdmVyUGF0aCA9IGF3YWl0IGZzLndhbGtEaXIodG1wUm9vdCwgdHJ1ZSwgKGl0ZW1QYXRoLCBpc0RpcmVjdG9yeSkgPT5cbiAgICAgICAgIWlzRGlyZWN0b3J5ICYmIF8udG9Mb3dlcihwYXRoLnBhcnNlKGl0ZW1QYXRoKS5uYW1lKSA9PT0gJ2Nocm9tZWRyaXZlcicpO1xuICAgICAgaWYgKCFjaHJvbWVkcml2ZXJQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGFyY2hpdmUgd2FzIHVuemlwcGVkIHByb3Blcmx5LCBidXQgd2UgY291bGQgbm90IGZpbmQgYW55IGNocm9tZWRyaXZlciBleGVjdXRhYmxlJyk7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYE1vdmluZyB0aGUgZXh0cmFjdGVkICcke3BhdGguYmFzZW5hbWUoY2hyb21lZHJpdmVyUGF0aCl9JyB0byAnJHtkc3R9J2ApO1xuICAgICAgYXdhaXQgZnMubXYoY2hyb21lZHJpdmVyUGF0aCwgZHN0LCB7XG4gICAgICAgIG1rZGlycDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gT1NJbmZvXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhvc3QgT1NcbiAgICogQ2FuIGJlIGVpdGhlciBgbWFjYCwgYHdpbmRvd3NgIG9yIGBsaW51eGBcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBob3N0IE9ELlxuICAgKiBDYW4gYmUgZWl0aGVyIGAzMmAgb3IgYDY0YFxuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IGhhcmR3YXJlTmFtZSAtIFRoZSBvdXRwdXQgb2YgYHVuYW1lIC1tYCBjb21tYW5kXG4gICAqIG9uIGxpbnV4IGFuZCBtYWMgc3lzdGVtcy4gYG51bGxgIG9uIFdpbmRvd3NcbiAgICovXG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYHRoaXMubWFwcGluZ2AgdG8gb25seSBzZWxlY3QgbWF0Y2hpbmdcbiAgICogY2hyb21lZHJpdmVyIGVudHJpZXMgYnkgb3BlcmF0aW5nIHN5c3RlbSBpbmZvcm1hdGlvblxuICAgKiBhbmQvb3IgYWRkaXRpb25hbCBzeW5jaHJvbml6YXRpb24gb3B0aW9ucyAoaWYgcHJvdmlkZWQpXG4gICAqXG4gICAqIEBwYXJhbSB7P09TSW5mb30gb3NJbmZvXG4gICAqIEBwYXJhbSB7P1N5bmNPcHRpb25zfSBvcHRzXG4gICAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgbGlzdCBvZiBmaWx0ZXJlZCBjaHJvbWVkcml2ZXJcbiAgICogZW50cnkgbmFtZXMgKHZlcnNpb24vYXJjaGl2ZSBuYW1lKVxuICAgKi9cbiAgc2VsZWN0TWF0Y2hpbmdEcml2ZXJzIChvc0luZm8sIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIG1pbkJyb3dzZXJWZXJzaW9uLFxuICAgICAgdmVyc2lvbnMgPSBbXSxcbiAgICB9ID0gb3B0cztcbiAgICBsZXQgZHJpdmVyc1RvU3luYyA9IF8ua2V5cyh0aGlzLm1hcHBpbmcpO1xuXG4gICAgaWYgKCFfLmlzRW1wdHkodmVyc2lvbnMpKSB7XG4gICAgICAvLyBIYW5kbGUgb25seSBzZWxlY3RlZCB2ZXJzaW9ucyBpZiByZXF1ZXN0ZWRcbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgdmVyc2lvbnMgbWF0Y2ggdG8gJHt2ZXJzaW9uc31gKTtcbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jXG4gICAgICAgIC5maWx0ZXIoKGNkTmFtZSkgPT4gdmVyc2lvbnMuaW5jbHVkZXMoYCR7dGhpcy5tYXBwaW5nW2NkTmFtZV0udmVyc2lvbn1gKSk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2l0ZW0nLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcnNUb1N5bmMpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzTmFOKG1pbkJyb3dzZXJWZXJzaW9uKSkge1xuICAgICAgLy8gT25seSBzZWxlY3QgZHJpdmVycyB0aGF0IHN1cHBvcnQgdGhlIGN1cnJlbnQgYnJvd3NlciB3aG9zZSBtYWpvciB2ZXJzaW9uIG51bWJlciBlcXVhbHMgdG8gYG1pbkJyb3dzZXJWZXJzaW9uYFxuICAgICAgY29uc3QgbWluQnJvd3NlclZlcnNpb25JbnQgPSBwYXJzZUludChtaW5Ccm93c2VyVmVyc2lvbiwgMTApO1xuICAgICAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgY2hyb21lZHJpdmVycyB3aG9zZSBtaW5pbXVtIHN1cHBvcnRlZCBicm93c2VyIHZlcnNpb24gbWF0Y2hlcyB0byAke21pbkJyb3dzZXJWZXJzaW9uSW50fWApO1xuICAgICAgbGV0IGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA9IDA7XG4gICAgICAvLyBTZWxlY3QgdGhlIG5ld2VzdCBhdmFpbGFibGUgYW5kIGNvbXBhdGlibGUgY2hyb21lZHJpdmVyXG4gICAgICBmb3IgKGNvbnN0IGNkTmFtZSBvZiBkcml2ZXJzVG9TeW5jKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbiA9IHBhcnNlSW50KHRoaXMubWFwcGluZ1tjZE5hbWVdLm1pbkJyb3dzZXJWZXJzaW9uLCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4oY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uKVxuICAgICAgICAgICAgJiYgY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uIDw9IG1pbkJyb3dzZXJWZXJzaW9uSW50XG4gICAgICAgICAgICAmJiBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPCBjdXJyZW50TWluQnJvd3NlclZlcnNpb24pIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPSBjdXJyZW50TWluQnJvd3NlclZlcnNpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jLmZpbHRlcigoY2ROYW1lKSA9PiBgJHt0aGlzLm1hcHBpbmdbY2ROYW1lXS5taW5Ccm93c2VyVmVyc2lvbn1gID09PVxuICAgICAgICBgJHtjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPiAwID8gY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIDogbWluQnJvd3NlclZlcnNpb25JbnR9YCk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2l0ZW0nLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcnNUb1N5bmMpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgV2lsbCBzZWxlY3QgY2FuZGlkYXRlICR7dXRpbC5wbHVyYWxpemUoJ2RyaXZlcicsIGRyaXZlcnNUb1N5bmMubGVuZ3RoKX0gYCArXG4gICAgICAgIGB2ZXJzaW9uZWQgYXMgJyR7Xy51bmlxKGRyaXZlcnNUb1N5bmMubWFwKChjZE5hbWUpID0+IHRoaXMubWFwcGluZ1tjZE5hbWVdLnZlcnNpb24pKX0nYCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkob3NJbmZvKSkge1xuICAgICAgLy8gRmlsdGVyIG91dCBkcml2ZXJzIGZvciB1bnN1cHBvcnRlZCBzeXN0ZW0gYXJjaGl0ZWN0dXJlc1xuICAgICAgbGV0IHtuYW1lLCBhcmNoLCBoYXJkd2FyZU5hbWV9ID0gb3NJbmZvO1xuICAgICAgaWYgKGFyY2ggPT09IFg2NCAmJiAhZHJpdmVyc1RvU3luYy5zb21lKChjZE5hbWUpID0+IGNkTmFtZS5pbmNsdWRlcyhgXyR7bmFtZX0ke1g2NH1gKSkpIHtcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHg4NiBidWlsZCBpZiB4NjQgb25lIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBPU1xuICAgICAgICBhcmNoID0gWDg2O1xuICAgICAgfVxuICAgICAgaWYgKG5hbWUgPT09IE9TLm1hYyAmJiBfLmluY2x1ZGVzKGhhcmR3YXJlTmFtZSwgJ2FybScpXG4gICAgICAgICAgJiYgZHJpdmVyc1RvU3luYy5zb21lKChjZE5hbWUpID0+IGNkTmFtZS5pbmNsdWRlcyhNMV9BUkNIX1NVRkZJWCkpKSB7XG4gICAgICAgIC8vIHByZWZlciBleGVjdXRhYmxlIGZvciBNMSBhcmNoIGlmIHByZXNlbnRcbiAgICAgICAgYXJjaCArPSBNMV9BUkNIX1NVRkZJWDtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgcGxhdGZvcm0gbWF0Y2hlcyB0byAke25hbWV9JHthcmNofWApO1xuICAgICAgY29uc3QgcGxhdGZvcm1SZSA9IG5ldyBSZWdFeHAoYChcXFxcYnxfKSR7bmFtZX0ke2FyY2h9XFxcXGJgKTtcbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jLmZpbHRlcigoY2ROYW1lKSA9PiBwbGF0Zm9ybVJlLnRlc3QoY2ROYW1lKSk7XG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBkcml2ZXJzVG9TeW5jO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZ2l2ZW4gY2hyb21lZHJpdmVyIGZyb20gdGhlIHN0b3JhZ2VcbiAgICogYW5kIHVucGFja3MgaXQgaW50byBgdGhpcy5jaHJvbWVkcml2ZXJEaXJgIGZvbGRlclxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgdW5pcXVlIGRyaXZlciBpbmRleFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHJpdmVyS2V5IC0gVGhlIGRyaXZlciBrZXkgaW4gYHRoaXMubWFwcGluZ2BcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyY2hpdmVzUm9vdCAtIFRoZSB0ZW1wb3JhcnkgZm9sZGVyIHBhdGggdG8gZXh0cmFjdFxuICAgKiBkb3dubG9hZGVkIGFyY2hpdmVzIHRvXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTdHJpY3QgW3RydWVdIC0gV2hldGhlciB0byB0aHJvdyBhbiBlcnJvciAoYHRydWVgKVxuICAgKiBvciByZXR1cm4gYSBib29sZWFuIHJlc3VsdCBpZiB0aGUgZHJpdmVyIHJldHJpZXZhbCBwcm9jZXNzIGZhaWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHJldHJpZXZpbmcgdGhlIGRyaXZlclxuICAgKiBhbmQgYGlzU3RyaWN0YCBpcyBzZXQgdG8gYHRydWVgXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBpZiBgdHJ1ZWAgdGhlbiB0aGUgY2hyb21lZHJpdmVyIGlzIHN1Y2Nlc3NmdWxseVxuICAgKiBkb3dubG9hZGVkIGFuZCBleHRyYWN0ZWQuXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZURyaXZlciAoaW5kZXgsIGRyaXZlcktleSwgYXJjaGl2ZXNSb290LCBpc1N0cmljdCA9IGZhbHNlKSB7XG4gICAgY29uc3QgeyB1cmwsIGV0YWcsIHZlcnNpb24gfSA9IHRoaXMubWFwcGluZ1tkcml2ZXJLZXldO1xuICAgIGNvbnN0IGFyY2hpdmVQYXRoID0gcGF0aC5yZXNvbHZlKGFyY2hpdmVzUm9vdCwgYCR7aW5kZXh9LnppcGApO1xuICAgIGxvZy5kZWJ1ZyhgUmV0cmlldmluZyAnJHt1cmx9JyB0byAnJHthcmNoaXZlUGF0aH0nYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldC5kb3dubG9hZEZpbGUodXJsLCBhcmNoaXZlUGF0aCwge1xuICAgICAgICBpc01ldGVyZWQ6IGZhbHNlLFxuICAgICAgICB0aW1lb3V0OiBUSU1FT1VUX01TXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPSBgQ2Fubm90IGRvd25sb2FkIGNocm9tZWRyaXZlciBhcmNoaXZlLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YDtcbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcihtc2cpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWF3YWl0IGlzQ3JjT2soYXJjaGl2ZVBhdGgsIGV0YWcpKSB7XG4gICAgICBjb25zdCBtc2cgPSBgVGhlIGNoZWNrc3VtIGZvciB0aGUgZG93bmxvYWRlZCBjaHJvbWVkcml2ZXIgJyR7ZHJpdmVyS2V5fScgZGlkIG5vdCBtYXRjaGA7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHtwYXRoLnBhcnNlKHVybCkubmFtZX1fdiR7dmVyc2lvbn1gICtcbiAgICAgIChzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJyk7XG4gICAgY29uc3QgdGFyZ2V0UGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmNocm9tZWRyaXZlckRpciwgZmlsZU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnVuemlwRHJpdmVyKGFyY2hpdmVQYXRoLCB0YXJnZXRQYXRoKTtcbiAgICAgIGF3YWl0IGZzLmNobW9kKHRhcmdldFBhdGgsIDBvNzU1KTtcbiAgICAgIGxvZy5kZWJ1ZyhgUGVybWlzc2lvbnMgb2YgdGhlIGZpbGUgJyR7dGFyZ2V0UGF0aH0nIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIDc1NWApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKGUubWVzc2FnZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IFN5bmNPcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXk8U3RyaW5nPn0gdmVyc2lvbnMgLSBUaGUgbGlzdCBvZiBjaHJvbWVkcml2ZXJcbiAgICogdmVyc2lvbnMgdG8gc3luYy4gSWYgZW1wdHkgKHRoZSBkZWZhdWx0IHZhbHVlKSB0aGVuIGFsbCBhdmFpbGFibGVcbiAgICogY2hyb21lZHJpdmVycyBhcmUgZ29pbmcgdG8gYmUgZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gbWluQnJvd3NlclZlcnNpb24gLSBUaGUgbWludW11bSBzdXBwb3J0ZWRcbiAgICogQ2hyb21lIHZlcnNpb24gdGhhdCBkb3dubG9hZGVkIGNocm9tZWRyaXZlcnMgc2hvdWxkIHN1cHBvcnQuIENhbiBtYXRjaFxuICAgKiBtdWx0aXBsZSBkcml2ZXJzLlxuICAgKiBAcHJvcGVydHkgez9PU0luZm99IG9zSW5mbyAtIFN5c3RlbSBpbmZvcm1hdGlvbiB1c2VkIHRvIGZpbHRlciBvdXRcbiAgICogdGhlIGxpc3Qgb2YgdGhlIHJldHJpZXZlZCBkcml2ZXJzLiBJZiBub3QgcHJvdmlkZWQgdGhlbiB0aGUgc2NyaXB0XG4gICAqIHdpbGwgdHJ5IHRvIHJldHJpZXZlIGl0LlxuICAgKi9cblxuICAvKipcbiAgICogUmV0cmlldmVzIGNocm9tZWRyaXZlcnMgZnJvbSB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICogdG8gdGhlIGxvY2FsIGZpbGUgc3lzdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7P1N5bmNPcHRpb25zfSBvcHRzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIHJldHJpZXZpbmdcbiAgICogdGhlIGRyaXZlcnNcbiAgICogQHJldHVybnMge0FycmF5PFN0cmluZ30gVGhlIGxpc3Qgb2Ygc3VjY2Vzc2Z1bGx5IHN5bmNocm9uaXplZCBkcml2ZXIga2V5c1xuICAgKi9cbiAgYXN5bmMgc3luY0RyaXZlcnMgKG9wdHMgPSB7fSkge1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5tYXBwaW5nKSkge1xuICAgICAgYXdhaXQgdGhpcy5yZXRyaWV2ZU1hcHBpbmcoISFvcHRzLm1pbkJyb3dzZXJWZXJzaW9uKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLm1hcHBpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgZnJvbSBHb29nbGUgc3RvcmFnZScpO1xuICAgIH1cblxuICAgIGNvbnN0IGRyaXZlcnNUb1N5bmMgPSB0aGlzLnNlbGVjdE1hdGNoaW5nRHJpdmVycyhvcHRzLm9zSW5mbyA/PyBhd2FpdCBnZXRPc0luZm8oKSwgb3B0cyk7XG4gICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBhcmUgbm8gZHJpdmVycyB0byBzeW5jLiBFeGl0aW5nYCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2RyaXZlcicsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX0gdG8gc3luYzogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShkcml2ZXJzVG9TeW5jLCBudWxsLCAyKSk7XG5cbiAgICBjb25zdCBzeW5jaHJvbml6ZWREcml2ZXJzID0gW107XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBjb25zdCBhcmNoaXZlc1Jvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBbaWR4LCBkcml2ZXJLZXldIG9mIGRyaXZlcnNUb1N5bmMuZW50cmllcygpKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5yZXRyaWV2ZURyaXZlcihpZHgsIGRyaXZlcktleSwgYXJjaGl2ZXNSb290LCAhXy5pc0VtcHR5KG9wdHMpKSkge1xuICAgICAgICAgICAgc3luY2hyb25pemVkRHJpdmVycy5wdXNoKGRyaXZlcktleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpKTtcblxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoICUgTUFYX1BBUkFMTEVMX0RPV05MT0FEUyA9PT0gMCkge1xuICAgICAgICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYoYXJjaGl2ZXNSb290KTtcbiAgICB9XG4gICAgaWYgKCFfLmlzRW1wdHkoc3luY2hyb25pemVkRHJpdmVycykpIHtcbiAgICAgIGxvZy5pbmZvKGBTdWNjZXNzZnVsbHkgc3luY2hyb25pemVkIGAgK1xuICAgICAgICBgJHt1dGlsLnBsdXJhbGl6ZSgnY2hyb21lZHJpdmVyJywgc3luY2hyb25pemVkRHJpdmVycy5sZW5ndGgsIHRydWUpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbyhgTm8gY2hyb21lZHJpdmVycyB3ZXJlIHN5bmNocm9uaXplZGApO1xuICAgIH1cbiAgICByZXR1cm4gc3luY2hyb25pemVkRHJpdmVycztcbiAgfVxu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
|
|
386
|
+
exports.default = _default;
|
|
387
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUSU1FT1VUX01TIiwiTUFYX1BBUkFMTEVMX0RPV05MT0FEUyIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsImlzQ3JjT2siLCJzcmMiLCJjaGVja3N1bSIsIm1kNSIsImZzIiwiaGFzaCIsIl8iLCJ0b0xvd2VyIiwiZmluZENoaWxkTm9kZSIsInBhcmVudCIsImNoaWxkTmFtZSIsInRleHQiLCJoYXNDaGlsZE5vZGVzIiwiY2hpbGROb2RlSWR4IiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkTm9kZSIsImxvY2FsTmFtZSIsImNoaWxkVGV4dCIsImV4dHJhY3ROb2RlVGV4dCIsIm5vZGUiLCJmaXJzdENoaWxkIiwidXRpbCIsImhhc1ZhbHVlIiwibm9kZVZhbHVlIiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNvbnN0cnVjdG9yIiwiYXJncyIsImNocm9tZWRyaXZlckRpciIsImdldENocm9tZWRyaXZlckRpciIsInRpbWVvdXQiLCJtYXBwaW5nIiwicGFyc2VOb3RlcyIsImNvbnRlbnQiLCJyZXN1bHQiLCJ2ZXJzaW9uTWF0Y2giLCJleGVjIiwidmVyc2lvbiIsIm1pbkJyb3dzZXJWZXJzaW9uTWF0Y2giLCJtaW5Ccm93c2VyVmVyc2lvbiIsInJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8iLCJkcml2ZXJLZXkiLCJub3Rlc1VybCIsImluZm9EaWN0Iiwibm90ZXMiLCJyZXRyaWV2ZURhdGEiLCJhY2NlcHQiLCJkZWJ1ZyIsInBhcnNlU3RvcmFnZVhtbCIsImRvYyIsInNob3VsZFBhcnNlTm90ZXMiLCJkcml2ZXJOb2RlcyIsInhwYXRoIiwic2VsZWN0IiwiaXNFbXB0eSIsInByb21pc2VzIiwiZHJpdmVyTm9kZSIsImtleSIsImluY2x1ZGVzIiwiZXRhZyIsImNkSW5mbyIsInVybCIsIkNEX0NETiIsInRyaW0iLCJmaXJzdCIsInNwbGl0Iiwibm90ZXNQYXRoIiwiaXNOb3Rlc1ByZXNlbnQiLCJyZWR1Y2UiLCJhY2MiLCJpbmZvIiwicHVzaCIsIkIiLCJhbGwiLCJzaXplIiwicmV0cmlldmVNYXBwaW5nIiwieG1sIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiY2xvbmVEZWVwIiwidW56aXBEcml2ZXIiLCJkc3QiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJ6aXAiLCJleHRyYWN0QWxsVG8iLCJjaHJvbWVkcml2ZXJQYXRoIiwid2Fsa0RpciIsIml0ZW1QYXRoIiwiaXNEaXJlY3RvcnkiLCJwYXRoIiwicGFyc2UiLCJuYW1lIiwiRXJyb3IiLCJiYXNlbmFtZSIsIm12IiwibWtkaXJwIiwicmltcmFmIiwic2VsZWN0TWF0Y2hpbmdEcml2ZXJzIiwib3NJbmZvIiwib3B0cyIsInZlcnNpb25zIiwiZHJpdmVyc1RvU3luYyIsImtleXMiLCJmaWx0ZXIiLCJjZE5hbWUiLCJwbHVyYWxpemUiLCJpc05hTiIsIm1pbkJyb3dzZXJWZXJzaW9uSW50IiwicGFyc2VJbnQiLCJjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIiLCJjdXJyZW50TWluQnJvd3NlclZlcnNpb24iLCJ1bmlxIiwibWFwIiwiYXJjaCIsImhhcmR3YXJlTmFtZSIsIlg2NCIsInNvbWUiLCJYODYiLCJPUyIsIm1hYyIsIk0xX0FSQ0hfU1VGRklYIiwicGxhdGZvcm1SZSIsIlJlZ0V4cCIsInRlc3QiLCJyZXRyaWV2ZURyaXZlciIsImluZGV4IiwiYXJjaGl2ZXNSb290IiwiaXNTdHJpY3QiLCJhcmNoaXZlUGF0aCIsInJlc29sdmUiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJpc01ldGVyZWQiLCJlIiwibXNnIiwibWVzc2FnZSIsImVycm9yIiwiZmlsZU5hbWUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJ0YXJnZXRQYXRoIiwiY2htb2QiLCJzeW5jRHJpdmVycyIsImdldE9zSW5mbyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzeW5jaHJvbml6ZWREcml2ZXJzIiwiaWR4IiwiZW50cmllcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zdG9yYWdlLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBnZXRDaHJvbWVkcml2ZXJEaXIsIENEX0NETiwgcmV0cmlldmVEYXRhLCBnZXRPc0luZm8sXG4gIE9TLCBYNjQsIFg4NiwgTTFfQVJDSF9TVUZGSVgsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB4cGF0aCBmcm9tICd4cGF0aCc7XG5pbXBvcnQgeyBET01QYXJzZXIgfSBmcm9tICdAeG1sZG9tL3htbGRvbSc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHN5c3RlbSwgZnMsIGxvZ2dlciwgdGVtcERpciwgemlwLCB1dGlsLCBuZXQgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgVElNRU9VVF9NUyA9IDE1MDAwO1xuY29uc3QgTUFYX1BBUkFMTEVMX0RPV05MT0FEUyA9IDU7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0Nocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQnKTtcblxuXG5hc3luYyBmdW5jdGlvbiBpc0NyY09rIChzcmMsIGNoZWNrc3VtKSB7XG4gIGNvbnN0IG1kNSA9IGF3YWl0IGZzLmhhc2goc3JjLCAnbWQ1Jyk7XG4gIHJldHVybiBfLnRvTG93ZXIobWQ1KSA9PT0gXy50b0xvd2VyKGNoZWNrc3VtKTtcbn1cblxuZnVuY3Rpb24gZmluZENoaWxkTm9kZSAocGFyZW50LCBjaGlsZE5hbWUgPSBudWxsLCB0ZXh0ID0gbnVsbCkge1xuICBpZiAoIWNoaWxkTmFtZSAmJiAhdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICghcGFyZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yIChsZXQgY2hpbGROb2RlSWR4ID0gMDsgY2hpbGROb2RlSWR4IDwgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBjaGlsZE5vZGVJZHgrKykge1xuICAgIGNvbnN0IGNoaWxkTm9kZSA9IHBhcmVudC5jaGlsZE5vZGVzW2NoaWxkTm9kZUlkeF07XG4gICAgaWYgKGNoaWxkTmFtZSAmJiAhdGV4dCAmJiBjaGlsZE5hbWUgPT09IGNoaWxkTm9kZS5sb2NhbE5hbWUpIHtcbiAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgfVxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBjb25zdCBjaGlsZFRleHQgPSBleHRyYWN0Tm9kZVRleHQoY2hpbGROb2RlKTtcbiAgICAgIGlmICghY2hpbGRUZXh0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkTmFtZSAmJiBjaGlsZE5hbWUgPT09IGNoaWxkTm9kZS5sb2NhbE5hbWUgJiYgdGV4dCA9PT0gY2hpbGRUZXh0KSB7XG4gICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICB9XG4gICAgICBpZiAoIWNoaWxkTmFtZSAmJiB0ZXh0ID09PSBjaGlsZFRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3ROb2RlVGV4dCAobm9kZSkge1xuICByZXR1cm4gKCFub2RlIHx8ICFub2RlLmZpcnN0Q2hpbGQgfHwgIXV0aWwuaGFzVmFsdWUobm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZSkpXG4gICAgPyBudWxsXG4gICAgOiBub2RlLmZpcnN0Q2hpbGQubm9kZVZhbHVlO1xufVxuXG5cbmNsYXNzIENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQge1xuICBjb25zdHJ1Y3RvciAoYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hyb21lZHJpdmVyRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKCksXG4gICAgICB0aW1lb3V0ID0gVElNRU9VVF9NUyxcbiAgICB9ID0gYXJncztcbiAgICB0aGlzLmNocm9tZWRyaXZlckRpciA9IGNocm9tZWRyaXZlckRpcjtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgIHRoaXMubWFwcGluZyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IEFkZGl0aW9uYWxEcml2ZXJEZXRhaWxzXG4gICAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmVyc2lvbiAtIENocm9tZWRyaXZlciB2ZXJzaW9uXG4gICAqIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAgICogQHByb3BlcnR5IHs/c3RyaW5nfSBtaW5Ccm93c2VyVmVyc2lvbiAtIFRoZSBtaW5pbXVtIGJyb3dzZXIgdmVyc2lvblxuICAgKiBzdXBwb3J0ZWQgYnkgY2hyb21lZHJpdmVyIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAgICovXG5cbiAgLyoqXG4gICAqIEdldHMgYWRkaXRpb25hbCBjaHJvbWVkcml2ZXIgZGV0YWlscyBmcm9tIGNocm9tZWRyaXZlclxuICAgKiByZWxlYXNlIG5vdGVzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gUmVsZWFzZSBub3RlcyBvZiB0aGUgY29ycmVzcG9uZGluZyBjaHJvbWVkcml2ZXJcbiAgICogQHJldHVybnMge0FkZGl0aW9uYWxEcml2ZXJEZXRhaWxzfVxuICAgKi9cbiAgcGFyc2VOb3RlcyAoY29udGVudCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IC9eXFxzKlstXStDaHJvbWVEcml2ZXJbXFxEXSsoW1xcZC5dKykvaW0uZXhlYyhjb250ZW50KTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICByZXN1bHQudmVyc2lvbiA9IHZlcnNpb25NYXRjaFsxXTtcbiAgICB9XG4gICAgY29uc3QgbWluQnJvd3NlclZlcnNpb25NYXRjaCA9IC9eXFxzKlN1cHBvcnRzIENocm9tZVtcXERdKyhcXGQrKS9pbS5leGVjKGNvbnRlbnQpO1xuICAgIGlmIChtaW5Ccm93c2VyVmVyc2lvbk1hdGNoKSB7XG4gICAgICByZXN1bHQubWluQnJvd3NlclZlcnNpb24gPSBtaW5Ccm93c2VyVmVyc2lvbk1hdGNoWzFdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkcyBjaHJvbWVkcml2ZXIgcmVsZWFzZSBub3RlcyBhbmQgcHV0cyB0aGVtXG4gICAqIGludG8gdGhlIGRpY3Rpb25hcnkgYXJndW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRyaXZlcktleSAtIERyaXZlciB2ZXJzaW9uIHBsdXMgYXJjaGl2ZSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBub3Rlc1VybCAtIFRoZSBVUkwgb2YgY2hyb21lZHJpdmVyIG5vdGVzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbmZvRGljdCAtIFRoZSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZHJpdmVyIGluZm8uXG4gICAqIFRoZSBtZXRob2QgY2FsbCBtdXRhdGVzIGJ5IG1lcmdpbmcgYEFkZGl0aW9uYWxEcml2ZXJEZXRhaWxzYFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHJlbGVhc2Ugbm90ZXMgY2Fubm90IGJlIGRvd25sb2FkZWRcbiAgICovXG4gIGFzeW5jIHJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8gKGRyaXZlcktleSwgbm90ZXNVcmwsIGluZm9EaWN0KSB7XG4gICAgY29uc3Qgbm90ZXMgPSBhd2FpdCByZXRyaWV2ZURhdGEobm90ZXNVcmwsIHtcbiAgICAgICd1c2VyLWFnZW50JzogJ2FwcGl1bScsXG4gICAgICBhY2NlcHQ6ICcqLyonLFxuICAgIH0sIHsgdGltZW91dDogdGhpcy50aW1lb3V0IH0pO1xuICAgIGNvbnN0IHsgbWluQnJvd3NlclZlcnNpb24gfSA9IHRoaXMucGFyc2VOb3Rlcyhub3Rlcyk7XG4gICAgaWYgKCFtaW5Ccm93c2VyVmVyc2lvbikge1xuICAgICAgbG9nLmRlYnVnKGBUaGUgZHJpdmVyICcke2RyaXZlcktleX0nIGRvZXMgbm90IGNvbnRhaW4gdmFsaWQgcmVsZWFzZSBub3RlcyBhdCAke25vdGVzVXJsfS4gYCArXG4gICAgICAgIGBTa2lwcGluZyBpdGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbmZvRGljdC5taW5Ccm93c2VyVmVyc2lvbiA9IG1pbkJyb3dzZXJWZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBjaHJvbWVkcml2ZXIgc3RvcmFnZSBYTUwgYW5kIHN0b3Jlc1xuICAgKiB0aGUgcGFyc2VkIHJlc3VsdHMgaW50byBgdGhpcy5tYXBwaW5nYFxuICAgKlxuICAgKiBAcGFyYW0ge0RPTURvY3VtZW50fSBkb2MgLSBUaGUgRE9NIHJlcHJlc2VudGF0aW9uXG4gICAqIG9mIHRoZSBjaHJvbWVkcml2ZXIgc3RvcmFnZSBYTUxcbiAgICogQHBhcmFtIHtib29sZWFufSBzaG91bGRQYXJzZU5vdGVzIFt0cnVlXSAtIElmIHNldCB0byBgdHJ1ZWBcbiAgICogdGhlbiBhZGRpdGlvbmFsIGRyaXZlcnMgaW5mb3JtYXRpb24gaXMgZ29pbmcgdG8gYmUgcGFyc2VkXG4gICAqIGFuZCBhc3NpZ25lZCB0byBgdGhpcy5tYXBwaW5nYFxuICAgKi9cbiAgYXN5bmMgcGFyc2VTdG9yYWdlWG1sIChkb2MsIHNob3VsZFBhcnNlTm90ZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgZHJpdmVyTm9kZXMgPSB4cGF0aC5zZWxlY3QoYC8vKltsb2NhbC1uYW1lKC4pPSdDb250ZW50cyddYCwgZG9jKTtcbiAgICBsb2cuZGVidWcoYFBhcnNlZCAke2RyaXZlck5vZGVzLmxlbmd0aH0gZW50cmllcyBmcm9tIHN0b3JhZ2UgWE1MYCk7XG4gICAgaWYgKF8uaXNFbXB0eShkcml2ZXJOb2RlcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgZHJpdmVyTm9kZSBvZiBkcml2ZXJOb2Rlcykge1xuICAgICAgY29uc3Qga2V5ID0gZXh0cmFjdE5vZGVUZXh0KGZpbmRDaGlsZE5vZGUoZHJpdmVyTm9kZSwgJ0tleScpKTtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhrZXksICcvY2hyb21lZHJpdmVyXycpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBldGFnID0gZXh0cmFjdE5vZGVUZXh0KGZpbmRDaGlsZE5vZGUoZHJpdmVyTm9kZSwgJ0VUYWcnKSk7XG4gICAgICBpZiAoIWV0YWcpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGUgZW50cnkgJyR7a2V5fScgZG9lcyBub3QgY29udGFpbiB0aGUgY2hlY2tzdW0uIFNraXBwaW5nIGl0YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZEluZm8gPSB7XG4gICAgICAgIHVybDogYCR7Q0RfQ0ROfS8ke2tleX1gLFxuICAgICAgICBldGFnOiBfLnRyaW0oZXRhZywgJ1wiJyksXG4gICAgICAgIHZlcnNpb246IF8uZmlyc3Qoa2V5LnNwbGl0KCcvJykpLFxuICAgICAgfTtcbiAgICAgIHRoaXMubWFwcGluZ1trZXldID0gY2RJbmZvO1xuXG4gICAgICBjb25zdCBub3Rlc1BhdGggPSBgJHtjZEluZm8udmVyc2lvbn0vbm90ZXMudHh0YDtcbiAgICAgIGNvbnN0IGlzTm90ZXNQcmVzZW50ID0gISFkcml2ZXJOb2Rlc1xuICAgICAgICAucmVkdWNlKChhY2MsIG5vZGUpID0+IGFjYyB8fCBmaW5kQ2hpbGROb2RlKG5vZGUsICdLZXknLCBub3Rlc1BhdGgpLCBmYWxzZSk7XG4gICAgICBpZiAoIWlzTm90ZXNQcmVzZW50KSB7XG4gICAgICAgIGNkSW5mby5taW5Ccm93c2VyVmVyc2lvbiA9IG51bGw7XG4gICAgICAgIGlmIChzaG91bGRQYXJzZU5vdGVzKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFRoZSBlbnRyeSAnJHtrZXl9JyBkb2VzIG5vdCBjb250YWluIGFueSBub3Rlcy4gU2tpcHBpbmcgaXRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoIXNob3VsZFBhcnNlTm90ZXMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHByb21pc2VzLnB1c2godGhpcy5yZXRyaWV2ZUFkZGl0aW9uYWxEcml2ZXJJbmZvKGtleSwgYCR7Q0RfQ0ROfS8ke25vdGVzUGF0aH1gLCBjZEluZm8pKTtcbiAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggJSBNQVhfUEFSQUxMRUxfRE9XTkxPQURTID09PSAwKSB7XG4gICAgICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgIGxvZy5pbmZvKGBUaGUgdG90YWwgY291bnQgb2YgZW50cmllcyBpbiB0aGUgbWFwcGluZzogJHtfLnNpemUodGhpcy5tYXBwaW5nKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBEcml2ZXJEZXRhaWxzXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgLSBUaGUgZnVsbCB1cmwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIGluXG4gICAqIHRoZSByZW1vdGUgc3RvcmFnZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gZXRhZyAtIFRoZSBDUkMgb2YgdGhlIGRyaXZlciBhcmNoaXZlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uIC0gQ2hyb21lZHJpdmVyIHZlcnNpb25cbiAgICovXG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IENocm9tZWRyaXZlcnNNYXBwaW5nXG4gICAqIEBwcm9wZXJ0eSB7RHJpdmVyRGV0YWlsc30gLSBUaGUga2V5cyBhcmUgdW5pcXVlIGRyaXZlciBpZGVudGlmaWVyc1xuICAgKiAodmVyc2lvbi9hcmNoaXZlIG5hbWUpLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgaGF2ZSBgRHJpdmVyRGV0YWlsc2BcbiAgICogY29udGFpbmluZyBjaHJvbWVkcml2ZXIgZGV0YWlsc1xuICAgKi9cblxuICAvKipcbiAgICogUmV0cmlldmVzIGNocm9tZWRyaXZlciBtYXBwaW5nIGZyb20gdGhlIHN0b3JhZ2VcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBzaG91bGRQYXJzZU5vdGVzIFt0cnVlXSAtIGlmIHNldCB0byBgdHJ1ZWBcbiAgICogdGhlbiBhZGRpdGlvbmFsIGNocm9tZWRyaXZlcnMgaW5mbyBpcyBnb2luZyB0byBiZSByZXRyaWV2ZWQgYW5kXG4gICAqIHBhcnNlZCBmcm9tIHJlbGVhc2Ugbm90ZXNcbiAgICogQHJldHVybnMge0Nocm9tZWRyaXZlcnNNYXBwaW5nfVxuICAgKi9cbiAgYXN5bmMgcmV0cmlldmVNYXBwaW5nIChzaG91bGRQYXJzZU5vdGVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHhtbCA9IGF3YWl0IHJldHJpZXZlRGF0YShDRF9DRE4sIHtcbiAgICAgICd1c2VyLWFnZW50JzogJ2FwcGl1bScsXG4gICAgICBhY2NlcHQ6ICdhcHBsaWNhdGlvbi94bWwsICovKicsXG4gICAgfSwgeyB0aW1lb3V0OiB0aGlzLnRpbWVvdXQgfSk7XG4gICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh4bWwpO1xuICAgIGF3YWl0IHRoaXMucGFyc2VTdG9yYWdlWG1sKGRvYywgc2hvdWxkUGFyc2VOb3Rlcyk7XG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKHRoaXMubWFwcGluZyk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgZG93bmxvYWRlZCBjaHJvbWVkcml2ZXIgYXJjaGl2ZVxuICAgKiBpbnRvIHRoZSBnaXZlbiBkZXN0aW5hdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIC0gVGhlIHNvdXJjZSBhcmNoaXZlIHBhdGhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRzdCAtIFRoZSBkZXN0aW5hdGlvbiBjaHJvbWVkcml2ZXIgcGF0aFxuICAgKi9cbiAgYXN5bmMgdW56aXBEcml2ZXIgKHNyYywgZHN0KSB7XG4gICAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHNyYywgdG1wUm9vdCk7XG4gICAgICBjb25zdCBjaHJvbWVkcml2ZXJQYXRoID0gYXdhaXQgZnMud2Fsa0Rpcih0bXBSb290LCB0cnVlLCAoaXRlbVBhdGgsIGlzRGlyZWN0b3J5KSA9PlxuICAgICAgICAhaXNEaXJlY3RvcnkgJiYgXy50b0xvd2VyKHBhdGgucGFyc2UoaXRlbVBhdGgpLm5hbWUpID09PSAnY2hyb21lZHJpdmVyJyk7XG4gICAgICBpZiAoIWNocm9tZWRyaXZlclBhdGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJjaGl2ZSB3YXMgdW56aXBwZWQgcHJvcGVybHksIGJ1dCB3ZSBjb3VsZCBub3QgZmluZCBhbnkgY2hyb21lZHJpdmVyIGV4ZWN1dGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgTW92aW5nIHRoZSBleHRyYWN0ZWQgJyR7cGF0aC5iYXNlbmFtZShjaHJvbWVkcml2ZXJQYXRoKX0nIHRvICcke2RzdH0nYCk7XG4gICAgICBhd2FpdCBmcy5tdihjaHJvbWVkcml2ZXJQYXRoLCBkc3QsIHtcbiAgICAgICAgbWtkaXJwOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBPU0luZm9cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaG9zdCBPU1xuICAgKiBDYW4gYmUgZWl0aGVyIGBtYWNgLCBgd2luZG93c2Agb3IgYGxpbnV4YFxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGhvc3QgT0QuXG4gICAqIENhbiBiZSBlaXRoZXIgYDMyYCBvciBgNjRgXG4gICAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaGFyZHdhcmVOYW1lIC0gVGhlIG91dHB1dCBvZiBgdW5hbWUgLW1gIGNvbW1hbmRcbiAgICogb24gbGludXggYW5kIG1hYyBzeXN0ZW1zLiBgbnVsbGAgb24gV2luZG93c1xuICAgKi9cblxuICAvKipcbiAgICogRmlsdGVycyBgdGhpcy5tYXBwaW5nYCB0byBvbmx5IHNlbGVjdCBtYXRjaGluZ1xuICAgKiBjaHJvbWVkcml2ZXIgZW50cmllcyBieSBvcGVyYXRpbmcgc3lzdGVtIGluZm9ybWF0aW9uXG4gICAqIGFuZC9vciBhZGRpdGlvbmFsIHN5bmNocm9uaXphdGlvbiBvcHRpb25zIChpZiBwcm92aWRlZClcbiAgICpcbiAgICogQHBhcmFtIHs/T1NJbmZvfSBvc0luZm9cbiAgICogQHBhcmFtIHs/U3luY09wdGlvbnN9IG9wdHNcbiAgICogQHJldHVybnMge0FycmF5PFN0cmluZz59IFRoZSBsaXN0IG9mIGZpbHRlcmVkIGNocm9tZWRyaXZlclxuICAgKiBlbnRyeSBuYW1lcyAodmVyc2lvbi9hcmNoaXZlIG5hbWUpXG4gICAqL1xuICBzZWxlY3RNYXRjaGluZ0RyaXZlcnMgKG9zSW5mbywgb3B0cyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgbWluQnJvd3NlclZlcnNpb24sXG4gICAgICB2ZXJzaW9ucyA9IFtdLFxuICAgIH0gPSBvcHRzO1xuICAgIGxldCBkcml2ZXJzVG9TeW5jID0gXy5rZXlzKHRoaXMubWFwcGluZyk7XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh2ZXJzaW9ucykpIHtcbiAgICAgIC8vIEhhbmRsZSBvbmx5IHNlbGVjdGVkIHZlcnNpb25zIGlmIHJlcXVlc3RlZFxuICAgICAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgY2hyb21lZHJpdmVycyB3aG9zZSB2ZXJzaW9ucyBtYXRjaCB0byAke3ZlcnNpb25zfWApO1xuICAgICAgZHJpdmVyc1RvU3luYyA9IGRyaXZlcnNUb1N5bmNcbiAgICAgICAgLmZpbHRlcigoY2ROYW1lKSA9PiB2ZXJzaW9ucy5pbmNsdWRlcyhgJHt0aGlzLm1hcHBpbmdbY2ROYW1lXS52ZXJzaW9ufWApKTtcblxuICAgICAgbG9nLmRlYnVnKGBHb3QgJHt1dGlsLnBsdXJhbGl6ZSgnaXRlbScsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyc1RvU3luYykpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNOYU4obWluQnJvd3NlclZlcnNpb24pKSB7XG4gICAgICAvLyBPbmx5IHNlbGVjdCBkcml2ZXJzIHRoYXQgc3VwcG9ydCB0aGUgY3VycmVudCBicm93c2VyIHdob3NlIG1ham9yIHZlcnNpb24gbnVtYmVyIGVxdWFscyB0byBgbWluQnJvd3NlclZlcnNpb25gXG4gICAgICBjb25zdCBtaW5Ccm93c2VyVmVyc2lvbkludCA9IHBhcnNlSW50KG1pbkJyb3dzZXJWZXJzaW9uLCAxMCk7XG4gICAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBjaHJvbWVkcml2ZXJzIHdob3NlIG1pbmltdW0gc3VwcG9ydGVkIGJyb3dzZXIgdmVyc2lvbiBtYXRjaGVzIHRvICR7bWluQnJvd3NlclZlcnNpb25JbnR9YCk7XG4gICAgICBsZXQgY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyID0gMDtcbiAgICAgIC8vIFNlbGVjdCB0aGUgbmV3ZXN0IGF2YWlsYWJsZSBhbmQgY29tcGF0aWJsZSBjaHJvbWVkcml2ZXJcbiAgICAgIGZvciAoY29uc3QgY2ROYW1lIG9mIGRyaXZlcnNUb1N5bmMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uID0gcGFyc2VJbnQodGhpcy5tYXBwaW5nW2NkTmFtZV0ubWluQnJvd3NlclZlcnNpb24sIDEwKTtcbiAgICAgICAgaWYgKCFpc05hTihjdXJyZW50TWluQnJvd3NlclZlcnNpb24pXG4gICAgICAgICAgICAmJiBjdXJyZW50TWluQnJvd3NlclZlcnNpb24gPD0gbWluQnJvd3NlclZlcnNpb25JbnRcbiAgICAgICAgICAgICYmIGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA8IGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbikge1xuICAgICAgICAgIGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA9IGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZHJpdmVyc1RvU3luYyA9IGRyaXZlcnNUb1N5bmMuZmlsdGVyKChjZE5hbWUpID0+IGAke3RoaXMubWFwcGluZ1tjZE5hbWVdLm1pbkJyb3dzZXJWZXJzaW9ufWAgPT09XG4gICAgICAgIGAke2Nsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA+IDAgPyBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgOiBtaW5Ccm93c2VyVmVyc2lvbkludH1gKTtcblxuICAgICAgbG9nLmRlYnVnKGBHb3QgJHt1dGlsLnBsdXJhbGl6ZSgnaXRlbScsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyc1RvU3luYykpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBXaWxsIHNlbGVjdCBjYW5kaWRhdGUgJHt1dGlsLnBsdXJhbGl6ZSgnZHJpdmVyJywgZHJpdmVyc1RvU3luYy5sZW5ndGgpfSBgICtcbiAgICAgICAgYHZlcnNpb25lZCBhcyAnJHtfLnVuaXEoZHJpdmVyc1RvU3luYy5tYXAoKGNkTmFtZSkgPT4gdGhpcy5tYXBwaW5nW2NkTmFtZV0udmVyc2lvbikpfSdgKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eShvc0luZm8pKSB7XG4gICAgICAvLyBGaWx0ZXIgb3V0IGRyaXZlcnMgZm9yIHVuc3VwcG9ydGVkIHN5c3RlbSBhcmNoaXRlY3R1cmVzXG4gICAgICBsZXQge25hbWUsIGFyY2gsIGhhcmR3YXJlTmFtZX0gPSBvc0luZm87XG4gICAgICBpZiAoYXJjaCA9PT0gWDY0ICYmICFkcml2ZXJzVG9TeW5jLnNvbWUoKGNkTmFtZSkgPT4gY2ROYW1lLmluY2x1ZGVzKGBfJHtuYW1lfSR7WDY0fWApKSkge1xuICAgICAgICAvLyBGYWxsIGJhY2sgdG8geDg2IGJ1aWxkIGlmIHg2NCBvbmUgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIE9TXG4gICAgICAgIGFyY2ggPSBYODY7XG4gICAgICB9XG4gICAgICBpZiAobmFtZSA9PT0gT1MubWFjICYmIF8uaW5jbHVkZXMoaGFyZHdhcmVOYW1lLCAnYXJtJylcbiAgICAgICAgICAmJiBkcml2ZXJzVG9TeW5jLnNvbWUoKGNkTmFtZSkgPT4gY2ROYW1lLmluY2x1ZGVzKE0xX0FSQ0hfU1VGRklYKSkpIHtcbiAgICAgICAgLy8gcHJlZmVyIGV4ZWN1dGFibGUgZm9yIE0xIGFyY2ggaWYgcHJlc2VudFxuICAgICAgICBhcmNoICs9IE0xX0FSQ0hfU1VGRklYO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgY2hyb21lZHJpdmVycyB3aG9zZSBwbGF0Zm9ybSBtYXRjaGVzIHRvICR7bmFtZX0ke2FyY2h9YCk7XG4gICAgICBjb25zdCBwbGF0Zm9ybVJlID0gbmV3IFJlZ0V4cChgKFxcXFxifF8pJHtuYW1lfSR7YXJjaH1cXFxcYmApO1xuICAgICAgZHJpdmVyc1RvU3luYyA9IGRyaXZlcnNUb1N5bmMuZmlsdGVyKChjZE5hbWUpID0+IHBsYXRmb3JtUmUudGVzdChjZE5hbWUpKTtcbiAgICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2l0ZW0nLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRyaXZlcnNUb1N5bmM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBnaXZlbiBjaHJvbWVkcml2ZXIgZnJvbSB0aGUgc3RvcmFnZVxuICAgKiBhbmQgdW5wYWNrcyBpdCBpbnRvIGB0aGlzLmNocm9tZWRyaXZlckRpcmAgZm9sZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIFRoZSB1bmlxdWUgZHJpdmVyIGluZGV4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkcml2ZXJLZXkgLSBUaGUgZHJpdmVyIGtleSBpbiBgdGhpcy5tYXBwaW5nYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJjaGl2ZXNSb290IC0gVGhlIHRlbXBvcmFyeSBmb2xkZXIgcGF0aCB0byBleHRyYWN0XG4gICAqIGRvd25sb2FkZWQgYXJjaGl2ZXMgdG9cbiAgICogQHBhcmFtIHtib29sZWFufSBpc1N0cmljdCBbdHJ1ZV0gLSBXaGV0aGVyIHRvIHRocm93IGFuIGVycm9yIChgdHJ1ZWApXG4gICAqIG9yIHJldHVybiBhIGJvb2xlYW4gcmVzdWx0IGlmIHRoZSBkcml2ZXIgcmV0cmlldmFsIHByb2Nlc3MgZmFpbHNcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcmV0cmlldmluZyB0aGUgZHJpdmVyXG4gICAqIGFuZCBgaXNTdHJpY3RgIGlzIHNldCB0byBgdHJ1ZWBcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIGB0cnVlYCB0aGVuIHRoZSBjaHJvbWVkcml2ZXIgaXMgc3VjY2Vzc2Z1bGx5XG4gICAqIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZC5cbiAgICovXG4gIGFzeW5jIHJldHJpZXZlRHJpdmVyIChpbmRleCwgZHJpdmVyS2V5LCBhcmNoaXZlc1Jvb3QsIGlzU3RyaWN0ID0gZmFsc2UpIHtcbiAgICBjb25zdCB7IHVybCwgZXRhZywgdmVyc2lvbiB9ID0gdGhpcy5tYXBwaW5nW2RyaXZlcktleV07XG4gICAgY29uc3QgYXJjaGl2ZVBhdGggPSBwYXRoLnJlc29sdmUoYXJjaGl2ZXNSb290LCBgJHtpbmRleH0uemlwYCk7XG4gICAgbG9nLmRlYnVnKGBSZXRyaWV2aW5nICcke3VybH0nIHRvICcke2FyY2hpdmVQYXRofSdgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV0LmRvd25sb2FkRmlsZSh1cmwsIGFyY2hpdmVQYXRoLCB7XG4gICAgICAgIGlzTWV0ZXJlZDogZmFsc2UsXG4gICAgICAgIHRpbWVvdXQ6IFRJTUVPVVRfTVNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGBDYW5ub3QgZG93bmxvYWQgY2hyb21lZHJpdmVyIGFyY2hpdmUuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gO1xuICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghYXdhaXQgaXNDcmNPayhhcmNoaXZlUGF0aCwgZXRhZykpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGBUaGUgY2hlY2tzdW0gZm9yIHRoZSBkb3dubG9hZGVkIGNocm9tZWRyaXZlciAnJHtkcml2ZXJLZXl9JyBkaWQgbm90IG1hdGNoYDtcbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcihtc2cpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBmaWxlTmFtZSA9IGAke3BhdGgucGFyc2UodXJsKS5uYW1lfV92JHt2ZXJzaW9ufWAgK1xuICAgICAgKHN5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnKTtcbiAgICBjb25zdCB0YXJnZXRQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuY2hyb21lZHJpdmVyRGlyLCBmaWxlTmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudW56aXBEcml2ZXIoYXJjaGl2ZVBhdGgsIHRhcmdldFBhdGgpO1xuICAgICAgYXdhaXQgZnMuY2htb2QodGFyZ2V0UGF0aCwgMG83NTUpO1xuICAgICAgbG9nLmRlYnVnKGBQZXJtaXNzaW9ucyBvZiB0aGUgZmlsZSAnJHt0YXJnZXRQYXRofScgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gNzU1YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gU3luY09wdGlvbnNcbiAgICogQHByb3BlcnR5IHtBcnJheTxTdHJpbmc+fSB2ZXJzaW9ucyAtIFRoZSBsaXN0IG9mIGNocm9tZWRyaXZlclxuICAgKiB2ZXJzaW9ucyB0byBzeW5jLiBJZiBlbXB0eSAodGhlIGRlZmF1bHQgdmFsdWUpIHRoZW4gYWxsIGF2YWlsYWJsZVxuICAgKiBjaHJvbWVkcml2ZXJzIGFyZSBnb2luZyB0byBiZSBkb3dubG9hZGVkIGFuZCBleHRyYWN0ZWRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSBtaW5Ccm93c2VyVmVyc2lvbiAtIFRoZSBtaW51bXVtIHN1cHBvcnRlZFxuICAgKiBDaHJvbWUgdmVyc2lvbiB0aGF0IGRvd25sb2FkZWQgY2hyb21lZHJpdmVycyBzaG91bGQgc3VwcG9ydC4gQ2FuIG1hdGNoXG4gICAqIG11bHRpcGxlIGRyaXZlcnMuXG4gICAqIEBwcm9wZXJ0eSB7P09TSW5mb30gb3NJbmZvIC0gU3lzdGVtIGluZm9ybWF0aW9uIHVzZWQgdG8gZmlsdGVyIG91dFxuICAgKiB0aGUgbGlzdCBvZiB0aGUgcmV0cmlldmVkIGRyaXZlcnMuIElmIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBzY3JpcHRcbiAgICogd2lsbCB0cnkgdG8gcmV0cmlldmUgaXQuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgY2hyb21lZHJpdmVycyBmcm9tIHRoZSByZW1vdGUgc3RvcmFnZVxuICAgKiB0byB0aGUgbG9jYWwgZmlsZSBzeXN0ZW1cbiAgICpcbiAgICogQHBhcmFtIHs/U3luY09wdGlvbnN9IG9wdHNcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gd2hpbGUgcmV0cmlldmluZ1xuICAgKiB0aGUgZHJpdmVyc1xuICAgKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nfSBUaGUgbGlzdCBvZiBzdWNjZXNzZnVsbHkgc3luY2hyb25pemVkIGRyaXZlciBrZXlzXG4gICAqL1xuICBhc3luYyBzeW5jRHJpdmVycyAob3B0cyA9IHt9KSB7XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLm1hcHBpbmcpKSB7XG4gICAgICBhd2FpdCB0aGlzLnJldHJpZXZlTWFwcGluZyghIW9wdHMubWluQnJvd3NlclZlcnNpb24pO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMubWFwcGluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJldHJpZXZlIGNocm9tZWRyaXZlcnMgbWFwcGluZyBmcm9tIEdvb2dsZSBzdG9yYWdlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHJpdmVyc1RvU3luYyA9IHRoaXMuc2VsZWN0TWF0Y2hpbmdEcml2ZXJzKG9wdHMub3NJbmZvID8/IGF3YWl0IGdldE9zSW5mbygpLCBvcHRzKTtcbiAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcnNUb1N5bmMpKSB7XG4gICAgICBsb2cuZGVidWcoYFRoZXJlIGFyZSBubyBkcml2ZXJzIHRvIHN5bmMuIEV4aXRpbmdgKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBHb3QgJHt1dGlsLnBsdXJhbGl6ZSgnZHJpdmVyJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfSB0byBzeW5jOiBgICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KGRyaXZlcnNUb1N5bmMsIG51bGwsIDIpKTtcblxuICAgIGNvbnN0IHN5bmNocm9uaXplZERyaXZlcnMgPSBbXTtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgIGNvbnN0IGFyY2hpdmVzUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IFtpZHgsIGRyaXZlcktleV0gb2YgZHJpdmVyc1RvU3luYy5lbnRyaWVzKCkpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaCgoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmIChhd2FpdCB0aGlzLnJldHJpZXZlRHJpdmVyKGlkeCwgZHJpdmVyS2V5LCBhcmNoaXZlc1Jvb3QsICFfLmlzRW1wdHkob3B0cykpKSB7XG4gICAgICAgICAgICBzeW5jaHJvbml6ZWREcml2ZXJzLnB1c2goZHJpdmVyS2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCkpO1xuXG4gICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggJSBNQVhfUEFSQUxMRUxfRE9XTkxPQURTID09PSAwKSB7XG4gICAgICAgICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZzLnJpbXJhZihhcmNoaXZlc1Jvb3QpO1xuICAgIH1cbiAgICBpZiAoIV8uaXNFbXB0eShzeW5jaHJvbml6ZWREcml2ZXJzKSkge1xuICAgICAgbG9nLmluZm8oYFN1Y2Nlc3NmdWxseSBzeW5jaHJvbml6ZWQgYCArXG4gICAgICAgIGAke3V0aWwucGx1cmFsaXplKCdjaHJvbWVkcml2ZXInLCBzeW5jaHJvbml6ZWREcml2ZXJzLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5pbmZvKGBObyBjaHJvbWVkcml2ZXJzIHdlcmUgc3luY2hyb25pemVkYCk7XG4gICAgfVxuICAgIHJldHVybiBzeW5jaHJvbml6ZWREcml2ZXJzO1xuICB9XG59XG5cblxuZXhwb3J0IGRlZmF1bHQgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVu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
|
package/build/lib/utils.js
CHANGED
|
@@ -24,23 +24,14 @@ var _driver = require("appium/driver");
|
|
|
24
24
|
|
|
25
25
|
var _path = _interopRequireDefault(require("path"));
|
|
26
26
|
|
|
27
|
-
var _compareVersions =
|
|
27
|
+
var _compareVersions = require("compare-versions");
|
|
28
28
|
|
|
29
29
|
var _axios = _interopRequireDefault(require("axios"));
|
|
30
30
|
|
|
31
31
|
var _teen_process = require("teen_process");
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
var _fs2 = _interopRequireDefault(require("fs"));
|
|
34
34
|
|
|
35
|
-
const CHROMEDRIVER_CHROME_MAPPING = require(_path.default.resolve(rootDir, 'config', 'mapping.json'));
|
|
36
|
-
|
|
37
|
-
exports.CHROMEDRIVER_CHROME_MAPPING = CHROMEDRIVER_CHROME_MAPPING;
|
|
38
|
-
const CD_VER = process.env.npm_config_chromedriver_version || process.env.CHROMEDRIVER_VERSION || getMostRecentChromedriver();
|
|
39
|
-
exports.CD_VER = CD_VER;
|
|
40
|
-
|
|
41
|
-
const CD_BASE_DIR = _path.default.resolve(__dirname, '..', '..', 'chromedriver');
|
|
42
|
-
|
|
43
|
-
exports.CD_BASE_DIR = CD_BASE_DIR;
|
|
44
35
|
const CD_CDN = process.env.npm_config_chromedriver_cdnurl || process.env.CHROMEDRIVER_CDNURL || 'https://chromedriver.storage.googleapis.com';
|
|
45
36
|
exports.CD_CDN = CD_CDN;
|
|
46
37
|
const OS = {
|
|
@@ -57,14 +48,46 @@ const M1_ARCH_SUFFIX = '_m1';
|
|
|
57
48
|
exports.M1_ARCH_SUFFIX = M1_ARCH_SUFFIX;
|
|
58
49
|
const CD_EXECUTABLE_PREFIX = 'chromedriver';
|
|
59
50
|
|
|
51
|
+
const getModuleRoot = _lodash.default.memoize(function getModuleRoot() {
|
|
52
|
+
let currentDir = _path.default.dirname(_path.default.resolve(__filename));
|
|
53
|
+
|
|
54
|
+
let isAtFsRoot = false;
|
|
55
|
+
|
|
56
|
+
while (!isAtFsRoot) {
|
|
57
|
+
const manifestPath = _path.default.join(currentDir, 'package.json');
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
if (_fs2.default.existsSync(manifestPath) && JSON.parse(_fs2.default.readFileSync(manifestPath, 'utf8')).name === 'appium-chromedriver') {
|
|
61
|
+
return currentDir;
|
|
62
|
+
}
|
|
63
|
+
} catch (ign) {}
|
|
64
|
+
|
|
65
|
+
currentDir = _path.default.dirname(currentDir);
|
|
66
|
+
isAtFsRoot = currentDir.length <= _path.default.dirname(currentDir).length;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
throw new Error('Cannot find the root folder of the appium-chromedriver Node.js module');
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const CHROMEDRIVER_CHROME_MAPPING = require(_path.default.join(getModuleRoot(), 'config', 'mapping.json'));
|
|
73
|
+
|
|
74
|
+
exports.CHROMEDRIVER_CHROME_MAPPING = CHROMEDRIVER_CHROME_MAPPING;
|
|
75
|
+
|
|
76
|
+
const CD_BASE_DIR = _path.default.join(getModuleRoot(), 'chromedriver');
|
|
77
|
+
|
|
78
|
+
exports.CD_BASE_DIR = CD_BASE_DIR;
|
|
79
|
+
|
|
60
80
|
function getMostRecentChromedriver(mapping = CHROMEDRIVER_CHROME_MAPPING) {
|
|
61
81
|
if (_lodash.default.isEmpty(mapping)) {
|
|
62
82
|
throw new Error('Unable to get most recent Chromedriver version from empty mapping');
|
|
63
83
|
}
|
|
64
84
|
|
|
65
|
-
return _lodash.default.last(_lodash.default.keys(mapping).sort(_compareVersions.
|
|
85
|
+
return _lodash.default.last(_lodash.default.keys(mapping).sort(_compareVersions.compareVersions));
|
|
66
86
|
}
|
|
67
87
|
|
|
88
|
+
const CD_VER = process.env.npm_config_chromedriver_version || process.env.CHROMEDRIVER_VERSION || getMostRecentChromedriver();
|
|
89
|
+
exports.CD_VER = CD_VER;
|
|
90
|
+
|
|
68
91
|
async function getChromeVersion(adb, bundleId) {
|
|
69
92
|
const {
|
|
70
93
|
versionName
|
|
@@ -130,7 +153,5 @@ const getBaseDriverInstance = _lodash.default.memoize(() => new _driver.BaseDriv
|
|
|
130
153
|
|
|
131
154
|
function generateLogPrefix(obj, sessionId = null) {
|
|
132
155
|
return getBaseDriverInstance().helpers.generateDriverLogPrefix(obj, sessionId);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsicm9vdERpciIsInBhdGgiLCJiYXNlbmFtZSIsIl9fZGlybmFtZSIsInJlc29sdmUiLCJwcm9jZXNzIiwiZW52IiwiTk9fUFJFQ09NUElMRSIsIkNIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyIsInJlcXVpcmUiLCJDRF9WRVIiLCJucG1fY29uZmlnX2Nocm9tZWRyaXZlcl92ZXJzaW9uIiwiQ0hST01FRFJJVkVSX1ZFUlNJT04iLCJnZXRNb3N0UmVjZW50Q2hyb21lZHJpdmVyIiwiQ0RfQkFTRV9ESVIiLCJDRF9DRE4iLCJucG1fY29uZmlnX2Nocm9tZWRyaXZlcl9jZG51cmwiLCJDSFJPTUVEUklWRVJfQ0ROVVJMIiwiT1MiLCJsaW51eCIsIndpbmRvd3MiLCJtYWMiLCJYNjQiLCJYODYiLCJNMV9BUkNIX1NVRkZJWCIsIkNEX0VYRUNVVEFCTEVfUFJFRklYIiwibWFwcGluZyIsIl8iLCJpc0VtcHR5IiwiRXJyb3IiLCJsYXN0Iiwia2V5cyIsInNvcnQiLCJjb21wYXJlVmVyc2lvbnMiLCJnZXRDaHJvbWVWZXJzaW9uIiwiYWRiIiwiYnVuZGxlSWQiLCJ2ZXJzaW9uTmFtZSIsImdldFBhY2thZ2VJbmZvIiwiZ2V0Q2hyb21lZHJpdmVyRGlyIiwib3NOYW1lIiwiZ2V0T3NOYW1lIiwiZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCIsInBhdGhTdWZmaXgiLCJwYXRocyIsImZzIiwiZ2xvYiIsImN3ZCIsImFic29sdXRlIiwibm9jYXNlIiwibm9kaXIiLCJzdHJpY3QiLCJmaXJzdCIsInJldHJpZXZlRGF0YSIsInVybCIsImhlYWRlcnMiLCJvcHRzIiwidGltZW91dCIsInJlc3BvbnNlVHlwZSIsImF4aW9zIiwiZGF0YSIsIm1lbW9pemUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJpc01hYyIsImdldE9zSW5mbyIsIm5hbWUiLCJhcmNoIiwiaGFyZHdhcmVOYW1lIiwidHJpbSIsImV4ZWMiLCJnZXRCYXNlRHJpdmVySW5zdGFuY2UiLCJCYXNlRHJpdmVyIiwiZ2VuZXJhdGVMb2dQcmVmaXgiLCJvYmoiLCJzZXNzaW9uSWQiLCJoZWxwZXJzIiwiZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXgiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHN5c3RlbSwgZnMgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBjb21wYXJlVmVyc2lvbnMgZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5cblxuY29uc3Qgcm9vdERpciA9IHBhdGguYmFzZW5hbWUoX19kaXJuYW1lKSA9PT0gJ2xpYidcbiAgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBwcm9jZXNzLmVudi5OT19QUkVDT01QSUxFID8gJy4uJyA6ICcuLi8uLicpXG4gIDogX19kaXJuYW1lO1xuLy8gQ2hyb21lZHJpdmVyIHZlcnNpb246IG1pbmltdW0gQ2hyb21lIHZlcnNpb25cbmNvbnN0IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyA9IHJlcXVpcmUocGF0aC5yZXNvbHZlKHJvb3REaXIsICdjb25maWcnLCAnbWFwcGluZy5qc29uJykpO1xuXG5jb25zdCBDRF9WRVIgPSBwcm9jZXNzLmVudi5ucG1fY29uZmlnX2Nocm9tZWRyaXZlcl92ZXJzaW9uXG4gIHx8IHByb2Nlc3MuZW52LkNIUk9NRURSSVZFUl9WRVJTSU9OXG4gIHx8IGdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIoKTtcbmNvbnN0IENEX0JBU0VfRElSID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2Nocm9tZWRyaXZlcicpO1xuY29uc3QgQ0RfQ0ROID0gcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19jaHJvbWVkcml2ZXJfY2RudXJsXG4gIHx8IHByb2Nlc3MuZW52LkNIUk9NRURSSVZFUl9DRE5VUkxcbiAgfHwgJ2h0dHBzOi8vY2hyb21lZHJpdmVyLnN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20nO1xuY29uc3QgT1MgPSB7XG4gIGxpbnV4OiAnbGludXgnLFxuICB3aW5kb3dzOiAnd2luJyxcbiAgbWFjOiAnbWFjJ1xufTtcbmNvbnN0IFg2NCA9ICc2NCc7XG5jb25zdCBYODYgPSAnMzInO1xuY29uc3QgTTFfQVJDSF9TVUZGSVggPSAnX20xJztcbmNvbnN0IENEX0VYRUNVVEFCTEVfUFJFRklYID0gJ2Nocm9tZWRyaXZlcic7XG5cblxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlciAobWFwcGluZyA9IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORykge1xuICBpZiAoXy5pc0VtcHR5KG1hcHBpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uIGZyb20gZW1wdHkgbWFwcGluZycpO1xuICB9XG4gIHJldHVybiBfLmxhc3QoXy5rZXlzKG1hcHBpbmcpLnNvcnQoY29tcGFyZVZlcnNpb25zKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENocm9tZVZlcnNpb24gKGFkYiwgYnVuZGxlSWQpIHtcbiAgY29uc3Qge3ZlcnNpb25OYW1lfSA9IGF3YWl0IGFkYi5nZXRQYWNrYWdlSW5mbyhidW5kbGVJZCk7XG4gIHJldHVybiB2ZXJzaW9uTmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyRGlyIChvc05hbWUgPSBnZXRPc05hbWUoKSkge1xuICByZXR1cm4gcGF0aC5yZXNvbHZlKENEX0JBU0VfRElSLCBvc05hbWUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIChvc05hbWUgPSBnZXRPc05hbWUoKSkge1xuICBjb25zdCByb290RGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKG9zTmFtZSk7XG4gIGNvbnN0IHBhdGhTdWZmaXggPSBvc05hbWUgPT09IE9TLndpbmRvd3MgPyAnLmV4ZScgOiAnJztcbiAgY29uc3QgcGF0aHMgPSBhd2FpdCBmcy5nbG9iKGAke0NEX0VYRUNVVEFCTEVfUFJFRklYfSoke3BhdGhTdWZmaXh9YCwge1xuICAgIGN3ZDogcm9vdERpcixcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBub2Nhc2U6IHRydWUsXG4gICAgbm9kaXI6IHRydWUsXG4gICAgc3RyaWN0OiBmYWxzZSxcbiAgfSk7XG4gIHJldHVybiBfLmlzRW1wdHkocGF0aHMpXG4gICAgPyBwYXRoLnJlc29sdmUocm9vdERpciwgYCR7Q0RfRVhFQ1VUQUJMRV9QUkVGSVh9JHtwYXRoU3VmZml4fWApXG4gICAgOiBfLmZpcnN0KHBhdGhzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVEYXRhICh1cmwsIGhlYWRlcnMsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gICAgcmVzcG9uc2VUeXBlID0gJ3RleHQnLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgdXJsLFxuICAgIGhlYWRlcnMsXG4gICAgdGltZW91dCxcbiAgICByZXNwb25zZVR5cGUsXG4gIH0pKS5kYXRhO1xufVxuXG5jb25zdCBnZXRPc05hbWUgPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0T3NOYW1lICgpIHtcbiAgaWYgKHN5c3RlbS5pc1dpbmRvd3MoKSkge1xuICAgIHJldHVybiBPUy53aW5kb3dzO1xuICB9XG4gIGlmIChzeXN0ZW0uaXNNYWMoKSkge1xuICAgIHJldHVybiBPUy5tYWM7XG4gIH1cbiAgcmV0dXJuIE9TLmxpbnV4O1xufSk7XG5cbmNvbnN0IGdldE9zSW5mbyA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRPc0luZm8gKCkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGdldE9zTmFtZSgpLFxuICAgIGFyY2g6IGF3YWl0IHN5c3RlbS5hcmNoKCksXG4gICAgaGFyZHdhcmVOYW1lOiBzeXN0ZW0uaXNXaW5kb3dzKCkgPyBudWxsIDogXy50cmltKGF3YWl0IGV4ZWMoJ3VuYW1lJywgWyctbSddKSksXG4gIH07XG59KTtcblxuY29uc3QgZ2V0QmFzZURyaXZlckluc3RhbmNlID0gXy5tZW1vaXplKCgpID0+IG5ldyBCYXNlRHJpdmVyKHt9LCBmYWxzZSkpO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBsb2cgcHJlZml4IHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmogbG9nIG93bmVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZz99IHNlc3Npb25JZCBPcHRpb25hbCBzZXNzaW9uIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlTG9nUHJlZml4IChvYmosIHNlc3Npb25JZCA9IG51bGwpIHtcbiAgcmV0dXJuIGdldEJhc2VEcml2ZXJJbnN0YW5jZSgpLmhlbHBlcnMuZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXgob2JqLCBzZXNzaW9uSWQpO1xufVxuXG5cbmV4cG9ydCB7XG4gIGdldENocm9tZVZlcnNpb24sIGdldENocm9tZWRyaXZlckRpciwgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCwgZ2V0T3NOYW1lLFxuICBDRF9CQVNFX0RJUiwgQ0RfQ0ROLCBDRF9WRVIsIENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORywgZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlcixcbiAgcmV0cmlldmVEYXRhLCBnZXRPc0luZm8sIE9TLCBYNjQsIFg4NiwgTTFfQVJDSF9TVUZGSVgsIGdlbmVyYXRlTG9nUHJlZml4LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7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
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDRF9DRE4iLCJwcm9jZXNzIiwiZW52IiwibnBtX2NvbmZpZ19jaHJvbWVkcml2ZXJfY2RudXJsIiwiQ0hST01FRFJJVkVSX0NETlVSTCIsIk9TIiwibGludXgiLCJ3aW5kb3dzIiwibWFjIiwiWDY0IiwiWDg2IiwiTTFfQVJDSF9TVUZGSVgiLCJDRF9FWEVDVVRBQkxFX1BSRUZJWCIsImdldE1vZHVsZVJvb3QiLCJfIiwibWVtb2l6ZSIsImN1cnJlbnREaXIiLCJwYXRoIiwiZGlybmFtZSIsInJlc29sdmUiLCJfX2ZpbGVuYW1lIiwiaXNBdEZzUm9vdCIsIm1hbmlmZXN0UGF0aCIsImpvaW4iLCJfZnMiLCJleGlzdHNTeW5jIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGVTeW5jIiwibmFtZSIsImlnbiIsImxlbmd0aCIsIkVycm9yIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwicmVxdWlyZSIsIkNEX0JBU0VfRElSIiwiZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlciIsIm1hcHBpbmciLCJpc0VtcHR5IiwibGFzdCIsImtleXMiLCJzb3J0IiwiY29tcGFyZVZlcnNpb25zIiwiQ0RfVkVSIiwibnBtX2NvbmZpZ19jaHJvbWVkcml2ZXJfdmVyc2lvbiIsIkNIUk9NRURSSVZFUl9WRVJTSU9OIiwiZ2V0Q2hyb21lVmVyc2lvbiIsImFkYiIsImJ1bmRsZUlkIiwidmVyc2lvbk5hbWUiLCJnZXRQYWNrYWdlSW5mbyIsImdldENocm9tZWRyaXZlckRpciIsIm9zTmFtZSIsImdldE9zTmFtZSIsImdldENocm9tZWRyaXZlckJpbmFyeVBhdGgiLCJyb290RGlyIiwicGF0aFN1ZmZpeCIsInBhdGhzIiwiZnMiLCJnbG9iIiwiY3dkIiwiYWJzb2x1dGUiLCJub2Nhc2UiLCJub2RpciIsInN0cmljdCIsImZpcnN0IiwicmV0cmlldmVEYXRhIiwidXJsIiwiaGVhZGVycyIsIm9wdHMiLCJ0aW1lb3V0IiwicmVzcG9uc2VUeXBlIiwiYXhpb3MiLCJkYXRhIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiaXNNYWMiLCJnZXRPc0luZm8iLCJhcmNoIiwiaGFyZHdhcmVOYW1lIiwidHJpbSIsImV4ZWMiLCJnZXRCYXNlRHJpdmVySW5zdGFuY2UiLCJCYXNlRHJpdmVyIiwiZ2VuZXJhdGVMb2dQcmVmaXgiLCJvYmoiLCJzZXNzaW9uSWQiLCJoZWxwZXJzIiwiZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXgiXSwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHN5c3RlbSwgZnMgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IF9mcyBmcm9tICdmcyc7XG5cbmNvbnN0IENEX0NETiA9IHByb2Nlc3MuZW52Lm5wbV9jb25maWdfY2hyb21lZHJpdmVyX2NkbnVybFxuICB8fCBwcm9jZXNzLmVudi5DSFJPTUVEUklWRVJfQ0ROVVJMXG4gIHx8ICdodHRwczovL2Nocm9tZWRyaXZlci5zdG9yYWdlLmdvb2dsZWFwaXMuY29tJztcbmNvbnN0IE9TID0ge1xuICBsaW51eDogJ2xpbnV4JyxcbiAgd2luZG93czogJ3dpbicsXG4gIG1hYzogJ21hYydcbn07XG5jb25zdCBYNjQgPSAnNjQnO1xuY29uc3QgWDg2ID0gJzMyJztcbmNvbnN0IE0xX0FSQ0hfU1VGRklYID0gJ19tMSc7XG5jb25zdCBDRF9FWEVDVVRBQkxFX1BSRUZJWCA9ICdjaHJvbWVkcml2ZXInO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHBhdGggdG8gdGhlIGN1cnJlbnQgbW9kdWxlJ3Mgcm9vdCBmb2xkZXJcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIG1vZHVsZSByb290XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGN1cnJlbnQgbW9kdWxlIHJvb3QgZm9sZGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gKi9cbmNvbnN0IGdldE1vZHVsZVJvb3QgPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0TW9kdWxlUm9vdCAoKSB7XG4gIGxldCBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKHBhdGgucmVzb2x2ZShfX2ZpbGVuYW1lKSk7XG4gIGxldCBpc0F0RnNSb290ID0gZmFsc2U7XG4gIHdoaWxlICghaXNBdEZzUm9vdCkge1xuICAgIGNvbnN0IG1hbmlmZXN0UGF0aCA9IHBhdGguam9pbihjdXJyZW50RGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChfZnMuZXhpc3RzU3luYyhtYW5pZmVzdFBhdGgpICYmXG4gICAgICAgICAgSlNPTi5wYXJzZShfZnMucmVhZEZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgJ3V0ZjgnKSkubmFtZSA9PT0gJ2FwcGl1bS1jaHJvbWVkcml2ZXInKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50RGlyO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgIGlzQXRGc1Jvb3QgPSBjdXJyZW50RGlyLmxlbmd0aCA8PSBwYXRoLmRpcm5hbWUoY3VycmVudERpcikubGVuZ3RoO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBhcHBpdW0tY2hyb21lZHJpdmVyIE5vZGUuanMgbW9kdWxlJyk7XG59KTtcblxuLy8gQ2hyb21lZHJpdmVyIHZlcnNpb246IG1pbmltdW0gQ2hyb21lIHZlcnNpb25cbmNvbnN0IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyA9IHJlcXVpcmUocGF0aC5qb2luKGdldE1vZHVsZVJvb3QoKSwgJ2NvbmZpZycsICdtYXBwaW5nLmpzb24nKSk7XG5jb25zdCBDRF9CQVNFX0RJUiA9IHBhdGguam9pbihnZXRNb2R1bGVSb290KCksICdjaHJvbWVkcml2ZXInKTtcblxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlciAobWFwcGluZyA9IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORykge1xuICBpZiAoXy5pc0VtcHR5KG1hcHBpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uIGZyb20gZW1wdHkgbWFwcGluZycpO1xuICB9XG4gIHJldHVybiBfLmxhc3QoXy5rZXlzKG1hcHBpbmcpLnNvcnQoY29tcGFyZVZlcnNpb25zKSk7XG59XG5cbmNvbnN0IENEX1ZFUiA9IHByb2Nlc3MuZW52Lm5wbV9jb25maWdfY2hyb21lZHJpdmVyX3ZlcnNpb25cbiAgfHwgcHJvY2Vzcy5lbnYuQ0hST01FRFJJVkVSX1ZFUlNJT05cbiAgfHwgZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlcigpO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRDaHJvbWVWZXJzaW9uIChhZGIsIGJ1bmRsZUlkKSB7XG4gIGNvbnN0IHt2ZXJzaW9uTmFtZX0gPSBhd2FpdCBhZGIuZ2V0UGFja2FnZUluZm8oYnVuZGxlSWQpO1xuICByZXR1cm4gdmVyc2lvbk5hbWU7XG59XG5cbmZ1bmN0aW9uIGdldENocm9tZWRyaXZlckRpciAob3NOYW1lID0gZ2V0T3NOYW1lKCkpIHtcbiAgcmV0dXJuIHBhdGgucmVzb2x2ZShDRF9CQVNFX0RJUiwgb3NOYW1lKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCAob3NOYW1lID0gZ2V0T3NOYW1lKCkpIHtcbiAgY29uc3Qgcm9vdERpciA9IGdldENocm9tZWRyaXZlckRpcihvc05hbWUpO1xuICBjb25zdCBwYXRoU3VmZml4ID0gb3NOYW1lID09PSBPUy53aW5kb3dzID8gJy5leGUnIDogJyc7XG4gIGNvbnN0IHBhdGhzID0gYXdhaXQgZnMuZ2xvYihgJHtDRF9FWEVDVVRBQkxFX1BSRUZJWH0qJHtwYXRoU3VmZml4fWAsIHtcbiAgICBjd2Q6IHJvb3REaXIsXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gICAgbm9jYXNlOiB0cnVlLFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIHN0cmljdDogZmFsc2UsXG4gIH0pO1xuICByZXR1cm4gXy5pc0VtcHR5KHBhdGhzKVxuICAgID8gcGF0aC5yZXNvbHZlKHJvb3REaXIsIGAke0NEX0VYRUNVVEFCTEVfUFJFRklYfSR7cGF0aFN1ZmZpeH1gKVxuICAgIDogXy5maXJzdChwYXRocyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlRGF0YSAodXJsLCBoZWFkZXJzLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQgPSA1MDAwLFxuICAgIHJlc3BvbnNlVHlwZSA9ICd0ZXh0JyxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiAoYXdhaXQgYXhpb3Moe1xuICAgIHVybCxcbiAgICBoZWFkZXJzLFxuICAgIHRpbWVvdXQsXG4gICAgcmVzcG9uc2VUeXBlLFxuICB9KSkuZGF0YTtcbn1cblxuY29uc3QgZ2V0T3NOYW1lID0gXy5tZW1vaXplKGZ1bmN0aW9uIGdldE9zTmFtZSAoKSB7XG4gIGlmIChzeXN0ZW0uaXNXaW5kb3dzKCkpIHtcbiAgICByZXR1cm4gT1Mud2luZG93cztcbiAgfVxuICBpZiAoc3lzdGVtLmlzTWFjKCkpIHtcbiAgICByZXR1cm4gT1MubWFjO1xuICB9XG4gIHJldHVybiBPUy5saW51eDtcbn0pO1xuXG5jb25zdCBnZXRPc0luZm8gPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0T3NJbmZvICgpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBnZXRPc05hbWUoKSxcbiAgICBhcmNoOiBhd2FpdCBzeXN0ZW0uYXJjaCgpLFxuICAgIGhhcmR3YXJlTmFtZTogc3lzdGVtLmlzV2luZG93cygpID8gbnVsbCA6IF8udHJpbShhd2FpdCBleGVjKCd1bmFtZScsIFsnLW0nXSkpLFxuICB9O1xufSk7XG5cbmNvbnN0IGdldEJhc2VEcml2ZXJJbnN0YW5jZSA9IF8ubWVtb2l6ZSgoKSA9PiBuZXcgQmFzZURyaXZlcih7fSwgZmFsc2UpKTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgbG9nIHByZWZpeCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqIGxvZyBvd25lciBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmc/fSBzZXNzaW9uSWQgT3B0aW9uYWwgc2Vzc2lvbiBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUxvZ1ByZWZpeCAob2JqLCBzZXNzaW9uSWQgPSBudWxsKSB7XG4gIHJldHVybiBnZXRCYXNlRHJpdmVySW5zdGFuY2UoKS5oZWxwZXJzLmdlbmVyYXRlRHJpdmVyTG9nUHJlZml4KG9iaiwgc2Vzc2lvbklkKTtcbn1cblxuXG5leHBvcnQge1xuICBnZXRDaHJvbWVWZXJzaW9uLCBnZXRDaHJvbWVkcml2ZXJEaXIsIGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgsIGdldE9zTmFtZSxcbiAgQ0RfQkFTRV9ESVIsIENEX0NETiwgQ0RfVkVSLCBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsIGdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIsXG4gIHJldHJpZXZlRGF0YSwgZ2V0T3NJbmZvLCBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLCBnZW5lcmF0ZUxvZ1ByZWZpeCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLE1BQU0sR0FBR0MsT0FBTyxDQUFDQyxHQUFSLENBQVlDLDhCQUFaLElBQ1ZGLE9BQU8sQ0FB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
|
package/config/mapping.json
CHANGED
package/lib/chromedriver.js
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
import semver from 'semver';
|
|
15
15
|
import _ from 'lodash';
|
|
16
16
|
import path from 'path';
|
|
17
|
-
import compareVersions from 'compare-versions';
|
|
17
|
+
import { compareVersions } from 'compare-versions';
|
|
18
18
|
import ChromedriverStorageClient from './storage-client';
|
|
19
19
|
import { toW3cCapNames, getCapValue } from './protocol-helpers';
|
|
20
20
|
|
package/lib/utils.js
CHANGED
|
@@ -2,21 +2,11 @@ import _ from 'lodash';
|
|
|
2
2
|
import { system, fs } from 'appium/support';
|
|
3
3
|
import { BaseDriver } from 'appium/driver';
|
|
4
4
|
import path from 'path';
|
|
5
|
-
import compareVersions from 'compare-versions';
|
|
5
|
+
import { compareVersions } from 'compare-versions';
|
|
6
6
|
import axios from 'axios';
|
|
7
7
|
import { exec } from 'teen_process';
|
|
8
|
+
import _fs from 'fs';
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
const rootDir = path.basename(__dirname) === 'lib'
|
|
11
|
-
? path.resolve(__dirname, process.env.NO_PRECOMPILE ? '..' : '../..')
|
|
12
|
-
: __dirname;
|
|
13
|
-
// Chromedriver version: minimum Chrome version
|
|
14
|
-
const CHROMEDRIVER_CHROME_MAPPING = require(path.resolve(rootDir, 'config', 'mapping.json'));
|
|
15
|
-
|
|
16
|
-
const CD_VER = process.env.npm_config_chromedriver_version
|
|
17
|
-
|| process.env.CHROMEDRIVER_VERSION
|
|
18
|
-
|| getMostRecentChromedriver();
|
|
19
|
-
const CD_BASE_DIR = path.resolve(__dirname, '..', '..', 'chromedriver');
|
|
20
10
|
const CD_CDN = process.env.npm_config_chromedriver_cdnurl
|
|
21
11
|
|| process.env.CHROMEDRIVER_CDNURL
|
|
22
12
|
|| 'https://chromedriver.storage.googleapis.com';
|
|
@@ -30,6 +20,32 @@ const X86 = '32';
|
|
|
30
20
|
const M1_ARCH_SUFFIX = '_m1';
|
|
31
21
|
const CD_EXECUTABLE_PREFIX = 'chromedriver';
|
|
32
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Calculates the path to the current module's root folder
|
|
25
|
+
*
|
|
26
|
+
* @returns {string} The full path to module root
|
|
27
|
+
* @throws {Error} If the current module root folder cannot be determined
|
|
28
|
+
*/
|
|
29
|
+
const getModuleRoot = _.memoize(function getModuleRoot () {
|
|
30
|
+
let currentDir = path.dirname(path.resolve(__filename));
|
|
31
|
+
let isAtFsRoot = false;
|
|
32
|
+
while (!isAtFsRoot) {
|
|
33
|
+
const manifestPath = path.join(currentDir, 'package.json');
|
|
34
|
+
try {
|
|
35
|
+
if (_fs.existsSync(manifestPath) &&
|
|
36
|
+
JSON.parse(_fs.readFileSync(manifestPath, 'utf8')).name === 'appium-chromedriver') {
|
|
37
|
+
return currentDir;
|
|
38
|
+
}
|
|
39
|
+
} catch (ign) {}
|
|
40
|
+
currentDir = path.dirname(currentDir);
|
|
41
|
+
isAtFsRoot = currentDir.length <= path.dirname(currentDir).length;
|
|
42
|
+
}
|
|
43
|
+
throw new Error('Cannot find the root folder of the appium-chromedriver Node.js module');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Chromedriver version: minimum Chrome version
|
|
47
|
+
const CHROMEDRIVER_CHROME_MAPPING = require(path.join(getModuleRoot(), 'config', 'mapping.json'));
|
|
48
|
+
const CD_BASE_DIR = path.join(getModuleRoot(), 'chromedriver');
|
|
33
49
|
|
|
34
50
|
function getMostRecentChromedriver (mapping = CHROMEDRIVER_CHROME_MAPPING) {
|
|
35
51
|
if (_.isEmpty(mapping)) {
|
|
@@ -38,6 +54,10 @@ function getMostRecentChromedriver (mapping = CHROMEDRIVER_CHROME_MAPPING) {
|
|
|
38
54
|
return _.last(_.keys(mapping).sort(compareVersions));
|
|
39
55
|
}
|
|
40
56
|
|
|
57
|
+
const CD_VER = process.env.npm_config_chromedriver_version
|
|
58
|
+
|| process.env.CHROMEDRIVER_VERSION
|
|
59
|
+
|| getMostRecentChromedriver();
|
|
60
|
+
|
|
41
61
|
async function getChromeVersion (adb, bundleId) {
|
|
42
62
|
const {versionName} = await adb.getPackageInfo(bundleId);
|
|
43
63
|
return versionName;
|
package/package.json
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
"chrome",
|
|
7
7
|
"android"
|
|
8
8
|
],
|
|
9
|
-
"version": "5.1
|
|
10
|
-
"author": "
|
|
9
|
+
"version": "5.2.1",
|
|
10
|
+
"author": "Appium Contributors",
|
|
11
11
|
"license": "Apache-2.0",
|
|
12
12
|
"repository": {
|
|
13
13
|
"type": "git",
|
|
@@ -18,7 +18,17 @@
|
|
|
18
18
|
},
|
|
19
19
|
"engines": {
|
|
20
20
|
"node": ">=14",
|
|
21
|
-
"npm": ">=
|
|
21
|
+
"npm": ">=8"
|
|
22
|
+
},
|
|
23
|
+
"lint-staged": {
|
|
24
|
+
"*.js": [
|
|
25
|
+
"eslint --fix"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"prettier": {
|
|
29
|
+
"bracketSpacing": false,
|
|
30
|
+
"printWidth": 100,
|
|
31
|
+
"singleQuote": true
|
|
22
32
|
},
|
|
23
33
|
"main": "./build/index.js",
|
|
24
34
|
"directories": {
|
|
@@ -39,7 +49,7 @@
|
|
|
39
49
|
"asyncbox": "^2.0.2",
|
|
40
50
|
"axios": "^0.x",
|
|
41
51
|
"bluebird": "^3.5.1",
|
|
42
|
-
"compare-versions": "^
|
|
52
|
+
"compare-versions": "^5.0.0",
|
|
43
53
|
"fancy-log": "^2.0.0",
|
|
44
54
|
"lodash": "^4.17.4",
|
|
45
55
|
"semver": "^7.0.0",
|
|
@@ -49,39 +59,46 @@
|
|
|
49
59
|
},
|
|
50
60
|
"pre-commit": [
|
|
51
61
|
"precommit-msg",
|
|
52
|
-
"precommit-
|
|
62
|
+
"precommit-lint"
|
|
53
63
|
],
|
|
54
64
|
"scripts": {
|
|
55
|
-
"
|
|
65
|
+
"build": "rimraf build && babel --out-dir=build/lib lib && babel --out-dir=build index.js",
|
|
66
|
+
"dev": "npm run build -- --watch",
|
|
67
|
+
"lint": "eslint .",
|
|
68
|
+
"lint:fix": "npm run lint -- --fix",
|
|
56
69
|
"postinstall": "node install-npm.js",
|
|
57
|
-
"prepublishOnly": "gulp prepublish",
|
|
58
|
-
"test": "gulp once",
|
|
59
|
-
"watch": "gulp watch",
|
|
60
|
-
"build": "gulp transpile",
|
|
61
|
-
"coverage": "gulp coveralls",
|
|
62
|
-
"e2e-test": "gulp e2e-test",
|
|
63
|
-
"chromedriver": "node install-npm.js",
|
|
64
|
-
"chromedriver_all": "node install-npm.js --all",
|
|
65
70
|
"precommit-msg": "echo 'Pre-commit checks...' && exit 0",
|
|
66
|
-
"precommit-
|
|
67
|
-
"
|
|
68
|
-
"
|
|
71
|
+
"precommit-lint": "lint-staged",
|
|
72
|
+
"prepare": "npm run build",
|
|
73
|
+
"test": "mocha --exit --timeout 1m \"./test/unit/**/*-specs.js\"",
|
|
74
|
+
"e2e-test": "mocha --exit --timeout 10m \"./test/functional/**/*-specs.js\""
|
|
69
75
|
},
|
|
70
76
|
"peerDependencies": {
|
|
71
77
|
"appium": "^2.0.0-beta.40"
|
|
72
78
|
},
|
|
73
79
|
"devDependencies": {
|
|
74
|
-
"@appium/gulp-plugins": "^7.0.0",
|
|
75
80
|
"@appium/eslint-config-appium": "^6.0.0",
|
|
76
81
|
"@appium/test-support": "^1.0.0",
|
|
82
|
+
"@babel/cli": "^7.18.10",
|
|
83
|
+
"@babel/core": "^7.18.10",
|
|
84
|
+
"@babel/eslint-parser": "^7.18.9",
|
|
85
|
+
"@babel/plugin-transform-runtime": "^7.18.10",
|
|
86
|
+
"@babel/preset-env": "^7.18.10",
|
|
87
|
+
"@babel/register": "^7.18.9",
|
|
77
88
|
"@semantic-release/git": "^10.0.1",
|
|
78
|
-
"
|
|
89
|
+
"babel-plugin-source-map-support": "^2.2.0",
|
|
79
90
|
"chai": "^4.1.2",
|
|
80
91
|
"chai-as-promised": "^7.1.1",
|
|
92
|
+
"eslint": "^7.32.0",
|
|
81
93
|
"eslint-config-prettier": "^8.5.0",
|
|
82
|
-
"
|
|
94
|
+
"eslint-plugin-import": "^2.26.0",
|
|
95
|
+
"eslint-plugin-mocha": "^9.0.0",
|
|
96
|
+
"eslint-plugin-promise": "^6.0.0",
|
|
97
|
+
"lint-staged": "^13.0.3",
|
|
83
98
|
"mocha": "^10.0.0",
|
|
84
99
|
"pre-commit": "^1.1.3",
|
|
100
|
+
"prettier": "^2.7.1",
|
|
101
|
+
"rimraf": "^3.0.2",
|
|
85
102
|
"semantic-release": "^19.0.2",
|
|
86
103
|
"sinon": "^14.0.0"
|
|
87
104
|
}
|