obsidian-dev-utils 39.0.1 → 40.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/lib/cjs/Library.cjs +1 -1
- package/dist/lib/cjs/obsidian/AttachmentPath.cjs +52 -23
- package/dist/lib/cjs/obsidian/AttachmentPath.d.cts +103 -26
- package/dist/lib/cjs/obsidian/RenameDeleteHandler.cjs +7 -2
- package/dist/lib/esm/Library.mjs +1 -1
- package/dist/lib/esm/obsidian/AttachmentPath.d.mts +103 -26
- package/dist/lib/esm/obsidian/AttachmentPath.mjs +53 -24
- package/dist/lib/esm/obsidian/RenameDeleteHandler.mjs +7 -2
- package/package.json +1 -1
|
@@ -19,48 +19,77 @@ import {
|
|
|
19
19
|
trimStart
|
|
20
20
|
} from "../String.mjs";
|
|
21
21
|
import {
|
|
22
|
-
|
|
22
|
+
getFileOrNull,
|
|
23
23
|
getFolder,
|
|
24
24
|
getFolderOrNull,
|
|
25
25
|
getPath
|
|
26
26
|
} from "./FileSystem.mjs";
|
|
27
27
|
const DUMMY_PATH = "__DUMMY__";
|
|
28
|
-
async function getAttachmentFilePath(
|
|
28
|
+
async function getAttachmentFilePath(options) {
|
|
29
|
+
const {
|
|
30
|
+
app,
|
|
31
|
+
attachmentPathOrFile,
|
|
32
|
+
notePathOrFile,
|
|
33
|
+
shouldSkipDuplicateCheck
|
|
34
|
+
} = options;
|
|
29
35
|
const attachmentPath = getPath(app, attachmentPathOrFile);
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const fileBaseName = basename(attachmentPath, ext);
|
|
36
|
+
const attachmentFileExtension = extname(attachmentPath);
|
|
37
|
+
const attachmentFileBaseName = basename(attachmentPath, attachmentFileExtension);
|
|
38
|
+
const attachmentFile = getFileOrNull(app, attachmentPath);
|
|
34
39
|
const internalFn = app.vault.getAvailablePathForAttachments;
|
|
35
|
-
|
|
36
|
-
|
|
40
|
+
const extendedFn = internalFn.extended;
|
|
41
|
+
if (extendedFn) {
|
|
42
|
+
return extendedFn({
|
|
43
|
+
attachmentFileBaseName,
|
|
44
|
+
attachmentFileContent: attachmentFile ? await app.vault.readBinary(attachmentFile) : void 0,
|
|
45
|
+
attachmentFileExtension: attachmentFileExtension.slice(1),
|
|
46
|
+
attachmentFileStat: attachmentFile?.stat,
|
|
47
|
+
notePathOrFile,
|
|
48
|
+
shouldSkipDuplicateCheck,
|
|
49
|
+
shouldSkipMissingAttachmentFolderCreation: true
|
|
50
|
+
});
|
|
37
51
|
}
|
|
38
|
-
return await getAvailablePathForAttachments(
|
|
52
|
+
return await getAvailablePathForAttachments({
|
|
53
|
+
app,
|
|
54
|
+
attachmentFileBaseName,
|
|
55
|
+
attachmentFileExtension: attachmentFileExtension.slice(1),
|
|
56
|
+
notePathOrFile,
|
|
57
|
+
shouldSkipDuplicateCheck,
|
|
58
|
+
shouldSkipMissingAttachmentFolderCreation: true
|
|
59
|
+
});
|
|
39
60
|
}
|
|
40
61
|
async function getAttachmentFolderPath(app, notePathOrFile) {
|
|
41
|
-
return parentFolderPath(
|
|
62
|
+
return parentFolderPath(
|
|
63
|
+
await getAttachmentFilePath({
|
|
64
|
+
app,
|
|
65
|
+
attachmentPathOrFile: DUMMY_PATH,
|
|
66
|
+
notePathOrFile,
|
|
67
|
+
shouldSkipDuplicateCheck: true
|
|
68
|
+
})
|
|
69
|
+
);
|
|
42
70
|
}
|
|
43
|
-
async function getAvailablePathForAttachments(
|
|
71
|
+
async function getAvailablePathForAttachments(options) {
|
|
72
|
+
const {
|
|
73
|
+
app,
|
|
74
|
+
attachmentFileExtension,
|
|
75
|
+
notePathOrFile,
|
|
76
|
+
shouldSkipDuplicateCheck,
|
|
77
|
+
shouldSkipMissingAttachmentFolderCreation
|
|
78
|
+
} = options;
|
|
44
79
|
let attachmentFolderPath = app.vault.getConfig("attachmentFolderPath");
|
|
45
80
|
const isCurrentFolder = attachmentFolderPath === "." || attachmentFolderPath === "./";
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
relativePath = trimStart(attachmentFolderPath, "./");
|
|
49
|
-
}
|
|
81
|
+
const relativePath = attachmentFolderPath.startsWith("./") ? trimStart(attachmentFolderPath, "./") : null;
|
|
82
|
+
const noteFileOrNull = getFileOrNull(app, notePathOrFile);
|
|
50
83
|
if (isCurrentFolder) {
|
|
51
|
-
attachmentFolderPath =
|
|
84
|
+
attachmentFolderPath = noteFileOrNull ? noteFileOrNull.parent?.path ?? "" : "";
|
|
52
85
|
} else if (relativePath) {
|
|
53
|
-
attachmentFolderPath = (
|
|
86
|
+
attachmentFolderPath = (noteFileOrNull ? noteFileOrNull.parent?.getParentPrefix() ?? "" : "") + relativePath;
|
|
54
87
|
}
|
|
55
88
|
attachmentFolderPath = normalize(normalizeSlashes(attachmentFolderPath));
|
|
56
|
-
attachmentFileBaseName = normalize(normalizeSlashes(attachmentFileBaseName));
|
|
89
|
+
const attachmentFileBaseName = normalize(normalizeSlashes(options.attachmentFileBaseName));
|
|
57
90
|
let folder = getFolderOrNull(app, attachmentFolderPath, true);
|
|
58
91
|
if (!folder && relativePath) {
|
|
59
|
-
|
|
60
|
-
folder = getFolder(app, attachmentFolderPath, true);
|
|
61
|
-
} else {
|
|
62
|
-
folder = await app.vault.createFolder(attachmentFolderPath);
|
|
63
|
-
}
|
|
92
|
+
folder = shouldSkipMissingAttachmentFolderCreation ? getFolder(app, attachmentFolderPath, true) : await app.vault.createFolder(attachmentFolderPath);
|
|
64
93
|
}
|
|
65
94
|
const prefix = folder?.getParentPrefix() ?? "";
|
|
66
95
|
return shouldSkipDuplicateCheck ? makeFileName(prefix + attachmentFileBaseName, attachmentFileExtension) : app.vault.getAvailablePath(prefix + attachmentFileBaseName, attachmentFileExtension);
|
|
@@ -82,4 +111,4 @@ export {
|
|
|
82
111
|
getAvailablePathForAttachments,
|
|
83
112
|
hasOwnAttachmentFolder
|
|
84
113
|
};
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0F0dGFjaG1lbnRQYXRoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggYXR0YWNobWVudCBwYXRocy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBwYXJlbnRGb2xkZXJQYXRoIH0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncy9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL0ZpbGVTeXN0ZW0udHMnO1xuXG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgbWFrZUZpbGVOYW1lXG59IGZyb20gJy4uL1BhdGgudHMnO1xuaW1wb3J0IHtcbiAgbm9ybWFsaXplLFxuICByZXBsYWNlQWxsLFxuICB0cmltU3RhcnRcbn0gZnJvbSAnLi4vU3RyaW5nLnRzJztcbmltcG9ydCB7XG4gIGdldEZpbGUsXG4gIGdldEZvbGRlcixcbiAgZ2V0Rm9sZGVyT3JOdWxsLFxuICBnZXRQYXRoXG59IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5cbi8qKlxuICogSXMgb3ZlcnJpZGRlbiB3cmFwcGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuZGVkV3JhcHBlciB7XG4gIC8qKlxuICAgKiBJcyBleHRlbmRlZC5cbiAgICovXG4gIGlzRXh0ZW5kZWQ6IHRydWU7XG59XG5cbi8qKlxuICogR2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gYXR0YWNobWVudEZpbGVCYXNlTmFtZSAtIEZpbGUgYmFzZSBuYW1lIG9mIHRoZSBhdHRhY2htZW50LlxuICogQHBhcmFtIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uIC0gRmlsZSBleHRlbnNpb24gb2YgdGhlIGF0dGFjaG1lbnQuXG4gKiBAcGFyYW0gbm90ZUZpbGUgLSBUaGUgbm90ZSBmaWxlIHRvIGF0dGFjaCB0by5cbiAqIEBwYXJhbSBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbiAtIFNob3VsZCBtaXNzaW5nIGF0dGFjaG1lbnQgZm9sZGVyIGNyZWF0aW9uIGJlIHNraXBwZWQuXG4gKiBAcGFyYW0gc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrIC0gU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRXh0ZW5kZWRGbiA9IChcbiAgYXR0YWNobWVudEZpbGVCYXNlTmFtZTogc3RyaW5nLFxuICBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogc3RyaW5nLFxuICBub3RlRmlsZTogbnVsbCB8IFRGaWxlLFxuICBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbj86IGJvb2xlYW4sXG4gIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW5cbikgPT4gUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIER1bW15IHBhdGguXG4gKi9cbmV4cG9ydCBjb25zdCBEVU1NWV9QQVRIID0gJ19fRFVNTVlfXyc7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmaWxlIHBhdGggZm9yIGFuIGF0dGFjaG1lbnQgd2l0aGluIGEgbm90ZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIGF0dGFjaG1lbnRQYXRoT3JGaWxlIC0gVGhlIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gKiBAcGFyYW0gbm90ZVBhdGhPckZpbGUgLSBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAqIEBwYXJhbSBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2sgLSBTaG91bGQgdGhlIGR1cGxpY2F0ZSBjaGVjayBiZSBza2lwcGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZmlsZSBwYXRoIG9mIHRoZSBhdHRhY2htZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXR0YWNobWVudEZpbGVQYXRoKFxuICBhcHA6IEFwcCxcbiAgYXR0YWNobWVudFBhdGhPckZpbGU6IFBhdGhPckZpbGUsXG4gIG5vdGVQYXRoT3JGaWxlOiBQYXRoT3JGaWxlLFxuICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2s6IGJvb2xlYW5cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGF0dGFjaG1lbnRQYXRoID0gZ2V0UGF0aChhcHAsIGF0dGFjaG1lbnRQYXRoT3JGaWxlKTtcbiAgY29uc3Qgbm90ZVBhdGggPSBnZXRQYXRoKGFwcCwgbm90ZVBhdGhPckZpbGUpO1xuICBjb25zdCBub3RlID0gZ2V0RmlsZShhcHAsIG5vdGVQYXRoLCB0cnVlKTtcbiAgY29uc3QgZXh0ID0gZXh0bmFtZShhdHRhY2htZW50UGF0aCk7XG4gIGNvbnN0IGZpbGVCYXNlTmFtZSA9IGJhc2VuYW1lKGF0dGFjaG1lbnRQYXRoLCBleHQpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgY29uc3QgaW50ZXJuYWxGbiA9IGFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHM7XG4gIGlmICgoaW50ZXJuYWxGbiBhcyBQYXJ0aWFsPEV4dGVuZGVkV3JhcHBlcj4pLmlzRXh0ZW5kZWQpIHtcbiAgICByZXR1cm4gKGludGVybmFsRm4gYXMgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRXh0ZW5kZWRGbikoZmlsZUJhc2VOYW1lLCBleHQuc2xpY2UoMSksIG5vdGUsIHRydWUsIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjayk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzKGFwcCwgZmlsZUJhc2VOYW1lLCBleHQuc2xpY2UoMSksIG5vdGUsIHRydWUsIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjayk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhdHRhY2htZW50IGZvbGRlciBwYXRoIGZvciBhIGdpdmVuIG5vdGUuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBub3RlUGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9mIHRoZSBub3RlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYXR0YWNobWVudCBmb2xkZXIgcGF0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKGFwcDogQXBwLCBub3RlUGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBwYXJlbnRGb2xkZXJQYXRoKGF3YWl0IGdldEF0dGFjaG1lbnRGaWxlUGF0aChhcHAsIERVTU1ZX1BBVEgsIG5vdGVQYXRoT3JGaWxlLCB0cnVlKSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBhdHRhY2htZW50RmlsZUJhc2VOYW1lIC0gRmlsZSBuYW1lIG9mIHRoZSBhdHRhY2htZW50LlxuICogQHBhcmFtIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uIC0gRXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICogQHBhcmFtIG5vdGVGaWxlIC0gVGhlIGZpbGUgdG8gYXR0YWNoIHRvLlxuICogQHBhcmFtIHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uIC0gU2hvdWxkIG1pc3NpbmcgYXR0YWNobWVudCBmb2xkZXIgY3JlYXRpb24gYmUgc2tpcHBlZC5cbiAqIEBwYXJhbSBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2sgLSBTaG91bGQgdGhlIGR1cGxpY2F0ZSBjaGVjayBiZSBza2lwcGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzKFxuICBhcHA6IEFwcCxcbiAgYXR0YWNobWVudEZpbGVCYXNlTmFtZTogc3RyaW5nLFxuICBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogc3RyaW5nLFxuICBub3RlRmlsZTogbnVsbCB8IFRGaWxlLFxuICBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbjogYm9vbGVhbixcbiAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiBib29sZWFuXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBsZXQgYXR0YWNobWVudEZvbGRlclBhdGggPSBhcHAudmF1bHQuZ2V0Q29uZmlnKCdhdHRhY2htZW50Rm9sZGVyUGF0aCcpIGFzIHN0cmluZztcbiAgY29uc3QgaXNDdXJyZW50Rm9sZGVyID0gYXR0YWNobWVudEZvbGRlclBhdGggPT09ICcuJyB8fCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gJy4vJztcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IG51bGw7XG5cbiAgaWYgKGF0dGFjaG1lbnRGb2xkZXJQYXRoLnN0YXJ0c1dpdGgoJy4vJykpIHtcbiAgICByZWxhdGl2ZVBhdGggPSB0cmltU3RhcnQoYXR0YWNobWVudEZvbGRlclBhdGgsICcuLycpO1xuICB9XG5cbiAgaWYgKGlzQ3VycmVudEZvbGRlcikge1xuICAgIGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gbm90ZUZpbGUgPyBub3RlRmlsZS5wYXJlbnQ/LnBhdGggPz8gJycgOiAnJztcbiAgfSBlbHNlIGlmIChyZWxhdGl2ZVBhdGgpIHtcbiAgICBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IChub3RlRmlsZSA/IG5vdGVGaWxlLnBhcmVudD8uZ2V0UGFyZW50UHJlZml4KCkgPz8gJycgOiAnJykgKyByZWxhdGl2ZVBhdGg7XG4gIH1cblxuICBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IG5vcm1hbGl6ZShub3JtYWxpemVTbGFzaGVzKGF0dGFjaG1lbnRGb2xkZXJQYXRoKSk7XG4gIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUgPSBub3JtYWxpemUobm9ybWFsaXplU2xhc2hlcyhhdHRhY2htZW50RmlsZUJhc2VOYW1lKSk7XG5cbiAgbGV0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbChhcHAsIGF0dGFjaG1lbnRGb2xkZXJQYXRoLCB0cnVlKTtcblxuICBpZiAoIWZvbGRlciAmJiByZWxhdGl2ZVBhdGgpIHtcbiAgICBpZiAoc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb24pIHtcbiAgICAgIGZvbGRlciA9IGdldEZvbGRlcihhcHAsIGF0dGFjaG1lbnRGb2xkZXJQYXRoLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9sZGVyID0gYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcihhdHRhY2htZW50Rm9sZGVyUGF0aCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJlZml4ID0gZm9sZGVyPy5nZXRQYXJlbnRQcmVmaXgoKSA/PyAnJztcbiAgcmV0dXJuIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICAgID8gbWFrZUZpbGVOYW1lKHByZWZpeCArIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uKVxuICAgIDogYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgocHJlZml4ICsgYXR0YWNobWVudEZpbGVCYXNlTmFtZSwgYXR0YWNobWVudEZpbGVFeHRlbnNpb24pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIG5vdGUgaGFzIGl0cyBvd24gYXR0YWNobWVudCBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIG5vdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG5vdGUgaGFzIGl0cyBvd24gYXR0YWNobWVudCBmb2xkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYXNPd25BdHRhY2htZW50Rm9sZGVyKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgYXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChhcHAsIHBhdGgpO1xuICBjb25zdCBkdW1teUF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoYXBwLCBqb2luKGRpcm5hbWUocGF0aCksICdEVU1NWV9GSUxFLm1kJykpO1xuICByZXR1cm4gYXR0YWNobWVudEZvbGRlclBhdGggIT09IGR1bW15QXR0YWNobWVudEZvbGRlclBhdGg7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGggYnkgY29tYmluaW5nIG11bHRpcGxlIHNsYXNoZXMgaW50byBhIHNpbmdsZSBzbGFzaCBhbmQgcmVtb3ZpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcy5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcGF0aC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU2xhc2hlcyhwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBwYXRoID0gcmVwbGFjZUFsbChwYXRoLCAvKD86W1xcXFwvXSkrL2csICcvJyk7XG4gIHBhdGggPSByZXBsYWNlQWxsKHBhdGgsIC9eXFwvK3xcXC8rJC9nLCAnJyk7XG4gIHJldHVybiBwYXRoIHx8ICcvJztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFXQSxTQUFTLHdCQUF3QjtBQUlqQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFpQ0EsTUFBTSxhQUFhO0FBVzFCLGVBQXNCLHNCQUNwQixLQUNBLHNCQUNBLGdCQUNBLDBCQUNpQjtBQUNqQixRQUFNLGlCQUFpQixRQUFRLEtBQUssb0JBQW9CO0FBQ3hELFFBQU0sV0FBVyxRQUFRLEtBQUssY0FBYztBQUM1QyxRQUFNLE9BQU8sUUFBUSxLQUFLLFVBQVUsSUFBSTtBQUN4QyxRQUFNLE1BQU0sUUFBUSxjQUFjO0FBQ2xDLFFBQU0sZUFBZSxTQUFTLGdCQUFnQixHQUFHO0FBR2pELFFBQU0sYUFBYSxJQUFJLE1BQU07QUFDN0IsTUFBSyxXQUF3QyxZQUFZO0FBQ3ZELFdBQVEsV0FBd0QsY0FBYyxJQUFJLE1BQU0sQ0FBQyxHQUFHLE1BQU0sTUFBTSx3QkFBd0I7QUFBQSxFQUNsSTtBQUVBLFNBQU8sTUFBTSwrQkFBK0IsS0FBSyxjQUFjLElBQUksTUFBTSxDQUFDLEdBQUcsTUFBTSxNQUFNLHdCQUF3QjtBQUNuSDtBQVNBLGVBQXNCLHdCQUF3QixLQUFVLGdCQUE2QztBQUNuRyxTQUFPLGlCQUFpQixNQUFNLHNCQUFzQixLQUFLLFlBQVksZ0JBQWdCLElBQUksQ0FBQztBQUM1RjtBQWFBLGVBQXNCLCtCQUNwQixLQUNBLHdCQUNBLHlCQUNBLFVBQ0EsMkNBQ0EsMEJBQ2lCO0FBQ2pCLE1BQUksdUJBQXVCLElBQUksTUFBTSxVQUFVLHNCQUFzQjtBQUNyRSxRQUFNLGtCQUFrQix5QkFBeUIsT0FBTyx5QkFBeUI7QUFDakYsTUFBSSxlQUFlO0FBRW5CLE1BQUkscUJBQXFCLFdBQVcsSUFBSSxHQUFHO0FBQ3pDLG1CQUFlLFVBQVUsc0JBQXNCLElBQUk7QUFBQSxFQUNyRDtBQUVBLE1BQUksaUJBQWlCO0FBQ25CLDJCQUF1QixXQUFXLFNBQVMsUUFBUSxRQUFRLEtBQUs7QUFBQSxFQUNsRSxXQUFXLGNBQWM7QUFDdkIsNEJBQXdCLFdBQVcsU0FBUyxRQUFRLGdCQUFnQixLQUFLLEtBQUssTUFBTTtBQUFBLEVBQ3RGO0FBRUEseUJBQXVCLFVBQVUsaUJBQWlCLG9CQUFvQixDQUFDO0FBQ3ZFLDJCQUF5QixVQUFVLGlCQUFpQixzQkFBc0IsQ0FBQztBQUUzRSxNQUFJLFNBQVMsZ0JBQWdCLEtBQUssc0JBQXNCLElBQUk7QUFFNUQsTUFBSSxDQUFDLFVBQVUsY0FBYztBQUMzQixRQUFJLDJDQUEyQztBQUM3QyxlQUFTLFVBQVUsS0FBSyxzQkFBc0IsSUFBSTtBQUFBLElBQ3BELE9BQU87QUFDTCxlQUFTLE1BQU0sSUFBSSxNQUFNLGFBQWEsb0JBQW9CO0FBQUEsSUFDNUQ7QUFBQSxFQUNGO0FBRUEsUUFBTSxTQUFTLFFBQVEsZ0JBQWdCLEtBQUs7QUFDNUMsU0FBTywyQkFDSCxhQUFhLFNBQVMsd0JBQXdCLHVCQUF1QixJQUNyRSxJQUFJLE1BQU0saUJBQWlCLFNBQVMsd0JBQXdCLHVCQUF1QjtBQUN6RjtBQVNBLGVBQXNCLHVCQUF1QixLQUFVLE1BQWdDO0FBQ3JGLFFBQU0sdUJBQXVCLE1BQU0sd0JBQXdCLEtBQUssSUFBSTtBQUNwRSxRQUFNLDRCQUE0QixNQUFNLHdCQUF3QixLQUFLLEtBQUssUUFBUSxJQUFJLEdBQUcsZUFBZSxDQUFDO0FBQ3pHLFNBQU8seUJBQXlCO0FBQ2xDO0FBUUEsU0FBUyxpQkFBaUIsTUFBc0I7QUFDOUMsU0FBTyxXQUFXLE1BQU0sZUFBZSxHQUFHO0FBQzFDLFNBQU8sV0FBVyxNQUFNLGNBQWMsRUFBRTtBQUN4QyxTQUFPLFFBQVE7QUFDakI7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0F0dGFjaG1lbnRQYXRoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggYXR0YWNobWVudCBwYXRocy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRmlsZVN0YXRzLFxuICBWYXVsdFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICdvYnNpZGlhbi10eXBpbmdzL2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5cbmltcG9ydCB7XG4gIGJhc2VuYW1lLFxuICBkaXJuYW1lLFxuICBleHRuYW1lLFxuICBqb2luLFxuICBtYWtlRmlsZU5hbWVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQge1xuICBub3JtYWxpemUsXG4gIHJlcGxhY2VBbGwsXG4gIHRyaW1TdGFydFxufSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRGb2xkZXJPck51bGwsXG4gIGdldFBhdGhcbn0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcblxuLyoqXG4gKiBHZXQgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzIGV4dGVuZGVkIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGdldCBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMgZXh0ZW5kZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRm4gPSAob3B0aW9uczogR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRXh0ZW5kZWRGbk9wdGlvbnMpID0+IFByb21pc2U8c3RyaW5nPjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZ2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cyBleHRlbmRlZCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNFeHRlbmRlZEZuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGJhc2UgbmFtZSBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb250ZW50IG9mIHRoZSBhdHRhY2htZW50IGZpbGUuXG4gICAqL1xuICBhdHRhY2htZW50RmlsZUNvbnRlbnQ/OiBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdGF0cyBvZiB0aGUgYXR0YWNobWVudCBmaWxlLlxuICAgKi9cbiAgYXR0YWNobWVudEZpbGVTdGF0PzogRmlsZVN0YXRzIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZS5cbiAgICovXG4gIG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZ2VuZXJhdGVkIGF0dGFjaG1lbnQgZmlsZSBuYW1lIGJlIHNraXBwZWQuXG4gICAqL1xuICBzaG91bGRTa2lwR2VuZXJhdGVkQXR0YWNobWVudEZpbGVOYW1lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdWxkIG1pc3NpbmcgYXR0YWNobWVudCBmb2xkZXIgY3JlYXRpb24gYmUgc2tpcHBlZC5cbiAgICovXG4gIHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIHtAbGluayBWYXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHN9IGV4dGVuZGVkIHdyYXBwZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRm5FeHRlbmRlZFdyYXBwZXIgZXh0ZW5kcyBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGbiB7XG4gIC8qKlxuICAgKiBBbiBleHRlbmRlZCBmdW5jdGlvbi5cbiAgICovXG4gIGV4dGVuZGVkOiBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNFeHRlbmRlZEZuO1xufVxuXG50eXBlIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0ZuID0gVmF1bHRbJ2dldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50cyddO1xuXG4vKipcbiAqIER1bW15IHBhdGguXG4gKi9cbmV4cG9ydCBjb25zdCBEVU1NWV9QQVRIID0gJ19fRFVNTVlfXyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGdldEF0dGFjaG1lbnRGaWxlUGF0aCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBdHRhY2htZW50RmlsZVBhdGhPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG4gIC8qKlxuICAgKiBBIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICBhdHRhY2htZW50UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbiAgLyoqXG4gICAqIEEgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIG5vdGVQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjazogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c09wdGlvbnMge1xuICAvKipcbiAgICogQW4gT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcbiAgLyoqXG4gICAqIEEgYmFzZSBuYW1lIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgYXR0YWNobWVudEZpbGVCYXNlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IHN0cmluZztcbiAgLyoqXG4gICAqIEEgZmlsZSB0byBhdHRhY2ggdG8uXG4gICAqL1xuICBub3RlUGF0aE9yRmlsZTogbnVsbCB8IFBhdGhPckZpbGU7XG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIGR1cGxpY2F0ZSBjaGVjayBiZSBza2lwcGVkLlxuICAgKi9cbiAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNob3VsZCBtaXNzaW5nIGF0dGFjaG1lbnQgZm9sZGVyIGNyZWF0aW9uIGJlIHNraXBwZWQuXG4gICAqL1xuICBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmaWxlIHBhdGggZm9yIGFuIGF0dGFjaG1lbnQgd2l0aGluIGEgbm90ZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmaWxlIHBhdGggZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBmaWxlIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdHRhY2htZW50RmlsZVBhdGgob3B0aW9uczogR2V0QXR0YWNobWVudEZpbGVQYXRoT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBhdHRhY2htZW50UGF0aCA9IGdldFBhdGgoYXBwLCBhdHRhY2htZW50UGF0aE9yRmlsZSk7XG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uID0gZXh0bmFtZShhdHRhY2htZW50UGF0aCk7XG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUgPSBiYXNlbmFtZShhdHRhY2htZW50UGF0aCwgYXR0YWNobWVudEZpbGVFeHRlbnNpb24pO1xuICBjb25zdCBhdHRhY2htZW50RmlsZSA9IGdldEZpbGVPck51bGwoYXBwLCBhdHRhY2htZW50UGF0aCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICBjb25zdCBpbnRlcm5hbEZuID0gYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50cztcbiAgY29uc3QgZXh0ZW5kZWRGbiA9IChpbnRlcm5hbEZuIGFzIFBhcnRpYWw8R2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRm5FeHRlbmRlZFdyYXBwZXI+KS5leHRlbmRlZDtcbiAgaWYgKGV4dGVuZGVkRm4pIHtcbiAgICByZXR1cm4gZXh0ZW5kZWRGbih7XG4gICAgICBhdHRhY2htZW50RmlsZUJhc2VOYW1lLFxuICAgICAgYXR0YWNobWVudEZpbGVDb250ZW50OiBhdHRhY2htZW50RmlsZSA/IGF3YWl0IGFwcC52YXVsdC5yZWFkQmluYXJ5KGF0dGFjaG1lbnRGaWxlKSA6IHVuZGVmaW5lZCxcbiAgICAgIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uOiBhdHRhY2htZW50RmlsZUV4dGVuc2lvbi5zbGljZSgxKSxcbiAgICAgIGF0dGFjaG1lbnRGaWxlU3RhdDogYXR0YWNobWVudEZpbGU/LnN0YXQsXG4gICAgICBub3RlUGF0aE9yRmlsZSxcbiAgICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjayxcbiAgICAgIHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzKHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudEZpbGVCYXNlTmFtZSxcbiAgICBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogYXR0YWNobWVudEZpbGVFeHRlbnNpb24uc2xpY2UoMSksXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrLFxuICAgIHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uOiB0cnVlXG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXR0YWNobWVudCBmb2xkZXIgcGF0aCBmb3IgYSBnaXZlbiBub3RlLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gbm90ZVBhdGhPckZpbGUgLSBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGguXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChhcHA6IEFwcCwgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcGFyZW50Rm9sZGVyUGF0aChcbiAgICBhd2FpdCBnZXRBdHRhY2htZW50RmlsZVBhdGgoe1xuICAgICAgYXBwLFxuICAgICAgYXR0YWNobWVudFBhdGhPckZpbGU6IERVTU1ZX1BBVEgsXG4gICAgICBub3RlUGF0aE9yRmlsZSxcbiAgICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjazogdHJ1ZVxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgZ2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50cyhvcHRpb25zOiBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhdHRhY2htZW50RmlsZUV4dGVuc2lvbixcbiAgICBub3RlUGF0aE9yRmlsZSxcbiAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2ssXG4gICAgc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb25cbiAgfSA9IG9wdGlvbnM7XG4gIGxldCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IGFwcC52YXVsdC5nZXRDb25maWcoJ2F0dGFjaG1lbnRGb2xkZXJQYXRoJykgYXMgc3RyaW5nO1xuICBjb25zdCBpc0N1cnJlbnRGb2xkZXIgPSBhdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gJy4nIHx8IGF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSAnLi8nO1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBhdHRhY2htZW50Rm9sZGVyUGF0aC5zdGFydHNXaXRoKCcuLycpID8gdHJpbVN0YXJ0KGF0dGFjaG1lbnRGb2xkZXJQYXRoLCAnLi8nKSA6IG51bGw7XG5cbiAgY29uc3Qgbm90ZUZpbGVPck51bGwgPSBnZXRGaWxlT3JOdWxsKGFwcCwgbm90ZVBhdGhPckZpbGUpO1xuXG4gIGlmIChpc0N1cnJlbnRGb2xkZXIpIHtcbiAgICBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IG5vdGVGaWxlT3JOdWxsID8gbm90ZUZpbGVPck51bGwucGFyZW50Py5wYXRoID8/ICcnIDogJyc7XG4gIH0gZWxzZSBpZiAocmVsYXRpdmVQYXRoKSB7XG4gICAgYXR0YWNobWVudEZvbGRlclBhdGggPSAobm90ZUZpbGVPck51bGwgPyBub3RlRmlsZU9yTnVsbC5wYXJlbnQ/LmdldFBhcmVudFByZWZpeCgpID8/ICcnIDogJycpICsgcmVsYXRpdmVQYXRoO1xuICB9XG5cbiAgYXR0YWNobWVudEZvbGRlclBhdGggPSBub3JtYWxpemUobm9ybWFsaXplU2xhc2hlcyhhdHRhY2htZW50Rm9sZGVyUGF0aCkpO1xuICBjb25zdCBhdHRhY2htZW50RmlsZUJhc2VOYW1lID0gbm9ybWFsaXplKG5vcm1hbGl6ZVNsYXNoZXMob3B0aW9ucy5hdHRhY2htZW50RmlsZUJhc2VOYW1lKSk7XG5cbiAgbGV0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbChhcHAsIGF0dGFjaG1lbnRGb2xkZXJQYXRoLCB0cnVlKTtcblxuICBpZiAoIWZvbGRlciAmJiByZWxhdGl2ZVBhdGgpIHtcbiAgICBmb2xkZXIgPSBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvblxuICAgICAgPyBnZXRGb2xkZXIoYXBwLCBhdHRhY2htZW50Rm9sZGVyUGF0aCwgdHJ1ZSlcbiAgICAgIDogYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcihhdHRhY2htZW50Rm9sZGVyUGF0aCk7XG4gIH1cblxuICBjb25zdCBwcmVmaXggPSBmb2xkZXI/LmdldFBhcmVudFByZWZpeCgpID8/ICcnO1xuICByZXR1cm4gc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrXG4gICAgPyBtYWtlRmlsZU5hbWUocHJlZml4ICsgYXR0YWNobWVudEZpbGVCYXNlTmFtZSwgYXR0YWNobWVudEZpbGVFeHRlbnNpb24pXG4gICAgOiBhcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChwcmVmaXggKyBhdHRhY2htZW50RmlsZUJhc2VOYW1lLCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbm90ZSBoYXMgaXRzIG93biBhdHRhY2htZW50IGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbm90ZSBoYXMgaXRzIG93biBhdHRhY2htZW50IGZvbGRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc093bkF0dGFjaG1lbnRGb2xkZXIoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKGFwcCwgcGF0aCk7XG4gIGNvbnN0IGR1bW15QXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChhcHAsIGpvaW4oZGlybmFtZShwYXRoKSwgJ0RVTU1ZX0ZJTEUubWQnKSk7XG4gIHJldHVybiBhdHRhY2htZW50Rm9sZGVyUGF0aCAhPT0gZHVtbXlBdHRhY2htZW50Rm9sZGVyUGF0aDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCBieSBjb21iaW5pbmcgbXVsdGlwbGUgc2xhc2hlcyBpbnRvIGEgc2luZ2xlIHNsYXNoIGFuZCByZW1vdmluZyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gUGF0aCB0byBub3JtYWxpemUuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXRoLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTbGFzaGVzKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHBhdGggPSByZXBsYWNlQWxsKHBhdGgsIC8oPzpbXFxcXC9dKSsvZywgJy8nKTtcbiAgcGF0aCA9IHJlcGxhY2VBbGwocGF0aCwgL15cXC8rfFxcLyskL2csICcnKTtcbiAgcmV0dXJuIHBhdGggfHwgJy8nO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQVlBLFNBQVMsd0JBQXdCO0FBSWpDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQXNFQSxNQUFNLGFBQWE7QUE0RDFCLGVBQXNCLHNCQUFzQixTQUF3RDtBQUNsRyxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLFFBQU0saUJBQWlCLFFBQVEsS0FBSyxvQkFBb0I7QUFD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
|
|
@@ -173,7 +173,12 @@ async function fillRenameMap(app, oldPath, newPath, renameMap, oldPathLinks, abo
|
|
|
173
173
|
}
|
|
174
174
|
let newAttachmentFilePath;
|
|
175
175
|
if (settings.shouldRenameAttachmentFiles) {
|
|
176
|
-
newAttachmentFilePath = await getAttachmentFilePath(
|
|
176
|
+
newAttachmentFilePath = await getAttachmentFilePath({
|
|
177
|
+
app,
|
|
178
|
+
attachmentPathOrFile: oldAttachmentFile,
|
|
179
|
+
notePathOrFile: newPath,
|
|
180
|
+
shouldSkipDuplicateCheck: true
|
|
181
|
+
});
|
|
177
182
|
abortSignal.throwIfAborted();
|
|
178
183
|
} else {
|
|
179
184
|
const relativePath = isOldAttachmentFolderAtRoot ? oldAttachmentFile.path : relative(oldAttachmentFolderPath, oldAttachmentFile.path);
|
|
@@ -553,4 +558,4 @@ export {
|
|
|
553
558
|
EmptyAttachmentFolderBehavior,
|
|
554
559
|
registerRenameDeleteHandlers
|
|
555
560
|
};
|
|
556
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIHJlbmFtZSBhbmQgZGVsZXRlIGV2ZW50cyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQ2FjaGVkTWV0YWRhdGEsXG4gIEZpbGVNYW5hZ2VyLFxuICBQbHVnaW4sXG4gIFJlZmVyZW5jZSxcbiAgVEFic3RyYWN0RmlsZSxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUge1xuICBMaW5rVXBkYXRlLFxuICBMaW5rVXBkYXRlc0hhbmRsZXJcbn0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncyc7XG5cbmltcG9ydCB7IFZhdWx0IH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgSW50ZXJuYWxQbHVnaW5OYW1lIH0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncy9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIFVwZGF0ZUxpbmtPcHRpb25zLFxuICBVcGRhdGVMaW5rc0luRmlsZU9wdGlvbnNcbn0gZnJvbSAnLi9MaW5rLnRzJztcblxuaW1wb3J0IHsgYWJvcnRTaWduYWxOZXZlciB9IGZyb20gJy4uL0Fib3J0Q29udHJvbGxlci50cyc7XG5pbXBvcnQgeyBmaWx0ZXJJblBsYWNlIH0gZnJvbSAnLi4vQXJyYXkudHMnO1xuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICcuLi9EZWJ1Zy50cyc7XG5pbXBvcnQge1xuICBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMsXG4gIHRvSnNvblxufSBmcm9tICcuLi9PYmplY3RVdGlscy50cyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL0FwcC50cyc7XG5pbXBvcnQge1xuICBnZXRBdHRhY2htZW50RmlsZVBhdGgsXG4gIGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoLFxuICBoYXNPd25BdHRhY2htZW50Rm9sZGVyXG59IGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyT3JOdWxsLFxuICBpc0ZpbGUsXG4gIGlzTWFya2Rvd25GaWxlLFxuICBpc05vdGVcbn0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIGVkaXRMaW5rcyxcbiAgZXh0cmFjdExpbmtGaWxlLFxuICB1cGRhdGVMaW5rLFxuICB1cGRhdGVMaW5rc0luRmlsZVxufSBmcm9tICcuL0xpbmsudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlLFxuICB0ZW1wUmVnaXN0ZXJGaWxlc0FuZFJ1blxufSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQYXRjaCB9IGZyb20gJy4vTW9ua2V5QXJvdW5kLnRzJztcbmltcG9ydCB7IGFkZFRvUXVldWUgfSBmcm9tICcuL1F1ZXVlLnRzJztcbmltcG9ydCB7XG4gIGdldFNhZmVSZW5hbWVQYXRoLFxuICByZW5hbWVTYWZlXG59IGZyb20gJy4vVmF1bHQudHMnO1xuaW1wb3J0IHtcbiAgZGVsZXRlRW1wdHlGb2xkZXJIaWVyYXJjaHksXG4gIGRlbGV0ZVNhZmVcbn0gZnJvbSAnLi9WYXVsdEV4LnRzJztcblxuY29uc3QgZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXAgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVkTWV0YWRhdGE+KCk7XG5jb25zdCBoYW5kbGVkUmVuYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuY29uc3QgaW50ZXJydXB0ZWRSZW5hbWVzTWFwID0gbmV3IE1hcDxzdHJpbmcsIEludGVycnVwdGVkUmVuYW1lW10+KCk7XG5cbi8qKlxuICogQSBiZWhhdmlvciBvZiB0aGUgcmVuYW1lL2RlbGV0ZSBoYW5kbGVyIHdoZW4gZGVsZXRpbmcgZW1wdHkgYXR0YWNobWVudCBmb2xkZXJzLlxuICovXG5leHBvcnQgZW51bSBFbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvciB7XG4gIC8qKlxuICAgKiBEZWxldGUgdGhlIGVtcHR5IGF0dGFjaG1lbnQgZm9sZGVyLlxuICAgKi9cbiAgRGVsZXRlID0gJ0RlbGV0ZScsXG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgZW1wdHkgYXR0YWNobWVudCBmb2xkZXIgYW5kIGFsbCBpdHMgZW1wdHkgcGFyZW50cy5cbiAgICovXG4gIERlbGV0ZVdpdGhFbXB0eVBhcmVudHMgPSAnRGVsZXRlV2l0aEVtcHR5UGFyZW50cycsXG5cbiAgLyoqXG4gICAqIEtlZXAgdGhlIGVtcHR5IGF0dGFjaG1lbnQgZm9sZGVyLlxuICAgKi9cbiAgS2VlcCA9ICdLZWVwJ1xufVxuXG4vKipcbiAqIFNldHRpbmdzIGZvciB0aGUgcmVuYW1lL2RlbGV0ZSBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBBIGJlaGF2aW9yIG9mIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXIgd2hlbiBkZWxldGluZyBlbXB0eSBhdHRhY2htZW50IGZvbGRlcnMuXG4gICAqL1xuICBlbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvcjogRW1wdHlBdHRhY2htZW50Rm9sZGVyQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBhdGggaXMgYSBub3RlLlxuICAgKi9cbiAgaXNOb3RlKHBhdGg6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaWdub3JlIHRoZSBwYXRoLlxuICAgKi9cbiAgaXNQYXRoSWdub3JlZChwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRlbGV0ZSBjb25mbGljdGluZyBhdHRhY2htZW50cy5cbiAgICovXG4gIHNob3VsZERlbGV0ZUNvbmZsaWN0aW5nQXR0YWNobWVudHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaGFuZGxlIGRlbGV0aW9ucy5cbiAgICovXG4gIHNob3VsZEhhbmRsZURlbGV0aW9uczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBoYW5kbGUgcmVuYW1lcy5cbiAgICovXG4gIHNob3VsZEhhbmRsZVJlbmFtZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVuYW1lIGF0dGFjaG1lbnQgZmlsZXMgd2hlbiBhIG5vdGUgaXMgcmVuYW1lZC5cbiAgICovXG4gIHNob3VsZFJlbmFtZUF0dGFjaG1lbnRGaWxlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW5hbWUgYXR0YWNobWVudCBmb2xkZXIgd2hlbiBhIG5vdGUgaXMgcmVuYW1lZC5cbiAgICovXG4gIHNob3VsZFJlbmFtZUF0dGFjaG1lbnRGb2xkZXI6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXBkYXRlIGZpbGUgbmFtZSBhbGlhc2VzIHdoZW4gYSBub3RlIGlzIHJlbmFtZWQuXG4gICAqL1xuICBzaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzZXM6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBYm9ydGFibGVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5pbnRlcmZhY2UgSW50ZXJydXB0ZWRSZW5hbWUge1xuICBjb21iaW5lZEJhY2tsaW5rc01hcDogTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj47XG4gIG9sZFBhdGg6IHN0cmluZztcbn1cblxudHlwZSBSdW5Bc3luY0xpbmtVcGRhdGVGbiA9IEZpbGVNYW5hZ2VyWydydW5Bc3luY0xpbmtVcGRhdGUnXTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIHJlbmFtZS9kZWxldGUgaGFuZGxlcnMuXG4gKlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gaW5zdGFuY2UuXG4gKiBAcGFyYW0gc2V0dGluZ3NCdWlsZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHNldHRpbmdzIGZvciB0aGUgcmVuYW1lIGRlbGV0ZSBoYW5kbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSZW5hbWVEZWxldGVIYW5kbGVycyhwbHVnaW46IEFib3J0YWJsZVBsdWdpbiwgc2V0dGluZ3NCdWlsZGVyOiAoKSA9PiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4pOiB2b2lkIHtcbiAgY29uc3QgcmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAgPSBnZXRSZW5hbWVEZWxldGVIYW5kbGVyc01hcChwbHVnaW4uYXBwKTtcbiAgY29uc3QgcGx1Z2luSWQgPSBwbHVnaW4ubWFuaWZlc3QuaWQ7XG5cbiAgcmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAuc2V0KHBsdWdpbklkLCBzZXR0aW5nc0J1aWxkZXIpO1xuICBsb2dSZWdpc3RlcmVkSGFuZGxlcnMocGx1Z2luLmFwcCk7XG5cbiAgcGx1Z2luLnJlZ2lzdGVyKCgpID0+IHtcbiAgICByZW5hbWVEZWxldGVIYW5kbGVyc01hcC5kZWxldGUocGx1Z2luSWQpO1xuICAgIGxvZ1JlZ2lzdGVyZWRIYW5kbGVycyhwbHVnaW4uYXBwKTtcbiAgfSk7XG5cbiAgY29uc3QgYXBwID0gcGx1Z2luLmFwcDtcbiAgY29uc3QgYWJvcnRTaWduYWwgPSBwbHVnaW4uYWJvcnRTaWduYWwgPz8gYWJvcnRTaWduYWxOZXZlcigpO1xuXG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbignZGVsZXRlJywgKGZpbGUpID0+IHtcbiAgICAgIGhhbmRsZURlbGV0ZUlmRW5hYmxlZChwbHVnaW4sIGZpbGUsIGFib3J0U2lnbmFsKTtcbiAgICB9KVxuICApO1xuXG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbigncmVuYW1lJywgKGZpbGUsIG9sZFBhdGgpID0+IHtcbiAgICAgIGhhbmRsZVJlbmFtZUlmRW5hYmxlZChwbHVnaW4sIGZpbGUsIG9sZFBhdGgsIGFib3J0U2lnbmFsKTtcbiAgICB9KVxuICApO1xuXG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC5tZXRhZGF0YUNhY2hlLm9uKCdkZWxldGVkJywgKGZpbGUsIHByZXZDYWNoZSkgPT4ge1xuICAgICAgaGFuZGxlTWV0YWRhdGFEZWxldGVkSWZFbmFibGVkKHBsdWdpbiwgZmlsZSwgcHJldkNhY2hlKTtcbiAgICB9KVxuICApO1xuXG4gIHJlZ2lzdGVyUGF0Y2gocGx1Z2luLCBhcHAuZmlsZU1hbmFnZXIsIHtcbiAgICBydW5Bc3luY0xpbmtVcGRhdGU6IChuZXh0OiBSdW5Bc3luY0xpbmtVcGRhdGVGbik6IFJ1bkFzeW5jTGlua1VwZGF0ZUZuID0+IHtcbiAgICAgIHJldHVybiAobGlua1VwZGF0ZXNIYW5kbGVyKSA9PiBydW5Bc3luY0xpbmtVcGRhdGUoYXBwLCBuZXh0LCBsaW5rVXBkYXRlc0hhbmRsZXIpO1xuICAgIH1cbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFudXBQYXJlbnRGb2xkZXJzKGFwcDogQXBwLCBwYXJlbnRGb2xkZXJQYXRoczogc3RyaW5nW10sIG5vdGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhhcHApO1xuICBpZiAoc2V0dGluZ3MuZW1wdHlBdHRhY2htZW50Rm9sZGVyQmVoYXZpb3IgPT09IEVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yLktlZXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBwYXJlbnRGb2xkZXJQYXRoIG9mIHBhcmVudEZvbGRlclBhdGhzKSB7XG4gICAgc3dpdGNoIChzZXR0aW5ncy5lbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvcikge1xuICAgICAgY2FzZSBFbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvci5EZWxldGU6XG4gICAgICAgIGF3YWl0IGRlbGV0ZVNhZmUoYXBwLCBwYXJlbnRGb2xkZXJQYXRoLCBub3RlUGF0aCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yLkRlbGV0ZVdpdGhFbXB0eVBhcmVudHM6XG4gICAgICAgIGF3YWl0IGRlbGV0ZUVtcHR5Rm9sZGVySGllcmFyY2h5KGFwcCwgcGFyZW50Rm9sZGVyUGF0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnRpbnVlSW50ZXJydXB0ZWRSZW5hbWVzKFxuICBhcHA6IEFwcCxcbiAgb2xkUGF0aDogc3RyaW5nLFxuICBuZXdQYXRoOiBzdHJpbmcsXG4gIG9sZFBhdGhCYWNrbGlua3NNYXA6IE1hcDxzdHJpbmcsIFJlZmVyZW5jZVtdPixcbiAgb2xkUGF0aExpbmtzOiBSZWZlcmVuY2VbXVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGludGVycnVwdGVkUmVuYW1lcyA9IGludGVycnVwdGVkUmVuYW1lc01hcC5nZXQob2xkUGF0aCk7XG4gIGlmIChpbnRlcnJ1cHRlZFJlbmFtZXMpIHtcbiAgICBpbnRlcnJ1cHRlZFJlbmFtZXNNYXAuZGVsZXRlKG9sZFBhdGgpO1xuICAgIGZvciAoY29uc3QgaW50ZXJydXB0ZWRSZW5hbWUgb2YgaW50ZXJydXB0ZWRSZW5hbWVzKSB7XG4gICAgICBhd2FpdCBoYW5kbGVSZW5hbWVBc3luYyhhcHAsIGludGVycnVwdGVkUmVuYW1lLm9sZFBhdGgsIG5ld1BhdGgsIG9sZFBhdGhCYWNrbGlua3NNYXAsIG9sZFBhdGhMaW5rcywgaW50ZXJydXB0ZWRSZW5hbWUuY29tYmluZWRCYWNrbGlua3NNYXApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmaWxsUmVuYW1lTWFwKFxuICBhcHA6IEFwcCxcbiAgb2xkUGF0aDogc3RyaW5nLFxuICBuZXdQYXRoOiBzdHJpbmcsXG4gIHJlbmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPixcbiAgb2xkUGF0aExpbmtzOiBSZWZlcmVuY2VbXSxcbiAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgcmVuYW1lTWFwLnNldChvbGRQYXRoLCBuZXdQYXRoKTtcblxuICBpZiAoIWlzTm90ZUV4KGFwcCwgb2xkUGF0aCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzZXR0aW5ncyA9IGdldFNldHRpbmdzKGFwcCk7XG5cbiAgY29uc3Qgb2xkQXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChhcHAsIG9sZFBhdGgpO1xuICBjb25zdCBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCA9IHNldHRpbmdzLnNob3VsZFJlbmFtZUF0dGFjaG1lbnRGb2xkZXJcbiAgICA/IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKGFwcCwgbmV3UGF0aClcbiAgICA6IG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoO1xuXG4gIGNvbnN0IGlzT2xkQXR0YWNobWVudEZvbGRlckF0Um9vdCA9IG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSAnLyc7XG5cbiAgY29uc3Qgb2xkQXR0YWNobWVudEZvbGRlciA9IGdldEZvbGRlck9yTnVsbChhcHAsIG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoKTtcblxuICBpZiAoIW9sZEF0dGFjaG1lbnRGb2xkZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob2xkQXR0YWNobWVudEZvbGRlclBhdGggPT09IG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoICYmICFzZXR0aW5ncy5zaG91bGRSZW5hbWVBdHRhY2htZW50RmlsZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvbGRBdHRhY2htZW50RmlsZXM6IFRGaWxlW10gPSBbXTtcblxuICBpZiAoYXdhaXQgaGFzT3duQXR0YWNobWVudEZvbGRlcihhcHAsIG9sZFBhdGgpKSB7XG4gICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKG9sZEF0dGFjaG1lbnRGb2xkZXIsIChvbGRBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGlmIChpc0ZpbGUob2xkQXR0YWNobWVudEZpbGUpKSB7XG4gICAgICAgIG9sZEF0dGFjaG1lbnRGaWxlcy5wdXNoKG9sZEF0dGFjaG1lbnRGaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IG9sZFBhdGhMaW5rIG9mIG9sZFBhdGhMaW5rcykge1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRGaWxlID0gZXh0cmFjdExpbmtGaWxlKGFwcCwgb2xkUGF0aExpbmssIG9sZFBhdGgpO1xuICAgICAgaWYgKCFvbGRBdHRhY2htZW50RmlsZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzT2xkQXR0YWNobWVudEZvbGRlckF0Um9vdCB8fCBvbGRBdHRhY2htZW50RmlsZS5wYXRoLnN0YXJ0c1dpdGgob2xkQXR0YWNobWVudEZvbGRlclBhdGgpKSB7XG4gICAgICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRCYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShhcHAsIG9sZEF0dGFjaG1lbnRGaWxlKTtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgaWYgKG9sZEF0dGFjaG1lbnRCYWNrbGlua3Mua2V5cygpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIG9sZEF0dGFjaG1lbnRGaWxlcy5wdXNoKG9sZEF0dGFjaG1lbnRGaWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qgb2xkQXR0YWNobWVudEZpbGUgb2Ygb2xkQXR0YWNobWVudEZpbGVzKSB7XG4gICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICBpZiAoaXNOb3RlRXgoYXBwLCBvbGRBdHRhY2htZW50RmlsZS5wYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IG5ld0F0dGFjaG1lbnRGaWxlUGF0aDogc3RyaW5nO1xuICAgIGlmIChzZXR0aW5ncy5zaG91bGRSZW5hbWVBdHRhY2htZW50RmlsZXMpIHtcbiAgICAgIG5ld0F0dGFjaG1lbnRGaWxlUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGaWxlUGF0aChhcHAsIG9sZEF0dGFjaG1lbnRGaWxlLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGlzT2xkQXR0YWNobWVudEZvbGRlckF0Um9vdCA/IG9sZEF0dGFjaG1lbnRGaWxlLnBhdGggOiByZWxhdGl2ZShvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCwgb2xkQXR0YWNobWVudEZpbGUucGF0aCk7XG4gICAgICBjb25zdCBuZXdGb2xkZXIgPSBqb2luKG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoLCBkaXJuYW1lKHJlbGF0aXZlUGF0aCkpO1xuICAgICAgbmV3QXR0YWNobWVudEZpbGVQYXRoID0gam9pbihuZXdGb2xkZXIsIG9sZEF0dGFjaG1lbnRGaWxlLm5hbWUpO1xuICAgIH1cblxuICAgIGlmIChvbGRBdHRhY2htZW50RmlsZS5wYXRoID09PSBuZXdBdHRhY2htZW50RmlsZVBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoc2V0dGluZ3Muc2hvdWxkRGVsZXRlQ29uZmxpY3RpbmdBdHRhY2htZW50cykge1xuICAgICAgY29uc3QgbmV3QXR0YWNobWVudEZpbGUgPSBnZXRGaWxlT3JOdWxsKGFwcCwgbmV3QXR0YWNobWVudEZpbGVQYXRoKTtcbiAgICAgIGlmIChuZXdBdHRhY2htZW50RmlsZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFJlbW92aW5nIGNvbmZsaWN0aW5nIGF0dGFjaG1lbnQgJHtuZXdBdHRhY2htZW50RmlsZS5wYXRofS5gKTtcbiAgICAgICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShuZXdBdHRhY2htZW50RmlsZSk7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRpciA9IGRpcm5hbWUobmV3QXR0YWNobWVudEZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGV4dCA9IGV4dG5hbWUobmV3QXR0YWNobWVudEZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGJhc2VOYW1lID0gYmFzZW5hbWUobmV3QXR0YWNobWVudEZpbGVQYXRoLCBleHQpO1xuICAgICAgbmV3QXR0YWNobWVudEZpbGVQYXRoID0gYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoam9pbihkaXIsIGJhc2VOYW1lKSwgZXh0LnNsaWNlKDEpKTtcbiAgICB9XG4gICAgcmVuYW1lTWFwLnNldChvbGRBdHRhY2htZW50RmlsZS5wYXRoLCBuZXdBdHRhY2htZW50RmlsZVBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwKGFwcDogQXBwKTogTWFwPHN0cmluZywgKCkgPT4gUGFydGlhbDxSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3M+PiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoYXBwLCAncmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAnLCBuZXcgTWFwPHN0cmluZywgKCkgPT4gUGFydGlhbDxSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3M+PigpKS52YWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U2V0dGluZ3MoYXBwOiBBcHApOiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4ge1xuICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9IGdldFJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwKGFwcCk7XG4gIGNvbnN0IHNldHRpbmdzQnVpbGRlcnMgPSBBcnJheS5mcm9tKHJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwLnZhbHVlcygpKS5yZXZlcnNlKCk7XG5cbiAgY29uc3Qgc2V0dGluZ3M6IFBhcnRpYWw8UmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzPiA9IHt9O1xuICBzZXR0aW5ncy5pc05vdGUgPSAocGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiBpc05vdGUoYXBwLCBwYXRoKTtcbiAgc2V0dGluZ3MuaXNQYXRoSWdub3JlZCA9ICgpOiBib29sZWFuID0+IGZhbHNlO1xuXG4gIGZvciAoY29uc3Qgc2V0dGluZ3NCdWlsZGVyIG9mIHNldHRpbmdzQnVpbGRlcnMpIHtcbiAgICBjb25zdCBuZXdTZXR0aW5ncyA9IHNldHRpbmdzQnVpbGRlcigpO1xuICAgIHNldHRpbmdzLnNob3VsZERlbGV0ZUNvbmZsaWN0aW5nQXR0YWNobWVudHMgfHw9IG5ld1NldHRpbmdzLnNob3VsZERlbGV0ZUNvbmZsaWN0aW5nQXR0YWNobWVudHMgPz8gZmFsc2U7XG4gICAgaWYgKG5ld1NldHRpbmdzLmVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yKSB7XG4gICAgICBzZXR0aW5ncy5lbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvciA/Pz0gbmV3U2V0dGluZ3MuZW1wdHlBdHRhY2htZW50Rm9sZGVyQmVoYXZpb3I7XG4gICAgfVxuICAgIHNldHRpbmdzLnNob3VsZEhhbmRsZURlbGV0aW9ucyB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkSGFuZGxlRGVsZXRpb25zID8/IGZhbHNlO1xuICAgIHNldHRpbmdzLnNob3VsZEhhbmRsZVJlbmFtZXMgfHw9IG5ld1NldHRpbmdzLnNob3VsZEhhbmRsZVJlbmFtZXMgPz8gZmFsc2U7XG4gICAgc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZpbGVzIHx8PSBuZXdTZXR0aW5ncy5zaG91bGRSZW5hbWVBdHRhY2htZW50RmlsZXMgPz8gZmFsc2U7XG4gICAgc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlciB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlciA/PyBmYWxzZTtcbiAgICBzZXR0aW5ncy5zaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzZXMgfHw9IG5ld1NldHRpbmdzLnNob3VsZFVwZGF0ZUZpbGVOYW1lQWxpYXNlcyA/PyBmYWxzZTtcbiAgICBjb25zdCBpc1BhdGhJZ25vcmVkID0gc2V0dGluZ3MuaXNQYXRoSWdub3JlZDtcbiAgICBzZXR0aW5ncy5pc1BhdGhJZ25vcmVkID0gKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4gaXNQYXRoSWdub3JlZChwYXRoKSB8fCAobmV3U2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKHBhdGgpID8/IGZhbHNlKTtcbiAgICBjb25zdCBjdXJyZW50SXNOb3RlID0gc2V0dGluZ3MuaXNOb3RlO1xuICAgIHNldHRpbmdzLmlzTm90ZSA9IChwYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IGN1cnJlbnRJc05vdGUocGF0aCkgJiYgKG5ld1NldHRpbmdzLmlzTm90ZT8uKHBhdGgpID8/IHRydWUpO1xuICB9XG5cbiAgc2V0dGluZ3MuZW1wdHlBdHRhY2htZW50Rm9sZGVyQmVoYXZpb3IgPz89IEVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yLktlZXA7XG4gIHJldHVybiBzZXR0aW5ncztcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQ2FzZUNvbGxpc2lvbihcbiAgYXBwOiBBcHAsXG4gIG9sZFBhdGg6IHN0cmluZyxcbiAgbmV3UGF0aDogc3RyaW5nLFxuICBvbGRQYXRoQmFja2xpbmtzTWFwOiBNYXA8c3RyaW5nLCBSZWZlcmVuY2VbXT4sXG4gIG9sZFBhdGhMaW5rczogUmVmZXJlbmNlW11cbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIWFwcC52YXVsdC5hZGFwdGVyLmluc2Vuc2l0aXZlIHx8IG9sZFBhdGgudG9Mb3dlckNhc2UoKSAhPT0gbmV3UGF0aC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgdGVtcFBhdGggPSBqb2luKGRpcm5hbWUobmV3UGF0aCksIGBfX3RlbXBfXyR7YmFzZW5hbWUobmV3UGF0aCl9YCk7XG4gIGF3YWl0IHJlbmFtZUhhbmRsZWQoYXBwLCBuZXdQYXRoLCB0ZW1wUGF0aCk7XG4gIGF3YWl0IGhhbmRsZVJlbmFtZUFzeW5jKGFwcCwgb2xkUGF0aCwgdGVtcFBhdGgsIG9sZFBhdGhCYWNrbGlua3NNYXAsIG9sZFBhdGhMaW5rcyk7XG4gIGF3YWl0IGFwcC52YXVsdC5yZW5hbWUoZ2V0RmlsZShhcHAsIHRlbXBQYXRoKSwgbmV3UGF0aCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVEZWxldGUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZywgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmhhbmRsZURlbGV0ZScpKGBIYW5kbGUgRGVsZXRlICR7cGF0aH1gKTtcbiAgaWYgKCFpc05vdGVFeChhcHAsIHBhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhhcHApO1xuICBpZiAoIXNldHRpbmdzLnNob3VsZEhhbmRsZURlbGV0aW9ucykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzZXR0aW5ncy5pc1BhdGhJZ25vcmVkPy4ocGF0aCkpIHtcbiAgICBjb25zb2xlLndhcm4oYFNraXBwaW5nIGRlbGV0ZSBoYW5kbGVyIG9mICR7cGF0aH0gYXMgdGhlIHBhdGggaXMgaWdub3JlZC5gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjYWNoZSA9IGRlbGV0ZWRNZXRhZGF0YUNhY2hlTWFwLmdldChwYXRoKTtcbiAgZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXAuZGVsZXRlKHBhdGgpO1xuICBjb25zdCBwYXJlbnRGb2xkZXJQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBpZiAoY2FjaGUpIHtcbiAgICBjb25zdCBsaW5rcyA9IGdldEFsbExpbmtzKGNhY2hlKTtcblxuICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgY29uc3QgYXR0YWNobWVudEZpbGUgPSBleHRyYWN0TGlua0ZpbGUoYXBwLCBsaW5rLCBwYXRoKTtcbiAgICAgIGlmICghYXR0YWNobWVudEZpbGUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05vdGVFeChhcHAsIGF0dGFjaG1lbnRGaWxlLnBhdGgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwYXJlbnRGb2xkZXJQYXRocy5hZGQoYXR0YWNobWVudEZpbGUucGFyZW50Py5wYXRoID8/ICcnKTtcbiAgICAgIGF3YWl0IGRlbGV0ZVNhZmUoYXBwLCBhdHRhY2htZW50RmlsZSwgcGF0aCwgZmFsc2UsIHNldHRpbmdzLmVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yICE9PSBFbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvci5LZWVwKTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgY2xlYW51cFBhcmVudEZvbGRlcnMoYXBwLCBBcnJheS5mcm9tKHBhcmVudEZvbGRlclBhdGhzKSwgcGF0aCk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgY29uc3QgYXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChhcHAsIHBhdGgpO1xuICBjb25zdCBhdHRhY2htZW50Rm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKGFwcCwgYXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gIGlmICghYXR0YWNobWVudEZvbGRlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghKGF3YWl0IGhhc093bkF0dGFjaG1lbnRGb2xkZXIoYXBwLCBwYXRoKSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gIGF3YWl0IGRlbGV0ZVNhZmUoYXBwLCBhdHRhY2htZW50Rm9sZGVyLCBwYXRoLCBmYWxzZSwgc2V0dGluZ3MuZW1wdHlBdHRhY2htZW50Rm9sZGVyQmVoYXZpb3IgIT09IEVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yLktlZXApO1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVEZWxldGVJZkVuYWJsZWQocGx1Z2luOiBBYm9ydGFibGVQbHVnaW4sIGZpbGU6IFRBYnN0cmFjdEZpbGUsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IHZvaWQge1xuICBjb25zdCBhcHAgPSBwbHVnaW4uYXBwO1xuICBpZiAoIXNob3VsZEludm9rZUhhbmRsZXIocGx1Z2luKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwYXRoID0gZmlsZS5wYXRoO1xuICBhZGRUb1F1ZXVlKGFwcCwgKGFib3J0U2lnbmFsMikgPT4gaGFuZGxlRGVsZXRlKGFwcCwgcGF0aCwgYWJvcnRTaWduYWwyKSwgYWJvcnRTaWduYWwpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVNZXRhZGF0YURlbGV0ZWQoYXBwOiBBcHAsIGZpbGU6IFRBYnN0cmFjdEZpbGUsIHByZXZDYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsKTogdm9pZCB7XG4gIGNvbnN0IHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoYXBwKTtcbiAgaWYgKHNldHRpbmdzLmlzUGF0aElnbm9yZWQ/LihmaWxlLnBhdGgpKSB7XG4gICAgY29uc29sZS53YXJuKGBTa2lwcGluZyBtZXRhZGF0YSBkZWxldGUgaGFuZGxlciBvZiAke2ZpbGUucGF0aH0gYXMgdGhlIHBhdGggaXMgaWdub3JlZC5gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXNldHRpbmdzLnNob3VsZEhhbmRsZURlbGV0aW9ucykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXNNYXJrZG93bkZpbGUoYXBwLCBmaWxlKSAmJiBwcmV2Q2FjaGUpIHtcbiAgICBkZWxldGVkTWV0YWRhdGFDYWNoZU1hcC5zZXQoZmlsZS5wYXRoLCBwcmV2Q2FjaGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZU1ldGFkYXRhRGVsZXRlZElmRW5hYmxlZChwbHVnaW46IFBsdWdpbiwgZmlsZTogVEFic3RyYWN0RmlsZSwgcHJldkNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGwpOiB2b2lkIHtcbiAgaWYgKCFzaG91bGRJbnZva2VIYW5kbGVyKHBsdWdpbikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFuZGxlTWV0YWRhdGFEZWxldGVkKHBsdWdpbi5hcHAsIGZpbGUsIHByZXZDYWNoZSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVJlbmFtZShhcHA6IEFwcCwgb2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IHZvaWQge1xuICBjb25zdCBrZXkgPSBtYWtlS2V5KG9sZFBhdGgsIG5ld1BhdGgpO1xuICBnZXRMaWJEZWJ1Z2dlcignUmVuYW1lRGVsZXRlSGFuZGxlcjpoYW5kbGVSZW5hbWUnKShgSGFuZGxlIFJlbmFtZSAke2tleX1gKTtcbiAgaWYgKGhhbmRsZWRSZW5hbWVzLmhhcyhrZXkpKSB7XG4gICAgaGFuZGxlZFJlbmFtZXMuZGVsZXRlKGtleSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhhcHApO1xuICBpZiAoIXNldHRpbmdzLnNob3VsZEhhbmRsZVJlbmFtZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKG9sZFBhdGgpKSB7XG4gICAgY29uc29sZS53YXJuKGBTa2lwcGluZyByZW5hbWUgaGFuZGxlciBvZiBvbGQgcGF0aCAke29sZFBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNldHRpbmdzLmlzUGF0aElnbm9yZWQ/LihuZXdQYXRoKSkge1xuICAgIGNvbnNvbGUud2FybihgU2tpcHBpbmcgcmVuYW1lIGhhbmRsZXIgb2YgbmV3IHBhdGggJHtuZXdQYXRofSBhcyB0aGUgcGF0aCBpcyBpZ25vcmVkLmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNhY2hlID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Q2FjaGUob2xkUGF0aCkgPz8gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Q2FjaGUobmV3UGF0aCk7XG4gIGNvbnN0IG9sZFBhdGhMaW5rcyA9IGNhY2hlID8gZ2V0QWxsTGlua3MoY2FjaGUpIDogW107XG4gIGNvbnN0IG9sZFBhdGhCYWNrbGlua3NNYXAgPSBnZXRCYWNrbGlua3NGb3JGaWxlT3JQYXRoKGFwcCwgb2xkUGF0aCkuZGF0YTtcbiAgYWRkVG9RdWV1ZShhcHAsIChhYm9ydFNpZ25hbDIpID0+IGhhbmRsZVJlbmFtZUFzeW5jKGFwcCwgb2xkUGF0aCwgbmV3UGF0aCwgb2xkUGF0aEJhY2tsaW5rc01hcCwgb2xkUGF0aExpbmtzLCB1bmRlZmluZWQsIGFib3J0U2lnbmFsMiksIGFib3J0U2lnbmFsKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVuYW1lQXN5bmMoXG4gIGFwcDogQXBwLFxuICBvbGRQYXRoOiBzdHJpbmcsXG4gIG5ld1BhdGg6IHN0cmluZyxcbiAgb2xkUGF0aEJhY2tsaW5rc01hcDogTWFwPHN0cmluZywgUmVmZXJlbmNlW10+LFxuICBvbGRQYXRoTGlua3M6IFJlZmVyZW5jZVtdLFxuICBpbnRlcnJ1cHRlZENvbWJpbmVkQmFja2xpbmtzTWFwPzogTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj4sXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhYm9ydFNpZ25hbCA/Pz0gYWJvcnRTaWduYWxOZXZlcigpO1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICBhd2FpdCBjb250aW51ZUludGVycnVwdGVkUmVuYW1lcyhhcHAsIG9sZFBhdGgsIG5ld1BhdGgsIG9sZFBhdGhCYWNrbGlua3NNYXAsIG9sZFBhdGhMaW5rcyk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGF3YWl0IHJlZnJlc2hMaW5rcyhhcHAsIG9sZFBhdGgsIG5ld1BhdGgsIG9sZFBhdGhCYWNrbGlua3NNYXAsIG9sZFBhdGhMaW5rcyk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGlmIChhd2FpdCBoYW5kbGVDYXNlQ29sbGlzaW9uKGFwcCwgb2xkUGF0aCwgbmV3UGF0aCwgb2xkUGF0aEJhY2tsaW5rc01hcCwgb2xkUGF0aExpbmtzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZW5hbWVNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGF3YWl0IGZpbGxSZW5hbWVNYXAoYXBwLCBvbGRQYXRoLCBuZXdQYXRoLCByZW5hbWVNYXAsIG9sZFBhdGhMaW5rcywgYWJvcnRTaWduYWwpO1xuICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBjb25zdCBjb21iaW5lZEJhY2tsaW5rc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmc+PigpO1xuICAgIGluaXRCYWNrbGlua3NNYXAob2xkUGF0aEJhY2tsaW5rc01hcCwgcmVuYW1lTWFwLCBjb21iaW5lZEJhY2tsaW5rc01hcCwgb2xkUGF0aCk7XG5cbiAgICBmb3IgKGNvbnN0IGF0dGFjaG1lbnRPbGRQYXRoIG9mIHJlbmFtZU1hcC5rZXlzKCkpIHtcbiAgICAgIGlmIChhdHRhY2htZW50T2xkUGF0aCA9PT0gb2xkUGF0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRPbGRQYXRoQmFja2xpbmtzTWFwID0gKGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKGFwcCwgYXR0YWNobWVudE9sZFBhdGgpKS5kYXRhO1xuICAgICAgaW5pdEJhY2tsaW5rc01hcChhdHRhY2htZW50T2xkUGF0aEJhY2tsaW5rc01hcCwgcmVuYW1lTWFwLCBjb21iaW5lZEJhY2tsaW5rc01hcCwgYXR0YWNobWVudE9sZFBhdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudEZvbGRlclBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtvbGRBdHRhY2htZW50UGF0aCwgbmV3QXR0YWNobWVudFBhdGhdIG9mIHJlbmFtZU1hcC5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChvbGRBdHRhY2htZW50UGF0aCA9PT0gb2xkUGF0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpeGVkTmV3QXR0YWNobWVudFBhdGggPSBhd2FpdCByZW5hbWVIYW5kbGVkKGFwcCwgb2xkQXR0YWNobWVudFBhdGgsIG5ld0F0dGFjaG1lbnRQYXRoKTtcbiAgICAgIHJlbmFtZU1hcC5zZXQob2xkQXR0YWNobWVudFBhdGgsIGZpeGVkTmV3QXR0YWNobWVudFBhdGgpO1xuICAgICAgcGFyZW50Rm9sZGVyUGF0aHMuYWRkKGRpcm5hbWUob2xkQXR0YWNobWVudFBhdGgpKTtcbiAgICB9XG5cbiAgICBhd2FpdCBjbGVhbnVwUGFyZW50Rm9sZGVycyhhcHAsIEFycmF5LmZyb20ocGFyZW50Rm9sZGVyUGF0aHMpLCBvbGRQYXRoKTtcbiAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoYXBwKTtcblxuICAgIGZvciAoXG4gICAgICBjb25zdCBbbmV3QmFja2xpbmtQYXRoLCBsaW5rSnNvblRvUGF0aE1hcF0gb2YgQXJyYXkuZnJvbShjb21iaW5lZEJhY2tsaW5rc01hcC5lbnRyaWVzKCkpLmNvbmNhdChcbiAgICAgICAgQXJyYXkuZnJvbShpbnRlcnJ1cHRlZENvbWJpbmVkQmFja2xpbmtzTWFwPy5lbnRyaWVzKCkgPz8gW10pXG4gICAgICApXG4gICAgKSB7XG4gICAgICBhd2FpdCBlZGl0TGlua3MoYXBwLCBuZXdCYWNrbGlua1BhdGgsIChsaW5rKSA9PiB7XG4gICAgICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRQYXRoID0gbGlua0pzb25Ub1BhdGhNYXAuZ2V0KHRvSnNvbihsaW5rKSk7XG4gICAgICAgIGlmICghb2xkQXR0YWNobWVudFBhdGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdBdHRhY2htZW50UGF0aCA9IHJlbmFtZU1hcC5nZXQob2xkQXR0YWNobWVudFBhdGgpO1xuICAgICAgICBpZiAoIW5ld0F0dGFjaG1lbnRQYXRoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUxpbmsobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFVwZGF0ZUxpbmtPcHRpb25zPih7XG4gICAgICAgICAgYXBwLFxuICAgICAgICAgIGxpbmssXG4gICAgICAgICAgbmV3U291cmNlUGF0aE9yRmlsZTogbmV3QmFja2xpbmtQYXRoLFxuICAgICAgICAgIG5ld1RhcmdldFBhdGhPckZpbGU6IG5ld0F0dGFjaG1lbnRQYXRoLFxuICAgICAgICAgIG9sZFRhcmdldFBhdGhPckZpbGU6IG9sZEF0dGFjaG1lbnRQYXRoLFxuICAgICAgICAgIHNob3VsZFVwZGF0ZUZpbGVOYW1lQWxpYXM6IHNldHRpbmdzLnNob3VsZFVwZGF0ZUZpbGVOYW1lQWxpYXNlc1xuICAgICAgICB9KSk7XG4gICAgICB9LCB7XG4gICAgICAgIHNob3VsZEZhaWxPbk1pc3NpbmdGaWxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIH1cblxuICAgIGlmIChpc05vdGVFeChhcHAsIG5ld1BhdGgpKSB7XG4gICAgICBhd2FpdCB1cGRhdGVMaW5rc0luRmlsZShub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8VXBkYXRlTGlua3NJbkZpbGVPcHRpb25zPih7XG4gICAgICAgIGFwcCxcbiAgICAgICAgbmV3U291cmNlUGF0aE9yRmlsZTogbmV3UGF0aCxcbiAgICAgICAgb2xkU291cmNlUGF0aE9yRmlsZTogb2xkUGF0aCxcbiAgICAgICAgc2hvdWxkRmFpbE9uTWlzc2luZ0ZpbGU6IGZhbHNlLFxuICAgICAgICBzaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzOiBzZXR0aW5ncy5zaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzZXNcbiAgICAgIH0pKTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgfVxuXG4gICAgaWYgKCFnZXRGaWxlT3JOdWxsKGFwcCwgbmV3UGF0aCkpIHtcbiAgICAgIGxldCBpbnRlcnJ1cHRlZFJlbmFtZXMgPSBpbnRlcnJ1cHRlZFJlbmFtZXNNYXAuZ2V0KG5ld1BhdGgpO1xuICAgICAgaWYgKCFpbnRlcnJ1cHRlZFJlbmFtZXMpIHtcbiAgICAgICAgaW50ZXJydXB0ZWRSZW5hbWVzID0gW107XG4gICAgICAgIGludGVycnVwdGVkUmVuYW1lc01hcC5zZXQobmV3UGF0aCwgaW50ZXJydXB0ZWRSZW5hbWVzKTtcbiAgICAgIH1cbiAgICAgIGludGVycnVwdGVkUmVuYW1lcy5wdXNoKHtcbiAgICAgICAgY29tYmluZWRCYWNrbGlua3NNYXAsXG4gICAgICAgIG9sZFBhdGhcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdCBvcnBoYW5LZXlzID0gQXJyYXkuZnJvbShoYW5kbGVkUmVuYW1lcyk7XG4gICAgYWRkVG9RdWV1ZShhcHAsICgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIG9ycGhhbktleXMpIHtcbiAgICAgICAgaGFuZGxlZFJlbmFtZXMuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgfSwgYWJvcnRTaWduYWwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVJlbmFtZUlmRW5hYmxlZChwbHVnaW46IFBsdWdpbiwgZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nLCBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiB2b2lkIHtcbiAgaWYgKCFzaG91bGRJbnZva2VIYW5kbGVyKHBsdWdpbikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFpc0ZpbGUoZmlsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmV3UGF0aCA9IGZpbGUucGF0aDtcbiAgaGFuZGxlUmVuYW1lKHBsdWdpbi5hcHAsIG9sZFBhdGgsIG5ld1BhdGgsIGFib3J0U2lnbmFsKTtcbn1cblxuZnVuY3Rpb24gaW5pdEJhY2tsaW5rc01hcChcbiAgc2luZ2xlQmFja2xpbmtzTWFwOiBNYXA8c3RyaW5nLCBSZWZlcmVuY2VbXT4sXG4gIHJlbmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPixcbiAgY29tYmluZWRCYWNrbGlua3NNYXA6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHN0cmluZz4+LFxuICBwYXRoOiBzdHJpbmdcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IFtiYWNrbGlua1BhdGgsIGxpbmtzXSBvZiBzaW5nbGVCYWNrbGlua3NNYXAuZW50cmllcygpKSB7XG4gICAgY29uc3QgbmV3QmFja2xpbmtQYXRoID0gcmVuYW1lTWFwLmdldChiYWNrbGlua1BhdGgpID8/IGJhY2tsaW5rUGF0aDtcbiAgICBjb25zdCBsaW5rSnNvblRvUGF0aE1hcCA9IGNvbWJpbmVkQmFja2xpbmtzTWFwLmdldChuZXdCYWNrbGlua1BhdGgpID8/IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgY29tYmluZWRCYWNrbGlua3NNYXAuc2V0KG5ld0JhY2tsaW5rUGF0aCwgbGlua0pzb25Ub1BhdGhNYXApO1xuICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgbGlua0pzb25Ub1BhdGhNYXAuc2V0KHRvSnNvbihsaW5rKSwgcGF0aCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTm90ZUV4KGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhhcHApO1xuICByZXR1cm4gc2V0dGluZ3MuaXNOb3RlPy4ocGF0aCkgPz8gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxvZ1JlZ2lzdGVyZWRIYW5kbGVycyhhcHA6IEFwcCk6IHZvaWQge1xuICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9IGdldFJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwKGFwcCk7XG4gIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmxvZ1JlZ2lzdGVyZWRIYW5kbGVycycpKFxuICAgIGBQbHVnaW5zIHdpdGggcmVnaXN0ZXJlZCByZW5hbWUvZGVsZXRlIGhhbmRsZXJzOiAke0pTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAua2V5cygpKSl9YFxuICApO1xufVxuXG5mdW5jdGlvbiBtYWtlS2V5KG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke29sZFBhdGh9IC0+ICR7bmV3UGF0aH1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoTGlua3MoXG4gIGFwcDogQXBwLFxuICBvbGRQYXRoOiBzdHJpbmcsXG4gIG5ld1BhdGg6IHN0cmluZyxcbiAgb2xkUGF0aEJhY2tsaW5rc01hcDogTWFwPHN0cmluZywgUmVmZXJlbmNlW10+LFxuICBvbGRQYXRoTGlua3M6IFJlZmVyZW5jZVtdXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2FjaGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRDYWNoZShvbGRQYXRoKSA/PyBhcHAubWV0YWRhdGFDYWNoZS5nZXRDYWNoZShuZXdQYXRoKTtcbiAgY29uc3Qgb2xkUGF0aExpbmtzUmVmcmVzaGVkID0gY2FjaGUgPyBnZXRBbGxMaW5rcyhjYWNoZSkgOiBbXTtcbiAgY29uc3QgZmFrZU9sZEZpbGUgPSBnZXRGaWxlKGFwcCwgb2xkUGF0aCwgdHJ1ZSk7XG4gIGxldCBvbGRQYXRoQmFja2xpbmtzTWFwUmVmcmVzaGVkID0gbmV3IE1hcDxzdHJpbmcsIFJlZmVyZW5jZVtdPigpO1xuICBhd2FpdCB0ZW1wUmVnaXN0ZXJGaWxlc0FuZFJ1bihhcHAsIFtmYWtlT2xkRmlsZV0sIGFzeW5jICgpID0+IHtcbiAgICBvbGRQYXRoQmFja2xpbmtzTWFwUmVmcmVzaGVkID0gKGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKGFwcCwgZmFrZU9sZEZpbGUpKS5kYXRhO1xuICB9KTtcblxuICBmb3IgKGNvbnN0IGxpbmsgb2Ygb2xkUGF0aExpbmtzUmVmcmVzaGVkKSB7XG4gICAgaWYgKG9sZFBhdGhMaW5rcy5pbmNsdWRlcyhsaW5rKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG9sZFBhdGhMaW5rcy5wdXNoKGxpbmspO1xuICB9XG5cbiAgZm9yIChjb25zdCBbYmFja2xpbmtQYXRoLCByZWZyZXNoZWRMaW5rc10gb2Ygb2xkUGF0aEJhY2tsaW5rc01hcFJlZnJlc2hlZC5lbnRyaWVzKCkpIHtcbiAgICBsZXQgb2xkTGlua3MgPSBvbGRQYXRoQmFja2xpbmtzTWFwLmdldChiYWNrbGlua1BhdGgpO1xuICAgIGlmICghb2xkTGlua3MpIHtcbiAgICAgIG9sZExpbmtzID0gW107XG4gICAgICBvbGRQYXRoQmFja2xpbmtzTWFwLnNldChiYWNrbGlua1BhdGgsIG9sZExpbmtzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxpbmsgb2YgcmVmcmVzaGVkTGlua3MpIHtcbiAgICAgIGlmIChvbGRMaW5rcy5pbmNsdWRlcyhsaW5rKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG9sZExpbmtzLnB1c2gobGluayk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlbmFtZUhhbmRsZWQoYXBwOiBBcHAsIG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbmV3UGF0aCA9IGdldFNhZmVSZW5hbWVQYXRoKGFwcCwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gIGlmIChvbGRQYXRoID09PSBuZXdQYXRoKSB7XG4gICAgcmV0dXJuIG5ld1BhdGg7XG4gIH1cbiAgY29uc3Qga2V5ID0gbWFrZUtleShvbGRQYXRoLCBuZXdQYXRoKTtcbiAgaGFuZGxlZFJlbmFtZXMuYWRkKGtleSk7XG4gIG5ld1BhdGggPSBhd2FpdCByZW5hbWVTYWZlKGFwcCwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gIHJldHVybiBuZXdQYXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Bc3luY0xpbmtVcGRhdGUoYXBwOiBBcHAsIG5leHQ6IFJ1bkFzeW5jTGlua1VwZGF0ZUZuLCBsaW5rVXBkYXRlc0hhbmRsZXI6IExpbmtVcGRhdGVzSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXh0LmNhbGwoYXBwLmZpbGVNYW5hZ2VyLCB3cmFwcGVkSGFuZGxlcik7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd3JhcHBlZEhhbmRsZXIobGlua1VwZGF0ZXM6IExpbmtVcGRhdGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBpc1JlbmFtZUNhbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGV2ZW50UmVmID0gYXBwLnZhdWx0Lm9uKCdyZW5hbWUnLCAoKSA9PiB7XG4gICAgICBpc1JlbmFtZUNhbGxlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGxpbmtVcGRhdGVzSGFuZGxlcihsaW5rVXBkYXRlcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFwcC52YXVsdC5vZmZyZWYoZXZlbnRSZWYpO1xuICAgIH1cbiAgICBjb25zdCBzZXR0aW5ncyA9IGdldFNldHRpbmdzKGFwcCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICBpZiAoaXNSZW5hbWVDYWxsZWQgJiYgc2V0dGluZ3Muc2hvdWxkSGFuZGxlUmVuYW1lcykge1xuICAgICAgZmlsdGVySW5QbGFjZShcbiAgICAgICAgbGlua1VwZGF0ZXMsXG4gICAgICAgIChsaW5rVXBkYXRlKSA9PiB7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLmlzUGF0aElnbm9yZWQ/LihsaW5rVXBkYXRlLnNvdXJjZUZpbGUucGF0aCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgUm9sbCBiYWNrIHRvIGRlZmF1bHQgbGluayB1cGRhdGUgb2Ygc291cmNlIGZpbGUgJHtsaW5rVXBkYXRlLnNvdXJjZUZpbGUucGF0aH0gYXMgdGhlIHBhdGggaXMgaWdub3JlZC5gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZXR0aW5ncy5pc1BhdGhJZ25vcmVkPy4obGlua1VwZGF0ZS5yZXNvbHZlZEZpbGUucGF0aCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgUm9sbCBiYWNrIHRvIGRlZmF1bHQgbGluayB1cGRhdGUgb2YgcmVzb2x2ZWQgZmlsZSAke2xpbmtVcGRhdGUucmVzb2x2ZWRGaWxlLnBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWFwcC5pbnRlcm5hbFBsdWdpbnMuZ2V0RW5hYmxlZFBsdWdpbkJ5SWQoSW50ZXJuYWxQbHVnaW5OYW1lLkNhbnZhcykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKCdiYWNrbGluay1jYWNoZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxpbmtVcGRhdGUuc291cmNlRmlsZS5leHRlbnNpb24gPT09ICdjYW52YXMnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobGlua1VwZGF0ZS5yZXNvbHZlZEZpbGUuZXh0ZW5zaW9uID09PSAnY2FudmFzJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRJbnZva2VIYW5kbGVyKHBsdWdpbjogUGx1Z2luKTogYm9vbGVhbiB7XG4gIGNvbnN0IGFwcCA9IHBsdWdpbi5hcHA7XG4gIGNvbnN0IHBsdWdpbklkID0gcGx1Z2luLm1hbmlmZXN0LmlkO1xuXG4gIGNvbnN0IHJlbmFtZURlbGV0ZUhhbmRsZXJQbHVnaW5JZHMgPSBnZXRSZW5hbWVEZWxldGVIYW5kbGVyc01hcChhcHApO1xuICBjb25zdCBtYWluUGx1Z2luSWQgPSBBcnJheS5mcm9tKHJlbmFtZURlbGV0ZUhhbmRsZXJQbHVnaW5JZHMua2V5cygpKVswXTtcbiAgaWYgKG1haW5QbHVnaW5JZCAhPT0gcGx1Z2luSWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBb0JBLFNBQVMsYUFBYTtBQUN0QixTQUFTLDBCQUEwQjtBQU9uQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLHFCQUFxQjtBQUM5QixTQUFTLHNCQUFzQjtBQUMvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxnQ0FBZ0M7QUFDekM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHFCQUFxQjtBQUM5QixTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsTUFBTSwwQkFBMEIsb0JBQUksSUFBNEI7QUFDaEUsTUFBTSxpQkFBaUIsb0JBQUksSUFBWTtBQUN2QyxNQUFNLHdCQUF3QixvQkFBSSxJQUFpQztBQUs1RCxJQUFLLGdDQUFMLGtCQUFLQSxtQ0FBTDtBQUlMLEVBQUFBLCtCQUFBLFlBQVM7QUFLVCxFQUFBQSwrQkFBQSw0QkFBeUI7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SSxDQUFDLElBQUksZ0JBQWdCLHFCQUFxQixtQkFBbUIsTUFBTSxHQUFHO0FBQ3hFLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksSUFBSSxRQUFRLFVBQVUsZ0JBQWdCLEdBQUc7QUFDM0MsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxXQUFXLFdBQVcsY0FBYyxVQUFVO0FBQ2hELG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksV0FBVyxhQUFhLGNBQWMsVUFBVTtBQUNsRCxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsb0JBQW9CLFFBQXlCO0FBQ3BELFFBQU0sTUFBTSxPQUFPO0FBQ25CLFFBQU0sV0FBVyxPQUFPLFNBQVM7QUFFakMsUUFBTSwrQkFBK0IsMkJBQTJCLEdBQUc7QUFDbkUsUUFBTSxlQUFlLE1BQU0sS0FBSyw2QkFBNkIsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN0RSxNQUFJLGlCQUFpQixVQUFVO0FBQzdCLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJFbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvciJdCn0K
|
|
561
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIHJlbmFtZSBhbmQgZGVsZXRlIGV2ZW50cyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQ2FjaGVkTWV0YWRhdGEsXG4gIEZpbGVNYW5hZ2VyLFxuICBQbHVnaW4sXG4gIFJlZmVyZW5jZSxcbiAgVEFic3RyYWN0RmlsZSxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUge1xuICBMaW5rVXBkYXRlLFxuICBMaW5rVXBkYXRlc0hhbmRsZXJcbn0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncyc7XG5cbmltcG9ydCB7IFZhdWx0IH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgSW50ZXJuYWxQbHVnaW5OYW1lIH0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncy9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIFVwZGF0ZUxpbmtPcHRpb25zLFxuICBVcGRhdGVMaW5rc0luRmlsZU9wdGlvbnNcbn0gZnJvbSAnLi9MaW5rLnRzJztcblxuaW1wb3J0IHsgYWJvcnRTaWduYWxOZXZlciB9IGZyb20gJy4uL0Fib3J0Q29udHJvbGxlci50cyc7XG5pbXBvcnQgeyBmaWx0ZXJJblBsYWNlIH0gZnJvbSAnLi4vQXJyYXkudHMnO1xuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICcuLi9EZWJ1Zy50cyc7XG5pbXBvcnQge1xuICBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMsXG4gIHRvSnNvblxufSBmcm9tICcuLi9PYmplY3RVdGlscy50cyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL0FwcC50cyc7XG5pbXBvcnQge1xuICBnZXRBdHRhY2htZW50RmlsZVBhdGgsXG4gIGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoLFxuICBoYXNPd25BdHRhY2htZW50Rm9sZGVyXG59IGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyT3JOdWxsLFxuICBpc0ZpbGUsXG4gIGlzTWFya2Rvd25GaWxlLFxuICBpc05vdGVcbn0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIGVkaXRMaW5rcyxcbiAgZXh0cmFjdExpbmtGaWxlLFxuICB1cGRhdGVMaW5rLFxuICB1cGRhdGVMaW5rc0luRmlsZVxufSBmcm9tICcuL0xpbmsudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlLFxuICB0ZW1wUmVnaXN0ZXJGaWxlc0FuZFJ1blxufSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQYXRjaCB9IGZyb20gJy4vTW9ua2V5QXJvdW5kLnRzJztcbmltcG9ydCB7IGFkZFRvUXVldWUgfSBmcm9tICcuL1F1ZXVlLnRzJztcbmltcG9ydCB7XG4gIGdldFNhZmVSZW5hbWVQYXRoLFxuICByZW5hbWVTYWZlXG59IGZyb20gJy4vVmF1bHQudHMnO1xuaW1wb3J0IHtcbiAgZGVsZXRlRW1wdHlGb2xkZXJIaWVyYXJjaHksXG4gIGRlbGV0ZVNhZmVcbn0gZnJvbSAnLi9WYXVsdEV4LnRzJztcblxuY29uc3QgZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXAgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVkTWV0YWRhdGE+KCk7XG5jb25zdCBoYW5kbGVkUmVuYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuY29uc3QgaW50ZXJydXB0ZWRSZW5hbWVzTWFwID0gbmV3IE1hcDxzdHJpbmcsIEludGVycnVwdGVkUmVuYW1lW10+KCk7XG5cbi8qKlxuICogQSBiZWhhdmlvciBvZiB0aGUgcmVuYW1lL2RlbGV0ZSBoYW5kbGVyIHdoZW4gZGVsZXRpbmcgZW1wdHkgYXR0YWNobWVudCBmb2xkZXJzLlxuICovXG5leHBvcnQgZW51bSBFbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvciB7XG4gIC8qKlxuICAgKiBEZWxldGUgdGhlIGVtcHR5IGF0dGFjaG1lbnQgZm9sZGVyLlxuICAgKi9cbiAgRGVsZXRlID0gJ0RlbGV0ZScsXG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgZW1wdHkgYXR0YWNobWVudCBmb2xkZXIgYW5kIGFsbCBpdHMgZW1wdHkgcGFyZW50cy5cbiAgICovXG4gIERlbGV0ZVdpdGhFbXB0eVBhcmVudHMgPSAnRGVsZXRlV2l0aEVtcHR5UGFyZW50cycsXG5cbiAgLyoqXG4gICAqIEtlZXAgdGhlIGVtcHR5IGF0dGFjaG1lbnQgZm9sZGVyLlxuICAgKi9cbiAgS2VlcCA9ICdLZWVwJ1xufVxuXG4vKipcbiAqIFNldHRpbmdzIGZvciB0aGUgcmVuYW1lL2RlbGV0ZSBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBBIGJlaGF2aW9yIG9mIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXIgd2hlbiBkZWxldGluZyBlbXB0eSBhdHRhY2htZW50IGZvbGRlcnMuXG4gICAqL1xuICBlbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvcjogRW1wdHlBdHRhY2htZW50Rm9sZGVyQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBhdGggaXMgYSBub3RlLlxuICAgKi9cbiAgaXNOb3RlKHBhdGg6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaWdub3JlIHRoZSBwYXRoLlxuICAgKi9cbiAgaXNQYXRoSWdub3JlZChwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRlbGV0ZSBjb25mbGljdGluZyBhdHRhY2htZW50cy5cbiAgICovXG4gIHNob3VsZERlbGV0ZUNvbmZsaWN0aW5nQXR0YWNobWVudHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaGFuZGxlIGRlbGV0aW9ucy5cbiAgICovXG4gIHNob3VsZEhhbmRsZURlbGV0aW9uczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBoYW5kbGUgcmVuYW1lcy5cbiAgICovXG4gIHNob3VsZEhhbmRsZVJlbmFtZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVuYW1lIGF0dGFjaG1lbnQgZmlsZXMgd2hlbiBhIG5vdGUgaXMgcmVuYW1lZC5cbiAgICovXG4gIHNob3VsZFJlbmFtZUF0dGFjaG1lbnRGaWxlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW5hbWUgYXR0YWNobWVudCBmb2xkZXIgd2hlbiBhIG5vdGUgaXMgcmVuYW1lZC5cbiAgICovXG4gIHNob3VsZFJlbmFtZUF0dGFjaG1lbnRGb2xkZXI6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXBkYXRlIGZpbGUgbmFtZSBhbGlhc2VzIHdoZW4gYSBub3RlIGlzIHJlbmFtZWQuXG4gICAqL1xuICBzaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzZXM6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBYm9ydGFibGVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5pbnRlcmZhY2UgSW50ZXJydXB0ZWRSZW5hbWUge1xuICBjb21iaW5lZEJhY2tsaW5rc01hcDogTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj47XG4gIG9sZFBhdGg6IHN0cmluZztcbn1cblxudHlwZSBSdW5Bc3luY0xpbmtVcGRhdGVGbiA9IEZpbGVNYW5hZ2VyWydydW5Bc3luY0xpbmtVcGRhdGUnXTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIHJlbmFtZS9kZWxldGUgaGFuZGxlcnMuXG4gKlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gaW5zdGFuY2UuXG4gKiBAcGFyYW0gc2V0dGluZ3NCdWlsZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHNldHRpbmdzIGZvciB0aGUgcmVuYW1lIGRlbGV0ZSBoYW5kbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSZW5hbWVEZWxldGVIYW5kbGVycyhwbHVnaW46IEFib3J0YWJsZVBsdWdpbiwgc2V0dGluZ3NCdWlsZGVyOiAoKSA9PiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4pOiB2b2lkIHtcbiAgY29uc3QgcmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAgPSBnZXRSZW5hbWVEZWxldGVIYW5kbGVyc01hcChwbHVnaW4uYXBwKTtcbiAgY29uc3QgcGx1Z2luSWQgPSBwbHVnaW4ubWFuaWZlc3QuaWQ7XG5cbiAgcmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAuc2V0KHBsdWdpbklkLCBzZXR0aW5nc0J1aWxkZXIpO1xuICBsb2dSZWdpc3RlcmVkSGFuZGxlcnMocGx1Z2luLmFwcCk7XG5cbiAgcGx1Z2luLnJlZ2lzdGVyKCgpID0+IHtcbiAgICByZW5hbWVEZWxldGVIYW5kbGVyc01hcC5kZWxldGUocGx1Z2luSWQpO1xuICAgIGxvZ1JlZ2lzdGVyZWRIYW5kbGVycyhwbHVnaW4uYXBwKTtcbiAgfSk7XG5cbiAgY29uc3QgYXBwID0gcGx1Z2luLmFwcDtcbiAgY29uc3QgYWJvcnRTaWduYWwgPSBwbHVnaW4uYWJvcnRTaWduYWwgPz8gYWJvcnRTaWduYWxOZXZlcigpO1xuXG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbignZGVsZXRlJywgKGZpbGUpID0+IHtcbiAgICAgIGhhbmRsZURlbGV0ZUlmRW5hYmxlZChwbHVnaW4sIGZpbGUsIGFib3J0U2lnbmFsKTtcbiAgICB9KVxuICApO1xuXG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbigncmVuYW1lJywgKGZpbGUsIG9sZFBhdGgpID0+IHtcbiAgICAgIGhhbmRsZVJlbmFtZUlmRW5hYmxlZChwbHVnaW4sIGZpbGUsIG9sZFBhdGgsIGFib3J0U2lnbmFsKTtcbiAgICB9KVxuICApO1xuXG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC5tZXRhZGF0YUNhY2hlLm9uKCdkZWxldGVkJywgKGZpbGUsIHByZXZDYWNoZSkgPT4ge1xuICAgICAgaGFuZGxlTWV0YWRhdGFEZWxldGVkSWZFbmFibGVkKHBsdWdpbiwgZmlsZSwgcHJldkNhY2hlKTtcbiAgICB9KVxuICApO1xuXG4gIHJlZ2lzdGVyUGF0Y2gocGx1Z2luLCBhcHAuZmlsZU1hbmFnZXIsIHtcbiAgICBydW5Bc3luY0xpbmtVcGRhdGU6IChuZXh0OiBSdW5Bc3luY0xpbmtVcGRhdGVGbik6IFJ1bkFzeW5jTGlua1VwZGF0ZUZuID0+IHtcbiAgICAgIHJldHVybiAobGlua1VwZGF0ZXNIYW5kbGVyKSA9PiBydW5Bc3luY0xpbmtVcGRhdGUoYXBwLCBuZXh0LCBsaW5rVXBkYXRlc0hhbmRsZXIpO1xuICAgIH1cbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFudXBQYXJlbnRGb2xkZXJzKGFwcDogQXBwLCBwYXJlbnRGb2xkZXJQYXRoczogc3RyaW5nW10sIG5vdGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhhcHApO1xuICBpZiAoc2V0dGluZ3MuZW1wdHlBdHRhY2htZW50Rm9sZGVyQmVoYXZpb3IgPT09IEVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yLktlZXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBwYXJlbnRGb2xkZXJQYXRoIG9mIHBhcmVudEZvbGRlclBhdGhzKSB7XG4gICAgc3dpdGNoIChzZXR0aW5ncy5lbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvcikge1xuICAgICAgY2FzZSBFbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvci5EZWxldGU6XG4gICAgICAgIGF3YWl0IGRlbGV0ZVNhZmUoYXBwLCBwYXJlbnRGb2xkZXJQYXRoLCBub3RlUGF0aCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yLkRlbGV0ZVdpdGhFbXB0eVBhcmVudHM6XG4gICAgICAgIGF3YWl0IGRlbGV0ZUVtcHR5Rm9sZGVySGllcmFyY2h5KGFwcCwgcGFyZW50Rm9sZGVyUGF0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnRpbnVlSW50ZXJydXB0ZWRSZW5hbWVzKFxuICBhcHA6IEFwcCxcbiAgb2xkUGF0aDogc3RyaW5nLFxuICBuZXdQYXRoOiBzdHJpbmcsXG4gIG9sZFBhdGhCYWNrbGlua3NNYXA6IE1hcDxzdHJpbmcsIFJlZmVyZW5jZVtdPixcbiAgb2xkUGF0aExpbmtzOiBSZWZlcmVuY2VbXVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGludGVycnVwdGVkUmVuYW1lcyA9IGludGVycnVwdGVkUmVuYW1lc01hcC5nZXQob2xkUGF0aCk7XG4gIGlmIChpbnRlcnJ1cHRlZFJlbmFtZXMpIHtcbiAgICBpbnRlcnJ1cHRlZFJlbmFtZXNNYXAuZGVsZXRlKG9sZFBhdGgpO1xuICAgIGZvciAoY29uc3QgaW50ZXJydXB0ZWRSZW5hbWUgb2YgaW50ZXJydXB0ZWRSZW5hbWVzKSB7XG4gICAgICBhd2FpdCBoYW5kbGVSZW5hbWVBc3luYyhhcHAsIGludGVycnVwdGVkUmVuYW1lLm9sZFBhdGgsIG5ld1BhdGgsIG9sZFBhdGhCYWNrbGlua3NNYXAsIG9sZFBhdGhMaW5rcywgaW50ZXJydXB0ZWRSZW5hbWUuY29tYmluZWRCYWNrbGlua3NNYXApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmaWxsUmVuYW1lTWFwKFxuICBhcHA6IEFwcCxcbiAgb2xkUGF0aDogc3RyaW5nLFxuICBuZXdQYXRoOiBzdHJpbmcsXG4gIHJlbmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPixcbiAgb2xkUGF0aExpbmtzOiBSZWZlcmVuY2VbXSxcbiAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgcmVuYW1lTWFwLnNldChvbGRQYXRoLCBuZXdQYXRoKTtcblxuICBpZiAoIWlzTm90ZUV4KGFwcCwgb2xkUGF0aCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzZXR0aW5ncyA9IGdldFNldHRpbmdzKGFwcCk7XG5cbiAgY29uc3Qgb2xkQXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChhcHAsIG9sZFBhdGgpO1xuICBjb25zdCBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCA9IHNldHRpbmdzLnNob3VsZFJlbmFtZUF0dGFjaG1lbnRGb2xkZXJcbiAgICA/IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKGFwcCwgbmV3UGF0aClcbiAgICA6IG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoO1xuXG4gIGNvbnN0IGlzT2xkQXR0YWNobWVudEZvbGRlckF0Um9vdCA9IG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSAnLyc7XG5cbiAgY29uc3Qgb2xkQXR0YWNobWVudEZvbGRlciA9IGdldEZvbGRlck9yTnVsbChhcHAsIG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoKTtcblxuICBpZiAoIW9sZEF0dGFjaG1lbnRGb2xkZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob2xkQXR0YWNobWVudEZvbGRlclBhdGggPT09IG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoICYmICFzZXR0aW5ncy5zaG91bGRSZW5hbWVBdHRhY2htZW50RmlsZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvbGRBdHRhY2htZW50RmlsZXM6IFRGaWxlW10gPSBbXTtcblxuICBpZiAoYXdhaXQgaGFzT3duQXR0YWNobWVudEZvbGRlcihhcHAsIG9sZFBhdGgpKSB7XG4gICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKG9sZEF0dGFjaG1lbnRGb2xkZXIsIChvbGRBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGlmIChpc0ZpbGUob2xkQXR0YWNobWVudEZpbGUpKSB7XG4gICAgICAgIG9sZEF0dGFjaG1lbnRGaWxlcy5wdXNoKG9sZEF0dGFjaG1lbnRGaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IG9sZFBhdGhMaW5rIG9mIG9sZFBhdGhMaW5rcykge1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRGaWxlID0gZXh0cmFjdExpbmtGaWxlKGFwcCwgb2xkUGF0aExpbmssIG9sZFBhdGgpO1xuICAgICAgaWYgKCFvbGRBdHRhY2htZW50RmlsZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzT2xkQXR0YWNobWVudEZvbGRlckF0Um9vdCB8fCBvbGRBdHRhY2htZW50RmlsZS5wYXRoLnN0YXJ0c1dpdGgob2xkQXR0YWNobWVudEZvbGRlclBhdGgpKSB7XG4gICAgICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRCYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShhcHAsIG9sZEF0dGFjaG1lbnRGaWxlKTtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgaWYgKG9sZEF0dGFjaG1lbnRCYWNrbGlua3Mua2V5cygpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIG9sZEF0dGFjaG1lbnRGaWxlcy5wdXNoKG9sZEF0dGFjaG1lbnRGaWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qgb2xkQXR0YWNobWVudEZpbGUgb2Ygb2xkQXR0YWNobWVudEZpbGVzKSB7XG4gICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICBpZiAoaXNOb3RlRXgoYXBwLCBvbGRBdHRhY2htZW50RmlsZS5wYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IG5ld0F0dGFjaG1lbnRGaWxlUGF0aDogc3RyaW5nO1xuICAgIGlmIChzZXR0aW5ncy5zaG91bGRSZW5hbWVBdHRhY2htZW50RmlsZXMpIHtcbiAgICAgIG5ld0F0dGFjaG1lbnRGaWxlUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGaWxlUGF0aCh7XG4gICAgICAgIGFwcCxcbiAgICAgICAgYXR0YWNobWVudFBhdGhPckZpbGU6IG9sZEF0dGFjaG1lbnRGaWxlLFxuICAgICAgICBub3RlUGF0aE9yRmlsZTogbmV3UGF0aCxcbiAgICAgICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGlzT2xkQXR0YWNobWVudEZvbGRlckF0Um9vdCA/IG9sZEF0dGFjaG1lbnRGaWxlLnBhdGggOiByZWxhdGl2ZShvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCwgb2xkQXR0YWNobWVudEZpbGUucGF0aCk7XG4gICAgICBjb25zdCBuZXdGb2xkZXIgPSBqb2luKG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoLCBkaXJuYW1lKHJlbGF0aXZlUGF0aCkpO1xuICAgICAgbmV3QXR0YWNobWVudEZpbGVQYXRoID0gam9pbihuZXdGb2xkZXIsIG9sZEF0dGFjaG1lbnRGaWxlLm5hbWUpO1xuICAgIH1cblxuICAgIGlmIChvbGRBdHRhY2htZW50RmlsZS5wYXRoID09PSBuZXdBdHRhY2htZW50RmlsZVBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoc2V0dGluZ3Muc2hvdWxkRGVsZXRlQ29uZmxpY3RpbmdBdHRhY2htZW50cykge1xuICAgICAgY29uc3QgbmV3QXR0YWNobWVudEZpbGUgPSBnZXRGaWxlT3JOdWxsKGFwcCwgbmV3QXR0YWNobWVudEZpbGVQYXRoKTtcbiAgICAgIGlmIChuZXdBdHRhY2htZW50RmlsZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFJlbW92aW5nIGNvbmZsaWN0aW5nIGF0dGFjaG1lbnQgJHtuZXdBdHRhY2htZW50RmlsZS5wYXRofS5gKTtcbiAgICAgICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShuZXdBdHRhY2htZW50RmlsZSk7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRpciA9IGRpcm5hbWUobmV3QXR0YWNobWVudEZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGV4dCA9IGV4dG5hbWUobmV3QXR0YWNobWVudEZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGJhc2VOYW1lID0gYmFzZW5hbWUobmV3QXR0YWNobWVudEZpbGVQYXRoLCBleHQpO1xuICAgICAgbmV3QXR0YWNobWVudEZpbGVQYXRoID0gYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoam9pbihkaXIsIGJhc2VOYW1lKSwgZXh0LnNsaWNlKDEpKTtcbiAgICB9XG4gICAgcmVuYW1lTWFwLnNldChvbGRBdHRhY2htZW50RmlsZS5wYXRoLCBuZXdBdHRhY2htZW50RmlsZVBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwKGFwcDogQXBwKTogTWFwPHN0cmluZywgKCkgPT4gUGFydGlhbDxSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3M+PiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoYXBwLCAncmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAnLCBuZXcgTWFwPHN0cmluZywgKCkgPT4gUGFydGlhbDxSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3M+PigpKS52YWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U2V0dGluZ3MoYXBwOiBBcHApOiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4ge1xuICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9IGdldFJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwKGFwcCk7XG4gIGNvbnN0IHNldHRpbmdzQnVpbGRlcnMgPSBBcnJheS5mcm9tKHJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwLnZhbHVlcygpKS5yZXZlcnNlKCk7XG5cbiAgY29uc3Qgc2V0dGluZ3M6IFBhcnRpYWw8UmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzPiA9IHt9O1xuICBzZXR0aW5ncy5pc05vdGUgPSAocGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiBpc05vdGUoYXBwLCBwYXRoKTtcbiAgc2V0dGluZ3MuaXNQYXRoSWdub3JlZCA9ICgpOiBib29sZWFuID0+IGZhbHNlO1xuXG4gIGZvciAoY29uc3Qgc2V0dGluZ3NCdWlsZGVyIG9mIHNldHRpbmdzQnVpbGRlcnMpIHtcbiAgICBjb25zdCBuZXdTZXR0aW5ncyA9IHNldHRpbmdzQnVpbGRlcigpO1xuICAgIHNldHRpbmdzLnNob3VsZERlbGV0ZUNvbmZsaWN0aW5nQXR0YWNobWVudHMgfHw9IG5ld1NldHRpbmdzLnNob3VsZERlbGV0ZUNvbmZsaWN0aW5nQXR0YWNobWVudHMgPz8gZmFsc2U7XG4gICAgaWYgKG5ld1NldHRpbmdzLmVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yKSB7XG4gICAgICBzZXR0aW5ncy5lbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvciA/Pz0gbmV3U2V0dGluZ3MuZW1wdHlBdHRhY2htZW50Rm9sZGVyQmVoYXZpb3I7XG4gICAgfVxuICAgIHNldHRpbmdzLnNob3VsZEhhbmRsZURlbGV0aW9ucyB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkSGFuZGxlRGVsZXRpb25zID8/IGZhbHNlO1xuICAgIHNldHRpbmdzLnNob3VsZEhhbmRsZVJlbmFtZXMgfHw9IG5ld1NldHRpbmdzLnNob3VsZEhhbmRsZVJlbmFtZXMgPz8gZmFsc2U7XG4gICAgc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZpbGVzIHx8PSBuZXdTZXR0aW5ncy5zaG91bGRSZW5hbWVBdHRhY2htZW50RmlsZXMgPz8gZmFsc2U7XG4gICAgc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlciB8fD0gbmV3U2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlciA/PyBmYWxzZTtcbiAgICBzZXR0aW5ncy5zaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzZXMgfHw9IG5ld1NldHRpbmdzLnNob3VsZFVwZGF0ZUZpbGVOYW1lQWxpYXNlcyA/PyBmYWxzZTtcbiAgICBjb25zdCBpc1BhdGhJZ25vcmVkID0gc2V0dGluZ3MuaXNQYXRoSWdub3JlZDtcbiAgICBzZXR0aW5ncy5pc1BhdGhJZ25vcmVkID0gKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4gaXNQYXRoSWdub3JlZChwYXRoKSB8fCAobmV3U2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKHBhdGgpID8/IGZhbHNlKTtcbiAgICBjb25zdCBjdXJyZW50SXNOb3RlID0gc2V0dGluZ3MuaXNOb3RlO1xuICAgIHNldHRpbmdzLmlzTm90ZSA9IChwYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IGN1cnJlbnRJc05vdGUocGF0aCkgJiYgKG5ld1NldHRpbmdzLmlzTm90ZT8uKHBhdGgpID8/IHRydWUpO1xuICB9XG5cbiAgc2V0dGluZ3MuZW1wdHlBdHRhY2htZW50Rm9sZGVyQmVoYXZpb3IgPz89IEVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yLktlZXA7XG4gIHJldHVybiBzZXR0aW5ncztcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQ2FzZUNvbGxpc2lvbihcbiAgYXBwOiBBcHAsXG4gIG9sZFBhdGg6IHN0cmluZyxcbiAgbmV3UGF0aDogc3RyaW5nLFxuICBvbGRQYXRoQmFja2xpbmtzTWFwOiBNYXA8c3RyaW5nLCBSZWZlcmVuY2VbXT4sXG4gIG9sZFBhdGhMaW5rczogUmVmZXJlbmNlW11cbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIWFwcC52YXVsdC5hZGFwdGVyLmluc2Vuc2l0aXZlIHx8IG9sZFBhdGgudG9Mb3dlckNhc2UoKSAhPT0gbmV3UGF0aC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgdGVtcFBhdGggPSBqb2luKGRpcm5hbWUobmV3UGF0aCksIGBfX3RlbXBfXyR7YmFzZW5hbWUobmV3UGF0aCl9YCk7XG4gIGF3YWl0IHJlbmFtZUhhbmRsZWQoYXBwLCBuZXdQYXRoLCB0ZW1wUGF0aCk7XG4gIGF3YWl0IGhhbmRsZVJlbmFtZUFzeW5jKGFwcCwgb2xkUGF0aCwgdGVtcFBhdGgsIG9sZFBhdGhCYWNrbGlua3NNYXAsIG9sZFBhdGhMaW5rcyk7XG4gIGF3YWl0IGFwcC52YXVsdC5yZW5hbWUoZ2V0RmlsZShhcHAsIHRlbXBQYXRoKSwgbmV3UGF0aCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVEZWxldGUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZywgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmhhbmRsZURlbGV0ZScpKGBIYW5kbGUgRGVsZXRlICR7cGF0aH1gKTtcbiAgaWYgKCFpc05vdGVFeChhcHAsIHBhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhhcHApO1xuICBpZiAoIXNldHRpbmdzLnNob3VsZEhhbmRsZURlbGV0aW9ucykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzZXR0aW5ncy5pc1BhdGhJZ25vcmVkPy4ocGF0aCkpIHtcbiAgICBjb25zb2xlLndhcm4oYFNraXBwaW5nIGRlbGV0ZSBoYW5kbGVyIG9mICR7cGF0aH0gYXMgdGhlIHBhdGggaXMgaWdub3JlZC5gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjYWNoZSA9IGRlbGV0ZWRNZXRhZGF0YUNhY2hlTWFwLmdldChwYXRoKTtcbiAgZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXAuZGVsZXRlKHBhdGgpO1xuICBjb25zdCBwYXJlbnRGb2xkZXJQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBpZiAoY2FjaGUpIHtcbiAgICBjb25zdCBsaW5rcyA9IGdldEFsbExpbmtzKGNhY2hlKTtcblxuICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgY29uc3QgYXR0YWNobWVudEZpbGUgPSBleHRyYWN0TGlua0ZpbGUoYXBwLCBsaW5rLCBwYXRoKTtcbiAgICAgIGlmICghYXR0YWNobWVudEZpbGUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05vdGVFeChhcHAsIGF0dGFjaG1lbnRGaWxlLnBhdGgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwYXJlbnRGb2xkZXJQYXRocy5hZGQoYXR0YWNobWVudEZpbGUucGFyZW50Py5wYXRoID8/ICcnKTtcbiAgICAgIGF3YWl0IGRlbGV0ZVNhZmUoYXBwLCBhdHRhY2htZW50RmlsZSwgcGF0aCwgZmFsc2UsIHNldHRpbmdzLmVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yICE9PSBFbXB0eUF0dGFjaG1lbnRGb2xkZXJCZWhhdmlvci5LZWVwKTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgY2xlYW51cFBhcmVudEZvbGRlcnMoYXBwLCBBcnJheS5mcm9tKHBhcmVudEZvbGRlclBhdGhzKSwgcGF0aCk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgY29uc3QgYXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChhcHAsIHBhdGgpO1xuICBjb25zdCBhdHRhY2htZW50Rm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKGFwcCwgYXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gIGlmICghYXR0YWNobWVudEZvbGRlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghKGF3YWl0IGhhc093bkF0dGFjaG1lbnRGb2xkZXIoYXBwLCBwYXRoKSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gIGF3YWl0IGRlbGV0ZVNhZmUoYXBwLCBhdHRhY2htZW50Rm9sZGVyLCBwYXRoLCBmYWxzZSwgc2V0dGluZ3MuZW1wdHlBdHRhY2htZW50Rm9sZGVyQmVoYXZpb3IgIT09IEVtcHR5QXR0YWNobWVudEZvbGRlckJlaGF2aW9yLktlZXApO1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVEZWxldGVJZkVuYWJsZWQocGx1Z2luOiBBYm9ydGFibGVQbHVnaW4sIGZpbGU6IFRBYnN0cmFjdEZpbGUsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IHZvaWQge1xuICBjb25zdCBhcHAgPSBwbHVnaW4uYXBwO1xuICBpZiAoIXNob3VsZEludm9rZUhhbmRsZXIocGx1Z2luKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwYXRoID0gZmlsZS5wYXRoO1xuICBhZGRUb1F1ZXVlKGFwcCwgKGFib3J0U2lnbmFsMikgPT4gaGFuZGxlRGVsZXRlKGFwcCwgcGF0aCwgYWJvcnRTaWduYWwyKSwgYWJvcnRTaWduYWwpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVNZXRhZGF0YURlbGV0ZWQoYXBwOiBBcHAsIGZpbGU6IFRBYnN0cmFjdEZpbGUsIHByZXZDYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsKTogdm9pZCB7XG4gIGNvbnN0IHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoYXBwKTtcbiAgaWYgKHNldHRpbmdzLmlzUGF0aElnbm9yZWQ/LihmaWxlLnBhdGgpKSB7XG4gICAgY29uc29sZS53YXJuKGBTa2lwcGluZyBtZXRhZGF0YSBkZWxldGUgaGFuZGxlciBvZiAke2ZpbGUucGF0aH0gYXMgdGhlIHBhdGggaXMgaWdub3JlZC5gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXNldHRpbmdzLnNob3VsZEhhbmRsZURlbGV0aW9ucykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXNNYXJrZG93bkZpbGUoYXBwLCBmaWxlKSAmJiBwcmV2Q2FjaGUpIHtcbiAgICBkZWxldGVkTWV0YWRhdGFDYWNoZU1hcC5zZXQoZmlsZS5wYXRoLCBwcmV2Q2FjaGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZU1ldGFkYXRhRGVsZXRlZElmRW5hYmxlZChwbHVnaW46IFBsdWdpbiwgZmlsZTogVEFic3RyYWN0RmlsZSwgcHJldkNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGwpOiB2b2lkIHtcbiAgaWYgKCFzaG91bGRJbnZva2VIYW5kbGVyKHBsdWdpbikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFuZGxlTWV0YWRhdGFEZWxldGVkKHBsdWdpbi5hcHAsIGZpbGUsIHByZXZDYWNoZSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVJlbmFtZShhcHA6IEFwcCwgb2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IHZvaWQge1xuICBjb25zdCBrZXkgPSBtYWtlS2V5KG9sZFBhdGgsIG5ld1BhdGgpO1xuICBnZXRMaWJEZWJ1Z2dlcignUmVuYW1lRGVsZXRlSGFuZGxlcjpoYW5kbGVSZW5hbWUnKShgSGFuZGxlIFJlbmFtZSAke2tleX1gKTtcbiAgaWYgKGhhbmRsZWRSZW5hbWVzLmhhcyhrZXkpKSB7XG4gICAgaGFuZGxlZFJlbmFtZXMuZGVsZXRlKGtleSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhhcHApO1xuICBpZiAoIXNldHRpbmdzLnNob3VsZEhhbmRsZVJlbmFtZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2V0dGluZ3MuaXNQYXRoSWdub3JlZD8uKG9sZFBhdGgpKSB7XG4gICAgY29uc29sZS53YXJuKGBTa2lwcGluZyByZW5hbWUgaGFuZGxlciBvZiBvbGQgcGF0aCAke29sZFBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNldHRpbmdzLmlzUGF0aElnbm9yZWQ/LihuZXdQYXRoKSkge1xuICAgIGNvbnNvbGUud2FybihgU2tpcHBpbmcgcmVuYW1lIGhhbmRsZXIgb2YgbmV3IHBhdGggJHtuZXdQYXRofSBhcyB0aGUgcGF0aCBpcyBpZ25vcmVkLmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNhY2hlID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Q2FjaGUob2xkUGF0aCkgPz8gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Q2FjaGUobmV3UGF0aCk7XG4gIGNvbnN0IG9sZFBhdGhMaW5rcyA9IGNhY2hlID8gZ2V0QWxsTGlua3MoY2FjaGUpIDogW107XG4gIGNvbnN0IG9sZFBhdGhCYWNrbGlua3NNYXAgPSBnZXRCYWNrbGlua3NGb3JGaWxlT3JQYXRoKGFwcCwgb2xkUGF0aCkuZGF0YTtcbiAgYWRkVG9RdWV1ZShhcHAsIChhYm9ydFNpZ25hbDIpID0+IGhhbmRsZVJlbmFtZUFzeW5jKGFwcCwgb2xkUGF0aCwgbmV3UGF0aCwgb2xkUGF0aEJhY2tsaW5rc01hcCwgb2xkUGF0aExpbmtzLCB1bmRlZmluZWQsIGFib3J0U2lnbmFsMiksIGFib3J0U2lnbmFsKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVuYW1lQXN5bmMoXG4gIGFwcDogQXBwLFxuICBvbGRQYXRoOiBzdHJpbmcsXG4gIG5ld1BhdGg6IHN0cmluZyxcbiAgb2xkUGF0aEJhY2tsaW5rc01hcDogTWFwPHN0cmluZywgUmVmZXJlbmNlW10+LFxuICBvbGRQYXRoTGlua3M6IFJlZmVyZW5jZVtdLFxuICBpbnRlcnJ1cHRlZENvbWJpbmVkQmFja2xpbmtzTWFwPzogTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj4sXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhYm9ydFNpZ25hbCA/Pz0gYWJvcnRTaWduYWxOZXZlcigpO1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICBhd2FpdCBjb250aW51ZUludGVycnVwdGVkUmVuYW1lcyhhcHAsIG9sZFBhdGgsIG5ld1BhdGgsIG9sZFBhdGhCYWNrbGlua3NNYXAsIG9sZFBhdGhMaW5rcyk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGF3YWl0IHJlZnJlc2hMaW5rcyhhcHAsIG9sZFBhdGgsIG5ld1BhdGgsIG9sZFBhdGhCYWNrbGlua3NNYXAsIG9sZFBhdGhMaW5rcyk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGlmIChhd2FpdCBoYW5kbGVDYXNlQ29sbGlzaW9uKGFwcCwgb2xkUGF0aCwgbmV3UGF0aCwgb2xkUGF0aEJhY2tsaW5rc01hcCwgb2xkUGF0aExpbmtzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZW5hbWVNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGF3YWl0IGZpbGxSZW5hbWVNYXAoYXBwLCBvbGRQYXRoLCBuZXdQYXRoLCByZW5hbWVNYXAsIG9sZFBhdGhMaW5rcywgYWJvcnRTaWduYWwpO1xuICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBjb25zdCBjb21iaW5lZEJhY2tsaW5rc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmc+PigpO1xuICAgIGluaXRCYWNrbGlua3NNYXAob2xkUGF0aEJhY2tsaW5rc01hcCwgcmVuYW1lTWFwLCBjb21iaW5lZEJhY2tsaW5rc01hcCwgb2xkUGF0aCk7XG5cbiAgICBmb3IgKGNvbnN0IGF0dGFjaG1lbnRPbGRQYXRoIG9mIHJlbmFtZU1hcC5rZXlzKCkpIHtcbiAgICAgIGlmIChhdHRhY2htZW50T2xkUGF0aCA9PT0gb2xkUGF0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRPbGRQYXRoQmFja2xpbmtzTWFwID0gKGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKGFwcCwgYXR0YWNobWVudE9sZFBhdGgpKS5kYXRhO1xuICAgICAgaW5pdEJhY2tsaW5rc01hcChhdHRhY2htZW50T2xkUGF0aEJhY2tsaW5rc01hcCwgcmVuYW1lTWFwLCBjb21iaW5lZEJhY2tsaW5rc01hcCwgYXR0YWNobWVudE9sZFBhdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudEZvbGRlclBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtvbGRBdHRhY2htZW50UGF0aCwgbmV3QXR0YWNobWVudFBhdGhdIG9mIHJlbmFtZU1hcC5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChvbGRBdHRhY2htZW50UGF0aCA9PT0gb2xkUGF0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpeGVkTmV3QXR0YWNobWVudFBhdGggPSBhd2FpdCByZW5hbWVIYW5kbGVkKGFwcCwgb2xkQXR0YWNobWVudFBhdGgsIG5ld0F0dGFjaG1lbnRQYXRoKTtcbiAgICAgIHJlbmFtZU1hcC5zZXQob2xkQXR0YWNobWVudFBhdGgsIGZpeGVkTmV3QXR0YWNobWVudFBhdGgpO1xuICAgICAgcGFyZW50Rm9sZGVyUGF0aHMuYWRkKGRpcm5hbWUob2xkQXR0YWNobWVudFBhdGgpKTtcbiAgICB9XG5cbiAgICBhd2FpdCBjbGVhbnVwUGFyZW50Rm9sZGVycyhhcHAsIEFycmF5LmZyb20ocGFyZW50Rm9sZGVyUGF0aHMpLCBvbGRQYXRoKTtcbiAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoYXBwKTtcblxuICAgIGZvciAoXG4gICAgICBjb25zdCBbbmV3QmFja2xpbmtQYXRoLCBsaW5rSnNvblRvUGF0aE1hcF0gb2YgQXJyYXkuZnJvbShjb21iaW5lZEJhY2tsaW5rc01hcC5lbnRyaWVzKCkpLmNvbmNhdChcbiAgICAgICAgQXJyYXkuZnJvbShpbnRlcnJ1cHRlZENvbWJpbmVkQmFja2xpbmtzTWFwPy5lbnRyaWVzKCkgPz8gW10pXG4gICAgICApXG4gICAgKSB7XG4gICAgICBhd2FpdCBlZGl0TGlua3MoYXBwLCBuZXdCYWNrbGlua1BhdGgsIChsaW5rKSA9PiB7XG4gICAgICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRQYXRoID0gbGlua0pzb25Ub1BhdGhNYXAuZ2V0KHRvSnNvbihsaW5rKSk7XG4gICAgICAgIGlmICghb2xkQXR0YWNobWVudFBhdGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdBdHRhY2htZW50UGF0aCA9IHJlbmFtZU1hcC5nZXQob2xkQXR0YWNobWVudFBhdGgpO1xuICAgICAgICBpZiAoIW5ld0F0dGFjaG1lbnRQYXRoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUxpbmsobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFVwZGF0ZUxpbmtPcHRpb25zPih7XG4gICAgICAgICAgYXBwLFxuICAgICAgICAgIGxpbmssXG4gICAgICAgICAgbmV3U291cmNlUGF0aE9yRmlsZTogbmV3QmFja2xpbmtQYXRoLFxuICAgICAgICAgIG5ld1RhcmdldFBhdGhPckZpbGU6IG5ld0F0dGFjaG1lbnRQYXRoLFxuICAgICAgICAgIG9sZFRhcmdldFBhdGhPckZpbGU6IG9sZEF0dGFjaG1lbnRQYXRoLFxuICAgICAgICAgIHNob3VsZFVwZGF0ZUZpbGVOYW1lQWxpYXM6IHNldHRpbmdzLnNob3VsZFVwZGF0ZUZpbGVOYW1lQWxpYXNlc1xuICAgICAgICB9KSk7XG4gICAgICB9LCB7XG4gICAgICAgIHNob3VsZEZhaWxPbk1pc3NpbmdGaWxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIH1cblxuICAgIGlmIChpc05vdGVFeChhcHAsIG5ld1BhdGgpKSB7XG4gICAgICBhd2FpdCB1cGRhdGVMaW5rc0luRmlsZShub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8VXBkYXRlTGlua3NJbkZpbGVPcHRpb25zPih7XG4gICAgICAgIGFwcCxcbiAgICAgICAgbmV3U291cmNlUGF0aE9yRmlsZTogbmV3UGF0aCxcbiAgICAgICAgb2xkU291cmNlUGF0aE9yRmlsZTogb2xkUGF0aCxcbiAgICAgICAgc2hvdWxkRmFpbE9uTWlzc2luZ0ZpbGU6IGZhbHNlLFxuICAgICAgICBzaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzOiBzZXR0aW5ncy5zaG91bGRVcGRhdGVGaWxlTmFtZUFsaWFzZXNcbiAgICAgIH0pKTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgfVxuXG4gICAgaWYgKCFnZXRGaWxlT3JOdWxsKGFwcCwgbmV3UGF0aCkpIHtcbiAgICAgIGxldCBpbnRlcnJ1cHRlZFJlbmFtZXMgPSBpbnRlcnJ1cHRlZFJlbmFtZXNNYXAuZ2V0KG5ld1BhdGgpO1xuICAgICAgaWYgKCFpbnRlcnJ1cHRlZFJlbmFtZXMpIHtcbiAgICAgICAgaW50ZXJydXB0ZWRSZW5hbWVzID0gW107XG4gICAgICAgIGludGVycnVwdGVkUmVuYW1lc01hcC5zZXQobmV3UGF0aCwgaW50ZXJydXB0ZWRSZW5hbWVzKTtcbiAgICAgIH1cbiAgICAgIGludGVycnVwdGVkUmVuYW1lcy5wdXNoKHtcbiAgICAgICAgY29tYmluZWRCYWNrbGlua3NNYXAsXG4gICAgICAgIG9sZFBhdGhcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdCBvcnBoYW5LZXlzID0gQXJyYXkuZnJvbShoYW5kbGVkUmVuYW1lcyk7XG4gICAgYWRkVG9RdWV1ZShhcHAsICgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIG9ycGhhbktleXMpIHtcbiAgICAgICAgaGFuZGxlZFJlbmFtZXMuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgfSwgYWJvcnRTaWduYWwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVJlbmFtZUlmRW5hYmxlZChwbHVnaW46IFBsdWdpbiwgZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nLCBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiB2b2lkIHtcbiAgaWYgKCFzaG91bGRJbnZva2VIYW5kbGVyKHBsdWdpbikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFpc0ZpbGUoZmlsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmV3UGF0aCA9IGZpbGUucGF0aDtcbiAgaGFuZGxlUmVuYW1lKHBsdWdpbi5hcHAsIG9sZFBhdGgsIG5ld1BhdGgsIGFib3J0U2lnbmFsKTtcbn1cblxuZnVuY3Rpb24gaW5pdEJhY2tsaW5rc01hcChcbiAgc2luZ2xlQmFja2xpbmtzTWFwOiBNYXA8c3RyaW5nLCBSZWZlcmVuY2VbXT4sXG4gIHJlbmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPixcbiAgY29tYmluZWRCYWNrbGlua3NNYXA6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHN0cmluZz4+LFxuICBwYXRoOiBzdHJpbmdcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IFtiYWNrbGlua1BhdGgsIGxpbmtzXSBvZiBzaW5nbGVCYWNrbGlua3NNYXAuZW50cmllcygpKSB7XG4gICAgY29uc3QgbmV3QmFja2xpbmtQYXRoID0gcmVuYW1lTWFwLmdldChiYWNrbGlua1BhdGgpID8/IGJhY2tsaW5rUGF0aDtcbiAgICBjb25zdCBsaW5rSnNvblRvUGF0aE1hcCA9IGNvbWJpbmVkQmFja2xpbmtzTWFwLmdldChuZXdCYWNrbGlua1BhdGgpID8/IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgY29tYmluZWRCYWNrbGlua3NNYXAuc2V0KG5ld0JhY2tsaW5rUGF0aCwgbGlua0pzb25Ub1BhdGhNYXApO1xuICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgbGlua0pzb25Ub1BhdGhNYXAuc2V0KHRvSnNvbihsaW5rKSwgcGF0aCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTm90ZUV4KGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhhcHApO1xuICByZXR1cm4gc2V0dGluZ3MuaXNOb3RlPy4ocGF0aCkgPz8gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxvZ1JlZ2lzdGVyZWRIYW5kbGVycyhhcHA6IEFwcCk6IHZvaWQge1xuICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9IGdldFJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwKGFwcCk7XG4gIGdldExpYkRlYnVnZ2VyKCdSZW5hbWVEZWxldGVIYW5kbGVyOmxvZ1JlZ2lzdGVyZWRIYW5kbGVycycpKFxuICAgIGBQbHVnaW5zIHdpdGggcmVnaXN0ZXJlZCByZW5hbWUvZGVsZXRlIGhhbmRsZXJzOiAke0pTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAua2V5cygpKSl9YFxuICApO1xufVxuXG5mdW5jdGlvbiBtYWtlS2V5KG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke29sZFBhdGh9IC0+ICR7bmV3UGF0aH1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoTGlua3MoXG4gIGFwcDogQXBwLFxuICBvbGRQYXRoOiBzdHJpbmcsXG4gIG5ld1BhdGg6IHN0cmluZyxcbiAgb2xkUGF0aEJhY2tsaW5rc01hcDogTWFwPHN0cmluZywgUmVmZXJlbmNlW10+LFxuICBvbGRQYXRoTGlua3M6IFJlZmVyZW5jZVtdXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2FjaGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRDYWNoZShvbGRQYXRoKSA/PyBhcHAubWV0YWRhdGFDYWNoZS5nZXRDYWNoZShuZXdQYXRoKTtcbiAgY29uc3Qgb2xkUGF0aExpbmtzUmVmcmVzaGVkID0gY2FjaGUgPyBnZXRBbGxMaW5rcyhjYWNoZSkgOiBbXTtcbiAgY29uc3QgZmFrZU9sZEZpbGUgPSBnZXRGaWxlKGFwcCwgb2xkUGF0aCwgdHJ1ZSk7XG4gIGxldCBvbGRQYXRoQmFja2xpbmtzTWFwUmVmcmVzaGVkID0gbmV3IE1hcDxzdHJpbmcsIFJlZmVyZW5jZVtdPigpO1xuICBhd2FpdCB0ZW1wUmVnaXN0ZXJGaWxlc0FuZFJ1bihhcHAsIFtmYWtlT2xkRmlsZV0sIGFzeW5jICgpID0+IHtcbiAgICBvbGRQYXRoQmFja2xpbmtzTWFwUmVmcmVzaGVkID0gKGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKGFwcCwgZmFrZU9sZEZpbGUpKS5kYXRhO1xuICB9KTtcblxuICBmb3IgKGNvbnN0IGxpbmsgb2Ygb2xkUGF0aExpbmtzUmVmcmVzaGVkKSB7XG4gICAgaWYgKG9sZFBhdGhMaW5rcy5pbmNsdWRlcyhsaW5rKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG9sZFBhdGhMaW5rcy5wdXNoKGxpbmspO1xuICB9XG5cbiAgZm9yIChjb25zdCBbYmFja2xpbmtQYXRoLCByZWZyZXNoZWRMaW5rc10gb2Ygb2xkUGF0aEJhY2tsaW5rc01hcFJlZnJlc2hlZC5lbnRyaWVzKCkpIHtcbiAgICBsZXQgb2xkTGlua3MgPSBvbGRQYXRoQmFja2xpbmtzTWFwLmdldChiYWNrbGlua1BhdGgpO1xuICAgIGlmICghb2xkTGlua3MpIHtcbiAgICAgIG9sZExpbmtzID0gW107XG4gICAgICBvbGRQYXRoQmFja2xpbmtzTWFwLnNldChiYWNrbGlua1BhdGgsIG9sZExpbmtzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxpbmsgb2YgcmVmcmVzaGVkTGlua3MpIHtcbiAgICAgIGlmIChvbGRMaW5rcy5pbmNsdWRlcyhsaW5rKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG9sZExpbmtzLnB1c2gobGluayk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlbmFtZUhhbmRsZWQoYXBwOiBBcHAsIG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbmV3UGF0aCA9IGdldFNhZmVSZW5hbWVQYXRoKGFwcCwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gIGlmIChvbGRQYXRoID09PSBuZXdQYXRoKSB7XG4gICAgcmV0dXJuIG5ld1BhdGg7XG4gIH1cbiAgY29uc3Qga2V5ID0gbWFrZUtleShvbGRQYXRoLCBuZXdQYXRoKTtcbiAgaGFuZGxlZFJlbmFtZXMuYWRkKGtleSk7XG4gIG5ld1BhdGggPSBhd2FpdCByZW5hbWVTYWZlKGFwcCwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gIHJldHVybiBuZXdQYXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Bc3luY0xpbmtVcGRhdGUoYXBwOiBBcHAsIG5leHQ6IFJ1bkFzeW5jTGlua1VwZGF0ZUZuLCBsaW5rVXBkYXRlc0hhbmRsZXI6IExpbmtVcGRhdGVzSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXh0LmNhbGwoYXBwLmZpbGVNYW5hZ2VyLCB3cmFwcGVkSGFuZGxlcik7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd3JhcHBlZEhhbmRsZXIobGlua1VwZGF0ZXM6IExpbmtVcGRhdGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBpc1JlbmFtZUNhbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGV2ZW50UmVmID0gYXBwLnZhdWx0Lm9uKCdyZW5hbWUnLCAoKSA9PiB7XG4gICAgICBpc1JlbmFtZUNhbGxlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGxpbmtVcGRhdGVzSGFuZGxlcihsaW5rVXBkYXRlcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFwcC52YXVsdC5vZmZyZWYoZXZlbnRSZWYpO1xuICAgIH1cbiAgICBjb25zdCBzZXR0aW5ncyA9IGdldFNldHRpbmdzKGFwcCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICBpZiAoaXNSZW5hbWVDYWxsZWQgJiYgc2V0dGluZ3Muc2hvdWxkSGFuZGxlUmVuYW1lcykge1xuICAgICAgZmlsdGVySW5QbGFjZShcbiAgICAgICAgbGlua1VwZGF0ZXMsXG4gICAgICAgIChsaW5rVXBkYXRlKSA9PiB7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLmlzUGF0aElnbm9yZWQ/LihsaW5rVXBkYXRlLnNvdXJjZUZpbGUucGF0aCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgUm9sbCBiYWNrIHRvIGRlZmF1bHQgbGluayB1cGRhdGUgb2Ygc291cmNlIGZpbGUgJHtsaW5rVXBkYXRlLnNvdXJjZUZpbGUucGF0aH0gYXMgdGhlIHBhdGggaXMgaWdub3JlZC5gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZXR0aW5ncy5pc1BhdGhJZ25vcmVkPy4obGlua1VwZGF0ZS5yZXNvbHZlZEZpbGUucGF0aCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgUm9sbCBiYWNrIHRvIGRlZmF1bHQgbGluayB1cGRhdGUgb2YgcmVzb2x2ZWQgZmlsZSAke2xpbmtVcGRhdGUucmVzb2x2ZWRGaWxlLnBhdGh9IGFzIHRoZSBwYXRoIGlzIGlnbm9yZWQuYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWFwcC5pbnRlcm5hbFBsdWdpbnMuZ2V0RW5hYmxlZFBsdWdpbkJ5SWQoSW50ZXJuYWxQbHVnaW5OYW1lLkNhbnZhcykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKCdiYWNrbGluay1jYWNoZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxpbmtVcGRhdGUuc291cmNlRmlsZS5leHRlbnNpb24gPT09ICdjYW52YXMnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobGlua1VwZGF0ZS5yZXNvbHZlZEZpbGUuZXh0ZW5zaW9uID09PSAnY2FudmFzJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRJbnZva2VIYW5kbGVyKHBsdWdpbjogUGx1Z2luKTogYm9vbGVhbiB7XG4gIGNvbnN0IGFwcCA9IHBsdWdpbi5hcHA7XG4gIGNvbnN0IHBsdWdpbklkID0gcGx1Z2luLm1hbmlmZXN0LmlkO1xuXG4gIGNvbnN0IHJlbmFtZURlbGV0ZUhhbmRsZXJQbHVnaW5JZHMgPSBnZXRSZW5hbWVEZWxldGVIYW5kbGVyc01hcChhcHApO1xuICBjb25zdCBtYWluUGx1Z2luSWQgPSBBcnJheS5mcm9tKHJlbmFtZURlbGV0ZUhhbmRsZXJQbHVnaW5JZHMua2V5cygpKVswXTtcbiAgaWYgKG1haW5QbHVnaW5JZCAhPT0gcGx1Z2luSWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBb0JBLFNBQVMsYUFBYTtBQUN0QixTQUFTLDBCQUEwQjtBQU9uQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLHFCQUFxQjtBQUM5QixTQUFTLHNCQUFzQjtBQUMvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxnQ0FBZ0M7QUFDekM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHFCQUFxQjtBQUM5QixTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsTUFBTSwwQkFBMEIsb0JBQUksSUFBNEI7QUFDaEUsTUFBTSxpQkFBaUIsb0JBQUks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
|