oxygen-cli 1.25.0 → 1.27.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 +14 -0
- package/build/core/OxygenCore.js +266 -37
- package/build/core/OxygenEvents.js +11 -1
- package/build/core/OxygenModule.js +14 -1
- package/build/core/OxygenService.js +12 -1
- package/build/core/OxygenSubModule.js +10 -1
- package/build/core/WebDriverModule.js +30 -1
- package/build/core/utils.js +17 -1
- package/build/errors/HookError.js +7 -1
- package/build/errors/ModuleError.js +7 -1
- package/build/errors/ModuleUnavailableError.js +3 -1
- package/build/errors/OxygenError.js +33 -1
- package/build/errors/ScriptNotFound.js +7 -1
- package/build/errors/helper.js +77 -45
- package/build/index.js +18 -6
- package/build/lib/cli-util.js +90 -28
- package/build/lib/cli.js +23 -1
- package/build/lib/debugger.js +144 -1
- package/build/lib/img-merge.js +15 -1
- package/build/lib/launcher.js +28 -1
- package/build/lib/moduleRequire.js +4 -1
- package/build/lib/param-manager.js +28 -1
- package/build/lib/param-reader-csv.js +15 -1
- package/build/lib/param-reader-excel.js +14 -1
- package/build/lib/param-reader-json.js +10 -1
- package/build/lib/text-to-image.js +183 -0
- package/build/lib/util.js +58 -3
- package/build/model/case-result.js +4 -2
- package/build/model/failure.js +2 -1
- package/build/model/status.js +2 -1
- package/build/model/step-result.js +2 -1
- package/build/model/suite-result.js +2 -1
- package/build/model/test-result.js +2 -1
- package/build/model/testcase.js +2 -1
- package/build/model/testsuite.js +2 -1
- package/build/ox_modules/index.js +33 -13
- package/build/ox_modules/module-assert.js +24 -8
- package/build/ox_modules/module-date.js +8 -3
- package/build/ox_modules/module-db.js +28 -7
- package/build/ox_modules/module-email.js +36 -10
- package/build/ox_modules/module-eyes.js +46 -5
- package/build/ox_modules/module-http.js +102 -41
- package/build/ox_modules/module-log.js +22 -5
- package/build/ox_modules/module-mailinator.js +32 -10
- package/build/ox_modules/module-mob/commands/alertAccept.js +2 -1
- package/build/ox_modules/module-mob/commands/alertDismiss.js +2 -1
- package/build/ox_modules/module-mob/commands/assertAlert.js +6 -1
- package/build/ox_modules/module-mob/commands/assertText.js +3 -1
- package/build/ox_modules/module-mob/commands/assertTitle.js +4 -1
- package/build/ox_modules/module-mob/commands/assertValue.js +15 -9
- package/build/ox_modules/module-mob/commands/back.js +2 -1
- package/build/ox_modules/module-mob/commands/clear.js +4 -1
- package/build/ox_modules/module-mob/commands/click.js +4 -3
- package/build/ox_modules/module-mob/commands/clickHidden.js +9 -3
- package/build/ox_modules/module-mob/commands/clickLong.js +2 -1
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +4 -1
- package/build/ox_modules/module-mob/commands/closeApp.js +2 -1
- package/build/ox_modules/module-mob/commands/debug.js +2 -2
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +2 -1
- package/build/ox_modules/module-mob/commands/enableNetwork.js +12 -4
- package/build/ox_modules/module-mob/commands/execute.js +2 -1
- package/build/ox_modules/module-mob/commands/findElement.js +3 -1
- package/build/ox_modules/module-mob/commands/findElements.js +4 -1
- package/build/ox_modules/module-mob/commands/getAlertText.js +2 -1
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +2 -1
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +10 -1
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +2 -1
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +2 -1
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +9 -1
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +2 -1
- package/build/ox_modules/module-mob/commands/getLocation.js +2 -1
- package/build/ox_modules/module-mob/commands/getSource.js +2 -1
- package/build/ox_modules/module-mob/commands/getText.js +4 -1
- package/build/ox_modules/module-mob/commands/getTitle.js +2 -1
- package/build/ox_modules/module-mob/commands/getUrl.js +2 -1
- package/build/ox_modules/module-mob/commands/getValue.js +9 -5
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +2 -1
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +2 -1
- package/build/ox_modules/module-mob/commands/index.js +94 -19
- package/build/ox_modules/module-mob/commands/installApp.js +2 -1
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +2 -1
- package/build/ox_modules/module-mob/commands/isCheckable.js +2 -1
- package/build/ox_modules/module-mob/commands/isChecked.js +2 -1
- package/build/ox_modules/module-mob/commands/isClickable.js +2 -1
- package/build/ox_modules/module-mob/commands/isExist.js +3 -1
- package/build/ox_modules/module-mob/commands/isSelected.js +2 -1
- package/build/ox_modules/module-mob/commands/isVisible.js +3 -1
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +2 -1
- package/build/ox_modules/module-mob/commands/launchApp.js +2 -1
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +2 -1
- package/build/ox_modules/module-mob/commands/open.js +3 -1
- package/build/ox_modules/module-mob/commands/pause.js +2 -1
- package/build/ox_modules/module-mob/commands/removeApp.js +2 -1
- package/build/ox_modules/module-mob/commands/resetApp.js +2 -1
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +6 -1
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +2 -1
- package/build/ox_modules/module-mob/commands/select.js +4 -1
- package/build/ox_modules/module-mob/commands/selectFrame.js +4 -1
- package/build/ox_modules/module-mob/commands/selectWindow.js +26 -5
- package/build/ox_modules/module-mob/commands/sendKeys.js +9 -6
- package/build/ox_modules/module-mob/commands/setContext.js +2 -1
- package/build/ox_modules/module-mob/commands/setNativeContext.js +2 -1
- package/build/ox_modules/module-mob/commands/setTimeout.js +2 -1
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +6 -3
- package/build/ox_modules/module-mob/commands/shake.js +2 -1
- package/build/ox_modules/module-mob/commands/smsClickLink.js +2 -1
- package/build/ox_modules/module-mob/commands/smsGetText.js +6 -3
- package/build/ox_modules/module-mob/commands/swipe.js +2 -1
- package/build/ox_modules/module-mob/commands/swipeElement.js +2 -1
- package/build/ox_modules/module-mob/commands/swipeScreen.js +2 -1
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +2 -1
- package/build/ox_modules/module-mob/commands/tap.js +2 -1
- package/build/ox_modules/module-mob/commands/type.js +7 -3
- package/build/ox_modules/module-mob/commands/unlockPattern.js +10 -9
- package/build/ox_modules/module-mob/commands/waitForExist.js +2 -1
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +3 -1
- package/build/ox_modules/module-mob/commands/waitForVisible.js +2 -1
- package/build/ox_modules/module-mob.js +141 -72
- package/build/ox_modules/module-pdf.js +62 -23
- package/build/ox_modules/module-proxy.js +68 -8
- package/build/ox_modules/module-serial.js +32 -7
- package/build/ox_modules/module-shell.js +27 -8
- package/build/ox_modules/module-soap.js +47 -14
- package/build/ox_modules/module-twilio.js +53 -10
- package/build/ox_modules/module-utils.js +51 -16
- package/build/ox_modules/module-web/commands/alertAccept.js +2 -1
- package/build/ox_modules/module-web/commands/alertDismiss.js +2 -1
- package/build/ox_modules/module-web/commands/assertAlert.js +6 -1
- package/build/ox_modules/module-web/commands/assertExist.js +2 -1
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +4 -1
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +3 -1
- package/build/ox_modules/module-web/commands/assertText.js +3 -1
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +6 -1
- package/build/ox_modules/module-web/commands/assertTextPresent.js +6 -1
- package/build/ox_modules/module-web/commands/assertTitle.js +3 -1
- package/build/ox_modules/module-web/commands/assertValue.js +3 -1
- package/build/ox_modules/module-web/commands/back.js +2 -1
- package/build/ox_modules/module-web/commands/clear.js +5 -1
- package/build/ox_modules/module-web/commands/click.js +13 -4
- package/build/ox_modules/module-web/commands/clickHidden.js +7 -2
- package/build/ox_modules/module-web/commands/closeWindow.js +2 -1
- package/build/ox_modules/module-web/commands/debug.js +2 -2
- package/build/ox_modules/module-web/commands/deleteCookies.js +2 -1
- package/build/ox_modules/module-web/commands/deselect.js +2 -1
- package/build/ox_modules/module-web/commands/doubleClick.js +9 -3
- package/build/ox_modules/module-web/commands/dragAndDrop.js +2 -1
- package/build/ox_modules/module-web/commands/execute.js +2 -1
- package/build/ox_modules/module-web/commands/fileBrowse.js +10 -4
- package/build/ox_modules/module-web/commands/findElement.js +3 -1
- package/build/ox_modules/module-web/commands/findElements.js +4 -1
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +2 -1
- package/build/ox_modules/module-web/commands/getAlertText.js +2 -1
- package/build/ox_modules/module-web/commands/getAttribute.js +4 -1
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +3 -1
- package/build/ox_modules/module-web/commands/getCookies.js +2 -1
- package/build/ox_modules/module-web/commands/getCssValue.js +4 -1
- package/build/ox_modules/module-web/commands/getElementCount.js +2 -1
- package/build/ox_modules/module-web/commands/getHTML.js +2 -1
- package/build/ox_modules/module-web/commands/getSource.js +2 -1
- package/build/ox_modules/module-web/commands/getText.js +4 -1
- package/build/ox_modules/module-web/commands/getTitle.js +2 -1
- package/build/ox_modules/module-web/commands/getUrl.js +2 -1
- package/build/ox_modules/module-web/commands/getValue.js +5 -1
- package/build/ox_modules/module-web/commands/getWindowHandles.js +2 -1
- package/build/ox_modules/module-web/commands/getWindowSize.js +2 -1
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +5 -1
- package/build/ox_modules/module-web/commands/index.js +100 -19
- package/build/ox_modules/module-web/commands/isAlertPresent.js +2 -1
- package/build/ox_modules/module-web/commands/isChecked.js +2 -1
- package/build/ox_modules/module-web/commands/isExist.js +3 -1
- package/build/ox_modules/module-web/commands/isInteractable.js +2 -1
- package/build/ox_modules/module-web/commands/isSelected.js +2 -1
- package/build/ox_modules/module-web/commands/isVisible.js +3 -1
- package/build/ox_modules/module-web/commands/makeVisible.js +10 -2
- package/build/ox_modules/module-web/commands/maximizeWindow.js +2 -1
- package/build/ox_modules/module-web/commands/minimizeWindow.js +2 -1
- package/build/ox_modules/module-web/commands/newWindow.js +2 -1
- package/build/ox_modules/module-web/commands/open.js +4 -1
- package/build/ox_modules/module-web/commands/pause.js +2 -1
- package/build/ox_modules/module-web/commands/point.js +2 -1
- package/build/ox_modules/module-web/commands/pointJS.js +8 -2
- package/build/ox_modules/module-web/commands/refresh.js +2 -1
- package/build/ox_modules/module-web/commands/rightClick.js +8 -3
- package/build/ox_modules/module-web/commands/rightClickActions.js +2 -1
- package/build/ox_modules/module-web/commands/scrollToElement.js +2 -1
- package/build/ox_modules/module-web/commands/select.js +5 -1
- package/build/ox_modules/module-web/commands/selectFrame.js +3 -1
- package/build/ox_modules/module-web/commands/selectWindow.js +26 -5
- package/build/ox_modules/module-web/commands/sendKeys.js +6 -3
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -2
- package/build/ox_modules/module-web/commands/setTimeout.js +2 -1
- package/build/ox_modules/module-web/commands/setWindowSize.js +2 -1
- package/build/ox_modules/module-web/commands/takeScreenshot.js +5 -3
- package/build/ox_modules/module-web/commands/type.js +5 -1
- package/build/ox_modules/module-web/commands/waitForAngular.js +11 -6
- package/build/ox_modules/module-web/commands/waitForExist.js +2 -1
- package/build/ox_modules/module-web/commands/waitForInteractable.js +2 -1
- package/build/ox_modules/module-web/commands/waitForNotExist.js +8 -1
- package/build/ox_modules/module-web/commands/waitForNotText.js +3 -1
- package/build/ox_modules/module-web/commands/waitForNotValue.js +3 -1
- package/build/ox_modules/module-web/commands/waitForText.js +3 -1
- package/build/ox_modules/module-web/commands/waitForValue.js +3 -1
- package/build/ox_modules/module-web/commands/waitForVisible.js +2 -1
- package/build/ox_modules/module-web/commands/waitForWindow.js +21 -4
- package/build/ox_modules/module-web.js +181 -82
- package/build/ox_modules/module-win/commands/assertText.js +3 -1
- package/build/ox_modules/module-win/commands/assertTitle.js +4 -1
- package/build/ox_modules/module-win/commands/assertValue.js +15 -9
- package/build/ox_modules/module-win/commands/back.js +2 -1
- package/build/ox_modules/module-win/commands/clear.js +4 -1
- package/build/ox_modules/module-win/commands/click.js +2 -1
- package/build/ox_modules/module-win/commands/clickLong.js +2 -1
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +4 -1
- package/build/ox_modules/module-win/commands/findElement.js +3 -1
- package/build/ox_modules/module-win/commands/findElements.js +4 -1
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +2 -1
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +2 -1
- package/build/ox_modules/module-win/commands/getLocation.js +2 -1
- package/build/ox_modules/module-win/commands/getSource.js +2 -1
- package/build/ox_modules/module-win/commands/getText.js +4 -1
- package/build/ox_modules/module-win/commands/getValue.js +9 -5
- package/build/ox_modules/module-win/commands/getWindowHandles.js +2 -1
- package/build/ox_modules/module-win/commands/index.js +43 -5
- package/build/ox_modules/module-win/commands/isCheckable.js +2 -1
- package/build/ox_modules/module-win/commands/isChecked.js +2 -1
- package/build/ox_modules/module-win/commands/isClickable.js +2 -1
- package/build/ox_modules/module-win/commands/isExist.js +3 -1
- package/build/ox_modules/module-win/commands/isSelected.js +2 -1
- package/build/ox_modules/module-win/commands/isVisible.js +3 -1
- package/build/ox_modules/module-win/commands/open.js +2 -1
- package/build/ox_modules/module-win/commands/pause.js +2 -1
- package/build/ox_modules/module-win/commands/rightClick.js +2 -1
- package/build/ox_modules/module-win/commands/selectWindow.js +15 -1
- package/build/ox_modules/module-win/commands/sendKeys.js +4 -1
- package/build/ox_modules/module-win/commands/setTimeout.js +2 -1
- package/build/ox_modules/module-win/commands/takeScreenshot.js +2 -1
- package/build/ox_modules/module-win/commands/tap.js +2 -1
- package/build/ox_modules/module-win/commands/type.js +4 -1
- package/build/ox_modules/module-win/commands/waitForExist.js +2 -1
- package/build/ox_modules/module-win/commands/waitForInteractable.js +4 -1
- package/build/ox_modules/module-win/commands/waitForVisible.js +2 -1
- package/build/ox_modules/module-win.js +87 -48
- package/build/ox_modules/utils.js +76 -22
- package/build/ox_reporters/reporter-excel.js +58 -1
- package/build/ox_reporters/reporter-html.js +28 -1
- package/build/ox_reporters/reporter-json.js +14 -1
- package/build/ox_reporters/reporter-junit.js +24 -1
- package/build/ox_reporters/reporter-pdf.js +19 -1
- package/build/ox_reporters/reporter-xml.js +17 -1
- package/build/ox_services/service-devtools/submodule-network.js +91 -4
- package/build/ox_services/service-devtools.js +23 -1
- package/build/reporter/FileReporterBase.js +44 -5
- package/build/reporter/ReportAggregator.js +65 -1
- package/build/reporter/ReporterBase.js +6 -1
- package/build/runners/WorkerProcess.js +99 -1
- package/build/runners/cucumber/CucumberEventListener.js +29 -4
- package/build/runners/cucumber/CucumberReporter.js +56 -1
- package/build/runners/cucumber/CucumberWorker.js +66 -1
- package/build/runners/cucumber/index.js +30 -1
- package/build/runners/cucumber/worker.js +18 -1
- package/build/runners/index.js +6 -1
- package/build/runners/oxygen/OxygenWorker.js +60 -3
- package/build/runners/oxygen/index.js +178 -17
- package/build/runners/oxygen/worker.js +25 -2
- package/package.json +8 -8
- package/.babelrc +0 -28
- package/.eslintrc.json +0 -25
- package/.husky/pre-commit +0 -4
- package/CONTRIBUTE.md +0 -1
package/build/errors/helper.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
+
|
|
4
5
|
var _OxygenError = _interopRequireDefault(require("./OxygenError"));
|
|
6
|
+
|
|
5
7
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
|
+
|
|
6
9
|
const util = require('util');
|
|
10
|
+
|
|
7
11
|
const ERROR_CODES = {
|
|
8
12
|
SCRIPT_ERROR: 'SCRIPT_ERROR',
|
|
9
13
|
UNKNOWN_ERROR: 'UNKNOWN_ERROR',
|
|
@@ -78,9 +82,11 @@ module.exports = {
|
|
|
78
82
|
if (!err) {
|
|
79
83
|
return null;
|
|
80
84
|
}
|
|
85
|
+
|
|
81
86
|
if (!(err instanceof _OxygenError.default)) {
|
|
82
87
|
err = this.getOxygenError(err);
|
|
83
88
|
}
|
|
89
|
+
|
|
84
90
|
return {
|
|
85
91
|
type: err.type,
|
|
86
92
|
message: err.message,
|
|
@@ -91,9 +97,11 @@ module.exports = {
|
|
|
91
97
|
},
|
|
92
98
|
getDbErrorMessage: function (err) {
|
|
93
99
|
let message = '';
|
|
100
|
+
|
|
94
101
|
if (err && err.message) {
|
|
95
102
|
message += err.message;
|
|
96
103
|
}
|
|
104
|
+
|
|
97
105
|
if (err && err.odbcErrors && Array.isArray(err.odbcErrors) && err.odbcErrors.length > 0) {
|
|
98
106
|
err.odbcErrors.map(item => {
|
|
99
107
|
if (item && item.message) {
|
|
@@ -101,74 +109,84 @@ module.exports = {
|
|
|
101
109
|
}
|
|
102
110
|
});
|
|
103
111
|
}
|
|
112
|
+
|
|
104
113
|
return message;
|
|
105
114
|
},
|
|
106
115
|
getOxygenError: function (err, module, cmd, args) {
|
|
107
116
|
if (err instanceof _OxygenError.default) {
|
|
108
117
|
return err;
|
|
109
118
|
}
|
|
119
|
+
|
|
110
120
|
var errType = err.type || err.name || typeof err;
|
|
121
|
+
|
|
111
122
|
if (err.message && err.message.includes('because element wasn\'t found')) {
|
|
112
123
|
return new _OxygenError.default(ERROR_CODES.ELEMENT_NOT_FOUND, err.message, null, true, err);
|
|
113
124
|
} else if (err.message && err.message.includes('Unsupported locator strategy')) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
125
|
+
let matches = err.message.match(/invalid argument: (.*)/i);
|
|
126
|
+
return new _OxygenError.default(ERROR_CODES.MOBILE_CONTEXT_ERROR, (matches.length === 2 ? matches[1] : err.message) + '. Make sure you are using the correct mobile context. See mob.setNativeContext and mob.setWebViewContext.');
|
|
127
|
+
} else if (err.message && err.message.includes('Unable to locate an element with the xpath expression')) {
|
|
128
|
+
let matches = err.message.match(/(The string '.*' is not a valid XPath expression.)/i);
|
|
129
|
+
return new _OxygenError.default(ERROR_CODES.SCRIPT_ERROR, matches && matches.length === 2 ? matches[1] : err.message);
|
|
130
|
+
} else if (err.message && err.message.includes('An invalid or illegal selector was specified')) {
|
|
131
|
+
return new _OxygenError.default(ERROR_CODES.SCRIPT_ERROR, 'An invalid or illegal selector was specified');
|
|
132
|
+
} else if (err.message && err.message.startsWith('Given css selector expression')) {
|
|
133
|
+
let matches = err.message.match(/(Given css selector expression ".*" is invalid).*/i);
|
|
134
|
+
return new _OxygenError.default(ERROR_CODES.SCRIPT_ERROR, matches && matches.length === 2 ? matches[1] : err.message);
|
|
135
|
+
} else if (err.message && (err.message.includes('Unable to automate Chrome version') || err.message.includes('No Chromedriver found that can automate'))) {
|
|
136
|
+
return new _OxygenError.default(ERROR_CODES.CHROMEDRIVER_ERROR, extractOriginalError(err.message));
|
|
137
|
+
} else if (err.message && err.message.includes(ORIGINAL_ERROR_MESSAGE)) {
|
|
138
|
+
return new _OxygenError.default(ERROR_CODES.UNKNOWN_ERROR, extractOriginalError(err.message), util.inspect(err));
|
|
139
|
+
} else if (err.message && err.message.includes('Invalid URL')) {
|
|
140
|
+
let matches = err.message.match(/( Invalid URL: .*$).*/i);
|
|
141
|
+
return new _OxygenError.default(ERROR_CODES.SCRIPT_ERROR, matches && matches.length === 2 ? matches[1] : err.message);
|
|
142
|
+
} else if (err.message && err.message.startsWith('element click intercepted')) {
|
|
143
|
+
let matches = err.message.match(/element click intercepted: (.*)/i);
|
|
144
|
+
return new _OxygenError.default(ERROR_CODES.ELEMENT_NOT_VISIBLE, matches && matches.length === 2 ? matches[1] : err.message);
|
|
145
|
+
} else if (err.message && err.message.startsWith('No active session with ID')) {
|
|
146
|
+
return new _OxygenError.default(ERROR_CODES.SELENIUM_SESSION_ERROR, 'Execution time exceeded the timeout set by Selenium');
|
|
147
|
+
} else if (err.message === 'java.net.ConnectException: Connection refused: connect') {
|
|
148
|
+
return new _OxygenError.default(ERROR_CODES.WEBDRIVER_ERROR, 'The underlying WebDriver seems to have crashed: ' + err.message);
|
|
149
|
+
} else if (err.name && err.name.includes('stale element reference')) {
|
|
150
|
+
return new _OxygenError.default(ERROR_CODES.STALE_ELEMENT_REFERENCE, err.name + ' ' + err.message);
|
|
151
|
+
} else if (err.code && err.code === 'MODULE_NOT_FOUND') {
|
|
152
|
+
return new _OxygenError.default(ERROR_CODES.MODULE_NOT_FOUND, err.message);
|
|
153
|
+
} else if (err.message && err.message.includes('no such window') && err.message.includes('target window already closed') && err.message.includes('web view not found')) {
|
|
154
|
+
return new _OxygenError.default(ERROR_CODES.WINDOW_NOT_FOUND, err.message);
|
|
155
|
+
} else if (err.message && err.message.includes('you trying to pass into the execute method wasn\'t found')) {
|
|
156
|
+
return new _OxygenError.default(ERROR_CODES.ELEMENT_NOT_FOUND, err.message);
|
|
157
|
+
} else if (err.message && err.message.includes('element not interactable')) {
|
|
158
|
+
return new _OxygenError.default(ERROR_CODES.ELEMENT_NOT_INTERACTABLE, err.message);
|
|
159
|
+
} else if (err.name && err.name === 'invalid selector') {
|
|
160
|
+
return new _OxygenError.default(ERROR_CODES.SCRIPT_ERROR, err.message);
|
|
161
|
+
} else if (err.message && err.message.includes('Timeout awaiting \'request\' for')) {
|
|
162
|
+
const errMessage = err.message.replace('Timeout awaiting \'request\' for', 'Couldn\'t get a response from Selenium/WebDriver within');
|
|
163
|
+
return new _OxygenError.default(module === 'web' ? ERROR_CODES.SELENIUM_SESSION_TIMEOUT : ERROR_CODES.APPIUM_SESSION_TIMEOUT, errMessage);
|
|
164
|
+
} else if (err && err.message && err.message.includes('socket hang up')) {
|
|
165
|
+
return new _OxygenError.default(module === 'web' ? ERROR_CODES.SELENIUM_SESSION_TIMEOUT : ERROR_CODES.APPIUM_SESSION_TIMEOUT, err.message);
|
|
166
|
+
} else if (err && err.message && err.message.includes('Timed out receiving message from rendere')) {
|
|
167
|
+
return new _OxygenError.default(module === 'web' ? ERROR_CODES.SELENIUM_SESSION_TIMEOUT : ERROR_CODES.APPIUM_SESSION_TIMEOUT, err.message);
|
|
168
|
+
}
|
|
169
|
+
|
|
158
170
|
var oxErrorCode = CHAI_ERROR_CODES[errType];
|
|
171
|
+
|
|
159
172
|
if (oxErrorCode) {
|
|
160
173
|
if (oxErrorCode === ERROR_CODES.ASSERT && (module === 'verify' || cmd.indexOf('verify') === 0)) {
|
|
161
174
|
return new _OxygenError.default(ERROR_CODES.VERIFY, err.message, null, false);
|
|
162
175
|
}
|
|
176
|
+
|
|
163
177
|
return new _OxygenError.default(oxErrorCode, err.message, null, true, err);
|
|
164
178
|
}
|
|
179
|
+
|
|
165
180
|
oxErrorCode = SCRIPT_ERROR_CODES[errType];
|
|
181
|
+
|
|
166
182
|
if (oxErrorCode) {
|
|
167
183
|
if (oxErrorCode === ERROR_CODES.ASSERT && (module === 'verify' || cmd.indexOf('verify') === 0)) {
|
|
168
184
|
return new _OxygenError.default(ERROR_CODES.VERIFY, err.message, null, false);
|
|
169
185
|
}
|
|
186
|
+
|
|
170
187
|
return new _OxygenError.default(oxErrorCode, err.message || null, null, true, err);
|
|
171
188
|
}
|
|
189
|
+
|
|
172
190
|
console.log('=== Error Details ===');
|
|
173
191
|
console.log('Type: ' + err.type + ' Name: ' + err.name + ' Code: ' + err.code + ' Msg: ' + err.message);
|
|
174
192
|
console.log(util.inspect(err));
|
|
@@ -178,20 +196,26 @@ module.exports = {
|
|
|
178
196
|
getSeleniumInitError: function (err) {
|
|
179
197
|
if (err.message) {
|
|
180
198
|
var ieZoomErrorMsg = err.message.match(/(Unexpected error launching Internet Explorer\. Browser zoom level was set to \d+%\. It should be set to \d+%)/gm);
|
|
199
|
+
|
|
181
200
|
if (ieZoomErrorMsg) {
|
|
182
201
|
return new _OxygenError.default(ERROR_CODES.BROWSER_CONFIGURATION_ERROR, ieZoomErrorMsg.toString());
|
|
183
202
|
}
|
|
203
|
+
|
|
184
204
|
if (err.message.includes('Unable to create new service: ChromeDriverService')) {
|
|
185
205
|
return new _OxygenError.default(ERROR_CODES.CHROMEDRIVER_ERROR, err.message, null, true, err);
|
|
186
206
|
}
|
|
207
|
+
|
|
187
208
|
if (err.message.includes('Unable to create new service:')) {
|
|
188
209
|
return new _OxygenError.default(ERROR_CODES.SELENIUM_UNREACHABLE_ERROR, err.message, null, true, err);
|
|
189
210
|
}
|
|
211
|
+
|
|
190
212
|
var chromeDriverMsg = err.message.match(/(This version of ChromeDriver only supports Chrome version [0-9]*)/gm);
|
|
213
|
+
|
|
191
214
|
if (chromeDriverMsg) {
|
|
192
215
|
return new _OxygenError.default(ERROR_CODES.CHROMEDRIVER_ERROR, chromeDriverMsg.toString());
|
|
193
216
|
}
|
|
194
217
|
}
|
|
218
|
+
|
|
195
219
|
if (err.message && err.message.includes('cannot find Chrome binary')) {
|
|
196
220
|
return new _OxygenError.default(ERROR_CODES.CHROMEDRIVER_ERROR, 'Cannot find Chrome binary');
|
|
197
221
|
} else if (err.code === 'ECONNREFUSED' || err.code === 'ECONNRESET' || err.code === 'ENOTFOUND' || err.message === 'Failed to create session.\nsocket hang up') {
|
|
@@ -201,6 +225,7 @@ module.exports = {
|
|
|
201
225
|
} else if (err.message.includes('Unable to create new service:')) {
|
|
202
226
|
return new _OxygenError.default(ERROR_CODES.SELENIUM_CONNECTION_ERROR, err.message + '\n\nThis is probably due to missing ChromeDriver/IEDriverServer/GeckoDriver binary.\n');
|
|
203
227
|
}
|
|
228
|
+
|
|
204
229
|
console.log('=== Error Details ===');
|
|
205
230
|
console.log('Type: ' + err.type + ' Name: ' + err.name + ' Code: ' + err.code + ' Msg: ' + err.message);
|
|
206
231
|
console.log(util.inspect(err));
|
|
@@ -226,6 +251,7 @@ module.exports = {
|
|
|
226
251
|
} else if (err.message && (err.message.includes('A new session could not be created.') || err.message.includes('Failed to create session.'))) {
|
|
227
252
|
return new _OxygenError.default(ERROR_CODES.APPIUM_SESSION_ERROR, extractOriginalError(err.message), null, true);
|
|
228
253
|
}
|
|
254
|
+
|
|
229
255
|
console.log('=== Error Details ===');
|
|
230
256
|
console.log('Type: ' + err.type + ' Name: ' + err.name + ' Code: ' + err.code + ' Msg: ' + err.message);
|
|
231
257
|
console.log(util.inspect(err));
|
|
@@ -239,20 +265,26 @@ module.exports = {
|
|
|
239
265
|
};
|
|
240
266
|
const ORIGINAL_ERROR_MESSAGE = 'Original error: ';
|
|
241
267
|
const UNKNOWN_ERROR_MESSAGE = 'unknown error: ';
|
|
268
|
+
|
|
242
269
|
function extractOriginalError(msg) {
|
|
243
270
|
if (!msg) {
|
|
244
271
|
return '';
|
|
245
272
|
}
|
|
273
|
+
|
|
246
274
|
var errorIndex1 = msg.indexOf(ORIGINAL_ERROR_MESSAGE);
|
|
275
|
+
|
|
247
276
|
if (errorIndex1 === -1) {
|
|
248
277
|
return msg;
|
|
249
278
|
}
|
|
279
|
+
|
|
250
280
|
var errorIndex2 = msg.indexOf(ORIGINAL_ERROR_MESSAGE, errorIndex1 + ORIGINAL_ERROR_MESSAGE.length);
|
|
251
281
|
msg = msg.substring((errorIndex2 > -1 ? errorIndex2 : errorIndex1) + ORIGINAL_ERROR_MESSAGE.length);
|
|
252
282
|
var unknownErrorIndex = msg.indexOf(UNKNOWN_ERROR_MESSAGE);
|
|
283
|
+
|
|
253
284
|
if (unknownErrorIndex > -1) {
|
|
254
285
|
return msg.substring(unknownErrorIndex + UNKNOWN_ERROR_MESSAGE.length);
|
|
255
286
|
}
|
|
287
|
+
|
|
256
288
|
return msg;
|
|
257
289
|
}
|
|
258
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlsIiwicmVxdWlyZSIsIkVSUk9SX0NPREVTIiwiU0NSSVBUX0VSUk9SIiwiVU5LTk9XTl9FUlJPUiIsIkFTU0VSVF9FUlJPUiIsIlBERl9FUlJPUiIsIlZFUklGWV9FUlJPUiIsIkVMRU1FTlRfTk9UX0ZPVU5EIiwiRlJBTUVfTk9UX0ZPVU5EIiwiVU5LTk9XTl9DT01NQU5EX0VSUk9SIiwiU1RBTEVfRUxFTUVOVF9SRUZFUkVOQ0UiLCJFTEVNRU5UX05PVF9WSVNJQkxFIiwiRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFIiwiTE9DQVRPUl9NQVRDSEVTX01VTFRJUExFX0VMRU1FTlRTIiwiRUxFTUVOVF9TVElMTF9FWElTVFMiLCJCUk9XU0VSX0pTX0VYRUNVVEVfRVJST1IiLCJUSU1FT1VUIiwiV0lORE9XX05PVF9GT1VORCIsIlVORVhQRUNURURfQUxFUlRfT1BFTiIsIk5PX0FMRVJUX09QRU5fRVJST1IiLCJNQUlMSU5BVE9SX0VSUk9SIiwiQVBQSVVNX1VOUkVBQ0hBQkxFX0VSUk9SIiwiU0VMRU5JVU1fVU5SRUFDSEFCTEVfRVJST1IiLCJDSFJPTUVEUklWRVJfRVJST1IiLCJXRUJEUklWRVJfRVJST1IiLCJEQl9DT05ORUNUSU9OX0VSUk9SIiwiREJfUVVFUllfRVJST1IiLCJTT0FQX0VSUk9SIiwiU0hFTExfRVJST1IiLCJOT1RfSU1QTEVNRU5URURfRVJST1IiLCJTRVJJQUxfUE9SVF9FUlJPUiIsIkhUVFBfRVJST1IiLCJFTUFJTF9FUlJPUiIsIk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IiLCJERVZJQ0VfTk9UX0ZPVU5EIiwiUEFSQU1FVEVSU19FUlJPUiIsIklOVkFMSURfQ0FQQUJJTElUSUVTIiwiQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SIiwiQVBQSVVNX0NPTk5FQ1RJT05fRVJST1IiLCJBUFBJVU1fU0VTU0lPTl9FUlJPUiIsIkFQUElVTV9TRVNTSU9OX1RJTUVPVVQiLCJTRUxFTklVTV9TRVNTSU9OX0VSUk9SIiwiU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIiwiU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUiIsIlVSTF9PUEVOX0VSUk9SIiwiT1BUSU9OX05PVF9GT1VORCIsIkFUVFJJQlVURV9OT1RfRk9VTkQiLCJFTEVNRU5UX1NUQVRFX0VSUk9SIiwiTU9CSUxFX0NPTlRFWFRfRVJST1IiLCJBUFBMSUNBVElPTl9OT1RfRk9VTkRfRVJST1IiLCJUV0lMSU9fRVJST1IiLCJIT09LX0VSUk9SIiwiTk9UX1NVUFBPUlRFRCIsIkFTU0VSVF9QQVNTRUQiLCJNT0RVTEVfTk9UX0ZPVU5EIiwiRklMRV9CUk9XU0VfRVJST1IiLCJDU1ZfRVJST1IiLCJDUllQVE9fRVJST1IiLCJETlNfRVJST1IiLCJDSVJDVUxBUl9FUlJPUiIsIlhNTF9FUlJPUiIsIkNIQUlfRVJST1JfQ09ERVMiLCJBc3NlcnRpb25FcnJvciIsIlNDUklQVF9FUlJPUl9DT0RFUyIsIlR5cGVFcnJvciIsIlN5bnRheEVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJtb2R1bGUiLCJleHBvcnRzIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsImVyciIsIk94RXJyb3IiLCJnZXRPeHlnZW5FcnJvciIsInR5cGUiLCJtZXNzYWdlIiwiZGF0YSIsImxvY2F0aW9uIiwic3RhY2t0cmFjZSIsImdldERiRXJyb3JNZXNzYWdlIiwib2RiY0Vycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIm1hcCIsIml0ZW0iLCJjbWQiLCJhcmdzIiwiZXJyVHlwZSIsIm5hbWUiLCJpbmNsdWRlcyIsIm1hdGNoZXMiLCJtYXRjaCIsInN0YXJ0c1dpdGgiLCJleHRyYWN0T3JpZ2luYWxFcnJvciIsIk9SSUdJTkFMX0VSUk9SX01FU1NBR0UiLCJpbnNwZWN0IiwiY29kZSIsImVyck1lc3NhZ2UiLCJyZXBsYWNlIiwib3hFcnJvckNvZGUiLCJBU1NFUlQiLCJpbmRleE9mIiwiVkVSSUZZIiwiY29uc29sZSIsImxvZyIsImdldFNlbGVuaXVtSW5pdEVycm9yIiwiaWVab29tRXJyb3JNc2ciLCJ0b1N0cmluZyIsImNocm9tZURyaXZlck1zZyIsImdldEFwcGl1bUluaXRFcnJvciIsImdldEFzc2VydEVycm9yIiwiZXhwZWN0ZWQiLCJhY3R1YWwiLCJlcnJvckNvZGUiLCJVTktOT1dOX0VSUk9SX01FU1NBR0UiLCJtc2ciLCJlcnJvckluZGV4MSIsImVycm9ySW5kZXgyIiwic3Vic3RyaW5nIiwidW5rbm93bkVycm9ySW5kZXgiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZXJyb3JzL2hlbHBlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgbW9kdWxlIGZvciBoYW5kbGluZyBhbmQgY29udmVydGluZyB2YXJpb3VzIGVycm9yIHR5cGVzXHJcbiAqL1xyXG5cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi9PeHlnZW5FcnJvcic7XHJcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XHJcblxyXG5jb25zdCBFUlJPUl9DT0RFUyA9IHtcclxuICAgIFNDUklQVF9FUlJPUjogJ1NDUklQVF9FUlJPUicsXHJcbiAgICBVTktOT1dOX0VSUk9SOiAnVU5LTk9XTl9FUlJPUicsXHJcbiAgICBBU1NFUlRfRVJST1I6ICdBU1NFUlRfRVJST1InLFxyXG4gICAgUERGX0VSUk9SOiAnUERGX0VSUk9SJyxcclxuICAgIFZFUklGWV9FUlJPUjogJ1ZFUklGWV9FUlJPUicsXHJcbiAgICBFTEVNRU5UX05PVF9GT1VORDogJ0VMRU1FTlRfTk9UX0ZPVU5EJyxcclxuICAgIEZSQU1FX05PVF9GT1VORDogJ0ZSQU1FX05PVF9GT1VORCcsXHJcbiAgICBVTktOT1dOX0NPTU1BTkRfRVJST1I6ICdVTktOT1dOX0NPTU1BTkRfRVJST1InLFxyXG4gICAgU1RBTEVfRUxFTUVOVF9SRUZFUkVOQ0U6ICdTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRScsXHJcbiAgICBFTEVNRU5UX05PVF9WSVNJQkxFOiAnRUxFTUVOVF9OT1RfVklTSUJMRScsXHJcbiAgICBFTEVNRU5UX05PVF9JTlRFUkFDVEFCTEU6ICdFTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUnLFxyXG4gICAgTE9DQVRPUl9NQVRDSEVTX01VTFRJUExFX0VMRU1FTlRTOiAnTE9DQVRPUl9NQVRDSEVTX01VTFRJUExFX0VMRU1FTlRTJyxcclxuICAgIEVMRU1FTlRfU1RJTExfRVhJU1RTOiAnRUxFTUVOVF9TVElMTF9FWElTVFMnLFxyXG4gICAgQlJPV1NFUl9KU19FWEVDVVRFX0VSUk9SOiAnQlJPV1NFUl9KU19FWEVDVVRFX0VSUk9SJyxcclxuICAgIFRJTUVPVVQ6ICdUSU1FT1VUJyxcclxuICAgIFdJTkRPV19OT1RfRk9VTkQ6ICdXSU5ET1dfTk9UX0ZPVU5EJyxcclxuICAgIFVORVhQRUNURURfQUxFUlRfT1BFTjogJ1VORVhQRUNURURfQUxFUlRfT1BFTicsXHJcbiAgICBOT19BTEVSVF9PUEVOX0VSUk9SOiAnTk9fQUxFUlRfT1BFTl9FUlJPUicsXHJcbiAgICBNQUlMSU5BVE9SX0VSUk9SOiAnTUFJTElOQVRPUl9FUlJPUicsXHJcbiAgICBBUFBJVU1fVU5SRUFDSEFCTEVfRVJST1I6ICdBUFBJVU1fVU5SRUFDSEFCTEVfRVJST1InLFxyXG4gICAgU0VMRU5JVU1fVU5SRUFDSEFCTEVfRVJST1I6ICdTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUicsXHJcbiAgICBDSFJPTUVEUklWRVJfRVJST1I6ICdDSFJPTUVEUklWRVJfRVJST1InLFxyXG4gICAgV0VCRFJJVkVSX0VSUk9SOiAnV0VCRFJJVkVSX0VSUk9SJyxcclxuICAgIERCX0NPTk5FQ1RJT05fRVJST1I6ICdEQl9DT05ORUNUSU9OX0VSUk9SJyxcclxuICAgIERCX1FVRVJZX0VSUk9SOiAnREJfUVVFUllfRVJST1InLFxyXG4gICAgU09BUF9FUlJPUjogJ1NPQVBfRVJST1InLFxyXG4gICAgU0hFTExfRVJST1I6ICdTSEVMTF9FUlJPUicsXHJcbiAgICBOT1RfSU1QTEVNRU5URURfRVJST1I6ICdOT1RfSU1QTEVNRU5URURfRVJST1InLFxyXG4gICAgU0VSSUFMX1BPUlRfRVJST1I6ICdTRVJJQUxfUE9SVF9FUlJPUicsXHJcbiAgICBIVFRQX0VSUk9SOiAnSFRUUF9FUlJPUicsXHJcbiAgICBFTUFJTF9FUlJPUjogJ0VNQUlMX0VSUk9SJyxcclxuICAgIE1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1I6ICdNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SJyxcclxuICAgIERFVklDRV9OT1RfRk9VTkQ6ICdERVZJQ0VfTk9UX0ZPVU5EJyxcclxuICAgIFBBUkFNRVRFUlNfRVJST1I6ICdQQVJBTUVURVJTX0VSUk9SJyxcclxuICAgIElOVkFMSURfQ0FQQUJJTElUSUVTOiAnSU5WQUxJRF9DQVBBQklMSVRJRVMnLFxyXG4gICAgQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SOiAnQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SJyxcclxuICAgIEFQUElVTV9DT05ORUNUSU9OX0VSUk9SOiAnQVBQSVVNX0NPTk5FQ1RJT05fRVJST1InLFxyXG4gICAgQVBQSVVNX1NFU1NJT05fRVJST1I6ICdBUFBJVU1fU0VTU0lPTl9FUlJPUicsXHJcbiAgICBBUFBJVU1fU0VTU0lPTl9USU1FT1VUOiAnQVBQSVVNX1NFU1NJT05fVElNRU9VVCcsXHJcbiAgICBTRUxFTklVTV9TRVNTSU9OX0VSUk9SOiAnU0VMRU5JVU1fU0VTU0lPTl9FUlJPUicsXHJcbiAgICBTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQ6ICdTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQnLFxyXG4gICAgU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUjogJ1NFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1InLFxyXG4gICAgVVJMX09QRU5fRVJST1I6ICdVUkxfT1BFTl9FUlJPUicsXHJcbiAgICBPUFRJT05fTk9UX0ZPVU5EOiAnT1BUSU9OX05PVF9GT1VORCcsXHJcbiAgICBBVFRSSUJVVEVfTk9UX0ZPVU5EOiAnQVRUUklCVVRFX05PVF9GT1VORCcsXHJcbiAgICBFTEVNRU5UX1NUQVRFX0VSUk9SOiAnRUxFTUVOVF9TVEFURV9FUlJPUicsXHJcbiAgICBNT0JJTEVfQ09OVEVYVF9FUlJPUjogJ01PQklMRV9DT05URVhUX0VSUk9SJyxcclxuICAgIEFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUjogJ0FQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUicsXHJcbiAgICBUV0lMSU9fRVJST1I6ICdUV0lMSU9fRVJST1InLFxyXG4gICAgSE9PS19FUlJPUjogJ0hPT0tfRVJST1InLFxyXG4gICAgTk9UX1NVUFBPUlRFRDogJ05PVF9TVVBQT1JURUQnLFxyXG4gICAgQVNTRVJUX1BBU1NFRDogJ0FTU0VSVF9QQVNTRUQnLFxyXG4gICAgTU9EVUxFX05PVF9GT1VORDogJ01PRFVMRV9OT1RfRk9VTkQnLFxyXG4gICAgRklMRV9CUk9XU0VfRVJST1I6ICdGSUxFX0JST1dTRV9FUlJPUicsXHJcbiAgICBDU1ZfRVJST1I6ICdDU1ZfRVJST1InLFxyXG4gICAgQ1JZUFRPX0VSUk9SOiAnQ1JZUFRPX0VSUk9SJyxcclxuICAgIEROU19FUlJPUjogJ0ROU19FUlJPUicsXHJcbiAgICBDSVJDVUxBUl9FUlJPUjogJ0NJUkNVTEFSX0VSUk9SJyxcclxuICAgIFhNTF9FUlJPUjogJ1hNTF9FUlJPUidcclxufTtcclxuXHJcbi8vIENoYWkgdG8gT3h5Z2VuIGVycm9yIGNvZGVzIG1hcHBpbmdcclxuY29uc3QgQ0hBSV9FUlJPUl9DT0RFUyA9IHtcclxuICAgIEFzc2VydGlvbkVycm9yOiBFUlJPUl9DT0RFUy5BU1NFUlRfRVJST1JcclxufTtcclxuXHJcbi8vIEdlbmVyYWwgSmF2YVNjcmlwdCBlcnJvciBjb2RlcyBtYXBwaW5nXHJcbmNvbnN0IFNDUklQVF9FUlJPUl9DT0RFUyA9IHtcclxuICAgIFR5cGVFcnJvcjogRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLFxyXG4gICAgU3ludGF4RXJyb3I6IEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUixcclxuICAgIFJlZmVyZW5jZUVycm9yOiBFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIGdldEZhaWx1cmVGcm9tRXJyb3I6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICghZXJyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBPeEVycm9yKSkge1xyXG4gICAgICAgICAgICBlcnIgPSB0aGlzLmdldE94eWdlbkVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6IGVyci50eXBlLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcclxuICAgICAgICAgICAgZGF0YTogZXJyLmRhdGEsXHJcbiAgICAgICAgICAgIGxvY2F0aW9uOiBlcnIubG9jYXRpb24sXHJcbiAgICAgICAgICAgIHN0YWNrdHJhY2U6IGVyci5zdGFja3RyYWNlIHx8IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGdldERiRXJyb3JNZXNzYWdlOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBsZXQgbWVzc2FnZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoZXJyICYmIGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGVyciAmJlxyXG4gICAgICAgICAgICBlcnIub2RiY0Vycm9ycyAmJlxyXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGVyci5vZGJjRXJyb3JzKSAmJlxyXG4gICAgICAgICAgICBlcnIub2RiY0Vycm9ycy5sZW5ndGggPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGVyci5vZGJjRXJyb3JzLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gJiZcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLm1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gJzogJyAraXRlbS5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgfSxcclxuICAgIGdldE94eWdlbkVycm9yOiBmdW5jdGlvbihlcnIsIG1vZHVsZSwgY21kLCBhcmdzKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoZSBlcnJvciBhcyBpcyBpZiBpdCBoYXMgYmVlbiBhbHJlYWR5IHByb2Nlc3NlZFxyXG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBPeEVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZXJyVHlwZSA9IGVyci50eXBlIHx8IGVyci5uYW1lIHx8IHR5cGVvZiBlcnI7XHJcbiAgICAgICAgLy8gaGFuZGxlIFwiQ2FuJ3QgY2FsbCA8Y29tbWFuZD4gb24gZWxlbWVudCB3aXRoIHNlbGVjdG9yIDxzZWxlY3Rvcj4gYmVjYXVzZSBlbGVtZW50IHdhc24ndCBmb3VuZFwiXHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdiZWNhdXNlIGVsZW1lbnQgd2FzblxcJ3QgZm91bmQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfRk9VTkQsIGVyci5tZXNzYWdlLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBoYW5kbGUgXCJpbnZhbGlkIGFyZ3VtZW50OiBVbnN1cHBvcnRlZCBsb2NhdG9yIHN0cmF0ZWd5OiAtYW5kcm9pZCB1aWF1dG9tYXRvclwiIGZvciBtb2JpbGUuXHJcbiAgICAgICAgLy8gdXN1YWxseSBkdWUgdG8gbm90IHVzaW5nIHRoZSBjb3JyZWN0IGNvbnRleHRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5zdXBwb3J0ZWQgbG9jYXRvciBzdHJhdGVneScpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goL2ludmFsaWQgYXJndW1lbnQ6ICguKikvaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5NT0JJTEVfQ09OVEVYVF9FUlJPUiwgKG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSArXHJcbiAgICAgICAgICAgICAgICAnLiBNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBtb2JpbGUgY29udGV4dC4gU2VlIG1vYi5zZXROYXRpdmVDb250ZXh0IGFuZCBtb2Iuc2V0V2ViVmlld0NvbnRleHQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGhhbmRsZSBcImludmFsaWQgc2VsZWN0b3I6IFVuYWJsZSB0byBsb2NhdGUgYW4gZWxlbWVudCB3aXRoIHRoZSB4cGF0aCBleHByZXNzaW9uXCJcclxuICAgICAgICAvLyB1c3VhbGx5IGR1ZSB0byBpbnZhbGlkIHhwYXRoXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBsb2NhdGUgYW4gZWxlbWVudCB3aXRoIHRoZSB4cGF0aCBleHByZXNzaW9uJykpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBlcnIubWVzc2FnZS5tYXRjaCgvKFRoZSBzdHJpbmcgJy4qJyBpcyBub3QgYSB2YWxpZCBYUGF0aCBleHByZXNzaW9uLikvaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgY3NzIGxvY2F0b3Igb24gQ2hyb21lL0lFLiBlLmcuIGNzcz0jXFw6cDBcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnQW4gaW52YWxpZCBvciBpbGxlZ2FsIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLCAnQW4gaW52YWxpZCBvciBpbGxlZ2FsIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW52YWxpZCBjc3MgbG9jYXRvciBvbiBGaXJlZm94LiBlLmcuIGNzcz0jXFw6cDBcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdHaXZlbiBjc3Mgc2VsZWN0b3IgZXhwcmVzc2lvbicpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goLyhHaXZlbiBjc3Mgc2VsZWN0b3IgZXhwcmVzc2lvbiBcIi4qXCIgaXMgaW52YWxpZCkuKi9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDIgPyBtYXRjaGVzWzFdIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24nKSB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZS5pbmNsdWRlcygnTm8gQ2hyb21lZHJpdmVyIGZvdW5kIHRoYXQgY2FuIGF1dG9tYXRlJykpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGhhbmRsZSB2YXJpb3VzIHR5cGVzIG9mICdPcmlnaW5hbCBlcnJvcidcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcyhPUklHSU5BTF9FUlJPUl9NRVNTQUdFKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVU5LTk9XTl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgVVJMIGluIG9wZW4gY29tbWFuZFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdJbnZhbGlkIFVSTCcpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goLyggSW52YWxpZCBVUkw6IC4qJCkuKi9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDIgPyBtYXRjaGVzWzFdIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdXN1YWxseSBvbiBtb2JpbGUgQ2hyb21lIHdoZW4gZWxlbWVudCBpcyBvdmVybGFwcGVkIGJ5IGFub3RoZXIgZWxlbWVudFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ2VsZW1lbnQgY2xpY2sgaW50ZXJjZXB0ZWQnKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC9lbGVtZW50IGNsaWNrIGludGVyY2VwdGVkOiAoLiopL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfVklTSUJMRSwgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDIgPyBtYXRjaGVzWzFdIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdXN1YWxseSBiZWNhdXNlIFNlbGVuaXVtIGhhcyBraWxsZWQgdGhlIHNlc3Npb24gZHVlIHRvIGV4Y2VlZGluZyAnLXRpbWVvdXQnIHRpbWVvdXRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdObyBhY3RpdmUgc2Vzc2lvbiB3aXRoIElEJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX1NFU1NJT05fRVJST1IsICdFeGVjdXRpb24gdGltZSBleGNlZWRlZCB0aGUgdGltZW91dCBzZXQgYnkgU2VsZW5pdW0nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2hlbiBkcml2ZXIgKElFRHJpdmVyU2VydmVyLCBDaHJvbWVEcml2ZXIsIGV0YykgY3Jhc2hlc1xyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlID09PSAnamF2YS5uZXQuQ29ubmVjdEV4Y2VwdGlvbjogQ29ubmVjdGlvbiByZWZ1c2VkOiBjb25uZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuV0VCRFJJVkVSX0VSUk9SLCAnVGhlIHVuZGVybHlpbmcgV2ViRHJpdmVyIHNlZW1zIHRvIGhhdmUgY3Jhc2hlZDogJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc3RhbGUgZWxlbWVudCByZWZlcmVuY2VcclxuICAgICAgICBlbHNlIGlmIChlcnIubmFtZSAmJiBlcnIubmFtZS5pbmNsdWRlcygnc3RhbGUgZWxlbWVudCByZWZlcmVuY2UnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU1RBTEVfRUxFTUVOVF9SRUZFUkVOQ0UsIGVyci5uYW1lICsgJyAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlcnIuY29kZSAmJiBlcnIuY29kZSA9PT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5NT0RVTEVfTk9UX0ZPVU5ELCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vICB3aGVuIGRvaW5nIGFuIG9wZXJhdGlvbiBvbiBhbiBlbGVtZW50IChlLmcuIGNsaWNrKSBidXQgdGhlIHdpbmRvdyB3YXMgYWxyZWFkeSBjbG9zZWRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnbm8gc3VjaCB3aW5kb3cnKSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygndGFyZ2V0IHdpbmRvdyBhbHJlYWR5IGNsb3NlZCcpICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCd3ZWIgdmlldyBub3QgZm91bmQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuV0lORE9XX05PVF9GT1VORCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBleGFtcGxlOiBUaGUgZWxlbWVudCB3aXRoIHNlbGVjdG9yICoqKiB5b3UgdHJ5aW5nIHRvIHBhc3MgaW50byB0aGUgZXhlY3V0ZSBtZXRob2Qgd2Fzbid0IGZvdW5kXHJcbiAgICAgICAgLy8gd2hlbiBlbGVtZW50IHdhcyBkZWxldGVkIGZyb20gRE9NXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3lvdSB0cnlpbmcgdG8gcGFzcyBpbnRvIHRoZSBleGVjdXRlIG1ldGhvZCB3YXNuXFwndCBmb3VuZCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5FTEVNRU5UX05PVF9GT1VORCwgIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2hlbiBkb2luZyBhbiBvcGVyYXRpb24gb24gYW4gZWxlbWVudCByZWZlcmVuY2UgKGUuZy4gY2xpY2spIGJ1dCB0aGUgcGFnZSB3YXMgYWxyZWFkeSBjaGFuZ2VkXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2VsZW1lbnQgbm90IGludGVyYWN0YWJsZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5FTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW52YWxpZCBzZWxlY3RvcjogamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjogVW5hYmxlIHRvIGNvbXBpbGUgc2VsZWN0b3IgLi4uXHJcbiAgICAgICAgZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIGVyci5uYW1lICYmXHJcbiAgICAgICAgICAgIGVyci5uYW1lID09PSAnaW52YWxpZCBzZWxlY3RvcidcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSZXF1ZXN0RXJyb3I6IFRpbWVvdXQgYXdhaXRpbmcgJ3JlcXVlc3QnIGZvciAzMTAwMDBtcywgbmFtZTogJ1RpbWVvdXRFcnJvcidcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVGltZW91dCBhd2FpdGluZyBcXCdyZXF1ZXN0XFwnIGZvcicpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyck1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKFxyXG4gICAgICAgICAgICAgICAgJ1RpbWVvdXQgYXdhaXRpbmcgXFwncmVxdWVzdFxcJyBmb3InLFxyXG4gICAgICAgICAgICAgICAgJ0NvdWxkblxcJ3QgZ2V0IGEgcmVzcG9uc2UgZnJvbSBTZWxlbml1bS9XZWJEcml2ZXIgd2l0aGluJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IobW9kdWxlID09PSAnd2ViJyA/IEVSUk9SX0NPREVTLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCA6IEVSUk9SX0NPREVTLkFQUElVTV9TRVNTSU9OX1RJTUVPVVQsIGVyck1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlcnIgJiYgZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3NvY2tldCBoYW5nIHVwJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG1vZHVsZSA9PT0gJ3dlYicgPyBFUlJPUl9DT0RFUy5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQgOiBFUlJPUl9DT0RFUy5BUFBJVU1fU0VTU0lPTl9USU1FT1VULCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1RpbWVkIG91dCByZWNlaXZpbmcgbWVzc2FnZSBmcm9tIHJlbmRlcmUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IobW9kdWxlID09PSAnd2ViJyA/IEVSUk9SX0NPREVTLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCA6IEVSUk9SX0NPREVTLkFQUElVTV9TRVNTSU9OX1RJTUVPVVQsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRyeSB0byByZXNvbHZlIENoYWkgZXJyb3IgY29kZVxyXG4gICAgICAgIHZhciBveEVycm9yQ29kZSA9IENIQUlfRVJST1JfQ09ERVNbZXJyVHlwZV07XHJcbiAgICAgICAgaWYgKG94RXJyb3JDb2RlKSB7XHJcbiAgICAgICAgICAgIC8vIHRocm93IG5vbi1mYXRhbCBlcnJvciBpZiBpdCdzIGEgXCJ2ZXJpZnlcIiBtb2R1bGUgb3IgbWV0aG9kIFxyXG4gICAgICAgICAgICBpZiAob3hFcnJvckNvZGUgPT09IEVSUk9SX0NPREVTLkFTU0VSVCAmJlxyXG5cdFx0XHRcdChtb2R1bGUgPT09ICd2ZXJpZnknIHx8IGNtZC5pbmRleE9mKCd2ZXJpZnknKSA9PT0gMCkpIHsgLy8gdmVyaWZ5LiosICoudmVyaWZ5KlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlZFUklGWSwgZXJyLm1lc3NhZ2UsIG51bGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3Iob3hFcnJvckNvZGUsIGVyci5tZXNzYWdlLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgSmF2YVNjcmlwdCBlcnJvciBjb2RlXHJcbiAgICAgICAgb3hFcnJvckNvZGUgPSBTQ1JJUFRfRVJST1JfQ09ERVNbZXJyVHlwZV07XHJcbiAgICAgICAgaWYgKG94RXJyb3JDb2RlKSB7XHJcbiAgICAgICAgICAgIC8vIHRocm93IG5vbi1mYXRhbCBlcnJvciBpZiBpdCdzIGEgXCJ2ZXJpZnlcIiBtb2R1bGUgb3IgbWV0aG9kIFxyXG4gICAgICAgICAgICBpZiAob3hFcnJvckNvZGUgPT09IEVSUk9SX0NPREVTLkFTU0VSVCAmJlxyXG5cdFx0XHRcdChtb2R1bGUgPT09ICd2ZXJpZnknIHx8IGNtZC5pbmRleE9mKCd2ZXJpZnknKSA9PT0gMCkpIHsgLy8gdmVyaWZ5LiosICoudmVyaWZ5KlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlZFUklGWSwgZXJyLm1lc3NhZ2UsIG51bGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3Iob3hFcnJvckNvZGUsIGVyci5tZXNzYWdlIHx8IG51bGwsIG51bGwsIHRydWUsIGVycik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnPT09IEVycm9yIERldGFpbHMgPT09Jyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1R5cGU6ICcgKyBlcnIudHlwZSArICcgTmFtZTogJyArIGVyci5uYW1lICsgJyBDb2RlOiAnICsgZXJyLmNvZGUgKyAnIE1zZzogJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh1dGlsLmluc3BlY3QoZXJyKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVyck1lc3NhZ2UgPSBlcnIubWVzc2FnZSA/IGAke2VyclR5cGV9OiAke2Vyci5tZXNzYWdlfWAgOiBgJHtlcnJUeXBlfWA7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGVyck1lc3NhZ2UsIHV0aWwuaW5zcGVjdChlcnIpLCB0cnVlLCBlcnIpO1xyXG4gICAgfSxcclxuICAgIGdldFNlbGVuaXVtSW5pdEVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgdmFyIGllWm9vbUVycm9yTXNnID0gZXJyLm1lc3NhZ2UubWF0Y2goLyhVbmV4cGVjdGVkIGVycm9yIGxhdW5jaGluZyBJbnRlcm5ldCBFeHBsb3JlclxcLiBCcm93c2VyIHpvb20gbGV2ZWwgd2FzIHNldCB0byBcXGQrJVxcLiBJdCBzaG91bGQgYmUgc2V0IHRvIFxcZCslKS9nbSk7XHJcbiAgICAgICAgICAgIGlmIChpZVpvb21FcnJvck1zZykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkJST1dTRVJfQ09ORklHVVJBVElPTl9FUlJPUiwgaWVab29tRXJyb3JNc2cudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGNyZWF0ZSBuZXcgc2VydmljZTogQ2hyb21lRHJpdmVyU2VydmljZScpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gY3JlYXRlIG5ldyBzZXJ2aWNlOicpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fVU5SRUFDSEFCTEVfRVJST1IsIGVyci5tZXNzYWdlLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgY2hyb21lRHJpdmVyTXNnID0gZXJyLm1lc3NhZ2UubWF0Y2goLyhUaGlzIHZlcnNpb24gb2YgQ2hyb21lRHJpdmVyIG9ubHkgc3VwcG9ydHMgQ2hyb21lIHZlcnNpb24gWzAtOV0qKS9nbSk7XHJcbiAgICAgICAgICAgIGlmIChjaHJvbWVEcml2ZXJNc2cpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGNocm9tZURyaXZlck1zZy50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdjYW5ub3QgZmluZCBDaHJvbWUgYmluYXJ5JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgJ0Nhbm5vdCBmaW5kIENocm9tZSBiaW5hcnknKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRUZVU0VEJyB8fCBlcnIuY29kZSA9PT0gJ0VDT05OUkVTRVQnIHx8IGVyci5jb2RlID09PSAnRU5PVEZPVU5EJyB8fCBlcnIubWVzc2FnZSA9PT0gJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi5cXG5zb2NrZXQgaGFuZyB1cCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SLCBcIkNvdWxkbid0IGNvbm5lY3QgdG8gU2VsZW5pdW0gc2VydmVyXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgPT09ICdBbGwgbWludXRlcyBmb3IgdGhpcyBvcmdhbml6YXRpb24gaGFzIGJlZW4gZXhhdXN0ZWQnIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID09PSAnNDAxIFVuYXV0aG9yaXplZCcgfHxcclxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uLicpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGNyZWF0ZSBuZXcgc2VydmljZTonKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUiwgZXJyLm1lc3NhZ2UgKyAnXFxuXFxuVGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gbWlzc2luZyBDaHJvbWVEcml2ZXIvSUVEcml2ZXJTZXJ2ZXIvR2Vja29Ecml2ZXIgYmluYXJ5LlxcbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBFcnJvciBEZXRhaWxzID09PScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUeXBlOiAnICsgZXJyLnR5cGUgKyAnIE5hbWU6ICcgKyBlcnIubmFtZSArICcgQ29kZTogJyArIGVyci5jb2RlICsgJyBNc2c6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXRpbC5pbnNwZWN0KGVycikpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVU5LTk9XTl9FUlJPUiwgZXJyLnR5cGUgKyAnOiAnICsgZXJyLm1lc3NhZ2UsIHV0aWwuaW5zcGVjdChlcnIpKTtcclxuICAgIH0sXHJcbiAgICBnZXRBcHBpdW1Jbml0RXJyb3I6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnY2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsICdDYW5ub3QgZmluZCBDaHJvbWUgYmluYXJ5Jyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVGVVNFRCcgfHwgZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJyB8fCBlcnIuY29kZSA9PT0gJ0VOT1RGT1VORCcgfHwgZXJyLm1lc3NhZ2UgPT09ICdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24uXFxuc29ja2V0IGhhbmcgdXAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BUFBJVU1fVU5SRUFDSEFCTEVfRVJST1IsIFwiQ291bGRuJ3QgY29ubmVjdCB0byBBcHBpdW0gc2VydmVyXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0NvdWxkIG5vdCBmaW5kIGEgY29ubmVjdGVkIEFuZHJvaWQgZGV2aWNlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkRFVklDRV9OT1RfRk9VTkQsICdDb3VsZCBub3QgZmluZCBhIGNvbm5lY3RlZCBBbmRyb2lkIGRldmljZScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBhdXRvbWF0ZSBDaHJvbWUgdmVyc2lvbicpKSB7ICAgICAgICAgIC8vIGFwcGl1bSA8PSAxLjE0XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnTm8gQ2hyb21lZHJpdmVyIGZvdW5kIHRoYXQgY2FuIGF1dG9tYXRlJykpIHsgICAgLy8gYXBwaXVtID49IDEuMTVcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gZmluZCBhbiBhY3RpdmUgZGV2aWNlIG9yIGVtdWxhdG9yIHdpdGgnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuREVWSUNFX05PVF9GT1VORCwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdpcyBub3QgaW5zdGFsbGVkIG9uIGRldmljZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BUFBMSUNBVElPTl9OT1RfRk9VTkRfRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSA9PT0gJ0FsbCBtaW51dGVzIGZvciB0aGlzIG9yZ2FuaXphdGlvbiBoYXMgYmVlbiBleGF1c3RlZCcgfHxcclxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT09ICc0MDEgVW5hdXRob3JpemVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQSVVNX0NPTk5FQ1RJT05fRVJST1IsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIChcclxuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdBIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicpIHx8XHJcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZS5pbmNsdWRlcygnRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uLicpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQSVVNX1NFU1NJT05fRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnPT09IEVycm9yIERldGFpbHMgPT09Jyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1R5cGU6ICcgKyBlcnIudHlwZSArICcgTmFtZTogJyArIGVyci5uYW1lICsgJyBDb2RlOiAnICsgZXJyLmNvZGUgKyAnIE1zZzogJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh1dGlsLmluc3BlY3QoZXJyKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5VTktOT1dOX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSksIHV0aWwuaW5zcGVjdChlcnIpKTtcclxuICAgIH0sXHJcbiAgICBnZXRBc3NlcnRFcnJvcjogZnVuY3Rpb24oZXhwZWN0ZWQsIGFjdHVhbCkge1xyXG4gICAgICAgIGFjdHVhbCA9IGFjdHVhbC50b1N0cmluZygpLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKTtcclxuICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVNTRVJUX0VSUk9SLCBgRXhwZWN0ZWQ6IFwiJHtleHBlY3RlZH1cIi4gR290OiBcIiR7YWN0dWFsfVwiYCk7XHJcbiAgICB9LFxyXG4gICAgZXJyb3JDb2RlOiBFUlJPUl9DT0RFU1xyXG59O1xyXG5cclxuY29uc3QgT1JJR0lOQUxfRVJST1JfTUVTU0FHRSA9ICdPcmlnaW5hbCBlcnJvcjogJztcclxuY29uc3QgVU5LTk9XTl9FUlJPUl9NRVNTQUdFID0gJ3Vua25vd24gZXJyb3I6ICc7XHJcblxyXG5mdW5jdGlvbiBleHRyYWN0T3JpZ2luYWxFcnJvcihtc2cpIHtcclxuICAgIGlmICghbXNnKSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBlcnJvckluZGV4MSA9IG1zZy5pbmRleE9mKE9SSUdJTkFMX0VSUk9SX01FU1NBR0UpO1xyXG4gICAgaWYgKGVycm9ySW5kZXgxID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiBtc2c7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhlcmUgY291bGQgYW5vdGhlIG5lc3RlZCBcIm9yaWdpbmFsIGVycm9yXCJcclxuICAgIHZhciBlcnJvckluZGV4MiA9IG1zZy5pbmRleE9mKE9SSUdJTkFMX0VSUk9SX01FU1NBR0UsIGVycm9ySW5kZXgxICsgT1JJR0lOQUxfRVJST1JfTUVTU0FHRS5sZW5ndGgpO1xyXG5cclxuICAgIG1zZyA9IG1zZy5zdWJzdHJpbmcoKGVycm9ySW5kZXgyID4gLTEgPyBlcnJvckluZGV4MiA6IGVycm9ySW5kZXgxKSAgKyBPUklHSU5BTF9FUlJPUl9NRVNTQUdFLmxlbmd0aCk7XHJcblxyXG4gICAgLy8gc3RyaXAgJ3Vua25vd24gZXJyb3I6J1xyXG4gICAgdmFyIHVua25vd25FcnJvckluZGV4ID0gbXNnLmluZGV4T2YoVU5LTk9XTl9FUlJPUl9NRVNTQUdFKTtcclxuICAgIGlmICh1bmtub3duRXJyb3JJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIG1zZy5zdWJzdHJpbmcodW5rbm93bkVycm9ySW5kZXggKyBVTktOT1dOX0VSUk9SX01FU1NBR0UubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1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
|
|
290
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvaGVscGVyLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiRVJST1JfQ09ERVMiLCJTQ1JJUFRfRVJST1IiLCJVTktOT1dOX0VSUk9SIiwiQVNTRVJUX0VSUk9SIiwiUERGX0VSUk9SIiwiVkVSSUZZX0VSUk9SIiwiRUxFTUVOVF9OT1RfRk9VTkQiLCJGUkFNRV9OT1RfRk9VTkQiLCJVTktOT1dOX0NPTU1BTkRfRVJST1IiLCJTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRSIsIkVMRU1FTlRfTk9UX1ZJU0lCTEUiLCJFTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUiLCJMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFMiLCJFTEVNRU5UX1NUSUxMX0VYSVNUUyIsIkJST1dTRVJfSlNfRVhFQ1VURV9FUlJPUiIsIlRJTUVPVVQiLCJXSU5ET1dfTk9UX0ZPVU5EIiwiVU5FWFBFQ1RFRF9BTEVSVF9PUEVOIiwiTk9fQUxFUlRfT1BFTl9FUlJPUiIsIk1BSUxJTkFUT1JfRVJST1IiLCJBUFBJVU1fVU5SRUFDSEFCTEVfRVJST1IiLCJTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiIsIkNIUk9NRURSSVZFUl9FUlJPUiIsIldFQkRSSVZFUl9FUlJPUiIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJEQl9RVUVSWV9FUlJPUiIsIlNPQVBfRVJST1IiLCJTSEVMTF9FUlJPUiIsIk5PVF9JTVBMRU1FTlRFRF9FUlJPUiIsIlNFUklBTF9QT1JUX0VSUk9SIiwiSFRUUF9FUlJPUiIsIkVNQUlMX0VSUk9SIiwiTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiIsIkRFVklDRV9OT1RfRk9VTkQiLCJQQVJBTUVURVJTX0VSUk9SIiwiSU5WQUxJRF9DQVBBQklMSVRJRVMiLCJCUk9XU0VSX0NPTkZJR1VSQVRJT05fRVJST1IiLCJBUFBJVU1fQ09OTkVDVElPTl9FUlJPUiIsIkFQUElVTV9TRVNTSU9OX0VSUk9SIiwiQVBQSVVNX1NFU1NJT05fVElNRU9VVCIsIlNFTEVOSVVNX1NFU1NJT05fRVJST1IiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJTRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SIiwiVVJMX09QRU5fRVJST1IiLCJPUFRJT05fTk9UX0ZPVU5EIiwiQVRUUklCVVRFX05PVF9GT1VORCIsIkVMRU1FTlRfU1RBVEVfRVJST1IiLCJNT0JJTEVfQ09OVEVYVF9FUlJPUiIsIkFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUiIsIlRXSUxJT19FUlJPUiIsIkhPT0tfRVJST1IiLCJOT1RfU1VQUE9SVEVEIiwiQVNTRVJUX1BBU1NFRCIsIk1PRFVMRV9OT1RfRk9VTkQiLCJGSUxFX0JST1dTRV9FUlJPUiIsIkNTVl9FUlJPUiIsIkNSWVBUT19FUlJPUiIsIkROU19FUlJPUiIsIkNJUkNVTEFSX0VSUk9SIiwiWE1MX0VSUk9SIiwiQ0hBSV9FUlJPUl9DT0RFUyIsIkFzc2VydGlvbkVycm9yIiwiU0NSSVBUX0VSUk9SX0NPREVTIiwiVHlwZUVycm9yIiwiU3ludGF4RXJyb3IiLCJSZWZlcmVuY2VFcnJvciIsIm1vZHVsZSIsImV4cG9ydHMiLCJnZXRGYWlsdXJlRnJvbUVycm9yIiwiZXJyIiwiT3hFcnJvciIsImdldE94eWdlbkVycm9yIiwidHlwZSIsIm1lc3NhZ2UiLCJkYXRhIiwibG9jYXRpb24iLCJzdGFja3RyYWNlIiwiZ2V0RGJFcnJvck1lc3NhZ2UiLCJvZGJjRXJyb3JzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwiaXRlbSIsImNtZCIsImFyZ3MiLCJlcnJUeXBlIiwibmFtZSIsImluY2x1ZGVzIiwibWF0Y2hlcyIsIm1hdGNoIiwic3RhcnRzV2l0aCIsImV4dHJhY3RPcmlnaW5hbEVycm9yIiwiT1JJR0lOQUxfRVJST1JfTUVTU0FHRSIsImluc3BlY3QiLCJjb2RlIiwiZXJyTWVzc2FnZSIsInJlcGxhY2UiLCJveEVycm9yQ29kZSIsIkFTU0VSVCIsImluZGV4T2YiLCJWRVJJRlkiLCJjb25zb2xlIiwibG9nIiwiZ2V0U2VsZW5pdW1Jbml0RXJyb3IiLCJpZVpvb21FcnJvck1zZyIsInRvU3RyaW5nIiwiY2hyb21lRHJpdmVyTXNnIiwiZ2V0QXBwaXVtSW5pdEVycm9yIiwiZ2V0QXNzZXJ0RXJyb3IiLCJleHBlY3RlZCIsImFjdHVhbCIsImVycm9yQ29kZSIsIlVOS05PV05fRVJST1JfTUVTU0FHRSIsIm1zZyIsImVycm9ySW5kZXgxIiwiZXJyb3JJbmRleDIiLCJzdWJzdHJpbmciLCJ1bmtub3duRXJyb3JJbmRleCJdLCJtYXBwaW5ncyI6Ijs7OztBQWFBOzs7O0FBQ0EsTUFBTUEsSUFBSSxHQUFHQyxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFFQSxNQUFNQyxXQUFXLEdBQUc7QUFDaEJDLEVBQUFBLFlBQVksRUFBRSxjQURFO0FBRWhCQyxFQUFBQSxhQUFhLEVBQUUsZUFGQztBQUdoQkMsRUFBQUEsWUFBWSxFQUFFLGNBSEU7QUFJaEJDLEVBQUFBLFNBQVMsRUFBRSxXQUpLO0FBS2hCQyxFQUFBQSxZQUFZLEVBQUUsY0FMRTtBQU1oQkMsRUFBQUEsaUJBQWlCLEVBQUUsbUJBTkg7QUFPaEJDLEVBQUFBLGVBQWUsRUFBRSxpQkFQRDtBQVFoQkMsRUFBQUEscUJBQXFCLEVBQUUsdUJBUlA7QUFTaEJDLEVBQUFBLHVCQUF1QixFQUFFLHlCQVRUO0FBVWhCQyxFQUFBQSxtQkFBbUIsRUFBRSxxQkFWTDtBQVdoQkMsRUFBQUEsd0JBQXdCLEVBQUUsMEJBWFY7QUFZaEJDLEVBQUFBLGlDQUFpQyxFQUFFLG1DQVpuQjtBQWFoQkMsRUFBQUEsb0JBQW9CLEVBQUUsc0JBYk47QUFjaEJDLEVBQUFBLHdCQUF3QixFQUFFLDBCQWRWO0FBZWhCQyxFQUFBQSxPQUFPLEVBQUUsU0FmTztBQWdCaEJDLEVBQUFBLGdCQUFnQixFQUFFLGtCQWhCRjtBQWlCaEJDLEVBQUFBLHFCQUFxQixFQUFFLHVCQWpCUDtBQWtCaEJDLEVBQUFBLG1CQUFtQixFQUFFLHFCQWxCTDtBQW1CaEJDLEVBQUFBLGdCQUFnQixFQUFFLGtCQW5C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ZCxPQUFKLENBQVlQLHNCQUFaLENBQWxCOztBQUNBLE1BQUlzQixXQUFXLEtBQUssQ0FBQyxDQUFyQixFQUF3QjtBQUNwQixXQUFPRCxHQUFQO0FBQ0g7O0FBR0QsTUFBSUUsV0FBVyxHQUFHRixHQUFHLENBQUNkLE9BQUosQ0FBWVAsc0JBQVosRUFBb0NzQixXQUFXLEdBQUd0QixzQkFBc0IsQ0FBQ1osTUFBekUsQ0FBbEI7QUFFQWlDLEVBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDRyxTQUFKLENBQWMsQ0FBQ0QsV0FBVyxHQUFHLENBQUMsQ0FBZixHQUFtQkEsV0FBbkIsR0FBaUNELFdBQWxDLElBQWtEdEIsc0JBQXNCLENBQUNaLE1BQXZGLENBQU47QUFHQSxNQUFJcUMsaUJBQWlCLEdBQUdKLEdBQUcsQ0FBQ2QsT0FBSixDQUFZYSxxQkFBWixDQUF4Qjs7QUFDQSxNQUFJSyxpQkFBaUIsR0FBRyxDQUFDLENBQXpCLEVBQTRCO0FBQ3hCLFdBQU9KLEdBQUcsQ0FBQ0csU0FBSixDQUFjQyxpQkFBaUIsR0FBR0wscUJBQXFCLENBQUNoQyxNQUF4RCxDQUFQO0FBQ0g7O0FBRUQsU0FBT2lDLEdBQVA7QUFDSCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBtb2R1bGUgZm9yIGhhbmRsaW5nIGFuZCBjb252ZXJ0aW5nIHZhcmlvdXMgZXJyb3IgdHlwZXNcclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuL094eWdlbkVycm9yJztcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuXHJcbmNvbnN0IEVSUk9SX0NPREVTID0ge1xyXG4gICAgU0NSSVBUX0VSUk9SOiAnU0NSSVBUX0VSUk9SJyxcclxuICAgIFVOS05PV05fRVJST1I6ICdVTktOT1dOX0VSUk9SJyxcclxuICAgIEFTU0VSVF9FUlJPUjogJ0FTU0VSVF9FUlJPUicsXHJcbiAgICBQREZfRVJST1I6ICdQREZfRVJST1InLFxyXG4gICAgVkVSSUZZX0VSUk9SOiAnVkVSSUZZX0VSUk9SJyxcclxuICAgIEVMRU1FTlRfTk9UX0ZPVU5EOiAnRUxFTUVOVF9OT1RfRk9VTkQnLFxyXG4gICAgRlJBTUVfTk9UX0ZPVU5EOiAnRlJBTUVfTk9UX0ZPVU5EJyxcclxuICAgIFVOS05PV05fQ09NTUFORF9FUlJPUjogJ1VOS05PV05fQ09NTUFORF9FUlJPUicsXHJcbiAgICBTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRTogJ1NUQUxFX0VMRU1FTlRfUkVGRVJFTkNFJyxcclxuICAgIEVMRU1FTlRfTk9UX1ZJU0lCTEU6ICdFTEVNRU5UX05PVF9WSVNJQkxFJyxcclxuICAgIEVMRU1FTlRfTk9UX0lOVEVSQUNUQUJMRTogJ0VMRU1FTlRfTk9UX0lOVEVSQUNUQUJMRScsXHJcbiAgICBMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFM6ICdMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFMnLFxyXG4gICAgRUxFTUVOVF9TVElMTF9FWElTVFM6ICdFTEVNRU5UX1NUSUxMX0VYSVNUUycsXHJcbiAgICBCUk9XU0VSX0pTX0VYRUNVVEVfRVJST1I6ICdCUk9XU0VSX0pTX0VYRUNVVEVfRVJST1InLFxyXG4gICAgVElNRU9VVDogJ1RJTUVPVVQnLFxyXG4gICAgV0lORE9XX05PVF9GT1VORDogJ1dJTkRPV19OT1RfRk9VTkQnLFxyXG4gICAgVU5FWFBFQ1RFRF9BTEVSVF9PUEVOOiAnVU5FWFBFQ1RFRF9BTEVSVF9PUEVOJyxcclxuICAgIE5PX0FMRVJUX09QRU5fRVJST1I6ICdOT19BTEVSVF9PUEVOX0VSUk9SJyxcclxuICAgIE1BSUxJTkFUT1JfRVJST1I6ICdNQUlMSU5BVE9SX0VSUk9SJyxcclxuICAgIEFQUElVTV9VTlJFQUNIQUJMRV9FUlJPUjogJ0FQUElVTV9VTlJFQUNIQUJMRV9FUlJPUicsXHJcbiAgICBTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUjogJ1NFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SJyxcclxuICAgIENIUk9NRURSSVZFUl9FUlJPUjogJ0NIUk9NRURSSVZFUl9FUlJPUicsXHJcbiAgICBXRUJEUklWRVJfRVJST1I6ICdXRUJEUklWRVJfRVJST1InLFxyXG4gICAgREJfQ09OTkVDVElPTl9FUlJPUjogJ0RCX0NPTk5FQ1RJT05fRVJST1InLFxyXG4gICAgREJfUVVFUllfRVJST1I6ICdEQl9RVUVSWV9FUlJPUicsXHJcbiAgICBTT0FQX0VSUk9SOiAnU09BUF9FUlJPUicsXHJcbiAgICBTSEVMTF9FUlJPUjogJ1NIRUxMX0VSUk9SJyxcclxuICAgIE5PVF9JTVBMRU1FTlRFRF9FUlJPUjogJ05PVF9JTVBMRU1FTlRFRF9FUlJPUicsXHJcbiAgICBTRVJJQUxfUE9SVF9FUlJPUjogJ1NFUklBTF9QT1JUX0VSUk9SJyxcclxuICAgIEhUVFBfRVJST1I6ICdIVFRQX0VSUk9SJyxcclxuICAgIEVNQUlMX0VSUk9SOiAnRU1BSUxfRVJST1InLFxyXG4gICAgTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUjogJ01PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1InLFxyXG4gICAgREVWSUNFX05PVF9GT1VORDogJ0RFVklDRV9OT1RfRk9VTkQnLFxyXG4gICAgUEFSQU1FVEVSU19FUlJPUjogJ1BBUkFNRVRFUlNfRVJST1InLFxyXG4gICAgSU5WQUxJRF9DQVBBQklMSVRJRVM6ICdJTlZBTElEX0NBUEFCSUxJVElFUycsXHJcbiAgICBCUk9XU0VSX0NPTkZJR1VSQVRJT05fRVJST1I6ICdCUk9XU0VSX0NPTkZJR1VSQVRJT05fRVJST1InLFxyXG4gICAgQVBQSVVNX0NPTk5FQ1RJT05fRVJST1I6ICdBUFBJVU1fQ09OTkVDVElPTl9FUlJPUicsXHJcbiAgICBBUFBJVU1fU0VTU0lPTl9FUlJPUjogJ0FQUElVTV9TRVNTSU9OX0VSUk9SJyxcclxuICAgIEFQUElVTV9TRVNTSU9OX1RJTUVPVVQ6ICdBUFBJVU1fU0VTU0lPTl9USU1FT1VUJyxcclxuICAgIFNFTEVOSVVNX1NFU1NJT05fRVJST1I6ICdTRUxFTklVTV9TRVNTSU9OX0VSUk9SJyxcclxuICAgIFNFTEVOSVVNX1NFU1NJT05fVElNRU9VVDogJ1NFTEVOSVVNX1NFU1NJT05fVElNRU9VVCcsXHJcbiAgICBTRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SOiAnU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUicsXHJcbiAgICBVUkxfT1BFTl9FUlJPUjogJ1VSTF9PUEVOX0VSUk9SJyxcclxuICAgIE9QVElPTl9OT1RfRk9VTkQ6ICdPUFRJT05fTk9UX0ZPVU5EJyxcclxuICAgIEFUVFJJQlVURV9OT1RfRk9VTkQ6ICdBVFRSSUJVVEVfTk9UX0ZPVU5EJyxcclxuICAgIEVMRU1FTlRfU1RBVEVfRVJST1I6ICdFTEVNRU5UX1NUQVRFX0VSUk9SJyxcclxuICAgIE1PQklMRV9DT05URVhUX0VSUk9SOiAnTU9CSUxFX0NPTlRFWFRfRVJST1InLFxyXG4gICAgQVBQTElDQVRJT05fTk9UX0ZPVU5EX0VSUk9SOiAnQVBQTElDQVRJT05fTk9UX0ZPVU5EX0VSUk9SJyxcclxuICAgIFRXSUxJT19FUlJPUjogJ1RXSUxJT19FUlJPUicsXHJcbiAgICBIT09LX0VSUk9SOiAnSE9PS19FUlJPUicsXHJcbiAgICBOT1RfU1VQUE9SVEVEOiAnTk9UX1NVUFBPUlRFRCcsXHJcbiAgICBBU1NFUlRfUEFTU0VEOiAnQVNTRVJUX1BBU1NFRCcsXHJcbiAgICBNT0RVTEVfTk9UX0ZPVU5EOiAnTU9EVUxFX05PVF9GT1VORCcsXHJcbiAgICBGSUxFX0JST1dTRV9FUlJPUjogJ0ZJTEVfQlJPV1NFX0VSUk9SJyxcclxuICAgIENTVl9FUlJPUjogJ0NTVl9FUlJPUicsXHJcbiAgICBDUllQVE9fRVJST1I6ICdDUllQVE9fRVJST1InLFxyXG4gICAgRE5TX0VSUk9SOiAnRE5TX0VSUk9SJyxcclxuICAgIENJUkNVTEFSX0VSUk9SOiAnQ0lSQ1VMQVJfRVJST1InLFxyXG4gICAgWE1MX0VSUk9SOiAnWE1MX0VSUk9SJ1xyXG59O1xyXG5cclxuLy8gQ2hhaSB0byBPeHlnZW4gZXJyb3IgY29kZXMgbWFwcGluZ1xyXG5jb25zdCBDSEFJX0VSUk9SX0NPREVTID0ge1xyXG4gICAgQXNzZXJ0aW9uRXJyb3I6IEVSUk9SX0NPREVTLkFTU0VSVF9FUlJPUlxyXG59O1xyXG5cclxuLy8gR2VuZXJhbCBKYXZhU2NyaXB0IGVycm9yIGNvZGVzIG1hcHBpbmdcclxuY29uc3QgU0NSSVBUX0VSUk9SX0NPREVTID0ge1xyXG4gICAgVHlwZUVycm9yOiBFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsXHJcbiAgICBTeW50YXhFcnJvcjogRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLFxyXG4gICAgUmVmZXJlbmNlRXJyb3I6IEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUixcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgZ2V0RmFpbHVyZUZyb21FcnJvcjogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgaWYgKCFlcnIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIE94RXJyb3IpKSB7XHJcbiAgICAgICAgICAgIGVyciA9IHRoaXMuZ2V0T3h5Z2VuRXJyb3IoZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTogZXJyLnR5cGUsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxyXG4gICAgICAgICAgICBkYXRhOiBlcnIuZGF0YSxcclxuICAgICAgICAgICAgbG9jYXRpb246IGVyci5sb2NhdGlvbixcclxuICAgICAgICAgICAgc3RhY2t0cmFjZTogZXJyLnN0YWNrdHJhY2UgfHwgbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgZ2V0RGJFcnJvck1lc3NhZ2U6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGxldCBtZXNzYWdlID0gJyc7XHJcblxyXG4gICAgICAgIGlmIChlcnIgJiYgZXJyLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgbWVzc2FnZSArPSBlcnIubWVzc2FnZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgZXJyICYmXHJcbiAgICAgICAgICAgIGVyci5vZGJjRXJyb3JzICYmXHJcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZXJyLm9kYmNFcnJvcnMpICYmXHJcbiAgICAgICAgICAgIGVyci5vZGJjRXJyb3JzLmxlbmd0aCA+IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgZXJyLm9kYmNFcnJvcnMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAnOiAnICtpdGVtLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICB9LFxyXG4gICAgZ2V0T3h5Z2VuRXJyb3I6IGZ1bmN0aW9uKGVyciwgbW9kdWxlLCBjbWQsIGFyZ3MpIHtcclxuICAgICAgICAvLyByZXR1cm4gdGhlIGVycm9yIGFzIGlzIGlmIGl0IGhhcyBiZWVuIGFscmVhZHkgcHJvY2Vzc2VkXHJcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE94RXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVycjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlcnJUeXBlID0gZXJyLnR5cGUgfHwgZXJyLm5hbWUgfHwgdHlwZW9mIGVycjtcclxuICAgICAgICAvLyBoYW5kbGUgXCJDYW4ndCBjYWxsIDxjb21tYW5kPiBvbiBlbGVtZW50IHdpdGggc2VsZWN0b3IgPHNlbGVjdG9yPiBiZWNhdXNlIGVsZW1lbnQgd2Fzbid0IGZvdW5kXCJcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2JlY2F1c2UgZWxlbWVudCB3YXNuXFwndCBmb3VuZCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5FTEVNRU5UX05PVF9GT1VORCwgZXJyLm1lc3NhZ2UsIG51bGwsIHRydWUsIGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGhhbmRsZSBcImludmFsaWQgYXJndW1lbnQ6IFVuc3VwcG9ydGVkIGxvY2F0b3Igc3RyYXRlZ3k6IC1hbmRyb2lkIHVpYXV0b21hdG9yXCIgZm9yIG1vYmlsZS5cclxuICAgICAgICAvLyB1c3VhbGx5IGR1ZSB0byBub3QgdXNpbmcgdGhlIGNvcnJlY3QgY29udGV4dFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbnN1cHBvcnRlZCBsb2NhdG9yIHN0cmF0ZWd5JykpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBlcnIubWVzc2FnZS5tYXRjaCgvaW52YWxpZCBhcmd1bWVudDogKC4qKS9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLk1PQklMRV9DT05URVhUX0VSUk9SLCAobWF0Y2hlcy5sZW5ndGggPT09IDIgPyBtYXRjaGVzWzFdIDogZXJyLm1lc3NhZ2UpICtcclxuICAgICAgICAgICAgICAgICcuIE1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IG1vYmlsZSBjb250ZXh0LiBTZWUgbW9iLnNldE5hdGl2ZUNvbnRleHQgYW5kIG1vYi5zZXRXZWJWaWV3Q29udGV4dC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaGFuZGxlIFwiaW52YWxpZCBzZWxlY3RvcjogVW5hYmxlIHRvIGxvY2F0ZSBhbiBlbGVtZW50IHdpdGggdGhlIHhwYXRoIGV4cHJlc3Npb25cIlxyXG4gICAgICAgIC8vIHVzdWFsbHkgZHVlIHRvIGludmFsaWQgeHBhdGhcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGxvY2F0ZSBhbiBlbGVtZW50IHdpdGggdGhlIHhwYXRoIGV4cHJlc3Npb24nKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oVGhlIHN0cmluZyAnLionIGlzIG5vdCBhIHZhbGlkIFhQYXRoIGV4cHJlc3Npb24uKS9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDIgPyBtYXRjaGVzWzFdIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW52YWxpZCBjc3MgbG9jYXRvciBvbiBDaHJvbWUvSUUuIGUuZy4gY3NzPSNcXDpwMFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdBbiBpbnZhbGlkIG9yIGlsbGVnYWwgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsICdBbiBpbnZhbGlkIG9yIGlsbGVnYWwgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbnZhbGlkIGNzcyBsb2NhdG9yIG9uIEZpcmVmb3guIGUuZy4gY3NzPSNcXDpwMFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0dpdmVuIGNzcyBzZWxlY3RvciBleHByZXNzaW9uJykpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBlcnIubWVzc2FnZS5tYXRjaCgvKEdpdmVuIGNzcyBzZWxlY3RvciBleHByZXNzaW9uIFwiLipcIiBpcyBpbnZhbGlkKS4qL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLCAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMiA/IG1hdGNoZXNbMV0gOiBlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBhdXRvbWF0ZSBDaHJvbWUgdmVyc2lvbicpIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdObyBDaHJvbWVkcml2ZXIgZm91bmQgdGhhdCBjYW4gYXV0b21hdGUnKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaGFuZGxlIHZhcmlvdXMgdHlwZXMgb2YgJ09yaWdpbmFsIGVycm9yJ1xyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKE9SSUdJTkFMX0VSUk9SX01FU1NBR0UpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5VTktOT1dOX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSksIHV0aWwuaW5zcGVjdChlcnIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW52YWxpZCBVUkwgaW4gb3BlbiBjb21tYW5kXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0ludmFsaWQgVVJMJykpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBlcnIubWVzc2FnZS5tYXRjaCgvKCBJbnZhbGlkIFVSTDogLiokKS4qL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLCAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMiA/IG1hdGNoZXNbMV0gOiBlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB1c3VhbGx5IG9uIG1vYmlsZSBDaHJvbWUgd2hlbiBlbGVtZW50IGlzIG92ZXJsYXBwZWQgYnkgYW5vdGhlciBlbGVtZW50XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnZWxlbWVudCBjbGljayBpbnRlcmNlcHRlZCcpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goL2VsZW1lbnQgY2xpY2sgaW50ZXJjZXB0ZWQ6ICguKikvaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5FTEVNRU5UX05PVF9WSVNJQkxFLCAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMiA/IG1hdGNoZXNbMV0gOiBlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB1c3VhbGx5IGJlY2F1c2UgU2VsZW5pdW0gaGFzIGtpbGxlZCB0aGUgc2Vzc2lvbiBkdWUgdG8gZXhjZWVkaW5nICctdGltZW91dCcgdGltZW91dFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ05vIGFjdGl2ZSBzZXNzaW9uIHdpdGggSUQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fU0VTU0lPTl9FUlJPUiwgJ0V4ZWN1dGlvbiB0aW1lIGV4Y2VlZGVkIHRoZSB0aW1lb3V0IHNldCBieSBTZWxlbml1bScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB3aGVuIGRyaXZlciAoSUVEcml2ZXJTZXJ2ZXIsIENocm9tZURyaXZlciwgZXRjKSBjcmFzaGVzXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgPT09ICdqYXZhLm5ldC5Db25uZWN0RXhjZXB0aW9uOiBDb25uZWN0aW9uIHJlZnVzZWQ6IGNvbm5lY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5XRUJEUklWRVJfRVJST1IsICdUaGUgdW5kZXJseWluZyBXZWJEcml2ZXIgc2VlbXMgdG8gaGF2ZSBjcmFzaGVkOiAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdGFsZSBlbGVtZW50IHJlZmVyZW5jZVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5uYW1lICYmIGVyci5uYW1lLmluY2x1ZGVzKCdzdGFsZSBlbGVtZW50IHJlZmVyZW5jZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TVEFMRV9FTEVNRU5UX1JFRkVSRU5DRSwgZXJyLm5hbWUgKyAnICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5jb2RlICYmIGVyci5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLk1PRFVMRV9OT1RfRk9VTkQsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gIHdoZW4gZG9pbmcgYW4gb3BlcmF0aW9uIG9uIGFuIGVsZW1lbnQgKGUuZy4gY2xpY2spIGJ1dCB0aGUgd2luZG93IHdhcyBhbHJlYWR5IGNsb3NlZFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdubyBzdWNoIHdpbmRvdycpICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCd0YXJnZXQgd2luZG93IGFscmVhZHkgY2xvc2VkJykgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3dlYiB2aWV3IG5vdCBmb3VuZCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5XSU5ET1dfTk9UX0ZPVU5ELCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGV4YW1wbGU6IFRoZSBlbGVtZW50IHdpdGggc2VsZWN0b3IgKioqIHlvdSB0cnlpbmcgdG8gcGFzcyBpbnRvIHRoZSBleGVjdXRlIG1ldGhvZCB3YXNuJ3QgZm91bmRcclxuICAgICAgICAvLyB3aGVuIGVsZW1lbnQgd2FzIGRlbGV0ZWQgZnJvbSBET01cclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygneW91IHRyeWluZyB0byBwYXNzIGludG8gdGhlIGV4ZWN1dGUgbWV0aG9kIHdhc25cXCd0IGZvdW5kJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX0ZPVU5ELCAgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB3aGVuIGRvaW5nIGFuIG9wZXJhdGlvbiBvbiBhbiBlbGVtZW50IHJlZmVyZW5jZSAoZS5nLiBjbGljaykgYnV0IHRoZSBwYWdlIHdhcyBhbHJlYWR5IGNoYW5nZWRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnZWxlbWVudCBub3QgaW50ZXJhY3RhYmxlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX0lOVEVSQUNUQUJMRSwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbnZhbGlkIHNlbGVjdG9yOiBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOiBVbmFibGUgdG8gY29tcGlsZSBzZWxlY3RvciAuLi5cclxuICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAgICAgZXJyLm5hbWUgJiZcclxuICAgICAgICAgICAgZXJyLm5hbWUgPT09ICdpbnZhbGlkIHNlbGVjdG9yJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJlcXVlc3RFcnJvcjogVGltZW91dCBhd2FpdGluZyAncmVxdWVzdCcgZm9yIDMxMDAwMG1zLCBuYW1lOiAnVGltZW91dEVycm9yJ1xyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdUaW1lb3V0IGF3YWl0aW5nIFxcJ3JlcXVlc3RcXCcgZm9yJykpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyTWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoXHJcbiAgICAgICAgICAgICAgICAnVGltZW91dCBhd2FpdGluZyBcXCdyZXF1ZXN0XFwnIGZvcicsXHJcbiAgICAgICAgICAgICAgICAnQ291bGRuXFwndCBnZXQgYSByZXNwb25zZSBmcm9tIFNlbGVuaXVtL1dlYkRyaXZlciB3aXRoaW4nXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihtb2R1bGUgPT09ICd3ZWInID8gRVJST1JfQ09ERVMuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIDogRVJST1JfQ09ERVMuQVBQSVVNX1NFU1NJT05fVElNRU9VVCwgZXJyTWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVyciAmJiBlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnc29ja2V0IGhhbmcgdXAnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IobW9kdWxlID09PSAnd2ViJyA/IEVSUk9SX0NPREVTLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCA6IEVSUk9SX0NPREVTLkFQUElVTV9TRVNTSU9OX1RJTUVPVVQsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyciAmJiBlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVGltZWQgb3V0IHJlY2VpdmluZyBtZXNzYWdlIGZyb20gcmVuZGVyZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihtb2R1bGUgPT09ICd3ZWInID8gRVJST1JfQ09ERVMuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIDogRVJST1JfQ09ERVMuQVBQSVVNX1NFU1NJT05fVElNRU9VVCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgQ2hhaSBlcnJvciBjb2RlXHJcbiAgICAgICAgdmFyIG94RXJyb3JDb2RlID0gQ0hBSV9FUlJPUl9DT0RFU1tlcnJUeXBlXTtcclxuICAgICAgICBpZiAob3hFcnJvckNvZGUpIHtcclxuICAgICAgICAgICAgLy8gdGhyb3cgbm9uLWZhdGFsIGVycm9yIGlmIGl0J3MgYSBcInZlcmlmeVwiIG1vZHVsZSBvciBtZXRob2QgXHJcbiAgICAgICAgICAgIGlmIChveEVycm9yQ29kZSA9PT0gRVJST1JfQ09ERVMuQVNTRVJUICYmXHJcblx0XHRcdFx0KG1vZHVsZSA9PT0gJ3ZlcmlmeScgfHwgY21kLmluZGV4T2YoJ3ZlcmlmeScpID09PSAwKSkgeyAvLyB2ZXJpZnkuKiwgKi52ZXJpZnkqXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVkVSSUZZLCBlcnIubWVzc2FnZSwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihveEVycm9yQ29kZSwgZXJyLm1lc3NhZ2UsIG51bGwsIHRydWUsIGVycik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSBKYXZhU2NyaXB0IGVycm9yIGNvZGVcclxuICAgICAgICBveEVycm9yQ29kZSA9IFNDUklQVF9FUlJPUl9DT0RFU1tlcnJUeXBlXTtcclxuICAgICAgICBpZiAob3hFcnJvckNvZGUpIHtcclxuICAgICAgICAgICAgLy8gdGhyb3cgbm9uLWZhdGFsIGVycm9yIGlmIGl0J3MgYSBcInZlcmlmeVwiIG1vZHVsZSBvciBtZXRob2QgXHJcbiAgICAgICAgICAgIGlmIChveEVycm9yQ29kZSA9PT0gRVJST1JfQ09ERVMuQVNTRVJUICYmXHJcblx0XHRcdFx0KG1vZHVsZSA9PT0gJ3ZlcmlmeScgfHwgY21kLmluZGV4T2YoJ3ZlcmlmeScpID09PSAwKSkgeyAvLyB2ZXJpZnkuKiwgKi52ZXJpZnkqXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVkVSSUZZLCBlcnIubWVzc2FnZSwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihveEVycm9yQ29kZSwgZXJyLm1lc3NhZ2UgfHwgbnVsbCwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCc9PT0gRXJyb3IgRGV0YWlscyA9PT0nKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVHlwZTogJyArIGVyci50eXBlICsgJyBOYW1lOiAnICsgZXJyLm5hbWUgKyAnIENvZGU6ICcgKyBlcnIuY29kZSArICcgTXNnOiAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHV0aWwuaW5zcGVjdChlcnIpKTtcclxuXHJcbiAgICAgICAgY29uc3QgZXJyTWVzc2FnZSA9IGVyci5tZXNzYWdlID8gYCR7ZXJyVHlwZX06ICR7ZXJyLm1lc3NhZ2V9YCA6IGAke2VyclR5cGV9YDtcclxuICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVU5LTk9XTl9FUlJPUiwgZXJyTWVzc2FnZSwgdXRpbC5pbnNwZWN0KGVyciksIHRydWUsIGVycik7XHJcbiAgICB9LFxyXG4gICAgZ2V0U2VsZW5pdW1Jbml0RXJyb3I6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSkge1xyXG4gICAgICAgICAgICB2YXIgaWVab29tRXJyb3JNc2cgPSBlcnIubWVzc2FnZS5tYXRjaCgvKFVuZXhwZWN0ZWQgZXJyb3IgbGF1bmNoaW5nIEludGVybmV0IEV4cGxvcmVyXFwuIEJyb3dzZXIgem9vbSBsZXZlbCB3YXMgc2V0IHRvIFxcZCslXFwuIEl0IHNob3VsZCBiZSBzZXQgdG8gXFxkKyUpL2dtKTtcclxuICAgICAgICAgICAgaWYgKGllWm9vbUVycm9yTXNnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SLCBpZVpvb21FcnJvck1zZy50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gY3JlYXRlIG5ldyBzZXJ2aWNlOiBDaHJvbWVEcml2ZXJTZXJ2aWNlJykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGVyci5tZXNzYWdlLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBjcmVhdGUgbmV3IHNlcnZpY2U6JykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiwgZXJyLm1lc3NhZ2UsIG51bGwsIHRydWUsIGVycik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBjaHJvbWVEcml2ZXJNc2cgPSBlcnIubWVzc2FnZS5tYXRjaCgvKFRoaXMgdmVyc2lvbiBvZiBDaHJvbWVEcml2ZXIgb25seSBzdXBwb3J0cyBDaHJvbWUgdmVyc2lvbiBbMC05XSopL2dtKTtcclxuICAgICAgICAgICAgaWYgKGNocm9tZURyaXZlck1zZykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgY2hyb21lRHJpdmVyTXNnLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2Nhbm5vdCBmaW5kIENocm9tZSBiaW5hcnknKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCAnQ2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFRlVTRUQnIHx8IGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgfHwgZXJyLmNvZGUgPT09ICdFTk9URk9VTkQnIHx8IGVyci5tZXNzYWdlID09PSAnRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uLlxcbnNvY2tldCBoYW5nIHVwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fVU5SRUFDSEFCTEVfRVJST1IsIFwiQ291bGRuJ3QgY29ubmVjdCB0byBTZWxlbml1bSBzZXJ2ZXJcIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSA9PT0gJ0FsbCBtaW51dGVzIGZvciB0aGlzIG9yZ2FuaXphdGlvbiBoYXMgYmVlbiBleGF1c3RlZCcgfHxcclxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT09ICc0MDEgVW5hdXRob3JpemVkJyB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24uJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1IsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gY3JlYXRlIG5ldyBzZXJ2aWNlOicpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SLCBlcnIubWVzc2FnZSArICdcXG5cXG5UaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBtaXNzaW5nIENocm9tZURyaXZlci9JRURyaXZlclNlcnZlci9HZWNrb0RyaXZlciBiaW5hcnkuXFxuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnPT09IEVycm9yIERldGFpbHMgPT09Jyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1R5cGU6ICcgKyBlcnIudHlwZSArICcgTmFtZTogJyArIGVyci5uYW1lICsgJyBDb2RlOiAnICsgZXJyLmNvZGUgKyAnIE1zZzogJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh1dGlsLmluc3BlY3QoZXJyKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5VTktOT1dOX0VSUk9SLCBlcnIudHlwZSArICc6ICcgKyBlcnIubWVzc2FnZSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgfSxcclxuICAgIGdldEFwcGl1bUluaXRFcnJvcjogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdjYW5ub3QgZmluZCBDaHJvbWUgYmluYXJ5JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgJ0Nhbm5vdCBmaW5kIENocm9tZSBiaW5hcnknKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRUZVU0VEJyB8fCBlcnIuY29kZSA9PT0gJ0VDT05OUkVTRVQnIHx8IGVyci5jb2RlID09PSAnRU5PVEZPVU5EJyB8fCBlcnIubWVzc2FnZSA9PT0gJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi5cXG5zb2NrZXQgaGFuZyB1cCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUElVTV9VTlJFQUNIQUJMRV9FUlJPUiwgXCJDb3VsZG4ndCBjb25uZWN0IHRvIEFwcGl1bSBzZXJ2ZXJcIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnQ291bGQgbm90IGZpbmQgYSBjb25uZWN0ZWQgQW5kcm9pZCBkZXZpY2UnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuREVWSUNFX05PVF9GT1VORCwgJ0NvdWxkIG5vdCBmaW5kIGEgY29ubmVjdGVkIEFuZHJvaWQgZGV2aWNlJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGF1dG9tYXRlIENocm9tZSB2ZXJzaW9uJykpIHsgICAgICAgICAgLy8gYXBwaXVtIDw9IDEuMTRcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdObyBDaHJvbWVkcml2ZXIgZm91bmQgdGhhdCBjYW4gYXV0b21hdGUnKSkgeyAgICAvLyBhcHBpdW0gPj0gMS4xNVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBmaW5kIGFuIGFjdGl2ZSBkZXZpY2Ugb3IgZW11bGF0b3Igd2l0aCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5ERVZJQ0VfTk9UX0ZPVU5ELCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2lzIG5vdCBpbnN0YWxsZWQgb24gZGV2aWNlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlID09PSAnQWxsIG1pbnV0ZXMgZm9yIHRoaXMgb3JnYW5pemF0aW9uIGhhcyBiZWVuIGV4YXVzdGVkJyB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gJzQwMSBVbmF1dGhvcml6ZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BUFBJVU1fQ09OTkVDVElPTl9FUlJPUiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgKFxyXG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0EgbmV3IHNlc3Npb24gY291bGQgbm90IGJlIGNyZWF0ZWQuJykgfHxcclxuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24uJykpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BUFBJVU1fU0VTU0lPTl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpLCBudWxsLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCc9PT0gRXJyb3IgRGV0YWlscyA9PT0nKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVHlwZTogJyArIGVyci50eXBlICsgJyBOYW1lOiAnICsgZXJyLm5hbWUgKyAnIENvZGU6ICcgKyBlcnIuY29kZSArICcgTXNnOiAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHV0aWwuaW5zcGVjdChlcnIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgfSxcclxuICAgIGdldEFzc2VydEVycm9yOiBmdW5jdGlvbihleHBlY3RlZCwgYWN0dWFsKSB7XHJcbiAgICAgICAgYWN0dWFsID0gYWN0dWFsLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxuL2csICdcXFxcbicpO1xyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BU1NFUlRfRVJST1IsIGBFeHBlY3RlZDogXCIke2V4cGVjdGVkfVwiLiBHb3Q6IFwiJHthY3R1YWx9XCJgKTtcclxuICAgIH0sXHJcbiAgICBlcnJvckNvZGU6IEVSUk9SX0NPREVTXHJcbn07XHJcblxyXG5jb25zdCBPUklHSU5BTF9FUlJPUl9NRVNTQUdFID0gJ09yaWdpbmFsIGVycm9yOiAnO1xyXG5jb25zdCBVTktOT1dOX0VSUk9SX01FU1NBR0UgPSAndW5rbm93biBlcnJvcjogJztcclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RPcmlnaW5hbEVycm9yKG1zZykge1xyXG4gICAgaWYgKCFtc2cpIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGVycm9ySW5kZXgxID0gbXNnLmluZGV4T2YoT1JJR0lOQUxfRVJST1JfTUVTU0FHRSk7XHJcbiAgICBpZiAoZXJyb3JJbmRleDEgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIG1zZztcclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGVyZSBjb3VsZCBhbm90aGUgbmVzdGVkIFwib3JpZ2luYWwgZXJyb3JcIlxyXG4gICAgdmFyIGVycm9ySW5kZXgyID0gbXNnLmluZGV4T2YoT1JJR0lOQUxfRVJST1JfTUVTU0FHRSwgZXJyb3JJbmRleDEgKyBPUklHSU5BTF9FUlJPUl9NRVNTQUdFLmxlbmd0aCk7XHJcblxyXG4gICAgbXNnID0gbXNnLnN1YnN0cmluZygoZXJyb3JJbmRleDIgPiAtMSA/IGVycm9ySW5kZXgyIDogZXJyb3JJbmRleDEpICArIE9SSUdJTkFMX0VSUk9SX01FU1NBR0UubGVuZ3RoKTtcclxuXHJcbiAgICAvLyBzdHJpcCAndW5rbm93biBlcnJvcjonXHJcbiAgICB2YXIgdW5rbm93bkVycm9ySW5kZXggPSBtc2cuaW5kZXhPZihVTktOT1dOX0VSUk9SX01FU1NBR0UpO1xyXG4gICAgaWYgKHVua25vd25FcnJvckluZGV4ID4gLTEpIHtcclxuICAgICAgICByZXR1cm4gbXNnLnN1YnN0cmluZyh1bmtub3duRXJyb3JJbmRleCArIFVOS05PV05fRVJST1JfTUVTU0FHRS5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtc2c7XHJcbn1cclxuIl19
|
package/build/index.js
CHANGED
|
@@ -15,29 +15,41 @@ Object.defineProperty(exports, "ReportAggregator", {
|
|
|
15
15
|
return _ReportAggregator.default;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
|
-
|
|
19
|
-
Object.defineProperty(exports, "moduleRequire", {
|
|
18
|
+
Object.defineProperty(exports, "util", {
|
|
20
19
|
enumerable: true,
|
|
21
20
|
get: function () {
|
|
22
|
-
return
|
|
21
|
+
return _util.default;
|
|
23
22
|
}
|
|
24
23
|
});
|
|
25
|
-
Object.defineProperty(exports, "
|
|
24
|
+
Object.defineProperty(exports, "moduleRequire", {
|
|
26
25
|
enumerable: true,
|
|
27
26
|
get: function () {
|
|
28
|
-
return
|
|
27
|
+
return _moduleRequire.default;
|
|
29
28
|
}
|
|
30
29
|
});
|
|
30
|
+
exports.cliutil = exports.Runners = void 0;
|
|
31
|
+
|
|
31
32
|
require("source-map-support/register");
|
|
33
|
+
|
|
32
34
|
var Runners = _interopRequireWildcard(require("./runners"));
|
|
35
|
+
|
|
33
36
|
exports.Runners = Runners;
|
|
37
|
+
|
|
34
38
|
var _launcher = _interopRequireDefault(require("./lib/launcher"));
|
|
39
|
+
|
|
35
40
|
var _ReportAggregator = _interopRequireDefault(require("./reporter/ReportAggregator"));
|
|
41
|
+
|
|
36
42
|
var _util = _interopRequireDefault(require("./lib/util"));
|
|
43
|
+
|
|
37
44
|
var cliutil = _interopRequireWildcard(require("./lib/cli-util"));
|
|
45
|
+
|
|
38
46
|
exports.cliutil = cliutil;
|
|
47
|
+
|
|
39
48
|
var _moduleRequire = _interopRequireDefault(require("./lib/moduleRequire"));
|
|
49
|
+
|
|
40
50
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
51
|
+
|
|
41
52
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
53
|
+
|
|
42
54
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
43
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSdW5uZXJzIGZyb20gJy4vcnVubmVycyc7XHJcbmltcG9ydCBMYXVuY2hlciBmcm9tICcuL2xpYi9sYXVuY2hlcic7XHJcbmltcG9ydCBSZXBvcnRBZ2dyZWdhdG9yIGZyb20gJy4vcmVwb3J0ZXIvUmVwb3J0QWdncmVnYXRvcic7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vbGliL3V0aWwnO1xyXG5pbXBvcnQgKiBhcyBjbGl1dGlsIGZyb20gJy4vbGliL2NsaS11dGlsJztcclxuaW1wb3J0IG1vZHVsZVJlcXVpcmUgZnJvbSAnLi9saWIvbW9kdWxlUmVxdWlyZSc7XHJcblxyXG5leHBvcnQge1xyXG4gICAgUnVubmVycyxcclxuICAgIExhdW5jaGVyLFxyXG4gICAgUmVwb3J0QWdncmVnYXRvcixcclxuICAgIHV0aWwsXHJcbiAgICBjbGl1dGlsLFxyXG4gICAgbW9kdWxlUmVxdWlyZVxyXG59OyJdfQ==
|