@mnaoumov/obsidian-lib 10.11.0 → 11.0.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/README.md +26 -0
- package/components/all-windows-status-bar-item-component/package.json +6 -0
- package/components/shared-component-pool-component/package.json +6 -0
- package/components/worker-component/package.json +6 -0
- package/components/worker-pool-component/package.json +6 -0
- package/components/workspace-layout-state-component/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +477 -285
- package/dist/lib/cjs/__merged.d.cts +26 -10
- package/dist/lib/cjs/anchored-suggest.cjs +1 -1
- package/dist/lib/cjs/app.cjs +2 -2
- package/dist/lib/cjs/async-with-notice.cjs +4 -4
- package/dist/lib/cjs/attachment-path.cjs +9 -9
- package/dist/lib/cjs/attachment-path.d.cts +3 -3
- package/dist/lib/cjs/attachment-unit-folder.cjs +2 -2
- package/dist/lib/cjs/backlink-index.cjs +5 -5
- package/dist/lib/cjs/backlink.cjs +7 -7
- package/dist/lib/cjs/bases-view-registrar.cjs +1 -1
- package/dist/lib/cjs/broken-link-candidates.cjs +1 -1
- package/dist/lib/cjs/bug-report-diagnostics.cjs +222 -0
- package/dist/lib/cjs/bug-report-diagnostics.d.cts +186 -0
- package/dist/lib/cjs/bug-report.cjs +38 -12
- package/dist/lib/cjs/bug-report.d.cts +65 -0
- package/dist/lib/cjs/bulk-operation-progress.cjs +1 -1
- package/dist/lib/cjs/bulk-operation.cjs +2 -2
- package/dist/lib/cjs/callout.cjs +6 -6
- package/dist/lib/cjs/canvas.cjs +11 -9
- package/dist/lib/cjs/canvas.d.cts +13 -0
- package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -3
- package/dist/lib/cjs/code-block-render-handoff.cjs +5 -5
- package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +4 -4
- package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +2 -2
- package/dist/lib/cjs/codemirror/index.cjs +7 -7
- package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +5 -5
- package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +2 -2
- package/dist/lib/cjs/codemirror/settings-facet.cjs +1 -1
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +17 -17
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +13 -13
- package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -2
- package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +10 -10
- package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +7 -7
- package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -3
- package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -3
- package/dist/lib/cjs/command-handlers/global-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/index.cjs +15 -15
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +95 -4
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +34 -2
- package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +1 -1
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -1
- package/dist/lib/cjs/community-plugins.cjs +3 -3
- package/dist/lib/cjs/components/abort-signal-component.cjs +2 -2
- package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
- package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +245 -0
- package/dist/lib/cjs/components/all-windows-status-bar-item-component.d.cts +146 -0
- package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
- package/dist/lib/cjs/components/async-events-component.cjs +1 -1
- package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +12 -12
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +2 -2
- package/dist/lib/cjs/components/component-ex.cjs +21 -11
- package/dist/lib/cjs/components/component-ex.d.cts +11 -0
- package/dist/lib/cjs/components/console-debug-component.cjs +2 -2
- package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -2
- package/dist/lib/cjs/components/disposable-component.cjs +2 -2
- package/dist/lib/cjs/components/embed-extensions-component.cjs +21 -4
- package/dist/lib/cjs/components/embed-extensions-component.d.cts +8 -0
- package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +24 -10
- package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +9 -0
- package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +7 -7
- package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +2 -2
- package/dist/lib/cjs/components/incremental-file-index-component.cjs +4 -4
- package/dist/lib/cjs/components/index.cjs +54 -39
- package/dist/lib/cjs/components/index.d.cts +5 -0
- package/dist/lib/cjs/components/layout-ready-component.cjs +3 -3
- package/dist/lib/cjs/components/menu-event-registrar-component.cjs +2 -2
- package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
- package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-gate-component.cjs +69 -36
- package/dist/lib/cjs/components/plugin-gate-component.d.cts +36 -13
- package/dist/lib/cjs/components/plugin-notice-component.cjs +39 -33
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +4 -3
- package/dist/lib/cjs/components/plugin-settings-component.cjs +119 -18
- package/dist/lib/cjs/components/plugin-settings-component.d.cts +35 -5
- package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -2
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +8 -8
- package/dist/lib/cjs/components/pointer-position-component.cjs +2 -2
- package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +3 -3
- package/dist/lib/cjs/components/registry-component.cjs +2 -2
- package/dist/lib/cjs/components/release-notes-component.cjs +6 -6
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +25 -25
- package/dist/lib/cjs/components/rmdir-guard-component.cjs +2 -2
- package/dist/lib/cjs/components/settings-facet-component.cjs +1 -1
- package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
- package/dist/lib/cjs/components/shared-component-pool-component.cjs +368 -0
- package/dist/lib/cjs/components/shared-component-pool-component.d.cts +129 -0
- package/dist/lib/cjs/components/style-sheet-component.cjs +3 -3
- package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -3
- package/dist/lib/cjs/components/templates-language-component.cjs +1 -1
- package/dist/lib/cjs/components/worker-component.cjs +363 -0
- package/dist/lib/cjs/components/worker-component.d.cts +156 -0
- package/dist/lib/cjs/components/worker-pool-component.cjs +185 -0
- package/dist/lib/cjs/components/worker-pool-component.d.cts +102 -0
- package/dist/lib/cjs/components/workspace-layout-state-component.cjs +495 -0
- package/dist/lib/cjs/components/workspace-layout-state-component.d.cts +239 -0
- package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
- package/dist/lib/cjs/constructors/index.cjs +1 -1
- package/dist/lib/cjs/css-class.cjs +5 -1
- package/dist/lib/cjs/css-class.d.cts +16 -0
- package/dist/lib/cjs/data-handler.cjs +264 -6
- package/dist/lib/cjs/data-handler.d.cts +219 -2
- package/dist/lib/cjs/data-stores/data-store-locations.cjs +82 -24
- package/dist/lib/cjs/data-stores/data-store-locations.d.cts +15 -0
- package/dist/lib/cjs/data-stores/data-store-replica.cjs +33 -5
- package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
- package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +2 -2
- package/dist/lib/cjs/data-stores/data-store-transport.cjs +81 -8
- package/dist/lib/cjs/data-stores/data-store-transport.d.cts +30 -1
- package/dist/lib/cjs/data-stores/index.cjs +6 -6
- package/dist/lib/cjs/data-stores/local-data-store.cjs +74 -10
- package/dist/lib/cjs/data-stores/local-data-store.d.cts +58 -1
- package/dist/lib/cjs/data-stores/shared-data-store.cjs +76 -19
- package/dist/lib/cjs/data-stores/shared-data-store.d.cts +18 -1
- package/dist/lib/cjs/dataview-link.cjs +2 -2
- package/dist/lib/cjs/dataview.cjs +27 -7
- package/dist/lib/cjs/dataview.d.cts +14 -0
- package/dist/lib/cjs/debug.cjs +3 -3
- package/dist/lib/cjs/demo-vault-helper.cjs +34 -6
- package/dist/lib/cjs/demo-vault-helper.d.cts +6 -2
- package/dist/lib/cjs/desktop-bulk-operation-git.cjs +10 -10
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +13 -13
- package/dist/lib/cjs/desktop-git-runner.cjs +4 -14
- package/dist/lib/cjs/desktop-git-runner.d.cts +8 -2
- package/dist/lib/cjs/desktop-operating-system.cjs +1 -1
- package/dist/lib/cjs/desktop-request-url-stream.cjs +8 -14
- package/dist/lib/cjs/desktop-trusted-input.cjs +2 -2
- package/dist/lib/cjs/disposable.cjs +150 -0
- package/dist/lib/cjs/disposable.d.cts +39 -0
- package/dist/lib/cjs/editor-extension-registrar.cjs +1 -1
- package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -2
- package/dist/lib/cjs/editor-suggest.cjs +1 -1
- package/dist/lib/cjs/editor.cjs +6 -6
- package/dist/lib/cjs/events.cjs +2 -2
- package/dist/lib/cjs/extensions-registrar.cjs +1 -1
- package/dist/lib/cjs/feature-request.cjs +1 -1
- package/dist/lib/cjs/file-change.cjs +10 -10
- package/dist/lib/cjs/file-explorer.cjs +2 -2
- package/dist/lib/cjs/file-manager.cjs +5 -5
- package/dist/lib/cjs/file-system.cjs +10 -10
- package/dist/lib/cjs/folder-note.cjs +4 -4
- package/dist/lib/cjs/frontmatter-formatting.cjs +7 -6
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +1 -1
- package/dist/lib/cjs/frontmatter.cjs +5 -5
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/git-rename-history.cjs +1 -1
- package/dist/lib/cjs/git-rename-history.d.cts +2 -2
- package/dist/lib/cjs/hotkey.cjs +1 -1
- package/dist/lib/cjs/hover-link-source-registrar.cjs +1 -1
- package/dist/lib/cjs/html-element.cjs +2 -2
- package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -1
- package/dist/lib/cjs/i18n/default-translations.cjs +1 -1
- package/dist/lib/cjs/i18n/i18n.cjs +7 -7
- package/dist/lib/cjs/i18n/index.cjs +4 -4
- package/dist/lib/cjs/i18n/locales/en.cjs +27 -1
- package/dist/lib/cjs/i18n/locales/en.d.cts +26 -0
- package/dist/lib/cjs/i18n/locales/index.cjs +2 -2
- package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -1
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +26 -0
- package/dist/lib/cjs/index.cjs +147 -126
- package/dist/lib/cjs/index.d.cts +7 -0
- package/dist/lib/cjs/inline-token-renderer.cjs +2 -2
- package/dist/lib/cjs/is-in-obsidian.cjs +1 -1
- package/dist/lib/cjs/library-styles.cjs +3 -3
- package/dist/lib/cjs/link-and-tag-input-suggest.cjs +2 -2
- package/dist/lib/cjs/link.cjs +76 -56
- package/dist/lib/cjs/link.d.cts +20 -14
- package/dist/lib/cjs/logger.cjs +4 -4
- package/dist/lib/cjs/loop.cjs +10 -16
- package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +17 -2
- package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +7 -0
- package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -13
- package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -2
- package/dist/lib/cjs/markdown-view.cjs +191 -3
- package/dist/lib/cjs/markdown-view.d.cts +48 -1
- package/dist/lib/cjs/markdown.cjs +12 -12
- package/dist/lib/cjs/metadata-cache.cjs +23 -23
- package/dist/lib/cjs/metadata-cache.d.cts +5 -4
- package/dist/lib/cjs/misplaced-attachment.cjs +297 -0
- package/dist/lib/cjs/misplaced-attachment.d.cts +228 -0
- package/dist/lib/cjs/mobile-app-info.cjs +1 -1
- package/dist/lib/cjs/modals/alert.cjs +4 -4
- package/dist/lib/cjs/modals/code-block-builder.cjs +7 -7
- package/dist/lib/cjs/modals/confirm.cjs +4 -4
- package/dist/lib/cjs/modals/copy-text-manually.cjs +181 -0
- package/dist/lib/cjs/modals/copy-text-manually.d.cts +38 -0
- package/dist/lib/cjs/modals/index.cjs +17 -11
- package/dist/lib/cjs/modals/index.d.cts +2 -0
- package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
- package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -3
- package/dist/lib/cjs/modals/modal.cjs +3 -3
- package/dist/lib/cjs/modals/prompt.cjs +10 -10
- package/dist/lib/cjs/modals/prompt.d.cts +1 -1
- package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +202 -0
- package/dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts +30 -0
- package/dist/lib/cjs/modals/select-item.cjs +6 -6
- package/dist/lib/cjs/modals/select-option.cjs +3 -3
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
- package/dist/lib/cjs/note-priority.cjs +2 -2
- package/dist/lib/cjs/notebook-navigator.cjs +12 -2
- package/dist/lib/cjs/notebook-navigator.d.cts +6 -0
- package/dist/lib/cjs/obsidian-lib-state.cjs +1 -1
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian-settings.cjs +1 -1
- package/dist/lib/cjs/obsidian-word-characters.cjs +1 -1
- package/dist/lib/cjs/parse-link.cjs +14 -14
- package/dist/lib/cjs/path-compatibility.cjs +368 -0
- package/dist/lib/cjs/path-compatibility.d.cts +263 -0
- package/dist/lib/cjs/path-settings.cjs +3 -3
- package/dist/lib/cjs/pdf.cjs +2 -2
- package/dist/lib/cjs/plugin/index.cjs +18 -12
- package/dist/lib/cjs/plugin/index.d.cts +2 -0
- package/dist/lib/cjs/plugin/plugin-api.cjs +21 -12
- package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -1
- package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +6 -3
- package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +5 -0
- package/dist/lib/cjs/plugin/plugin-context.cjs +10 -9
- package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin-event-source.d.cts +4 -4
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +49 -4
- package/dist/lib/cjs/plugin/plugin-install-state.d.cts +30 -0
- package/dist/lib/cjs/plugin/plugin-instance.cjs +450 -0
- package/dist/lib/cjs/plugin/plugin-instance.d.cts +258 -0
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +6 -4
- package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +15 -15
- package/dist/lib/cjs/plugin/plugin.cjs +133 -34
- package/dist/lib/cjs/plugin/plugin.d.cts +35 -5
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +1 -1
- package/dist/lib/cjs/plugin/third-party-plugin.cjs +231 -0
- package/dist/lib/cjs/plugin/third-party-plugin.d.cts +244 -0
- package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -2
- package/dist/lib/cjs/popovers/field-popover.cjs +4 -4
- package/dist/lib/cjs/popovers/index.cjs +3 -3
- package/dist/lib/cjs/popovers/popover-anchor.cjs +1 -1
- package/dist/lib/cjs/popovers/popover.cjs +5 -5
- package/dist/lib/cjs/queue.cjs +8 -8
- package/dist/lib/cjs/react/app-context.cjs +3 -3
- package/dist/lib/cjs/react/index.cjs +1 -1
- package/dist/lib/cjs/reference-definition.cjs +1 -1
- package/dist/lib/cjs/reference.cjs +3 -3
- package/dist/lib/cjs/release-asset.cjs +5 -5
- package/dist/lib/cjs/rendered-markdown.cjs +4 -4
- package/dist/lib/cjs/request-url.cjs +4 -4
- package/dist/lib/cjs/resource-lock.cjs +46 -42
- package/dist/lib/cjs/resource-lock.d.cts +8 -7
- package/dist/lib/cjs/resource-url.cjs +3 -3
- package/dist/lib/cjs/ribbon-icon-registrar.cjs +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +7 -7
- package/dist/lib/cjs/setting-components/date-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/date-time-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/email-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/file-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/folder-list-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/hotkey-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/index.cjs +30 -30
- package/dist/lib/cjs/setting-components/list-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/month-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +9 -6
- package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +4 -1
- package/dist/lib/cjs/setting-components/number-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/password-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -3
- package/dist/lib/cjs/setting-components/tag-list-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/telephone-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/text-based-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/time-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/url-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/validator-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/week-component.cjs +4 -4
- package/dist/lib/cjs/setting-ex.cjs +26 -26
- package/dist/lib/cjs/setting-group-ex.cjs +2 -2
- package/dist/lib/cjs/settings-recovery.cjs +217 -0
- package/dist/lib/cjs/settings-recovery.d.cts +178 -0
- package/dist/lib/cjs/settings-tabs.cjs +5 -5
- package/dist/lib/cjs/status-bar-item-registrar.cjs +1 -1
- package/dist/lib/cjs/templater.cjs +14 -4
- package/dist/lib/cjs/templater.d.cts +6 -0
- package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -2
- package/dist/lib/cjs/transformers/index.cjs +1 -1
- package/dist/lib/cjs/trusted-input.cjs +1 -1
- package/dist/lib/cjs/validation.cjs +4 -4
- package/dist/lib/cjs/vault-delete.cjs +6 -6
- package/dist/lib/cjs/vault-transaction.cjs +5 -5
- package/dist/lib/cjs/vault.cjs +12 -12
- package/dist/lib/cjs/view-registrar.cjs +1 -1
- package/dist/lib/cjs/virtual-file.cjs +16 -14
- package/dist/lib/cjs/virtual-file.d.cts +2 -1
- package/dist/lib/cjs/wasm.cjs +119 -0
- package/dist/lib/cjs/wasm.d.cts +54 -0
- package/dist/lib/cjs/worker-protocol.cjs +209 -0
- package/dist/lib/cjs/worker-protocol.d.cts +282 -0
- package/dist/lib/cjs/workspace.cjs +1 -1
- package/dist/lib/esm/__merged.d.mts +26 -10
- package/dist/lib/esm/__merged.mjs +215 -5
- package/dist/lib/esm/app.mjs +2 -2
- package/dist/lib/esm/attachment-path.d.mts +3 -3
- package/dist/lib/esm/attachment-path.mjs +2 -2
- package/dist/lib/esm/backlink-index.mjs +2 -2
- package/dist/lib/esm/bug-report-diagnostics.d.mts +186 -0
- package/dist/lib/esm/bug-report-diagnostics.mjs +127 -0
- package/dist/lib/esm/bug-report.d.mts +65 -0
- package/dist/lib/esm/bug-report.mjs +33 -10
- package/dist/lib/esm/canvas.d.mts +13 -0
- package/dist/lib/esm/canvas.mjs +6 -5
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +13 -13
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +14 -14
- package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +7 -7
- package/dist/lib/esm/command-handlers/editor-command-handler.mjs +8 -8
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +34 -2
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +99 -3
- package/dist/lib/esm/components/all-windows-status-bar-item-component.d.mts +146 -0
- package/dist/lib/esm/components/all-windows-status-bar-item-component.mjs +154 -0
- package/dist/lib/esm/components/component-ex.d.mts +11 -0
- package/dist/lib/esm/components/component-ex.mjs +19 -6
- package/dist/lib/esm/components/disposable-component.mjs +1 -1
- package/dist/lib/esm/components/embed-extensions-component.d.mts +8 -0
- package/dist/lib/esm/components/embed-extensions-component.mjs +20 -3
- package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +9 -0
- package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +16 -2
- package/dist/lib/esm/components/index.d.mts +5 -0
- package/dist/lib/esm/components/index.mjs +12 -2
- package/dist/lib/esm/components/plugin-gate-component.d.mts +36 -13
- package/dist/lib/esm/components/plugin-gate-component.mjs +61 -26
- package/dist/lib/esm/components/plugin-notice-component.d.mts +4 -3
- package/dist/lib/esm/components/plugin-notice-component.mjs +30 -21
- package/dist/lib/esm/components/plugin-settings-component.d.mts +35 -5
- package/dist/lib/esm/components/plugin-settings-component.mjs +105 -4
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +2 -2
- package/dist/lib/esm/components/shared-component-pool-component.d.mts +129 -0
- package/dist/lib/esm/components/shared-component-pool-component.mjs +280 -0
- package/dist/lib/esm/components/worker-component.d.mts +156 -0
- package/dist/lib/esm/components/worker-component.mjs +279 -0
- package/dist/lib/esm/components/worker-pool-component.d.mts +102 -0
- package/dist/lib/esm/components/worker-pool-component.mjs +95 -0
- package/dist/lib/esm/components/workspace-layout-state-component.d.mts +239 -0
- package/dist/lib/esm/components/workspace-layout-state-component.mjs +404 -0
- package/dist/lib/esm/css-class.d.mts +16 -0
- package/dist/lib/esm/css-class.mjs +5 -1
- package/dist/lib/esm/data-handler.d.mts +219 -2
- package/dist/lib/esm/data-handler.mjs +262 -5
- package/dist/lib/esm/data-stores/data-store-locations.d.mts +15 -0
- package/dist/lib/esm/data-stores/data-store-locations.mjs +80 -22
- package/dist/lib/esm/data-stores/data-store-replica.mjs +33 -5
- package/dist/lib/esm/data-stores/data-store-seeds.d.mts +2 -2
- package/dist/lib/esm/data-stores/data-store-seeds.mjs +4 -4
- package/dist/lib/esm/data-stores/data-store-transport.d.mts +30 -1
- package/dist/lib/esm/data-stores/data-store-transport.mjs +78 -5
- package/dist/lib/esm/data-stores/local-data-store.d.mts +58 -1
- package/dist/lib/esm/data-stores/local-data-store.mjs +71 -9
- package/dist/lib/esm/data-stores/shared-data-store.d.mts +18 -1
- package/dist/lib/esm/data-stores/shared-data-store.mjs +72 -15
- package/dist/lib/esm/dataview.d.mts +14 -0
- package/dist/lib/esm/dataview.mjs +19 -1
- package/dist/lib/esm/demo-vault-helper.d.mts +6 -2
- package/dist/lib/esm/demo-vault-helper.mjs +29 -1
- package/dist/lib/esm/desktop-demo-vault-opener.mjs +1 -1
- package/dist/lib/esm/desktop-git-runner.d.mts +8 -2
- package/dist/lib/esm/desktop-git-runner.mjs +3 -3
- package/dist/lib/esm/desktop-request-url-stream.mjs +4 -10
- package/dist/lib/esm/disposable.d.mts +39 -0
- package/dist/lib/esm/disposable.mjs +64 -0
- package/dist/lib/esm/file-system.mjs +2 -2
- package/dist/lib/esm/frontmatter-formatting.mjs +2 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/git-rename-history.d.mts +2 -2
- package/dist/lib/esm/git-rename-history.mjs +1 -1
- package/dist/lib/esm/i18n/locales/en.d.mts +26 -0
- package/dist/lib/esm/i18n/locales/en.mjs +27 -1
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +26 -0
- package/dist/lib/esm/index.d.mts +7 -0
- package/dist/lib/esm/index.mjs +15 -1
- package/dist/lib/esm/link.d.mts +20 -14
- package/dist/lib/esm/link.mjs +57 -38
- package/dist/lib/esm/loop.mjs +2 -8
- package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +7 -0
- package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +16 -1
- package/dist/lib/esm/markdown-view.d.mts +48 -1
- package/dist/lib/esm/markdown-view.mjs +192 -2
- package/dist/lib/esm/metadata-cache.d.mts +5 -4
- package/dist/lib/esm/metadata-cache.mjs +6 -6
- package/dist/lib/esm/misplaced-attachment.d.mts +228 -0
- package/dist/lib/esm/misplaced-attachment.mjs +212 -0
- package/dist/lib/esm/modals/copy-text-manually.d.mts +38 -0
- package/dist/lib/esm/modals/copy-text-manually.mjs +99 -0
- package/dist/lib/esm/modals/index.d.mts +2 -0
- package/dist/lib/esm/modals/index.mjs +5 -1
- package/dist/lib/esm/modals/prompt.d.mts +1 -1
- package/dist/lib/esm/modals/prompt.mjs +1 -1
- package/dist/lib/esm/modals/review-bug-report-diagnostics.d.mts +30 -0
- package/dist/lib/esm/modals/review-bug-report-diagnostics.mjs +120 -0
- package/dist/lib/esm/notebook-navigator.d.mts +6 -0
- package/dist/lib/esm/notebook-navigator.mjs +11 -2
- package/dist/lib/esm/parse-link.mjs +4 -4
- package/dist/lib/esm/path-compatibility.d.mts +263 -0
- package/dist/lib/esm/path-compatibility.mjs +277 -0
- package/dist/lib/esm/plugin/index.d.mts +2 -0
- package/dist/lib/esm/plugin/index.mjs +6 -2
- package/dist/lib/esm/plugin/plugin-api.d.mts +5 -1
- package/dist/lib/esm/plugin/plugin-api.mjs +13 -4
- package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +5 -0
- package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +3 -1
- package/dist/lib/esm/plugin/plugin-context.mjs +2 -1
- package/dist/lib/esm/plugin/plugin-event-source.d.mts +4 -4
- package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-install-state.d.mts +30 -0
- package/dist/lib/esm/plugin/plugin-install-state.mjs +44 -1
- package/dist/lib/esm/plugin/plugin-instance.d.mts +258 -0
- package/dist/lib/esm/plugin/plugin-instance.mjs +367 -0
- package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +6 -4
- package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -1
- package/dist/lib/esm/plugin/plugin.d.mts +35 -5
- package/dist/lib/esm/plugin/plugin.mjs +118 -9
- package/dist/lib/esm/plugin/third-party-plugin.d.mts +244 -0
- package/dist/lib/esm/plugin/third-party-plugin.mjs +147 -0
- package/dist/lib/esm/release-asset.mjs +1 -1
- package/dist/lib/esm/resource-lock.d.mts +8 -7
- package/dist/lib/esm/resource-lock.mjs +31 -26
- package/dist/lib/esm/setting-components/multiple-text-component.d.mts +4 -1
- package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -3
- package/dist/lib/esm/settings-recovery.d.mts +178 -0
- package/dist/lib/esm/settings-recovery.mjs +125 -0
- package/dist/lib/esm/settings-tabs.mjs +2 -2
- package/dist/lib/esm/templater.d.mts +6 -0
- package/dist/lib/esm/templater.mjs +11 -2
- package/dist/lib/esm/vault.mjs +1 -1
- package/dist/lib/esm/virtual-file.d.mts +2 -1
- package/dist/lib/esm/virtual-file.mjs +7 -5
- package/dist/lib/esm/wasm.d.mts +54 -0
- package/dist/lib/esm/wasm.mjs +30 -0
- package/dist/lib/esm/worker-protocol.d.mts +282 -0
- package/dist/lib/esm/worker-protocol.mjs +113 -0
- package/dist/styles.css +16 -1
- package/modals/copy-text-manually/package.json +6 -0
- package/modals/review-bug-report-diagnostics/package.json +6 -0
- package/package.json +10 -8
- package/plugin/plugin-instance/package.json +6 -0
- package/plugin/third-party-plugin/package.json +6 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/// <reference lib="dom" />
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
*
|
|
6
|
+
* Shows one status-bar item in the main window and in every desktop popout, including popouts opened later, and
|
|
7
|
+
* removes only its own items when a window closes or the component unloads.
|
|
8
|
+
*
|
|
9
|
+
* Read from Obsidian `1.15.1`: the main window builds `body > .app-container > .status-bar`, and
|
|
10
|
+
* `Plugin.addStatusBarItem` is a `.status-bar-item` created in it. A popout builds `body > .app-container` with the
|
|
11
|
+
* workspace only, and **no status bar**. `app.css` styles `.status-bar` without scoping it to a window, so a
|
|
12
|
+
* `.status-bar` created inside a popout's `.app-container` looks and sits exactly like the main one. By default
|
|
13
|
+
* this component creates that bar in a popout that lacks one, and marks it with
|
|
14
|
+
* {@link WINDOW_STATUS_BAR_CSS_CLASS}. The marker is a wire constant shared by every copy of this library: any copy
|
|
15
|
+
* reuses a marked bar, and whichever copy removes the last item from it removes the bar too.
|
|
16
|
+
*
|
|
17
|
+
* Mobile has no popouts, and `app.css` hides `.status-bar` under `.is-mobile`, so on mobile the component creates
|
|
18
|
+
* nothing and never calls the render callback.
|
|
19
|
+
*/
|
|
20
|
+
import type { App, Component } from 'obsidian';
|
|
21
|
+
import { ComponentEx } from './component-ex.mjs';
|
|
22
|
+
/**
|
|
23
|
+
* The class that marks a status bar this library created in a window that had none.
|
|
24
|
+
* Other copies of the library match it, so its value must never change.
|
|
25
|
+
*/
|
|
26
|
+
export declare const WINDOW_STATUS_BAR_CSS_CLASS = "obsidian-lib-window-status-bar";
|
|
27
|
+
/**
|
|
28
|
+
* Parameters for the {@link AllWindowsStatusBarItemComponent} constructor.
|
|
29
|
+
*/
|
|
30
|
+
export interface AllWindowsStatusBarItemComponentConstructorParams {
|
|
31
|
+
/**
|
|
32
|
+
* The Obsidian app instance.
|
|
33
|
+
*/
|
|
34
|
+
readonly app: App;
|
|
35
|
+
/**
|
|
36
|
+
* Extra CSS classes for each item.
|
|
37
|
+
*/
|
|
38
|
+
readonly cls?: readonly string[];
|
|
39
|
+
/**
|
|
40
|
+
* The plugin id. When given, each item gets the `plugin-<id>` class that `Plugin.addStatusBarItem` adds, so
|
|
41
|
+
* themes and CSS snippets that target the plugin's status-bar items match these too.
|
|
42
|
+
*/
|
|
43
|
+
readonly pluginId?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Renders the item of one window. Called when the item is created and again by
|
|
46
|
+
* {@link AllWindowsStatusBarItemComponent.refresh}, so it must be safe to call repeatedly on the same element.
|
|
47
|
+
*
|
|
48
|
+
* @param params - The item and its window.
|
|
49
|
+
*/
|
|
50
|
+
readonly render: (params: AllWindowsStatusBarItemRenderParams) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Whether to create a status bar in a window that has none, as every popout in Obsidian `1.15.1` does.
|
|
53
|
+
* When `false`, such a window gets no item. Defaults to `true`.
|
|
54
|
+
*/
|
|
55
|
+
readonly shouldCreateMissingStatusBar?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Parameters passed to {@link AllWindowsStatusBarItemComponentConstructorParams.render}.
|
|
59
|
+
*/
|
|
60
|
+
export interface AllWindowsStatusBarItemRenderParams {
|
|
61
|
+
/**
|
|
62
|
+
* The status-bar item owned by this component in {@link win}.
|
|
63
|
+
*/
|
|
64
|
+
readonly el: HTMLElement;
|
|
65
|
+
/**
|
|
66
|
+
* The window the item is in. Use its document for anything the render creates outside the item.
|
|
67
|
+
*/
|
|
68
|
+
readonly win: Window;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Parameters for {@link registerAllWindowsStatusBarItem}.
|
|
72
|
+
*/
|
|
73
|
+
export interface RegisterAllWindowsStatusBarItemParams extends AllWindowsStatusBarItemComponentConstructorParams {
|
|
74
|
+
/**
|
|
75
|
+
* The component that owns the items: they are removed when it unloads.
|
|
76
|
+
*/
|
|
77
|
+
readonly component: Component;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Shows one status-bar item in the main window and in every desktop popout while loaded.
|
|
81
|
+
*/
|
|
82
|
+
export declare class AllWindowsStatusBarItemComponent extends ComponentEx {
|
|
83
|
+
/**
|
|
84
|
+
* The Obsidian app instance.
|
|
85
|
+
*/
|
|
86
|
+
protected readonly app: App;
|
|
87
|
+
/**
|
|
88
|
+
* The CSS classes added to each item.
|
|
89
|
+
*/
|
|
90
|
+
protected readonly itemClasses: readonly string[];
|
|
91
|
+
/**
|
|
92
|
+
* Renders the item of one window.
|
|
93
|
+
*/
|
|
94
|
+
protected readonly renderItem: (params: AllWindowsStatusBarItemRenderParams) => void;
|
|
95
|
+
/**
|
|
96
|
+
* Whether a status bar is created in a window that has none.
|
|
97
|
+
*/
|
|
98
|
+
protected readonly shouldCreateMissingStatusBar: boolean;
|
|
99
|
+
private readonly itemElsByWindow;
|
|
100
|
+
/**
|
|
101
|
+
* Creates a new instance of the `AllWindowsStatusBarItemComponent` class.
|
|
102
|
+
*
|
|
103
|
+
* @param params - The {@link AllWindowsStatusBarItemComponentConstructorParams}.
|
|
104
|
+
*/
|
|
105
|
+
constructor(params: AllWindowsStatusBarItemComponentConstructorParams);
|
|
106
|
+
/**
|
|
107
|
+
* Gets the item of a window.
|
|
108
|
+
*
|
|
109
|
+
* @param win - The window.
|
|
110
|
+
* @returns The item, or `null` when the window has none.
|
|
111
|
+
*/
|
|
112
|
+
getItemEl(win: Window): HTMLElement | null;
|
|
113
|
+
/**
|
|
114
|
+
* Gets the items of every window that has one.
|
|
115
|
+
*
|
|
116
|
+
* @returns The items.
|
|
117
|
+
*/
|
|
118
|
+
getItemEls(): HTMLElement[];
|
|
119
|
+
/**
|
|
120
|
+
* Creates the item in every window, now and as popouts open. A no-op on mobile.
|
|
121
|
+
*/
|
|
122
|
+
onload(): void;
|
|
123
|
+
/**
|
|
124
|
+
* Renders the item of every window again.
|
|
125
|
+
*/
|
|
126
|
+
refresh(): void;
|
|
127
|
+
private attach;
|
|
128
|
+
private findOrCreateStatusBar;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Gets the class `Plugin.addStatusBarItem` adds to a plugin's status-bar items.
|
|
132
|
+
* It copies Obsidian `1.15.1` exactly, including that only the first disallowed character is replaced.
|
|
133
|
+
*
|
|
134
|
+
* @param pluginId - The plugin id.
|
|
135
|
+
* @returns The CSS class.
|
|
136
|
+
*/
|
|
137
|
+
export declare function getPluginStatusBarItemCssClass(pluginId: string): string;
|
|
138
|
+
/**
|
|
139
|
+
* Shows one status-bar item in the main window and in every desktop popout, including popouts opened later, until
|
|
140
|
+
* the owning component unloads.
|
|
141
|
+
*
|
|
142
|
+
* @param params - The {@link RegisterAllWindowsStatusBarItemParams}. The owner must be loaded.
|
|
143
|
+
* @returns The {@link AllWindowsStatusBarItemComponent}. Call its {@link AllWindowsStatusBarItemComponent.refresh} to
|
|
144
|
+
* render every item again, or remove it from the owner to stop early.
|
|
145
|
+
*/
|
|
146
|
+
export declare function registerAllWindowsStatusBarItem(params: RegisterAllWindowsStatusBarItemParams): AllWindowsStatusBarItemComponent;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
|
|
33
|
+
import { Platform } from "obsidian";
|
|
34
|
+
import { AllWindowsEventComponent } from "./all-windows-event-component.mjs";
|
|
35
|
+
import { ComponentEx } from "./component-ex.mjs";
|
|
36
|
+
const WINDOW_STATUS_BAR_CSS_CLASS = "obsidian-lib-window-status-bar";
|
|
37
|
+
const APP_CONTAINER_CSS_CLASS = "app-container";
|
|
38
|
+
const STATUS_BAR_CSS_CLASS = "status-bar";
|
|
39
|
+
const STATUS_BAR_ITEM_CSS_CLASS = "status-bar-item";
|
|
40
|
+
class AllWindowsStatusBarItemComponent extends ComponentEx {
|
|
41
|
+
/**
|
|
42
|
+
* The Obsidian app instance.
|
|
43
|
+
*/
|
|
44
|
+
app;
|
|
45
|
+
/**
|
|
46
|
+
* The CSS classes added to each item.
|
|
47
|
+
*/
|
|
48
|
+
itemClasses;
|
|
49
|
+
/**
|
|
50
|
+
* Renders the item of one window.
|
|
51
|
+
*/
|
|
52
|
+
renderItem;
|
|
53
|
+
/**
|
|
54
|
+
* Whether a status bar is created in a window that has none.
|
|
55
|
+
*/
|
|
56
|
+
shouldCreateMissingStatusBar;
|
|
57
|
+
itemElsByWindow = /* @__PURE__ */ new Map();
|
|
58
|
+
/**
|
|
59
|
+
* Creates a new instance of the `AllWindowsStatusBarItemComponent` class.
|
|
60
|
+
*
|
|
61
|
+
* @param params - The {@link AllWindowsStatusBarItemComponentConstructorParams}.
|
|
62
|
+
*/
|
|
63
|
+
constructor(params) {
|
|
64
|
+
super();
|
|
65
|
+
this.app = params.app;
|
|
66
|
+
this.renderItem = params.render;
|
|
67
|
+
this.shouldCreateMissingStatusBar = params.shouldCreateMissingStatusBar ?? true;
|
|
68
|
+
this.itemClasses = [
|
|
69
|
+
STATUS_BAR_ITEM_CSS_CLASS,
|
|
70
|
+
...params.pluginId === void 0 ? [] : [getPluginStatusBarItemCssClass(params.pluginId)],
|
|
71
|
+
...params.cls ?? []
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Gets the item of a window.
|
|
76
|
+
*
|
|
77
|
+
* @param win - The window.
|
|
78
|
+
* @returns The item, or `null` when the window has none.
|
|
79
|
+
*/
|
|
80
|
+
getItemEl(win) {
|
|
81
|
+
return this.itemElsByWindow.get(win) ?? null;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Gets the items of every window that has one.
|
|
85
|
+
*
|
|
86
|
+
* @returns The items.
|
|
87
|
+
*/
|
|
88
|
+
getItemEls() {
|
|
89
|
+
return [...this.itemElsByWindow.values()];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates the item in every window, now and as popouts open. A no-op on mobile.
|
|
93
|
+
*/
|
|
94
|
+
onload() {
|
|
95
|
+
super.onload();
|
|
96
|
+
if (Platform.isMobile) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const allWindowsEventComponent = this.addChild(new AllWindowsEventComponent(this.app));
|
|
100
|
+
allWindowsEventComponent.registerAllWindowsHandler((win) => this.attach(win));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Renders the item of every window again.
|
|
104
|
+
*/
|
|
105
|
+
refresh() {
|
|
106
|
+
for (const [win, el] of this.itemElsByWindow) {
|
|
107
|
+
this.renderItem({ el, win });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
attach(win) {
|
|
111
|
+
const statusBarEl = this.findOrCreateStatusBar(win.document);
|
|
112
|
+
if (!statusBarEl) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const el = statusBarEl.createDiv({ cls: [...this.itemClasses] });
|
|
116
|
+
this.itemElsByWindow.set(win, el);
|
|
117
|
+
this.renderItem({ el, win });
|
|
118
|
+
return () => {
|
|
119
|
+
this.itemElsByWindow.delete(win);
|
|
120
|
+
el.remove();
|
|
121
|
+
if (statusBarEl.classList.contains(WINDOW_STATUS_BAR_CSS_CLASS) && !statusBarEl.querySelector(`:scope > .${STATUS_BAR_ITEM_CSS_CLASS}`)) {
|
|
122
|
+
statusBarEl.remove();
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
findOrCreateStatusBar(doc) {
|
|
127
|
+
const appContainerEl = doc.body.querySelector(`:scope > .${APP_CONTAINER_CSS_CLASS}`);
|
|
128
|
+
if (!appContainerEl) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const statusBarEl = appContainerEl.querySelector(`:scope > .${STATUS_BAR_CSS_CLASS}`);
|
|
132
|
+
if (statusBarEl) {
|
|
133
|
+
return statusBarEl;
|
|
134
|
+
}
|
|
135
|
+
if (!this.shouldCreateMissingStatusBar) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return appContainerEl.createDiv({ cls: [STATUS_BAR_CSS_CLASS, WINDOW_STATUS_BAR_CSS_CLASS] });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function getPluginStatusBarItemCssClass(pluginId) {
|
|
142
|
+
return `plugin-${pluginId.toLowerCase().replace(/[^_a-zA-Z0-9-]/, "-")}`;
|
|
143
|
+
}
|
|
144
|
+
function registerAllWindowsStatusBarItem(params) {
|
|
145
|
+
const { component, ...constructorParams } = params;
|
|
146
|
+
return component.addChild(new AllWindowsStatusBarItemComponent(constructorParams));
|
|
147
|
+
}
|
|
148
|
+
export {
|
|
149
|
+
AllWindowsStatusBarItemComponent,
|
|
150
|
+
WINDOW_STATUS_BAR_CSS_CLASS,
|
|
151
|
+
getPluginStatusBarItemCssClass,
|
|
152
|
+
registerAllWindowsStatusBarItem
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2FsbC13aW5kb3dzLXN0YXR1cy1iYXItaXRlbS1jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNob3dzIG9uZSBzdGF0dXMtYmFyIGl0ZW0gaW4gdGhlIG1haW4gd2luZG93IGFuZCBpbiBldmVyeSBkZXNrdG9wIHBvcG91dCwgaW5jbHVkaW5nIHBvcG91dHMgb3BlbmVkIGxhdGVyLCBhbmRcbiAqIHJlbW92ZXMgb25seSBpdHMgb3duIGl0ZW1zIHdoZW4gYSB3aW5kb3cgY2xvc2VzIG9yIHRoZSBjb21wb25lbnQgdW5sb2Fkcy5cbiAqXG4gKiBSZWFkIGZyb20gT2JzaWRpYW4gYDEuMTUuMWA6IHRoZSBtYWluIHdpbmRvdyBidWlsZHMgYGJvZHkgPiAuYXBwLWNvbnRhaW5lciA+IC5zdGF0dXMtYmFyYCwgYW5kXG4gKiBgUGx1Z2luLmFkZFN0YXR1c0Jhckl0ZW1gIGlzIGEgYC5zdGF0dXMtYmFyLWl0ZW1gIGNyZWF0ZWQgaW4gaXQuIEEgcG9wb3V0IGJ1aWxkcyBgYm9keSA+IC5hcHAtY29udGFpbmVyYCB3aXRoIHRoZVxuICogd29ya3NwYWNlIG9ubHksIGFuZCAqKm5vIHN0YXR1cyBiYXIqKi4gYGFwcC5jc3NgIHN0eWxlcyBgLnN0YXR1cy1iYXJgIHdpdGhvdXQgc2NvcGluZyBpdCB0byBhIHdpbmRvdywgc28gYVxuICogYC5zdGF0dXMtYmFyYCBjcmVhdGVkIGluc2lkZSBhIHBvcG91dCdzIGAuYXBwLWNvbnRhaW5lcmAgbG9va3MgYW5kIHNpdHMgZXhhY3RseSBsaWtlIHRoZSBtYWluIG9uZS4gQnkgZGVmYXVsdFxuICogdGhpcyBjb21wb25lbnQgY3JlYXRlcyB0aGF0IGJhciBpbiBhIHBvcG91dCB0aGF0IGxhY2tzIG9uZSwgYW5kIG1hcmtzIGl0IHdpdGhcbiAqIHtAbGluayBXSU5ET1dfU1RBVFVTX0JBUl9DU1NfQ0xBU1N9LiBUaGUgbWFya2VyIGlzIGEgd2lyZSBjb25zdGFudCBzaGFyZWQgYnkgZXZlcnkgY29weSBvZiB0aGlzIGxpYnJhcnk6IGFueSBjb3B5XG4gKiByZXVzZXMgYSBtYXJrZWQgYmFyLCBhbmQgd2hpY2hldmVyIGNvcHkgcmVtb3ZlcyB0aGUgbGFzdCBpdGVtIGZyb20gaXQgcmVtb3ZlcyB0aGUgYmFyIHRvby5cbiAqXG4gKiBNb2JpbGUgaGFzIG5vIHBvcG91dHMsIGFuZCBgYXBwLmNzc2AgaGlkZXMgYC5zdGF0dXMtYmFyYCB1bmRlciBgLmlzLW1vYmlsZWAsIHNvIG9uIG1vYmlsZSB0aGUgY29tcG9uZW50IGNyZWF0ZXNcbiAqIG5vdGhpbmcgYW5kIG5ldmVyIGNhbGxzIHRoZSByZW5kZXIgY2FsbGJhY2suXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIENvbXBvbmVudFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBBbGxXaW5kb3dzRXZlbnRDb21wb25lbnQgfSBmcm9tICcuL2FsbC13aW5kb3dzLWV2ZW50LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiBUaGUgY2xhc3MgdGhhdCBtYXJrcyBhIHN0YXR1cyBiYXIgdGhpcyBsaWJyYXJ5IGNyZWF0ZWQgaW4gYSB3aW5kb3cgdGhhdCBoYWQgbm9uZS5cbiAqIE90aGVyIGNvcGllcyBvZiB0aGUgbGlicmFyeSBtYXRjaCBpdCwgc28gaXRzIHZhbHVlIG11c3QgbmV2ZXIgY2hhbmdlLlxuICovXG5leHBvcnQgY29uc3QgV0lORE9XX1NUQVRVU19CQVJfQ1NTX0NMQVNTID0gJ29ic2lkaWFuLWxpYi13aW5kb3ctc3RhdHVzLWJhcic7XG5cbmNvbnN0IEFQUF9DT05UQUlORVJfQ1NTX0NMQVNTID0gJ2FwcC1jb250YWluZXInO1xuY29uc3QgU1RBVFVTX0JBUl9DU1NfQ0xBU1MgPSAnc3RhdHVzLWJhcic7XG5jb25zdCBTVEFUVVNfQkFSX0lURU1fQ1NTX0NMQVNTID0gJ3N0YXR1cy1iYXItaXRlbSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBBbGxXaW5kb3dzU3RhdHVzQmFySXRlbUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1Db21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEV4dHJhIENTUyBjbGFzc2VzIGZvciBlYWNoIGl0ZW0uXG4gICAqL1xuICByZWFkb25seSBjbHM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC4gV2hlbiBnaXZlbiwgZWFjaCBpdGVtIGdldHMgdGhlIGBwbHVnaW4tPGlkPmAgY2xhc3MgdGhhdCBgUGx1Z2luLmFkZFN0YXR1c0Jhckl0ZW1gIGFkZHMsIHNvXG4gICAqIHRoZW1lcyBhbmQgQ1NTIHNuaXBwZXRzIHRoYXQgdGFyZ2V0IHRoZSBwbHVnaW4ncyBzdGF0dXMtYmFyIGl0ZW1zIG1hdGNoIHRoZXNlIHRvby5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBpdGVtIG9mIG9uZSB3aW5kb3cuIENhbGxlZCB3aGVuIHRoZSBpdGVtIGlzIGNyZWF0ZWQgYW5kIGFnYWluIGJ5XG4gICAqIHtAbGluayBBbGxXaW5kb3dzU3RhdHVzQmFySXRlbUNvbXBvbmVudC5yZWZyZXNofSwgc28gaXQgbXVzdCBiZSBzYWZlIHRvIGNhbGwgcmVwZWF0ZWRseSBvbiB0aGUgc2FtZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGl0ZW0gYW5kIGl0cyB3aW5kb3cuXG4gICAqL1xuICByZWFkb25seSByZW5kZXI6IChwYXJhbXM6IEFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtUmVuZGVyUGFyYW1zKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNyZWF0ZSBhIHN0YXR1cyBiYXIgaW4gYSB3aW5kb3cgdGhhdCBoYXMgbm9uZSwgYXMgZXZlcnkgcG9wb3V0IGluIE9ic2lkaWFuIGAxLjE1LjFgIGRvZXMuXG4gICAqIFdoZW4gYGZhbHNlYCwgc3VjaCBhIHdpbmRvdyBnZXRzIG5vIGl0ZW0uIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZENyZWF0ZU1pc3NpbmdTdGF0dXNCYXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIHtAbGluayBBbGxXaW5kb3dzU3RhdHVzQmFySXRlbUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zLnJlbmRlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1SZW5kZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHN0YXR1cy1iYXIgaXRlbSBvd25lZCBieSB0aGlzIGNvbXBvbmVudCBpbiB7QGxpbmsgd2lufS5cbiAgICovXG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogVGhlIHdpbmRvdyB0aGUgaXRlbSBpcyBpbi4gVXNlIGl0cyBkb2N1bWVudCBmb3IgYW55dGhpbmcgdGhlIHJlbmRlciBjcmVhdGVzIG91dHNpZGUgdGhlIGl0ZW0uXG4gICAqL1xuICByZWFkb25seSB3aW46IFdpbmRvdztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJBbGxXaW5kb3dzU3RhdHVzQmFySXRlbX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJBbGxXaW5kb3dzU3RhdHVzQmFySXRlbVBhcmFtcyBleHRlbmRzIEFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB0aGF0IG93bnMgdGhlIGl0ZW1zOiB0aGV5IGFyZSByZW1vdmVkIHdoZW4gaXQgdW5sb2Fkcy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudDogQ29tcG9uZW50O1xufVxuXG4vKipcbiAqIFNob3dzIG9uZSBzdGF0dXMtYmFyIGl0ZW0gaW4gdGhlIG1haW4gd2luZG93IGFuZCBpbiBldmVyeSBkZXNrdG9wIHBvcG91dCB3aGlsZSBsb2FkZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBBbGxXaW5kb3dzU3RhdHVzQmFySXRlbUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3NlcyBhZGRlZCB0byBlYWNoIGl0ZW0uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXRlbUNsYXNzZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBpdGVtIG9mIG9uZSB3aW5kb3cuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVuZGVySXRlbTogKHBhcmFtczogQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1SZW5kZXJQYXJhbXMpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBzdGF0dXMgYmFyIGlzIGNyZWF0ZWQgaW4gYSB3aW5kb3cgdGhhdCBoYXMgbm9uZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzaG91bGRDcmVhdGVNaXNzaW5nU3RhdHVzQmFyOiBib29sZWFuO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbUVsc0J5V2luZG93ID0gbmV3IE1hcDxXaW5kb3csIEhUTUxFbGVtZW50PigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBgQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1Db21wb25lbnRgIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBBbGxXaW5kb3dzU3RhdHVzQmFySXRlbUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zfS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnJlbmRlckl0ZW0gPSBwYXJhbXMucmVuZGVyO1xuICAgIHRoaXMuc2hvdWxkQ3JlYXRlTWlzc2luZ1N0YXR1c0JhciA9IHBhcmFtcy5zaG91bGRDcmVhdGVNaXNzaW5nU3RhdHVzQmFyID8/IHRydWU7XG4gICAgdGhpcy5pdGVtQ2xhc3NlcyA9IFtcbiAgICAgIFNUQVRVU19CQVJfSVRFTV9DU1NfQ0xBU1MsXG4gICAgICAuLi5wYXJhbXMucGx1Z2luSWQgPT09IHVuZGVmaW5lZCA/IFtdIDogW2dldFBsdWdpblN0YXR1c0Jhckl0ZW1Dc3NDbGFzcyhwYXJhbXMucGx1Z2luSWQpXSxcbiAgICAgIC4uLnBhcmFtcy5jbHMgPz8gW11cbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW0gb2YgYSB3aW5kb3cuXG4gICAqXG4gICAqIEBwYXJhbSB3aW4gLSBUaGUgd2luZG93LlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSwgb3IgYG51bGxgIHdoZW4gdGhlIHdpbmRvdyBoYXMgbm9uZS5cbiAgICovXG4gIHB1YmxpYyBnZXRJdGVtRWwod2luOiBXaW5kb3cpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLml0ZW1FbHNCeVdpbmRvdy5nZXQod2luKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW1zIG9mIGV2ZXJ5IHdpbmRvdyB0aGF0IGhhcyBvbmUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBnZXRJdGVtRWxzKCk6IEhUTUxFbGVtZW50W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5pdGVtRWxzQnlXaW5kb3cudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGl0ZW0gaW4gZXZlcnkgd2luZG93LCBub3cgYW5kIGFzIHBvcG91dHMgb3Blbi4gQSBuby1vcCBvbiBtb2JpbGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9ubG9hZCgpO1xuXG4gICAgaWYgKFBsYXRmb3JtLmlzTW9iaWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWxsV2luZG93c0V2ZW50Q29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChuZXcgQWxsV2luZG93c0V2ZW50Q29tcG9uZW50KHRoaXMuYXBwKSk7XG4gICAgYWxsV2luZG93c0V2ZW50Q29tcG9uZW50LnJlZ2lzdGVyQWxsV2luZG93c0hhbmRsZXIoKHdpbikgPT4gdGhpcy5hdHRhY2god2luKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgaXRlbSBvZiBldmVyeSB3aW5kb3cgYWdhaW4uXG4gICAqL1xuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFt3aW4sIGVsXSBvZiB0aGlzLml0ZW1FbHNCeVdpbmRvdykge1xuICAgICAgdGhpcy5yZW5kZXJJdGVtKHsgZWwsIHdpbiB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaCh3aW46IFdpbmRvdyk6ICgoKSA9PiB2b2lkKSB8IG51bGwge1xuICAgIGNvbnN0IHN0YXR1c0JhckVsID0gdGhpcy5maW5kT3JDcmVhdGVTdGF0dXNCYXIod2luLmRvY3VtZW50KTtcbiAgICBpZiAoIXN0YXR1c0JhckVsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBlbCA9IHN0YXR1c0JhckVsLmNyZWF0ZURpdih7IGNsczogWy4uLnRoaXMuaXRlbUNsYXNzZXNdIH0pO1xuICAgIHRoaXMuaXRlbUVsc0J5V2luZG93LnNldCh3aW4sIGVsKTtcbiAgICB0aGlzLnJlbmRlckl0ZW0oeyBlbCwgd2luIH0pO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMuaXRlbUVsc0J5V2luZG93LmRlbGV0ZSh3aW4pO1xuICAgICAgZWwucmVtb3ZlKCk7XG4gICAgICBpZiAoc3RhdHVzQmFyRWwuY2xhc3NMaXN0LmNvbnRhaW5zKFdJTkRPV19TVEFUVVNfQkFSX0NTU19DTEFTUykgJiYgIXN0YXR1c0JhckVsLnF1ZXJ5U2VsZWN0b3IoYDpzY29wZSA+IC4ke1NUQVRVU19CQVJfSVRFTV9DU1NfQ0xBU1N9YCkpIHtcbiAgICAgICAgc3RhdHVzQmFyRWwucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE9yQ3JlYXRlU3RhdHVzQmFyKGRvYzogRG9jdW1lbnQpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IGFwcENvbnRhaW5lckVsID0gZG9jLmJvZHkucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYDpzY29wZSA+IC4ke0FQUF9DT05UQUlORVJfQ1NTX0NMQVNTfWApO1xuICAgIGlmICghYXBwQ29udGFpbmVyRWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1c0JhckVsID0gYXBwQ29udGFpbmVyRWwucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYDpzY29wZSA+IC4ke1NUQVRVU19CQVJfQ1NTX0NMQVNTfWApO1xuICAgIGlmIChzdGF0dXNCYXJFbCkge1xuICAgICAgcmV0dXJuIHN0YXR1c0JhckVsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zaG91bGRDcmVhdGVNaXNzaW5nU3RhdHVzQmFyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBwQ29udGFpbmVyRWwuY3JlYXRlRGl2KHsgY2xzOiBbU1RBVFVTX0JBUl9DU1NfQ0xBU1MsIFdJTkRPV19TVEFUVVNfQkFSX0NTU19DTEFTU10gfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjbGFzcyBgUGx1Z2luLmFkZFN0YXR1c0Jhckl0ZW1gIGFkZHMgdG8gYSBwbHVnaW4ncyBzdGF0dXMtYmFyIGl0ZW1zLlxuICogSXQgY29waWVzIE9ic2lkaWFuIGAxLjE1LjFgIGV4YWN0bHksIGluY2x1ZGluZyB0aGF0IG9ubHkgdGhlIGZpcnN0IGRpc2FsbG93ZWQgY2hhcmFjdGVyIGlzIHJlcGxhY2VkLlxuICpcbiAqIEBwYXJhbSBwbHVnaW5JZCAtIFRoZSBwbHVnaW4gaWQuXG4gKiBAcmV0dXJucyBUaGUgQ1NTIGNsYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luU3RhdHVzQmFySXRlbUNzc0NsYXNzKHBsdWdpbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHBsdWdpbi0ke3BsdWdpbklkLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15fYS16QS1aMC05LV0vLCAnLScpfWA7XG59XG5cbi8qKlxuICogU2hvd3Mgb25lIHN0YXR1cy1iYXIgaXRlbSBpbiB0aGUgbWFpbiB3aW5kb3cgYW5kIGluIGV2ZXJ5IGRlc2t0b3AgcG9wb3V0LCBpbmNsdWRpbmcgcG9wb3V0cyBvcGVuZWQgbGF0ZXIsIHVudGlsXG4gKiB0aGUgb3duaW5nIGNvbXBvbmVudCB1bmxvYWRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlZ2lzdGVyQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1QYXJhbXN9LiBUaGUgb3duZXIgbXVzdCBiZSBsb2FkZWQuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtQ29tcG9uZW50fS4gQ2FsbCBpdHMge0BsaW5rIEFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtQ29tcG9uZW50LnJlZnJlc2h9IHRvXG4gKiAgIHJlbmRlciBldmVyeSBpdGVtIGFnYWluLCBvciByZW1vdmUgaXQgZnJvbSB0aGUgb3duZXIgdG8gc3RvcCBlYXJseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQWxsV2luZG93c1N0YXR1c0Jhckl0ZW0ocGFyYW1zOiBSZWdpc3RlckFsbFdpbmRvd3NTdGF0dXNCYXJJdGVtUGFyYW1zKTogQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1Db21wb25lbnQge1xuICBjb25zdCB7IGNvbXBvbmVudCwgLi4uY29uc3RydWN0b3JQYXJhbXMgfSA9IHBhcmFtcztcbiAgcmV0dXJuIGNvbXBvbmVudC5hZGRDaGlsZChuZXcgQWxsV2luZG93c1N0YXR1c0Jhckl0ZW1Db21wb25lbnQoY29uc3RydWN0b3JQYXJhbXMpKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkEsU0FBUyxnQkFBZ0I7QUFFekIsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyxtQkFBbUI7QUFNckIsTUFBTSw4QkFBOEI7QUFFM0MsTUFBTSwwQkFBMEI7QUFDaEMsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSw0QkFBNEI7QUFpRTNCLE1BQU0seUNBQXlDLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUk3QztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBLEVBRUYsa0JBQWtCLG9CQUFJLElBQXlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT3pELFlBQVksUUFBMkQ7QUFDNUUsVUFBTTtBQUNOLFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssYUFBYSxPQUFPO0FBQ3pCLFNBQUssK0JBQStCLE9BQU8sZ0NBQWdDO0FBQzNFLFNBQUssY0FBYztBQUFBLE1BQ2pCO0FBQUEsTUFDQSxHQUFHLE9BQU8sYUFBYSxTQUFZLENB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
|
|
@@ -72,6 +72,17 @@ export declare class ComponentEx extends Component implements Disposable {
|
|
|
72
72
|
* @returns A {@link Promise} that resolves when the component is loaded.
|
|
73
73
|
*/
|
|
74
74
|
onloadAsync(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Registers an {@link AsyncDisposable} so its disposal starts when this component unloads, and returns it unchanged.
|
|
77
|
+
*
|
|
78
|
+
* Obsidian's unload is synchronous, so nothing awaits the disposal: it runs detached, and a failure is reported, never
|
|
79
|
+
* rethrown. See the free function {@link registerAsyncDisposable}, which this delegates to.
|
|
80
|
+
*
|
|
81
|
+
* @typeParam TAsyncDisposable - The type of the async disposable.
|
|
82
|
+
* @param asyncDisposable - The async disposable to register.
|
|
83
|
+
* @returns The same async disposable, for chaining.
|
|
84
|
+
*/
|
|
85
|
+
registerAsyncDisposable<TAsyncDisposable extends AsyncDisposable>(asyncDisposable: TAsyncDisposable): TAsyncDisposable;
|
|
75
86
|
/**
|
|
76
87
|
* Registers a {@link Disposable} so it is disposed when this component unloads, and returns it unchanged.
|
|
77
88
|
*
|
|
@@ -38,7 +38,6 @@ ensureBrowserProcess();
|
|
|
38
38
|
|
|
39
39
|
import { createAggregateError } from "@mnaoumov/typescript-lib/aggregate-error";
|
|
40
40
|
import { snapshot } from "@mnaoumov/typescript-lib/array";
|
|
41
|
-
import { dispose } from "@mnaoumov/typescript-lib/disposable";
|
|
42
41
|
import {
|
|
43
42
|
ErrorWrapper,
|
|
44
43
|
SilentError
|
|
@@ -48,6 +47,10 @@ import {
|
|
|
48
47
|
noopAsyncSingletonPromise
|
|
49
48
|
} from "@mnaoumov/typescript-lib/function";
|
|
50
49
|
import { Component } from "obsidian";
|
|
50
|
+
import {
|
|
51
|
+
registerAsyncDisposable,
|
|
52
|
+
registerDisposable
|
|
53
|
+
} from "../disposable.mjs";
|
|
51
54
|
class ComponentEx extends Component {
|
|
52
55
|
childrenSet = /* @__PURE__ */ new Set();
|
|
53
56
|
hasBeenLoaded = false;
|
|
@@ -158,6 +161,19 @@ class ComponentEx extends Component {
|
|
|
158
161
|
onloadAsync() {
|
|
159
162
|
return noopAsyncSingletonPromise;
|
|
160
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Registers an {@link AsyncDisposable} so its disposal starts when this component unloads, and returns it unchanged.
|
|
166
|
+
*
|
|
167
|
+
* Obsidian's unload is synchronous, so nothing awaits the disposal: it runs detached, and a failure is reported, never
|
|
168
|
+
* rethrown. See the free function {@link registerAsyncDisposable}, which this delegates to.
|
|
169
|
+
*
|
|
170
|
+
* @typeParam TAsyncDisposable - The type of the async disposable.
|
|
171
|
+
* @param asyncDisposable - The async disposable to register.
|
|
172
|
+
* @returns The same async disposable, for chaining.
|
|
173
|
+
*/
|
|
174
|
+
registerAsyncDisposable(asyncDisposable) {
|
|
175
|
+
return registerAsyncDisposable(this, asyncDisposable);
|
|
176
|
+
}
|
|
161
177
|
/**
|
|
162
178
|
* Registers a {@link Disposable} so it is disposed when this component unloads, and returns it unchanged.
|
|
163
179
|
*
|
|
@@ -170,10 +186,7 @@ class ComponentEx extends Component {
|
|
|
170
186
|
* @returns The same disposable, for chaining.
|
|
171
187
|
*/
|
|
172
188
|
registerDisposable(disposable) {
|
|
173
|
-
this
|
|
174
|
-
dispose(disposable);
|
|
175
|
-
});
|
|
176
|
-
return disposable;
|
|
189
|
+
return registerDisposable(this, disposable);
|
|
177
190
|
}
|
|
178
191
|
/**
|
|
179
192
|
* Removes a child component.
|
|
@@ -407,4 +420,4 @@ class ComponentEx extends Component {
|
|
|
407
420
|
export {
|
|
408
421
|
ComponentEx
|
|
409
422
|
};
|
|
410
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgY3JlYXRlQWdncmVnYXRlRXJyb3IgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYWdncmVnYXRlLWVycm9yJztcbmltcG9ydCB7IHNuYXBzaG90IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FycmF5JztcbmltcG9ydCB7IGRpc3Bvc2UgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGlzcG9zYWJsZSc7XG5pbXBvcnQge1xuICBFcnJvcldyYXBwZXIsXG4gIFNpbGVudEVycm9yXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9lcnJvcic7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdG9vbGtpdC9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXggLS0gRXh0ZW5kZWQgYmFzZSBjbGFzcy5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRFeCBleHRlbmRzIENvbXBvbmVudCBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuU2V0ID0gbmV3IFNldDxDb21wb25lbnQ+KCk7XG4gIHByaXZhdGUgaGFzQmVlbkxvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGxvYWRFcnJvcnM6IEVycm9yW10gPSBbXTtcbiAgcHJpdmF0ZSBsb2FkUHJvbWlzZTogbnVsbCB8IFByb21pc2U8dm9pZD4gPSBudWxsO1xuICBwcml2YXRlIHBhcmVudENvbXBvbmVudDogQ29tcG9uZW50RXggfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogTWlycm9ycyB0aGUgbmF0aXZlIGBDb21wb25lbnQuYWRkQ2hpbGRgIGNvbnRyYWN0OiBpZiB0aGlzIGNvbXBvbmVudCBpcyBhbHJlYWR5IGxvYWRlZCwgdGhlIGNoaWxkIGlzIGxvYWRlZFxuICAgKiBpbW1lZGlhdGVseSwgc28gYGNoaWxkLl9sb2FkZWRgIGlzIHNldCBiZWZvcmUgdGhpcyBtZXRob2QgcmV0dXJucyBldmVuIHdoZW4gdGhpcyBjb21wb25lbnQgaGFzIGFzeW5jIGxvYWQgbG9naWMuXG4gICAqIFRoZSBjaGlsZCdzIGFzeW5jIHRhaWwgKGlmIGFueSkgaXMgc2VxdWVuY2VkIGludG8gdGhlIGxvYWQgcHJvbWlzZSBzbyBhIGxhdGVyIHtAbGluayBsb2FkV2l0aFByb21pc2VzfSBjYWxsIGF3YWl0cyBpdC5cbiAgICpcbiAgICogQWRkaW5nIGEgY2hpbGQgQkVGT1JFIHRoZSBmaXJzdCBsb2FkIGlzIGxlZ2l0aW1hdGU6IHRoZSBjaGlsZCBpcyBxdWV1ZWQgYW5kIGxvYWRlZCB3aGVuIHRoaXMgY29tcG9uZW50IGxvYWRzLlxuICAgKiBBZGRpbmcgb25lIEFGVEVSIHRoaXMgY29tcG9uZW50IGhhcyBiZWVuIHVubG9hZGVkIGlzIG5vdCDigJQgdGhlIGNoaWxkIHdvdWxkIG5ldmVyIGJlIGxvYWRlZCBhbmQgbmV2ZXIgdW5sb2FkZWRcbiAgICogKGEgbGVhayksIHNvIGl0IGlzIHJlZnVzZWQgd2l0aCBhIHtAbGluayBTaWxlbnRFcnJvcn0uIFRoZSB0eXBpY2FsIHNvdXJjZSBvZiBzdWNoIGEgY2FsbCBpcyBhbiBgYXN5bmNgIG1ldGhvZFxuICAgKiB0aGF0IHdhcyBzdXNwZW5kZWQgb24gYW4gYGF3YWl0YCB3aGVuIHRoZSBjb21wb25lbnQgZ290IHVubG9hZGVkIGFuZCB0aGVuIHJlc3VtZWQgb24gdGhlIGRlYWQgY29tcG9uZW50OyB0aGVcbiAgICoge0BsaW5rIFNpbGVudEVycm9yfSB1bndpbmRzIGl0IHF1aWV0bHkgKHNlZSB7QGxpbmsgaXNVbmxvYWRlZH0pLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqIEB0aHJvd3MgQSB7QGxpbmsgU2lsZW50RXJyb3J9IGlmIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bmxvYWRlZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTaWxlbnRFcnJvcignQ29tcG9uZW50IGlzIGFscmVhZHkgdW5sb2FkZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5hZGQoY29tcG9uZW50KTtcbiAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50RXgpIHtcbiAgICAgIGNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQgPSB0aGlzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcCh0aGlzLmV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgY29tcG9uZW50IGlzIGEgZGlyZWN0IGNoaWxkIG9mIHRoaXMgb25lLlxuICAgKlxuICAgKiBPbmx5IERJUkVDVCBjaGlsZHJlbiBhcmUgcmVwb3J0ZWQg4oCUIHRoaXMgaXMgYW4gb3duZXJzaGlwIHF1ZXN0aW9uLCBub3QgYSBjb250YWlubWVudCBvbmUuIFRoZSBjYWxsZXIgdGhhdFxuICAgKiBuZWVkcyBpdCBpcyBvbmUgaG9sZGluZyBzZXZlcmFsIHBhcmVudHMgYW5kIGRlY2lkaW5nIHdoaWNoIG9mIHRoZW0gYSBjb21wb25lbnQgYmVsb25ncyB0bywgYW5kIGZvciB0aGF0IGFcbiAgICogZ3JhbmRjaGlsZCBpcyB0aGUgd3JvbmcgYW5zd2VyOiByZW1vdmluZyBpdCBmcm9tIHRoZSBwYXJlbnQgdGhhdCBtZXJlbHkgY29udGFpbnMgaXRzIHBhcmVudCB3b3VsZCBmYWlsLlxuICAgKlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0byBsb29rIGZvci5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGEgZGlyZWN0IGNoaWxkIG9mIHRoaXMgb25lLlxuICAgKi9cbiAgcHVibGljIGhhc0NoaWxkKGNvbXBvbmVudDogQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5TZXQuaGFzKGNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgRGVzcGl0ZSB0aGUgZGVjbGFyZWQgYHZvaWRgIHJldHVybiB0eXBlLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBvciBgbnVsbGAgaWYgdGhlIGNvbXBvbmVudCBpcyBmdWxseSBzeW5jaHJvbm91cy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBsb2FkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMuaGFzQmVlbkxvYWRlZCA9IHRydWU7XG4gICAgdGhpcy5yZXNldExvYWRTdGF0ZSgpO1xuXG4gICAgdGhpcy5vbmxvYWQoKTtcblxuICAgIGNvbnN0IG9ubG9hZEFzeW5jUHJvbWlzZSA9IHRoaXMub25sb2FkQXN5bmMoKTtcbiAgICBpZiAob25sb2FkQXN5bmNQcm9taXNlICE9PSBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlKSB7XG4gICAgICB0aGlzLmFwcGVuZEVhZ2VyTG9hZFN0ZXAob25sb2FkQXN5bmNQcm9taXNlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHNuYXBzaG90KHRoaXMuX2NoaWxkcmVuKSkge1xuICAgICAgdGhpcy5hcHBlbmRTZXF1ZW50aWFsTG9hZFN0ZXAoKCkgPT4gdGhpcy5leHRyYWN0TG9hZFByb21pc2FibGUoY2hpbGQpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2FkUHJvbWlzZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZSwgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gV2UgbmVlZCB0byBieXBhc3MgdHlwZSBzeXN0ZW0gdG8gcmV0dXJuIGBQcm9taXNlPHZvaWQ+YC5cbiAgICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlIGFzIHVua25vd24gYXMgdm9pZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudCB3aXRoIHByb21pc2VzLlxuICAgKlxuICAgKiBVbmxpa2Uge0BsaW5rIGxvYWR9LCB0aGlzIG1ldGhvZCBuZXZlciByZWplY3RzIHdpdGggYW4gaW5kaXZpZHVhbCBlcnJvcjogZXZlcnkgZmFpbHVyZSByYWlzZWQgYnkge0BsaW5rIG9ubG9hZEFzeW5jfVxuICAgKiBvciBhIGNoaWxkJ3MgbG9hZCBpcyBjb2xsZWN0ZWQsIGFuZCBvbmNlIGV2ZXJ5dGhpbmcgc2V0dGxlcyB0aGUgcmV0dXJuZWQge0BsaW5rIFByb21pc2V9IHJlamVjdHMgd2l0aCBhIHNpbmdsZVxuICAgKiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IGhvbGRpbmcgYWxsIG9mIHRoZW0uIE5vbi1gRXJyb3JgIHRocm93YWJsZXMgYXJlIG5vcm1hbGl6ZWQgdmlhIHtAbGluayBFcnJvcldyYXBwZXIuY3JlYXRlfS5cbiAgICpcbiAgICogVGhlIGBBZ2dyZWdhdGVFcnJvcmAgaXMgYnVpbHQgYnkge0BsaW5rIGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yfSwgc28gaXRzIG93biBgbWVzc2FnZWAgbmFtZXMgdGhlIGZhaWx1cmUgcmF0aGVyXG4gICAqIHRoYW4gYmVpbmcgZW1wdHk6IGEgbG9uZSBmYWlsdXJlIGxlbmRzIGl0cyBtZXNzYWdlIHRvIGV2ZXJ5IGFnZ3JlZ2F0ZSBhYm92ZSBpdCwgd2hpY2ggaXMgd2hhdCBsZXRzIGEgY2FsbGVyXG4gICAqIGFzc2VydCBvbiB0aGUgc2VudGVuY2UgdGhhdCB3YXMgYWN0dWFsbHkgdGhyb3duIHdpdGhvdXQgd2Fsa2luZyBgZXJyb3JzYCB0byBmaW5kIGl0LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBhbmQgaXRzIGNoaWxkcmVuIGZpbmlzaCBsb2FkaW5nLCByZWplY3RzIHdpdGggYW4ge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfSBpZiBhbnkgbG9hZCBzdGVwIGZhaWxlZCwgb3IgYG51bGxgIGlmIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjaGlsZHJlbiBkb24ndCB1c2UgYGFzeW5jYCBsb2dpYyBhbmQgbm9uZSBmYWlsZWQgc3luY2hyb25vdXNseS5cbiAgICovXG4gIHB1YmxpYyBsb2FkV2l0aFByb21pc2VzKCk6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvYWQoKTtcblxuICAgIGNvbnN0IGxvYWRQcm9taXNlID0gdGhpcy5sb2FkUHJvbWlzZTtcbiAgICBpZiAoIWxvYWRQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDAgPyBQcm9taXNlLnJlamVjdChjcmVhdGVBZ2dyZWdhdGVFcnJvcih0aGlzLmxvYWRFcnJvcnMpKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvYWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKHRoaXMubG9hZEVycm9ycyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmNocm9ub3VzbHkgbG9hZHMgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogT3ZlcnJpZGUgdG8gYWRkIGFzeW5jIGxvYWQgbG9naWMsIHdoaWNoIGlzIGV4ZWN1dGVkIGFmdGVyIHtAbGluayBDb21wb25lbnQub25sb2FkfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIG9ubG9hZEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHtAbGluayBEaXNwb3NhYmxlfSBzbyBpdCBpcyBkaXNwb3NlZCB3aGVuIHRoaXMgY29tcG9uZW50IHVubG9hZHMsIGFuZCByZXR1cm5zIGl0IHVuY2hhbmdlZC5cbiAgICpcbiAgICogVGhlIHJlY3VycmluZyBcInRpZSBhIGRpc3Bvc2FibGUgdG8gdGhlIGNvbXBvbmVudCdzIGxpZmVjeWNsZSwgdGhlbiBrZWVwIHVzaW5nIGl0XCIgaWRpb206IHRoZSBkaXNwb3NhYmxlIGlzXG4gICAqIGRpc3Bvc2VkIG9uIHtAbGluayBDb21wb25lbnQudW5sb2FkfSAob3IgZWFybGllciwgaWYgdGhlIGNhbGxlciBkaXNwb3NlcyBpdCBkaXJlY3RseSDigJQgZGlzcG9zZSBpcyBleHBlY3RlZCB0b1xuICAgKiBiZSBpZGVtcG90ZW50KS4gR3VhcmQgd2l0aCB7QGxpbmsgZW5zdXJlTG9hZGVkfSBhdCB0aGUgY2FsbCBzaXRlIHdoZW4gcmVnaXN0ZXJpbmcgYmVmb3JlIGxvYWQgd291bGQgYmUgdW5zYWZlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFREaXNwb3NhYmxlIC0gVGhlIHR5cGUgb2YgdGhlIGRpc3Bvc2FibGUuXG4gICAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gVGhlIGRpc3Bvc2FibGUgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIFRoZSBzYW1lIGRpc3Bvc2FibGUsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckRpc3Bvc2FibGU8VERpc3Bvc2FibGUgZXh0ZW5kcyBEaXNwb3NhYmxlPihkaXNwb3NhYmxlOiBURGlzcG9zYWJsZSk6IFREaXNwb3NhYmxlIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIGRpc3Bvc2UoZGlzcG9zYWJsZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpc3Bvc2FibGU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgc3VwZXIucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgICB0aGlzLmNoaWxkcmVuU2V0LmRlbGV0ZShjb21wb25lbnQpO1xuICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRFeCAmJiBjb21wb25lbnQucGFyZW50Q29tcG9uZW50ID09PSB0aGlzKSB7XG4gICAgICBjb21wb25lbnQucGFyZW50Q29tcG9uZW50ID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy51bmxvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLCB0aHJvd2luZyBpZiBpdCBpcyBub3QuXG4gICAqXG4gICAqIFVzZSB0aGlzIHRvIGd1YXJkIHB1YmxpYyBtZXRob2RzIHRoYXQgcmVnaXN0ZXIgdGVhcmRvd24tYmVhcmluZyByZXNvdXJjZXMgKHZpYSB7QGxpbmsgQ29tcG9uZW50LnJlZ2lzdGVyfSxcbiAgICoge0BsaW5rIENvbXBvbmVudC5yZWdpc3RlckV2ZW50fSwge0BsaW5rIENvbXBvbmVudC5yZWdpc3RlckRvbUV2ZW50fSwgZXRjLikuIFJlZ2lzdGVyaW5nIGJlZm9yZSBsb2FkIGlzIHVuc2FmZTpcbiAgICoge0BsaW5rIENvbXBvbmVudC51bmxvYWR9IGlzIGEgbm8tb3Agd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBub3QgbG9hZGVkLCBzbyBhbnkgdGVhcmRvd24gcmVnaXN0ZXJlZCBiZWZvcmVoYW5kIHdvdWxkXG4gICAqIG5ldmVyIHJ1biBpZiB0aGUgY29tcG9uZW50IGlzIHVubG9hZGVkIHdpdGhvdXQgZmlyc3QgYmVpbmcgbG9hZGVkLlxuICAgKlxuICAgKiBUaGUgdHdvIG5vdC1sb2FkZWQgY2FzZXMgYXJlIGRlbGliZXJhdGVseSBkaXN0aW5ndWlzaGVkLiBBIGNvbXBvbmVudCB0aGF0IHdhcyBORVZFUiBsb2FkZWQgaXMgYSBnZW51aW5lXG4gICAqIHByb2dyYW1taW5nIGVycm9yLCBzbyBpdCB0aHJvd3MgYSBsb3VkIHtAbGluayBFcnJvcn0uIEEgY29tcG9uZW50IHRoYXQgaGFzIEFMUkVBRFkgYmVlbiB1bmxvYWRlZCBpcyBub3Qg4oCUXG4gICAqIGl0IGlzIHRoZSBleHBlY3RlZCBvdXRjb21lIG9mIHdvcmsgdGhhdCBvdXRsaXZlZCBpdHMgY29tcG9uZW50IChlLmcuIGFuIGBhc3luY2AgbWV0aG9kIHN1c3BlbmRlZCBvbiBhblxuICAgKiBgYXdhaXRgIHdoaWxlIHRoZSBjb21wb25lbnQgd2FzIHVubG9hZGVkLCB0aGVuIHJlc3VtZWQpIOKAlCBzbyBpdCB0aHJvd3MgYSB7QGxpbmsgU2lsZW50RXJyb3J9LCB3aGljaFxuICAgKiBgaGFuZGxlU2lsZW50RXJyb3JgIHN1cHByZXNzZXMsIGxldHRpbmcgc3VjaCB3b3JrIHVud2luZCBxdWlldGx5IGluc3RlYWQgb2YgcmVwb3J0aW5nIGFuIGFzeW5jIGVycm9yLlxuICAgKlxuICAgKiBAdGhyb3dzIEFuIHtAbGluayBFcnJvcn0gaWYgdGhlIGNvbXBvbmVudCB3YXMgbmV2ZXIgbG9hZGVkLCBvciBhIHtAbGluayBTaWxlbnRFcnJvcn0gaWYgaXQgaGFzIGFscmVhZHkgYmVlbiB1bmxvYWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBlbnN1cmVMb2FkZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNpbGVudEVycm9yKCdDb21wb25lbnQgaXMgYWxyZWFkeSB1bmxvYWRlZCcpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IGlzIG5vdCBsb2FkZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgc2V0dGxlcyBvbmNlIG5laXRoZXIgdGhpcyBjb21wb25lbnQgbm9yIGFueSB7QGxpbmsgQ29tcG9uZW50RXh9IGFuY2VzdG9yIGhhcyBhIGxvYWRcbiAgICogaW4gZmxpZ2h0LCBvciBgbnVsbGAgd2hlbiBub25lIG9mIHRoZW0gaGFzIG9uZSByaWdodCBub3cuXG4gICAqXG4gICAqIHtAbGluayBnZXRJbkZsaWdodExvYWRQcm9taXNlfSBjb3ZlcnMgdGhpcyBjb21wb25lbnQncyBPV04gbG9hZCBvbmx5LiBBIHNpYmxpbmcgdGhpcyBjb21wb25lbnQgZGVwZW5kcyBvbiDigJQgbW9zdFxuICAgKiBvZnRlbiB0aGUgb3duaW5nIHBsdWdpbidzIHNldHRpbmdzIGNvbXBvbmVudCwgd2hpY2ggcmVhZHMgYGRhdGEuanNvbmAgYXN5bmNocm9ub3VzbHkg4oCUIGlzIG91dHNpZGUgaXQsIGJ1dCBpdCBpc1xuICAgKiBpbnNpZGUgdGhlIGxvYWQgb2YgYSBzaGFyZWQgYW5jZXN0b3IuIFdhaXRpbmcgZm9yIGV2ZXJ5IGFuY2VzdG9yIHRoZXJlZm9yZSB3YWl0cyBmb3IgdGhlIHdob2xlIHRyZWUgdGhlIGNvbXBvbmVudFxuICAgKiB3YXMgbG9hZGVkIGFzIHBhcnQgb2Y6IHVuZGVyIGBQbHVnaW5CYXNlYCB0aGUgY2hhaW4gZW5kcyBhdCB0aGUgcGx1Z2luJ3MgdW5pdmVyc2FsIHdyYXBwZXIsIHdob3NlIGxvYWQgY292ZXJzIHRoZVxuICAgKiBkZXBlbmRlbmN5IGdhdGUsIHRoZSBmZWF0dXJlIHN1cmZhY2UgYW5kIGBvbmxvYWRJbXBsYC5cbiAgICpcbiAgICogVGhlIGNoYWluIGlzIGZvbGxvd2VkIHRocm91Z2gge0BsaW5rIENvbXBvbmVudEV4fSBwYXJlbnRzIG9ubHkuIEEgcGxhaW4ge0BsaW5rIENvbXBvbmVudH0gYW55d2hlcmUgYmV0d2VlbiB0aGlzXG4gICAqIGNvbXBvbmVudCBhbmQgYW4gYW5jZXN0b3IgZW5kcyBpdCwgYmVjYXVzZSBhIHBsYWluIGNvbXBvbmVudCByZWNvcmRzIG5vIHBhcmVudCBhbmQgZXhwb3NlcyBubyBsb2FkIHByb21pc2UuXG4gICAqXG4gICAqIE5ldmVyIGF3YWl0IHRoaXMgZnJvbSBpbnNpZGUgYSBsb2FkIHN0ZXAgb2Ygb25lIG9mIHRob3NlIGFuY2VzdG9yczogdGhlIGFuY2VzdG9yJ3MgbG9hZCB3b3VsZCB0aGVuIGJlIHdhaXRpbmcgZm9yXG4gICAqIGl0c2VsZi4gSXQgaXMgbWVhbnQgZm9yIHdvcmsgc2NoZWR1bGVkIE9VVFNJREUgdGhlIGxvYWQsIHN1Y2ggYXMgYSBsYXlvdXQtcmVhZHkgaGFuZGxlci5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHByb21pc2UsIG9yIGBudWxsYCBpZiBub3RoaW5nIGluIHRoZSBhbmNlc3RyeSBpcyBsb2FkaW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpID8gdGhpcy53YWl0Rm9yQW5jZXN0cnlMb2FkKCkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbXBvbmVudCdzIGluLWZsaWdodCBsb2FkIHtAbGluayBQcm9taXNlfSAoaXRzIHtAbGluayBvbmxvYWRBc3luY30gcGx1cyBjaGlsZHJlbiksIG9yIGBudWxsYCB3aGVuXG4gICAqIG5vdGhpbmcgaXMgbG9hZGluZyDigJQgZWl0aGVyIHRoZSBjb21wb25lbnQgbG9hZGVkIGZ1bGx5IHN5bmNocm9ub3VzbHkgb3IgaXRzIGFzeW5jIGxvYWQgaGFzIGFscmVhZHkgc2V0dGxlZC5cbiAgICpcbiAgICogTGV0cyBhIGNhbGxlciBzY2hlZHVsZWQgd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBzdGlsbCBsb2FkaW5nIGF3YWl0IHRoZSBhc3luYyBsb2FkIHRhaWwgYmVmb3JlIGFjdGluZywgaW5zdGVhZCBvZlxuICAgKiByYWNpbmcgaXQ6IHtAbGluayBDb21wb25lbnQub25sb2FkfSBoYXMgcnVuIChzbyBgX2xvYWRlZGAgaXMgc2V0KSBidXQge0BsaW5rIG9ubG9hZEFzeW5jfSBtYXkgbm90IGhhdmUgZmluaXNoZWQuXG4gICAqXG4gICAqIEl0IGNvdmVycyB0aGlzIGNvbXBvbmVudCdzIE9XTiBsb2FkIG9ubHkuIEEgY2FsbGVyIHRoYXQgYWxzbyBkZXBlbmRzIG9uIGEgc2libGluZydzIHN0YXRlIOKAlCBhIGxheW91dC1yZWFkeSBoYW5kbGVyXG4gICAqIHJlYWRpbmcgc2V0dGluZ3MgaXMgdGhlIGNvbW1vbiBvbmUg4oCUIHdhbnRzIHtAbGluayBnZXRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2V9LCB3aGljaCBgTGF5b3V0UmVhZHlDb21wb25lbnRgXG4gICAqIHVzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpbi1mbGlnaHQgbG9hZCBwcm9taXNlLCBvciBgbnVsbGAgaWYgbm8gbG9hZCBpcyBpbiBmbGlnaHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0SW5GbGlnaHRMb2FkUHJvbWlzZSgpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBtb3N0IHJlY2VudCBsb2FkIHJlY29yZGVkIGFueSBmYWlsdXJlLlxuICAgKlxuICAgKiBSZWZsZWN0cyB0aGUgb3V0Y29tZSBvZiB0aGUgbGFzdCB7QGxpbmsgbG9hZH0gLyB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc306IGB0cnVlYCB3aGVuIHtAbGluayBvbmxvYWRBc3luY30gb3IgYW55XG4gICAqIGNoaWxkJ3MgbG9hZCB0aHJldyAoc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseSkuIFVubGlrZSB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc30sIHJlYWRpbmcgdGhpcyBkb2VzIE5PVFxuICAgKiByZS1yYWlzZSB0aGUgY29sbGVjdGVkIGVycm9ycyDigJQgaXQgbGV0cyBhIGJ5c3RhbmRlciAoZS5nLiBhIGxheW91dC1yZWFkeSBoYW5kbGVyIGF3YWl0aW5nIHRoZSBpbi1mbGlnaHQgbG9hZCkgdGVsbFxuICAgKiB3aGV0aGVyIHRoZSBsb2FkIHN1Y2NlZWRlZCB3aXRob3V0IGFkb3B0aW5nIGEgZmFpbHVyZSB0aGF0IHRoZSBsb2FkJ3Mgb3duZXIgaXMgYWxyZWFkeSByZXNwb25zaWJsZSBmb3IuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbGFzdCBsb2FkIHJlY29yZGVkIGF0IGxlYXN0IG9uZSBlcnJvciwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFzTG9hZEVycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bmxvYWRlZCwgYXMgb3Bwb3NlZCB0byBzaW1wbHkgbm90IGhhdmluZyBiZWVuIGxvYWRlZCB5ZXQuXG4gICAqXG4gICAqIEJvdGggc3RhdGVzIGxlYXZlIGBfbG9hZGVkYCBmYWxzZSwgYnV0IHRoZXkgbWVhbiBvcHBvc2l0ZSB0aGluZ3M6IGEgY29tcG9uZW50IHRoYXQgd2FzIG5ldmVyIGxvYWRlZCBpcyBzdGlsbFxuICAgKiBhaGVhZCBvZiBpdHMgbGlmZWN5Y2xlIChxdWV1ZWluZyBjaGlsZHJlbiBiZWZvcmUgbG9hZCBpcyBsZWdpdGltYXRlKSwgd2hpbGUgYW4gdW5sb2FkZWQgb25lIGlzIGJlaGluZCBpdCBhbmRcbiAgICogbXVzdCBub3QgYmUgdXNlZCBhbnkgZnVydGhlci4gVGhlIGRpc3RpbmN0aW9uIGlzIHRyYWNrZWQgYnkgYSBmbGFnIHNldCBpbiB7QGxpbmsgbG9hZH0sIE5PVCBieSBhblxuICAgKiB7QGxpbmsgQ29tcG9uZW50Lm9udW5sb2FkfSBvdmVycmlkZSwgYmVjYXVzZSBzdWJjbGFzc2VzIG92ZXJyaWRlIGBvbnVubG9hZGAgYW5kIG1heSBub3QgY2FsbCBgc3VwZXJgLlxuICAgKlxuICAgKiBVc2UgaXQgaW4gYSBsb25nLXJ1bm5pbmcgYGFzeW5jYCBtZXRob2QgdG8gYWJhbmRvbiB3b3JrIHdob3NlIGNvbXBvbmVudCB3YXMgdW5sb2FkZWQgbWlkLWZsaWdodCwgd2hlblxuICAgKiB1bndpbmRpbmcgdmlhIHRoZSB7QGxpbmsgU2lsZW50RXJyb3J9IHRocm93biBieSB7QGxpbmsgZW5zdXJlTG9hZGVkfSAvIHtAbGluayBhZGRDaGlsZH0gaXMgbm90IGRlc2lyZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY29tcG9uZW50IHdhcyBsb2FkZWQgYXQgc29tZSBwb2ludCBhbmQgaXMgY3VycmVudGx5IHVubG9hZGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBpc1VubG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0JlZW5Mb2FkZWQgJiYgIXRoaXMuX2xvYWRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXF1ZW5jZXMgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgc3RlcCBpbnRvIHRoZSBsb2FkIHByb21pc2UuXG4gICAqXG4gICAqIFRoZSBzdGVwIGlzIHByZXN1bWVkIHRvIGhhdmUgc3RhcnRlZCBzeW5jaHJvbm91c2x5IChzbyBhbnkgYF9sb2FkZWRgIGZsYWcgaXQgc2V0cyBpcyBhbHJlYWR5IHZpc2libGUpOyBvbmx5IHRoZVxuICAgKiBhd2FpdGluZyBvZiBpdHMgYXN5bmMgdGFpbCBpcyBzZXF1ZW5jZWQgaGVyZS5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlIC0gVGhlIHJlc3VsdCBvZiBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCBzdGVwLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBlbmRFYWdlckxvYWRTdGVwKGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IGNhcHR1cmVkID0gdGhpcy5jYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZSk7XG4gICAgaWYgKCFjYXB0dXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5sb2FkUHJvbWlzZTtcbiAgICB0aGlzLnNldExvYWRQcm9taXNlKHByZXZpb3VzID8gcHJldmlvdXMudGhlbigoKSA9PiBjYXB0dXJlZCkgOiBjYXB0dXJlZCk7XG4gIH1cblxuICAvKipcbiAgICogU2VxdWVuY2VzIGEgZGVmZXJyZWQgbG9hZCBzdGVwIGludG8gdGhlIGxvYWQgcHJvbWlzZSwgcnVubmluZyBpdCBvbmx5IGFmdGVyIHByZXZpb3VzbHktYXBwZW5kZWQgc3RlcHMgc2V0dGxlLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGdW5jdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBlbmRTZXF1ZW50aWFsTG9hZFN0ZXAobG9hZFByb21pc2FibGVGdW5jdGlvbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICB0aGlzLnNldExvYWRQcm9taXNlKHByZXZpb3VzLnRoZW4oKCkgPT4gdGhpcy5ydW5BbmRDYXB0dXJlKGxvYWRQcm9taXNhYmxlRnVuY3Rpb24pKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FwdHVyZWQgPSB0aGlzLmNhcHR1cmVTeW5jKGxvYWRQcm9taXNhYmxlRnVuY3Rpb24pO1xuICAgIGlmIChjYXB0dXJlZCkge1xuICAgICAgdGhpcy5zZXRMb2FkUHJvbWlzZShjYXB0dXJlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgYSBsb2FkIGZhaWx1cmUuXG4gICAqXG4gICAqIEEgZmFpbHVyZSByYWlzZWQgYnkgYSBjaGlsZCB7QGxpbmsgQ29tcG9uZW50RXh9IGlzIGl0c2VsZiBhbiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9OyBpdCBpcyByZWNvcmRlZCBhcy1pcyBzbyB0aGVcbiAgICogZ3JvdXBpbmcgYnkgY2hpbGQgY29tcG9uZW50IGlzIHByZXNlcnZlZCAob3duIGZhaWx1cmVzIHN0YXkgZmxhdCwgY2hpbGQtc3VidHJlZSBmYWlsdXJlcyBzdGF5IG5lc3RlZCkuXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvciAtIFRoZSB0aHJvd24gdmFsdWUgdG8gcmVjb3JkLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlRXJyb3IoZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRFcnJvcnMucHVzaChFcnJvcldyYXBwZXIuY3JlYXRlKGVycm9yKSk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHMgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgcmVzdWx0IHNvIGl0IG5ldmVyIHJlamVjdHM6IGFueSBmYWlsdXJlIGlzIHJlY29yZGVkIGludG8gYGxvYWRFcnJvcnNgLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGUgLSBUaGUgbG9hZCByZXN1bHQgdG8gb2JzZXJ2ZS5cbiAgICogQHJldHVybnMgQSBuZXZlci1yZWplY3Rpbmcge0BsaW5rIFByb21pc2V9LCBvciBgbnVsbGAgaWYgdGhlIHJlc3VsdCBpcyBmdWxseSBzeW5jaHJvbm91cy5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBsb2FkUHJvbWlzYWJsZSA9PT0gbnVsbCB8fCBsb2FkUHJvbWlzYWJsZSA9PT0gdW5kZWZpbmVkXG4gICAgICA/IG51bGxcbiAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGxvYWRQcm9taXNhYmxlKS50aGVuKG5vb3ApLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgbG9hZCBzdGVwIHN5bmNocm9ub3VzbHksIHJlY29yZGluZyBhIHN5bmNocm9ub3VzIHRocm93LCBhbmQgd3JhcHMgYW55IGFzeW5jIHRhaWwgc28gaXQgbmV2ZXIgcmVqZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRnVuY3Rpb24gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICogQHJldHVybnMgQSBuZXZlci1yZWplY3Rpbmcge0BsaW5rIFByb21pc2V9LCBvciBgbnVsbGAgaWYgdGhlIHN0ZXAgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVTeW5jKGxvYWRQcm9taXNhYmxlRnVuY3Rpb246ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD47XG4gICAgdHJ5IHtcbiAgICAgIGxvYWRQcm9taXNhYmxlID0gbG9hZFByb21pc2FibGVGdW5jdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZSk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQ6IENvbXBvbmVudCk6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2hpbGRyZW5TZXQuaGFzKGNvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWNvbmZ1c2luZy12b2lkLWV4cHJlc3Npb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvbiAtLSBJdCBjYW4gYmUgYFByb21pc2U8dm9pZD5gIGluIHJ1bnRpbWUuIFdhbnQgZXhwbGljaXRseSBjYXN0IHRvIHNob3cgd2Uga25vdyBpdCBtYXkgYmUgcHJvbWlzZSwgZGVzcGl0ZSB0aGUgZGVjbGFyZWQgdHlwZSBgdm9pZGAuXG4gICAgcmV0dXJuIGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudEV4ID8gY29tcG9uZW50LmxvYWRXaXRoUHJvbWlzZXMoKSA6IGNvbXBvbmVudC5sb2FkKCkgYXMgUHJvbWlzYWJsZTx2b2lkPjtcbiAgfVxuXG4gIHByaXZhdGUgZmluZEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZFByb21pc2UgPz8gdGhpcy5wYXJlbnRDb21wb25lbnQ/LmZpbmRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldExvYWRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRFcnJvcnMgPSBbXTtcbiAgICB0aGlzLmxvYWRQcm9taXNlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgZGVmZXJyZWQgbG9hZCBzdGVwLCByZWNvcmRpbmcgYSBzeW5jaHJvbm91cyB0aHJvdyBvciBhbiBhc3luYyByZWplY3Rpb24gd2l0aG91dCBldmVyIHJlLXRocm93aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGdW5jdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBydW5BbmRDYXB0dXJlKGxvYWRQcm9taXNhYmxlRnVuY3Rpb246ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uKCkgPz8gdW5kZWZpbmVkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9hZFByb21pc2UobG9hZFByb21pc2U6IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBsb2FkUHJvbWlzZVdpdGhSZXNldDogUHJvbWlzZTx2b2lkPiA9IGxvYWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubG9hZFByb21pc2UgPT09IGxvYWRQcm9taXNlV2l0aFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9hZFByb21pc2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubG9hZFByb21pc2UgPSBsb2FkUHJvbWlzZVdpdGhSZXNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBd2FpdHMgaW4tZmxpZ2h0IGxvYWRzIGluIHRoZSBhbmNlc3RyeSB1bnRpbCBub25lIGlzIGxlZnQuXG4gICAqXG4gICAqIExvb3BlZCByYXRoZXIgdGhhbiBhd2FpdGVkIG9uY2UsIGJlY2F1c2UgYW4gYW5jZXN0b3IncyBsb2FkIGNhbiBncm93IHdoaWxlIGl0IGlzIGJlaW5nIGF3YWl0ZWQ6IGEgY2hpbGQgYWRkZWRcbiAgICogdG8gYW4gYWxyZWFkeS1sb2FkZWQgY29tcG9uZW50IGFwcGVuZHMgaXRzIGFzeW5jIHRhaWwgdG8gdGhhdCBjb21wb25lbnQncyBsb2FkIHByb21pc2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JBbmNlc3RyeUxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGxvYWRQcm9taXNlID0gdGhpcy5maW5kSW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCk7XG4gICAgd2hpbGUgKGxvYWRQcm9taXNlKSB7XG4gICAgICBhd2FpdCBsb2FkUHJvbWlzZTtcbiAgICAgIGxvYWRQcm9taXNlID0gdGhpcy5maW5kSW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsU0FBUyw0QkFBNEI7QUFDckMsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxlQUFlO0FBQ3hCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGlCQUFpQjtBQU1uQixNQUFNLG9CQUFvQixVQUFnQztBQUFBLEVBQzlDLGNBQWMsb0JBQUksSUFBZTtBQUFBLEVBQzFDLGdCQUFnQjtBQUFBLEVBQ2hCLGFBQXNCLENBQUM7QUFBQSxFQUN2QixjQUFvQztBQUFBLEVBQ3BDLGtCQUFzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBb0I5QixTQUF1QyxXQUFtQztBQUN4RixRQUFJLEtBQUssV0FBVyxHQUFHO0FBQ3JCLFlBQU0sSUFBSSxZQUFZLCtCQUErQjtBQUFBLElBQ3ZEO0FBRUEsU0FBSyxVQUFVLEtBQUssU0FBUztBQUM3QixTQUFLLFlBQVksSUFBSSxTQUFTO0FBQzlCLFFBQUkscUJBQXFCLGFBQWE7QUFD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
|
|
423
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgY3JlYXRlQWdncmVnYXRlRXJyb3IgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYWdncmVnYXRlLWVycm9yJztcbmltcG9ydCB7IHNuYXBzaG90IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FycmF5JztcbmltcG9ydCB7XG4gIEVycm9yV3JhcHBlcixcbiAgU2lsZW50RXJyb3Jcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7XG4gIG5vb3AsXG4gIG5vb3BBc3luY1NpbmdsZXRvblByb21pc2Vcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgcmVnaXN0ZXJBc3luY0Rpc3Bvc2FibGUsXG4gIHJlZ2lzdGVyRGlzcG9zYWJsZVxufSBmcm9tICcuLi9kaXNwb3NhYmxlLnRzJztcblxuLyoqXG4gKiBFeHRlbmRlZCBDb21wb25lbnRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi10b29sa2l0L3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeCAtLSBFeHRlbmRlZCBiYXNlIGNsYXNzLlxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEV4IGV4dGVuZHMgQ29tcG9uZW50IGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW5TZXQgPSBuZXcgU2V0PENvbXBvbmVudD4oKTtcbiAgcHJpdmF0ZSBoYXNCZWVuTG9hZGVkID0gZmFsc2U7XG4gIHByaXZhdGUgbG9hZEVycm9yczogRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIGxvYWRQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG4gIHByaXZhdGUgcGFyZW50Q29tcG9uZW50OiBDb21wb25lbnRFeCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBNaXJyb3JzIHRoZSBuYXRpdmUgYENvbXBvbmVudC5hZGRDaGlsZGAgY29udHJhY3Q6IGlmIHRoaXMgY29tcG9uZW50IGlzIGFscmVhZHkgbG9hZGVkLCB0aGUgY2hpbGQgaXMgbG9hZGVkXG4gICAqIGltbWVkaWF0ZWx5LCBzbyBgY2hpbGQuX2xvYWRlZGAgaXMgc2V0IGJlZm9yZSB0aGlzIG1ldGhvZCByZXR1cm5zIGV2ZW4gd2hlbiB0aGlzIGNvbXBvbmVudCBoYXMgYXN5bmMgbG9hZCBsb2dpYy5cbiAgICogVGhlIGNoaWxkJ3MgYXN5bmMgdGFpbCAoaWYgYW55KSBpcyBzZXF1ZW5jZWQgaW50byB0aGUgbG9hZCBwcm9taXNlIHNvIGEgbGF0ZXIge0BsaW5rIGxvYWRXaXRoUHJvbWlzZXN9IGNhbGwgYXdhaXRzIGl0LlxuICAgKlxuICAgKiBBZGRpbmcgYSBjaGlsZCBCRUZPUkUgdGhlIGZpcnN0IGxvYWQgaXMgbGVnaXRpbWF0ZTogdGhlIGNoaWxkIGlzIHF1ZXVlZCBhbmQgbG9hZGVkIHdoZW4gdGhpcyBjb21wb25lbnQgbG9hZHMuXG4gICAqIEFkZGluZyBvbmUgQUZURVIgdGhpcyBjb21wb25lbnQgaGFzIGJlZW4gdW5sb2FkZWQgaXMgbm90IOKAlCB0aGUgY2hpbGQgd291bGQgbmV2ZXIgYmUgbG9hZGVkIGFuZCBuZXZlciB1bmxvYWRlZFxuICAgKiAoYSBsZWFrKSwgc28gaXQgaXMgcmVmdXNlZCB3aXRoIGEge0BsaW5rIFNpbGVudEVycm9yfS4gVGhlIHR5cGljYWwgc291cmNlIG9mIHN1Y2ggYSBjYWxsIGlzIGFuIGBhc3luY2AgbWV0aG9kXG4gICAqIHRoYXQgd2FzIHN1c3BlbmRlZCBvbiBhbiBgYXdhaXRgIHdoZW4gdGhlIGNvbXBvbmVudCBnb3QgdW5sb2FkZWQgYW5kIHRoZW4gcmVzdW1lZCBvbiB0aGUgZGVhZCBjb21wb25lbnQ7IHRoZVxuICAgKiB7QGxpbmsgU2lsZW50RXJyb3J9IHVud2luZHMgaXQgcXVpZXRseSAoc2VlIHtAbGluayBpc1VubG9hZGVkfSkuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGFkZGVkIGNvbXBvbmVudC5cbiAgICogQHRocm93cyBBIHtAbGluayBTaWxlbnRFcnJvcn0gaWYgdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubG9hZGVkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFkZENoaWxkPFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IFRDb21wb25lbnQge1xuICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNpbGVudEVycm9yKCdDb21wb25lbnQgaXMgYWxyZWFkeSB1bmxvYWRlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goY29tcG9uZW50KTtcbiAgICB0aGlzLmNoaWxkcmVuU2V0LmFkZChjb21wb25lbnQpO1xuICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRFeCkge1xuICAgICAgY29tcG9uZW50LnBhcmVudENvbXBvbmVudCA9IHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xvYWRlZCkge1xuICAgICAgdGhpcy5hcHBlbmRFYWdlckxvYWRTdGVwKHRoaXMuZXh0cmFjdExvYWRQcm9taXNhYmxlKGNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBjb21wb25lbnQgaXMgYSBkaXJlY3QgY2hpbGQgb2YgdGhpcyBvbmUuXG4gICAqXG4gICAqIE9ubHkgRElSRUNUIGNoaWxkcmVuIGFyZSByZXBvcnRlZCDigJQgdGhpcyBpcyBhbiBvd25lcnNoaXAgcXVlc3Rpb24sIG5vdCBhIGNvbnRhaW5tZW50IG9uZS4gVGhlIGNhbGxlciB0aGF0XG4gICAqIG5lZWRzIGl0IGlzIG9uZSBob2xkaW5nIHNldmVyYWwgcGFyZW50cyBhbmQgZGVjaWRpbmcgd2hpY2ggb2YgdGhlbSBhIGNvbXBvbmVudCBiZWxvbmdzIHRvLCBhbmQgZm9yIHRoYXQgYVxuICAgKiBncmFuZGNoaWxkIGlzIHRoZSB3cm9uZyBhbnN3ZXI6IHJlbW92aW5nIGl0IGZyb20gdGhlIHBhcmVudCB0aGF0IG1lcmVseSBjb250YWlucyBpdHMgcGFyZW50IHdvdWxkIGZhaWwuXG4gICAqXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHRvIGxvb2sgZm9yLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYSBkaXJlY3QgY2hpbGQgb2YgdGhpcyBvbmUuXG4gICAqL1xuICBwdWJsaWMgaGFzQ2hpbGQoY29tcG9uZW50OiBDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlblNldC5oYXMoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBEZXNwaXRlIHRoZSBkZWNsYXJlZCBgdm9pZGAgcmV0dXJuIHR5cGUsIHRoaXMgbWV0aG9kIHJldHVybnMgYSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkIG9yIGBudWxsYCBpZiB0aGUgY29tcG9uZW50IGlzIGZ1bGx5IHN5bmNocm9ub3VzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGxvYWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy5oYXNCZWVuTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2V0TG9hZFN0YXRlKCk7XG5cbiAgICB0aGlzLm9ubG9hZCgpO1xuXG4gICAgY29uc3Qgb25sb2FkQXN5bmNQcm9taXNlID0gdGhpcy5vbmxvYWRBc3luYygpO1xuICAgIGlmIChvbmxvYWRBc3luY1Byb21pc2UgIT09IG5vb3BBc3luY1NpbmdsZXRvblByb21pc2UpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcChvbmxvYWRBc3luY1Byb21pc2UpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc25hcHNob3QodGhpcy5fY2hpbGRyZW4pKSB7XG4gICAgICB0aGlzLmFwcGVuZFNlcXVlbnRpYWxMb2FkU3RlcCgoKSA9PiB0aGlzLmV4dHJhY3RMb2FkUHJvbWlzYWJsZShjaGlsZCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvYWRQcm9taXNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlLCBuby1yZXN0cmljdGVkLXN5bnRheCAtLSBXZSBuZWVkIHRvIGJ5cGFzcyB0eXBlIHN5c3RlbSB0byByZXR1cm4gYFByb21pc2U8dm9pZD5gLlxuICAgICAgcmV0dXJuIHRoaXMubG9hZFByb21pc2UgYXMgdW5rbm93biBhcyB2b2lkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgY29tcG9uZW50IHdpdGggcHJvbWlzZXMuXG4gICAqXG4gICAqIFVubGlrZSB7QGxpbmsgbG9hZH0sIHRoaXMgbWV0aG9kIG5ldmVyIHJlamVjdHMgd2l0aCBhbiBpbmRpdmlkdWFsIGVycm9yOiBldmVyeSBmYWlsdXJlIHJhaXNlZCBieSB7QGxpbmsgb25sb2FkQXN5bmN9XG4gICAqIG9yIGEgY2hpbGQncyBsb2FkIGlzIGNvbGxlY3RlZCwgYW5kIG9uY2UgZXZlcnl0aGluZyBzZXR0bGVzIHRoZSByZXR1cm5lZCB7QGxpbmsgUHJvbWlzZX0gcmVqZWN0cyB3aXRoIGEgc2luZ2xlXG4gICAqIHtAbGluayBBZ2dyZWdhdGVFcnJvcn0gaG9sZGluZyBhbGwgb2YgdGhlbS4gTm9uLWBFcnJvcmAgdGhyb3dhYmxlcyBhcmUgbm9ybWFsaXplZCB2aWEge0BsaW5rIEVycm9yV3JhcHBlci5jcmVhdGV9LlxuICAgKlxuICAgKiBUaGUgYEFnZ3JlZ2F0ZUVycm9yYCBpcyBidWlsdCBieSB7QGxpbmsgY3JlYXRlQWdncmVnYXRlRXJyb3J9LCBzbyBpdHMgb3duIGBtZXNzYWdlYCBuYW1lcyB0aGUgZmFpbHVyZSByYXRoZXJcbiAgICogdGhhbiBiZWluZyBlbXB0eTogYSBsb25lIGZhaWx1cmUgbGVuZHMgaXRzIG1lc3NhZ2UgdG8gZXZlcnkgYWdncmVnYXRlIGFib3ZlIGl0LCB3aGljaCBpcyB3aGF0IGxldHMgYSBjYWxsZXJcbiAgICogYXNzZXJ0IG9uIHRoZSBzZW50ZW5jZSB0aGF0IHdhcyBhY3R1YWxseSB0aHJvd24gd2l0aG91dCB3YWxraW5nIGBlcnJvcnNgIHRvIGZpbmQgaXQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4gZmluaXNoIGxvYWRpbmcsIHJlamVjdHMgd2l0aCBhbiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IGlmIGFueSBsb2FkIHN0ZXAgZmFpbGVkLCBvciBgbnVsbGAgaWYgdGhlIGNvbXBvbmVudCBhbmQgaXRzIGNoaWxkcmVuIGRvbid0IHVzZSBgYXN5bmNgIGxvZ2ljIGFuZCBub25lIGZhaWxlZCBzeW5jaHJvbm91c2x5LlxuICAgKi9cbiAgcHVibGljIGxvYWRXaXRoUHJvbWlzZXMoKTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9hZCgpO1xuXG4gICAgY29uc3QgbG9hZFByb21pc2UgPSB0aGlzLmxvYWRQcm9taXNlO1xuICAgIGlmICghbG9hZFByb21pc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRFcnJvcnMubGVuZ3RoID4gMCA/IFByb21pc2UucmVqZWN0KGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKHRoaXMubG9hZEVycm9ycykpIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgY3JlYXRlQWdncmVnYXRlRXJyb3IodGhpcy5sb2FkRXJyb3JzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3luY2hyb25vdXNseSBsb2FkcyB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBPdmVycmlkZSB0byBhZGQgYXN5bmMgbG9hZCBsb2dpYywgd2hpY2ggaXMgZXhlY3V0ZWQgYWZ0ZXIge0BsaW5rIENvbXBvbmVudC5vbmxvYWR9LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgb25sb2FkQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5vb3BBc3luY1NpbmdsZXRvblByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IHNvIGl0cyBkaXNwb3NhbCBzdGFydHMgd2hlbiB0aGlzIGNvbXBvbmVudCB1bmxvYWRzLCBhbmQgcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIE9ic2lkaWFuJ3MgdW5sb2FkIGlzIHN5bmNocm9ub3VzLCBzbyBub3RoaW5nIGF3YWl0cyB0aGUgZGlzcG9zYWw6IGl0IHJ1bnMgZGV0YWNoZWQsIGFuZCBhIGZhaWx1cmUgaXMgcmVwb3J0ZWQsIG5ldmVyXG4gICAqIHJldGhyb3duLiBTZWUgdGhlIGZyZWUgZnVuY3Rpb24ge0BsaW5rIHJlZ2lzdGVyQXN5bmNEaXNwb3NhYmxlfSwgd2hpY2ggdGhpcyBkZWxlZ2F0ZXMgdG8uXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVEFzeW5jRGlzcG9zYWJsZSAtIFRoZSB0eXBlIG9mIHRoZSBhc3luYyBkaXNwb3NhYmxlLlxuICAgKiBAcGFyYW0gYXN5bmNEaXNwb3NhYmxlIC0gVGhlIGFzeW5jIGRpc3Bvc2FibGUgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIFRoZSBzYW1lIGFzeW5jIGRpc3Bvc2FibGUsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckFzeW5jRGlzcG9zYWJsZTxUQXN5bmNEaXNwb3NhYmxlIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlPihhc3luY0Rpc3Bvc2FibGU6IFRBc3luY0Rpc3Bvc2FibGUpOiBUQXN5bmNEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gcmVnaXN0ZXJBc3luY0Rpc3Bvc2FibGUodGhpcywgYXN5bmNEaXNwb3NhYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB7QGxpbmsgRGlzcG9zYWJsZX0gc28gaXQgaXMgZGlzcG9zZWQgd2hlbiB0aGlzIGNvbXBvbmVudCB1bmxvYWRzLCBhbmQgcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFRoZSByZWN1cnJpbmcgXCJ0aWUgYSBkaXNwb3NhYmxlIHRvIHRoZSBjb21wb25lbnQncyBsaWZlY3ljbGUsIHRoZW4ga2VlcCB1c2luZyBpdFwiIGlkaW9tOiB0aGUgZGlzcG9zYWJsZSBpc1xuICAgKiBkaXNwb3NlZCBvbiB7QGxpbmsgQ29tcG9uZW50LnVubG9hZH0gKG9yIGVhcmxpZXIsIGlmIHRoZSBjYWxsZXIgZGlzcG9zZXMgaXQgZGlyZWN0bHkg4oCUIGRpc3Bvc2UgaXMgZXhwZWN0ZWQgdG9cbiAgICogYmUgaWRlbXBvdGVudCkuIEd1YXJkIHdpdGgge0BsaW5rIGVuc3VyZUxvYWRlZH0gYXQgdGhlIGNhbGwgc2l0ZSB3aGVuIHJlZ2lzdGVyaW5nIGJlZm9yZSBsb2FkIHdvdWxkIGJlIHVuc2FmZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBURGlzcG9zYWJsZSAtIFRoZSB0eXBlIG9mIHRoZSBkaXNwb3NhYmxlLlxuICAgKiBAcGFyYW0gZGlzcG9zYWJsZSAtIFRoZSBkaXNwb3NhYmxlIHRvIHJlZ2lzdGVyLlxuICAgKiBAcmV0dXJucyBUaGUgc2FtZSBkaXNwb3NhYmxlLCBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJEaXNwb3NhYmxlPFREaXNwb3NhYmxlIGV4dGVuZHMgRGlzcG9zYWJsZT4oZGlzcG9zYWJsZTogVERpc3Bvc2FibGUpOiBURGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHJlZ2lzdGVyRGlzcG9zYWJsZSh0aGlzLCBkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gcmVtb3ZlLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICBzdXBlci5yZW1vdmVDaGlsZChjb21wb25lbnQpO1xuICAgIHRoaXMuY2hpbGRyZW5TZXQuZGVsZXRlKGNvbXBvbmVudCk7XG4gICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudEV4ICYmIGNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQgPT09IHRoaXMpIHtcbiAgICAgIGNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnVubG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQsIHRocm93aW5nIGlmIGl0IGlzIG5vdC5cbiAgICpcbiAgICogVXNlIHRoaXMgdG8gZ3VhcmQgcHVibGljIG1ldGhvZHMgdGhhdCByZWdpc3RlciB0ZWFyZG93bi1iZWFyaW5nIHJlc291cmNlcyAodmlhIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJ9LFxuICAgKiB7QGxpbmsgQ29tcG9uZW50LnJlZ2lzdGVyRXZlbnR9LCB7QGxpbmsgQ29tcG9uZW50LnJlZ2lzdGVyRG9tRXZlbnR9LCBldGMuKS4gUmVnaXN0ZXJpbmcgYmVmb3JlIGxvYWQgaXMgdW5zYWZlOlxuICAgKiB7QGxpbmsgQ29tcG9uZW50LnVubG9hZH0gaXMgYSBuby1vcCB3aGlsZSB0aGUgY29tcG9uZW50IGlzIG5vdCBsb2FkZWQsIHNvIGFueSB0ZWFyZG93biByZWdpc3RlcmVkIGJlZm9yZWhhbmQgd291bGRcbiAgICogbmV2ZXIgcnVuIGlmIHRoZSBjb21wb25lbnQgaXMgdW5sb2FkZWQgd2l0aG91dCBmaXJzdCBiZWluZyBsb2FkZWQuXG4gICAqXG4gICAqIFRoZSB0d28gbm90LWxvYWRlZCBjYXNlcyBhcmUgZGVsaWJlcmF0ZWx5IGRpc3Rpbmd1aXNoZWQuIEEgY29tcG9uZW50IHRoYXQgd2FzIE5FVkVSIGxvYWRlZCBpcyBhIGdlbnVpbmVcbiAgICogcHJvZ3JhbW1pbmcgZXJyb3IsIHNvIGl0IHRocm93cyBhIGxvdWQge0BsaW5rIEVycm9yfS4gQSBjb21wb25lbnQgdGhhdCBoYXMgQUxSRUFEWSBiZWVuIHVubG9hZGVkIGlzIG5vdCDigJRcbiAgICogaXQgaXMgdGhlIGV4cGVjdGVkIG91dGNvbWUgb2Ygd29yayB0aGF0IG91dGxpdmVkIGl0cyBjb21wb25lbnQgKGUuZy4gYW4gYGFzeW5jYCBtZXRob2Qgc3VzcGVuZGVkIG9uIGFuXG4gICAqIGBhd2FpdGAgd2hpbGUgdGhlIGNvbXBvbmVudCB3YXMgdW5sb2FkZWQsIHRoZW4gcmVzdW1lZCkg4oCUIHNvIGl0IHRocm93cyBhIHtAbGluayBTaWxlbnRFcnJvcn0sIHdoaWNoXG4gICAqIGBoYW5kbGVTaWxlbnRFcnJvcmAgc3VwcHJlc3NlcywgbGV0dGluZyBzdWNoIHdvcmsgdW53aW5kIHF1aWV0bHkgaW5zdGVhZCBvZiByZXBvcnRpbmcgYW4gYXN5bmMgZXJyb3IuXG4gICAqXG4gICAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBpZiB0aGUgY29tcG9uZW50IHdhcyBuZXZlciBsb2FkZWQsIG9yIGEge0BsaW5rIFNpbGVudEVycm9yfSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHVubG9hZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGVuc3VyZUxvYWRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNVbmxvYWRlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2lsZW50RXJyb3IoJ0NvbXBvbmVudCBpcyBhbHJlYWR5IHVubG9hZGVkJyk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgaXMgbm90IGxvYWRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBzZXR0bGVzIG9uY2UgbmVpdGhlciB0aGlzIGNvbXBvbmVudCBub3IgYW55IHtAbGluayBDb21wb25lbnRFeH0gYW5jZXN0b3IgaGFzIGEgbG9hZFxuICAgKiBpbiBmbGlnaHQsIG9yIGBudWxsYCB3aGVuIG5vbmUgb2YgdGhlbSBoYXMgb25lIHJpZ2h0IG5vdy5cbiAgICpcbiAgICoge0BsaW5rIGdldEluRmxpZ2h0TG9hZFByb21pc2V9IGNvdmVycyB0aGlzIGNvbXBvbmVudCdzIE9XTiBsb2FkIG9ubHkuIEEgc2libGluZyB0aGlzIGNvbXBvbmVudCBkZXBlbmRzIG9uIOKAlCBtb3N0XG4gICAqIG9mdGVuIHRoZSBvd25pbmcgcGx1Z2luJ3Mgc2V0dGluZ3MgY29tcG9uZW50LCB3aGljaCByZWFkcyBgZGF0YS5qc29uYCBhc3luY2hyb25vdXNseSDigJQgaXMgb3V0c2lkZSBpdCwgYnV0IGl0IGlzXG4gICAqIGluc2lkZSB0aGUgbG9hZCBvZiBhIHNoYXJlZCBhbmNlc3Rvci4gV2FpdGluZyBmb3IgZXZlcnkgYW5jZXN0b3IgdGhlcmVmb3JlIHdhaXRzIGZvciB0aGUgd2hvbGUgdHJlZSB0aGUgY29tcG9uZW50XG4gICAqIHdhcyBsb2FkZWQgYXMgcGFydCBvZjogdW5kZXIgYFBsdWdpbkJhc2VgIHRoZSBjaGFpbiBlbmRzIGF0IHRoZSBwbHVnaW4ncyB1bml2ZXJzYWwgd3JhcHBlciwgd2hvc2UgbG9hZCBjb3ZlcnMgdGhlXG4gICAqIGRlcGVuZGVuY3kgZ2F0ZSwgdGhlIGZlYXR1cmUgc3VyZmFjZSBhbmQgYG9ubG9hZEltcGxgLlxuICAgKlxuICAgKiBUaGUgY2hhaW4gaXMgZm9sbG93ZWQgdGhyb3VnaCB7QGxpbmsgQ29tcG9uZW50RXh9IHBhcmVudHMgb25seS4gQSBwbGFpbiB7QGxpbmsgQ29tcG9uZW50fSBhbnl3aGVyZSBiZXR3ZWVuIHRoaXNcbiAgICogY29tcG9uZW50IGFuZCBhbiBhbmNlc3RvciBlbmRzIGl0LCBiZWNhdXNlIGEgcGxhaW4gY29tcG9uZW50IHJlY29yZHMgbm8gcGFyZW50IGFuZCBleHBvc2VzIG5vIGxvYWQgcHJvbWlzZS5cbiAgICpcbiAgICogTmV2ZXIgYXdhaXQgdGhpcyBmcm9tIGluc2lkZSBhIGxvYWQgc3RlcCBvZiBvbmUgb2YgdGhvc2UgYW5jZXN0b3JzOiB0aGUgYW5jZXN0b3IncyBsb2FkIHdvdWxkIHRoZW4gYmUgd2FpdGluZyBmb3JcbiAgICogaXRzZWxmLiBJdCBpcyBtZWFudCBmb3Igd29yayBzY2hlZHVsZWQgT1VUU0lERSB0aGUgbG9hZCwgc3VjaCBhcyBhIGxheW91dC1yZWFkeSBoYW5kbGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSwgb3IgYG51bGxgIGlmIG5vdGhpbmcgaW4gdGhlIGFuY2VzdHJ5IGlzIGxvYWRpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0SW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCk6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5maW5kSW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCkgPyB0aGlzLndhaXRGb3JBbmNlc3RyeUxvYWQoKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29tcG9uZW50J3MgaW4tZmxpZ2h0IGxvYWQge0BsaW5rIFByb21pc2V9IChpdHMge0BsaW5rIG9ubG9hZEFzeW5jfSBwbHVzIGNoaWxkcmVuKSwgb3IgYG51bGxgIHdoZW5cbiAgICogbm90aGluZyBpcyBsb2FkaW5nIOKAlCBlaXRoZXIgdGhlIGNvbXBvbmVudCBsb2FkZWQgZnVsbHkgc3luY2hyb25vdXNseSBvciBpdHMgYXN5bmMgbG9hZCBoYXMgYWxyZWFkeSBzZXR0bGVkLlxuICAgKlxuICAgKiBMZXRzIGEgY2FsbGVyIHNjaGVkdWxlZCB3aGlsZSB0aGUgY29tcG9uZW50IGlzIHN0aWxsIGxvYWRpbmcgYXdhaXQgdGhlIGFzeW5jIGxvYWQgdGFpbCBiZWZvcmUgYWN0aW5nLCBpbnN0ZWFkIG9mXG4gICAqIHJhY2luZyBpdDoge0BsaW5rIENvbXBvbmVudC5vbmxvYWR9IGhhcyBydW4gKHNvIGBfbG9hZGVkYCBpcyBzZXQpIGJ1dCB7QGxpbmsgb25sb2FkQXN5bmN9IG1heSBub3QgaGF2ZSBmaW5pc2hlZC5cbiAgICpcbiAgICogSXQgY292ZXJzIHRoaXMgY29tcG9uZW50J3MgT1dOIGxvYWQgb25seS4gQSBjYWxsZXIgdGhhdCBhbHNvIGRlcGVuZHMgb24gYSBzaWJsaW5nJ3Mgc3RhdGUg4oCUIGEgbGF5b3V0LXJlYWR5IGhhbmRsZXJcbiAgICogcmVhZGluZyBzZXR0aW5ncyBpcyB0aGUgY29tbW9uIG9uZSDigJQgd2FudHMge0BsaW5rIGdldEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZX0sIHdoaWNoIGBMYXlvdXRSZWFkeUNvbXBvbmVudGBcbiAgICogdXNlcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGluLWZsaWdodCBsb2FkIHByb21pc2UsIG9yIGBudWxsYCBpZiBubyBsb2FkIGlzIGluIGZsaWdodC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRJbkZsaWdodExvYWRQcm9taXNlKCk6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG1vc3QgcmVjZW50IGxvYWQgcmVjb3JkZWQgYW55IGZhaWx1cmUuXG4gICAqXG4gICAqIFJlZmxlY3RzIHRoZSBvdXRjb21lIG9mIHRoZSBsYXN0IHtAbGluayBsb2FkfSAvIHtAbGluayBsb2FkV2l0aFByb21pc2VzfTogYHRydWVgIHdoZW4ge0BsaW5rIG9ubG9hZEFzeW5jfSBvciBhbnlcbiAgICogY2hpbGQncyBsb2FkIHRocmV3IChzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5KS4gVW5saWtlIHtAbGluayBsb2FkV2l0aFByb21pc2VzfSwgcmVhZGluZyB0aGlzIGRvZXMgTk9UXG4gICAqIHJlLXJhaXNlIHRoZSBjb2xsZWN0ZWQgZXJyb3JzIOKAlCBpdCBsZXRzIGEgYnlzdGFuZGVyIChlLmcuIGEgbGF5b3V0LXJlYWR5IGhhbmRsZXIgYXdhaXRpbmcgdGhlIGluLWZsaWdodCBsb2FkKSB0ZWxsXG4gICAqIHdoZXRoZXIgdGhlIGxvYWQgc3VjY2VlZGVkIHdpdGhvdXQgYWRvcHRpbmcgYSBmYWlsdXJlIHRoYXQgdGhlIGxvYWQncyBvd25lciBpcyBhbHJlYWR5IHJlc3BvbnNpYmxlIGZvci5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBsYXN0IGxvYWQgcmVjb3JkZWQgYXQgbGVhc3Qgb25lIGVycm9yLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBoYXNMb2FkRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRFcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubG9hZGVkLCBhcyBvcHBvc2VkIHRvIHNpbXBseSBub3QgaGF2aW5nIGJlZW4gbG9hZGVkIHlldC5cbiAgICpcbiAgICogQm90aCBzdGF0ZXMgbGVhdmUgYF9sb2FkZWRgIGZhbHNlLCBidXQgdGhleSBtZWFuIG9wcG9zaXRlIHRoaW5nczogYSBjb21wb25lbnQgdGhhdCB3YXMgbmV2ZXIgbG9hZGVkIGlzIHN0aWxsXG4gICAqIGFoZWFkIG9mIGl0cyBsaWZlY3ljbGUgKHF1ZXVlaW5nIGNoaWxkcmVuIGJlZm9yZSBsb2FkIGlzIGxlZ2l0aW1hdGUpLCB3aGlsZSBhbiB1bmxvYWRlZCBvbmUgaXMgYmVoaW5kIGl0IGFuZFxuICAgKiBtdXN0IG5vdCBiZSB1c2VkIGFueSBmdXJ0aGVyLiBUaGUgZGlzdGluY3Rpb24gaXMgdHJhY2tlZCBieSBhIGZsYWcgc2V0IGluIHtAbGluayBsb2FkfSwgTk9UIGJ5IGFuXG4gICAqIHtAbGluayBDb21wb25lbnQub251bmxvYWR9IG92ZXJyaWRlLCBiZWNhdXNlIHN1YmNsYXNzZXMgb3ZlcnJpZGUgYG9udW5sb2FkYCBhbmQgbWF5IG5vdCBjYWxsIGBzdXBlcmAuXG4gICAqXG4gICAqIFVzZSBpdCBpbiBhIGxvbmctcnVubmluZyBgYXN5bmNgIG1ldGhvZCB0byBhYmFuZG9uIHdvcmsgd2hvc2UgY29tcG9uZW50IHdhcyB1bmxvYWRlZCBtaWQtZmxpZ2h0LCB3aGVuXG4gICAqIHVud2luZGluZyB2aWEgdGhlIHtAbGluayBTaWxlbnRFcnJvcn0gdGhyb3duIGJ5IHtAbGluayBlbnN1cmVMb2FkZWR9IC8ge0BsaW5rIGFkZENoaWxkfSBpcyBub3QgZGVzaXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjb21wb25lbnQgd2FzIGxvYWRlZCBhdCBzb21lIHBvaW50IGFuZCBpcyBjdXJyZW50bHkgdW5sb2FkZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzVW5sb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQmVlbkxvYWRlZCAmJiAhdGhpcy5fbG9hZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcXVlbmNlcyBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCBzdGVwIGludG8gdGhlIGxvYWQgcHJvbWlzZS5cbiAgICpcbiAgICogVGhlIHN0ZXAgaXMgcHJlc3VtZWQgdG8gaGF2ZSBzdGFydGVkIHN5bmNocm9ub3VzbHkgKHNvIGFueSBgX2xvYWRlZGAgZmxhZyBpdCBzZXRzIGlzIGFscmVhZHkgdmlzaWJsZSk7IG9ubHkgdGhlXG4gICAqIGF3YWl0aW5nIG9mIGl0cyBhc3luYyB0YWlsIGlzIHNlcXVlbmNlZCBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGUgLSBUaGUgcmVzdWx0IG9mIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHN0ZXAuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZEVhZ2VyTG9hZFN0ZXAobG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgY2FwdHVyZWQgPSB0aGlzLmNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlKTtcbiAgICBpZiAoIWNhcHR1cmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmxvYWRQcm9taXNlO1xuICAgIHRoaXMuc2V0TG9hZFByb21pc2UocHJldmlvdXMgPyBwcmV2aW91cy50aGVuKCgpID0+IGNhcHR1cmVkKSA6IGNhcHR1cmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXF1ZW5jZXMgYSBkZWZlcnJlZCBsb2FkIHN0ZXAgaW50byB0aGUgbG9hZCBwcm9taXNlLCBydW5uaW5nIGl0IG9ubHkgYWZ0ZXIgcHJldmlvdXNseS1hcHBlbmRlZCBzdGVwcyBzZXR0bGUuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZFNlcXVlbnRpYWxMb2FkU3RlcChsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5sb2FkUHJvbWlzZTtcbiAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgIHRoaXMuc2V0TG9hZFByb21pc2UocHJldmlvdXMudGhlbigoKSA9PiB0aGlzLnJ1bkFuZENhcHR1cmUobG9hZFByb21pc2FibGVGdW5jdGlvbikpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjYXB0dXJlZCA9IHRoaXMuY2FwdHVyZVN5bmMobG9hZFByb21pc2FibGVGdW5jdGlvbik7XG4gICAgaWYgKGNhcHR1cmVkKSB7XG4gICAgICB0aGlzLnNldExvYWRQcm9taXNlKGNhcHR1cmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkcyBhIGxvYWQgZmFpbHVyZS5cbiAgICpcbiAgICogQSBmYWlsdXJlIHJhaXNlZCBieSBhIGNoaWxkIHtAbGluayBDb21wb25lbnRFeH0gaXMgaXRzZWxmIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn07IGl0IGlzIHJlY29yZGVkIGFzLWlzIHNvIHRoZVxuICAgKiBncm91cGluZyBieSBjaGlsZCBjb21wb25lbnQgaXMgcHJlc2VydmVkIChvd24gZmFpbHVyZXMgc3RheSBmbGF0LCBjaGlsZC1zdWJ0cmVlIGZhaWx1cmVzIHN0YXkgbmVzdGVkKS5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIHRocm93biB2YWx1ZSB0byByZWNvcmQuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVFcnJvcihlcnJvcjogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMubG9hZEVycm9ycy5wdXNoKEVycm9yV3JhcHBlci5jcmVhdGUoZXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcyBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCByZXN1bHQgc28gaXQgbmV2ZXIgcmVqZWN0czogYW55IGZhaWx1cmUgaXMgcmVjb3JkZWQgaW50byBgbG9hZEVycm9yc2AuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZSAtIFRoZSBsb2FkIHJlc3VsdCB0byBvYnNlcnZlLlxuICAgKiBAcmV0dXJucyBBIG5ldmVyLXJlamVjdGluZyB7QGxpbmsgUHJvbWlzZX0sIG9yIGBudWxsYCBpZiB0aGUgcmVzdWx0IGlzIGZ1bGx5IHN5bmNocm9ub3VzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGxvYWRQcm9taXNhYmxlID09PSBudWxsIHx8IGxvYWRQcm9taXNhYmxlID09PSB1bmRlZmluZWRcbiAgICAgID8gbnVsbFxuICAgICAgOiBQcm9taXNlLnJlc29sdmUobG9hZFByb21pc2FibGUpLnRoZW4obm9vcCkuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBsb2FkIHN0ZXAgc3luY2hyb25vdXNseSwgcmVjb3JkaW5nIGEgc3luY2hyb25vdXMgdGhyb3csIGFuZCB3cmFwcyBhbnkgYXN5bmMgdGFpbCBzbyBpdCBuZXZlciByZWplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGdW5jdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKiBAcmV0dXJucyBBIG5ldmVyLXJlamVjdGluZyB7QGxpbmsgUHJvbWlzZX0sIG9yIGBudWxsYCBpZiB0aGUgc3RlcCBpcyBmdWxseSBzeW5jaHJvbm91cy5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZVN5bmMobG9hZFByb21pc2FibGVGdW5jdGlvbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPjtcbiAgICB0cnkge1xuICAgICAgbG9hZFByb21pc2FibGUgPSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdExvYWRQcm9taXNhYmxlKGNvbXBvbmVudDogQ29tcG9uZW50KTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jaGlsZHJlblNldC5oYXMoY29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tY29uZnVzaW5nLXZvaWQtZXhwcmVzc2lvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uIC0tIEl0IGNhbiBiZSBgUHJvbWlzZTx2b2lkPmAgaW4gcnVudGltZS4gV2FudCBleHBsaWNpdGx5IGNhc3QgdG8gc2hvdyB3ZSBrbm93IGl0IG1heSBiZSBwcm9taXNlLCBkZXNwaXRlIHRoZSBkZWNsYXJlZCB0eXBlIGB2b2lkYC5cbiAgICByZXR1cm4gY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50RXggPyBjb21wb25lbnQubG9hZFdpdGhQcm9taXNlcygpIDogY29tcG9uZW50LmxvYWQoKSBhcyBQcm9taXNhYmxlPHZvaWQ+O1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kSW5GbGlnaHRBbmNlc3RyeUxvYWRQcm9taXNlKCk6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkUHJvbWlzZSA/PyB0aGlzLnBhcmVudENvbXBvbmVudD8uZmluZEluRmxpZ2h0QW5jZXN0cnlMb2FkUHJvbWlzZSgpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0TG9hZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZEVycm9ycyA9IFtdO1xuICAgIHRoaXMubG9hZFByb21pc2UgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBkZWZlcnJlZCBsb2FkIHN0ZXAsIHJlY29yZGluZyBhIHN5bmNocm9ub3VzIHRocm93IG9yIGFuIGFzeW5jIHJlamVjdGlvbiB3aXRob3V0IGV2ZXIgcmUtdGhyb3dpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZ1bmN0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkFuZENhcHR1cmUobG9hZFByb21pc2FibGVGdW5jdGlvbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgKGxvYWRQcm9taXNhYmxlRnVuY3Rpb24oKSA/PyB1bmRlZmluZWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkUHJvbWlzZShsb2FkUHJvbWlzZTogUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IGxvYWRQcm9taXNlV2l0aFJlc2V0OiBQcm9taXNlPHZvaWQ+ID0gbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkUHJvbWlzZSA9PT0gbG9hZFByb21pc2VXaXRoUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2FkUHJvbWlzZSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5sb2FkUHJvbWlzZSA9IGxvYWRQcm9taXNlV2l0aFJlc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEF3YWl0cyBpbi1mbGlnaHQgbG9hZHMgaW4gdGhlIGFuY2VzdHJ5IHVudGlsIG5vbmUgaXMgbGVmdC5cbiAgICpcbiAgICogTG9vcGVkIHJhdGhlciB0aGFuIGF3YWl0ZWQgb25jZSwgYmVjYXVzZSBhbiBhbmNlc3RvcidzIGxvYWQgY2FuIGdyb3cgd2hpbGUgaXQgaXMgYmVpbmcgYXdhaXRlZDogYSBjaGlsZCBhZGRlZFxuICAgKiB0byBhbiBhbHJlYWR5LWxvYWRlZCBjb21wb25lbnQgYXBwZW5kcyBpdHMgYXN5bmMgdGFpbCB0byB0aGF0IGNvbXBvbmVudCdzIGxvYWQgcHJvbWlzZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckFuY2VzdHJ5TG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgbG9hZFByb21pc2UgPSB0aGlzLmZpbmRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKTtcbiAgICB3aGlsZSAobG9hZFByb21pc2UpIHtcbiAgICAgIGF3YWl0IGxvYWRQcm9taXNlO1xuICAgICAgbG9hZFByb21pc2UgPSB0aGlzLmZpbmRJbkZsaWdodEFuY2VzdHJ5TG9hZFByb21pc2UoKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLGdCQUFnQjtBQUN6QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxpQkFBaUI7QUFFMUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFNQSxNQUFNLG9CQUFvQixVQUFnQztBQUFBLEVBQzlDLGNBQWMsb0JBQUksSUFBZTtBQUFBLEVBQzFDLGdCQUFnQjtBQUFBLEVBQ2hCLGFBQXNCLENBQUM7QUFBQSxFQUN2QixjQUFvQztBQUFBLEVBQ3BDLGtCQUFzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBb0I5QixTQUF1QyxXQUFtQztBQUN4RixRQUFJLEtBQUssV0FBVyxHQUFHO0FBQ3JCLFlBQU0sSUFBSSxZQUFZLCtCQUErQjtBQUFBLElBQ3ZEO0FBRUEsU0FBSyxVQUFVLEtBQUssU0FBUztBQUM3QixTQUFLLFlBQVksSUFBSSxTQUFTO0FBQzlCLFFBQUkscUJBQXFCLGFBQWE7QUFDcEMsZ0JBQVUsa0JBQWtCO0FBQUEsSUFDOUI7QUFFQSxRQUFJLEtBQUssU0FBUztBQUNoQixXQUFLLG9CQUFvQixLQUFLLHNCQUFzQixTQUFTLENBQUM7QUFBQSxJQUNoRTtBQUVBLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7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
|
|
@@ -51,4 +51,4 @@ function asDisposableComponent(component) {
|
|
|
51
51
|
export {
|
|
52
52
|
asDisposableComponent
|
|
53
53
|
};
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Rpc3Bvc2FibGUtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIGNvbXBvbmVudCBiYXNlIGNsYXNzIGFuZCB1dGlsaXRpZXMgZm9yIGB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRGlzcG9zYWJsZUV4IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuaW1wb3J0IHR5cGUgeyBXcml0YWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxudHlwZSBEaXNwb3NhYmxlQ29tcG9uZW50V3JhcHBlcjxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50PiA9IERpc3Bvc2FibGVFeCAmIFRDb21wb25lbnQ7XG5cbi8qKlxuICogQ29udmVydCBjb21wb25lbnQgdG8gYSB7QGxpbmsgRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2UgYnkgYWRkaW5nIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGEgY29udmVuaWVuY2VcbiAqIHtAbGluayBEaXNwb3NhYmxlRXguZGlzcG9zZX0gbWV0aG9kIHRoYXQgdW5sb2FkcyB0aGUgY29tcG9uZW50IHdoZW4gZGlzcG9zZWQuXG4gKlxuICogQW4gZXhpc3RpbmcgYFN5bWJvbC5kaXNwb3NlYCBpcyBwcmVzZXJ2ZWQ7IHRoZSBjb252ZW5pZW5jZSB7QGxpbmsgRGlzcG9zYWJsZUV4LmRpc3Bvc2V9IG1ldGhvZCBhbHdheXNcbiAqIGRlbGVnYXRlcyB0byBpdC4gVGhlIHBhc3NlZCBjb21wb25lbnQgaXMgbXV0YXRlZCBpbiBwbGFjZSBhbmQgcmV0dXJuZWQsIHNvIHRoZSBjYWxsIGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIHdyYXAsIGNvbnN0cmFpbmVkIHRvIGV4dGVuZCBDb21wb25lbnQuXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gd3JhcCB3aXRoIERpc3Bvc2FibGUgc3VwcG9ydC5cbiAqIEByZXR1cm5zIFRoZSBjb21wb25lbnQgY2FzdCB0byBgRGlzcG9zYWJsZUNvbXBvbmVudFdyYXBwZXJgIHdpdGggYFN5bWJvbC5kaXNwb3NlYCBhbmQgYGRpc3Bvc2VgXG4gKiAgIGF0dGFjaGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNEaXNwb3NhYmxlQ29tcG9uZW50PFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IERpc3Bvc2FibGVDb21wb25lbnRXcmFwcGVyPFRDb21wb25lbnQ+IHtcbiAgY29uc3QgZGlzcG9zYWJsZUV4ID0gY29tcG9uZW50IGFzIFBhcnRpYWw8V3JpdGFibGU8RGlzcG9zYWJsZUV4Pj47XG4gIGNvbnN0IHN5bWJvbERpc3Bvc2U6ICgpID0+IHZvaWQgPSBkaXNwb3NhYmxlRXhbU3ltYm9sLmRpc3Bvc2VdID8/ICgoKTogdm9pZCA9PiB7XG4gICAgY29tcG9uZW50LnVubG9hZCgpO1xuICB9KTtcbiAgZGlzcG9zYWJsZUV4W1N5bWJvbC5kaXNwb3NlXSA9IHN5bWJvbERpc3Bvc2U7XG4gIGRpc3Bvc2FibGVFeC5kaXNwb3NlID0gKCk6IHZvaWQgPT4ge1xuICAgIHN5bWJvbERpc3Bvc2UoKTtcbiAgfTtcbiAgcmV0dXJuIGRpc3Bvc2FibGVFeCBhcyBEaXNwb3NhYmxlQ29tcG9uZW50V3JhcHBlcjxUQ29tcG9uZW50Pjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQSxTQUFTLGlCQUFpQjtBQWlCbkIsU0FBUyxzQkFBb0QsV0FBK0Q7QUFDakksUUFBTSxlQUFlO0FBQ3JCLFFBQU0sZ0JBQTRCLGFBQWEsT0FBTyxPQUFPLE1BQU0sTUFBWTtBQUM3RSxjQUFVLE9BQU87QUFBQSxFQUNuQjtBQUNBLGVBQWEsT0FBTyxPQUFPLElBQUk7QUFDL0IsZUFBYSxVQUFVLE1BQVk7QUFDakMsa0JBQWM7QUFBQSxFQUNoQjtBQUNBLFNBQU87QUFDVDsiLCJuYW1lcyI6W119
|
|
@@ -26,6 +26,14 @@ export declare class EmbedExtensionsComponent extends ComponentEx {
|
|
|
26
26
|
* Registers the specified file extensions with the given embed type in the Obsidian app.
|
|
27
27
|
* The extensions will be automatically unregistered when the component is unloaded.
|
|
28
28
|
*
|
|
29
|
+
* The registration is all or nothing: Obsidian throws for an extension that is already registered (by the core or by
|
|
30
|
+
* another plugin), and in that case every extension this call registered before the conflict is unregistered again
|
|
31
|
+
* before the error is rethrown. An extension registered by someone else is never unregistered.
|
|
32
|
+
*
|
|
33
|
+
* The creator serves every surface that loads an embed: `![[file.ext#subpath]]` in Reading view and Live Preview,
|
|
34
|
+
* canvas file nodes and the page-preview hover popover. It receives the link's subpath with its leading `#`, or an
|
|
35
|
+
* empty string. Returning `null` makes Obsidian fall back to its generic file embed.
|
|
36
|
+
*
|
|
29
37
|
* @param extensions - An array of file extensions to register.
|
|
30
38
|
* @param embedCreator - The embed creator function to associate with the extensions.
|
|
31
39
|
*
|
|
@@ -19,6 +19,14 @@ class EmbedExtensionsComponent extends ComponentEx {
|
|
|
19
19
|
* Registers the specified file extensions with the given embed type in the Obsidian app.
|
|
20
20
|
* The extensions will be automatically unregistered when the component is unloaded.
|
|
21
21
|
*
|
|
22
|
+
* The registration is all or nothing: Obsidian throws for an extension that is already registered (by the core or by
|
|
23
|
+
* another plugin), and in that case every extension this call registered before the conflict is unregistered again
|
|
24
|
+
* before the error is rethrown. An extension registered by someone else is never unregistered.
|
|
25
|
+
*
|
|
26
|
+
* The creator serves every surface that loads an embed: `![[file.ext#subpath]]` in Reading view and Live Preview,
|
|
27
|
+
* canvas file nodes and the page-preview hover popover. It receives the link's subpath with its leading `#`, or an
|
|
28
|
+
* empty string. Returning `null` makes Obsidian fall back to its generic file embed.
|
|
29
|
+
*
|
|
22
30
|
* @param extensions - An array of file extensions to register.
|
|
23
31
|
* @param embedCreator - The embed creator function to associate with the extensions.
|
|
24
32
|
*
|
|
@@ -29,13 +37,22 @@ class EmbedExtensionsComponent extends ComponentEx {
|
|
|
29
37
|
*/
|
|
30
38
|
registerExtensions(extensions, embedCreator) {
|
|
31
39
|
this.ensureLoaded();
|
|
32
|
-
|
|
40
|
+
const registeredExtensions = [];
|
|
41
|
+
try {
|
|
42
|
+
for (const extension of extensions) {
|
|
43
|
+
this.app.embedRegistry.registerExtension(extension, embedCreator);
|
|
44
|
+
registeredExtensions.push(extension);
|
|
45
|
+
}
|
|
46
|
+
} catch (error) {
|
|
47
|
+
this.app.embedRegistry.unregisterExtensions(registeredExtensions);
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
33
50
|
this.register(() => {
|
|
34
|
-
this.app.embedRegistry.unregisterExtensions(
|
|
51
|
+
this.app.embedRegistry.unregisterExtensions(registeredExtensions);
|
|
35
52
|
});
|
|
36
53
|
}
|
|
37
54
|
}
|
|
38
55
|
export {
|
|
39
56
|
EmbedExtensionsComponent
|
|
40
57
|
};
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZW1iZWQtZXh0ZW5zaW9ucy1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyBjbGFzcyB7QGxpbmsgRW1iZWRFeHRlbnNpb25zQ29tcG9uZW50fSB0aGF0IHJlZ2lzdGVycyBlbWJlZCBleHRlbnNpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRW1iZWRDcmVhdG9yIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCByZWdpc3RlcnMgYW5kIHVucmVnaXN0ZXJzIGVtYmVkIGV4dGVuc2lvbnMuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoaXMgY29tcG9uZW50IGlzIHVzZWZ1bCBmb3IgcGx1Z2lucyB0aGF0IHdhbnQgdG8gcmVnaXN0ZXIgY3VzdG9tIGVtYmVkIHR5cGVzIGZvciBzcGVjaWZpYyBmaWxlIGV4dGVuc2lvbnMuXG4gKiBJdCBlbnN1cmVzIHRoYXQgdGhlIGV4dGVuc2lvbnMgYXJlIHJlZ2lzdGVyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBhbmQgdW5yZWdpc3RlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyB1bmxvYWRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVtYmVkRXh0ZW5zaW9uc0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBFbWJlZEV4dGVuc2lvbnNDb21wb25lbnR9IGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgc3BlY2lmaWVkIGZpbGUgZXh0ZW5zaW9ucyB3aXRoIHRoZSBnaXZlbiBlbWJlZCB0eXBlIGluIHRoZSBPYnNpZGlhbiBhcHAuXG4gICAqIFRoZSBleHRlbnNpb25zIHdpbGwgYmUgYXV0b21hdGljYWxseSB1bnJlZ2lzdGVyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIHVubG9hZGVkLlxuICAgKlxuICAgKiBUaGUgcmVnaXN0cmF0aW9uIGlzIGFsbCBvciBub3RoaW5nOiBPYnNpZGlhbiB0aHJvd3MgZm9yIGFuIGV4dGVuc2lvbiB0aGF0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAoYnkgdGhlIGNvcmUgb3IgYnlcbiAgICogYW5vdGhlciBwbHVnaW4pLCBhbmQgaW4gdGhhdCBjYXNlIGV2ZXJ5IGV4dGVuc2lvbiB0aGlzIGNhbGwgcmVnaXN0ZXJlZCBiZWZvcmUgdGhlIGNvbmZsaWN0IGlzIHVucmVnaXN0ZXJlZCBhZ2FpblxuICAgKiBiZWZvcmUgdGhlIGVycm9yIGlzIHJldGhyb3duLiBBbiBleHRlbnNpb24gcmVnaXN0ZXJlZCBieSBzb21lb25lIGVsc2UgaXMgbmV2ZXIgdW5yZWdpc3RlcmVkLlxuICAgKlxuICAgKiBUaGUgY3JlYXRvciBzZXJ2ZXMgZXZlcnkgc3VyZmFjZSB0aGF0IGxvYWRzIGFuIGVtYmVkOiBgIVtbZmlsZS5leHQjc3VicGF0aF1dYCBpbiBSZWFkaW5nIHZpZXcgYW5kIExpdmUgUHJldmlldyxcbiAgICogY2FudmFzIGZpbGUgbm9kZXMgYW5kIHRoZSBwYWdlLXByZXZpZXcgaG92ZXIgcG9wb3Zlci4gSXQgcmVjZWl2ZXMgdGhlIGxpbmsncyBzdWJwYXRoIHdpdGggaXRzIGxlYWRpbmcgYCNgLCBvciBhblxuICAgKiBlbXB0eSBzdHJpbmcuIFJldHVybmluZyBgbnVsbGAgbWFrZXMgT2JzaWRpYW4gZmFsbCBiYWNrIHRvIGl0cyBnZW5lcmljIGZpbGUgZW1iZWQuXG4gICAqXG4gICAqIEBwYXJhbSBleHRlbnNpb25zIC0gQW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zIHRvIHJlZ2lzdGVyLlxuICAgKiBAcGFyYW0gZW1iZWRDcmVhdG9yIC0gVGhlIGVtYmVkIGNyZWF0b3IgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhlIGV4dGVuc2lvbnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGNvbXBvbmVudC5yZWdpc3RlckV4dGVuc2lvbnMoWydleHQxJywgJ2V4dDInXSwgKGNvbnRleHQsIGZpbGUsIHN1YnBhdGgpID0+IG5ldyBNeUVtYmVkQ29tcG9uZW50KGNvbnRleHQsIGZpbGUsIHN1YnBhdGgpKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJFeHRlbnNpb25zKGV4dGVuc2lvbnM6IHN0cmluZ1tdLCBlbWJlZENyZWF0b3I6IEVtYmVkQ3JlYXRvcik6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG5cbiAgICBjb25zdCByZWdpc3RlcmVkRXh0ZW5zaW9uczogc3RyaW5nW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgZXh0ZW5zaW9ucykge1xuICAgICAgICB0aGlzLmFwcC5lbWJlZFJlZ2lzdHJ5LnJlZ2lzdGVyRXh0ZW5zaW9uKGV4dGVuc2lvbiwgZW1iZWRDcmVhdG9yKTtcbiAgICAgICAgcmVnaXN0ZXJlZEV4dGVuc2lvbnMucHVzaChleHRlbnNpb24pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFwcC5lbWJlZFJlZ2lzdHJ5LnVucmVnaXN0ZXJFeHRlbnNpb25zKHJlZ2lzdGVyZWRFeHRlbnNpb25zKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5hcHAuZW1iZWRSZWdpc3RyeS51bnJlZ2lzdGVyRXh0ZW5zaW9ucyhyZWdpc3RlcmVkRXh0ZW5zaW9ucyk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBU0EsU0FBUyxtQkFBbUI7QUFTckIsTUFBTSxpQ0FBaUMsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1qRCxZQUErQixLQUFVO0FBQzlDLFVBQU07QUFEOEI7QUFBQSxFQUV0QztBQUFBLEVBRnNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBd0IvQixtQkFBbUIsWUFBc0IsY0FBa0M7QUFDaEYsU0FBSyxhQUFhO0FBRWxCLFVBQU0sdUJBQWlDLENBQUM7QUFDeEMsUUFBSTtBQUNGLGlCQUFXLGFBQWEsWUFBWTtBQUNsQyxhQUFLLElBQUksY0FBYyxrQkFBa0IsV0FBVyxZQUFZO0FBQ2hFLDZCQUFxQixLQUFLLFNBQVM7QUFBQSxNQUNyQztBQUFBLElBQ0YsU0FBUyxPQUFPO0FBQ2QsV0FBSyxJQUFJLGNBQWMscUJBQXFCLG9CQUFvQjtBQUNoRSxZQUFNO0FBQUEsSUFDUjtBQUVBLFNBQUssU0FBUyxNQUFNO0FBQ2xCLFdBQUssSUFBSSxjQUFjLHFCQUFxQixvQkFBb0I7QUFBQSxJQUNsRSxDQUFDO0FBQUEsRUFDSDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|