obsidian-dev-utils 90.1.0 → 90.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -1
- package/dist/integration-test-plugin/main.js +100 -46
- package/dist/lib/cjs/__merged.cjs +3 -1
- package/dist/lib/cjs/__merged.d.cts +1 -1
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/attachment-path.cjs +101 -47
- package/dist/lib/cjs/obsidian/attachment-path.d.cts +35 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +3 -2
- package/dist/lib/esm/__merged.d.mts +1 -1
- package/dist/lib/esm/__merged.mjs +3 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/attachment-path.d.mts +35 -0
- package/dist/lib/esm/obsidian/attachment-path.mjs +100 -47
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +3 -2
- package/package.json +8 -8
|
@@ -125,6 +125,7 @@ __export(attachment_path_exports, {
|
|
|
125
125
|
DUMMY_PATH: () => DUMMY_PATH,
|
|
126
126
|
getAttachmentFilePath: () => getAttachmentFilePath,
|
|
127
127
|
getAttachmentFolderPath: () => getAttachmentFolderPath,
|
|
128
|
+
getAttachmentFolderPathSyncOrNull: () => getAttachmentFolderPathSyncOrNull,
|
|
128
129
|
getAvailablePathForAttachments: () => getAvailablePathForAttachments,
|
|
129
130
|
hasOwnAttachmentFolder: () => hasOwnAttachmentFolder,
|
|
130
131
|
isAtProperAttachmentPath: () => isAtProperAttachmentPath
|
|
@@ -148,30 +149,28 @@ async function getAttachmentFilePath(params) {
|
|
|
148
149
|
oldAttachmentPathOrFile,
|
|
149
150
|
shouldSkipDuplicateCheck
|
|
150
151
|
} = params;
|
|
152
|
+
const extendedFunction = getExtendedFunction(app);
|
|
153
|
+
if (!extendedFunction) {
|
|
154
|
+
return getAttachmentFilePathSync({
|
|
155
|
+
app,
|
|
156
|
+
notePathOrFile,
|
|
157
|
+
oldAttachmentPathOrFile,
|
|
158
|
+
shouldSkipDuplicateCheck
|
|
159
|
+
});
|
|
160
|
+
}
|
|
151
161
|
const attachmentPath = (0, import_file_system.getPath)(app, oldAttachmentPathOrFile);
|
|
152
162
|
const attachmentFileExtension = (0, import_path.extname)(attachmentPath);
|
|
153
163
|
const attachmentFileBaseName = (0, import_path.basename)(attachmentPath, attachmentFileExtension);
|
|
154
164
|
const attachmentFile = (0, import_file_system.getFileOrNull)({ app, pathOrFile: attachmentPath });
|
|
155
|
-
|
|
156
|
-
if (extendedFunction) {
|
|
157
|
-
return extendedFunction({
|
|
158
|
-
attachmentFileBaseName,
|
|
159
|
-
attachmentFileExtension: attachmentFileExtension.slice(1),
|
|
160
|
-
attachmentFileStats: attachmentFile?.stat,
|
|
161
|
-
context: params.context,
|
|
162
|
-
notePathOrFile,
|
|
163
|
-
oldAttachmentPathOrFile: params.oldAttachmentPathOrFile,
|
|
164
|
-
oldNotePathOrFile: params.oldNotePathOrFile,
|
|
165
|
-
readAttachmentFileContent: attachmentFile ? () => app.vault.readBinary(attachmentFile) : null,
|
|
166
|
-
shouldSkipDuplicateCheck,
|
|
167
|
-
shouldSkipMissingAttachmentFolderCreation: true
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
return await getAvailablePathForAttachments({
|
|
171
|
-
app,
|
|
165
|
+
return await extendedFunction({
|
|
172
166
|
attachmentFileBaseName,
|
|
173
167
|
attachmentFileExtension: attachmentFileExtension.slice(1),
|
|
168
|
+
attachmentFileStats: attachmentFile?.stat,
|
|
169
|
+
context: params.context,
|
|
174
170
|
notePathOrFile,
|
|
171
|
+
oldAttachmentPathOrFile,
|
|
172
|
+
oldNotePathOrFile: params.oldNotePathOrFile,
|
|
173
|
+
readAttachmentFileContent: attachmentFile ? () => app.vault.readBinary(attachmentFile) : null,
|
|
175
174
|
shouldSkipDuplicateCheck,
|
|
176
175
|
shouldSkipMissingAttachmentFolderCreation: true
|
|
177
176
|
});
|
|
@@ -192,42 +191,32 @@ async function getAttachmentFolderPath(params) {
|
|
|
192
191
|
})
|
|
193
192
|
);
|
|
194
193
|
}
|
|
194
|
+
function getAttachmentFolderPathSyncOrNull(params) {
|
|
195
|
+
const {
|
|
196
|
+
app,
|
|
197
|
+
notePathOrFile
|
|
198
|
+
} = params;
|
|
199
|
+
if (getExtendedFunction(app)) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
return (0, import_implementations.parentFolderPath)(getAttachmentFilePathSync({
|
|
203
|
+
app,
|
|
204
|
+
notePathOrFile,
|
|
205
|
+
oldAttachmentPathOrFile: DUMMY_PATH,
|
|
206
|
+
shouldSkipDuplicateCheck: true
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
195
209
|
async function getAvailablePathForAttachments(params) {
|
|
196
210
|
const {
|
|
197
211
|
app,
|
|
198
|
-
attachmentFileExtension,
|
|
199
212
|
notePathOrFile,
|
|
200
|
-
shouldSkipDuplicateCheck,
|
|
201
213
|
shouldSkipMissingAttachmentFolderCreation
|
|
202
214
|
} = params;
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
$string: attachmentFolderPath,
|
|
207
|
-
prefix: "./"
|
|
208
|
-
}) : null;
|
|
209
|
-
const noteFileOrNull = notePathOrFile === null ? null : (0, import_file_system.getFile)({
|
|
210
|
-
app,
|
|
211
|
-
pathOrFile: notePathOrFile,
|
|
212
|
-
shouldIncludeNonExisting: true
|
|
213
|
-
});
|
|
214
|
-
if (isCurrentFolder) {
|
|
215
|
-
attachmentFolderPath = noteFileOrNull ? noteFileOrNull.parent?.path ?? "" : "";
|
|
216
|
-
} else if (relativePath) {
|
|
217
|
-
attachmentFolderPath = (noteFileOrNull ? noteFileOrNull.parent?.getParentPrefix() ?? "" : "") + relativePath;
|
|
215
|
+
const attachmentFolder = resolveAttachmentFolder({ app, notePathOrFile });
|
|
216
|
+
if (!attachmentFolder.folder && attachmentFolder.relativePath && !shouldSkipMissingAttachmentFolderCreation) {
|
|
217
|
+
await app.vault.createFolder(attachmentFolder.path);
|
|
218
218
|
}
|
|
219
|
-
|
|
220
|
-
const attachmentFileBaseName = (0, import_string.normalizeString)(normalizeSlashes(params.attachmentFileBaseName));
|
|
221
|
-
let folder = (0, import_file_system.getFolderOrNull)({ app, isCaseInsensitive: true, pathOrFolder: attachmentFolderPath });
|
|
222
|
-
if (!folder && relativePath && !shouldSkipMissingAttachmentFolderCreation) {
|
|
223
|
-
folder = await app.vault.createFolder(attachmentFolderPath);
|
|
224
|
-
}
|
|
225
|
-
folder ??= (0, import_file_system.getFolder)({ app, pathOrFolder: attachmentFolderPath, shouldIncludeNonExisting: true });
|
|
226
|
-
const prefix = folder.getParentPrefix();
|
|
227
|
-
return shouldSkipDuplicateCheck ? (0, import_path.makeFileName)({
|
|
228
|
-
fileBaseName: prefix + attachmentFileBaseName,
|
|
229
|
-
fileExtension: attachmentFileExtension
|
|
230
|
-
}) : app.vault.getAvailablePath(prefix + attachmentFileBaseName, attachmentFileExtension);
|
|
219
|
+
return getAvailablePathForAttachmentsSync(params);
|
|
231
220
|
}
|
|
232
221
|
async function hasOwnAttachmentFolder(params) {
|
|
233
222
|
const {
|
|
@@ -286,6 +275,42 @@ async function isAtProperAttachmentPath(params) {
|
|
|
286
275
|
const deduplicationSuffix = currentBaseName.slice(deduplicationPrefix.length);
|
|
287
276
|
return /^\d+$/.test(deduplicationSuffix);
|
|
288
277
|
}
|
|
278
|
+
function getAttachmentFilePathSync(params) {
|
|
279
|
+
const {
|
|
280
|
+
app,
|
|
281
|
+
notePathOrFile,
|
|
282
|
+
oldAttachmentPathOrFile,
|
|
283
|
+
shouldSkipDuplicateCheck
|
|
284
|
+
} = params;
|
|
285
|
+
const attachmentPath = (0, import_file_system.getPath)(app, oldAttachmentPathOrFile);
|
|
286
|
+
const attachmentFileExtension = (0, import_path.extname)(attachmentPath);
|
|
287
|
+
return getAvailablePathForAttachmentsSync({
|
|
288
|
+
app,
|
|
289
|
+
attachmentFileBaseName: (0, import_path.basename)(attachmentPath, attachmentFileExtension),
|
|
290
|
+
attachmentFileExtension: attachmentFileExtension.slice(1),
|
|
291
|
+
notePathOrFile,
|
|
292
|
+
shouldSkipDuplicateCheck
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
function getAvailablePathForAttachmentsSync(params) {
|
|
296
|
+
const {
|
|
297
|
+
app,
|
|
298
|
+
attachmentFileExtension,
|
|
299
|
+
notePathOrFile,
|
|
300
|
+
shouldSkipDuplicateCheck
|
|
301
|
+
} = params;
|
|
302
|
+
const attachmentFolder = resolveAttachmentFolder({ app, notePathOrFile });
|
|
303
|
+
const attachmentFileBaseName = (0, import_string.normalizeString)(normalizeSlashes(params.attachmentFileBaseName));
|
|
304
|
+
const folder = attachmentFolder.folder ?? (0, import_file_system.getFolder)({ app, pathOrFolder: attachmentFolder.path, shouldIncludeNonExisting: true });
|
|
305
|
+
const prefix = folder.getParentPrefix();
|
|
306
|
+
return shouldSkipDuplicateCheck ? (0, import_path.makeFileName)({
|
|
307
|
+
fileBaseName: prefix + attachmentFileBaseName,
|
|
308
|
+
fileExtension: attachmentFileExtension
|
|
309
|
+
}) : app.vault.getAvailablePath(prefix + attachmentFileBaseName, attachmentFileExtension);
|
|
310
|
+
}
|
|
311
|
+
function getExtendedFunction(app) {
|
|
312
|
+
return app.vault.getAvailablePathForAttachments.extended;
|
|
313
|
+
}
|
|
289
314
|
function normalizeSlashes(path) {
|
|
290
315
|
path = (0, import_string.replaceAll)({
|
|
291
316
|
$string: path,
|
|
@@ -299,14 +324,43 @@ function normalizeSlashes(path) {
|
|
|
299
324
|
});
|
|
300
325
|
return path || "/";
|
|
301
326
|
}
|
|
327
|
+
function resolveAttachmentFolder(params) {
|
|
328
|
+
const {
|
|
329
|
+
app,
|
|
330
|
+
notePathOrFile
|
|
331
|
+
} = params;
|
|
332
|
+
let attachmentFolderPath = app.vault.getConfig("attachmentFolderPath");
|
|
333
|
+
const isCurrentFolder = attachmentFolderPath === "." || attachmentFolderPath === "./";
|
|
334
|
+
const relativePath = attachmentFolderPath.startsWith("./") ? (0, import_string.trimStart)({
|
|
335
|
+
$string: attachmentFolderPath,
|
|
336
|
+
prefix: "./"
|
|
337
|
+
}) : null;
|
|
338
|
+
const noteFileOrNull = notePathOrFile === null ? null : (0, import_file_system.getFile)({
|
|
339
|
+
app,
|
|
340
|
+
pathOrFile: notePathOrFile,
|
|
341
|
+
shouldIncludeNonExisting: true
|
|
342
|
+
});
|
|
343
|
+
if (isCurrentFolder) {
|
|
344
|
+
attachmentFolderPath = noteFileOrNull ? noteFileOrNull.parent?.path ?? "" : "";
|
|
345
|
+
} else if (relativePath) {
|
|
346
|
+
attachmentFolderPath = (noteFileOrNull ? noteFileOrNull.parent?.getParentPrefix() ?? "" : "") + relativePath;
|
|
347
|
+
}
|
|
348
|
+
attachmentFolderPath = (0, import_string.normalizeString)(normalizeSlashes(attachmentFolderPath));
|
|
349
|
+
return {
|
|
350
|
+
folder: (0, import_file_system.getFolderOrNull)({ app, isCaseInsensitive: true, pathOrFolder: attachmentFolderPath }),
|
|
351
|
+
path: attachmentFolderPath,
|
|
352
|
+
relativePath
|
|
353
|
+
};
|
|
354
|
+
}
|
|
302
355
|
// Annotate the CommonJS export names for ESM import in node:
|
|
303
356
|
0 && (module.exports = {
|
|
304
357
|
AttachmentPathContext,
|
|
305
358
|
DUMMY_PATH,
|
|
306
359
|
getAttachmentFilePath,
|
|
307
360
|
getAttachmentFolderPath,
|
|
361
|
+
getAttachmentFolderPathSyncOrNull,
|
|
308
362
|
getAvailablePathForAttachments,
|
|
309
363
|
hasOwnAttachmentFolder,
|
|
310
364
|
isAtProperAttachmentPath
|
|
311
365
|
});
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2F0dGFjaG1lbnQtcGF0aC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggYXR0YWNobWVudCBwYXRocy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRmlsZVN0YXRzLFxuICBWYXVsdFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIGdldERhdGFBZGFwdGVyRXgsXG4gIHBhcmVudEZvbGRlclBhdGhcbn0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW4sXG4gIG1ha2VGaWxlTmFtZVxufSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7XG4gIG5vcm1hbGl6ZVN0cmluZyxcbiAgcmVwbGFjZUFsbCxcbiAgdHJpbVN0YXJ0XG59IGZyb20gJy4uL3N0cmluZy50cyc7XG5pbXBvcnQge1xuICBnZXRGaWxlLFxuICBnZXRGaWxlT3JOdWxsLFxuICBnZXRGb2xkZXIsXG4gIGdldEZvbGRlck9yTnVsbCxcbiAgZ2V0UGF0aCxcbiAgTUFSS0RPV05fRklMRV9FWFRFTlNJT05cbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbi8qKlxuICogQSBjb250ZXh0IGZvciBhbiBhdHRhY2htZW50IHBhdGguXG4gKi9cbmV4cG9ydCBlbnVtIEF0dGFjaG1lbnRQYXRoQ29udGV4dCB7XG4gIC8qKlxuICAgKiBBIGNvbnRleHQgZm9yIGEgZGVsZXRlIG5vdGUuXG4gICAqL1xuICBEZWxldGVOb3RlID0gJ0RlbGV0ZU5vdGUnLFxuXG4gIC8qKlxuICAgKiBBIGNvbnRleHQgZm9yIGEgcmVuYW1lIG5vdGUuXG4gICAqL1xuICBSZW5hbWVOb3RlID0gJ1JlbmFtZU5vdGUnLFxuXG4gIC8qKlxuICAgKiBBbiB1bmtub3duIGNvbnRleHQuXG4gICAqL1xuICBVbmtub3duID0gJ1Vua25vd24nXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGdldCBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMgZXh0ZW5kZWQgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRXh0ZW5kZWRGdW5jdGlvblBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIGJhc2UgbmFtZSBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdGF0cyBvZiB0aGUgYXR0YWNobWVudCBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVTdGF0cz86IEZpbGVTdGF0cyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQSBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9yIGZpbGUgb2YgdGhlIG9sZCBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvciBmaWxlIG9mIHRoZSBvbGQgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZE5vdGVQYXRoT3JGaWxlPzogUGF0aE9yRmlsZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogTGF6aWx5IHJlYWRzIHRoZSBjb250ZW50IG9mIHRoZSBhdHRhY2htZW50IGZpbGUuXG4gICAqXG4gICAqIFRoZSBjb250ZW50IGlzIHJlYWQgb24gZGVtYW5kIG9ubHkgd2hlbiBhIGNvbnN1bWVyIGFjdHVhbGx5IG5lZWRzIHRoZSBieXRlcyAoZS5nLiBhIHRlbXBsYXRlXG4gICAqIHRva2VuIHRoYXQgZW1iZWRzIHRoZW0pLiBGb3IgdGhlIGRlZmF1bHQgdGVtcGxhdGVzIG5vdGhpbmcgcHVsbHMgdGhlIGJ5dGVzLCBzbyB0aGUgcG90ZW50aWFsbHlcbiAgICogZXhwZW5zaXZlIChzaXplLXByb3BvcnRpb25hbCkgYHJlYWRCaW5hcnlgIG5ldmVyIHJ1bnMuIENvbnN1bWVycyB0aGF0IG1heSBjYWxsIHRoaXMgbW9yZSB0aGFuXG4gICAqIG9uY2Ugc2hvdWxkIG1lbW9pemUgdGhlIGZpcnN0IGNhbGwuIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vIGF0dGFjaG1lbnQgZmlsZSB0byByZWFkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb250ZW50IG9mIHRoZSBhdHRhY2htZW50IGZpbGUuXG4gICAqL1xuICByZWFkb25seSByZWFkQXR0YWNobWVudEZpbGVDb250ZW50OiAoKCkgPT4gUHJvbWlzZTxBcnJheUJ1ZmZlcj4pIHwgbnVsbDtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZ2VuZXJhdGVkIGF0dGFjaG1lbnQgZmlsZSBuYW1lIGJlIHNraXBwZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwR2VuZXJhdGVkQXR0YWNobWVudEZpbGVOYW1lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdWxkIG1pc3NpbmcgYXR0YWNobWVudCBmb2xkZXIgY3JlYXRpb24gYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIHtAbGluayBWYXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHN9IGV4dGVuZGVkIHdyYXBwZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZCBleHRlbmRzIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uIHtcbiAgLyoqXG4gICAqIEdldCBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMgd2l0aCBhZGRpdGlvbmFsIHBhcmFtcy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMuXG4gICAqL1xuICBleHRlbmRlZChwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXMpOiBQcm9taXNlPHN0cmluZz47XG59XG5cbnR5cGUgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb24gPSBWYXVsdFsnZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzJ107XG5cbi8qKlxuICogRHVtbXkgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IERVTU1ZX1BBVEggPSAnX19EVU1NWV9fJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZ2V0QXR0YWNobWVudEZpbGVQYXRoIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF0dGFjaG1lbnRGaWxlUGF0aFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBBdHRhY2htZW50UGF0aENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBvbGRBdHRhY2htZW50UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9mIHRoZSBvbGQgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZE5vdGVQYXRoT3JGaWxlPzogUGF0aE9yRmlsZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjazogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QXR0YWNobWVudEZvbGRlclBhdGh9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF0dGFjaG1lbnRGb2xkZXJQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEF0dGFjaG1lbnRQYXRoQ29udGV4dC5Vbmtub3dufVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dD86IEF0dGFjaG1lbnRQYXRoQ29udGV4dDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuICAvKipcbiAgICogQSBiYXNlIG5hbWUgb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUJhc2VOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbiBleHRlbnNpb24gb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuICAvKipcbiAgICogQSBmaWxlIHRvIGF0dGFjaCB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZHVwbGljYXRlIGNoZWNrIGJlIHNraXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG91bGQgbWlzc2luZyBhdHRhY2htZW50IGZvbGRlciBjcmVhdGlvbiBiZSBza2lwcGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGhhc093bkF0dGFjaG1lbnRGb2xkZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhc093bkF0dGFjaG1lbnRGb2xkZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd259XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaXNBdFByb3BlckF0dGFjaG1lbnRQYXRofS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc0F0UHJvcGVyQXR0YWNobWVudFBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIGF0dGFjaG1lbnQgdG8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIGNvbnRleHQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bn1cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBBdHRhY2htZW50UGF0aENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdGhhdCByZWZlcmVuY2VzIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmaWxlIHBhdGggZm9yIGFuIGF0dGFjaG1lbnQgd2l0aGluIGEgbm90ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGdldCBhdHRhY2htZW50IGZpbGUgcGF0aCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGZpbGUgcGF0aCBvZiB0aGUgYXR0YWNobWVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF0dGFjaG1lbnRGaWxlUGF0aChwYXJhbXM6IEdldEF0dGFjaG1lbnRGaWxlUGF0aFBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dGFjaG1lbnRQYXRoID0gZ2V0UGF0aChhcHAsIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGVFeHRlbnNpb24gPSBleHRuYW1lKGF0dGFjaG1lbnRQYXRoKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGVCYXNlTmFtZSA9IGJhc2VuYW1lKGF0dGFjaG1lbnRQYXRoLCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbik7XG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogYXR0YWNobWVudFBhdGggfSk7XG5cbiAgY29uc3QgZXh0ZW5kZWRGdW5jdGlvbiA9IChhcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzIGFzIFBhcnRpYWw8R2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZD4pLmV4dGVuZGVkO1xuICBpZiAoZXh0ZW5kZWRGdW5jdGlvbikge1xuICAgIHJldHVybiBleHRlbmRlZEZ1bmN0aW9uKHtcbiAgICAgIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsXG4gICAgICBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogYXR0YWNobWVudEZpbGVFeHRlbnNpb24uc2xpY2UoMSksXG4gICAgICBhdHRhY2htZW50RmlsZVN0YXRzOiBhdHRhY2htZW50RmlsZT8uc3RhdCxcbiAgICAgIGNvbnRleHQ6IHBhcmFtcy5jb250ZXh0LFxuICAgICAgbm90ZVBhdGhPckZpbGUsXG4gICAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZTogcGFyYW1zLm9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgICAgb2xkTm90ZVBhdGhPckZpbGU6IHBhcmFtcy5vbGROb3RlUGF0aE9yRmlsZSxcbiAgICAgIHJlYWRBdHRhY2htZW50RmlsZUNvbnRlbnQ6IGF0dGFjaG1lbnRGaWxlID8gKCk6IFByb21pc2U8QXJyYXlCdWZmZXI+ID0+IGFwcC52YXVsdC5yZWFkQmluYXJ5KGF0dGFjaG1lbnRGaWxlKSA6IG51bGwsXG4gICAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2ssXG4gICAgICBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbjogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50cyh7XG4gICAgYXBwLFxuICAgIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsXG4gICAgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uLnNsaWNlKDEpLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjayxcbiAgICBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbjogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGggZm9yIGEgZ2l2ZW4gbm90ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGdldCBhdHRhY2htZW50IGZvbGRlciBwYXRoIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYXR0YWNobWVudCBmb2xkZXIgcGF0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHBhcmFtczogR2V0QXR0YWNobWVudEZvbGRlclBhdGhQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGNvbnRleHQgPSBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bixcbiAgICBub3RlUGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICByZXR1cm4gcGFyZW50Rm9sZGVyUGF0aChcbiAgICBhd2FpdCBnZXRBdHRhY2htZW50RmlsZVBhdGgoe1xuICAgICAgYXBwLFxuICAgICAgY29udGV4dCxcbiAgICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IERVTU1ZX1BBVEgsXG4gICAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2s6IHRydWVcbiAgICB9KVxuICApO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50cyhwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1BhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudEZpbGVFeHRlbnNpb24sXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrLFxuICAgIHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IGFwcC52YXVsdC5nZXRDb25maWcoJ2F0dGFjaG1lbnRGb2xkZXJQYXRoJykgYXMgc3RyaW5nO1xuICBjb25zdCBpc0N1cnJlbnRGb2xkZXIgPSBhdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gJy4nIHx8IGF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSAnLi8nO1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBhdHRhY2htZW50Rm9sZGVyUGF0aC5zdGFydHNXaXRoKCcuLycpXG4gICAgPyB0cmltU3RhcnQoe1xuICAgICAgJHN0cmluZzogYXR0YWNobWVudEZvbGRlclBhdGgsXG4gICAgICBwcmVmaXg6ICcuLydcbiAgICB9KVxuICAgIDogbnVsbDtcblxuICAvLyBBIG5vdGUgdGhhdCBkb2VzIG5vdCBleGlzdCB5ZXQgKGEgcmVuYW1lIHRhcmdldCwgYSBkdW1teSBzaWJsaW5nKSBzdGlsbCBiZWxvbmdzIHRvIGl0cyBvd24gZm9sZGVyLlxuICAvLyBNYXRlcmlhbGl6aW5nIGl0IGZyb20gaXRzIHBhdGgga2VlcHMgdGhhdCBmb2xkZXIsIHdoZXJlIGEgdmF1bHQgbG9va3VwIHdvdWxkIGZhbGwgYmFjayB0byB0aGUgcm9vdC5cbiAgLy8gT25seSBhbiBleHBsaWNpdGx5IG5vdGUtbGVzcyBhdHRhY2htZW50IHJlc29sdmVzIHRvIHRoZSB2YXVsdCByb290LlxuICBjb25zdCBub3RlRmlsZU9yTnVsbCA9IG5vdGVQYXRoT3JGaWxlID09PSBudWxsXG4gICAgPyBudWxsXG4gICAgOiBnZXRGaWxlKHtcbiAgICAgIGFwcCxcbiAgICAgIHBhdGhPckZpbGU6IG5vdGVQYXRoT3JGaWxlLFxuICAgICAgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlXG4gICAgfSk7XG5cbiAgaWYgKGlzQ3VycmVudEZvbGRlcikge1xuICAgIGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gbm90ZUZpbGVPck51bGwgPyBub3RlRmlsZU9yTnVsbC5wYXJlbnQ/LnBhdGggPz8gJycgOiAnJztcbiAgfSBlbHNlIGlmIChyZWxhdGl2ZVBhdGgpIHtcbiAgICBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IChub3RlRmlsZU9yTnVsbCA/IG5vdGVGaWxlT3JOdWxsLnBhcmVudD8uZ2V0UGFyZW50UHJlZml4KCkgPz8gJycgOiAnJykgKyByZWxhdGl2ZVBhdGg7XG4gIH1cblxuICBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IG5vcm1hbGl6ZVN0cmluZyhub3JtYWxpemVTbGFzaGVzKGF0dGFjaG1lbnRGb2xkZXJQYXRoKSk7XG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUgPSBub3JtYWxpemVTdHJpbmcobm9ybWFsaXplU2xhc2hlcyhwYXJhbXMuYXR0YWNobWVudEZpbGVCYXNlTmFtZSkpO1xuXG4gIGxldCBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoeyBhcHAsIGlzQ2FzZUluc2Vuc2l0aXZlOiB0cnVlLCBwYXRoT3JGb2xkZXI6IGF0dGFjaG1lbnRGb2xkZXJQYXRoIH0pO1xuXG4gIGlmICghZm9sZGVyICYmIHJlbGF0aXZlUGF0aCAmJiAhc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb24pIHtcbiAgICBmb2xkZXIgPSBhd2FpdCBhcHAudmF1bHQuY3JlYXRlRm9sZGVyKGF0dGFjaG1lbnRGb2xkZXJQYXRoKTtcbiAgfVxuXG4gIC8vIEEgZm9sZGVyIHRoYXQgZG9lcyBub3QgZXhpc3QgeWV0IHN0aWxsIG93bnMgdGhlIGF0dGFjaG1lbnQgcGF0aC5cbiAgLy8gUmVzb2x2aW5nIGl0IGFzIGEgbm9uLWV4aXN0aW5nIGZvbGRlciBzdG9wcyB0aGUgYW5zd2VyIGZyb20gY29sbGFwc2luZyB0byB0aGUgdmF1bHQgcm9vdC5cbiAgZm9sZGVyID8/PSBnZXRGb2xkZXIoeyBhcHAsIHBhdGhPckZvbGRlcjogYXR0YWNobWVudEZvbGRlclBhdGgsIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZSB9KTtcblxuICBjb25zdCBwcmVmaXggPSBmb2xkZXIuZ2V0UGFyZW50UHJlZml4KCk7XG4gIHJldHVybiBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2tcbiAgICA/IG1ha2VGaWxlTmFtZSh7XG4gICAgICBmaWxlQmFzZU5hbWU6IHByZWZpeCArIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsXG4gICAgICBmaWxlRXh0ZW5zaW9uOiBhdHRhY2htZW50RmlsZUV4dGVuc2lvblxuICAgIH0pXG4gICAgOiBhcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChwcmVmaXggKyBhdHRhY2htZW50RmlsZUJhc2VOYW1lLCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbik7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBub3RlJ3MgYXR0YWNobWVudCBmb2xkZXIgaXMgc3BlY2lmaWMgdG8gdGhhdCBub3RlIHJhdGhlciB0aGFuIHNoYXJlZCB3aXRoIGl0cyBzaWJsaW5ncy5cbiAqXG4gKiBUaGUgYW5zd2VyIGlzIGRlcml2ZWQgYnkgY29tcGFyaW5nIHRoZSBub3RlJ3MgYXR0YWNobWVudCBmb2xkZXIgd2l0aCB0aGUgb25lIGEgc2FtZS1mb2xkZXIgc2libGluZyBub3RlXG4gKiB3b3VsZCBnZXQ6IHRoZXkgZGlmZmVyIG9ubHkgd2hlbiB0aGUgZm9sZGVyIGRlcGVuZHMgb24gdGhlIG5vdGUncyBOQU1FLiBFdmVyeSBidWlsdC1pblxuICogYGF0dGFjaG1lbnRGb2xkZXJQYXRoYCBtb2RlIFx1MjAxNCB0aGUgdmF1bHQgcm9vdCwgYSBmaXhlZCBmb2xkZXIsIHRoZSBub3RlJ3Mgb3duIGZvbGRlciAoYC4vYCksIGEgc3ViZm9sZGVyIG9mXG4gKiB0aGUgbm90ZSdzIGZvbGRlciAoYC4vc3ViYCkgXHUyMDE0IGlzIHNoYXJlZCBieSBldmVyeSBub3RlIGluIHRoYXQgZm9sZGVyLCBzbyBpdCBhbnN3ZXJzIGBmYWxzZWA7IGB0cnVlYCBhcmlzZXNcbiAqIGZyb20gYSB7QGxpbmsgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZC5leHRlbmRlZH0gb3ZlcnJpZGUgdGhhdCBkZXJpdmVzIHRoZSBmb2xkZXIgZnJvbSB0aGVcbiAqIG5vdGUncyBuYW1lICh3aGF0IGFuIGF0dGFjaG1lbnQtbG9jYXRpb24gcGx1Z2luIHByb2R1Y2VzKS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBkaXN0aW5jdGlvbiBhIGNhbGxlciBuZWVkcyBiZWZvcmUgc3dlZXBpbmcgYW4gYXR0YWNobWVudCBmb2xkZXIgd2hvbGVzYWxlOiBvbmx5IGFcbiAqIG5vdGUtc3BlY2lmaWMgZm9sZGVyIGNhbiBiZSB0cmVhdGVkIGFzIGJlbG9uZ2luZyB0byB0aGUgbm90ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGhhcyBvd24gYXR0YWNobWVudCBmb2xkZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG5vdGUgaGFzIGl0cyBvd24gYXR0YWNobWVudCBmb2xkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYXNPd25BdHRhY2htZW50Rm9sZGVyKHBhcmFtczogSGFzT3duQXR0YWNobWVudEZvbGRlclBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGNvbnRleHQgPSBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bixcbiAgICBwYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoe1xuICAgIGFwcCxcbiAgICBjb250ZXh0LFxuICAgIG5vdGVQYXRoT3JGaWxlOiBwYXRoXG4gIH0pO1xuICBjb25zdCBkdW1teUF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoe1xuICAgIGFwcCxcbiAgICBjb250ZXh0LFxuICAgIG5vdGVQYXRoT3JGaWxlOiBqb2luKGRpcm5hbWUocGF0aCksIGAke0RVTU1ZX1BBVEh9LiR7TUFSS0RPV05fRklMRV9FWFRFTlNJT059YClcbiAgfSk7XG4gIHJldHVybiBhdHRhY2htZW50Rm9sZGVyUGF0aCAhPT0gZHVtbXlBdHRhY2htZW50Rm9sZGVyUGF0aDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBhdHRhY2htZW50IGFscmVhZHkgc2l0cyBhdCBpdHMgcHJvcGVyIGF0dGFjaG1lbnQgcGF0aC5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBhdHRhY2htZW50J3MgY3VycmVudCBwYXRoIGlzLCB3aXRoaW4gaXRzIHByb3BlciBhdHRhY2htZW50IGZvbGRlciwgZWl0aGVyIHRoZSBwcm9wZXJcbiAqIGJhc2UgbmFtZSBvciB0aGUgcHJvcGVyIGJhc2UgbmFtZSBwbHVzIGFuIE9ic2lkaWFuIGRlZHVwbGljYXRpb24gc3VmZml4IChhIHNwYWNlIGZvbGxvd2VkIGJ5IGRpZ2l0cywgZS5nLlxuICogYGltZyAxYCkgd2l0aCB0aGUgc2FtZSBleHRlbnNpb24uIFRoZSBwcm9wZXIgcGF0aCBpcyBjb21wdXRlZCB2aWEge0BsaW5rIGdldEF0dGFjaG1lbnRGaWxlUGF0aH0gd2l0aFxuICoge0BsaW5rIEdldEF0dGFjaG1lbnRGaWxlUGF0aFBhcmFtcy5zaG91bGRTa2lwRHVwbGljYXRlQ2hlY2t9IHNldCB0byBgdHJ1ZWAgKHRoZSB0YXJnZXQgYmVmb3JlIGFueVxuICogZGVkdXBsaWNhdGlvbiBzdWZmaXgpLCBhbmQgdGhlIGNvbXBhcmlzb24gcmVzcGVjdHMgdGhlIGZpbGUgc3lzdGVtIGNhc2Utc2Vuc2l0aXZpdHkgZmxhZ1xuICogKGBnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmVgKSB0aGF0IGBnZXRTYWZlUmVuYW1lUGF0aGAgdXNlcy5cbiAqXG4gKiBUaGlzIGxldHMgYSBjYWxsZXIgcmVjb2duaXplIGEgZGVkdXBsaWNhdGlvbi1wYXJrZWQgYXR0YWNobWVudCBhcyBhbHJlYWR5LWNvbGxlY3RlZCwgc28gYSBcIm5lZWRzIG1vdmU/XCJcbiAqIGRlY2lzaW9uIG1hZGUgYWdhaW5zdCB0aGUgZGVkdXBsaWNhdGlvbi1mcmVlIHByb3BlciBwYXRoIGNvbnZlcmdlcyBpbnN0ZWFkIG9mIHJlLXNjaGVkdWxpbmcgdGhlIGZpbGUgZm9yZXZlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGlzIGF0IHByb3BlciBhdHRhY2htZW50IHBhdGggZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGB0cnVlYCB3aGVuIHRoZSBhdHRhY2htZW50IGlzIGFscmVhZHkgYXQgaXRzIHByb3BlciBwYXRoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNBdFByb3BlckF0dGFjaG1lbnRQYXRoKHBhcmFtczogSXNBdFByb3BlckF0dGFjaG1lbnRQYXRoUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgY29udGV4dCA9IEF0dGFjaG1lbnRQYXRoQ29udGV4dC5Vbmtub3duLFxuICAgIG5vdGVQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgY3VycmVudFBhdGggPSBnZXRQYXRoKGFwcCwgYXR0YWNobWVudFBhdGhPckZpbGUpO1xuICBjb25zdCBwcm9wZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZpbGVQYXRoKHtcbiAgICBhcHAsXG4gICAgY29udGV4dCxcbiAgICBub3RlUGF0aE9yRmlsZSxcbiAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZTogYXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gIH0pO1xuXG4gIGNvbnN0IGlzSW5zZW5zaXRpdmUgPSBnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmU7XG5cbiAgZnVuY3Rpb24gZm9sZCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXNJbnNlbnNpdGl2ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbiAgfVxuXG4gIGlmIChmb2xkKGRpcm5hbWUoY3VycmVudFBhdGgpKSAhPT0gZm9sZChkaXJuYW1lKHByb3BlclBhdGgpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRFeHRlbnNpb24gPSBleHRuYW1lKGN1cnJlbnRQYXRoKTtcbiAgY29uc3QgcHJvcGVyRXh0ZW5zaW9uID0gZXh0bmFtZShwcm9wZXJQYXRoKTtcbiAgaWYgKGZvbGQoY3VycmVudEV4dGVuc2lvbikgIT09IGZvbGQocHJvcGVyRXh0ZW5zaW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRCYXNlTmFtZSA9IGJhc2VuYW1lKGN1cnJlbnRQYXRoLCBjdXJyZW50RXh0ZW5zaW9uKTtcbiAgY29uc3QgcHJvcGVyQmFzZU5hbWUgPSBiYXNlbmFtZShwcm9wZXJQYXRoLCBwcm9wZXJFeHRlbnNpb24pO1xuXG4gIGlmIChmb2xkKGN1cnJlbnRCYXNlTmFtZSkgPT09IGZvbGQocHJvcGVyQmFzZU5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBkZWR1cGxpY2F0aW9uUHJlZml4ID0gYCR7cHJvcGVyQmFzZU5hbWV9IGA7XG4gIGlmICghZm9sZChjdXJyZW50QmFzZU5hbWUpLnN0YXJ0c1dpdGgoZm9sZChkZWR1cGxpY2F0aW9uUHJlZml4KSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkZWR1cGxpY2F0aW9uU3VmZml4ID0gY3VycmVudEJhc2VOYW1lLnNsaWNlKGRlZHVwbGljYXRpb25QcmVmaXgubGVuZ3RoKTtcbiAgcmV0dXJuIC9eXFxkKyQvLnRlc3QoZGVkdXBsaWNhdGlvblN1ZmZpeCk7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGggYnkgY29tYmluaW5nIG11bHRpcGxlIHNsYXNoZXMgaW50byBhIHNpbmdsZSBzbGFzaCBhbmQgcmVtb3ZpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcy5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcGF0aC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU2xhc2hlcyhwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBwYXRoID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogcGF0aCxcbiAgICByZXBsYWNlcjogJy8nLFxuICAgIHNlYXJjaFZhbHVlOiAvKD86W1xcXFwvXSkrL2dcbiAgfSk7XG4gIHBhdGggPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBwYXRoLFxuICAgIHJlcGxhY2VyOiAnJyxcbiAgICBzZWFyY2hWYWx1ZTogL15cXC8rfFxcLyskL2dcbiAgfSk7XG4gIHJldHVybiBwYXRoIHx8ICcvJztcbn1cbiJdLAogICJtYXBwaW5ncyI6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
|
|
366
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2F0dGFjaG1lbnQtcGF0aC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggYXR0YWNobWVudCBwYXRocy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRmlsZVN0YXRzLFxuICBURm9sZGVyLFxuICBWYXVsdFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIGdldERhdGFBZGFwdGVyRXgsXG4gIHBhcmVudEZvbGRlclBhdGhcbn0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW4sXG4gIG1ha2VGaWxlTmFtZVxufSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7XG4gIG5vcm1hbGl6ZVN0cmluZyxcbiAgcmVwbGFjZUFsbCxcbiAgdHJpbVN0YXJ0XG59IGZyb20gJy4uL3N0cmluZy50cyc7XG5pbXBvcnQge1xuICBnZXRGaWxlLFxuICBnZXRGaWxlT3JOdWxsLFxuICBnZXRGb2xkZXIsXG4gIGdldEZvbGRlck9yTnVsbCxcbiAgZ2V0UGF0aCxcbiAgTUFSS0RPV05fRklMRV9FWFRFTlNJT05cbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbi8qKlxuICogQSBjb250ZXh0IGZvciBhbiBhdHRhY2htZW50IHBhdGguXG4gKi9cbmV4cG9ydCBlbnVtIEF0dGFjaG1lbnRQYXRoQ29udGV4dCB7XG4gIC8qKlxuICAgKiBBIGNvbnRleHQgZm9yIGEgZGVsZXRlIG5vdGUuXG4gICAqL1xuICBEZWxldGVOb3RlID0gJ0RlbGV0ZU5vdGUnLFxuXG4gIC8qKlxuICAgKiBBIGNvbnRleHQgZm9yIGEgcmVuYW1lIG5vdGUuXG4gICAqL1xuICBSZW5hbWVOb3RlID0gJ1JlbmFtZU5vdGUnLFxuXG4gIC8qKlxuICAgKiBBbiB1bmtub3duIGNvbnRleHQuXG4gICAqL1xuICBVbmtub3duID0gJ1Vua25vd24nXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGdldCBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMgZXh0ZW5kZWQgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRXh0ZW5kZWRGdW5jdGlvblBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIGJhc2UgbmFtZSBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdGF0cyBvZiB0aGUgYXR0YWNobWVudCBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVTdGF0cz86IEZpbGVTdGF0cyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQSBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9yIGZpbGUgb2YgdGhlIG9sZCBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvciBmaWxlIG9mIHRoZSBvbGQgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZE5vdGVQYXRoT3JGaWxlPzogUGF0aE9yRmlsZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogTGF6aWx5IHJlYWRzIHRoZSBjb250ZW50IG9mIHRoZSBhdHRhY2htZW50IGZpbGUuXG4gICAqXG4gICAqIFRoZSBjb250ZW50IGlzIHJlYWQgb24gZGVtYW5kIG9ubHkgd2hlbiBhIGNvbnN1bWVyIGFjdHVhbGx5IG5lZWRzIHRoZSBieXRlcyAoZS5nLiBhIHRlbXBsYXRlXG4gICAqIHRva2VuIHRoYXQgZW1iZWRzIHRoZW0pLiBGb3IgdGhlIGRlZmF1bHQgdGVtcGxhdGVzIG5vdGhpbmcgcHVsbHMgdGhlIGJ5dGVzLCBzbyB0aGUgcG90ZW50aWFsbHlcbiAgICogZXhwZW5zaXZlIChzaXplLXByb3BvcnRpb25hbCkgYHJlYWRCaW5hcnlgIG5ldmVyIHJ1bnMuIENvbnN1bWVycyB0aGF0IG1heSBjYWxsIHRoaXMgbW9yZSB0aGFuXG4gICAqIG9uY2Ugc2hvdWxkIG1lbW9pemUgdGhlIGZpcnN0IGNhbGwuIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vIGF0dGFjaG1lbnQgZmlsZSB0byByZWFkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb250ZW50IG9mIHRoZSBhdHRhY2htZW50IGZpbGUuXG4gICAqL1xuICByZWFkb25seSByZWFkQXR0YWNobWVudEZpbGVDb250ZW50OiAoKCkgPT4gUHJvbWlzZTxBcnJheUJ1ZmZlcj4pIHwgbnVsbDtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZ2VuZXJhdGVkIGF0dGFjaG1lbnQgZmlsZSBuYW1lIGJlIHNraXBwZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwR2VuZXJhdGVkQXR0YWNobWVudEZpbGVOYW1lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdWxkIG1pc3NpbmcgYXR0YWNobWVudCBmb2xkZXIgY3JlYXRpb24gYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIHtAbGluayBWYXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHN9IGV4dGVuZGVkIHdyYXBwZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZCBleHRlbmRzIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uIHtcbiAgLyoqXG4gICAqIEdldCBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMgd2l0aCBhZGRpdGlvbmFsIHBhcmFtcy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMuXG4gICAqL1xuICBleHRlbmRlZChwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXMpOiBQcm9taXNlPHN0cmluZz47XG59XG5cbnR5cGUgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb24gPSBWYXVsdFsnZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzJ107XG5cbi8qKlxuICogRHVtbXkgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IERVTU1ZX1BBVEggPSAnX19EVU1NWV9fJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZ2V0QXR0YWNobWVudEZpbGVQYXRoIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF0dGFjaG1lbnRGaWxlUGF0aFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBBdHRhY2htZW50UGF0aENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBvbGRBdHRhY2htZW50UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9mIHRoZSBvbGQgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZE5vdGVQYXRoT3JGaWxlPzogUGF0aE9yRmlsZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjazogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QXR0YWNobWVudEZvbGRlclBhdGh9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF0dGFjaG1lbnRGb2xkZXJQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEF0dGFjaG1lbnRQYXRoQ29udGV4dC5Vbmtub3dufVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dD86IEF0dGFjaG1lbnRQYXRoQ29udGV4dDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QXR0YWNobWVudEZvbGRlclBhdGhTeW5jT3JOdWxsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBdHRhY2htZW50Rm9sZGVyUGF0aFN5bmNPck51bGxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9mIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50cyBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNQYXJhbXMge1xuICAvKipcbiAgICogQW4gT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgLyoqXG4gICAqIEEgYmFzZSBuYW1lIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVCYXNlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IHN0cmluZztcbiAgLyoqXG4gICAqIEEgZmlsZSB0byBhdHRhY2ggdG8uXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogbnVsbCB8IFBhdGhPckZpbGU7XG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIGR1cGxpY2F0ZSBjaGVjayBiZSBza2lwcGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2s/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvdWxkIG1pc3NpbmcgYXR0YWNobWVudCBmb2xkZXIgY3JlYXRpb24gYmUgc2tpcHBlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBoYXNPd25BdHRhY2htZW50Rm9sZGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYXNPd25BdHRhY2htZW50Rm9sZGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEF0dGFjaG1lbnRQYXRoQ29udGV4dC5Vbmtub3dufVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dD86IEF0dGFjaG1lbnRQYXRoQ29udGV4dDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGlzQXRQcm9wZXJBdHRhY2htZW50UGF0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXNBdFByb3BlckF0dGFjaG1lbnRQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBhdHRhY2htZW50IHRvIGNoZWNrLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd259XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRoYXQgcmVmZXJlbmNlcyB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdHRhY2htZW50RmlsZVBhdGhTeW5jfS5cbiAqL1xuaW50ZXJmYWNlIEdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmNQYXJhbXMge1xuICAvKipcbiAgICogQW4gT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSBwYXRoIG9mIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIGR1cGxpY2F0ZSBjaGVjayBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNTeW5jfS5cbiAqL1xuaW50ZXJmYWNlIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1N5bmNQYXJhbXMge1xuICAvKipcbiAgICogQW4gT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSBiYXNlIG5hbWUgb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUJhc2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGV4dGVuc2lvbiBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZmlsZSB0byBhdHRhY2ggdG8uXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogbnVsbCB8IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZHVwbGljYXRlIGNoZWNrIGJlIHNraXBwZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2s/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlQXR0YWNobWVudEZvbGRlcn0uXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlQXR0YWNobWVudEZvbGRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIGZpbGUgdG8gYXR0YWNoIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IG51bGwgfCBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFRoZSBhdHRhY2htZW50IGZvbGRlciBhIG5vdGUgcmVzb2x2ZXMgdG8sIGJlZm9yZSB0aGUgYXR0YWNobWVudCBmaWxlIG5hbWUgaXMgYXBwZW5kZWQuXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlQXR0YWNobWVudEZvbGRlclJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgYXR0YWNobWVudCBmb2xkZXIsIG9yIGBudWxsYCB3aGVuIGl0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB2YXVsdCB5ZXQuXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI6IG51bGwgfCBURm9sZGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbm9ybWFsaXplZCBhdHRhY2htZW50IGZvbGRlciBwYXRoLCB3aGV0aGVyIG9yIG5vdCB0aGUgZm9sZGVyIGV4aXN0cy5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhcnQgb2YgdGhlIGBhdHRhY2htZW50Rm9sZGVyUGF0aGAgc2V0dGluZyB0aGF0IGZvbGxvd3MgYC4vYCwgb3IgYG51bGxgIHdoZW4gdGhlIHNldHRpbmcgaXMgbm90XG4gICAqIHJlbGF0aXZlIHRvIHRoZSBub3RlLiBPbmx5IGEgcmVsYXRpdmUgc2V0dGluZyBtYXkgaGF2ZSBpdHMgbWlzc2luZyBmb2xkZXIgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGF0aXZlUGF0aDogbnVsbCB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZpbGUgcGF0aCBmb3IgYW4gYXR0YWNobWVudCB3aXRoaW4gYSBub3RlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF0dGFjaG1lbnQgZmlsZSBwYXRoIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZmlsZSBwYXRoIG9mIHRoZSBhdHRhY2htZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXR0YWNobWVudEZpbGVQYXRoKHBhcmFtczogR2V0QXR0YWNobWVudEZpbGVQYXRoUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBub3RlUGF0aE9yRmlsZSxcbiAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZSxcbiAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2tcbiAgfSA9IHBhcmFtcztcblxuICBjb25zdCBleHRlbmRlZEZ1bmN0aW9uID0gZ2V0RXh0ZW5kZWRGdW5jdGlvbihhcHApO1xuICBpZiAoIWV4dGVuZGVkRnVuY3Rpb24pIHtcbiAgICAvLyBOb2JvZHkgb3ZlcnJpZGVzIHRoZSByZXNvbHV0aW9uLCBzbyBpdCBpcyBlbnRpcmVseSBzeW5jaHJvbm91cy5cbiAgICAvLyBUaGUgc2FtZSBjb3JlIGFuc3dlcnMgYGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoU3luY09yTnVsbGAsIHdoaWNoIGlzIHdoYXQga2VlcHMgdGhlIHR3byBpbiBzdGVwLlxuICAgIHJldHVybiBnZXRBdHRhY2htZW50RmlsZVBhdGhTeW5jKHtcbiAgICAgIGFwcCxcbiAgICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2tcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRQYXRoID0gZ2V0UGF0aChhcHAsIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGVFeHRlbnNpb24gPSBleHRuYW1lKGF0dGFjaG1lbnRQYXRoKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGVCYXNlTmFtZSA9IGJhc2VuYW1lKGF0dGFjaG1lbnRQYXRoLCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbik7XG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogYXR0YWNobWVudFBhdGggfSk7XG5cbiAgcmV0dXJuIGF3YWl0IGV4dGVuZGVkRnVuY3Rpb24oe1xuICAgIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsXG4gICAgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uLnNsaWNlKDEpLFxuICAgIGF0dGFjaG1lbnRGaWxlU3RhdHM6IGF0dGFjaG1lbnRGaWxlPy5zdGF0LFxuICAgIGNvbnRleHQ6IHBhcmFtcy5jb250ZXh0LFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgIG9sZE5vdGVQYXRoT3JGaWxlOiBwYXJhbXMub2xkTm90ZVBhdGhPckZpbGUsXG4gICAgcmVhZEF0dGFjaG1lbnRGaWxlQ29udGVudDogYXR0YWNobWVudEZpbGUgPyAoKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4gPT4gYXBwLnZhdWx0LnJlYWRCaW5hcnkoYXR0YWNobWVudEZpbGUpIDogbnVsbCxcbiAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2ssXG4gICAgc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb246IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhdHRhY2htZW50IGZvbGRlciBwYXRoIGZvciBhIGdpdmVuIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmb2xkZXIgcGF0aCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGguXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChwYXJhbXM6IEdldEF0dGFjaG1lbnRGb2xkZXJQYXRoUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjb250ZXh0ID0gQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd24sXG4gICAgbm90ZVBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgcmV0dXJuIHBhcmVudEZvbGRlclBhdGgoXG4gICAgYXdhaXQgZ2V0QXR0YWNobWVudEZpbGVQYXRoKHtcbiAgICAgIGFwcCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBub3RlUGF0aE9yRmlsZSxcbiAgICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlOiBEVU1NWV9QQVRILFxuICAgICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGggZm9yIGEgZ2l2ZW4gbm90ZSAqKnN5bmNocm9ub3VzbHkqKiwgd2hlbiB0aGF0IGlzIHBvc3NpYmxlIGF0IGFsbC5cbiAqXG4gKiBPYnNpZGlhbiBidWlsZHMgaXRzIGZpbGUvZm9sZGVyIGNvbnRleHQgbWVudXMgYW5kIGV2YWx1YXRlcyBhIGNvbW1hbmQncyBgY2hlY2tDYWxsYmFja2Agc3luY2hyb25vdXNseSwgc28gYVxuICogY2FsbGVyIGRlY2lkaW5nIHdoZXRoZXIgdG8gbWVyZWx5ICpvZmZlciogYSBjb21tYW5kIGNhbm5vdCBhd2FpdCB7QGxpbmsgZ2V0QXR0YWNobWVudEZvbGRlclBhdGh9LiBUaGlzIGlzXG4gKiB0aGUgc3luY2hyb25vdXMgdHdpbiBzdWNoIGEgY2FsbGVyIGNhbiB1c2UgaW5zdGVhZC5cbiAqXG4gKiBUaGUgYW5zd2VyIGlzIGBudWxsYCB3aGVuIGl0IGlzIG5vdCBrbm93YWJsZSBzeW5jaHJvbm91c2x5IFx1MjAxNCB0aGF0IGlzLCB3aGVuIGEgcGx1Z2luIGluc3RhbGxlZFxuICoge0BsaW5rIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uRXh0ZW5kZWQuZXh0ZW5kZWR9IGFuZCB0aGVyZWZvcmUgb3ducyB0aGUgcmVzb2x1dGlvbiwgd2hpY2ggaXNcbiAqIGdlbnVpbmVseSBhc3luY2hyb25vdXMuIGBudWxsYCBtZWFucyBcImFzayB7QGxpbmsgZ2V0QXR0YWNobWVudEZvbGRlclBhdGh9XCIsIG5ldmVyIFwidGhlcmUgaXMgbm8gYXR0YWNobWVudFxuICogZm9sZGVyXCIuIE90aGVyd2lzZSB0aGUgYW5zd2VyIGlzIGV4YWN0IHJhdGhlciB0aGFuIGEgZ3Vlc3M6IGl0IGlzIHByb2R1Y2VkIGJ5IHRoZSB2ZXJ5IHNhbWUgY29kZVxuICoge0BsaW5rIGdldEF0dGFjaG1lbnRGb2xkZXJQYXRofSBydW5zLCB3aG9zZSBvbmx5IGFzeW5jaHJvbm91cyBzdGVwIFx1MjAxNCBjcmVhdGluZyBhIG1pc3NpbmcgYXR0YWNobWVudCBmb2xkZXIgXHUyMDE0XG4gKiBpcyB1bnJlYWNoYWJsZSBvbiB0aGlzIHBhdGguXG4gKlxuICogVGhlcmUgaXMgZGVsaWJlcmF0ZWx5IG5vIGBjb250ZXh0YCBwYXJhbWV0ZXI6IHtAbGluayBBdHRhY2htZW50UGF0aENvbnRleHR9IG9ubHkgZXZlciByZWFjaGVzIGFuXG4gKiB7QGxpbmsgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZC5leHRlbmRlZH0gb3ZlcnJpZGUsIGFuZCB0aGlzIGZ1bmN0aW9uIGFuc3dlcnMgYG51bGxgXG4gKiB3aGVuZXZlciBvbmUgaXMgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF0dGFjaG1lbnQgZm9sZGVyIHBhdGggc3luYyBvciBudWxsIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGgsIG9yIGBudWxsYCB3aGVuIGl0IGNhbiBvbmx5IGJlIHJlc29sdmVkIGFzeW5jaHJvbm91c2x5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXR0YWNobWVudEZvbGRlclBhdGhTeW5jT3JOdWxsKHBhcmFtczogR2V0QXR0YWNobWVudEZvbGRlclBhdGhTeW5jT3JOdWxsUGFyYW1zKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbm90ZVBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcblxuICBpZiAoZ2V0RXh0ZW5kZWRGdW5jdGlvbihhcHApKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gcGFyZW50Rm9sZGVyUGF0aChnZXRBdHRhY2htZW50RmlsZVBhdGhTeW5jKHtcbiAgICBhcHAsXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IERVTU1ZX1BBVEgsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGdldCBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMocGFyYW1zOiBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uXG4gIH0gPSBwYXJhbXM7XG5cbiAgLy8gTWF0ZXJpYWxpemluZyBhIG1pc3NpbmcgYXR0YWNobWVudCBmb2xkZXIgaXMgdGhlIE9ORSBnZW51aW5lbHkgYXN5bmNocm9ub3VzIHN0ZXAgaW4gdGhpcyBmdW5jdGlvbi5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGxpdmVzIGluIHRoZSBzeW5jaHJvbm91cyBjb3JlLCB3aGljaCB0aGUgc3luY2hyb25vdXMgZW50cnkgcG9pbnRzIHJldXNlIHZlcmJhdGltLlxuICBjb25zdCBhdHRhY2htZW50Rm9sZGVyID0gcmVzb2x2ZUF0dGFjaG1lbnRGb2xkZXIoeyBhcHAsIG5vdGVQYXRoT3JGaWxlIH0pO1xuICBpZiAoIWF0dGFjaG1lbnRGb2xkZXIuZm9sZGVyICYmIGF0dGFjaG1lbnRGb2xkZXIucmVsYXRpdmVQYXRoICYmICFzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbikge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jcmVhdGVGb2xkZXIoYXR0YWNobWVudEZvbGRlci5wYXRoKTtcbiAgfVxuXG4gIHJldHVybiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNTeW5jKHBhcmFtcyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBub3RlJ3MgYXR0YWNobWVudCBmb2xkZXIgaXMgc3BlY2lmaWMgdG8gdGhhdCBub3RlIHJhdGhlciB0aGFuIHNoYXJlZCB3aXRoIGl0cyBzaWJsaW5ncy5cbiAqXG4gKiBUaGUgYW5zd2VyIGlzIGRlcml2ZWQgYnkgY29tcGFyaW5nIHRoZSBub3RlJ3MgYXR0YWNobWVudCBmb2xkZXIgd2l0aCB0aGUgb25lIGEgc2FtZS1mb2xkZXIgc2libGluZyBub3RlXG4gKiB3b3VsZCBnZXQ6IHRoZXkgZGlmZmVyIG9ubHkgd2hlbiB0aGUgZm9sZGVyIGRlcGVuZHMgb24gdGhlIG5vdGUncyBOQU1FLiBFdmVyeSBidWlsdC1pblxuICogYGF0dGFjaG1lbnRGb2xkZXJQYXRoYCBtb2RlIFx1MjAxNCB0aGUgdmF1bHQgcm9vdCwgYSBmaXhlZCBmb2xkZXIsIHRoZSBub3RlJ3Mgb3duIGZvbGRlciAoYC4vYCksIGEgc3ViZm9sZGVyIG9mXG4gKiB0aGUgbm90ZSdzIGZvbGRlciAoYC4vc3ViYCkgXHUyMDE0IGlzIHNoYXJlZCBieSBldmVyeSBub3RlIGluIHRoYXQgZm9sZGVyLCBzbyBpdCBhbnN3ZXJzIGBmYWxzZWA7IGB0cnVlYCBhcmlzZXNcbiAqIGZyb20gYSB7QGxpbmsgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZC5leHRlbmRlZH0gb3ZlcnJpZGUgdGhhdCBkZXJpdmVzIHRoZSBmb2xkZXIgZnJvbSB0aGVcbiAqIG5vdGUncyBuYW1lICh3aGF0IGFuIGF0dGFjaG1lbnQtbG9jYXRpb24gcGx1Z2luIHByb2R1Y2VzKS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBkaXN0aW5jdGlvbiBhIGNhbGxlciBuZWVkcyBiZWZvcmUgc3dlZXBpbmcgYW4gYXR0YWNobWVudCBmb2xkZXIgd2hvbGVzYWxlOiBvbmx5IGFcbiAqIG5vdGUtc3BlY2lmaWMgZm9sZGVyIGNhbiBiZSB0cmVhdGVkIGFzIGJlbG9uZ2luZyB0byB0aGUgbm90ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGhhcyBvd24gYXR0YWNobWVudCBmb2xkZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG5vdGUgaGFzIGl0cyBvd24gYXR0YWNobWVudCBmb2xkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYXNPd25BdHRhY2htZW50Rm9sZGVyKHBhcmFtczogSGFzT3duQXR0YWNobWVudEZvbGRlclBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGNvbnRleHQgPSBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bixcbiAgICBwYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoe1xuICAgIGFwcCxcbiAgICBjb250ZXh0LFxuICAgIG5vdGVQYXRoT3JGaWxlOiBwYXRoXG4gIH0pO1xuICBjb25zdCBkdW1teUF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoe1xuICAgIGFwcCxcbiAgICBjb250ZXh0LFxuICAgIG5vdGVQYXRoT3JGaWxlOiBqb2luKGRpcm5hbWUocGF0aCksIGAke0RVTU1ZX1BBVEh9LiR7TUFSS0RPV05fRklMRV9FWFRFTlNJT059YClcbiAgfSk7XG4gIHJldHVybiBhdHRhY2htZW50Rm9sZGVyUGF0aCAhPT0gZHVtbXlBdHRhY2htZW50Rm9sZGVyUGF0aDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBhdHRhY2htZW50IGFscmVhZHkgc2l0cyBhdCBpdHMgcHJvcGVyIGF0dGFjaG1lbnQgcGF0aC5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBhdHRhY2htZW50J3MgY3VycmVudCBwYXRoIGlzLCB3aXRoaW4gaXRzIHByb3BlciBhdHRhY2htZW50IGZvbGRlciwgZWl0aGVyIHRoZSBwcm9wZXJcbiAqIGJhc2UgbmFtZSBvciB0aGUgcHJvcGVyIGJhc2UgbmFtZSBwbHVzIGFuIE9ic2lkaWFuIGRlZHVwbGljYXRpb24gc3VmZml4IChhIHNwYWNlIGZvbGxvd2VkIGJ5IGRpZ2l0cywgZS5nLlxuICogYGltZyAxYCkgd2l0aCB0aGUgc2FtZSBleHRlbnNpb24uIFRoZSBwcm9wZXIgcGF0aCBpcyBjb21wdXRlZCB2aWEge0BsaW5rIGdldEF0dGFjaG1lbnRGaWxlUGF0aH0gd2l0aFxuICoge0BsaW5rIEdldEF0dGFjaG1lbnRGaWxlUGF0aFBhcmFtcy5zaG91bGRTa2lwRHVwbGljYXRlQ2hlY2t9IHNldCB0byBgdHJ1ZWAgKHRoZSB0YXJnZXQgYmVmb3JlIGFueVxuICogZGVkdXBsaWNhdGlvbiBzdWZmaXgpLCBhbmQgdGhlIGNvbXBhcmlzb24gcmVzcGVjdHMgdGhlIGZpbGUgc3lzdGVtIGNhc2Utc2Vuc2l0aXZpdHkgZmxhZ1xuICogKGBnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmVgKSB0aGF0IGBnZXRTYWZlUmVuYW1lUGF0aGAgdXNlcy5cbiAqXG4gKiBUaGlzIGxldHMgYSBjYWxsZXIgcmVjb2duaXplIGEgZGVkdXBsaWNhdGlvbi1wYXJrZWQgYXR0YWNobWVudCBhcyBhbHJlYWR5LWNvbGxlY3RlZCwgc28gYSBcIm5lZWRzIG1vdmU/XCJcbiAqIGRlY2lzaW9uIG1hZGUgYWdhaW5zdCB0aGUgZGVkdXBsaWNhdGlvbi1mcmVlIHByb3BlciBwYXRoIGNvbnZlcmdlcyBpbnN0ZWFkIG9mIHJlLXNjaGVkdWxpbmcgdGhlIGZpbGUgZm9yZXZlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGlzIGF0IHByb3BlciBhdHRhY2htZW50IHBhdGggZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGB0cnVlYCB3aGVuIHRoZSBhdHRhY2htZW50IGlzIGFscmVhZHkgYXQgaXRzIHByb3BlciBwYXRoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNBdFByb3BlckF0dGFjaG1lbnRQYXRoKHBhcmFtczogSXNBdFByb3BlckF0dGFjaG1lbnRQYXRoUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgY29udGV4dCA9IEF0dGFjaG1lbnRQYXRoQ29udGV4dC5Vbmtub3duLFxuICAgIG5vdGVQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgY3VycmVudFBhdGggPSBnZXRQYXRoKGFwcCwgYXR0YWNobWVudFBhdGhPckZpbGUpO1xuICBjb25zdCBwcm9wZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZpbGVQYXRoKHtcbiAgICBhcHAsXG4gICAgY29udGV4dCxcbiAgICBub3RlUGF0aE9yRmlsZSxcbiAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZTogYXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gIH0pO1xuXG4gIGNvbnN0IGlzSW5zZW5zaXRpdmUgPSBnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmU7XG5cbiAgZnVuY3Rpb24gZm9sZCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXNJbnNlbnNpdGl2ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbiAgfVxuXG4gIGlmIChmb2xkKGRpcm5hbWUoY3VycmVudFBhdGgpKSAhPT0gZm9sZChkaXJuYW1lKHByb3BlclBhdGgpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRFeHRlbnNpb24gPSBleHRuYW1lKGN1cnJlbnRQYXRoKTtcbiAgY29uc3QgcHJvcGVyRXh0ZW5zaW9uID0gZXh0bmFtZShwcm9wZXJQYXRoKTtcbiAgaWYgKGZvbGQoY3VycmVudEV4dGVuc2lvbikgIT09IGZvbGQocHJvcGVyRXh0ZW5zaW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRCYXNlTmFtZSA9IGJhc2VuYW1lKGN1cnJlbnRQYXRoLCBjdXJyZW50RXh0ZW5zaW9uKTtcbiAgY29uc3QgcHJvcGVyQmFzZU5hbWUgPSBiYXNlbmFtZShwcm9wZXJQYXRoLCBwcm9wZXJFeHRlbnNpb24pO1xuXG4gIGlmIChmb2xkKGN1cnJlbnRCYXNlTmFtZSkgPT09IGZvbGQocHJvcGVyQmFzZU5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBkZWR1cGxpY2F0aW9uUHJlZml4ID0gYCR7cHJvcGVyQmFzZU5hbWV9IGA7XG4gIGlmICghZm9sZChjdXJyZW50QmFzZU5hbWUpLnN0YXJ0c1dpdGgoZm9sZChkZWR1cGxpY2F0aW9uUHJlZml4KSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkZWR1cGxpY2F0aW9uU3VmZml4ID0gY3VycmVudEJhc2VOYW1lLnNsaWNlKGRlZHVwbGljYXRpb25QcmVmaXgubGVuZ3RoKTtcbiAgcmV0dXJuIC9eXFxkKyQvLnRlc3QoZGVkdXBsaWNhdGlvblN1ZmZpeCk7XG59XG5cbi8qKlxuICogVGhlIHN5bmNocm9ub3VzIGNvcmUgb2Yge0BsaW5rIGdldEF0dGFjaG1lbnRGaWxlUGF0aH0sIHJlYWNoZWQgd2hlbiBub2JvZHkgaW5zdGFsbGVkXG4gKiB7QGxpbmsgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZC5leHRlbmRlZH0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmaWxlIHBhdGggc3luYyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmMocGFyYW1zOiBHZXRBdHRhY2htZW50RmlsZVBhdGhTeW5jUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBub3RlUGF0aE9yRmlsZSxcbiAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZSxcbiAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2tcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgYXR0YWNobWVudFBhdGggPSBnZXRQYXRoKGFwcCwgb2xkQXR0YWNobWVudFBhdGhPckZpbGUpO1xuICBjb25zdCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbiA9IGV4dG5hbWUoYXR0YWNobWVudFBhdGgpO1xuXG4gIHJldHVybiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNTeW5jKHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudEZpbGVCYXNlTmFtZTogYmFzZW5hbWUoYXR0YWNobWVudFBhdGgsIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uKSxcbiAgICBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogYXR0YWNobWVudEZpbGVFeHRlbnNpb24uc2xpY2UoMSksXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrXG4gIH0pO1xufVxuXG4vKipcbiAqIFRoZSBzeW5jaHJvbm91cyBjb3JlIG9mIHtAbGluayBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHN9LCB3aGljaCBjYW5ub3QgY3JlYXRlIGEgbWlzc2luZyBhdHRhY2htZW50XG4gKiBmb2xkZXIuIEl0cyBjYWxsZXIgY3JlYXRlcyB0aGUgZm9sZGVyIGZpcnN0IHdoZW4gdGhhdCBpcyB3YW50ZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzIHN5bmMgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICovXG5mdW5jdGlvbiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNTeW5jKHBhcmFtczogR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzU3luY1BhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudEZpbGVFeHRlbnNpb24sXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXIgPSByZXNvbHZlQXR0YWNobWVudEZvbGRlcih7IGFwcCwgbm90ZVBhdGhPckZpbGUgfSk7XG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUgPSBub3JtYWxpemVTdHJpbmcobm9ybWFsaXplU2xhc2hlcyhwYXJhbXMuYXR0YWNobWVudEZpbGVCYXNlTmFtZSkpO1xuXG4gIC8vIEEgZm9sZGVyIHRoYXQgZG9lcyBub3QgZXhpc3QgeWV0IHN0aWxsIG93bnMgdGhlIGF0dGFjaG1lbnQgcGF0aC5cbiAgLy8gUmVzb2x2aW5nIGl0IGFzIGEgbm9uLWV4aXN0aW5nIGZvbGRlciBzdG9wcyB0aGUgYW5zd2VyIGZyb20gY29sbGFwc2luZyB0byB0aGUgdmF1bHQgcm9vdC5cbiAgY29uc3QgZm9sZGVyID0gYXR0YWNobWVudEZvbGRlci5mb2xkZXIgPz8gZ2V0Rm9sZGVyKHsgYXBwLCBwYXRoT3JGb2xkZXI6IGF0dGFjaG1lbnRGb2xkZXIucGF0aCwgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHByZWZpeCA9IGZvbGRlci5nZXRQYXJlbnRQcmVmaXgoKTtcbiAgcmV0dXJuIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICAgID8gbWFrZUZpbGVOYW1lKHtcbiAgICAgIGZpbGVCYXNlTmFtZTogcHJlZml4ICsgYXR0YWNobWVudEZpbGVCYXNlTmFtZSxcbiAgICAgIGZpbGVFeHRlbnNpb246IGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uXG4gICAgfSlcbiAgICA6IGFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoKHByZWZpeCArIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uKTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUge0BsaW5rIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uRXh0ZW5kZWQuZXh0ZW5kZWR9IG1lbWJlciBhbiBhdHRhY2htZW50LWxvY2F0aW9uXG4gKiBwbHVnaW4gaW5zdGFsbHMuIEl0cyBwcmVzZW5jZSBpcyB0aGUgc3luY2hyb25vdXMgcHJvYmUgZm9yIFwic29tZWJvZHkgZWxzZSBvd25zIHRoZSByZXNvbHV0aW9uXCIuXG4gKlxuICogQHBhcmFtIGFwcCAtIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGV4dGVuZGVkIGZ1bmN0aW9uLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vYm9keSBpbnN0YWxsZWQgb25lLlxuICovXG5mdW5jdGlvbiBnZXRFeHRlbmRlZEZ1bmN0aW9uKGFwcDogQXBwKTogR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZFsnZXh0ZW5kZWQnXSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAoYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50cyBhcyBQYXJ0aWFsPEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uRXh0ZW5kZWQ+KS5leHRlbmRlZDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCBieSBjb21iaW5pbmcgbXVsdGlwbGUgc2xhc2hlcyBpbnRvIGEgc2luZ2xlIHNsYXNoIGFuZCByZW1vdmluZyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gUGF0aCB0byBub3JtYWxpemUuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXRoLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTbGFzaGVzKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHBhdGggPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBwYXRoLFxuICAgIHJlcGxhY2VyOiAnLycsXG4gICAgc2VhcmNoVmFsdWU6IC8oPzpbXFxcXC9dKSsvZ1xuICB9KTtcbiAgcGF0aCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IHBhdGgsXG4gICAgcmVwbGFjZXI6ICcnLFxuICAgIHNlYXJjaFZhbHVlOiAvXlxcLyt8XFwvKyQvZ1xuICB9KTtcbiAgcmV0dXJuIHBhdGggfHwgJy8nO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBgYXR0YWNobWVudEZvbGRlclBhdGhgIHNldHRpbmcgYWdhaW5zdCBhIG5vdGUgaW50byBhIGNvbmNyZXRlIGF0dGFjaG1lbnQgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgcmVzb2x2ZSBhdHRhY2htZW50IGZvbGRlciBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBhdHRhY2htZW50IGZvbGRlci5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUF0dGFjaG1lbnRGb2xkZXIocGFyYW1zOiBSZXNvbHZlQXR0YWNobWVudEZvbGRlclBhcmFtcyk6IFJlc29sdmVBdHRhY2htZW50Rm9sZGVyUmVzdWx0IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBub3RlUGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBsZXQgYXR0YWNobWVudEZvbGRlclBhdGggPSBhcHAudmF1bHQuZ2V0Q29uZmlnKCdhdHRhY2htZW50Rm9sZGVyUGF0aCcpIGFzIHN0cmluZztcbiAgY29uc3QgaXNDdXJyZW50Rm9sZGVyID0gYXR0YWNobWVudEZvbGRlclBhdGggPT09ICcuJyB8fCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gJy4vJztcbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gYXR0YWNobWVudEZvbGRlclBhdGguc3RhcnRzV2l0aCgnLi8nKVxuICAgID8gdHJpbVN0YXJ0KHtcbiAgICAgICRzdHJpbmc6IGF0dGFjaG1lbnRGb2xkZXJQYXRoLFxuICAgICAgcHJlZml4OiAnLi8nXG4gICAgfSlcbiAgICA6IG51bGw7XG5cbiAgLy8gQSBub3RlIHRoYXQgZG9lcyBub3QgZXhpc3QgeWV0IChhIHJlbmFtZSB0YXJnZXQsIGEgZHVtbXkgc2libGluZykgc3RpbGwgYmVsb25ncyB0byBpdHMgb3duIGZvbGRlci5cbiAgLy8gTWF0ZXJpYWxpemluZyBpdCBmcm9tIGl0cyBwYXRoIGtlZXBzIHRoYXQgZm9sZGVyLCB3aGVyZSBhIHZhdWx0IGxvb2t1cCB3b3VsZCBmYWxsIGJhY2sgdG8gdGhlIHJvb3QuXG4gIC8vIE9ubHkgYW4gZXhwbGljaXRseSBub3RlLWxlc3MgYXR0YWNobWVudCByZXNvbHZlcyB0byB0aGUgdmF1bHQgcm9vdC5cbiAgY29uc3Qgbm90ZUZpbGVPck51bGwgPSBub3RlUGF0aE9yRmlsZSA9PT0gbnVsbFxuICAgID8gbnVsbFxuICAgIDogZ2V0RmlsZSh7XG4gICAgICBhcHAsXG4gICAgICBwYXRoT3JGaWxlOiBub3RlUGF0aE9yRmlsZSxcbiAgICAgIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZVxuICAgIH0pO1xuXG4gIGlmIChpc0N1cnJlbnRGb2xkZXIpIHtcbiAgICBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IG5vdGVGaWxlT3JOdWxsID8gbm90ZUZpbGVPck51bGwucGFyZW50Py5wYXRoID8/ICcnIDogJyc7XG4gIH0gZWxzZSBpZiAocmVsYXRpdmVQYXRoKSB7XG4gICAgYXR0YWNobWVudEZvbGRlclBhdGggPSAobm90ZUZpbGVPck51bGwgPyBub3RlRmlsZU9yTnVsbC5wYXJlbnQ/LmdldFBhcmVudFByZWZpeCgpID8/ICcnIDogJycpICsgcmVsYXRpdmVQYXRoO1xuICB9XG5cbiAgYXR0YWNobWVudEZvbGRlclBhdGggPSBub3JtYWxpemVTdHJpbmcobm9ybWFsaXplU2xhc2hlcyhhdHRhY2htZW50Rm9sZGVyUGF0aCkpO1xuXG4gIHJldHVybiB7XG4gICAgZm9sZGVyOiBnZXRGb2xkZXJPck51bGwoeyBhcHAsIGlzQ2FzZUluc2Vuc2l0aXZlOiB0cnVlLCBwYXRoT3JGb2xkZXI6IGF0dGFjaG1lbnRGb2xkZXJQYXRoIH0pLFxuICAgIHBhdGg6IGF0dGFjaG1lbnRGb2xkZXJQYXRoLFxuICAgIHJlbGF0aXZlUGF0aFxuICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFBLDZCQUdP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
|
|
@@ -144,6 +144,19 @@ export interface GetAttachmentFolderPathParams {
|
|
|
144
144
|
*/
|
|
145
145
|
readonly notePathOrFile: PathOrFile;
|
|
146
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Parameters for {@link getAttachmentFolderPathSyncOrNull}.
|
|
149
|
+
*/
|
|
150
|
+
export interface GetAttachmentFolderPathSyncOrNullParams {
|
|
151
|
+
/**
|
|
152
|
+
* The Obsidian application instance.
|
|
153
|
+
*/
|
|
154
|
+
readonly app: App;
|
|
155
|
+
/**
|
|
156
|
+
* The path of the note.
|
|
157
|
+
*/
|
|
158
|
+
readonly notePathOrFile: PathOrFile;
|
|
159
|
+
}
|
|
147
160
|
/**
|
|
148
161
|
* Options for the getAvailablePathForAttachments function.
|
|
149
162
|
*/
|
|
@@ -233,6 +246,28 @@ export declare function getAttachmentFilePath(params: GetAttachmentFilePathParam
|
|
|
233
246
|
* @returns A {@link Promise} that resolves to the attachment folder path.
|
|
234
247
|
*/
|
|
235
248
|
export declare function getAttachmentFolderPath(params: GetAttachmentFolderPathParams): Promise<string>;
|
|
249
|
+
/**
|
|
250
|
+
* Retrieves the attachment folder path for a given note **synchronously**, when that is possible at all.
|
|
251
|
+
*
|
|
252
|
+
* Obsidian builds its file/folder context menus and evaluates a command's `checkCallback` synchronously, so a
|
|
253
|
+
* caller deciding whether to merely *offer* a command cannot await {@link getAttachmentFolderPath}. This is
|
|
254
|
+
* the synchronous twin such a caller can use instead.
|
|
255
|
+
*
|
|
256
|
+
* The answer is `null` when it is not knowable synchronously — that is, when a plugin installed
|
|
257
|
+
* {@link GetAvailablePathForAttachmentsFunctionExtended.extended} and therefore owns the resolution, which is
|
|
258
|
+
* genuinely asynchronous. `null` means "ask {@link getAttachmentFolderPath}", never "there is no attachment
|
|
259
|
+
* folder". Otherwise the answer is exact rather than a guess: it is produced by the very same code
|
|
260
|
+
* {@link getAttachmentFolderPath} runs, whose only asynchronous step — creating a missing attachment folder —
|
|
261
|
+
* is unreachable on this path.
|
|
262
|
+
*
|
|
263
|
+
* There is deliberately no `context` parameter: {@link AttachmentPathContext} only ever reaches an
|
|
264
|
+
* {@link GetAvailablePathForAttachmentsFunctionExtended.extended} override, and this function answers `null`
|
|
265
|
+
* whenever one is installed.
|
|
266
|
+
*
|
|
267
|
+
* @param params - Parameters for the get attachment folder path sync or null function.
|
|
268
|
+
* @returns The attachment folder path, or `null` when it can only be resolved asynchronously.
|
|
269
|
+
*/
|
|
270
|
+
export declare function getAttachmentFolderPathSyncOrNull(params: GetAttachmentFolderPathSyncOrNullParams): null | string;
|
|
236
271
|
/**
|
|
237
272
|
* Retrieves the available path for attachments.
|
|
238
273
|
*
|
package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs
CHANGED
|
@@ -205,6 +205,7 @@ async function installAndEnableHotReload(params) {
|
|
|
205
205
|
const HOT_RELOAD_PLUGIN_ID = "hot-reload";
|
|
206
206
|
const COMMUNITY_PLUGINS_REGISTRY_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/HEAD/community-plugins.json";
|
|
207
207
|
const { requestUrl } = obsidianModule;
|
|
208
|
+
await app.plugins.setEnable(true);
|
|
208
209
|
if (!Object.hasOwn(app.plugins.manifests, HOT_RELOAD_PLUGIN_ID)) {
|
|
209
210
|
const registryResponse = await requestUrl(COMMUNITY_PLUGINS_REGISTRY_URL);
|
|
210
211
|
const registryEntries = registryResponse.json;
|
|
@@ -219,7 +220,7 @@ async function installAndEnableHotReload(params) {
|
|
|
219
220
|
const manifest = manifestResponse.json;
|
|
220
221
|
await app.plugins.installPlugin(entry.repo, version, manifest);
|
|
221
222
|
}
|
|
222
|
-
if (!app.plugins.
|
|
223
|
+
if (!Object.hasOwn(app.plugins.plugins, HOT_RELOAD_PLUGIN_ID)) {
|
|
223
224
|
await app.plugins.enablePluginAndSave(HOT_RELOAD_PLUGIN_ID);
|
|
224
225
|
}
|
|
225
226
|
await app.plugins.enablePluginAndSave(pluginName2);
|
|
@@ -297,4 +298,4 @@ function watchDevInstanceAndStopOnClose(transport) {
|
|
|
297
298
|
0 && (module.exports = {
|
|
298
299
|
copyToObsidianPluginsFolderPlugin
|
|
299
300
|
});
|
|
300
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9idW5kbGVycy9lc2J1aWxkLWltcGwvY29weS10by1vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgYXV0b21hdGljYWxseSBjb3BpZXMgdGhlIGJ1aWxkIG91dHB1dFxuICogdG8gdGhlIE9ic2lkaWFuIHBsdWdpbnMgZm9sZGVyIGR1cmluZyBkZXZlbG9wbWVudC4gVGhpcyBwbHVnaW4gaGVscHMgc3RyZWFtbGluZVxuICogdGhlIGRldmVsb3BtZW50IHdvcmtmbG93IGJ5IGVuc3VyaW5nIHRoYXQgdGhlIGxhdGVzdCBidWlsZCBpcyBhbHdheXMgYXZhaWxhYmxlXG4gKiBpbiB0aGUgY29ycmVjdCBPYnNpZGlhbiBmb2xkZXIgZm9yIHRlc3RpbmcgYW5kIHVzZS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gZXNidWlsZCBwbHVnaW4gdGhhdCBjb3BpZXMgYnVpbGQgb3V0cHV0IHRvIE9ic2lkaWFuIHBsdWdpbnMgZm9sZGVyOyByZXF1aXJlcyBhIGxpdmUgZXNidWlsZCBjb250ZXh0LiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5NYW5pZmVzdCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJztcblxuaW1wb3J0IHtcbiAgY3AsXG4gIG1rZGlyXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zLFxuICBEZXNrdG9wQ2RwVHJhbnNwb3J0LFxuICBldmFsSW5PYnNpZGlhblxufSBmcm9tICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJztcblxuaW1wb3J0IHtcbiAgaW52b2tlQXN5bmNTYWZlbHksXG4gIHNsZWVwXG59IGZyb20gJy4uLy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vLi4vLi4vZGVidWcudHMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgdG9Qb3NpeFBhdGhcbn0gZnJvbSAnLi4vLi4vLi4vcGF0aC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvcHlUb09ic2lkaWFuUGx1Z2luc0ZvbGRlclBsdWdpbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2hlcmUgdGhlIGJ1aWx0IGZpbGVzIGFyZSBsb2NhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdEZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBidWlsZCBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciBvZiB0aGUgT2JzaWRpYW4gY29uZmlndXJhdGlvbi4gSWYgbm90IHByb3ZpZGVkLCB0aGUgcGx1Z2luIHdpbGwgbm90IGNvcHkgZmlsZXMuXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhbkNvbmZpZ0ZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgT2JzaWRpYW4gcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgYSBDRFAgdGFyZ2V0IGRlc2NyaXB0b3IgcmVhZCBmcm9tIHRoZSBvd25lZCBpbnN0YW5jZSdzIGAvanNvbmAgZW5kcG9pbnQuXG4gKi9cbmludGVyZmFjZSBDZHBUYXJnZXQge1xuICAvKipcbiAgICogVGhlIGtpbmQgb2YgdGhlIHRhcmdldCwgZS5nLiBgcGFnZWAuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZW50cnkgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeSAoYGNvbW11bml0eS1wbHVnaW5zLmpzb25gKS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnkge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkgdGhlIHBsdWdpbiBpcyBwdWJsaXNoZWQgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2Ugd2UgcmVhZC5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2Uge1xuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2AuXG4gICAqL1xuICByZWFkb25seSB0YWdfbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQW5kRW5hYmxlSG90UmVsb2FkfS5cbiAqL1xuaW50ZXJmYWNlIEluc3RhbGxBbmRFbmFibGVIb3RSZWxvYWRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGZvbGRlciBvZiB0aGUgT2JzaWRpYW4gY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuQ29uZmlnRm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBidWlsdCBPYnNpZGlhbiBwbHVnaW4gdG8gZW5hYmxlIG9uY2UgSG90UmVsb2FkIGlzIGluIHBsYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vLyBUaGUgYG5wbSBydW4gZGV2YC1vd25lZCBPYnNpZGlhbiBpbnN0YW5jZTogbGF1bmNoZWQgb24gdGhlIGZpcnN0IHJlYnVpbGQgYW5kIHJldXNlZCBhY3Jvc3MgcmVidWlsZHMuXG4vLyBJdHMgbGlmZXRpbWUgaXMgdGllZCB0byB0aGUgYG5wbSBydW4gZGV2YCBwcm9jZXNzIGluIEJPVEggZGlyZWN0aW9ucy5cbi8vIFRoZSBpbnN0YW5jZSBpcyBjbG9zZWQgd2hlbiB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzIChzZWUgYHJlZ2lzdGVyRGV2SW5zdGFuY2VDbGVhbnVwYCkuXG4vLyBUaGUgcHJvY2VzcyBzdG9wcyB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjbG9zZWQgKHNlZSBgd2F0Y2hEZXZJbnN0YW5jZUFuZFN0b3BPbkNsb3NlYCkuXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICBkZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2U6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHwgdW5kZWZpbmVkO1xuICBpc0Rldkluc3RhbmNlQ2xlYW51cFJlZ2lzdGVyZWQ6IGJvb2xlYW47XG4gIGlzRGV2SW5zdGFuY2VEaXNwb3NlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgbW9kdWxlU3RhdGU6IE1vZHVsZVN0YXRlID0ge1xuICBkZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2U6IHVuZGVmaW5lZCxcbiAgaXNEZXZJbnN0YW5jZUNsZWFudXBSZWdpc3RlcmVkOiBmYWxzZSxcbiAgaXNEZXZJbnN0YW5jZURpc3Bvc2VkOiBmYWxzZVxufTtcblxuLyoqXG4gKiBIb3cgb2Z0ZW4gdGhlIG93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGlzIHByb2JlZCB0byBkZXRlY3QgdGhhdCBpdCB3YXMgY2xvc2VkLlxuICovXG5jb25zdCBERVZfSU5TVEFOQ0VfUFJPQkVfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcblxuLyoqXG4gKiBIb3cgbWFueSBjb25zZWN1dGl2ZSBmYWlsZWQgcHJvYmVzIGFyZSB0b2xlcmF0ZWQgYmVmb3JlIHRoZSBvd25lZCBpbnN0YW5jZSBpcyBjb25zaWRlcmVkIGNsb3NlZC4gQVxuICogc2luZ2xlIGZhaWx1cmUgY2FuIGJlIGEgdHJhbnNpZW50IGhpY2N1cCAoYSBidXN5IHJlbmRlcmVyLCBhIG1vbWVudGFyaWx5IHJlZnVzZWQgY29ubmVjdGlvbiksIHNvIHRoZVxuICogZGV2ZWxvcG1lbnQgYnVpbGQgaXMgb25seSBzdG9wcGVkIG9uY2UgdGhlIGVuZHBvaW50IHN0YXlzIHVucmVhY2hhYmxlLlxuICovXG5jb25zdCBERVZfSU5TVEFOQ0VfQ0xPU0VEX1BST0JFX0NPVU5UID0gMztcbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IGNvcGllcyB0aGUgYnVpbGQgb3V0cHV0IHRvIHRoZSBPYnNpZGlhbiBwbHVnaW5zIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luKHBhcmFtczogQ29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luUGFyYW1zKTogUGx1Z2luIHtcbiAgY29uc3Qge1xuICAgIGRpc3RGb2xkZXIsXG4gICAgaXNQcm9kdWN0aW9uQnVpbGQsXG4gICAgcGx1Z2luTmFtZVxuICB9ID0gcGFyYW1zO1xuICBsZXQge1xuICAgIG9ic2lkaWFuQ29uZmlnRm9sZGVyXG4gIH0gPSBwYXJhbXM7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2NvcHktdG8tb2JzaWRpYW4tcGx1Z2lucy1mb2xkZXInLFxuICAgIHNldHVwKGJ1aWxkKTogdm9pZCB7XG4gICAgICBidWlsZC5vbkVuZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChpc1Byb2R1Y3Rpb25CdWlsZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb2JzaWRpYW5Db25maWdGb2xkZXIpIHtcbiAgICAgICAgICBnZXRMaWJEZWJ1Z2dlcignY29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luJykoXG4gICAgICAgICAgICAnTm8gT2JzaWRpYW4gY29uZmlnIGZvbGRlciBjb25maWd1cmVkLiBgT0JTSURJQU5fQ09ORklHX0ZPTERFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBpbiBzeXN0ZW0gb3IgaW4gYC5lbnZgIGZpbGUuIFRoZSBjb21waWxlZCBwbHVnaW4gd2lsbCBub3QgYmUgY29waWVkIGludG8gT2JzaWRpYW4gcGx1Z2lucyBmb2xkZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzaWRpYW5Db25maWdGb2xkZXIgPSB0b1Bvc2l4UGF0aChvYnNpZGlhbkNvbmZpZ0ZvbGRlcik7XG5cbiAgICAgICAgY29uc3QgcGx1Z2luRm9sZGVyID0gam9pbihvYnNpZGlhbkNvbmZpZ0ZvbGRlciwgJ3BsdWdpbnMnLCBwbHVnaW5OYW1lKTtcbiAgICAgICAgYXdhaXQgbWtkaXIocGx1Z2luRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgYXdhaXQgY3AoZGlzdEZvbGRlciwgcGx1Z2luRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICBhd2FpdCBpbnN0YWxsQW5kRW5hYmxlSG90UmVsb2FkKHtcbiAgICAgICAgICBvYnNpZGlhbkNvbmZpZ0ZvbGRlcixcbiAgICAgICAgICBwbHVnaW5OYW1lXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGBucG0gcnVuIGRldmAtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiB2YXVsdCwgbGF1bmNoaW5nIGl0IG9uIGZpcnN0IHVzZSBhbmRcbiAqIHJldXNpbmcgaXQgb24gc3Vic2VxdWVudCByZWJ1aWxkcy5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlciB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBvd25lZCB7QGxpbmsgT2JzaWRpYW5UcmFuc3BvcnR9LlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRPckxhdW5jaERldkluc3RhbmNlKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBtb2R1bGVTdGF0ZS5kZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2UgPz89IGxhdW5jaERldkluc3RhbmNlKHZhdWx0UGF0aCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG1vZHVsZVN0YXRlLmRldkluc3RhbmNlVHJhbnNwb3J0UHJvbWlzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBDbGVhciB0aGUgY2FjaGUgc28gYSBsYXRlciByZWJ1aWxkIHJldHJpZXMgdGhlIGxhdW5jaC5cbiAgICBtb2R1bGVTdGF0ZS5kZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgSG90UmVsb2FkIHBsdWdpbiBmcm9tIHRoZSBvZmZpY2lhbCBjb21tdW5pdHkgc3RvcmUgKGlmIG5vdCBhbHJlYWR5IGluc3RhbGxlZCksIGVuYWJsZXMgaXRcbiAqIChpZiBub3QgYWxyZWFkeSBlbmFibGVkKSwgYW5kIGVuYWJsZXMgdGhlIGZyZXNobHktYnVpbHQgcGx1Z2luIFx1MjAxNCBhbGwgdGhyb3VnaCB0aGUgYG5wbSBydW4gZGV2YC1vd25lZFxuICogT2JzaWRpYW4gaW5zdGFuY2UsIHNvIEhvdFJlbG9hZCB0aGVuIGF1dG8tcmVmcmVzaGVzIHRoZSBkZXBsb3llZCBwbHVnaW4gb24gZXZlcnkgcmVidWlsZC5cbiAqXG4gKiBUaGUgaW5zdGFsbCBnb2VzIHRocm91Z2ggT2JzaWRpYW4ncyBvd24gYGluc3RhbGxQbHVnaW5gICh0aGUgY29tbXVuaXR5LXN0b3JlIG1lY2hhbmlzbSksIGFuZCBldmVyeSBzdGVwXG4gKiBydW5zIGFnYWluc3QgdGhlIG93bmVkIGluc3RhbmNlIG92ZXIgQ0RQOyBhbnkgZmFpbHVyZSBzdXJmYWNlcyAodGhlIGRldiBidWlsZCByZXBvcnRzIGl0KSByYXRoZXIgdGhhblxuICogYmVpbmcgc2lsZW50bHkgc3dhbGxvd2VkLlxuICpcbiAqIFRoZSBpbnN0YWxsLWlmLW1pc3NpbmcgLyBlbmFibGUtaWYtZGlzYWJsZWQgbG9naWMgYmVsb3cgaW50ZW50aW9uYWxseSBtaXJyb3JzIHRoZSBwdWJsaWNcbiAqIGBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luYCAvIGBlbmFibGVDb21tdW5pdHlQbHVnaW5gIGhlbHBlcnMgaW4gYHNyYy9vYnNpZGlhbi9jb21tdW5pdHktcGx1Z2lucy50c2AuIEl0XG4gKiBjYW5ub3QgaW1wb3J0IGFuZCBjYWxsIHRoZW06IHRoZSBgZm5gIGlzIHNlcmlhbGl6ZWQgKGB0b1N0cmluZygpYCkgYW5kIGV4ZWN1dGVkIGluIHRoZSByZW5kZXJlciwgYW5kXG4gKiB0aGlzIGJ1aWxkLW93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGlzIGJhcmUgXHUyMDE0IGl0IGhhcyBubyBkZXYtdXRpbHMgYGxpYmAgcHJvdmlkZXIgd2lyZWQgKHRoYXQgcmVzb2x2ZXIgaXNcbiAqIHJlZ2lzdGVyZWQgb25seSBpbiB0aGUgaW50ZWdyYXRpb24tdGVzdCBzZXR1cCwgd2hvc2UgZml4dHVyZSBwdWJsaXNoZXMgdGhlIG1lcmdlZCBzdXJmYWNlIG9uIGB3aW5kb3dgKSxcbiAqIHNvIHRoZSBjbG9zdXJlIGhhcyBubyBhY2Nlc3MgdG8gdGhlIGxpYnJhcnkgc3VyZmFjZSBhbmQgbXVzdCBpbmxpbmUgdGhlIGVxdWl2YWxlbnQgc3RlcHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbEFuZEVuYWJsZUhvdFJlbG9hZFBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgSG90UmVsb2FkIGFuZCB0aGUgYnVpbHQgcGx1Z2luIGFyZSBpbnN0YWxsZWQgYW5kIGVuYWJsZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBbmRFbmFibGVIb3RSZWxvYWQocGFyYW1zOiBJbnN0YWxsQW5kRW5hYmxlSG90UmVsb2FkUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBvYnNpZGlhbkNvbmZpZ0ZvbGRlcixcbiAgICBwbHVnaW5OYW1lXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHZhdWx0UGF0aCA9IGRpcm5hbWUob2JzaWRpYW5Db25maWdGb2xkZXIpO1xuICBjb25zdCB0cmFuc3BvcnQgPSBhd2FpdCBnZXRPckxhdW5jaERldkluc3RhbmNlKHZhdWx0UGF0aCk7XG4gIGF3YWl0IGV2YWxJbk9ic2lkaWFuKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgYXJnc2AgaXMgZGVjbGFyZWQgYnkgYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgOyByZW5hbWluZyBpdCBoZXJlIHdvdWxkIG5vdCBtYXRjaCB0aGUgQVBJLlxuICAgIGFyZ3M6IHsgcGx1Z2luTmFtZSB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3csIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gTm8gYWN0dWFsIHNoYWRvd2luZyBhcyB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZXh0ZXJuYWxseSwgYW5kIGBmbmAgaXMgZGVjbGFyZWQgYnkgYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgLlxuICAgIGFzeW5jIGZuKHsgYXBwLCBvYnNpZGlhbk1vZHVsZSwgcGx1Z2luTmFtZSB9KSB7XG4gICAgICBjb25zdCBIT1RfUkVMT0FEX1BMVUdJTl9JRCA9ICdob3QtcmVsb2FkJztcbiAgICAgIGNvbnN0IENPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTCA9ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9IRUFEL2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuICAgICAgY29uc3QgeyByZXF1ZXN0VXJsIH0gPSBvYnNpZGlhbk1vZHVsZTtcblxuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGFwcC5wbHVnaW5zLm1hbmlmZXN0cywgSE9UX1JFTE9BRF9QTFVHSU5fSUQpKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5UmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKENPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTCk7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5RW50cmllcyA9IHJlZ2lzdHJ5UmVzcG9uc2UuanNvbiBhcyBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W107XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcmVnaXN0cnlFbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSBIT1RfUkVMT0FEX1BMVUdJTl9JRCk7XG4gICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtIT1RfUkVMT0FEX1BMVUdJTl9JRH0nIHdhcyBub3QgZm91bmQgaW4gdGhlIE9ic2lkaWFuIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGF0ZXN0UmVsZWFzZVJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke2VudHJ5LnJlcG99L3JlbGVhc2VzL2xhdGVzdGApO1xuICAgICAgICBjb25zdCBsYXRlc3RSZWxlYXNlID0gbGF0ZXN0UmVsZWFzZVJlc3BvbnNlLmpzb24gYXMgR2l0SHViUmVsZWFzZTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IGxhdGVzdFJlbGVhc2UudGFnX25hbWU7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0UmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2dpdGh1Yi5jb20vJHtlbnRyeS5yZXBvfS9yZWxlYXNlcy9kb3dubG9hZC8ke3ZlcnNpb259L21hbmlmZXN0Lmpzb25gKTtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSBtYW5pZmVzdFJlc3BvbnNlLmpzb24gYXMgUGx1Z2luTWFuaWZlc3Q7XG4gICAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW4oZW50cnkucmVwbywgdmVyc2lvbiwgbWFuaWZlc3QpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhIT1RfUkVMT0FEX1BMVUdJTl9JRCkpIHtcbiAgICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShIT1RfUkVMT0FEX1BMVUdJTl9JRCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luTmFtZSk7XG4gICAgfSxcbiAgICBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzOiB0cnVlLFxuICAgIHRyYW5zcG9ydCxcbiAgICB2YXVsdFBhdGhcbiAgfSk7XG59XG5cbi8qKlxuICogUHJvYmVzIHRoZSBvd25lZCBPYnNpZGlhbiBpbnN0YW5jZSdzIENEUCBlbmRwb2ludCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpcyBzdGlsbCBydW5uaW5nLlxuICpcbiAqIEEgY2xvc2VkIGluc3RhbmNlIHN0b3BzIHNlcnZpbmcgQ0RQIGFsdG9nZXRoZXIsIHNvIGFuIHVucmVhY2hhYmxlIGVuZHBvaW50IFx1MjAxNCBvciBvbmUgbGVmdCB3aXRoIG5vIHBhZ2VcbiAqIHRhcmdldHMgd2hpbGUgdGhlIGFwcCB0ZWFycyBpdHNlbGYgZG93biBcdTIwMTQgbWVhbnMgdGhlIGluc3RhbmNlIGlzIGdvbmUuXG4gKlxuICogQHBhcmFtIGNkcFVybCAtIFRoZSBiYXNlIENEUCBVUkwgb2YgdGhlIG93bmVkIGluc3RhbmNlLCBlLmcuIGBodHRwOi8vbG9jYWxob3N0OjUxODg4YC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byBgdHJ1ZWAgd2hpbGUgdGhlIGluc3RhbmNlIGlzIHN0aWxsIHNlcnZpbmcgYSBwYWdlIHRhcmdldC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNEZXZJbnN0YW5jZVJ1bm5pbmcoY2RwVXJsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIFdlIHJ1biB0aGlzIG91dHNpZGUgb2YgT2JzaWRpYW4sIHNvIHdlIGRvbid0IGhhdmUgYHJlcXVlc3RVcmwoKWAuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtjZHBVcmx9L2pzb25gKTtcbiAgICBjb25zdCB0YXJnZXRzID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENkcFRhcmdldFtdO1xuICAgIHJldHVybiB0YXJnZXRzLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LnR5cGUgPT09ICdwYWdlJyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIExhdW5jaGVzIGEgZnJlc2ggb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgKGlzb2xhdGVkIHVzZXItZGF0YSBkaXIpIGFuZCBvcGVucyB0aGUgZ2l2ZW4gdmF1bHQuXG4gKlxuICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIgdG8gb3Blbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgbGF1bmNoZWQge0BsaW5rIE9ic2lkaWFuVHJhbnNwb3J0fS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGF1bmNoRGV2SW5zdGFuY2UodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPE9ic2lkaWFuVHJhbnNwb3J0PiB7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdHJhbnNwb3J0LnJlZ2lzdGVyVmF1bHQodmF1bHRQYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0cmFuc3BvcnQuZGlzcG9zZVN5bmM/LigpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIHJlZ2lzdGVyRGV2SW5zdGFuY2VDbGVhbnVwKHRyYW5zcG9ydCk7XG4gIHdhdGNoRGV2SW5zdGFuY2VBbmRTdG9wT25DbG9zZSh0cmFuc3BvcnQpO1xuICByZXR1cm4gdHJhbnNwb3J0O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBwcm9jZXNzLWV4aXQgYW5kIHNpZ25hbCBoYW5kbGVycyAob25jZSkgdGhhdCBzeW5jaHJvbm91c2x5IGNsb3NlIHRoZSBvd25lZCBPYnNpZGlhblxuICogaW5zdGFuY2Ugd2hlbiB0aGUgYG5wbSBydW4gZGV2YCBwcm9jZXNzIHRlcm1pbmF0ZXMuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9ydCAtIFRoZSBvd25lZCB0cmFuc3BvcnQgdG8gZGlzcG9zZSBvbiBzaHV0ZG93bi5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJEZXZJbnN0YW5jZUNsZWFudXAodHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCk6IHZvaWQge1xuICBpZiAobW9kdWxlU3RhdGUuaXNEZXZJbnN0YW5jZUNsZWFudXBSZWdpc3RlcmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG1vZHVsZVN0YXRlLmlzRGV2SW5zdGFuY2VDbGVhbnVwUmVnaXN0ZXJlZCA9IHRydWU7XG5cbiAgLy8gYGV4aXRgIGNvdmVycyBhbnkgYHByb2Nlc3MuZXhpdCgpYCwgYnV0IGEgZGVmYXVsdCBDdHJsK0MgdGVybWluYXRlcyBXSVRIT1VUIGZpcmluZyBgZXhpdGAsIHNvIHRoZSBzaWduYWwgaGFuZGxlcnMgZ3VhcmFudGVlIHRoZSBvd25lZCBPYnNpZGlhbiBpcyBraWxsZWQgb24gc2h1dGRvd24uXG4gIHByb2Nlc3Mub24oJ2V4aXQnLCBkaXNwb3NlRGV2SW5zdGFuY2UpO1xuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR0hVUCcsICdTSUdJTlQnLCAnU0lHVEVSTSddIGFzIGNvbnN0KSB7XG4gICAgcHJvY2Vzcy5vbmNlKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgZGlzcG9zZURldkluc3RhbmNlKCk7XG4gICAgICBwcm9jZXNzLmV4aXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3Bvc2VEZXZJbnN0YW5jZSgpOiB2b2lkIHtcbiAgICBpZiAobW9kdWxlU3RhdGUuaXNEZXZJbnN0YW5jZURpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG1vZHVsZVN0YXRlLmlzRGV2SW5zdGFuY2VEaXNwb3NlZCA9IHRydWU7XG4gICAgdHJhbnNwb3J0LmRpc3Bvc2VTeW5jPy4oKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhdGNoZXMgdGhlIGBucG0gcnVuIGRldmAtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgYW5kIHN0b3BzIHRoZSBkZXZlbG9wbWVudCBidWlsZCBvbmNlIHRoZSBpbnN0YW5jZSBpc1xuICogY2xvc2VkLlxuICpcbiAqIFRoaXMgaXMgdGhlIG1pcnJvciBpbWFnZSBvZiB7QGxpbmsgcmVnaXN0ZXJEZXZJbnN0YW5jZUNsZWFudXB9OiB0aGF0IG9uZSBjbG9zZXMgdGhlIGluc3RhbmNlIHdoZW4gdGhlXG4gKiBgbnBtIHJ1biBkZXZgIHByb2Nlc3MgdGVybWluYXRlcywgdGhpcyBvbmUgdGVybWluYXRlcyB0aGUgcHJvY2VzcyB3aGVuIHRoZSB1c2VyIGNsb3NlcyB0aGUgaW5zdGFuY2UsIHNvXG4gKiB0aGUgdHdvIG5ldmVyIG91dGxpdmUgZWFjaCBvdGhlci4gQSBidWlsZCB3YXRjaGluZyBhbiBPYnNpZGlhbiB0aGF0IGlzIG5vIGxvbmdlciBydW5uaW5nIGhhcyBub3RoaW5nXG4gKiBsZWZ0IHRvIGRlcGxveSB0by5cbiAqXG4gKiBPbmx5IGEgaGFybmVzcy1vd25lZCBpbnN0YW5jZSBpcyB3YXRjaGVkLiBXaGVuIHRoZSB0cmFuc3BvcnQgYXR0YWNoZXMgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIE9ic2lkaWFuXG4gKiAodGhlIHVzZXIncyBvd24pLCB0aGF0IGluc3RhbmNlIGlzIG5vdCBvdXJzIHRvIGJlIHRpZWQgdG8gYW5kIGNsb3NpbmcgaXQgbGVhdmVzIHRoZSBidWlsZCBydW5uaW5nLlxuICpcbiAqIEBwYXJhbSB0cmFuc3BvcnQgLSBUaGUgb3duZWQgdHJhbnNwb3J0IHdob3NlIGluc3RhbmNlIHRvIHdhdGNoLlxuICovXG5mdW5jdGlvbiB3YXRjaERldkluc3RhbmNlQW5kU3RvcE9uQ2xvc2UodHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCk6IHZvaWQge1xuICBpZiAoISh0cmFuc3BvcnQgaW5zdGFuY2VvZiBEZXNrdG9wQ2RwVHJhbnNwb3J0KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGVuZHBvaW50ID0gdHJhbnNwb3J0LmdldE93bmVkSW5zdGFuY2VFbmRwb2ludCgpO1xuICBpZiAoIWVuZHBvaW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY2RwVXJsID0gYGh0dHA6Ly8ke2VuZHBvaW50Lmhvc3R9OiR7U3RyaW5nKGVuZHBvaW50LnBvcnQpfWA7XG4gIGludm9rZUFzeW5jU2FmZWx5KHN0b3BXaGVuRGV2SW5zdGFuY2VDbG9zZXMpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0b3BXaGVuRGV2SW5zdGFuY2VDbG9zZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGNvbnNlY3V0aXZlRmFpbGVkUHJvYmVDb3VudCA9IDA7XG4gICAgd2hpbGUgKGNvbnNlY3V0aXZlRmFpbGVkUHJvYmVDb3VudCA8IERFVl9JTlNUQU5DRV9DTE9TRURfUFJPQkVfQ09VTlQpIHtcbiAgICAgIGF3YWl0IHNsZWVwKHsgbWlsbGlzZWNvbmRzOiBERVZfSU5TVEFOQ0VfUFJPQkVfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTIH0pO1xuXG4gICAgICAvLyBUaGUgcHJvY2VzcyBpcyBhbHJlYWR5IHNodXR0aW5nIGRvd24gYW5kIGtpbGxlZCB0aGUgaW5zdGFuY2UgaXRzZWxmOyB0aGUgcHJvYmVzIHdvdWxkIGp1c3QgcmFjZSB0aGUgdGVhcmRvd24uXG4gICAgICBpZiAobW9kdWxlU3RhdGUuaXNEZXZJbnN0YW5jZURpc3Bvc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc2VjdXRpdmVGYWlsZWRQcm9iZUNvdW50ID0gYXdhaXQgaXNEZXZJbnN0YW5jZVJ1bm5pbmcoY2RwVXJsKSA/IDAgOiBjb25zZWN1dGl2ZUZhaWxlZFByb2JlQ291bnQgKyAxO1xuICAgIH1cblxuICAgIGNvbnNvbGUud2FybignVGhlIE9ic2lkaWFuIGluc3RhbmNlIG93bmVkIGJ5IGBucG0gcnVuIGRldmAgd2FzIGNsb3NlZC4gU3RvcHBpbmcgdGhlIGRldmVsb3BtZW50IGJ1aWxkLicpO1xuICAgIHByb2Nlc3MuZXhpdCgpO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAi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
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9idW5kbGVycy9lc2J1aWxkLWltcGwvY29weS10by1vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgYXV0b21hdGljYWxseSBjb3BpZXMgdGhlIGJ1aWxkIG91dHB1dFxuICogdG8gdGhlIE9ic2lkaWFuIHBsdWdpbnMgZm9sZGVyIGR1cmluZyBkZXZlbG9wbWVudC4gVGhpcyBwbHVnaW4gaGVscHMgc3RyZWFtbGluZVxuICogdGhlIGRldmVsb3BtZW50IHdvcmtmbG93IGJ5IGVuc3VyaW5nIHRoYXQgdGhlIGxhdGVzdCBidWlsZCBpcyBhbHdheXMgYXZhaWxhYmxlXG4gKiBpbiB0aGUgY29ycmVjdCBPYnNpZGlhbiBmb2xkZXIgZm9yIHRlc3RpbmcgYW5kIHVzZS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gZXNidWlsZCBwbHVnaW4gdGhhdCBjb3BpZXMgYnVpbGQgb3V0cHV0IHRvIE9ic2lkaWFuIHBsdWdpbnMgZm9sZGVyOyByZXF1aXJlcyBhIGxpdmUgZXNidWlsZCBjb250ZXh0LiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5NYW5pZmVzdCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJztcblxuaW1wb3J0IHtcbiAgY3AsXG4gIG1rZGlyXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zLFxuICBEZXNrdG9wQ2RwVHJhbnNwb3J0LFxuICBldmFsSW5PYnNpZGlhblxufSBmcm9tICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJztcblxuaW1wb3J0IHtcbiAgaW52b2tlQXN5bmNTYWZlbHksXG4gIHNsZWVwXG59IGZyb20gJy4uLy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vLi4vLi4vZGVidWcudHMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgdG9Qb3NpeFBhdGhcbn0gZnJvbSAnLi4vLi4vLi4vcGF0aC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvcHlUb09ic2lkaWFuUGx1Z2luc0ZvbGRlclBsdWdpbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2hlcmUgdGhlIGJ1aWx0IGZpbGVzIGFyZSBsb2NhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdEZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBidWlsZCBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciBvZiB0aGUgT2JzaWRpYW4gY29uZmlndXJhdGlvbi4gSWYgbm90IHByb3ZpZGVkLCB0aGUgcGx1Z2luIHdpbGwgbm90IGNvcHkgZmlsZXMuXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhbkNvbmZpZ0ZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgT2JzaWRpYW4gcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgYSBDRFAgdGFyZ2V0IGRlc2NyaXB0b3IgcmVhZCBmcm9tIHRoZSBvd25lZCBpbnN0YW5jZSdzIGAvanNvbmAgZW5kcG9pbnQuXG4gKi9cbmludGVyZmFjZSBDZHBUYXJnZXQge1xuICAvKipcbiAgICogVGhlIGtpbmQgb2YgdGhlIHRhcmdldCwgZS5nLiBgcGFnZWAuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZW50cnkgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeSAoYGNvbW11bml0eS1wbHVnaW5zLmpzb25gKS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnkge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkgdGhlIHBsdWdpbiBpcyBwdWJsaXNoZWQgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2Ugd2UgcmVhZC5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2Uge1xuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2AuXG4gICAqL1xuICByZWFkb25seSB0YWdfbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQW5kRW5hYmxlSG90UmVsb2FkfS5cbiAqL1xuaW50ZXJmYWNlIEluc3RhbGxBbmRFbmFibGVIb3RSZWxvYWRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGZvbGRlciBvZiB0aGUgT2JzaWRpYW4gY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuQ29uZmlnRm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBidWlsdCBPYnNpZGlhbiBwbHVnaW4gdG8gZW5hYmxlIG9uY2UgSG90UmVsb2FkIGlzIGluIHBsYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vLyBUaGUgYG5wbSBydW4gZGV2YC1vd25lZCBPYnNpZGlhbiBpbnN0YW5jZTogbGF1bmNoZWQgb24gdGhlIGZpcnN0IHJlYnVpbGQgYW5kIHJldXNlZCBhY3Jvc3MgcmVidWlsZHMuXG4vLyBJdHMgbGlmZXRpbWUgaXMgdGllZCB0byB0aGUgYG5wbSBydW4gZGV2YCBwcm9jZXNzIGluIEJPVEggZGlyZWN0aW9ucy5cbi8vIFRoZSBpbnN0YW5jZSBpcyBjbG9zZWQgd2hlbiB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzIChzZWUgYHJlZ2lzdGVyRGV2SW5zdGFuY2VDbGVhbnVwYCkuXG4vLyBUaGUgcHJvY2VzcyBzdG9wcyB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjbG9zZWQgKHNlZSBgd2F0Y2hEZXZJbnN0YW5jZUFuZFN0b3BPbkNsb3NlYCkuXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICBkZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2U6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHwgdW5kZWZpbmVkO1xuICBpc0Rldkluc3RhbmNlQ2xlYW51cFJlZ2lzdGVyZWQ6IGJvb2xlYW47XG4gIGlzRGV2SW5zdGFuY2VEaXNwb3NlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgbW9kdWxlU3RhdGU6IE1vZHVsZVN0YXRlID0ge1xuICBkZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2U6IHVuZGVmaW5lZCxcbiAgaXNEZXZJbnN0YW5jZUNsZWFudXBSZWdpc3RlcmVkOiBmYWxzZSxcbiAgaXNEZXZJbnN0YW5jZURpc3Bvc2VkOiBmYWxzZVxufTtcblxuLyoqXG4gKiBIb3cgb2Z0ZW4gdGhlIG93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGlzIHByb2JlZCB0byBkZXRlY3QgdGhhdCBpdCB3YXMgY2xvc2VkLlxuICovXG5jb25zdCBERVZfSU5TVEFOQ0VfUFJPQkVfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcblxuLyoqXG4gKiBIb3cgbWFueSBjb25zZWN1dGl2ZSBmYWlsZWQgcHJvYmVzIGFyZSB0b2xlcmF0ZWQgYmVmb3JlIHRoZSBvd25lZCBpbnN0YW5jZSBpcyBjb25zaWRlcmVkIGNsb3NlZC4gQVxuICogc2luZ2xlIGZhaWx1cmUgY2FuIGJlIGEgdHJhbnNpZW50IGhpY2N1cCAoYSBidXN5IHJlbmRlcmVyLCBhIG1vbWVudGFyaWx5IHJlZnVzZWQgY29ubmVjdGlvbiksIHNvIHRoZVxuICogZGV2ZWxvcG1lbnQgYnVpbGQgaXMgb25seSBzdG9wcGVkIG9uY2UgdGhlIGVuZHBvaW50IHN0YXlzIHVucmVhY2hhYmxlLlxuICovXG5jb25zdCBERVZfSU5TVEFOQ0VfQ0xPU0VEX1BST0JFX0NPVU5UID0gMztcbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IGNvcGllcyB0aGUgYnVpbGQgb3V0cHV0IHRvIHRoZSBPYnNpZGlhbiBwbHVnaW5zIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luKHBhcmFtczogQ29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luUGFyYW1zKTogUGx1Z2luIHtcbiAgY29uc3Qge1xuICAgIGRpc3RGb2xkZXIsXG4gICAgaXNQcm9kdWN0aW9uQnVpbGQsXG4gICAgcGx1Z2luTmFtZVxuICB9ID0gcGFyYW1zO1xuICBsZXQge1xuICAgIG9ic2lkaWFuQ29uZmlnRm9sZGVyXG4gIH0gPSBwYXJhbXM7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2NvcHktdG8tb2JzaWRpYW4tcGx1Z2lucy1mb2xkZXInLFxuICAgIHNldHVwKGJ1aWxkKTogdm9pZCB7XG4gICAgICBidWlsZC5vbkVuZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChpc1Byb2R1Y3Rpb25CdWlsZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb2JzaWRpYW5Db25maWdGb2xkZXIpIHtcbiAgICAgICAgICBnZXRMaWJEZWJ1Z2dlcignY29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luJykoXG4gICAgICAgICAgICAnTm8gT2JzaWRpYW4gY29uZmlnIGZvbGRlciBjb25maWd1cmVkLiBgT0JTSURJQU5fQ09ORklHX0ZPTERFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBpbiBzeXN0ZW0gb3IgaW4gYC5lbnZgIGZpbGUuIFRoZSBjb21waWxlZCBwbHVnaW4gd2lsbCBub3QgYmUgY29waWVkIGludG8gT2JzaWRpYW4gcGx1Z2lucyBmb2xkZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzaWRpYW5Db25maWdGb2xkZXIgPSB0b1Bvc2l4UGF0aChvYnNpZGlhbkNvbmZpZ0ZvbGRlcik7XG5cbiAgICAgICAgY29uc3QgcGx1Z2luRm9sZGVyID0gam9pbihvYnNpZGlhbkNvbmZpZ0ZvbGRlciwgJ3BsdWdpbnMnLCBwbHVnaW5OYW1lKTtcbiAgICAgICAgYXdhaXQgbWtkaXIocGx1Z2luRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgYXdhaXQgY3AoZGlzdEZvbGRlciwgcGx1Z2luRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICBhd2FpdCBpbnN0YWxsQW5kRW5hYmxlSG90UmVsb2FkKHtcbiAgICAgICAgICBvYnNpZGlhbkNvbmZpZ0ZvbGRlcixcbiAgICAgICAgICBwbHVnaW5OYW1lXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGBucG0gcnVuIGRldmAtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiB2YXVsdCwgbGF1bmNoaW5nIGl0IG9uIGZpcnN0IHVzZSBhbmRcbiAqIHJldXNpbmcgaXQgb24gc3Vic2VxdWVudCByZWJ1aWxkcy5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlciB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBvd25lZCB7QGxpbmsgT2JzaWRpYW5UcmFuc3BvcnR9LlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRPckxhdW5jaERldkluc3RhbmNlKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBtb2R1bGVTdGF0ZS5kZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2UgPz89IGxhdW5jaERldkluc3RhbmNlKHZhdWx0UGF0aCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG1vZHVsZVN0YXRlLmRldkluc3RhbmNlVHJhbnNwb3J0UHJvbWlzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBDbGVhciB0aGUgY2FjaGUgc28gYSBsYXRlciByZWJ1aWxkIHJldHJpZXMgdGhlIGxhdW5jaC5cbiAgICBtb2R1bGVTdGF0ZS5kZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgSG90UmVsb2FkIHBsdWdpbiBmcm9tIHRoZSBvZmZpY2lhbCBjb21tdW5pdHkgc3RvcmUgKGlmIG5vdCBhbHJlYWR5IGluc3RhbGxlZCksIGxvYWRzIGl0XG4gKiAoaWYgbm90IGFscmVhZHkgcnVubmluZyksIGFuZCBlbmFibGVzIHRoZSBmcmVzaGx5LWJ1aWx0IHBsdWdpbiBcdTIwMTQgYWxsIHRocm91Z2ggdGhlIGBucG0gcnVuIGRldmAtb3duZWRcbiAqIE9ic2lkaWFuIGluc3RhbmNlLCBzbyBIb3RSZWxvYWQgdGhlbiBhdXRvLXJlZnJlc2hlcyB0aGUgZGVwbG95ZWQgcGx1Z2luIG9uIGV2ZXJ5IHJlYnVpbGQuXG4gKlxuICogVGhlIGluc3RhbGwgZ29lcyB0aHJvdWdoIE9ic2lkaWFuJ3Mgb3duIGBpbnN0YWxsUGx1Z2luYCAodGhlIGNvbW11bml0eS1zdG9yZSBtZWNoYW5pc20pLCBhbmQgZXZlcnkgc3RlcFxuICogcnVucyBhZ2FpbnN0IHRoZSBvd25lZCBpbnN0YW5jZSBvdmVyIENEUDsgYW55IGZhaWx1cmUgc3VyZmFjZXMgKHRoZSBkZXYgYnVpbGQgcmVwb3J0cyBpdCkgcmF0aGVyIHRoYW5cbiAqIGJlaW5nIHNpbGVudGx5IHN3YWxsb3dlZC5cbiAqXG4gKiBUaGUgZmlyc3Qgc3RlcCBpcyBsZWF2aW5nIHJlc3RyaWN0ZWQgbW9kZSBmb3IgcmVhbCwgd2hpY2ggdGhlIG93bmVkIGluc3RhbmNlIGhhcyBvbmx5IGZha2VkIHNvIGZhciBcdTIwMTRcbiAqIHdpdGhvdXQgaXQgXCJlbmFibGVkXCIgYW5kIFwibG9hZGVkXCIgY29tZSBhcGFydCBhbmQgbm9uZSBvZiB0aGUgdmF1bHQncyBwbHVnaW5zLCBIb3RSZWxvYWQgaW5jbHVkZWQsIGFyZVxuICogcnVubmluZy4gU2VlIHRoZSBjb21tZW50IG9uIHRoZSBgc2V0RW5hYmxlYCBjYWxsLlxuICpcbiAqIFRoZSBpbnN0YWxsLWlmLW1pc3NpbmcgLyBlbmFibGUtaWYtZGlzYWJsZWQgbG9naWMgYmVsb3cgaW50ZW50aW9uYWxseSBtaXJyb3JzIHRoZSBwdWJsaWNcbiAqIGBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luYCAvIGBlbmFibGVDb21tdW5pdHlQbHVnaW5gIGhlbHBlcnMgaW4gYHNyYy9vYnNpZGlhbi9jb21tdW5pdHktcGx1Z2lucy50c2AuIEl0XG4gKiBjYW5ub3QgaW1wb3J0IGFuZCBjYWxsIHRoZW06IHRoZSBgZm5gIGlzIHNlcmlhbGl6ZWQgKGB0b1N0cmluZygpYCkgYW5kIGV4ZWN1dGVkIGluIHRoZSByZW5kZXJlciwgYW5kXG4gKiB0aGlzIGJ1aWxkLW93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGlzIGJhcmUgXHUyMDE0IGl0IGhhcyBubyBkZXYtdXRpbHMgYGxpYmAgcHJvdmlkZXIgd2lyZWQgKHRoYXQgcmVzb2x2ZXIgaXNcbiAqIHJlZ2lzdGVyZWQgb25seSBpbiB0aGUgaW50ZWdyYXRpb24tdGVzdCBzZXR1cCwgd2hvc2UgZml4dHVyZSBwdWJsaXNoZXMgdGhlIG1lcmdlZCBzdXJmYWNlIG9uIGB3aW5kb3dgKSxcbiAqIHNvIHRoZSBjbG9zdXJlIGhhcyBubyBhY2Nlc3MgdG8gdGhlIGxpYnJhcnkgc3VyZmFjZSBhbmQgbXVzdCBpbmxpbmUgdGhlIGVxdWl2YWxlbnQgc3RlcHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbEFuZEVuYWJsZUhvdFJlbG9hZFBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgSG90UmVsb2FkIGFuZCB0aGUgYnVpbHQgcGx1Z2luIGFyZSBpbnN0YWxsZWQgYW5kIGVuYWJsZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBbmRFbmFibGVIb3RSZWxvYWQocGFyYW1zOiBJbnN0YWxsQW5kRW5hYmxlSG90UmVsb2FkUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBvYnNpZGlhbkNvbmZpZ0ZvbGRlcixcbiAgICBwbHVnaW5OYW1lXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHZhdWx0UGF0aCA9IGRpcm5hbWUob2JzaWRpYW5Db25maWdGb2xkZXIpO1xuICBjb25zdCB0cmFuc3BvcnQgPSBhd2FpdCBnZXRPckxhdW5jaERldkluc3RhbmNlKHZhdWx0UGF0aCk7XG4gIGF3YWl0IGV2YWxJbk9ic2lkaWFuKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgYXJnc2AgaXMgZGVjbGFyZWQgYnkgYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgOyByZW5hbWluZyBpdCBoZXJlIHdvdWxkIG5vdCBtYXRjaCB0aGUgQVBJLlxuICAgIGFyZ3M6IHsgcGx1Z2luTmFtZSB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3csIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gTm8gYWN0dWFsIHNoYWRvd2luZyBhcyB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZXh0ZXJuYWxseSwgYW5kIGBmbmAgaXMgZGVjbGFyZWQgYnkgYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgLlxuICAgIGFzeW5jIGZuKHsgYXBwLCBvYnNpZGlhbk1vZHVsZSwgcGx1Z2luTmFtZSB9KSB7XG4gICAgICBjb25zdCBIT1RfUkVMT0FEX1BMVUdJTl9JRCA9ICdob3QtcmVsb2FkJztcbiAgICAgIGNvbnN0IENPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTCA9ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9IRUFEL2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuICAgICAgY29uc3QgeyByZXF1ZXN0VXJsIH0gPSBvYnNpZGlhbk1vZHVsZTtcblxuICAgICAgLypcbiAgICAgICAqIEdlbnVpbmVseSBsZWF2ZSByZXN0cmljdGVkIG1vZGUgYmVmb3JlIHRvdWNoaW5nIGFueXRoaW5nIGVsc2UuIFRoZSBvd25lZCBpbnN0YW5jZSBib290cyB3aXRoIGFcbiAgICAgICAqIGZyZXNoIHVzZXItZGF0YSBkaXIsIHNvIE9ic2lkaWFuIHN0YXJ0cyByZXN0cmljdGVkIGFuZCBgUGx1Z2lucy5pbml0aWFsaXplKClgIHJldHVybnMgYmVmb3JlXG4gICAgICAgKiBsb2FkaW5nIGEgc2luZ2xlIHBsdWdpbi4gVGhlIGhhcm5lc3MgdGhlbiBjbG9zZXMgdGhlIHRydXN0IG1vZGFsIGFuZCB3cml0ZXMgdGhlXG4gICAgICAgKiBgZW5hYmxlLXBsdWdpbi08YXBwSWQ+YCBsb2NhbFN0b3JhZ2UgZmxhZyBkaXJlY3RseSBcdTIwMTQgZGVsaWJlcmF0ZWx5LCB0byBhdm9pZCBhIHN5bmNocm9ub3VzIGxvYWQgXHUyMDE0XG4gICAgICAgKiB3aGljaCBsZWF2ZXMgYGlzRW5hYmxlZCgpYCByZXBvcnRpbmcgYHRydWVgIG92ZXIgYSB2YXVsdCB3aGVyZSBub3RoaW5nIGlzIGFjdHVhbGx5IHJ1bm5pbmcuIEV2ZXJ5XG4gICAgICAgKiBgZW5hYmxlZFBsdWdpbnNgIHJlYWRpbmcgYmVsb3cgKGFuZCBpbiB0aGUgbWlycm9yZWQgYGNvbW11bml0eS1wbHVnaW5zLnRzYCBoZWxwZXJzKSB3b3VsZCBiZVxuICAgICAgICogYW5zd2VyaW5nIGFib3V0IHRoZSB2YXVsdCdzIGNvbmZpZyBmaWxlIHJhdGhlciB0aGFuIHRoaXMgaW5zdGFuY2UuXG4gICAgICAgKlxuICAgICAgICogYHNldEVuYWJsZSh0cnVlKWAgaXMgd2hhdCBPYnNpZGlhbidzIG93biBcIkV4aXQgcmVzdHJpY3RlZCBtb2RlXCIgYnV0dG9uIGNhbGxzOiBpdCByZS1hc3NlcnRzIHRoZVxuICAgICAgICogZmxhZyBhbmQgbG9hZHMgZXZlcnl0aGluZyBpbiBgZW5hYmxlZFBsdWdpbnNgLiBVbmNvbmRpdGlvbmFsIG9uIHB1cnBvc2UgXHUyMDE0IHRoZSBmbGFnIGlzIGFscmVhZHlcbiAgICAgICAqIGB0cnVlYCwgc28gYW4gYGlzRW5hYmxlZCgpYCBndWFyZCB3b3VsZCBza2lwIHRoZSBsb2FkIHRoYXQgaXMgdGhlIHdob2xlIHBvaW50LiBJZGVtcG90ZW50IGFuZFxuICAgICAgICogZWZmZWN0aXZlbHkgZnJlZSBvbmNlIHdhcm0gKGBsb2FkUGx1Z2luYCByZXR1cm5zIHRoZSBsaXZlIGluc3RhbmNlKSwgc28gcmUtcnVubmluZyBpdCBvbiBldmVyeVxuICAgICAgICogcmVidWlsZCBjb3N0cyBub3RoaW5nLlxuICAgICAgICovXG4gICAgICBhd2FpdCBhcHAucGx1Z2lucy5zZXRFbmFibGUodHJ1ZSk7XG5cbiAgICAgIGlmICghT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5tYW5pZmVzdHMsIEhPVF9SRUxPQURfUExVR0lOX0lEKSkge1xuICAgICAgICBjb25zdCByZWdpc3RyeVJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkwpO1xuICAgICAgICBjb25zdCByZWdpc3RyeUVudHJpZXMgPSByZWdpc3RyeVJlc3BvbnNlLmpzb24gYXMgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeVtdO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHJlZ2lzdHJ5RW50cmllcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gSE9UX1JFTE9BRF9QTFVHSU5fSUQpO1xuICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gJyR7SE9UX1JFTE9BRF9QTFVHSU5fSUR9JyB3YXMgbm90IGZvdW5kIGluIHRoZSBPYnNpZGlhbiBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhdGVzdFJlbGVhc2VSZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtlbnRyeS5yZXBvfS9yZWxlYXNlcy9sYXRlc3RgKTtcbiAgICAgICAgY29uc3QgbGF0ZXN0UmVsZWFzZSA9IGxhdGVzdFJlbGVhc2VSZXNwb25zZS5qc29uIGFzIEdpdEh1YlJlbGVhc2U7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBsYXRlc3RSZWxlYXNlLnRhZ19uYW1lO1xuICAgICAgICBjb25zdCBtYW5pZmVzdFJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9naXRodWIuY29tLyR7ZW50cnkucmVwb30vcmVsZWFzZXMvZG93bmxvYWQvJHt2ZXJzaW9ufS9tYW5pZmVzdC5qc29uYCk7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gbWFuaWZlc3RSZXNwb25zZS5qc29uIGFzIFBsdWdpbk1hbmlmZXN0O1xuICAgICAgICBhd2FpdCBhcHAucGx1Z2lucy5pbnN0YWxsUGx1Z2luKGVudHJ5LnJlcG8sIHZlcnNpb24sIG1hbmlmZXN0KTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAqIEFzayB3aGV0aGVyIEhvdFJlbG9hZCBpcyBSVU5OSU5HLCBub3Qgd2hldGhlciB0aGUgdmF1bHQgY29uZmlnIGxpc3RzIGl0IGFzIGVuYWJsZWQuIEFmdGVyIHRoZVxuICAgICAgICogYHNldEVuYWJsZWAgYWJvdmUgdGhlIHR3byBub3JtYWxseSBhZ3JlZSwgYnV0IGEgSG90UmVsb2FkIHRoYXQgaXMgbGlzdGVkIGFuZCBmYWlsZWQgdG8gbG9hZCB3b3VsZFxuICAgICAgICogcGFzcyBhbiBgZW5hYmxlZFBsdWdpbnNgIGNoZWNrIHdoaWxlIGxlYXZpbmcgdGhlIGRldiBidWlsZCB3aXRob3V0IGF1dG8tcmVmcmVzaC5cbiAgICAgICAqL1xuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGFwcC5wbHVnaW5zLnBsdWdpbnMsIEhPVF9SRUxPQURfUExVR0lOX0lEKSkge1xuICAgICAgICBhd2FpdCBhcHAucGx1Z2lucy5lbmFibGVQbHVnaW5BbmRTYXZlKEhPVF9SRUxPQURfUExVR0lOX0lEKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5OYW1lKTtcbiAgICB9LFxuICAgIHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3M6IHRydWUsXG4gICAgdHJhbnNwb3J0LFxuICAgIHZhdWx0UGF0aFxuICB9KTtcbn1cblxuLyoqXG4gKiBQcm9iZXMgdGhlIG93bmVkIE9ic2lkaWFuIGluc3RhbmNlJ3MgQ0RQIGVuZHBvaW50IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIHN0aWxsIHJ1bm5pbmcuXG4gKlxuICogQSBjbG9zZWQgaW5zdGFuY2Ugc3RvcHMgc2VydmluZyBDRFAgYWx0b2dldGhlciwgc28gYW4gdW5yZWFjaGFibGUgZW5kcG9pbnQgXHUyMDE0IG9yIG9uZSBsZWZ0IHdpdGggbm8gcGFnZVxuICogdGFyZ2V0cyB3aGlsZSB0aGUgYXBwIHRlYXJzIGl0c2VsZiBkb3duIFx1MjAxNCBtZWFucyB0aGUgaW5zdGFuY2UgaXMgZ29uZS5cbiAqXG4gKiBAcGFyYW0gY2RwVXJsIC0gVGhlIGJhc2UgQ0RQIFVSTCBvZiB0aGUgb3duZWQgaW5zdGFuY2UsIGUuZy4gYGh0dHA6Ly9sb2NhbGhvc3Q6NTE4ODhgLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIGB0cnVlYCB3aGlsZSB0aGUgaW5zdGFuY2UgaXMgc3RpbGwgc2VydmluZyBhIHBhZ2UgdGFyZ2V0LlxuICovXG5hc3luYyBmdW5jdGlvbiBpc0Rldkluc3RhbmNlUnVubmluZyhjZHBVcmw6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gV2UgcnVuIHRoaXMgb3V0c2lkZSBvZiBPYnNpZGlhbiwgc28gd2UgZG9uJ3QgaGF2ZSBgcmVxdWVzdFVybCgpYC5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2NkcFVybH0vanNvbmApO1xuICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ2RwVGFyZ2V0W107XG4gICAgcmV0dXJuIHRhcmdldHMuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQudHlwZSA9PT0gJ3BhZ2UnKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogTGF1bmNoZXMgYSBmcmVzaCBvd25lZCBPYnNpZGlhbiBpbnN0YW5jZSAoaXNvbGF0ZWQgdXNlci1kYXRhIGRpcikgYW5kIG9wZW5zIHRoZSBnaXZlbiB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlciB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBsYXVuY2hlZCB7QGxpbmsgT2JzaWRpYW5UcmFuc3BvcnR9LlxuICovXG5hc3luYyBmdW5jdGlvbiBsYXVuY2hEZXZJbnN0YW5jZSh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0cmFuc3BvcnQucmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRyYW5zcG9ydC5kaXNwb3NlU3luYz8uKCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgcmVnaXN0ZXJEZXZJbnN0YW5jZUNsZWFudXAodHJhbnNwb3J0KTtcbiAgd2F0Y2hEZXZJbnN0YW5jZUFuZFN0b3BPbkNsb3NlKHRyYW5zcG9ydCk7XG4gIHJldHVybiB0cmFuc3BvcnQ7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHByb2Nlc3MtZXhpdCBhbmQgc2lnbmFsIGhhbmRsZXJzIChvbmNlKSB0aGF0IHN5bmNocm9ub3VzbHkgY2xvc2UgdGhlIG93bmVkIE9ic2lkaWFuXG4gKiBpbnN0YW5jZSB3aGVuIHRoZSBgbnBtIHJ1biBkZXZgIHByb2Nlc3MgdGVybWluYXRlcy5cbiAqXG4gKiBUaGVzZSBoYW5kbGVycyBjb3ZlciBhbiBvcmRlcmx5IHNodXRkb3duLiBBIGBTSUdLSUxMYCAob3IgYSBUYXNrIE1hbmFnZXIgLyBJREUgc3RvcCkgcnVucyBubyBoYW5kbGVyXG4gKiBhdCBhbGwsIGFuZCBubyBvcGVyYXRpbmcgc3lzdGVtIGtpbGxzIHRoZSBpbnN0YW5jZSBqdXN0IGZvciBiZWluZyBvdXIgY2hpbGQgXHUyMDE0IHNvIHRoYXQgY2FzZSBpcyBjYXVnaHRcbiAqIGZyb20gdGhlIG90aGVyIHNpZGUsIGJ5IHRoZSBoYXJuZXNzJ3MgcGFyZW50LWxpdmVuZXNzIHdhdGNoZG9nOiB0aGUgaW5zdGFuY2UncyByZW5kZXJlciBob2xkcyBhIHNvY2tldFxuICogYmFjayB0byB0aGlzIHByb2Nlc3MgYW5kIGRlc3Ryb3lzIGl0cyB3aW5kb3cgd2hlbiB0aGUga2VybmVsIGNsb3NlcyBpdC4gU2VlIGBwYXJlbnQtbGl2ZW5lc3MudHNgIGluXG4gKiBgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZ2AgKGl0cyBMMzMpLlxuICpcbiAqIEBwYXJhbSB0cmFuc3BvcnQgLSBUaGUgb3duZWQgdHJhbnNwb3J0IHRvIGRpc3Bvc2Ugb24gc2h1dGRvd24uXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyRGV2SW5zdGFuY2VDbGVhbnVwKHRyYW5zcG9ydDogT2JzaWRpYW5UcmFuc3BvcnQpOiB2b2lkIHtcbiAgaWYgKG1vZHVsZVN0YXRlLmlzRGV2SW5zdGFuY2VDbGVhbnVwUmVnaXN0ZXJlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBtb2R1bGVTdGF0ZS5pc0Rldkluc3RhbmNlQ2xlYW51cFJlZ2lzdGVyZWQgPSB0cnVlO1xuXG4gIC8vIGBleGl0YCBjb3ZlcnMgYW55IGBwcm9jZXNzLmV4aXQoKWAsIGJ1dCBhIGRlZmF1bHQgQ3RybCtDIHRlcm1pbmF0ZXMgV0lUSE9VVCBmaXJpbmcgYGV4aXRgLCBzbyB0aGUgc2lnbmFsIGhhbmRsZXJzIGd1YXJhbnRlZSB0aGUgb3duZWQgT2JzaWRpYW4gaXMga2lsbGVkIG9uIHNodXRkb3duLlxuICBwcm9jZXNzLm9uKCdleGl0JywgZGlzcG9zZURldkluc3RhbmNlKTtcbiAgZm9yIChjb25zdCBzaWduYWwgb2YgWydTSUdIVVAnLCAnU0lHSU5UJywgJ1NJR1RFUk0nXSBhcyBjb25zdCkge1xuICAgIHByb2Nlc3Mub25jZShzaWduYWwsICgpID0+IHtcbiAgICAgIGRpc3Bvc2VEZXZJbnN0YW5jZSgpO1xuICAgICAgcHJvY2Vzcy5leGl0KCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkaXNwb3NlRGV2SW5zdGFuY2UoKTogdm9pZCB7XG4gICAgaWYgKG1vZHVsZVN0YXRlLmlzRGV2SW5zdGFuY2VEaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBtb2R1bGVTdGF0ZS5pc0Rldkluc3RhbmNlRGlzcG9zZWQgPSB0cnVlO1xuICAgIHRyYW5zcG9ydC5kaXNwb3NlU3luYz8uKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXRjaGVzIHRoZSBgbnBtIHJ1biBkZXZgLW93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGFuZCBzdG9wcyB0aGUgZGV2ZWxvcG1lbnQgYnVpbGQgb25jZSB0aGUgaW5zdGFuY2UgaXNcbiAqIGNsb3NlZC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBtaXJyb3IgaW1hZ2Ugb2Yge0BsaW5rIHJlZ2lzdGVyRGV2SW5zdGFuY2VDbGVhbnVwfTogdGhhdCBvbmUgY2xvc2VzIHRoZSBpbnN0YW5jZSB3aGVuIHRoZVxuICogYG5wbSBydW4gZGV2YCBwcm9jZXNzIHRlcm1pbmF0ZXMsIHRoaXMgb25lIHRlcm1pbmF0ZXMgdGhlIHByb2Nlc3Mgd2hlbiB0aGUgdXNlciBjbG9zZXMgdGhlIGluc3RhbmNlLCBzb1xuICogdGhlIHR3byBuZXZlciBvdXRsaXZlIGVhY2ggb3RoZXIuIEEgYnVpbGQgd2F0Y2hpbmcgYW4gT2JzaWRpYW4gdGhhdCBpcyBubyBsb25nZXIgcnVubmluZyBoYXMgbm90aGluZ1xuICogbGVmdCB0byBkZXBsb3kgdG8uXG4gKlxuICogT25seSBhIGhhcm5lc3Mtb3duZWQgaW5zdGFuY2UgaXMgd2F0Y2hlZC4gV2hlbiB0aGUgdHJhbnNwb3J0IGF0dGFjaGVzIHRvIGFuIGFscmVhZHktcnVubmluZyBPYnNpZGlhblxuICogKHRoZSB1c2VyJ3Mgb3duKSwgdGhhdCBpbnN0YW5jZSBpcyBub3Qgb3VycyB0byBiZSB0aWVkIHRvIGFuZCBjbG9zaW5nIGl0IGxlYXZlcyB0aGUgYnVpbGQgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gVGhlIG93bmVkIHRyYW5zcG9ydCB3aG9zZSBpbnN0YW5jZSB0byB3YXRjaC5cbiAqL1xuZnVuY3Rpb24gd2F0Y2hEZXZJbnN0YW5jZUFuZFN0b3BPbkNsb3NlKHRyYW5zcG9ydDogT2JzaWRpYW5UcmFuc3BvcnQpOiB2b2lkIHtcbiAgaWYgKCEodHJhbnNwb3J0IGluc3RhbmNlb2YgRGVza3RvcENkcFRyYW5zcG9ydCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlbmRwb2ludCA9IHRyYW5zcG9ydC5nZXRPd25lZEluc3RhbmNlRW5kcG9pbnQoKTtcbiAgaWYgKCFlbmRwb2ludCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNkcFVybCA9IGBodHRwOi8vJHtlbmRwb2ludC5ob3N0fToke1N0cmluZyhlbmRwb2ludC5wb3J0KX1gO1xuICBpbnZva2VBc3luY1NhZmVseShzdG9wV2hlbkRldkluc3RhbmNlQ2xvc2VzKTtcblxuICBhc3luYyBmdW5jdGlvbiBzdG9wV2hlbkRldkluc3RhbmNlQ2xvc2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBjb25zZWN1dGl2ZUZhaWxlZFByb2JlQ291bnQgPSAwO1xuICAgIHdoaWxlIChjb25zZWN1dGl2ZUZhaWxlZFByb2JlQ291bnQgPCBERVZfSU5TVEFOQ0VfQ0xPU0VEX1BST0JFX0NPVU5UKSB7XG4gICAgICBhd2FpdCBzbGVlcCh7IG1pbGxpc2Vjb25kczogREVWX0lOU1RBTkNFX1BST0JFX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyB9KTtcblxuICAgICAgLy8gVGhlIHByb2Nlc3MgaXMgYWxyZWFkeSBzaHV0dGluZyBkb3duIGFuZCBraWxsZWQgdGhlIGluc3RhbmNlIGl0c2VsZjsgdGhlIHByb2JlcyB3b3VsZCBqdXN0IHJhY2UgdGhlIHRlYXJkb3duLlxuICAgICAgaWYgKG1vZHVsZVN0YXRlLmlzRGV2SW5zdGFuY2VEaXNwb3NlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnNlY3V0aXZlRmFpbGVkUHJvYmVDb3VudCA9IGF3YWl0IGlzRGV2SW5zdGFuY2VSdW5uaW5nKGNkcFVybCkgPyAwIDogY29uc2VjdXRpdmVGYWlsZWRQcm9iZUNvdW50ICsgMTtcbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oJ1RoZSBPYnNpZGlhbiBpbnN0YW5jZSBvd25lZCBieSBgbnBtIHJ1biBkZXZgIHdhcyBjbG9zZWQuIFN0b3BwaW5nIHRoZSBkZXZlbG9wbWVudCBidWlsZC4nKTtcbiAgICBwcm9jZXNzLmV4aXQoKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUEsc0JBR087QUFDUCwwQkFBb0I7QUFDcEIsMENBSU87QUFFUCxtQkFHTztBQUNQLG1CQUErQjtBQUMvQixrQkFJTztBQTBGUCxNQUFNLGNBQTJCO0FBQUEsRUFDL0IsNkJBQTZCO0FBQUEsRUFDN0IsZ0NBQWdDO0FBQUEsRUFDaEMsdUJBQXVCO0FBQ3pCO0FBS0EsTUFBTSw4Q0FBOEM7QUFPcEQsTUFBTSxrQ0FBa0M7QUFPakMsU0FBUyxrQ0FBa0MsUUFBeUQ7QUFDekcsUUFB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QUMsV0FBVyxPQUFPLFNBQVMsTUFBTTtBQUFBLEVBQ3hELFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUNGO0FBUUEsZUFBZSxrQkFBa0IsV0FBK0M7QUFDOUUsUUFBTSxZQUFZLFVBQU0sZ0VBQTJCO0FBQ25ELE1BQUk7QUFDRixVQUFNLFVBQVUsY0FBYyxTQUFTO0FBQUEsRUFDekMsU0FBUyxPQUFPO0FBQ2QsY0FBVSxjQUFjO0FBQ3hCLFVBQU07QUFBQSxFQUNSO0FBQ0EsNkJBQTJCLFNBQVM7QUFDcEMsaUNBQStCLFNBQVM7QUFDeEMsU0FBTztBQUNUO0FBY0EsU0FBUywyQkFBMkIsV0FBb0M7QUFDdEUsTUFBSSxZQUFZLGdDQUFnQztBQUM5QztBQUFBLEVBQ0Y7QUFDQSxjQUFZLGlDQUFpQztBQUc3QyxzQkFBQUMsUUFBUSxHQUFHLFFBQVEsa0JBQWtCO0FBQ3JDLGFBQVcsVUFBVSxDQUFDLFVBQVUsVUFBVSxTQUFTLEdBQVk7QUFDN0Qsd0JBQUFBLFFBQVEsS0FBSyxRQUFRLE1BQU07QUFDekIseUJBQW1CO0FBQ25CLDBCQUFBQSxRQUFRLEtBQUs7QUFBQSxJQUNmLENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBUyxxQkFBMkI7QUFDbEMsUUFBSSxZQUFZLHVCQUF1QjtBQUNyQztBQUFBLElBQ0Y7QUFDQSxnQkFBWSx3QkFBd0I7QUFDcEMsY0FBVSxjQUFjO0FBQUEsRUFDMUI7QUFDRjtBQWdCQSxTQUFTLCtCQUErQixXQUFvQztBQUMxRSxNQUFJLEVBQUUscUJBQXFCLDBEQUFzQjtBQUMvQztBQUFBLEVBQ0Y7QUFFQSxRQUFNLFdBQVcsVUFBVSx5QkFBeUI7QUFDcEQsTUFBSSxDQUFDLFVBQVU7QUFDYjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFNBQVMsVUFBVSxTQUFTLElBQUksSUFBSSxPQUFPLFNBQVMsSUFBSSxDQUFDO0FBQy9ELHNDQUFrQix5QkFBeUI7QUFFM0MsaUJBQWUsNEJBQTJDO0FBQ3hELFFBQUksOEJBQThCO0FBQ2xDLFdBQU8sOEJBQThCLGlDQUFpQztBQUNwRSxnQkFBTSxvQkFBTSxFQUFFLGNBQWMsNENBQTRDLENBQUM7QUFHekUsVUFBSSxZQUFZLHVCQUF1QjtBQUNyQztBQUFBLE1BQ0Y7QUFFQSxvQ0FBOEIsTUFBTSxxQkFBcUIsTUFBTSxJQUFJLElBQUksOEJBQThCO0FBQUEsSUFDdkc7QUFFQSxZQUFRLEtBQUssMEZBQTBGO0FBQ3ZHLHdCQUFBQSxRQUFRLEtBQUs7QUFBQSxFQUNmO0FBQ0Y7IiwKICAibmFtZXMiOiBbInBsdWdpbk5hbWUiLCAicHJvY2VzcyJdCn0K
|
|
@@ -18,7 +18,7 @@ export { getObsidianDevUtilsState, resetObsidianDevUtilsState } from './obsidian
|
|
|
18
18
|
export { AppActiveFileProvider } from './obsidian/active-file-provider.mjs';
|
|
19
19
|
export { getApp } from './obsidian/app.mjs';
|
|
20
20
|
export { retryWithTimeoutNotice, runWithTimeoutNotice } from './obsidian/async-with-notice.mjs';
|
|
21
|
-
export { AttachmentPathContext, DUMMY_PATH, getAttachmentFilePath, getAttachmentFolderPath, getAvailablePathForAttachments, hasOwnAttachmentFolder, isAtProperAttachmentPath } from './obsidian/attachment-path.mjs';
|
|
21
|
+
export { AttachmentPathContext, DUMMY_PATH, getAttachmentFilePath, getAttachmentFolderPath, getAttachmentFolderPathSyncOrNull, getAvailablePathForAttachments, hasOwnAttachmentFolder, isAtProperAttachmentPath } from './obsidian/attachment-path.mjs';
|
|
22
22
|
export { renderBacklinksTable, renderDelayedBacklinks, renderDelayedBacklinksForFolder } from './obsidian/backlink.mjs';
|
|
23
23
|
export { PluginBasesViewRegistrar } from './obsidian/bases-view-registrar.mjs';
|
|
24
24
|
export { CalloutMode, renderCallout, wrapForCallout } from './obsidian/callout.mjs';
|