appium-espresso-driver 2.1.2 → 2.2.2
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 +3 -2
- package/build/lib/commands/general.js +9 -15
- package/build/lib/driver.js +32 -47
- package/build/lib/espresso-runner.js +41 -66
- package/build/lib/server-builder.js +12 -21
- package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
- package/espresso-server/app/build.gradle.kts +12 -10
- package/espresso-server/build.gradle.kts +9 -8
- package/lib/commands/general.js +6 -9
- package/lib/driver.js +31 -32
- package/lib/espresso-runner.js +40 -39
- package/lib/server-builder.js +12 -13
- package/npm-shrinkwrap.json +1771 -1761
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -225,9 +225,10 @@ buildTools | Target Android build tools version to compile the server with. By d
|
|
|
225
225
|
minSdk | Minimum Android SDK version to compile the server for. By default the version from the app [build.gradle.kts](https://github.com/appium/appium-espresso-driver/blob/master/espresso-server/app/build.gradle.kts) is used | 18
|
|
226
226
|
targetSdk | Target Android SDK version to compile the server for. By default the version from the app [build.gradle.kts](https://github.com/appium/appium-espresso-driver/blob/master/espresso-server/app/build.gradle.kts) is used | 28
|
|
227
227
|
kotlin | Kotlin version to compile the server for. By default the version from the [build.gradle.kts](https://github.com/appium/appium-espresso-driver/blob/master/espresso-server/build.gradle.kts) is used | '1.3.72'
|
|
228
|
+
composeVersion | The version for the Jetpack Compose dependencies to use for Espresso server building. By default the version from the [build.gradle.kts](https://github.com/appium/appium-espresso-driver/blob/master/espresso-server/build.gradle.kts) is used | '1.1.1'
|
|
228
229
|
sourceCompatibility | The minimum version of JVM the project sources are compatible with. The default value is `VERSION_1_8` | VERSION_12
|
|
229
|
-
|
|
230
|
-
jvmTarget | Target version of the generated JVM bytecode as a string. The default value is `
|
|
230
|
+
targetCompatibility | The target version of JVM the project sources are compatible with. The default value is `VERSION_1_8` | VERSION_12
|
|
231
|
+
jvmTarget | Target version of the generated JVM bytecode as a string. The default value is `1_8` | `1_10`
|
|
231
232
|
|
|
232
233
|
### additionalAppDependencies
|
|
233
234
|
|
|
@@ -13,17 +13,15 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
13
13
|
|
|
14
14
|
var _support = require("@appium/support");
|
|
15
15
|
|
|
16
|
-
var _logger = _interopRequireDefault(require("../logger"));
|
|
17
|
-
|
|
18
16
|
var _validate = _interopRequireDefault(require("validate.js"));
|
|
19
17
|
|
|
20
18
|
var _baseDriver = require("@appium/base-driver");
|
|
21
19
|
|
|
22
20
|
var _utils = require("../utils");
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
const commands = {},
|
|
23
|
+
helpers = {},
|
|
24
|
+
extensions = {};
|
|
27
25
|
exports.helpers = helpers;
|
|
28
26
|
exports.commands = commands;
|
|
29
27
|
|
|
@@ -98,7 +96,7 @@ commands.mobileIsToastVisible = async function mobileIsToastVisible(opts = {}) {
|
|
|
98
96
|
} = opts;
|
|
99
97
|
|
|
100
98
|
if (!_support.util.hasValue(text)) {
|
|
101
|
-
|
|
99
|
+
throw new _baseDriver.errors.InvalidArgumentError(`'text' argument is mandatory`);
|
|
102
100
|
}
|
|
103
101
|
|
|
104
102
|
return await this.espresso.jwproxy.command('/appium/execute_mobile/is_toast_displayed', 'POST', {
|
|
@@ -161,9 +159,7 @@ commands.mobileNavigateTo = async function mobileNavigateTo(opts = {}) {
|
|
|
161
159
|
let menuItemIdAsNumber = parseInt(menuItemId, 10);
|
|
162
160
|
|
|
163
161
|
if (_lodash.default.isNaN(menuItemIdAsNumber) || menuItemIdAsNumber < 0) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
menuItemId = menuItemIdAsNumber;
|
|
162
|
+
throw new _baseDriver.errors.InvalidArgumentError(`'menuItemId' must be a non-negative number. Found ${menuItemId}`);
|
|
167
163
|
}
|
|
168
164
|
|
|
169
165
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/navigate_to`, 'POST', {
|
|
@@ -202,7 +198,7 @@ commands.mobileScrollToPage = async function mobileScrollToPage(opts = {}) {
|
|
|
202
198
|
});
|
|
203
199
|
|
|
204
200
|
if (_support.util.hasValue(res)) {
|
|
205
|
-
|
|
201
|
+
throw new _baseDriver.errors.InvalidArgumentError(`Invalid scrollTo parameters: ${JSON.stringify(res)}`);
|
|
206
202
|
}
|
|
207
203
|
|
|
208
204
|
const {
|
|
@@ -213,7 +209,7 @@ commands.mobileScrollToPage = async function mobileScrollToPage(opts = {}) {
|
|
|
213
209
|
} = opts;
|
|
214
210
|
|
|
215
211
|
if (_support.util.hasValue(scrollTo) && _support.util.hasValue(scrollToPage)) {
|
|
216
|
-
|
|
212
|
+
this.log.warn(`'scrollTo' and 'scrollToPage' where both provided. Defaulting to 'scrollTo'`);
|
|
217
213
|
}
|
|
218
214
|
|
|
219
215
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/scroll_to_page`, 'POST', {
|
|
@@ -317,9 +313,7 @@ commands.startActivity = async function startActivity(appPackage, appActivity, a
|
|
|
317
313
|
appWaitPackage = appWaitPackage || appPackage;
|
|
318
314
|
appActivity = (0, _utils.qualifyActivityName)(appActivity, appPackage);
|
|
319
315
|
appWaitActivity = (0, _utils.qualifyActivityName)(appWaitActivity || appActivity, appWaitPackage);
|
|
320
|
-
|
|
321
|
-
_logger.default.debug(`Starting activity '${appActivity}' for package '${appPackage}'`);
|
|
322
|
-
|
|
316
|
+
this.log.debug(`Starting activity '${appActivity}' for package '${appPackage}'`);
|
|
323
317
|
await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {
|
|
324
318
|
appPackage,
|
|
325
319
|
appActivity
|
|
@@ -339,4 +333,4 @@ var _default = extensions;
|
|
|
339
333
|
exports.default = _default;require('source-map-support').install();
|
|
340
334
|
|
|
341
335
|
|
|
342
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJhc3NlcnRSZXF1aXJlZE9wdGlvbnMiLCJvcHRpb25zIiwicmVxdWlyZWRPcHRpb25OYW1lcyIsIl8iLCJpc0FycmF5IiwicHJlc2VudE9wdGlvbk5hbWVzIiwia2V5cyIsIm1pc3NpbmdPcHRpb25OYW1lcyIsImRpZmZlcmVuY2UiLCJpc0VtcHR5IiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwibGF1bmNoQXBwIiwiZXJyb3JzIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsImNsb3NlQXBwIiwicmVzZXQiLCJnZXRDbGlwYm9hcmQiLCJhZGIiLCJnZXRBcGlMZXZlbCIsImVzcHJlc3NvIiwiandwcm94eSIsImNvbW1hbmQiLCJtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIiwib3B0cyIsImFjdGlvbiIsIm1vYmlsZVN3aXBlIiwiZGlyZWN0aW9uIiwiZWxlbWVudCIsInN3aXBlciIsInN0YXJ0Q29vcmRpbmF0ZXMiLCJlbmRDb29yZGluYXRlcyIsInByZWNpc2lvbkRlc2NyaWJlciIsInV0aWwiLCJ1bndyYXBFbGVtZW50IiwibW9iaWxlR2V0RGV2aWNlSW5mbyIsIm1vYmlsZUlzVG9hc3RWaXNpYmxlIiwidGV4dCIsImlzUmVnZXhwIiwiaGFzVmFsdWUiLCJsb2dnZXIiLCJlcnJvckFuZFRocm93IiwibW9iaWxlT3BlbkRyYXdlciIsImdyYXZpdHkiLCJtb2JpbGVDbG9zZURyYXdlciIsIm1vYmlsZVNldERhdGUiLCJ5ZWFyIiwibW9udGhPZlllYXIiLCJkYXlPZk1vbnRoIiwibW9iaWxlU2V0VGltZSIsImhvdXJzIiwibWludXRlcyIsIm1vYmlsZU5hdmlnYXRlVG8iLCJtZW51SXRlbUlkIiwibWVudUl0ZW1JZEFzTnVtYmVyIiwicGFyc2VJbnQiLCJpc05hTiIsIm1vYmlsZVdlYkF0b21zIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJtb2JpbGVTY3JvbGxUb1BhZ2UiLCJzY3JvbGxUb1R5cGVzIiwicmVzIiwicHJlc2VuY2UiLCJzY3JvbGxUbyIsImluY2x1c2lvbiIsIndpdGhpbiIsIm1lc3NhZ2UiLCJqb2luIiwic2Nyb2xsVG9QYWdlIiwibnVtZXJpY2FsaXR5Iiwib25seUludGVnZXIiLCJncmVhdGVyVGhhbk9yRXF1YWxUbyIsInNtb290aFNjcm9sbCIsIndhcm4iLCJtb2JpbGVCYWNrZG9vciIsInRhcmdldCIsIm1ldGhvZHMiLCJlbGVtZW50SWQiLCJ0YXJnZXRFbGVtZW50IiwibW9iaWxlVWlhdXRvbWF0b3IiLCJzdHJhdGVneSIsImxvY2F0b3IiLCJpbmRleCIsIm1vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZSIsIm1vYmlsZUZsYXNoRWxlbWVudCIsImR1cmF0aW9uTWlsbGlzIiwicmVwZWF0Q291bnQiLCJtb2JpbGVDbGlja0FjdGlvbiIsInRhcHBlciIsImNvb3JkaW5hdGVzUHJvdmlkZXIiLCJpbnB1dERldmljZSIsImJ1dHRvblN0YXRlIiwidXBkYXRlU2V0dGluZ3MiLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwic3VzcGVuZENocm9tZWRyaXZlclByb3h5IiwiY2hyb21lZHJpdmVyIiwicHJveHlSZXFSZXMiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwUHJveHlBY3RpdmUiLCJzdGFydEFjdGl2aXR5IiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJjYXBzIiwiZGVidWciLCJ3YWl0Rm9yQWN0aXZpdHkiLCJtb2JpbGVEaXNtaXNzQXV0b2ZpbGwiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsUUFBUSxHQUFHLEVBQWY7QUFBQSxJQUFtQkMsT0FBTyxHQUFHLEVBQTdCO0FBQUEsSUFBaUNDLFVBQVUsR0FBRyxF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LEdBQWlDLGVBQWVBLHFCQUFmLENBQXNDckYsSUFBSSxHQUFHLEVBQTdDLEVBQWlEO0FBQ2hGLFFBQU07QUFBQ0ksSUFBQUE7QUFBRCxNQUFZN0IscUJBQXFCLENBQUN5QixJQUFELEVBQU8sQ0FBQyxTQUFELENBQVAsQ0FBdkM7QUFDQSxRQUFNLEtBQUtKLFFBQUwsQ0FBY0MsT0FBZCxDQUFzQkMsT0FBdEIsQ0FDSCw2Q0FBNENXLGNBQUtDLGFBQUwsQ0FBbUJOLE9BQW5CLENBQTRCLG1CQURyRSxFQUN5RixNQUR6RixFQUNpRyxFQURqRyxDQUFOO0FBRUQsQ0FKRDs7QUFNQWtGLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjakgsVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAndmFsaWRhdGUuanMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBxdWFsaWZ5QWN0aXZpdHlOYW1lIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmZ1bmN0aW9uIGFzc2VydFJlcXVpcmVkT3B0aW9ucyAob3B0aW9ucywgcmVxdWlyZWRPcHRpb25OYW1lcykge1xuICBpZiAoIV8uaXNBcnJheShyZXF1aXJlZE9wdGlvbk5hbWVzKSkge1xuICAgIHJlcXVpcmVkT3B0aW9uTmFtZXMgPSBbcmVxdWlyZWRPcHRpb25OYW1lc107XG4gIH1cbiAgY29uc3QgcHJlc2VudE9wdGlvbk5hbWVzID0gXy5rZXlzKG9wdGlvbnMpO1xuICBjb25zdCBtaXNzaW5nT3B0aW9uTmFtZXMgPSBfLmRpZmZlcmVuY2UocmVxdWlyZWRPcHRpb25OYW1lcywgcHJlc2VudE9wdGlvbk5hbWVzKTtcbiAgaWYgKF8uaXNFbXB0eShtaXNzaW5nT3B0aW9uTmFtZXMpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHJlcXVpcmVkOiAke0pTT04uc3RyaW5naWZ5KG1pc3NpbmdPcHRpb25OYW1lcyl9LiBgICtcbiAgICBgWW91IGhhdmUgb25seSBwcm92aWRlZDogJHtKU09OLnN0cmluZ2lmeShwcmVzZW50T3B0aW9uTmFtZXMpfWApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMubGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbGF1bmNoQXBwICgpIHtcbiAgdGhyb3cgbmV3IGVycm9ycy5VbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKCdQbGVhc2UgY3JlYXRlIGEgbmV3IHNlc3Npb24gaW4gb3JkZXIgdG8gbGF1bmNoIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0Jyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMuY2xvc2VBcHAgPSBhc3luYyBmdW5jdGlvbiBjbG9zZUFwcCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcignUGxlYXNlIHF1aXQgdGhlIHNlc3Npb24gaW4gb3JkZXIgdG8gY2xvc2UgdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QnKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG5jb21tYW5kcy5yZXNldCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0ICgpIHtcbiAgdGhyb3cgbmV3IGVycm9ycy5VbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFxuICAgICdQbGVhc2UgcXVpdCB0aGUgc2Vzc2lvbiBhbmQgY3JlYXRlIGEgbmV3IG9uZSAnICtcbiAgICAnaW4gb3JkZXIgdG8gY2xvc2UgYW5kIGxhdW5jaCB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCcpO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q2xpcGJvYXJkICgpIHtcbiAgcmV0dXJuIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpIDwgMjkpXG4gICAgPyAoYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHthY3Rpb259ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnYWN0aW9uJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL3BlcmZvcm1fZWRpdG9yX2FjdGlvbicsICdQT1NUJywge2FjdGlvbn0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtkaXJlY3Rpb24sIGVsZW1lbnQsIHN3aXBlciwgc3RhcnRDb29yZGluYXRlcywgZW5kQ29vcmRpbmF0ZXMsIHByZWNpc2lvbkRlc2NyaWJlcn0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3N3aXBlYCwgJ1BPU1QnLCB7XG4gICAgZGlyZWN0aW9uLCBlbGVtZW50LCBzd2lwZXIsIHN0YXJ0Q29vcmRpbmF0ZXMsIGVuZENvb3JkaW5hdGVzLCBwcmVjaXNpb25EZXNjcmliZXJcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVHZXREZXZpY2VJbmZvID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0RGV2aWNlSW5mbyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvaW5mbycsICdHRVQnKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZUlzVG9hc3RWaXNpYmxlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSXNUb2FzdFZpc2libGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7dGV4dCwgaXNSZWdleHB9ID0gb3B0cztcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRleHQpKSB7XG4gICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYCd0ZXh0JyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvaXNfdG9hc3RfZGlzcGxheWVkJywgJ1BPU1QnLCB7XG4gICAgdGV4dCxcbiAgICBpc1JlZ2V4cCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVPcGVuRHJhd2VyID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlT3BlbkRyYXdlciAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCBncmF2aXR5fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9vcGVuX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVDbG9zZURyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsb3NlRHJhd2VyIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGdyYXZpdHl9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2Nsb3NlX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTZXREYXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0RGF0ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCB5ZWFyLCBtb250aE9mWWVhciwgZGF5T2ZNb250aH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50JywgJ3llYXInLCAnbW9udGhPZlllYXInLCAnZGF5T2ZNb250aCddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF9kYXRlYCwgJ1BPU1QnLCB7XG4gICAgeWVhcixcbiAgICBtb250aE9mWWVhcixcbiAgICBkYXlPZk1vbnRoLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVNldFRpbWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXRUaW1lIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGhvdXJzLCBtaW51dGVzfSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnLCAnaG91cnMnLCAnbWludXRlcyddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF90aW1lYCwgJ1BPU1QnLCB7XG4gICAgaG91cnMsXG4gICAgbWludXRlcyxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVOYXZpZ2F0ZVRvID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTmF2aWdhdGVUbyAob3B0cyA9IHt9KSB7XG4gIGxldCB7ZWxlbWVudCwgbWVudUl0ZW1JZH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydtZW51SXRlbUlkJywgJ2VsZW1lbnQnXSk7XG5cbiAgbGV0IG1lbnVJdGVtSWRBc051bWJlciA9IHBhcnNlSW50KG1lbnVJdGVtSWQsIDEwKTtcbiAgaWYgKF8uaXNOYU4obWVudUl0ZW1JZEFzTnVtYmVyKSB8fCBtZW51SXRlbUlkQXNOdW1iZXIgPCAwKSB7XG4gICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYCdtZW51SXRlbUlkJyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gRm91bmQgJHttZW51SXRlbUlkfWApO1xuICAgIG1lbnVJdGVtSWQgPSBtZW51SXRlbUlkQXNOdW1iZXI7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L25hdmlnYXRlX3RvYCwgJ1BPU1QnLCB7XG4gICAgbWVudUl0ZW1JZFxuICB9KTtcbn07XG5cbi8qKlxuICogUnVucyBhIGNoYWluIG9mIEVzcHJlc3NvIHdlYiBhdG9tcyAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3RyYWluaW5nL3Rlc3RpbmcvZXNwcmVzc28vd2ViIGZvciByZWZlcmVuY2UpXG4gKlxuICogVGFrZXMgSlNPTiBvZiB0aGUgZm9ybVxuICpcbiAqIHtcbiAqICAgXCJ3ZWJ2aWV3RWxcIjogXCI8RUxFTUVOVF9JRD5cIiwgLy8gb3B0aW9uYWwgd2VidmlldyBlbGVtZW50IHRvIG9wZXJhdGUgb25cbiAqICAgXCJmb3JjZUphdmFzY3JpcHRFbmFibGVkXCI6IHRydWV8ZmFsc2UsIC8vIGlmIHdlYnZpZXcgZGlzYWJsZXMgamF2YXNjcmlwdCwgd2ViYXRvbXMgd29uJ3Qgd29yaywgdGhpcyBmb3JjZXMgaXRcbiAqICAgXCJtZXRob2RDaGFpblwiOiBbXG4gKiAgICAge1wibmFtZVwiOiBcIm1ldGhvZE5hbWVcIiwgXCJhdG9tXCI6IHtcIm5hbWVcIjogXCJhdG9tTmFtZVwiLCBcImFyZ3NcIjogW1wiYXJnMVwiLCBcImFyZzJcIiwgLi4uXX19LFxuICogICAgIC4uLlxuICogICBdXG4gKiB9XG4gKlxuICovXG5jb21tYW5kcy5tb2JpbGVXZWJBdG9tcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVdlYkF0b21zIChvcHRzID0ge30pIHtcbiAgb3B0cyA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ21ldGhvZENoYWluJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvd2ViX2F0b21zYCwgJ1BPU1QnLCBvcHRzKTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxUb1BhZ2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxUb1BhZ2UgKG9wdHMgPSB7fSkge1xuXG4gIC8vIFZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzXG4gIGNvbnN0IHNjcm9sbFRvVHlwZXMgPSBbJ2ZpcnN0JywgJ2xhc3QnLCAnbGVmdCcsICdyaWdodCddO1xuICBjb25zdCByZXMgPSB2YWxpZGF0ZShvcHRzLCB7XG4gICAgZWxlbWVudDoge3ByZXNlbmNlOiB0cnVlfSxcbiAgICBzY3JvbGxUbzoge1xuICAgICAgaW5jbHVzaW9uOiB7XG4gICAgICAgIHdpdGhpbjogc2Nyb2xsVG9UeXBlcyxcbiAgICAgICAgbWVzc2FnZTogYFwic2Nyb2xsVG9cIiBtdXN0IGJlIG9uZSBvZiBcIiR7c2Nyb2xsVG9UeXBlcy5qb2luKCcsICcpfVwiIGZvdW5kICcle3ZhbHVlfSdgLFxuICAgICAgfVxuICAgIH0sXG4gICAgc2Nyb2xsVG9QYWdlOiB7XG4gICAgICBudW1lcmljYWxpdHk6IHtcbiAgICAgICAgb25seUludGVnZXI6IHRydWUsXG4gICAgICAgIGdyZWF0ZXJUaGFuT3JFcXVhbFRvOiAwLFxuICAgICAgICBtZXNzYWdlOiBgXCJzY3JvbGxUb1BhZ2VcIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuIEZvdW5kICcle3ZhbHVlfSdgXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKHJlcykpIHtcbiAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgSW52YWxpZCBzY3JvbGxUbyBwYXJhbWV0ZXJzOiAke0pTT04uc3RyaW5naWZ5KHJlcyl9YCk7XG4gIH1cblxuICBjb25zdCB7ZWxlbWVudCwgc2Nyb2xsVG8sIHNjcm9sbFRvUGFnZSwgc21vb3RoU2Nyb2xsfSA9IG9wdHM7XG5cbiAgaWYgKHV0aWwuaGFzVmFsdWUoc2Nyb2xsVG8pICYmIHV0aWwuaGFzVmFsdWUoc2Nyb2xsVG9QYWdlKSkge1xuICAgIGxvZ2dlci53YXJuKGAnc2Nyb2xsVG8nIGFuZCAnc2Nyb2xsVG9QYWdlJyB3aGVyZSBib3RoIHByb3ZpZGVkLiBEZWZhdWx0aW5nIHRvICdzY3JvbGxUbydgKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vc2Nyb2xsX3RvX3BhZ2VgLCAnUE9TVCcsIHtcbiAgICBzY3JvbGxUbyxcbiAgICBzY3JvbGxUb1BhZ2UsXG4gICAgc21vb3RoU2Nyb2xsLFxuICB9KTtcbn07XG5cblxuLyoqXG4gKiAgQVBJIHRvIGludm9rZSBtZXRob2RzIGRlZmluZWQgaW4gQW5kcm9pZCBhcHAuXG4gKlxuICogIEV4YW1wbGUgZGF0YVxuICogIHtcbiAqICAgdGFyZ2V0OiAnYWN0aXZpdHknLFxuICogICBtZXRob2RzOlxuICogICAgICAgICBbXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgICBuYW1lOiBcInNvbWVNZXRob2RcIixcbiAqICAgICAgICAgICB9LFxuICogICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgbmFtZTogXCJhbm90aGVyTWV0aG9kXCIsXG4gKiAgICAgICAgICAgICAgIGFyZ3M6XG4gKiAgICAgICAgICAgICAgICAgICBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlOiBcIkxvbFwiLCB0eXBlOiAnamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSd9LFxuICogICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZTogMSwgdHlwZTogJ2ludCd9XG4gKiAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgfVxuICogICAgICAgICBdXG4gKiB9XG4gKlxuICogSW4gYWJvdmUgZXhhbXBsZSwgbWV0aG9kIFwic29tZU1ldGhvZFwiIHdpbGwgYmUgaW52b2tlZCBvbiAnYWN0aXZpdHknLiBPbiB0aGUgcmVzdWx0LCBcImFub3RoZXJNZXRob2RcIiB3aWxsIGJlIGludm9rZWRcbiAqICBcInRhcmdldFwiIGNhbiBiZSBlaXRoZXIgJ2FjdGl2aXR5JywgJ2FwcGxpY2F0aW9uJyBvciAnZWxlbWVudCdcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdhcHBsaWNhdGlvbicsIG1ldGhvZHMgd2lsbCBiZSBpbnZva2VkIG9uIGFwcGxpY2F0aW9uIGNsYXNzXG4gKiAgSWYgdGFyZ2V0IGlzIHNldCB0byAnYWN0aXZpdHknLCBtZXRob2RzIHdpbGwgYmUgaW52b2tlZCBvbiBjdXJyZW50IGFjdGl2aXR5XG4gKiAgSWYgdGFyZ2V0IGlzIHNldCB0byAnZWxlbWVudCcsICdlbGVtZW50SWQnIG11c3QgYmUgc3BlY2lmaWVkXG4gKlxuICogLSBPbmx5ICdQdWJsaWMnIG1ldGhvZHMgY2FuIGJlIGludm9rZWQuICgnb3BlbicgbW9kaWZpcmUgaXMgbmVjZXNzYXJ5IGluIEtvdGxpbilcbiAqIC0gZm9sbG93aW5nIHByaW1pdGl2ZSB0eXBlcyBhcmUgc3VwcG9ydGVkOiBcImludFwiLCBcImJvb2xlYW5cIiwgXCJieXRlXCIsIFwic2hvcnRcIiwgXCJsb25nXCIsIFwiZmxvYXRcIiwgXCJjaGFyXCJcbiAqIC0gIE5vbi1wcmltaXRpdmUgdHlwZXMgd2l0aCBmdWxseSBxdWFsaWZpZWQgbmFtZSBcImphdmEubGFuZy4qXCIgaXMgYWxzbyBzdXBwb3J0ZWQ6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVnLiBcImphdmEubGFuZy5DaGFyU2VxdWVuY2VcIiwgXCJqYXZhLmxhbmcuU3RyaW5nXCIsIFwiamF2YS5sYW5nLkludGVnZXJcIiwgXCJqYXZhLmxhbmcuRmxvYXRcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhLmxhbmcuRG91YmxlXCIsIFwiamF2YS5sYW5nLkJvb2xlYW5cIiwgXCJqYXZhLmxhbmcuTG9uZ1wiLCBcImphdmEubGFuZy5TaG9ydFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphdmEubGFuZy5DaGFyYWN0ZXJcIiBldGMuLi5cbiAqXG4gKlxuICogQHRocm93cyAge0Vycm9yfSBpZiB0YXJnZXQgaXMgbm90ICdhY3Rpdml0eScgb3IgJ2FwcGxpY2F0aW9uJ1xuICogQHRocm93cyAge0Vycm9yfSBpZiBhIG1ldGhvZCBpcyBub3QgZm91bmQgd2l0aCBnaXZlbiBhcmd1bWVudCB0eXBlc1xuICpcbiAqIEByZXR1cm4geyp9IHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgbWV0aG9kIGluIHRoZSBpbnZvY2F0aW9uIGNoYWluLiBJZiBtZXRob2QgcmV0dXJuIHR5cGUgaXMgdm9pZCwgdGhlbiBcIjxWT0lEPlwiIHdpbGwgYmUgcmV0dXJuZWRcbiAqXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUJhY2tkb29yID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQmFja2Rvb3IgKG9wdHMgPSB7fSkge1xuICBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWyd0YXJnZXQnLCAnbWV0aG9kcyddKTtcbiAgY29uc3Qge3RhcmdldCwgbWV0aG9kc30gPSBvcHRzO1xuICBpZiAodGFyZ2V0ID09PSAnZWxlbWVudCcpIHtcbiAgICBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50SWQnXSk7XG4gIH1cbiAgY29uc3Qge2VsZW1lbnRJZDogdGFyZ2V0RWxlbWVudH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvYmFja2Rvb3JgLCAnUE9TVCcsIHt0YXJnZXQsIG1ldGhvZHMsIHRhcmdldEVsZW1lbnR9KTtcbn07XG5cbi8qKlxuICogIEV4ZWN1dGUgVWlBdXRvbWF0b3IyIGNvbW1hbmRzIHRvIGRyaXZlIG91dCBvZiBhcHAgYXJlYXMuXG4gKiAgc3RyYXRlZ3kgY2FuIGJlIG9uZSBvZjogXCJjbGF6elwiLCBcInJlc1wiLCBcInRleHRcIiwgXCJ0ZXh0Q29udGFpbnNcIiwgXCJ0ZXh0RW5kc1dpdGhcIiwgXCJ0ZXh0U3RhcnRzV2l0aFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVzY1wiLCBcImRlc2NDb250YWluc1wiLCBcImRlc2NFbmRzV2l0aFwiLCBcImRlc2NTdGFydHNXaXRoXCIsIFwicGtnXCJcbiAqXG4gKiAgYWN0aW9uIGNhbiBiZSBvbmUgb2Y6IFwiY2xpY2tcIiwgXCJsb25nQ2xpY2tcIiwgXCJnZXRUZXh0XCIsIFwiZ2V0Q29udGVudERlc2NyaXB0aW9uXCIsIFwiZ2V0Q2xhc3NOYW1lXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2V0UmVzb3VyY2VOYW1lXCIsIFwiZ2V0VmlzaWJsZUJvdW5kc1wiLCBcImdldFZpc2libGVDZW50ZXJcIiwgXCJnZXRBcHBsaWNhdGlvblBhY2thZ2VcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJnZXRDaGlsZENvdW50XCIsIFwiY2xlYXJcIiwgXCJpc0NoZWNrYWJsZVwiLCBcImlzQ2hlY2tlZFwiLCBcImlzQ2xpY2thYmxlXCIsIFwiaXNFbmFibGVkXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNGb2N1c2FibGVcIiwgXCJpc0ZvY3VzZWRcIiwgXCJpc0xvbmdDbGlja2FibGVcIiwgXCJpc1Njcm9sbGFibGVcIiwgXCJpc1NlbGVjdGVkXCJcbiAqL1xuY29tbWFuZHMubW9iaWxlVWlhdXRvbWF0b3IgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVVaWF1dG9tYXRvciAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtzdHJhdGVneSwgbG9jYXRvciwgYWN0aW9uLCBpbmRleH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydzdHJhdGVneScsICdsb2NhdG9yJywgJ2FjdGlvbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3VpYXV0b21hdG9yYCwgJ1BPU1QnLCB7c3RyYXRlZ3ksIGxvY2F0b3IsIGluZGV4LCBhY3Rpb259KTtcbn07XG5cbi8qKlxuICogIEV4ZWN1dGUgVWlBdXRvbWF0b3IyIGNvbW1hbmQgdG8gcmV0dXJuIHRoZSBVSSBkdW1wIHdoZW4gQVVUIGlzIGluIGJhY2tncm91bmQuXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIHVpYXV0b21hdG9yIHZpZXcgZHVtcCBpcyB1bnN1Y2Nlc3NmdWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHVpYXV0b21hdG9yIERPTSB4bWwgYXMgc3RyaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS91aWF1dG9tYXRvcl9wYWdlX3NvdXJjZWAsICdHRVQnKTtcbn07XG5cbi8qKlxuICogIEZsYXNoIHRoZSBlbGVtZW50IHdpdGggZ2l2ZW4gaWQuXG4gKiAgZHVyYXRpb25NaWxsaXMgYW5kIHJlcGVhdENvdW50IGFyZSBvcHRpb25hbFxuICpcbiAqL1xuY29tbWFuZHMubW9iaWxlRmxhc2hFbGVtZW50ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRmxhc2hFbGVtZW50IChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnR9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcbiAgY29uc3Qge2R1cmF0aW9uTWlsbGlzLCByZXBlYXRDb3VudH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2ZsYXNoYCwgJ1BPU1QnLCB7XG4gICAgZHVyYXRpb25NaWxsaXMsXG4gICAgcmVwZWF0Q291bnRcbiAgfSk7XG59O1xuXG4vKipcbiAqIFBlcmZvcm0gYSAnR2VuZXJhbENsaWNrQWN0aW9uJyAoaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWR4L3Rlc3QvZXNwcmVzc28vYWN0aW9uL0dlbmVyYWxDbGlja0FjdGlvbilcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2xpY2tBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDbGlja0FjdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCB0YXBwZXIsIGNvb3JkaW5hdGVzUHJvdmlkZXIsIHByZWNpc2lvbkRlc2NyaWJlcixcbiAgICAgICAgIGlucHV0RGV2aWNlLCBidXR0b25TdGF0ZX0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2NsaWNrX2FjdGlvbmAsICdQT1NUJywge1xuICAgIHRhcHBlciwgY29vcmRpbmF0ZXNQcm92aWRlciwgcHJlY2lzaW9uRGVzY3JpYmVyLCBpbnB1dERldmljZSwgYnV0dG9uU3RhdGVcbiAgfSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVNldHRpbmdzIChzZXR0aW5ncykge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vc2V0dGluZ3NgLCAnUE9TVCcsIHsgc2V0dGluZ3MgfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIGdldFNldHRpbmdzICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL3NldHRpbmdzYCwgJ0dFVCcpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byBFc3ByZXNzb1xuaGVscGVycy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgPSBmdW5jdGlvbiBzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmVzcHJlc3NvLnByb3h5UmVxUmVzLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5lc3ByZXNzby5wcm94eUNvbW1hbmQuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG59O1xuXG5jb21tYW5kcy5zdGFydEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBY3Rpdml0eSAoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksXG4gIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHkpIHtcbiAgLy8gaW50ZW50QWN0aW9uLCBpbnRlbnRDYXRlZ29yeSwgaW50ZW50RmxhZ3MsIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBkb250U3RvcEFwcE9uUmVzZXRcbiAgLy8gcGFyYW1ldGVycyBhcmUgbm90IHN1cHBvcnRlZCBieSBFc3ByZXNzb1xuICBhcHBQYWNrYWdlID0gYXBwUGFja2FnZSB8fCB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgYXBwV2FpdFBhY2thZ2UgPSBhcHBXYWl0UGFja2FnZSB8fCBhcHBQYWNrYWdlO1xuICBhcHBBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUoYXBwQWN0aXZpdHksIGFwcFBhY2thZ2UpO1xuICBhcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcFdhaXRBY3Rpdml0eSB8fCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UpO1xuICBsb2dnZXIuZGVidWcoYFN0YXJ0aW5nIGFjdGl2aXR5ICcke2FwcEFjdGl2aXR5fScgZm9yIHBhY2thZ2UgJyR7YXBwUGFja2FnZX0nYCk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eWAsICdQT1NUJywge1xuICAgIGFwcFBhY2thZ2UsXG4gICAgYXBwQWN0aXZpdHksXG4gIH0pO1xuICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yQWN0aXZpdHkoYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVEaXNtaXNzQXV0b2ZpbGwgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEaXNtaXNzQXV0b2ZpbGwgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChcbiAgICBgL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2Rpc21pc3NfYXV0b2ZpbGxgLCAnUE9TVCcsIHt9KTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
336
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJhc3NlcnRSZXF1aXJlZE9wdGlvbnMiLCJvcHRpb25zIiwicmVxdWlyZWRPcHRpb25OYW1lcyIsIl8iLCJpc0FycmF5IiwicHJlc2VudE9wdGlvbk5hbWVzIiwia2V5cyIsIm1pc3NpbmdPcHRpb25OYW1lcyIsImRpZmZlcmVuY2UiLCJpc0VtcHR5IiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwibGF1bmNoQXBwIiwiZXJyb3JzIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsImNsb3NlQXBwIiwicmVzZXQiLCJnZXRDbGlwYm9hcmQiLCJhZGIiLCJnZXRBcGlMZXZlbCIsImVzcHJlc3NvIiwiandwcm94eSIsImNvbW1hbmQiLCJtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIiwib3B0cyIsImFjdGlvbiIsIm1vYmlsZVN3aXBlIiwiZGlyZWN0aW9uIiwiZWxlbWVudCIsInN3aXBlciIsInN0YXJ0Q29vcmRpbmF0ZXMiLCJlbmRDb29yZGluYXRlcyIsInByZWNpc2lvbkRlc2NyaWJlciIsInV0aWwiLCJ1bndyYXBFbGVtZW50IiwibW9iaWxlR2V0RGV2aWNlSW5mbyIsIm1vYmlsZUlzVG9hc3RWaXNpYmxlIiwidGV4dCIsImlzUmVnZXhwIiwiaGFzVmFsdWUiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1vYmlsZU9wZW5EcmF3ZXIiLCJncmF2aXR5IiwibW9iaWxlQ2xvc2VEcmF3ZXIiLCJtb2JpbGVTZXREYXRlIiwieWVhciIsIm1vbnRoT2ZZZWFyIiwiZGF5T2ZNb250aCIsIm1vYmlsZVNldFRpbWUiLCJob3VycyIsIm1pbnV0ZXMiLCJtb2JpbGVOYXZpZ2F0ZVRvIiwibWVudUl0ZW1JZCIsIm1lbnVJdGVtSWRBc051bWJlciIsInBhcnNlSW50IiwiaXNOYU4iLCJtb2JpbGVXZWJBdG9tcyIsImdldERpc3BsYXlEZW5zaXR5IiwibW9iaWxlU2Nyb2xsVG9QYWdlIiwic2Nyb2xsVG9UeXBlcyIsInJlcyIsInByZXNlbmNlIiwic2Nyb2xsVG8iLCJpbmNsdXNpb24iLCJ3aXRoaW4iLCJtZXNzYWdlIiwiam9pbiIsInNjcm9sbFRvUGFnZSIsIm51bWVyaWNhbGl0eSIsIm9ubHlJbnRlZ2VyIiwiZ3JlYXRlclRoYW5PckVxdWFsVG8iLCJzbW9vdGhTY3JvbGwiLCJsb2ciLCJ3YXJuIiwibW9iaWxlQmFja2Rvb3IiLCJ0YXJnZXQiLCJtZXRob2RzIiwiZWxlbWVudElkIiwidGFyZ2V0RWxlbWVudCIsIm1vYmlsZVVpYXV0b21hdG9yIiwic3RyYXRlZ3kiLCJsb2NhdG9yIiwiaW5kZXgiLCJtb2JpbGVVaWF1dG9tYXRvclBhZ2VTb3VyY2UiLCJtb2JpbGVGbGFzaEVsZW1lbnQiLCJkdXJhdGlvbk1pbGxpcyIsInJlcGVhdENvdW50IiwibW9iaWxlQ2xpY2tBY3Rpb24iLCJ0YXBwZXIiLCJjb29yZGluYXRlc1Byb3ZpZGVyIiwiaW5wdXREZXZpY2UiLCJidXR0b25TdGF0ZSIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cFByb3h5QWN0aXZlIiwic3RhcnRBY3Rpdml0eSIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiY2FwcyIsImRlYnVnIiwid2FpdEZvckFjdGl2aXR5IiwibW9iaWxlRGlzbWlzc0F1dG9maWxsIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjtBQUFBLE1BQXFCQyxPQUFPLEdBQUcsRUFBL0I7QUFBQSxNQUFtQ0MsVUFBVSxHQUFHLEVB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O0FBQ0QsQ0FkRDs7QUFnQkE3RyxRQUFRLENBQUNpSCxxQkFBVCxHQUFpQyxlQUFlQSxxQkFBZixDQUFzQ3JGLElBQUksR0FBRyxFQUE3QyxFQUFpRDtBQUNoRixRQUFNO0FBQUNJLElBQUFBO0FBQUQsTUFBWTdCLHFCQUFxQixDQUFDeUIsSUFBRCxFQUFPLENBQUMsU0FBRCxDQUFQLENBQXZDO0FBQ0EsUUFBTSxLQUFLSixRQUFMLENBQWNDLE9BQWQsQ0FBc0JDLE9BQXRCLENBQ0gsNkNBQTRDVyxjQUFLQyxhQUFMLENBQW1CTixPQUFuQixDQUE0QixtQkFEckUsRUFDeUYsTUFEekYsRUFDaUcsRUFEakcsQ0FBTjtBQUVELENBSkQ7O0FBTUFrRixNQUFNLENBQUNDLE1BQVAsQ0FBY2pILFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHZhbGlkYXRlIGZyb20gJ3ZhbGlkYXRlLmpzJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgcXVhbGlmeUFjdGl2aXR5TmFtZSB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmZ1bmN0aW9uIGFzc2VydFJlcXVpcmVkT3B0aW9ucyAob3B0aW9ucywgcmVxdWlyZWRPcHRpb25OYW1lcykge1xuICBpZiAoIV8uaXNBcnJheShyZXF1aXJlZE9wdGlvbk5hbWVzKSkge1xuICAgIHJlcXVpcmVkT3B0aW9uTmFtZXMgPSBbcmVxdWlyZWRPcHRpb25OYW1lc107XG4gIH1cbiAgY29uc3QgcHJlc2VudE9wdGlvbk5hbWVzID0gXy5rZXlzKG9wdGlvbnMpO1xuICBjb25zdCBtaXNzaW5nT3B0aW9uTmFtZXMgPSBfLmRpZmZlcmVuY2UocmVxdWlyZWRPcHRpb25OYW1lcywgcHJlc2VudE9wdGlvbk5hbWVzKTtcbiAgaWYgKF8uaXNFbXB0eShtaXNzaW5nT3B0aW9uTmFtZXMpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHJlcXVpcmVkOiAke0pTT04uc3RyaW5naWZ5KG1pc3NpbmdPcHRpb25OYW1lcyl9LiBgICtcbiAgICBgWW91IGhhdmUgb25seSBwcm92aWRlZDogJHtKU09OLnN0cmluZ2lmeShwcmVzZW50T3B0aW9uTmFtZXMpfWApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMubGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbGF1bmNoQXBwICgpIHtcbiAgdGhyb3cgbmV3IGVycm9ycy5VbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKCdQbGVhc2UgY3JlYXRlIGEgbmV3IHNlc3Npb24gaW4gb3JkZXIgdG8gbGF1bmNoIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0Jyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMuY2xvc2VBcHAgPSBhc3luYyBmdW5jdGlvbiBjbG9zZUFwcCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcignUGxlYXNlIHF1aXQgdGhlIHNlc3Npb24gaW4gb3JkZXIgdG8gY2xvc2UgdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QnKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG5jb21tYW5kcy5yZXNldCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0ICgpIHtcbiAgdGhyb3cgbmV3IGVycm9ycy5VbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFxuICAgICdQbGVhc2UgcXVpdCB0aGUgc2Vzc2lvbiBhbmQgY3JlYXRlIGEgbmV3IG9uZSAnICtcbiAgICAnaW4gb3JkZXIgdG8gY2xvc2UgYW5kIGxhdW5jaCB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCcpO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q2xpcGJvYXJkICgpIHtcbiAgcmV0dXJuIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpIDwgMjkpXG4gICAgPyAoYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHthY3Rpb259ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnYWN0aW9uJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL3BlcmZvcm1fZWRpdG9yX2FjdGlvbicsICdQT1NUJywge2FjdGlvbn0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtkaXJlY3Rpb24sIGVsZW1lbnQsIHN3aXBlciwgc3RhcnRDb29yZGluYXRlcywgZW5kQ29vcmRpbmF0ZXMsIHByZWNpc2lvbkRlc2NyaWJlcn0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3N3aXBlYCwgJ1BPU1QnLCB7XG4gICAgZGlyZWN0aW9uLCBlbGVtZW50LCBzd2lwZXIsIHN0YXJ0Q29vcmRpbmF0ZXMsIGVuZENvb3JkaW5hdGVzLCBwcmVjaXNpb25EZXNjcmliZXJcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVHZXREZXZpY2VJbmZvID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0RGV2aWNlSW5mbyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvaW5mbycsICdHRVQnKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZUlzVG9hc3RWaXNpYmxlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSXNUb2FzdFZpc2libGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7dGV4dCwgaXNSZWdleHB9ID0gb3B0cztcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRleHQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9leGVjdXRlX21vYmlsZS9pc190b2FzdF9kaXNwbGF5ZWQnLCAnUE9TVCcsIHtcbiAgICB0ZXh0LFxuICAgIGlzUmVnZXhwLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZU9wZW5EcmF3ZXIgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVPcGVuRHJhd2VyIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGdyYXZpdHl9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L29wZW5fZHJhd2VyYCwgJ1BPU1QnLCB7XG4gICAgZ3Jhdml0eVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZUNsb3NlRHJhd2VyID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQ2xvc2VEcmF3ZXIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudCwgZ3Jhdml0eX0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vY2xvc2VfZHJhd2VyYCwgJ1BPU1QnLCB7XG4gICAgZ3Jhdml0eVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVNldERhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXREYXRlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIHllYXIsIG1vbnRoT2ZZZWFyLCBkYXlPZk1vbnRofSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnLCAneWVhcicsICdtb250aE9mWWVhcicsICdkYXlPZk1vbnRoJ10pO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vc2V0X2RhdGVgLCAnUE9TVCcsIHtcbiAgICB5ZWFyLFxuICAgIG1vbnRoT2ZZZWFyLFxuICAgIGRheU9mTW9udGgsXG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlU2V0VGltZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNldFRpbWUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudCwgaG91cnMsIG1pbnV0ZXN9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCcsICdob3VycycsICdtaW51dGVzJ10pO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vc2V0X3RpbWVgLCAnUE9TVCcsIHtcbiAgICBob3VycyxcbiAgICBtaW51dGVzLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZU5hdmlnYXRlVG8gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVOYXZpZ2F0ZVRvIChvcHRzID0ge30pIHtcbiAgbGV0IHtlbGVtZW50LCBtZW51SXRlbUlkfSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ21lbnVJdGVtSWQnLCAnZWxlbWVudCddKTtcblxuICBsZXQgbWVudUl0ZW1JZEFzTnVtYmVyID0gcGFyc2VJbnQobWVudUl0ZW1JZCwgMTApO1xuICBpZiAoXy5pc05hTihtZW51SXRlbUlkQXNOdW1iZXIpIHx8IG1lbnVJdGVtSWRBc051bWJlciA8IDApIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnbWVudUl0ZW1JZCcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIEZvdW5kICR7bWVudUl0ZW1JZH1gKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vbmF2aWdhdGVfdG9gLCAnUE9TVCcsIHtcbiAgICBtZW51SXRlbUlkXG4gIH0pO1xufTtcblxuLyoqXG4gKiBSdW5zIGEgY2hhaW4gb2YgRXNwcmVzc28gd2ViIGF0b21zIChzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vdHJhaW5pbmcvdGVzdGluZy9lc3ByZXNzby93ZWIgZm9yIHJlZmVyZW5jZSlcbiAqXG4gKiBUYWtlcyBKU09OIG9mIHRoZSBmb3JtXG4gKlxuICoge1xuICogICBcIndlYnZpZXdFbFwiOiBcIjxFTEVNRU5UX0lEPlwiLCAvLyBvcHRpb25hbCB3ZWJ2aWV3IGVsZW1lbnQgdG8gb3BlcmF0ZSBvblxuICogICBcImZvcmNlSmF2YXNjcmlwdEVuYWJsZWRcIjogdHJ1ZXxmYWxzZSwgLy8gaWYgd2VidmlldyBkaXNhYmxlcyBqYXZhc2NyaXB0LCB3ZWJhdG9tcyB3b24ndCB3b3JrLCB0aGlzIGZvcmNlcyBpdFxuICogICBcIm1ldGhvZENoYWluXCI6IFtcbiAqICAgICB7XCJuYW1lXCI6IFwibWV0aG9kTmFtZVwiLCBcImF0b21cIjoge1wibmFtZVwiOiBcImF0b21OYW1lXCIsIFwiYXJnc1wiOiBbXCJhcmcxXCIsIFwiYXJnMlwiLCAuLi5dfX0sXG4gKiAgICAgLi4uXG4gKiAgIF1cbiAqIH1cbiAqXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVdlYkF0b21zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlV2ViQXRvbXMgKG9wdHMgPSB7fSkge1xuICBvcHRzID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnbWV0aG9kQ2hhaW4nXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS93ZWJfYXRvbXNgLCAnUE9TVCcsIG9wdHMpO1xufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvZGlzcGxheV9kZW5zaXR5JywgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVNjcm9sbFRvUGFnZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNjcm9sbFRvUGFnZSAob3B0cyA9IHt9KSB7XG5cbiAgLy8gVmFsaWRhdGUgdGhlIHBhcmFtZXRlcnNcbiAgY29uc3Qgc2Nyb2xsVG9UeXBlcyA9IFsnZmlyc3QnLCAnbGFzdCcsICdsZWZ0JywgJ3JpZ2h0J107XG4gIGNvbnN0IHJlcyA9IHZhbGlkYXRlKG9wdHMsIHtcbiAgICBlbGVtZW50OiB7cHJlc2VuY2U6IHRydWV9LFxuICAgIHNjcm9sbFRvOiB7XG4gICAgICBpbmNsdXNpb246IHtcbiAgICAgICAgd2l0aGluOiBzY3JvbGxUb1R5cGVzLFxuICAgICAgICBtZXNzYWdlOiBgXCJzY3JvbGxUb1wiIG11c3QgYmUgb25lIG9mIFwiJHtzY3JvbGxUb1R5cGVzLmpvaW4oJywgJyl9XCIgZm91bmQgJyV7dmFsdWV9J2AsXG4gICAgICB9XG4gICAgfSxcbiAgICBzY3JvbGxUb1BhZ2U6IHtcbiAgICAgIG51bWVyaWNhbGl0eToge1xuICAgICAgICBvbmx5SW50ZWdlcjogdHJ1ZSxcbiAgICAgICAgZ3JlYXRlclRoYW5PckVxdWFsVG86IDAsXG4gICAgICAgIG1lc3NhZ2U6IGBcInNjcm9sbFRvUGFnZVwiIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci4gRm91bmQgJyV7dmFsdWV9J2BcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHJlcykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBJbnZhbGlkIHNjcm9sbFRvIHBhcmFtZXRlcnM6ICR7SlNPTi5zdHJpbmdpZnkocmVzKX1gKTtcbiAgfVxuXG4gIGNvbnN0IHtlbGVtZW50LCBzY3JvbGxUbywgc2Nyb2xsVG9QYWdlLCBzbW9vdGhTY3JvbGx9ID0gb3B0cztcblxuICBpZiAodXRpbC5oYXNWYWx1ZShzY3JvbGxUbykgJiYgdXRpbC5oYXNWYWx1ZShzY3JvbGxUb1BhZ2UpKSB7XG4gICAgdGhpcy5sb2cud2FybihgJ3Njcm9sbFRvJyBhbmQgJ3Njcm9sbFRvUGFnZScgd2hlcmUgYm90aCBwcm92aWRlZC4gRGVmYXVsdGluZyB0byAnc2Nyb2xsVG8nYCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3Njcm9sbF90b19wYWdlYCwgJ1BPU1QnLCB7XG4gICAgc2Nyb2xsVG8sXG4gICAgc2Nyb2xsVG9QYWdlLFxuICAgIHNtb290aFNjcm9sbCxcbiAgfSk7XG59O1xuXG5cbi8qKlxuICogIEFQSSB0byBpbnZva2UgbWV0aG9kcyBkZWZpbmVkIGluIEFuZHJvaWQgYXBwLlxuICpcbiAqICBFeGFtcGxlIGRhdGFcbiAqICB7XG4gKiAgIHRhcmdldDogJ2FjdGl2aXR5JyxcbiAqICAgbWV0aG9kczpcbiAqICAgICAgICAgW1xuICogICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgbmFtZTogXCJzb21lTWV0aG9kXCIsXG4gKiAgICAgICAgICAgfSxcbiAqICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgIG5hbWU6IFwiYW5vdGhlck1ldGhvZFwiLFxuICogICAgICAgICAgICAgICBhcmdzOlxuICogICAgICAgICAgICAgICAgICAgW1xuICogICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZTogXCJMb2xcIiwgdHlwZTogJ2phdmEubGFuZy5DaGFyU2VxdWVuY2UnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWU6IDEsIHR5cGU6ICdpbnQnfVxuICogICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgIH1cbiAqICAgICAgICAgXVxuICogfVxuICpcbiAqIEluIGFib3ZlIGV4YW1wbGUsIG1ldGhvZCBcInNvbWVNZXRob2RcIiB3aWxsIGJlIGludm9rZWQgb24gJ2FjdGl2aXR5Jy4gT24gdGhlIHJlc3VsdCwgXCJhbm90aGVyTWV0aG9kXCIgd2lsbCBiZSBpbnZva2VkXG4gKiAgXCJ0YXJnZXRcIiBjYW4gYmUgZWl0aGVyICdhY3Rpdml0eScsICdhcHBsaWNhdGlvbicgb3IgJ2VsZW1lbnQnXG4gKiAgSWYgdGFyZ2V0IGlzIHNldCB0byAnYXBwbGljYXRpb24nLCBtZXRob2RzIHdpbGwgYmUgaW52b2tlZCBvbiBhcHBsaWNhdGlvbiBjbGFzc1xuICogIElmIHRhcmdldCBpcyBzZXQgdG8gJ2FjdGl2aXR5JywgbWV0aG9kcyB3aWxsIGJlIGludm9rZWQgb24gY3VycmVudCBhY3Rpdml0eVxuICogIElmIHRhcmdldCBpcyBzZXQgdG8gJ2VsZW1lbnQnLCAnZWxlbWVudElkJyBtdXN0IGJlIHNwZWNpZmllZFxuICpcbiAqIC0gT25seSAnUHVibGljJyBtZXRob2RzIGNhbiBiZSBpbnZva2VkLiAoJ29wZW4nIG1vZGlmaXJlIGlzIG5lY2Vzc2FyeSBpbiBLb3RsaW4pXG4gKiAtIGZvbGxvd2luZyBwcmltaXRpdmUgdHlwZXMgYXJlIHN1cHBvcnRlZDogXCJpbnRcIiwgXCJib29sZWFuXCIsIFwiYnl0ZVwiLCBcInNob3J0XCIsIFwibG9uZ1wiLCBcImZsb2F0XCIsIFwiY2hhclwiXG4gKiAtICBOb24tcHJpbWl0aXZlIHR5cGVzIHdpdGggZnVsbHkgcXVhbGlmaWVkIG5hbWUgXCJqYXZhLmxhbmcuKlwiIGlzIGFsc28gc3VwcG9ydGVkOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZy4gXCJqYXZhLmxhbmcuQ2hhclNlcXVlbmNlXCIsIFwiamF2YS5sYW5nLlN0cmluZ1wiLCBcImphdmEubGFuZy5JbnRlZ2VyXCIsIFwiamF2YS5sYW5nLkZsb2F0XCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamF2YS5sYW5nLkRvdWJsZVwiLCBcImphdmEubGFuZy5Cb29sZWFuXCIsIFwiamF2YS5sYW5nLkxvbmdcIiwgXCJqYXZhLmxhbmcuU2hvcnRcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhLmxhbmcuQ2hhcmFjdGVyXCIgZXRjLi4uXG4gKlxuICpcbiAqIEB0aHJvd3MgIHtFcnJvcn0gaWYgdGFyZ2V0IGlzIG5vdCAnYWN0aXZpdHknIG9yICdhcHBsaWNhdGlvbidcbiAqIEB0aHJvd3MgIHtFcnJvcn0gaWYgYSBtZXRob2QgaXMgbm90IGZvdW5kIHdpdGggZ2l2ZW4gYXJndW1lbnQgdHlwZXNcbiAqXG4gKiBAcmV0dXJuIHsqfSB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IG1ldGhvZCBpbiB0aGUgaW52b2NhdGlvbiBjaGFpbi4gSWYgbWV0aG9kIHJldHVybiB0eXBlIGlzIHZvaWQsIHRoZW4gXCI8Vk9JRD5cIiB3aWxsIGJlIHJldHVybmVkXG4gKlxuICovXG5jb21tYW5kcy5tb2JpbGVCYWNrZG9vciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUJhY2tkb29yIChvcHRzID0ge30pIHtcbiAgYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsndGFyZ2V0JywgJ21ldGhvZHMnXSk7XG4gIGNvbnN0IHt0YXJnZXQsIG1ldGhvZHN9ID0gb3B0cztcbiAgaWYgKHRhcmdldCA9PT0gJ2VsZW1lbnQnKSB7XG4gICAgYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudElkJ10pO1xuICB9XG4gIGNvbnN0IHtlbGVtZW50SWQ6IHRhcmdldEVsZW1lbnR9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL2JhY2tkb29yYCwgJ1BPU1QnLCB7dGFyZ2V0LCBtZXRob2RzLCB0YXJnZXRFbGVtZW50fSk7XG59O1xuXG4vKipcbiAqICBFeGVjdXRlIFVpQXV0b21hdG9yMiBjb21tYW5kcyB0byBkcml2ZSBvdXQgb2YgYXBwIGFyZWFzLlxuICogIHN0cmF0ZWd5IGNhbiBiZSBvbmUgb2Y6IFwiY2xhenpcIiwgXCJyZXNcIiwgXCJ0ZXh0XCIsIFwidGV4dENvbnRhaW5zXCIsIFwidGV4dEVuZHNXaXRoXCIsIFwidGV4dFN0YXJ0c1dpdGhcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBcImRlc2NcIiwgXCJkZXNjQ29udGFpbnNcIiwgXCJkZXNjRW5kc1dpdGhcIiwgXCJkZXNjU3RhcnRzV2l0aFwiLCBcInBrZ1wiXG4gKlxuICogIGFjdGlvbiBjYW4gYmUgb25lIG9mOiBcImNsaWNrXCIsIFwibG9uZ0NsaWNrXCIsIFwiZ2V0VGV4dFwiLCBcImdldENvbnRlbnREZXNjcmlwdGlvblwiLCBcImdldENsYXNzTmFtZVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImdldFJlc291cmNlTmFtZVwiLCBcImdldFZpc2libGVCb3VuZHNcIiwgXCJnZXRWaXNpYmxlQ2VudGVyXCIsIFwiZ2V0QXBwbGljYXRpb25QYWNrYWdlXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2V0Q2hpbGRDb3VudFwiLCBcImNsZWFyXCIsIFwiaXNDaGVja2FibGVcIiwgXCJpc0NoZWNrZWRcIiwgXCJpc0NsaWNrYWJsZVwiLCBcImlzRW5hYmxlZFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImlzRm9jdXNhYmxlXCIsIFwiaXNGb2N1c2VkXCIsIFwiaXNMb25nQ2xpY2thYmxlXCIsIFwiaXNTY3JvbGxhYmxlXCIsIFwiaXNTZWxlY3RlZFwiXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVpYXV0b21hdG9yID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVWlhdXRvbWF0b3IgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7c3RyYXRlZ3ksIGxvY2F0b3IsIGFjdGlvbiwgaW5kZXh9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnc3RyYXRlZ3knLCAnbG9jYXRvcicsICdhY3Rpb24nXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS91aWF1dG9tYXRvcmAsICdQT1NUJywge3N0cmF0ZWd5LCBsb2NhdG9yLCBpbmRleCwgYWN0aW9ufSk7XG59O1xuXG4vKipcbiAqICBFeGVjdXRlIFVpQXV0b21hdG9yMiBjb21tYW5kIHRvIHJldHVybiB0aGUgVUkgZHVtcCB3aGVuIEFVVCBpcyBpbiBiYWNrZ3JvdW5kLlxuICogQHRocm93cyAge0Vycm9yfSBpZiB1aWF1dG9tYXRvciB2aWV3IGR1bXAgaXMgdW5zdWNjZXNzZnVsXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB1aWF1dG9tYXRvciBET00geG1sIGFzIHN0cmluZ1xuICovXG5jb21tYW5kcy5tb2JpbGVVaWF1dG9tYXRvclBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVVaWF1dG9tYXRvclBhZ2VTb3VyY2UgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvdWlhdXRvbWF0b3JfcGFnZV9zb3VyY2VgLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqICBGbGFzaCB0aGUgZWxlbWVudCB3aXRoIGdpdmVuIGlkLlxuICogIGR1cmF0aW9uTWlsbGlzIGFuZCByZXBlYXRDb3VudCBhcmUgb3B0aW9uYWxcbiAqXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUZsYXNoRWxlbWVudCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUZsYXNoRWxlbWVudCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIGNvbnN0IHtkdXJhdGlvbk1pbGxpcywgcmVwZWF0Q291bnR9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9mbGFzaGAsICdQT1NUJywge1xuICAgIGR1cmF0aW9uTWlsbGlzLFxuICAgIHJlcGVhdENvdW50XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtIGEgJ0dlbmVyYWxDbGlja0FjdGlvbicgKGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkeC90ZXN0L2VzcHJlc3NvL2FjdGlvbi9HZW5lcmFsQ2xpY2tBY3Rpb24pXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUNsaWNrQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQ2xpY2tBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudCwgdGFwcGVyLCBjb29yZGluYXRlc1Byb3ZpZGVyLCBwcmVjaXNpb25EZXNjcmliZXIsXG4gICAgICAgICBpbnB1dERldmljZSwgYnV0dG9uU3RhdGV9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9jbGlja19hY3Rpb25gLCAnUE9TVCcsIHtcbiAgICB0YXBwZXIsIGNvb3JkaW5hdGVzUHJvdmlkZXIsIHByZWNpc2lvbkRlc2NyaWJlciwgaW5wdXREZXZpY2UsIGJ1dHRvblN0YXRlXG4gIH0pO1xufTtcblxuY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiB1cGRhdGVTZXR0aW5ncyAoc2V0dGluZ3MpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL3NldHRpbmdzYCwgJ1BPU1QnLCB7IHNldHRpbmdzIH0pO1xufTtcblxuY29tbWFuZHMuZ2V0U2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiBnZXRTZXR0aW5ncyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9zZXR0aW5nc2AsICdHRVQnKTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlciBhbmQgcmVkaXJlY3QgdG8gRXNwcmVzc29cbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gc3VzcGVuZENocm9tZWRyaXZlclByb3h5ICgpIHtcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5lc3ByZXNzby5wcm94eVJlcVJlcy5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuZXNwcmVzc28ucHJveHlDb21tYW5kLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuY29tbWFuZHMuc3RhcnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0QWN0aXZpdHkgKGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LFxuICBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5KSB7XG4gIC8vIGludGVudEFjdGlvbiwgaW50ZW50Q2F0ZWdvcnksIGludGVudEZsYWdzLCBvcHRpb25hbEludGVudEFyZ3VtZW50cywgZG9udFN0b3BBcHBPblJlc2V0XG4gIC8vIHBhcmFtZXRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgRXNwcmVzc29cbiAgYXBwUGFja2FnZSA9IGFwcFBhY2thZ2UgfHwgdGhpcy5jYXBzLmFwcFBhY2thZ2U7XG4gIGFwcFdhaXRQYWNrYWdlID0gYXBwV2FpdFBhY2thZ2UgfHwgYXBwUGFja2FnZTtcbiAgYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEFjdGl2aXR5LCBhcHBQYWNrYWdlKTtcbiAgYXBwV2FpdEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZShhcHBXYWl0QWN0aXZpdHkgfHwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlKTtcbiAgdGhpcy5sb2cuZGVidWcoYFN0YXJ0aW5nIGFjdGl2aXR5ICcke2FwcEFjdGl2aXR5fScgZm9yIHBhY2thZ2UgJyR7YXBwUGFja2FnZX0nYCk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eWAsICdQT1NUJywge1xuICAgIGFwcFBhY2thZ2UsXG4gICAgYXBwQWN0aXZpdHksXG4gIH0pO1xuICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yQWN0aXZpdHkoYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVEaXNtaXNzQXV0b2ZpbGwgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEaXNtaXNzQXV0b2ZpbGwgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChcbiAgICBgL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2Rpc21pc3NfYXV0b2ZpbGxgLCAnUE9TVCcsIHt9KTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|