@workflow/next 5.0.0-beta.27 → 5.0.0-beta.28
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/dist/builder-eager.d.ts.map +1 -1
- package/dist/builder-eager.js +30 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +71 -16
- package/dist/loader.d.ts +2 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +26 -16
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AAkCA,wBAAsB,mBAAmB,CACvC,cAAc,CAAC,EAAE,cAAc,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AAkCA,wBAAsB,mBAAmB,CACvC,cAAc,CAAC,EAAE,cAAc,oBAAoB,CAAC,gBAouBrD"}
|
package/dist/builder-eager.js
CHANGED
|
@@ -75,6 +75,7 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
75
75
|
interimBundleCtx: combinedResult.interimBundleCtx,
|
|
76
76
|
bundleFinal: combinedResult.bundleFinal,
|
|
77
77
|
};
|
|
78
|
+
let workflowInterimBundleText = combinedResult.workflowInterimBundleText;
|
|
78
79
|
let discoveredEntries = combinedResult.discoveredEntries;
|
|
79
80
|
let stepsManifest = combinedResult.stepsManifest;
|
|
80
81
|
let workflowsManifest = combinedResult.workflowsManifest;
|
|
@@ -109,9 +110,12 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
109
110
|
'/.well-known/workflow/',
|
|
110
111
|
];
|
|
111
112
|
const normalizedGeneratedDir = workflowGeneratedDir.replace(/\\/g, '/');
|
|
113
|
+
const normalizedDistDir = normalizePath(this.config.distDir);
|
|
112
114
|
ignoredPathFragments.push(normalizedGeneratedDir);
|
|
113
115
|
const hasIgnoredPathFragment = (normalizedPath) => {
|
|
114
|
-
if (normalizedPath.startsWith(normalizedGeneratedDir)
|
|
116
|
+
if (normalizedPath.startsWith(normalizedGeneratedDir) ||
|
|
117
|
+
normalizedPath === normalizedDistDir ||
|
|
118
|
+
normalizedPath.startsWith(`${normalizedDistDir}/`)) {
|
|
115
119
|
return true;
|
|
116
120
|
}
|
|
117
121
|
for (const fragment of ignoredPathFragments) {
|
|
@@ -166,6 +170,7 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
166
170
|
if (!workflowOutput) {
|
|
167
171
|
throw new Error('Invariant: expected workflow output from hot rebuild');
|
|
168
172
|
}
|
|
173
|
+
workflowInterimBundleText = workflowOutput;
|
|
169
174
|
await workflowsCtx.bundleFinal(workflowOutput);
|
|
170
175
|
await writeManifest(mergeCombinedManifest(stepsManifest));
|
|
171
176
|
};
|
|
@@ -180,6 +185,7 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
180
185
|
discoveredEntries = newCombined.discoveredEntries;
|
|
181
186
|
stepsManifest = newCombined.stepsManifest;
|
|
182
187
|
workflowsManifest = newCombined.workflowsManifest;
|
|
188
|
+
workflowInterimBundleText = newCombined.workflowInterimBundleText;
|
|
183
189
|
if (!newCombined?.interimBundleCtx || !newCombined?.bundleFinal) {
|
|
184
190
|
throw new Error('Invariant: expected workflows bundle context after rebuild');
|
|
185
191
|
}
|
|
@@ -283,6 +289,19 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
283
289
|
const hasFileChanges = ({ addedFiles, modifiedFiles, removedFiles, }) => addedFiles.length > 0 ||
|
|
284
290
|
modifiedFiles.length > 0 ||
|
|
285
291
|
removedFiles.length > 0;
|
|
292
|
+
const stepExecutionFilesChanged = (fileChanges) => {
|
|
293
|
+
const stepEntryFiles = [...discoveredEntries.discoveredSteps].map(normalizePath);
|
|
294
|
+
if (stepEntryFiles.length === 0) {
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
const changedFiles = unique([
|
|
298
|
+
...fileChanges.modifiedFiles,
|
|
299
|
+
...fileChanges.addedFiles,
|
|
300
|
+
...fileChanges.removedFiles,
|
|
301
|
+
]).map(normalizePath);
|
|
302
|
+
return changedFiles.some((changedFile) => stepEntryFiles.includes(changedFile) ||
|
|
303
|
+
stepEntryFiles.some((stepFile) => parentHasChild(stepFile, changedFile)));
|
|
304
|
+
};
|
|
286
305
|
const logDevHmr = (...args) => {
|
|
287
306
|
if (process.env.WORKFLOW_DEV_HMR_LOGS === '1') {
|
|
288
307
|
console.log(...args);
|
|
@@ -314,6 +333,15 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
314
333
|
for (const [file, snapshot] of decision.snapshots || []) {
|
|
315
334
|
sourceSnapshots.set(file, snapshot);
|
|
316
335
|
}
|
|
336
|
+
if (!stepsCtx &&
|
|
337
|
+
workflowInterimBundleText &&
|
|
338
|
+
stepExecutionFilesChanged(fileChanges)) {
|
|
339
|
+
// Source step registrations keep stable imports, so Turbopack
|
|
340
|
+
// can leave the generated flow route cached after a
|
|
341
|
+
// step-body-only edit. Refresh the route wrapper without
|
|
342
|
+
// rediscovering entries or rebuilding the workflow VM.
|
|
343
|
+
await workflowsCtx.bundleFinal(workflowInterimBundleText);
|
|
344
|
+
}
|
|
317
345
|
return;
|
|
318
346
|
}
|
|
319
347
|
if (decision.kind === 'full') {
|
|
@@ -545,4 +573,4 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
545
573
|
CachedNextBuilderEager = NextBuilder;
|
|
546
574
|
return NextBuilder;
|
|
547
575
|
}
|
|
548
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1lYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLWVhZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBa0NBLGtEQTJyQkM7QUE3dEJELHFDQUFpRDtBQUNqRCwrQ0FRMEI7QUFDMUIseUNBQXlFO0FBS3pFLHdEQUFnQztBQUVoQyx5REFPNEI7QUFFNUIsSUFBSSxzQkFBMkIsQ0FBQztBQUNoQyxNQUFNLFNBQVMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsMEJBQTBCLENBRXZELENBQUM7QUFFaEIsOEVBQThFO0FBQzlFLDZFQUE2RTtBQUM3RSxvRUFBb0U7QUFDN0QsS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxjQUFvRDtJQUVwRCxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDM0IsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxFQUNKLFdBQVcsRUFBRSxnQkFBZ0IsRUFDN0Isc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixjQUFjLEdBQ2YsR0FBRyxjQUFjO1FBQ2xCLENBQUMsTUFBTSxTQUFTLENBQXNDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUU3RSxNQUFNLFdBQVksU0FBUSxnQkFBZ0I7UUFLeEMsS0FBSyxDQUFDLEtBQUs7WUFDVCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2hELE1BQU0sb0JBQW9CLEdBQUcsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBRXhFLGtDQUFrQztZQUNsQyxNQUFNLElBQUEsZ0JBQUssRUFBQyxvQkFBb0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sSUFBQSxvQkFBUyxFQUFDLElBQUEsZ0JBQUksRUFBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUUv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LENBQUM7b0JBQ1YsQ0FBQztvQkFDRCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBRUYsZ0NBQWdDO1lBQ2hDLElBQUksTUFBTSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELG9DQUFvQztZQUNwQyxJQUFJLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxrRkFBa0Y7WUFDbEYsSUFBSSxNQUFNLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNoQywrQ0FBK0M7Z0JBQy9DLE1BQU0sSUFBQSxnQkFBSyxFQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBRUQsSUFBSSxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUNuQyx1REFBdUQ7Z0JBQ3ZELE1BQU0sSUFBQSxnQkFBSyxFQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsTUFBTSxJQUFJLEtBQUssQ0FDYixxSEFBcUgsQ0FDdEgsQ0FBQztRQUNKLENBQUM7S0FDRjtJQUVELHNCQUFzQixHQUFHLFdBQVcsQ0FBQztJQUNyQyxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uc3RhbnRzLCB0eXBlIERpcmVudCB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgYWNjZXNzLFxuICBjb3B5RmlsZSxcbiAgbWtkaXIsXG4gIHJlYWRkaXIsXG4gIHJlYWxwYXRoLFxuICBzdGF0LFxuICB3cml0ZUZpbGUsXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZXh0bmFtZSwgaXNBYnNvbHV0ZSwgam9pbiwgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUge1xuICBOZXh0Q29uZmlnIGFzIEJ1aWxkZXJOZXh0Q29uZmlnLFxuICBXb3JrZmxvd01hbmlmZXN0LFxufSBmcm9tICdAd29ya2Zsb3cvYnVpbGRlcnMnO1xuaW1wb3J0IGNob2tpZGFyIGZyb20gJ2Nob2tpZGFyJztcbmltcG9ydCB0eXBlIHsgTmV4dENvbmZpZyBhcyBQcm9qZWN0TmV4dENvbmZpZyB9IGZyb20gJ25leHQnO1xuaW1wb3J0IHtcbiAgY2xhc3NpZnlSZWJ1aWxkLFxuICBjcmVhdGVTb3VyY2VTbmFwc2hvdCxcbiAgdHlwZSBGaWxlQ2hhbmdlcyxcbiAgZ2V0UmVsZXZhbnRGaWxlcyxcbiAgcmVwbGFjZVNvdXJjZVNuYXBzaG90cyxcbiAgdHlwZSBTb3VyY2VTbmFwc2hvdCxcbn0gZnJvbSAnLi93YXRjaC1yZWJ1aWxkLmpzJztcblxubGV0IENhY2hlZE5leHRCdWlsZGVyRWFnZXI6IGFueTtcbmNvbnN0IGltcG9ydEVzbSA9IG5ldyBGdW5jdGlvbignc3BlY2lmaWVyJywgJ3JldHVybiBpbXBvcnQoc3BlY2lmaWVyKScpIGFzIDxUPihcbiAgc3BlY2lmaWVyOiBzdHJpbmdcbikgPT4gUHJvbWlzZTxUPjtcblxuLy8gQ3JlYXRlIHRoZSBlYWdlciBOZXh0IGJ1aWxkZXIgZHluYW1pY2FsbHkgYnkgZXh0ZW5kaW5nIHRoZSBFU00gQmFzZUJ1aWxkZXIuXG4vLyBFeHBvcnRlZCBhcyBnZXROZXh0QnVpbGRlckVhZ2VyKCkgdG8gYWxsb3cgQ29tbW9uSlMgbW9kdWxlcyB0byBpbXBvcnQgZnJvbVxuLy8gdGhlIEVTTSBAd29ya2Zsb3cvYnVpbGRlcnMgcGFja2FnZSB2aWEgZHluYW1pYyBpbXBvcnQgYXQgcnVudGltZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXROZXh0QnVpbGRlckVhZ2VyKFxuICBidWlsZGVyc01vZHVsZT86IHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpXG4pIHtcbiAgaWYgKENhY2hlZE5leHRCdWlsZGVyRWFnZXIpIHtcbiAgICByZXR1cm4gQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlcjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBCYXNlQnVpbGRlcjogQmFzZUJ1aWxkZXJDbGFzcyxcbiAgICBXT1JLRkxPV19RVUVVRV9UUklHR0VSLFxuICAgIGRldGVjdFdvcmtmbG93UGF0dGVybnMsXG4gICAgcGFyZW50SGFzQ2hpbGQsXG4gIH0gPSBidWlsZGVyc01vZHVsZSA/P1xuICAoYXdhaXQgaW1wb3J0RXNtPHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpPignQHdvcmtmbG93L2J1aWxkZXJzJykpO1xuXG4gIGNsYXNzIE5leHRCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXJDbGFzcyB7XG4gICAgcHJvdGVjdGVkIGRlY2xhcmUgY29uZmlnOiBCdWlsZGVyTmV4dENvbmZpZyAmIHtcbiAgICAgIHBhZ2VFeHRlbnNpb25zOiBOb25OdWxsYWJsZTxQcm9qZWN0TmV4dENvbmZpZ1sncGFnZUV4dGVuc2lvbnMnXT47XG4gICAgfTtcblxuICAgIGFzeW5jIGJ1aWxkKCkge1xuICAgICAgY29uc3Qgb3V0cHV0RGlyID0gYXdhaXQgdGhpcy5maW5kQXBwRGlyZWN0b3J5KCk7XG4gICAgICBjb25zdCB3b3JrZmxvd0dlbmVyYXRlZERpciA9IGpvaW4ob3V0cHV0RGlyLCAnLndlbGwta25vd24vd29ya2Zsb3cvdjEnKTtcblxuICAgICAgLy8gRW5zdXJlIG91dHB1dCBkaXJlY3RvcmllcyBleGlzdFxuICAgICAgYXdhaXQgbWtkaXIod29ya2Zsb3dHZW5lcmF0ZWREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICcuZ2l0aWdub3JlJyksICcqJyk7XG5cbiAgICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICAgIGNvbnN0IHRzY29uZmlnUGF0aCA9IGF3YWl0IHRoaXMuZmluZFRzQ29uZmlnUGF0aCgpO1xuXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBpbnB1dEZpbGVzLFxuICAgICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgfTtcblxuICAgICAgLy8gVjI6IEJ1aWxkIGNvbWJpbmVkIHJvdXRlIChyZXBsYWNlcyBzZXBhcmF0ZSBzdGVwICsgZmxvdyByb3V0ZXMpXG4gICAgICBjb25zdCBjb21iaW5lZFJlc3VsdCA9IGF3YWl0IHRoaXMuYnVpbGRDb21iaW5lZEZ1bmN0aW9uKG9wdGlvbnMpO1xuICAgICAgYXdhaXQgdGhpcy5idWlsZFdlYmhvb2tSb3V0ZSh7IHdvcmtmbG93R2VuZXJhdGVkRGlyIH0pO1xuXG4gICAgICBjb25zdCB3cml0ZU1hbmlmZXN0ID0gYXN5bmMgKFxuICAgICAgICBzb3VyY2VNYW5pZmVzdDogV29ya2Zsb3dNYW5pZmVzdCB8IHVuZGVmaW5lZFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0ID0ge1xuICAgICAgICAgIHN0ZXBzOiB7IC4uLnNvdXJjZU1hbmlmZXN0Py5zdGVwcyB9LFxuICAgICAgICAgIHdvcmtmbG93czogeyAuLi5zb3VyY2VNYW5pZmVzdD8ud29ya2Zsb3dzIH0sXG4gICAgICAgICAgY2xhc3NlczogeyAuLi5zb3VyY2VNYW5pZmVzdD8uY2xhc3NlcyB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdyaXRlIG1hbmlmZXN0XG4gICAgICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdmbG93L3JvdXRlLmpzJyk7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0SnNvbiA9IGF3YWl0IHRoaXMuY3JlYXRlTWFuaWZlc3Qoe1xuICAgICAgICAgIHdvcmtmbG93QnVuZGxlUGF0aCxcbiAgICAgICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgICAgIGlmICh0aGlzLnNob3VsZEV4cG9zZVB1YmxpY01hbmlmZXN0ICYmIG1hbmlmZXN0SnNvbikge1xuICAgICAgICAgIGNvbnN0IHB1YmxpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgICAgICAncHVibGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgbWtkaXIocHVibGljTWFuaWZlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihwdWJsaWNNYW5pZmVzdERpciwgJy5naXRpZ25vcmUnKSwgJyonKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgICAgICBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnbWFuaWZlc3QuanNvbicpLFxuICAgICAgICAgICAgam9pbihwdWJsaWNNYW5pZmVzdERpciwgJ21hbmlmZXN0Lmpzb24nKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QoY29tYmluZWRSZXN1bHQ/Lm1hbmlmZXN0KTtcblxuICAgICAgYXdhaXQgdGhpcy53cml0ZUZ1bmN0aW9uc0NvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgICBpZiAodGhpcy5jb25maWcud2F0Y2gpIHtcbiAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHdhdGNoIG1vZGUgZm9yIGNvbWJpbmVkIGJ1bmRsZVxuICAgICAgICAvLyBGb3Igbm93LCBmYWxsIGJhY2sgdG8gZnVsbCByZWJ1aWxkIG9uIGZpbGUgY2hhbmdlc1xuICAgICAgICBpZiAoIWNvbWJpbmVkUmVzdWx0Py5pbnRlcmltQnVuZGxlQ3R4IHx8ICFjb21iaW5lZFJlc3VsdC5idW5kbGVGaW5hbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93IGJ1aWxkIGNvbnRleHQgaW4gd2F0Y2ggbW9kZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RlcCByZWdpc3RyYXRpb25zIG1heSBiZSBlbWl0dGVkIGFzIHNvdXJjZSBpbXBvcnRzIHdpdGhvdXQgYW5cbiAgICAgICAgLy8gZXNidWlsZCBjb250ZXh0IHdoZW4gZXh0ZXJuYWxpemVOb25TdGVwcyBpcyBlbmFibGVkLlxuICAgICAgICBsZXQgc3RlcHNDdHggPSBjb21iaW5lZFJlc3VsdC5zdGVwc0NvbnRleHQ7XG4gICAgICAgIGxldCB3b3JrZmxvd3NDdHggPSB7XG4gICAgICAgICAgaW50ZXJpbUJ1bmRsZUN0eDogY29tYmluZWRSZXN1bHQuaW50ZXJpbUJ1bmRsZUN0eCxcbiAgICAgICAgICBidW5kbGVGaW5hbDogY29tYmluZWRSZXN1bHQuYnVuZGxlRmluYWwsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBkaXNjb3ZlcmVkRW50cmllcyA9IGNvbWJpbmVkUmVzdWx0LmRpc2NvdmVyZWRFbnRyaWVzO1xuICAgICAgICBsZXQgc3RlcHNNYW5pZmVzdCA9IGNvbWJpbmVkUmVzdWx0LnN0ZXBzTWFuaWZlc3Q7XG4gICAgICAgIGxldCB3b3JrZmxvd3NNYW5pZmVzdCA9IGNvbWJpbmVkUmVzdWx0LndvcmtmbG93c01hbmlmZXN0O1xuICAgICAgICBjb25zdCBzdGVwc091dGZpbGUgPSBqb2luKFxuICAgICAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICAgICdmbG93JyxcbiAgICAgICAgICAnX19zdGVwX3JlZ2lzdHJhdGlvbnMuanMnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplUGF0aCA9IChwYXRobmFtZTogc3RyaW5nKSA9PlxuICAgICAgICAgIChpc0Fic29sdXRlKHBhdGhuYW1lKVxuICAgICAgICAgICAgPyBwYXRobmFtZVxuICAgICAgICAgICAgOiByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIHBhdGhuYW1lKVxuICAgICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICBjb25zdCBzb3VyY2VTbmFwc2hvdHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+KCk7XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hhYmxlRXh0ZW5zaW9ucyA9IG5ldyBTZXQoW1xuICAgICAgICAgICcuanMnLFxuICAgICAgICAgICcuanN4JyxcbiAgICAgICAgICAnLnRzJyxcbiAgICAgICAgICAnLnRzeCcsXG4gICAgICAgICAgJy5tdHMnLFxuICAgICAgICAgICcuY3RzJyxcbiAgICAgICAgICAnLmNqcycsXG4gICAgICAgICAgJy5tanMnLFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3QgaWdub3JlZFBhdGhGcmFnbWVudHMgPSBbXG4gICAgICAgICAgJy8uZ2l0LycsXG4gICAgICAgICAgJy9ub2RlX21vZHVsZXMvJyxcbiAgICAgICAgICAnLy5uZXh0LycsXG4gICAgICAgICAgJy8udHVyYm8vJyxcbiAgICAgICAgICAnLy52ZXJjZWwvJyxcbiAgICAgICAgICAnL2Rpc3QvJyxcbiAgICAgICAgICAnL2J1aWxkLycsXG4gICAgICAgICAgJy9vdXQvJyxcbiAgICAgICAgICAnLy5jYWNoZS8nLFxuICAgICAgICAgICcvLnlhcm4vJyxcbiAgICAgICAgICAnLy5wbnBtLXN0b3JlLycsXG4gICAgICAgICAgJy8ucGFyY2VsLWNhY2hlLycsXG4gICAgICAgICAgJy8ud2VsbC1rbm93bi93b3JrZmxvdy8nLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkR2VuZXJhdGVkRGlyID0gd29ya2Zsb3dHZW5lcmF0ZWREaXIucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICBpZ25vcmVkUGF0aEZyYWdtZW50cy5wdXNoKG5vcm1hbGl6ZWRHZW5lcmF0ZWREaXIpO1xuXG4gICAgICAgIGNvbnN0IGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQgPSAobm9ybWFsaXplZFBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKG5vcm1hbGl6ZWRHZW5lcmF0ZWREaXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCBmcmFnbWVudCBvZiBpZ25vcmVkUGF0aEZyYWdtZW50cykge1xuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQYXRoLmluY2x1ZGVzKGZyYWdtZW50KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGxldCByZWJ1aWxkUXVldWUgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICBjb25zdCBlbnF1ZXVlID0gKHRhc2s6ICgpID0+IFByb21pc2U8dm9pZD4pID0+IHtcbiAgICAgICAgICByZWJ1aWxkUXVldWUgPSByZWJ1aWxkUXVldWUudGhlbih0YXNrKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBwcm9jZXNzIGZpbGUgY2hhbmdlJywgZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiByZWJ1aWxkUXVldWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVhZFNvdXJjZVNuYXBzaG90ID0gKGZpbGU6IHN0cmluZykgPT5cbiAgICAgICAgICBjcmVhdGVTb3VyY2VTbmFwc2hvdCh7IGZpbGUsIGRldGVjdFdvcmtmbG93UGF0dGVybnMgfSk7XG5cbiAgICAgICAgY29uc3QgcmVmcmVzaFNvdXJjZVNuYXBzaG90cyA9ICgpID0+XG4gICAgICAgICAgcmVwbGFjZVNvdXJjZVNuYXBzaG90cyh7XG4gICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgIGlucHV0RmlsZXM6IG9wdGlvbnMuaW5wdXRGaWxlcyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgICAgICAgICByZWFkU25hcHNob3Q6IHJlYWRTb3VyY2VTbmFwc2hvdCxcbiAgICAgICAgICAgIHNvdXJjZVNuYXBzaG90cyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBtZXJnZUNvbWJpbmVkTWFuaWZlc3QgPSAoXG4gICAgICAgICAgbmV4dFN0ZXBzTWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3RcbiAgICAgICAgKTogV29ya2Zsb3dNYW5pZmVzdCA9PiAoe1xuICAgICAgICAgIC4uLm5leHRTdGVwc01hbmlmZXN0LFxuICAgICAgICAgIHdvcmtmbG93czoge1xuICAgICAgICAgICAgLi4ubmV4dFN0ZXBzTWFuaWZlc3Qud29ya2Zsb3dzLFxuICAgICAgICAgICAgLi4ud29ya2Zsb3dzTWFuaWZlc3Qud29ya2Zsb3dzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2xhc3Nlczoge1xuICAgICAgICAgICAgLi4ubmV4dFN0ZXBzTWFuaWZlc3QuY2xhc3NlcyxcbiAgICAgICAgICAgIC4uLndvcmtmbG93c01hbmlmZXN0LmNsYXNzZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaG90UmVidWlsZCA9IGFzeW5jIChyZWZyZXNoU3RlcFJlZ2lzdHJhdGlvbnM6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAocmVmcmVzaFN0ZXBSZWdpc3RyYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoc3RlcHNDdHgpIHtcbiAgICAgICAgICAgICAgYXdhaXQgc3RlcHNDdHgucmVidWlsZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RlcHNNYW5pZmVzdCA9IGF3YWl0IHRoaXMuY3JlYXRlU3RlcFNvdXJjZVJlZ2lzdHJhdGlvbkZpbGUoe1xuICAgICAgICAgICAgICAgIGlucHV0RmlsZXM6IG9wdGlvbnMuaW5wdXRGaWxlcyxcbiAgICAgICAgICAgICAgICBvdXRmaWxlOiBzdGVwc091dGZpbGUsXG4gICAgICAgICAgICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB3b3JrZmxvd1Jlc3VsdCA9IGF3YWl0IHdvcmtmbG93c0N0eC5pbnRlcmltQnVuZGxlQ3R4LnJlYnVpbGQoKTtcbiAgICAgICAgICBjb25zdCB3b3JrZmxvd091dHB1dCA9IHdvcmtmbG93UmVzdWx0Lm91dHB1dEZpbGVzPy5bMF0/LnRleHQ7XG4gICAgICAgICAgaWYgKCF3b3JrZmxvd091dHB1dCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnSW52YXJpYW50OiBleHBlY3RlZCB3b3JrZmxvdyBvdXRwdXQgZnJvbSBob3QgcmVidWlsZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgd29ya2Zsb3dzQ3R4LmJ1bmRsZUZpbmFsKHdvcmtmbG93T3V0cHV0KTtcbiAgICAgICAgICBhd2FpdCB3cml0ZU1hbmlmZXN0KG1lcmdlQ29tYmluZWRNYW5pZmVzdChzdGVwc01hbmlmZXN0KSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZnVsbFJlYnVpbGQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGVhckRpc2NvdmVyZWRFbnRyaWVzQ2FjaGUoKTtcbiAgICAgICAgICBjb25zdCBuZXdJbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICAgICAgb3B0aW9ucy5pbnB1dEZpbGVzID0gbmV3SW5wdXRGaWxlcztcblxuICAgICAgICAgIGF3YWl0IHN0ZXBzQ3R4Py5kaXNwb3NlKCk7XG4gICAgICAgICAgYXdhaXQgd29ya2Zsb3dzQ3R4LmludGVyaW1CdW5kbGVDdHguZGlzcG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgbmV3Q29tYmluZWQgPSBhd2FpdCB0aGlzLmJ1aWxkQ29tYmluZWRGdW5jdGlvbihvcHRpb25zKTtcbiAgICAgICAgICBzdGVwc0N0eCA9IG5ld0NvbWJpbmVkLnN0ZXBzQ29udGV4dDtcbiAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyA9IG5ld0NvbWJpbmVkLmRpc2NvdmVyZWRFbnRyaWVzO1xuICAgICAgICAgIHN0ZXBzTWFuaWZlc3QgPSBuZXdDb21iaW5lZC5zdGVwc01hbmlmZXN0O1xuICAgICAgICAgIHdvcmtmbG93c01hbmlmZXN0ID0gbmV3Q29tYmluZWQud29ya2Zsb3dzTWFuaWZlc3Q7XG5cbiAgICAgICAgICBpZiAoIW5ld0NvbWJpbmVkPy5pbnRlcmltQnVuZGxlQ3R4IHx8ICFuZXdDb21iaW5lZD8uYnVuZGxlRmluYWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0ludmFyaWFudDogZXhwZWN0ZWQgd29ya2Zsb3dzIGJ1bmRsZSBjb250ZXh0IGFmdGVyIHJlYnVpbGQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3b3JrZmxvd3NDdHggPSB7XG4gICAgICAgICAgICBpbnRlcmltQnVuZGxlQ3R4OiBuZXdDb21iaW5lZC5pbnRlcmltQnVuZGxlQ3R4LFxuICAgICAgICAgICAgYnVuZGxlRmluYWw6IG5ld0NvbWJpbmVkLmJ1bmRsZUZpbmFsLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhd2FpdCB3cml0ZU1hbmlmZXN0KG5ld0NvbWJpbmVkLm1hbmlmZXN0KTtcbiAgICAgICAgICBhd2FpdCByZWZyZXNoU291cmNlU25hcHNob3RzKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNXYXRjaGFibGVGaWxlID0gKHBhdGg6IHN0cmluZykgPT5cbiAgICAgICAgICB3YXRjaGFibGVFeHRlbnNpb25zLmhhcyhleHRuYW1lKHBhdGgpKTtcblxuICAgICAgICBjb25zdCByZWFkS25vd25GaWxlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgIGNvbnN0IGFsaWFzZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgICAgIGNvbnN0IHJlbGV2YW50RmlsZXMgPSBnZXRSZWxldmFudEZpbGVzKHtcbiAgICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGFkZEtub3duRmlsZSA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVhbEZpbGVQYXRoID0gZmlsZVBhdGg7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZWFsRmlsZVBhdGggPSBub3JtYWxpemVQYXRoKGF3YWl0IHJlYWxwYXRoKGZpbGVQYXRoKSk7XG4gICAgICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSByZWxldmFudEZpbGVzLmhhcyhyZWFsRmlsZVBhdGgpXG4gICAgICAgICAgICAgID8gcmVhbEZpbGVQYXRoXG4gICAgICAgICAgICAgIDogZmlsZVBhdGg7XG4gICAgICAgICAgICBmaWxlcy5hZGQoY2Fub25pY2FsUGF0aCk7XG4gICAgICAgICAgICBhbGlhc2VzLnNldChmaWxlUGF0aCwgY2Fub25pY2FsUGF0aCk7XG4gICAgICAgICAgICBhbGlhc2VzLnNldChyZWFsRmlsZVBhdGgsIGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbFBhdGg7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IHZpc2l0ID0gYXN5bmMgKGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICBsZXQgZGlyZW50czogRGlyZW50PHN0cmluZz5bXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGRpcmVudHMgPSBhd2FpdCByZWFkZGlyKGRpcmVjdG9yeSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGRpcmVudHMubWFwKGFzeW5jIChkaXJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IG5vcm1hbGl6ZVBhdGgoam9pbihkaXJlY3RvcnksIGRpcmVudC5uYW1lKSk7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVudC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCB2aXNpdChmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHN0YXRzOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHN0YXQ+PjtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgc3RhdHMgPSBhd2FpdCBzdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgdmlzaXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghc3RhdHMuaXNGaWxlKCkgfHwgIWlzV2F0Y2hhYmxlRmlsZShmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBhZGRLbm93bkZpbGUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgYXdhaXQgdmlzaXQodGhpcy5jb25maWcud29ya2luZ0Rpcik7XG4gICAgICAgICAgcmV0dXJuIHsgZmlsZXMsIGFsaWFzZXMsIGFkZEtub3duRmlsZSB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG1lcmdlRmlsZUNoYW5nZXMgPSAoXG4gICAgICAgICAgbGVmdDogRmlsZUNoYW5nZXMsXG4gICAgICAgICAgcmlnaHQ6IEZpbGVDaGFuZ2VzXG4gICAgICAgICk6IEZpbGVDaGFuZ2VzID0+ICh7XG4gICAgICAgICAgYWRkZWRGaWxlczogdW5pcXVlKFsuLi5sZWZ0LmFkZGVkRmlsZXMsIC4uLnJpZ2h0LmFkZGVkRmlsZXNdKSxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzOiB1bmlxdWUoW1xuICAgICAgICAgICAgLi4ubGVmdC5tb2RpZmllZEZpbGVzLFxuICAgICAgICAgICAgLi4ucmlnaHQubW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IHVuaXF1ZShbLi4ubGVmdC5yZW1vdmVkRmlsZXMsIC4uLnJpZ2h0LnJlbW92ZWRGaWxlc10pLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1bmlxdWUgPSAocGF0aHM6IHN0cmluZ1tdKSA9PiBbLi4ubmV3IFNldChwYXRocyldO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzaWZ5RmlsZUNoYW5nZXMgPSAoe1xuICAgICAgICAgIGNoYW5nZWRGaWxlcyxcbiAgICAgICAgICBrbm93bkZpbGVzLFxuICAgICAgICAgIHJlbW92ZWRGaWxlcyxcbiAgICAgICAgfToge1xuICAgICAgICAgIGNoYW5nZWRGaWxlczogc3RyaW5nW107XG4gICAgICAgICAga25vd25GaWxlczogU2V0PHN0cmluZz47XG4gICAgICAgICAgcmVtb3ZlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgICAgfSk6IEZpbGVDaGFuZ2VzID0+IHtcbiAgICAgICAgICBjb25zdCBhZGRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IG1vZGlmaWVkRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgdW5pcXVlKGNoYW5nZWRGaWxlcykpIHtcbiAgICAgICAgICAgIGlmIChrbm93bkZpbGVzLmhhcyhmaWxlKSkge1xuICAgICAgICAgICAgICBtb2RpZmllZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRlZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICAgIGtub3duRmlsZXMuYWRkKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiByZW1vdmVkRmlsZXMpIHtcbiAgICAgICAgICAgIGtub3duRmlsZXMuZGVsZXRlKGZpbGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRlZEZpbGVzLFxuICAgICAgICAgICAgbW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICAgIHJlbW92ZWRGaWxlczogdW5pcXVlKHJlbW92ZWRGaWxlcyksXG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYXNGaWxlQ2hhbmdlcyA9ICh7XG4gICAgICAgICAgYWRkZWRGaWxlcyxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzLFxuICAgICAgICAgIHJlbW92ZWRGaWxlcyxcbiAgICAgICAgfTogRmlsZUNoYW5nZXMpID0+XG4gICAgICAgICAgYWRkZWRGaWxlcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgbW9kaWZpZWRGaWxlcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgcmVtb3ZlZEZpbGVzLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IGxvZ0RldkhtciA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuV09SS0ZMT1dfREVWX0hNUl9MT0dTID09PSAnMScpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCByZWZyZXNoU291cmNlU25hcHNob3RzKCk7XG4gICAgICAgIGxldCB7XG4gICAgICAgICAgZmlsZXM6IGtub3duRmlsZXMsXG4gICAgICAgICAgYWxpYXNlczoga25vd25GaWxlQWxpYXNlcyxcbiAgICAgICAgICBhZGRLbm93bkZpbGU6IHJlbWVtYmVyS25vd25GaWxlLFxuICAgICAgICB9ID0gYXdhaXQgcmVhZEtub3duRmlsZXMoKTtcblxuICAgICAgICBjb25zdCByZWZyZXNoS25vd25GaWxlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0S25vd24gPSBhd2FpdCByZWFkS25vd25GaWxlcygpO1xuICAgICAgICAgIGtub3duRmlsZXMgPSBuZXh0S25vd24uZmlsZXM7XG4gICAgICAgICAga25vd25GaWxlQWxpYXNlcyA9IG5leHRLbm93bi5hbGlhc2VzO1xuICAgICAgICAgIHJlbWVtYmVyS25vd25GaWxlID0gbmV4dEtub3duLmFkZEtub3duRmlsZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcm9jZXNzRmlsZUNoYW5nZXMgPSBhc3luYyAoZmlsZUNoYW5nZXM6IEZpbGVDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgaWYgKCFoYXNGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkZWNpc2lvbiA9IGF3YWl0IGNsYXNzaWZ5UmVidWlsZCh7XG4gICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgIGZpbGVDaGFuZ2VzLFxuICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICAgIHBhcmVudEhhc0NoaWxkLFxuICAgICAgICAgICAgcmVhZFNuYXBzaG90OiByZWFkU291cmNlU25hcHNob3QsXG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGRlY2lzaW9uLmtpbmQgPT09ICdub25lJykge1xuICAgICAgICAgICAgbG9nRGV2SG1yKCd3b3JrZmxvdyBkZXYgaG1yOiBza2lwJyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtmaWxlLCBzbmFwc2hvdF0gb2YgZGVjaXNpb24uc25hcHNob3RzIHx8IFtdKSB7XG4gICAgICAgICAgICAgIHNvdXJjZVNuYXBzaG90cy5zZXQoZmlsZSwgc25hcHNob3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVjaXNpb24ua2luZCA9PT0gJ2Z1bGwnKSB7XG4gICAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IGZ1bGwgcmVkaXNjb3ZlcnknKTtcbiAgICAgICAgICAgIGF3YWl0IGZ1bGxSZWJ1aWxkKCk7XG4gICAgICAgICAgICBhd2FpdCByZWZyZXNoS25vd25GaWxlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvZ0RldkhtcihcbiAgICAgICAgICAgIGB3b3JrZmxvdyBkZXYgaG1yOiBob3QgcmVidWlsZCR7ZGVjaXNpb24ucmVmcmVzaFN0ZXBSZWdpc3RyYXRpb25zID8gJyB3aXRoIHN0ZXAgcmVnaXN0cmF0aW9uIHJlZnJlc2gnIDogJyd9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgaG90UmVidWlsZChkZWNpc2lvbi5yZWZyZXNoU3RlcFJlZ2lzdHJhdGlvbnMpO1xuICAgICAgICAgIGZvciAoY29uc3QgW2ZpbGUsIHNuYXBzaG90XSBvZiBkZWNpc2lvbi5zbmFwc2hvdHMpIHtcbiAgICAgICAgICAgIHNvdXJjZVNuYXBzaG90cy5zZXQoZmlsZSwgc25hcHNob3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgcGVuZGluZ0ZpbGVDaGFuZ2VzOiBGaWxlQ2hhbmdlcyA9IHtcbiAgICAgICAgICBhZGRlZEZpbGVzOiBbXSxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzOiBbXSxcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgZmx1c2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3Qgc2NoZWR1bGVGaWxlQ2hhbmdlcyA9IChmaWxlQ2hhbmdlczogRmlsZUNoYW5nZXMpID0+IHtcbiAgICAgICAgICBwZW5kaW5nRmlsZUNoYW5nZXMgPSBtZXJnZUZpbGVDaGFuZ2VzKFxuICAgICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzLFxuICAgICAgICAgICAgZmlsZUNoYW5nZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmbHVzaFRpbWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVDaGFuZ2VzID0gcGVuZGluZ0ZpbGVDaGFuZ2VzO1xuICAgICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzID0ge1xuICAgICAgICAgICAgICBhZGRlZEZpbGVzOiBbXSxcbiAgICAgICAgICAgICAgbW9kaWZpZWRGaWxlczogW10sXG4gICAgICAgICAgICAgIHJlbW92ZWRGaWxlczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZmx1c2hUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGVucXVldWUoKCkgPT4gcHJvY2Vzc0ZpbGVDaGFuZ2VzKGZpbGVDaGFuZ2VzKSk7XG4gICAgICAgICAgfSwgMTApO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc29sdmVFeGlzdGluZ0V2ZW50UGF0aCA9IGFzeW5jIChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBrbm93blBhdGggPSBrbm93bkZpbGVBbGlhc2VzLmdldChub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgaWYgKGtub3duUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGtub3duUGF0aDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVhbEZpbGVQYXRoID0gbm9ybWFsaXplUGF0aChhd2FpdCByZWFscGF0aChub3JtYWxpemVkUGF0aCkpO1xuICAgICAgICAgICAgcmV0dXJuIGtub3duRmlsZUFsaWFzZXMuZ2V0KHJlYWxGaWxlUGF0aCkgPz8gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZUZpbGVBZGRlZCA9IGFzeW5jIChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleGlzdGluZ1BhdGggPSBhd2FpdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGgobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGNvbnN0IHdhc0tub3duID0gZXhpc3RpbmdQYXRoID8ga25vd25GaWxlcy5oYXMoZXhpc3RpbmdQYXRoKSA6IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSBhd2FpdCByZW1lbWJlcktub3duRmlsZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAga25vd25GaWxlcy5hZGQoY2Fub25pY2FsUGF0aCk7XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyh7XG4gICAgICAgICAgICBhZGRlZEZpbGVzOiB3YXNLbm93biA/IFtdIDogW2Nhbm9uaWNhbFBhdGhdLFxuICAgICAgICAgICAgbW9kaWZpZWRGaWxlczogd2FzS25vd24gPyBbY2Fub25pY2FsUGF0aF0gOiBbXSxcbiAgICAgICAgICAgIHJlbW92ZWRGaWxlczogW10sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZWQgPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSBhd2FpdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGgocGF0aG5hbWUpO1xuICAgICAgICAgIGlmICghY2Fub25pY2FsUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpbGVDaGFuZ2VzID0gY2xhc3NpZnlGaWxlQ2hhbmdlcyh7XG4gICAgICAgICAgICBjaGFuZ2VkRmlsZXM6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICAgIGtub3duRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICgha25vd25GaWxlQWxpYXNlcy5oYXMoY2Fub25pY2FsUGF0aCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlbWVtYmVyS25vd25GaWxlKGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY2hlZHVsZUZpbGVDaGFuZ2VzKGZpbGVDaGFuZ2VzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYW5kbGVGaWxlUmVtb3ZlZCA9IChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID1cbiAgICAgICAgICAgIGtub3duRmlsZUFsaWFzZXMuZ2V0KG5vcm1hbGl6ZWRQYXRoKSA/PyBub3JtYWxpemVkUGF0aDtcbiAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IGNsYXNzaWZ5RmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgY2hhbmdlZEZpbGVzOiBbXSxcbiAgICAgICAgICAgIGtub3duRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBrbm93bkZpbGVBbGlhc2VzLmRlbGV0ZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hlciA9IGNob2tpZGFyLndhdGNoKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIHtcbiAgICAgICAgICBpZ25vcmVJbml0aWFsOiB0cnVlLFxuICAgICAgICAgIGZvbGxvd1N5bWxpbmtzOiB0cnVlLFxuICAgICAgICAgIGlnbm9yZWQ6IChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKFN0cmluZyhwYXRobmFtZSkpO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZXh0bmFtZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uICYmICF3YXRjaGFibGVFeHRlbnNpb25zLmhhcyhleHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdhdGNoZXIub24oJ2FkZCcsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIHZvaWQgaGFuZGxlRmlsZUFkZGVkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ2NoYW5nZScsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIHZvaWQgaGFuZGxlRmlsZUNoYW5nZWQocGF0aG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgd2F0Y2hlci5vbigndW5saW5rJywgKHBhdGhuYW1lKSA9PiB7XG4gICAgICAgICAgaGFuZGxlRmlsZVJlbW92ZWQocGF0aG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgd2F0Y2hlci5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdXb3JrZmxvdyBkZXYgd2F0Y2hlciBlcnJvcicsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICAgIGxvZ0Rldkhtcignd29ya2Zsb3cgZGV2IGhtcjogcmVhZHknKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldElucHV0RmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgY29uc3QgaW5wdXRGaWxlcyA9IGF3YWl0IHN1cGVyLmdldElucHV0RmlsZXMoKTtcbiAgICAgIHJldHVybiBpbnB1dEZpbGVzLmZpbHRlcigoZmlsZSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHJlbGF0aXZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIGZpbGUpLnJlcGxhY2VBbGwoXG4gICAgICAgICAgJ1xcXFwnLFxuICAgICAgICAgICcvJ1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1hdGNoIEFwcCBSb3V0ZXIgcm91dGUsIHBhZ2UsIGFuZCBsYXlvdXQgZW50cnlwb2ludHMgaW4gYXBwLyBvciBzcmMvYXBwLy5cbiAgICAgICAgaWYgKC9eKD86YXBwfHNyY1xcL2FwcClcXC8oPzouKlxcLyk/KD86cm91dGV8cGFnZXxsYXlvdXQpXFwuLy50ZXN0KGVudHJ5KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWF0Y2ggZXZlcnkgUGFnZXMgUm91dGVyIGVudHJ5cG9pbnQgaW4gcGFnZXMvIG9yIHNyYy9wYWdlcy8uXG4gICAgICAgIGlmICgvXig/OnBhZ2VzfHNyY1xcL3BhZ2VzKVxcLy8udGVzdChlbnRyeSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hdGNoIE5leHQuanMgcm9vdCBlbnRyeXBvaW50cyBhdCB0aGUgcHJvamVjdCByb290IG9yIHVuZGVyIHNyYy8uXG4gICAgICAgIHJldHVybiBbJ2luc3RydW1lbnRhdGlvbicsICdtaWRkbGV3YXJlJywgJ3Byb3h5J10uc29tZSgobmFtZSkgPT5cbiAgICAgICAgICB0aGlzLmNvbmZpZy5wYWdlRXh0ZW5zaW9ucy5zb21lKFxuICAgICAgICAgICAgKGV4dGVuc2lvbikgPT5cbiAgICAgICAgICAgICAgZW50cnkgPT09IGAke25hbWV9LiR7ZXh0ZW5zaW9ufWAgfHxcbiAgICAgICAgICAgICAgZW50cnkgPT09IGBzcmMvJHtuYW1lfS4ke2V4dGVuc2lvbn1gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB3cml0ZUZ1bmN0aW9uc0NvbmZpZyhvdXRwdXREaXI6IHN0cmluZykge1xuICAgICAgLy8gd2UgZG9uJ3QgcnVuIHRoaXMgaW4gZGV2ZWxvcG1lbnQgbW9kZSBhcyBpdCdzIG5vdCBuZWVkZWRcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFYyIGNvbWJpbmVkIGNvbmZpZzogc2luZ2xlIHRyaWdnZXIgaGFuZGxlcyBib3RoIHdvcmtmbG93IGFuZCBzdGVwIGV4ZWN1dGlvbi5cbiAgICAgIC8vIFRoZSBzdGVwIHJvdXRlIG5vIGxvbmdlciBuZWVkcyBpdHMgb3duIHRyaWdnZXIgc2luY2Ugc3RlcHMgYXJlIGV4ZWN1dGVkXG4gICAgICAvLyBpbmxpbmUgYnkgdGhlIGNvbWJpbmVkIGhhbmRsZXIgb3IgcXVldWVkIGJhY2sgdG8gX193a2Zfd29ya2Zsb3dfKiB3aXRoIHN0ZXBJZC5cbiAgICAgIGNvbnN0IGdlbmVyYXRlZENvbmZpZyA9IHtcbiAgICAgICAgdmVyc2lvbjogJzAnLFxuICAgICAgICB3b3JrZmxvd3M6IHtcbiAgICAgICAgICBtYXhEdXJhdGlvbjogJ21heCcsXG4gICAgICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtXT1JLRkxPV19RVUVVRV9UUklHR0VSXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgICAgam9pbihvdXRwdXREaXIsICcud2VsbC1rbm93bi93b3JrZmxvdy92MS9jb25maWcuanNvbicpLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShnZW5lcmF0ZWRDb25maWcsIG51bGwsIDIpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFYyOiBCdWlsZCBjb21iaW5lZCByb3V0ZSB0aGF0IGhhbmRsZXMgYm90aCB3b3JrZmxvdyBhbmQgc3RlcCBleGVjdXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBidWlsZENvbWJpbmVkRnVuY3Rpb24oe1xuICAgICAgaW5wdXRGaWxlcyxcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgIH06IHtcbiAgICAgIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICAgIHRzY29uZmlnUGF0aD86IHN0cmluZztcbiAgICB9KSB7XG4gICAgICBjb25zdCBmbG93Um91dGVEaXIgPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdycpO1xuICAgICAgYXdhaXQgbWtkaXIoZmxvd1JvdXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlQ29tYmluZWRCdW5kbGUoe1xuICAgICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgICBpbnB1dEZpbGVzLFxuICAgICAgICBzdGVwc091dGZpbGU6IGpvaW4oZmxvd1JvdXRlRGlyLCAnX19zdGVwX3JlZ2lzdHJhdGlvbnMuanMnKSxcbiAgICAgICAgZmxvd091dGZpbGU6IGpvaW4oZmxvd1JvdXRlRGlyLCAncm91dGUuanMnKSxcbiAgICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IGZhbHNlLFxuICAgICAgICBleHRlcm5hbGl6ZU5vblN0ZXBzOiB0cnVlLFxuICAgICAgICBzb3VyY2VTdGVwUmVnaXN0cmF0aW9uSW1wb3J0czogdHJ1ZSxcbiAgICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBidWlsZFdlYmhvb2tSb3V0ZSh7XG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICB9OiB7XG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcjogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHdlYmhvb2tSb3V0ZUZpbGUgPSBqb2luKFxuICAgICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgJ3dlYmhvb2svW3Rva2VuXS9yb3V0ZS5qcydcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgICBvdXRmaWxlOiB3ZWJob29rUm91dGVGaWxlLFxuICAgICAgICBidW5kbGU6IGZhbHNlLCAvLyBOZXh0LmpzIGRvZXNuJ3QgbmVlZCBidW5kbGluZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kQXBwRGlyZWN0b3J5KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICBjb25zdCBhcHBEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdhcHAnKTtcbiAgICAgIGNvbnN0IHNyY0FwcERpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3NyYy9hcHAnKTtcbiAgICAgIGNvbnN0IHBhZ2VzRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAncGFnZXMnKTtcbiAgICAgIGNvbnN0IHNyY1BhZ2VzRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnc3JjL3BhZ2VzJyk7XG5cbiAgICAgIC8vIEhlbHBlciB0byBjaGVjayBpZiBhIHBhdGggZXhpc3RzIGFuZCBpcyBhIGRpcmVjdG9yeVxuICAgICAgY29uc3QgaXNEaXJlY3RvcnkgPSBhc3luYyAocGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWNjZXNzKHBhdGgsIGNvbnN0YW50cy5GX09LKTtcbiAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHN0YXQocGF0aCk7XG4gICAgICAgICAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3Rvcnk6ICR7cGF0aH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUubWVzc2FnZS5pbmNsdWRlcygnbm90IGEgZGlyZWN0b3J5JykpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gQ2hlY2sgaWYgYXBwIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShhcHBEaXIpKSB7XG4gICAgICAgIHJldHVybiBhcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHNyYy9hcHAgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHNyY0FwcERpcikpIHtcbiAgICAgICAgcmV0dXJuIHNyY0FwcERpcjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgbm8gYXBwIGRpcmVjdG9yeSBleGlzdHMsIGNoZWNrIGZvciBwYWdlcyBkaXJlY3RvcnkgYW5kIGNyZWF0ZSBhcHAgbmV4dCB0byBpdFxuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHBhZ2VzRGlyKSkge1xuICAgICAgICAvLyBDcmVhdGUgYXBwIGRpcmVjdG9yeSBuZXh0IHRvIHBhZ2VzIGRpcmVjdG9yeVxuICAgICAgICBhd2FpdCBta2RpcihhcHBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gYXBwRGlyO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3Rvcnkoc3JjUGFnZXNEaXIpKSB7XG4gICAgICAgIC8vIENyZWF0ZSBzcmMvYXBwIGRpcmVjdG9yeSBuZXh0IHRvIHNyYy9wYWdlcyBkaXJlY3RvcnlcbiAgICAgICAgYXdhaXQgbWtkaXIoc3JjQXBwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIHNyY0FwcERpcjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IGZpbmQgTmV4dC5qcyBhcHAgb3IgcGFnZXMgZGlyZWN0b3J5LiBFeHBlY3RlZCBvbmUgb2Y6IFwiYXBwXCIsIFwic3JjL2FwcFwiLCBcInBhZ2VzXCIsIG9yIFwic3JjL3BhZ2VzXCIgdG8gZXhpc3QuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBDYWNoZWROZXh0QnVpbGRlckVhZ2VyID0gTmV4dEJ1aWxkZXI7XG4gIHJldHVybiBOZXh0QnVpbGRlcjtcbn1cbiJdfQ==
|
|
576
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1lYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLWVhZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBa0NBLGtEQXF1QkM7QUF2d0JELHFDQUFpRDtBQUNqRCwrQ0FRMEI7QUFDMUIseUNBQXlFO0FBS3pFLHdEQUFnQztBQUVoQyx5REFPNEI7QUFFNUIsSUFBSSxzQkFBMkIsQ0FBQztBQUNoQyxNQUFNLFNBQVMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsMEJBQTBCLENBRXZELENBQUM7QUFFaEIsOEVBQThFO0FBQzlFLDZFQUE2RTtBQUM3RSxvRUFBb0U7QUFDN0QsS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxjQUFvRDtJQUVwRCxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDM0IsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxFQUNKLFdBQVcsRUFBRSxnQkFBZ0IsRUFDN0Isc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixjQUFjLEdBQ2YsR0FBRyxjQUFjO1FBQ2xCLENBQUMsTUFBTSxTQUFTLENBQXNDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUU3RSxNQUFNLFdBQVksU0FBUSxnQkFBZ0I7UUFNeEMsS0FBSyxDQUFDLEtBQUs7WUFDVCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2hELE1BQU0sb0JBQW9CLEdBQUcsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBRXhFLGtDQUFrQztZQUNsQyxNQUFNLElBQUEsZ0JBQUssRUFBQyxvQkFBb0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sSUFBQSxvQkFBUyxFQUFDLElBQUEsZ0JBQUksRUFBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUUv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Q0FBQyxFQUFFLENBQUM7b0JBQ1gsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQzt3QkFDaEUsTUFBTSxDQUFDLENBQUM7b0JBQ1YsQ0FBQztvQkFDRCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBRUYsZ0NBQWdDO1lBQ2hDLElBQUksTUFBTSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELG9DQUFvQztZQUNwQyxJQUFJLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxrRkFBa0Y7WUFDbEYsSUFBSSxNQUFNLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNoQywrQ0FBK0M7Z0JBQy9DLE1BQU0sSUFBQSxnQkFBSyxFQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBRUQsSUFBSSxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUNuQyx1REFBdUQ7Z0JBQ3ZELE1BQU0sSUFBQSxnQkFBSyxFQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsTUFBTSxJQUFJLEtBQUssQ0FDYixxSEFBcUgsQ0FDdEgsQ0FBQztRQUNKLENBQUM7S0FDRjtJQUVELHNCQUFzQixHQUFHLFdBQVcsQ0FBQztJQUNyQyxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uc3RhbnRzLCB0eXBlIERpcmVudCB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgYWNjZXNzLFxuICBjb3B5RmlsZSxcbiAgbWtkaXIsXG4gIHJlYWRkaXIsXG4gIHJlYWxwYXRoLFxuICBzdGF0LFxuICB3cml0ZUZpbGUsXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZXh0bmFtZSwgaXNBYnNvbHV0ZSwgam9pbiwgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUge1xuICBOZXh0Q29uZmlnIGFzIEJ1aWxkZXJOZXh0Q29uZmlnLFxuICBXb3JrZmxvd01hbmlmZXN0LFxufSBmcm9tICdAd29ya2Zsb3cvYnVpbGRlcnMnO1xuaW1wb3J0IGNob2tpZGFyIGZyb20gJ2Nob2tpZGFyJztcbmltcG9ydCB0eXBlIHsgTmV4dENvbmZpZyBhcyBQcm9qZWN0TmV4dENvbmZpZyB9IGZyb20gJ25leHQnO1xuaW1wb3J0IHtcbiAgY2xhc3NpZnlSZWJ1aWxkLFxuICBjcmVhdGVTb3VyY2VTbmFwc2hvdCxcbiAgdHlwZSBGaWxlQ2hhbmdlcyxcbiAgZ2V0UmVsZXZhbnRGaWxlcyxcbiAgcmVwbGFjZVNvdXJjZVNuYXBzaG90cyxcbiAgdHlwZSBTb3VyY2VTbmFwc2hvdCxcbn0gZnJvbSAnLi93YXRjaC1yZWJ1aWxkLmpzJztcblxubGV0IENhY2hlZE5leHRCdWlsZGVyRWFnZXI6IGFueTtcbmNvbnN0IGltcG9ydEVzbSA9IG5ldyBGdW5jdGlvbignc3BlY2lmaWVyJywgJ3JldHVybiBpbXBvcnQoc3BlY2lmaWVyKScpIGFzIDxUPihcbiAgc3BlY2lmaWVyOiBzdHJpbmdcbikgPT4gUHJvbWlzZTxUPjtcblxuLy8gQ3JlYXRlIHRoZSBlYWdlciBOZXh0IGJ1aWxkZXIgZHluYW1pY2FsbHkgYnkgZXh0ZW5kaW5nIHRoZSBFU00gQmFzZUJ1aWxkZXIuXG4vLyBFeHBvcnRlZCBhcyBnZXROZXh0QnVpbGRlckVhZ2VyKCkgdG8gYWxsb3cgQ29tbW9uSlMgbW9kdWxlcyB0byBpbXBvcnQgZnJvbVxuLy8gdGhlIEVTTSBAd29ya2Zsb3cvYnVpbGRlcnMgcGFja2FnZSB2aWEgZHluYW1pYyBpbXBvcnQgYXQgcnVudGltZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXROZXh0QnVpbGRlckVhZ2VyKFxuICBidWlsZGVyc01vZHVsZT86IHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpXG4pIHtcbiAgaWYgKENhY2hlZE5leHRCdWlsZGVyRWFnZXIpIHtcbiAgICByZXR1cm4gQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlcjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBCYXNlQnVpbGRlcjogQmFzZUJ1aWxkZXJDbGFzcyxcbiAgICBXT1JLRkxPV19RVUVVRV9UUklHR0VSLFxuICAgIGRldGVjdFdvcmtmbG93UGF0dGVybnMsXG4gICAgcGFyZW50SGFzQ2hpbGQsXG4gIH0gPSBidWlsZGVyc01vZHVsZSA/P1xuICAoYXdhaXQgaW1wb3J0RXNtPHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpPignQHdvcmtmbG93L2J1aWxkZXJzJykpO1xuXG4gIGNsYXNzIE5leHRCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXJDbGFzcyB7XG4gICAgcHJvdGVjdGVkIGRlY2xhcmUgY29uZmlnOiBCdWlsZGVyTmV4dENvbmZpZyAmIHtcbiAgICAgIHBhZ2VFeHRlbnNpb25zOiBOb25OdWxsYWJsZTxQcm9qZWN0TmV4dENvbmZpZ1sncGFnZUV4dGVuc2lvbnMnXT47XG4gICAgICBkaXN0RGlyOiBzdHJpbmc7XG4gICAgfTtcblxuICAgIGFzeW5jIGJ1aWxkKCkge1xuICAgICAgY29uc3Qgb3V0cHV0RGlyID0gYXdhaXQgdGhpcy5maW5kQXBwRGlyZWN0b3J5KCk7XG4gICAgICBjb25zdCB3b3JrZmxvd0dlbmVyYXRlZERpciA9IGpvaW4ob3V0cHV0RGlyLCAnLndlbGwta25vd24vd29ya2Zsb3cvdjEnKTtcblxuICAgICAgLy8gRW5zdXJlIG91dHB1dCBkaXJlY3RvcmllcyBleGlzdFxuICAgICAgYXdhaXQgbWtkaXIod29ya2Zsb3dHZW5lcmF0ZWREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICcuZ2l0aWdub3JlJyksICcqJyk7XG5cbiAgICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICAgIGNvbnN0IHRzY29uZmlnUGF0aCA9IGF3YWl0IHRoaXMuZmluZFRzQ29uZmlnUGF0aCgpO1xuXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBpbnB1dEZpbGVzLFxuICAgICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgfTtcblxuICAgICAgLy8gVjI6IEJ1aWxkIGNvbWJpbmVkIHJvdXRlIChyZXBsYWNlcyBzZXBhcmF0ZSBzdGVwICsgZmxvdyByb3V0ZXMpXG4gICAgICBjb25zdCBjb21iaW5lZFJlc3VsdCA9IGF3YWl0IHRoaXMuYnVpbGRDb21iaW5lZEZ1bmN0aW9uKG9wdGlvbnMpO1xuICAgICAgYXdhaXQgdGhpcy5idWlsZFdlYmhvb2tSb3V0ZSh7IHdvcmtmbG93R2VuZXJhdGVkRGlyIH0pO1xuXG4gICAgICBjb25zdCB3cml0ZU1hbmlmZXN0ID0gYXN5bmMgKFxuICAgICAgICBzb3VyY2VNYW5pZmVzdDogV29ya2Zsb3dNYW5pZmVzdCB8IHVuZGVmaW5lZFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0ID0ge1xuICAgICAgICAgIHN0ZXBzOiB7IC4uLnNvdXJjZU1hbmlmZXN0Py5zdGVwcyB9LFxuICAgICAgICAgIHdvcmtmbG93czogeyAuLi5zb3VyY2VNYW5pZmVzdD8ud29ya2Zsb3dzIH0sXG4gICAgICAgICAgY2xhc3NlczogeyAuLi5zb3VyY2VNYW5pZmVzdD8uY2xhc3NlcyB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdyaXRlIG1hbmlmZXN0XG4gICAgICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdmbG93L3JvdXRlLmpzJyk7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0SnNvbiA9IGF3YWl0IHRoaXMuY3JlYXRlTWFuaWZlc3Qoe1xuICAgICAgICAgIHdvcmtmbG93QnVuZGxlUGF0aCxcbiAgICAgICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgICAgIGlmICh0aGlzLnNob3VsZEV4cG9zZVB1YmxpY01hbmlmZXN0ICYmIG1hbmlmZXN0SnNvbikge1xuICAgICAgICAgIGNvbnN0IHB1YmxpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgICAgICAncHVibGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgbWtkaXIocHVibGljTWFuaWZlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihwdWJsaWNNYW5pZmVzdERpciwgJy5naXRpZ25vcmUnKSwgJyonKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgICAgICBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnbWFuaWZlc3QuanNvbicpLFxuICAgICAgICAgICAgam9pbihwdWJsaWNNYW5pZmVzdERpciwgJ21hbmlmZXN0Lmpzb24nKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QoY29tYmluZWRSZXN1bHQ/Lm1hbmlmZXN0KTtcblxuICAgICAgYXdhaXQgdGhpcy53cml0ZUZ1bmN0aW9uc0NvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgICBpZiAodGhpcy5jb25maWcud2F0Y2gpIHtcbiAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHdhdGNoIG1vZGUgZm9yIGNvbWJpbmVkIGJ1bmRsZVxuICAgICAgICAvLyBGb3Igbm93LCBmYWxsIGJhY2sgdG8gZnVsbCByZWJ1aWxkIG9uIGZpbGUgY2hhbmdlc1xuICAgICAgICBpZiAoIWNvbWJpbmVkUmVzdWx0Py5pbnRlcmltQnVuZGxlQ3R4IHx8ICFjb21iaW5lZFJlc3VsdC5idW5kbGVGaW5hbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93IGJ1aWxkIGNvbnRleHQgaW4gd2F0Y2ggbW9kZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RlcCByZWdpc3RyYXRpb25zIG1heSBiZSBlbWl0dGVkIGFzIHNvdXJjZSBpbXBvcnRzIHdpdGhvdXQgYW5cbiAgICAgICAgLy8gZXNidWlsZCBjb250ZXh0IHdoZW4gZXh0ZXJuYWxpemVOb25TdGVwcyBpcyBlbmFibGVkLlxuICAgICAgICBsZXQgc3RlcHNDdHggPSBjb21iaW5lZFJlc3VsdC5zdGVwc0NvbnRleHQ7XG4gICAgICAgIGxldCB3b3JrZmxvd3NDdHggPSB7XG4gICAgICAgICAgaW50ZXJpbUJ1bmRsZUN0eDogY29tYmluZWRSZXN1bHQuaW50ZXJpbUJ1bmRsZUN0eCxcbiAgICAgICAgICBidW5kbGVGaW5hbDogY29tYmluZWRSZXN1bHQuYnVuZGxlRmluYWwsXG4gICAgICAgIH07XG4gICAgICAgIGxldCB3b3JrZmxvd0ludGVyaW1CdW5kbGVUZXh0ID1cbiAgICAgICAgICBjb21iaW5lZFJlc3VsdC53b3JrZmxvd0ludGVyaW1CdW5kbGVUZXh0O1xuICAgICAgICBsZXQgZGlzY292ZXJlZEVudHJpZXMgPSBjb21iaW5lZFJlc3VsdC5kaXNjb3ZlcmVkRW50cmllcztcbiAgICAgICAgbGV0IHN0ZXBzTWFuaWZlc3QgPSBjb21iaW5lZFJlc3VsdC5zdGVwc01hbmlmZXN0O1xuICAgICAgICBsZXQgd29ya2Zsb3dzTWFuaWZlc3QgPSBjb21iaW5lZFJlc3VsdC53b3JrZmxvd3NNYW5pZmVzdDtcbiAgICAgICAgY29uc3Qgc3RlcHNPdXRmaWxlID0gam9pbihcbiAgICAgICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgICAnZmxvdycsXG4gICAgICAgICAgJ19fc3RlcF9yZWdpc3RyYXRpb25zLmpzJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZVBhdGggPSAocGF0aG5hbWU6IHN0cmluZykgPT5cbiAgICAgICAgICAoaXNBYnNvbHV0ZShwYXRobmFtZSlcbiAgICAgICAgICAgID8gcGF0aG5hbWVcbiAgICAgICAgICAgIDogcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCBwYXRobmFtZSlcbiAgICAgICAgICApLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgY29uc3Qgc291cmNlU25hcHNob3RzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZVNuYXBzaG90PigpO1xuXG4gICAgICAgIGNvbnN0IHdhdGNoYWJsZUV4dGVuc2lvbnMgPSBuZXcgU2V0KFtcbiAgICAgICAgICAnLmpzJyxcbiAgICAgICAgICAnLmpzeCcsXG4gICAgICAgICAgJy50cycsXG4gICAgICAgICAgJy50c3gnLFxuICAgICAgICAgICcubXRzJyxcbiAgICAgICAgICAnLmN0cycsXG4gICAgICAgICAgJy5janMnLFxuICAgICAgICAgICcubWpzJyxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IGlnbm9yZWRQYXRoRnJhZ21lbnRzID0gW1xuICAgICAgICAgICcvLmdpdC8nLFxuICAgICAgICAgICcvbm9kZV9tb2R1bGVzLycsXG4gICAgICAgICAgJy8ubmV4dC8nLFxuICAgICAgICAgICcvLnR1cmJvLycsXG4gICAgICAgICAgJy8udmVyY2VsLycsXG4gICAgICAgICAgJy9kaXN0LycsXG4gICAgICAgICAgJy9idWlsZC8nLFxuICAgICAgICAgICcvb3V0LycsXG4gICAgICAgICAgJy8uY2FjaGUvJyxcbiAgICAgICAgICAnLy55YXJuLycsXG4gICAgICAgICAgJy8ucG5wbS1zdG9yZS8nLFxuICAgICAgICAgICcvLnBhcmNlbC1jYWNoZS8nLFxuICAgICAgICAgICcvLndlbGwta25vd24vd29ya2Zsb3cvJyxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEdlbmVyYXRlZERpciA9IHdvcmtmbG93R2VuZXJhdGVkRGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZERpc3REaXIgPSBub3JtYWxpemVQYXRoKHRoaXMuY29uZmlnLmRpc3REaXIpO1xuICAgICAgICBpZ25vcmVkUGF0aEZyYWdtZW50cy5wdXNoKG5vcm1hbGl6ZWRHZW5lcmF0ZWREaXIpO1xuXG4gICAgICAgIGNvbnN0IGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQgPSAobm9ybWFsaXplZFBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgobm9ybWFsaXplZEdlbmVyYXRlZERpcikgfHxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoID09PSBub3JtYWxpemVkRGlzdERpciB8fFxuICAgICAgICAgICAgbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChgJHtub3JtYWxpemVkRGlzdERpcn0vYClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGlnbm9yZWRQYXRoRnJhZ21lbnRzKSB7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFBhdGguaW5jbHVkZXMoZnJhZ21lbnQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHJlYnVpbGRRdWV1ZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIGNvbnN0IGVucXVldWUgPSAodGFzazogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xuICAgICAgICAgIHJlYnVpbGRRdWV1ZSA9IHJlYnVpbGRRdWV1ZS50aGVuKHRhc2spLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHByb2Nlc3MgZmlsZSBjaGFuZ2UnLCBlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlYnVpbGRRdWV1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZWFkU291cmNlU25hcHNob3QgPSAoZmlsZTogc3RyaW5nKSA9PlxuICAgICAgICAgIGNyZWF0ZVNvdXJjZVNuYXBzaG90KHsgZmlsZSwgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyB9KTtcblxuICAgICAgICBjb25zdCByZWZyZXNoU291cmNlU25hcHNob3RzID0gKCkgPT5cbiAgICAgICAgICByZXBsYWNlU291cmNlU25hcHNob3RzKHtcbiAgICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICAgIHJlYWRTbmFwc2hvdDogcmVhZFNvdXJjZVNuYXBzaG90LFxuICAgICAgICAgICAgc291cmNlU25hcHNob3RzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG1lcmdlQ29tYmluZWRNYW5pZmVzdCA9IChcbiAgICAgICAgICBuZXh0U3RlcHNNYW5pZmVzdDogV29ya2Zsb3dNYW5pZmVzdFxuICAgICAgICApOiBXb3JrZmxvd01hbmlmZXN0ID0+ICh7XG4gICAgICAgICAgLi4ubmV4dFN0ZXBzTWFuaWZlc3QsXG4gICAgICAgICAgd29ya2Zsb3dzOiB7XG4gICAgICAgICAgICAuLi5uZXh0U3RlcHNNYW5pZmVzdC53b3JrZmxvd3MsXG4gICAgICAgICAgICAuLi53b3JrZmxvd3NNYW5pZmVzdC53b3JrZmxvd3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbGFzc2VzOiB7XG4gICAgICAgICAgICAuLi5uZXh0U3RlcHNNYW5pZmVzdC5jbGFzc2VzLFxuICAgICAgICAgICAgLi4ud29ya2Zsb3dzTWFuaWZlc3QuY2xhc3NlcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBob3RSZWJ1aWxkID0gYXN5bmMgKHJlZnJlc2hTdGVwUmVnaXN0cmF0aW9uczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmIChyZWZyZXNoU3RlcFJlZ2lzdHJhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChzdGVwc0N0eCkge1xuICAgICAgICAgICAgICBhd2FpdCBzdGVwc0N0eC5yZWJ1aWxkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGVwc01hbmlmZXN0ID0gYXdhaXQgdGhpcy5jcmVhdGVTdGVwU291cmNlUmVnaXN0cmF0aW9uRmlsZSh7XG4gICAgICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgICAgIG91dGZpbGU6IHN0ZXBzT3V0ZmlsZSxcbiAgICAgICAgICAgICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHdvcmtmbG93UmVzdWx0ID0gYXdhaXQgd29ya2Zsb3dzQ3R4LmludGVyaW1CdW5kbGVDdHgucmVidWlsZCgpO1xuICAgICAgICAgIGNvbnN0IHdvcmtmbG93T3V0cHV0ID0gd29ya2Zsb3dSZXN1bHQub3V0cHV0RmlsZXM/LlswXT8udGV4dDtcbiAgICAgICAgICBpZiAoIXdvcmtmbG93T3V0cHV0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93IG91dHB1dCBmcm9tIGhvdCByZWJ1aWxkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3b3JrZmxvd0ludGVyaW1CdW5kbGVUZXh0ID0gd29ya2Zsb3dPdXRwdXQ7XG4gICAgICAgICAgYXdhaXQgd29ya2Zsb3dzQ3R4LmJ1bmRsZUZpbmFsKHdvcmtmbG93T3V0cHV0KTtcbiAgICAgICAgICBhd2FpdCB3cml0ZU1hbmlmZXN0KG1lcmdlQ29tYmluZWRNYW5pZmVzdChzdGVwc01hbmlmZXN0KSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZnVsbFJlYnVpbGQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGVhckRpc2NvdmVyZWRFbnRyaWVzQ2FjaGUoKTtcbiAgICAgICAgICBjb25zdCBuZXdJbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICAgICAgb3B0aW9ucy5pbnB1dEZpbGVzID0gbmV3SW5wdXRGaWxlcztcblxuICAgICAgICAgIGF3YWl0IHN0ZXBzQ3R4Py5kaXNwb3NlKCk7XG4gICAgICAgICAgYXdhaXQgd29ya2Zsb3dzQ3R4LmludGVyaW1CdW5kbGVDdHguZGlzcG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgbmV3Q29tYmluZWQgPSBhd2FpdCB0aGlzLmJ1aWxkQ29tYmluZWRGdW5jdGlvbihvcHRpb25zKTtcbiAgICAgICAgICBzdGVwc0N0eCA9IG5ld0NvbWJpbmVkLnN0ZXBzQ29udGV4dDtcbiAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyA9IG5ld0NvbWJpbmVkLmRpc2NvdmVyZWRFbnRyaWVzO1xuICAgICAgICAgIHN0ZXBzTWFuaWZlc3QgPSBuZXdDb21iaW5lZC5zdGVwc01hbmlmZXN0O1xuICAgICAgICAgIHdvcmtmbG93c01hbmlmZXN0ID0gbmV3Q29tYmluZWQud29ya2Zsb3dzTWFuaWZlc3Q7XG4gICAgICAgICAgd29ya2Zsb3dJbnRlcmltQnVuZGxlVGV4dCA9IG5ld0NvbWJpbmVkLndvcmtmbG93SW50ZXJpbUJ1bmRsZVRleHQ7XG5cbiAgICAgICAgICBpZiAoIW5ld0NvbWJpbmVkPy5pbnRlcmltQnVuZGxlQ3R4IHx8ICFuZXdDb21iaW5lZD8uYnVuZGxlRmluYWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0ludmFyaWFudDogZXhwZWN0ZWQgd29ya2Zsb3dzIGJ1bmRsZSBjb250ZXh0IGFmdGVyIHJlYnVpbGQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3b3JrZmxvd3NDdHggPSB7XG4gICAgICAgICAgICBpbnRlcmltQnVuZGxlQ3R4OiBuZXdDb21iaW5lZC5pbnRlcmltQnVuZGxlQ3R4LFxuICAgICAgICAgICAgYnVuZGxlRmluYWw6IG5ld0NvbWJpbmVkLmJ1bmRsZUZpbmFsLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhd2FpdCB3cml0ZU1hbmlmZXN0KG5ld0NvbWJpbmVkLm1hbmlmZXN0KTtcbiAgICAgICAgICBhd2FpdCByZWZyZXNoU291cmNlU25hcHNob3RzKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNXYXRjaGFibGVGaWxlID0gKHBhdGg6IHN0cmluZykgPT5cbiAgICAgICAgICB3YXRjaGFibGVFeHRlbnNpb25zLmhhcyhleHRuYW1lKHBhdGgpKTtcblxuICAgICAgICBjb25zdCByZWFkS25vd25GaWxlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgIGNvbnN0IGFsaWFzZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgICAgIGNvbnN0IHJlbGV2YW50RmlsZXMgPSBnZXRSZWxldmFudEZpbGVzKHtcbiAgICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGFkZEtub3duRmlsZSA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVhbEZpbGVQYXRoID0gZmlsZVBhdGg7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZWFsRmlsZVBhdGggPSBub3JtYWxpemVQYXRoKGF3YWl0IHJlYWxwYXRoKGZpbGVQYXRoKSk7XG4gICAgICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSByZWxldmFudEZpbGVzLmhhcyhyZWFsRmlsZVBhdGgpXG4gICAgICAgICAgICAgID8gcmVhbEZpbGVQYXRoXG4gICAgICAgICAgICAgIDogZmlsZVBhdGg7XG4gICAgICAgICAgICBmaWxlcy5hZGQoY2Fub25pY2FsUGF0aCk7XG4gICAgICAgICAgICBhbGlhc2VzLnNldChmaWxlUGF0aCwgY2Fub25pY2FsUGF0aCk7XG4gICAgICAgICAgICBhbGlhc2VzLnNldChyZWFsRmlsZVBhdGgsIGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbFBhdGg7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IHZpc2l0ID0gYXN5bmMgKGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICBsZXQgZGlyZW50czogRGlyZW50PHN0cmluZz5bXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGRpcmVudHMgPSBhd2FpdCByZWFkZGlyKGRpcmVjdG9yeSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGRpcmVudHMubWFwKGFzeW5jIChkaXJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IG5vcm1hbGl6ZVBhdGgoam9pbihkaXJlY3RvcnksIGRpcmVudC5uYW1lKSk7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVudC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCB2aXNpdChmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHN0YXRzOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHN0YXQ+PjtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgc3RhdHMgPSBhd2FpdCBzdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgdmlzaXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghc3RhdHMuaXNGaWxlKCkgfHwgIWlzV2F0Y2hhYmxlRmlsZShmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBhZGRLbm93bkZpbGUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgYXdhaXQgdmlzaXQodGhpcy5jb25maWcud29ya2luZ0Rpcik7XG4gICAgICAgICAgcmV0dXJuIHsgZmlsZXMsIGFsaWFzZXMsIGFkZEtub3duRmlsZSB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG1lcmdlRmlsZUNoYW5nZXMgPSAoXG4gICAgICAgICAgbGVmdDogRmlsZUNoYW5nZXMsXG4gICAgICAgICAgcmlnaHQ6IEZpbGVDaGFuZ2VzXG4gICAgICAgICk6IEZpbGVDaGFuZ2VzID0+ICh7XG4gICAgICAgICAgYWRkZWRGaWxlczogdW5pcXVlKFsuLi5sZWZ0LmFkZGVkRmlsZXMsIC4uLnJpZ2h0LmFkZGVkRmlsZXNdKSxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzOiB1bmlxdWUoW1xuICAgICAgICAgICAgLi4ubGVmdC5tb2RpZmllZEZpbGVzLFxuICAgICAgICAgICAgLi4ucmlnaHQubW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IHVuaXF1ZShbLi4ubGVmdC5yZW1vdmVkRmlsZXMsIC4uLnJpZ2h0LnJlbW92ZWRGaWxlc10pLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1bmlxdWUgPSAocGF0aHM6IHN0cmluZ1tdKSA9PiBbLi4ubmV3IFNldChwYXRocyldO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzaWZ5RmlsZUNoYW5nZXMgPSAoe1xuICAgICAgICAgIGNoYW5nZWRGaWxlcyxcbiAgICAgICAgICBrbm93bkZpbGVzLFxuICAgICAgICAgIHJlbW92ZWRGaWxlcyxcbiAgICAgICAgfToge1xuICAgICAgICAgIGNoYW5nZWRGaWxlczogc3RyaW5nW107XG4gICAgICAgICAga25vd25GaWxlczogU2V0PHN0cmluZz47XG4gICAgICAgICAgcmVtb3ZlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgICAgfSk6IEZpbGVDaGFuZ2VzID0+IHtcbiAgICAgICAgICBjb25zdCBhZGRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IG1vZGlmaWVkRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgdW5pcXVlKGNoYW5nZWRGaWxlcykpIHtcbiAgICAgICAgICAgIGlmIChrbm93bkZpbGVzLmhhcyhmaWxlKSkge1xuICAgICAgICAgICAgICBtb2RpZmllZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRlZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICAgIGtub3duRmlsZXMuYWRkKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiByZW1vdmVkRmlsZXMpIHtcbiAgICAgICAgICAgIGtub3duRmlsZXMuZGVsZXRlKGZpbGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRlZEZpbGVzLFxuICAgICAgICAgICAgbW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICAgIHJlbW92ZWRGaWxlczogdW5pcXVlKHJlbW92ZWRGaWxlcyksXG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYXNGaWxlQ2hhbmdlcyA9ICh7XG4gICAgICAgICAgYWRkZWRGaWxlcyxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzLFxuICAgICAgICAgIHJlbW92ZWRGaWxlcyxcbiAgICAgICAgfTogRmlsZUNoYW5nZXMpID0+XG4gICAgICAgICAgYWRkZWRGaWxlcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgbW9kaWZpZWRGaWxlcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgcmVtb3ZlZEZpbGVzLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IHN0ZXBFeGVjdXRpb25GaWxlc0NoYW5nZWQgPSAoZmlsZUNoYW5nZXM6IEZpbGVDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcEVudHJ5RmlsZXMgPSBbLi4uZGlzY292ZXJlZEVudHJpZXMuZGlzY292ZXJlZFN0ZXBzXS5tYXAoXG4gICAgICAgICAgICBub3JtYWxpemVQYXRoXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoc3RlcEVudHJ5RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNoYW5nZWRGaWxlcyA9IHVuaXF1ZShbXG4gICAgICAgICAgICAuLi5maWxlQ2hhbmdlcy5tb2RpZmllZEZpbGVzLFxuICAgICAgICAgICAgLi4uZmlsZUNoYW5nZXMuYWRkZWRGaWxlcyxcbiAgICAgICAgICAgIC4uLmZpbGVDaGFuZ2VzLnJlbW92ZWRGaWxlcyxcbiAgICAgICAgICBdKS5tYXAobm9ybWFsaXplUGF0aCk7XG5cbiAgICAgICAgICByZXR1cm4gY2hhbmdlZEZpbGVzLnNvbWUoXG4gICAgICAgICAgICAoY2hhbmdlZEZpbGUpID0+XG4gICAgICAgICAgICAgIHN0ZXBFbnRyeUZpbGVzLmluY2x1ZGVzKGNoYW5nZWRGaWxlKSB8fFxuICAgICAgICAgICAgICBzdGVwRW50cnlGaWxlcy5zb21lKChzdGVwRmlsZSkgPT5cbiAgICAgICAgICAgICAgICBwYXJlbnRIYXNDaGlsZChzdGVwRmlsZSwgY2hhbmdlZEZpbGUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsb2dEZXZIbXIgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LldPUktGTE9XX0RFVl9ITVJfTE9HUyA9PT0gJzEnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyguLi5hcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgcmVmcmVzaFNvdXJjZVNuYXBzaG90cygpO1xuICAgICAgICBsZXQge1xuICAgICAgICAgIGZpbGVzOiBrbm93bkZpbGVzLFxuICAgICAgICAgIGFsaWFzZXM6IGtub3duRmlsZUFsaWFzZXMsXG4gICAgICAgICAgYWRkS25vd25GaWxlOiByZW1lbWJlcktub3duRmlsZSxcbiAgICAgICAgfSA9IGF3YWl0IHJlYWRLbm93bkZpbGVzKCk7XG5cbiAgICAgICAgY29uc3QgcmVmcmVzaEtub3duRmlsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dEtub3duID0gYXdhaXQgcmVhZEtub3duRmlsZXMoKTtcbiAgICAgICAgICBrbm93bkZpbGVzID0gbmV4dEtub3duLmZpbGVzO1xuICAgICAgICAgIGtub3duRmlsZUFsaWFzZXMgPSBuZXh0S25vd24uYWxpYXNlcztcbiAgICAgICAgICByZW1lbWJlcktub3duRmlsZSA9IG5leHRLbm93bi5hZGRLbm93bkZpbGU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJvY2Vzc0ZpbGVDaGFuZ2VzID0gYXN5bmMgKGZpbGVDaGFuZ2VzOiBGaWxlQ2hhbmdlcykgPT4ge1xuICAgICAgICAgIGlmICghaGFzRmlsZUNoYW5nZXMoZmlsZUNoYW5nZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGVjaXNpb24gPSBhd2FpdCBjbGFzc2lmeVJlYnVpbGQoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBmaWxlQ2hhbmdlcyxcbiAgICAgICAgICAgIGlucHV0RmlsZXM6IG9wdGlvbnMuaW5wdXRGaWxlcyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgICAgICAgICBwYXJlbnRIYXNDaGlsZCxcbiAgICAgICAgICAgIHJlYWRTbmFwc2hvdDogcmVhZFNvdXJjZVNuYXBzaG90LFxuICAgICAgICAgICAgc291cmNlU25hcHNob3RzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChkZWNpc2lvbi5raW5kID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIGxvZ0Rldkhtcignd29ya2Zsb3cgZGV2IGhtcjogc2tpcCcpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbZmlsZSwgc25hcHNob3RdIG9mIGRlY2lzaW9uLnNuYXBzaG90cyB8fCBbXSkge1xuICAgICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMuc2V0KGZpbGUsIHNuYXBzaG90KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXN0ZXBzQ3R4ICYmXG4gICAgICAgICAgICAgIHdvcmtmbG93SW50ZXJpbUJ1bmRsZVRleHQgJiZcbiAgICAgICAgICAgICAgc3RlcEV4ZWN1dGlvbkZpbGVzQ2hhbmdlZChmaWxlQ2hhbmdlcylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBTb3VyY2Ugc3RlcCByZWdpc3RyYXRpb25zIGtlZXAgc3RhYmxlIGltcG9ydHMsIHNvIFR1cmJvcGFja1xuICAgICAgICAgICAgICAvLyBjYW4gbGVhdmUgdGhlIGdlbmVyYXRlZCBmbG93IHJvdXRlIGNhY2hlZCBhZnRlciBhXG4gICAgICAgICAgICAgIC8vIHN0ZXAtYm9keS1vbmx5IGVkaXQuIFJlZnJlc2ggdGhlIHJvdXRlIHdyYXBwZXIgd2l0aG91dFxuICAgICAgICAgICAgICAvLyByZWRpc2NvdmVyaW5nIGVudHJpZXMgb3IgcmVidWlsZGluZyB0aGUgd29ya2Zsb3cgVk0uXG4gICAgICAgICAgICAgIGF3YWl0IHdvcmtmbG93c0N0eC5idW5kbGVGaW5hbCh3b3JrZmxvd0ludGVyaW1CdW5kbGVUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRlY2lzaW9uLmtpbmQgPT09ICdmdWxsJykge1xuICAgICAgICAgICAgbG9nRGV2SG1yKCd3b3JrZmxvdyBkZXYgaG1yOiBmdWxsIHJlZGlzY292ZXJ5Jyk7XG4gICAgICAgICAgICBhd2FpdCBmdWxsUmVidWlsZCgpO1xuICAgICAgICAgICAgYXdhaXQgcmVmcmVzaEtub3duRmlsZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2dEZXZIbXIoXG4gICAgICAgICAgICBgd29ya2Zsb3cgZGV2IGhtcjogaG90IHJlYnVpbGQke2RlY2lzaW9uLnJlZnJlc2hTdGVwUmVnaXN0cmF0aW9ucyA/ICcgd2l0aCBzdGVwIHJlZ2lzdHJhdGlvbiByZWZyZXNoJyA6ICcnfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IGhvdFJlYnVpbGQoZGVjaXNpb24ucmVmcmVzaFN0ZXBSZWdpc3RyYXRpb25zKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtmaWxlLCBzbmFwc2hvdF0gb2YgZGVjaXNpb24uc25hcHNob3RzKSB7XG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMuc2V0KGZpbGUsIHNuYXBzaG90KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHBlbmRpbmdGaWxlQ2hhbmdlczogRmlsZUNoYW5nZXMgPSB7XG4gICAgICAgICAgYWRkZWRGaWxlczogW10sXG4gICAgICAgICAgbW9kaWZpZWRGaWxlczogW10sXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZsdXNoVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IHNjaGVkdWxlRmlsZUNoYW5nZXMgPSAoZmlsZUNoYW5nZXM6IEZpbGVDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzID0gbWVyZ2VGaWxlQ2hhbmdlcyhcbiAgICAgICAgICAgIHBlbmRpbmdGaWxlQ2hhbmdlcyxcbiAgICAgICAgICAgIGZpbGVDaGFuZ2VzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZmx1c2hUaW1lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbHVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IHBlbmRpbmdGaWxlQ2hhbmdlcztcbiAgICAgICAgICAgIHBlbmRpbmdGaWxlQ2hhbmdlcyA9IHtcbiAgICAgICAgICAgICAgYWRkZWRGaWxlczogW10sXG4gICAgICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IFtdLFxuICAgICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZsdXNoVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBlbnF1ZXVlKCgpID0+IHByb2Nlc3NGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcykpO1xuICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGggPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qga25vd25QYXRoID0ga25vd25GaWxlQWxpYXNlcy5nZXQobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGlmIChrbm93blBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBrbm93blBhdGg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWxGaWxlUGF0aCA9IG5vcm1hbGl6ZVBhdGgoYXdhaXQgcmVhbHBhdGgobm9ybWFsaXplZFBhdGgpKTtcbiAgICAgICAgICAgIHJldHVybiBrbm93bkZpbGVBbGlhc2VzLmdldChyZWFsRmlsZVBhdGgpID8/IG5vcm1hbGl6ZWRQYXRoO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYW5kbGVGaWxlQWRkZWQgPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdQYXRoID0gYXdhaXQgcmVzb2x2ZUV4aXN0aW5nRXZlbnRQYXRoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgICBjb25zdCB3YXNLbm93biA9IGV4aXN0aW5nUGF0aCA/IGtub3duRmlsZXMuaGFzKGV4aXN0aW5nUGF0aCkgOiBmYWxzZTtcbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gYXdhaXQgcmVtZW1iZXJLbm93bkZpbGUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGtub3duRmlsZXMuYWRkKGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgIHNjaGVkdWxlRmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgYWRkZWRGaWxlczogd2FzS25vd24gPyBbXSA6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IHdhc0tub3duID8gW2Nhbm9uaWNhbFBhdGhdIDogW10sXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2VkID0gYXN5bmMgKHBhdGhuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gYXdhaXQgcmVzb2x2ZUV4aXN0aW5nRXZlbnRQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWNhbm9uaWNhbFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IGNsYXNzaWZ5RmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgY2hhbmdlZEZpbGVzOiBbY2Fub25pY2FsUGF0aF0sXG4gICAgICAgICAgICBrbm93bkZpbGVzLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIWtub3duRmlsZUFsaWFzZXMuaGFzKGNhbm9uaWNhbFBhdGgpKSB7XG4gICAgICAgICAgICBhd2FpdCByZW1lbWJlcktub3duRmlsZShjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlRmlsZVJlbW92ZWQgPSAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2Fub25pY2FsUGF0aCA9XG4gICAgICAgICAgICBrbm93bkZpbGVBbGlhc2VzLmdldChub3JtYWxpemVkUGF0aCkgPz8gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgY29uc3QgZmlsZUNoYW5nZXMgPSBjbGFzc2lmeUZpbGVDaGFuZ2VzKHtcbiAgICAgICAgICAgIGNoYW5nZWRGaWxlczogW10sXG4gICAgICAgICAgICBrbm93bkZpbGVzLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbY2Fub25pY2FsUGF0aF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAga25vd25GaWxlQWxpYXNlcy5kZWxldGUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIHNjaGVkdWxlRmlsZUNoYW5nZXMoZmlsZUNoYW5nZXMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHdhdGNoZXIgPSBjaG9raWRhci53YXRjaCh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCB7XG4gICAgICAgICAgaWdub3JlSW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgICBmb2xsb3dTeW1saW5rczogdHJ1ZSxcbiAgICAgICAgICBpZ25vcmVkOiAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChTdHJpbmcocGF0aG5hbWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhd2F0Y2hhYmxlRXh0ZW5zaW9ucy5oYXMoZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYXNJZ25vcmVkUGF0aEZyYWdtZW50KG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB3YXRjaGVyLm9uKCdhZGQnLCAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICB2b2lkIGhhbmRsZUZpbGVBZGRlZChwYXRobmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB3YXRjaGVyLm9uKCdjaGFuZ2UnLCAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICB2b2lkIGhhbmRsZUZpbGVDaGFuZ2VkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ3VubGluaycsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIGhhbmRsZUZpbGVSZW1vdmVkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignV29ya2Zsb3cgZGV2IHdhdGNoZXIgZXJyb3InLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICB3YXRjaGVyLm9uKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IHJlYWR5Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRJbnB1dEZpbGVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCBzdXBlci5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICByZXR1cm4gaW5wdXRGaWxlcy5maWx0ZXIoKGZpbGUpID0+IHtcbiAgICAgICAgY29uc3QgZW50cnkgPSByZWxhdGl2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCBmaWxlKS5yZXBsYWNlQWxsKFxuICAgICAgICAgICdcXFxcJyxcbiAgICAgICAgICAnLydcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBNYXRjaCBBcHAgUm91dGVyIHJvdXRlLCBwYWdlLCBhbmQgbGF5b3V0IGVudHJ5cG9pbnRzIGluIGFwcC8gb3Igc3JjL2FwcC8uXG4gICAgICAgIGlmICgvXig/OmFwcHxzcmNcXC9hcHApXFwvKD86LipcXC8pPyg/OnJvdXRlfHBhZ2V8bGF5b3V0KVxcLi8udGVzdChlbnRyeSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hdGNoIGV2ZXJ5IFBhZ2VzIFJvdXRlciBlbnRyeXBvaW50IGluIHBhZ2VzLyBvciBzcmMvcGFnZXMvLlxuICAgICAgICBpZiAoL14oPzpwYWdlc3xzcmNcXC9wYWdlcylcXC8vLnRlc3QoZW50cnkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYXRjaCBOZXh0LmpzIHJvb3QgZW50cnlwb2ludHMgYXQgdGhlIHByb2plY3Qgcm9vdCBvciB1bmRlciBzcmMvLlxuICAgICAgICByZXR1cm4gWydpbnN0cnVtZW50YXRpb24nLCAnbWlkZGxld2FyZScsICdwcm94eSddLnNvbWUoKG5hbWUpID0+XG4gICAgICAgICAgdGhpcy5jb25maWcucGFnZUV4dGVuc2lvbnMuc29tZShcbiAgICAgICAgICAgIChleHRlbnNpb24pID0+XG4gICAgICAgICAgICAgIGVudHJ5ID09PSBgJHtuYW1lfS4ke2V4dGVuc2lvbn1gIHx8XG4gICAgICAgICAgICAgIGVudHJ5ID09PSBgc3JjLyR7bmFtZX0uJHtleHRlbnNpb259YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd3JpdGVGdW5jdGlvbnNDb25maWcob3V0cHV0RGlyOiBzdHJpbmcpIHtcbiAgICAgIC8vIHdlIGRvbid0IHJ1biB0aGlzIGluIGRldmVsb3BtZW50IG1vZGUgYXMgaXQncyBub3QgbmVlZGVkXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWMiBjb21iaW5lZCBjb25maWc6IHNpbmdsZSB0cmlnZ2VyIGhhbmRsZXMgYm90aCB3b3JrZmxvdyBhbmQgc3RlcCBleGVjdXRpb24uXG4gICAgICAvLyBUaGUgc3RlcCByb3V0ZSBubyBsb25nZXIgbmVlZHMgaXRzIG93biB0cmlnZ2VyIHNpbmNlIHN0ZXBzIGFyZSBleGVjdXRlZFxuICAgICAgLy8gaW5saW5lIGJ5IHRoZSBjb21iaW5lZCBoYW5kbGVyIG9yIHF1ZXVlZCBiYWNrIHRvIF9fd2tmX3dvcmtmbG93Xyogd2l0aCBzdGVwSWQuXG4gICAgICBjb25zdCBnZW5lcmF0ZWRDb25maWcgPSB7XG4gICAgICAgIHZlcnNpb246ICcwJyxcbiAgICAgICAgd29ya2Zsb3dzOiB7XG4gICAgICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbFRyaWdnZXJzOiBbV09SS0ZMT1dfUVVFVUVfVFJJR0dFUl0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICAgIGpvaW4ob3V0cHV0RGlyLCAnLndlbGwta25vd24vd29ya2Zsb3cvdjEvY29uZmlnLmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZ2VuZXJhdGVkQ29uZmlnLCBudWxsLCAyKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWMjogQnVpbGQgY29tYmluZWQgcm91dGUgdGhhdCBoYW5kbGVzIGJvdGggd29ya2Zsb3cgYW5kIHN0ZXAgZXhlY3V0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRDb21iaW5lZEZ1bmN0aW9uKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgIHRzY29uZmlnUGF0aCxcbiAgICB9OiB7XG4gICAgICBpbnB1dEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyOiBzdHJpbmc7XG4gICAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgfSkge1xuICAgICAgY29uc3QgZmxvd1JvdXRlRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ2Zsb3cnKTtcbiAgICAgIGF3YWl0IG1rZGlyKGZsb3dSb3V0ZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgc3RlcHNPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLmpzJyksXG4gICAgICAgIGZsb3dPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ3JvdXRlLmpzJyksXG4gICAgICAgIGJ1bmRsZUZpbmFsT3V0cHV0OiBmYWxzZSxcbiAgICAgICAgZXh0ZXJuYWxpemVOb25TdGVwczogdHJ1ZSxcbiAgICAgICAgc291cmNlU3RlcFJlZ2lzdHJhdGlvbkltcG9ydHM6IHRydWUsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRXZWJob29rUm91dGUoe1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgfToge1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCB3ZWJob29rUm91dGVGaWxlID0gam9pbihcbiAgICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgICd3ZWJob29rL1t0b2tlbl0vcm91dGUuanMnXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVXZWJob29rQnVuZGxlKHtcbiAgICAgICAgb3V0ZmlsZTogd2ViaG9va1JvdXRlRmlsZSxcbiAgICAgICAgYnVuZGxlOiBmYWxzZSwgLy8gTmV4dC5qcyBkb2Vzbid0IG5lZWQgYnVuZGxpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZEFwcERpcmVjdG9yeSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgY29uc3QgYXBwRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnYXBwJyk7XG4gICAgICBjb25zdCBzcmNBcHBEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdzcmMvYXBwJyk7XG4gICAgICBjb25zdCBwYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3BhZ2VzJyk7XG4gICAgICBjb25zdCBzcmNQYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3NyYy9wYWdlcycpO1xuXG4gICAgICAvLyBIZWxwZXIgdG8gY2hlY2sgaWYgYSBwYXRoIGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gYXN5bmMgKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFjY2VzcyhwYXRoLCBjb25zdGFudHMuRl9PSyk7XG4gICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KHBhdGgpO1xuICAgICAgICAgIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5OiAke3BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBhIGRpcmVjdG9yeScpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGlmIGFwcCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3RvcnkoYXBwRGlyKSkge1xuICAgICAgICByZXR1cm4gYXBwRGlyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBzcmMvYXBwIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShzcmNBcHBEaXIpKSB7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vIGFwcCBkaXJlY3RvcnkgZXhpc3RzLCBjaGVjayBmb3IgcGFnZXMgZGlyZWN0b3J5IGFuZCBjcmVhdGUgYXBwIG5leHQgdG8gaXRcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShwYWdlc0RpcikpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFwcCBkaXJlY3RvcnkgbmV4dCB0byBwYWdlcyBkaXJlY3RvcnlcbiAgICAgICAgYXdhaXQgbWtkaXIoYXBwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIGFwcERpcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHNyY1BhZ2VzRGlyKSkge1xuICAgICAgICAvLyBDcmVhdGUgc3JjL2FwcCBkaXJlY3RvcnkgbmV4dCB0byBzcmMvcGFnZXMgZGlyZWN0b3J5XG4gICAgICAgIGF3YWl0IG1rZGlyKHNyY0FwcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIE5leHQuanMgYXBwIG9yIHBhZ2VzIGRpcmVjdG9yeS4gRXhwZWN0ZWQgb25lIG9mOiBcImFwcFwiLCBcInNyYy9hcHBcIiwgXCJwYWdlc1wiLCBvciBcInNyYy9wYWdlc1wiIHRvIGV4aXN0LidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlciA9IE5leHRCdWlsZGVyO1xuICByZXR1cm4gTmV4dEJ1aWxkZXI7XG59XG4iXX0=
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAoUvC,wBAAgB,YAAY,CAC1B,cAAc,EACV,UAAU,GACV,CAAC,CACC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,KAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,EAC7B,EACE,SAAS,GACV,GAAE;IACD,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;QACF;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;KACjE,CAAC;CACE,IAeJ,OAAO,MAAM,EACb,KAAK;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,yBAgRrC"}
|
package/dist/index.js
CHANGED
|
@@ -54,6 +54,14 @@ const VERCEL_WORLD_SERVER_EXTERNAL_PACKAGES = [
|
|
|
54
54
|
VERCEL_WORLD_PACKAGE,
|
|
55
55
|
...VERCEL_WORLD_DEPENDENCY_PACKAGES,
|
|
56
56
|
];
|
|
57
|
+
const WORKFLOW_SERVER_TRANSPILE_PACKAGES = [
|
|
58
|
+
'workflow',
|
|
59
|
+
'@workflow/core',
|
|
60
|
+
'@workflow/serde',
|
|
61
|
+
'@workflow/errors',
|
|
62
|
+
'@workflow/utils',
|
|
63
|
+
'@workflow/ai',
|
|
64
|
+
];
|
|
57
65
|
const useWorkflowPattern = /^\s*(['"])use workflow\1;?\s*$/m;
|
|
58
66
|
const useStepPattern = /^\s*(['"])use step\1;?\s*$/m;
|
|
59
67
|
const workflowSerdeImportPattern = /from\s+(['"])@workflow\/serde\1/;
|
|
@@ -61,6 +69,12 @@ const workflowSerdeSymbolPattern = /Symbol\.for\s*\(\s*(['"])workflow-(?:seriali
|
|
|
61
69
|
const workflowSerdeComputedPropertyPattern = /\[\s*WORKFLOW_(?:SERIALIZE|DESERIALIZE)\s*\]/;
|
|
62
70
|
const PSEUDO_EXTERNAL_PACKAGES = new Set(['server-only', 'client-only']);
|
|
63
71
|
const warnedAutoRemovedServerExternalPackages = new Set();
|
|
72
|
+
const BASE_PATH_SYMBOL = Symbol.for('@workflow/core/basePath');
|
|
73
|
+
const globalConfig = globalThis;
|
|
74
|
+
// Keep this local: @workflow/next is CommonJS, while @workflow/utils is ESM-only.
|
|
75
|
+
function setWorkflowBasePath(basePath) {
|
|
76
|
+
globalConfig[BASE_PATH_SYMBOL] = basePath ?? '';
|
|
77
|
+
}
|
|
64
78
|
function isPlainObject(value) {
|
|
65
79
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
66
80
|
}
|
|
@@ -262,21 +276,16 @@ function registerWorkflowDiagnosticsManifestCopy(metadata) {
|
|
|
262
276
|
globalWithMarker[marker].push(metadata);
|
|
263
277
|
}
|
|
264
278
|
function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
279
|
+
const workflowTargetWorld = (0, builders_1.ensureWorkflowTargetWorldEnv)();
|
|
280
|
+
if (workflowTargetWorld === '@workflow/world-local') {
|
|
281
|
+
process.env.WORKFLOW_LOCAL_DATA_DIR ??= '.next/workflow-data';
|
|
282
|
+
}
|
|
265
283
|
if (!process.env.VERCEL_DEPLOYMENT_ID) {
|
|
266
|
-
if (!process.env.WORKFLOW_TARGET_WORLD) {
|
|
267
|
-
process.env.WORKFLOW_TARGET_WORLD = 'local';
|
|
268
|
-
process.env.WORKFLOW_LOCAL_DATA_DIR = '.next/workflow-data';
|
|
269
|
-
}
|
|
270
284
|
const maybePort = workflows?.local?.port;
|
|
271
285
|
if (maybePort) {
|
|
272
286
|
process.env.PORT = maybePort.toString();
|
|
273
287
|
}
|
|
274
288
|
}
|
|
275
|
-
else {
|
|
276
|
-
if (!process.env.WORKFLOW_TARGET_WORLD) {
|
|
277
|
-
process.env.WORKFLOW_TARGET_WORLD = 'vercel';
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
289
|
return async function buildConfig(phase, ctx) {
|
|
281
290
|
if (phase === 'phase-development-server' ||
|
|
282
291
|
phase === 'phase-production-build') {
|
|
@@ -294,6 +303,21 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
294
303
|
}
|
|
295
304
|
// shallow clone to avoid read-only on top-level
|
|
296
305
|
nextConfig = Object.assign({}, nextConfig);
|
|
306
|
+
const workflowBasePath = nextConfig.basePath;
|
|
307
|
+
setWorkflowBasePath(workflowBasePath);
|
|
308
|
+
nextConfig.env = {
|
|
309
|
+
...nextConfig.env,
|
|
310
|
+
WORKFLOW_TARGET_WORLD: workflowTargetWorld,
|
|
311
|
+
};
|
|
312
|
+
const workingDir = process.cwd();
|
|
313
|
+
const workflowTargetWorldWebpackAlias = (0, builders_1.resolveWorkflowTargetWorldAlias)({
|
|
314
|
+
workingDir,
|
|
315
|
+
targetWorld: workflowTargetWorld,
|
|
316
|
+
});
|
|
317
|
+
const workflowTargetWorldIsPath = (0, builders_1.isWorkflowTargetWorldPath)(workflowTargetWorld);
|
|
318
|
+
const workflowTargetWorldTranspilePackages = workflowTargetWorld === VERCEL_WORLD_PACKAGE || workflowTargetWorldIsPath
|
|
319
|
+
? []
|
|
320
|
+
: [workflowTargetWorld];
|
|
297
321
|
nextConfig.serverExternalPackages = [
|
|
298
322
|
...new Set([
|
|
299
323
|
...(nextConfig.serverExternalPackages || []),
|
|
@@ -303,6 +327,13 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
303
327
|
...VERCEL_WORLD_SERVER_EXTERNAL_PACKAGES,
|
|
304
328
|
]),
|
|
305
329
|
];
|
|
330
|
+
nextConfig.transpilePackages = [
|
|
331
|
+
...new Set([
|
|
332
|
+
...(nextConfig.transpilePackages || []),
|
|
333
|
+
...WORKFLOW_SERVER_TRANSPILE_PACKAGES,
|
|
334
|
+
...workflowTargetWorldTranspilePackages,
|
|
335
|
+
]),
|
|
336
|
+
];
|
|
306
337
|
const existingCompiler = nextConfig.compiler ?? {};
|
|
307
338
|
const existingRunAfterProductionCompile = existingCompiler.runAfterProductionCompile;
|
|
308
339
|
const configuredServerExternalPackages = Array.isArray(nextConfig.serverExternalPackages)
|
|
@@ -340,8 +371,13 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
340
371
|
if (!nextConfig.turbopack.rules) {
|
|
341
372
|
nextConfig.turbopack.rules = {};
|
|
342
373
|
}
|
|
374
|
+
nextConfig.turbopack.resolveAlias = {
|
|
375
|
+
...(nextConfig.turbopack.resolveAlias || {}),
|
|
376
|
+
[builders_1.WORKFLOW_WORLD_TARGET_MODULE]: workflowTargetWorldIsPath
|
|
377
|
+
? workflowTargetWorldWebpackAlias
|
|
378
|
+
: workflowTargetWorld,
|
|
379
|
+
};
|
|
343
380
|
const existingRules = nextConfig.turbopack.rules;
|
|
344
|
-
const workingDir = process.cwd();
|
|
345
381
|
const nextVersion = resolveNextVersion(workingDir);
|
|
346
382
|
const configuredProjectRoot = nextConfig.outputFileTracingRoot ?? nextConfig.turbopack?.root;
|
|
347
383
|
const projectRoot = configuredProjectRoot
|
|
@@ -379,6 +415,7 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
379
415
|
moduleSpecifierRoot: workingDir,
|
|
380
416
|
workingDir,
|
|
381
417
|
distDir,
|
|
418
|
+
basePath: workflowBasePath,
|
|
382
419
|
diagnosticsDir: `${distDir}/diagnostics`,
|
|
383
420
|
buildTarget: 'next',
|
|
384
421
|
workflowsBundlePath: '', // not used in base
|
|
@@ -422,7 +459,7 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
422
459
|
// Match files with workflow directives or custom serialization patterns
|
|
423
460
|
// Uses backreferences (\2, \3) to ensure matching quote types
|
|
424
461
|
{
|
|
425
|
-
content: /(use workflow|use step|from\s+(['"])@workflow\/serde\2|Symbol\.for\s*\(\s*(['"])workflow-(?:serialize|deserialize)\3\s*\))/,
|
|
462
|
+
content: /(use workflow|use step|@workflow\/core\/runtime\/world-target|from\s+(['"])@workflow\/serde\2|Symbol\.for\s*\(\s*(['"])workflow-(?:serialize|deserialize)\3\s*\))/,
|
|
426
463
|
},
|
|
427
464
|
],
|
|
428
465
|
},
|
|
@@ -434,7 +471,10 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
434
471
|
// configure the loader for webpack
|
|
435
472
|
const existingWebpackModify = nextConfig.webpack;
|
|
436
473
|
nextConfig.webpack = (...args) => {
|
|
437
|
-
|
|
474
|
+
let [webpackConfig] = args;
|
|
475
|
+
webpackConfig = existingWebpackModify
|
|
476
|
+
? (existingWebpackModify(...args) ?? webpackConfig)
|
|
477
|
+
: webpackConfig;
|
|
438
478
|
if (!webpackConfig.module) {
|
|
439
479
|
webpackConfig.module = {};
|
|
440
480
|
}
|
|
@@ -447,9 +487,24 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
447
487
|
test: /.*\.(mjs|cjs|cts|ts|tsx|js|jsx)$/,
|
|
448
488
|
loader: loaderPath,
|
|
449
489
|
});
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
490
|
+
webpackConfig.resolve ||= {};
|
|
491
|
+
const existingAlias = webpackConfig.resolve.alias;
|
|
492
|
+
if (Array.isArray(existingAlias)) {
|
|
493
|
+
webpackConfig.resolve.alias = [
|
|
494
|
+
...existingAlias,
|
|
495
|
+
{
|
|
496
|
+
name: builders_1.WORKFLOW_WORLD_TARGET_MODULE,
|
|
497
|
+
alias: workflowTargetWorldWebpackAlias,
|
|
498
|
+
},
|
|
499
|
+
];
|
|
500
|
+
}
|
|
501
|
+
else {
|
|
502
|
+
webpackConfig.resolve.alias = {
|
|
503
|
+
...(existingAlias || {}),
|
|
504
|
+
[builders_1.WORKFLOW_WORLD_TARGET_MODULE]: workflowTargetWorldWebpackAlias,
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
return webpackConfig;
|
|
453
508
|
};
|
|
454
509
|
// only run this in the main process so it only runs once
|
|
455
510
|
// as Next.js uses child processes for different builds
|
|
@@ -462,4 +517,4 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
462
517
|
return nextConfig;
|
|
463
518
|
};
|
|
464
519
|
}
|
|
465
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyVEEsb0NBeVFDO0FBcGtCRCxxQ0FBNEQ7QUFDNUQsK0NBQTZEO0FBQzdELHlDQUFzRDtBQUN0RCxpREFHNEI7QUFFNUIsb0RBQTRCO0FBQzVCLDZDQUE4QztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDO0FBQ3RELE1BQU0sZ0NBQWdDLEdBQUc7SUFDdkMsZUFBZTtJQUNmLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsa0JBQWtCO0NBQ25CLENBQUM7QUFDRixNQUFNLHFDQUFxQyxHQUFHO0lBQzVDLG9CQUFvQjtJQUNwQixHQUFHLGdDQUFnQztDQUNwQyxDQUFDO0FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUM3RCxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQztBQUNyRCxNQUFNLDBCQUEwQixHQUFHLGlDQUFpQyxDQUFDO0FBQ3JFLE1BQU0sMEJBQTBCLEdBQzlCLG9FQUFvRSxDQUFDO0FBQ3ZFLE1BQU0sb0NBQW9DLEdBQ3hDLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN6RSxNQUFNLHVDQUF1QyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFlbEUsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FBQyxTQUFpQjtJQUNyRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFD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QUFVLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcHlGaWxlU3luYywgbWtkaXJTeW5jLCBzdGF0U3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgY29weUZpbGUsIG1rZGlyLCByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSwgaXNBYnNvbHV0ZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge1xuICByZXNvbHZlQ29uZmlndXJlZFByb2plY3RSb290LFxuICByZXNvbHZlUHJvamVjdFJvb3QsXG59IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5pbXBvcnQgdHlwZSB7IE5leHRDb25maWcgfSBmcm9tICduZXh0JztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGdldE5leHRCdWlsZGVyIH0gZnJvbSAnLi9idWlsZGVyLmpzJztcblxuY29uc3QgVkVSQ0VMX1dPUkxEX1BBQ0tBR0UgPSAnQHdvcmtmbG93L3dvcmxkLXZlcmNlbCc7XG5jb25zdCBWRVJDRUxfV09STERfREVQRU5ERU5DWV9QQUNLQUdFUyA9IFtcbiAgJ0B2ZXJjZWwvcXVldWUnLFxuICAnQHZlcmNlbC9vaWRjJyxcbiAgJ0B2ZXJjZWwvY2xpLWF1dGgnLFxuICAnQG5hcGktcnMva2V5cmluZycsXG5dO1xuY29uc3QgVkVSQ0VMX1dPUkxEX1NFUlZFUl9FWFRFUk5BTF9QQUNLQUdFUyA9IFtcbiAgVkVSQ0VMX1dPUkxEX1BBQ0tBR0UsXG4gIC4uLlZFUkNFTF9XT1JMRF9ERVBFTkRFTkNZX1BBQ0tBR0VTLFxuXTtcbmNvbnN0IHVzZVdvcmtmbG93UGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugd29ya2Zsb3dcXDE7P1xccyokL207XG5jb25zdCB1c2VTdGVwUGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugc3RlcFxcMTs/XFxzKiQvbTtcbmNvbnN0IHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuID0gL2Zyb21cXHMrKFsnXCJdKUB3b3JrZmxvd1xcL3NlcmRlXFwxLztcbmNvbnN0IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuID1cbiAgL1N5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDFcXHMqXFwpLztcbmNvbnN0IHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybiA9XG4gIC9cXFtcXHMqV09SS0ZMT1dfKD86U0VSSUFMSVpFfERFU0VSSUFMSVpFKVxccypcXF0vO1xuXG5jb25zdCBQU0VVRE9fRVhURVJOQUxfUEFDS0FHRVMgPSBuZXcgU2V0KFsnc2VydmVyLW9ubHknLCAnY2xpZW50LW9ubHknXSk7XG5jb25zdCB3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuaW50ZXJmYWNlIFdvcmtmbG93UGF0dGVybk1hdGNoIHtcbiAgaGFzVXNlV29ya2Zsb3c6IGJvb2xlYW47XG4gIGhhc1VzZVN0ZXA6IGJvb2xlYW47XG4gIGhhc1NlcmRlOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2Uge1xuICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICBoYXNVc2VXb3JrZmxvdzogYm9vbGVhbjtcbiAgaGFzVXNlU3RlcDogYm9vbGVhbjtcbiAgaGFzU2VyZGU6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNSZXNvbHZhYmxlUGFja2FnZVNwZWNpZmllcihzcGVjaWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4nKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzcGVjaWZpZXIuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzcGVjaWZpZXIuaW5jbHVkZXMoJyonKSB8fCBzcGVjaWZpZXIuaW5jbHVkZXMoJzonKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZTogc3RyaW5nKTogV29ya2Zsb3dQYXR0ZXJuTWF0Y2gge1xuICBjb25zdCBoYXNVc2VXb3JrZmxvdyA9IHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1VzZVN0ZXAgPSB1c2VTdGVwUGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlSW1wb3J0ID0gd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZVN5bWJvbCA9IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVDb21wdXRlZFByb3BlcnR5ID1cbiAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChzb3VyY2UpO1xuXG4gIHJldHVybiB7XG4gICAgaGFzVXNlV29ya2Zsb3csXG4gICAgaGFzVXNlU3RlcCxcbiAgICBoYXNTZXJkZTogaGFzU2VyZGVJbXBvcnQgfHwgaGFzU2VyZGVTeW1ib2wgfHwgaGFzU2VyZGVDb21wdXRlZFByb3BlcnR5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRJc3N1ZUxhYmVscyhkZXRlY3RlZDogRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKGRldGVjdGVkLmhhc1VzZVdvcmtmbG93KSB7XG4gICAgaXNzdWVzLnB1c2goJ1widXNlIHdvcmtmbG93XCIgZnVuY3Rpb25zJyk7XG4gIH1cbiAgaWYgKGRldGVjdGVkLmhhc1VzZVN0ZXApIHtcbiAgICBpc3N1ZXMucHVzaCgnXCJ1c2Ugc3RlcFwiIGZ1bmN0aW9ucycpO1xuICB9XG4gIGlmIChkZXRlY3RlZC5oYXNTZXJkZSkge1xuICAgIGlzc3Vlcy5wdXNoKCdzZXJpYWxpemF0aW9uIGNsYXNzZXMnKTtcbiAgfVxuICByZXR1cm4gaXNzdWVzO1xufVxuXG5mdW5jdGlvbiBoYXNXb3JrZmxvd1NlcmRlRGVwZW5kZW5jeShwYWNrYWdlSnNvbjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWlzUGxhaW5PYmplY3QocGFja2FnZUpzb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMpXG4gICAgPyBwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXNcbiAgICA6IHt9O1xuICBjb25zdCBwZWVyRGVwZW5kZW5jaWVzID0gaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzKVxuICAgID8gcGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llc1xuICAgIDoge307XG5cbiAgcmV0dXJuIChcbiAgICBPYmplY3QuaGFzT3duKGRlcGVuZGVuY2llcywgJ0B3b3JrZmxvdy9zZXJkZScpIHx8XG4gICAgT2JqZWN0Lmhhc093bihwZWVyRGVwZW5kZW5jaWVzLCAnQHdvcmtmbG93L3NlcmRlJylcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0U2VydmVyRXh0ZXJuYWxQYWNrYWdlKFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8RGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UgfCBudWxsPiB7XG4gIGlmICghaXNSZXNvbHZhYmxlUGFja2FnZVNwZWNpZmllcihwYWNrYWdlTmFtZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBoYXNVc2VXb3JrZmxvdyA9IGZhbHNlO1xuICBsZXQgaGFzVXNlU3RlcCA9IGZhbHNlO1xuICBsZXQgaGFzU2VyZGUgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShgJHtwYWNrYWdlTmFtZX0vcGFja2FnZS5qc29uYCwge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCBwYWNrYWdlSnNvblNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKHBhY2thZ2VKc29uU291cmNlKSBhcyB1bmtub3duO1xuICAgIGhhc1NlcmRlID0gaGFzV29ya2Zsb3dTZXJkZURlcGVuZGVuY3kocGFja2FnZUpzb24pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBvbmx5LiBDb250aW51ZSB0byBzb3VyY2Ugc2Nhbm5pbmcuXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IHJlcXVpcmUucmVzb2x2ZShwYWNrYWdlTmFtZSwge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZShlbnRyeVBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBhdHRlcm5zID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgIGhhc1VzZVdvcmtmbG93ID0gcGF0dGVybnMuaGFzVXNlV29ya2Zsb3c7XG4gICAgaGFzVXNlU3RlcCA9IHBhdHRlcm5zLmhhc1VzZVN0ZXA7XG4gICAgaGFzU2VyZGUgfHw9IHBhdHRlcm5zLmhhc1NlcmRlO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBvbmx5LiBVc2Ugd2hpY2hldmVyIHNpZ25hbCB3ZSBhbHJlYWR5IGhhdmUuXG4gIH1cblxuICBpZiAoIWhhc1VzZVdvcmtmbG93ICYmICFoYXNVc2VTdGVwICYmICFoYXNTZXJkZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYWNrYWdlTmFtZSxcbiAgICBoYXNVc2VXb3JrZmxvdyxcbiAgICBoYXNVc2VTdGVwLFxuICAgIGhhc1NlcmRlLFxuICB9O1xufVxuXG5mdW5jdGlvbiB3YXJuQWJvdXRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMoXG4gIGRldGVjdGVkUGFja2FnZXM6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlW11cbik6IHZvaWQge1xuICBjb25zdCBuZXdseURldGVjdGVkUGFja2FnZXMgPSBkZXRlY3RlZFBhY2thZ2VzLmZpbHRlcigoeyBwYWNrYWdlTmFtZSB9KSA9PiB7XG4gICAgcmV0dXJuICF3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKTtcbiAgfSk7XG5cbiAgaWYgKG5ld2x5RGV0ZWN0ZWRQYWNrYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IHsgcGFja2FnZU5hbWUgfSBvZiBuZXdseURldGVjdGVkUGFja2FnZXMpIHtcbiAgICB3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuYWRkKHBhY2thZ2VOYW1lKTtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VEZXNjcmlwdGlvbnMgPSBuZXdseURldGVjdGVkUGFja2FnZXNcbiAgICAubWFwKFxuICAgICAgKGRldGVjdGVkKSA9PlxuICAgICAgICBgXCIke2RldGVjdGVkLnBhY2thZ2VOYW1lfVwiICgke2dldElzc3VlTGFiZWxzKGRldGVjdGVkKS5qb2luKCcsICcpfSlgXG4gICAgKVxuICAgIC5qb2luKCcsICcpO1xuICBjb25zdCBwYWNrYWdlTmFtZXMgPSBuZXdseURldGVjdGVkUGFja2FnZXNcbiAgICAubWFwKChkZXRlY3RlZCkgPT4gYFwiJHtkZXRlY3RlZC5wYWNrYWdlTmFtZX1cImApXG4gICAgLmpvaW4oJywgJyk7XG5cbiAgY29uc29sZS53YXJuKFxuICAgIGBcXG7imqAgV29ya2Zsb3cgZm91bmQgd29ya2Zsb3cgY29kZSBpbiBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzOiAke3BhY2thZ2VEZXNjcmlwdGlvbnN9LmAgK1xuICAgICAgYFxcbiAgV29ya2Zsb3cgcmVtb3ZlZCB0aGUgYWZmZWN0ZWQgZW50cmllcyBmcm9tIHNlcnZlckV4dGVybmFsUGFja2FnZXMgZm9yIHRoaXMgYnVpbGQgYW5kIGlzIGNvbXBpbGluZyB0aGUgcGFja2FnZXMgYW55d2F5LmAgK1xuICAgICAgYFxcbiAgUmVtb3ZlICR7cGFja2FnZU5hbWVzfSBmcm9tIHNlcnZlckV4dGVybmFsUGFja2FnZXMgaW4gbmV4dC5jb25maWcgdG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcuXFxuYFxuICApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTmV4dFZlcnNpb24od29ya2luZ0Rpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZXJyb3JzOiB1bmtub3duW10gPSBbXTtcblxuICAvLyBUcnkgcmVzb2x2aW5nIGZyb20gdGhlIGNvbnN1bWluZyBwcm9qZWN0J3Mgd29ya2luZyBkaXJlY3RvcnkgZmlyc3QuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb25vcmVwbyBzZXR1cHMgd2hlcmUgYG5leHRgIG1heSBub3QgYmUgaG9pc3RlZCB0byB0aGVcbiAgLy8gc2FtZSBsb2NhdGlvbiBhcyBgQHdvcmtmbG93L25leHRgLlxuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnbmV4dC9wYWNrYWdlLmpzb24nLCB7XG4gICAgICBwYXRoczogW3dvcmtpbmdEaXJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc29sdmVkUGFja2FnZUpzb24gPSByZXF1aXJlKHBhY2thZ2VKc29uUGF0aCkgYXMge1xuICAgICAgdmVyc2lvbj86IHVua25vd247XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHJlc29sdmVkUGFja2FnZUpzb24udmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFBhY2thZ2VKc29uLnZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JzLnB1c2goZSk7XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gcmVzb2x2aW5nIHJlbGF0aXZlIHRvIHRoaXMgcGFja2FnZSdzIGxvY2F0aW9uLlxuICB0cnkge1xuICAgIGNvbnN0IHZlcnNpb24gPSAocmVxdWlyZSgnbmV4dC9wYWNrYWdlLmpzb24nKSBhcyB7IHZlcnNpb24/OiB1bmtub3duIH0pXG4gICAgICAudmVyc2lvbjtcbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvcnMucHVzaChlKTtcbiAgfVxuXG4gIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihcbiAgICBlcnJvcnMsXG4gICAgYENvdWxkIG5vdCByZXNvbHZlIE5leHQuanMgdmVyc2lvbi4gRW5zdXJlIFxcYG5leHRcXGAgaXMgaW5zdGFsbGVkIGluIHlvdXIgcHJvamVjdCAod29ya2luZyBkaXJlY3Rvcnk6ICR7d29ya2luZ0Rpcn0pLmBcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmlsZUV4aXN0cyhwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0cyA9IHN0YXRTeW5jKHBhdGgpO1xuICAgIHJldHVybiBzdGF0cy5pc0ZpbGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdvcmtmbG93TWFuaWZlc3RDb3B5UGF0aHMoe1xuICBwcm9qZWN0RGlyLFxuICBkaXN0RGlyLFxufToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiB7IG1hbmlmZXN0UGF0aDogc3RyaW5nOyBkaWFnbm9zdGljc01hbmlmZXN0UGF0aDogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICBjb25zdCBtYW5pZmVzdENhbmRpZGF0ZXMgPSBbXG4gICAgam9pbihwcm9qZWN0RGlyLCAnYXBwLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgICBqb2luKHByb2plY3REaXIsICdzcmMvYXBwLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgICBqb2luKHByb2plY3REaXIsICdwdWJsaWMvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicpLFxuICBdO1xuICBjb25zdCBtYW5pZmVzdFBhdGggPSBtYW5pZmVzdENhbmRpZGF0ZXMuZmluZChmaWxlRXhpc3RzKTtcblxuICBpZiAoIW1hbmlmZXN0UGF0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkRGlzdERpciA9IGlzQWJzb2x1dGUoZGlzdERpcilcbiAgICA/IGRpc3REaXJcbiAgICA6IGpvaW4ocHJvamVjdERpciwgZGlzdERpcik7XG4gIGNvbnN0IGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoID0gam9pbihcbiAgICByZXNvbHZlZERpc3REaXIsXG4gICAgJ2RpYWdub3N0aWNzJyxcbiAgICAnd29ya2Zsb3dzLW1hbmlmZXN0Lmpzb24nXG4gICk7XG4gIHJldHVybiB7IG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdChtZXRhZGF0YToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGF0aHMgPSBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKG1ldGFkYXRhKTtcbiAgaWYgKCFwYXRocykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgbWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCB9ID0gcGF0aHM7XG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUoZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgY29weUZpbGUobWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCk7XG59XG5cbmZ1bmN0aW9uIGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RTeW5jKG1ldGFkYXRhOiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IHZvaWQge1xuICBjb25zdCBwYXRocyA9IGdldFdvcmtmbG93TWFuaWZlc3RDb3B5UGF0aHMobWV0YWRhdGEpO1xuICBpZiAoIXBhdGhzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoIH0gPSBwYXRocztcbiAgbWtkaXJTeW5jKGRpcm5hbWUoZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29weUZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlcldvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdENvcHkobWV0YWRhdGE6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogdm9pZCB7XG4gIGNvbnN0IG1hcmtlciA9ICdfX3dvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdENvcGllcyc7XG4gIGNvbnN0IGdsb2JhbFdpdGhNYXJrZXIgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICAgIFttYXJrZXJdPzogQXJyYXk8eyBwcm9qZWN0RGlyOiBzdHJpbmc7IGRpc3REaXI6IHN0cmluZyB9PjtcbiAgfTtcblxuICBpZiAoIWdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSkge1xuICAgIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSA9IFtdO1xuICAgIHByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29weU1ldGFkYXRhIG9mIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSB8fCBbXSkge1xuICAgICAgICBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0U3luYyhjb3B5TWV0YWRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdLnB1c2gobWV0YWRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFdvcmtmbG93KFxuICBuZXh0Q29uZmlnT3JGbjpcbiAgICB8IE5leHRDb25maWdcbiAgICB8ICgoXG4gICAgICAgIHBoYXNlOiBzdHJpbmcsXG4gICAgICAgIGN0eDogeyBkZWZhdWx0Q29uZmlnOiBOZXh0Q29uZmlnIH1cbiAgICAgICkgPT4gUHJvbWlzZTxOZXh0Q29uZmlnPiksXG4gIHtcbiAgICB3b3JrZmxvd3MsXG4gIH06IHtcbiAgICB3b3JrZmxvd3M/OiB7XG4gICAgICBsb2NhbD86IHtcbiAgICAgICAgcG9ydD86IG51bWJlcjtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIENvbnRyb2xzIGhvdyBzb3VyY2UgbWFwcyBhcmUgZW1pdHRlZCBmb3Igd29ya2Zsb3cgYnVuZGxlcy4gQWNjZXB0c1xuICAgICAgICogdGhlIHNhbWUgdmFsdWVzIGFzIGVzYnVpbGQncyBgc291cmNlbWFwYCBvcHRpb246IGB0cnVlYC9gJ2lubGluZSdgXG4gICAgICAgKiAoZGVmYXVsdCksIGAnbGlua2VkJ2AsIGAnZXh0ZXJuYWwnYCwgYCdib3RoJ2AsIG9yIGBmYWxzZWAgdG8gb21pdFxuICAgICAgICogc291cmNlIG1hcHMuIENhbiBhbHNvIGJlIHNldCB2aWEgdGhlIGBXT1JLRkxPV19TT1VSQ0VNQVBgXG4gICAgICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICAgICAqL1xuICAgICAgc291cmNlbWFwPzogYm9vbGVhbiB8ICdpbmxpbmUnIHwgJ2xpbmtlZCcgfCAnZXh0ZXJuYWwnIHwgJ2JvdGgnO1xuICAgIH07XG4gIH0gPSB7fVxuKSB7XG4gIGlmICghcHJvY2Vzcy5lbnYuVkVSQ0VMX0RFUExPWU1FTlRfSUQpIHtcbiAgICBpZiAoIXByb2Nlc3MuZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCkge1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEID0gJ2xvY2FsJztcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX0RBVEFfRElSID0gJy5uZXh0L3dvcmtmbG93LWRhdGEnO1xuICAgIH1cbiAgICBjb25zdCBtYXliZVBvcnQgPSB3b3JrZmxvd3M/LmxvY2FsPy5wb3J0O1xuICAgIGlmIChtYXliZVBvcnQpIHtcbiAgICAgIHByb2Nlc3MuZW52LlBPUlQgPSBtYXliZVBvcnQudG9TdHJpbmcoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQpIHtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCA9ICd2ZXJjZWwnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBidWlsZENvbmZpZyhcbiAgICBwaGFzZTogc3RyaW5nLFxuICAgIGN0eDogeyBkZWZhdWx0Q29uZmlnOiBOZXh0Q29uZmlnIH1cbiAgKSB7XG4gICAgaWYgKFxuICAgICAgcGhhc2UgPT09ICdwaGFzZS1kZXZlbG9wbWVudC1zZXJ2ZXInIHx8XG4gICAgICBwaGFzZSA9PT0gJ3BoYXNlLXByb2R1Y3Rpb24tYnVpbGQnXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHByZXdhcm1Xb3JrZmxvd1N3Y1BsdWdpbkNhY2hlIH0gPSBhd2FpdCBpbXBvcnQoXG4gICAgICAgICcuL3N3Yy1wbHVnaW4tY2FjaGUuanMnXG4gICAgICApO1xuICAgICAgLy8gTG9hZGVyIHdvcmtlcnMgaW5oZXJpdCB0aGlzIGN3ZCBhbmQgcmVhZCBmcm9tIHRoZSBzYW1lIFNXQyBjYWNoZS5cbiAgICAgIHByZXdhcm1Xb3JrZmxvd1N3Y1BsdWdpbkNhY2hlKHByb2Nlc3MuY3dkKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlclBhdGggPSByZXF1aXJlLnJlc29sdmUoJy4vbG9hZGVyJyk7XG4gICAgbGV0IG5leHRDb25maWc6IE5leHRDb25maWc7XG5cbiAgICBpZiAodHlwZW9mIG5leHRDb25maWdPckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBuZXh0Q29uZmlnID0gYXdhaXQgbmV4dENvbmZpZ09yRm4ocGhhc2UsIGN0eCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRDb25maWcgPSBuZXh0Q29uZmlnT3JGbjtcbiAgICB9XG4gICAgLy8gc2hhbGxvdyBjbG9uZSB0byBhdm9pZCByZWFkLW9ubHkgb24gdG9wLWxldmVsXG4gICAgbmV4dENvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG5leHRDb25maWcpO1xuICAgIG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IFtcbiAgICAgIC4uLm5ldyBTZXQoW1xuICAgICAgICAuLi4obmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIHx8IFtdKSxcbiAgICAgICAgLy8gS2VlcCB0aGUgVmVyY2VsIHdvcmxkIGFuZCBpdHMgbmF0aXZlLXByb25lIGRlcGVuZGVuY2llcyBleHRlcm5hbCBzb1xuICAgICAgICAvLyBsb2NhbCBidWlsZHMgZG8gbm90IHRyeSB0byBwYXJzZSBAdmVyY2VsL3F1ZXVlJ3Mga2V5cmluZyBkZXBlbmRlbmN5XG4gICAgICAgIC8vIHRyZWUuXG4gICAgICAgIC4uLlZFUkNFTF9XT1JMRF9TRVJWRVJfRVhURVJOQUxfUEFDS0FHRVMsXG4gICAgICBdKSxcbiAgICBdO1xuICAgIGNvbnN0IGV4aXN0aW5nQ29tcGlsZXIgPSBuZXh0Q29uZmlnLmNvbXBpbGVyID8/IHt9O1xuICAgIGNvbnN0IGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZSA9IChcbiAgICAgIGV4aXN0aW5nQ29tcGlsZXIgYXMge1xuICAgICAgICBydW5BZnRlclByb2R1Y3Rpb25Db21waWxlPzogKG1ldGFkYXRhOiB7XG4gICAgICAgICAgcHJvamVjdERpcjogc3RyaW5nO1xuICAgICAgICAgIGRpc3REaXI6IHN0cmluZztcbiAgICAgICAgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICAgIH1cbiAgICApLnJ1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGU7XG5cbiAgICBjb25zdCBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IEFycmF5LmlzQXJyYXkoXG4gICAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXNcbiAgICApXG4gICAgICA/IG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlc1xuICAgICAgOiBbXTtcbiAgICBsZXQgZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IGNvbmZpZ3VyZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzO1xuXG4gICAgaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlczogRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBwYWNrYWdlTmFtZSBvZiBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcykge1xuICAgICAgICBpZiAoUFNFVURPX0VYVEVSTkFMX1BBQ0tBR0VTLmhhcyhwYWNrYWdlTmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGV0ZWN0ZWQgPSBhd2FpdCBkZXRlY3RTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UoXG4gICAgICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgICAgIHByb2Nlc3MuY3dkKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChkZXRlY3RlZCkge1xuICAgICAgICAgICAgZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzLnB1c2goZGV0ZWN0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gQmVzdC1lZmZvcnQgb25seS4gTmV2ZXIgYmxvY2sgY29uZmlnIGdlbmVyYXRpb24uXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRQYWNrYWdlcyA9IG5ldyBTZXQoXG4gICAgICAgICAgZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzLm1hcCgoZGV0ZWN0ZWQpID0+IGRldGVjdGVkLnBhY2thZ2VOYW1lKVxuICAgICAgICApO1xuICAgICAgICBlZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID1cbiAgICAgICAgICBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5maWx0ZXIoXG4gICAgICAgICAgICAocGFja2FnZU5hbWUpID0+ICFyZW1vdmVkUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKVxuICAgICAgICAgICk7XG4gICAgICAgIG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IGVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXM7XG4gICAgICAgIHdhcm5BYm91dEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyhkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgbG9hZGVyIGlmIHR1cmJvcGFjayBpcyBiZWluZyB1c2VkXG4gICAgaWYgKCFuZXh0Q29uZmlnLnR1cmJvcGFjaykge1xuICAgICAgbmV4dENvbmZpZy50dXJib3BhY2sgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlcykge1xuICAgICAgbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXMgPSB7fTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmdSdWxlcyA9IG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzIGFzIGFueTtcbiAgICBjb25zdCB3b3JraW5nRGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBuZXh0VmVyc2lvbiA9IHJlc29sdmVOZXh0VmVyc2lvbih3b3JraW5nRGlyKTtcbiAgICBjb25zdCBjb25maWd1cmVkUHJvamVjdFJvb3QgPVxuICAgICAgbmV4dENvbmZpZy5vdXRwdXRGaWxlVHJhY2luZ1Jvb3QgPz8gbmV4dENvbmZpZy50dXJib3BhY2s/LnJvb3Q7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBjb25maWd1cmVkUHJvamVjdFJvb3RcbiAgICAgID8gcmVzb2x2ZUNvbmZpZ3VyZWRQcm9qZWN0Um9vdCh3b3JraW5nRGlyLCBjb25maWd1cmVkUHJvamVjdFJvb3QpXG4gICAgICA6IHJlc29sdmVQcm9qZWN0Um9vdCh3b3JraW5nRGlyKTtcbiAgICBjb25zdCBzdXBwb3J0c1R1cmJvQ29uZGl0aW9uID0gc2VtdmVyLmd0ZShuZXh0VmVyc2lvbiwgJ3YxNi4wLjAnKTtcblxuICAgIGNvbnN0IHNob3VsZFdhdGNoID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCc7XG4gICAgbGV0IHdvcmtmbG93QnVpbGRlclByb21pc2U6IFByb21pc2U8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkaXN0RGlyID0gbmV4dENvbmZpZy5kaXN0RGlyIHx8ICcubmV4dCc7XG5cbiAgICBuZXh0Q29uZmlnLmNvbXBpbGVyID0ge1xuICAgICAgLi4uZXhpc3RpbmdDb21waWxlcixcbiAgICAgIHJ1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGU6IGFzeW5jIChtZXRhZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKSB7XG4gICAgICAgICAgYXdhaXQgZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKG1ldGFkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0KG1ldGFkYXRhKTtcbiAgICAgICAgcmVnaXN0ZXJXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3B5KG1ldGFkYXRhKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGdldFdvcmtmbG93QnVpbGRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghd29ya2Zsb3dCdWlsZGVyUHJvbWlzZSkge1xuICAgICAgICB3b3JrZmxvd0J1aWxkZXJQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBOZXh0QnVpbGRlciA9IGF3YWl0IGdldE5leHRCdWlsZGVyKG5leHRWZXJzaW9uKTtcbiAgICAgICAgICByZXR1cm4gbmV3IE5leHRCdWlsZGVyKHtcbiAgICAgICAgICAgIHdhdGNoOiBzaG91bGRXYXRjaCxcbiAgICAgICAgICAgIC8vIGdldElucHV0RmlsZXMgZmlsdGVycyB0aGUgcHJvamVjdCB0byBOZXh0LmpzIGVudHJ5cG9pbnRzXG4gICAgICAgICAgICBkaXJzOiBbJy4nXSxcbiAgICAgICAgICAgIHBhZ2VFeHRlbnNpb25zOiBuZXh0Q29uZmlnLnBhZ2VFeHRlbnNpb25zID8/IFtcbiAgICAgICAgICAgICAgJ3RzeCcsXG4gICAgICAgICAgICAgICd0cycsXG4gICAgICAgICAgICAgICdqc3gnLFxuICAgICAgICAgICAgICAnanMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHByb2plY3RSb290LFxuICAgICAgICAgICAgbW9kdWxlU3BlY2lmaWVyUm9vdDogd29ya2luZ0RpcixcbiAgICAgICAgICAgIHdvcmtpbmdEaXIsXG4gICAgICAgICAgICBkaXN0RGlyLFxuICAgICAgICAgICAgZGlhZ25vc3RpY3NEaXI6IGAke2Rpc3REaXJ9L2RpYWdub3N0aWNzYCxcbiAgICAgICAgICAgIGJ1aWxkVGFyZ2V0OiAnbmV4dCcsXG4gICAgICAgICAgICB3b3JrZmxvd3NCdW5kbGVQYXRoOiAnJywgLy8gbm90IHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgc3RlcHNCdW5kbGVQYXRoOiAnJywgLy8gbm90IHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgd2ViaG9va0J1bmRsZVBhdGg6ICcnLCAvLyBub2RlIHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgc291cmNlbWFwOiB3b3JrZmxvd3M/LnNvdXJjZW1hcCxcbiAgICAgICAgICAgIGV4dGVybmFsUGFja2FnZXM6IFtcbiAgICAgICAgICAgICAgLy8gc2VydmVyLW9ubHkgYW5kIGNsaWVudC1vbmx5IGFyZSBwc2V1ZG8tcGFja2FnZXMgaGFuZGxlZCBieSBOZXh0LmpzXG4gICAgICAgICAgICAgIC8vIGR1cmluZyBpdHMgYnVpbGQgcHJvY2Vzcy4gV2UgbWFyayB0aGVtIGFzIGV4dGVybmFsIHRvIHByZXZlbnQgZXNidWlsZFxuICAgICAgICAgICAgICAvLyBmcm9tIGZhaWxpbmcgd2hlbiBidW5kbGluZyBjb2RlIHRoYXQgaW1wb3J0cyB0aGVtLlxuICAgICAgICAgICAgICAvLyBTZWU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9nZXR0aW5nLXN0YXJ0ZWQvc2VydmVyLWFuZC1jbGllbnQtY29tcG9uZW50c1xuICAgICAgICAgICAgICAnc2VydmVyLW9ubHknLFxuICAgICAgICAgICAgICAnY2xpZW50LW9ubHknLFxuICAgICAgICAgICAgICAuLi5lZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtmbG93QnVpbGRlclByb21pc2U7XG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIFtcbiAgICAgICcqLnRzeCcsXG4gICAgICAnKi50cycsXG4gICAgICAnKi5qc3gnLFxuICAgICAgJyouanMnLFxuICAgICAgJyoubWpzJyxcbiAgICAgICcqLm10cycsXG4gICAgICAnKi5janMnLFxuICAgICAgJyouY3RzJyxcbiAgICBdKSB7XG4gICAgICBuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlc1trZXldID0ge1xuICAgICAgICAuLi4oc3VwcG9ydHNUdXJib0NvbmRpdGlvblxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25kaXRpb246IHtcbiAgICAgICAgICAgICAgICAvLyBVc2UgJ2FsbCcgdG8gY29tYmluZTogbXVzdCBtYXRjaCBjb250ZW50IEFORCBtdXN0IE5PVCBiZSBpbiBnZW5lcmF0ZWQgcGF0aFxuICAgICAgICAgICAgICAgIC8vIE1lcmdlIHdpdGggYW55IGV4aXN0aW5nICdhbGwnIGNvbmRpdGlvbnMgZnJvbSB1c2VyIGNvbmZpZ1xuICAgICAgICAgICAgICAgIGFsbDogW1xuICAgICAgICAgICAgICAgICAgLi4uKGV4aXN0aW5nUnVsZXNba2V5XT8uY29uZGl0aW9uPy5hbGwgfHwgW10pLFxuICAgICAgICAgICAgICAgICAgLy8gRXhjbHVkZSBnZW5lcmF0ZWQgd29ya2Zsb3cgcm91dGUgZmlsZXMgZnJvbSB0cmFuc2Zvcm1hdGlvblxuICAgICAgICAgICAgICAgICAgeyBub3Q6IHsgcGF0aDogL1svXFxcXF1cXC53ZWxsLWtub3duWy9cXFxcXXdvcmtmbG93Wy9cXFxcXS8gfSB9LFxuICAgICAgICAgICAgICAgICAgLy8gTWF0Y2ggZmlsZXMgd2l0aCB3b3JrZmxvdyBkaXJlY3RpdmVzIG9yIGN1c3RvbSBzZXJpYWxpemF0aW9uIHBhdHRlcm5zXG4gICAgICAgICAgICAgICAgICAvLyBVc2VzIGJhY2tyZWZlcmVuY2VzIChcXDIsIFxcMykgdG8gZW5zdXJlIG1hdGNoaW5nIHF1b3RlIHR5cGVzXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6XG4gICAgICAgICAgICAgICAgICAgICAgLyh1c2Ugd29ya2Zsb3d8dXNlIHN0ZXB8ZnJvbVxccysoWydcIl0pQHdvcmtmbG93XFwvc2VyZGVcXDJ8U3ltYm9sXFwuZm9yXFxzKlxcKFxccyooWydcIl0pd29ya2Zsb3ctKD86c2VyaWFsaXplfGRlc2VyaWFsaXplKVxcM1xccypcXCkpLyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgbG9hZGVyczogWy4uLihleGlzdGluZ1J1bGVzW2tleV0/LmxvYWRlcnMgfHwgW10pLCBsb2FkZXJQYXRoXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gY29uZmlndXJlIHRoZSBsb2FkZXIgZm9yIHdlYnBhY2tcbiAgICBjb25zdCBleGlzdGluZ1dlYnBhY2tNb2RpZnkgPSBuZXh0Q29uZmlnLndlYnBhY2s7XG4gICAgbmV4dENvbmZpZy53ZWJwYWNrID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IFt3ZWJwYWNrQ29uZmlnXSA9IGFyZ3M7XG4gICAgICBpZiAoIXdlYnBhY2tDb25maWcubW9kdWxlKSB7XG4gICAgICAgIHdlYnBhY2tDb25maWcubW9kdWxlID0ge307XG4gICAgICB9XG4gICAgICBpZiAoIXdlYnBhY2tDb25maWcubW9kdWxlLnJ1bGVzKSB7XG4gICAgICAgIHdlYnBhY2tDb25maWcubW9kdWxlLnJ1bGVzID0gW107XG4gICAgICB9XG4gICAgICAvLyBsb2FkZXJzIGluIHdlYnBhY2sgYXBwbHkgYm90dG9tLT51cCBzbyBlbnN1cmVcbiAgICAgIC8vIG91cnMgY29tZXMgYmVmb3JlIHRoZSBkZWZhdWx0IHN3YyB0cmFuc2Zvcm1cbiAgICAgIHdlYnBhY2tDb25maWcubW9kdWxlLnJ1bGVzLnB1c2goe1xuICAgICAgICB0ZXN0OiAvLipcXC4obWpzfGNqc3xjdHN8dHN8dHN4fGpzfGpzeCkkLyxcbiAgICAgICAgbG9hZGVyOiBsb2FkZXJQYXRoLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBleGlzdGluZ1dlYnBhY2tNb2RpZnlcbiAgICAgICAgPyAoZXhpc3RpbmdXZWJwYWNrTW9kaWZ5KC4uLmFyZ3MpID8/IHdlYnBhY2tDb25maWcpXG4gICAgICAgIDogd2VicGFja0NvbmZpZztcbiAgICB9O1xuICAgIC8vIG9ubHkgcnVuIHRoaXMgaW4gdGhlIG1haW4gcHJvY2VzcyBzbyBpdCBvbmx5IHJ1bnMgb25jZVxuICAgIC8vIGFzIE5leHQuanMgdXNlcyBjaGlsZCBwcm9jZXNzZXMgZm9yIGRpZmZlcmVudCBidWlsZHNcbiAgICBpZiAoXG4gICAgICAhcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTkVYVF9QUklWQVRFX0JVSUxUICYmXG4gICAgICBwaGFzZSAhPT0gJ3BoYXNlLXByb2R1Y3Rpb24tc2VydmVyJ1xuICAgICkge1xuICAgICAgY29uc3Qgd29ya2Zsb3dCdWlsZGVyID0gYXdhaXQgZ2V0V29ya2Zsb3dCdWlsZGVyKCk7XG5cbiAgICAgIGF3YWl0IHdvcmtmbG93QnVpbGRlci5idWlsZCgpO1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTkVYVF9QUklWQVRFX0JVSUxUID0gJzEnO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q29uZmlnO1xuICB9O1xufVxuIl19
|
|
520
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErVUEsb0NBdVRDO0FBdG9CRCxxQ0FBNEQ7QUFDNUQsK0NBQTZEO0FBQzdELHlDQUFzRDtBQUN0RCxpREFPNEI7QUFFNUIsb0RBQTRCO0FBQzVCLDZDQUE4QztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDO0FBQ3RELE1BQU0sZ0NBQWdDLEdBQUc7SUFDdkMsZUFBZTtJQUNmLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsa0JBQWtCO0NBQ25CLENBQUM7QUFDRixNQUFNLHFDQUFxQyxHQUFHO0lBQzVDLG9CQUFvQjtJQUNwQixHQUFHLGdDQUFnQztDQUNwQyxDQUFDO0FBQ0YsTUFBTSxrQ0FBa0MsR0FBRztJQUN6QyxVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLGNBQWM7Q0FDZixDQUFDO0FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUM3RCxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQztBQUNyRCxNQUFNLDBCQUEwQixHQUFHLGlDQUFpQyxDQUFDO0FBQ3JFLE1BQU0sMEJBQTBCLEdBQzlCLG9FQUFvRSxDQUFDO0FBQ3ZFLE1BQU0sb0NBQW9DLEdBQ3hDLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN6RSxNQUFNLHVDQUF1QyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFDbEUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDL0QsTUFBTSxZQUFZLEdBQUcsVUFDZSxDQUFDO0FBRXJD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LHVDQUE0Qjt3QkFDbEMsS0FBSyxFQUFFLCtCQUErQjtxQkFDdkM7aUJBQ0YsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRztvQkFDNUIsR0FBRyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7b0JBQ3hCLENBQUMsdUNBQTRCLENBQUMsRUFBRSwrQkFBK0I7aUJBQ2hFLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQyxDQUFDO1FBQ0YseURBQXlEO1FBQ3pELHVEQUF1RDtRQUN2RCxJQUNFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkI7WUFDeEMsS0FBSyxLQUFLLHlCQUF5QixFQUNuQyxDQUFDO1lBQ0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO1lBRW5ELE1BQU0sZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxDQUFDO1FBQ2hELENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29weUZpbGVTeW5jLCBta2RpclN5bmMsIHN0YXRTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjb3B5RmlsZSwgbWtkaXIsIHJlYWRGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7XG4gIGVuc3VyZVdvcmtmbG93VGFyZ2V0V29ybGRFbnYsXG4gIGlzV29ya2Zsb3dUYXJnZXRXb3JsZFBhdGgsXG4gIHJlc29sdmVDb25maWd1cmVkUHJvamVjdFJvb3QsXG4gIHJlc29sdmVQcm9qZWN0Um9vdCxcbiAgcmVzb2x2ZVdvcmtmbG93VGFyZ2V0V29ybGRBbGlhcyxcbiAgV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSxcbn0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCB0eXBlIHsgTmV4dENvbmZpZyB9IGZyb20gJ25leHQnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgZ2V0TmV4dEJ1aWxkZXIgfSBmcm9tICcuL2J1aWxkZXIuanMnO1xuXG5jb25zdCBWRVJDRUxfV09STERfUEFDS0FHRSA9ICdAd29ya2Zsb3cvd29ybGQtdmVyY2VsJztcbmNvbnN0IFZFUkNFTF9XT1JMRF9ERVBFTkRFTkNZX1BBQ0tBR0VTID0gW1xuICAnQHZlcmNlbC9xdWV1ZScsXG4gICdAdmVyY2VsL29pZGMnLFxuICAnQHZlcmNlbC9jbGktYXV0aCcsXG4gICdAbmFwaS1ycy9rZXlyaW5nJyxcbl07XG5jb25zdCBWRVJDRUxfV09STERfU0VSVkVSX0VYVEVSTkFMX1BBQ0tBR0VTID0gW1xuICBWRVJDRUxfV09STERfUEFDS0FHRSxcbiAgLi4uVkVSQ0VMX1dPUkxEX0RFUEVOREVOQ1lfUEFDS0FHRVMsXG5dO1xuY29uc3QgV09SS0ZMT1dfU0VSVkVSX1RSQU5TUElMRV9QQUNLQUdFUyA9IFtcbiAgJ3dvcmtmbG93JyxcbiAgJ0B3b3JrZmxvdy9jb3JlJyxcbiAgJ0B3b3JrZmxvdy9zZXJkZScsXG4gICdAd29ya2Zsb3cvZXJyb3JzJyxcbiAgJ0B3b3JrZmxvdy91dGlscycsXG4gICdAd29ya2Zsb3cvYWknLFxuXTtcbmNvbnN0IHVzZVdvcmtmbG93UGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugd29ya2Zsb3dcXDE7P1xccyokL207XG5jb25zdCB1c2VTdGVwUGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugc3RlcFxcMTs/XFxzKiQvbTtcbmNvbnN0IHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuID0gL2Zyb21cXHMrKFsnXCJdKUB3b3JrZmxvd1xcL3NlcmRlXFwxLztcbmNvbnN0IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuID1cbiAgL1N5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDFcXHMqXFwpLztcbmNvbnN0IHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybiA9XG4gIC9cXFtcXHMqV09SS0ZMT1dfKD86U0VSSUFMSVpFfERFU0VSSUFMSVpFKVxccypcXF0vO1xuXG5jb25zdCBQU0VVRE9fRVhURVJOQUxfUEFDS0FHRVMgPSBuZXcgU2V0KFsnc2VydmVyLW9ubHknLCAnY2xpZW50LW9ubHknXSk7XG5jb25zdCB3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmNvbnN0IEJBU0VfUEFUSF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAd29ya2Zsb3cvY29yZS9iYXNlUGF0aCcpO1xuY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmXG4gIFJlY29yZDxzeW1ib2wsIHN0cmluZyB8IHVuZGVmaW5lZD47XG5cbi8vIEtlZXAgdGhpcyBsb2NhbDogQHdvcmtmbG93L25leHQgaXMgQ29tbW9uSlMsIHdoaWxlIEB3b3JrZmxvdy91dGlscyBpcyBFU00tb25seS5cbmZ1bmN0aW9uIHNldFdvcmtmbG93QmFzZVBhdGgoYmFzZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBnbG9iYWxDb25maWdbQkFTRV9QQVRIX1NZTUJPTF0gPSBiYXNlUGF0aCA/PyAnJztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UGF0dGVybk1hdGNoIHtcbiAgaGFzVXNlV29ya2Zsb3c6IGJvb2xlYW47XG4gIGhhc1VzZVN0ZXA6IGJvb2xlYW47XG4gIGhhc1NlcmRlOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2Uge1xuICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICBoYXNVc2VXb3JrZmxvdzogYm9vbGVhbjtcbiAgaGFzVXNlU3RlcDogYm9vbGVhbjtcbiAgaGFzU2VyZGU6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNSZXNvbHZhYmxlUGFja2FnZVNwZWNpZmllcihzcGVjaWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4nKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzcGVjaWZpZXIuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzcGVjaWZpZXIuaW5jbHVkZXMoJyonKSB8fCBzcGVjaWZpZXIuaW5jbHVkZXMoJzonKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZTogc3RyaW5nKTogV29ya2Zsb3dQYXR0ZXJuTWF0Y2gge1xuICBjb25zdCBoYXNVc2VXb3JrZmxvdyA9IHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1VzZVN0ZXAgPSB1c2VTdGVwUGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlSW1wb3J0ID0gd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZVN5bWJvbCA9IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVDb21wdXRlZFByb3BlcnR5ID1cbiAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChzb3VyY2UpO1xuXG4gIHJldHVybiB7XG4gICAgaGFzVXNlV29ya2Zsb3csXG4gICAgaGFzVXNlU3RlcCxcbiAgICBoYXNTZXJkZTogaGFzU2VyZGVJbXBvcnQgfHwgaGFzU2VyZGVTeW1ib2wgfHwgaGFzU2VyZGVDb21wdXRlZFByb3BlcnR5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRJc3N1ZUxhYmVscyhkZXRlY3RlZDogRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKGRldGVjdGVkLmhhc1VzZVdvcmtmbG93KSB7XG4gICAgaXNzdWVzLnB1c2goJ1widXNlIHdvcmtmbG93XCIgZnVuY3Rpb25zJyk7XG4gIH1cbiAgaWYgKGRldGVjdGVkLmhhc1VzZVN0ZXApIHtcbiAgICBpc3N1ZXMucHVzaCgnXCJ1c2Ugc3RlcFwiIGZ1bmN0aW9ucycpO1xuICB9XG4gIGlmIChkZXRlY3RlZC5oYXNTZXJkZSkge1xuICAgIGlzc3Vlcy5wdXNoKCdzZXJpYWxpemF0aW9uIGNsYXNzZXMnKTtcbiAgfVxuICByZXR1cm4gaXNzdWVzO1xufVxuXG5mdW5jdGlvbiBoYXNXb3JrZmxvd1NlcmRlRGVwZW5kZW5jeShwYWNrYWdlSnNvbjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWlzUGxhaW5PYmplY3QocGFja2FnZUpzb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMpXG4gICAgPyBwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXNcbiAgICA6IHt9O1xuICBjb25zdCBwZWVyRGVwZW5kZW5jaWVzID0gaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzKVxuICAgID8gcGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llc1xuICAgIDoge307XG5cbiAgcmV0dXJuIChcbiAgICBPYmplY3QuaGFzT3duKGRlcGVuZGVuY2llcywgJ0B3b3JrZmxvdy9zZXJkZScpIHx8XG4gICAgT2JqZWN0Lmhhc093bihwZWVyRGVwZW5kZW5jaWVzLCAnQHdvcmtmbG93L3NlcmRlJylcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0U2VydmVyRXh0ZXJuYWxQYWNrYWdlKFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8RGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UgfCBudWxsPiB7XG4gIGlmICghaXNSZXNvbHZhYmxlUGFja2FnZVNwZWNpZmllcihwYWNrYWdlTmFtZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBoYXNVc2VXb3JrZmxvdyA9IGZhbHNlO1xuICBsZXQgaGFzVXNlU3RlcCA9IGZhbHNlO1xuICBsZXQgaGFzU2VyZGUgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShgJHtwYWNrYWdlTmFtZX0vcGFja2FnZS5qc29uYCwge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCBwYWNrYWdlSnNvblNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKHBhY2thZ2VKc29uU291cmNlKSBhcyB1bmtub3duO1xuICAgIGhhc1NlcmRlID0gaGFzV29ya2Zsb3dTZXJkZURlcGVuZGVuY3kocGFja2FnZUpzb24pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBvbmx5LiBDb250aW51ZSB0byBzb3VyY2Ugc2Nhbm5pbmcuXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IHJlcXVpcmUucmVzb2x2ZShwYWNrYWdlTmFtZSwge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZShlbnRyeVBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBhdHRlcm5zID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgIGhhc1VzZVdvcmtmbG93ID0gcGF0dGVybnMuaGFzVXNlV29ya2Zsb3c7XG4gICAgaGFzVXNlU3RlcCA9IHBhdHRlcm5zLmhhc1VzZVN0ZXA7XG4gICAgaGFzU2VyZGUgfHw9IHBhdHRlcm5zLmhhc1NlcmRlO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBvbmx5LiBVc2Ugd2hpY2hldmVyIHNpZ25hbCB3ZSBhbHJlYWR5IGhhdmUuXG4gIH1cblxuICBpZiAoIWhhc1VzZVdvcmtmbG93ICYmICFoYXNVc2VTdGVwICYmICFoYXNTZXJkZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYWNrYWdlTmFtZSxcbiAgICBoYXNVc2VXb3JrZmxvdyxcbiAgICBoYXNVc2VTdGVwLFxuICAgIGhhc1NlcmRlLFxuICB9O1xufVxuXG5mdW5jdGlvbiB3YXJuQWJvdXRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMoXG4gIGRldGVjdGVkUGFja2FnZXM6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlW11cbik6IHZvaWQge1xuICBjb25zdCBuZXdseURldGVjdGVkUGFja2FnZXMgPSBkZXRlY3RlZFBhY2thZ2VzLmZpbHRlcigoeyBwYWNrYWdlTmFtZSB9KSA9PiB7XG4gICAgcmV0dXJuICF3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKTtcbiAgfSk7XG5cbiAgaWYgKG5ld2x5RGV0ZWN0ZWRQYWNrYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IHsgcGFja2FnZU5hbWUgfSBvZiBuZXdseURldGVjdGVkUGFja2FnZXMpIHtcbiAgICB3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuYWRkKHBhY2thZ2VOYW1lKTtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VEZXNjcmlwdGlvbnMgPSBuZXdseURldGVjdGVkUGFja2FnZXNcbiAgICAubWFwKFxuICAgICAgKGRldGVjdGVkKSA9PlxuICAgICAgICBgXCIke2RldGVjdGVkLnBhY2thZ2VOYW1lfVwiICgke2dldElzc3VlTGFiZWxzKGRldGVjdGVkKS5qb2luKCcsICcpfSlgXG4gICAgKVxuICAgIC5qb2luKCcsICcpO1xuICBjb25zdCBwYWNrYWdlTmFtZXMgPSBuZXdseURldGVjdGVkUGFja2FnZXNcbiAgICAubWFwKChkZXRlY3RlZCkgPT4gYFwiJHtkZXRlY3RlZC5wYWNrYWdlTmFtZX1cImApXG4gICAgLmpvaW4oJywgJyk7XG5cbiAgY29uc29sZS53YXJuKFxuICAgIGBcXG7imqAgV29ya2Zsb3cgZm91bmQgd29ya2Zsb3cgY29kZSBpbiBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzOiAke3BhY2thZ2VEZXNjcmlwdGlvbnN9LmAgK1xuICAgICAgYFxcbiAgV29ya2Zsb3cgcmVtb3ZlZCB0aGUgYWZmZWN0ZWQgZW50cmllcyBmcm9tIHNlcnZlckV4dGVybmFsUGFja2FnZXMgZm9yIHRoaXMgYnVpbGQgYW5kIGlzIGNvbXBpbGluZyB0aGUgcGFja2FnZXMgYW55d2F5LmAgK1xuICAgICAgYFxcbiAgUmVtb3ZlICR7cGFja2FnZU5hbWVzfSBmcm9tIHNlcnZlckV4dGVybmFsUGFja2FnZXMgaW4gbmV4dC5jb25maWcgdG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcuXFxuYFxuICApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTmV4dFZlcnNpb24od29ya2luZ0Rpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZXJyb3JzOiB1bmtub3duW10gPSBbXTtcblxuICAvLyBUcnkgcmVzb2x2aW5nIGZyb20gdGhlIGNvbnN1bWluZyBwcm9qZWN0J3Mgd29ya2luZyBkaXJlY3RvcnkgZmlyc3QuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb25vcmVwbyBzZXR1cHMgd2hlcmUgYG5leHRgIG1heSBub3QgYmUgaG9pc3RlZCB0byB0aGVcbiAgLy8gc2FtZSBsb2NhdGlvbiBhcyBgQHdvcmtmbG93L25leHRgLlxuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnbmV4dC9wYWNrYWdlLmpzb24nLCB7XG4gICAgICBwYXRoczogW3dvcmtpbmdEaXJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc29sdmVkUGFja2FnZUpzb24gPSByZXF1aXJlKHBhY2thZ2VKc29uUGF0aCkgYXMge1xuICAgICAgdmVyc2lvbj86IHVua25vd247XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHJlc29sdmVkUGFja2FnZUpzb24udmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFBhY2thZ2VKc29uLnZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JzLnB1c2goZSk7XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gcmVzb2x2aW5nIHJlbGF0aXZlIHRvIHRoaXMgcGFja2FnZSdzIGxvY2F0aW9uLlxuICB0cnkge1xuICAgIGNvbnN0IHZlcnNpb24gPSAocmVxdWlyZSgnbmV4dC9wYWNrYWdlLmpzb24nKSBhcyB7IHZlcnNpb24/OiB1bmtub3duIH0pXG4gICAgICAudmVyc2lvbjtcbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvcnMucHVzaChlKTtcbiAgfVxuXG4gIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihcbiAgICBlcnJvcnMsXG4gICAgYENvdWxkIG5vdCByZXNvbHZlIE5leHQuanMgdmVyc2lvbi4gRW5zdXJlIFxcYG5leHRcXGAgaXMgaW5zdGFsbGVkIGluIHlvdXIgcHJvamVjdCAod29ya2luZyBkaXJlY3Rvcnk6ICR7d29ya2luZ0Rpcn0pLmBcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmlsZUV4aXN0cyhwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0cyA9IHN0YXRTeW5jKHBhdGgpO1xuICAgIHJldHVybiBzdGF0cy5pc0ZpbGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdvcmtmbG93TWFuaWZlc3RDb3B5UGF0aHMoe1xuICBwcm9qZWN0RGlyLFxuICBkaXN0RGlyLFxufToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiB7IG1hbmlmZXN0UGF0aDogc3RyaW5nOyBkaWFnbm9zdGljc01hbmlmZXN0UGF0aDogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICBjb25zdCBtYW5pZmVzdENhbmRpZGF0ZXMgPSBbXG4gICAgam9pbihwcm9qZWN0RGlyLCAnYXBwLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgICBqb2luKHByb2plY3REaXIsICdzcmMvYXBwLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgICBqb2luKHByb2plY3REaXIsICdwdWJsaWMvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicpLFxuICBdO1xuICBjb25zdCBtYW5pZmVzdFBhdGggPSBtYW5pZmVzdENhbmRpZGF0ZXMuZmluZChmaWxlRXhpc3RzKTtcblxuICBpZiAoIW1hbmlmZXN0UGF0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkRGlzdERpciA9IGlzQWJzb2x1dGUoZGlzdERpcilcbiAgICA/IGRpc3REaXJcbiAgICA6IGpvaW4ocHJvamVjdERpciwgZGlzdERpcik7XG4gIGNvbnN0IGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoID0gam9pbihcbiAgICByZXNvbHZlZERpc3REaXIsXG4gICAgJ2RpYWdub3N0aWNzJyxcbiAgICAnd29ya2Zsb3dzLW1hbmlmZXN0Lmpzb24nXG4gICk7XG4gIHJldHVybiB7IG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdChtZXRhZGF0YToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGF0aHMgPSBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKG1ldGFkYXRhKTtcbiAgaWYgKCFwYXRocykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgbWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCB9ID0gcGF0aHM7XG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUoZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgY29weUZpbGUobWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCk7XG59XG5cbmZ1bmN0aW9uIGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RTeW5jKG1ldGFkYXRhOiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IHZvaWQge1xuICBjb25zdCBwYXRocyA9IGdldFdvcmtmbG93TWFuaWZlc3RDb3B5UGF0aHMobWV0YWRhdGEpO1xuICBpZiAoIXBhdGhzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoIH0gPSBwYXRocztcbiAgbWtkaXJTeW5jKGRpcm5hbWUoZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29weUZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlcldvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdENvcHkobWV0YWRhdGE6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogdm9pZCB7XG4gIGNvbnN0IG1hcmtlciA9ICdfX3dvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdENvcGllcyc7XG4gIGNvbnN0IGdsb2JhbFdpdGhNYXJrZXIgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICAgIFttYXJrZXJdPzogQXJyYXk8eyBwcm9qZWN0RGlyOiBzdHJpbmc7IGRpc3REaXI6IHN0cmluZyB9PjtcbiAgfTtcblxuICBpZiAoIWdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSkge1xuICAgIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSA9IFtdO1xuICAgIHByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29weU1ldGFkYXRhIG9mIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSB8fCBbXSkge1xuICAgICAgICBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0U3luYyhjb3B5TWV0YWRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdLnB1c2gobWV0YWRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFdvcmtmbG93KFxuICBuZXh0Q29uZmlnT3JGbjpcbiAgICB8IE5leHRDb25maWdcbiAgICB8ICgoXG4gICAgICAgIHBoYXNlOiBzdHJpbmcsXG4gICAgICAgIGN0eDogeyBkZWZhdWx0Q29uZmlnOiBOZXh0Q29uZmlnIH1cbiAgICAgICkgPT4gUHJvbWlzZTxOZXh0Q29uZmlnPiksXG4gIHtcbiAgICB3b3JrZmxvd3MsXG4gIH06IHtcbiAgICB3b3JrZmxvd3M/OiB7XG4gICAgICBsb2NhbD86IHtcbiAgICAgICAgcG9ydD86IG51bWJlcjtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIENvbnRyb2xzIGhvdyBzb3VyY2UgbWFwcyBhcmUgZW1pdHRlZCBmb3Igd29ya2Zsb3cgYnVuZGxlcy4gQWNjZXB0c1xuICAgICAgICogdGhlIHNhbWUgdmFsdWVzIGFzIGVzYnVpbGQncyBgc291cmNlbWFwYCBvcHRpb246IGB0cnVlYC9gJ2lubGluZSdgXG4gICAgICAgKiAoZGVmYXVsdCksIGAnbGlua2VkJ2AsIGAnZXh0ZXJuYWwnYCwgYCdib3RoJ2AsIG9yIGBmYWxzZWAgdG8gb21pdFxuICAgICAgICogc291cmNlIG1hcHMuIENhbiBhbHNvIGJlIHNldCB2aWEgdGhlIGBXT1JLRkxPV19TT1VSQ0VNQVBgXG4gICAgICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICAgICAqL1xuICAgICAgc291cmNlbWFwPzogYm9vbGVhbiB8ICdpbmxpbmUnIHwgJ2xpbmtlZCcgfCAnZXh0ZXJuYWwnIHwgJ2JvdGgnO1xuICAgIH07XG4gIH0gPSB7fVxuKSB7XG4gIGNvbnN0IHdvcmtmbG93VGFyZ2V0V29ybGQgPSBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52KCk7XG4gIGlmICh3b3JrZmxvd1RhcmdldFdvcmxkID09PSAnQHdvcmtmbG93L3dvcmxkLWxvY2FsJykge1xuICAgIHByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX0RBVEFfRElSID8/PSAnLm5leHQvd29ya2Zsb3ctZGF0YSc7XG4gIH1cblxuICBpZiAoIXByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgY29uc3QgbWF5YmVQb3J0ID0gd29ya2Zsb3dzPy5sb2NhbD8ucG9ydDtcbiAgICBpZiAobWF5YmVQb3J0KSB7XG4gICAgICBwcm9jZXNzLmVudi5QT1JUID0gbWF5YmVQb3J0LnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ29uZmlnKFxuICAgIHBoYXNlOiBzdHJpbmcsXG4gICAgY3R4OiB7IGRlZmF1bHRDb25maWc6IE5leHRDb25maWcgfVxuICApIHtcbiAgICBpZiAoXG4gICAgICBwaGFzZSA9PT0gJ3BoYXNlLWRldmVsb3BtZW50LXNlcnZlcicgfHxcbiAgICAgIHBoYXNlID09PSAncGhhc2UtcHJvZHVjdGlvbi1idWlsZCdcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcHJld2FybVdvcmtmbG93U3djUGx1Z2luQ2FjaGUgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICAgJy4vc3djLXBsdWdpbi1jYWNoZS5qcydcbiAgICAgICk7XG4gICAgICAvLyBMb2FkZXIgd29ya2VycyBpbmhlcml0IHRoaXMgY3dkIGFuZCByZWFkIGZyb20gdGhlIHNhbWUgU1dDIGNhY2hlLlxuICAgICAgcHJld2FybVdvcmtmbG93U3djUGx1Z2luQ2FjaGUocHJvY2Vzcy5jd2QoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9hZGVyUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnLi9sb2FkZXInKTtcbiAgICBsZXQgbmV4dENvbmZpZzogTmV4dENvbmZpZztcblxuICAgIGlmICh0eXBlb2YgbmV4dENvbmZpZ09yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG5leHRDb25maWcgPSBhd2FpdCBuZXh0Q29uZmlnT3JGbihwaGFzZSwgY3R4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dENvbmZpZyA9IG5leHRDb25maWdPckZuO1xuICAgIH1cbiAgICAvLyBzaGFsbG93IGNsb25lIHRvIGF2b2lkIHJlYWQtb25seSBvbiB0b3AtbGV2ZWxcbiAgICBuZXh0Q29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgbmV4dENvbmZpZyk7XG4gICAgY29uc3Qgd29ya2Zsb3dCYXNlUGF0aCA9IG5leHRDb25maWcuYmFzZVBhdGg7XG4gICAgc2V0V29ya2Zsb3dCYXNlUGF0aCh3b3JrZmxvd0Jhc2VQYXRoKTtcbiAgICBuZXh0Q29uZmlnLmVudiA9IHtcbiAgICAgIC4uLm5leHRDb25maWcuZW52LFxuICAgICAgV09SS0ZMT1dfVEFSR0VUX1dPUkxEOiB3b3JrZmxvd1RhcmdldFdvcmxkLFxuICAgIH07XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgd29ya2Zsb3dUYXJnZXRXb3JsZFdlYnBhY2tBbGlhcyA9IHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkQWxpYXMoe1xuICAgICAgd29ya2luZ0RpcixcbiAgICAgIHRhcmdldFdvcmxkOiB3b3JrZmxvd1RhcmdldFdvcmxkLFxuICAgIH0pO1xuICAgIGNvbnN0IHdvcmtmbG93VGFyZ2V0V29ybGRJc1BhdGggPVxuICAgICAgaXNXb3JrZmxvd1RhcmdldFdvcmxkUGF0aCh3b3JrZmxvd1RhcmdldFdvcmxkKTtcbiAgICBjb25zdCB3b3JrZmxvd1RhcmdldFdvcmxkVHJhbnNwaWxlUGFja2FnZXMgPVxuICAgICAgd29ya2Zsb3dUYXJnZXRXb3JsZCA9PT0gVkVSQ0VMX1dPUkxEX1BBQ0tBR0UgfHwgd29ya2Zsb3dUYXJnZXRXb3JsZElzUGF0aFxuICAgICAgICA/IFtdXG4gICAgICAgIDogW3dvcmtmbG93VGFyZ2V0V29ybGRdO1xuICAgIG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IFtcbiAgICAgIC4uLm5ldyBTZXQoW1xuICAgICAgICAuLi4obmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIHx8IFtdKSxcbiAgICAgICAgLy8gS2VlcCB0aGUgVmVyY2VsIHdvcmxkIGFuZCBpdHMgbmF0aXZlLXByb25lIGRlcGVuZGVuY2llcyBleHRlcm5hbCBzb1xuICAgICAgICAvLyBsb2NhbCBidWlsZHMgZG8gbm90IHRyeSB0byBwYXJzZSBAdmVyY2VsL3F1ZXVlJ3Mga2V5cmluZyBkZXBlbmRlbmN5XG4gICAgICAgIC8vIHRyZWUuXG4gICAgICAgIC4uLlZFUkNFTF9XT1JMRF9TRVJWRVJfRVhURVJOQUxfUEFDS0FHRVMsXG4gICAgICBdKSxcbiAgICBdO1xuICAgIG5leHRDb25maWcudHJhbnNwaWxlUGFja2FnZXMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFtcbiAgICAgICAgLi4uKG5leHRDb25maWcudHJhbnNwaWxlUGFja2FnZXMgfHwgW10pLFxuICAgICAgICAuLi5XT1JLRkxPV19TRVJWRVJfVFJBTlNQSUxFX1BBQ0tBR0VTLFxuICAgICAgICAuLi53b3JrZmxvd1RhcmdldFdvcmxkVHJhbnNwaWxlUGFja2FnZXMsXG4gICAgICBdKSxcbiAgICBdO1xuICAgIGNvbnN0IGV4aXN0aW5nQ29tcGlsZXIgPSBuZXh0Q29uZmlnLmNvbXBpbGVyID8/IHt9O1xuICAgIGNvbnN0IGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZSA9IChcbiAgICAgIGV4aXN0aW5nQ29tcGlsZXIgYXMge1xuICAgICAgICBydW5BZnRlclByb2R1Y3Rpb25Db21waWxlPzogKG1ldGFkYXRhOiB7XG4gICAgICAgICAgcHJvamVjdERpcjogc3RyaW5nO1xuICAgICAgICAgIGRpc3REaXI6IHN0cmluZztcbiAgICAgICAgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICAgIH1cbiAgICApLnJ1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGU7XG5cbiAgICBjb25zdCBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IEFycmF5LmlzQXJyYXkoXG4gICAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXNcbiAgICApXG4gICAgICA/IG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlc1xuICAgICAgOiBbXTtcbiAgICBsZXQgZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IGNvbmZpZ3VyZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzO1xuXG4gICAgaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlczogRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBwYWNrYWdlTmFtZSBvZiBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcykge1xuICAgICAgICBpZiAoUFNFVURPX0VYVEVSTkFMX1BBQ0tBR0VTLmhhcyhwYWNrYWdlTmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGV0ZWN0ZWQgPSBhd2FpdCBkZXRlY3RTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UoXG4gICAgICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgICAgIHByb2Nlc3MuY3dkKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChkZXRlY3RlZCkge1xuICAgICAgICAgICAgZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzLnB1c2goZGV0ZWN0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gQmVzdC1lZmZvcnQgb25seS4gTmV2ZXIgYmxvY2sgY29uZmlnIGdlbmVyYXRpb24uXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRQYWNrYWdlcyA9IG5ldyBTZXQoXG4gICAgICAgICAgZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzLm1hcCgoZGV0ZWN0ZWQpID0+IGRldGVjdGVkLnBhY2thZ2VOYW1lKVxuICAgICAgICApO1xuICAgICAgICBlZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID1cbiAgICAgICAgICBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5maWx0ZXIoXG4gICAgICAgICAgICAocGFja2FnZU5hbWUpID0+ICFyZW1vdmVkUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKVxuICAgICAgICAgICk7XG4gICAgICAgIG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IGVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXM7XG4gICAgICAgIHdhcm5BYm91dEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyhkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgbG9hZGVyIGlmIHR1cmJvcGFjayBpcyBiZWluZyB1c2VkXG4gICAgaWYgKCFuZXh0Q29uZmlnLnR1cmJvcGFjaykge1xuICAgICAgbmV4dENvbmZpZy50dXJib3BhY2sgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlcykge1xuICAgICAgbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXMgPSB7fTtcbiAgICB9XG4gICAgbmV4dENvbmZpZy50dXJib3BhY2sucmVzb2x2ZUFsaWFzID0ge1xuICAgICAgLi4uKChuZXh0Q29uZmlnLnR1cmJvcGFjay5yZXNvbHZlQWxpYXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHx8IHt9KSxcbiAgICAgIFtXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFXTogd29ya2Zsb3dUYXJnZXRXb3JsZElzUGF0aFxuICAgICAgICA/IHdvcmtmbG93VGFyZ2V0V29ybGRXZWJwYWNrQWxpYXNcbiAgICAgICAgOiB3b3JrZmxvd1RhcmdldFdvcmxkLFxuICAgIH07XG4gICAgY29uc3QgZXhpc3RpbmdSdWxlcyA9IG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzIGFzIGFueTtcbiAgICBjb25zdCBuZXh0VmVyc2lvbiA9IHJlc29sdmVOZXh0VmVyc2lvbih3b3JraW5nRGlyKTtcbiAgICBjb25zdCBjb25maWd1cmVkUHJvamVjdFJvb3QgPVxuICAgICAgbmV4dENvbmZpZy5vdXRwdXRGaWxlVHJhY2luZ1Jvb3QgPz8gbmV4dENvbmZpZy50dXJib3BhY2s/LnJvb3Q7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBjb25maWd1cmVkUHJvamVjdFJvb3RcbiAgICAgID8gcmVzb2x2ZUNvbmZpZ3VyZWRQcm9qZWN0Um9vdCh3b3JraW5nRGlyLCBjb25maWd1cmVkUHJvamVjdFJvb3QpXG4gICAgICA6IHJlc29sdmVQcm9qZWN0Um9vdCh3b3JraW5nRGlyKTtcbiAgICBjb25zdCBzdXBwb3J0c1R1cmJvQ29uZGl0aW9uID0gc2VtdmVyLmd0ZShuZXh0VmVyc2lvbiwgJ3YxNi4wLjAnKTtcblxuICAgIGNvbnN0IHNob3VsZFdhdGNoID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCc7XG4gICAgbGV0IHdvcmtmbG93QnVpbGRlclByb21pc2U6IFByb21pc2U8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkaXN0RGlyID0gbmV4dENvbmZpZy5kaXN0RGlyIHx8ICcubmV4dCc7XG5cbiAgICBuZXh0Q29uZmlnLmNvbXBpbGVyID0ge1xuICAgICAgLi4uZXhpc3RpbmdDb21waWxlcixcbiAgICAgIHJ1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGU6IGFzeW5jIChtZXRhZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKSB7XG4gICAgICAgICAgYXdhaXQgZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKG1ldGFkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0KG1ldGFkYXRhKTtcbiAgICAgICAgcmVnaXN0ZXJXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3B5KG1ldGFkYXRhKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGdldFdvcmtmbG93QnVpbGRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghd29ya2Zsb3dCdWlsZGVyUHJvbWlzZSkge1xuICAgICAgICB3b3JrZmxvd0J1aWxkZXJQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBOZXh0QnVpbGRlciA9IGF3YWl0IGdldE5leHRCdWlsZGVyKG5leHRWZXJzaW9uKTtcbiAgICAgICAgICByZXR1cm4gbmV3IE5leHRCdWlsZGVyKHtcbiAgICAgICAgICAgIHdhdGNoOiBzaG91bGRXYXRjaCxcbiAgICAgICAgICAgIC8vIGdldElucHV0RmlsZXMgZmlsdGVycyB0aGUgcHJvamVjdCB0byBOZXh0LmpzIGVudHJ5cG9pbnRzXG4gICAgICAgICAgICBkaXJzOiBbJy4nXSxcbiAgICAgICAgICAgIHBhZ2VFeHRlbnNpb25zOiBuZXh0Q29uZmlnLnBhZ2VFeHRlbnNpb25zID8/IFtcbiAgICAgICAgICAgICAgJ3RzeCcsXG4gICAgICAgICAgICAgICd0cycsXG4gICAgICAgICAgICAgICdqc3gnLFxuICAgICAgICAgICAgICAnanMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHByb2plY3RSb290LFxuICAgICAgICAgICAgbW9kdWxlU3BlY2lmaWVyUm9vdDogd29ya2luZ0RpcixcbiAgICAgICAgICAgIHdvcmtpbmdEaXIsXG4gICAgICAgICAgICBkaXN0RGlyLFxuICAgICAgICAgICAgYmFzZVBhdGg6IHdvcmtmbG93QmFzZVBhdGgsXG4gICAgICAgICAgICBkaWFnbm9zdGljc0RpcjogYCR7ZGlzdERpcn0vZGlhZ25vc3RpY3NgLFxuICAgICAgICAgICAgYnVpbGRUYXJnZXQ6ICduZXh0JyxcbiAgICAgICAgICAgIHdvcmtmbG93c0J1bmRsZVBhdGg6ICcnLCAvLyBub3QgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICBzdGVwc0J1bmRsZVBhdGg6ICcnLCAvLyBub3QgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICB3ZWJob29rQnVuZGxlUGF0aDogJycsIC8vIG5vZGUgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICBzb3VyY2VtYXA6IHdvcmtmbG93cz8uc291cmNlbWFwLFxuICAgICAgICAgICAgZXh0ZXJuYWxQYWNrYWdlczogW1xuICAgICAgICAgICAgICAvLyBzZXJ2ZXItb25seSBhbmQgY2xpZW50LW9ubHkgYXJlIHBzZXVkby1wYWNrYWdlcyBoYW5kbGVkIGJ5IE5leHQuanNcbiAgICAgICAgICAgICAgLy8gZHVyaW5nIGl0cyBidWlsZCBwcm9jZXNzLiBXZSBtYXJrIHRoZW0gYXMgZXh0ZXJuYWwgdG8gcHJldmVudCBlc2J1aWxkXG4gICAgICAgICAgICAgIC8vIGZyb20gZmFpbGluZyB3aGVuIGJ1bmRsaW5nIGNvZGUgdGhhdCBpbXBvcnRzIHRoZW0uXG4gICAgICAgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2dldHRpbmctc3RhcnRlZC9zZXJ2ZXItYW5kLWNsaWVudC1jb21wb25lbnRzXG4gICAgICAgICAgICAgICdzZXJ2ZXItb25seScsXG4gICAgICAgICAgICAgICdjbGllbnQtb25seScsXG4gICAgICAgICAgICAgIC4uLmVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29ya2Zsb3dCdWlsZGVyUHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgW1xuICAgICAgJyoudHN4JyxcbiAgICAgICcqLnRzJyxcbiAgICAgICcqLmpzeCcsXG4gICAgICAnKi5qcycsXG4gICAgICAnKi5tanMnLFxuICAgICAgJyoubXRzJyxcbiAgICAgICcqLmNqcycsXG4gICAgICAnKi5jdHMnLFxuICAgIF0pIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzW2tleV0gPSB7XG4gICAgICAgIC4uLihzdXBwb3J0c1R1cmJvQ29uZGl0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbjoge1xuICAgICAgICAgICAgICAgIC8vIFVzZSAnYWxsJyB0byBjb21iaW5lOiBtdXN0IG1hdGNoIGNvbnRlbnQgQU5EIG11c3QgTk9UIGJlIGluIGdlbmVyYXRlZCBwYXRoXG4gICAgICAgICAgICAgICAgLy8gTWVyZ2Ugd2l0aCBhbnkgZXhpc3RpbmcgJ2FsbCcgY29uZGl0aW9ucyBmcm9tIHVzZXIgY29uZmlnXG4gICAgICAgICAgICAgICAgYWxsOiBbXG4gICAgICAgICAgICAgICAgICAuLi4oZXhpc3RpbmdSdWxlc1trZXldPy5jb25kaXRpb24/LmFsbCB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAvLyBFeGNsdWRlIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyBmcm9tIHRyYW5zZm9ybWF0aW9uXG4gICAgICAgICAgICAgICAgICB7IG5vdDogeyBwYXRoOiAvWy9cXFxcXVxcLndlbGwta25vd25bL1xcXFxdd29ya2Zsb3dbL1xcXFxdLyB9IH0sXG4gICAgICAgICAgICAgICAgICAvLyBNYXRjaCBmaWxlcyB3aXRoIHdvcmtmbG93IGRpcmVjdGl2ZXMgb3IgY3VzdG9tIHNlcmlhbGl6YXRpb24gcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgIC8vIFVzZXMgYmFja3JlZmVyZW5jZXMgKFxcMiwgXFwzKSB0byBlbnN1cmUgbWF0Y2hpbmcgcXVvdGUgdHlwZXNcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgICAgICAgICAgICAvKHVzZSB3b3JrZmxvd3x1c2Ugc3RlcHxAd29ya2Zsb3dcXC9jb3JlXFwvcnVudGltZVxcL3dvcmxkLXRhcmdldHxmcm9tXFxzKyhbJ1wiXSlAd29ya2Zsb3dcXC9zZXJkZVxcMnxTeW1ib2xcXC5mb3JcXHMqXFwoXFxzKihbJ1wiXSl3b3JrZmxvdy0oPzpzZXJpYWxpemV8ZGVzZXJpYWxpemUpXFwzXFxzKlxcKSkvLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICBsb2FkZXJzOiBbLi4uKGV4aXN0aW5nUnVsZXNba2V5XT8ubG9hZGVycyB8fCBbXSksIGxvYWRlclBhdGhdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBmb3Igd2VicGFja1xuICAgIGNvbnN0IGV4aXN0aW5nV2VicGFja01vZGlmeSA9IG5leHRDb25maWcud2VicGFjaztcbiAgICBuZXh0Q29uZmlnLndlYnBhY2sgPSAoLi4uYXJncykgPT4ge1xuICAgICAgbGV0IFt3ZWJwYWNrQ29uZmlnXSA9IGFyZ3M7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gZXhpc3RpbmdXZWJwYWNrTW9kaWZ5XG4gICAgICAgID8gKGV4aXN0aW5nV2VicGFja01vZGlmeSguLi5hcmdzKSA/PyB3ZWJwYWNrQ29uZmlnKVxuICAgICAgICA6IHdlYnBhY2tDb25maWc7XG5cbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMgPSBbXTtcbiAgICAgIH1cbiAgICAgIC8vIGxvYWRlcnMgaW4gd2VicGFjayBhcHBseSBib3R0b20tPnVwIHNvIGVuc3VyZVxuICAgICAgLy8gb3VycyBjb21lcyBiZWZvcmUgdGhlIGRlZmF1bHQgc3djIHRyYW5zZm9ybVxuICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMucHVzaCh7XG4gICAgICAgIHRlc3Q6IC8uKlxcLihtanN8Y2pzfGN0c3x0c3x0c3h8anN8anN4KSQvLFxuICAgICAgICBsb2FkZXI6IGxvYWRlclBhdGgsXG4gICAgICB9KTtcblxuICAgICAgd2VicGFja0NvbmZpZy5yZXNvbHZlIHx8PSB7fTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQWxpYXMgPSB3ZWJwYWNrQ29uZmlnLnJlc29sdmUuYWxpYXM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZ0FsaWFzKSkge1xuICAgICAgICB3ZWJwYWNrQ29uZmlnLnJlc29sdmUuYWxpYXMgPSBbXG4gICAgICAgICAgLi4uZXhpc3RpbmdBbGlhcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFLFxuICAgICAgICAgICAgYWxpYXM6IHdvcmtmbG93VGFyZ2V0V29ybGRXZWJwYWNrQWxpYXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdlYnBhY2tDb25maWcucmVzb2x2ZS5hbGlhcyA9IHtcbiAgICAgICAgICAuLi4oZXhpc3RpbmdBbGlhcyB8fCB7fSksXG4gICAgICAgICAgW1dPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEVdOiB3b3JrZmxvd1RhcmdldFdvcmxkV2VicGFja0FsaWFzLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2VicGFja0NvbmZpZztcbiAgICB9O1xuICAgIC8vIG9ubHkgcnVuIHRoaXMgaW4gdGhlIG1haW4gcHJvY2VzcyBzbyBpdCBvbmx5IHJ1bnMgb25jZVxuICAgIC8vIGFzIE5leHQuanMgdXNlcyBjaGlsZCBwcm9jZXNzZXMgZm9yIGRpZmZlcmVudCBidWlsZHNcbiAgICBpZiAoXG4gICAgICAhcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTkVYVF9QUklWQVRFX0JVSUxUICYmXG4gICAgICBwaGFzZSAhPT0gJ3BoYXNlLXByb2R1Y3Rpb24tc2VydmVyJ1xuICAgICkge1xuICAgICAgY29uc3Qgd29ya2Zsb3dCdWlsZGVyID0gYXdhaXQgZ2V0V29ya2Zsb3dCdWlsZGVyKCk7XG5cbiAgICAgIGF3YWl0IHdvcmtmbG93QnVpbGRlci5idWlsZCgpO1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTkVYVF9QUklWQVRFX0JVSUxUID0gJzEnO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q29uZmlnO1xuICB9O1xufVxuIl19
|
package/dist/loader.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export declare function injectWorkflowTargetWorldImport(source: string, buildersModule?: Pick<typeof import('@workflow/builders'), 'ensureWorkflowTargetWorldEnv' | 'WORKFLOW_WORLD_TARGET_MODULE'>): Promise<string>;
|
|
1
2
|
export declare function getLoaderSourceMapOptions(filename: string, sourceMap: any): {
|
|
2
3
|
inputSourceMap: any;
|
|
3
4
|
sourceMaps: boolean;
|
|
@@ -9,6 +10,6 @@ type WorkflowLoaderContext = {
|
|
|
9
10
|
addDependency?: (dependency: string) => void;
|
|
10
11
|
addBuildDependency?: (dependency: string) => void;
|
|
11
12
|
};
|
|
12
|
-
export default function workflowLoader(this: WorkflowLoaderContext, source: string | Buffer, sourceMap: any): string | Promise<string> |
|
|
13
|
+
export default function workflowLoader(this: WorkflowLoaderContext, source: string | Buffer, sourceMap: any): string | Promise<string> | undefined;
|
|
13
14
|
export {};
|
|
14
15
|
//# sourceMappingURL=loader.d.ts.map
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAmJA,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,IAAI,CACnB,cAAc,oBAAoB,CAAC,EACnC,8BAA8B,GAAG,8BAA8B,CAChE,GACA,OAAO,CAAC,MAAM,CAAC,CAejB;AAqED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;;;;EAOzE;AAKD,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CACZ,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,KACZ,IAAI,CAAC;IACV,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,GAAG,GACb,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,SAAS,CAgGtC"}
|
package/dist/loader.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.injectWorkflowTargetWorldImport = injectWorkflowTargetWorldImport;
|
|
3
4
|
exports.getLoaderSourceMapOptions = getLoaderSourceMapOptions;
|
|
4
5
|
exports.default = workflowLoader;
|
|
5
6
|
const node_fs_1 = require("node:fs");
|
|
@@ -92,6 +93,26 @@ async function resolveWorkflowAliasPath(filePath, workingDir) {
|
|
|
92
93
|
const { resolveWorkflowAliasRelativePath } = await getBuildersModule();
|
|
93
94
|
return resolveWorkflowAliasRelativePath(filePath, workingDir);
|
|
94
95
|
}
|
|
96
|
+
async function injectWorkflowTargetWorldImport(source, buildersModule) {
|
|
97
|
+
const targetModule = buildersModule?.WORKFLOW_WORLD_TARGET_MODULE ??
|
|
98
|
+
'@workflow/core/runtime/world-target';
|
|
99
|
+
if (!source.includes(targetModule)) {
|
|
100
|
+
return source;
|
|
101
|
+
}
|
|
102
|
+
const { ensureWorkflowTargetWorldEnv, WORKFLOW_WORLD_TARGET_MODULE } = buildersModule ?? (await getBuildersModule());
|
|
103
|
+
return source.replaceAll(WORKFLOW_WORLD_TARGET_MODULE, ensureWorkflowTargetWorldEnv());
|
|
104
|
+
}
|
|
105
|
+
function parseTransformMap(resultMap, fallbackMap) {
|
|
106
|
+
if (typeof resultMap !== 'string') {
|
|
107
|
+
return resultMap || fallbackMap;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
return JSON.parse(resultMap);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return resultMap;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
95
116
|
async function getRelativeFilenameForSwc(filename, workingDir) {
|
|
96
117
|
const normalizedWorkingDir = workingDir
|
|
97
118
|
.replace(/\\/g, '/')
|
|
@@ -150,17 +171,17 @@ function workflowLoader(source, sourceMap) {
|
|
|
150
171
|
const normalizedSource = source.toString();
|
|
151
172
|
const workingDir = process.cwd();
|
|
152
173
|
const swcPluginPath = registerTransformDependencies(this);
|
|
153
|
-
const sourceForTransform = normalizedSource;
|
|
174
|
+
const sourceForTransform = await injectWorkflowTargetWorldImport(normalizedSource);
|
|
154
175
|
const isGeneratedWorkflowFile = await checkGeneratedFile(filename);
|
|
155
176
|
// Skip generated workflow route files to avoid re-processing them.
|
|
156
177
|
if (isGeneratedWorkflowFile) {
|
|
157
|
-
return { code:
|
|
178
|
+
return { code: sourceForTransform, map: sourceMap };
|
|
158
179
|
}
|
|
159
180
|
// Detect workflow patterns in the source code.
|
|
160
181
|
const patterns = await detectPatterns(sourceForTransform);
|
|
161
182
|
// Check if file needs transformation based on patterns and path
|
|
162
183
|
if (!(await checkShouldTransform(filename, patterns))) {
|
|
163
|
-
return { code:
|
|
184
|
+
return { code: sourceForTransform, map: sourceMap };
|
|
164
185
|
}
|
|
165
186
|
const isTypeScript = filename.endsWith('.ts') ||
|
|
166
187
|
filename.endsWith('.tsx') ||
|
|
@@ -210,18 +231,7 @@ function workflowLoader(source, sourceMap) {
|
|
|
210
231
|
minify: false,
|
|
211
232
|
...getLoaderSourceMapOptions(filename, sourceMap),
|
|
212
233
|
});
|
|
213
|
-
|
|
214
|
-
if (typeof result.map === 'string') {
|
|
215
|
-
try {
|
|
216
|
-
transformedMap = JSON.parse(result.map);
|
|
217
|
-
}
|
|
218
|
-
catch {
|
|
219
|
-
transformedMap = result.map;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
else if (result.map) {
|
|
223
|
-
transformedMap = result.map;
|
|
224
|
-
}
|
|
234
|
+
const transformedMap = parseTransformMap(result.map, sourceMap);
|
|
225
235
|
return { code: result.code, map: transformedMap };
|
|
226
236
|
};
|
|
227
237
|
if (!callback) {
|
|
@@ -233,4 +243,4 @@ function workflowLoader(source, sourceMap) {
|
|
|
233
243
|
callback(error instanceof Error ? error : new Error(String(error)));
|
|
234
244
|
});
|
|
235
245
|
}
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTBNQSw4REFPQztBQWdCRCxpQ0E0R0M7QUE3VUQscUNBQXFDO0FBQ3JDLHlDQUFvRDtBQUNwRCxvQ0FBc0M7QUFNdEMseUZBQXlGO0FBQ3pGLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBR2xDLENBQUM7QUFDSix5R0FBeUc7QUFDekcsSUFBSSxvQkFBb0IsR0FBK0MsSUFBSSxDQUFDO0FBSzVFLElBQUksOEJBQThCLEdBQW9DLElBQUksQ0FBQztBQUUzRSxTQUFTLHNCQUFzQixDQUM3QixhQUFvQyxFQUNwQyxjQUFzQjtJQUV0QixhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQWtCLEVBQUUsY0FBc0I7SUFDN0QsSUFBSSxJQUFBLG9CQUFVLEVBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUMvQixLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUywrQkFBK0I7SUFDdEMsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO1FBQ25DLE9BQU8sOEJBQThCLENBQUM7SUFDeEMsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM5RCxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQzVDLHNDQUFzQyxDQUN2QyxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFbkUsK0RBQStEO0lBQy9ELG9FQUFvRTtJQUNwRSxNQUFNLHdCQUF3QixH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QUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsS0FBSyxHQUFHLEVBQUU7U0FDUCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekQsS0FBSyxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDeEIsUUFBUSxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tICdAc3djL2NvcmUnO1xuXG50eXBlIERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aCA9XG4gIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJykuRGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoO1xudHlwZSBXb3JrZmxvd1BhdHRlcm5NYXRjaCA9IGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJykuV29ya2Zsb3dQYXR0ZXJuTWF0Y2g7XG5cbi8vIENhY2hlIGRlY29yYXRvciBvcHRpb25zIHBlciB3b3JraW5nIGRpcmVjdG9yeSB0byBhdm9pZCByZWFkaW5nIHRzY29uZmlnIGZvciBldmVyeSBmaWxlXG5jb25zdCBkZWNvcmF0b3JPcHRpb25zQ2FjaGUgPSBuZXcgTWFwPFxuICBzdHJpbmcsXG4gIFByb21pc2U8RGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoPlxuPigpO1xuLy8gQ2FjaGUgZm9yIHNoYXJlZCB1dGlsaXRpZXMgZnJvbSBAd29ya2Zsb3cvYnVpbGRlcnMgKEVTTSBtb2R1bGUgbG9hZGVkIGR5bmFtaWNhbGx5IGluIENvbW1vbkpTIGNvbnRleHQpXG5sZXQgY2FjaGVkQnVpbGRlcnNNb2R1bGU6IHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpIHwgbnVsbCA9IG51bGw7XG50eXBlIExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyA9IHtcbiAgc3djUGx1Z2luUGF0aDogc3RyaW5nO1xuICBmaWxlczogc3RyaW5nW107XG59O1xubGV0IGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llczogTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRmlsZURlcGVuZGVuY3koXG4gIGxvYWRlckNvbnRleHQ6IFdvcmtmbG93TG9hZGVyQ29udGV4dCxcbiAgZGVwZW5kZW5jeVBhdGg6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGxvYWRlckNvbnRleHQuYWRkRGVwZW5kZW5jeT8uKGRlcGVuZGVuY3lQYXRoKTtcbiAgbG9hZGVyQ29udGV4dC5hZGRCdWlsZERlcGVuZGVuY3k/LihkZXBlbmRlbmN5UGF0aCk7XG59XG5cbmZ1bmN0aW9uIGFkZElmRXhpc3RzKGZpbGVzOiBTZXQ8c3RyaW5nPiwgZGVwZW5kZW5jeVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZXhpc3RzU3luYyhkZXBlbmRlbmN5UGF0aCkpIHtcbiAgICBmaWxlcy5hZGQoZGVwZW5kZW5jeVBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMoKTogTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzIHtcbiAgaWYgKGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llcykge1xuICAgIHJldHVybiBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM7XG4gIH1cblxuICBjb25zdCBzd2NQbHVnaW5QYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdAd29ya2Zsb3cvc3djLXBsdWdpbicpO1xuICBjb25zdCBzd2NQbHVnaW5CdWlsZEhhc2hQYXRoID0gcmVxdWlyZS5yZXNvbHZlKFxuICAgICdAd29ya2Zsb3cvc3djLXBsdWdpbi9idWlsZC1oYXNoLmpzb24nXG4gICk7XG4gIGNvbnN0IHdvcmtmbG93QnVpbGRlcnNQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdAd29ya2Zsb3cvYnVpbGRlcnMnKTtcblxuICAvLyBEZXJpdmUgcGFja2FnZS5qc29uIHBhdGhzIGZyb20gcmVzb2x2ZWQgZW50cnlwb2ludHMgdG8gYXZvaWRcbiAgLy8gVHVyYm9wYWNrIGxvYWRlci1ldmFsIGZhaWx1cmVzIGFyb3VuZCAuLi9wYWNrYWdlLmpzb24gcmVzb2x1dGlvbi5cbiAgY29uc3Qgc3djUGx1Z2luUGFja2FnZUpzb25QYXRoID0gam9pbihkaXJuYW1lKHN3Y1BsdWdpblBhdGgpLCAncGFja2FnZS5qc29uJyk7XG4gIGNvbnN0IHdvcmtmbG93QnVpbGRlcnNQYWNrYWdlSnNvblBhdGggPSBqb2luKFxuICAgIGRpcm5hbWUod29ya2Zsb3dCdWlsZGVyc1BhdGgpLFxuICAgICcuLi9wYWNrYWdlLmpzb24nXG4gICk7XG5cbiAgY29uc3QgZmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAgIF9fZmlsZW5hbWUsXG4gICAgc3djUGx1Z2luUGF0aCxcbiAgICBzd2NQbHVnaW5CdWlsZEhhc2hQYXRoLFxuICAgIHdvcmtmbG93QnVpbGRlcnNQYXRoLFxuICBdKTtcbiAgYWRkSWZFeGlzdHMoZmlsZXMsIHN3Y1BsdWdpblBhY2thZ2VKc29uUGF0aCk7XG4gIGFkZElmRXhpc3RzKGZpbGVzLCB3b3JrZmxvd0J1aWxkZXJzUGFja2FnZUpzb25QYXRoKTtcblxuICBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMgPSB7XG4gICAgc3djUGx1Z2luUGF0aCxcbiAgICBmaWxlczogQXJyYXkuZnJvbShmaWxlcyksXG4gIH07XG4gIHJldHVybiBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzKFxuICBsb2FkZXJDb250ZXh0OiBXb3JrZmxvd0xvYWRlckNvbnRleHRcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0YXRpY0RlcGVuZGVuY2llcyA9IHJlc29sdmVMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMoKTtcbiAgZm9yIChjb25zdCBkZXBlbmRlbmN5UGF0aCBvZiBzdGF0aWNEZXBlbmRlbmNpZXMuZmlsZXMpIHtcbiAgICByZWdpc3RlckZpbGVEZXBlbmRlbmN5KGxvYWRlckNvbnRleHQsIGRlcGVuZGVuY3lQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0aWNEZXBlbmRlbmNpZXMuc3djUGx1Z2luUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QnVpbGRlcnNNb2R1bGUoKTogUHJvbWlzZTxcbiAgdHlwZW9mIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJylcbj4ge1xuICBpZiAoY2FjaGVkQnVpbGRlcnNNb2R1bGUpIHtcbiAgICByZXR1cm4gY2FjaGVkQnVpbGRlcnNNb2R1bGU7XG4gIH1cbiAgLy8gRHluYW1pYyBpbXBvcnQgdG8gaGFuZGxlIEVTTSBtb2R1bGUgZnJvbSBDb21tb25KUyBjb250ZXh0XG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3NlY3VyaXR5L25vR2xvYmFsRXZhbDogTmVlZCB0byB1c2UgZXZhbCBoZXJlIHRvIGF2b2lkIFR5cGVTY3JpcHQgZnJvbSB0cmFuc3BpbGluZyB0aGUgaW1wb3J0IHN0YXRlbWVudCBpbnRvIGByZXF1aXJlKClgXG4gIGNhY2hlZEJ1aWxkZXJzTW9kdWxlID0gKGF3YWl0IGV2YWwoXG4gICAgJ2ltcG9ydChcIkB3b3JrZmxvdy9idWlsZGVyc1wiKSdcbiAgKSkgYXMgdHlwZW9mIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJyk7XG4gIHJldHVybiBjYWNoZWRCdWlsZGVyc01vZHVsZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RGVjb3JhdG9yT3B0aW9ucyhcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD4ge1xuICBjb25zdCBjYWNoZWQgPSBkZWNvcmF0b3JPcHRpb25zQ2FjaGUuZ2V0KHdvcmtpbmdEaXIpO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuXG4gIGNvbnN0IHByb21pc2UgPSAoYXN5bmMgKCk6IFByb21pc2U8RGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoPiA9PiB7XG4gICAgY29uc3QgeyBnZXREZWNvcmF0b3JPcHRpb25zRm9yRGlyZWN0b3J5V2l0aENvbmZpZ1BhdGggfSA9XG4gICAgICBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICAgIHJldHVybiBnZXREZWNvcmF0b3JPcHRpb25zRm9yRGlyZWN0b3J5V2l0aENvbmZpZ1BhdGgod29ya2luZ0Rpcik7XG4gIH0pKCk7XG5cbiAgZGVjb3JhdG9yT3B0aW9uc0NhY2hlLnNldCh3b3JraW5nRGlyLCBwcm9taXNlKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdFBhdHRlcm5zKHNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxXb3JrZmxvd1BhdHRlcm5NYXRjaD4ge1xuICBjb25zdCB7IGRldGVjdFdvcmtmbG93UGF0dGVybnMgfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrR2VuZXJhdGVkRmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUgfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZShmaWxlUGF0aCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrU2hvdWxkVHJhbnNmb3JtKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBwYXR0ZXJuczogV29ya2Zsb3dQYXR0ZXJuTWF0Y2hcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IHNob3VsZFRyYW5zZm9ybUZpbGUgfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiBzaG91bGRUcmFuc2Zvcm1GaWxlKGZpbGVQYXRoLCBwYXR0ZXJucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE1vZHVsZVNwZWNpZmllcihcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyByZXNvbHZlTW9kdWxlU3BlY2lmaWVyIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gcmVzb2x2ZU1vZHVsZVNwZWNpZmllcihmaWxlUGF0aCwgcHJvamVjdFJvb3QpLm1vZHVsZVNwZWNpZmllcjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVdvcmtmbG93QWxpYXNQYXRoKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHsgcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGggfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aChmaWxlUGF0aCwgd29ya2luZ0Rpcik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlbGF0aXZlRmlsZW5hbWVGb3JTd2MoXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFdvcmtpbmdEaXIgPSB3b3JraW5nRGlyXG4gICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgIC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICBjb25zdCBub3JtYWxpemVkRmlsZXBhdGggPSBmaWxlbmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgLy8gV2luZG93cyBmaXg6IFVzZSBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb24gdG8gd29yayBhcm91bmQgZHJpdmUgbGV0dGVyIGNhc2luZyBpc3N1ZXNcbiAgY29uc3QgbG93ZXJXZCA9IG5vcm1hbGl6ZWRXb3JraW5nRGlyLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGxvd2VyUGF0aCA9IG5vcm1hbGl6ZWRGaWxlcGF0aC50b0xvd2VyQ2FzZSgpO1xuXG4gIGxldCByZWxhdGl2ZUZpbGVuYW1lOiBzdHJpbmc7XG4gIGlmIChsb3dlclBhdGguc3RhcnRzV2l0aChgJHtsb3dlcldkfS9gKSkge1xuICAgIC8vIEZpbGUgaXMgdW5kZXIgd29ya2luZyBkaXJlY3RvcnkgLSBtYW51YWxseSBjYWxjdWxhdGUgcmVsYXRpdmUgcGF0aFxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBub3JtYWxpemVkRmlsZXBhdGguc3Vic3RyaW5nKFxuICAgICAgbm9ybWFsaXplZFdvcmtpbmdEaXIubGVuZ3RoICsgMVxuICAgICk7XG4gIH0gZWxzZSBpZiAobG93ZXJQYXRoID09PSBsb3dlcldkKSB7XG4gICAgLy8gRmlsZSBJUyB0aGUgd29ya2luZyBkaXJlY3RvcnkgKHNob3VsZG4ndCBoYXBwZW4pXG4gICAgcmVsYXRpdmVGaWxlbmFtZSA9ICcuJztcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgcmVsYXRpdmUoKSBmb3IgZmlsZXMgb3V0c2lkZSB3b3JraW5nIGRpcmVjdG9yeVxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSByZWxhdGl2ZSh3b3JraW5nRGlyLCBmaWxlbmFtZSkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgaWYgKHJlbGF0aXZlRmlsZW5hbWUuc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZWRSZWxhdGl2ZVBhdGggPSBhd2FpdCByZXNvbHZlV29ya2Zsb3dBbGlhc1BhdGgoXG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICB3b3JraW5nRGlyXG4gICAgICApO1xuICAgICAgaWYgKGFsaWFzZWRSZWxhdGl2ZVBhdGgpIHtcbiAgICAgICAgcmVsYXRpdmVGaWxlbmFtZSA9IGFsaWFzZWRSZWxhdGl2ZVBhdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWxhdGl2ZUZpbGVuYW1lID0gcmVsYXRpdmVGaWxlbmFtZVxuICAgICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gJy4uJylcbiAgICAgICAgICAuam9pbignLycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmFsIHNhZmV0eSBjaGVjayAtIGVuc3VyZSB3ZSBuZXZlciBwYXNzIGFuIGFic29sdXRlIHBhdGggdG8gU1dDXG4gIGlmIChyZWxhdGl2ZUZpbGVuYW1lLmluY2x1ZGVzKCc6JykgfHwgcmVsYXRpdmVGaWxlbmFtZS5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAvLyBUaGlzIHNob3VsZCByYXJlbHkgaGFwcGVuLCBidXQgdXNlIGZpbGVuYW1lIHNwbGl0IGFzIGxhc3QgcmVzb3J0XG4gICAgcmVsYXRpdmVGaWxlbmFtZSA9IG5vcm1hbGl6ZWRGaWxlcGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8ICd1bmtub3duLnRzJztcbiAgfVxuXG4gIHJldHVybiByZWxhdGl2ZUZpbGVuYW1lO1xufVxuXG5mdW5jdGlvbiBpc05vZGVNb2R1bGVzUGF0aChmaWxlbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvKD86XnxbL1xcXFxdKW5vZGVfbW9kdWxlcyg/OlsvXFxcXF18JCkvLnRlc3QoZmlsZW5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9hZGVyU291cmNlTWFwT3B0aW9ucyhmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2VNYXA6IGFueSkge1xuICBjb25zdCBzaG91bGRFbWl0U291cmNlTWFwcyA9ICFpc05vZGVNb2R1bGVzUGF0aChmaWxlbmFtZSk7XG4gIHJldHVybiB7XG4gICAgaW5wdXRTb3VyY2VNYXA6IHNob3VsZEVtaXRTb3VyY2VNYXBzID8gKHNvdXJjZU1hcCA/PyBmYWxzZSkgOiBmYWxzZSxcbiAgICBzb3VyY2VNYXBzOiBzaG91bGRFbWl0U291cmNlTWFwcyxcbiAgICBpbmxpbmVTb3VyY2VzQ29udGVudDogc2hvdWxkRW1pdFNvdXJjZU1hcHMsXG4gIH07XG59XG5cbi8vIFRoaXMgbG9hZGVyIGFwcGxpZXMgdGhlIFwidXNlIHdvcmtmbG93XCIvXCJ1c2Ugc3RlcFwiIHRyYW5zZm9ybS5cbi8vIEFsbCBmaWxlcyB1c2Ugc3RlcCBtb2RlOyB0aGUgU1dDIHBsdWdpbiBkZWNpZGVzIHBlci1mdW5jdGlvbiB3aGV0aGVyXG4vLyB0byBlbWl0IHdvcmtmbG93IG9yIHN0ZXAgYmluZGluZ3MgYmFzZWQgb24gdGhlIHNvdXJjZSdzIGRpcmVjdGl2ZXMuXG50eXBlIFdvcmtmbG93TG9hZGVyQ29udGV4dCA9IHtcbiAgcmVzb3VyY2VQYXRoOiBzdHJpbmc7XG4gIGFzeW5jPzogKCkgPT4gKFxuICAgIGVycm9yOiBFcnJvciB8IG51bGwsXG4gICAgY29udGVudD86IHN0cmluZyxcbiAgICBzb3VyY2VNYXA/OiBhbnlcbiAgKSA9PiB2b2lkO1xuICBhZGREZXBlbmRlbmN5PzogKGRlcGVuZGVuY3k6IHN0cmluZykgPT4gdm9pZDtcbiAgYWRkQnVpbGREZXBlbmRlbmN5PzogKGRlcGVuZGVuY3k6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdvcmtmbG93TG9hZGVyKFxuICB0aGlzOiBXb3JrZmxvd0xvYWRlckNvbnRleHQsXG4gIHNvdXJjZTogc3RyaW5nIHwgQnVmZmVyLFxuICBzb3VyY2VNYXA6IGFueVxuKTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHwgdm9pZCB7XG4gIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5hc3luYz8uKCk7XG4gIGNvbnN0IHJ1biA9IGFzeW5jICgpOiBQcm9taXNlPHsgY29kZTogc3RyaW5nOyBtYXA6IGFueSB9PiA9PiB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnJlc291cmNlUGF0aDtcbiAgICBjb25zdCBub3JtYWxpemVkU291cmNlID0gc291cmNlLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgc3djUGx1Z2luUGF0aCA9IHJlZ2lzdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzKHRoaXMpO1xuICAgIGNvbnN0IHNvdXJjZUZvclRyYW5zZm9ybSA9IG5vcm1hbGl6ZWRTb3VyY2U7XG5cbiAgICBjb25zdCBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZSA9IGF3YWl0IGNoZWNrR2VuZXJhdGVkRmlsZShmaWxlbmFtZSk7XG4gICAgLy8gU2tpcCBnZW5lcmF0ZWQgd29ya2Zsb3cgcm91dGUgZmlsZXMgdG8gYXZvaWQgcmUtcHJvY2Vzc2luZyB0aGVtLlxuICAgIGlmIChpc0dlbmVyYXRlZFdvcmtmbG93RmlsZSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogbm9ybWFsaXplZFNvdXJjZSwgbWFwOiBzb3VyY2VNYXAgfTtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3Qgd29ya2Zsb3cgcGF0dGVybnMgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgIGNvbnN0IHBhdHRlcm5zID0gYXdhaXQgZGV0ZWN0UGF0dGVybnMoc291cmNlRm9yVHJhbnNmb3JtKTtcblxuICAgIC8vIENoZWNrIGlmIGZpbGUgbmVlZHMgdHJhbnNmb3JtYXRpb24gYmFzZWQgb24gcGF0dGVybnMgYW5kIHBhdGhcbiAgICBpZiAoIShhd2FpdCBjaGVja1Nob3VsZFRyYW5zZm9ybShmaWxlbmFtZSwgcGF0dGVybnMpKSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogbm9ybWFsaXplZFNvdXJjZSwgbWFwOiBzb3VyY2VNYXAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1R5cGVTY3JpcHQgPVxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy50cycpIHx8XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLnRzeCcpIHx8XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLm10cycpIHx8XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLmN0cycpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHJlbGF0aXZlIGZpbGVuYW1lIGZvciBTV0MgcGx1Z2luXG4gICAgLy8gVGhlIFNXQyBwbHVnaW4gdXNlcyBmaWxlbmFtZSB0byBnZW5lcmF0ZSB3b3JrZmxvd0lkLCBzbyBpdCBtdXN0IGJlIHJlbGF0aXZlXG4gICAgY29uc3QgcmVsYXRpdmVGaWxlbmFtZSA9IGF3YWl0IGdldFJlbGF0aXZlRmlsZW5hbWVGb3JTd2MoXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHdvcmtpbmdEaXJcbiAgICApO1xuXG4gICAgLy8gR2V0IGRlY29yYXRvciBvcHRpb25zIGZyb20gdHNjb25maWcgKGNhY2hlZCBwZXIgd29ya2luZyBkaXJlY3RvcnkpXG4gICAgY29uc3QgeyBvcHRpb25zOiBkZWNvcmF0b3JPcHRpb25zLCBjb25maWdQYXRoIH0gPVxuICAgICAgYXdhaXQgZ2V0RGVjb3JhdG9yT3B0aW9ucyh3b3JraW5nRGlyKTtcbiAgICBpZiAoY29uZmlnUGF0aCkge1xuICAgICAgcmVnaXN0ZXJGaWxlRGVwZW5kZW5jeSh0aGlzLCBjb25maWdQYXRoKTtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIG1vZHVsZSBzcGVjaWZpZXIgZm9yIHBhY2thZ2VzIChub2RlX21vZHVsZXMgb3Igd29ya3NwYWNlIHBhY2thZ2VzKVxuICAgIGNvbnN0IG1vZHVsZVNwZWNpZmllciA9IGF3YWl0IGdldE1vZHVsZVNwZWNpZmllcihmaWxlbmFtZSwgd29ya2luZ0Rpcik7XG4gICAgY29uc3QgbW9kZSA9ICdzdGVwJztcblxuICAgIC8vIFRyYW5zZm9ybSB3aXRoIFNXQ1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VGb3JUcmFuc2Zvcm0sIHtcbiAgICAgIGZpbGVuYW1lOiByZWxhdGl2ZUZpbGVuYW1lLFxuICAgICAganNjOiB7XG4gICAgICAgIHBhcnNlcjoge1xuICAgICAgICAgIC4uLihpc1R5cGVTY3JpcHRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnLFxuICAgICAgICAgICAgICAgIHRzeDogZmlsZW5hbWUuZW5kc1dpdGgoJy50c3gnKSxcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBkZWNvcmF0b3JPcHRpb25zLmRlY29yYXRvcnMsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHN5bnRheDogJ2VjbWFzY3JpcHQnLFxuICAgICAgICAgICAgICAgIGpzeDogZmlsZW5hbWUuZW5kc1dpdGgoJy5qc3gnKSxcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBkZWNvcmF0b3JPcHRpb25zLmRlY29yYXRvcnMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgICBleHBlcmltZW50YWw6IHtcbiAgICAgICAgICBjYWNoZVJvb3Q6IGpvaW4od29ya2luZ0RpciwgJy5zd2MnKSxcbiAgICAgICAgICBwbHVnaW5zOiBbW3N3Y1BsdWdpblBhdGgsIHsgbW9kZSwgbW9kdWxlU3BlY2lmaWVyIH1dXSxcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNmb3JtOiB7XG4gICAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICAgIHJ1bnRpbWU6ICdwcmVzZXJ2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsZWdhY3lEZWNvcmF0b3I6IGRlY29yYXRvck9wdGlvbnMubGVnYWN5RGVjb3JhdG9yLFxuICAgICAgICAgIGRlY29yYXRvck1ldGFkYXRhOiBkZWNvcmF0b3JPcHRpb25zLmRlY29yYXRvck1ldGFkYXRhLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG1pbmlmeTogZmFsc2UsXG4gICAgICAuLi5nZXRMb2FkZXJTb3VyY2VNYXBPcHRpb25zKGZpbGVuYW1lLCBzb3VyY2VNYXApLFxuICAgIH0pO1xuXG4gICAgbGV0IHRyYW5zZm9ybWVkTWFwID0gc291cmNlTWFwO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0Lm1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRyYW5zZm9ybWVkTWFwID0gSlNPTi5wYXJzZShyZXN1bHQubWFwKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0cmFuc2Zvcm1lZE1hcCA9IHJlc3VsdC5tYXA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXN1bHQubWFwKSB7XG4gICAgICB0cmFuc2Zvcm1lZE1hcCA9IHJlc3VsdC5tYXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZTogcmVzdWx0LmNvZGUsIG1hcDogdHJhbnNmb3JtZWRNYXAgfTtcbiAgfTtcblxuICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHJ1bigpLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmNvZGUpO1xuICB9XG5cbiAgdm9pZCBydW4oKVxuICAgIC50aGVuKChyZXN1bHQpID0+IGNhbGxiYWNrKG51bGwsIHJlc3VsdC5jb2RlLCByZXN1bHQubWFwKSlcbiAgICAuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSkpO1xuICAgIH0pO1xufVxuIl19
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1KQSwwRUFxQkM7QUFxRUQsOERBT0M7QUFnQkQsaUNBb0dDO0FBeFdELHFDQUFxQztBQUNyQyx5Q0FBb0Q7QUFDcEQsb0NBQXNDO0FBTXRDLHlGQUF5RjtBQUN6RixNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUdsQyxDQUFDO0FBQ0oseUdBQXlHO0FBQ3pHLElBQUksb0JBQW9CLEdBQStDLElBQUksQ0FBQztBQUs1RSxJQUFJLDhCQUE4QixHQUFvQyxJQUFJLENBQUM7QUFFM0UsU0FBUyxzQkFBc0IsQ0FDN0IsYUFBb0MsRUFDcEMsY0FBc0I7SUFFdEIsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFrQixFQUFFLGNBQXNCO0lBQzdELElBQUksSUFBQSxvQkFBVSxFQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDL0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1QixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsK0JBQStCO0lBQ3RDLElBQUksOEJBQThCLEVBQUUsQ0FBQztRQUNuQyxPQUFPLDhCQUE4QixDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDOUQsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUM1QyxzQ0FBc0MsQ0FDdkMsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRW5FLCtEQUErRDtJQUMvRCxvRUFBb0U7SUFDcEUs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aUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsaUJBQWlCO2lCQUN0RDthQUNGO1lBQ0QsTUFBTSxFQUFFLEtBQUs7WUFDYixHQUFHLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7U0FDbEQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3BELENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssR0FBRyxFQUFFO1NBQ1AsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pELEtBQUssQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLFFBQVEsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgdHJhbnNmb3JtIH0gZnJvbSAnQHN3Yy9jb3JlJztcblxudHlwZSBEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGggPVxuICBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpLkRlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aDtcbnR5cGUgV29ya2Zsb3dQYXR0ZXJuTWF0Y2ggPSBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpLldvcmtmbG93UGF0dGVybk1hdGNoO1xuXG4vLyBDYWNoZSBkZWNvcmF0b3Igb3B0aW9ucyBwZXIgd29ya2luZyBkaXJlY3RvcnkgdG8gYXZvaWQgcmVhZGluZyB0c2NvbmZpZyBmb3IgZXZlcnkgZmlsZVxuY29uc3QgZGVjb3JhdG9yT3B0aW9uc0NhY2hlID0gbmV3IE1hcDxcbiAgc3RyaW5nLFxuICBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD5cbj4oKTtcbi8vIENhY2hlIGZvciBzaGFyZWQgdXRpbGl0aWVzIGZyb20gQHdvcmtmbG93L2J1aWxkZXJzIChFU00gbW9kdWxlIGxvYWRlZCBkeW5hbWljYWxseSBpbiBDb21tb25KUyBjb250ZXh0KVxubGV0IGNhY2hlZEJ1aWxkZXJzTW9kdWxlOiB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKSB8IG51bGwgPSBudWxsO1xudHlwZSBMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMgPSB7XG4gIHN3Y1BsdWdpblBhdGg6IHN0cmluZztcbiAgZmlsZXM6IHN0cmluZ1tdO1xufTtcbmxldCBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM6IExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiByZWdpc3RlckZpbGVEZXBlbmRlbmN5KFxuICBsb2FkZXJDb250ZXh0OiBXb3JrZmxvd0xvYWRlckNvbnRleHQsXG4gIGRlcGVuZGVuY3lQYXRoOiBzdHJpbmdcbik6IHZvaWQge1xuICBsb2FkZXJDb250ZXh0LmFkZERlcGVuZGVuY3k/LihkZXBlbmRlbmN5UGF0aCk7XG4gIGxvYWRlckNvbnRleHQuYWRkQnVpbGREZXBlbmRlbmN5Py4oZGVwZW5kZW5jeVBhdGgpO1xufVxuXG5mdW5jdGlvbiBhZGRJZkV4aXN0cyhmaWxlczogU2V0PHN0cmluZz4sIGRlcGVuZGVuY3lQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGV4aXN0c1N5bmMoZGVwZW5kZW5jeVBhdGgpKSB7XG4gICAgZmlsZXMuYWRkKGRlcGVuZGVuY3lQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzKCk6IExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyB7XG4gIGlmIChjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMpIHtcbiAgICByZXR1cm4gY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzO1xuICB9XG5cbiAgY29uc3Qgc3djUGx1Z2luUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnQHdvcmtmbG93L3N3Yy1wbHVnaW4nKTtcbiAgY29uc3Qgc3djUGx1Z2luQnVpbGRIYXNoUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShcbiAgICAnQHdvcmtmbG93L3N3Yy1wbHVnaW4vYnVpbGQtaGFzaC5qc29uJ1xuICApO1xuICBjb25zdCB3b3JrZmxvd0J1aWxkZXJzUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnQHdvcmtmbG93L2J1aWxkZXJzJyk7XG5cbiAgLy8gRGVyaXZlIHBhY2thZ2UuanNvbiBwYXRocyBmcm9tIHJlc29sdmVkIGVudHJ5cG9pbnRzIHRvIGF2b2lkXG4gIC8vIFR1cmJvcGFjayBsb2FkZXItZXZhbCBmYWlsdXJlcyBhcm91bmQgLi4vcGFja2FnZS5qc29uIHJlc29sdXRpb24uXG4gIGNvbnN0IHN3Y1BsdWdpblBhY2thZ2VKc29uUGF0aCA9IGpvaW4oZGlybmFtZShzd2NQbHVnaW5QYXRoKSwgJ3BhY2thZ2UuanNvbicpO1xuICBjb25zdCB3b3JrZmxvd0J1aWxkZXJzUGFja2FnZUpzb25QYXRoID0gam9pbihcbiAgICBkaXJuYW1lKHdvcmtmbG93QnVpbGRlcnNQYXRoKSxcbiAgICAnLi4vcGFja2FnZS5qc29uJ1xuICApO1xuXG4gIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgICBfX2ZpbGVuYW1lLFxuICAgIHN3Y1BsdWdpblBhdGgsXG4gICAgc3djUGx1Z2luQnVpbGRIYXNoUGF0aCxcbiAgICB3b3JrZmxvd0J1aWxkZXJzUGF0aCxcbiAgXSk7XG4gIGFkZElmRXhpc3RzKGZpbGVzLCBzd2NQbHVnaW5QYWNrYWdlSnNvblBhdGgpO1xuICBhZGRJZkV4aXN0cyhmaWxlcywgd29ya2Zsb3dCdWlsZGVyc1BhY2thZ2VKc29uUGF0aCk7XG5cbiAgY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzID0ge1xuICAgIHN3Y1BsdWdpblBhdGgsXG4gICAgZmlsZXM6IEFycmF5LmZyb20oZmlsZXMpLFxuICB9O1xuICByZXR1cm4gY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlclRyYW5zZm9ybURlcGVuZGVuY2llcyhcbiAgbG9hZGVyQ29udGV4dDogV29ya2Zsb3dMb2FkZXJDb250ZXh0XG4pOiBzdHJpbmcge1xuICBjb25zdCBzdGF0aWNEZXBlbmRlbmNpZXMgPSByZXNvbHZlTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzKCk7XG4gIGZvciAoY29uc3QgZGVwZW5kZW5jeVBhdGggb2Ygc3RhdGljRGVwZW5kZW5jaWVzLmZpbGVzKSB7XG4gICAgcmVnaXN0ZXJGaWxlRGVwZW5kZW5jeShsb2FkZXJDb250ZXh0LCBkZXBlbmRlbmN5UGF0aCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGljRGVwZW5kZW5jaWVzLnN3Y1BsdWdpblBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJ1aWxkZXJzTW9kdWxlKCk6IFByb21pc2U8XG4gIHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpXG4+IHtcbiAgaWYgKGNhY2hlZEJ1aWxkZXJzTW9kdWxlKSB7XG4gICAgcmV0dXJuIGNhY2hlZEJ1aWxkZXJzTW9kdWxlO1xuICB9XG4gIC8vIER5bmFtaWMgaW1wb3J0IHRvIGhhbmRsZSBFU00gbW9kdWxlIGZyb20gQ29tbW9uSlMgY29udGV4dFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zZWN1cml0eS9ub0dsb2JhbEV2YWw6IE5lZWQgdG8gdXNlIGV2YWwgaGVyZSB0byBhdm9pZCBUeXBlU2NyaXB0IGZyb20gdHJhbnNwaWxpbmcgdGhlIGltcG9ydCBzdGF0ZW1lbnQgaW50byBgcmVxdWlyZSgpYFxuICBjYWNoZWRCdWlsZGVyc01vZHVsZSA9IChhd2FpdCBldmFsKFxuICAgICdpbXBvcnQoXCJAd29ya2Zsb3cvYnVpbGRlcnNcIiknXG4gICkpIGFzIHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpO1xuICByZXR1cm4gY2FjaGVkQnVpbGRlcnNNb2R1bGU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldERlY29yYXRvck9wdGlvbnMoXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGg+IHtcbiAgY29uc3QgY2FjaGVkID0gZGVjb3JhdG9yT3B0aW9uc0NhY2hlLmdldCh3b3JraW5nRGlyKTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICBjb25zdCBwcm9taXNlID0gKGFzeW5jICgpOiBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD4gPT4ge1xuICAgIGNvbnN0IHsgZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoIH0gPVxuICAgICAgYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgICByZXR1cm4gZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoKHdvcmtpbmdEaXIpO1xuICB9KSgpO1xuXG4gIGRlY29yYXRvck9wdGlvbnNDYWNoZS5zZXQod29ya2luZ0RpciwgcHJvbWlzZSk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RQYXR0ZXJucyhzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8V29ya2Zsb3dQYXR0ZXJuTWF0Y2g+IHtcbiAgY29uc3QgeyBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja0dlbmVyYXRlZEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUoZmlsZVBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja1Nob3VsZFRyYW5zZm9ybShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgcGF0dGVybnM6IFdvcmtmbG93UGF0dGVybk1hdGNoXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBzaG91bGRUcmFuc2Zvcm1GaWxlIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gc2hvdWxkVHJhbnNmb3JtRmlsZShmaWxlUGF0aCwgcGF0dGVybnMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNb2R1bGVTcGVjaWZpZXIoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHsgcmVzb2x2ZU1vZHVsZVNwZWNpZmllciB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoZmlsZVBhdGgsIHByb2plY3RSb290KS5tb2R1bGVTcGVjaWZpZXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3JrZmxvd0FsaWFzUGF0aChcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGgoZmlsZVBhdGgsIHdvcmtpbmdEaXIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5qZWN0V29ya2Zsb3dUYXJnZXRXb3JsZEltcG9ydChcbiAgc291cmNlOiBzdHJpbmcsXG4gIGJ1aWxkZXJzTW9kdWxlPzogUGljazxcbiAgICB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKSxcbiAgICAnZW5zdXJlV29ya2Zsb3dUYXJnZXRXb3JsZEVudicgfCAnV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSdcbiAgPlxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgdGFyZ2V0TW9kdWxlID1cbiAgICBidWlsZGVyc01vZHVsZT8uV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSA/P1xuICAgICdAd29ya2Zsb3cvY29yZS9ydW50aW1lL3dvcmxkLXRhcmdldCc7XG4gIGlmICghc291cmNlLmluY2x1ZGVzKHRhcmdldE1vZHVsZSkpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3QgeyBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52LCBXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFIH0gPVxuICAgIGJ1aWxkZXJzTW9kdWxlID8/IChhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpKTtcblxuICByZXR1cm4gc291cmNlLnJlcGxhY2VBbGwoXG4gICAgV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSxcbiAgICBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52KClcbiAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm1NYXAocmVzdWx0TWFwOiB1bmtub3duLCBmYWxsYmFja01hcDogYW55KTogYW55IHtcbiAgaWYgKHR5cGVvZiByZXN1bHRNYXAgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHJlc3VsdE1hcCB8fCBmYWxsYmFja01hcDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzdWx0TWFwKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHJlc3VsdE1hcDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZWxhdGl2ZUZpbGVuYW1lRm9yU3djKFxuICBmaWxlbmFtZTogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRXb3JraW5nRGlyID0gd29ya2luZ0RpclxuICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICAucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVwYXRoID0gZmlsZW5hbWUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gIC8vIFdpbmRvd3MgZml4OiBVc2UgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uIHRvIHdvcmsgYXJvdW5kIGRyaXZlIGxldHRlciBjYXNpbmcgaXNzdWVzXG4gIGNvbnN0IGxvd2VyV2QgPSBub3JtYWxpemVkV29ya2luZ0Rpci50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBsb3dlclBhdGggPSBub3JtYWxpemVkRmlsZXBhdGgudG9Mb3dlckNhc2UoKTtcblxuICBsZXQgcmVsYXRpdmVGaWxlbmFtZTogc3RyaW5nO1xuICBpZiAobG93ZXJQYXRoLnN0YXJ0c1dpdGgoYCR7bG93ZXJXZH0vYCkpIHtcbiAgICAvLyBGaWxlIGlzIHVuZGVyIHdvcmtpbmcgZGlyZWN0b3J5IC0gbWFudWFsbHkgY2FsY3VsYXRlIHJlbGF0aXZlIHBhdGhcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gbm9ybWFsaXplZEZpbGVwYXRoLnN1YnN0cmluZyhcbiAgICAgIG5vcm1hbGl6ZWRXb3JraW5nRGlyLmxlbmd0aCArIDFcbiAgICApO1xuICB9IGVsc2UgaWYgKGxvd2VyUGF0aCA9PT0gbG93ZXJXZCkge1xuICAgIC8vIEZpbGUgSVMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IChzaG91bGRuJ3QgaGFwcGVuKVxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSAnLic7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIHJlbGF0aXZlKCkgZm9yIGZpbGVzIG91dHNpZGUgd29ya2luZyBkaXJlY3RvcnlcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gcmVsYXRpdmUod29ya2luZ0RpciwgZmlsZW5hbWUpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgIGlmIChyZWxhdGl2ZUZpbGVuYW1lLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICBjb25zdCBhbGlhc2VkUmVsYXRpdmVQYXRoID0gYXdhaXQgcmVzb2x2ZVdvcmtmbG93QWxpYXNQYXRoKFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgd29ya2luZ0RpclxuICAgICAgKTtcbiAgICAgIGlmIChhbGlhc2VkUmVsYXRpdmVQYXRoKSB7XG4gICAgICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBhbGlhc2VkUmVsYXRpdmVQYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVsYXRpdmVGaWxlbmFtZSA9IHJlbGF0aXZlRmlsZW5hbWVcbiAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09ICcuLicpXG4gICAgICAgICAgLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5hbCBzYWZldHkgY2hlY2sgLSBlbnN1cmUgd2UgbmV2ZXIgcGFzcyBhbiBhYnNvbHV0ZSBwYXRoIHRvIFNXQ1xuICBpZiAocmVsYXRpdmVGaWxlbmFtZS5pbmNsdWRlcygnOicpIHx8IHJlbGF0aXZlRmlsZW5hbWUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgcmFyZWx5IGhhcHBlbiwgYnV0IHVzZSBmaWxlbmFtZSBzcGxpdCBhcyBsYXN0IHJlc29ydFxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBub3JtYWxpemVkRmlsZXBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCAndW5rbm93bi50cyc7XG4gIH1cblxuICByZXR1cm4gcmVsYXRpdmVGaWxlbmFtZTtcbn1cblxuZnVuY3Rpb24gaXNOb2RlTW9kdWxlc1BhdGgoZmlsZW5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gLyg/Ol58Wy9cXFxcXSlub2RlX21vZHVsZXMoPzpbL1xcXFxdfCQpLy50ZXN0KGZpbGVuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvYWRlclNvdXJjZU1hcE9wdGlvbnMoZmlsZW5hbWU6IHN0cmluZywgc291cmNlTWFwOiBhbnkpIHtcbiAgY29uc3Qgc2hvdWxkRW1pdFNvdXJjZU1hcHMgPSAhaXNOb2RlTW9kdWxlc1BhdGgoZmlsZW5hbWUpO1xuICByZXR1cm4ge1xuICAgIGlucHV0U291cmNlTWFwOiBzaG91bGRFbWl0U291cmNlTWFwcyA/IChzb3VyY2VNYXAgPz8gZmFsc2UpIDogZmFsc2UsXG4gICAgc291cmNlTWFwczogc2hvdWxkRW1pdFNvdXJjZU1hcHMsXG4gICAgaW5saW5lU291cmNlc0NvbnRlbnQ6IHNob3VsZEVtaXRTb3VyY2VNYXBzLFxuICB9O1xufVxuXG4vLyBUaGlzIGxvYWRlciBhcHBsaWVzIHRoZSBcInVzZSB3b3JrZmxvd1wiL1widXNlIHN0ZXBcIiB0cmFuc2Zvcm0uXG4vLyBBbGwgZmlsZXMgdXNlIHN0ZXAgbW9kZTsgdGhlIFNXQyBwbHVnaW4gZGVjaWRlcyBwZXItZnVuY3Rpb24gd2hldGhlclxuLy8gdG8gZW1pdCB3b3JrZmxvdyBvciBzdGVwIGJpbmRpbmdzIGJhc2VkIG9uIHRoZSBzb3VyY2UncyBkaXJlY3RpdmVzLlxudHlwZSBXb3JrZmxvd0xvYWRlckNvbnRleHQgPSB7XG4gIHJlc291cmNlUGF0aDogc3RyaW5nO1xuICBhc3luYz86ICgpID0+IChcbiAgICBlcnJvcjogRXJyb3IgfCBudWxsLFxuICAgIGNvbnRlbnQ/OiBzdHJpbmcsXG4gICAgc291cmNlTWFwPzogYW55XG4gICkgPT4gdm9pZDtcbiAgYWRkRGVwZW5kZW5jeT86IChkZXBlbmRlbmN5OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEJ1aWxkRGVwZW5kZW5jeT86IChkZXBlbmRlbmN5OiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3b3JrZmxvd0xvYWRlcihcbiAgdGhpczogV29ya2Zsb3dMb2FkZXJDb250ZXh0LFxuICBzb3VyY2U6IHN0cmluZyB8IEJ1ZmZlcixcbiAgc291cmNlTWFwOiBhbnlcbik6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5hc3luYz8uKCk7XG4gIGNvbnN0IHJ1biA9IGFzeW5jICgpOiBQcm9taXNlPHsgY29kZTogc3RyaW5nOyBtYXA6IGFueSB9PiA9PiB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnJlc291cmNlUGF0aDtcbiAgICBjb25zdCBub3JtYWxpemVkU291cmNlID0gc291cmNlLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgc3djUGx1Z2luUGF0aCA9IHJlZ2lzdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzKHRoaXMpO1xuICAgIGNvbnN0IHNvdXJjZUZvclRyYW5zZm9ybSA9XG4gICAgICBhd2FpdCBpbmplY3RXb3JrZmxvd1RhcmdldFdvcmxkSW1wb3J0KG5vcm1hbGl6ZWRTb3VyY2UpO1xuXG4gICAgY29uc3QgaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUgPSBhd2FpdCBjaGVja0dlbmVyYXRlZEZpbGUoZmlsZW5hbWUpO1xuICAgIC8vIFNraXAgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGVzIHRvIGF2b2lkIHJlLXByb2Nlc3NpbmcgdGhlbS5cbiAgICBpZiAoaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUpIHtcbiAgICAgIHJldHVybiB7IGNvZGU6IHNvdXJjZUZvclRyYW5zZm9ybSwgbWFwOiBzb3VyY2VNYXAgfTtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3Qgd29ya2Zsb3cgcGF0dGVybnMgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgIGNvbnN0IHBhdHRlcm5zID0gYXdhaXQgZGV0ZWN0UGF0dGVybnMoc291cmNlRm9yVHJhbnNmb3JtKTtcblxuICAgIC8vIENoZWNrIGlmIGZpbGUgbmVlZHMgdHJhbnNmb3JtYXRpb24gYmFzZWQgb24gcGF0dGVybnMgYW5kIHBhdGhcbiAgICBpZiAoIShhd2FpdCBjaGVja1Nob3VsZFRyYW5zZm9ybShmaWxlbmFtZSwgcGF0dGVybnMpKSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogc291cmNlRm9yVHJhbnNmb3JtLCBtYXA6IHNvdXJjZU1hcCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGlzVHlwZVNjcmlwdCA9XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLnRzJykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcudHN4JykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcubXRzJykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcuY3RzJyk7XG5cbiAgICAvLyBDYWxjdWxhdGUgcmVsYXRpdmUgZmlsZW5hbWUgZm9yIFNXQyBwbHVnaW5cbiAgICAvLyBUaGUgU1dDIHBsdWdpbiB1c2VzIGZpbGVuYW1lIHRvIGdlbmVyYXRlIHdvcmtmbG93SWQsIHNvIGl0IG11c3QgYmUgcmVsYXRpdmVcbiAgICBjb25zdCByZWxhdGl2ZUZpbGVuYW1lID0gYXdhaXQgZ2V0UmVsYXRpdmVGaWxlbmFtZUZvclN3YyhcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgd29ya2luZ0RpclxuICAgICk7XG5cbiAgICAvLyBHZXQgZGVjb3JhdG9yIG9wdGlvbnMgZnJvbSB0c2NvbmZpZyAoY2FjaGVkIHBlciB3b3JraW5nIGRpcmVjdG9yeSlcbiAgICBjb25zdCB7IG9wdGlvbnM6IGRlY29yYXRvck9wdGlvbnMsIGNvbmZpZ1BhdGggfSA9XG4gICAgICBhd2FpdCBnZXREZWNvcmF0b3JPcHRpb25zKHdvcmtpbmdEaXIpO1xuICAgIGlmIChjb25maWdQYXRoKSB7XG4gICAgICByZWdpc3RlckZpbGVEZXBlbmRlbmN5KHRoaXMsIGNvbmZpZ1BhdGgpO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgbW9kdWxlIHNwZWNpZmllciBmb3IgcGFja2FnZXMgKG5vZGVfbW9kdWxlcyBvciB3b3Jrc3BhY2UgcGFja2FnZXMpXG4gICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gYXdhaXQgZ2V0TW9kdWxlU3BlY2lmaWVyKGZpbGVuYW1lLCB3b3JraW5nRGlyKTtcbiAgICBjb25zdCBtb2RlID0gJ3N0ZXAnO1xuXG4gICAgLy8gVHJhbnNmb3JtIHdpdGggU1dDXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJhbnNmb3JtKHNvdXJjZUZvclRyYW5zZm9ybSwge1xuICAgICAgZmlsZW5hbWU6IHJlbGF0aXZlRmlsZW5hbWUsXG4gICAgICBqc2M6IHtcbiAgICAgICAgcGFyc2VyOiB7XG4gICAgICAgICAgLi4uKGlzVHlwZVNjcmlwdFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcsXG4gICAgICAgICAgICAgICAgdHN4OiBmaWxlbmFtZS5lbmRzV2l0aCgnLnRzeCcpLFxuICAgICAgICAgICAgICAgIGRlY29yYXRvcnM6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9ycyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgc3ludGF4OiAnZWNtYXNjcmlwdCcsXG4gICAgICAgICAgICAgICAganN4OiBmaWxlbmFtZS5lbmRzV2l0aCgnLmpzeCcpLFxuICAgICAgICAgICAgICAgIGRlY29yYXRvcnM6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9ycyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgICAgIGV4cGVyaW1lbnRhbDoge1xuICAgICAgICAgIGNhY2hlUm9vdDogam9pbih3b3JraW5nRGlyLCAnLnN3YycpLFxuICAgICAgICAgIHBsdWdpbnM6IFtbc3djUGx1Z2luUGF0aCwgeyBtb2RlLCBtb2R1bGVTcGVjaWZpZXIgfV1dLFxuICAgICAgICB9LFxuICAgICAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgICByZWFjdDoge1xuICAgICAgICAgICAgcnVudGltZTogJ3ByZXNlcnZlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxlZ2FjeURlY29yYXRvcjogZGVjb3JhdG9yT3B0aW9ucy5sZWdhY3lEZWNvcmF0b3IsXG4gICAgICAgICAgZGVjb3JhdG9yTWV0YWRhdGE6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9yTWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbWluaWZ5OiBmYWxzZSxcbiAgICAgIC4uLmdldExvYWRlclNvdXJjZU1hcE9wdGlvbnMoZmlsZW5hbWUsIHNvdXJjZU1hcCksXG4gICAgfSk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZE1hcCA9IHBhcnNlVHJhbnNmb3JtTWFwKHJlc3VsdC5tYXAsIHNvdXJjZU1hcCk7XG5cbiAgICByZXR1cm4geyBjb2RlOiByZXN1bHQuY29kZSwgbWFwOiB0cmFuc2Zvcm1lZE1hcCB9O1xuICB9O1xuXG4gIGlmICghY2FsbGJhY2spIHtcbiAgICByZXR1cm4gcnVuKCkudGhlbigocmVzdWx0KSA9PiByZXN1bHQuY29kZSk7XG4gIH1cblxuICB2b2lkIHJ1bigpXG4gICAgLnRoZW4oKHJlc3VsdCkgPT4gY2FsbGJhY2sobnVsbCwgcmVzdWx0LmNvZGUsIHJlc3VsdC5tYXApKVxuICAgIC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgIGNhbGxiYWNrKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSk7XG4gICAgfSk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/next",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.28",
|
|
4
4
|
"description": "Next.js integration for Workflow SDK",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"@swc/core": "1.15.3",
|
|
30
30
|
"chokidar": "4.0.3",
|
|
31
31
|
"semver": "7.7.4",
|
|
32
|
-
"@workflow/builders": "5.0.0-beta.
|
|
33
|
-
"@workflow/core": "5.0.0-beta.
|
|
32
|
+
"@workflow/builders": "5.0.0-beta.28",
|
|
33
|
+
"@workflow/core": "5.0.0-beta.28",
|
|
34
34
|
"@workflow/swc-plugin": "5.0.0-beta.5"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|