oxygen-cli 1.22.0 → 1.99.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -50
- package/build/core/OxygenCore.js +56 -145
- package/build/errors/OxygenError.js +5 -15
- package/build/errors/helper.js +45 -49
- package/build/index.js +14 -6
- package/build/lib/cli-util.js +19 -19
- package/build/lib/cli.js +4 -2
- package/build/lib/parallel-launcher.js +333 -0
- package/build/lib/param-manager.js +66 -47
- package/build/lib/util.js +38 -9
- package/build/ox_modules/index.js +1 -97
- package/build/ox_modules/module-assert.js +19 -9
- package/build/ox_modules/module-dns.js +220 -0
- package/build/ox_modules/module-http.js +39 -51
- package/build/ox_modules/module-shell.js +19 -75
- package/build/ox_modules/module-utils.js +1 -108
- package/build/ox_modules/utils.js +1 -357
- package/build/reporter/FileReporterBase.js +5 -5
- package/build/reporter/ReportAggregator.js +127 -4
- package/build/runners/WorkerProcess.js +15 -28
- package/build/runners/index.js +2 -6
- package/build/runners/oxygen/OxygenWorker.js +8 -8
- package/build/runners/oxygen/index.js +17 -18
- package/build/runners/oxygen/worker.js +10 -8
- package/package.json +12 -46
- package/build/lib/img-merge.js +0 -163
- package/build/ox_modules/module-db.js +0 -146
- package/build/ox_modules/module-email.js +0 -212
- package/build/ox_modules/module-eyes.js +0 -189
- package/build/ox_modules/module-mailinator.js +0 -207
- package/build/ox_modules/module-mob/commands/alertAccept.js +0 -35
- package/build/ox_modules/module-mob/commands/alertDismiss.js +0 -35
- package/build/ox_modules/module-mob/commands/assertAlert.js +0 -56
- package/build/ox_modules/module-mob/commands/assertText.js +0 -45
- package/build/ox_modules/module-mob/commands/assertTitle.js +0 -43
- package/build/ox_modules/module-mob/commands/assertValue.js +0 -66
- package/build/ox_modules/module-mob/commands/back.js +0 -27
- package/build/ox_modules/module-mob/commands/clear.js +0 -40
- package/build/ox_modules/module-mob/commands/click.js +0 -35
- package/build/ox_modules/module-mob/commands/clickHidden.js +0 -52
- package/build/ox_modules/module-mob/commands/clickLong.js +0 -34
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +0 -37
- package/build/ox_modules/module-mob/commands/closeApp.js +0 -27
- package/build/ox_modules/module-mob/commands/debug.js +0 -26
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +0 -38
- package/build/ox_modules/module-mob/commands/enableNetwork.js +0 -75
- package/build/ox_modules/module-mob/commands/execute.js +0 -32
- package/build/ox_modules/module-mob/commands/findElement.js +0 -36
- package/build/ox_modules/module-mob/commands/findElements.js +0 -39
- package/build/ox_modules/module-mob/commands/getAlertText.js +0 -31
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +0 -26
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +0 -66
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +0 -26
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +0 -26
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +0 -57
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +0 -27
- package/build/ox_modules/module-mob/commands/getLocation.js +0 -32
- package/build/ox_modules/module-mob/commands/getSource.js +0 -26
- package/build/ox_modules/module-mob/commands/getText.js +0 -36
- package/build/ox_modules/module-mob/commands/getTitle.js +0 -24
- package/build/ox_modules/module-mob/commands/getUrl.js +0 -28
- package/build/ox_modules/module-mob/commands/getValue.js +0 -50
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +0 -27
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +0 -33
- package/build/ox_modules/module-mob/commands/index.js +0 -594
- package/build/ox_modules/module-mob/commands/installApp.js +0 -28
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +0 -28
- package/build/ox_modules/module-mob/commands/isCheckable.js +0 -31
- package/build/ox_modules/module-mob/commands/isChecked.js +0 -31
- package/build/ox_modules/module-mob/commands/isClickable.js +0 -31
- package/build/ox_modules/module-mob/commands/isExist.js +0 -36
- package/build/ox_modules/module-mob/commands/isSelected.js +0 -36
- package/build/ox_modules/module-mob/commands/isVisible.js +0 -36
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +0 -27
- package/build/ox_modules/module-mob/commands/launchApp.js +0 -26
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +0 -30
- package/build/ox_modules/module-mob/commands/open.js +0 -43
- package/build/ox_modules/module-mob/commands/pause.js +0 -27
- package/build/ox_modules/module-mob/commands/removeApp.js +0 -28
- package/build/ox_modules/module-mob/commands/resetApp.js +0 -26
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +0 -86
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +0 -40
- package/build/ox_modules/module-mob/commands/select.js +0 -54
- package/build/ox_modules/module-mob/commands/selectFrame.js +0 -53
- package/build/ox_modules/module-mob/commands/selectWindow.js +0 -149
- package/build/ox_modules/module-mob/commands/sendKeys.js +0 -84
- package/build/ox_modules/module-mob/commands/setContext.js +0 -28
- package/build/ox_modules/module-mob/commands/setNativeContext.js +0 -26
- package/build/ox_modules/module-mob/commands/setTimeout.js +0 -33
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +0 -39
- package/build/ox_modules/module-mob/commands/shake.js +0 -27
- package/build/ox_modules/module-mob/commands/smsClickLink.js +0 -32
- package/build/ox_modules/module-mob/commands/smsGetText.js +0 -45
- package/build/ox_modules/module-mob/commands/swipe.js +0 -58
- package/build/ox_modules/module-mob/commands/swipeElement.js +0 -58
- package/build/ox_modules/module-mob/commands/swipeScreen.js +0 -56
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +0 -27
- package/build/ox_modules/module-mob/commands/tap.js +0 -34
- package/build/ox_modules/module-mob/commands/type.js +0 -67
- package/build/ox_modules/module-mob/commands/unlockPattern.js +0 -92
- package/build/ox_modules/module-mob/commands/waitForExist.js +0 -29
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +0 -42
- package/build/ox_modules/module-mob/commands/waitForVisible.js +0 -28
- package/build/ox_modules/module-mob.js +0 -699
- package/build/ox_modules/module-pdf.js +0 -328
- package/build/ox_modules/module-proxy.js +0 -324
- package/build/ox_modules/module-serial.js +0 -187
- package/build/ox_modules/module-soap.js +0 -260
- package/build/ox_modules/module-twilio.js +0 -192
- package/build/ox_modules/module-web/commands/alertAccept.js +0 -35
- package/build/ox_modules/module-web/commands/alertDismiss.js +0 -35
- package/build/ox_modules/module-web/commands/assertAlert.js +0 -55
- package/build/ox_modules/module-web/commands/assertExist.js +0 -28
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +0 -51
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +0 -45
- package/build/ox_modules/module-web/commands/assertText.js +0 -45
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +0 -56
- package/build/ox_modules/module-web/commands/assertTextPresent.js +0 -52
- package/build/ox_modules/module-web/commands/assertTitle.js +0 -42
- package/build/ox_modules/module-web/commands/assertValue.js +0 -44
- package/build/ox_modules/module-web/commands/back.js +0 -27
- package/build/ox_modules/module-web/commands/clear.js +0 -41
- package/build/ox_modules/module-web/commands/click.js +0 -112
- package/build/ox_modules/module-web/commands/clickHidden.js +0 -79
- package/build/ox_modules/module-web/commands/closeWindow.js +0 -25
- package/build/ox_modules/module-web/commands/debug.js +0 -25
- package/build/ox_modules/module-web/commands/deleteCookies.js +0 -22
- package/build/ox_modules/module-web/commands/deselect.js +0 -34
- package/build/ox_modules/module-web/commands/doubleClick.js +0 -65
- package/build/ox_modules/module-web/commands/dragAndDrop.js +0 -36
- package/build/ox_modules/module-web/commands/execute.js +0 -36
- package/build/ox_modules/module-web/commands/fileBrowse.js +0 -72
- package/build/ox_modules/module-web/commands/findElement.js +0 -35
- package/build/ox_modules/module-web/commands/findElements.js +0 -38
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +0 -24
- package/build/ox_modules/module-web/commands/getAlertText.js +0 -30
- package/build/ox_modules/module-web/commands/getAttribute.js +0 -38
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +0 -34
- package/build/ox_modules/module-web/commands/getCookies.js +0 -23
- package/build/ox_modules/module-web/commands/getCssValue.js +0 -38
- package/build/ox_modules/module-web/commands/getElementCount.js +0 -29
- package/build/ox_modules/module-web/commands/getHTML.js +0 -30
- package/build/ox_modules/module-web/commands/getSource.js +0 -26
- package/build/ox_modules/module-web/commands/getText.js +0 -36
- package/build/ox_modules/module-web/commands/getTitle.js +0 -22
- package/build/ox_modules/module-web/commands/getUrl.js +0 -26
- package/build/ox_modules/module-web/commands/getValue.js +0 -43
- package/build/ox_modules/module-web/commands/getWindowHandles.js +0 -26
- package/build/ox_modules/module-web/commands/getWindowSize.js +0 -26
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +0 -51
- package/build/ox_modules/module-web/commands/index.js +0 -634
- package/build/ox_modules/module-web/commands/isAlertPresent.js +0 -31
- package/build/ox_modules/module-web/commands/isChecked.js +0 -30
- package/build/ox_modules/module-web/commands/isExist.js +0 -36
- package/build/ox_modules/module-web/commands/isSelected.js +0 -35
- package/build/ox_modules/module-web/commands/isVisible.js +0 -36
- package/build/ox_modules/module-web/commands/makeVisible.js +0 -74
- package/build/ox_modules/module-web/commands/maximizeWindow.js +0 -24
- package/build/ox_modules/module-web/commands/minimizeWindow.js +0 -24
- package/build/ox_modules/module-web/commands/newWindow.js +0 -27
- package/build/ox_modules/module-web/commands/open.js +0 -42
- package/build/ox_modules/module-web/commands/pause.js +0 -26
- package/build/ox_modules/module-web/commands/point.js +0 -37
- package/build/ox_modules/module-web/commands/pointJS.js +0 -56
- package/build/ox_modules/module-web/commands/refresh.js +0 -26
- package/build/ox_modules/module-web/commands/rightClick.js +0 -61
- package/build/ox_modules/module-web/commands/rightClickActions.js +0 -57
- package/build/ox_modules/module-web/commands/scrollToElement.js +0 -33
- package/build/ox_modules/module-web/commands/select.js +0 -55
- package/build/ox_modules/module-web/commands/selectFrame.js +0 -52
- package/build/ox_modules/module-web/commands/selectWindow.js +0 -148
- package/build/ox_modules/module-web/commands/sendKeys.js +0 -56
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +0 -33
- package/build/ox_modules/module-web/commands/setTimeout.js +0 -33
- package/build/ox_modules/module-web/commands/setWindowSize.js +0 -29
- package/build/ox_modules/module-web/commands/takeScreenshot.js +0 -37
- package/build/ox_modules/module-web/commands/type.js +0 -52
- package/build/ox_modules/module-web/commands/waitForAngular.js +0 -83
- package/build/ox_modules/module-web/commands/waitForExist.js +0 -28
- package/build/ox_modules/module-web/commands/waitForInteractable.js +0 -31
- package/build/ox_modules/module-web/commands/waitForNotExist.js +0 -57
- package/build/ox_modules/module-web/commands/waitForNotText.js +0 -45
- package/build/ox_modules/module-web/commands/waitForNotValue.js +0 -45
- package/build/ox_modules/module-web/commands/waitForText.js +0 -45
- package/build/ox_modules/module-web/commands/waitForValue.js +0 -45
- package/build/ox_modules/module-web/commands/waitForVisible.js +0 -28
- package/build/ox_modules/module-web/commands/waitForWindow.js +0 -118
- package/build/ox_modules/module-web.js +0 -909
- package/build/ox_modules/module-win/commands/assertText.js +0 -41
- package/build/ox_modules/module-win/commands/assertTitle.js +0 -38
- package/build/ox_modules/module-win/commands/assertValue.js +0 -62
- package/build/ox_modules/module-win/commands/back.js +0 -21
- package/build/ox_modules/module-win/commands/clear.js +0 -34
- package/build/ox_modules/module-win/commands/click.js +0 -25
- package/build/ox_modules/module-win/commands/clickLong.js +0 -30
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +0 -33
- package/build/ox_modules/module-win/commands/findElement.js +0 -31
- package/build/ox_modules/module-win/commands/findElements.js +0 -31
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +0 -22
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +0 -25
- package/build/ox_modules/module-win/commands/getLocation.js +0 -26
- package/build/ox_modules/module-win/commands/getSource.js +0 -22
- package/build/ox_modules/module-win/commands/getText.js +0 -32
- package/build/ox_modules/module-win/commands/getValue.js +0 -46
- package/build/ox_modules/module-win/commands/getWindowHandles.js +0 -25
- package/build/ox_modules/module-win/commands/index.js +0 -298
- package/build/ox_modules/module-win/commands/isCheckable.js +0 -26
- package/build/ox_modules/module-win/commands/isChecked.js +0 -26
- package/build/ox_modules/module-win/commands/isClickable.js +0 -26
- package/build/ox_modules/module-win/commands/isExist.js +0 -32
- package/build/ox_modules/module-win/commands/isSelected.js +0 -26
- package/build/ox_modules/module-win/commands/isVisible.js +0 -32
- package/build/ox_modules/module-win/commands/open.js +0 -24
- package/build/ox_modules/module-win/commands/pause.js +0 -23
- package/build/ox_modules/module-win/commands/rightClick.js +0 -30
- package/build/ox_modules/module-win/commands/selectWindow.js +0 -97
- package/build/ox_modules/module-win/commands/sendKeys.js +0 -50
- package/build/ox_modules/module-win/commands/setTimeout.js +0 -29
- package/build/ox_modules/module-win/commands/takeScreenshot.js +0 -26
- package/build/ox_modules/module-win/commands/tap.js +0 -29
- package/build/ox_modules/module-win/commands/type.js +0 -38
- package/build/ox_modules/module-win/commands/waitForExist.js +0 -25
- package/build/ox_modules/module-win/commands/waitForInteractable.js +0 -43
- package/build/ox_modules/module-win/commands/waitForVisible.js +0 -24
- package/build/ox_modules/module-win.js +0 -367
- package/build/ox_services/service-devtools/submodule-network.js +0 -338
- package/build/ox_services/service-devtools.js +0 -83
- package/build/runners/cucumber/CucumberEventListener.js +0 -181
- package/build/runners/cucumber/CucumberReporter.js +0 -277
- package/build/runners/cucumber/CucumberWorker.js +0 -337
- package/build/runners/cucumber/index.js +0 -159
- package/build/runners/cucumber/worker.js +0 -184
package/build/lib/cli-util.js
CHANGED
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.OXYGEN_PAGE_OBJECT_FILE_NAME = exports.OXYGEN_ENV_FILE_NAME = exports.OXYGEN_CONFIG_FILE_NAME = void 0;
|
|
6
7
|
exports.generateTestOptions = generateTestOptions;
|
|
7
|
-
exports.
|
|
8
|
-
exports.
|
|
8
|
+
exports.getCommandLineOptions = getCommandLineOptions;
|
|
9
|
+
exports.getConfigurations = getConfigurations;
|
|
10
|
+
exports.getEnvironments = getEnvironments;
|
|
9
11
|
exports.getPageObjectFilePath = getPageObjectFilePath;
|
|
10
12
|
exports.loadEnvironmentVariables = loadEnvironmentVariables;
|
|
11
|
-
exports.
|
|
12
|
-
exports.
|
|
13
|
-
exports.getCommandLineOptions = getCommandLineOptions;
|
|
13
|
+
exports.loadSuiteDefinitionsFromFolder = loadSuiteDefinitionsFromFolder;
|
|
14
|
+
exports.loadSuites = loadSuites;
|
|
14
15
|
exports.processTargetPath = processTargetPath;
|
|
15
|
-
exports.OXYGEN_PAGE_OBJECT_FILE_NAME = exports.OXYGEN_ENV_FILE_NAME = exports.OXYGEN_CONFIG_FILE_NAME = void 0;
|
|
16
16
|
|
|
17
17
|
require("source-map-support/register");
|
|
18
18
|
|
|
@@ -62,21 +62,21 @@ async function loadSuites(config, argv) {
|
|
|
62
62
|
suites.push(await _util.default.generateTestSuiteFromJsonFile(target.path, config.parameters.file, config.parameters.mode, config));
|
|
63
63
|
}
|
|
64
64
|
} else {
|
|
65
|
-
|
|
65
|
+
let suiteDefs = [];
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const suitesFolder = _path.default.join(target.cwd, 'suites');
|
|
67
|
+
if (config.suites && Array.isArray(config.suites)) {
|
|
68
|
+
suiteDefs = config.suites;
|
|
69
|
+
}
|
|
72
70
|
|
|
73
|
-
|
|
74
|
-
suiteDefs = [...suiteDefs, ...loadSuiteDefinitionsFromFolder(suitesFolder)];
|
|
75
|
-
}
|
|
71
|
+
const suitesFolder = _path.default.join(target.cwd, 'suites');
|
|
76
72
|
|
|
77
|
-
|
|
73
|
+
if (_fs.default.existsSync(suitesFolder)) {
|
|
74
|
+
suiteDefs = [...suiteDefs, ...loadSuiteDefinitionsFromFolder(suitesFolder)];
|
|
78
75
|
}
|
|
79
76
|
|
|
77
|
+
suites = await Promise.all(suiteDefs.map(async suiteDef => await _util.default.generateTestSuiteFromJson(suiteDef, config)));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
80
|
if (argv.suites && typeof argv.suites === 'string') {
|
|
81
81
|
const selectedSuiteNames = argv.suites.split(',');
|
|
82
82
|
suites = suites.filter(x => selectedSuiteNames.includes(x.name));
|
|
@@ -301,8 +301,8 @@ function processTargetPath(targetPath) {
|
|
|
301
301
|
if (typeof targetPath === 'undefined') {
|
|
302
302
|
targetPath = process.cwd();
|
|
303
303
|
} else {
|
|
304
|
-
|
|
305
|
-
|
|
304
|
+
targetPath = _util.default.resolvePath(targetPath, process.cwd());
|
|
305
|
+
}
|
|
306
306
|
|
|
307
307
|
if (!_fs.default.existsSync(targetPath)) {
|
|
308
308
|
return null;
|
|
@@ -339,4 +339,4 @@ function processTargetPath(targetPath) {
|
|
|
339
339
|
extension: _path.default.extname(targetPath)
|
|
340
340
|
};
|
|
341
341
|
}
|
|
342
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwibmFtZXMiOlsiT1hZR0VOX0NPTkZJR19GSUxFX05BTUUiLCJPWFlHRU5fRU5WX0ZJTEVfTkFNRSIsIk9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUiLCJnZW5lcmF0ZVRlc3RPcHRpb25zIiwiY29uZmlnIiwiYXJndiIsIm9wdGlvbnMiLCJlbnYiLCJsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMiLCJwbyIsImdldFBhZ2VPYmplY3RGaWxlUGF0aCIsInN1aXRlcyIsImxvYWRTdWl0ZXMiLCJmcmFtZXdvcmsiLCJ0b0xvd2VyQ2FzZSIsInRhcmdldCIsImlzQ29uZmlnRmlsZSIsIm5hbWUiLCJpbmRleE9mIiwiZXh0ZW5zaW9uIiwicHVzaCIsIm94dXRpbCIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSIsInBhdGgiLCJwYXJhbWV0ZXJzIiwiZmlsZSIsIm1vZGUiLCJpdGVyYXRpb25zIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJzdWl0ZURlZnMiLCJBcnJheSIsImlzQXJyYXkiLCJzdWl0ZXNGb2xkZXIiLCJqb2luIiwiY3dkIiwiZnMiLCJleGlzdHNTeW5jIiwibG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsInN1aXRlRGVmIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbiIsInNlbGVjdGVkU3VpdGVOYW1lcyIsInNwbGl0IiwiZmlsdGVyIiwieCIsImluY2x1ZGVzIiwiZm9sZGVyUGF0aCIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJleHRuYW1lIiwiZnVsbFBhdGgiLCJwb0ZpbGVOYW1lIiwicHJvY2VzcyIsInBvRmlsZVBhdGgiLCJyZXNvbHZlIiwiZSIsImVyciIsIkVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiZW52TmFtZSIsImVudmlyb25tZW50IiwiZGVmYXVsdEVudkZpbGUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZWRpY2F0ZWRFbnZGaWxlSnMiLCJkZWRpY2F0ZWRFbnZGaWxlSnNvbiIsImdldEVudmlyb25tZW50cyIsInRhcmdldEN3ZCIsImdldENvbmZpZ3VyYXRpb25zIiwiREVGQVVMVF9PUFRTIiwiYnJvd3Nlck5hbWUiLCJzZWxlbml1bVVybCIsImFwcGl1bVVybCIsInJlb3BlblNlc3Npb24iLCJyZVJ1bk9uRmFpbGVkIiwiZGVidWdQb3J0IiwiZGVsYXkiLCJjb2xsZWN0RGV2aWNlTG9ncyIsImNvbGxlY3RBcHBpdW1Mb2dzIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXJzIiwiY21kT3B0cyIsImdldENvbW1hbmRMaW5lT3B0aW9ucyIsInByb2pDb25maWdPcHRzIiwiZW52cyIsImJhc2VOYW1lIiwib3B0cyIsImIiLCJicm93c2VyIiwicyIsInNlcnZlciIsInJlb3BlbiIsImkiLCJwYXJzZUludCIsIml0ZXIiLCJkYmdwb3J0IiwiZCIsInJmIiwibGVuZ3RoIiwicmVwb3J0Rm9ybWF0cyIsInJvIiwib3V0cHV0RGlyIiwicCIsInBhcmFtIiwicG0iLCJzcGVjcyIsIm1vZHVsZXMiLCJkZWxldGVOdWxsUHJvcGVydGllcyIsIm9iaiIsImNsb25lIiwia2V5cyIsImtleSIsInVuZGVmaW5lZCIsInByb2Nlc3NUYXJnZXRQYXRoIiwidGFyZ2V0UGF0aCIsInJlc29sdmVQYXRoIiwic3RhdHMiLCJsc3RhdFN5bmMiLCJpc0RpcmVjdG9yIiwiaXNEaXJlY3RvcnkiLCJjb25maWdGaWxlUGF0aCIsImRpcm5hbWUiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJmdWxsTmFtZSIsImJhc2VuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVPLE1BQU1BLHVCQUF1QixHQUFHLGFBQWhDOztBQUNBLE1BQU1DLG9CQUFvQixHQUFHLFlBQTdCOztBQUNBLE1B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MUcsY0FBSzJHLFFBQUwsQ0FBY1YsVUFBZCxDQVJQO0FBVUg3QixJQUFBQSxRQUFRLEVBQUVwRSxjQUFLMkcsUUFBTCxDQUFjM0csY0FBS3dHLE9BQUwsQ0FBYVAsVUFBYixDQUFkLENBVlA7QUFZSHJHLElBQUFBLFNBQVMsRUFBRUksY0FBSzRCLE9BQUwsQ0FBYXFFLFVBQWI7QUFaUixHQUFQO0FBY0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuL3V0aWwnO1xyXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnYXN5bmMnO1xyXG5pbXBvcnQgbW9kdWxlUmVxdWlyZSBmcm9tICcuL21vZHVsZVJlcXVpcmUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FID0gJ294eWdlbi5jb25mJztcclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9FTlZfRklMRV9OQU1FID0gJ294eWdlbi5lbnYnO1xyXG5leHBvcnQgY29uc3QgT1hZR0VOX1BBR0VfT0JKRUNUX0ZJTEVfTkFNRSA9ICdveHlnZW4ucG8nO1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlVGVzdE9wdGlvbnMoY29uZmlnLCBhcmd2KSB7XHJcbiAgICBjb25zdCBvcHRpb25zID0geyAuLi5jb25maWcgfTtcclxuICAgIG9wdGlvbnMuZW52ID0gbG9hZEVudmlyb25tZW50VmFyaWFibGVzKGNvbmZpZywgYXJndik7XHJcbiAgICBvcHRpb25zLnBvID0gZ2V0UGFnZU9iamVjdEZpbGVQYXRoKGNvbmZpZywgYXJndik7XHJcbiAgICBvcHRpb25zLnN1aXRlcyA9IGF3YWl0IGxvYWRTdWl0ZXMoY29uZmlnLCBhcmd2KTtcclxuICAgIHJldHVybiBvcHRpb25zO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFN1aXRlcyhjb25maWcsIGFyZ3YpIHtcclxuICAgIGlmIChjb25maWcuZnJhbWV3b3JrICYmIHR5cGVvZiBjb25maWcuZnJhbWV3b3JrID09PSAnc3RyaW5nJyAmJiBjb25maWcuZnJhbWV3b3JrLnRvTG93ZXJDYXNlKCkgIT09ICdveHlnZW4nKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGNvbmZpZztcclxuICAgIGNvbnN0IGlzQ29uZmlnRmlsZSA9IHRhcmdldCAmJiB0YXJnZXQubmFtZSAmJiB0YXJnZXQubmFtZS5pbmRleE9mKE9YWUdFTl9DT05GSUdfRklMRV9OQU1FKSA9PT0gMDtcclxuICAgIGxldCBzdWl0ZXMgPSBbXTtcclxuICAgIC8vIGlmIGFuIGluZGl2aWR1YWwgc2NyaXB0IG9yIHN1aXRlIGZpbGUgd2FzIHBhc3NlZFxyXG4gICAgaWYgKCFpc0NvbmZpZ0ZpbGUpIHtcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5leHRlbnNpb24gPT09ICcuanMnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlcy5wdXNoKGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUodGFyZ2V0LnBhdGgsIGNvbmZpZy5wYXJhbWV0ZXJzLmZpbGUsIGNvbmZpZy5wYXJhbWV0ZXJzLm1vZGUsIGZhbHNlLCBjb25maWcuaXRlcmF0aW9ucyB8fCAxKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRhcmdldCAmJiB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzb24nKSB7XHJcbiAgICAgICAgICAgIHN1aXRlcy5wdXNoKGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSh0YXJnZXQucGF0aCwgY29uZmlnLnBhcmFtZXRlcnMuZmlsZSwgY29uZmlnLnBhcmFtZXRlcnMubW9kZSwgY29uZmlnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gaWYgYSBmb2xkZXIgb3IgYSBjb25maWd1cmF0aW9uIGZpbGUgd2FzIHBhc3NlZFxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IHN1aXRlRGVmcyA9IFtdO1xyXG4gICAgICAgIGlmIChjb25maWcuc3VpdGVzICYmIEFycmF5LmlzQXJyYXkoY29uZmlnLnN1aXRlcykpIHtcclxuICAgICAgICAgICAgc3VpdGVEZWZzID0gY29uZmlnLnN1aXRlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgbW9yZSBzdWl0ZXMgYXJlIGRlZmluZWQgaW4gdGhlICdzdWl0ZXMnIGZvbGRlclxyXG4gICAgICAgIGNvbnN0IHN1aXRlc0ZvbGRlciA9IHBhdGguam9pbih0YXJnZXQuY3dkLCAnc3VpdGVzJyk7XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc3VpdGVzRm9sZGVyKSkge1xyXG4gICAgICAgICAgICBzdWl0ZURlZnMgPSBbXHJcbiAgICAgICAgICAgICAgICAuLi5zdWl0ZURlZnMsXHJcbiAgICAgICAgICAgICAgICAuLi5sb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIoc3VpdGVzRm9sZGVyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtZXJnZSBzdWl0ZXMgY29uZmlndXJlZCBpbiB0aGUgcHJvamVjdCBjb25maWcgZmlsZSBhbmQgdGhvc2UgZm91bmQgaW4gJ3N1aXRlcycgZm9sZGVyXHJcbiAgICAgICAgc3VpdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoc3VpdGVEZWZzLm1hcChhc3luYyAoc3VpdGVEZWYpID0+IGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uKHN1aXRlRGVmLCBjb25maWcpKSk7XHJcbiAgICB9XHJcbiAgICAvLyBmaWx0ZXIgb3V0IHN1aXRlcyBpZiAnLS1zdWl0ZXMnIGNvbW1hbmQgbGluZSBhcmd1bWVudCB3YXMgc3BlY2lmaWVkXHJcbiAgICBpZiAoYXJndi5zdWl0ZXMgJiYgdHlwZW9mIGFyZ3Yuc3VpdGVzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkU3VpdGVOYW1lcyA9IGFyZ3Yuc3VpdGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgc3VpdGVzID0gc3VpdGVzLmZpbHRlcih4ID0+IHNlbGVjdGVkU3VpdGVOYW1lcy5pbmNsdWRlcyh4Lm5hbWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdWl0ZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIoZm9sZGVyUGF0aCkge1xyXG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhmb2xkZXJQYXRoKTtcclxuICAgIGxldCBzdWl0ZURlZnMgPSBbXTtcclxuICAgIGZvckVhY2goZmlsZXMsIGZpbGUgPT4ge1xyXG4gICAgICAgIGlmIChwYXRoLmV4dG5hbWUoZmlsZSkgPT09ICcuanNvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZm9sZGVyUGF0aCwgZmlsZSk7XHJcbiAgICAgICAgICAgIHN1aXRlRGVmcy5wdXNoKG1vZHVsZVJlcXVpcmUoZnVsbFBhdGgpKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzdWl0ZURlZnM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlT2JqZWN0RmlsZVBhdGgoY29uZmlnLCBhcmd2ID0ge30pIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGNvbmZpZy50YXJnZXQgfHwge307XHJcbiAgICBjb25zdCBwb0ZpbGVOYW1lID0gYXJndi5wbyB8fCBgJHtPWFlHRU5fUEFHRV9PQkpFQ1RfRklMRV9OQU1FfS5qc2A7XHJcbiAgICBjb25zdCBjd2QgPSB0YXJnZXQuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBsZXQgcG9GaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShjd2QsIHBvRmlsZU5hbWUpO1xyXG4gICAgcG9GaWxlUGF0aCA9IGZzLmV4aXN0c1N5bmMocG9GaWxlUGF0aCkgPyBwb0ZpbGVQYXRoIDogbnVsbDtcclxuXHJcbiAgICBpZiAocG9GaWxlUGF0aCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIG1vZHVsZVJlcXVpcmUocG9GaWxlUGF0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwb0ZpbGVQYXRoO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke3BvRmlsZVBhdGh9LiBSZWFzb246ICR7ZS5tZXNzYWdlfSAke2Uuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVudmlyb25tZW50VmFyaWFibGVzKGNvbmZpZywgYXJndikge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gY29uZmlnLnRhcmdldCB8fCB7fTtcclxuICAgIGNvbnN0IGVudk5hbWUgPSBhcmd2LmVudiB8fCBjb25maWcuZW52aXJvbm1lbnQgfHwgJ2RlZmF1bHQnO1xyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgY29uc3QgZGVmYXVsdEVudkZpbGUgPSBwYXRoLmpvaW4oY3dkLCBgJHtPWFlHRU5fRU5WX0ZJTEVfTkFNRX0uanNgKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZmF1bHRFbnZGaWxlKSkge1xyXG4gICAgICAgIGNvbnN0IGVudiA9IG1vZHVsZVJlcXVpcmUoZGVmYXVsdEVudkZpbGUpO1xyXG4gICAgICAgIGlmIChlbnYgJiYgdHlwZW9mIGVudiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVudiwgZW52TmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVudltlbnZOYW1lXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB0cnkgdG8gcmVzb2x2ZSBhIGRlZGljYXRlZCBlbnZpcm9ubWVudCBmaWxlIGluICdlbnYnIHN1YiBmb2xkZXJcclxuICAgIGNvbnN0IGRlZGljYXRlZEVudkZpbGVKcyA9IHBhdGguam9pbihjd2QsICdlbnYnLCBgJHtlbnZOYW1lfS5qc2ApO1xyXG4gICAgY29uc3QgZGVkaWNhdGVkRW52RmlsZUpzb24gPSBwYXRoLmpvaW4oY3dkLCAnZW52JywgYCR7ZW52TmFtZX0uanNvbmApO1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVkaWNhdGVkRW52RmlsZUpzKSkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZGljYXRlZEVudkZpbGVKcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmcy5leGlzdHNTeW5jKGRlZGljYXRlZEVudkZpbGVKc29uKSkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZGljYXRlZEVudkZpbGVKc29uKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudmlyb25tZW50cyh0YXJnZXQpIHtcclxuICAgIGxldCB0YXJnZXRDd2QgPSBudWxsO1xyXG5cclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmN3ZCkge1xyXG4gICAgICAgIHRhcmdldEN3ZCA9IHRhcmdldC5jd2Q7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0Q3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBkZWZhdWx0RW52RmlsZSA9IHBhdGguam9pbihjd2QsIGAke09YWUdFTl9FTlZfRklMRV9OQU1FfS5qc2ApO1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudkZpbGUpKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZVJlcXVpcmUoZGVmYXVsdEVudkZpbGUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke2RlZmF1bHRFbnZGaWxlfS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlndXJhdGlvbnModGFyZ2V0LCBhcmd2KSB7XHJcbiAgICAvLyBwcm9jZXNzIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIGxldCB0YXJnZXRDd2QgPSBudWxsO1xyXG5cclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmN3ZCkge1xyXG4gICAgICAgIHRhcmdldEN3ZCA9IHRhcmdldC5jd2Q7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgREVGQVVMVF9PUFRTID0ge1xyXG4gICAgICAgIGN3ZDogdGFyZ2V0ID8gKHRhcmdldEN3ZCB8fCBwcm9jZXNzLmN3ZCgpKSA6IHByb2Nlc3MuY3dkKCksXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdjaHJvbWUnLFxyXG4gICAgICAgIHNlbGVuaXVtVXJsIDogJ2h0dHA6Ly9sb2NhbGhvc3Q6NDQ0NC93ZC9odWInLFxyXG4gICAgICAgIGFwcGl1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJyxcclxuICAgICAgICByZW9wZW5TZXNzaW9uOiBmYWxzZSxcclxuICAgICAgICByZVJ1bk9uRmFpbGVkOiBmYWxzZSxcclxuICAgICAgICBpdGVyYXRpb25zIDogMSxcclxuICAgICAgICBkZWJ1Z1BvcnQ6IG51bGwsXHJcbiAgICAgICAgZGVsYXk6IG51bGwsXHJcbiAgICAgICAgY29sbGVjdERldmljZUxvZ3M6IGZhbHNlLFxyXG4gICAgICAgIGNvbGxlY3RBcHBpdW1Mb2dzOiBmYWxzZSxcclxuICAgICAgICBjb2xsZWN0QnJvd3NlckxvZ3M6IGZhbHNlLFxyXG4gICAgICAgIHJlcG9ydGluZzoge1xyXG4gICAgICAgICAgICByZXBvcnRlcnM6IFsnaHRtbCddXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYXJhbWV0ZXJzIDoge1xyXG4gICAgICAgICAgICBmaWxlOiBudWxsLFxyXG4gICAgICAgICAgICBtb2RlOiAnc2VxJ1xyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgLy8gcmV0cmlldmUgb3B0aW9ucyBwcm92aWRlZCB2aWEgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG4gICAgY29uc3QgY21kT3B0cyA9IGdldENvbW1hbmRMaW5lT3B0aW9ucyhhcmd2KTtcclxuICAgIC8vIGlmIHRoZSB0YXJnZXQgaXMgb3h5Z2VuIGNvbmZpZyBmaWxlLCBtZXJnZSBpdHMgY29udGVudCB3aXRoIHRoZSBkZWZhdWx0IG9wdGlvbnNcclxuICAgIGxldCBwcm9qQ29uZmlnT3B0cyA9IHt9O1xyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQubmFtZSA9PT0gT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgJiYgKHRhcmdldC5leHRlbnNpb24gPT09ICcuanMnIHx8IHRhcmdldC5leHRlbnNpb24gPT09ICcuanNvbicpKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMgPSBtb2R1bGVSZXF1aXJlKHRhcmdldC5wYXRoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHt0YXJnZXQucGF0aH0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGVudnMgPSBnZXRFbnZpcm9ubWVudHModGFyZ2V0KTtcclxuXHJcbiAgICBpZiAocHJvakNvbmZpZ09wdHMuZW52cykge1xyXG4gICAgICAgIC8vIG1lcmdlIGV4dGVybmFsIGVudmlyb25tZW50cyBkZWZpbml0aW9uIHdpdGggdGhlIG9uZSBpbiB0aGUgY29uZmlnIGZpbGVcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cy5lbnZzID0geyAuLi5wcm9qQ29uZmlnT3B0cy5lbnZzLCAuLi5lbnZzIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IHsgLi4ucHJvakNvbmZpZ09wdHMsIGVudnM6IGVudnMgfTtcclxuICAgIH1cclxuICAgIC8vIGRldGVybWluZSB0ZXN0IG5hbWVcclxuICAgIGxldCBuYW1lID0gY21kT3B0cy5uYW1lIHx8IHByb2pDb25maWdPcHRzLm5hbWUgfHwgbnVsbDtcclxuICAgIGlmICghbmFtZSAmJiB0YXJnZXQpIHtcclxuICAgICAgICBuYW1lID0gdGFyZ2V0Lm5hbWUgIT09IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FID8gdGFyZ2V0Lm5hbWUgOiB0YXJnZXQuYmFzZU5hbWU7XHJcbiAgICB9XHJcbiAgICAvLyBtZXJnZSBvcHRpb25zIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIG9yZGVyICh0aGUgbGFzdCBvbmUgb3ZlcnJpZGVzIHRoZSBwcmV2aW91cyBvbmUpOlxyXG4gICAgLy8gZGVmYXVsdCBvcHRpb25zLCBwcm9qZWN0IGNvbmZpZyBmaWxlLCBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbiAgICByZXR1cm4geyAuLi5ERUZBVUxUX09QVFMsIC4uLnByb2pDb25maWdPcHRzLCAuLi5jbWRPcHRzLCBuYW1lOiBuYW1lIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21tYW5kTGluZU9wdGlvbnMoYXJndikge1xyXG4gICAgY29uc3Qgb3B0cyA9IHtcclxuICAgICAgICAvLyBzd2l0Y2g6IC0tbmFtZSBcclxuICAgICAgICBuYW1lOiBhcmd2Lm5hbWUgfHwgbnVsbCxcclxuICAgICAgICAvLyBzd2l0Y2g6IC1iIG9yIC0tYnJvd3NlclxyXG4gICAgICAgIGJyb3dzZXJOYW1lIDogYXJndi5iIHx8IGFyZ3YuYnJvd3NlciB8fCBudWxsLFxyXG4gICAgICAgIHNlbGVuaXVtVXJsIDogYXJndi5zIHx8IGFyZ3Yuc2VydmVyIHx8IG51bGwsXHJcbiAgICAgICAgYXBwaXVtVXJsIDogYXJndi5zIHx8IGFyZ3Yuc2VydmVyIHx8IG51bGwsXHJcbiAgICAgICAgcmVvcGVuU2Vzc2lvbjogYXJndi5yZW9wZW4gPyBhcmd2LnJlb3BlbiA9PT0gJ3RydWUnIDogbnVsbCxcclxuICAgICAgICBpdGVyYXRpb25zIDogYXJndi5pID8gcGFyc2VJbnQoYXJndi5pKSA6IChhcmd2Lml0ZXIgPyBwYXJzZUludChhcmd2Lml0ZXIpIDogbnVsbCksXHJcbiAgICAgICAgZGVidWdQb3J0OiBhcmd2LmRiZ3BvcnQgfHwgbnVsbCxcclxuICAgICAgICBkZWxheTogYXJndi5kIHx8IGFyZ3YuZGVsYXkgfHwgbnVsbCxcclxuICAgIH07XHJcbiAgICAvLyBzd2l0Y2g6IC0tcmYgZmxhZ1xyXG4gICAgaWYgKGFyZ3YucmYgJiYgdHlwZW9mIGFyZ3YucmYgPT09ICdzdHJpbmcnICYmIGFyZ3YucmYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydEZvcm1hdHMgPSBhcmd2LnJmLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5yZXBvcnRpbmcgPSB7XHJcbiAgICAgICAgICAgIHJlcG9ydGVyczogcmVwb3J0Rm9ybWF0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gc3dpdGNoOiAtLXJvIC0gc2V0IHJlcG9ydGVyIG91dHB1dCBkaXJlY3RvcnkgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgICAgICAvLyBOT1RFOiAtLXJvIHN3aXRjaCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIC0tcmZcclxuICAgICAgICBpZiAoYXJndi5ybyAmJiB0eXBlb2YgYXJndi5ybyA9PT0gJ3N0cmluZycgJiYgYXJndi5yby5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG9wdHMucmVwb3J0aW5nLm91dHB1dERpciA9IGFyZ3Yucm87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gb3B0aW9uOiAtcCBvciAtLXBhcmFtIGFuZCAtLXBtXHJcbiAgICBpZiAoYXJndi5wIHx8IGFyZ3YucGFyYW0pIHtcclxuICAgICAgICBvcHRzLnBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgIGZpbGU6IGFyZ3YucCB8fCBhcmd2LnBhcmFtIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG1vZGU6IGFyZ3YucG0gfHwgJ3NlcSdcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN3aXRjaDogLS1zcGVjcyAtIHNldCBzcGVjcyBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgaWYgKGFyZ3Yuc3BlY3MgJiYgdHlwZW9mIGFyZ3Yuc3BlY3MgPT09ICdzdHJpbmcnICYmIGFyZ3Yuc3BlY3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHNwZWNzID0gYXJndi5zcGVjcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIG9wdHMuc3BlY3MgPSBzcGVjcztcclxuICAgIH1cclxuICAgIC8vIHN3aXRjaDogLS1tb2R1bGVzIC0gc2V0IGEgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGxvYWRlZCwgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgIGlmIChhcmd2Lm1vZHVsZXMgJiYgdHlwZW9mIGFyZ3YubW9kdWxlcyA9PT0gJ3N0cmluZycgJiYgYXJndi5tb2R1bGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBtb2R1bGVzID0gYXJndi5tb2R1bGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5tb2R1bGVzID0gbW9kdWxlcztcclxuICAgIH1cclxuICAgIC8vIHJlbW92ZSBhbnkgcHJvcGVydHkgd2l0aCBudWxsIHZhbHVlIChzbyBpdCB3b24ndCBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBpZiBpdCdzIG51bGwpXHJcbiAgICByZXR1cm4gZGVsZXRlTnVsbFByb3BlcnRpZXMob3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlbGV0ZU51bGxQcm9wZXJ0aWVzKG9iaikge1xyXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsb25lID0geyAuLi5vYmogfTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG4gICAgZm9yRWFjaCAoa2V5cywga2V5ID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSAmJiAob2JqW2tleV0gPT0gbnVsbCB8fCBvYmpba2V5XSA9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBjbG9uZVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1RhcmdldFBhdGgodGFyZ2V0UGF0aCkge1xyXG4gICAgLy8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaWYgdXNlciBoYXMgbm90IHByb3ZpZGVkIHBhdGhcclxuICAgIGlmICh0eXBlb2YodGFyZ2V0UGF0aCkgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGFyZ2V0UGF0aCA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgICB9XHJcbiAgICAvLyB1c2VyJ3MgcGF0aCBtaWdodCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAtIG1ha2Ugc3VyZSB0aGUgcmVsYXRpdmUgcGF0aCB3aWxsIHdvcmtcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRhcmdldFBhdGggPSBveHV0aWwucmVzb2x2ZVBhdGgodGFyZ2V0UGF0aCwgcHJvY2Vzcy5jd2QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRhcmdldFBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhdHMgPSBmcy5sc3RhdFN5bmModGFyZ2V0UGF0aCk7XHJcbiAgICBjb25zdCBpc0RpcmVjdG9yID0gc3RhdHMuaXNEaXJlY3RvcnkoKTtcclxuICAgIGlmIChpc0RpcmVjdG9yKSB7XHJcbiAgICAgICAgLy8gYXBwZW5kIG94eWdlbiBjb25maWcgZmlsZSBuYW1lIHRvIHRoZSBkaXJlY3RvcnksIGlmIG5vIHRlc3QgY2FzZSBmaWxlIHdhcyBwcm92aWRlZFxyXG4gICAgICAgIGxldCBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbih0YXJnZXRQYXRoLCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSArICcuanMnKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKHRhcmdldFBhdGgsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJyk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRhcmdldFBhdGggPSBjb25maWdGaWxlUGF0aDtcclxuICAgIH1cclxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXRQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvLyBwYXRoIHRvIHRoZSBjb25maWcgb3IgLmpzIGZpbGVcclxuICAgICAgICBwYXRoOiB0YXJnZXRQYXRoLFxyXG4gICAgICAgIC8vIHdvcmtpbmcgZGlyZWN0b3J5XHJcbiAgICAgICAgY3dkOiBwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCksXHJcbiAgICAgICAgLy8gbmFtZSBvZiB0aGUgdGFyZ2V0IGZpbGUgd2l0aG91dCBleHRlbnNpb25cclxuICAgICAgICBuYW1lOiBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIG5hbWUgaW5jbHVkaW5nIGV4dGVuc2lvblxyXG4gICAgICAgIGZ1bGxOYW1lOiBwYXRoLmJhc2VuYW1lKHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIHBhcmVudCBmb2xkZXIncyBuYW1lXHJcbiAgICAgICAgYmFzZU5hbWU6IHBhdGguYmFzZW5hbWUocGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpKSxcclxuICAgICAgICAvLyB0YXJnZXQgZmlsZSBleHRlbnNpb25cclxuICAgICAgICBleHRlbnNpb246IHBhdGguZXh0bmFtZSh0YXJnZXRQYXRoKVxyXG4gICAgfTtcclxufSJdfQ==
|
|
342
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwibmFtZXMiOlsiT1hZR0VOX0NPTkZJR19GSUxFX05BTUUiLCJPWFlHRU5fRU5WX0ZJTEVfTkFNRSIsIk9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUiLCJnZW5lcmF0ZVRlc3RPcHRpb25zIiwiY29uZmlnIiwiYXJndiIsIm9wdGlvbnMiLCJlbnYiLCJsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMiLCJwbyIsImdldFBhZ2VPYmplY3RGaWxlUGF0aCIsInN1aXRlcyIsImxvYWRTdWl0ZXMiLCJmcmFtZXdvcmsiLCJ0b0xvd2VyQ2FzZSIsInRhcmdldCIsImlzQ29uZmlnRmlsZSIsIm5hbWUiLCJpbmRleE9mIiwiZXh0ZW5zaW9uIiwicHVzaCIsIm94dXRpbCIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSIsInBhdGgiLCJwYXJhbWV0ZXJzIiwiZmlsZSIsIm1vZGUiLCJpdGVyYXRpb25zIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJzdWl0ZURlZnMiLCJBcnJheSIsImlzQXJyYXkiLCJzdWl0ZXNGb2xkZXIiLCJqb2luIiwiY3dkIiwiZnMiLCJleGlzdHNTeW5jIiwibG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsInN1aXRlRGVmIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbiIsInNlbGVjdGVkU3VpdGVOYW1lcyIsInNwbGl0IiwiZmlsdGVyIiwieCIsImluY2x1ZGVzIiwiZm9sZGVyUGF0aCIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJleHRuYW1lIiwiZnVsbFBhdGgiLCJwb0ZpbGVOYW1lIiwicHJvY2VzcyIsInBvRmlsZVBhdGgiLCJyZXNvbHZlIiwiZSIsImVyciIsIkVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiZW52TmFtZSIsImVudmlyb25tZW50IiwiZGVmYXVsdEVudkZpbGUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZWRpY2F0ZWRFbnZGaWxlSnMiLCJkZWRpY2F0ZWRFbnZGaWxlSnNvbiIsImdldEVudmlyb25tZW50cyIsInRhcmdldEN3ZCIsImdldENvbmZpZ3VyYXRpb25zIiwiREVGQVVMVF9PUFRTIiwiYnJvd3Nlck5hbWUiLCJzZWxlbml1bVVybCIsImFwcGl1bVVybCIsInJlb3BlblNlc3Npb24iLCJyZVJ1bk9uRmFpbGVkIiwiZGVidWdQb3J0IiwiZGVsYXkiLCJjb2xsZWN0RGV2aWNlTG9ncyIsImNvbGxlY3RBcHBpdW1Mb2dzIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXJzIiwiY21kT3B0cyIsImdldENvbW1hbmRMaW5lT3B0aW9ucyIsInByb2pDb25maWdPcHRzIiwiZW52cyIsImJhc2VOYW1lIiwib3B0cyIsImIiLCJicm93c2VyIiwicyIsInNlcnZlciIsInJlb3BlbiIsImkiLCJwYXJzZUludCIsIml0ZXIiLCJkYmdwb3J0IiwiZCIsInJmIiwibGVuZ3RoIiwicmVwb3J0Rm9ybWF0cyIsInJvIiwib3V0cHV0RGlyIiwicCIsInBhcmFtIiwicG0iLCJzcGVjcyIsIm1vZHVsZXMiLCJkZWxldGVOdWxsUHJvcGVydGllcyIsIm9iaiIsImNsb25lIiwia2V5cyIsImtleSIsInVuZGVmaW5lZCIsInByb2Nlc3NUYXJnZXRQYXRoIiwidGFyZ2V0UGF0aCIsInJlc29sdmVQYXRoIiwic3RhdHMiLCJsc3RhdFN5bmMiLCJpc0RpcmVjdG9yIiwiaXNEaXJlY3RvcnkiLCJjb25maWdGaWxlUGF0aCIsImRpcm5hbWUiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJmdWxsTmFtZSIsImJhc2VuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVPLE1BQU1BLHVCQUF1QixHQUFHLGFBQWhDOztBQUNBLE1BQU1DLG9CQUFvQixHQUFHLFlBQTdCOztBQUNBLE1B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MUcsY0FBSzJHLFFBQUwsQ0FBY1YsVUFBZCxDQVJQO0FBVUg3QixJQUFBQSxRQUFRLEVBQUVwRSxjQUFLMkcsUUFBTCxDQUFjM0csY0FBS3dHLE9BQUwsQ0FBYVAsVUFBYixDQUFkLENBVlA7QUFZSHJHLElBQUFBLFNBQVMsRUFBRUksY0FBSzRCLE9BQUwsQ0FBYXFFLFVBQWI7QUFaUixHQUFQO0FBY0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuL3V0aWwnO1xyXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnYXN5bmMnO1xyXG5pbXBvcnQgbW9kdWxlUmVxdWlyZSBmcm9tICcuL21vZHVsZVJlcXVpcmUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FID0gJ294eWdlbi5jb25mJztcclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9FTlZfRklMRV9OQU1FID0gJ294eWdlbi5lbnYnO1xyXG5leHBvcnQgY29uc3QgT1hZR0VOX1BBR0VfT0JKRUNUX0ZJTEVfTkFNRSA9ICdveHlnZW4ucG8nO1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlVGVzdE9wdGlvbnMoY29uZmlnLCBhcmd2KSB7XHJcbiAgICBjb25zdCBvcHRpb25zID0geyAuLi5jb25maWcgfTtcclxuICAgIG9wdGlvbnMuZW52ID0gbG9hZEVudmlyb25tZW50VmFyaWFibGVzKGNvbmZpZywgYXJndik7XHJcbiAgICBvcHRpb25zLnBvID0gZ2V0UGFnZU9iamVjdEZpbGVQYXRoKGNvbmZpZywgYXJndik7XHJcbiAgICBvcHRpb25zLnN1aXRlcyA9IGF3YWl0IGxvYWRTdWl0ZXMoY29uZmlnLCBhcmd2KTtcclxuICAgIHJldHVybiBvcHRpb25zO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFN1aXRlcyhjb25maWcsIGFyZ3YpIHtcclxuICAgIGlmIChjb25maWcuZnJhbWV3b3JrICYmIHR5cGVvZiBjb25maWcuZnJhbWV3b3JrID09PSAnc3RyaW5nJyAmJiBjb25maWcuZnJhbWV3b3JrLnRvTG93ZXJDYXNlKCkgIT09ICdveHlnZW4nKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGNvbmZpZztcclxuICAgIGNvbnN0IGlzQ29uZmlnRmlsZSA9IHRhcmdldCAmJiB0YXJnZXQubmFtZSAmJiB0YXJnZXQubmFtZS5pbmRleE9mKE9YWUdFTl9DT05GSUdfRklMRV9OQU1FKSA9PT0gMDtcclxuICAgIGxldCBzdWl0ZXMgPSBbXTtcclxuICAgIC8vIGlmIGFuIGluZGl2aWR1YWwgc2NyaXB0IG9yIHN1aXRlIGZpbGUgd2FzIHBhc3NlZFxyXG4gICAgaWYgKCFpc0NvbmZpZ0ZpbGUpIHtcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5leHRlbnNpb24gPT09ICcuanMnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlcy5wdXNoKGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUodGFyZ2V0LnBhdGgsIGNvbmZpZy5wYXJhbWV0ZXJzLmZpbGUsIGNvbmZpZy5wYXJhbWV0ZXJzLm1vZGUsIGZhbHNlLCBjb25maWcuaXRlcmF0aW9ucyB8fCAxKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRhcmdldCAmJiB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzb24nKSB7XHJcbiAgICAgICAgICAgIHN1aXRlcy5wdXNoKGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSh0YXJnZXQucGF0aCwgY29uZmlnLnBhcmFtZXRlcnMuZmlsZSwgY29uZmlnLnBhcmFtZXRlcnMubW9kZSwgY29uZmlnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gaWYgYSBmb2xkZXIgb3IgYSBjb25maWd1cmF0aW9uIGZpbGUgd2FzIHBhc3NlZFxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IHN1aXRlRGVmcyA9IFtdO1xyXG4gICAgICAgIGlmIChjb25maWcuc3VpdGVzICYmIEFycmF5LmlzQXJyYXkoY29uZmlnLnN1aXRlcykpIHtcclxuICAgICAgICAgICAgc3VpdGVEZWZzID0gY29uZmlnLnN1aXRlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgbW9yZSBzdWl0ZXMgYXJlIGRlZmluZWQgaW4gdGhlICdzdWl0ZXMnIGZvbGRlclxyXG4gICAgICAgIGNvbnN0IHN1aXRlc0ZvbGRlciA9IHBhdGguam9pbih0YXJnZXQuY3dkLCAnc3VpdGVzJyk7XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc3VpdGVzRm9sZGVyKSkge1xyXG4gICAgICAgICAgICBzdWl0ZURlZnMgPSBbXHJcbiAgICAgICAgICAgICAgICAuLi5zdWl0ZURlZnMsXHJcbiAgICAgICAgICAgICAgICAuLi5sb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIoc3VpdGVzRm9sZGVyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtZXJnZSBzdWl0ZXMgY29uZmlndXJlZCBpbiB0aGUgcHJvamVjdCBjb25maWcgZmlsZSBhbmQgdGhvc2UgZm91bmQgaW4gJ3N1aXRlcycgZm9sZGVyXHJcbiAgICAgICAgc3VpdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoc3VpdGVEZWZzLm1hcChhc3luYyAoc3VpdGVEZWYpID0+IGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uKHN1aXRlRGVmLCBjb25maWcpKSk7XHJcbiAgICB9XHJcbiAgICAvLyBmaWx0ZXIgb3V0IHN1aXRlcyBpZiAnLS1zdWl0ZXMnIGNvbW1hbmQgbGluZSBhcmd1bWVudCB3YXMgc3BlY2lmaWVkXHJcbiAgICBpZiAoYXJndi5zdWl0ZXMgJiYgdHlwZW9mIGFyZ3Yuc3VpdGVzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkU3VpdGVOYW1lcyA9IGFyZ3Yuc3VpdGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgc3VpdGVzID0gc3VpdGVzLmZpbHRlcih4ID0+IHNlbGVjdGVkU3VpdGVOYW1lcy5pbmNsdWRlcyh4Lm5hbWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdWl0ZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIoZm9sZGVyUGF0aCkge1xyXG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhmb2xkZXJQYXRoKTtcclxuICAgIGxldCBzdWl0ZURlZnMgPSBbXTtcclxuICAgIGZvckVhY2goZmlsZXMsIGZpbGUgPT4ge1xyXG4gICAgICAgIGlmIChwYXRoLmV4dG5hbWUoZmlsZSkgPT09ICcuanNvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZm9sZGVyUGF0aCwgZmlsZSk7XHJcbiAgICAgICAgICAgIHN1aXRlRGVmcy5wdXNoKG1vZHVsZVJlcXVpcmUoZnVsbFBhdGgpKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzdWl0ZURlZnM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlT2JqZWN0RmlsZVBhdGgoY29uZmlnLCBhcmd2ID0ge30pIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGNvbmZpZy50YXJnZXQgfHwge307XHJcbiAgICBjb25zdCBwb0ZpbGVOYW1lID0gYXJndi5wbyB8fCBgJHtPWFlHRU5fUEFHRV9PQkpFQ1RfRklMRV9OQU1FfS5qc2A7XHJcbiAgICBjb25zdCBjd2QgPSB0YXJnZXQuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBsZXQgcG9GaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShjd2QsIHBvRmlsZU5hbWUpO1xyXG4gICAgcG9GaWxlUGF0aCA9IGZzLmV4aXN0c1N5bmMocG9GaWxlUGF0aCkgPyBwb0ZpbGVQYXRoIDogbnVsbDtcclxuXHJcbiAgICBpZiAocG9GaWxlUGF0aCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIG1vZHVsZVJlcXVpcmUocG9GaWxlUGF0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwb0ZpbGVQYXRoO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke3BvRmlsZVBhdGh9LiBSZWFzb246ICR7ZS5tZXNzYWdlfSAke2Uuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVudmlyb25tZW50VmFyaWFibGVzKGNvbmZpZywgYXJndikge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gY29uZmlnLnRhcmdldCB8fCB7fTtcclxuICAgIGNvbnN0IGVudk5hbWUgPSBhcmd2LmVudiB8fCBjb25maWcuZW52aXJvbm1lbnQgfHwgJ2RlZmF1bHQnO1xyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgY29uc3QgZGVmYXVsdEVudkZpbGUgPSBwYXRoLmpvaW4oY3dkLCBgJHtPWFlHRU5fRU5WX0ZJTEVfTkFNRX0uanNgKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZmF1bHRFbnZGaWxlKSkge1xyXG4gICAgICAgIGNvbnN0IGVudiA9IG1vZHVsZVJlcXVpcmUoZGVmYXVsdEVudkZpbGUpO1xyXG4gICAgICAgIGlmIChlbnYgJiYgdHlwZW9mIGVudiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVudiwgZW52TmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVudltlbnZOYW1lXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB0cnkgdG8gcmVzb2x2ZSBhIGRlZGljYXRlZCBlbnZpcm9ubWVudCBmaWxlIGluICdlbnYnIHN1YiBmb2xkZXJcclxuICAgIGNvbnN0IGRlZGljYXRlZEVudkZpbGVKcyA9IHBhdGguam9pbihjd2QsICdlbnYnLCBgJHtlbnZOYW1lfS5qc2ApO1xyXG4gICAgY29uc3QgZGVkaWNhdGVkRW52RmlsZUpzb24gPSBwYXRoLmpvaW4oY3dkLCAnZW52JywgYCR7ZW52TmFtZX0uanNvbmApO1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVkaWNhdGVkRW52RmlsZUpzKSkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZGljYXRlZEVudkZpbGVKcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmcy5leGlzdHNTeW5jKGRlZGljYXRlZEVudkZpbGVKc29uKSkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZGljYXRlZEVudkZpbGVKc29uKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudmlyb25tZW50cyh0YXJnZXQpIHtcclxuICAgIGxldCB0YXJnZXRDd2QgPSBudWxsO1xyXG5cclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmN3ZCkge1xyXG4gICAgICAgIHRhcmdldEN3ZCA9IHRhcmdldC5jd2Q7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0Q3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBkZWZhdWx0RW52RmlsZSA9IHBhdGguam9pbihjd2QsIGAke09YWUdFTl9FTlZfRklMRV9OQU1FfS5qc2ApO1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudkZpbGUpKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZVJlcXVpcmUoZGVmYXVsdEVudkZpbGUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke2RlZmF1bHRFbnZGaWxlfS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlndXJhdGlvbnModGFyZ2V0LCBhcmd2KSB7XHJcbiAgICAvLyBwcm9jZXNzIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIGxldCB0YXJnZXRDd2QgPSBudWxsO1xyXG5cclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmN3ZCkge1xyXG4gICAgICAgIHRhcmdldEN3ZCA9IHRhcmdldC5jd2Q7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgREVGQVVMVF9PUFRTID0ge1xyXG4gICAgICAgIGN3ZDogdGFyZ2V0ID8gKHRhcmdldEN3ZCB8fCBwcm9jZXNzLmN3ZCgpKSA6IHByb2Nlc3MuY3dkKCksXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdjaHJvbWUnLFxyXG4gICAgICAgIHNlbGVuaXVtVXJsIDogJ2h0dHA6Ly9sb2NhbGhvc3Q6NDQ0NC93ZC9odWInLFxyXG4gICAgICAgIGFwcGl1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJyxcclxuICAgICAgICByZW9wZW5TZXNzaW9uOiBmYWxzZSxcclxuICAgICAgICByZVJ1bk9uRmFpbGVkOiBmYWxzZSxcclxuICAgICAgICBpdGVyYXRpb25zIDogMSxcclxuICAgICAgICBkZWJ1Z1BvcnQ6IG51bGwsXHJcbiAgICAgICAgZGVsYXk6IG51bGwsXHJcbiAgICAgICAgY29sbGVjdERldmljZUxvZ3M6IGZhbHNlLFxyXG4gICAgICAgIGNvbGxlY3RBcHBpdW1Mb2dzOiBmYWxzZSxcclxuICAgICAgICBjb2xsZWN0QnJvd3NlckxvZ3M6IGZhbHNlLFxyXG4gICAgICAgIHJlcG9ydGluZzoge1xyXG4gICAgICAgICAgICByZXBvcnRlcnM6IFsnaHRtbCddXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYXJhbWV0ZXJzIDoge1xyXG4gICAgICAgICAgICBmaWxlOiBudWxsLFxyXG4gICAgICAgICAgICBtb2RlOiAnc2VxJ1xyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgLy8gcmV0cmlldmUgb3B0aW9ucyBwcm92aWRlZCB2aWEgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG4gICAgY29uc3QgY21kT3B0cyA9IGdldENvbW1hbmRMaW5lT3B0aW9ucyhhcmd2KTtcclxuICAgIC8vIGlmIHRoZSB0YXJnZXQgaXMgb3h5Z2VuIGNvbmZpZyBmaWxlLCBtZXJnZSBpdHMgY29udGVudCB3aXRoIHRoZSBkZWZhdWx0IG9wdGlvbnNcclxuICAgIGxldCBwcm9qQ29uZmlnT3B0cyA9IHt9O1xyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQubmFtZSA9PT0gT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgJiYgKHRhcmdldC5leHRlbnNpb24gPT09ICcuanMnIHx8IHRhcmdldC5leHRlbnNpb24gPT09ICcuanNvbicpKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMgPSBtb2R1bGVSZXF1aXJlKHRhcmdldC5wYXRoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHt0YXJnZXQucGF0aH0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGVudnMgPSBnZXRFbnZpcm9ubWVudHModGFyZ2V0KTtcclxuXHJcbiAgICBpZiAocHJvakNvbmZpZ09wdHMuZW52cykge1xyXG4gICAgICAgIC8vIG1lcmdlIGV4dGVybmFsIGVudmlyb25tZW50cyBkZWZpbml0aW9uIHdpdGggdGhlIG9uZSBpbiB0aGUgY29uZmlnIGZpbGVcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cy5lbnZzID0geyAuLi5wcm9qQ29uZmlnT3B0cy5lbnZzLCAuLi5lbnZzIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IHsgLi4ucHJvakNvbmZpZ09wdHMsIGVudnM6IGVudnMgfTtcclxuICAgIH1cclxuICAgIC8vIGRldGVybWluZSB0ZXN0IG5hbWVcclxuICAgIGxldCBuYW1lID0gY21kT3B0cy5uYW1lIHx8IHByb2pDb25maWdPcHRzLm5hbWUgfHwgbnVsbDtcclxuICAgIGlmICghbmFtZSAmJiB0YXJnZXQpIHtcclxuICAgICAgICBuYW1lID0gdGFyZ2V0Lm5hbWUgIT09IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FID8gdGFyZ2V0Lm5hbWUgOiB0YXJnZXQuYmFzZU5hbWU7XHJcbiAgICB9XHJcbiAgICAvLyBtZXJnZSBvcHRpb25zIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIG9yZGVyICh0aGUgbGFzdCBvbmUgb3ZlcnJpZGVzIHRoZSBwcmV2aW91cyBvbmUpOlxyXG4gICAgLy8gZGVmYXVsdCBvcHRpb25zLCBwcm9qZWN0IGNvbmZpZyBmaWxlLCBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbiAgICByZXR1cm4geyAuLi5ERUZBVUxUX09QVFMsIC4uLnByb2pDb25maWdPcHRzLCAuLi5jbWRPcHRzLCBuYW1lOiBuYW1lIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21tYW5kTGluZU9wdGlvbnMoYXJndikge1xyXG4gICAgY29uc3Qgb3B0cyA9IHtcclxuICAgICAgICAvLyBzd2l0Y2g6IC0tbmFtZSBcclxuICAgICAgICBuYW1lOiBhcmd2Lm5hbWUgfHwgbnVsbCxcclxuICAgICAgICAvLyBzd2l0Y2g6IC1iIG9yIC0tYnJvd3NlclxyXG4gICAgICAgIGJyb3dzZXJOYW1lIDogYXJndi5iIHx8IGFyZ3YuYnJvd3NlciB8fCBudWxsLFxyXG4gICAgICAgIHNlbGVuaXVtVXJsIDogYXJndi5zIHx8IGFyZ3Yuc2VydmVyIHx8IG51bGwsXHJcbiAgICAgICAgYXBwaXVtVXJsIDogYXJndi5zIHx8IGFyZ3Yuc2VydmVyIHx8IG51bGwsXHJcbiAgICAgICAgcmVvcGVuU2Vzc2lvbjogYXJndi5yZW9wZW4gPyBhcmd2LnJlb3BlbiA9PT0gJ3RydWUnIDogbnVsbCxcclxuICAgICAgICBpdGVyYXRpb25zIDogYXJndi5pID8gcGFyc2VJbnQoYXJndi5pKSA6IChhcmd2Lml0ZXIgPyBwYXJzZUludChhcmd2Lml0ZXIpIDogbnVsbCksXHJcbiAgICAgICAgZGVidWdQb3J0OiBhcmd2LmRiZ3BvcnQgfHwgbnVsbCxcclxuICAgICAgICBkZWxheTogYXJndi5kIHx8IGFyZ3YuZGVsYXkgfHwgbnVsbCxcclxuICAgIH07XHJcbiAgICAvLyBzd2l0Y2g6IC0tcmYgZmxhZ1xyXG4gICAgaWYgKGFyZ3YucmYgJiYgdHlwZW9mIGFyZ3YucmYgPT09ICdzdHJpbmcnICYmIGFyZ3YucmYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydEZvcm1hdHMgPSBhcmd2LnJmLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5yZXBvcnRpbmcgPSB7XHJcbiAgICAgICAgICAgIHJlcG9ydGVyczogcmVwb3J0Rm9ybWF0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gc3dpdGNoOiAtLXJvIC0gc2V0IHJlcG9ydGVyIG91dHB1dCBkaXJlY3RvcnkgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgICAgICAvLyBOT1RFOiAtLXJvIHN3aXRjaCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIC0tcmZcclxuICAgICAgICBpZiAoYXJndi5ybyAmJiB0eXBlb2YgYXJndi5ybyA9PT0gJ3N0cmluZycgJiYgYXJndi5yby5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG9wdHMucmVwb3J0aW5nLm91dHB1dERpciA9IGFyZ3Yucm87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gb3B0aW9uOiAtcCBvciAtLXBhcmFtIGFuZCAtLXBtXHJcbiAgICBpZiAoYXJndi5wIHx8IGFyZ3YucGFyYW0pIHtcclxuICAgICAgICBvcHRzLnBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgIGZpbGU6IGFyZ3YucCB8fCBhcmd2LnBhcmFtIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG1vZGU6IGFyZ3YucG0gfHwgJ3NlcSdcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN3aXRjaDogLS1zcGVjcyAtIHNldCBzcGVjcyBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgaWYgKGFyZ3Yuc3BlY3MgJiYgdHlwZW9mIGFyZ3Yuc3BlY3MgPT09ICdzdHJpbmcnICYmIGFyZ3Yuc3BlY3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHNwZWNzID0gYXJndi5zcGVjcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIG9wdHMuc3BlY3MgPSBzcGVjcztcclxuICAgIH1cclxuICAgIC8vIHN3aXRjaDogLS1tb2R1bGVzIC0gc2V0IGEgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGxvYWRlZCwgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgIGlmIChhcmd2Lm1vZHVsZXMgJiYgdHlwZW9mIGFyZ3YubW9kdWxlcyA9PT0gJ3N0cmluZycgJiYgYXJndi5tb2R1bGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBtb2R1bGVzID0gYXJndi5tb2R1bGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5tb2R1bGVzID0gbW9kdWxlcztcclxuICAgIH1cclxuICAgIC8vIHJlbW92ZSBhbnkgcHJvcGVydHkgd2l0aCBudWxsIHZhbHVlIChzbyBpdCB3b24ndCBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBpZiBpdCdzIG51bGwpXHJcbiAgICByZXR1cm4gZGVsZXRlTnVsbFByb3BlcnRpZXMob3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlbGV0ZU51bGxQcm9wZXJ0aWVzKG9iaikge1xyXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsb25lID0geyAuLi5vYmogfTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG4gICAgZm9yRWFjaCAoa2V5cywga2V5ID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSAmJiAob2JqW2tleV0gPT0gbnVsbCB8fCBvYmpba2V5XSA9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBjbG9uZVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1RhcmdldFBhdGgodGFyZ2V0UGF0aCkge1xyXG4gICAgLy8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaWYgdXNlciBoYXMgbm90IHByb3ZpZGVkIHBhdGhcclxuICAgIGlmICh0eXBlb2YodGFyZ2V0UGF0aCkgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGFyZ2V0UGF0aCA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgICB9XHJcbiAgICAvLyB1c2VyJ3MgcGF0aCBtaWdodCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAtIG1ha2Ugc3VyZSB0aGUgcmVsYXRpdmUgcGF0aCB3aWxsIHdvcmtcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRhcmdldFBhdGggPSBveHV0aWwucmVzb2x2ZVBhdGgodGFyZ2V0UGF0aCwgcHJvY2Vzcy5jd2QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRhcmdldFBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhdHMgPSBmcy5sc3RhdFN5bmModGFyZ2V0UGF0aCk7XHJcbiAgICBjb25zdCBpc0RpcmVjdG9yID0gc3RhdHMuaXNEaXJlY3RvcnkoKTtcclxuICAgIGlmIChpc0RpcmVjdG9yKSB7XHJcbiAgICAgICAgLy8gYXBwZW5kIG94eWdlbiBjb25maWcgZmlsZSBuYW1lIHRvIHRoZSBkaXJlY3RvcnksIGlmIG5vIHRlc3QgY2FzZSBmaWxlIHdhcyBwcm92aWRlZFxyXG4gICAgICAgIGxldCBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbih0YXJnZXRQYXRoLCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSArICcuanMnKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKHRhcmdldFBhdGgsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJyk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRhcmdldFBhdGggPSBjb25maWdGaWxlUGF0aDtcclxuICAgIH1cclxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXRQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvLyBwYXRoIHRvIHRoZSBjb25maWcgb3IgLmpzIGZpbGVcclxuICAgICAgICBwYXRoOiB0YXJnZXRQYXRoLFxyXG4gICAgICAgIC8vIHdvcmtpbmcgZGlyZWN0b3J5XHJcbiAgICAgICAgY3dkOiBwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCksXHJcbiAgICAgICAgLy8gbmFtZSBvZiB0aGUgdGFyZ2V0IGZpbGUgd2l0aG91dCBleHRlbnNpb25cclxuICAgICAgICBuYW1lOiBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIG5hbWUgaW5jbHVkaW5nIGV4dGVuc2lvblxyXG4gICAgICAgIGZ1bGxOYW1lOiBwYXRoLmJhc2VuYW1lKHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIHBhcmVudCBmb2xkZXIncyBuYW1lXHJcbiAgICAgICAgYmFzZU5hbWU6IHBhdGguYmFzZW5hbWUocGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpKSxcclxuICAgICAgICAvLyB0YXJnZXQgZmlsZSBleHRlbnNpb25cclxuICAgICAgICBleHRlbnNpb246IHBhdGguZXh0bmFtZSh0YXJnZXRQYXRoKVxyXG4gICAgfTtcclxufSJdfQ==
|
package/build/lib/cli.js
CHANGED
|
@@ -7,6 +7,8 @@ var cliutil = _interopRequireWildcard(require("./cli-util"));
|
|
|
7
7
|
|
|
8
8
|
var _launcher = _interopRequireDefault(require("./launcher"));
|
|
9
9
|
|
|
10
|
+
var _parallelLauncher = _interopRequireDefault(require("./parallel-launcher"));
|
|
11
|
+
|
|
10
12
|
var _ReportAggregator = _interopRequireDefault(require("../reporter/ReportAggregator"));
|
|
11
13
|
|
|
12
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -79,7 +81,7 @@ async function prepareAndStartTheTest(options) {
|
|
|
79
81
|
|
|
80
82
|
try {
|
|
81
83
|
const reporter = new _ReportAggregator.default(options);
|
|
82
|
-
const launcher = new _launcher.default(options, reporter);
|
|
84
|
+
const launcher = options.parallel ? new _parallelLauncher.default(options, reporter) : new _launcher.default(options, reporter);
|
|
83
85
|
console.log('Test started...');
|
|
84
86
|
await launcher.run(capsArr);
|
|
85
87
|
reporter.generateReports();
|
|
@@ -132,4 +134,4 @@ Web test options:
|
|
|
132
134
|
Mobile test options:
|
|
133
135
|
-s, --server=SERVER_URL Appium server URL. Default is http://localhost:4723/wd/hub.`);
|
|
134
136
|
}
|
|
135
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLmpzIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJvbiIsImhhbmRsZVNpZ0ludCIsImVycm9yIiwiY29uc29sZSIsImFyZ3YiLCJyZXF1aXJlIiwic2xpY2UiLCJ2IiwidmVyc2lvbiIsImxvZyIsImV4aXQiLCJfIiwiaGVscCIsInByaW50VXNhZ2UiLCJkIiwiZGVsYXkiLCJwYXJzZUludCIsInRhcmdldEZpbGUiLCJjbGl1dGlsIiwicHJvY2Vzc1RhcmdldFBhdGgiLCJjb25maWciLCJnZXRDb25maWd1cmF0aW9ucyIsImdlbmVyYXRlVGVzdE9wdGlvbnMiLCJ0aGVuIiwib3B0aW9ucyIsInByZXBhcmVBbmRTdGFydFRoZVRlc3QiLCJjb2RlIiwiZSIsImZyYW1ld29yayIsInN1aXRlcyIsIkFycmF5IiwiaXNBcnJheSIsIkVycm9yIiwiY2Fwc0FyciIsImNhcGFiaWxpdGllcyIsImV4aXRDb2RlIiwicmVwb3J0ZXIiLCJSZXBvcnRBZ2dyZWdhdG9yIiwibGF1bmNoZXIiLCJMYXVuY2hlciIsInJ1biIsImdlbmVyYXRlUmVwb3J0cyIsImdldEV4aXRDb2RlIiwidHJhY2UiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFTQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQUEsT0FBTyxDQUFDQyxFQUFSLENBQVcsUUFBWCxFQUFxQkMsWUFBckI7QUFDQUYsT0FBTyxDQUFDQyxFQUFSLENBQVcsbUJBQVgsRUFBZ0NFLEtBQUssSUFBSTtBQUNyQ0MsRUFBQUEsT0FBTyxDQUFDRCxLQUFSLENBQWMsbUJBQWQsRUFBbUNBLEtBQW5DO0FBQ0gsQ0FGRDtBQUlBSCxPQUFPLENBQUNDLEVBQVIsQ0FBVyxvQkFBWCxFQUFpQ0UsS0FBSyxJQUFJO0FBQ3RDQyxFQUFBQSxPQUFPLENBQUNELEtBQVIsQ0FBYyxvQkFBZCxFQUFvQ0EsS0FBcEM7QUFDSCxDQUZEOztBQUtBLE1BQU1FLElBQUksR0FBR0MsT0FBTyxDQUFDLFVBQUQs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QUFFQSxNQUFJO0FBQ0EsVUFBTUMsUUFBUSxHQUFHLElBQUlDLHlCQUFKLENBQXFCYixPQUFyQixDQUFqQjtBQUNBLFVBQU1jLFFBQVEsR0FBRyxJQUFJQyxpQkFBSixDQUFhZixPQUFiLEVBQXNCWSxRQUF0QixDQUFqQjtBQUNBakMsSUFBQUEsT0FBTyxDQUFDTSxHQUFSLENBQVksaUJBQVo7QUFDQSxVQUFNNkIsUUFBUSxDQUFDRSxHQUFULENBQWFQLE9BQWIsQ0FBTjtBQUNBRyxJQUFBQSxRQUFRLENBQUNLLGVBQVQ7QUFDQU4sSUFBQUEsUUFBUSxHQUFHQyxRQUFRLENBQUNNLFdBQVQsRUFBWDtBQUNILEdBUEQsQ0FRQSxPQUFPZixDQUFQLEVBQVU7QUFDTnhCLElBQUFBLE9BQU8sQ0FBQ0QsS0FBUixDQUFjLGFBQWQsRUFBNkJ5QixDQUE3QjtBQUNBeEIsSUFBQUEsT0FBTyxDQUFDd0MsS0FBUjtBQUNBNUMsSUFBQUEsT0FBTyxDQUFDVyxJQUFSLENBQWEsQ0FBYjtBQUNIOztBQUNELFNBQU95QixRQUFQO0FBQ0g7O0FBRUQsU0FBU2xDLFlBQVQsR0FBd0I7QUFFcEIyQyxFQUFBQSxVQUFVLENBQUMsTUFBTTdDLE9BQU8sQ0FBQ1csSUFBUixDQUFhLENBQWIsQ0FBUCxFQUF3QixJQUF4QixDQUFWO0FBQ0g7O0FBRUQsU0FBU0csVUFBVCxHQUFzQjtBQUNsQlYsRUFBQUEsT0FBTyxDQUFDTSxHQUFSLENBQWE7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5RkFoQ0k7QUFpQ0giLCJzb3VyY2VzQ29udGVudCI6WyIjISAvdXNyL2Jpbi9lbnYgbm9kZVxyXG4vKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuaW1wb3J0ICogYXMgY2xpdXRpbCBmcm9tICcuL2NsaS11dGlsJztcclxuaW1wb3J0IExhdW5jaGVyIGZyb20gJy4vbGF1bmNoZXInO1xyXG5pbXBvcnQgUmVwb3J0QWdncmVnYXRvciBmcm9tICcuLi9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yJztcclxuXHJcbnByb2Nlc3Mub24oJ1NJR0lOVCcsIGhhbmRsZVNpZ0ludCk7XHJcbnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZXJyb3IgPT4ge1xyXG4gICAgY29uc29sZS5lcnJvcigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnJvcik7XHJcbn0pO1xyXG5cclxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgZXJyb3IgPT4ge1xyXG4gICAgY29uc29sZS5lcnJvcigndW5oYW5kbGVkUmVqZWN0aW9uJywgZXJyb3IpO1xyXG59KTtcclxuXHJcbi8vIHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuY29uc3QgYXJndiA9IHJlcXVpcmUoJ21pbmltaXN0JykocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKTtcclxuXHJcbmlmIChhcmd2LnYgfHwgYXJndi52ZXJzaW9uKSB7XHJcbiAgICBjb25zb2xlLmxvZyhyZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uKTtcclxuICAgIHByb2Nlc3MuZXhpdCgwKTtcclxufSBlbHNlIGlmICh0eXBlb2YoYXJndi5fWzBdKSA9PT0gJ3VuZGVmaW5lZCcgfHwgYXJndi5oZWxwKSB7XHJcbiAgICBwcmludFVzYWdlKCk7XHJcbiAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbn1cclxuXHJcbmlmIChhcmd2LmQgfHwgYXJndi5kZWxheSkge1xyXG4gICAgY29uc3QgZGVsYXkgPSBhcmd2LmQgfHwgYXJndi5kZWxheTtcclxuICAgIGlmICghKHBhcnNlSW50KGRlbGF5KSA+IDApKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgYXJndW1lbnQgLSAnZGVsYXknIHNob3VsZCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuXCIpO1xyXG4gICAgICAgIHByaW50VXNhZ2UoKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IHRhcmdldEZpbGUgPSBjbGl1dGlsLnByb2Nlc3NUYXJnZXRQYXRoKGFyZ3YuX1swXSk7XHJcbmlmICh0YXJnZXRGaWxlID09IG51bGwpIHtcclxuICAgIHByaW50VXNhZ2UoKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gY2xpdXRpbC5nZXRDb25maWd1cmF0aW9ucyh0YXJnZXRGaWxlLCBhcmd2KTtcclxuXHJcbmNsaXV0aWwuZ2VuZXJhdGVUZXN0T3B0aW9ucyhjb25maWcsIGFyZ3YpLnRoZW4oXHJcbiAgICAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHByZXBhcmVBbmRTdGFydFRoZVRlc3Qob3B0aW9ucykudGhlbihcclxuICAgICAgICAgICAgKGNvZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEb25lIScpO1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGVzdCBmYWlsZWQ6ICcsIGUpO1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0sXHJcbiAgICAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Rlc3QgZmFpbGVkIG9uIGdlbmVyYXRlIHN0YXRlOiAnLCBlKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICB9XHJcbik7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kU3RhcnRUaGVUZXN0KG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zLmZyYW1ld29yayA9PT0gJ294eWdlbicgJiYgKCFvcHRpb25zLnN1aXRlcyB8fCAhQXJyYXkuaXNBcnJheShvcHRpb25zLnN1aXRlcykpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdGhlIHRlc3QgLSBubyBzdWl0ZXMgYXJlIHNwZWNpZmllZC4nKTtcclxuICAgIH1cclxuICAgIGxldCBjYXBzQXJyID0gb3B0aW9ucy5jYXBhYmlsaXRpZXMgfHwgW3t9XTtcclxuICAgIC8vIGNoZWNrIGlmIGNhcGFiaWxpdGllcyBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSBoYXNodGFibGVcclxuICAgIGlmICghKGNhcHNBcnIgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICBjYXBzQXJyID0gW2NhcHNBcnJdO1xyXG4gICAgfVxyXG4gICAgbGV0IGV4aXRDb2RlID0gMDtcclxuICAgIC8vIHN0YXJ0IGxhdW5jaGVyXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydGVyID0gbmV3IFJlcG9ydEFnZ3JlZ2F0b3Iob3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgbGF1bmNoZXIgPSBuZXcgTGF1bmNoZXIob3B0aW9ucywgcmVwb3J0ZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUZXN0IHN0YXJ0ZWQuLi4nKTtcclxuICAgICAgICBhd2FpdCBsYXVuY2hlci5ydW4oY2Fwc0Fycik7XHJcbiAgICAgICAgcmVwb3J0ZXIuZ2VuZXJhdGVSZXBvcnRzKCk7XHJcbiAgICAgICAgZXhpdENvZGUgPSByZXBvcnRlci5nZXRFeGl0Q29kZSgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCBlcnJvcicsIGUpO1xyXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXhpdENvZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZVNpZ0ludCgpIHtcclxuICAgIC8vIGRlbGF5IHByb2Nlc3MgZXhpdCB0byBsZXQgT3h5Z2VuIHRvIHByb3Blcmx5IGRpc3Bvc2VcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gcHJvY2Vzcy5leGl0KDApLCAyMDAwKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJpbnRVc2FnZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogb3h5Z2VuIFtPUFRJT05TXS4uLiBGSUxFXHJcblxyXG5GSUxFIC0gUGF0aCB0byBhIHRlc3Qgc2NyaXB0ICguanMpIG9yIGEgcHJvamVjdCBjb25maWd1cmF0aW9uICguanNvbikgZmlsZS5cclxuXHJcbkdlbmVyYWwgb3B0aW9uczpcclxuICAtZCwgLS1kZWxheT1TRUNPTkRTICAgICAgICBEZWxheSBiZXR3ZWVuIGVhY2ggY29tbWFuZCBpbiBzZWNvbmRzLlxyXG4gICAgICAtLXJmPXtodG1sfHBkZnx4bWx8ZXhjZWx8anVuaXR8anNvbn0gIFJlcG9ydHMgZmlsZSBmb3JtYXQuIERlZmF1bHQgaXMgaHRtbC5cclxuICAgICAgLS1ybz1QQVRIICAgICAgICAgICAgICBPdXRwdXQgcGF0aCBmb3IgcmVwb3J0IGZpbGUuIElmIHNwZWNpZmllZCwgdGhlIHJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgb3ZlcndyaXRlIGFueSBwcmV2aW91cyByZXBvcnRzLlxyXG4gIC1pLCAtLWl0ZXI9Q09VTlQgICAgICAgICAgIE51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHRlc3QuIERlZmF1bHQgaXMgMS5cclxuICAtcCwgLS1wYXJhbT1GSUxFICAgICAgICAgICBQYXJhbWV0ZXJzIGZpbGUuIElmIG5vdCBzcGVjaWZpZWQgYW4gYXR0ZW1wdCB3aWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSB0byBsb2FkIHBhcmFtZXRlcnMgZnJvbSBhIGZpbGUgbmFtZWQgc2FtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSB0ZXN0IHNjcmlwdCwgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGhhdmluZyBleHRlbnNpb24gLSB4bHN4LCB4bHMsIGNzdiwgb3IgdHh0LlxyXG4gICAgICAtLXBtPXtzZXF8cmFuZG9tfGFsbH0gIE9yZGVyIGluIHdoaWNoIHRvIHJlYWQgdGhlIHBhcmFtZXRlcnMgLSBzZXF1ZW50aWFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSwgYWxsLiBEZWZhdWx0IGlzIHNlcS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiAnc2VxJyBhbmQgJ3JhbmRvbScgbW9kZXMgdGVzdCB3aWxsIHJ1biBleGFjdCBudW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aW1lcyBzcGVjaWZpZWQgd2l0aCB0aGUgLWkgb3B0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluICdhbGwnIG1vZGUsIGFsbCBhdmFpbGFibGUgcGFyYW1ldGVycyB3aWxsIGJlIHJlYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW50aWFsbHkuIFRoaXMgb3B0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWkgb3B0aW9uLlxyXG4gICAgICAtLWRiZ3BvcnQ9UE9SVCAgICAgICAgIERlYnVnZ2VyIHBvcnQuXHJcbiAgICAgIC0tc3VpdGVzICAgICAgICAgICAgICAgRmlsdGVyIG91dCBzdWl0ZXMgYnkgbmFtZVxyXG4gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBpbmZvcm1hdGlvbiBhbmQgZXhpdC5cclxuICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuXHJcblxyXG5XZWIgdGVzdCBvcHRpb25zOlxyXG4gIC1iLCAtLWJyb3dzZXI9e2Nocm9tZXxpZXxzYWZhcml8ZmlyZWZveH0gIEJyb3dzZXIgbmFtZS4gRGVmYXVsdCBpcyBjaHJvbWUuXHJcbiAgLXMsIC0tc2VydmVyPVNFUlZFUl9VUkwgICAgU2VsZW5pdW0gaHViIFVSTC4gRGVmYXVsdCBpcyBodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViLlxyXG4gICAgICAtLXJlb3Blbj17dHJ1ZXxmYWxzZX0gIFJlb3BlbiBicm93c2VyIG9uIGVhY2ggaXRlcmF0aW9uLiBEZWZhdWx0IGlzIGZhbHNlLlxyXG4gICAgICBcclxuTW9iaWxlIHRlc3Qgb3B0aW9uczpcclxuICAgIC1zLCAtLXNlcnZlcj1TRVJWRVJfVVJMICBBcHBpdW0gc2VydmVyIFVSTC4gRGVmYXVsdCBpcyBodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViLmApO1xyXG59Il19
|
|
137
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLmpzIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJvbiIsImhhbmRsZVNpZ0ludCIsImVycm9yIiwiY29uc29sZSIsImFyZ3YiLCJyZXF1aXJlIiwic2xpY2UiLCJ2IiwidmVyc2lvbiIsImxvZyIsImV4aXQiLCJfIiwiaGVscCIsInByaW50VXNhZ2UiLCJkIiwiZGVsYXkiLCJwYXJzZUludCIsInRhcmdldEZpbGUiLCJjbGl1dGlsIiwicHJvY2Vzc1RhcmdldFBhdGgiLCJjb25maWciLCJnZXRDb25maWd1cmF0aW9ucyIsImdlbmVyYXRlVGVzdE9wdGlvbnMiLCJ0aGVuIiwib3B0aW9ucyIsInByZXBhcmVBbmRTdGFydFRoZVRlc3QiLCJjb2RlIiwiZSIsImZyYW1ld29yayIsInN1aXRlcyIsIkFycmF5IiwiaXNBcnJheSIsIkVycm9yIiwiY2Fwc0FyciIsImNhcGFiaWxpdGllcyIsImV4aXRDb2RlIiwicmVwb3J0ZXIiLCJSZXBvcnRBZ2dyZWdhdG9yIiwibGF1bmNoZXIiLCJwYXJhbGxlbCIsIlBhcmFsbGVsTGF1bmNoZXIiLCJMYXVuY2hlciIsInJ1biIsImdlbmVyYXRlUmVwb3J0cyIsImdldEV4aXRDb2RlIiwidHJhY2UiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFTQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQUEsT0FBTyxDQUFDQyxFQUFSLENBQVcsUUFBWCxFQUFxQkMsWUFBckI7QUFDQUYsT0FBTyxDQUFDQyxFQUFSLENBQVcsbUJBQVgsRUFBZ0NFLEtBQUssSUFBSTtBQUNyQ0MsRUFBQUEsT0FBTyxDQUFDRCxLQUFSLENBQWMsbUJBQWQsRUFBbUNBLEtBQW5DO0FBQ0gsQ0FGRDtBQUlBSCxPQUFPLENBQUNDLEVBQVIsQ0FBVyxvQkFBWCxFQUFpQ0UsS0FBSyxJQUFJO0FBQ3RDQyxFQUFBQSxPQUFPLENBQUNELEtBQVIsQ0FBYyxvQkFBZCxFQUFvQ0EsS0FBcEM7QUFDSCxDQUZEOztB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eUZBaENJO0FBaUNIIiwic291cmNlc0NvbnRlbnQiOlsiIyEgL3Vzci9iaW4vZW52IG5vZGVcclxuLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcbmltcG9ydCAqIGFzIGNsaXV0aWwgZnJvbSAnLi9jbGktdXRpbCc7XHJcbmltcG9ydCBMYXVuY2hlciBmcm9tICcuL2xhdW5jaGVyJztcclxuaW1wb3J0IFBhcmFsbGVsTGF1bmNoZXIgZnJvbSAnLi9wYXJhbGxlbC1sYXVuY2hlcic7XHJcbmltcG9ydCBSZXBvcnRBZ2dyZWdhdG9yIGZyb20gJy4uL3JlcG9ydGVyL1JlcG9ydEFnZ3JlZ2F0b3InO1xyXG5cclxucHJvY2Vzcy5vbignU0lHSU5UJywgaGFuZGxlU2lnSW50KTtcclxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmNhdWdodEV4Y2VwdGlvbicsIGVycm9yKTtcclxufSk7XHJcblxyXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvcik7XHJcbn0pO1xyXG5cclxuLy8gcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG5jb25zdCBhcmd2ID0gcmVxdWlyZSgnbWluaW1pc3QnKShwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpO1xyXG5cclxuaWYgKGFyZ3YudiB8fCBhcmd2LnZlcnNpb24pIHtcclxuICAgIGNvbnNvbGUubG9nKHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24pO1xyXG4gICAgcHJvY2Vzcy5leGl0KDApO1xyXG59IGVsc2UgaWYgKHR5cGVvZihhcmd2Ll9bMF0pID09PSAndW5kZWZpbmVkJyB8fCBhcmd2LmhlbHApIHtcclxuICAgIHByaW50VXNhZ2UoKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuaWYgKGFyZ3YuZCB8fCBhcmd2LmRlbGF5KSB7XHJcbiAgICBjb25zdCBkZWxheSA9IGFyZ3YuZCB8fCBhcmd2LmRlbGF5O1xyXG4gICAgaWYgKCEocGFyc2VJbnQoZGVsYXkpID4gMCkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBhcmd1bWVudCAtICdkZWxheScgc2hvdWxkIGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5cIik7XHJcbiAgICAgICAgcHJpbnRVc2FnZSgpO1xyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgdGFyZ2V0RmlsZSA9IGNsaXV0aWwucHJvY2Vzc1RhcmdldFBhdGgoYXJndi5fWzBdKTtcclxuaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkge1xyXG4gICAgcHJpbnRVc2FnZSgpO1xyXG4gICAgcHJvY2Vzcy5leGl0KDEpO1xyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSBjbGl1dGlsLmdldENvbmZpZ3VyYXRpb25zKHRhcmdldEZpbGUsIGFyZ3YpO1xyXG5cclxuY2xpdXRpbC5nZW5lcmF0ZVRlc3RPcHRpb25zKGNvbmZpZywgYXJndikudGhlbihcclxuICAgIChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgcHJlcGFyZUFuZFN0YXJ0VGhlVGVzdChvcHRpb25zKS50aGVuKFxyXG4gICAgICAgICAgICAoY29kZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RvbmUhJyk7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUZXN0IGZhaWxlZDogJywgZSk7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfSxcclxuICAgIChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGVzdCBmYWlsZWQgb24gZ2VuZXJhdGUgc3RhdGU6ICcsIGUpO1xyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgIH1cclxuKTtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVBbmRTdGFydFRoZVRlc3Qob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMuZnJhbWV3b3JrID09PSAnb3h5Z2VuJyAmJiAoIW9wdGlvbnMuc3VpdGVzIHx8ICFBcnJheS5pc0FycmF5KG9wdGlvbnMuc3VpdGVzKSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzdGFydCB0aGUgdGVzdCAtIG5vIHN1aXRlcyBhcmUgc3BlY2lmaWVkLicpO1xyXG4gICAgfVxyXG4gICAgbGV0IGNhcHNBcnIgPSBvcHRpb25zLmNhcGFiaWxpdGllcyB8fCBbe31dO1xyXG4gICAgLy8gY2hlY2sgaWYgY2FwYWJpbGl0aWVzIG9iamVjdCBpcyBhbiBhcnJheSBvciBhIGhhc2h0YWJsZVxyXG4gICAgaWYgKCEoY2Fwc0FyciBpbnN0YW5jZW9mIEFycmF5KSkge1xyXG4gICAgICAgIGNhcHNBcnIgPSBbY2Fwc0Fycl07XHJcbiAgICB9XHJcbiAgICBsZXQgZXhpdENvZGUgPSAwO1xyXG4gICAgLy8gc3RhcnQgbGF1bmNoZXJcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0QWdncmVnYXRvcihvcHRpb25zKTtcclxuICAgICAgICBjb25zdCBsYXVuY2hlciA9IG9wdGlvbnMucGFyYWxsZWwgPyBuZXcgUGFyYWxsZWxMYXVuY2hlcihvcHRpb25zLCByZXBvcnRlcikgOiBuZXcgTGF1bmNoZXIob3B0aW9ucywgcmVwb3J0ZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUZXN0IHN0YXJ0ZWQuLi4nKTtcclxuICAgICAgICBhd2FpdCBsYXVuY2hlci5ydW4oY2Fwc0Fycik7XHJcbiAgICAgICAgcmVwb3J0ZXIuZ2VuZXJhdGVSZXBvcnRzKCk7XHJcbiAgICAgICAgZXhpdENvZGUgPSByZXBvcnRlci5nZXRFeGl0Q29kZSgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCBlcnJvcicsIGUpO1xyXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXhpdENvZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZVNpZ0ludCgpIHtcclxuICAgIC8vIGRlbGF5IHByb2Nlc3MgZXhpdCB0byBsZXQgT3h5Z2VuIHRvIHByb3Blcmx5IGRpc3Bvc2VcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gcHJvY2Vzcy5leGl0KDApLCAyMDAwKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJpbnRVc2FnZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogb3h5Z2VuIFtPUFRJT05TXS4uLiBGSUxFXHJcblxyXG5GSUxFIC0gUGF0aCB0byBhIHRlc3Qgc2NyaXB0ICguanMpIG9yIGEgcHJvamVjdCBjb25maWd1cmF0aW9uICguanNvbikgZmlsZS5cclxuXHJcbkdlbmVyYWwgb3B0aW9uczpcclxuICAtZCwgLS1kZWxheT1TRUNPTkRTICAgICAgICBEZWxheSBiZXR3ZWVuIGVhY2ggY29tbWFuZCBpbiBzZWNvbmRzLlxyXG4gICAgICAtLXJmPXtodG1sfHBkZnx4bWx8ZXhjZWx8anVuaXR8anNvbn0gIFJlcG9ydHMgZmlsZSBmb3JtYXQuIERlZmF1bHQgaXMgaHRtbC5cclxuICAgICAgLS1ybz1QQVRIICAgICAgICAgICAgICBPdXRwdXQgcGF0aCBmb3IgcmVwb3J0IGZpbGUuIElmIHNwZWNpZmllZCwgdGhlIHJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgb3ZlcndyaXRlIGFueSBwcmV2aW91cyByZXBvcnRzLlxyXG4gIC1pLCAtLWl0ZXI9Q09VTlQgICAgICAgICAgIE51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHRlc3QuIERlZmF1bHQgaXMgMS5cclxuICAtcCwgLS1wYXJhbT1GSUxFICAgICAgICAgICBQYXJhbWV0ZXJzIGZpbGUuIElmIG5vdCBzcGVjaWZpZWQgYW4gYXR0ZW1wdCB3aWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSB0byBsb2FkIHBhcmFtZXRlcnMgZnJvbSBhIGZpbGUgbmFtZWQgc2FtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSB0ZXN0IHNjcmlwdCwgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGhhdmluZyBleHRlbnNpb24gLSB4bHN4LCB4bHMsIGNzdiwgb3IgdHh0LlxyXG4gICAgICAtLXBtPXtzZXF8cmFuZG9tfGFsbH0gIE9yZGVyIGluIHdoaWNoIHRvIHJlYWQgdGhlIHBhcmFtZXRlcnMgLSBzZXF1ZW50aWFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSwgYWxsLiBEZWZhdWx0IGlzIHNlcS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiAnc2VxJyBhbmQgJ3JhbmRvbScgbW9kZXMgdGVzdCB3aWxsIHJ1biBleGFjdCBudW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aW1lcyBzcGVjaWZpZWQgd2l0aCB0aGUgLWkgb3B0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluICdhbGwnIG1vZGUsIGFsbCBhdmFpbGFibGUgcGFyYW1ldGVycyB3aWxsIGJlIHJlYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW50aWFsbHkuIFRoaXMgb3B0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWkgb3B0aW9uLlxyXG4gICAgICAtLWRiZ3BvcnQ9UE9SVCAgICAgICAgIERlYnVnZ2VyIHBvcnQuXHJcbiAgICAgIC0tc3VpdGVzICAgICAgICAgICAgICAgRmlsdGVyIG91dCBzdWl0ZXMgYnkgbmFtZVxyXG4gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBpbmZvcm1hdGlvbiBhbmQgZXhpdC5cclxuICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuXHJcblxyXG5XZWIgdGVzdCBvcHRpb25zOlxyXG4gIC1iLCAtLWJyb3dzZXI9e2Nocm9tZXxpZXxzYWZhcml8ZmlyZWZveH0gIEJyb3dzZXIgbmFtZS4gRGVmYXVsdCBpcyBjaHJvbWUuXHJcbiAgLXMsIC0tc2VydmVyPVNFUlZFUl9VUkwgICAgU2VsZW5pdW0gaHViIFVSTC4gRGVmYXVsdCBpcyBodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViLlxyXG4gICAgICAtLXJlb3Blbj17dHJ1ZXxmYWxzZX0gIFJlb3BlbiBicm93c2VyIG9uIGVhY2ggaXRlcmF0aW9uLiBEZWZhdWx0IGlzIGZhbHNlLlxyXG4gICAgICBcclxuTW9iaWxlIHRlc3Qgb3B0aW9uczpcclxuICAgIC1zLCAtLXNlcnZlcj1TRVJWRVJfVVJMICBBcHBpdW0gc2VydmVyIFVSTC4gRGVmYXVsdCBpcyBodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViLmApO1xyXG59Il19
|