oxygen-cli 1.22.0 → 1.99.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -50
- package/build/core/OxygenCore.js +56 -145
- package/build/errors/OxygenError.js +5 -15
- package/build/errors/helper.js +45 -49
- package/build/index.js +14 -6
- package/build/lib/cli-util.js +19 -19
- package/build/lib/cli.js +4 -2
- package/build/lib/parallel-launcher.js +333 -0
- package/build/lib/param-manager.js +66 -47
- package/build/lib/util.js +38 -9
- package/build/ox_modules/index.js +1 -97
- package/build/ox_modules/module-assert.js +19 -9
- package/build/ox_modules/module-dns.js +220 -0
- package/build/ox_modules/module-http.js +39 -51
- package/build/ox_modules/module-shell.js +19 -75
- package/build/ox_modules/module-utils.js +1 -108
- package/build/ox_modules/utils.js +1 -357
- package/build/reporter/FileReporterBase.js +5 -5
- package/build/reporter/ReportAggregator.js +127 -4
- package/build/runners/WorkerProcess.js +15 -28
- package/build/runners/index.js +2 -6
- package/build/runners/oxygen/OxygenWorker.js +8 -8
- package/build/runners/oxygen/index.js +17 -18
- package/build/runners/oxygen/worker.js +10 -8
- package/package.json +12 -46
- package/build/lib/img-merge.js +0 -163
- package/build/ox_modules/module-db.js +0 -146
- package/build/ox_modules/module-email.js +0 -212
- package/build/ox_modules/module-eyes.js +0 -189
- package/build/ox_modules/module-mailinator.js +0 -207
- package/build/ox_modules/module-mob/commands/alertAccept.js +0 -35
- package/build/ox_modules/module-mob/commands/alertDismiss.js +0 -35
- package/build/ox_modules/module-mob/commands/assertAlert.js +0 -56
- package/build/ox_modules/module-mob/commands/assertText.js +0 -45
- package/build/ox_modules/module-mob/commands/assertTitle.js +0 -43
- package/build/ox_modules/module-mob/commands/assertValue.js +0 -66
- package/build/ox_modules/module-mob/commands/back.js +0 -27
- package/build/ox_modules/module-mob/commands/clear.js +0 -40
- package/build/ox_modules/module-mob/commands/click.js +0 -35
- package/build/ox_modules/module-mob/commands/clickHidden.js +0 -52
- package/build/ox_modules/module-mob/commands/clickLong.js +0 -34
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +0 -37
- package/build/ox_modules/module-mob/commands/closeApp.js +0 -27
- package/build/ox_modules/module-mob/commands/debug.js +0 -26
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +0 -38
- package/build/ox_modules/module-mob/commands/enableNetwork.js +0 -75
- package/build/ox_modules/module-mob/commands/execute.js +0 -32
- package/build/ox_modules/module-mob/commands/findElement.js +0 -36
- package/build/ox_modules/module-mob/commands/findElements.js +0 -39
- package/build/ox_modules/module-mob/commands/getAlertText.js +0 -31
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +0 -26
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +0 -66
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +0 -26
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +0 -26
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +0 -57
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +0 -27
- package/build/ox_modules/module-mob/commands/getLocation.js +0 -32
- package/build/ox_modules/module-mob/commands/getSource.js +0 -26
- package/build/ox_modules/module-mob/commands/getText.js +0 -36
- package/build/ox_modules/module-mob/commands/getTitle.js +0 -24
- package/build/ox_modules/module-mob/commands/getUrl.js +0 -28
- package/build/ox_modules/module-mob/commands/getValue.js +0 -50
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +0 -27
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +0 -33
- package/build/ox_modules/module-mob/commands/index.js +0 -594
- package/build/ox_modules/module-mob/commands/installApp.js +0 -28
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +0 -28
- package/build/ox_modules/module-mob/commands/isCheckable.js +0 -31
- package/build/ox_modules/module-mob/commands/isChecked.js +0 -31
- package/build/ox_modules/module-mob/commands/isClickable.js +0 -31
- package/build/ox_modules/module-mob/commands/isExist.js +0 -36
- package/build/ox_modules/module-mob/commands/isSelected.js +0 -36
- package/build/ox_modules/module-mob/commands/isVisible.js +0 -36
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +0 -27
- package/build/ox_modules/module-mob/commands/launchApp.js +0 -26
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +0 -30
- package/build/ox_modules/module-mob/commands/open.js +0 -43
- package/build/ox_modules/module-mob/commands/pause.js +0 -27
- package/build/ox_modules/module-mob/commands/removeApp.js +0 -28
- package/build/ox_modules/module-mob/commands/resetApp.js +0 -26
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +0 -86
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +0 -40
- package/build/ox_modules/module-mob/commands/select.js +0 -54
- package/build/ox_modules/module-mob/commands/selectFrame.js +0 -53
- package/build/ox_modules/module-mob/commands/selectWindow.js +0 -149
- package/build/ox_modules/module-mob/commands/sendKeys.js +0 -84
- package/build/ox_modules/module-mob/commands/setContext.js +0 -28
- package/build/ox_modules/module-mob/commands/setNativeContext.js +0 -26
- package/build/ox_modules/module-mob/commands/setTimeout.js +0 -33
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +0 -39
- package/build/ox_modules/module-mob/commands/shake.js +0 -27
- package/build/ox_modules/module-mob/commands/smsClickLink.js +0 -32
- package/build/ox_modules/module-mob/commands/smsGetText.js +0 -45
- package/build/ox_modules/module-mob/commands/swipe.js +0 -58
- package/build/ox_modules/module-mob/commands/swipeElement.js +0 -58
- package/build/ox_modules/module-mob/commands/swipeScreen.js +0 -56
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +0 -27
- package/build/ox_modules/module-mob/commands/tap.js +0 -34
- package/build/ox_modules/module-mob/commands/type.js +0 -67
- package/build/ox_modules/module-mob/commands/unlockPattern.js +0 -92
- package/build/ox_modules/module-mob/commands/waitForExist.js +0 -29
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +0 -42
- package/build/ox_modules/module-mob/commands/waitForVisible.js +0 -28
- package/build/ox_modules/module-mob.js +0 -699
- package/build/ox_modules/module-pdf.js +0 -328
- package/build/ox_modules/module-proxy.js +0 -324
- package/build/ox_modules/module-serial.js +0 -187
- package/build/ox_modules/module-soap.js +0 -260
- package/build/ox_modules/module-twilio.js +0 -192
- package/build/ox_modules/module-web/commands/alertAccept.js +0 -35
- package/build/ox_modules/module-web/commands/alertDismiss.js +0 -35
- package/build/ox_modules/module-web/commands/assertAlert.js +0 -55
- package/build/ox_modules/module-web/commands/assertExist.js +0 -28
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +0 -51
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +0 -45
- package/build/ox_modules/module-web/commands/assertText.js +0 -45
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +0 -56
- package/build/ox_modules/module-web/commands/assertTextPresent.js +0 -52
- package/build/ox_modules/module-web/commands/assertTitle.js +0 -42
- package/build/ox_modules/module-web/commands/assertValue.js +0 -44
- package/build/ox_modules/module-web/commands/back.js +0 -27
- package/build/ox_modules/module-web/commands/clear.js +0 -41
- package/build/ox_modules/module-web/commands/click.js +0 -112
- package/build/ox_modules/module-web/commands/clickHidden.js +0 -79
- package/build/ox_modules/module-web/commands/closeWindow.js +0 -25
- package/build/ox_modules/module-web/commands/debug.js +0 -25
- package/build/ox_modules/module-web/commands/deleteCookies.js +0 -22
- package/build/ox_modules/module-web/commands/deselect.js +0 -34
- package/build/ox_modules/module-web/commands/doubleClick.js +0 -65
- package/build/ox_modules/module-web/commands/dragAndDrop.js +0 -36
- package/build/ox_modules/module-web/commands/execute.js +0 -36
- package/build/ox_modules/module-web/commands/fileBrowse.js +0 -72
- package/build/ox_modules/module-web/commands/findElement.js +0 -35
- package/build/ox_modules/module-web/commands/findElements.js +0 -38
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +0 -24
- package/build/ox_modules/module-web/commands/getAlertText.js +0 -30
- package/build/ox_modules/module-web/commands/getAttribute.js +0 -38
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +0 -34
- package/build/ox_modules/module-web/commands/getCookies.js +0 -23
- package/build/ox_modules/module-web/commands/getCssValue.js +0 -38
- package/build/ox_modules/module-web/commands/getElementCount.js +0 -29
- package/build/ox_modules/module-web/commands/getHTML.js +0 -30
- package/build/ox_modules/module-web/commands/getSource.js +0 -26
- package/build/ox_modules/module-web/commands/getText.js +0 -36
- package/build/ox_modules/module-web/commands/getTitle.js +0 -22
- package/build/ox_modules/module-web/commands/getUrl.js +0 -26
- package/build/ox_modules/module-web/commands/getValue.js +0 -43
- package/build/ox_modules/module-web/commands/getWindowHandles.js +0 -26
- package/build/ox_modules/module-web/commands/getWindowSize.js +0 -26
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +0 -51
- package/build/ox_modules/module-web/commands/index.js +0 -634
- package/build/ox_modules/module-web/commands/isAlertPresent.js +0 -31
- package/build/ox_modules/module-web/commands/isChecked.js +0 -30
- package/build/ox_modules/module-web/commands/isExist.js +0 -36
- package/build/ox_modules/module-web/commands/isSelected.js +0 -35
- package/build/ox_modules/module-web/commands/isVisible.js +0 -36
- package/build/ox_modules/module-web/commands/makeVisible.js +0 -74
- package/build/ox_modules/module-web/commands/maximizeWindow.js +0 -24
- package/build/ox_modules/module-web/commands/minimizeWindow.js +0 -24
- package/build/ox_modules/module-web/commands/newWindow.js +0 -27
- package/build/ox_modules/module-web/commands/open.js +0 -42
- package/build/ox_modules/module-web/commands/pause.js +0 -26
- package/build/ox_modules/module-web/commands/point.js +0 -37
- package/build/ox_modules/module-web/commands/pointJS.js +0 -56
- package/build/ox_modules/module-web/commands/refresh.js +0 -26
- package/build/ox_modules/module-web/commands/rightClick.js +0 -61
- package/build/ox_modules/module-web/commands/rightClickActions.js +0 -57
- package/build/ox_modules/module-web/commands/scrollToElement.js +0 -33
- package/build/ox_modules/module-web/commands/select.js +0 -55
- package/build/ox_modules/module-web/commands/selectFrame.js +0 -52
- package/build/ox_modules/module-web/commands/selectWindow.js +0 -148
- package/build/ox_modules/module-web/commands/sendKeys.js +0 -56
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +0 -33
- package/build/ox_modules/module-web/commands/setTimeout.js +0 -33
- package/build/ox_modules/module-web/commands/setWindowSize.js +0 -29
- package/build/ox_modules/module-web/commands/takeScreenshot.js +0 -37
- package/build/ox_modules/module-web/commands/type.js +0 -52
- package/build/ox_modules/module-web/commands/waitForAngular.js +0 -83
- package/build/ox_modules/module-web/commands/waitForExist.js +0 -28
- package/build/ox_modules/module-web/commands/waitForInteractable.js +0 -31
- package/build/ox_modules/module-web/commands/waitForNotExist.js +0 -57
- package/build/ox_modules/module-web/commands/waitForNotText.js +0 -45
- package/build/ox_modules/module-web/commands/waitForNotValue.js +0 -45
- package/build/ox_modules/module-web/commands/waitForText.js +0 -45
- package/build/ox_modules/module-web/commands/waitForValue.js +0 -45
- package/build/ox_modules/module-web/commands/waitForVisible.js +0 -28
- package/build/ox_modules/module-web/commands/waitForWindow.js +0 -118
- package/build/ox_modules/module-web.js +0 -909
- package/build/ox_modules/module-win/commands/assertText.js +0 -41
- package/build/ox_modules/module-win/commands/assertTitle.js +0 -38
- package/build/ox_modules/module-win/commands/assertValue.js +0 -62
- package/build/ox_modules/module-win/commands/back.js +0 -21
- package/build/ox_modules/module-win/commands/clear.js +0 -34
- package/build/ox_modules/module-win/commands/click.js +0 -25
- package/build/ox_modules/module-win/commands/clickLong.js +0 -30
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +0 -33
- package/build/ox_modules/module-win/commands/findElement.js +0 -31
- package/build/ox_modules/module-win/commands/findElements.js +0 -31
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +0 -22
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +0 -25
- package/build/ox_modules/module-win/commands/getLocation.js +0 -26
- package/build/ox_modules/module-win/commands/getSource.js +0 -22
- package/build/ox_modules/module-win/commands/getText.js +0 -32
- package/build/ox_modules/module-win/commands/getValue.js +0 -46
- package/build/ox_modules/module-win/commands/getWindowHandles.js +0 -25
- package/build/ox_modules/module-win/commands/index.js +0 -298
- package/build/ox_modules/module-win/commands/isCheckable.js +0 -26
- package/build/ox_modules/module-win/commands/isChecked.js +0 -26
- package/build/ox_modules/module-win/commands/isClickable.js +0 -26
- package/build/ox_modules/module-win/commands/isExist.js +0 -32
- package/build/ox_modules/module-win/commands/isSelected.js +0 -26
- package/build/ox_modules/module-win/commands/isVisible.js +0 -32
- package/build/ox_modules/module-win/commands/open.js +0 -24
- package/build/ox_modules/module-win/commands/pause.js +0 -23
- package/build/ox_modules/module-win/commands/rightClick.js +0 -30
- package/build/ox_modules/module-win/commands/selectWindow.js +0 -97
- package/build/ox_modules/module-win/commands/sendKeys.js +0 -50
- package/build/ox_modules/module-win/commands/setTimeout.js +0 -29
- package/build/ox_modules/module-win/commands/takeScreenshot.js +0 -26
- package/build/ox_modules/module-win/commands/tap.js +0 -29
- package/build/ox_modules/module-win/commands/type.js +0 -38
- package/build/ox_modules/module-win/commands/waitForExist.js +0 -25
- package/build/ox_modules/module-win/commands/waitForInteractable.js +0 -43
- package/build/ox_modules/module-win/commands/waitForVisible.js +0 -24
- package/build/ox_modules/module-win.js +0 -367
- package/build/ox_services/service-devtools/submodule-network.js +0 -338
- package/build/ox_services/service-devtools.js +0 -83
- package/build/runners/cucumber/CucumberEventListener.js +0 -181
- package/build/runners/cucumber/CucumberReporter.js +0 -277
- package/build/runners/cucumber/CucumberWorker.js +0 -337
- package/build/runners/cucumber/index.js +0 -159
- package/build/runners/cucumber/worker.js +0 -184
|
@@ -89,19 +89,118 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
getResults() {
|
|
93
|
+
return this.results;
|
|
94
|
+
}
|
|
95
|
+
|
|
92
96
|
generateReports() {
|
|
93
97
|
if (!Array.isArray(this.reporters) || this.reporters.length == 0) {
|
|
94
98
|
return false;
|
|
95
99
|
}
|
|
96
100
|
|
|
101
|
+
const results = this.groupResults();
|
|
102
|
+
|
|
97
103
|
for (let reporter of this.reporters) {
|
|
98
|
-
const reportPath = reporter.generate(
|
|
104
|
+
const reportPath = reporter.generate(results);
|
|
99
105
|
console.log(`Your report is ready: ${reportPath}`);
|
|
100
106
|
}
|
|
101
107
|
|
|
102
108
|
return true;
|
|
103
109
|
}
|
|
104
110
|
|
|
111
|
+
groupResults() {
|
|
112
|
+
const groupedResults = {};
|
|
113
|
+
const suiteIndexHash = {},
|
|
114
|
+
caseIndexHash = {};
|
|
115
|
+
|
|
116
|
+
if (!Array.isArray(this.results) || this.results.length == 0) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
for (let result of this.results) {
|
|
121
|
+
if (!result.options._groupResult) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const groupKey = `${result.options._groupResult.suiteKey || '*'}-${result.options._groupResult.caseKey || '*'}`;
|
|
126
|
+
const suiteKey = result.options._groupResult.suiteKey;
|
|
127
|
+
const caseKey = result.options._groupResult.caseKey;
|
|
128
|
+
const suiteGroupResults = groupedResults[suiteKey];
|
|
129
|
+
|
|
130
|
+
if (!suiteGroupResults) {
|
|
131
|
+
result.suites = result.suites.map(suiteResult => {
|
|
132
|
+
suiteIndexHash[groupKey]++;
|
|
133
|
+
const iterationNum = result.options._groupResult._meta && result.options._groupResult._meta.suiteIterationNum ? result.options._groupResult._meta.suiteIterationNum : suiteIndexHash[groupKey];
|
|
134
|
+
return { ...suiteResult,
|
|
135
|
+
iterationNum
|
|
136
|
+
};
|
|
137
|
+
});
|
|
138
|
+
groupedResults[suiteKey] = result;
|
|
139
|
+
|
|
140
|
+
if (caseKey) {
|
|
141
|
+
caseIndexHash[groupKey] = 1;
|
|
142
|
+
} else {
|
|
143
|
+
suiteIndexHash[groupKey] = 1;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
delete result.options['_groupResult'];
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (suiteKey && !caseKey) {
|
|
151
|
+
Array.prototype.push.apply(suiteGroupResults.suites, result.suites.map(suiteResult => {
|
|
152
|
+
suiteIndexHash[groupKey]++;
|
|
153
|
+
const iterationNum = result.options._groupResult._meta && result.options._groupResult._meta.suiteIterationNum ? result.options._groupResult._meta.suiteIterationNum : suiteIndexHash[groupKey];
|
|
154
|
+
return { ...suiteResult,
|
|
155
|
+
iterationNum
|
|
156
|
+
};
|
|
157
|
+
}));
|
|
158
|
+
} else if (caseKey && suiteGroupResults.suites.length > 0 && result.suites.length > 0) {
|
|
159
|
+
const firstGroupedSuiteResult = suiteGroupResults.suites[0];
|
|
160
|
+
console.log('result.options._groupResult._meta', result.options._groupResult._meta);
|
|
161
|
+
Array.prototype.push.apply(firstGroupedSuiteResult.cases, result.suites[0].cases.map(caseResult => {
|
|
162
|
+
caseIndexHash[groupKey]++;
|
|
163
|
+
const iterationNum = result.options._groupResult._meta && result.options._groupResult._meta.caseIterationNum ? result.options._groupResult._meta.caseIterationNum : caseIndexHash[groupKey];
|
|
164
|
+
return { ...caseResult,
|
|
165
|
+
iterationNum
|
|
166
|
+
};
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
let results = Object.keys(groupedResults).map(groupKey => groupedResults[groupKey]);
|
|
172
|
+
results = this.recalculateResultForStatus(results);
|
|
173
|
+
this.validateResult(results);
|
|
174
|
+
return results;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
recalculateResultForStatus(results) {
|
|
178
|
+
return results.map(result => {
|
|
179
|
+
if (result && result.suites && Array.isArray(result.suites) && result.suites.length > 0) {
|
|
180
|
+
const failed = result.suites.find(suite => suite.status === 'failed');
|
|
181
|
+
|
|
182
|
+
if (failed) {
|
|
183
|
+
result.status = 'failed';
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return result;
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
validateResult(results) {
|
|
192
|
+
const uniqueSuitesIterationIds = [];
|
|
193
|
+
results.map(result => {
|
|
194
|
+
result.suites.map(suite => {
|
|
195
|
+
if (uniqueSuitesIterationIds.includes(suite.iterationNum)) {
|
|
196
|
+
console.warn('suite.iterationNum', suite.iterationNum, ' not unique');
|
|
197
|
+
} else {
|
|
198
|
+
uniqueSuitesIterationIds.push(suite.iterationNum);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
|
|
105
204
|
async waitForResult(rid) {
|
|
106
205
|
if (!rid || !this.runnerEndPromises[rid]) {
|
|
107
206
|
return null;
|
|
@@ -110,6 +209,14 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
110
209
|
return this.runnerEndPromises[rid];
|
|
111
210
|
}
|
|
112
211
|
|
|
212
|
+
onBeforeStart(collectionLength) {
|
|
213
|
+
this.emit('test:start', {
|
|
214
|
+
collectionLength: collectionLength
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
onAfterEnd() {}
|
|
219
|
+
|
|
113
220
|
onRunnerStart(rid, opts, caps) {
|
|
114
221
|
if (!rid) {
|
|
115
222
|
throw new Error('"rid" cannot be empty.');
|
|
@@ -133,7 +240,15 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
133
240
|
}
|
|
134
241
|
|
|
135
242
|
onRunnerEnd(rid, finalResult, fatalError) {
|
|
136
|
-
const testResult = this.results.find(x =>
|
|
243
|
+
const testResult = this.results.find(x => {
|
|
244
|
+
if (x.rid === rid) {
|
|
245
|
+
if (x.options && finalResult.options && x.options._groupResult && finalResult.options._groupResult && x.options._groupResult.suiteKey && finalResult.options._groupResult.suiteKey && x.options._groupResult.suiteKey === finalResult.options._groupResult.suiteKey) {
|
|
246
|
+
if (x.options._groupResult._meta && x.options._groupResult._meta.suiteIterationNum && finalResult.options._groupResult._meta && finalResult.options._groupResult._meta.suiteIterationNum && x.options._groupResult._meta.suiteIterationNum === finalResult.options._groupResult._meta.suiteIterationNum) {
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
});
|
|
137
252
|
|
|
138
253
|
if (testResult) {
|
|
139
254
|
testResult.endTime = _util.default.getTimeStamp();
|
|
@@ -203,7 +318,15 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
203
318
|
}
|
|
204
319
|
|
|
205
320
|
onSuiteEnd(rid, suiteId, suiteResult) {
|
|
206
|
-
const testResult = this.results.find(x =>
|
|
321
|
+
const testResult = this.results.find(x => {
|
|
322
|
+
if (x.rid === rid) {
|
|
323
|
+
if (x.options && suiteResult && x.options._groupResult && suiteResult._groupResult && x.options._groupResult.suiteKey && suiteResult._groupResult.suiteKey && x.options._groupResult.suiteKey === suiteResult._groupResult.suiteKey) {
|
|
324
|
+
if (x.options._groupResult._meta && x.options._groupResult._meta.suiteIterationNum && suiteResult._groupResult._meta && suiteResult._groupResult._meta.suiteIterationNum && x.options._groupResult._meta.suiteIterationNum === suiteResult._groupResult._meta.suiteIterationNum) {
|
|
325
|
+
return true;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
});
|
|
207
330
|
|
|
208
331
|
if (!testResult) {
|
|
209
332
|
return;
|
|
@@ -313,4 +436,4 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
313
436
|
}
|
|
314
437
|
|
|
315
438
|
exports.default = ReportAggregator;
|
|
316
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiaW5zdGFudGlhdGVSZXBvcnRlcnMiLCJnZXRFeGl0Q29kZSIsImV4aXRDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidGVzdEZhaWxkZWQiLCJmaW5kIiwiaXRlbSIsInN0YXR1cyIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwicHVzaCIsImdlbmVyYXRlUmVwb3J0cyIsInJlcG9ydFBhdGgiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJsb2ciLCJ3YWl0Rm9yUmVzdWx0IiwicmlkIiwib25SdW5uZXJTdGFydCIsIm9wdHMiLCJjYXBzIiwiRXJyb3IiLCJ0ZXN0UmVzdWx0IiwiVGVzdFJlc3VsdCIsInN0YXJ0VGltZSIsIm94dXRpbCIsImdldFRpbWVTdGFtcCIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwiZW52VmFycyIsImVtaXQiLCJvblJ1bm5lckVuZCIsImZpbmFsUmVzdWx0IiwiZmF0YWxFcnJvciIsIngiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJTdGF0dXMiLCJGQUlMRUQiLCJzdWl0ZXMiLCJzb21lIiwiUEFTU0VEIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl9nZXRGaXJzdEZhaWx1cmUiLCJ0eXBlIiwibG9jYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInJlc3VsdCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc29sdmUiLCJvbkl0ZXJhdGlvblN0YXJ0IiwiaXRlcmF0aW9uIiwic3RhcnQiLCJtc2ciLCJvbkxvZ0VudHJ5Iiwib25JdGVyYXRpb25FbmQiLCJpdGVyYXRpb25OdW0iLCJvblN1aXRlU3RhcnQiLCJzdWl0ZUlkIiwic3VpdGUiLCJvblN1aXRlRW5kIiwic3VpdGVSZXN1bHQiLCJvbkNhc2VTdGFydCIsImNhc2VJZCIsImNhc2VEZWYiLCJjYXNlIiwib25DYXNlRW5kIiwiY2FzZVJlc3VsdCIsIm9uU3RlcFN0YXJ0Iiwic3RlcCIsInJvb3RQYXRoIiwiZnJhbWV3b3JrIiwiZnVsbFBhdGgiLCJwYXRoIiwib25TdGVwRW5kIiwic3RlcFJlc3VsdCIsInRvRml4ZWQiLCJ0aW1lIiwibGV2ZWwiLCJzcmMiLCJjYXNlcyIsInN0ZXBzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLFNBQVMsR0FBRztBQUNkQyxFQUFBQSxJQUFJLEVBQUVDLHFCQURRO0FBRWRDLEVBQUFBLEtBQUssRUFBRUMsc0JBRk87QUFHZEMsRUFBQUEsSUFBSSxFQUFFQyxxQkFIUTtBQUlkQyxFQUFBQSxLQUFLLEVBQUVDLHNCQUpPO0FBS2RDLEVBQUFBLEdBQUcsRUFBRUMsb0JBTFM7QUFNZEMsRUFBQUEsR0FBRyxFQUFFQztBQU5TLENBQWxCO0FBU0EsTUFBTUMsaUJBQWlCLEdBQUcsYUFBMUI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxFQUExQjs7QUFFZSxNQUFNQyxn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Q2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBSZXBvcnQgYWdncmVnYXRvclxyXG4gKi9cclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBUZXN0UmVzdWx0IGZyb20gJy4uL21vZGVsL3Rlc3QtcmVzdWx0JztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnd2hlbic7XHJcblxyXG4vLyBpbXBvcnQgYWxsIGJ1aWx0LWluIHJlcG9ydGVyc1xyXG5pbXBvcnQgSnNvblJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1qc29uJztcclxuaW1wb3J0IEpVbml0UmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWp1bml0JztcclxuaW1wb3J0IEh0bWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItaHRtbCc7XHJcbmltcG9ydCBFeGNlbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1leGNlbCc7XHJcbmltcG9ydCBQZGZSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItcGRmJztcclxuaW1wb3J0IFhtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci14bWwnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTdGF0dXMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzJztcclxuXHJcbmNvbnN0IFJlcG9ydGVycyA9IHtcclxuICAgIGpzb246IEpzb25SZXBvcnRlcixcclxuICAgIGp1bml0OiBKVW5pdFJlcG9ydGVyLFxyXG4gICAgaHRtbDogSHRtbFJlcG9ydGVyLFxyXG4gICAgZXhjZWw6IEV4Y2VsUmVwb3J0ZXIsXHJcbiAgICBwZGY6IFBkZlJlcG9ydGVyLFxyXG4gICAgeG1sOiBYbWxSZXBvcnRlclxyXG59O1xyXG5cclxuY29uc3QgREVGQVVMVF9URVNUX05BTUUgPSAnT3h5Z2VuIFRlc3QnO1xyXG5jb25zdCBERUZBVUxUX1JFUE9SVEVSUyA9IFtdO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwb3J0QWdncmVnYXRvciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAvLyByZXN1bHRzIGhhc2ggdGFibGUgYmFzZWQgb24gcnVubmVyIGlkIGtleVxyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIC8vIGEgaGFzaCBsaXN0IG9mIHJ1bm5lckVuZCBldmVudCBwcm9taXNlcywga2V5ZWQgYnkgcnVubmVyIGlkXHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5pbnN0YW50aWF0ZVJlcG9ydGVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEV4aXRDb2RlKCkge1xyXG4gICAgICAgIGxldCBleGl0Q29kZSA9IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzICYmXHJcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSAmJlxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXN0RmFpbGRlZCA9IHRoaXMucmVzdWx0cy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRlc3RGYWlsZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0Q29kZSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGJyb2tlbiA/XHJcbiAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zdGFudGlhdGVSZXBvcnRlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRlcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBnZW5lcmFsUmVwb3J0aW5nT3B0cyA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcgfHwge307XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgZ2VuZXJhbFJlcG9ydGluZ09wdHMucmVwb3J0ZXJzIHx8IERFRkFVTFRfUkVQT1JURVJTKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVwb3J0ZXIgIT09ICdzdHJpbmcnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVwb3J0ZXIsICduYW1lJykpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSByZXBvcnRlcnMgdGhhdCBkbyBub3QgaGF2ZSAnbmFtZScgcHJvcGVydHkgYXMgaXQncyBlc3NlbnRpYWwgdG8gbG9hZCB0aGUgY29ycmVzcG9uZGluZyBSZXBvcnRlciBjbGFzc1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydGVyTmFtZSA9IHR5cGVvZiByZXBvcnRlciA9PT0gJ3N0cmluZycgPyByZXBvcnRlciA6IHJlcG9ydGVyLm5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydGVyT3B0cyA9IHR5cGVvZiByZXBvcnRlciA9PT0gJ29iamVjdCcgPyByZXBvcnRlciA6IGdlbmVyYWxSZXBvcnRpbmdPcHRzO1xyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSZXBvcnRlcnMsIHJlcG9ydGVyTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0ZXJzLnB1c2gobmV3IFJlcG9ydGVyc1tyZXBvcnRlck5hbWVdKHRoaXMub3B0aW9ucywgcmVwb3J0ZXJPcHRzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiB0aGlzLnJlcG9ydGVycykge1xyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRQYXRoID0gcmVwb3J0ZXIuZ2VuZXJhdGUodGhpcy5yZXN1bHRzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBvblJ1bm5lclN0YXJ0KHJpZCwgb3B0cywgY2Fwcykge1xyXG4gICAgICAgIGlmICghcmlkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyaWRcIiBjYW5ub3QgYmUgZW1wdHkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBuZXcgVGVzdFJlc3VsdCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQucmlkID0gcmlkO1xyXG4gICAgICAgIHRlc3RSZXN1bHQubmFtZSA9IG9wdHMubmFtZSB8fCBERUZBVUxUX1RFU1RfTkFNRTtcclxuICAgICAgICB0ZXN0UmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICB0ZXN0UmVzdWx0LmNhcGFiaWxpdGllcyA9IGNhcHM7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5lbnZpcm9ubWVudCA9IG9wdHMuZW52VmFycyB8fCB7fTtcclxuICAgICAgICB0ZXN0UmVzdWx0Lm9wdGlvbnMgPSBvcHRzO1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBwcm9taXNlIGZvciBsYXRlciB0byBiZSByZXNvbHZlZCBvbiBydW5uZXI6ZW5kIGV2ZW50XHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdID0gZGVmZXIoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjpzdGFydCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBvcHRzLFxyXG4gICAgICAgICAgICBjYXBzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SdW5uZXJFbmQocmlkLCBmaW5hbFJlc3VsdCwgZmF0YWxFcnJvcikge1xyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSB0aGlzLnJlc3VsdHMuZmluZCh4ID0+IHgucmlkID09PSByaWQpO1xyXG4gICAgICAgIGlmICh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRlc3RSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5kdXJhdGlvbiA9IHRlc3RSZXN1bHQuZW5kVGltZSAtIHRlc3RSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LnN0YXR1cyA9IGZhdGFsRXJyb3IgPyBTdGF0dXMuRkFJTEVEIDogKHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkpID8gU3RhdHVzLkZBSUxFRCA6IFN0YXR1cy5QQVNTRUQ7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhdGFsRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhc3N1bWUgdGhhdCBpZiBmYXRhbEVycm9yIGlzIG5vdCBpbmhlcml0ZWQgZnJvbSBFcnJvciBjbGFzcyB0aGVuIHdlIGFscmVhZHkgZ290IE94eWdlbiBGYWlsdXJlIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuZmFpbHVyZSA9IGZhdGFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZmF0YWxFcnJvcikgOiBmYXRhbEVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gdGhpcy5fZ2V0Rmlyc3RGYWlsdXJlKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChmaW5hbFJlc3VsdCAmJiBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuY2FwYWJpbGl0aWVzID0gZmluYWxSZXN1bHQuY2FwYWJpbGl0aWVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSAmJiB0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlLnR5cGV9IGF0ICR7dGVzdFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9ufS5gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdFJlc3VsdC5mYWlsdXJlLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlLnR5cGV9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ZXN0UmVzdWx0LmZhaWx1cmUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZX1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIGZpbmlzaGVkIHdpdGggc3RhdHVzOiAke3Rlc3RSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgcmVzdWx0OiB0ZXN0UmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0pIHtcclxuICAgICAgICAgICAgLy8gY2FsbGluZyBuZXh0VGljaygpIHdpbGwgaGVscCB1cyB0byBpbnN1cmUgdGhhdCB3ZSByZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGVtaXQoJ3J1bm5lcjplbmQnKSBoYXMgY29tcGxldGVkXHJcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdLnJlc29sdmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkl0ZXJhdGlvblN0YXJ0KHJpZCwgaXRlcmF0aW9uLCBzdGFydCkge1xyXG4gICAgICAgIGlmIChpdGVyYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtpdGVyYXRpb259IHN0YXJ0ZWQuLi5gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSXRlcmF0aW9uRW5kKHJpZCwgcmVzdWx0LCBzdGFydCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lml0ZXJhdGlvbk51bSAmJiByZXN1bHQuc3RhdHVzICYmIHJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtyZXN1bHQuaXRlcmF0aW9uTnVtfSBlbmRlZCB3aXRoIHN0YXR1czogJHtyZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TdWl0ZVN0YXJ0KHJpZCwgc3VpdGVJZCwgc3VpdGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQ6IHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlOiBzdWl0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN1aXRlRW5kKHJpZCwgc3VpdGVJZCwgc3VpdGVSZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gdGhpcy5yZXN1bHRzLmZpbmQoeCA9PiB4LnJpZCA9PT0gcmlkKTtcclxuICAgICAgICBpZiAoIXRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXN0UmVzdWx0LnN1aXRlcy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke3N1aXRlUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHN1aXRlUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FzZVN0YXJ0KHJpZCwgc3VpdGVJZCwgY2FzZUlkLCBjYXNlRGVmKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYC0gQ2FzZSBcIiR7Y2FzZURlZi5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgY2FzZTogY2FzZURlZixcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhc2VFbmQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VSZXN1bHQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke2Nhc2VSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGNhc2VSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwU3RhcnQocmlkLCBzdGVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5yb290UGF0aCwgc3RlcC5sb2NhdGlvbik7XHJcbiAgICAgICAgICAgIHN0ZXAubG9jYXRpb24gPSBmdWxsUGF0aCsnOjEnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwRW5kKHJpZCwgc3RlcFJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHN0ZXBSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzdGVwUmVzdWx0LmR1cmF0aW9uID8gKHN0ZXBSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpIDogMDtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXBSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgaW4gJHtkdXJhdGlvbn1zIHdpdGggc3RhdHVzOiAke3N0YXR1c30uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTG9nRW50cnkodGltZSwgbGV2ZWwsIG1zZywgc3JjID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywge1xyXG4gICAgICAgICAgICBsZXZlbCwgbXNnLCB0aW1lLCBzcmNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGZhaWx1cmUgb2JqZWN0IGluIG9uZSBvZiB0ZXN0IHJlc3VsdCdzIGVudGl0aWVzLiBcclxuICAgICAqIEBwYXJhbSB7VGVzdFJlc3VsdH0gdGVzdFJlc3VsdCBcclxuICAgICAqL1xyXG4gICAgX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGVSZXN1bHQgb2YgdGVzdFJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXNlUmVzdWx0IG9mIHN1aXRlUmVzdWx0LmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGVwUmVzdWx0IG9mIGNhc2VSZXN1bHQuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFJlc3VsdC5mYWlsdXJlIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59Il19
|
|
439
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiaW5zdGFudGlhdGVSZXBvcnRlcnMiLCJnZXRFeGl0Q29kZSIsImV4aXRDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidGVzdEZhaWxkZWQiLCJmaW5kIiwiaXRlbSIsInN0YXR1cyIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwicHVzaCIsImdldFJlc3VsdHMiLCJnZW5lcmF0ZVJlcG9ydHMiLCJncm91cFJlc3VsdHMiLCJyZXBvcnRQYXRoIiwiZ2VuZXJhdGUiLCJjb25zb2xlIiwibG9nIiwiZ3JvdXBlZFJlc3VsdHMiLCJzdWl0ZUluZGV4SGFzaCIsImNhc2VJbmRleEhhc2giLCJyZXN1bHQiLCJfZ3JvdXBSZXN1bHQiLCJncm91cEtleSIsInN1aXRlS2V5IiwiY2FzZUtleSIsInN1aXRlR3JvdXBSZXN1bHRzIiwic3VpdGVzIiwibWFwIiwic3VpdGVSZXN1bHQiLCJpdGVyYXRpb25OdW0iLCJfbWV0YSIsInN1aXRlSXRlcmF0aW9uTnVtIiwiYXBwbHkiLCJmaXJzdEdyb3VwZWRTdWl0ZVJlc3VsdCIsImNhc2VzIiwiY2FzZVJlc3VsdCIsImNhc2VJdGVyYXRpb25OdW0iLCJrZXlzIiwicmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMiLCJ2YWxpZGF0ZVJlc3VsdCIsImZhaWxlZCIsInN1aXRlIiwidW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzIiwiaW5jbHVkZXMiLCJ3YXJuIiwid2FpdEZvclJlc3VsdCIsInJpZCIsIm9uQmVmb3JlU3RhcnQiLCJjb2xsZWN0aW9uTGVuZ3RoIiwiZW1pdCIsIm9uQWZ0ZXJFbmQiLCJvblJ1bm5lclN0YXJ0Iiwib3B0cyIsImNhcHMiLCJFcnJvciIsInRlc3RSZXN1bHQiLCJUZXN0UmVzdWx0Iiwic3RhcnRUaW1lIiwib3h1dGlsIiwiZ2V0VGltZVN0YW1wIiwiY2FwYWJpbGl0aWVzIiwiZW52aXJvbm1lbnQiLCJlbnZWYXJzIiwib25SdW5uZXJFbmQiLCJmaW5hbFJlc3VsdCIsImZhdGFsRXJyb3IiLCJ4IiwiZW5kVGltZSIsImR1cmF0aW9uIiwiU3RhdHVzIiwiRkFJTEVEIiwic29tZSIsIlBBU1NFRCIsImZhaWx1cmUiLCJlcnJvckhlbHBlciIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJfZ2V0Rmlyc3RGYWlsdXJlIiwidHlwZSIsImxvY2F0aW9uIiwidG9VcHBlckNhc2UiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJyZXNvbHZlIiwib25JdGVyYXRpb25TdGFydCIsIml0ZXJhdGlvbiIsInN0YXJ0IiwibXNnIiwib25Mb2dFbnRyeSIsIm9uSXRlcmF0aW9uRW5kIiwib25TdWl0ZVN0YXJ0Iiwic3VpdGVJZCIsIm9uU3VpdGVFbmQiLCJvbkNhc2VTdGFydCIsImNhc2VJZCIsImNhc2VEZWYiLCJjYXNlIiwib25DYXNlRW5kIiwib25TdGVwU3RhcnQiLCJzdGVwIiwicm9vdFBhdGgiLCJmcmFtZXdvcmsiLCJmdWxsUGF0aCIsInBhdGgiLCJvblN0ZXBFbmQiLCJzdGVwUmVzdWx0IiwidG9GaXhlZCIsInRpbWUiLCJsZXZlbCIs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QUNwQixtQkFBT3RDLFVBQVUsQ0FBQ3NDLE9BQWxCO0FBQ0g7O0FBQ0QsZUFBSyxJQUFJK0IsVUFBVCxJQUF1QnJFLFVBQVUsQ0FBQzBFLEtBQWxDLEVBQXlDO0FBQ3JDLGdCQUFJTCxVQUFVLENBQUMzRyxNQUFYLEtBQXNCd0UsZ0JBQU9DLE1BQWpDLEVBQXlDO0FBQ3JDO0FBQ0g7O0FBQ0QsbUJBQU9rQyxVQUFVLENBQUMvQixPQUFYLElBQXNCLElBQTdCO0FBQ0g7QUFDSjtBQUNKO0FBQ0o7O0FBQ0QsV0FBTyxJQUFQO0FBQ0g7O0FBbmFzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogUmVwb3J0IGFnZ3JlZ2F0b3JcclxuICovXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgVGVzdFJlc3VsdCBmcm9tICcuLi9tb2RlbC90ZXN0LXJlc3VsdCc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi4vbGliL3V0aWwnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5cclxuLy8gaW1wb3J0IGFsbCBidWlsdC1pbiByZXBvcnRlcnNcclxuaW1wb3J0IEpzb25SZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItanNvbic7XHJcbmltcG9ydCBKVW5pdFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1qdW5pdCc7XHJcbmltcG9ydCBIdG1sUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWh0bWwnO1xyXG5pbXBvcnQgRXhjZWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItZXhjZWwnO1xyXG5pbXBvcnQgUGRmUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXBkZic7XHJcbmltcG9ydCBYbWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXIteG1sJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgU3RhdHVzIGZyb20gJy4uL21vZGVsL3N0YXR1cyc7XHJcblxyXG5jb25zdCBSZXBvcnRlcnMgPSB7XHJcbiAgICBqc29uOiBKc29uUmVwb3J0ZXIsXHJcbiAgICBqdW5pdDogSlVuaXRSZXBvcnRlcixcclxuICAgIGh0bWw6IEh0bWxSZXBvcnRlcixcclxuICAgIGV4Y2VsOiBFeGNlbFJlcG9ydGVyLFxyXG4gICAgcGRmOiBQZGZSZXBvcnRlcixcclxuICAgIHhtbDogWG1sUmVwb3J0ZXJcclxufTtcclxuXHJcbmNvbnN0IERFRkFVTFRfVEVTVF9OQU1FID0gJ094eWdlbiBUZXN0JztcclxuY29uc3QgREVGQVVMVF9SRVBPUlRFUlMgPSBbXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcG9ydEFnZ3JlZ2F0b3IgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgLy8gcmVzdWx0cyBoYXNoIHRhYmxlIGJhc2VkIG9uIHJ1bm5lciBpZCBrZXlcclxuICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAvLyBhIGhhc2ggbGlzdCBvZiBydW5uZXJFbmQgZXZlbnQgcHJvbWlzZXMsIGtleWVkIGJ5IHJ1bm5lciBpZFxyXG4gICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXMgPSB7fTtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgICAgIHRoaXMuaW5zdGFudGlhdGVSZXBvcnRlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFeGl0Q29kZSgpIHtcclxuICAgICAgICBsZXQgZXhpdENvZGUgPSAwO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cyAmJlxyXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMucmVzdWx0cykgJiZcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmxlbmd0aCA+IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgdGVzdEZhaWxkZWQgPSB0aGlzLnJlc3VsdHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0ZXN0RmFpbGRlZCkge1xyXG4gICAgICAgICAgICAgICAgZXhpdENvZGUgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBicm9rZW4gP1xyXG4gICAgICAgICAgICBleGl0Q29kZSA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGV4aXRDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGluc3RhbnRpYXRlUmVwb3J0ZXJzKCkge1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZXJzID0gW107XHJcbiAgICAgICAgY29uc3QgZ2VuZXJhbFJlcG9ydGluZ09wdHMgPSB0aGlzLm9wdGlvbnMucmVwb3J0aW5nIHx8IHt9O1xyXG4gICAgICAgIGZvciAobGV0IHJlcG9ydGVyIG9mIGdlbmVyYWxSZXBvcnRpbmdPcHRzLnJlcG9ydGVycyB8fCBERUZBVUxUX1JFUE9SVEVSUykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcG9ydGVyICE9PSAnc3RyaW5nJyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcG9ydGVyLCAnbmFtZScpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgcmVwb3J0ZXJzIHRoYXQgZG8gbm90IGhhdmUgJ25hbWUnIHByb3BlcnR5IGFzIGl0J3MgZXNzZW50aWFsIHRvIGxvYWQgdGhlIGNvcnJlc3BvbmRpbmcgUmVwb3J0ZXIgY2xhc3NcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRlck5hbWUgPSB0eXBlb2YgcmVwb3J0ZXIgPT09ICdzdHJpbmcnID8gcmVwb3J0ZXIgOiByZXBvcnRlci5uYW1lO1xyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRlck9wdHMgPSB0eXBlb2YgcmVwb3J0ZXIgPT09ICdvYmplY3QnID8gcmVwb3J0ZXIgOiBnZW5lcmFsUmVwb3J0aW5nT3B0cztcclxuXHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUmVwb3J0ZXJzLCByZXBvcnRlck5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGVycy5wdXNoKG5ldyBSZXBvcnRlcnNbcmVwb3J0ZXJOYW1lXSh0aGlzLm9wdGlvbnMsIHJlcG9ydGVyT3B0cykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFJlc3VsdHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZVJlcG9ydHMoKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMucmVwb3J0ZXJzKSB8fCB0aGlzLnJlcG9ydGVycy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmdyb3VwUmVzdWx0cygpO1xyXG4gICAgICAgIGZvciAobGV0IHJlcG9ydGVyIG9mIHRoaXMucmVwb3J0ZXJzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydFBhdGggPSByZXBvcnRlci5nZW5lcmF0ZShyZXN1bHRzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwUmVzdWx0cygpIHtcclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHN1aXRlSW5kZXhIYXNoID0ge30sIGNhc2VJbmRleEhhc2ggPSB7fTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSB8fCB0aGlzLnJlc3VsdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgdGhpcy5yZXN1bHRzKSB7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBncm91cEtleSA9IGAke3Jlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5zdWl0ZUtleSB8fCAnKid9LSR7cmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LmNhc2VLZXkgfHwgJyonfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1aXRlS2V5ID0gcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnN1aXRlS2V5O1xyXG4gICAgICAgICAgICBjb25zdCBjYXNlS2V5ID0gcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LmNhc2VLZXk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1aXRlR3JvdXBSZXN1bHRzID0gZ3JvdXBlZFJlc3VsdHNbc3VpdGVLZXldO1xyXG4gICAgICAgICAgICBpZiAoIXN1aXRlR3JvdXBSZXN1bHRzKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuc3VpdGVzID0gcmVzdWx0LnN1aXRlcy5tYXAoc3VpdGVSZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlSW5kZXhIYXNoW2dyb3VwS2V5XSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZXJhdGlvbk51bSA9IHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5fbWV0YSAmJiByZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQuX21ldGEuc3VpdGVJdGVyYXRpb25OdW0gP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQuX21ldGEuc3VpdGVJdGVyYXRpb25OdW0gOiBzdWl0ZUluZGV4SGFzaFtncm91cEtleV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN1aXRlUmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRpb25OdW1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRpbmcgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0c1tzdWl0ZUtleV0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FzZUtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2VJbmRleEhhc2hbZ3JvdXBLZXldID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlSW5kZXhIYXNoW2dyb3VwS2V5XSA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0Lm9wdGlvbnNbJ19ncm91cFJlc3VsdCddO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gbWVyZ2Ugc3VpdGVzIHdpdGggdGhlIHNhbWUga2V5IG9ubHlcclxuICAgICAgICAgICAgaWYgKHN1aXRlS2V5ICYmICFjYXNlS2V5KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHN1aXRlIGludG8gZ3JvdXBlZFJlc3VsdHNbc3VpdGVLZXldWydzdWl0ZXMnXVxyXG4gICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoXHJcbiAgICAgICAgICAgICAgICAgICAgc3VpdGVHcm91cFJlc3VsdHMuc3VpdGVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMubWFwKHN1aXRlUmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVJbmRleEhhc2hbZ3JvdXBLZXldKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZXJhdGlvbk51bSA9IHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5fbWV0YSAmJiByZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQuX21ldGEuc3VpdGVJdGVyYXRpb25OdW0gP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0Ll9tZXRhLnN1aXRlSXRlcmF0aW9uTnVtIDogc3VpdGVJbmRleEhhc2hbZ3JvdXBLZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5zdWl0ZVJlc3VsdCwgaXRlcmF0aW9uTnVtIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2FzZUtleSAmJiBzdWl0ZUdyb3VwUmVzdWx0cy5zdWl0ZXMubGVuZ3RoID4gMCAmJiByZXN1bHQuc3VpdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0R3JvdXBlZFN1aXRlUmVzdWx0ID0gc3VpdGVHcm91cFJlc3VsdHMuc3VpdGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3Jlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5fbWV0YScsIHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5fbWV0YSk7XHJcbiAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShcclxuICAgICAgICAgICAgICAgICAgICBmaXJzdEdyb3VwZWRTdWl0ZVJlc3VsdC5jYXNlcyxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3VpdGVzWzBdLmNhc2VzLm1hcChjYXNlUmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZUluZGV4SGFzaFtncm91cEtleV0rKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlcmF0aW9uTnVtID0gcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0Ll9tZXRhICYmIHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5fbWV0YS5jYXNlSXRlcmF0aW9uTnVtID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5fbWV0YS5jYXNlSXRlcmF0aW9uTnVtIDogY2FzZUluZGV4SGFzaFtncm91cEtleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmNhc2VSZXN1bHQsIGl0ZXJhdGlvbk51bSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnZlcnQgZ3JvdXBlZCByZXN1bHRzIGhhc2ggdG8gYW4gYXJyYXlcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IE9iamVjdC5rZXlzKGdyb3VwZWRSZXN1bHRzKS5tYXAoZ3JvdXBLZXkgPT4gZ3JvdXBlZFJlc3VsdHNbZ3JvdXBLZXldKTtcclxuICAgICAgICAvLyBjaGFuZ2UgcmVzdWx0cyBzdGF0dXMgdG8gZmFpZGVkIGlmIGZhaWxlZCBzdWl0ZXMgYXJlIGZpbmRlZFxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpO1xyXG5cclxuICAgICAgICB0aGlzLnZhbGlkYXRlUmVzdWx0KHJlc3VsdHMpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgJiZcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMgJiZcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVzdWx0LnN1aXRlcykgJiZcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZCA9IHJlc3VsdC5zdWl0ZXMuZmluZCgoc3VpdGUpID0+IHN1aXRlLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhaWxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVJlc3VsdChyZXN1bHRzKSB7XHJcbiAgICAgICAgY29uc3QgdW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzID0gW107XHJcblxyXG4gICAgICAgIHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0LnN1aXRlcy5tYXAoKHN1aXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzLmluY2x1ZGVzKHN1aXRlLml0ZXJhdGlvbk51bSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3N1aXRlLml0ZXJhdGlvbk51bScsIHN1aXRlLml0ZXJhdGlvbk51bSwgJyBub3QgdW5pcXVlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZVN1aXRlc0l0ZXJhdGlvbklkcy5wdXNoKHN1aXRlLml0ZXJhdGlvbk51bSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZVN0YXJ0KGNvbGxlY3Rpb25MZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ3Rlc3Q6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb25MZW5ndGg6IGNvbGxlY3Rpb25MZW5ndGhcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkFmdGVyRW5kKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvblJ1bm5lclN0YXJ0KHJpZCwgb3B0cywgY2Fwcykge1xyXG4gICAgICAgIGlmICghcmlkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyaWRcIiBjYW5ub3QgYmUgZW1wdHkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBuZXcgVGVzdFJlc3VsdCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQucmlkID0gcmlkO1xyXG4gICAgICAgIHRlc3RSZXN1bHQubmFtZSA9IG9wdHMubmFtZSB8fCBERUZBVUxUX1RFU1RfTkFNRTtcclxuICAgICAgICB0ZXN0UmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICB0ZXN0UmVzdWx0LmNhcGFiaWxpdGllcyA9IGNhcHM7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5lbnZpcm9ubWVudCA9IG9wdHMuZW52VmFycyB8fCB7fTtcclxuICAgICAgICB0ZXN0UmVzdWx0Lm9wdGlvbnMgPSBvcHRzO1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBwcm9taXNlIGZvciBsYXRlciB0byBiZSByZXNvbHZlZCBvbiBydW5uZXI6ZW5kIGV2ZW50XHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdID0gZGVmZXIoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjpzdGFydCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBvcHRzLFxyXG4gICAgICAgICAgICBjYXBzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SdW5uZXJFbmQocmlkLCBmaW5hbFJlc3VsdCwgZmF0YWxFcnJvcikge1xyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSB0aGlzLnJlc3VsdHMuZmluZCh4ID0+IHtcclxuICAgICAgICAgICAgaWYgKHgucmlkID09PSByaWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB4Lm9wdGlvbnMgJiZcclxuICAgICAgICAgICAgICAgICAgICBmaW5hbFJlc3VsdC5vcHRpb25zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgeC5vcHRpb25zLl9ncm91cFJlc3VsdCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsUmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgeC5vcHRpb25zLl9ncm91cFJlc3VsdC5zdWl0ZUtleSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsUmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnN1aXRlS2V5ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgeC5vcHRpb25zLl9ncm91cFJlc3VsdC5zdWl0ZUtleSA9PT0gZmluYWxSZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQuc3VpdGVLZXlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5vcHRpb25zLl9ncm91cFJlc3VsdC5fbWV0YSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4Lm9wdGlvbnMuX2dyb3VwUmVzdWx0Ll9tZXRhLnN1aXRlSXRlcmF0aW9uTnVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsUmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0Ll9tZXRhICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsUmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0Ll9tZXRhLnN1aXRlSXRlcmF0aW9uTnVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHgub3B0aW9ucy5fZ3JvdXBSZXN1bHQuX21ldGEuc3VpdGVJdGVyYXRpb25OdW0gPT09IGZpbmFsUmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0Ll9tZXRhLnN1aXRlSXRlcmF0aW9uTnVtXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIHRlc3RSZXN1bHQuZHVyYXRpb24gPSB0ZXN0UmVzdWx0LmVuZFRpbWUgLSB0ZXN0UmVzdWx0LnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5zdGF0dXMgPSBmYXRhbEVycm9yID8gU3RhdHVzLkZBSUxFRCA6ICh0ZXN0UmVzdWx0LnN1aXRlcy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpKSA/IFN0YXR1cy5GQUlMRUQgOiBTdGF0dXMuUEFTU0VEO1xyXG4gICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1lIHRoYXQgaWYgZmF0YWxFcnJvciBpcyBub3QgaW5oZXJpdGVkIGZyb20gRXJyb3IgY2xhc3MgdGhlbiB3ZSBhbHJlYWR5IGdvdCBPeHlnZW4gRmFpbHVyZSBvYmplY3RcclxuICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmZhaWx1cmUgPSBmYXRhbEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGZhdGFsRXJyb3IpIDogZmF0YWxFcnJvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuZmFpbHVyZSA9IHRoaXMuX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZmluYWxSZXN1bHQgJiYgZmluYWxSZXN1bHQuY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmNhcGFiaWxpdGllcyA9IGZpbmFsUmVzdWx0LmNhcGFiaWxpdGllcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5mYWlsdXJlLnR5cGUgJiYgdGVzdFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZS50eXBlfSBhdCAke3Rlc3RSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbn0uYCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZS50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZS50eXBlfWApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGVzdFJlc3VsdC5mYWlsdXJlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmV9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFRlc3QgJHtyaWR9IGhhcyBmaW5pc2hlZCB3aXRoIHN0YXR1czogJHt0ZXN0UmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0KCdydW5uZXI6ZW5kJywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogdGVzdFJlc3VsdCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdKSB7XHJcbiAgICAgICAgICAgIC8vIGNhbGxpbmcgbmV4dFRpY2soKSB3aWxsIGhlbHAgdXMgdG8gaW5zdXJlIHRoYXQgd2UgcmVzb2x2ZSB0aGUgcHJvbWlzZSBhZnRlciBlbWl0KCdydW5uZXI6ZW5kJykgaGFzIGNvbXBsZXRlZFxyXG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXS5yZXNvbHZlKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25JdGVyYXRpb25TdGFydChyaWQsIGl0ZXJhdGlvbiwgc3RhcnQpIHtcclxuICAgICAgICBpZiAoaXRlcmF0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGAke3N0YXJ0fSBJdGVyYXRpb24gIyR7aXRlcmF0aW9ufSBzdGFydGVkLi4uYDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICAgICAgdGhpcy5vbkxvZ0VudHJ5KG51bGwsICdJTkZPJywgbXNnLCAndXNlcicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkl0ZXJhdGlvbkVuZChyaWQsIHJlc3VsdCwgc3RhcnQpIHtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5pdGVyYXRpb25OdW0gJiYgcmVzdWx0LnN0YXR1cyAmJiByZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGAke3N0YXJ0fSBJdGVyYXRpb24gIyR7cmVzdWx0Lml0ZXJhdGlvbk51bX0gZW5kZWQgd2l0aCBzdGF0dXM6ICR7cmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU3VpdGVTdGFydChyaWQsIHN1aXRlSWQsIHN1aXRlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFN1aXRlIFwiJHtzdWl0ZS5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdWl0ZTpzdGFydCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkOiBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBzdWl0ZTogc3VpdGUsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdWl0ZUVuZChyaWQsIHN1aXRlSWQsIHN1aXRlUmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IHRoaXMucmVzdWx0cy5maW5kKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoeC5yaWQgPT09IHJpZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHgub3B0aW9ucyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgeC5vcHRpb25zLl9ncm91cFJlc3VsdCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0Ll9ncm91cFJlc3VsdCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHgub3B0aW9ucy5fZ3JvdXBSZXN1bHQuc3VpdGVLZXkgJiZcclxuICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5fZ3JvdXBSZXN1bHQuc3VpdGVLZXkgJiZcclxuICAgICAgICAgICAgICAgICAgICB4Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnN1aXRlS2V5ID09PSBzdWl0ZVJlc3VsdC5fZ3JvdXBSZXN1bHQuc3VpdGVLZXlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5vcHRpb25zLl9ncm91cFJlc3VsdC5fbWV0YSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4Lm9wdGlvbnMuX2dyb3VwUmVzdWx0Ll9tZXRhLnN1aXRlSXRlcmF0aW9uTnVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0Ll9ncm91cFJlc3VsdC5fbWV0YSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5fZ3JvdXBSZXN1bHQuX21ldGEuc3VpdGVJdGVyYXRpb25OdW0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5vcHRpb25zLl9ncm91cFJlc3VsdC5fbWV0YS5zdWl0ZUl0ZXJhdGlvbk51bSA9PT0gc3VpdGVSZXN1bHQuX2dyb3VwUmVzdWx0Ll9tZXRhLnN1aXRlSXRlcmF0aW9uTnVtXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghdGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlc3RSZXN1bHQuc3VpdGVzLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWl0ZSBcIiR7c3VpdGVSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7c3VpdGVSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnc3VpdGU6ZW5kJywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogc3VpdGVSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYXNlU3RhcnQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VEZWYpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlRGVmLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2Nhc2U6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICBjYXNlOiBjYXNlRGVmLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FzZUVuZChyaWQsIHN1aXRlSWQsIGNhc2VJZCwgY2FzZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAtIENhc2UgXCIke2Nhc2VSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7Y2FzZVJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBjYXNlSWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogY2FzZVJlc3VsdCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN0ZXBTdGFydChyaWQsIHN0ZXApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXAubmFtZX1cIiBoYXMgc3RhcnRlZC4uLmApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5yb290UGF0aCAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrICYmIHRoaXMub3B0aW9ucy5mcmFtZXdvcmsgPT09ICdjdWN1bWJlcicpIHtcclxuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLnJvb3RQYXRoLCBzdGVwLmxvY2F0aW9uKTtcclxuICAgICAgICAgICAgc3RlcC5sb2NhdGlvbiA9IGZ1bGxQYXRoKyc6MSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVtaXQoJ3N0ZXA6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3RlcDogc3RlcCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN0ZXBFbmQocmlkLCBzdGVwUmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gc3RlcFJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHN0ZXBSZXN1bHQuZHVyYXRpb24gPyAoc3RlcFJlc3VsdC5kdXJhdGlvbiAvIDEwMDApLnRvRml4ZWQoMikgOiAwO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIC0gU3RlcCBcIiR7c3RlcFJlc3VsdC5uYW1lfVwiIGhhcyBlbmRlZCBpbiAke2R1cmF0aW9ufXMgd2l0aCBzdGF0dXM6ICR7c3RhdHVzfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N0ZXA6ZW5kJywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXBSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Mb2dFbnRyeSh0aW1lLCBsZXZlbCwgbXNnLCBzcmMgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdsb2cnLCB7XHJcbiAgICAgICAgICAgIGxldmVsLCBtc2csIHRpbWUsIHNyY1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgZmFpbHVyZSBvYmplY3QgaW4gb25lIG9mIHRlc3QgcmVzdWx0J3MgZW50aXRpZXMuIFxyXG4gICAgICogQHBhcmFtIHtUZXN0UmVzdWx0fSB0ZXN0UmVzdWx0IFxyXG4gICAgICovXHJcbiAgICBfZ2V0Rmlyc3RGYWlsdXJlKHRlc3RSZXN1bHQpIHtcclxuICAgICAgICBpZiAodGVzdFJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBzdWl0ZVJlc3VsdCBvZiB0ZXN0UmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VpdGVSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNhc2VSZXN1bHQgb2Ygc3VpdGVSZXN1bHQuY2FzZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3VpdGVSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FzZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXNlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN0ZXBSZXN1bHQgb2YgY2FzZVJlc3VsdC5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RlcFJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGVwUmVzdWx0LmZhaWx1cmUgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -21,6 +21,10 @@ var _util = _interopRequireDefault(require("../lib/util"));
|
|
|
21
21
|
|
|
22
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
23
|
|
|
24
|
+
const {
|
|
25
|
+
Worker
|
|
26
|
+
} = require('worker_threads');
|
|
27
|
+
|
|
24
28
|
const log = (0, _logger.default)('WorkerProcess');
|
|
25
29
|
|
|
26
30
|
const snooze = ms => new Promise(resolve => setTimeout(resolve, ms));
|
|
@@ -62,6 +66,7 @@ class WorkerProcess extends _events.EventEmitter {
|
|
|
62
66
|
}
|
|
63
67
|
|
|
64
68
|
forkOpts.execArgv.push('--trace-warnings');
|
|
69
|
+
this._npmGRootExecution = false;
|
|
65
70
|
|
|
66
71
|
if (this._npmGRootExecution) {
|
|
67
72
|
try {
|
|
@@ -105,7 +110,9 @@ class WorkerProcess extends _events.EventEmitter {
|
|
|
105
110
|
}
|
|
106
111
|
}
|
|
107
112
|
|
|
108
|
-
this._childProc =
|
|
113
|
+
this._childProc = new Worker(this._workerPath, {
|
|
114
|
+
workerData: {}
|
|
115
|
+
});
|
|
109
116
|
|
|
110
117
|
this._hookChildProcEvents();
|
|
111
118
|
|
|
@@ -144,16 +151,12 @@ class WorkerProcess extends _events.EventEmitter {
|
|
|
144
151
|
status: status
|
|
145
152
|
});
|
|
146
153
|
|
|
147
|
-
this.kill();
|
|
154
|
+
await this.kill();
|
|
148
155
|
|
|
149
156
|
this._reset();
|
|
150
157
|
}
|
|
151
158
|
|
|
152
|
-
kill() {
|
|
153
|
-
if (this._childProc) {
|
|
154
|
-
this._childProc.kill('SIGINT');
|
|
155
|
-
}
|
|
156
|
-
}
|
|
159
|
+
async kill() {}
|
|
157
160
|
|
|
158
161
|
async init(rid, options, caps) {
|
|
159
162
|
if (!this._isInitialized) {
|
|
@@ -186,7 +189,7 @@ class WorkerProcess extends _events.EventEmitter {
|
|
|
186
189
|
status: status
|
|
187
190
|
});
|
|
188
191
|
|
|
189
|
-
this.kill();
|
|
192
|
+
await this.kill();
|
|
190
193
|
} else if (this._childProc) {
|
|
191
194
|
this._isInitialized = false;
|
|
192
195
|
|
|
@@ -195,7 +198,7 @@ class WorkerProcess extends _events.EventEmitter {
|
|
|
195
198
|
status: status
|
|
196
199
|
});
|
|
197
200
|
|
|
198
|
-
this.kill();
|
|
201
|
+
await this.kill();
|
|
199
202
|
}
|
|
200
203
|
}
|
|
201
204
|
|
|
@@ -277,22 +280,12 @@ class WorkerProcess extends _events.EventEmitter {
|
|
|
277
280
|
return false;
|
|
278
281
|
}
|
|
279
282
|
|
|
280
|
-
this._childProc.
|
|
283
|
+
this._childProc.postMessage(message);
|
|
281
284
|
|
|
282
285
|
return true;
|
|
283
286
|
}
|
|
284
287
|
|
|
285
|
-
_reset() {
|
|
286
|
-
this._childProc = null;
|
|
287
|
-
this._debugger = null;
|
|
288
|
-
this._isRunning = false;
|
|
289
|
-
this._debugMode = null;
|
|
290
|
-
this._debugPort = null;
|
|
291
|
-
this._whenOxygenDisposed = null;
|
|
292
|
-
this._whenOxygenInitialized = null;
|
|
293
|
-
this._whenModulesDisposed = null;
|
|
294
|
-
this._isInitialized = false;
|
|
295
|
-
}
|
|
288
|
+
_reset() {}
|
|
296
289
|
|
|
297
290
|
_hookChildProcEvents() {
|
|
298
291
|
if (!this._childProc) {
|
|
@@ -376,12 +369,6 @@ class WorkerProcess extends _events.EventEmitter {
|
|
|
376
369
|
log.debug(`Worker ${this._pid} finished with exit code ${exitCode} and signal ${signal}.`);
|
|
377
370
|
|
|
378
371
|
this._reset();
|
|
379
|
-
|
|
380
|
-
this.emit('exit', {
|
|
381
|
-
pid: this._pid,
|
|
382
|
-
exitCode,
|
|
383
|
-
signal
|
|
384
|
-
});
|
|
385
372
|
}
|
|
386
373
|
|
|
387
374
|
_handleChildDisconnect() {
|
|
@@ -462,4 +449,4 @@ class WorkerProcess extends _events.EventEmitter {
|
|
|
462
449
|
}
|
|
463
450
|
|
|
464
451
|
exports.default = WorkerProcess;
|
|
465
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXJzL1dvcmtlclByb2Nlc3MuanMiXSwibmFtZXMiOlsibG9nIiwic25vb3plIiwibXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJXb3JrZXJQcm9jZXNzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJ3b3JrZXJQYXRoIiwiZGVidWdNb2RlIiwiZGVidWdQb3J0IiwibmFtZSIsIm5wbUdSb290RXhlY3V0aW9uIiwiX25hbWUiLCJfaXNSdW5uaW5nIiwiX2lzSW5pdGlhbGl6ZWQiLCJfc3RvcHBlZEJ5VXNlciIsIl9waWQiLCJfY2hpbGRQcm9jIiwiX2RlYnVnTW9kZSIsIl9kZWJ1Z1BvcnQiLCJfd29ya2VyUGF0aCIsIl9ucG1HUm9vdEV4ZWN1dGlvbiIsIl9icmVha3BvaW50RXJyb3JzIiwiX2NhbGxzIiwiX2V2ZW50SGFuZGxlcnMiLCJzdGFydCIsImVudiIsIk9iamVjdCIsImFzc2lnbiIsInByb2Nlc3MiLCJPWF9XT1JLRVIiLCJERUJVRyIsImlzTmFOIiwiTk9fVVBEQVRFX05PVElGSUVSIiwiaW5mbyIsImZvcmtPcHRzIiwiY3dkIiwiZXhlY0FyZ3YiLCJkZXRhY2hlZCIsInB1c2giLCJnbG9iYWxOcG1Nb2R1bGVzUGF0aCIsInBsYXRmb3JtIiwicmVqZWN0IiwiZXJyIiwic3Rkb3V0IiwiY29uc29sZSIsInRvU3RyaW5nIiwidHJpbSIsImUiLCJleGVjUmVzdWx0IiwiTk9ERV9QQVRIIiwiX2hvb2tDaGlsZFByb2NFdmVudHMiLCJzdGFydERlYnVnZ2VyIiwiX2luaXRpYWxpemVEZWJ1Z2dlciIsInN0b3AiLCJzdGF0dXMiLCJfZGVidWdnZXIiLCJfcGF1c2VkIiwiZGlzYWJsZSIsInJlc3VtZVRlcm1pbmF0ZSIsImludm9rZSIsImNsb3NlIiwiX3NlbmQiLCJ0eXBlIiwia2lsbCIsIl9yZXNldCIsImluaXQiLCJyaWQiLCJvcHRpb25zIiwiY2FwcyIsImJlZm9yZVRpbWUiLCJEYXRlIiwiZ2V0VGltZSIsImFmdGVyVGltZSIsImR1cmF0aW9uIiwiZGlzcG9zZSIsImRpc3Bvc2VNb2R1bGVzIiwiZGVidWdnZXIiLCJpc1J1bm5pbmciLCJpc0luaXRpYWxpemVkIiwicnVuIiwicnVuT3B0cyIsInN1YnNjcmliZSIsImV2ZW50TmFtZSIsImhhbmRsZXIiLCJldmVudCIsIm1ldGhvZCIsImFyZ3MiLCJBcnJheSIsInByb3RvdHlwZSIsInNsaWNlIiwiY2FsbCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNoaWZ0IiwiY2FsbElkIiwib3h1dGlsIiwiZ2VuZXJhdGVVbmlxdWVJZCIsInByb21pc2UiLCJpbnZva2VUZXN0SG9vayIsImhvb2tOYW1lIiwiaG9va0FyZ3MiLCJtZXNzYWdlIiwic2VuZCIsIl93aGVuT3h5Z2VuRGlzcG9zZWQiLCJfd2hlbk94eWdlbkluaXRpYWxpemVkIiwiX3doZW5Nb2R1bGVzRGlzcG9zZWQiLCJvbiIsIl9oYW5kbGVDaGlsZE1lc3NhZ2UiLCJiaW5kIiwiX2hhbmRsZUNoaWxkRXJyb3IiLCJfaGFuZGxlQ2hpbGRFeGl0IiwiX2hhbmRsZUNoaWxkRGlzY29ubmVjdCIsIl9oYW5kbGVDaGlsZFVuY2F1Z2h0RXhjZXB0aW9uIiwiX2hhbmRsZUNoaWxkU2lnSW50IiwibXNnIiwiaGFzT3duUHJvcGVydHkiLCJlcnJvciIsInJldHZhbCIsImVtaXQiLCJfaGFuZGxlV29ya2VyRXZlbnQiLCJhcHBseSIsInVuZGVmaW5lZCIsImRlYnVnIiwiZXhpdENvZGUiLCJzaWduYWwiLCJEZWJ1Z2dlciIsIndoZW5EZWJ1Z2dlclJlYWR5IiwiX3RoaXMiLCJjb250aW51ZSIsImlzUmVzb2x2ZWQiLCJicmVha3BvaW50RGF0YSIsImJyZWFrRXJyb3IiLCJpbmNsdWRlcyIsImNvbm5lY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBOztBQUdBOztBQUNBOzs7O0FBSEEsTUFBTUEsR0FBRyxHQUFHLHFCQUFPLGVBQVAsQ0FBWjs7QUFNQSxN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QUFBQSxpQkFBaUIsQ0FBQ3JGLE1BQWxCLENBQXlCNEQsT0FBekI7QUFDSDs7QUFFRCxXQUFPeUIsaUJBQWlCLENBQUM3QixPQUF6QjtBQUNIOztBQTlYbUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JrLCBleGVjU3luYywgZXhlYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5cclxuLy8gc2V0dXAgbG9nZ2VyXHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbGliL2xvZ2dlcic7XHJcbmNvbnN0IGxvZyA9IGxvZ2dlcignV29ya2VyUHJvY2VzcycpO1xyXG5cclxuaW1wb3J0IERlYnVnZ2VyIGZyb20gJy4uL2xpYi9kZWJ1Z2dlcic7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi4vbGliL3V0aWwnO1xyXG5cclxuLy8gc25vb3plIGZ1bmN0aW9uIC0gYXN5bmMgd3JhcHBlciBhcm91bmQgc2V0VGltZW91dCBmdW5jdGlvblxyXG5jb25zdCBzbm9vemUgPSBtcyA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuXHJcbi8qKlxyXG4gKiBXb3JrZXJQcm9jZXNzIHJlc3BvbnNpYmxlIGZvciBzcGF3bmluZyBhIHdvcmtlciBwcm9jZXNzIHRoZSB0ZXN0IGluc3RhbmNlLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV29ya2VyUHJvY2VzcyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwaWQsIHdvcmtlclBhdGgsIGRlYnVnTW9kZSwgZGVidWdQb3J0LCBuYW1lID0gbnVsbCwgbnBtR1Jvb3RFeGVjdXRpb24gPSB0cnVlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fc3RvcHBlZEJ5VXNlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fcGlkID0gcGlkO1xyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gZGVidWdNb2RlO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnUG9ydCA9IGRlYnVnUG9ydDtcclxuICAgICAgICB0aGlzLl93b3JrZXJQYXRoID0gd29ya2VyUGF0aDtcclxuICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IG5wbUdSb290RXhlY3V0aW9uO1xyXG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMgPSBbXTtcclxuICAgICAgICAvLyBob2xkIHRoZSByZW1vdGUgaW52b2NhdGlvbiBwcm9taXNlXHJcbiAgICAgICAgdGhpcy5fY2FsbHMgPSB7fTtcclxuICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXJzID0ge307XHJcbiAgICB9XHJcbiAgICBhc3luYyBzdGFydCgpIHtcclxuICAgICAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHByb2Nlc3MuZW52LCB7XHJcbiAgICAgICAgICAgIE9YX1dPUktFUjogdHJ1ZSxcclxuICAgICAgICAgICAgREVCVUc6ICFpc05hTih0aGlzLl9kZWJ1Z1BvcnQpLFxyXG4gICAgICAgICAgICBOT19VUERBVEVfTk9USUZJRVI6IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nIHdvcmtlciBwcm9jZXNzICR7dGhpcy5fcGlkfS5gKTtcclxuICAgICAgICBsZXQgZm9ya09wdHMgPSB7XHJcbiAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcclxuICAgICAgICAgICAgZW52LFxyXG4gICAgICAgICAgICBleGVjQXJndjogW10sXHJcbiAgICAgICAgICAgIGRldGFjaGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgLy9zaWxlbnQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdQb3J0KSB7XHJcbiAgICAgICAgICAgIC8vIGFkZCAtLWluc3BlY3QtYnJrIGFyZ3VtZW50IGlmIGRlYnVnIHBvcnQgaXMgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgIGZvcmtPcHRzLmV4ZWNBcmd2ID0gT2JqZWN0LmFzc2lnbihmb3JrT3B0cy5leGVjQXJndiwgWyctLWluc3BlY3QtYnJrPScgKyB0aGlzLl9kZWJ1Z1BvcnRdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHByaW50IG1vcmUgaW5mb3JtYXRpb24gZm9yIG5vZGVqcyBlcnJvcnNcclxuICAgICAgICBmb3JrT3B0cy5leGVjQXJndi5wdXNoKCctLXRyYWNlLXdhcm5pbmdzJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbikge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGdsb2JhbE5wbU1vZHVsZXNQYXRoO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMoJ25wbSByb290IC1nJywge2N3ZDogcHJvY2Vzcy5jd2QoKX0sIGZ1bmN0aW9uIChlcnIsIHN0ZG91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGFyd2luIG5wbSByb290IGVycm9yOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZG91dCAmJiBzdGRvdXQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE5wbU1vZHVsZXNQYXRoID0gc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGVjUmVzdWx0ID0gZXhlY1N5bmMoJ25wbSByb290IC1nJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleGVjUmVzdWx0ICYmIGV4ZWNSZXN1bHQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsTnBtTW9kdWxlc1BhdGggPSBleGVjUmVzdWx0LnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsTnBtTW9kdWxlc1BhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICBmb3JrT3B0cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcmtPcHRzLmVudlxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ya09wdHMuZW52Lk5PREVfUEFUSCA9IGdsb2JhbE5wbU1vZHVsZXNQYXRoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbnBtIHJvb3QgZXJyb3I6JywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZvcmsgd29ya2VyXHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gZm9yayh0aGlzLl93b3JrZXJQYXRoLCBmb3JrT3B0cyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2hvb2tDaGlsZFByb2NFdmVudHMoKTtcclxuICAgICAgICAvLyBpZiB3ZSBhcmUgaW4gZGVidWcgbW9kZSwgaW5pdGlhbGl6ZSBkZWJ1Z2dlciBhbmQgb25seSB0aGVuIHN0YXJ0IG1vZHVsZXMgJ2luaXQnXHJcblxyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkUHJvYztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzdGFydERlYnVnZ2VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5pdGlhbGl6ZURlYnVnZ2VyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHN0b3Aoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkICYmIHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIgJiYgdGhpcy5fZGVidWdnZXIuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCdDQU5DRUxFRCcgPT09IHN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIucmVzdW1lVGVybWluYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZva2UoJ2Rpc3Bvc2UnLCBzdGF0dXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoMTAwKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoMTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnZ2VyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgdHlwZTogJ2V4aXQnLFxyXG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmtpbGwoKTtcclxuICAgICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGtpbGwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGlsZFByb2Mua2lsbCgnU0lHSU5UJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQocmlkLCBvcHRpb25zLCBjYXBzKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZva2UoJ2luaXQnLCByaWQsIG9wdGlvbnMsIGNhcHMpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gYWZ0ZXJUaW1lIC0gYmVmb3JlVGltZTtcclxuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGxldCBzdGFydCA9ICcnO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLl9uYW1lKycgJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2cuaW5mbyhzdGFydCsnV29ya2VyIGluaXRpYWxpemVkIGluICcgKyBkdXJhdGlvbiArICcgbXMnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnZ2VyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkICYmIHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZScsIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbmQoe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2V4aXQnLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmtpbGwoKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdleGl0JyxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5raWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2VNb2R1bGVzKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZU1vZHVsZXMnLCBzdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVidWdnZXIgKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWJ1Z2dlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNSdW5uaW5nICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNSdW5uaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0luaXRpYWxpemVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luaXRpYWxpemVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJ1bihydW5PcHRzKSB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW52b2tlKCdydW4nLCBydW5PcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmUoZXZlbnROYW1lLCBoYW5kbGVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudEhhbmRsZXJzW2V2ZW50TmFtZV0gJiYgdHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVyc1tldmVudE5hbWVdID0gaGFuZGxlcjtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3Vic2NyaWJlJyxcclxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudE5hbWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbnZva2UobWV0aG9kKSB7XHJcbiAgICAgICAgbGV0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG4gICAgICAgIC8vIGlnbm9yZSBmaXJzdCBhcmd1bWVudCAtIGUuZy4gbWV0aG9kXHJcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBhcmdzLnNoaWZ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FsbElkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW52b2tlJyxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXHJcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsc1tjYWxsSWRdID0gZGVmZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW52b2tlVGVzdEhvb2soaG9va05hbWUsIGhvb2tBcmdzKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbElkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgdHlwZTogJ2ludm9rZTpob29rJyxcclxuICAgICAgICAgICAgbWV0aG9kOiBob29rTmFtZSxcclxuICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXHJcbiAgICAgICAgICAgIGFyZ3M6IGhvb2tBcmdzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fY2FsbHNbY2FsbElkXSA9IGRlZmVyKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfc2VuZChtZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Muc2VuZChtZXNzYWdlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBfcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z1BvcnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3doZW5PeHlnZW5EaXNwb3NlZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fd2hlbk94eWdlbkluaXRpYWxpemVkID0gbnVsbDtcclxuICAgICAgICB0aGlzLl93aGVuTW9kdWxlc0Rpc3Bvc2VkID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX2hvb2tDaGlsZFByb2NFdmVudHMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ21lc3NhZ2UnLCB0aGlzLl9oYW5kbGVDaGlsZE1lc3NhZ2UuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdlcnJvcicsIHRoaXMuX2hhbmRsZUNoaWxkRXJyb3IuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdleGl0JywgdGhpcy5faGFuZGxlQ2hpbGRFeGl0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5vbignZGlzY29ubmVjdCcsIHRoaXMuX2hhbmRsZUNoaWxkRGlzY29ubmVjdC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgdGhpcy5faGFuZGxlQ2hpbGRVbmNhdWdodEV4Y2VwdGlvbi5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ1NJR0lOVCcsIHRoaXMuX2hhbmRsZUNoaWxkU2lnSW50LmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZE1lc3NhZ2UobXNnKSB7XHJcbiAgICAgICAgaWYgKG1zZy5ldmVudCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1zZy5ldmVudCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnaW52b2tlOnJlc3VsdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5jYWxsSWQgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2NhbGxzLCBtc2cuY2FsbElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5fY2FsbHNbbXNnLmNhbGxJZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KG1zZy5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUobXNnLnJldHZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxzW21zZy5jYWxsSWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JlcG9ydGVyJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAobXNnLm1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlcG9ydGVyJywgeyBwaWQ6IHRoaXMuX3BpZCwgbWV0aG9kOiBtc2cubWV0aG9kLCBhcmdzOiBtc2cuYXJncyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdldmVudCc6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlV29ya2VyRXZlbnQobXNnLm5hbWUsIG1zZy5hcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBPYmplY3QuYXNzaWduKG1zZywgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2hhbmRsZVdvcmtlckV2ZW50KG5hbWUsIGFyZ3MpIHtcclxuICAgICAgICBpZiAobmFtZSAmJiB0aGlzLl9ldmVudEhhbmRsZXJzICYmIHRoaXMuX2V2ZW50SGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V2ZW50SGFuZGxlcnNbbmFtZV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKCdFcnJvciB0aHJvd24gYnkgd29ya2VyIGV2ZW50IGhhbmRsZXIgXCIke25hbWV9OicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZEVycm9yKGVycm9yKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IHRocm93biBhbiBlcnJvcjogJHtlcnJvcn0uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIE9iamVjdC5hc3NpZ24oeyBlcnJvciA6IGVycm9yIH0sIHsgcGlkOiB0aGlzLl9waWQgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZEV4aXQoZXhpdENvZGUsIHNpZ25hbCkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSBmaW5pc2hlZCB3aXRoIGV4aXQgY29kZSAke2V4aXRDb2RlfSBhbmQgc2lnbmFsICR7c2lnbmFsfS5gKTtcclxuICAgICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnZXhpdCcsIHsgcGlkOiB0aGlzLl9waWQsIGV4aXRDb2RlLCBzaWduYWwgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkRGlzY29ubmVjdCgpIHtcclxuICAgICAgICBsb2cuZGVidWcoYFdvcmtlciAke3RoaXMuX3BpZH0gZGlzY29ubmVjdGVkLmApO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZFVuY2F1Z2h0RXhjZXB0aW9uKGVycm9yKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IHRocm93biBhbiB1bmNhdWdodCBlcnJvcjogJHtlcnJvcn0uYCk7XHJcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbih7IGVycm9yIDogZXJyb3IgfSwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdleGl0JywgeyBwaWQ6IHRoaXMuX3BpZCwgZXhpdENvZGU6IDEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkU2lnSW50KCkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSByZWNlaXZlZCBTSUdJTlQgc2lnbmFsLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pbml0aWFsaXplRGVidWdnZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIgPSBuZXcgRGVidWdnZXIodGhpcy5fcGlkKTtcclxuICAgICAgICBsZXQgd2hlbkRlYnVnZ2VyUmVhZHkgPSBkZWZlcigpO1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICAvLyBoYW5kbGUgZGVidWdnZXIgZXZlbnRzXHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ3JlYWR5JywgZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgICAgIC8vIHJlc3VtZSB0aGUgZmlyc3QgYnJlYWtwb2ludCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIGJ5IHRoZSBkZWJ1Z2dlclxyXG4gICAgICAgICAgICBpZiAoX3RoaXMuX2RlYnVnZ2VyICYmIF90aGlzLl9kZWJ1Z2dlci5jb250aW51ZSkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX2RlYnVnZ2VyLmNvbnRpbnVlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hlbkRlYnVnZ2VyUmVhZHkucmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xyXG5cclxuICAgICAgICAgICAgbG9nLmVycm9yKCdkZWJ1Z2dlciBvbiBlcnJvciA6JywgZXJyKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6ZXJyb3InLCBPYmplY3QuYXNzaWduKGVyciwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICAgICAgICAgIC8vIHJlamVjdCB0aGUgcHJvbWlzZSBvbmx5IGlmIHdlIGdvdCBhbiBlcnJvciByaWdodCBhZnRlciBfZGVidWdnZXIuY29ubmVjdCgpIGNhbGwgYmVsb3cgLSB3ZSBuZWVkIHRoaXMgdG8gaW5kaWNhdGUgZGVidWdnZXIgaW5pdGlhbGl6YXRpb24gZXJyb3JcclxuICAgICAgICAgICAgaWYgKCF3aGVuRGVidWdnZXJSZWFkeS5pc1Jlc29sdmVkKSB7XHJcbiAgICAgICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ2JyZWFrJywgZnVuY3Rpb24oYnJlYWtwb2ludERhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkZWJ1Z2dlcjpicmVhaycsIGJyZWFrcG9pbnREYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlci5vbignYnJlYWtFcnJvcicsIGFzeW5jIGZ1bmN0aW9uKGJyZWFrRXJyb3IpIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChicmVha0Vycm9yICYmIGJyZWFrRXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9icmVha3BvaW50RXJyb3JzLmluY2x1ZGVzKGJyZWFrRXJyb3IubWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2JyZWFrcG9pbnRFcnJvcnMucHVzaChicmVha0Vycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6YnJlYWtFcnJvcicsIGJyZWFrRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxvZy5pbmZvKGBDb25uZWN0aW5nIHRvIGRlYnVnZ2VyIG9uIHBvcnQgJHt0aGlzLl9kZWJ1Z1BvcnR9Li4uYCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmNvbm5lY3QodGhpcy5fZGVidWdQb3J0LCAnMTI3LjAuMC4xJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0Nhbm5vdCBjb25uZWN0IHRvIHRoZSBkZWJ1Z2dlcjogJywgZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnQ2Fubm90IGNvbm5lY3QgdG8gdGhlIGRlYnVnZ2VyOiAnICsgZS5tZXNzYWdlO1xyXG4gICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gd2hlbkRlYnVnZ2VyUmVhZHkucHJvbWlzZTtcclxuICAgIH1cclxufSJdfQ==
|
|
452
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXJzL1dvcmtlclByb2Nlc3MuanMiXSwibmFtZXMiOlsiV29ya2VyIiwicmVxdWlyZSIsImxvZyIsInNub296ZSIsIm1zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwiV29ya2VyUHJvY2VzcyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwicGlkIiwid29ya2VyUGF0aCIsImRlYnVnTW9kZSIsImRlYnVnUG9ydCIsIm5hbWUiLCJucG1HUm9vdEV4ZWN1dGlvbiIsIl9uYW1lIiwiX2lzUnVubmluZyIsIl9pc0luaXRpYWxpemVkIiwiX3N0b3BwZWRCeVVzZXIiLCJfcGlkIiwiX2NoaWxkUHJvYyIsIl9kZWJ1Z01vZGUiLCJfZGVidWdQb3J0IiwiX3dvcmtlclBhdGgiLCJfbnBtR1Jvb3RFeGVjdXRpb24iLCJfYnJlYWtwb2ludEVycm9ycyIsIl9jYWxscyIsIl9ldmVudEhhbmRsZXJzIiwic3RhcnQiLCJlbnYiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm9jZXNzIiwiT1hfV09SS0VSIiwiREVCVUciLCJpc05hTiIsIk5PX1VQREFURV9OT1RJRklFUiIsImluZm8iLCJmb3JrT3B0cyIsImN3ZCIsImV4ZWNBcmd2IiwiZGV0YWNoZWQiLCJwdXNoIiwiZ2xvYmFsTnBtTW9kdWxlc1BhdGgiLCJwbGF0Zm9ybSIsInJlamVjdCIsImVyciIsInN0ZG91dCIsImNvbnNvbGUiLCJ0b1N0cmluZyIsInRyaW0iLCJlIiwiZXhlY1Jlc3VsdCIsIk5PREVfUEFUSCIsIndvcmtlckRhdGEiLCJfaG9va0NoaWxkUHJvY0V2ZW50cyIsInN0YXJ0RGVidWdnZXIiLCJfaW5pdGlhbGl6ZURlYnVnZ2VyIiwic3RvcCIsInN0YXR1cyIsIl9kZWJ1Z2dlciIsIl9wYXVzZWQiLCJkaXNhYmxlIiwicmVzdW1lVGVybWluYXRlIiwiaW52b2tlIiwiY2xvc2UiLCJfc2VuZCIsInR5cGUiLCJraWxsIiwiX3Jlc2V0IiwiaW5pdCIsInJpZCIsIm9wdGlvbnMiLCJjYXBzIiwiYmVmb3JlVGltZSIsIkRhdGUiLCJnZXRUaW1lIiwiYWZ0ZXJUaW1lIiwiZHVyYXRpb24iLCJkaXNwb3NlIiwiZGlzcG9zZU1vZHVsZXMiLCJkZWJ1Z2dlciIsImlzUnVubmluZyIsImlzSW5pdGlhbGl6ZWQiLCJydW4iLCJydW5PcHRzIiwic3Vic2NyaWJlIiwiZXZlbnROYW1lIiwiaGFuZGxlciIsImV2ZW50IiwibWV0aG9kIiwiYXJncyIsIkFycmF5IiwicHJvdG90eXBlIiwic2xpY2UiLCJjYWxsIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic2hpZnQiLCJjYWxsSWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwicHJvbWlzZSIsImludm9rZVRlc3RIb29rIiwiaG9va05hbWUiLCJob29rQXJncyIsIm1lc3NhZ2UiLCJwb3N0TWVzc2FnZSIsIm9uIiwiX2hhbmRsZUNoaWxkTWVzc2FnZSIsImJpbmQiLCJfaGFuZGxlQ2hpbGRFcnJvciIsIl9oYW5kbGVDaGlsZEV4aXQiLCJfaGFuZGxlQ2hpbGREaXNjb25uZWN0IiwiX2hhbmRsZUNoaWxkVW5jYXVnaHRFeGNlcHRpb24iLCJfaGFuZGxlQ2hpbGRTaWdJbnQiLCJtc2ciLCJoYXNPd25Qcm9wZXJ0eSIsImVycm9yIiwicmV0dmFsIiwiZW1pdCIsIl9oYW5kbGVXb3JrZXJFdmVudCIsImFwcGx5IiwidW5kZWZpbmVkIiwiZGVidWciLCJleGl0Q29kZSIsInNpZ25hbCIsIkRlYnVnZ2VyIiwid2hlbkRlYnVnZ2VyUmVhZHkiLCJfdGhpcyIsImNvbnRpbnVlIiwiaXNSZXNvbHZlZCIsImJyZWFrcG9pbnREYXRhIiwiYnJlYWtFcnJvciIsImluY2x1ZGVzIiwiY29ubmVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBR0E7O0FBQ0E7Ozs7QUFQQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBYUMsT0FBTyxDQUFDLGdCQUFELENBQTFCOztBQUlBLE1BQU1DLEdBQUcsR0FB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eUIsVUFBZixFQUEyQjtBQUV2RCxVQUFJQSxVQUFVLElBQUlBLFVBQVUsQ0FBQzNCLE9BQTdCLEVBQXNDO0FBQ2xDLFlBQUl1QixLQUFLLENBQUN4RyxpQkFBTixDQUF3QjZHLFFBQXhCLENBQWlDRCxVQUFVLENBQUMzQixPQUE1QyxDQUFKLEVBQTBELENBRXpELENBRkQsTUFFTztBQUNIdUIsVUFBQUEsS0FBSyxDQUFDeEcsaUJBQU4sQ0FBd0JpQixJQUF4QixDQUE2QjJGLFVBQVUsQ0FBQzNCLE9BQXhDOztBQUNBLGVBQUtjLElBQUwsQ0FBVSxxQkFBVixFQUFpQ2EsVUFBakM7QUFDSDtBQUNKO0FBQ0osS0FWRDs7QUFZQSxRQUFJO0FBQ0FySSxNQUFBQSxHQUFHLENBQUNxQyxJQUFKLENBQVUsa0NBQWlDLEtBQUtmLFVBQVcsS0FBM0Q7QUFDQSxZQUFNLEtBQUtzQyxTQUFMLENBQWUyRSxPQUFmLENBQXVCLEtBQUtqSCxVQUE1QixFQUF3QyxXQUF4QyxDQUFOO0FBQ0gsS0FIRCxDQUdFLE9BQU82QixDQUFQLEVBQVU7QUFDUm5ELE1BQUFBLEdBQUcsQ0FBQ3NILEtBQUosQ0FBVSxrQ0FBVixFQUE4Q25FLENBQTlDO0FBQ0EsWUFBTXVELE9BQU8sR0FBRyxxQ0FBcUN2RCxDQUFDLENBQUN1RCxPQUF2RDtBQUNBc0IsTUFBQUEsaUJBQWlCLENBQUNuRixNQUFsQixDQUF5QjZELE9BQXpCO0FBQ0g7O0FBRUQsV0FBT3NCLGlCQUFpQixDQUFDMUIsT0FBekI7QUFDSDs7QUFwWW1EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMsIGV4ZWMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuY29uc3QgeyBXb3JrZXIgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJyk7XHJcblxyXG4vLyBzZXR1cCBsb2dnZXJcclxuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9saWIvbG9nZ2VyJztcclxuY29uc3QgbG9nID0gbG9nZ2VyKCdXb3JrZXJQcm9jZXNzJyk7XHJcblxyXG5pbXBvcnQgRGVidWdnZXIgZnJvbSAnLi4vbGliL2RlYnVnZ2VyJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcblxyXG4vLyBzbm9vemUgZnVuY3Rpb24gLSBhc3luYyB3cmFwcGVyIGFyb3VuZCBzZXRUaW1lb3V0IGZ1bmN0aW9uXHJcbmNvbnN0IHNub296ZSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG5cclxuLyoqXHJcbiAqIFdvcmtlclByb2Nlc3MgcmVzcG9uc2libGUgZm9yIHNwYXduaW5nIGEgd29ya2VyIHByb2Nlc3MgdGhlIHRlc3QgaW5zdGFuY2UuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXb3JrZXJQcm9jZXNzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKHBpZCwgd29ya2VyUGF0aCwgZGVidWdNb2RlLCBkZWJ1Z1BvcnQsIG5hbWUgPSBudWxsLCBucG1HUm9vdEV4ZWN1dGlvbiA9IHRydWUpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9zdG9wcGVkQnlVc2VyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9waWQgPSBwaWQ7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z01vZGUgPSBkZWJ1Z01vZGU7XHJcbiAgICAgICAgdGhpcy5fZGVidWdQb3J0ID0gZGVidWdQb3J0O1xyXG4gICAgICAgIHRoaXMuX3dvcmtlclBhdGggPSB3b3JrZXJQYXRoO1xyXG4gICAgICAgIHRoaXMuX25wbUdSb290RXhlY3V0aW9uID0gbnBtR1Jvb3RFeGVjdXRpb247XHJcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycyA9IFtdO1xyXG4gICAgICAgIC8vIGhvbGQgdGhlIHJlbW90ZSBpbnZvY2F0aW9uIHByb21pc2VcclxuICAgICAgICB0aGlzLl9jYWxscyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2V2ZW50SGFuZGxlcnMgPSB7fTtcclxuICAgIH1cclxuICAgIGFzeW5jIHN0YXJ0KCkge1xyXG4gICAgICAgIGNvbnN0IGVudiA9IE9iamVjdC5hc3NpZ24ocHJvY2Vzcy5lbnYsIHtcclxuICAgICAgICAgICAgT1hfV09SS0VSOiB0cnVlLFxyXG4gICAgICAgICAgICBERUJVRzogIWlzTmFOKHRoaXMuX2RlYnVnUG9ydCksXHJcbiAgICAgICAgICAgIE5PX1VQREFURV9OT1RJRklFUjogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsb2cuaW5mbyhgU3RhcnRpbmcgd29ya2VyIHByb2Nlc3MgJHt0aGlzLl9waWR9LmApO1xyXG4gICAgICAgIGxldCBmb3JrT3B0cyA9IHtcclxuICAgICAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxyXG4gICAgICAgICAgICBlbnYsXHJcbiAgICAgICAgICAgIGV4ZWNBcmd2OiBbXSxcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAvL3NpbGVudDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z1BvcnQpIHtcclxuICAgICAgICAgICAgLy8gYWRkIC0taW5zcGVjdC1icmsgYXJndW1lbnQgaWYgZGVidWcgcG9ydCBpcyBzcGVjaWZpZWRcclxuICAgICAgICAgICAgZm9ya09wdHMuZXhlY0FyZ3YgPSBPYmplY3QuYXNzaWduKGZvcmtPcHRzLmV4ZWNBcmd2LCBbJy0taW5zcGVjdC1icms9JyArIHRoaXMuX2RlYnVnUG9ydF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcHJpbnQgbW9yZSBpbmZvcm1hdGlvbiBmb3Igbm9kZWpzIGVycm9yc1xyXG4gICAgICAgIGZvcmtPcHRzLmV4ZWNBcmd2LnB1c2goJy0tdHJhY2Utd2FybmluZ3MnKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX25wbUdSb290RXhlY3V0aW9uKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZ2xvYmFsTnBtTW9kdWxlc1BhdGg7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYygnbnBtIHJvb3QgLWcnLCB7Y3dkOiBwcm9jZXNzLmN3ZCgpfSwgZnVuY3Rpb24gKGVyciwgc3Rkb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdkYXJ3aW4gbnBtIHJvb3QgZXJyb3I6JywgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rkb3V0ICYmIHN0ZG91dC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsTnBtTW9kdWxlc1BhdGggPSBzdGRvdXQudG9TdHJpbmcoKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSBleGVjU3luYygnbnBtIHJvb3QgLWcnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4ZWNSZXN1bHQgJiYgZXhlY1Jlc3VsdC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxOcG1Nb2R1bGVzUGF0aCA9IGV4ZWNSZXN1bHQudG9TdHJpbmcoKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxOcG1Nb2R1bGVzUGF0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcmtPcHRzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ya09wdHMuZW52XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JrT3B0cy5lbnYuTk9ERV9QQVRIID0gZ2xvYmFsTnBtTW9kdWxlc1BhdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCducG0gcm9vdCBlcnJvcjonLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZm9yayB3b3JrZXJcclxuICAgICAgICAvLyB0aGlzLl9jaGlsZFByb2MgPSBmb3JrKHRoaXMuX3dvcmtlclBhdGgsIGZvcmtPcHRzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gbmV3IFdvcmtlcih0aGlzLl93b3JrZXJQYXRoLCB7XHJcbiAgICAgICAgICAgIHdvcmtlckRhdGE6IHt9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2hvb2tDaGlsZFByb2NFdmVudHMoKTtcclxuICAgICAgICAvLyBpZiB3ZSBhcmUgaW4gZGVidWcgbW9kZSwgaW5pdGlhbGl6ZSBkZWJ1Z2dlciBhbmQgb25seSB0aGVuIHN0YXJ0IG1vZHVsZXMgJ2luaXQnXHJcblxyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkUHJvYztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzdGFydERlYnVnZ2VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5pdGlhbGl6ZURlYnVnZ2VyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHN0b3Aoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkICYmIHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIgJiYgdGhpcy5fZGVidWdnZXIuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCdDQU5DRUxFRCcgPT09IHN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIucmVzdW1lVGVybWluYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZva2UoJ2Rpc3Bvc2UnLCBzdGF0dXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoMTAwKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoMTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnZ2VyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgdHlwZTogJ2V4aXQnLFxyXG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBhd2FpdCB0aGlzLmtpbGwoKTtcclxuICAgICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGtpbGwoKSB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgIC8vICAgICBhd2FpdCB0aGlzLl9jaGlsZFByb2MudGVybWluYXRlKCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQocmlkLCBvcHRpb25zLCBjYXBzKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZva2UoJ2luaXQnLCByaWQsIG9wdGlvbnMsIGNhcHMpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gYWZ0ZXJUaW1lIC0gYmVmb3JlVGltZTtcclxuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGxldCBzdGFydCA9ICcnO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLl9uYW1lKycgJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2cuaW5mbyhzdGFydCsnV29ya2VyIGluaXRpYWxpemVkIGluICcgKyBkdXJhdGlvbiArICcgbXMnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnZ2VyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkICYmIHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZScsIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbmQoe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2V4aXQnLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmtpbGwoKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdleGl0JyxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5raWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2VNb2R1bGVzKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZU1vZHVsZXMnLCBzdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVidWdnZXIgKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWJ1Z2dlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNSdW5uaW5nICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNSdW5uaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0luaXRpYWxpemVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luaXRpYWxpemVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJ1bihydW5PcHRzKSB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW52b2tlKCdydW4nLCBydW5PcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmUoZXZlbnROYW1lLCBoYW5kbGVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudEhhbmRsZXJzW2V2ZW50TmFtZV0gJiYgdHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVyc1tldmVudE5hbWVdID0gaGFuZGxlcjtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3Vic2NyaWJlJyxcclxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudE5hbWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbnZva2UobWV0aG9kKSB7XHJcbiAgICAgICAgbGV0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG4gICAgICAgIC8vIGlnbm9yZSBmaXJzdCBhcmd1bWVudCAtIGUuZy4gbWV0aG9kXHJcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBhcmdzLnNoaWZ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FsbElkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW52b2tlJyxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXHJcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsc1tjYWxsSWRdID0gZGVmZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW52b2tlVGVzdEhvb2soaG9va05hbWUsIGhvb2tBcmdzKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbElkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgdHlwZTogJ2ludm9rZTpob29rJyxcclxuICAgICAgICAgICAgbWV0aG9kOiBob29rTmFtZSxcclxuICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXHJcbiAgICAgICAgICAgIGFyZ3M6IGhvb2tBcmdzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fY2FsbHNbY2FsbElkXSA9IGRlZmVyKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfc2VuZChtZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jaGlsZFByb2MucG9zdE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jlc2V0KCkge1xyXG4gICAgICAgIC8vIHRoaXMuX2NoaWxkUHJvYyA9IG51bGw7XHJcbiAgICAgICAgLy8gdGhpcy5fZGVidWdnZXIgPSBudWxsO1xyXG4gICAgICAgIC8vIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRoaXMuX2RlYnVnTW9kZSA9IG51bGw7XHJcbiAgICAgICAgLy8gdGhpcy5fZGVidWdQb3J0ID0gbnVsbDtcclxuICAgICAgICAvLyB0aGlzLl93aGVuT3h5Z2VuRGlzcG9zZWQgPSBudWxsO1xyXG4gICAgICAgIC8vIHRoaXMuX3doZW5PeHlnZW5Jbml0aWFsaXplZCA9IG51bGw7XHJcbiAgICAgICAgLy8gdGhpcy5fd2hlbk1vZHVsZXNEaXNwb3NlZCA9IG51bGw7XHJcbiAgICAgICAgLy8gdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9ob29rQ2hpbGRQcm9jRXZlbnRzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdtZXNzYWdlJywgdGhpcy5faGFuZGxlQ2hpbGRNZXNzYWdlLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5vbignZXJyb3InLCB0aGlzLl9oYW5kbGVDaGlsZEVycm9yLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5vbignZXhpdCcsIHRoaXMuX2hhbmRsZUNoaWxkRXhpdC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzLl9oYW5kbGVDaGlsZERpc2Nvbm5lY3QuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIHRoaXMuX2hhbmRsZUNoaWxkVW5jYXVnaHRFeGNlcHRpb24uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdTSUdJTlQnLCB0aGlzLl9oYW5kbGVDaGlsZFNpZ0ludC5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQ2hpbGRNZXNzYWdlKG1zZykge1xyXG4gICAgICAgIGlmIChtc2cuZXZlbnQpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChtc2cuZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2ludm9rZTpyZXN1bHQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtc2cuY2FsbElkICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9jYWxscywgbXNnLmNhbGxJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuX2NhbGxzW21zZy5jYWxsSWRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXNnLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChtc2cuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKG1zZy5yZXR2YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsc1ttc2cuY2FsbElkXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdyZXBvcnRlcic6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5tZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdyZXBvcnRlcicsIHsgcGlkOiB0aGlzLl9waWQsIG1ldGhvZDogbXNnLm1ldGhvZCwgYXJnczogbXNnLmFyZ3MgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZXZlbnQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZVdvcmtlckV2ZW50KG1zZy5uYW1lLCBtc2cuYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0KCdtZXNzYWdlJywgT2JqZWN0LmFzc2lnbihtc2csIHsgcGlkOiB0aGlzLl9waWQgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9oYW5kbGVXb3JrZXJFdmVudChuYW1lLCBhcmdzKSB7XHJcbiAgICAgICAgaWYgKG5hbWUgJiYgdGhpcy5fZXZlbnRIYW5kbGVycyAmJiB0aGlzLl9ldmVudEhhbmRsZXJzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ldmVudEhhbmRsZXJzW25hbWVdLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGxvZy5lcnJvcignRXJyb3IgdGhyb3duIGJ5IHdvcmtlciBldmVudCBoYW5kbGVyIFwiJHtuYW1lfTonLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQ2hpbGRFcnJvcihlcnJvcikge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSB0aHJvd24gYW4gZXJyb3I6ICR7ZXJyb3J9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBPYmplY3QuYXNzaWduKHsgZXJyb3IgOiBlcnJvciB9LCB7IHBpZDogdGhpcy5fcGlkIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQ2hpbGRFeGl0KGV4aXRDb2RlLCBzaWduYWwpIHtcclxuICAgICAgICBsb2cuZGVidWcoYFdvcmtlciAke3RoaXMuX3BpZH0gZmluaXNoZWQgd2l0aCBleGl0IGNvZGUgJHtleGl0Q29kZX0gYW5kIHNpZ25hbCAke3NpZ25hbH0uYCk7XHJcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcclxuICAgICAgICAvLyB0aGlzLmVtaXQoJ2V4aXQnLCB7IHBpZDogdGhpcy5fcGlkLCBleGl0Q29kZSwgc2lnbmFsIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZERpc2Nvbm5lY3QoKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IGRpc2Nvbm5lY3RlZC5gKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQ2hpbGRVbmNhdWdodEV4Y2VwdGlvbihlcnJvcikge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSB0aHJvd24gYW4gdW5jYXVnaHQgZXJyb3I6ICR7ZXJyb3J9LmApO1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIE9iamVjdC5hc3NpZ24oeyBlcnJvciA6IGVycm9yIH0sIHsgcGlkOiB0aGlzLl9waWQgfSkpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnZXhpdCcsIHsgcGlkOiB0aGlzLl9waWQsIGV4aXRDb2RlOiAxIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZFNpZ0ludCgpIHtcclxuICAgICAgICBsb2cuZGVidWcoYFdvcmtlciAke3RoaXMuX3BpZH0gcmVjZWl2ZWQgU0lHSU5UIHNpZ25hbC5gKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaW5pdGlhbGl6ZURlYnVnZ2VyKCkge1xyXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyID0gbmV3IERlYnVnZ2VyKHRoaXMuX3BpZCk7XHJcbiAgICAgICAgbGV0IHdoZW5EZWJ1Z2dlclJlYWR5ID0gZGVmZXIoKTtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgLy8gaGFuZGxlIGRlYnVnZ2VyIGV2ZW50c1xyXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyLm9uKCdyZWFkeScsIGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgICAgICAvLyByZXN1bWUgdGhlIGZpcnN0IGJyZWFrcG9pbnQgd2hpY2ggaXMgYXV0b21hdGljYWxseSBhZGRlZCBieSB0aGUgZGVidWdnZXJcclxuICAgICAgICAgICAgaWYgKF90aGlzLl9kZWJ1Z2dlciAmJiBfdGhpcy5fZGVidWdnZXIuY29udGludWUpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9kZWJ1Z2dlci5jb250aW51ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoZW5EZWJ1Z2dlclJlYWR5LnJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlci5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcclxuXHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignZGVidWdnZXIgb24gZXJyb3IgOicsIGVycik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RlYnVnZ2VyOmVycm9yJywgT2JqZWN0LmFzc2lnbihlcnIsIHsgcGlkOiB0aGlzLl9waWQgfSkpO1xyXG4gICAgICAgICAgICAvLyByZWplY3QgdGhlIHByb21pc2Ugb25seSBpZiB3ZSBnb3QgYW4gZXJyb3IgcmlnaHQgYWZ0ZXIgX2RlYnVnZ2VyLmNvbm5lY3QoKSBjYWxsIGJlbG93IC0gd2UgbmVlZCB0aGlzIHRvIGluZGljYXRlIGRlYnVnZ2VyIGluaXRpYWxpemF0aW9uIGVycm9yXHJcbiAgICAgICAgICAgIGlmICghd2hlbkRlYnVnZ2VyUmVhZHkuaXNSZXNvbHZlZCkge1xyXG4gICAgICAgICAgICAgICAgd2hlbkRlYnVnZ2VyUmVhZHkucmVqZWN0KGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyLm9uKCdicmVhaycsIGZ1bmN0aW9uKGJyZWFrcG9pbnREYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6YnJlYWsnLCBicmVha3BvaW50RGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ2JyZWFrRXJyb3InLCBhc3luYyBmdW5jdGlvbihicmVha0Vycm9yKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYnJlYWtFcnJvciAmJiBicmVha0Vycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fYnJlYWtwb2ludEVycm9ycy5pbmNsdWRlcyhicmVha0Vycm9yLm1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9icmVha3BvaW50RXJyb3JzLnB1c2goYnJlYWtFcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RlYnVnZ2VyOmJyZWFrRXJyb3InLCBicmVha0Vycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsb2cuaW5mbyhgQ29ubmVjdGluZyB0byBkZWJ1Z2dlciBvbiBwb3J0ICR7dGhpcy5fZGVidWdQb3J0fS4uLmApO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWJ1Z2dlci5jb25uZWN0KHRoaXMuX2RlYnVnUG9ydCwgJzEyNy4wLjAuMScpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdDYW5ub3QgY29ubmVjdCB0byB0aGUgZGVidWdnZXI6ICcsIGUpO1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0Nhbm5vdCBjb25uZWN0IHRvIHRoZSBkZWJ1Z2dlcjogJyArIGUubWVzc2FnZTtcclxuICAgICAgICAgICAgd2hlbkRlYnVnZ2VyUmVhZHkucmVqZWN0KG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHdoZW5EZWJ1Z2dlclJlYWR5LnByb21pc2U7XHJcbiAgICB9XHJcbn0iXX0=
|
package/build/runners/index.js
CHANGED
|
@@ -3,18 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.oxygen =
|
|
6
|
+
exports.oxygen = void 0;
|
|
7
7
|
|
|
8
8
|
require("source-map-support/register");
|
|
9
9
|
|
|
10
|
-
var _cucumber = _interopRequireDefault(require("./cucumber"));
|
|
11
|
-
|
|
12
10
|
var _oxygen = _interopRequireDefault(require("./oxygen"));
|
|
13
11
|
|
|
14
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
13
|
|
|
16
|
-
const cucumber = _cucumber.default;
|
|
17
|
-
exports.cucumber = cucumber;
|
|
18
14
|
const oxygen = _oxygen.default;
|
|
19
15
|
exports.oxygen = oxygen;
|
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXJzL2luZGV4LmpzIl0sIm5hbWVzIjpbIm94eWdlbiIsIk94eWdlblJ1bm5lciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7QUFFTyxNQUFNQSxNQUFNLEdBQUdDLGVBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT3h5Z2VuUnVubmVyIGZyb20gJy4vb3h5Z2VuJztcclxuXHJcbmV4cG9ydCBjb25zdCBveHlnZW4gPSBPeHlnZW5SdW5uZXI7XHJcbiJdfQ==
|