UNPKG

obsidian-typings

Version:

Extended type definitions for the Obsidian API (https://obsidian.md)

377 lines (356 loc) 35.4 kB
/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD */ "use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/obsidian/implementations/index.ts var index_exports = {}; __export(index_exports, { CustomArrayDictImpl: () => CustomArrayDictImpl, FileExtension: () => FileExtension, InternalPluginName: () => InternalPluginName, ViewType: () => ViewType, createTFileInstance: () => createTFileInstance, createTFolderInstance: () => createTFolderInstance, getAppConstructor: () => getAppConstructor, getInternalPluginConstructor: () => getInternalPluginConstructor, getInternalPluginsConstructor: () => getInternalPluginsConstructor, getTFileConstructor: () => getTFileConstructor, getTFolderConstructor: () => getTFolderConstructor, getViewConstructorByViewType: () => getViewConstructorByViewType, isEmbedCache: () => isEmbedCache, isFrontmatterLinkCache: () => isFrontmatterLinkCache, isLinkCache: () => isLinkCache, isReferenceCache: () => isReferenceCache, parentFolderPath: () => parentFolderPath }); module.exports = __toCommonJS(index_exports); // src/obsidian/implementations/Classes/CustomArrayDictImpl.ts var CustomArrayDictImpl = class { data = /* @__PURE__ */ new Map(); add(key, value) { let values = this.get(key); if (!values) { values = []; this.data.set(key, values); } if (!values.includes(value)) { values.push(value); } } remove(key, value) { const values = this.get(key); if (!values) { return; } values.remove(value); if (values.length === 0) { this.clear(key); } } get(key) { return this.data.get(key) || null; } keys() { return Array.from(this.data.keys()); } clear(key) { this.data.delete(key); } clearAll() { this.data.clear(); } contains(key, value) { return !!this.get(key)?.contains(value); } count() { let ans = 0; for (const key of this.keys()) { ans += this.get(key)?.length ?? 0; } return ans; } }; // src/obsidian/implementations/Constants/FileExtension.ts var FileExtension = { _3gp: "3gp", avif: "avif", bmp: "bmp", canvas: "canvas", flac: "flac", gif: "gif", jpeg: "jpeg", jpg: "jpg", m4a: "m4a", md: "md", mkv: "mkv", mov: "mov", mp3: "mp3", mp4: "mp4", oga: "oga", ogg: "ogg", ogv: "ogv", opus: "opus", pdf: "pdf", png: "png", svg: "svg", wav: "wav", webm: "webm", webp: "webp" }; // src/obsidian/implementations/Constants/InternalPluginName.ts var InternalPluginName = { /** * Plugin name in UI: Audio recorder. */ AudioRecorder: "audio-recorder", /** * Plugin name in UI: Backlinks. */ Backlink: "backlink", /** * Plugin name in UI: Bases. */ Bases: "bases", /** * Plugin name in UI: Bookmarks. */ Bookmarks: "bookmarks", /** * Plugin name in UI: Canvas. */ Canvas: "canvas", /** * Plugin name in UI: Command palette. */ CommandPalette: "command-palette", /** * Plugin name in UI: Daily notes. */ DailyNotes: "daily-notes", /** * Plugin name in UI: (hidden). */ EditorStatus: "editor-status", /** * Plugin name in UI: Files. */ FileExplorer: "file-explorer", /** * Plugin name in UI: File recovery. */ FileRecovery: "file-recovery", /** * Plugin name in UI: Footnotes. */ Footnotes: "footnotes", /** * Plugin name in UI: Search. */ GlobalSearch: "global-search", /** * Plugin name in UI: Graph view. */ Graph: "graph", /** * Plugin name in UI: Format converter. */ MarkdownImporter: "markdown-importer", /** * Plugin name in UI: Note composer. */ NoteComposer: "note-composer", /** * Plugin name in UI: Outgoing links. */ OutgoingLink: "outgoing-link", /** * Plugin name in UI: Outline. */ Outline: "outline", /** * Plugin name in UI: Page preview. */ PagePreview: "page-preview", /** * Plugin name in UI: Properties view. */ Properties: "properties", /** * Plugin name in UI: Publish. */ Publish: "publish", /** * Plugin name in UI: Random note. */ RandomNote: "random-note", /** * Plugin name in UI: Slash commands. */ SlashCommand: "slash-command", /** * Plugin name in UI: Slides. */ Slides: "slides", /** * Plugin name in UI: Quick Switcher. */ Switcher: "switcher", /** * Plugin name in UI: Sync. */ Sync: "sync", /** * Plugin name in UI: Tags view. */ TagPane: "tag-pane", /** * Plugin name in UI: Templates. */ Templates: "templates", /** * Plugin name in UI: Web viewer. */ Webviewer: "webviewer", /** * Plugin name in UI: Word count. */ WordCount: "word-count", /** * Plugin name in UI: Workspaces. */ Workspaces: "workspaces", /** * Plugin name in UI: Unique note creator. */ ZkPrefixer: "zk-prefixer" }; // src/obsidian/implementations/Constants/ViewType.ts var ViewType = { AllProperties: "all-properties", Audio: "audio", Backlink: InternalPluginName.Backlink, Bookmarks: InternalPluginName.Bookmarks, Canvas: InternalPluginName.Canvas, Empty: "empty", FileExplorer: InternalPluginName.FileExplorer, FileProperties: "file-properties", Graph: InternalPluginName.Graph, Image: "image", LocalGraph: "localgraph", Markdown: "markdown", OutgoingLink: InternalPluginName.OutgoingLink, Outline: InternalPluginName.Outline, Pdf: "pdf", ReleaseNotes: "release-notes", Search: "search", Sync: "sync", Table: "table", Tag: "tag", Video: "video", Webviewer: "webviewer", WebviewerHistory: "webviewer-history" }; // src/obsidian/implementations/Constructors/getAppConstructor.ts var import_obsidian = require("obsidian"); function getAppConstructor() { return import_obsidian.App; } // src/obsidian/implementations/Constructors/getInternalPluginConstructor.ts function getInternalPluginConstructor(app) { const anyPlugin = Object.values(app.internalPlugins.plugins)[0]; if (!anyPlugin) { throw new Error("No internal plugin found"); } return anyPlugin.constructor; } // src/obsidian/implementations/Constructors/getInternalPluginsConstructor.ts function getInternalPluginsConstructor(app) { return app.internalPlugins.constructor; } // src/obsidian/implementations/Constructors/getTFileConstructor.ts var import_obsidian2 = require("obsidian"); function getTFileConstructor() { return import_obsidian2.TFile; } // src/obsidian/implementations/Constructors/getTFolderConstructor.ts var import_obsidian3 = require("obsidian"); function getTFolderConstructor() { return import_obsidian3.TFolder; } // src/obsidian/implementations/Constructors/getViewConstructorByViewType.ts function getViewConstructorByViewType(app, viewType) { const leaf = app.workspace.createLeafInTabGroup(); try { const viewCreator = app.viewRegistry.getViewCreatorByType(viewType); if (!viewCreator) { throw new Error("View creator not found"); } const view = viewCreator(leaf); return view.constructor; } finally { leaf.detach(); } } // src/obsidian/implementations/Functions/createTFileInstance.ts var import_obsidian5 = require("obsidian"); // src/obsidian/implementations/Utils/PathUtils.ts function parentFolderPath(path) { return path.replace(/\/?[^\/]*$/, "") || "/"; } // src/obsidian/implementations/Functions/createTFolderInstance.ts var import_obsidian4 = require("obsidian"); function createTFolderInstance(app, path) { let folder = app.vault.getFolderByPath(path); if (folder) { return folder; } folder = new (getTFolderConstructor())(app.vault, path); folder.parent = createTFolderInstance(app, parentFolderPath(path)); folder.deleted = true; return folder; } // src/obsidian/implementations/Functions/createTFileInstance.ts function createTFileInstance(app, path) { let file = app.vault.getFileByPath(path); if (file) { return file; } file = new (getTFileConstructor())(app.vault, path); file.parent = createTFolderInstance(app, parentFolderPath(path)); file.deleted = true; return file; } // src/obsidian/implementations/TypeGuards/isReferenceCache.ts function isReferenceCache(reference) { return !!reference.position; } // src/obsidian/implementations/TypeGuards/isEmbedCache.ts function isEmbedCache(reference) { return isReferenceCache(reference) && reference.original[0] === "!"; } // src/obsidian/implementations/TypeGuards/isFrontmatterLinkCache.ts function isFrontmatterLinkCache(reference) { return !!reference.key; } // src/obsidian/implementations/TypeGuards/isLinkCache.ts function isLinkCache(reference) { return isReferenceCache(reference) && reference.original[0] !== "!"; } //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9pbmRleC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0YW50cy9WaWV3VHlwZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRBcHBDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldFRGaWxlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9GdW5jdGlvbnMvY3JlYXRlVEZpbGVJbnN0YW5jZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1V0aWxzL1BhdGhVdGlscy50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0Z1bmN0aW9ucy9jcmVhdGVURm9sZGVySW5zdGFuY2UudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9UeXBlR3VhcmRzL2lzUmVmZXJlbmNlQ2FjaGUudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9UeXBlR3VhcmRzL2lzRW1iZWRDYWNoZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1R5cGVHdWFyZHMvaXNGcm9udG1hdHRlckxpbmtDYWNoZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1R5cGVHdWFyZHMvaXNMaW5rQ2FjaGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBmcm9tICcuL0NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRBcHBDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL2dldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL2dldFRGaWxlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9GdW5jdGlvbnMvY3JlYXRlVEZpbGVJbnN0YW5jZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL0Z1bmN0aW9ucy9jcmVhdGVURm9sZGVySW5zdGFuY2UudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9UeXBlR3VhcmRzL2lzRW1iZWRDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVHdWFyZHMvaXNGcm9udG1hdHRlckxpbmtDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVHdWFyZHMvaXNMaW5rQ2FjaGUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9UeXBlR3VhcmRzL2lzUmVmZXJlbmNlQ2FjaGUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9VdGlscy9QYXRoVXRpbHMudHMnO1xuZXhwb3J0IHR5cGUgKiBmcm9tICcuLi8uLi9pbmRleC5kLnRzJztcbiIsICJpbXBvcnQgdHlwZSB7IEN1c3RvbUFycmF5RGljdCB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db2xsZWN0aW9ucy9DdXN0b21BcnJheURpY3QuZC50cyc7XG5cbi8qKlxuICogQHRvZG8gRG9jdW1lbnRhdGlvbiBpbmNvbXBsZXRlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21BcnJheURpY3RJbXBsPFQ+IGltcGxlbWVudHMgQ3VzdG9tQXJyYXlEaWN0PFQ+IHtcbiAgICBwdWJsaWMgZGF0YTogTWFwPHN0cmluZywgVFtdPiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBhZGQoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSB0aGlzLmdldChrZXkpO1xuICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgdmFsdWVzID0gW107XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0KGtleSwgdmFsdWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShrZXk6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMucmVtb3ZlKHZhbHVlKTtcblxuICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhcihrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IFRbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldChrZXkpIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGtleXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmRhdGEua2V5cygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnRhaW5zKGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmdldChrZXkpPy5jb250YWlucyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGxldCBhbnMgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmtleXMoKSkge1xuICAgICAgICAgICAgYW5zICs9IHRoaXMuZ2V0KGtleSk/Lmxlbmd0aCA/PyAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFucztcbiAgICB9XG59XG4iLCAiLyoqXG4gKiBAdG9kbyBEb2N1bWVudGF0aW9uIGluY29tcGxldGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEZpbGVFeHRlbnNpb24gPSB7XG4gICAgXzNncDogJzNncCcsXG4gICAgYXZpZjogJ2F2aWYnLFxuICAgIGJtcDogJ2JtcCcsXG4gICAgY2FudmFzOiAnY2FudmFzJyxcbiAgICBmbGFjOiAnZmxhYycsXG4gICAgZ2lmOiAnZ2lmJyxcbiAgICBqcGVnOiAnanBlZycsXG4gICAganBnOiAnanBnJyxcbiAgICBtNGE6ICdtNGEnLFxuICAgIG1kOiAnbWQnLFxuICAgIG1rdjogJ21rdicsXG4gICAgbW92OiAnbW92JyxcbiAgICBtcDM6ICdtcDMnLFxuICAgIG1wNDogJ21wNCcsXG4gICAgb2dhOiAnb2dhJyxcbiAgICBvZ2c6ICdvZ2cnLFxuICAgIG9ndjogJ29ndicsXG4gICAgb3B1czogJ29wdXMnLFxuICAgIHBkZjogJ3BkZicsXG4gICAgcG5nOiAncG5nJyxcbiAgICBzdmc6ICdzdmcnLFxuICAgIHdhdjogJ3dhdicsXG4gICAgd2VibTogJ3dlYm0nLFxuICAgIHdlYnA6ICd3ZWJwJ1xufSBhcyBjb25zdDtcbiIsICIvKipcbiAqIEB0b2RvIERvY3VtZW50YXRpb24gaW5jb21wbGV0ZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY29uc3QgSW50ZXJuYWxQbHVnaW5OYW1lID0ge1xuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBBdWRpbyByZWNvcmRlci5cbiAgICAgKi9cbiAgICBBdWRpb1JlY29yZGVyOiAnYXVkaW8tcmVjb3JkZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCYWNrbGlua3MuXG4gICAgICovXG4gICAgQmFja2xpbms6ICdiYWNrbGluaycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEJhc2VzLlxuICAgICAqL1xuICAgIEJhc2VzOiAnYmFzZXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCb29rbWFya3MuXG4gICAgICovXG4gICAgQm9va21hcmtzOiAnYm9va21hcmtzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ2FudmFzLlxuICAgICAqL1xuICAgIENhbnZhczogJ2NhbnZhcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IENvbW1hbmQgcGFsZXR0ZS5cbiAgICAgKi9cbiAgICBDb21tYW5kUGFsZXR0ZTogJ2NvbW1hbmQtcGFsZXR0ZScsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IERhaWx5IG5vdGVzLlxuICAgICAqL1xuICAgIERhaWx5Tm90ZXM6ICdkYWlseS1ub3RlcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IChoaWRkZW4pLlxuICAgICAqL1xuICAgIEVkaXRvclN0YXR1czogJ2VkaXRvci1zdGF0dXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBGaWxlcy5cbiAgICAgKi9cbiAgICBGaWxlRXhwbG9yZXI6ICdmaWxlLWV4cGxvcmVyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRmlsZSByZWNvdmVyeS5cbiAgICAgKi9cbiAgICBGaWxlUmVjb3Zlcnk6ICdmaWxlLXJlY292ZXJ5JyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9vdG5vdGVzLlxuICAgICAqL1xuICAgIEZvb3Rub3RlczogJ2Zvb3Rub3RlcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFNlYXJjaC5cbiAgICAgKi9cbiAgICBHbG9iYWxTZWFyY2g6ICdnbG9iYWwtc2VhcmNoJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogR3JhcGggdmlldy5cbiAgICAgKi9cbiAgICBHcmFwaDogJ2dyYXBoJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9ybWF0IGNvbnZlcnRlci5cbiAgICAgKi9cbiAgICBNYXJrZG93bkltcG9ydGVyOiAnbWFya2Rvd24taW1wb3J0ZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBOb3RlIGNvbXBvc2VyLlxuICAgICAqL1xuICAgIE5vdGVDb21wb3NlcjogJ25vdGUtY29tcG9zZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBPdXRnb2luZyBsaW5rcy5cbiAgICAgKi9cbiAgICBPdXRnb2luZ0xpbms6ICdvdXRnb2luZy1saW5rJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogT3V0bGluZS5cbiAgICAgKi9cbiAgICBPdXRsaW5lOiAnb3V0bGluZScsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFBhZ2UgcHJldmlldy5cbiAgICAgKi9cbiAgICBQYWdlUHJldmlldzogJ3BhZ2UtcHJldmlldycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFByb3BlcnRpZXMgdmlldy5cbiAgICAgKi9cbiAgICBQcm9wZXJ0aWVzOiAncHJvcGVydGllcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFB1Ymxpc2guXG4gICAgICovXG4gICAgUHVibGlzaDogJ3B1Ymxpc2gnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBSYW5kb20gbm90ZS5cbiAgICAgKi9cbiAgICBSYW5kb21Ob3RlOiAncmFuZG9tLW5vdGUnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBTbGFzaCBjb21tYW5kcy5cbiAgICAgKi9cbiAgICBTbGFzaENvbW1hbmQ6ICdzbGFzaC1jb21tYW5kJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2xpZGVzLlxuICAgICAqL1xuICAgIFNsaWRlczogJ3NsaWRlcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFF1aWNrIFN3aXRjaGVyLlxuICAgICAqL1xuICAgIFN3aXRjaGVyOiAnc3dpdGNoZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBTeW5jLlxuICAgICAqL1xuICAgIFN5bmM6ICdzeW5jJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGFncyB2aWV3LlxuICAgICAqL1xuICAgIFRhZ1BhbmU6ICd0YWctcGFuZScsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFRlbXBsYXRlcy5cbiAgICAgKi9cbiAgICBUZW1wbGF0ZXM6ICd0ZW1wbGF0ZXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBXZWIgdmlld2VyLlxuICAgICAqL1xuICAgIFdlYnZpZXdlcjogJ3dlYnZpZXdlcicsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdvcmQgY291bnQuXG4gICAgICovXG4gICAgV29yZENvdW50OiAnd29yZC1jb3VudCcsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdvcmtzcGFjZXMuXG4gICAgICovXG4gICAgV29ya3NwYWNlczogJ3dvcmtzcGFjZXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBVbmlxdWUgbm90ZSBjcmVhdG9yLlxuICAgICAqL1xuICAgIFprUHJlZml4ZXI6ICd6ay1wcmVmaXhlcidcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHsgSW50ZXJuYWxQbHVnaW5OYW1lIH0gZnJvbSAnLi9JbnRlcm5hbFBsdWdpbk5hbWUudHMnO1xuXG4vKipcbiAqIEB0b2RvIERvY3VtZW50YXRpb24gaW5jb21wbGV0ZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY29uc3QgVmlld1R5cGUgPSB7XG4gICAgQWxsUHJvcGVydGllczogJ2FsbC1wcm9wZXJ0aWVzJyxcbiAgICBBdWRpbzogJ2F1ZGlvJyxcbiAgICBCYWNrbGluazogSW50ZXJuYWxQbHVnaW5OYW1lLkJhY2tsaW5rLFxuICAgIEJvb2ttYXJrczogSW50ZXJuYWxQbHVnaW5OYW1lLkJvb2ttYXJrcyxcbiAgICBDYW52YXM6IEludGVybmFsUGx1Z2luTmFtZS5DYW52YXMsXG4gICAgRW1wdHk6ICdlbXB0eScsXG4gICAgRmlsZUV4cGxvcmVyOiBJbnRlcm5hbFBsdWdpbk5hbWUuRmlsZUV4cGxvcmVyLFxuICAgIEZpbGVQcm9wZXJ0aWVzOiAnZmlsZS1wcm9wZXJ0aWVzJyxcbiAgICBHcmFwaDogSW50ZXJuYWxQbHVnaW5OYW1lLkdyYXBoLFxuICAgIEltYWdlOiAnaW1hZ2UnLFxuICAgIExvY2FsR3JhcGg6ICdsb2NhbGdyYXBoJyxcbiAgICBNYXJrZG93bjogJ21hcmtkb3duJyxcbiAgICBPdXRnb2luZ0xpbms6IEludGVybmFsUGx1Z2luTmFtZS5PdXRnb2luZ0xpbmssXG4gICAgT3V0bGluZTogSW50ZXJuYWxQbHVnaW5OYW1lLk91dGxpbmUsXG4gICAgUGRmOiAncGRmJyxcbiAgICBSZWxlYXNlTm90ZXM6ICdyZWxlYXNlLW5vdGVzJyxcbiAgICBTZWFyY2g6ICdzZWFyY2gnLFxuICAgIFN5bmM6ICdzeW5jJyxcbiAgICBUYWJsZTogJ3RhYmxlJyxcbiAgICBUYWc6ICd0YWcnLFxuICAgIFZpZGVvOiAndmlkZW8nLFxuICAgIFdlYnZpZXdlcjogJ3dlYnZpZXdlcicsXG4gICAgV2Vidmlld2VySGlzdG9yeTogJ3dlYnZpZXdlci1oaXN0b3J5J1xufSBhcyBjb25zdDtcbiIsICJpbXBvcnQge1xuICAgIEFwcFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IEFwcENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9BcHBDb25zdHJ1Y3Rvci50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBBcHAgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEFwcCBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwQ29uc3RydWN0b3IoKTogQXBwQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBBcHAgYXMgQXBwQ29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsUGx1Z2luQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL0ludGVybmFsUGx1Z2luQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgSW50ZXJuYWxQbHVnaW4gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgSW50ZXJuYWxQbHVnaW4gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVybmFsUGx1Z2luQ29uc3RydWN0b3I8SW5zdGFuY2U+KGFwcDogQXBwKTogSW50ZXJuYWxQbHVnaW5Db25zdHJ1Y3RvcjxJbnN0YW5jZT4ge1xuICAgIGNvbnN0IGFueVBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYXBwLmludGVybmFsUGx1Z2lucy5wbHVnaW5zKVswXTtcbiAgICBpZiAoIWFueVBsdWdpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGludGVybmFsIHBsdWdpbiBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gYW55UGx1Z2luLmNvbnN0cnVjdG9yIGFzIEludGVybmFsUGx1Z2luQ29uc3RydWN0b3I8SW5zdGFuY2U+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvSW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgSW50ZXJuYWxQbHVnaW5zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIEludGVybmFsUGx1Z2lucyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IoYXBwOiBBcHApOiBJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIGFwcC5pbnRlcm5hbFBsdWdpbnMuY29uc3RydWN0b3IgYXMgSW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHtcbiAgICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFRGaWxlQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1RGaWxlQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgVEZpbGUgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFRGaWxlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRURmlsZUNvbnN0cnVjdG9yKCk6IFRGaWxlQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBURmlsZSBhcyBURmlsZUNvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB7XG4gICAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFRGb2xkZXJDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVEZvbGRlckNvbnN0cnVjdG9yLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFRGb2xkZXIgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFRGb2xkZXIgY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRGb2xkZXJDb25zdHJ1Y3RvcigpOiBURm9sZGVyQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBURm9sZGVyIGFzIFRGb2xkZXJDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVmlld1R5cGVUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL1ZpZXdzL1ZpZXdUeXBlVHlwZS5kLnRzJztcbmltcG9ydCB0eXBlIHsgVmlld1R5cGVWaWV3Q29uc3RydWN0b3JNYXBwaW5nIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL1ZpZXdzL1ZpZXdUeXBlVmlld0NvbnN0cnVjdG9yTWFwcGluZy5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHZpZXcgY29uc3RydWN0b3IgYnkgdmlldyB0eXBlLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHBhcmFtIHZpZXdUeXBlIC0gVGhlIHZpZXcgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSB2aWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlPFRWaWV3VHlwZSBleHRlbmRzIFZpZXdUeXBlVHlwZT4oXG4gICAgYXBwOiBBcHAsXG4gICAgdmlld1R5cGU6IFRWaWV3VHlwZVxuKTogVmlld1R5cGVWaWV3Q29uc3RydWN0b3JNYXBwaW5nW1RWaWV3VHlwZV0ge1xuICAgIGNvbnN0IGxlYWYgPSBhcHAud29ya3NwYWNlLmNyZWF0ZUxlYWZJblRhYkdyb3VwKCk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgdmlld0NyZWF0b3IgPSBhcHAudmlld1JlZ2lzdHJ5LmdldFZpZXdDcmVhdG9yQnlUeXBlKHZpZXdUeXBlKTtcbiAgICAgICAgaWYgKCF2aWV3Q3JlYXRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWV3IGNyZWF0b3Igbm90IGZvdW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmlldyA9IHZpZXdDcmVhdG9yKGxlYWYpO1xuICAgICAgICByZXR1cm4gdmlldy5jb25zdHJ1Y3RvciBhcyBWaWV3VHlwZVZpZXdDb25zdHJ1Y3Rvck1hcHBpbmdbVFZpZXdUeXBlXTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBsZWFmLmRldGFjaCgpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQge1xuICAgIHR5cGUgQXBwLFxuICAgIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IGdldFRGaWxlQ29uc3RydWN0b3IgfSBmcm9tICcuLi9Db25zdHJ1Y3RvcnMvZ2V0VEZpbGVDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBwYXJlbnRGb2xkZXJQYXRoIH0gZnJvbSAnLi4vVXRpbHMvUGF0aFV0aWxzLnRzJztcbmltcG9ydCB7IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZSB9IGZyb20gJy4vY3JlYXRlVEZvbGRlckluc3RhbmNlLnRzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyB0aGUgaW5zdGFuY2Ugb2YgVEZpbGUgZXZlbiB0aGUgdW5kZXJseWluZyBmaWxlIGRvZXMgbm90IGV4aXN0LlxuICogVGhpcyBkb2Vzbid0IGNyZWF0ZSB0aGUgbWlzc2luZyBmaWxlIG9uIHRoZSBmaWxlIHN5c3RlbS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVEZpbGVJbnN0YW5jZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogVEZpbGUge1xuICAgIGxldCBmaWxlID0gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aCk7XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgfVxuXG4gICAgZmlsZSA9IG5ldyAoZ2V0VEZpbGVDb25zdHJ1Y3RvcigpKShhcHAudmF1bHQsIHBhdGgpO1xuICAgIGZpbGUucGFyZW50ID0gY3JlYXRlVEZvbGRlckluc3RhbmNlKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG4gICAgZmlsZS5kZWxldGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gZmlsZTtcbn1cbiIsICIvKipcbiAqIEdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mLlxuICogQHJldHVybnMgVGhlIHBhcmVudCBmb2xkZXIgcGF0aC5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyZW50Rm9sZGVyUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLz9bXlxcL10qJC8sICcnKSB8fCAnLyc7XG59XG4iLCAiaW1wb3J0IHtcbiAgICB0eXBlIEFwcCxcbiAgICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IGdldFRGb2xkZXJDb25zdHJ1Y3RvciB9IGZyb20gJy4uL0NvbnN0cnVjdG9ycy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHsgcGFyZW50Rm9sZGVyUGF0aCB9IGZyb20gJy4uL1V0aWxzL1BhdGhVdGlscy50cyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlIG9mIFRGb2xkZXIgZXZlbiB0aGUgdW5kZXJseWluZyBmb2xkZXIgZG9lcyBub3QgZXhpc3QuXG4gKiBUaGlzIGRvZXNuJ3QgY3JlYXRlIHRoZSBtaXNzaW5nIGZvbGRlciBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogVEZvbGRlciB7XG4gICAgbGV0IGZvbGRlciA9IGFwcC52YXVsdC5nZXRGb2xkZXJCeVBhdGgocGF0aCk7XG4gICAgaWYgKGZvbGRlcikge1xuICAgICAgICByZXR1cm4gZm9sZGVyO1xuICAgIH1cblxuICAgIGZvbGRlciA9IG5ldyAoZ2V0VEZvbGRlckNvbnN0cnVjdG9yKCkpKGFwcC52YXVsdCwgcGF0aCk7XG4gICAgZm9sZGVyLnBhcmVudCA9IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuICAgIGZvbGRlci5kZWxldGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gZm9sZGVyO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBSZWZlcmVuY2UsXG4gICAgUmVmZXJlbmNlQ2FjaGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZWZlcmVuY2UgaXMgYSByZWZlcmVuY2UgY2FjaGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgYSByZWZlcmVuY2UgY2FjaGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUmVmZXJlbmNlQ2FjaGUge1xuICAgIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxSZWZlcmVuY2VDYWNoZT4pLnBvc2l0aW9uO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBFbWJlZENhY2hlLFxuICAgIFJlZmVyZW5jZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBpc1JlZmVyZW5jZUNhY2hlIH0gZnJvbSAnLi9pc1JlZmVyZW5jZUNhY2hlLnRzJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGFuIGVtYmVkIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGFuIGVtYmVkIGNhY2hlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtYmVkQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgRW1iZWRDYWNoZSB7XG4gICAgcmV0dXJuIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKSAmJiByZWZlcmVuY2Uub3JpZ2luYWxbMF0gPT09ICchJztcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUsXG4gICAgUmVmZXJlbmNlXG59IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgZnJvbnRtYXR0ZXIgbGluayBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIGZyb250bWF0dGVyIGxpbmsgY2FjaGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUge1xuICAgIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxGcm9udG1hdHRlckxpbmtDYWNoZT4pLmtleTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgTGlua0NhY2hlLFxuICAgIFJlZmVyZW5jZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBpc1JlZmVyZW5jZUNhY2hlIH0gZnJvbSAnLi9pc1JlZmVyZW5jZUNhY2hlLnRzJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgbGluayBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIGxpbmsgY2FjaGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIExpbmtDYWNoZSB7XG4gICAgcmV0dXJuIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKSAmJiByZWZlcmVuY2Uub3JpZ2luYWxbMF0gIT09ICchJztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDUU8sSUFBTSxzQkFBTixNQUEyRDtBQUFBLEVBQ3ZELE9BQXlCLG9CQUFJLElBQUk7QUFBQSxFQUVqQyxJQUFJLEtBQWEsT0FBZ0I7QUFDcEMsUUFB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QUFNLGNBQWMsSUFBSTtBQUN2QyxNQUFJLE1BQU07QUFDTixXQUFPO0FBQUEsRUFDWDtBQUVBLFNBQU8sS0FBSyxvQkFBb0IsR0FBRyxJQUFJLE9BQU8sSUFBSTtBQUNsRCxPQUFLLFNBQVMsc0JBQXNCLEtBQUssaUJBQWlCLElBQUksQ0FBQztBQUMvRCxPQUFLLFVBQVU7QUFDZixTQUFPO0FBQ1g7OztBR1hPLFNBQVMsaUJBQWlCLFdBQW1EO0FBQ2hGLFNBQU8sQ0FBQyxDQUFFLFVBQXNDO0FBQ3BEOzs7QUNETyxTQUFTLGFBQWEsV0FBK0M7QUFDeEUsU0FBTyxpQkFBaUIsU0FBUyxLQUFLLFVBQVUsU0FBUyxDQUFDLE1BQU07QUFDcEU7OztBQ0hPLFNBQVMsdUJBQXVCLFdBQXlEO0FBQzVGLFNBQU8sQ0FBQyxDQUFFLFVBQTRDO0FBQzFEOzs7QUNETyxTQUFTLFlBQVksV0FBOEM7QUFDdEUsU0FBTyxpQkFBaUIsU0FBUyxLQUFLLFVBQVUsU0FBUyxDQUFDLE1BQU07QUFDcEU7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiJdCn0K